@northguild/gmt 1.17.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -2480
- package/dist/calendar/calculate/bucketRange.d.ts +12 -4
- package/dist/calendar/calculate/bucketRange.js +20 -63
- package/dist/calendar/calculate/floorToZone.d.ts +14 -4
- package/dist/calendar/calculate/floorToZone.js +18 -9
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
- package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
- package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
- package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
- package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
- package/dist/calendar/calculate/getOrdinalDate.js +2 -3
- package/dist/calendar/calculate/getQuarter.d.ts +21 -9
- package/dist/calendar/calculate/getQuarter.js +8 -12
- package/dist/calendar/hours/addOperatingTime.d.ts +59 -0
- package/dist/calendar/hours/addOperatingTime.js +65 -0
- package/dist/calendar/hours/index.d.ts +7 -0
- package/dist/calendar/hours/index.js +7 -0
- package/dist/calendar/hours/isOpenAt.d.ts +45 -0
- package/dist/calendar/hours/isOpenAt.js +50 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +55 -0
- package/dist/calendar/hours/nextCloseAt.js +57 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +51 -0
- package/dist/calendar/hours/nextOpenAt.js +53 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +48 -0
- package/dist/calendar/hours/operatingIntervals.js +57 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +45 -0
- package/dist/calendar/hours/operatingTimeBetween.js +54 -0
- package/dist/calendar/hours/recurringWindows.d.ts +68 -0
- package/dist/calendar/hours/recurringWindows.js +88 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
- package/dist/duration/calculate/durationFromUnits.js +67 -0
- package/dist/duration/calculate/getDurationUnit.d.ts +2 -2
- package/dist/duration/calculate/getDurationUnit.js +2 -2
- package/dist/duration/calculate/index.d.ts +3 -1
- package/dist/duration/calculate/index.js +3 -1
- package/dist/duration/calculate/negateDuration.d.ts +1 -1
- package/dist/duration/calculate/negateDuration.js +1 -1
- package/dist/duration/calculate/totalDuration.d.ts +73 -0
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +29 -27
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +13 -7
- package/dist/duration/compare/compareDurations.js +4 -7
- package/dist/duration/format/formatDuration.d.ts +16 -4
- package/dist/duration/format/formatDuration.js +4 -5
- package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
- package/dist/duration/normalize/normalizeDuration.js +6 -15
- package/dist/duration/parse/parseDuration.d.ts +21 -3
- package/dist/duration/parse/parseDuration.js +1 -3
- package/dist/duty/calculate/dutyDayFor.d.ts +38 -0
- package/dist/duty/calculate/dutyDayFor.js +71 -0
- package/dist/duty/calculate/dutyTotals.d.ts +24 -0
- package/dist/duty/calculate/dutyTotals.js +41 -0
- package/dist/duty/calculate/dutyViolations.d.ts +74 -0
- package/dist/duty/calculate/dutyViolations.js +65 -0
- package/dist/duty/calculate/evaluateDutyLog.d.ts +77 -0
- package/dist/duty/calculate/evaluateDutyLog.js +75 -0
- package/dist/duty/calculate/index.d.ts +7 -0
- package/dist/duty/calculate/index.js +7 -0
- package/dist/duty/calculate/longestRun.d.ts +28 -0
- package/dist/duty/calculate/longestRun.js +54 -0
- package/dist/duty/calculate/qualifyingRestPairs.d.ts +37 -0
- package/dist/duty/calculate/qualifyingRestPairs.js +58 -0
- package/dist/duty/calculate/qualifyingRests.d.ts +27 -0
- package/dist/duty/calculate/qualifyingRests.js +49 -0
- package/dist/duty/index.d.ts +3 -0
- package/dist/duty/index.js +4 -0
- package/dist/duty/validate/index.d.ts +1 -0
- package/dist/duty/validate/index.js +1 -0
- package/dist/duty/validate/isValidDutyLog.d.ts +24 -0
- package/dist/duty/validate/isValidDutyLog.js +34 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/instant/convert/classifyLocal.d.ts +5 -1
- package/dist/instant/convert/classifyLocal.js +16 -6
- package/dist/instant/convert/fromOffsetInstant.d.ts +7 -1
- package/dist/instant/convert/fromOffsetInstant.js +9 -2
- package/dist/instant/convert/resolveLocal.d.ts +18 -8
- package/dist/instant/convert/resolveLocal.js +21 -17
- package/dist/instant/convert/toOffsetInstant.d.ts +33 -16
- package/dist/instant/convert/toOffsetInstant.js +28 -13
- package/dist/instant/index.d.ts +1 -0
- package/dist/instant/index.js +1 -0
- package/dist/instant/validate/index.d.ts +1 -0
- package/dist/instant/validate/index.js +1 -0
- package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
- package/dist/instant/validate/isValidUtcOffset.js +35 -0
- package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
- package/dist/intermodal/calculate/billingTimeline.js +2 -2
- package/dist/intermodal/calculate/chargeableDays.d.ts +19 -11
- package/dist/intermodal/calculate/chargeableDays.js +13 -10
- package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
- package/dist/intermodal/calculate/demurrageClock.js +7 -7
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +12 -4
- package/dist/intermodal/calculate/freeTimeExpiry.js +19 -8
- package/dist/intermodal/calculate/index.d.ts +1 -0
- package/dist/intermodal/calculate/index.js +1 -0
- package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
- package/dist/intermodal/calculate/multimodalETA.js +145 -0
- package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
- package/dist/intermodal/format/bolTimestamp.js +78 -0
- package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
- package/dist/intermodal/format/formatEdifactDate.js +42 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
- package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
- package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
- package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactTime.js +43 -0
- package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
- package/dist/intermodal/format/formatEpcisEvent.js +79 -0
- package/dist/intermodal/format/formatX12Date.d.ts +35 -0
- package/dist/intermodal/format/formatX12Date.js +43 -0
- package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
- package/dist/intermodal/format/formatX12DateRange.js +45 -0
- package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
- package/dist/intermodal/format/formatX12DateTime.js +47 -0
- package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
- package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
- package/dist/intermodal/format/formatX12Time.d.ts +42 -0
- package/dist/intermodal/format/formatX12Time.js +50 -0
- package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
- package/dist/intermodal/format/formatX12TimeElement.js +54 -0
- package/dist/intermodal/format/index.d.ts +14 -0
- package/dist/intermodal/format/index.js +14 -0
- package/dist/intermodal/index.d.ts +3 -0
- package/dist/intermodal/index.js +3 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
- package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
- package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
- package/dist/intermodal/parse/index.d.ts +18 -0
- package/dist/intermodal/parse/index.js +18 -0
- package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactDate.js +45 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
- package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactTime.js +45 -0
- package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
- package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
- package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
- package/dist/intermodal/parse/parseX12Date.js +47 -0
- package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
- package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
- package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
- package/dist/intermodal/parse/parseX12DateRange.js +52 -0
- package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
- package/dist/intermodal/parse/parseX12DateTime.js +53 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
- package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
- package/dist/intermodal/parse/parseX12Time.js +77 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
- package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
- package/dist/intermodal/validate/index.d.ts +18 -0
- package/dist/intermodal/validate/index.js +18 -0
- package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
- package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
- package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
- package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
- package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
- package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
- package/dist/intermodal/validate/isValidX12Date.js +30 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
- package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
- package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
- package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
- package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12Time.js +40 -0
- package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
- package/dist/internal/businessCalendar.d.ts +5 -0
- package/dist/internal/businessCalendar.js +9 -10
- package/dist/internal/cycleFieldValue.d.ts +6 -4
- package/dist/internal/cycleFieldValue.js +6 -4
- package/dist/internal/daylightTime.d.ts +33 -0
- package/dist/internal/daylightTime.js +164 -0
- package/dist/internal/durationUntilString.js +4 -3
- package/dist/internal/dutyEngine.d.ts +125 -0
- package/dist/internal/dutyEngine.js +1746 -0
- package/dist/internal/dutyLog.d.ts +27 -0
- package/dist/internal/dutyLog.js +47 -0
- package/dist/internal/dutyPeriods.d.ts +135 -0
- package/dist/internal/dutyPeriods.js +369 -0
- package/dist/internal/dutyRules.d.ts +197 -0
- package/dist/internal/dutyRules.js +484 -0
- package/dist/internal/ediDateTimeFields.d.ts +97 -0
- package/dist/internal/ediDateTimeFields.js +288 -0
- package/dist/internal/ediDateTimeWriter.d.ts +92 -0
- package/dist/internal/ediDateTimeWriter.js +298 -0
- package/dist/internal/ediGrammar.d.ts +158 -0
- package/dist/internal/ediGrammar.js +384 -0
- package/dist/internal/englishCalendarNames.d.ts +3 -1
- package/dist/internal/englishCalendarNames.js +4 -3
- package/dist/internal/epochNanoseconds.d.ts +2 -0
- package/dist/internal/epochNanoseconds.js +2 -0
- package/dist/internal/exactDuration.d.ts +37 -0
- package/dist/internal/exactDuration.js +64 -0
- package/dist/internal/exactMoment.d.ts +72 -0
- package/dist/internal/exactMoment.js +114 -0
- package/dist/internal/fiscalCalendar.d.ts +4 -3
- package/dist/internal/fiscalCalendar.js +4 -3
- package/dist/internal/formatCalendarDays.d.ts +2 -2
- package/dist/internal/formatRelativeDuration.d.ts +21 -1
- package/dist/internal/formatRelativeDuration.js +47 -7
- package/dist/internal/freeTimeLedger.d.ts +5 -0
- package/dist/internal/freeTimeLedger.js +11 -2
- package/dist/internal/index.d.ts +12 -4
- package/dist/internal/index.js +16 -4
- package/dist/internal/instantFormatOptions.js +2 -1
- package/dist/internal/instantNanoseconds.d.ts +75 -9
- package/dist/internal/instantNanoseconds.js +192 -11
- package/dist/internal/intervalNanoseconds.js +2 -1
- package/dist/internal/isObject.d.ts +13 -6
- package/dist/internal/isObject.js +14 -7
- package/dist/internal/isoYearString.d.ts +21 -0
- package/dist/internal/isoYearString.js +27 -0
- package/dist/internal/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/maxPieces.js +2 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +5 -2
- package/dist/internal/normalizeTimeZone.js +5 -2
- package/dist/internal/operatingSchedule.d.ts +138 -0
- package/dist/internal/operatingSchedule.js +756 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +12 -5
- package/dist/internal/patternToken.js +59 -25
- package/dist/internal/plainDateUntil.js +10 -6
- package/dist/internal/punctuality.d.ts +38 -0
- package/dist/internal/punctuality.js +59 -0
- package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
- package/dist/internal/readDateTimeFormatOptions.js +93 -0
- package/dist/internal/readDurationUnits.d.ts +34 -0
- package/dist/internal/readDurationUnits.js +78 -0
- package/dist/internal/readSetFields.d.ts +50 -0
- package/dist/internal/readSetFields.js +179 -0
- package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
- package/dist/internal/resolveDurationRelativeTo.js +11 -1
- package/dist/internal/resolveRelativeRounding.d.ts +17 -6
- package/dist/internal/resolveRelativeRounding.js +27 -7
- package/dist/internal/resolveRelativeUnit.d.ts +30 -0
- package/dist/internal/resolveRelativeUnit.js +40 -0
- package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- package/dist/internal/startOrEndOfUnix.d.ts +2 -1
- package/dist/internal/startOrEndOfUnix.js +9 -6
- package/dist/internal/startOrEndOfZoned.js +2 -3
- package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
- package/dist/internal/temporalCompat/capabilities.js +35 -3
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/repros.d.ts +1 -1
- package/dist/internal/temporalCompat/repros.js +157 -0
- package/dist/internal/timestampEvents.d.ts +32 -0
- package/dist/internal/timestampEvents.js +76 -0
- package/dist/internal/twoDigitYear.d.ts +19 -0
- package/dist/internal/twoDigitYear.js +22 -0
- package/dist/internal/unixEpochValue.js +3 -2
- package/dist/internal/unixWallClock.d.ts +24 -0
- package/dist/internal/unixWallClock.js +35 -0
- package/dist/internal/utcWallClock.d.ts +20 -0
- package/dist/internal/utcWallClock.js +32 -0
- package/dist/internal/yearWindowStart.d.ts +28 -0
- package/dist/internal/yearWindowStart.js +52 -0
- package/dist/internal/zoneBucketCap.d.ts +18 -0
- package/dist/internal/zoneBucketCap.js +64 -0
- package/dist/internal/zoneFrame.d.ts +180 -0
- package/dist/internal/zoneFrame.js +221 -0
- package/dist/internal/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- package/dist/internal/zonedNowUnitValue.d.ts +7 -4
- package/dist/internal/zonedNowUnitValue.js +8 -4
- package/dist/internal/zonedTransitionSearch.d.ts +27 -0
- package/dist/internal/zonedTransitionSearch.js +218 -0
- package/dist/internal/zonedWallClock.d.ts +21 -7
- package/dist/internal/zonedWallClock.js +87 -18
- package/dist/internal/zonedWallClockDifference.js +4 -4
- package/dist/internal/zonedWallClockOperations.d.ts +31 -15
- package/dist/internal/zonedWallClockOperations.js +93 -43
- package/dist/interval/validate/isValidInterval.d.ts +6 -3
- package/dist/interval/validate/isValidInterval.js +6 -3
- package/dist/plain/calculate/addDate.d.ts +11 -8
- package/dist/plain/calculate/addDate.js +9 -15
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +5 -11
- package/dist/plain/calculate/addTime.js +4 -7
- package/dist/plain/calculate/cycleDate.d.ts +16 -7
- package/dist/plain/calculate/cycleDate.js +3 -7
- package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
- package/dist/plain/calculate/cycleDateTime.js +1 -4
- package/dist/plain/calculate/cycleTime.d.ts +10 -5
- package/dist/plain/calculate/cycleTime.js +3 -5
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDate.js +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.js +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +8 -3
- package/dist/plain/calculate/endOfDate.js +1 -3
- package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
- package/dist/plain/calculate/endOfDateTime.js +1 -5
- package/dist/plain/calculate/endOfTime.d.ts +9 -3
- package/dist/plain/calculate/endOfTime.js +1 -2
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
- package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
- package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
- package/dist/plain/calculate/getWeekOfMonth.js +7 -4
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
- package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
- package/dist/plain/calculate/getWeeksInMonth.js +5 -2
- package/dist/plain/calculate/nextWeekday.d.ts +7 -3
- package/dist/plain/calculate/nextWeekday.js +1 -3
- package/dist/plain/calculate/previousWeekday.d.ts +7 -3
- package/dist/plain/calculate/previousWeekday.js +1 -3
- package/dist/plain/calculate/roundDate.d.ts +20 -7
- package/dist/plain/calculate/roundDate.js +3 -10
- package/dist/plain/calculate/roundDateTime.d.ts +22 -8
- package/dist/plain/calculate/roundDateTime.js +3 -11
- package/dist/plain/calculate/roundTime.d.ts +20 -4
- package/dist/plain/calculate/roundTime.js +3 -7
- package/dist/plain/calculate/setDate.d.ts +27 -8
- package/dist/plain/calculate/setDate.js +28 -12
- package/dist/plain/calculate/setDateTime.d.ts +23 -8
- package/dist/plain/calculate/setDateTime.js +23 -12
- package/dist/plain/calculate/setTime.d.ts +23 -7
- package/dist/plain/calculate/setTime.js +25 -12
- package/dist/plain/calculate/startOfDate.d.ts +8 -2
- package/dist/plain/calculate/startOfDate.js +1 -2
- package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
- package/dist/plain/calculate/startOfDateTime.js +1 -2
- package/dist/plain/calculate/startOfTime.d.ts +9 -2
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +5 -11
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +5 -11
- package/dist/plain/calculate/subtractTime.js +4 -7
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
- package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
- package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
- package/dist/plain/compare/areDatesEqualBy.js +8 -6
- package/dist/plain/compare/isBetweenDate.d.ts +13 -2
- package/dist/plain/compare/isBetweenDate.js +4 -4
- package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenDateTime.js +4 -4
- package/dist/plain/compare/isBetweenTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenTime.js +4 -4
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +1 -1
- package/dist/plain/compare/isThisUnit.js +1 -1
- package/dist/plain/format/formatCalendar.d.ts +21 -14
- package/dist/plain/format/formatCalendar.js +23 -17
- package/dist/plain/format/formatDate.js +5 -3
- package/dist/plain/format/formatDateRange.js +4 -2
- package/dist/plain/format/formatDateTime.js +4 -2
- package/dist/plain/format/formatDateTimeRange.js +4 -2
- package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
- package/dist/plain/format/formatDateTimeToParts.js +10 -6
- package/dist/plain/format/formatDateToParts.d.ts +13 -2
- package/dist/plain/format/formatDateToParts.js +8 -4
- package/dist/plain/format/formatRelativeDate.d.ts +16 -3
- package/dist/plain/format/formatRelativeDate.js +28 -16
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +10 -6
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +23 -14
- package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
- package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +7 -7
- package/dist/plain/format/formatTime.js +4 -2
- package/dist/plain/format/index.d.ts +1 -1
- package/dist/plain/format/index.js +1 -1
- package/dist/plain/get/getNowUnit.d.ts +2 -0
- package/dist/plain/get/getNowUnit.js +2 -0
- package/dist/plain/get/getYear.d.ts +2 -0
- package/dist/plain/get/getYear.js +4 -3
- package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
- package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDate.js +1 -3
- package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
- package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
- package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDate.js +2 -0
- package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
- package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtTime.js +2 -0
- package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
- package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.js +2 -2
- package/dist/plain/interval/intervalXorDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.js +2 -2
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
- package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
- package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
- package/dist/plain/map/mapDatesInRange.d.ts +8 -4
- package/dist/plain/map/mapDatesInRange.js +1 -4
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +25 -9
- package/dist/plain/parse/parseDateTimeWithPattern.js +29 -11
- package/dist/plain/parse/parseDateWithPattern.d.ts +26 -9
- package/dist/plain/parse/parseDateWithPattern.js +30 -11
- package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
- package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +8 -8
- package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +11 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDate.js +8 -4
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +8 -4
- package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDate.js +2 -6
- package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
- package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
- package/dist/plain/parse/parseYearFromDate.js +7 -3
- package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
- package/dist/plain/parse/parseYearFromDateTime.js +6 -3
- package/dist/plain/validate/index.d.ts +1 -0
- package/dist/plain/validate/index.js +1 -0
- package/dist/plain/validate/isValidDateRange.d.ts +19 -4
- package/dist/plain/validate/isValidDateRange.js +1 -4
- package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidDateTimeRange.js +2 -5
- package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidTimeRange.js +2 -5
- package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
- package/dist/precision/convert/fromExcelSerial.js +4 -5
- package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
- package/dist/precision/convert/fromNanoseconds.js +9 -3
- package/dist/precision/convert/toExcelSerial.d.ts +9 -3
- package/dist/precision/convert/toExcelSerial.js +3 -4
- package/dist/precision/convert/toNanoseconds.d.ts +11 -6
- package/dist/precision/convert/toNanoseconds.js +11 -6
- package/dist/precision/validate/isValidInstant.d.ts +12 -3
- package/dist/precision/validate/isValidInstant.js +12 -3
- package/dist/regex/epcis.d.ts +60 -0
- package/dist/regex/epcis.js +60 -0
- package/dist/regex/http-date.d.ts +6 -4
- package/dist/regex/http-date.js +6 -4
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +1 -0
- package/dist/regex/rfc-2822.d.ts +2 -0
- package/dist/regex/rfc-2822.js +2 -0
- package/dist/regex/rfc-3339.d.ts +3 -1
- package/dist/regex/rfc-3339.js +3 -1
- package/dist/regex/sql-date-time.d.ts +2 -1
- package/dist/regex/sql-date-time.js +2 -1
- package/dist/regex/time-zone-like.d.ts +3 -2
- package/dist/regex/time-zone-like.js +3 -2
- package/dist/regex/utc-offset.d.ts +2 -1
- package/dist/regex/utc-offset.js +2 -1
- package/dist/span/calculate/spanMs.d.ts +10 -4
- package/dist/span/calculate/spanMs.js +10 -4
- package/dist/span/calculate/spanNs.d.ts +10 -4
- package/dist/span/calculate/spanNs.js +10 -4
- package/dist/span/validate/isValidSpan.d.ts +8 -3
- package/dist/span/validate/isValidSpan.js +8 -3
- package/dist/transport/calculate/bestAvailable.d.ts +47 -0
- package/dist/transport/calculate/bestAvailable.js +76 -0
- package/dist/transport/calculate/crossingTime.d.ts +63 -0
- package/dist/transport/calculate/crossingTime.js +81 -0
- package/dist/transport/calculate/cutoffAt.d.ts +95 -0
- package/dist/transport/calculate/cutoffAt.js +211 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +75 -0
- package/dist/transport/calculate/cutoffSchedule.js +73 -0
- package/dist/transport/calculate/dwellTime.d.ts +22 -8
- package/dist/transport/calculate/dwellTime.js +18 -9
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +8 -0
- package/dist/transport/calculate/index.js +8 -0
- package/dist/transport/calculate/nextDeparture.d.ts +78 -0
- package/dist/transport/calculate/nextDeparture.js +131 -0
- package/dist/transport/calculate/punctualityRate.d.ts +42 -0
- package/dist/transport/calculate/punctualityRate.js +59 -0
- package/dist/transport/calculate/scheduleDelivery.d.ts +158 -0
- package/dist/transport/calculate/scheduleDelivery.js +305 -0
- package/dist/transport/calculate/transitTime.d.ts +21 -3
- package/dist/transport/calculate/transitTime.js +29 -46
- package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
- package/dist/transport/compare/classifyPunctuality.js +64 -0
- package/dist/transport/compare/index.d.ts +4 -0
- package/dist/transport/compare/index.js +4 -0
- package/dist/transport/compare/isPastCutoff.d.ts +33 -0
- package/dist/transport/compare/isPastCutoff.js +48 -0
- package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
- package/dist/transport/compare/scheduleDeviation.js +53 -0
- package/dist/transport/compare/timeToCutoff.d.ts +31 -0
- package/dist/transport/compare/timeToCutoff.js +47 -0
- package/dist/transport/convert/etaAtZone.d.ts +13 -1
- package/dist/transport/convert/etaAtZone.js +15 -5
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.js +1 -0
- package/dist/types/business-calendar.d.ts +20 -14
- package/dist/types/calendar-options.d.ts +15 -3
- package/dist/types/date-cycle-field.d.ts +5 -0
- package/dist/types/date-duration-unit.d.ts +4 -0
- package/dist/types/date-time-cycle-field.d.ts +4 -0
- package/dist/types/date-time-duration-units.d.ts +4 -0
- package/dist/types/date-time-unit.d.ts +4 -0
- package/dist/types/date-unit.d.ts +4 -0
- package/dist/types/disambiguation.d.ts +8 -0
- package/dist/types/duration-relative-to.d.ts +8 -0
- package/dist/types/duration-string-options.d.ts +28 -0
- package/dist/types/duty.d.ts +777 -0
- package/dist/types/edi.d.ts +407 -0
- package/dist/types/edi.js +0 -0
- package/dist/types/epcis.d.ts +25 -0
- package/dist/types/epcis.js +0 -0
- package/dist/types/exact-duration-unit.d.ts +8 -0
- package/dist/types/exact-duration-unit.js +0 -0
- package/dist/types/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +22 -11
- package/dist/types/index.d.ts +7 -1
- package/dist/types/index.js +7 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +72 -0
- package/dist/types/operating-schedule.js +0 -0
- package/dist/types/overflow.d.ts +6 -0
- package/dist/types/relative-rounding-method.d.ts +6 -0
- package/dist/types/relative-time-options.d.ts +33 -5
- package/dist/types/rounding-options.d.ts +27 -0
- package/dist/types/time-cycle-field.d.ts +4 -0
- package/dist/types/time-duration-unit.d.ts +4 -0
- package/dist/types/time-unit.d.ts +4 -0
- package/dist/types/transport-timestamps.d.ts +54 -0
- package/dist/types/transport-timestamps.js +0 -0
- package/dist/types/two-digit-year.d.ts +23 -0
- package/dist/types/two-digit-year.js +0 -0
- package/dist/types/zone-bucket-unit.d.ts +1 -1
- package/dist/unix/calculate/addUnix.d.ts +28 -5
- package/dist/unix/calculate/addUnix.js +15 -16
- package/dist/unix/calculate/diffUnix.d.ts +21 -3
- package/dist/unix/calculate/diffUnix.js +12 -9
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +21 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +11 -8
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/endOfUnix.d.ts +29 -4
- package/dist/unix/calculate/endOfUnix.js +8 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +27 -4
- package/dist/unix/calculate/isBetweenUnix.js +7 -9
- package/dist/unix/calculate/roundUnix.d.ts +39 -3
- package/dist/unix/calculate/roundUnix.js +16 -12
- package/dist/unix/calculate/setUnix.d.ts +58 -12
- package/dist/unix/calculate/setUnix.js +37 -25
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/startOfUnix.d.ts +29 -4
- package/dist/unix/calculate/startOfUnix.js +8 -4
- package/dist/unix/calculate/subtractUnix.d.ts +27 -5
- package/dist/unix/calculate/subtractUnix.js +14 -16
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +33 -7
- package/dist/unix/compare/areUnixEqualBy.js +20 -9
- package/dist/unix/compare/isAfterUnix.d.ts +7 -1
- package/dist/unix/compare/isAfterUnix.js +1 -1
- package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
- package/dist/unix/compare/isBeforeUnix.js +1 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +7 -8
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +7 -8
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +7 -8
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +14 -5
- package/dist/unix/convert/convertUnixToZoned.js +8 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +31 -19
- package/dist/unix/format/formatCalendarUnix.js +10 -6
- package/dist/unix/format/formatRelativeUnix.d.ts +62 -5
- package/dist/unix/format/formatRelativeUnix.js +16 -10
- package/dist/unix/format/formatUnix.d.ts +29 -6
- package/dist/unix/format/formatUnix.js +12 -7
- package/dist/unix/get/getUnixDay.d.ts +1 -3
- package/dist/unix/get/getUnixDay.js +5 -12
- package/dist/unix/get/getUnixHour.d.ts +1 -3
- package/dist/unix/get/getUnixHour.js +5 -12
- package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
- package/dist/unix/get/getUnixMicrosecond.js +4 -11
- package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
- package/dist/unix/get/getUnixMillisecond.js +5 -12
- package/dist/unix/get/getUnixMinute.d.ts +1 -3
- package/dist/unix/get/getUnixMinute.js +5 -12
- package/dist/unix/get/getUnixMonth.d.ts +1 -3
- package/dist/unix/get/getUnixMonth.js +5 -12
- package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
- package/dist/unix/get/getUnixNanosecond.js +4 -11
- package/dist/unix/get/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- package/dist/unix/get/getUnixNowUnit.d.ts +2 -0
- package/dist/unix/get/getUnixNowUnit.js +2 -0
- package/dist/unix/get/getUnixSecond.d.ts +1 -3
- package/dist/unix/get/getUnixSecond.js +5 -12
- package/dist/unix/get/getUnixYear.d.ts +3 -3
- package/dist/unix/get/getUnixYear.js +5 -12
- package/dist/unix/interval/intervalCountUnix.d.ts +23 -5
- package/dist/unix/interval/intervalCountUnix.js +9 -5
- package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
- package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
- package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +41 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +18 -12
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +24 -6
- package/dist/unix/interval/intervalLengthUnix.js +10 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +21 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +11 -8
- package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
- package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
- package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
- package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +50 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +33 -22
- package/dist/unix/parse/parseDateFromUnix.d.ts +15 -2
- package/dist/unix/parse/parseDateFromUnix.js +4 -5
- package/dist/unix/parse/parseDayFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +15 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +3 -3
- package/dist/unix/parse/parseHourFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseTimeFromUnix.js +5 -5
- package/dist/unix/parse/parseUnitFromUnix.d.ts +29 -4
- package/dist/unix/parse/parseUnitFromUnix.js +23 -17
- package/dist/unix/parse/parseWeekFromUnix.d.ts +24 -7
- package/dist/unix/parse/parseWeekFromUnix.js +7 -11
- package/dist/unix/parse/parseYearFromUnix.d.ts +20 -3
- package/dist/unix/parse/parseYearFromUnix.js +6 -3
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +5 -11
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +16 -3
- package/dist/utc/calculate/endOfUtc.js +2 -3
- package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
- package/dist/utc/calculate/isBetweenUtc.js +4 -4
- package/dist/utc/calculate/roundUtc.d.ts +26 -9
- package/dist/utc/calculate/roundUtc.js +3 -12
- package/dist/utc/calculate/setUtc.d.ts +23 -7
- package/dist/utc/calculate/setUtc.js +23 -12
- package/dist/utc/calculate/startOfUtc.d.ts +15 -2
- package/dist/utc/calculate/startOfUtc.js +1 -2
- package/dist/utc/calculate/subtractUtc.d.ts +7 -4
- package/dist/utc/calculate/subtractUtc.js +5 -11
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +14 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +12 -10
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +15 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +14 -16
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +11 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +9 -9
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
- package/dist/utc/convert/convertUtcToZoned.js +5 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +23 -8
- package/dist/utc/format/formatCalendarUtc.js +14 -7
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +8 -8
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +8 -8
- package/dist/utc/format/formatRelativeUtc.d.ts +38 -10
- package/dist/utc/format/formatRelativeUtc.js +22 -16
- package/dist/utc/format/formatUtc.d.ts +22 -15
- package/dist/utc/format/formatUtc.js +12 -8
- package/dist/utc/format/index.d.ts +1 -1
- package/dist/utc/format/index.js +1 -1
- package/dist/utc/get/getUtcDay.d.ts +1 -3
- package/dist/utc/get/getUtcDay.js +5 -12
- package/dist/utc/get/getUtcHour.d.ts +1 -3
- package/dist/utc/get/getUtcHour.js +5 -12
- package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
- package/dist/utc/get/getUtcMicrosecond.js +4 -11
- package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
- package/dist/utc/get/getUtcMillisecond.js +5 -12
- package/dist/utc/get/getUtcMinute.d.ts +1 -3
- package/dist/utc/get/getUtcMinute.js +5 -12
- package/dist/utc/get/getUtcMonth.d.ts +1 -3
- package/dist/utc/get/getUtcMonth.js +5 -12
- package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
- package/dist/utc/get/getUtcNanosecond.js +4 -11
- package/dist/utc/get/getUtcNow.d.ts +1 -3
- package/dist/utc/get/getUtcNow.js +2 -9
- package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
- package/dist/utc/get/getUtcNowUnit.js +2 -0
- package/dist/utc/get/getUtcSecond.d.ts +1 -3
- package/dist/utc/get/getUtcSecond.js +5 -12
- package/dist/utc/get/getUtcYear.d.ts +3 -3
- package/dist/utc/get/getUtcYear.js +5 -12
- package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
- package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
- package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
- package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
- package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
- package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
- package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.js +2 -2
- package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDateFromUtc.js +3 -5
- package/dist/utc/parse/parseDayFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayFromUtc.js +3 -5
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +5 -7
- package/dist/utc/parse/parseHourFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseHourFromUtc.js +3 -5
- package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
- package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +12 -12
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +3 -5
- package/dist/utc/parse/parseMonthFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMonthFromUtc.js +3 -5
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseSecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseSecondFromUtc.js +3 -5
- package/dist/utc/parse/parseTimeFromUtc.d.ts +11 -3
- package/dist/utc/parse/parseTimeFromUtc.js +7 -7
- package/dist/utc/parse/parseUnitFromUtc.d.ts +25 -6
- package/dist/utc/parse/parseUnitFromUtc.js +14 -10
- package/dist/utc/parse/parseWeekFromUtc.d.ts +20 -10
- package/dist/utc/parse/parseWeekFromUtc.js +8 -14
- package/dist/utc/parse/parseYearFromUtc.d.ts +13 -5
- package/dist/utc/parse/parseYearFromUtc.js +9 -8
- package/dist/utc/validate/index.d.ts +2 -0
- package/dist/utc/validate/index.js +2 -0
- package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
- package/dist/utc/validate/isValidHttpDate.js +38 -0
- package/dist/utc/validate/isValidUtc.d.ts +4 -0
- package/dist/utc/validate/isValidUtc.js +4 -0
- package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +10 -20
- package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
- package/dist/zoned/calculate/cycleZoned.js +1 -8
- package/dist/zoned/calculate/diffZoned.d.ts +1 -1
- package/dist/zoned/calculate/diffZoned.js +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
- package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
- package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
- package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
- package/dist/zoned/calculate/roundZoned.d.ts +21 -4
- package/dist/zoned/calculate/roundZoned.js +3 -7
- package/dist/zoned/calculate/setZoned.d.ts +44 -13
- package/dist/zoned/calculate/setZoned.js +30 -21
- package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
- package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
- package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
- package/dist/zoned/calculate/startOfZoned.js +1 -3
- package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
- package/dist/zoned/calculate/subtractZoned.js +10 -20
- package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
- package/dist/zoned/compare/areZonedEqualBy.js +7 -5
- package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
- package/dist/zoned/compare/isBetweenZoned.js +4 -3
- package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
- package/dist/zoned/compare/isInDaylightSaving.js +40 -44
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +21 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +9 -11
- package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
- package/dist/zoned/convert/convertZonedToUnix.js +2 -4
- package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
- package/dist/zoned/convert/convertZonedToZoned.js +5 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +15 -10
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +9 -5
- package/dist/zoned/format/formatRfc2822.d.ts +2 -2
- package/dist/zoned/format/formatRfc2822.js +2 -2
- package/dist/zoned/format/formatRfc3339.d.ts +2 -3
- package/dist/zoned/format/formatRfc3339.js +2 -3
- package/dist/zoned/format/formatTimeZoneName.d.ts +16 -3
- package/dist/zoned/format/formatTimeZoneName.js +9 -4
- package/dist/zoned/format/formatZonedDateTime.js +2 -1
- package/dist/zoned/format/formatZonedRange.js +2 -1
- package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
- package/dist/zoned/format/formatZonedToParts.js +8 -5
- package/dist/zoned/get/getDstTransitions.d.ts +11 -10
- package/dist/zoned/get/getDstTransitions.js +21 -7
- package/dist/zoned/get/getSystemTimeZone.d.ts +3 -1
- package/dist/zoned/get/getSystemTimeZone.js +5 -2
- package/dist/zoned/get/getTimeZoneOffset.d.ts +13 -2
- package/dist/zoned/get/getTimeZoneOffset.js +22 -6
- package/dist/zoned/get/getZonedDay.d.ts +2 -1
- package/dist/zoned/get/getZonedDay.js +6 -7
- package/dist/zoned/get/getZonedDayOfWeek.d.ts +2 -1
- package/dist/zoned/get/getZonedDayOfWeek.js +6 -5
- package/dist/zoned/get/getZonedHour.d.ts +2 -1
- package/dist/zoned/get/getZonedHour.js +6 -7
- package/dist/zoned/get/getZonedMicrosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMicrosecond.js +6 -5
- package/dist/zoned/get/getZonedMillisecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMillisecond.js +6 -7
- package/dist/zoned/get/getZonedMinute.d.ts +2 -1
- package/dist/zoned/get/getZonedMinute.js +6 -7
- package/dist/zoned/get/getZonedMonth.d.ts +2 -1
- package/dist/zoned/get/getZonedMonth.js +6 -7
- package/dist/zoned/get/getZonedNanosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedNanosecond.js +6 -5
- package/dist/zoned/get/getZonedNow.d.ts +18 -2
- package/dist/zoned/get/getZonedNow.js +17 -4
- package/dist/zoned/get/getZonedNowUnit.d.ts +6 -3
- package/dist/zoned/get/getZonedNowUnit.js +10 -7
- package/dist/zoned/get/getZonedSecond.d.ts +2 -1
- package/dist/zoned/get/getZonedSecond.js +6 -7
- package/dist/zoned/get/getZonedToday.d.ts +2 -1
- package/dist/zoned/get/getZonedToday.js +6 -5
- package/dist/zoned/get/getZonedWeekOfYear.d.ts +2 -1
- package/dist/zoned/get/getZonedWeekOfYear.js +6 -5
- package/dist/zoned/get/getZonedYear.d.ts +4 -1
- package/dist/zoned/get/getZonedYear.js +9 -7
- package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
- package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
- package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
- package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
- package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
- package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
- package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
- package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
- package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +13 -4
- package/dist/zoned/parse/parseUnitFromZoned.js +6 -4
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +45 -12
- package/dist/zoned/validate/hasDaylightSaving.js +54 -32
- package/dist/zoned/validate/index.d.ts +2 -0
- package/dist/zoned/validate/index.js +2 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
- package/dist/zoned/validate/isValidTimeZone.d.ts +5 -1
- package/dist/zoned/validate/isValidTimeZone.js +6 -2
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
- package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
- package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
- package/dist/zoned/validate/isValidZonedRange.js +1 -4
- package/package.json +67 -5
- package/skills/gmt-arithmetic/SKILL.md +99 -12
- package/skills/gmt-basics/SKILL.md +64 -13
- package/skills/gmt-integration/SKILL.md +33 -13
- package/skills/gmt-timezone/SKILL.md +265 -31
- package/dist/duration/calculate/durationAs.d.ts +0 -62
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -16
- package/dist/internal/utcZonedDateTime.js +0 -28
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → duty.js} +0 -0
|
@@ -0,0 +1,756 @@
|
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import { resolveLocal } from "../instant/convert/resolveLocal.js";
|
|
3
|
+
import { isValidDate } from "../plain/validate/isValidDate.js";
|
|
4
|
+
import { isValidTime } from "../plain/validate/isValidTime.js";
|
|
5
|
+
import { parseBusinessCalendar, parseHolidays } from "./businessCalendar.js";
|
|
6
|
+
import { coalesceIntervalNanoseconds, } from "./intervalNanoseconds.js";
|
|
7
|
+
import { isObject, isOptionsArgument } from "./isObject.js";
|
|
8
|
+
import { nextZonedBucketStart, zonedUnitStart } from "./zonedBucket.js";
|
|
9
|
+
import { frameEpochNanoseconds, frameWallClock, frameZoned, zoneFrame, } from "./zoneFrame.js";
|
|
10
|
+
const DISAMBIGUATIONS = [
|
|
11
|
+
"compatible",
|
|
12
|
+
"earlier",
|
|
13
|
+
"later",
|
|
14
|
+
"reject",
|
|
15
|
+
];
|
|
16
|
+
const WEEKDAY_KEYS = ["1", "2", "3", "4", "5", "6", "7"];
|
|
17
|
+
/**
|
|
18
|
+
* Local dates a range may span, counted from the date its start falls on: about 27 years, the
|
|
19
|
+
* same bound `bucketRange` puts on a day walk. A walk that runs out answers with the sentinel,
|
|
20
|
+
* never a partial list.
|
|
21
|
+
*/
|
|
22
|
+
export const MAX_SCHEDULE_DAYS = 10_000;
|
|
23
|
+
/**
|
|
24
|
+
* Day buckets one walk may step through: the lookback, the dates, the one date past them that
|
|
25
|
+
* settles the last, and the extra bucket a fall-back into the previous date opens. The date
|
|
26
|
+
* limit is the one that binds.
|
|
27
|
+
*/
|
|
28
|
+
const MAX_SCHEDULE_BUCKETS = 2 * MAX_SCHEDULE_DAYS;
|
|
29
|
+
/**
|
|
30
|
+
* How far before the first instant of interest the walk starts, in nanoseconds (72 hours). A
|
|
31
|
+
* window is at most one local day of wall time, but a resolved edge can land a whole deleted day
|
|
32
|
+
* later (`Pacific/Apia` skipped 2011-12-30), so a window that started up to two days earlier can
|
|
33
|
+
* still be open. Three days clears that with room to spare.
|
|
34
|
+
*/
|
|
35
|
+
const LOOKBACK_NANOSECONDS = 259200000000000n;
|
|
36
|
+
/** TC39 `nsMinInstant` and `nsMaxInstant`: ±10^8 days from the epoch. */
|
|
37
|
+
const MIN_INSTANT_NANOSECONDS = -8640000000000000000000n;
|
|
38
|
+
const MAX_INSTANT_NANOSECONDS = 8640000000000000000000n;
|
|
39
|
+
/**
|
|
40
|
+
* Where an edge whose wall time lies past Temporal's range resolves: just outside it. Such an
|
|
41
|
+
* edge has no string, so it is only ever clipped to a range or compared, never returned.
|
|
42
|
+
*/
|
|
43
|
+
const PAST_LAST_INSTANT = MAX_INSTANT_NANOSECONDS + 1n;
|
|
44
|
+
const BEFORE_FIRST_INSTANT = MIN_INSTANT_NANOSECONDS - 1n;
|
|
45
|
+
/**
|
|
46
|
+
* The search horizon of `nextOpenAt`, `nextCloseAt` and `addOperatingTime` when the caller
|
|
47
|
+
* gives no `within`: one calendar year in the schedule's zone.
|
|
48
|
+
*/
|
|
49
|
+
export const DEFAULT_OPERATING_HORIZON = "P1Y";
|
|
50
|
+
function parseWindow(value) {
|
|
51
|
+
if (!isObject(value) || Array.isArray(value)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const { from, to } = value;
|
|
55
|
+
if (typeof from !== "string" ||
|
|
56
|
+
typeof to !== "string" ||
|
|
57
|
+
!isValidTime(from) ||
|
|
58
|
+
!isValidTime(to)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const fromTime = Temporal.PlainTime.from(from);
|
|
62
|
+
const toTime = Temporal.PlainTime.from(to);
|
|
63
|
+
return {
|
|
64
|
+
from: fromTime.toString(),
|
|
65
|
+
to: toTime.toString(),
|
|
66
|
+
wraps: Temporal.PlainTime.compare(toTime, fromTime) <= 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function parseWindows(value) {
|
|
70
|
+
if (!Array.isArray(value)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const windows = [];
|
|
74
|
+
for (const candidate of value) {
|
|
75
|
+
const window = parseWindow(candidate);
|
|
76
|
+
if (window === null) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
windows.push(window);
|
|
80
|
+
}
|
|
81
|
+
return windows;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse `OperatingSchedule['weekly']`: an object keyed by ISO weekday `"1"`–`"7"`, each holding an
|
|
85
|
+
* array of `LocalWindow`s (or `undefined`, meaning closed). Each weekday is read with an ordinary
|
|
86
|
+
* property get, as Temporal's `Get` reads a field list, so a non-enumerable or inherited weekday
|
|
87
|
+
* applies. Any other own enumerable key, string or symbol, or a malformed window, returns `null`;
|
|
88
|
+
* a non-enumerable one is not an entry, as `Object.assign` and spread do not copy it, so a
|
|
89
|
+
* function carrying the weekdays is read without its built-in `length` and `name`.
|
|
90
|
+
*/
|
|
91
|
+
export function parseWeeklyPattern(value) {
|
|
92
|
+
if (!isObject(value) || Array.isArray(value)) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const weekly = Array.from({ length: 8 }, () => []);
|
|
96
|
+
const record = value;
|
|
97
|
+
for (const key of Reflect.ownKeys(record)) {
|
|
98
|
+
if ((typeof key !== "string" || !WEEKDAY_KEYS.includes(key)) &&
|
|
99
|
+
Object.prototype.propertyIsEnumerable.call(record, key)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
for (const key of WEEKDAY_KEYS) {
|
|
104
|
+
const day = record[key];
|
|
105
|
+
if (day === undefined) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const windows = parseWindows(day);
|
|
109
|
+
if (windows === null) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
weekly[Number(key)] = windows;
|
|
113
|
+
}
|
|
114
|
+
return weekly;
|
|
115
|
+
}
|
|
116
|
+
/** `holidays` as a date list or a `BusinessCalendar` (only its `holidays` are read). */
|
|
117
|
+
function parseScheduleHolidays(value) {
|
|
118
|
+
if (value === undefined) {
|
|
119
|
+
return new Set();
|
|
120
|
+
}
|
|
121
|
+
if (Array.isArray(value)) {
|
|
122
|
+
return parseHolidays(value);
|
|
123
|
+
}
|
|
124
|
+
return parseBusinessCalendar(value)?.holidays ?? null;
|
|
125
|
+
}
|
|
126
|
+
function parseOverrides(value) {
|
|
127
|
+
if (value === undefined) {
|
|
128
|
+
return new Map();
|
|
129
|
+
}
|
|
130
|
+
if (!Array.isArray(value)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const overrides = new Map();
|
|
134
|
+
for (const candidate of value) {
|
|
135
|
+
if (!isObject(candidate) || Array.isArray(candidate)) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const { date, windows } = candidate;
|
|
139
|
+
if (typeof date !== "string" || !isValidDate(date)) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const key = Temporal.PlainDate.from(date).toString();
|
|
143
|
+
const parsed = parseWindows(windows);
|
|
144
|
+
// Two overrides for one date say two different things about it.
|
|
145
|
+
if (parsed === null || overrides.has(key)) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
overrides.set(key, parsed);
|
|
149
|
+
}
|
|
150
|
+
return overrides;
|
|
151
|
+
}
|
|
152
|
+
/** Validate an `OperatingSchedule`, or `null` when any part of it is malformed. */
|
|
153
|
+
export function parseOperatingSchedule(value) {
|
|
154
|
+
if (!isObject(value) || Array.isArray(value)) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const { timeZone, weekly, holidays, overrides } = value;
|
|
158
|
+
const frame = zoneFrame(timeZone);
|
|
159
|
+
if (typeof timeZone !== "string" || frame === null) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
const weeklyWindows = parseWeeklyPattern(weekly);
|
|
163
|
+
const holidayDates = parseScheduleHolidays(holidays);
|
|
164
|
+
const overrideWindows = parseOverrides(overrides);
|
|
165
|
+
if (weeklyWindows === null ||
|
|
166
|
+
holidayDates === null ||
|
|
167
|
+
overrideWindows === null) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
timeZone,
|
|
172
|
+
frame,
|
|
173
|
+
weekly: weeklyWindows,
|
|
174
|
+
holidays: holidayDates,
|
|
175
|
+
overrides: overrideWindows,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read `disambiguation` from an options argument. Omitted means `"compatible"`, as in
|
|
180
|
+
* `resolveLocal`; anything but the four Temporal values, or an options argument that is not an
|
|
181
|
+
* object, returns `null`.
|
|
182
|
+
*/
|
|
183
|
+
export function parseScheduleDisambiguation(options) {
|
|
184
|
+
if (!isOptionsArgument(options)) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
const value = options
|
|
188
|
+
?.disambiguation;
|
|
189
|
+
if (value === undefined) {
|
|
190
|
+
return "compatible";
|
|
191
|
+
}
|
|
192
|
+
return typeof value === "string" && DISAMBIGUATIONS.includes(value)
|
|
193
|
+
? value
|
|
194
|
+
: null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* The last instant a search may answer with: `from` plus `within` (default one year), added in
|
|
198
|
+
* the schedule's zone so `P1D` is one local day. It is clamped to the search cap: the last instant
|
|
199
|
+
* before the local date `MAX_SCHEDULE_DAYS + 1` after the one `from` falls on, so a search answers
|
|
200
|
+
* anywhere on the 10,000th date and nowhere after it. A horizon past Temporal's last instant is
|
|
201
|
+
* that instant, since nothing after it can be answered. `null` when `within` is not a
|
|
202
|
+
* non-negative ISO duration.
|
|
203
|
+
*/
|
|
204
|
+
export function parseSearchHorizon(fromNs, within, frame) {
|
|
205
|
+
const text = within === undefined ? DEFAULT_OPERATING_HORIZON : within;
|
|
206
|
+
if (typeof text !== "string") {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
let duration;
|
|
210
|
+
try {
|
|
211
|
+
duration = Temporal.Duration.from(text);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
if (duration.sign < 0) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const from = frameZoned(Temporal.Instant.fromEpochNanoseconds(fromNs), frame);
|
|
220
|
+
const horizon = clampedToRange(() => frameEpochNanoseconds(from.add(duration), frame));
|
|
221
|
+
const cap = clampedToRange(() => frameEpochNanoseconds(from
|
|
222
|
+
.toPlainDate()
|
|
223
|
+
.add({ days: MAX_SCHEDULE_DAYS + 1 })
|
|
224
|
+
.toZonedDateTime(frame.timeZone), frame) - 1n);
|
|
225
|
+
return horizon < cap ? horizon : cap;
|
|
226
|
+
}
|
|
227
|
+
/** An instant computed by `instant`, or Temporal's last instant when it lies past the range. */
|
|
228
|
+
function clampedToRange(instant) {
|
|
229
|
+
try {
|
|
230
|
+
const nanoseconds = instant();
|
|
231
|
+
// At a seconds offset west of UTC the instant is later than the stand-in it was computed
|
|
232
|
+
// on (`frameZoned`), so it can pass the last instant without Temporal throwing.
|
|
233
|
+
return nanoseconds > MAX_INSTANT_NANOSECONDS
|
|
234
|
+
? MAX_INSTANT_NANOSECONDS
|
|
235
|
+
: nanoseconds;
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if (error instanceof RangeError) {
|
|
239
|
+
return MAX_INSTANT_NANOSECONDS;
|
|
240
|
+
}
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** The local date of an instant in the schedule's zone. */
|
|
245
|
+
function localDateOf(schedule, ns) {
|
|
246
|
+
return frameWallClock(Temporal.Instant.fromEpochNanoseconds(ns), schedule.frame).toPlainDate();
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* The local date `days` after the one `fromNs` falls on, or `null` when that is past Temporal's
|
|
250
|
+
* last date: no walk from `fromNs` can reach it before time runs out.
|
|
251
|
+
*/
|
|
252
|
+
function dateLimit(schedule, fromNs, days) {
|
|
253
|
+
try {
|
|
254
|
+
return localDateOf(schedule, fromNs).add({ days });
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
if (error instanceof RangeError) {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
throw error;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* The day bucket the walk starts in: the one holding the instant 72 hours before `fromNs`, or
|
|
265
|
+
* the earliest instant the schedule's frame can place when that is earlier. When the bucket's own
|
|
266
|
+
* start is not representable, the walk starts at that instant instead, the earliest of its date
|
|
267
|
+
* there is.
|
|
268
|
+
*
|
|
269
|
+
* The earliest instant is Temporal's first, except at an offset with seconds west of UTC: its
|
|
270
|
+
* stand-in sits the offset's seconds before the instant (`frameZoned`), so the first instant it
|
|
271
|
+
* can place is that many seconds after Temporal's first. A walk from before it throws
|
|
272
|
+
* `RangeError`, the caller's sentinel, rather than start after its own instant.
|
|
273
|
+
*
|
|
274
|
+
* `atRangeStart` is true when the walk starts at that earliest instant. No day bucket lies
|
|
275
|
+
* before it, so the windows of the local date before the bucket's own are not reached by walking
|
|
276
|
+
* back: the walk carries them in (`resolveWindowsBefore`).
|
|
277
|
+
*/
|
|
278
|
+
function firstWalkBucket(schedule, fromNs) {
|
|
279
|
+
const shift = schedule.frame.shiftNanoseconds;
|
|
280
|
+
const earliestNs = shift < 0n ? MIN_INSTANT_NANOSECONDS - shift : MIN_INSTANT_NANOSECONDS;
|
|
281
|
+
if (fromNs < earliestNs) {
|
|
282
|
+
throw new RangeError("the instant is before the first the frame can place");
|
|
283
|
+
}
|
|
284
|
+
const atRangeStart = fromNs - LOOKBACK_NANOSECONDS <= earliestNs;
|
|
285
|
+
const startNs = atRangeStart ? earliestNs : fromNs - LOOKBACK_NANOSECONDS;
|
|
286
|
+
const zoned = frameZoned(Temporal.Instant.fromEpochNanoseconds(startNs), schedule.frame);
|
|
287
|
+
try {
|
|
288
|
+
return { bucket: zonedUnitStart(zoned, "day"), atRangeStart };
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
if (error instanceof RangeError) {
|
|
292
|
+
return { bucket: zoned, atRangeStart };
|
|
293
|
+
}
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/** The windows that apply on `date`: an override, else nothing on a holiday, else the weekday's. */
|
|
298
|
+
function windowsOn(schedule, date) {
|
|
299
|
+
const key = date.toString();
|
|
300
|
+
const override = schedule.overrides.get(key);
|
|
301
|
+
if (override !== undefined) {
|
|
302
|
+
return override;
|
|
303
|
+
}
|
|
304
|
+
return schedule.holidays.has(key) ? [] : schedule.weekly[date.dayOfWeek];
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Resolve one window edge with `resolveLocal`. An edge on a date Temporal cannot hold is already
|
|
308
|
+
* outside the range. A wall time outside Temporal's range fails under every policy, so it
|
|
309
|
+
* resolves just outside the range, on the side its date lies. `undefined` means `"reject"`
|
|
310
|
+
* refused it.
|
|
311
|
+
*/
|
|
312
|
+
function resolveEdge(edge, timeZone, disambiguation) {
|
|
313
|
+
if (typeof edge === "bigint") {
|
|
314
|
+
return { ns: edge, text: "" };
|
|
315
|
+
}
|
|
316
|
+
const local = `${edge.date.toString()}T${edge.time}`;
|
|
317
|
+
const text = resolveLocal(local, timeZone, { disambiguation });
|
|
318
|
+
if (text !== "") {
|
|
319
|
+
return { ns: Temporal.Instant.from(text).epochNanoseconds, text };
|
|
320
|
+
}
|
|
321
|
+
if (disambiguation === "reject" && resolveLocal(local, timeZone) !== "") {
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
ns: edge.date.year > 0 ? PAST_LAST_INSTANT : BEFORE_FIRST_INSTANT,
|
|
326
|
+
text: "",
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/** The local date after `date`, or `null` past Temporal's last date. */
|
|
330
|
+
function dateAfter(date) {
|
|
331
|
+
try {
|
|
332
|
+
return date.add({ days: 1 });
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
if (error instanceof RangeError) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
throw error;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/** The local date before `date`, or `null` before Temporal's first date. */
|
|
342
|
+
function dateBefore(date) {
|
|
343
|
+
try {
|
|
344
|
+
return date.subtract({ days: 1 });
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
if (error instanceof RangeError) {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
throw error;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Resolve the windows of one local date to instants with `resolveLocal`. Each edge is resolved on
|
|
355
|
+
* its own under `disambiguation`; a wrapping window's `to` is read on the next date. An edge pair
|
|
356
|
+
* that resolves to an empty or inverted span (a window shorter than the gap it straddles) is
|
|
357
|
+
* dropped.
|
|
358
|
+
*
|
|
359
|
+
* `date` is `null` for the date before Temporal's first, and `next` is `null` for the date after
|
|
360
|
+
* its last. A window is a rule about the local clock, so it still holds on the side of it that
|
|
361
|
+
* Temporal can reach: an edge on a date Temporal cannot hold lies just outside the range.
|
|
362
|
+
*
|
|
363
|
+
* Under `"earlier"`, an edge in a gap moves back by the gap's length (TC39
|
|
364
|
+
* DisambiguatePossibleEpochNanoseconds), so a date whose midnight is skipped can open before its
|
|
365
|
+
* own first instant, on the previous date. No zone has jumped forward by more than a day, so a
|
|
366
|
+
* window never starts before the previous date's first instant.
|
|
367
|
+
*
|
|
368
|
+
* Under `"reject"`, a window with an ambiguous or nonexistent edge is not guessed: it is returned
|
|
369
|
+
* in `unresolved` as the widest span it could cover (its start read `"earlier"`, its end
|
|
370
|
+
* `"later"`), so the caller can refuse an answer it might change and ignore it elsewhere.
|
|
371
|
+
*/
|
|
372
|
+
function resolveDateWindows(schedule, windows, date, next, disambiguation) {
|
|
373
|
+
const records = [];
|
|
374
|
+
const unresolved = [];
|
|
375
|
+
const { timeZone } = schedule;
|
|
376
|
+
for (const window of windows) {
|
|
377
|
+
const startEdge = date === null ? BEFORE_FIRST_INSTANT : { date, time: window.from };
|
|
378
|
+
const endDate = window.wraps ? next : date;
|
|
379
|
+
const endEdge = endDate === null
|
|
380
|
+
? window.wraps
|
|
381
|
+
? PAST_LAST_INSTANT
|
|
382
|
+
: BEFORE_FIRST_INSTANT
|
|
383
|
+
: { date: endDate, time: window.to };
|
|
384
|
+
const start = resolveEdge(startEdge, timeZone, disambiguation);
|
|
385
|
+
const end = resolveEdge(endEdge, timeZone, disambiguation);
|
|
386
|
+
if (start === undefined || end === undefined) {
|
|
387
|
+
// "earlier" and "later" always resolve, so the widest span is always known.
|
|
388
|
+
const earliest = resolveEdge(startEdge, timeZone, "earlier");
|
|
389
|
+
const latest = resolveEdge(endEdge, timeZone, "later");
|
|
390
|
+
unresolved.push({
|
|
391
|
+
start: earliest?.ns ?? BEFORE_FIRST_INSTANT,
|
|
392
|
+
end: latest?.ns ?? PAST_LAST_INSTANT,
|
|
393
|
+
});
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (start.ns < end.ns) {
|
|
397
|
+
records.push({
|
|
398
|
+
start: start.ns,
|
|
399
|
+
end: end.ns,
|
|
400
|
+
startText: start.text,
|
|
401
|
+
endText: end.text,
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return { records, unresolved };
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Resolve the windows of the local date before `date`, the first date of a walk that starts at
|
|
409
|
+
* the earliest instant its frame can place.
|
|
410
|
+
*
|
|
411
|
+
* A window that opened on that date and wraps past midnight is still open on `date`, although
|
|
412
|
+
* the instant it opened at is before the range. The previous date follows its own override or
|
|
413
|
+
* holiday like any other. West of UTC the first date is Temporal's first, `-271821-04-19`, and
|
|
414
|
+
* the date before it cannot be held or named: no override or holiday can be written for it, so
|
|
415
|
+
* the weekly pattern applies, by the weekday before `date`'s.
|
|
416
|
+
*/
|
|
417
|
+
function resolveWindowsBefore(schedule, date, disambiguation) {
|
|
418
|
+
const previous = dateBefore(date);
|
|
419
|
+
const windows = previous === null
|
|
420
|
+
? schedule.weekly[date.dayOfWeek === 1 ? 7 : date.dayOfWeek - 1]
|
|
421
|
+
: windowsOn(schedule, previous);
|
|
422
|
+
return resolveDateWindows(schedule, windows, previous, date, disambiguation);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Resolve the windows a walk gains on reaching `date`: the date's own and, for the first date of
|
|
426
|
+
* a walk from the start of the range (`carryIn`), those of the date before it.
|
|
427
|
+
*/
|
|
428
|
+
function resolveVisit(schedule, date, carryIn, disambiguation) {
|
|
429
|
+
const own = resolveDateWindows(schedule, windowsOn(schedule, date), date, dateAfter(date), disambiguation);
|
|
430
|
+
if (!carryIn) {
|
|
431
|
+
return own;
|
|
432
|
+
}
|
|
433
|
+
const before = resolveWindowsBefore(schedule, date, disambiguation);
|
|
434
|
+
return {
|
|
435
|
+
records: [...before.records, ...own.records],
|
|
436
|
+
unresolved: [...before.unresolved, ...own.unresolved],
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Walk the schedule's local dates from a little before `fromNs`, handing the visitor each open
|
|
441
|
+
* run as soon as no later window can extend it.
|
|
442
|
+
*
|
|
443
|
+
* - Dates come from the day buckets `floorToZone` and `bucketRange` use, so a deleted date
|
|
444
|
+
* (`Pacific/Apia`, 2011-12-30) is never visited, and a date the clock re-enters after a
|
|
445
|
+
* fall-back (`America/Goose_Bay`, 2010-11-06) is visited once.
|
|
446
|
+
* - A window can start as early as the previous date's first instant (see `resolveDateWindows`),
|
|
447
|
+
* so the walk settles one date behind: once a date is resolved, the first instant of the date
|
|
448
|
+
* resolved before it is the `bound` no later window starts before.
|
|
449
|
+
* - A walk from the start of Temporal's range also resolves the date before its first, whose
|
|
450
|
+
* wrapping windows are still open when the range begins (`resolveWindowsBefore`).
|
|
451
|
+
* - When the visitor stops the walk from `day`, or the last representable day is reached, the
|
|
452
|
+
* runs still pending are handed over too.
|
|
453
|
+
* - Returns `null` when a day bucket could not be found, or the walk would resolve a date
|
|
454
|
+
* `MAX_SCHEDULE_DAYS + 2` after the one `fromNs` falls on. Neither use reaches that: a range
|
|
455
|
+
* is refused up front past `MAX_SCHEDULE_DAYS` dates, and a search's horizon ends with the
|
|
456
|
+
* `MAX_SCHEDULE_DAYS`th date, so its walk stops by the horizon one date later.
|
|
457
|
+
*/
|
|
458
|
+
export function walkSchedule(schedule, fromNs, disambiguation, visitor) {
|
|
459
|
+
let pending = [];
|
|
460
|
+
let unresolvedStart;
|
|
461
|
+
const finish = () => ({ unresolvedStart });
|
|
462
|
+
const flush = () => {
|
|
463
|
+
for (const run of pending) {
|
|
464
|
+
if (visitor.run(run)) {
|
|
465
|
+
break;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return finish();
|
|
469
|
+
};
|
|
470
|
+
// The span a range or search may cover, plus the date after its last, which is resolved to
|
|
471
|
+
// settle it because its windows can start before its own first instant.
|
|
472
|
+
const limitDate = dateLimit(schedule, fromNs, MAX_SCHEDULE_DAYS + 2);
|
|
473
|
+
const first = firstWalkBucket(schedule, fromNs);
|
|
474
|
+
let current = first.bucket;
|
|
475
|
+
// True until the first date is resolved, for a walk from the start of the range.
|
|
476
|
+
let carryIn = first.atRangeStart;
|
|
477
|
+
let lastDate = null;
|
|
478
|
+
let bound;
|
|
479
|
+
for (let bucket = 0; bucket < MAX_SCHEDULE_BUCKETS; bucket++) {
|
|
480
|
+
if (current === null) {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
if (bound !== undefined) {
|
|
484
|
+
const settleBefore = bound;
|
|
485
|
+
for (const run of pending) {
|
|
486
|
+
if (run.end >= settleBefore) {
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
if (visitor.run(run)) {
|
|
490
|
+
return finish();
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
pending = pending.filter((run) => run.end >= settleBefore);
|
|
494
|
+
if (visitor.day(settleBefore, pending)) {
|
|
495
|
+
return flush();
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
const date = current.toPlainDate();
|
|
499
|
+
// A fall-back that re-enters the previous date opens a second bucket for it; its windows
|
|
500
|
+
// were already resolved on the first visit.
|
|
501
|
+
if (lastDate === null || Temporal.PlainDate.compare(date, lastDate) > 0) {
|
|
502
|
+
if (limitDate !== null &&
|
|
503
|
+
Temporal.PlainDate.compare(date, limitDate) >= 0) {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
const resolved = resolveVisit(schedule, date, carryIn, disambiguation);
|
|
507
|
+
carryIn = false;
|
|
508
|
+
for (const window of resolved.unresolved) {
|
|
509
|
+
if (window.end > fromNs &&
|
|
510
|
+
(unresolvedStart === undefined || window.start < unresolvedStart)) {
|
|
511
|
+
unresolvedStart = window.start;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
pending = coalesceIntervalNanoseconds([...pending, ...resolved.records]);
|
|
515
|
+
lastDate = date;
|
|
516
|
+
bound = frameEpochNanoseconds(current, schedule.frame);
|
|
517
|
+
}
|
|
518
|
+
try {
|
|
519
|
+
current = nextZonedBucketStart(current, "day");
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
// The next day starts past Temporal's last instant: nothing more can open.
|
|
523
|
+
if (error instanceof RangeError) {
|
|
524
|
+
return flush();
|
|
525
|
+
}
|
|
526
|
+
throw error;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
return null;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* The schedule's open runs clipped to `[startNs, endNs)`, in the range's own strings where a run
|
|
533
|
+
* is clipped. `null` when the walk fails (see `walkSchedule`), or when a window rejected under
|
|
534
|
+
* `"reject"` reaches into the range.
|
|
535
|
+
*/
|
|
536
|
+
export function scheduleRunsWithin(schedule, range, disambiguation) {
|
|
537
|
+
// Refuse a range spanning more than MAX_SCHEDULE_DAYS local dates before walking it. Walking
|
|
538
|
+
// thousands of dates only to return the sentinel took seconds.
|
|
539
|
+
const lastInstant = range.end > range.start ? range.end - 1n : range.end;
|
|
540
|
+
const limit = dateLimit(schedule, range.start, MAX_SCHEDULE_DAYS);
|
|
541
|
+
if (limit !== null &&
|
|
542
|
+
Temporal.PlainDate.compare(localDateOf(schedule, lastInstant), limit) >= 0) {
|
|
543
|
+
return null;
|
|
544
|
+
}
|
|
545
|
+
const runs = [];
|
|
546
|
+
const walked = walkSchedule(schedule, range.start, disambiguation, {
|
|
547
|
+
run: (run) => {
|
|
548
|
+
if (run.start >= range.end) {
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
if (run.end > range.start) {
|
|
552
|
+
const clipStart = run.start < range.start;
|
|
553
|
+
const clipEnd = run.end > range.end;
|
|
554
|
+
runs.push({
|
|
555
|
+
start: clipStart ? range.start : run.start,
|
|
556
|
+
end: clipEnd ? range.end : run.end,
|
|
557
|
+
startText: clipStart ? range.startText : run.startText,
|
|
558
|
+
endText: clipEnd ? range.endText : run.endText,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
return false;
|
|
562
|
+
},
|
|
563
|
+
day: (bound) => bound >= range.end,
|
|
564
|
+
});
|
|
565
|
+
if (walked === null ||
|
|
566
|
+
(walked.unresolvedStart !== undefined && walked.unresolvedStart < range.end)) {
|
|
567
|
+
return null;
|
|
568
|
+
}
|
|
569
|
+
return runs.filter((run) => run.start < run.end);
|
|
570
|
+
}
|
|
571
|
+
/** The later of two instants. */
|
|
572
|
+
function later(a, b) {
|
|
573
|
+
return a > b ? a : b;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* The first instant at or after `fromNs` that the schedule is open: `fromNs` itself inside an
|
|
577
|
+
* open run, else the start of the next run. Answered as soon as no later window can open
|
|
578
|
+
* sooner, without waiting for the run to close. `undefined` when none falls at or before
|
|
579
|
+
* `horizonNs`, `null` when the walk fails or a window rejected under `"reject"` could open
|
|
580
|
+
* sooner.
|
|
581
|
+
*/
|
|
582
|
+
export function firstOpenInstant(schedule, fromNs, horizonNs, disambiguation) {
|
|
583
|
+
let answer;
|
|
584
|
+
const walked = walkSchedule(schedule, fromNs, disambiguation, {
|
|
585
|
+
run: (run) => {
|
|
586
|
+
if (answer !== undefined) {
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
if (run.end <= fromNs) {
|
|
590
|
+
return false;
|
|
591
|
+
}
|
|
592
|
+
answer = later(run.start, fromNs);
|
|
593
|
+
return true;
|
|
594
|
+
},
|
|
595
|
+
day: (bound, pending) => {
|
|
596
|
+
if (bound > horizonNs) {
|
|
597
|
+
return true;
|
|
598
|
+
}
|
|
599
|
+
const next = pending.find((run) => run.end > fromNs);
|
|
600
|
+
if (next !== undefined && later(next.start, fromNs) <= bound) {
|
|
601
|
+
answer = later(next.start, fromNs);
|
|
602
|
+
return true;
|
|
603
|
+
}
|
|
604
|
+
return false;
|
|
605
|
+
},
|
|
606
|
+
});
|
|
607
|
+
if (walked === null) {
|
|
608
|
+
return null;
|
|
609
|
+
}
|
|
610
|
+
if (answer === undefined || answer > horizonNs) {
|
|
611
|
+
return undefined;
|
|
612
|
+
}
|
|
613
|
+
const { unresolvedStart } = walked;
|
|
614
|
+
return answer > fromNs &&
|
|
615
|
+
unresolvedStart !== undefined &&
|
|
616
|
+
unresolvedStart < answer
|
|
617
|
+
? null
|
|
618
|
+
: answer;
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* The first instant at or after `fromNs` that the schedule is closed: `fromNs` itself outside
|
|
622
|
+
* every open run, else the end of the run holding it. A closed `fromNs` is answered as soon as
|
|
623
|
+
* no later window can cover it. `undefined` when the answer falls after `horizonNs`, `null` when
|
|
624
|
+
* the walk fails or a window rejected under `"reject"` could keep the schedule open past it.
|
|
625
|
+
*/
|
|
626
|
+
export function firstClosedInstant(schedule, fromNs, horizonNs, disambiguation) {
|
|
627
|
+
let answer;
|
|
628
|
+
const walked = walkSchedule(schedule, fromNs, disambiguation, {
|
|
629
|
+
run: (run) => {
|
|
630
|
+
if (answer !== undefined) {
|
|
631
|
+
return true;
|
|
632
|
+
}
|
|
633
|
+
if (run.end <= fromNs) {
|
|
634
|
+
return false;
|
|
635
|
+
}
|
|
636
|
+
answer = run.start <= fromNs ? run.end : fromNs;
|
|
637
|
+
return true;
|
|
638
|
+
},
|
|
639
|
+
day: (bound, pending) => {
|
|
640
|
+
if (bound > horizonNs) {
|
|
641
|
+
return true;
|
|
642
|
+
}
|
|
643
|
+
const next = pending.find((run) => run.end > fromNs);
|
|
644
|
+
// Closed at `fromNs`, and every later window starts after it.
|
|
645
|
+
if (fromNs < bound && (next === undefined || next.start > fromNs)) {
|
|
646
|
+
answer = fromNs;
|
|
647
|
+
return true;
|
|
648
|
+
}
|
|
649
|
+
return false;
|
|
650
|
+
},
|
|
651
|
+
});
|
|
652
|
+
if (walked === null) {
|
|
653
|
+
return null;
|
|
654
|
+
}
|
|
655
|
+
const closed = answer ?? fromNs;
|
|
656
|
+
if (closed > horizonNs) {
|
|
657
|
+
return undefined;
|
|
658
|
+
}
|
|
659
|
+
const { unresolvedStart } = walked;
|
|
660
|
+
return unresolvedStart !== undefined && unresolvedStart <= closed
|
|
661
|
+
? null
|
|
662
|
+
: closed;
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* The instant at which `amountNs` of open time has elapsed since `fromNs`: the earliest `X`
|
|
666
|
+
* with exactly that much open time in `[fromNs, X)`. `fromNs` itself when `amountNs` is zero.
|
|
667
|
+
* Answered as soon as no later window can add open time before `X`. `undefined` when `X` falls
|
|
668
|
+
* after `horizonNs`, `null` when the walk fails or a window rejected under `"reject"` could add
|
|
669
|
+
* open time before `X`.
|
|
670
|
+
*/
|
|
671
|
+
export function instantAfterOpenTime(schedule, fromNs, amountNs, horizonNs, disambiguation) {
|
|
672
|
+
if (amountNs === 0n) {
|
|
673
|
+
return fromNs;
|
|
674
|
+
}
|
|
675
|
+
let remaining = amountNs;
|
|
676
|
+
let answer;
|
|
677
|
+
const walked = walkSchedule(schedule, fromNs, disambiguation, {
|
|
678
|
+
run: (run) => {
|
|
679
|
+
if (answer !== undefined) {
|
|
680
|
+
return true;
|
|
681
|
+
}
|
|
682
|
+
if (run.end <= fromNs) {
|
|
683
|
+
return false;
|
|
684
|
+
}
|
|
685
|
+
const start = later(run.start, fromNs);
|
|
686
|
+
if (run.end - start >= remaining) {
|
|
687
|
+
answer = start + remaining;
|
|
688
|
+
return true;
|
|
689
|
+
}
|
|
690
|
+
remaining -= run.end - start;
|
|
691
|
+
return false;
|
|
692
|
+
},
|
|
693
|
+
day: (bound, pending) => {
|
|
694
|
+
if (bound > horizonNs) {
|
|
695
|
+
return true;
|
|
696
|
+
}
|
|
697
|
+
// Every pending run ends at or after `bound`, so only the first can hold a deadline at or
|
|
698
|
+
// before it; open time before `bound` is final.
|
|
699
|
+
const next = pending.find((run) => run.end > fromNs);
|
|
700
|
+
if (next !== undefined) {
|
|
701
|
+
const deadline = later(next.start, fromNs) + remaining;
|
|
702
|
+
if (deadline <= next.end && deadline <= bound) {
|
|
703
|
+
answer = deadline;
|
|
704
|
+
return true;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
return false;
|
|
708
|
+
},
|
|
709
|
+
});
|
|
710
|
+
if (walked === null) {
|
|
711
|
+
return null;
|
|
712
|
+
}
|
|
713
|
+
if (answer === undefined || answer > horizonNs) {
|
|
714
|
+
return undefined;
|
|
715
|
+
}
|
|
716
|
+
const { unresolvedStart } = walked;
|
|
717
|
+
return unresolvedStart !== undefined && unresolvedStart < answer
|
|
718
|
+
? null
|
|
719
|
+
: answer;
|
|
720
|
+
}
|
|
721
|
+
const NANOSECONDS_PER_UNIT = {
|
|
722
|
+
hours: 3600000000000n,
|
|
723
|
+
minutes: 60000000000n,
|
|
724
|
+
seconds: 1000000000n,
|
|
725
|
+
milliseconds: 1000000n,
|
|
726
|
+
microseconds: 1000n,
|
|
727
|
+
nanoseconds: 1n,
|
|
728
|
+
};
|
|
729
|
+
/**
|
|
730
|
+
* An amount of open time in nanoseconds, from an ISO duration of hours and smaller units.
|
|
731
|
+
* `null` for a negative duration, for any calendar unit (years, months, weeks or days — `P1D`
|
|
732
|
+
* could mean 24 open hours or one working day, so it is not guessed), or invalid input.
|
|
733
|
+
*/
|
|
734
|
+
export function parseOpenTimeAmount(value) {
|
|
735
|
+
if (typeof value !== "string") {
|
|
736
|
+
return null;
|
|
737
|
+
}
|
|
738
|
+
try {
|
|
739
|
+
const duration = Temporal.Duration.from(value);
|
|
740
|
+
if (duration.sign < 0 ||
|
|
741
|
+
duration.years !== 0 ||
|
|
742
|
+
duration.months !== 0 ||
|
|
743
|
+
duration.weeks !== 0 ||
|
|
744
|
+
duration.days !== 0) {
|
|
745
|
+
return null;
|
|
746
|
+
}
|
|
747
|
+
return Object.keys(NANOSECONDS_PER_UNIT).reduce((total, unit) => total + BigInt(duration[unit]) * NANOSECONDS_PER_UNIT[unit], 0n);
|
|
748
|
+
}
|
|
749
|
+
catch {
|
|
750
|
+
return null;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
/** Epoch nanoseconds as a UTC instant string ending in `Z`. */
|
|
754
|
+
export function instantText(nanoseconds) {
|
|
755
|
+
return Temporal.Instant.fromEpochNanoseconds(nanoseconds).toString();
|
|
756
|
+
}
|