@northguild/gmt 1.18.0 → 1.20.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 -2920
- package/dist/calendar/business/businessDaysBetween.d.ts +2 -2
- package/dist/calendar/business/businessDaysBetween.js +11 -35
- package/dist/calendar/business/mergeCalendars.d.ts +1 -1
- package/dist/calendar/business/mergeCalendars.js +8 -9
- package/dist/calendar/business/nextBusinessDay.d.ts +2 -2
- package/dist/calendar/business/nextBusinessDay.js +2 -2
- package/dist/calendar/business/previousBusinessDay.d.ts +2 -2
- package/dist/calendar/business/previousBusinessDay.js +2 -2
- package/dist/calendar/business/rollDate.d.ts +3 -3
- package/dist/calendar/business/rollDate.js +10 -43
- package/dist/calendar/calculate/bucketRange.d.ts +19 -11
- package/dist/calendar/calculate/bucketRange.js +27 -70
- package/dist/calendar/calculate/floorToZone.d.ts +12 -4
- package/dist/calendar/calculate/floorToZone.js +16 -8
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +50 -40
- package/dist/calendar/calculate/getFiscalPeriod.js +78 -57
- package/dist/calendar/calculate/getQuarter.d.ts +26 -21
- package/dist/calendar/calculate/getQuarter.js +48 -19
- package/dist/calendar/hours/addOperatingTime.d.ts +9 -3
- package/dist/calendar/hours/addOperatingTime.js +10 -4
- package/dist/calendar/hours/isOpenAt.d.ts +9 -3
- package/dist/calendar/hours/isOpenAt.js +9 -3
- package/dist/calendar/hours/nextCloseAt.d.ts +8 -2
- package/dist/calendar/hours/nextCloseAt.js +9 -3
- package/dist/calendar/hours/nextOpenAt.d.ts +9 -3
- package/dist/calendar/hours/nextOpenAt.js +10 -4
- package/dist/calendar/hours/operatingIntervals.d.ts +7 -2
- package/dist/calendar/hours/operatingIntervals.js +9 -6
- package/dist/calendar/hours/operatingTimeBetween.d.ts +8 -3
- package/dist/calendar/hours/operatingTimeBetween.js +11 -8
- package/dist/calendar/hours/recurringWindows.d.ts +13 -6
- package/dist/calendar/hours/recurringWindows.js +21 -14
- package/dist/calendar/index.d.ts +1 -1
- package/dist/calendar/index.js +2 -2
- package/dist/calendar/validate/index.d.ts +3 -0
- package/dist/calendar/validate/index.js +3 -0
- package/dist/calendar/validate/isValidFiscalCalendar.d.ts +23 -0
- package/dist/calendar/validate/isValidFiscalCalendar.js +44 -0
- package/dist/calendar/validate/isValidFiscalExtraWeek.d.ts +19 -0
- package/dist/calendar/validate/isValidFiscalExtraWeek.js +23 -0
- package/dist/calendar/validate/isValidFiscalPattern.d.ts +7 -7
- package/dist/calendar/validate/isValidFiscalPattern.js +7 -7
- package/dist/calendar/validate/isValidFiscalYearLabel.d.ts +20 -0
- package/dist/calendar/validate/isValidFiscalYearLabel.js +24 -0
- package/dist/calendar/validate/isValidRollConvention.js +2 -10
- package/dist/calendar/validate/isValidZoneBucketUnit.d.ts +1 -1
- package/dist/duration/calculate/absDuration.js +1 -1
- package/dist/duration/calculate/addDuration.js +1 -1
- package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
- package/dist/duration/calculate/durationFromUnits.js +67 -0
- package/dist/duration/calculate/getDurationSign.js +1 -1
- package/dist/duration/calculate/getDurationUnit.d.ts +3 -3
- package/dist/duration/calculate/getDurationUnit.js +3 -3
- 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 +2 -2
- package/dist/duration/calculate/subtractDuration.js +1 -1
- package/dist/duration/calculate/{durationAs.d.ts → totalDuration.d.ts} +27 -21
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +27 -21
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +4 -4
- package/dist/duration/compare/compareDurations.js +4 -4
- package/dist/duration/format/formatDuration.d.ts +9 -9
- package/dist/duration/format/formatDuration.js +14 -13
- package/dist/duration/index.d.ts +1 -1
- package/dist/duration/index.js +2 -2
- package/dist/duration/normalize/normalizeDuration.d.ts +3 -3
- package/dist/duration/normalize/normalizeDuration.js +3 -3
- package/dist/duration/parse/parseDuration.d.ts +1 -1
- package/dist/duration/parse/parseDuration.js +1 -1
- package/dist/duration/validate/isValidDuration.js +2 -11
- package/dist/gnss/convert/gnssToUtc.d.ts +24 -0
- package/dist/gnss/convert/gnssToUtc.js +39 -0
- package/dist/gnss/convert/gnssWeekToUtc.d.ts +53 -0
- package/dist/gnss/convert/gnssWeekToUtc.js +80 -0
- package/dist/gnss/convert/index.d.ts +6 -0
- package/dist/gnss/convert/index.js +6 -0
- package/dist/gnss/convert/rinexWeekToUtc.d.ts +34 -0
- package/dist/gnss/convert/rinexWeekToUtc.js +57 -0
- package/dist/gnss/convert/utcToGnss.d.ts +38 -0
- package/dist/gnss/convert/utcToGnss.js +53 -0
- package/dist/gnss/convert/utcToGnssWeek.d.ts +24 -0
- package/dist/gnss/convert/utcToGnssWeek.js +40 -0
- package/dist/gnss/convert/utcToRinexWeek.d.ts +19 -0
- package/dist/gnss/convert/utcToRinexWeek.js +45 -0
- package/dist/gnss/index.d.ts +2 -0
- package/dist/gnss/index.js +3 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +4 -1
- package/dist/instant/convert/classifyLocal.d.ts +9 -5
- package/dist/instant/convert/classifyLocal.js +19 -20
- package/dist/instant/convert/fromOffsetInstant.d.ts +8 -4
- package/dist/instant/convert/fromOffsetInstant.js +11 -6
- package/dist/instant/convert/resolveLocal.d.ts +16 -11
- package/dist/instant/convert/resolveLocal.js +25 -17
- package/dist/instant/convert/toOffsetInstant.d.ts +23 -19
- package/dist/instant/convert/toOffsetInstant.js +29 -38
- package/dist/instant/index.d.ts +2 -1
- package/dist/instant/index.js +3 -2
- 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.js +1 -1
- package/dist/intermodal/calculate/chargeableDays.d.ts +18 -12
- package/dist/intermodal/calculate/chargeableDays.js +27 -18
- package/dist/intermodal/calculate/demurrageClock.d.ts +1 -1
- package/dist/intermodal/calculate/demurrageClock.js +2 -2
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +17 -10
- package/dist/intermodal/calculate/freeTimeExpiry.js +32 -17
- 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 +4 -1
- package/dist/intermodal/index.js +5 -2
- 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/advanceToWeekday.d.ts +1 -1
- package/dist/internal/businessCalendar.d.ts +28 -12
- package/dist/internal/businessCalendar.js +131 -125
- package/dist/internal/businessDayValues.js +1 -1
- package/dist/internal/calendarDatePairPolicy.d.ts +1 -1
- package/dist/internal/calendarDateString.d.ts +1 -1
- package/dist/internal/calendarDateString.js +1 -1
- package/dist/internal/calendarSystemIds.js +1 -1
- package/dist/internal/calendarValueOfDate.js +1 -1
- package/dist/internal/calendarZonedPairPolicy.d.ts +1 -1
- package/dist/internal/calendarZonedString.d.ts +3 -3
- package/dist/internal/calendarZonedString.js +4 -4
- package/dist/internal/compareUnixEpochs.js +1 -1
- package/dist/internal/cutoffAtResolved.d.ts +62 -0
- package/dist/internal/cutoffAtResolved.js +162 -0
- package/dist/internal/cycleFieldValue.d.ts +0 -2
- package/dist/internal/cycleFieldValue.js +0 -2
- package/dist/internal/dateTimeUnitHelpers.d.ts +1 -1
- package/dist/internal/dateUnitHelpers.d.ts +1 -1
- package/dist/internal/daylightTime.d.ts +1 -1
- package/dist/internal/differenceRecord.d.ts +1 -1
- package/dist/internal/durationUntilString.d.ts +1 -1
- package/dist/internal/durationUntilString.js +1 -1
- package/dist/internal/dutyEngine.d.ts +125 -0
- package/dist/internal/dutyEngine.js +1755 -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 +375 -0
- package/dist/internal/dutyRules.d.ts +198 -0
- package/dist/internal/dutyRules.js +484 -0
- package/dist/internal/dutyRunIndex.d.ts +150 -0
- package/dist/internal/dutyRunIndex.js +398 -0
- package/dist/internal/earlierOccurrence.d.ts +41 -0
- package/dist/internal/earlierOccurrence.js +57 -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 +4 -2
- package/dist/internal/englishCalendarNames.js +3 -1
- package/dist/internal/epochDay.d.ts +41 -0
- package/dist/internal/epochDay.js +129 -0
- package/dist/internal/exactDuration.js +1 -1
- package/dist/internal/exactMoment.d.ts +4 -4
- package/dist/internal/exactMoment.js +5 -5
- package/dist/internal/fiscalCalendar.d.ts +41 -7
- package/dist/internal/fiscalCalendar.js +77 -9
- package/dist/internal/foreignEpochs.d.ts +5 -0
- package/dist/internal/foreignEpochs.js +5 -0
- package/dist/internal/formatCalendarDays.d.ts +4 -4
- package/dist/internal/formatCalendarDays.js +6 -5
- package/dist/internal/formatDateInCalendar.d.ts +1 -1
- package/dist/internal/formatRelativeDuration.d.ts +7 -7
- package/dist/internal/formatRelativeDuration.js +8 -7
- package/dist/internal/formatterCache.d.ts +40 -0
- package/dist/internal/formatterCache.js +181 -0
- package/dist/internal/freeTimeLedger.d.ts +35 -42
- package/dist/internal/freeTimeLedger.js +332 -31
- package/dist/internal/getLocaleWeekYearBounds.d.ts +1 -1
- package/dist/internal/gnssTimeScales.d.ts +53 -0
- package/dist/internal/gnssTimeScales.js +128 -0
- package/dist/internal/gnssWeek.d.ts +92 -0
- package/dist/internal/gnssWeek.js +212 -0
- package/dist/internal/halfOpenIntervals.d.ts +1 -1
- package/dist/internal/halfOpenIntervals.js +1 -1
- package/dist/internal/hasCalendarAnnotation.d.ts +3 -3
- package/dist/internal/hasCalendarAnnotation.js +3 -3
- package/dist/internal/hourDurationString.js +1 -1
- package/dist/internal/httpDateFields.js +1 -1
- package/dist/internal/index.d.ts +14 -5
- package/dist/internal/index.js +18 -5
- package/dist/internal/inputChecks.d.ts +53 -0
- package/dist/internal/inputChecks.js +132 -0
- package/dist/internal/instantFormatOptions.d.ts +1 -1
- package/dist/internal/instantFormatOptions.js +4 -8
- package/dist/internal/instantIntervalText.js +1 -1
- package/dist/internal/instantNanoseconds.d.ts +2 -2
- package/dist/internal/instantNanoseconds.js +2 -2
- package/dist/internal/intervalCountHelpers.d.ts +1 -1
- 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/isoStringBody.d.ts +2 -2
- package/dist/internal/isoStringBody.js +2 -2
- package/dist/internal/isoYearString.d.ts +21 -0
- package/dist/internal/isoYearString.js +27 -0
- package/dist/internal/joinDateTimeConnector.js +3 -2
- package/dist/internal/leapSeconds.d.ts +63 -0
- package/dist/internal/leapSeconds.js +162 -0
- package/dist/internal/localeWeekInfo.d.ts +1 -1
- package/dist/internal/localeWeekInfo.js +1 -1
- package/dist/internal/maxPieces.js +2 -1
- package/dist/internal/monthGridWeekRow.d.ts +1 -1
- package/dist/internal/normalizeDateTime.d.ts +2 -1
- package/dist/internal/normalizeDateTime.js +3 -2
- package/dist/internal/normalizeTimeZone.d.ts +5 -2
- package/dist/internal/normalizeTimeZone.js +5 -2
- package/dist/internal/offsetTimeline.d.ts +56 -0
- package/dist/internal/offsetTimeline.js +166 -0
- package/dist/internal/operatingSchedule.d.ts +39 -34
- package/dist/internal/operatingSchedule.js +672 -222
- package/dist/internal/patternToken.d.ts +10 -3
- package/dist/internal/patternToken.js +41 -19
- package/dist/internal/plainDateAdd.d.ts +1 -1
- package/dist/internal/plainDateAdd.js +1 -1
- package/dist/internal/plainDateUntil.d.ts +1 -1
- package/dist/internal/plainDateUntil.js +1 -1
- 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 +1 -1
- package/dist/internal/resolveDurationRelativeTo.js +1 -1
- package/dist/internal/resolveLocale.d.ts +2 -2
- package/dist/internal/resolveLocale.js +2 -2
- package/dist/internal/resolveManualRoundingOptions.d.ts +1 -1
- package/dist/internal/resolveRelativeUnit.d.ts +1 -1
- package/dist/internal/resolveRelativeUnit.js +1 -1
- package/dist/internal/resolveUnixIntervalPair.d.ts +9 -3
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/rinexWeek.d.ts +22 -0
- package/dist/internal/rinexWeek.js +30 -0
- package/dist/internal/rollBusinessDate.d.ts +15 -0
- package/dist/internal/rollBusinessDate.js +46 -0
- package/dist/internal/splitStep.d.ts +1 -1
- package/dist/internal/splitStep.js +1 -1
- package/dist/internal/startOrEndOfUnix.d.ts +3 -2
- package/dist/internal/startOrEndOfUnix.js +9 -6
- package/dist/internal/startOrEndOfUtc.d.ts +1 -1
- package/dist/internal/startOrEndOfUtc.js +1 -1
- package/dist/internal/startOrEndOfZoned.d.ts +1 -1
- package/dist/internal/temporal.d.ts +5 -0
- package/dist/internal/temporal.js +5 -0
- package/dist/internal/temporalCompat/calendarDateArithmetic.d.ts +1 -1
- package/dist/internal/temporalCompat/calendarDateFromFields.d.ts +1 -1
- package/dist/internal/temporalCompat/calendarDateFromFields.js +1 -1
- package/dist/internal/temporalCompat/calendarFields.d.ts +1 -1
- package/dist/internal/temporalCompat/capabilities.d.ts +27 -5
- package/dist/internal/temporalCompat/capabilities.js +28 -4
- package/dist/internal/temporalCompat/fieldSearch.d.ts +1 -1
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/fixedDay.d.ts +1 -1
- package/dist/internal/temporalCompat/fixedDay.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/largeMonthSpan.js +1 -1
- package/dist/internal/temporalCompat/nonIsoArithmetic.d.ts +1 -1
- package/dist/internal/temporalCompat/nonIsoArithmetic.js +1 -1
- package/dist/internal/temporalCompat/probeRepros.d.ts +35 -0
- package/dist/internal/temporalCompat/probeRepros.js +571 -0
- package/dist/internal/temporalCompat/readArithmeticModel.js +2 -2
- package/dist/internal/temporalCompat/repros.d.ts +3 -10
- package/dist/internal/temporalCompat/repros.js +13 -520
- package/dist/internal/timeScaleString.d.ts +47 -0
- package/dist/internal/timeScaleString.js +86 -0
- package/dist/internal/toInstantFromUtc.d.ts +1 -1
- package/dist/internal/toInstantFromUtc.js +1 -1
- package/dist/internal/twoDigitYear.d.ts +19 -0
- package/dist/internal/twoDigitYear.js +22 -0
- package/dist/internal/unixEpochValue.d.ts +1 -1
- package/dist/internal/unixEpochValue.js +4 -3
- package/dist/internal/unixFormatReference.d.ts +1 -1
- package/dist/internal/unixFormatReference.js +1 -1
- package/dist/internal/unixWallClock.d.ts +24 -0
- package/dist/internal/unixWallClock.js +35 -0
- package/dist/internal/utcOffsetString.d.ts +16 -0
- package/dist/internal/utcOffsetString.js +31 -1
- package/dist/internal/utcReading.d.ts +59 -0
- package/dist/internal/utcReading.js +113 -0
- package/dist/internal/utcWallClock.d.ts +20 -0
- package/dist/internal/utcWallClock.js +32 -0
- package/dist/internal/validatedZones.d.ts +20 -0
- package/dist/internal/validatedZones.js +33 -0
- package/dist/internal/wallClockAtOffset.d.ts +1 -1
- 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.d.ts +2 -2
- package/dist/internal/zonedBucket.js +92 -21
- package/dist/internal/zonedFormatReference.d.ts +1 -1
- package/dist/internal/zonedFormatReference.js +1 -1
- package/dist/internal/zonedLocalDates.d.ts +1 -1
- package/dist/internal/zonedLocalDates.js +22 -19
- package/dist/internal/zonedNowUnitValue.d.ts +8 -5
- package/dist/internal/zonedNowUnitValue.js +9 -5
- package/dist/internal/zonedTransitionSearch.d.ts +2 -0
- package/dist/internal/zonedTransitionSearch.js +165 -16
- package/dist/internal/zonedWallClock.d.ts +15 -4
- package/dist/internal/zonedWallClock.js +34 -6
- package/dist/internal/zonedWallClockDifference.d.ts +1 -1
- package/dist/internal/zonedWallClockDifference.js +6 -6
- package/dist/internal/zonedWallClockOperations.d.ts +7 -4
- package/dist/internal/zonedWallClockOperations.js +58 -16
- package/dist/internal/zonelessCalendarDate.d.ts +1 -1
- package/dist/internal/zonelessCalendarDate.js +1 -1
- package/dist/interval/index.d.ts +1 -1
- package/dist/interval/index.js +2 -2
- package/dist/plain/calculate/addBusinessDays.d.ts +2 -2
- package/dist/plain/calculate/addBusinessDays.js +2 -2
- package/dist/plain/calculate/addDate.js +4 -7
- package/dist/plain/calculate/addDateTime.js +5 -8
- package/dist/plain/calculate/addTime.js +5 -8
- package/dist/plain/calculate/clampDate.js +1 -1
- package/dist/plain/calculate/closestDateTo.js +1 -1
- package/dist/plain/calculate/cycleDate.js +1 -1
- package/dist/plain/calculate/cycleDateTime.js +1 -1
- package/dist/plain/calculate/cycleTime.js +1 -1
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +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 +1 -1
- package/dist/plain/calculate/endOfDate.js +1 -1
- package/dist/plain/calculate/endOfDateTime.d.ts +1 -1
- package/dist/plain/calculate/endOfDateTime.js +1 -1
- package/dist/plain/calculate/endOfQuarterForDate.js +1 -1
- package/dist/plain/calculate/endOfQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/endOfTime.d.ts +2 -2
- package/dist/plain/calculate/endOfTime.js +1 -1
- package/dist/plain/calculate/getDayOfYear.js +1 -1
- package/dist/plain/calculate/getDaysInMonth.js +1 -1
- package/dist/plain/calculate/getDaysInYear.js +1 -1
- package/dist/plain/calculate/getLargestDateDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLargestDateTimeDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLargestTimeDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLocaleDayOfWeek.d.ts +6 -6
- package/dist/plain/calculate/getLocaleDayOfWeek.js +7 -7
- package/dist/plain/calculate/getLocaleEndOfWeek.d.ts +4 -4
- package/dist/plain/calculate/getLocaleEndOfWeek.js +5 -5
- package/dist/plain/calculate/getLocaleStartOfWeek.d.ts +5 -5
- package/dist/plain/calculate/getLocaleStartOfWeek.js +6 -6
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +10 -10
- package/dist/plain/calculate/getLocaleWeekYear.js +11 -11
- package/dist/plain/calculate/getQuarterForDate.js +1 -1
- package/dist/plain/calculate/getQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/getWeekNumber.js +1 -1
- package/dist/plain/calculate/getWeekOfMonth.d.ts +10 -14
- package/dist/plain/calculate/getWeekOfMonth.js +11 -15
- package/dist/plain/calculate/getWeekYear.js +1 -1
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +7 -7
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +8 -8
- package/dist/plain/calculate/getWeeksInMonth.d.ts +8 -11
- package/dist/plain/calculate/getWeeksInMonth.js +9 -12
- package/dist/plain/calculate/getWeeksInYear.js +1 -1
- package/dist/plain/calculate/maxDate.js +1 -1
- package/dist/plain/calculate/maxDateTime.js +1 -1
- package/dist/plain/calculate/maxTime.js +1 -1
- package/dist/plain/calculate/minDate.js +1 -1
- package/dist/plain/calculate/minDateTime.js +1 -1
- package/dist/plain/calculate/minTime.js +1 -1
- package/dist/plain/calculate/nextWeekday.d.ts +14 -12
- package/dist/plain/calculate/nextWeekday.js +15 -13
- package/dist/plain/calculate/previousWeekday.d.ts +14 -12
- package/dist/plain/calculate/previousWeekday.js +15 -13
- package/dist/plain/calculate/roundDate.d.ts +1 -1
- package/dist/plain/calculate/roundDate.js +1 -1
- package/dist/plain/calculate/roundDateTime.d.ts +1 -1
- package/dist/plain/calculate/roundDateTime.js +1 -1
- package/dist/plain/calculate/roundTime.d.ts +1 -1
- package/dist/plain/calculate/roundTime.js +1 -1
- package/dist/plain/calculate/setDate.d.ts +21 -4
- package/dist/plain/calculate/setDate.js +28 -8
- package/dist/plain/calculate/setDateTime.d.ts +16 -4
- package/dist/plain/calculate/setDateTime.js +23 -8
- package/dist/plain/calculate/setTime.d.ts +14 -2
- package/dist/plain/calculate/setTime.js +22 -7
- package/dist/plain/calculate/sortDateTimes.js +1 -1
- package/dist/plain/calculate/sortDates.js +1 -1
- package/dist/plain/calculate/sortTimes.js +1 -1
- package/dist/plain/calculate/startOfDate.d.ts +1 -1
- package/dist/plain/calculate/startOfDate.js +1 -1
- package/dist/plain/calculate/startOfDateTime.d.ts +1 -1
- package/dist/plain/calculate/startOfDateTime.js +1 -1
- package/dist/plain/calculate/startOfQuarterForDate.js +1 -1
- package/dist/plain/calculate/startOfQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/startOfTime.d.ts +2 -2
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractBusinessDays.d.ts +2 -2
- package/dist/plain/calculate/subtractBusinessDays.js +2 -2
- package/dist/plain/calculate/subtractDate.js +5 -8
- package/dist/plain/calculate/subtractDateTime.js +5 -8
- package/dist/plain/calculate/subtractTime.js +5 -8
- package/dist/plain/calculate/weekOfYearForDate.js +1 -1
- package/dist/plain/calculate/weekOfYearForDateTime.js +1 -1
- package/dist/plain/chop/chopDate.js +1 -1
- package/dist/plain/chop/chopMilliseconds.js +1 -1
- package/dist/plain/chop/chopSeconds.js +1 -1
- package/dist/plain/chop/chopTime.js +1 -1
- package/dist/plain/compare/areDateTimesEqual.js +1 -1
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +2 -4
- package/dist/plain/compare/areDateTimesEqualBy.js +2 -4
- package/dist/plain/compare/areDatesEqual.js +1 -1
- package/dist/plain/compare/areDatesEqualBy.d.ts +5 -5
- package/dist/plain/compare/areDatesEqualBy.js +5 -5
- package/dist/plain/compare/areTimesEqual.js +1 -1
- package/dist/plain/compare/isAfterDate.js +1 -1
- package/dist/plain/compare/isAfterDateTime.js +1 -1
- package/dist/plain/compare/isAfterTime.js +1 -1
- package/dist/plain/compare/isBeforeDate.js +1 -1
- package/dist/plain/compare/isBeforeDateTime.js +1 -1
- package/dist/plain/compare/isBeforeTime.js +1 -1
- package/dist/plain/compare/isBetweenDate.js +1 -1
- package/dist/plain/compare/isBetweenDateTime.js +1 -1
- package/dist/plain/compare/isBetweenTime.js +1 -1
- package/dist/plain/compare/isBusinessDay.d.ts +2 -2
- package/dist/plain/compare/isBusinessDay.js +3 -3
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +8 -6
- package/dist/plain/compare/isThisUnit.js +7 -5
- package/dist/plain/compare/isWeekend.d.ts +5 -5
- package/dist/plain/compare/isWeekend.js +6 -6
- package/dist/plain/format/formatCalendar.d.ts +3 -5
- package/dist/plain/format/formatCalendar.js +12 -10
- package/dist/plain/format/formatDate.d.ts +4 -4
- package/dist/plain/format/formatDate.js +8 -7
- package/dist/plain/format/formatDateRange.d.ts +4 -4
- package/dist/plain/format/formatDateRange.js +8 -7
- package/dist/plain/format/formatDateTime.d.ts +4 -4
- package/dist/plain/format/formatDateTime.js +8 -7
- package/dist/plain/format/formatDateTimeRange.d.ts +4 -4
- package/dist/plain/format/formatDateTimeRange.js +8 -7
- package/dist/plain/format/formatDateTimeToParts.d.ts +6 -6
- package/dist/plain/format/formatDateTimeToParts.js +10 -9
- package/dist/plain/format/formatDateToParts.d.ts +6 -6
- package/dist/plain/format/formatDateToParts.js +10 -9
- package/dist/plain/format/formatRelativeDate.d.ts +3 -3
- package/dist/plain/format/formatRelativeDate.js +6 -5
- package/dist/plain/format/formatRelativeDateTime.d.ts +3 -3
- package/dist/plain/format/formatRelativeDateTime.js +6 -5
- package/dist/plain/format/formatRelativeTime.d.ts +3 -3
- package/dist/plain/format/formatRelativeTime.js +6 -5
- package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
- package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +8 -8
- package/dist/plain/format/formatTime.d.ts +4 -4
- package/dist/plain/format/formatTime.js +8 -7
- package/dist/plain/format/index.d.ts +1 -1
- package/dist/plain/format/index.js +1 -1
- package/dist/plain/get/getDay.js +1 -1
- package/dist/plain/get/getDayOfWeek.js +1 -1
- package/dist/plain/get/getHour.js +1 -1
- package/dist/plain/get/getMicrosecond.js +1 -1
- package/dist/plain/get/getMillisecond.js +1 -1
- package/dist/plain/get/getMinute.js +1 -1
- package/dist/plain/get/getMonth.js +1 -1
- package/dist/plain/get/getNanosecond.js +1 -1
- package/dist/plain/get/getNow.js +1 -1
- package/dist/plain/get/getNowUnit.d.ts +2 -0
- package/dist/plain/get/getNowUnit.js +3 -1
- package/dist/plain/get/getSecond.js +1 -1
- package/dist/plain/get/getToday.js +1 -1
- package/dist/plain/get/getWeekOfYear.js +1 -1
- package/dist/plain/get/getYear.d.ts +2 -0
- package/dist/plain/get/getYear.js +5 -4
- package/dist/plain/index.d.ts +1 -1
- package/dist/plain/index.js +2 -2
- package/dist/plain/interval/intervalAbutsDate.d.ts +1 -2
- package/dist/plain/interval/intervalAbutsDate.js +2 -3
- package/dist/plain/interval/intervalAbutsDateTime.js +1 -1
- package/dist/plain/interval/intervalAbutsTime.js +1 -1
- package/dist/plain/interval/intervalContainsDate.d.ts +1 -1
- package/dist/plain/interval/intervalContainsDate.js +2 -2
- package/dist/plain/interval/intervalContainsDateTime.js +1 -1
- package/dist/plain/interval/intervalContainsTime.js +1 -1
- package/dist/plain/interval/intervalCountDate.js +1 -1
- package/dist/plain/interval/intervalCountDateTime.js +1 -1
- package/dist/plain/interval/intervalCountTime.js +1 -1
- package/dist/plain/interval/intervalDifferenceDate.d.ts +1 -1
- package/dist/plain/interval/intervalDifferenceDate.js +2 -2
- package/dist/plain/interval/intervalDifferenceDateTime.js +1 -1
- package/dist/plain/interval/intervalDifferenceTime.js +1 -1
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +3 -3
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -3
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +1 -1
- package/dist/plain/interval/intervalDivideEquallyTime.js +1 -1
- package/dist/plain/interval/intervalEngulfsDate.d.ts +1 -1
- package/dist/plain/interval/intervalEngulfsDate.js +2 -2
- package/dist/plain/interval/intervalEngulfsDateTime.js +1 -1
- package/dist/plain/interval/intervalEngulfsTime.js +1 -1
- package/dist/plain/interval/intervalFromDurationDate.js +1 -1
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -1
- package/dist/plain/interval/intervalFromDurationTime.js +1 -1
- package/dist/plain/interval/intervalIntersectionDate.d.ts +1 -1
- package/dist/plain/interval/intervalIntersectionDate.js +2 -2
- package/dist/plain/interval/intervalIntersectionDateTime.js +1 -1
- package/dist/plain/interval/intervalIntersectionTime.js +1 -1
- package/dist/plain/interval/intervalLengthDateTime.js +1 -1
- package/dist/plain/interval/intervalLengthTime.js +1 -1
- package/dist/plain/interval/intervalOverlappingDaysDate.js +1 -1
- package/dist/plain/interval/intervalOverlappingDaysDateTime.js +1 -1
- package/dist/plain/interval/intervalSplitAtDate.d.ts +1 -1
- package/dist/plain/interval/intervalSplitAtDate.js +2 -2
- package/dist/plain/interval/intervalSplitAtDateTime.js +1 -1
- package/dist/plain/interval/intervalSplitAtTime.js +1 -1
- package/dist/plain/interval/intervalUnionDate.d.ts +2 -2
- package/dist/plain/interval/intervalUnionDate.js +3 -3
- package/dist/plain/interval/intervalUnionDateTime.js +1 -1
- package/dist/plain/interval/intervalUnionTime.js +1 -1
- package/dist/plain/interval/intervalXorAllDate.d.ts +1 -1
- package/dist/plain/interval/intervalXorAllDate.js +4 -4
- package/dist/plain/interval/intervalXorAllDateTime.js +3 -3
- package/dist/plain/interval/intervalXorAllTime.js +3 -3
- package/dist/plain/interval/intervalXorDate.d.ts +1 -1
- package/dist/plain/interval/intervalXorDate.js +2 -2
- package/dist/plain/interval/intervalXorDateTime.js +1 -1
- package/dist/plain/interval/intervalXorTime.js +1 -1
- package/dist/plain/interval/intervalsOverlapDate.d.ts +1 -1
- package/dist/plain/interval/intervalsOverlapDate.js +2 -2
- package/dist/plain/interval/intervalsOverlapDateTime.js +1 -1
- package/dist/plain/interval/intervalsOverlapTime.js +1 -1
- package/dist/plain/interval/mergeIntervalsDate.d.ts +1 -1
- package/dist/plain/interval/mergeIntervalsDate.js +4 -4
- package/dist/plain/interval/mergeIntervalsDateTime.js +3 -3
- package/dist/plain/interval/mergeIntervalsTime.js +3 -3
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +2 -3
- package/dist/plain/interval/splitIntervalByUnitDate.js +3 -4
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +2 -1
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +3 -2
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -1
- package/dist/plain/interval/validate/isValidDateInterval.d.ts +1 -1
- package/dist/plain/interval/validate/isValidDateInterval.js +2 -2
- package/dist/plain/interval/validate/isValidDateTimeInterval.js +1 -1
- package/dist/plain/interval/validate/isValidTimeInterval.js +1 -1
- package/dist/plain/locale/getLocaleEraNames.d.ts +6 -6
- package/dist/plain/locale/getLocaleEraNames.js +8 -7
- package/dist/plain/locale/getLocaleMeridiems.d.ts +5 -5
- package/dist/plain/locale/getLocaleMeridiems.js +7 -6
- package/dist/plain/locale/getLocaleMonthNames.d.ts +6 -6
- package/dist/plain/locale/getLocaleMonthNames.js +17 -11
- package/dist/plain/locale/getLocaleWeekdayNames.d.ts +3 -3
- package/dist/plain/locale/getLocaleWeekdayNames.js +12 -5
- package/dist/plain/map/mapDatesInRange.js +1 -1
- package/dist/plain/map/mapDaysInMonth.js +1 -1
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +28 -14
- package/dist/plain/parse/parseDateTimeWithPattern.js +33 -17
- package/dist/plain/parse/parseDateWithPattern.d.ts +29 -14
- package/dist/plain/parse/parseDateWithPattern.js +34 -17
- package/dist/plain/parse/parseDayFromDate.js +1 -1
- package/dist/plain/parse/parseDayFromDateTime.js +1 -1
- package/dist/plain/parse/parseDayOfWeekFromDate.js +1 -1
- package/dist/plain/parse/parseDayOfWeekFromDateTime.js +1 -1
- package/dist/plain/parse/parseHourFromDateTime.js +1 -1
- package/dist/plain/parse/parseHourFromTime.js +1 -1
- package/dist/plain/parse/parseMicrosecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseMicrosecondFromTime.js +1 -1
- package/dist/plain/parse/parseMillisecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseMillisecondFromTime.js +1 -1
- package/dist/plain/parse/parseMinuteFromDateTime.js +1 -1
- package/dist/plain/parse/parseMinuteFromTime.js +1 -1
- package/dist/plain/parse/parseMonthFromDate.js +1 -1
- package/dist/plain/parse/parseMonthFromDateTime.js +1 -1
- package/dist/plain/parse/parseNanosecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseNanosecondFromTime.js +1 -1
- package/dist/plain/parse/parseSecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseSecondFromTime.js +1 -1
- package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
- package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +9 -9
- package/dist/plain/parse/parseTimeWithPattern.d.ts +6 -4
- package/dist/plain/parse/parseTimeWithPattern.js +8 -5
- package/dist/plain/parse/parseUnitFromDate.d.ts +4 -1
- package/dist/plain/parse/parseUnitFromDate.js +6 -2
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +4 -1
- package/dist/plain/parse/parseUnitFromDateTime.js +6 -2
- package/dist/plain/parse/parseUnitFromTime.d.ts +1 -1
- package/dist/plain/parse/parseUnitFromTime.js +1 -1
- package/dist/plain/parse/parseWeekFromDateTime.js +1 -1
- package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
- package/dist/plain/parse/parseYearFromDate.js +8 -4
- package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
- package/dist/plain/parse/parseYearFromDateTime.js +7 -4
- package/dist/plain/validate/{isLeapSecond.d.ts → hasSecond60.d.ts} +16 -14
- package/dist/plain/validate/{isLeapSecond.js → hasSecond60.js} +16 -14
- package/dist/plain/validate/index.d.ts +2 -1
- package/dist/plain/validate/index.js +2 -1
- package/dist/plain/validate/isLeapYear.js +1 -1
- package/dist/plain/validate/isValidDate.js +2 -17
- package/dist/plain/validate/isValidDateRange.js +1 -1
- package/dist/plain/validate/isValidDateTime.d.ts +1 -1
- package/dist/plain/validate/isValidDateTime.js +4 -4
- package/dist/plain/validate/isValidDateTimeRange.js +1 -1
- package/dist/plain/validate/isValidIsoDateLike.js +3 -3
- package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/plain/validate/isValidTime.js +2 -18
- package/dist/plain/validate/isValidTimeRange.js +1 -1
- package/dist/precision/convert/fromNanoseconds.d.ts +11 -5
- package/dist/precision/convert/fromNanoseconds.js +12 -6
- package/dist/precision/convert/toNanoseconds.d.ts +2 -2
- package/dist/precision/convert/toNanoseconds.js +2 -2
- package/dist/precision/index.d.ts +1 -1
- package/dist/precision/index.js +2 -2
- package/dist/precision/validate/isValidInstant.d.ts +1 -1
- package/dist/precision/validate/isValidInstant.js +1 -1
- package/dist/regex/calendar-zoned-date-time.d.ts +4 -4
- package/dist/regex/calendar-zoned-date-time.js +4 -4
- 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 +2 -1
- package/dist/regex/index.js +3 -2
- package/dist/regex/leap-second.d.ts +1 -1
- package/dist/regex/leap-second.js +1 -1
- 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 +5 -4
- package/dist/regex/time-zone-like.js +5 -4
- package/dist/regex/utc-offset.d.ts +2 -1
- package/dist/regex/utc-offset.js +2 -1
- package/dist/span/calculate/spanMs.d.ts +4 -3
- package/dist/span/calculate/spanMs.js +4 -3
- package/dist/span/calculate/spanNs.d.ts +4 -3
- package/dist/span/calculate/spanNs.js +4 -3
- package/dist/span/calculate/spanWallClock.d.ts +12 -12
- package/dist/span/calculate/spanWallClock.js +13 -13
- package/dist/span/index.d.ts +1 -1
- package/dist/span/index.js +2 -2
- package/dist/span/validate/isValidSpan.d.ts +3 -3
- package/dist/span/validate/isValidSpan.js +3 -3
- package/dist/timescale/calculate/index.d.ts +3 -0
- package/dist/timescale/calculate/index.js +3 -0
- package/dist/timescale/calculate/leapSecondsBetween.d.ts +26 -0
- package/dist/timescale/calculate/leapSecondsBetween.js +62 -0
- package/dist/timescale/calculate/nextLeapSecond.d.ts +18 -0
- package/dist/timescale/calculate/nextLeapSecond.js +33 -0
- package/dist/timescale/calculate/taiMinusUtc.d.ts +21 -0
- package/dist/timescale/calculate/taiMinusUtc.js +38 -0
- package/dist/timescale/convert/fromTAI.d.ts +22 -0
- package/dist/timescale/convert/fromTAI.js +35 -0
- package/dist/timescale/convert/index.d.ts +2 -0
- package/dist/timescale/convert/index.js +2 -0
- package/dist/timescale/convert/toTAI.d.ts +23 -0
- package/dist/timescale/convert/toTAI.js +39 -0
- package/dist/timescale/index.d.ts +4 -0
- package/dist/timescale/index.js +5 -0
- package/dist/timescale/validate/index.d.ts +1 -0
- package/dist/timescale/validate/index.js +1 -0
- package/dist/timescale/validate/isLeapSecond.d.ts +25 -0
- package/dist/timescale/validate/isLeapSecond.js +36 -0
- package/dist/transport/calculate/crossingTime.d.ts +8 -3
- package/dist/transport/calculate/crossingTime.js +9 -4
- package/dist/transport/calculate/cutoffAt.d.ts +10 -5
- package/dist/transport/calculate/cutoffAt.js +26 -133
- package/dist/transport/calculate/cutoffSchedule.d.ts +8 -3
- package/dist/transport/calculate/cutoffSchedule.js +54 -20
- package/dist/transport/calculate/dwellTime.d.ts +9 -4
- package/dist/transport/calculate/dwellTime.js +10 -5
- package/dist/transport/calculate/estimateDrift.d.ts +1 -1
- package/dist/transport/calculate/estimateDrift.js +1 -1
- package/dist/transport/calculate/nextDeparture.d.ts +2 -2
- package/dist/transport/calculate/nextDeparture.js +2 -2
- package/dist/transport/calculate/scheduleDelivery.d.ts +15 -7
- package/dist/transport/calculate/scheduleDelivery.js +9 -4
- package/dist/transport/calculate/transitTime.d.ts +11 -11
- package/dist/transport/calculate/transitTime.js +11 -11
- package/dist/transport/compare/classifyPunctuality.d.ts +1 -1
- package/dist/transport/compare/classifyPunctuality.js +1 -1
- package/dist/transport/compare/isPastCutoff.d.ts +1 -1
- package/dist/transport/compare/isPastCutoff.js +2 -2
- package/dist/transport/compare/scheduleDeviation.d.ts +1 -1
- package/dist/transport/compare/scheduleDeviation.js +1 -1
- package/dist/transport/compare/timeToCutoff.d.ts +1 -1
- package/dist/transport/compare/timeToCutoff.js +1 -1
- package/dist/transport/convert/etaAtZone.d.ts +8 -3
- package/dist/transport/convert/etaAtZone.js +8 -3
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +2 -2
- package/dist/types/business-calendar.d.ts +5 -4
- package/dist/types/date-duration-unit.d.ts +1 -1
- package/dist/types/date-time-duration-units.d.ts +1 -1
- package/dist/types/date-time-unit.d.ts +1 -1
- package/dist/types/date-unit.d.ts +1 -1
- package/dist/types/disambiguation.d.ts +1 -1
- package/dist/types/duration-relative-to.d.ts +1 -1
- package/dist/types/duration-string-options.d.ts +1 -1
- package/dist/types/duty.d.ts +777 -0
- package/dist/types/duty.js +0 -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 +40 -4
- package/dist/types/free-time-options.d.ts +4 -3
- package/dist/types/gnss.d.ts +51 -0
- package/dist/types/gnss.js +0 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +7 -0
- package/dist/types/now-unit.d.ts +1 -1
- package/dist/types/offset.d.ts +1 -1
- package/dist/types/operating-schedule.d.ts +3 -2
- package/dist/types/overflow.d.ts +1 -1
- package/dist/types/rounding-options.d.ts +1 -1
- package/dist/types/stored-zoned-classification.d.ts +83 -0
- package/dist/types/stored-zoned-classification.js +0 -0
- package/dist/types/time-duration-unit.d.ts +1 -1
- package/dist/types/time-unit.d.ts +1 -1
- package/dist/types/two-digit-year.d.ts +23 -0
- package/dist/types/two-digit-year.js +0 -0
- package/dist/types/utc-now-unit.d.ts +1 -1
- package/dist/types/zone-bucket-unit.d.ts +1 -1
- package/dist/unix/calculate/addUnix.d.ts +11 -2
- package/dist/unix/calculate/addUnix.js +14 -11
- package/dist/unix/calculate/diffUnix.d.ts +11 -3
- package/dist/unix/calculate/diffUnix.js +11 -6
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +11 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/endOfUnix.d.ts +13 -4
- package/dist/unix/calculate/endOfUnix.js +8 -1
- package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
- package/dist/unix/calculate/isBetweenUnix.js +4 -4
- package/dist/unix/calculate/roundUnix.d.ts +17 -7
- package/dist/unix/calculate/roundUnix.js +19 -10
- package/dist/unix/calculate/setUnix.d.ts +28 -8
- package/dist/unix/calculate/setUnix.js +35 -14
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/startOfUnix.d.ts +13 -4
- package/dist/unix/calculate/startOfUnix.js +8 -1
- package/dist/unix/calculate/subtractUnix.d.ts +10 -2
- package/dist/unix/calculate/subtractUnix.js +13 -11
- package/dist/unix/compare/areUnixEqualBy.d.ts +13 -4
- package/dist/unix/compare/areUnixEqualBy.js +8 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +6 -3
- package/dist/unix/convert/convertUnixToPlainTime.js +6 -5
- package/dist/unix/convert/convertUnixToZoned.d.ts +6 -2
- package/dist/unix/convert/convertUnixToZoned.js +6 -2
- package/dist/unix/format/formatCalendarUnix.d.ts +16 -11
- package/dist/unix/format/formatCalendarUnix.js +12 -7
- package/dist/unix/format/formatRelativeUnix.d.ts +17 -9
- package/dist/unix/format/formatRelativeUnix.js +19 -11
- package/dist/unix/format/formatUnix.d.ts +16 -11
- package/dist/unix/format/formatUnix.js +13 -9
- package/dist/unix/get/getUnixDay.d.ts +1 -3
- package/dist/unix/get/getUnixDay.js +6 -13
- package/dist/unix/get/getUnixHour.d.ts +1 -3
- package/dist/unix/get/getUnixHour.js +6 -13
- package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
- package/dist/unix/get/getUnixMicrosecond.js +5 -12
- package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
- package/dist/unix/get/getUnixMillisecond.js +6 -13
- package/dist/unix/get/getUnixMinute.d.ts +1 -3
- package/dist/unix/get/getUnixMinute.js +6 -13
- package/dist/unix/get/getUnixMonth.d.ts +1 -3
- package/dist/unix/get/getUnixMonth.js +6 -13
- package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
- package/dist/unix/get/getUnixNanosecond.js +5 -12
- package/dist/unix/get/getUnixNow.js +1 -1
- package/dist/unix/get/getUnixNowUnit.d.ts +3 -1
- package/dist/unix/get/getUnixNowUnit.js +3 -1
- package/dist/unix/get/getUnixSecond.d.ts +1 -3
- package/dist/unix/get/getUnixSecond.js +6 -13
- package/dist/unix/get/getUnixYear.d.ts +3 -3
- package/dist/unix/get/getUnixYear.js +6 -13
- package/dist/unix/index.d.ts +1 -1
- package/dist/unix/index.js +2 -2
- package/dist/unix/interval/intervalCountUnix.d.ts +11 -2
- package/dist/unix/interval/intervalCountUnix.js +7 -0
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
- package/dist/unix/interval/intervalFromDurationUnix.js +13 -8
- package/dist/unix/interval/intervalLengthUnix.d.ts +12 -4
- package/dist/unix/interval/intervalLengthUnix.js +8 -2
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +13 -4
- package/dist/unix/interval/splitIntervalByUnitUnix.js +16 -9
- package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDateFromUnix.js +3 -3
- package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
- package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
- package/dist/unix/parse/parseTimeFromUnix.js +4 -3
- package/dist/unix/parse/parseUnitFromUnix.d.ts +10 -4
- package/dist/unix/parse/parseUnitFromUnix.js +21 -14
- package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
- package/dist/unix/parse/parseWeekFromUnix.js +4 -4
- package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
- package/dist/unix/parse/parseYearFromUnix.js +4 -1
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.js +5 -8
- 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/endOfQuarterForUtc.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +1 -1
- package/dist/utc/calculate/isBetweenUtc.js +1 -1
- package/dist/utc/calculate/maxUtc.js +1 -1
- package/dist/utc/calculate/minUtc.js +1 -1
- package/dist/utc/calculate/roundUtc.d.ts +1 -1
- package/dist/utc/calculate/roundUtc.js +1 -1
- package/dist/utc/calculate/setUtc.d.ts +17 -4
- package/dist/utc/calculate/setUtc.js +23 -9
- package/dist/utc/calculate/sortUtc.js +1 -1
- package/dist/utc/calculate/startOfQuarterForUtc.js +1 -1
- package/dist/utc/calculate/startOfUtc.d.ts +1 -1
- package/dist/utc/calculate/subtractUtc.js +5 -8
- package/dist/utc/compare/areUtcEqual.js +1 -1
- package/dist/utc/compare/areUtcEqualBy.d.ts +2 -2
- package/dist/utc/compare/areUtcEqualBy.js +2 -2
- package/dist/utc/compare/isAfterUtc.js +1 -1
- package/dist/utc/compare/isBeforeUtc.js +1 -1
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +9 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +12 -9
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +10 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +14 -15
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +6 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +9 -8
- package/dist/utc/convert/convertUtcToUnix.js +1 -1
- package/dist/utc/convert/convertUtcToZoned.d.ts +6 -2
- package/dist/utc/convert/convertUtcToZoned.js +7 -3
- package/dist/utc/format/formatCalendarUtc.d.ts +12 -7
- package/dist/utc/format/formatCalendarUtc.js +9 -4
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +8 -8
- package/dist/utc/format/formatRelativeUtc.d.ts +15 -7
- package/dist/utc/format/formatRelativeUtc.js +17 -9
- package/dist/utc/format/formatUtc.d.ts +15 -10
- 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 +6 -13
- package/dist/utc/get/getUtcHour.d.ts +1 -3
- package/dist/utc/get/getUtcHour.js +6 -13
- package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
- package/dist/utc/get/getUtcMicrosecond.js +5 -12
- package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
- package/dist/utc/get/getUtcMillisecond.js +6 -13
- package/dist/utc/get/getUtcMinute.d.ts +1 -3
- package/dist/utc/get/getUtcMinute.js +6 -13
- package/dist/utc/get/getUtcMonth.d.ts +1 -3
- package/dist/utc/get/getUtcMonth.js +6 -13
- package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
- package/dist/utc/get/getUtcNanosecond.js +5 -12
- package/dist/utc/get/getUtcNow.d.ts +1 -3
- package/dist/utc/get/getUtcNow.js +3 -10
- package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
- package/dist/utc/get/getUtcNowUnit.js +3 -1
- package/dist/utc/get/getUtcSecond.d.ts +1 -3
- package/dist/utc/get/getUtcSecond.js +6 -13
- package/dist/utc/get/getUtcYear.d.ts +3 -3
- package/dist/utc/get/getUtcYear.js +6 -13
- package/dist/utc/index.d.ts +1 -1
- package/dist/utc/index.js +2 -2
- package/dist/utc/interval/intervalAbutsUtc.js +1 -1
- package/dist/utc/interval/intervalContainsUtc.js +1 -1
- package/dist/utc/interval/intervalCountUtc.js +1 -1
- package/dist/utc/interval/intervalDivideEquallyUtc.js +1 -1
- package/dist/utc/interval/intervalEngulfsUtc.js +1 -1
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -1
- package/dist/utc/interval/intervalLengthUtc.js +1 -1
- package/dist/utc/interval/intervalOverlappingDaysUtc.js +1 -1
- package/dist/utc/interval/intervalSplitAtUtc.js +1 -1
- package/dist/utc/interval/intervalXorAllUtc.js +3 -3
- package/dist/utc/interval/intervalXorUtc.js +1 -1
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +2 -1
- package/dist/utc/interval/splitIntervalByUnitUtc.js +3 -2
- package/dist/utc/interval/validate/isValidUtcInterval.js +1 -1
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseDateFromUtc.js +3 -3
- package/dist/utc/parse/parseDayFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseDayFromUtc.js +3 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +6 -6
- package/dist/utc/parse/parseHourFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseHourFromUtc.js +3 -3
- package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
- package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +13 -13
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +3 -3
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +3 -3
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
- package/dist/utc/parse/parseMonthFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseMonthFromUtc.js +3 -3
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +3 -3
- package/dist/utc/parse/parseSecondFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseSecondFromUtc.js +3 -3
- package/dist/utc/parse/parseTimeFromUtc.d.ts +6 -3
- package/dist/utc/parse/parseTimeFromUtc.js +7 -6
- package/dist/utc/parse/parseUnitFromUtc.d.ts +12 -5
- package/dist/utc/parse/parseUnitFromUtc.js +13 -7
- package/dist/utc/parse/parseWeekFromUtc.d.ts +5 -3
- package/dist/utc/parse/parseWeekFromUtc.js +6 -6
- package/dist/utc/parse/parseYearFromUtc.d.ts +9 -5
- package/dist/utc/parse/parseYearFromUtc.js +9 -6
- 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 +7 -3
- package/dist/utc/validate/isValidUtcRange.js +1 -1
- package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/workforce/calculate/dutyDayFor.d.ts +38 -0
- package/dist/workforce/calculate/dutyDayFor.js +71 -0
- package/dist/workforce/calculate/dutyTotals.d.ts +24 -0
- package/dist/workforce/calculate/dutyTotals.js +41 -0
- package/dist/workforce/calculate/dutyViolations.d.ts +74 -0
- package/dist/workforce/calculate/dutyViolations.js +65 -0
- package/dist/workforce/calculate/evaluateDutyLog.d.ts +77 -0
- package/dist/workforce/calculate/evaluateDutyLog.js +75 -0
- package/dist/workforce/calculate/index.d.ts +7 -0
- package/dist/workforce/calculate/index.js +7 -0
- package/dist/workforce/calculate/longestRun.d.ts +28 -0
- package/dist/workforce/calculate/longestRun.js +54 -0
- package/dist/workforce/calculate/qualifyingRestPairs.d.ts +37 -0
- package/dist/workforce/calculate/qualifyingRestPairs.js +58 -0
- package/dist/workforce/calculate/qualifyingRests.d.ts +27 -0
- package/dist/workforce/calculate/qualifyingRests.js +49 -0
- package/dist/workforce/index.d.ts +3 -0
- package/dist/workforce/index.js +4 -0
- package/dist/workforce/validate/index.d.ts +1 -0
- package/dist/workforce/validate/index.js +1 -0
- package/dist/workforce/validate/isValidDutyLog.d.ts +24 -0
- package/dist/workforce/validate/isValidDutyLog.js +34 -0
- package/dist/zoned/calculate/addZoned.d.ts +15 -15
- package/dist/zoned/calculate/addZoned.js +19 -22
- package/dist/zoned/calculate/addZonedBusinessDays.d.ts +5 -4
- package/dist/zoned/calculate/addZonedBusinessDays.js +5 -4
- package/dist/zoned/calculate/clampZoned.js +1 -1
- package/dist/zoned/calculate/diffZoned.d.ts +8 -8
- package/dist/zoned/calculate/diffZoned.js +7 -7
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +5 -5
- package/dist/zoned/calculate/diffZonedAsDuration.js +4 -4
- package/dist/zoned/calculate/endOfZoned.d.ts +3 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -2
- package/dist/zoned/calculate/getHoursInZonedDay.d.ts +2 -2
- package/dist/zoned/calculate/getHoursInZonedDay.js +2 -2
- package/dist/zoned/calculate/getLocaleZonedDayOfWeek.d.ts +6 -5
- package/dist/zoned/calculate/getLocaleZonedDayOfWeek.js +6 -5
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +5 -5
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -5
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +6 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +6 -6
- package/dist/zoned/calculate/maxZoned.d.ts +2 -2
- package/dist/zoned/calculate/maxZoned.js +3 -3
- package/dist/zoned/calculate/minZoned.d.ts +2 -2
- package/dist/zoned/calculate/minZoned.js +3 -3
- package/dist/zoned/calculate/roundZoned.d.ts +11 -9
- package/dist/zoned/calculate/roundZoned.js +11 -9
- package/dist/zoned/calculate/setZoned.d.ts +26 -12
- package/dist/zoned/calculate/setZoned.js +33 -16
- package/dist/zoned/calculate/sortZoned.d.ts +3 -3
- package/dist/zoned/calculate/sortZoned.js +4 -4
- package/dist/zoned/calculate/startOfZoned.d.ts +3 -3
- package/dist/zoned/calculate/startOfZoned.js +2 -2
- package/dist/zoned/calculate/subtractZoned.d.ts +14 -14
- package/dist/zoned/calculate/subtractZoned.js +18 -21
- package/dist/zoned/calculate/subtractZonedBusinessDays.d.ts +5 -4
- package/dist/zoned/calculate/subtractZonedBusinessDays.js +5 -4
- package/dist/zoned/chop/chopZonedDate.d.ts +1 -1
- package/dist/zoned/chop/chopZonedDate.js +1 -1
- package/dist/zoned/chop/chopZonedMilliseconds.d.ts +1 -1
- package/dist/zoned/chop/chopZonedMilliseconds.js +1 -1
- package/dist/zoned/chop/chopZonedSeconds.d.ts +1 -1
- package/dist/zoned/chop/chopZonedSeconds.js +1 -1
- package/dist/zoned/chop/chopZonedTime.d.ts +1 -1
- package/dist/zoned/chop/chopZonedTime.js +1 -1
- package/dist/zoned/chop/chopZonedTimezone.d.ts +1 -1
- package/dist/zoned/chop/chopZonedTimezone.js +1 -1
- package/dist/zoned/classify/classifyStoredZoned.d.ts +46 -0
- package/dist/zoned/classify/classifyStoredZoned.js +177 -0
- package/dist/zoned/classify/index.d.ts +1 -0
- package/dist/zoned/classify/index.js +1 -0
- package/dist/zoned/compare/areZonedEqual.js +1 -1
- package/dist/zoned/compare/areZonedEqualBy.d.ts +8 -10
- package/dist/zoned/compare/areZonedEqualBy.js +8 -10
- package/dist/zoned/compare/isAfterZoned.js +1 -1
- package/dist/zoned/compare/isBeforeZoned.d.ts +2 -2
- package/dist/zoned/compare/isBeforeZoned.js +3 -3
- package/dist/zoned/compare/isBetweenZoned.js +1 -1
- package/dist/zoned/compare/isInDaylightSaving.d.ts +2 -2
- package/dist/zoned/compare/isInDaylightSaving.js +2 -2
- package/dist/zoned/compare/isZonedBusinessDay.d.ts +7 -6
- package/dist/zoned/compare/isZonedBusinessDay.js +7 -6
- package/dist/zoned/compare/isZonedFuture.js +1 -1
- package/dist/zoned/compare/isZonedPast.js +1 -1
- package/dist/zoned/compare/isZonedRelativeDay.d.ts +2 -2
- package/dist/zoned/compare/isZonedRelativeDay.js +3 -3
- package/dist/zoned/compare/isZonedThisUnit.d.ts +7 -7
- package/dist/zoned/compare/isZonedThisUnit.js +7 -7
- package/dist/zoned/compare/isZonedWeekend.d.ts +5 -5
- package/dist/zoned/compare/isZonedWeekend.js +5 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +10 -7
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +10 -7
- package/dist/zoned/convert/convertZonedToCalendar.d.ts +5 -5
- package/dist/zoned/convert/convertZonedToCalendar.js +5 -5
- package/dist/zoned/convert/convertZonedToPlainDateTime.d.ts +3 -3
- package/dist/zoned/convert/convertZonedToPlainDateTime.js +3 -3
- package/dist/zoned/convert/convertZonedToZoned.d.ts +7 -3
- package/dist/zoned/convert/convertZonedToZoned.js +7 -3
- package/dist/zoned/format/formatCalendarZoned.d.ts +7 -6
- package/dist/zoned/format/formatCalendarZoned.js +7 -6
- package/dist/zoned/format/formatRelativeZoned.d.ts +3 -3
- package/dist/zoned/format/formatRelativeZoned.js +6 -5
- package/dist/zoned/format/formatRfc2822.d.ts +3 -3
- package/dist/zoned/format/formatRfc2822.js +3 -3
- package/dist/zoned/format/formatRfc3339.d.ts +2 -2
- package/dist/zoned/format/formatRfc3339.js +2 -2
- package/dist/zoned/format/formatTimeZoneName.d.ts +22 -18
- package/dist/zoned/format/formatTimeZoneName.js +18 -13
- package/dist/zoned/format/formatZonedDateTime.d.ts +10 -10
- package/dist/zoned/format/formatZonedDateTime.js +12 -11
- package/dist/zoned/format/formatZonedRange.d.ts +7 -7
- package/dist/zoned/format/formatZonedRange.js +9 -8
- package/dist/zoned/format/formatZonedToParts.d.ts +11 -11
- package/dist/zoned/format/formatZonedToParts.js +13 -12
- package/dist/zoned/get/getDstTransitions.d.ts +14 -12
- package/dist/zoned/get/getDstTransitions.js +15 -10
- package/dist/zoned/get/getSystemTimeZone.d.ts +5 -3
- package/dist/zoned/get/getSystemTimeZone.js +7 -4
- package/dist/zoned/get/getTimeZoneOffset.d.ts +15 -7
- package/dist/zoned/get/getTimeZoneOffset.js +23 -10
- package/dist/zoned/get/getTimeZones.d.ts +1 -1
- package/dist/zoned/get/getTimeZones.js +1 -1
- package/dist/zoned/get/getZonedDay.d.ts +3 -2
- package/dist/zoned/get/getZonedDay.js +7 -8
- package/dist/zoned/get/getZonedDayOfWeek.d.ts +3 -2
- package/dist/zoned/get/getZonedDayOfWeek.js +7 -6
- package/dist/zoned/get/getZonedHour.d.ts +3 -2
- package/dist/zoned/get/getZonedHour.js +7 -8
- package/dist/zoned/get/getZonedMicrosecond.d.ts +3 -2
- package/dist/zoned/get/getZonedMicrosecond.js +7 -6
- package/dist/zoned/get/getZonedMillisecond.d.ts +3 -2
- package/dist/zoned/get/getZonedMillisecond.js +7 -8
- package/dist/zoned/get/getZonedMinute.d.ts +3 -2
- package/dist/zoned/get/getZonedMinute.js +7 -8
- package/dist/zoned/get/getZonedMonth.d.ts +3 -2
- package/dist/zoned/get/getZonedMonth.js +7 -8
- package/dist/zoned/get/getZonedNanosecond.d.ts +3 -2
- package/dist/zoned/get/getZonedNanosecond.js +7 -6
- package/dist/zoned/get/getZonedNow.d.ts +9 -5
- package/dist/zoned/get/getZonedNow.js +9 -5
- package/dist/zoned/get/getZonedNowUnit.d.ts +7 -4
- package/dist/zoned/get/getZonedNowUnit.js +11 -8
- package/dist/zoned/get/getZonedSecond.d.ts +3 -2
- package/dist/zoned/get/getZonedSecond.js +7 -8
- package/dist/zoned/get/getZonedToday.d.ts +3 -2
- package/dist/zoned/get/getZonedToday.js +7 -6
- package/dist/zoned/get/getZonedWeekOfYear.d.ts +3 -2
- package/dist/zoned/get/getZonedWeekOfYear.js +7 -6
- package/dist/zoned/get/getZonedYear.d.ts +5 -2
- package/dist/zoned/get/getZonedYear.js +10 -8
- package/dist/zoned/index.d.ts +2 -1
- package/dist/zoned/index.js +3 -2
- package/dist/zoned/interval/intervalAbutsZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalAbutsZoned.js +3 -3
- package/dist/zoned/interval/intervalContainsZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalContainsZoned.js +2 -2
- package/dist/zoned/interval/intervalCountZoned.d.ts +4 -4
- package/dist/zoned/interval/intervalCountZoned.js +5 -5
- package/dist/zoned/interval/intervalDifferenceZoned.js +1 -1
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +2 -2
- package/dist/zoned/interval/intervalEngulfsZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalEngulfsZoned.js +2 -2
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +6 -6
- package/dist/zoned/interval/intervalFromDurationZoned.js +7 -7
- package/dist/zoned/interval/intervalIntersectionZoned.js +1 -1
- package/dist/zoned/interval/intervalLengthZoned.d.ts +5 -5
- package/dist/zoned/interval/intervalLengthZoned.js +5 -5
- package/dist/zoned/interval/intervalOverlappingDaysZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalOverlappingDaysZoned.js +3 -3
- package/dist/zoned/interval/intervalSplitAtZoned.js +14 -16
- package/dist/zoned/interval/intervalUnionZoned.js +1 -1
- package/dist/zoned/interval/intervalXorAllZoned.js +3 -3
- package/dist/zoned/interval/intervalXorZoned.js +1 -1
- package/dist/zoned/interval/intervalsOverlapZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalsOverlapZoned.js +3 -3
- package/dist/zoned/interval/mergeIntervalsZoned.js +3 -3
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +2 -1
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +3 -2
- package/dist/zoned/interval/validate/isValidCalendarZonedInterval.d.ts +2 -2
- package/dist/zoned/interval/validate/isValidCalendarZonedInterval.js +3 -3
- package/dist/zoned/interval/validate/isValidZonedInterval.d.ts +1 -1
- package/dist/zoned/interval/validate/isValidZonedInterval.js +2 -2
- package/dist/zoned/map/mapZonedDatesInRange.js +1 -1
- package/dist/zoned/map/mapZonedHoursInDay.d.ts +1 -1
- package/dist/zoned/map/mapZonedHoursInDay.js +2 -2
- package/dist/zoned/parse/getZonedOffset.d.ts +1 -1
- package/dist/zoned/parse/getZonedOffset.js +1 -1
- package/dist/zoned/parse/getZonedOffsetAs.d.ts +6 -6
- package/dist/zoned/parse/getZonedOffsetAs.js +3 -3
- package/dist/zoned/parse/parseDateTimeFromZoned.js +2 -2
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseRfc3339.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +5 -2
- package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +6 -4
- package/dist/zoned/validate/hasDaylightSaving.js +16 -10
- package/dist/zoned/validate/index.d.ts +2 -0
- package/dist/zoned/validate/index.js +2 -0
- package/dist/zoned/validate/isValidCalendarZonedDateTime.d.ts +8 -8
- package/dist/zoned/validate/isValidCalendarZonedDateTime.js +8 -8
- 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 +6 -2
- package/dist/zoned/validate/isValidTimeZone.js +8 -19
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +7 -7
- package/dist/zoned/validate/isValidZonedDateTime.js +9 -9
- package/dist/zoned/validate/isValidZonedRange.d.ts +1 -1
- package/dist/zoned/validate/isValidZonedRange.js +5 -5
- package/package.json +103 -4
- package/skills/gmt-arithmetic/SKILL.md +63 -17
- package/skills/gmt-basics/SKILL.md +83 -21
- package/skills/gmt-gnss/SKILL.md +92 -0
- package/skills/gmt-integration/SKILL.md +58 -10
- package/skills/gmt-intermodal/SKILL.md +189 -0
- package/skills/gmt-timezone/SKILL.md +51 -169
- package/skills/gmt-transport/SKILL.md +133 -0
- package/skills/gmt-workforce/SKILL.md +84 -0
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -19
- package/dist/internal/utcZonedDateTime.js +0 -31
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return true when `value` is a real HTTP header date: the RFC 9110 §5.6.7 HTTP-date that
|
|
3
|
+
* headers like `Last-Modified`, `Date` and `Expires` carry, such as
|
|
4
|
+
* `Fri, 15 Mar 2024 14:30:00 GMT`.
|
|
5
|
+
*
|
|
6
|
+
* - True exactly when `parseHttpDate` returns a UTC string for the same value: the validator
|
|
7
|
+
* calls the parser, so the two cannot disagree.
|
|
8
|
+
* - **All three HTTP-date formats**, which RFC 9110 §5.6.7 says a recipient "MUST accept":
|
|
9
|
+
* IMF-fixdate, and the obsolete rfc850-date (`Sunday, 06-Nov-94 08:49:37 GMT`) and asctime-date
|
|
10
|
+
* (`Sun Nov 6 08:49:37 1994`). The `httpDate` pattern matches IMF-fixdate alone.
|
|
11
|
+
* - Checks the calendar as well as the shape. The pattern matches a day that does not exist:
|
|
12
|
+
* `31 Feb`, `29 Feb 2023` and `31 Jun` are false here.
|
|
13
|
+
* - **The day name must match the date, in all three formats.** The pattern does not check it.
|
|
14
|
+
* - False for an hour above 23 and a minute above 59, which the pattern matches. False for a
|
|
15
|
+
* second of 60: GMT rejects leap seconds.
|
|
16
|
+
* - HTTP-date is case-sensitive and fixed-width, and its zone is the literal `GMT`: a numeric
|
|
17
|
+
* offset is false.
|
|
18
|
+
* - **An rfc850-date reads the clock.** Its two-digit year is read against the current instant
|
|
19
|
+
* (`Temporal.Now.instant()`), as `parseHttpDate` describes, so the same string can change its
|
|
20
|
+
* answer decades apart; if the clock cannot be read the answer is false. The other two formats
|
|
21
|
+
* never read the clock.
|
|
22
|
+
* - False for a non-string. Read the value with `parseHttpDate`; write one with `formatHttpDate`.
|
|
23
|
+
*
|
|
24
|
+
* @param value candidate RFC 9110 HTTP-date string
|
|
25
|
+
* @returns boolean indicating validity
|
|
26
|
+
*
|
|
27
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 GMT") // true
|
|
28
|
+
* @example isValidHttpDate("Sun Nov 6 08:49:37 1994") // true (asctime-date; the httpDate pattern does not match it)
|
|
29
|
+
* @example isValidHttpDate("Sat, 15 Mar 2024 14:30:00 GMT") // false (15 Mar 2024 was a Friday; the httpDate pattern matches it)
|
|
30
|
+
* @example isValidHttpDate("Wed, 29 Feb 2023 14:30:00 GMT") // false (2023 has no 29 February; the httpDate pattern matches it)
|
|
31
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 24:00:00 GMT") // false (hour 24; the httpDate pattern matches it)
|
|
32
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 -0400") // false (not an HTTP-date)
|
|
33
|
+
* @example isValidHttpDate("not a date") // false
|
|
34
|
+
*/
|
|
35
|
+
export declare function isValidHttpDate(value: string): boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parseHttpDate } from "../parse/parseHttpDate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a real HTTP header date: the RFC 9110 §5.6.7 HTTP-date that
|
|
4
|
+
* headers like `Last-Modified`, `Date` and `Expires` carry, such as
|
|
5
|
+
* `Fri, 15 Mar 2024 14:30:00 GMT`.
|
|
6
|
+
*
|
|
7
|
+
* - True exactly when `parseHttpDate` returns a UTC string for the same value: the validator
|
|
8
|
+
* calls the parser, so the two cannot disagree.
|
|
9
|
+
* - **All three HTTP-date formats**, which RFC 9110 §5.6.7 says a recipient "MUST accept":
|
|
10
|
+
* IMF-fixdate, and the obsolete rfc850-date (`Sunday, 06-Nov-94 08:49:37 GMT`) and asctime-date
|
|
11
|
+
* (`Sun Nov 6 08:49:37 1994`). The `httpDate` pattern matches IMF-fixdate alone.
|
|
12
|
+
* - Checks the calendar as well as the shape. The pattern matches a day that does not exist:
|
|
13
|
+
* `31 Feb`, `29 Feb 2023` and `31 Jun` are false here.
|
|
14
|
+
* - **The day name must match the date, in all three formats.** The pattern does not check it.
|
|
15
|
+
* - False for an hour above 23 and a minute above 59, which the pattern matches. False for a
|
|
16
|
+
* second of 60: GMT rejects leap seconds.
|
|
17
|
+
* - HTTP-date is case-sensitive and fixed-width, and its zone is the literal `GMT`: a numeric
|
|
18
|
+
* offset is false.
|
|
19
|
+
* - **An rfc850-date reads the clock.** Its two-digit year is read against the current instant
|
|
20
|
+
* (`Temporal.Now.instant()`), as `parseHttpDate` describes, so the same string can change its
|
|
21
|
+
* answer decades apart; if the clock cannot be read the answer is false. The other two formats
|
|
22
|
+
* never read the clock.
|
|
23
|
+
* - False for a non-string. Read the value with `parseHttpDate`; write one with `formatHttpDate`.
|
|
24
|
+
*
|
|
25
|
+
* @param value candidate RFC 9110 HTTP-date string
|
|
26
|
+
* @returns boolean indicating validity
|
|
27
|
+
*
|
|
28
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 GMT") // true
|
|
29
|
+
* @example isValidHttpDate("Sun Nov 6 08:49:37 1994") // true (asctime-date; the httpDate pattern does not match it)
|
|
30
|
+
* @example isValidHttpDate("Sat, 15 Mar 2024 14:30:00 GMT") // false (15 Mar 2024 was a Friday; the httpDate pattern matches it)
|
|
31
|
+
* @example isValidHttpDate("Wed, 29 Feb 2023 14:30:00 GMT") // false (2023 has no 29 February; the httpDate pattern matches it)
|
|
32
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 24:00:00 GMT") // false (hour 24; the httpDate pattern matches it)
|
|
33
|
+
* @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 -0400") // false (not an HTTP-date)
|
|
34
|
+
* @example isValidHttpDate("not a date") // false
|
|
35
|
+
*/
|
|
36
|
+
export function isValidHttpDate(value) {
|
|
37
|
+
return parseHttpDate(value) !== "";
|
|
38
|
+
}
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* - Reads RFC 9557 annotations as `Temporal.Instant.from` does: elective ones (`[foo=bar]`), a
|
|
7
7
|
* time zone annotation and a calendar annotation are ignored (an instant has neither), and an
|
|
8
8
|
* unknown critical one (`[!foo=bar]`) is rejected.
|
|
9
|
+
* - Accepts four forms beyond the timestamp shape `YYYY-MM-DDTHH:MM:SS[.f]Z`: a time without
|
|
10
|
+
* seconds, a comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations.
|
|
11
|
+
* For the plain RFC 3339 spelling that readers other than Temporal expect, use
|
|
12
|
+
* `isValidUtcTimestamp`, which is false for all four.
|
|
9
13
|
* - Rejects leap seconds (e.g., "2024-12-31T23:59:60Z").
|
|
10
14
|
* - Uses Temporal.Instant.from for validation.
|
|
11
15
|
* - Requires a time component — date-only strings ("2024-01-01Z") are rejected.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Temporal } from "
|
|
1
|
+
import { Temporal } from "../../internal/temporal.js";
|
|
2
2
|
import { isoStringBody } from "../../internal/isoStringBody.js";
|
|
3
|
-
import {
|
|
3
|
+
import { hasSecond60 } from "../../plain/validate/index.js";
|
|
4
4
|
import { utcDateTime } from "../../regex/utc-date-time.js";
|
|
5
5
|
/**
|
|
6
6
|
* Return true when the provided string is a valid ISO 8601 UTC datetime.
|
|
@@ -10,6 +10,10 @@ import { utcDateTime } from "../../regex/utc-date-time.js";
|
|
|
10
10
|
* - Reads RFC 9557 annotations as `Temporal.Instant.from` does: elective ones (`[foo=bar]`), a
|
|
11
11
|
* time zone annotation and a calendar annotation are ignored (an instant has neither), and an
|
|
12
12
|
* unknown critical one (`[!foo=bar]`) is rejected.
|
|
13
|
+
* - Accepts four forms beyond the timestamp shape `YYYY-MM-DDTHH:MM:SS[.f]Z`: a time without
|
|
14
|
+
* seconds, a comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations.
|
|
15
|
+
* For the plain RFC 3339 spelling that readers other than Temporal expect, use
|
|
16
|
+
* `isValidUtcTimestamp`, which is false for all four.
|
|
13
17
|
* - Rejects leap seconds (e.g., "2024-12-31T23:59:60Z").
|
|
14
18
|
* - Uses Temporal.Instant.from for validation.
|
|
15
19
|
* - Requires a time component — date-only strings ("2024-01-01Z") are rejected.
|
|
@@ -27,7 +31,7 @@ import { utcDateTime } from "../../regex/utc-date-time.js";
|
|
|
27
31
|
*/
|
|
28
32
|
export function isValidUtc(value) {
|
|
29
33
|
const body = isoStringBody(value);
|
|
30
|
-
if (
|
|
34
|
+
if (hasSecond60(body)) {
|
|
31
35
|
return false;
|
|
32
36
|
}
|
|
33
37
|
if (!utcDateTime.test(body)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- cross-family Temporal type clone, by design (rule 5)
|
|
2
|
-
import { Temporal } from "
|
|
2
|
+
import { Temporal } from "../../internal/temporal.js";
|
|
3
3
|
import { isValidUtc } from "./isValidUtc.js";
|
|
4
4
|
import { isObject, isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
/**
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return true when `value` is a real UTC instant written as `YYYY-MM-DDTHH:MM:SS[.f]Z` and
|
|
3
|
+
* nothing else: a narrower check than `isValidUtc`.
|
|
4
|
+
*
|
|
5
|
+
* - The shape is one spelling of the RFC 3339 §5.6 `date-time`: a four-digit year, `0000` to
|
|
6
|
+
* `9999` (`date-fullyear = 4DIGIT`), an upper-case `T`, a time with seconds, an optional
|
|
7
|
+
* fraction of one to nine digits after a dot (`time-secfrac = "." 1*DIGIT`; GMT stops at nine
|
|
8
|
+
* because Temporal keeps nanoseconds), and an upper-case `Z` with nothing after it.
|
|
9
|
+
* - Use it for a string headed for storage, or for a reader that is not Temporal: the shape is
|
|
10
|
+
* plain RFC 3339, and the one `Temporal.Instant.prototype.toString()`, called with no options,
|
|
11
|
+
* writes for years `0000` to `9999`.
|
|
12
|
+
* - Use `isValidUtc` when Temporal is the only reader. It also accepts a time without seconds, a
|
|
13
|
+
* comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations; all four are
|
|
14
|
+
* false here.
|
|
15
|
+
* - A subset of `isValidUtc`: every string that is true here is true there. The instant is
|
|
16
|
+
* checked as well as the shape, so a day that does not exist is false.
|
|
17
|
+
* - False for the other spellings §5.6 allows: a lower-case `t` or `z`, a space for `T` (its
|
|
18
|
+
* NOTE), and a numeric offset, `+00:00` included. `isValidRfc3339DateTime` checks the whole
|
|
19
|
+
* grammar, with the same two GMT limits.
|
|
20
|
+
* - False for a leap second (`:60`), although §5.6 `time-second` admits it: GMT rejects leap
|
|
21
|
+
* seconds because Temporal would read one as `:59`.
|
|
22
|
+
* - Not one canonical spelling: `12:00:00Z` and `12:00:00.000Z` are one instant and both are
|
|
23
|
+
* true. A reader may still refuse or round a string that is true here: PostgreSQL has no year
|
|
24
|
+
* `0000` and keeps microseconds. See `toPgMicroseconds` and `precision/`.
|
|
25
|
+
* - False for a non-string.
|
|
26
|
+
*
|
|
27
|
+
* @param value candidate UTC timestamp string
|
|
28
|
+
* @returns true when `value` is a real UTC instant in this shape, or false on invalid input
|
|
29
|
+
*
|
|
30
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00Z") // true
|
|
31
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00.123456789Z") // true (nine fraction digits)
|
|
32
|
+
* @example isValidUtcTimestamp("0000-01-01T00:00:00Z") // true (year 0000)
|
|
33
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00Z[Europe/Paris]") // false (RFC 9557 annotation; isValidUtc accepts it)
|
|
34
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00,5Z") // false (comma before the fraction; isValidUtc accepts it)
|
|
35
|
+
* @example isValidUtcTimestamp("-005000-01-01T00:00:00Z") // false (expanded year; isValidUtc accepts it)
|
|
36
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00Z") // false (no seconds; isValidUtc accepts it)
|
|
37
|
+
* @example isValidUtcTimestamp("2026-10-06t12:00:00z") // false (lower-case t and z)
|
|
38
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00+00:00") // false (a numeric offset, not Z)
|
|
39
|
+
* @example isValidUtcTimestamp("2026-02-30T00:00:00Z") // false (February has no 30th; the rfc3339DateTime pattern matches it)
|
|
40
|
+
* @example isValidUtcTimestamp("2016-12-31T23:59:60Z") // false (leap second)
|
|
41
|
+
* @example isValidUtcTimestamp("not a date") // false
|
|
42
|
+
*/
|
|
43
|
+
export declare function isValidUtcTimestamp(value: string): boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { rfc3339DateTime } from "../../regex/rfc-3339.js";
|
|
2
|
+
import { isValidUtc } from "./isValidUtc.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return true when `value` is a real UTC instant written as `YYYY-MM-DDTHH:MM:SS[.f]Z` and
|
|
5
|
+
* nothing else: a narrower check than `isValidUtc`.
|
|
6
|
+
*
|
|
7
|
+
* - The shape is one spelling of the RFC 3339 §5.6 `date-time`: a four-digit year, `0000` to
|
|
8
|
+
* `9999` (`date-fullyear = 4DIGIT`), an upper-case `T`, a time with seconds, an optional
|
|
9
|
+
* fraction of one to nine digits after a dot (`time-secfrac = "." 1*DIGIT`; GMT stops at nine
|
|
10
|
+
* because Temporal keeps nanoseconds), and an upper-case `Z` with nothing after it.
|
|
11
|
+
* - Use it for a string headed for storage, or for a reader that is not Temporal: the shape is
|
|
12
|
+
* plain RFC 3339, and the one `Temporal.Instant.prototype.toString()`, called with no options,
|
|
13
|
+
* writes for years `0000` to `9999`.
|
|
14
|
+
* - Use `isValidUtc` when Temporal is the only reader. It also accepts a time without seconds, a
|
|
15
|
+
* comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations; all four are
|
|
16
|
+
* false here.
|
|
17
|
+
* - A subset of `isValidUtc`: every string that is true here is true there. The instant is
|
|
18
|
+
* checked as well as the shape, so a day that does not exist is false.
|
|
19
|
+
* - False for the other spellings §5.6 allows: a lower-case `t` or `z`, a space for `T` (its
|
|
20
|
+
* NOTE), and a numeric offset, `+00:00` included. `isValidRfc3339DateTime` checks the whole
|
|
21
|
+
* grammar, with the same two GMT limits.
|
|
22
|
+
* - False for a leap second (`:60`), although §5.6 `time-second` admits it: GMT rejects leap
|
|
23
|
+
* seconds because Temporal would read one as `:59`.
|
|
24
|
+
* - Not one canonical spelling: `12:00:00Z` and `12:00:00.000Z` are one instant and both are
|
|
25
|
+
* true. A reader may still refuse or round a string that is true here: PostgreSQL has no year
|
|
26
|
+
* `0000` and keeps microseconds. See `toPgMicroseconds` and `precision/`.
|
|
27
|
+
* - False for a non-string.
|
|
28
|
+
*
|
|
29
|
+
* @param value candidate UTC timestamp string
|
|
30
|
+
* @returns true when `value` is a real UTC instant in this shape, or false on invalid input
|
|
31
|
+
*
|
|
32
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00Z") // true
|
|
33
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00.123456789Z") // true (nine fraction digits)
|
|
34
|
+
* @example isValidUtcTimestamp("0000-01-01T00:00:00Z") // true (year 0000)
|
|
35
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00Z[Europe/Paris]") // false (RFC 9557 annotation; isValidUtc accepts it)
|
|
36
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00,5Z") // false (comma before the fraction; isValidUtc accepts it)
|
|
37
|
+
* @example isValidUtcTimestamp("-005000-01-01T00:00:00Z") // false (expanded year; isValidUtc accepts it)
|
|
38
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00Z") // false (no seconds; isValidUtc accepts it)
|
|
39
|
+
* @example isValidUtcTimestamp("2026-10-06t12:00:00z") // false (lower-case t and z)
|
|
40
|
+
* @example isValidUtcTimestamp("2026-10-06T12:00:00+00:00") // false (a numeric offset, not Z)
|
|
41
|
+
* @example isValidUtcTimestamp("2026-02-30T00:00:00Z") // false (February has no 30th; the rfc3339DateTime pattern matches it)
|
|
42
|
+
* @example isValidUtcTimestamp("2016-12-31T23:59:60Z") // false (leap second)
|
|
43
|
+
* @example isValidUtcTimestamp("not a date") // false
|
|
44
|
+
*/
|
|
45
|
+
export function isValidUtcTimestamp(value) {
|
|
46
|
+
// `isValidUtc` goes first: it stops a non-string before the pattern would read it as text.
|
|
47
|
+
return isValidUtc(value) && rfc3339DateTime.test(value);
|
|
48
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { DutyDay, Interval } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the operator-designated day an instant falls in: from the most recent `dayStartTime`
|
|
4
|
+
* in `timeZone` at or before the instant, up to (not including) the next one.
|
|
5
|
+
*
|
|
6
|
+
* The day an hours-of-work rule counts is the operator's, not the local midnight where the
|
|
7
|
+
* person happens to be, so the reference zone and the start time are both the caller's and
|
|
8
|
+
* neither has a default.
|
|
9
|
+
*
|
|
10
|
+
* - A `dayStartTime` that a clock change skips or repeats is resolved under `day.disambiguation`,
|
|
11
|
+
* the CORE-4 policy in `resolveLocal`. The default, `"compatible"`, reads a skipped time after
|
|
12
|
+
* the gap (02:30 on New York's spring-forward day is 03:30) and a repeated one at its first
|
|
13
|
+
* pass. The day that holds the change is then shorter or longer by the change: 23 or 25 hours
|
|
14
|
+
* across a one-hour change, 24.5 across Lord Howe's 30-minute fall-back, 21 across Casey's
|
|
15
|
+
* three-hour jump. `"reject"` returns `null` for
|
|
16
|
+
* a day that starts or ends at such a time.
|
|
17
|
+
* - The instant is read in `timeZone` whatever offset or zone it is written with, so a log whose
|
|
18
|
+
* entries cross zones still falls into the reference zone's days.
|
|
19
|
+
* - A date whose start resolves onto the next date's start opens no day: the date
|
|
20
|
+
* `Pacific/Apia` deleted in 2011 is part of no operator day.
|
|
21
|
+
* - Returns `null` when `instant` is not an ISO 8601 instant string, when `day` is not an object
|
|
22
|
+
* with a valid `timeZone` and a `dayStartTime` that `isValidTime` accepts, and when the day or
|
|
23
|
+
* the next one starts outside Temporal's instant range.
|
|
24
|
+
*
|
|
25
|
+
* @param instant ISO 8601 instant string to place
|
|
26
|
+
* @param day the reference zone and the local time each day starts at
|
|
27
|
+
* @returns `{ start, end }` of the day as UTC instants ending in "Z", or null on invalid input
|
|
28
|
+
*
|
|
29
|
+
* @example dutyDayFor("2024-01-01T08:59:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2023-12-31T09:00:00Z", end: "2024-01-01T09:00:00Z" } — 03:59 local is the previous day
|
|
30
|
+
* @example dutyDayFor("2024-01-01T09:00:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2024-01-01T09:00:00Z", end: "2024-01-02T09:00:00Z" }
|
|
31
|
+
* @example dutyDayFor("2024-03-10T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "02:30" }) // { start: "2024-03-10T07:30:00Z", end: "2024-03-11T06:30:00Z" } — 02:30 is skipped, read as 03:30; 23 hours
|
|
32
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30" }) // { start: "2024-11-03T05:30:00Z", end: "2024-11-04T06:30:00Z" } — 01:30 is repeated, the first pass starts it; 25 hours
|
|
33
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "later" }) // { start: "2024-11-03T06:30:00Z", end: "2024-11-04T06:30:00Z" } — the second pass; 24 hours
|
|
34
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "reject" }) // null — the day starts at a repeated time
|
|
35
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "UTC" }) // null — no dayStartTime
|
|
36
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "Invalid/Zone", dayStartTime: "04:00" }) // null
|
|
37
|
+
*/
|
|
38
|
+
export declare function dutyDayFor(instant: string, day: DutyDay): Interval | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Temporal } from "../../internal/temporal.js";
|
|
2
|
+
import { isObject, parseInstantNanoseconds, zoneFrame } from "../../internal/index.js";
|
|
3
|
+
import { operatorDayScale, parseDayStartTime, } from "../../internal/dutyPeriods.js";
|
|
4
|
+
import { parseScheduleDisambiguation } from "../../internal/operatingSchedule.js";
|
|
5
|
+
/**
|
|
6
|
+
* Return the operator-designated day an instant falls in: from the most recent `dayStartTime`
|
|
7
|
+
* in `timeZone` at or before the instant, up to (not including) the next one.
|
|
8
|
+
*
|
|
9
|
+
* The day an hours-of-work rule counts is the operator's, not the local midnight where the
|
|
10
|
+
* person happens to be, so the reference zone and the start time are both the caller's and
|
|
11
|
+
* neither has a default.
|
|
12
|
+
*
|
|
13
|
+
* - A `dayStartTime` that a clock change skips or repeats is resolved under `day.disambiguation`,
|
|
14
|
+
* the CORE-4 policy in `resolveLocal`. The default, `"compatible"`, reads a skipped time after
|
|
15
|
+
* the gap (02:30 on New York's spring-forward day is 03:30) and a repeated one at its first
|
|
16
|
+
* pass. The day that holds the change is then shorter or longer by the change: 23 or 25 hours
|
|
17
|
+
* across a one-hour change, 24.5 across Lord Howe's 30-minute fall-back, 21 across Casey's
|
|
18
|
+
* three-hour jump. `"reject"` returns `null` for
|
|
19
|
+
* a day that starts or ends at such a time.
|
|
20
|
+
* - The instant is read in `timeZone` whatever offset or zone it is written with, so a log whose
|
|
21
|
+
* entries cross zones still falls into the reference zone's days.
|
|
22
|
+
* - A date whose start resolves onto the next date's start opens no day: the date
|
|
23
|
+
* `Pacific/Apia` deleted in 2011 is part of no operator day.
|
|
24
|
+
* - Returns `null` when `instant` is not an ISO 8601 instant string, when `day` is not an object
|
|
25
|
+
* with a valid `timeZone` and a `dayStartTime` that `isValidTime` accepts, and when the day or
|
|
26
|
+
* the next one starts outside Temporal's instant range.
|
|
27
|
+
*
|
|
28
|
+
* @param instant ISO 8601 instant string to place
|
|
29
|
+
* @param day the reference zone and the local time each day starts at
|
|
30
|
+
* @returns `{ start, end }` of the day as UTC instants ending in "Z", or null on invalid input
|
|
31
|
+
*
|
|
32
|
+
* @example dutyDayFor("2024-01-01T08:59:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2023-12-31T09:00:00Z", end: "2024-01-01T09:00:00Z" } — 03:59 local is the previous day
|
|
33
|
+
* @example dutyDayFor("2024-01-01T09:00:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2024-01-01T09:00:00Z", end: "2024-01-02T09:00:00Z" }
|
|
34
|
+
* @example dutyDayFor("2024-03-10T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "02:30" }) // { start: "2024-03-10T07:30:00Z", end: "2024-03-11T06:30:00Z" } — 02:30 is skipped, read as 03:30; 23 hours
|
|
35
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30" }) // { start: "2024-11-03T05:30:00Z", end: "2024-11-04T06:30:00Z" } — 01:30 is repeated, the first pass starts it; 25 hours
|
|
36
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "later" }) // { start: "2024-11-03T06:30:00Z", end: "2024-11-04T06:30:00Z" } — the second pass; 24 hours
|
|
37
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "reject" }) // null — the day starts at a repeated time
|
|
38
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "UTC" }) // null — no dayStartTime
|
|
39
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "Invalid/Zone", dayStartTime: "04:00" }) // null
|
|
40
|
+
*/
|
|
41
|
+
export function dutyDayFor(instant, day) {
|
|
42
|
+
try {
|
|
43
|
+
if (typeof instant !== "string" || !isObject(day)) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const { timeZone, dayStartTime } = day;
|
|
47
|
+
const disambiguation = parseScheduleDisambiguation(day);
|
|
48
|
+
const at = parseInstantNanoseconds(instant);
|
|
49
|
+
const frame = zoneFrame(timeZone);
|
|
50
|
+
const time = parseDayStartTime(dayStartTime);
|
|
51
|
+
if (at === null ||
|
|
52
|
+
frame === null ||
|
|
53
|
+
time === null ||
|
|
54
|
+
disambiguation === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const span = operatorDayScale(frame, time, disambiguation).containing(at);
|
|
58
|
+
if (span === null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
start: Temporal.Instant.fromEpochNanoseconds(span.start).toString(),
|
|
63
|
+
end: Temporal.Instant.fromEpochNanoseconds(span.end).toString(),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Never throws (Core Rule 3): a hostile
|
|
68
|
+
// argument is invalid input, not an exception.
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DutyEntry, Interval } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the time a duty log spends in any of `statuses` inside a window, as an exact ISO 8601
|
|
4
|
+
* duration.
|
|
5
|
+
*
|
|
6
|
+
* - The interval algebra of CORE-6: the entries in `statuses` are merged, each run is cut to
|
|
7
|
+
* `window` (half-open), and what is left is summed. An entry that crosses the window's edge
|
|
8
|
+
* counts only its part inside.
|
|
9
|
+
* - Hours are the largest unit, as `sumIntervals` writes it: `"PT49H30M"`, never days.
|
|
10
|
+
* - `[]` as `statuses`, an empty log or an empty window gives `"PT0S"`.
|
|
11
|
+
* - Returns `""` when the log fails `isValidDutyLog`, when `window` is not a valid `Interval`, and
|
|
12
|
+
* when `statuses` is not an array of strings.
|
|
13
|
+
*
|
|
14
|
+
* @param log the duty log, ordered and non-overlapping
|
|
15
|
+
* @param window `{ start, end }` record of ISO 8601 instant strings to total inside
|
|
16
|
+
* @param statuses the statuses whose time is totalled
|
|
17
|
+
* @returns ISO 8601 duration string, or "" on invalid input
|
|
18
|
+
*
|
|
19
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }, { status: "onDuty", start: "2024-01-01T15:00:00Z", end: "2024-01-01T17:00:00Z" }, { status: "driving", start: "2024-01-01T17:00:00Z", end: "2024-01-01T20:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT8H"
|
|
20
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }], { start: "2024-01-01T12:00:00Z", end: "2024-01-01T18:00:00Z" }, ["driving"]) // "PT3H" — cut at the window
|
|
21
|
+
* @example dutyTotals([], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT0S"
|
|
22
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T15:00:00Z", end: "2024-01-01T10:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "" — inverted entry
|
|
23
|
+
*/
|
|
24
|
+
export declare function dutyTotals(log: DutyEntry[], window: Interval, statuses: string[]): string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { formatHourDuration, parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { parseDutyLog } from "../../internal/dutyLog.js";
|
|
3
|
+
import { readStatusList, timeIn } from "../../internal/dutyEngine.js";
|
|
4
|
+
/**
|
|
5
|
+
* Return the time a duty log spends in any of `statuses` inside a window, as an exact ISO 8601
|
|
6
|
+
* duration.
|
|
7
|
+
*
|
|
8
|
+
* - The interval algebra of CORE-6: the entries in `statuses` are merged, each run is cut to
|
|
9
|
+
* `window` (half-open), and what is left is summed. An entry that crosses the window's edge
|
|
10
|
+
* counts only its part inside.
|
|
11
|
+
* - Hours are the largest unit, as `sumIntervals` writes it: `"PT49H30M"`, never days.
|
|
12
|
+
* - `[]` as `statuses`, an empty log or an empty window gives `"PT0S"`.
|
|
13
|
+
* - Returns `""` when the log fails `isValidDutyLog`, when `window` is not a valid `Interval`, and
|
|
14
|
+
* when `statuses` is not an array of strings.
|
|
15
|
+
*
|
|
16
|
+
* @param log the duty log, ordered and non-overlapping
|
|
17
|
+
* @param window `{ start, end }` record of ISO 8601 instant strings to total inside
|
|
18
|
+
* @param statuses the statuses whose time is totalled
|
|
19
|
+
* @returns ISO 8601 duration string, or "" on invalid input
|
|
20
|
+
*
|
|
21
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }, { status: "onDuty", start: "2024-01-01T15:00:00Z", end: "2024-01-01T17:00:00Z" }, { status: "driving", start: "2024-01-01T17:00:00Z", end: "2024-01-01T20:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT8H"
|
|
22
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }], { start: "2024-01-01T12:00:00Z", end: "2024-01-01T18:00:00Z" }, ["driving"]) // "PT3H" — cut at the window
|
|
23
|
+
* @example dutyTotals([], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT0S"
|
|
24
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T15:00:00Z", end: "2024-01-01T10:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "" — inverted entry
|
|
25
|
+
*/
|
|
26
|
+
export function dutyTotals(log, window, statuses) {
|
|
27
|
+
try {
|
|
28
|
+
const entries = parseDutyLog(log);
|
|
29
|
+
const bounds = parseIntervalNanoseconds(window);
|
|
30
|
+
const counted = readStatusList(statuses);
|
|
31
|
+
if (entries === null || bounds === null || counted === null) {
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
return formatHourDuration(timeIn(entries, counted, bounds.start, bounds.end));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Never throws (Core Rule 3): a hostile
|
|
38
|
+
// argument is invalid input, not an exception.
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Disambiguation, DutyEntry, DutyRule, DutyViolation, Interval } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return every violation of a set of hours-of-work rules inside a range, each with the window
|
|
4
|
+
* that failed it: the record over a month, not the check before dispatch.
|
|
5
|
+
*
|
|
6
|
+
* - Each rule is checked as `evaluateDutyLog` checks it, at every instant where its answer can
|
|
7
|
+
* change: entry bounds, those bounds shifted by a sliding window's length, where a run reaches
|
|
8
|
+
* or falls below a floor the rule compares it with, the boundaries of its local periods, and
|
|
9
|
+
* the instants either side of each. So the record does not depend on how a status is split
|
|
10
|
+
* into entries.
|
|
11
|
+
* - One entry per violation. A moving window (an elapsed duration, or more than one local period)
|
|
12
|
+
* is one violation for as long as it keeps failing, with no passing check between, reported by
|
|
13
|
+
* the window that failed worst, the earliest on a tie. A count since a reset, or one short rest
|
|
14
|
+
* before a duty, is one violation however often it is checked, reported by its worst check. One
|
|
15
|
+
* fixed period is one violation, reported by its last check, which judges the period complete.
|
|
16
|
+
* - A violation is listed in the range it began in. One already failing at `range.start` belongs
|
|
17
|
+
* to the range before; one still failing at `range.end` is followed to its worst window, which
|
|
18
|
+
* may end after the range, but never past the log's last entry. So two adjacent ranges list
|
|
19
|
+
* every violation once.
|
|
20
|
+
* - Each check reads the log as it stood then, so a failure stays listed when later entries would
|
|
21
|
+
* have excused it, such as a rest that completes a pair after the window it would have moved
|
|
22
|
+
* had closed. The record lists what a check at that moment would have said, so it only grows as
|
|
23
|
+
* the log does.
|
|
24
|
+
* - Only logged time is judged. Nothing after the log's last entry is checked, so a range running
|
|
25
|
+
* past the log reads as one ending with it, and a period still open there is judged as not yet
|
|
26
|
+
* over. Nothing before the log's first entry (and, for `usageLookback`, its first use) is
|
|
27
|
+
* checked either, so a range of any length is read as the part of it the log covers.
|
|
28
|
+
* - Time before the log is read two ways. `evaluateDutyLog` reads it strictly, for a check before
|
|
29
|
+
* dispatch: it is neither work nor rest, so a rest rule whose window reaches back before the log
|
|
30
|
+
* fails for want of logged rest. The record does not invent a violation there: a rest rule
|
|
31
|
+
* (`restRequirement`, `freePeriod`, `pattern`, `restBeforeDuty`) is not judged on a window that
|
|
32
|
+
* starts before the log's first entry. A cap is, since time no entry covers never counts towards
|
|
33
|
+
* one. Both read the log's first entry as the start of a stretch without rest for `maxGap`.
|
|
34
|
+
* - Rules with `severity: "advisory"` are not listed: an advisory is not a violation.
|
|
35
|
+
* - Entries are ordered by window start, then by the order of `rules`.
|
|
36
|
+
* - Returns `null` for anything `evaluateDutyLog` refuses, for a `range` that is not a valid
|
|
37
|
+
* `Interval`, when more than 10,000 of a rule's local periods end in the part of `range` the log
|
|
38
|
+
* covers, and when one rule would need more than 1,000,000 instants checked there.
|
|
39
|
+
*
|
|
40
|
+
* @param log the duty log, ordered and non-overlapping
|
|
41
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to report on
|
|
42
|
+
* @param rules the rules, every number the caller's
|
|
43
|
+
* @param options the reference zone and the operator day
|
|
44
|
+
* @returns the violations, or null on invalid input
|
|
45
|
+
*
|
|
46
|
+
* @example dutyViolations([{ status: "off", start: "2024-01-01T00:00:00Z", end: "2024-01-01T10:00:00Z" }, { status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T22:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, [{ label: "11 driving", kind: "cumulativeCap", statuses: ["driving"], cap: "PT11H", since: { statuses: ["off"], consecutive: "PT10H" } }], { timeZone: "UTC" }) // [{ label: "11 driving", window: { start: "2024-01-01T10:00:00Z", end: "2024-01-01T22:00:00Z" }, used: "PT12H", limit: "PT11H" }]
|
|
47
|
+
* @example dutyViolations([], { start: "2024-01-01T00:00:00Z", end: "2024-02-01T00:00:00Z" }, [], { timeZone: "UTC" }) // []
|
|
48
|
+
* @example dutyViolations([], { start: "2024-02-01T00:00:00Z", end: "2024-01-01T00:00:00Z" }, [], { timeZone: "UTC" }) // null — inverted range
|
|
49
|
+
*/
|
|
50
|
+
export declare function dutyViolations(log: DutyEntry[], range: Interval, rules: DutyRule[], options: {
|
|
51
|
+
/**
|
|
52
|
+
* The reference time zone every local period is read in, an IANA name or UTC offset: a time
|
|
53
|
+
* zone identifier (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what
|
|
54
|
+
* `getTimeZoneOffset` returns).
|
|
55
|
+
*/
|
|
56
|
+
timeZone: string;
|
|
57
|
+
/**
|
|
58
|
+
* The local wall time each operator day starts at, as an ISO PlainTime string (`"04:00"`).
|
|
59
|
+
* A rule that counts `operatorDays` needs it.
|
|
60
|
+
*
|
|
61
|
+
* @defaultValue None. A rule that counts operator days makes the call invalid.
|
|
62
|
+
*/
|
|
63
|
+
dayStartTime?: string;
|
|
64
|
+
/**
|
|
65
|
+
* How a day start, or a `freePeriod` window edge, that the clock repeats or skips becomes an
|
|
66
|
+
* instant, as `resolveLocal` resolves it. `"compatible"` reads a skipped time after the gap
|
|
67
|
+
* and a repeated one at its first pass, `"earlier"` and `"later"` take that side in both
|
|
68
|
+
* cases, and `"reject"` returns the sentinel when an operator day a rule counts starts or ends
|
|
69
|
+
* at such a time, or a local window with such an edge reaches a logged free period.
|
|
70
|
+
*
|
|
71
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
72
|
+
*/
|
|
73
|
+
disambiguation?: Disambiguation;
|
|
74
|
+
}): DutyViolation[] | null;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { prepareDutyCall, scanDutyViolations } from "../../internal/dutyEngine.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return every violation of a set of hours-of-work rules inside a range, each with the window
|
|
5
|
+
* that failed it: the record over a month, not the check before dispatch.
|
|
6
|
+
*
|
|
7
|
+
* - Each rule is checked as `evaluateDutyLog` checks it, at every instant where its answer can
|
|
8
|
+
* change: entry bounds, those bounds shifted by a sliding window's length, where a run reaches
|
|
9
|
+
* or falls below a floor the rule compares it with, the boundaries of its local periods, and
|
|
10
|
+
* the instants either side of each. So the record does not depend on how a status is split
|
|
11
|
+
* into entries.
|
|
12
|
+
* - One entry per violation. A moving window (an elapsed duration, or more than one local period)
|
|
13
|
+
* is one violation for as long as it keeps failing, with no passing check between, reported by
|
|
14
|
+
* the window that failed worst, the earliest on a tie. A count since a reset, or one short rest
|
|
15
|
+
* before a duty, is one violation however often it is checked, reported by its worst check. One
|
|
16
|
+
* fixed period is one violation, reported by its last check, which judges the period complete.
|
|
17
|
+
* - A violation is listed in the range it began in. One already failing at `range.start` belongs
|
|
18
|
+
* to the range before; one still failing at `range.end` is followed to its worst window, which
|
|
19
|
+
* may end after the range, but never past the log's last entry. So two adjacent ranges list
|
|
20
|
+
* every violation once.
|
|
21
|
+
* - Each check reads the log as it stood then, so a failure stays listed when later entries would
|
|
22
|
+
* have excused it, such as a rest that completes a pair after the window it would have moved
|
|
23
|
+
* had closed. The record lists what a check at that moment would have said, so it only grows as
|
|
24
|
+
* the log does.
|
|
25
|
+
* - Only logged time is judged. Nothing after the log's last entry is checked, so a range running
|
|
26
|
+
* past the log reads as one ending with it, and a period still open there is judged as not yet
|
|
27
|
+
* over. Nothing before the log's first entry (and, for `usageLookback`, its first use) is
|
|
28
|
+
* checked either, so a range of any length is read as the part of it the log covers.
|
|
29
|
+
* - Time before the log is read two ways. `evaluateDutyLog` reads it strictly, for a check before
|
|
30
|
+
* dispatch: it is neither work nor rest, so a rest rule whose window reaches back before the log
|
|
31
|
+
* fails for want of logged rest. The record does not invent a violation there: a rest rule
|
|
32
|
+
* (`restRequirement`, `freePeriod`, `pattern`, `restBeforeDuty`) is not judged on a window that
|
|
33
|
+
* starts before the log's first entry. A cap is, since time no entry covers never counts towards
|
|
34
|
+
* one. Both read the log's first entry as the start of a stretch without rest for `maxGap`.
|
|
35
|
+
* - Rules with `severity: "advisory"` are not listed: an advisory is not a violation.
|
|
36
|
+
* - Entries are ordered by window start, then by the order of `rules`.
|
|
37
|
+
* - Returns `null` for anything `evaluateDutyLog` refuses, for a `range` that is not a valid
|
|
38
|
+
* `Interval`, when more than 10,000 of a rule's local periods end in the part of `range` the log
|
|
39
|
+
* covers, and when one rule would need more than 1,000,000 instants checked there.
|
|
40
|
+
*
|
|
41
|
+
* @param log the duty log, ordered and non-overlapping
|
|
42
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to report on
|
|
43
|
+
* @param rules the rules, every number the caller's
|
|
44
|
+
* @param options the reference zone and the operator day
|
|
45
|
+
* @returns the violations, or null on invalid input
|
|
46
|
+
*
|
|
47
|
+
* @example dutyViolations([{ status: "off", start: "2024-01-01T00:00:00Z", end: "2024-01-01T10:00:00Z" }, { status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T22:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, [{ label: "11 driving", kind: "cumulativeCap", statuses: ["driving"], cap: "PT11H", since: { statuses: ["off"], consecutive: "PT10H" } }], { timeZone: "UTC" }) // [{ label: "11 driving", window: { start: "2024-01-01T10:00:00Z", end: "2024-01-01T22:00:00Z" }, used: "PT12H", limit: "PT11H" }]
|
|
48
|
+
* @example dutyViolations([], { start: "2024-01-01T00:00:00Z", end: "2024-02-01T00:00:00Z" }, [], { timeZone: "UTC" }) // []
|
|
49
|
+
* @example dutyViolations([], { start: "2024-02-01T00:00:00Z", end: "2024-01-01T00:00:00Z" }, [], { timeZone: "UTC" }) // null — inverted range
|
|
50
|
+
*/
|
|
51
|
+
export function dutyViolations(log, range, rules, options) {
|
|
52
|
+
try {
|
|
53
|
+
const bounds = parseIntervalNanoseconds(range);
|
|
54
|
+
const call = prepareDutyCall(log, rules, options);
|
|
55
|
+
if (bounds === null || call === null) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return scanDutyViolations(call.context, call.rules, bounds);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Never throws (Core Rule 3): a hostile
|
|
62
|
+
// argument is invalid input, not an exception.
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Disambiguation, DutyEntry, DutyReport, DutyRule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Evaluate every hours-of-work rule over a duty log at one instant, and report each one whether
|
|
4
|
+
* or not it binds.
|
|
5
|
+
*
|
|
6
|
+
* GMT implements no regulation: each rule is a shape, and every number in it is the caller's. A
|
|
7
|
+
* regime is the array of rules the caller assembles and labels. GMT reports totals, what is left
|
|
8
|
+
* and what failed; it does not decide dispatch, fitness or eligibility.
|
|
9
|
+
*
|
|
10
|
+
* - The log is read as it stands at `at`: later entries are ignored and one straddling `at` is cut
|
|
11
|
+
* there. Time no entry covers is in no status, so it is neither work nor rest. That includes the
|
|
12
|
+
* time before the log's first entry: give a log that reaches back as far as the longest rule
|
|
13
|
+
* looks, or a rest rule fails for want of logged rest. A planned roster is the same call with
|
|
14
|
+
* the plan appended and `at` set to its end.
|
|
15
|
+
* - This is the strict reading, for a check before dispatch. `dutyViolations` reads a record the
|
|
16
|
+
* other way: it does not judge a rest rule on a window that starts before the log's first
|
|
17
|
+
* entry, since the log cannot say what happened then. Both read the log's first entry as the
|
|
18
|
+
* start of a stretch without rest for `maxGap`, as the end of a rest would be.
|
|
19
|
+
* - Every outcome carries `used`, `limit`, `remaining`, `window`, `dueBy` and `resetAt`, so the
|
|
20
|
+
* second-tightest limit is visible before it binds. Failed rules are listed again under
|
|
21
|
+
* `violations` or, with `severity: "advisory"`, under `advisories` only.
|
|
22
|
+
* - A duration in a `Period` is a sliding window ending at `at`; `operatorDays` are the days of
|
|
23
|
+
* `dutyDayFor`; calendar days, ISO weeks, months and years are local periods in `timeZone`,
|
|
24
|
+
* 23 or 25 hours long across a one-hour clock change. Each outcome names its `periodBasis`.
|
|
25
|
+
* - The local periods are the ones holding the last instant before `at`, so at a boundary the
|
|
26
|
+
* period just ended is judged: a roster ending at midnight is checked through its last day.
|
|
27
|
+
* - A window that runs past `at` (the rest of today, this week) has not failed a minimum while
|
|
28
|
+
* the minimum could still be met with rest from `at` to its end; a cap fails as soon as it is
|
|
29
|
+
* passed.
|
|
30
|
+
* - Endpoints are UTC instants ending in "Z"; durations are ISO 8601 with hours as the largest
|
|
31
|
+
* unit (`"PT49H30M"`).
|
|
32
|
+
* - Returns `null` when the log fails `isValidDutyLog`, when `at` is not an ISO 8601 instant
|
|
33
|
+
* string, when a rule is malformed (an unknown kind, a status list that is empty or holds a
|
|
34
|
+
* non-string, a duration that is not positive exact time, a malformed period, a duplicate
|
|
35
|
+
* label, a count of periods past 10,000 alone or times `adjacent`, `lookback` or `periods`, a
|
|
36
|
+
* `containing.count` past 10,000), when `options.timeZone` is invalid, when a rule counts
|
|
37
|
+
* `operatorDays` without `options.dayStartTime`, when a window, or a requirement `orFactor`
|
|
38
|
+
* scales, falls outside Temporal's range, when a count of free periods passes
|
|
39
|
+
* `Number.MAX_SAFE_INTEGER`, and when one run of rest in a `freePeriod` window holds more than
|
|
40
|
+
* 20,000 of its `containing` windows (about 54 years of a daily window).
|
|
41
|
+
*
|
|
42
|
+
* @param log the duty log, ordered and non-overlapping
|
|
43
|
+
* @param at ISO 8601 instant string to evaluate at
|
|
44
|
+
* @param rules the rules, every number the caller's
|
|
45
|
+
* @param options the reference zone and the operator day
|
|
46
|
+
* @returns the report, or null on invalid input
|
|
47
|
+
*
|
|
48
|
+
* @example evaluateDutyLog([{ status: "off", start: "2024-01-01T00:00:00Z", end: "2024-01-01T10:00:00Z" }, { status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T21:00:00Z" }], "2024-01-01T21:00:00Z", [{ label: "11 driving", kind: "cumulativeCap", statuses: ["driving"], cap: "PT11H", since: { statuses: ["off"], consecutive: "PT10H" } }], { timeZone: "UTC" }) // { at: "2024-01-01T21:00:00Z", outcomes: [{ label: "11 driving", kind: "cumulativeCap", severity: "violation", satisfied: true, used: "PT11H", limit: "PT11H", remaining: "PT0S", window: { start: "2024-01-01T10:00:00Z", end: "2024-01-01T21:00:00Z" }, periodBasis: null, dueBy: null, resetAt: "2024-01-01T10:00:00Z" }], violations: [], advisories: [] }
|
|
49
|
+
* @example evaluateDutyLog([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T21:00:00Z" }], "2024-01-01T21:00:00Z", [{ label: "60 in 7", kind: "rollingCap", statuses: ["driving"], cap: "PT60H", window: { operatorDays: 7 } }], { timeZone: "UTC" }) // null — operator days without dayStartTime
|
|
50
|
+
* @example evaluateDutyLog([], "2024-01-01T00:00:00Z", [], { timeZone: "UTC" }) // { at: "2024-01-01T00:00:00Z", outcomes: [], violations: [], advisories: [] }
|
|
51
|
+
* @example evaluateDutyLog([{ status: "on", start: "2024-01-01T02:00:00Z", end: "2024-01-01T01:00:00Z" }], "2024-01-01T03:00:00Z", [], { timeZone: "UTC" }) // null — inverted entry
|
|
52
|
+
*/
|
|
53
|
+
export declare function evaluateDutyLog(log: DutyEntry[], at: string, rules: DutyRule[], options: {
|
|
54
|
+
/**
|
|
55
|
+
* The reference time zone every local period is read in, an IANA name or UTC offset: a time
|
|
56
|
+
* zone identifier (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what
|
|
57
|
+
* `getTimeZoneOffset` returns). A log kept in another clock is converted to instants first.
|
|
58
|
+
*/
|
|
59
|
+
timeZone: string;
|
|
60
|
+
/**
|
|
61
|
+
* The local wall time each operator day starts at, as an ISO PlainTime string (`"04:00"`).
|
|
62
|
+
* A rule that counts `operatorDays` needs it.
|
|
63
|
+
*
|
|
64
|
+
* @defaultValue None. A rule that counts operator days makes the call invalid.
|
|
65
|
+
*/
|
|
66
|
+
dayStartTime?: string;
|
|
67
|
+
/**
|
|
68
|
+
* How a day start, or a `freePeriod` window edge, that the clock repeats or skips becomes an
|
|
69
|
+
* instant, as `resolveLocal` resolves it. `"compatible"` reads a skipped time after the gap
|
|
70
|
+
* and a repeated one at its first pass, `"earlier"` and `"later"` take that side in both
|
|
71
|
+
* cases, and `"reject"` returns the sentinel when an operator day a rule counts starts or ends
|
|
72
|
+
* at such a time, or a local window with such an edge reaches a logged free period.
|
|
73
|
+
*
|
|
74
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
75
|
+
*/
|
|
76
|
+
disambiguation?: Disambiguation;
|
|
77
|
+
}): DutyReport | null;
|