(expression: string | Cron.Cron, tz?: DateTime.TimeZone | string)
| 478 | (expression: Cron.Cron): Schedule.Schedule<[number, number]> |
| 479 | (expression: string, tz?: DateTime.TimeZone | string): Schedule.Schedule<[number, number]> |
| 480 | } = (expression: string | Cron.Cron, tz?: DateTime.TimeZone | string): Schedule.Schedule<[number, number]> => { |
| 481 | const parsed = Cron.isCron(expression) ? Either.right(expression) : Cron.parse(expression, tz) |
| 482 | return makeWithState<[boolean, [number, number, number]], unknown, [number, number]>( |
| 483 | [true, [Number.MIN_SAFE_INTEGER, 0, 0]], |
| 484 | (now, _, [initial, previous]) => { |
| 485 | if (now < previous[0]) { |
| 486 | return core.succeed([ |
| 487 | [false, previous], |
| 488 | [previous[1], previous[2]], |
| 489 | ScheduleDecision.continueWith(Interval.make(previous[1], previous[2])) |
| 490 | ]) |
| 491 | } |
| 492 | |
| 493 | if (Either.isLeft(parsed)) { |
| 494 | return core.die(parsed.left) |
| 495 | } |
| 496 | |
| 497 | const cron = parsed.right |
| 498 | const date = new Date(now) |
| 499 | |
| 500 | let next: number |
| 501 | if (initial && Cron.match(cron, date)) { |
| 502 | next = now |
| 503 | } |
| 504 | |
| 505 | next = Cron.next(cron, date).getTime() |
| 506 | const start = beginningOfSecond(next) |
| 507 | const end = endOfSecond(next) |
| 508 | return core.succeed([ |
| 509 | [false, [next, start, end]], |
| 510 | [start, end], |
| 511 | ScheduleDecision.continueWith(Interval.make(start, end)) |
| 512 | ]) |
| 513 | } |
| 514 | ) |
| 515 | } |
| 516 | |
| 517 | /** @internal */ |
| 518 | export const dayOfMonth = (day: number): Schedule.Schedule<number> => { |
nothing calls this directly
no test coverage detected
searching dependent graphs…