@northguild/gmt 1.17.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -2480
- package/dist/calendar/calculate/bucketRange.d.ts +12 -4
- package/dist/calendar/calculate/bucketRange.js +20 -63
- package/dist/calendar/calculate/floorToZone.d.ts +14 -4
- package/dist/calendar/calculate/floorToZone.js +18 -9
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
- package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
- package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
- package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
- package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
- package/dist/calendar/calculate/getOrdinalDate.js +2 -3
- package/dist/calendar/calculate/getQuarter.d.ts +21 -9
- package/dist/calendar/calculate/getQuarter.js +8 -12
- package/dist/calendar/hours/addOperatingTime.d.ts +59 -0
- package/dist/calendar/hours/addOperatingTime.js +65 -0
- package/dist/calendar/hours/index.d.ts +7 -0
- package/dist/calendar/hours/index.js +7 -0
- package/dist/calendar/hours/isOpenAt.d.ts +45 -0
- package/dist/calendar/hours/isOpenAt.js +50 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +55 -0
- package/dist/calendar/hours/nextCloseAt.js +57 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +51 -0
- package/dist/calendar/hours/nextOpenAt.js +53 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +48 -0
- package/dist/calendar/hours/operatingIntervals.js +57 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +45 -0
- package/dist/calendar/hours/operatingTimeBetween.js +54 -0
- package/dist/calendar/hours/recurringWindows.d.ts +68 -0
- package/dist/calendar/hours/recurringWindows.js +88 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
- package/dist/duration/calculate/durationFromUnits.js +67 -0
- package/dist/duration/calculate/getDurationUnit.d.ts +2 -2
- package/dist/duration/calculate/getDurationUnit.js +2 -2
- package/dist/duration/calculate/index.d.ts +3 -1
- package/dist/duration/calculate/index.js +3 -1
- package/dist/duration/calculate/negateDuration.d.ts +1 -1
- package/dist/duration/calculate/negateDuration.js +1 -1
- package/dist/duration/calculate/totalDuration.d.ts +73 -0
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +29 -27
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +13 -7
- package/dist/duration/compare/compareDurations.js +4 -7
- package/dist/duration/format/formatDuration.d.ts +16 -4
- package/dist/duration/format/formatDuration.js +4 -5
- package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
- package/dist/duration/normalize/normalizeDuration.js +6 -15
- package/dist/duration/parse/parseDuration.d.ts +21 -3
- package/dist/duration/parse/parseDuration.js +1 -3
- package/dist/duty/calculate/dutyDayFor.d.ts +38 -0
- package/dist/duty/calculate/dutyDayFor.js +71 -0
- package/dist/duty/calculate/dutyTotals.d.ts +24 -0
- package/dist/duty/calculate/dutyTotals.js +41 -0
- package/dist/duty/calculate/dutyViolations.d.ts +74 -0
- package/dist/duty/calculate/dutyViolations.js +65 -0
- package/dist/duty/calculate/evaluateDutyLog.d.ts +77 -0
- package/dist/duty/calculate/evaluateDutyLog.js +75 -0
- package/dist/duty/calculate/index.d.ts +7 -0
- package/dist/duty/calculate/index.js +7 -0
- package/dist/duty/calculate/longestRun.d.ts +28 -0
- package/dist/duty/calculate/longestRun.js +54 -0
- package/dist/duty/calculate/qualifyingRestPairs.d.ts +37 -0
- package/dist/duty/calculate/qualifyingRestPairs.js +58 -0
- package/dist/duty/calculate/qualifyingRests.d.ts +27 -0
- package/dist/duty/calculate/qualifyingRests.js +49 -0
- package/dist/duty/index.d.ts +3 -0
- package/dist/duty/index.js +4 -0
- package/dist/duty/validate/index.d.ts +1 -0
- package/dist/duty/validate/index.js +1 -0
- package/dist/duty/validate/isValidDutyLog.d.ts +24 -0
- package/dist/duty/validate/isValidDutyLog.js +34 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/instant/convert/classifyLocal.d.ts +5 -1
- package/dist/instant/convert/classifyLocal.js +16 -6
- package/dist/instant/convert/fromOffsetInstant.d.ts +7 -1
- package/dist/instant/convert/fromOffsetInstant.js +9 -2
- package/dist/instant/convert/resolveLocal.d.ts +18 -8
- package/dist/instant/convert/resolveLocal.js +21 -17
- package/dist/instant/convert/toOffsetInstant.d.ts +33 -16
- package/dist/instant/convert/toOffsetInstant.js +28 -13
- package/dist/instant/index.d.ts +1 -0
- package/dist/instant/index.js +1 -0
- package/dist/instant/validate/index.d.ts +1 -0
- package/dist/instant/validate/index.js +1 -0
- package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
- package/dist/instant/validate/isValidUtcOffset.js +35 -0
- package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
- package/dist/intermodal/calculate/billingTimeline.js +2 -2
- package/dist/intermodal/calculate/chargeableDays.d.ts +19 -11
- package/dist/intermodal/calculate/chargeableDays.js +13 -10
- package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
- package/dist/intermodal/calculate/demurrageClock.js +7 -7
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +12 -4
- package/dist/intermodal/calculate/freeTimeExpiry.js +19 -8
- package/dist/intermodal/calculate/index.d.ts +1 -0
- package/dist/intermodal/calculate/index.js +1 -0
- package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
- package/dist/intermodal/calculate/multimodalETA.js +145 -0
- package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
- package/dist/intermodal/format/bolTimestamp.js +78 -0
- package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
- package/dist/intermodal/format/formatEdifactDate.js +42 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
- package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
- package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
- package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactTime.js +43 -0
- package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
- package/dist/intermodal/format/formatEpcisEvent.js +79 -0
- package/dist/intermodal/format/formatX12Date.d.ts +35 -0
- package/dist/intermodal/format/formatX12Date.js +43 -0
- package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
- package/dist/intermodal/format/formatX12DateRange.js +45 -0
- package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
- package/dist/intermodal/format/formatX12DateTime.js +47 -0
- package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
- package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
- package/dist/intermodal/format/formatX12Time.d.ts +42 -0
- package/dist/intermodal/format/formatX12Time.js +50 -0
- package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
- package/dist/intermodal/format/formatX12TimeElement.js +54 -0
- package/dist/intermodal/format/index.d.ts +14 -0
- package/dist/intermodal/format/index.js +14 -0
- package/dist/intermodal/index.d.ts +3 -0
- package/dist/intermodal/index.js +3 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
- package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
- package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
- package/dist/intermodal/parse/index.d.ts +18 -0
- package/dist/intermodal/parse/index.js +18 -0
- package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactDate.js +45 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
- package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactTime.js +45 -0
- package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
- package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
- package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
- package/dist/intermodal/parse/parseX12Date.js +47 -0
- package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
- package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
- package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
- package/dist/intermodal/parse/parseX12DateRange.js +52 -0
- package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
- package/dist/intermodal/parse/parseX12DateTime.js +53 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
- package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
- package/dist/intermodal/parse/parseX12Time.js +77 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
- package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
- package/dist/intermodal/validate/index.d.ts +18 -0
- package/dist/intermodal/validate/index.js +18 -0
- package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
- package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
- package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
- package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
- package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
- package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
- package/dist/intermodal/validate/isValidX12Date.js +30 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
- package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
- package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
- package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
- package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12Time.js +40 -0
- package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
- package/dist/internal/businessCalendar.d.ts +5 -0
- package/dist/internal/businessCalendar.js +9 -10
- package/dist/internal/cycleFieldValue.d.ts +6 -4
- package/dist/internal/cycleFieldValue.js +6 -4
- package/dist/internal/daylightTime.d.ts +33 -0
- package/dist/internal/daylightTime.js +164 -0
- package/dist/internal/durationUntilString.js +4 -3
- package/dist/internal/dutyEngine.d.ts +125 -0
- package/dist/internal/dutyEngine.js +1746 -0
- package/dist/internal/dutyLog.d.ts +27 -0
- package/dist/internal/dutyLog.js +47 -0
- package/dist/internal/dutyPeriods.d.ts +135 -0
- package/dist/internal/dutyPeriods.js +369 -0
- package/dist/internal/dutyRules.d.ts +197 -0
- package/dist/internal/dutyRules.js +484 -0
- package/dist/internal/ediDateTimeFields.d.ts +97 -0
- package/dist/internal/ediDateTimeFields.js +288 -0
- package/dist/internal/ediDateTimeWriter.d.ts +92 -0
- package/dist/internal/ediDateTimeWriter.js +298 -0
- package/dist/internal/ediGrammar.d.ts +158 -0
- package/dist/internal/ediGrammar.js +384 -0
- package/dist/internal/englishCalendarNames.d.ts +3 -1
- package/dist/internal/englishCalendarNames.js +4 -3
- package/dist/internal/epochNanoseconds.d.ts +2 -0
- package/dist/internal/epochNanoseconds.js +2 -0
- package/dist/internal/exactDuration.d.ts +37 -0
- package/dist/internal/exactDuration.js +64 -0
- package/dist/internal/exactMoment.d.ts +72 -0
- package/dist/internal/exactMoment.js +114 -0
- package/dist/internal/fiscalCalendar.d.ts +4 -3
- package/dist/internal/fiscalCalendar.js +4 -3
- package/dist/internal/formatCalendarDays.d.ts +2 -2
- package/dist/internal/formatRelativeDuration.d.ts +21 -1
- package/dist/internal/formatRelativeDuration.js +47 -7
- package/dist/internal/freeTimeLedger.d.ts +5 -0
- package/dist/internal/freeTimeLedger.js +11 -2
- package/dist/internal/index.d.ts +12 -4
- package/dist/internal/index.js +16 -4
- package/dist/internal/instantFormatOptions.js +2 -1
- package/dist/internal/instantNanoseconds.d.ts +75 -9
- package/dist/internal/instantNanoseconds.js +192 -11
- package/dist/internal/intervalNanoseconds.js +2 -1
- package/dist/internal/isObject.d.ts +13 -6
- package/dist/internal/isObject.js +14 -7
- package/dist/internal/isoYearString.d.ts +21 -0
- package/dist/internal/isoYearString.js +27 -0
- package/dist/internal/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/maxPieces.js +2 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +5 -2
- package/dist/internal/normalizeTimeZone.js +5 -2
- package/dist/internal/operatingSchedule.d.ts +138 -0
- package/dist/internal/operatingSchedule.js +756 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +12 -5
- package/dist/internal/patternToken.js +59 -25
- package/dist/internal/plainDateUntil.js +10 -6
- package/dist/internal/punctuality.d.ts +38 -0
- package/dist/internal/punctuality.js +59 -0
- package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
- package/dist/internal/readDateTimeFormatOptions.js +93 -0
- package/dist/internal/readDurationUnits.d.ts +34 -0
- package/dist/internal/readDurationUnits.js +78 -0
- package/dist/internal/readSetFields.d.ts +50 -0
- package/dist/internal/readSetFields.js +179 -0
- package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
- package/dist/internal/resolveDurationRelativeTo.js +11 -1
- package/dist/internal/resolveRelativeRounding.d.ts +17 -6
- package/dist/internal/resolveRelativeRounding.js +27 -7
- package/dist/internal/resolveRelativeUnit.d.ts +30 -0
- package/dist/internal/resolveRelativeUnit.js +40 -0
- package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- package/dist/internal/startOrEndOfUnix.d.ts +2 -1
- package/dist/internal/startOrEndOfUnix.js +9 -6
- package/dist/internal/startOrEndOfZoned.js +2 -3
- package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
- package/dist/internal/temporalCompat/capabilities.js +35 -3
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/repros.d.ts +1 -1
- package/dist/internal/temporalCompat/repros.js +157 -0
- package/dist/internal/timestampEvents.d.ts +32 -0
- package/dist/internal/timestampEvents.js +76 -0
- package/dist/internal/twoDigitYear.d.ts +19 -0
- package/dist/internal/twoDigitYear.js +22 -0
- package/dist/internal/unixEpochValue.js +3 -2
- package/dist/internal/unixWallClock.d.ts +24 -0
- package/dist/internal/unixWallClock.js +35 -0
- package/dist/internal/utcWallClock.d.ts +20 -0
- package/dist/internal/utcWallClock.js +32 -0
- package/dist/internal/yearWindowStart.d.ts +28 -0
- package/dist/internal/yearWindowStart.js +52 -0
- package/dist/internal/zoneBucketCap.d.ts +18 -0
- package/dist/internal/zoneBucketCap.js +64 -0
- package/dist/internal/zoneFrame.d.ts +180 -0
- package/dist/internal/zoneFrame.js +221 -0
- package/dist/internal/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- package/dist/internal/zonedNowUnitValue.d.ts +7 -4
- package/dist/internal/zonedNowUnitValue.js +8 -4
- package/dist/internal/zonedTransitionSearch.d.ts +27 -0
- package/dist/internal/zonedTransitionSearch.js +218 -0
- package/dist/internal/zonedWallClock.d.ts +21 -7
- package/dist/internal/zonedWallClock.js +87 -18
- package/dist/internal/zonedWallClockDifference.js +4 -4
- package/dist/internal/zonedWallClockOperations.d.ts +31 -15
- package/dist/internal/zonedWallClockOperations.js +93 -43
- package/dist/interval/validate/isValidInterval.d.ts +6 -3
- package/dist/interval/validate/isValidInterval.js +6 -3
- package/dist/plain/calculate/addDate.d.ts +11 -8
- package/dist/plain/calculate/addDate.js +9 -15
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +5 -11
- package/dist/plain/calculate/addTime.js +4 -7
- package/dist/plain/calculate/cycleDate.d.ts +16 -7
- package/dist/plain/calculate/cycleDate.js +3 -7
- package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
- package/dist/plain/calculate/cycleDateTime.js +1 -4
- package/dist/plain/calculate/cycleTime.d.ts +10 -5
- package/dist/plain/calculate/cycleTime.js +3 -5
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDate.js +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.js +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +8 -3
- package/dist/plain/calculate/endOfDate.js +1 -3
- package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
- package/dist/plain/calculate/endOfDateTime.js +1 -5
- package/dist/plain/calculate/endOfTime.d.ts +9 -3
- package/dist/plain/calculate/endOfTime.js +1 -2
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
- package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
- package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
- package/dist/plain/calculate/getWeekOfMonth.js +7 -4
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
- package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
- package/dist/plain/calculate/getWeeksInMonth.js +5 -2
- package/dist/plain/calculate/nextWeekday.d.ts +7 -3
- package/dist/plain/calculate/nextWeekday.js +1 -3
- package/dist/plain/calculate/previousWeekday.d.ts +7 -3
- package/dist/plain/calculate/previousWeekday.js +1 -3
- package/dist/plain/calculate/roundDate.d.ts +20 -7
- package/dist/plain/calculate/roundDate.js +3 -10
- package/dist/plain/calculate/roundDateTime.d.ts +22 -8
- package/dist/plain/calculate/roundDateTime.js +3 -11
- package/dist/plain/calculate/roundTime.d.ts +20 -4
- package/dist/plain/calculate/roundTime.js +3 -7
- package/dist/plain/calculate/setDate.d.ts +27 -8
- package/dist/plain/calculate/setDate.js +28 -12
- package/dist/plain/calculate/setDateTime.d.ts +23 -8
- package/dist/plain/calculate/setDateTime.js +23 -12
- package/dist/plain/calculate/setTime.d.ts +23 -7
- package/dist/plain/calculate/setTime.js +25 -12
- package/dist/plain/calculate/startOfDate.d.ts +8 -2
- package/dist/plain/calculate/startOfDate.js +1 -2
- package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
- package/dist/plain/calculate/startOfDateTime.js +1 -2
- package/dist/plain/calculate/startOfTime.d.ts +9 -2
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +5 -11
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +5 -11
- package/dist/plain/calculate/subtractTime.js +4 -7
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
- package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
- package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
- package/dist/plain/compare/areDatesEqualBy.js +8 -6
- package/dist/plain/compare/isBetweenDate.d.ts +13 -2
- package/dist/plain/compare/isBetweenDate.js +4 -4
- package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenDateTime.js +4 -4
- package/dist/plain/compare/isBetweenTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenTime.js +4 -4
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +1 -1
- package/dist/plain/compare/isThisUnit.js +1 -1
- package/dist/plain/format/formatCalendar.d.ts +21 -14
- package/dist/plain/format/formatCalendar.js +23 -17
- package/dist/plain/format/formatDate.js +5 -3
- package/dist/plain/format/formatDateRange.js +4 -2
- package/dist/plain/format/formatDateTime.js +4 -2
- package/dist/plain/format/formatDateTimeRange.js +4 -2
- package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
- package/dist/plain/format/formatDateTimeToParts.js +10 -6
- package/dist/plain/format/formatDateToParts.d.ts +13 -2
- package/dist/plain/format/formatDateToParts.js +8 -4
- package/dist/plain/format/formatRelativeDate.d.ts +16 -3
- package/dist/plain/format/formatRelativeDate.js +28 -16
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +10 -6
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +23 -14
- package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
- package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +7 -7
- package/dist/plain/format/formatTime.js +4 -2
- package/dist/plain/format/index.d.ts +1 -1
- package/dist/plain/format/index.js +1 -1
- package/dist/plain/get/getNowUnit.d.ts +2 -0
- package/dist/plain/get/getNowUnit.js +2 -0
- package/dist/plain/get/getYear.d.ts +2 -0
- package/dist/plain/get/getYear.js +4 -3
- package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
- package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDate.js +1 -3
- package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
- package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
- package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDate.js +2 -0
- package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
- package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtTime.js +2 -0
- package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
- package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.js +2 -2
- package/dist/plain/interval/intervalXorDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.js +2 -2
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
- package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
- package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
- package/dist/plain/map/mapDatesInRange.d.ts +8 -4
- package/dist/plain/map/mapDatesInRange.js +1 -4
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +25 -9
- package/dist/plain/parse/parseDateTimeWithPattern.js +29 -11
- package/dist/plain/parse/parseDateWithPattern.d.ts +26 -9
- package/dist/plain/parse/parseDateWithPattern.js +30 -11
- package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
- package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +8 -8
- package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +11 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDate.js +8 -4
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +8 -4
- package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDate.js +2 -6
- package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
- package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
- package/dist/plain/parse/parseYearFromDate.js +7 -3
- package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
- package/dist/plain/parse/parseYearFromDateTime.js +6 -3
- package/dist/plain/validate/index.d.ts +1 -0
- package/dist/plain/validate/index.js +1 -0
- package/dist/plain/validate/isValidDateRange.d.ts +19 -4
- package/dist/plain/validate/isValidDateRange.js +1 -4
- package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidDateTimeRange.js +2 -5
- package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidTimeRange.js +2 -5
- package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
- package/dist/precision/convert/fromExcelSerial.js +4 -5
- package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
- package/dist/precision/convert/fromNanoseconds.js +9 -3
- package/dist/precision/convert/toExcelSerial.d.ts +9 -3
- package/dist/precision/convert/toExcelSerial.js +3 -4
- package/dist/precision/convert/toNanoseconds.d.ts +11 -6
- package/dist/precision/convert/toNanoseconds.js +11 -6
- package/dist/precision/validate/isValidInstant.d.ts +12 -3
- package/dist/precision/validate/isValidInstant.js +12 -3
- package/dist/regex/epcis.d.ts +60 -0
- package/dist/regex/epcis.js +60 -0
- package/dist/regex/http-date.d.ts +6 -4
- package/dist/regex/http-date.js +6 -4
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +1 -0
- package/dist/regex/rfc-2822.d.ts +2 -0
- package/dist/regex/rfc-2822.js +2 -0
- package/dist/regex/rfc-3339.d.ts +3 -1
- package/dist/regex/rfc-3339.js +3 -1
- package/dist/regex/sql-date-time.d.ts +2 -1
- package/dist/regex/sql-date-time.js +2 -1
- package/dist/regex/time-zone-like.d.ts +3 -2
- package/dist/regex/time-zone-like.js +3 -2
- package/dist/regex/utc-offset.d.ts +2 -1
- package/dist/regex/utc-offset.js +2 -1
- package/dist/span/calculate/spanMs.d.ts +10 -4
- package/dist/span/calculate/spanMs.js +10 -4
- package/dist/span/calculate/spanNs.d.ts +10 -4
- package/dist/span/calculate/spanNs.js +10 -4
- package/dist/span/validate/isValidSpan.d.ts +8 -3
- package/dist/span/validate/isValidSpan.js +8 -3
- package/dist/transport/calculate/bestAvailable.d.ts +47 -0
- package/dist/transport/calculate/bestAvailable.js +76 -0
- package/dist/transport/calculate/crossingTime.d.ts +63 -0
- package/dist/transport/calculate/crossingTime.js +81 -0
- package/dist/transport/calculate/cutoffAt.d.ts +95 -0
- package/dist/transport/calculate/cutoffAt.js +211 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +75 -0
- package/dist/transport/calculate/cutoffSchedule.js +73 -0
- package/dist/transport/calculate/dwellTime.d.ts +22 -8
- package/dist/transport/calculate/dwellTime.js +18 -9
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +8 -0
- package/dist/transport/calculate/index.js +8 -0
- package/dist/transport/calculate/nextDeparture.d.ts +78 -0
- package/dist/transport/calculate/nextDeparture.js +131 -0
- package/dist/transport/calculate/punctualityRate.d.ts +42 -0
- package/dist/transport/calculate/punctualityRate.js +59 -0
- package/dist/transport/calculate/scheduleDelivery.d.ts +158 -0
- package/dist/transport/calculate/scheduleDelivery.js +305 -0
- package/dist/transport/calculate/transitTime.d.ts +21 -3
- package/dist/transport/calculate/transitTime.js +29 -46
- package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
- package/dist/transport/compare/classifyPunctuality.js +64 -0
- package/dist/transport/compare/index.d.ts +4 -0
- package/dist/transport/compare/index.js +4 -0
- package/dist/transport/compare/isPastCutoff.d.ts +33 -0
- package/dist/transport/compare/isPastCutoff.js +48 -0
- package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
- package/dist/transport/compare/scheduleDeviation.js +53 -0
- package/dist/transport/compare/timeToCutoff.d.ts +31 -0
- package/dist/transport/compare/timeToCutoff.js +47 -0
- package/dist/transport/convert/etaAtZone.d.ts +13 -1
- package/dist/transport/convert/etaAtZone.js +15 -5
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.js +1 -0
- package/dist/types/business-calendar.d.ts +20 -14
- package/dist/types/calendar-options.d.ts +15 -3
- package/dist/types/date-cycle-field.d.ts +5 -0
- package/dist/types/date-duration-unit.d.ts +4 -0
- package/dist/types/date-time-cycle-field.d.ts +4 -0
- package/dist/types/date-time-duration-units.d.ts +4 -0
- package/dist/types/date-time-unit.d.ts +4 -0
- package/dist/types/date-unit.d.ts +4 -0
- package/dist/types/disambiguation.d.ts +8 -0
- package/dist/types/duration-relative-to.d.ts +8 -0
- package/dist/types/duration-string-options.d.ts +28 -0
- package/dist/types/duty.d.ts +777 -0
- package/dist/types/edi.d.ts +407 -0
- package/dist/types/edi.js +0 -0
- package/dist/types/epcis.d.ts +25 -0
- package/dist/types/epcis.js +0 -0
- package/dist/types/exact-duration-unit.d.ts +8 -0
- package/dist/types/exact-duration-unit.js +0 -0
- package/dist/types/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +22 -11
- package/dist/types/index.d.ts +7 -1
- package/dist/types/index.js +7 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +72 -0
- package/dist/types/operating-schedule.js +0 -0
- package/dist/types/overflow.d.ts +6 -0
- package/dist/types/relative-rounding-method.d.ts +6 -0
- package/dist/types/relative-time-options.d.ts +33 -5
- package/dist/types/rounding-options.d.ts +27 -0
- package/dist/types/time-cycle-field.d.ts +4 -0
- package/dist/types/time-duration-unit.d.ts +4 -0
- package/dist/types/time-unit.d.ts +4 -0
- package/dist/types/transport-timestamps.d.ts +54 -0
- package/dist/types/transport-timestamps.js +0 -0
- package/dist/types/two-digit-year.d.ts +23 -0
- package/dist/types/two-digit-year.js +0 -0
- package/dist/types/zone-bucket-unit.d.ts +1 -1
- package/dist/unix/calculate/addUnix.d.ts +28 -5
- package/dist/unix/calculate/addUnix.js +15 -16
- package/dist/unix/calculate/diffUnix.d.ts +21 -3
- package/dist/unix/calculate/diffUnix.js +12 -9
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +21 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +11 -8
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/endOfUnix.d.ts +29 -4
- package/dist/unix/calculate/endOfUnix.js +8 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +27 -4
- package/dist/unix/calculate/isBetweenUnix.js +7 -9
- package/dist/unix/calculate/roundUnix.d.ts +39 -3
- package/dist/unix/calculate/roundUnix.js +16 -12
- package/dist/unix/calculate/setUnix.d.ts +58 -12
- package/dist/unix/calculate/setUnix.js +37 -25
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/startOfUnix.d.ts +29 -4
- package/dist/unix/calculate/startOfUnix.js +8 -4
- package/dist/unix/calculate/subtractUnix.d.ts +27 -5
- package/dist/unix/calculate/subtractUnix.js +14 -16
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +33 -7
- package/dist/unix/compare/areUnixEqualBy.js +20 -9
- package/dist/unix/compare/isAfterUnix.d.ts +7 -1
- package/dist/unix/compare/isAfterUnix.js +1 -1
- package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
- package/dist/unix/compare/isBeforeUnix.js +1 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +7 -8
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +7 -8
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +7 -8
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +14 -5
- package/dist/unix/convert/convertUnixToZoned.js +8 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +31 -19
- package/dist/unix/format/formatCalendarUnix.js +10 -6
- package/dist/unix/format/formatRelativeUnix.d.ts +62 -5
- package/dist/unix/format/formatRelativeUnix.js +16 -10
- package/dist/unix/format/formatUnix.d.ts +29 -6
- package/dist/unix/format/formatUnix.js +12 -7
- package/dist/unix/get/getUnixDay.d.ts +1 -3
- package/dist/unix/get/getUnixDay.js +5 -12
- package/dist/unix/get/getUnixHour.d.ts +1 -3
- package/dist/unix/get/getUnixHour.js +5 -12
- package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
- package/dist/unix/get/getUnixMicrosecond.js +4 -11
- package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
- package/dist/unix/get/getUnixMillisecond.js +5 -12
- package/dist/unix/get/getUnixMinute.d.ts +1 -3
- package/dist/unix/get/getUnixMinute.js +5 -12
- package/dist/unix/get/getUnixMonth.d.ts +1 -3
- package/dist/unix/get/getUnixMonth.js +5 -12
- package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
- package/dist/unix/get/getUnixNanosecond.js +4 -11
- package/dist/unix/get/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- package/dist/unix/get/getUnixNowUnit.d.ts +2 -0
- package/dist/unix/get/getUnixNowUnit.js +2 -0
- package/dist/unix/get/getUnixSecond.d.ts +1 -3
- package/dist/unix/get/getUnixSecond.js +5 -12
- package/dist/unix/get/getUnixYear.d.ts +3 -3
- package/dist/unix/get/getUnixYear.js +5 -12
- package/dist/unix/interval/intervalCountUnix.d.ts +23 -5
- package/dist/unix/interval/intervalCountUnix.js +9 -5
- package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
- package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
- package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +41 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +18 -12
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +24 -6
- package/dist/unix/interval/intervalLengthUnix.js +10 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +21 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +11 -8
- package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
- package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
- package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
- package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +50 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +33 -22
- package/dist/unix/parse/parseDateFromUnix.d.ts +15 -2
- package/dist/unix/parse/parseDateFromUnix.js +4 -5
- package/dist/unix/parse/parseDayFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +15 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +3 -3
- package/dist/unix/parse/parseHourFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseTimeFromUnix.js +5 -5
- package/dist/unix/parse/parseUnitFromUnix.d.ts +29 -4
- package/dist/unix/parse/parseUnitFromUnix.js +23 -17
- package/dist/unix/parse/parseWeekFromUnix.d.ts +24 -7
- package/dist/unix/parse/parseWeekFromUnix.js +7 -11
- package/dist/unix/parse/parseYearFromUnix.d.ts +20 -3
- package/dist/unix/parse/parseYearFromUnix.js +6 -3
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +5 -11
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +16 -3
- package/dist/utc/calculate/endOfUtc.js +2 -3
- package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
- package/dist/utc/calculate/isBetweenUtc.js +4 -4
- package/dist/utc/calculate/roundUtc.d.ts +26 -9
- package/dist/utc/calculate/roundUtc.js +3 -12
- package/dist/utc/calculate/setUtc.d.ts +23 -7
- package/dist/utc/calculate/setUtc.js +23 -12
- package/dist/utc/calculate/startOfUtc.d.ts +15 -2
- package/dist/utc/calculate/startOfUtc.js +1 -2
- package/dist/utc/calculate/subtractUtc.d.ts +7 -4
- package/dist/utc/calculate/subtractUtc.js +5 -11
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +14 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +12 -10
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +15 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +14 -16
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +11 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +9 -9
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
- package/dist/utc/convert/convertUtcToZoned.js +5 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +23 -8
- package/dist/utc/format/formatCalendarUtc.js +14 -7
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +8 -8
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +8 -8
- package/dist/utc/format/formatRelativeUtc.d.ts +38 -10
- package/dist/utc/format/formatRelativeUtc.js +22 -16
- package/dist/utc/format/formatUtc.d.ts +22 -15
- package/dist/utc/format/formatUtc.js +12 -8
- package/dist/utc/format/index.d.ts +1 -1
- package/dist/utc/format/index.js +1 -1
- package/dist/utc/get/getUtcDay.d.ts +1 -3
- package/dist/utc/get/getUtcDay.js +5 -12
- package/dist/utc/get/getUtcHour.d.ts +1 -3
- package/dist/utc/get/getUtcHour.js +5 -12
- package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
- package/dist/utc/get/getUtcMicrosecond.js +4 -11
- package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
- package/dist/utc/get/getUtcMillisecond.js +5 -12
- package/dist/utc/get/getUtcMinute.d.ts +1 -3
- package/dist/utc/get/getUtcMinute.js +5 -12
- package/dist/utc/get/getUtcMonth.d.ts +1 -3
- package/dist/utc/get/getUtcMonth.js +5 -12
- package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
- package/dist/utc/get/getUtcNanosecond.js +4 -11
- package/dist/utc/get/getUtcNow.d.ts +1 -3
- package/dist/utc/get/getUtcNow.js +2 -9
- package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
- package/dist/utc/get/getUtcNowUnit.js +2 -0
- package/dist/utc/get/getUtcSecond.d.ts +1 -3
- package/dist/utc/get/getUtcSecond.js +5 -12
- package/dist/utc/get/getUtcYear.d.ts +3 -3
- package/dist/utc/get/getUtcYear.js +5 -12
- package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
- package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
- package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
- package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
- package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
- package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
- package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.js +2 -2
- package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDateFromUtc.js +3 -5
- package/dist/utc/parse/parseDayFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayFromUtc.js +3 -5
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +5 -7
- package/dist/utc/parse/parseHourFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseHourFromUtc.js +3 -5
- package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
- package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +12 -12
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +3 -5
- package/dist/utc/parse/parseMonthFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMonthFromUtc.js +3 -5
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseSecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseSecondFromUtc.js +3 -5
- package/dist/utc/parse/parseTimeFromUtc.d.ts +11 -3
- package/dist/utc/parse/parseTimeFromUtc.js +7 -7
- package/dist/utc/parse/parseUnitFromUtc.d.ts +25 -6
- package/dist/utc/parse/parseUnitFromUtc.js +14 -10
- package/dist/utc/parse/parseWeekFromUtc.d.ts +20 -10
- package/dist/utc/parse/parseWeekFromUtc.js +8 -14
- package/dist/utc/parse/parseYearFromUtc.d.ts +13 -5
- package/dist/utc/parse/parseYearFromUtc.js +9 -8
- package/dist/utc/validate/index.d.ts +2 -0
- package/dist/utc/validate/index.js +2 -0
- package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
- package/dist/utc/validate/isValidHttpDate.js +38 -0
- package/dist/utc/validate/isValidUtc.d.ts +4 -0
- package/dist/utc/validate/isValidUtc.js +4 -0
- package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +10 -20
- package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
- package/dist/zoned/calculate/cycleZoned.js +1 -8
- package/dist/zoned/calculate/diffZoned.d.ts +1 -1
- package/dist/zoned/calculate/diffZoned.js +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
- package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
- package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
- package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
- package/dist/zoned/calculate/roundZoned.d.ts +21 -4
- package/dist/zoned/calculate/roundZoned.js +3 -7
- package/dist/zoned/calculate/setZoned.d.ts +44 -13
- package/dist/zoned/calculate/setZoned.js +30 -21
- package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
- package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
- package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
- package/dist/zoned/calculate/startOfZoned.js +1 -3
- package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
- package/dist/zoned/calculate/subtractZoned.js +10 -20
- package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
- package/dist/zoned/compare/areZonedEqualBy.js +7 -5
- package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
- package/dist/zoned/compare/isBetweenZoned.js +4 -3
- package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
- package/dist/zoned/compare/isInDaylightSaving.js +40 -44
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +21 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +9 -11
- package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
- package/dist/zoned/convert/convertZonedToUnix.js +2 -4
- package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
- package/dist/zoned/convert/convertZonedToZoned.js +5 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +15 -10
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +9 -5
- package/dist/zoned/format/formatRfc2822.d.ts +2 -2
- package/dist/zoned/format/formatRfc2822.js +2 -2
- package/dist/zoned/format/formatRfc3339.d.ts +2 -3
- package/dist/zoned/format/formatRfc3339.js +2 -3
- package/dist/zoned/format/formatTimeZoneName.d.ts +16 -3
- package/dist/zoned/format/formatTimeZoneName.js +9 -4
- package/dist/zoned/format/formatZonedDateTime.js +2 -1
- package/dist/zoned/format/formatZonedRange.js +2 -1
- package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
- package/dist/zoned/format/formatZonedToParts.js +8 -5
- package/dist/zoned/get/getDstTransitions.d.ts +11 -10
- package/dist/zoned/get/getDstTransitions.js +21 -7
- package/dist/zoned/get/getSystemTimeZone.d.ts +3 -1
- package/dist/zoned/get/getSystemTimeZone.js +5 -2
- package/dist/zoned/get/getTimeZoneOffset.d.ts +13 -2
- package/dist/zoned/get/getTimeZoneOffset.js +22 -6
- package/dist/zoned/get/getZonedDay.d.ts +2 -1
- package/dist/zoned/get/getZonedDay.js +6 -7
- package/dist/zoned/get/getZonedDayOfWeek.d.ts +2 -1
- package/dist/zoned/get/getZonedDayOfWeek.js +6 -5
- package/dist/zoned/get/getZonedHour.d.ts +2 -1
- package/dist/zoned/get/getZonedHour.js +6 -7
- package/dist/zoned/get/getZonedMicrosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMicrosecond.js +6 -5
- package/dist/zoned/get/getZonedMillisecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMillisecond.js +6 -7
- package/dist/zoned/get/getZonedMinute.d.ts +2 -1
- package/dist/zoned/get/getZonedMinute.js +6 -7
- package/dist/zoned/get/getZonedMonth.d.ts +2 -1
- package/dist/zoned/get/getZonedMonth.js +6 -7
- package/dist/zoned/get/getZonedNanosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedNanosecond.js +6 -5
- package/dist/zoned/get/getZonedNow.d.ts +18 -2
- package/dist/zoned/get/getZonedNow.js +17 -4
- package/dist/zoned/get/getZonedNowUnit.d.ts +6 -3
- package/dist/zoned/get/getZonedNowUnit.js +10 -7
- package/dist/zoned/get/getZonedSecond.d.ts +2 -1
- package/dist/zoned/get/getZonedSecond.js +6 -7
- package/dist/zoned/get/getZonedToday.d.ts +2 -1
- package/dist/zoned/get/getZonedToday.js +6 -5
- package/dist/zoned/get/getZonedWeekOfYear.d.ts +2 -1
- package/dist/zoned/get/getZonedWeekOfYear.js +6 -5
- package/dist/zoned/get/getZonedYear.d.ts +4 -1
- package/dist/zoned/get/getZonedYear.js +9 -7
- package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
- package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
- package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
- package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
- package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
- package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
- package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
- package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
- package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +13 -4
- package/dist/zoned/parse/parseUnitFromZoned.js +6 -4
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +45 -12
- package/dist/zoned/validate/hasDaylightSaving.js +54 -32
- package/dist/zoned/validate/index.d.ts +2 -0
- package/dist/zoned/validate/index.js +2 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
- package/dist/zoned/validate/isValidTimeZone.d.ts +5 -1
- package/dist/zoned/validate/isValidTimeZone.js +6 -2
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
- package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
- package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
- package/dist/zoned/validate/isValidZonedRange.js +1 -4
- package/package.json +67 -5
- package/skills/gmt-arithmetic/SKILL.md +99 -12
- package/skills/gmt-basics/SKILL.md +64 -13
- package/skills/gmt-integration/SKILL.md +33 -13
- package/skills/gmt-timezone/SKILL.md +265 -31
- package/dist/duration/calculate/durationAs.d.ts +0 -62
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -16
- package/dist/internal/utcZonedDateTime.js +0 -28
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → duty.js} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The value of an option that was read once, or its default when the option is absent.
|
|
3
|
+
*
|
|
4
|
+
* - ECMA-402 `GetOption` (the Temporal specification defines the same operation) reads the
|
|
5
|
+
* property with one `Get` and returns the default only when that value is `undefined`. Pass
|
|
6
|
+
* the property read as the argument, so the option is read exactly once: a getter cannot
|
|
7
|
+
* answer one value to the check and another to the use.
|
|
8
|
+
* - `null` is a value, not an omission, so it is returned as it is for the caller to validate.
|
|
9
|
+
*
|
|
10
|
+
* @param value the option as read from the caller's object, `undefined` when absent
|
|
11
|
+
* @param fallback the documented default
|
|
12
|
+
* @returns `fallback` when `value` is `undefined`, otherwise `value`
|
|
13
|
+
*
|
|
14
|
+
* @example optionOrDefault(undefined, "compatible") // "compatible"
|
|
15
|
+
* @example optionOrDefault("later", "compatible") // "later"
|
|
16
|
+
* @example optionOrDefault(null, true) // null (a value for the caller to validate)
|
|
17
|
+
*/
|
|
18
|
+
export declare function optionOrDefault<T>(value: T | undefined, fallback: T): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The value of an option that was read once, or its default when the option is absent.
|
|
3
|
+
*
|
|
4
|
+
* - ECMA-402 `GetOption` (the Temporal specification defines the same operation) reads the
|
|
5
|
+
* property with one `Get` and returns the default only when that value is `undefined`. Pass
|
|
6
|
+
* the property read as the argument, so the option is read exactly once: a getter cannot
|
|
7
|
+
* answer one value to the check and another to the use.
|
|
8
|
+
* - `null` is a value, not an omission, so it is returned as it is for the caller to validate.
|
|
9
|
+
*
|
|
10
|
+
* @param value the option as read from the caller's object, `undefined` when absent
|
|
11
|
+
* @param fallback the documented default
|
|
12
|
+
* @returns `fallback` when `value` is `undefined`, otherwise `value`
|
|
13
|
+
*
|
|
14
|
+
* @example optionOrDefault(undefined, "compatible") // "compatible"
|
|
15
|
+
* @example optionOrDefault("later", "compatible") // "later"
|
|
16
|
+
* @example optionOrDefault(null, true) // null (a value for the caller to validate)
|
|
17
|
+
*/
|
|
18
|
+
export function optionOrDefault(value, fallback) {
|
|
19
|
+
return value === undefined ? fallback : value;
|
|
20
|
+
}
|
|
@@ -3,8 +3,8 @@ import { type LocalesArgument } from "./resolveLocale.js";
|
|
|
3
3
|
* Shared token-pattern engine for J11's `parse*WithPattern` family.
|
|
4
4
|
*
|
|
5
5
|
* This is GMT's one named exception to `context/coding-standards.md`'s
|
|
6
|
-
* "manual string parsing" prohibition (
|
|
7
|
-
*
|
|
6
|
+
* "manual string parsing" prohibition (its section "Scoped exception:
|
|
7
|
+
* manual string parsing"). The exception is scoped to this module
|
|
8
8
|
* and the three `parse*WithPattern` public functions, and is bound by
|
|
9
9
|
* three rules, enforced throughout this file:
|
|
10
10
|
* 1. The regex is always built *from the pattern string itself* at call
|
|
@@ -40,7 +40,14 @@ export interface ParsedPatternFields {
|
|
|
40
40
|
* fields, or `null` on malformed pattern / no match / invalid input.
|
|
41
41
|
*
|
|
42
42
|
* `null` here always means "return the sentinel" to the caller — it
|
|
43
|
-
* never distinguishes malformed-pattern from no-match from invalid-input
|
|
44
|
-
* matching the shared never-throw /
|
|
43
|
+
* never distinguishes malformed-pattern from no-match from invalid-input
|
|
44
|
+
* from a `yy` token with no window, matching the shared never-throw /
|
|
45
|
+
* sentinel-return contract.
|
|
46
|
+
*
|
|
47
|
+
* `options` is the caller's `TwoDigitYearOptions` bag, already accepted
|
|
48
|
+
* by `isOptionsArgument`. It is read lazily: only a matched `yy` token
|
|
49
|
+
* reads `yearWindow`, once, so a pattern without `yy` reads neither the
|
|
50
|
+
* option nor the clock. A bag that throws when read makes this function
|
|
51
|
+
* throw; every caller runs it inside `try`.
|
|
45
52
|
*/
|
|
46
|
-
export declare function parseValueWithPattern(value: string, pattern: string, locale: LocalesArgument | undefined, allowedFields: ReadonlySet<PatternField
|
|
53
|
+
export declare function parseValueWithPattern(value: string, pattern: string, locale: LocalesArgument | undefined, allowedFields: ReadonlySet<PatternField>, options?: unknown): ParsedPatternFields | null;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { resolveLocale } from "./resolveLocale.js";
|
|
2
|
+
import { twoDigitYear } from "./twoDigitYear.js";
|
|
3
|
+
import { readYearWindowStart } from "./yearWindowStart.js";
|
|
2
4
|
import { getLocaleEraNames } from "../plain/locale/getLocaleEraNames.js";
|
|
3
5
|
import { getLocaleMeridiems } from "../plain/locale/getLocaleMeridiems.js";
|
|
4
6
|
import { getLocaleMonthNames } from "../plain/locale/getLocaleMonthNames.js";
|
|
@@ -24,9 +26,10 @@ export const DATE_TIME_PATTERN_FIELDS = new Set([
|
|
|
24
26
|
...DATE_PATTERN_FIELDS,
|
|
25
27
|
...TIME_PATTERN_FIELDS,
|
|
26
28
|
]);
|
|
27
|
-
// Recognized vocabulary letters
|
|
28
|
-
//
|
|
29
|
-
//
|
|
29
|
+
// Recognized vocabulary letters: a subset of the UTS #35 Date Field Symbol
|
|
30
|
+
// Table, with its field lengths (`MMM` abbreviated, `MMMM` wide), restricted
|
|
31
|
+
// to what's unambiguous to parse — no offset/zone-name tokens since this
|
|
32
|
+
// story is plain-only (Decision 1). Any other unquoted letter in a pattern
|
|
30
33
|
// is malformed. Numeric ranges are baked into each regex so a shape
|
|
31
34
|
// mismatch (e.g. "13" for a 12-hour token) fails at the regex stage,
|
|
32
35
|
// before ever reaching Temporal.
|
|
@@ -78,13 +81,21 @@ const VOCABULARY_LETTERS = "yMdHhmsSEaG";
|
|
|
78
81
|
/**
|
|
79
82
|
* Split a pattern string into literal and letter-run parts.
|
|
80
83
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
84
|
+
* Literal text follows UTS #35 Part 4, Date Format Patterns
|
|
85
|
+
* (https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns):
|
|
86
|
+
* - "Any characters other than A..Z and a..z, including spaces and
|
|
87
|
+
* punctuation" are literals with no quoting.
|
|
88
|
+
* - "Any text between single vertical quotes ('xxxx'), which may include
|
|
89
|
+
* A..Z and a..z as literal text."
|
|
90
|
+
* - "Two adjacent single vertical quotes (''), which represent a literal
|
|
91
|
+
* single quote, either inside or outside quoted text."
|
|
92
|
+
*
|
|
93
|
+
* The pattern is read left to right, so a `''` pair is taken before a
|
|
94
|
+
* lone `'` is read as opening or closing quoted text: `''''` is two
|
|
95
|
+
* literal quotes, and `'''T'` is a literal quote followed by the quoted
|
|
96
|
+
* text `T`. UTS #35 defines quoted text only as text *between* two
|
|
97
|
+
* quotes, so a quote that never closes has no defined meaning and the
|
|
98
|
+
* pattern is malformed (`null`).
|
|
88
99
|
*/
|
|
89
100
|
function tokenizePattern(pattern) {
|
|
90
101
|
const parts = [];
|
|
@@ -92,6 +103,12 @@ function tokenizePattern(pattern) {
|
|
|
92
103
|
while (i < pattern.length) {
|
|
93
104
|
const ch = pattern[i];
|
|
94
105
|
if (ch === "'") {
|
|
106
|
+
// `''` outside quoted text: one literal quote, no quoted text opened.
|
|
107
|
+
if (pattern[i + 1] === "'") {
|
|
108
|
+
parts.push({ type: "literal", text: "'" });
|
|
109
|
+
i += 2;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
95
112
|
let j = i + 1;
|
|
96
113
|
let text = "";
|
|
97
114
|
let closed = false;
|
|
@@ -109,9 +126,9 @@ function tokenizePattern(pattern) {
|
|
|
109
126
|
text += pattern[j];
|
|
110
127
|
j += 1;
|
|
111
128
|
}
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
// have closed.
|
|
129
|
+
// UTS #35 gives quoted text a meaning only between two quotes, so
|
|
130
|
+
// an unterminated quote is a malformed pattern, not a guess at
|
|
131
|
+
// where it should have closed.
|
|
115
132
|
if (!closed)
|
|
116
133
|
return null;
|
|
117
134
|
parts.push({ type: "literal", text });
|
|
@@ -258,15 +275,24 @@ function compilePattern(pattern, allowedFields, locale) {
|
|
|
258
275
|
}
|
|
259
276
|
/**
|
|
260
277
|
* Resolve a successful regex match's captures back into date/time field
|
|
261
|
-
* values,
|
|
262
|
-
*
|
|
278
|
+
* values, resolving a two-digit year in the caller's window, converting
|
|
279
|
+
* 12-hour to 24-hour (via a matched meridiem), and adjusting a BCE year.
|
|
263
280
|
*
|
|
264
281
|
* This step only ever produces a *candidate* fields object — it does not
|
|
265
282
|
* itself prove the fields form a real date/time. The caller is
|
|
266
283
|
* responsible for handing the result to `Temporal.*.from(fields, {
|
|
267
284
|
* overflow: "reject" })`, which is what actually validates it.
|
|
285
|
+
*
|
|
286
|
+
* `options` is the caller's `TwoDigitYearOptions` bag, unread. It is read
|
|
287
|
+
* only when a `yy` token matched, once (`readYearWindowStart`): a pattern
|
|
288
|
+
* with no `yy` never reads `yearWindow`, and so never reads the clock a
|
|
289
|
+
* `"rolling"` window needs. Returns `null` when a `yy` token matched and
|
|
290
|
+
* the bag names no valid window: no standard says which century a
|
|
291
|
+
* two-digit year belongs to, so without the caller's window the value
|
|
292
|
+
* cannot be read. Reading a hostile bag throws; the public function's
|
|
293
|
+
* `try` turns that into its sentinel.
|
|
268
294
|
*/
|
|
269
|
-
function resolvePatternFields(match, tokens) {
|
|
295
|
+
function resolvePatternFields(match, tokens, options) {
|
|
270
296
|
const groups = (match.groups ?? {});
|
|
271
297
|
const fields = {};
|
|
272
298
|
let hourIsTwelveHour = false;
|
|
@@ -281,11 +307,12 @@ function resolvePatternFields(match, tokens) {
|
|
|
281
307
|
fields.year = Number.parseInt(raw, 10);
|
|
282
308
|
break;
|
|
283
309
|
case "yearShort": {
|
|
284
|
-
//
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
310
|
+
// A pattern holds one year token at most (`compilePattern` rejects
|
|
311
|
+
// a repeated field), so this is the call's only read of the option.
|
|
312
|
+
const yearWindowStart = readYearWindowStart(options);
|
|
313
|
+
if (yearWindowStart === null)
|
|
314
|
+
return null;
|
|
315
|
+
fields.year = twoDigitYear(Number.parseInt(raw, 10), yearWindowStart);
|
|
289
316
|
break;
|
|
290
317
|
}
|
|
291
318
|
case "monthNumber":
|
|
@@ -360,10 +387,17 @@ function resolvePatternFields(match, tokens) {
|
|
|
360
387
|
* fields, or `null` on malformed pattern / no match / invalid input.
|
|
361
388
|
*
|
|
362
389
|
* `null` here always means "return the sentinel" to the caller — it
|
|
363
|
-
* never distinguishes malformed-pattern from no-match from invalid-input
|
|
364
|
-
* matching the shared never-throw /
|
|
390
|
+
* never distinguishes malformed-pattern from no-match from invalid-input
|
|
391
|
+
* from a `yy` token with no window, matching the shared never-throw /
|
|
392
|
+
* sentinel-return contract.
|
|
393
|
+
*
|
|
394
|
+
* `options` is the caller's `TwoDigitYearOptions` bag, already accepted
|
|
395
|
+
* by `isOptionsArgument`. It is read lazily: only a matched `yy` token
|
|
396
|
+
* reads `yearWindow`, once, so a pattern without `yy` reads neither the
|
|
397
|
+
* option nor the clock. A bag that throws when read makes this function
|
|
398
|
+
* throw; every caller runs it inside `try`.
|
|
365
399
|
*/
|
|
366
|
-
export function parseValueWithPattern(value, pattern, locale, allowedFields) {
|
|
400
|
+
export function parseValueWithPattern(value, pattern, locale, allowedFields, options) {
|
|
367
401
|
if (typeof value !== "string" || value.length === 0)
|
|
368
402
|
return null;
|
|
369
403
|
if (typeof pattern !== "string" || pattern.length === 0)
|
|
@@ -387,5 +421,5 @@ export function parseValueWithPattern(value, pattern, locale, allowedFields) {
|
|
|
387
421
|
const match = value.match(compiled.regex);
|
|
388
422
|
if (match === null)
|
|
389
423
|
return null;
|
|
390
|
-
return resolvePatternFields(match, compiled.tokens);
|
|
424
|
+
return resolvePatternFields(match, compiled.tokens, options);
|
|
391
425
|
}
|
|
@@ -24,16 +24,20 @@ function singularDateUnit(unit) {
|
|
|
24
24
|
* @example plainDateUntil(Temporal.PlainDate.from("2024-01-31"), Temporal.PlainDate.from("2024-03-01"), "months").toString() // "P1M1D"
|
|
25
25
|
*/
|
|
26
26
|
export function plainDateUntil(start, end, largestUnit, options) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
// Each option is read once (GetOption).
|
|
28
|
+
const smallestUnit = options?.smallestUnit;
|
|
29
|
+
const roundingIncrement = options?.roundingIncrement;
|
|
30
|
+
const roundingMode = options?.roundingMode;
|
|
31
|
+
if (smallestUnit === undefined &&
|
|
32
|
+
roundingIncrement === undefined &&
|
|
33
|
+
roundingMode === undefined) {
|
|
30
34
|
return Temporal.Duration.from(calendarDateUntil(start, end, singularDateUnit(largestUnit)));
|
|
31
35
|
}
|
|
32
36
|
const untilOptions = {
|
|
33
37
|
largestUnit: largestUnit,
|
|
34
|
-
smallestUnit
|
|
35
|
-
roundingIncrement
|
|
36
|
-
roundingMode
|
|
38
|
+
smallestUnit,
|
|
39
|
+
roundingIncrement,
|
|
40
|
+
roundingMode,
|
|
37
41
|
};
|
|
38
42
|
// No D11 term here. The nudge window can only miss its target when the target sits strictly
|
|
39
43
|
// between the window bounds by a sub-day amount, which is why every D11 case carries a time
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Punctuality } from "../types/index.js";
|
|
2
|
+
/** A `PunctualityTolerance` as non-negative exact nanoseconds; `early` is `null` when absent. */
|
|
3
|
+
export type ToleranceNanoseconds = {
|
|
4
|
+
late: bigint;
|
|
5
|
+
early: bigint | null;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Read a `PunctualityTolerance` once into exact nanoseconds, or `null` when it is invalid.
|
|
9
|
+
*
|
|
10
|
+
* - `late` and `early` are each read exactly once, so a caller that classifies many pairs under
|
|
11
|
+
* one tolerance really uses one tolerance, whatever a getter returns on a later read.
|
|
12
|
+
* - Each bound is an exact duration (a day is 24 hours; years, months and weeks refused) and not
|
|
13
|
+
* negative (`-PT0S` is zero). `late` is required; `early: undefined` is absent and
|
|
14
|
+
* `early: null` is invalid.
|
|
15
|
+
* - A hostile value (a throwing getter, a revoked Proxy) is invalid input: `null`, never a throw.
|
|
16
|
+
*
|
|
17
|
+
* @param tolerance candidate `{ late, early? }`
|
|
18
|
+
* @returns the bounds in nanoseconds, or null on invalid input
|
|
19
|
+
*
|
|
20
|
+
* @example parsePunctualityTolerance({ late: "PT15M" }) // { late: 900000000000n, early: null }
|
|
21
|
+
* @example parsePunctualityTolerance({ late: "-PT15M" }) // null
|
|
22
|
+
*/
|
|
23
|
+
export declare function parsePunctualityTolerance(tolerance: unknown): ToleranceNanoseconds | null;
|
|
24
|
+
/**
|
|
25
|
+
* Classify a deviation (actual − planned, exact nanoseconds) against a tolerance.
|
|
26
|
+
*
|
|
27
|
+
* Late when the deviation is `late` or more; early when `early` is set and the deviation is
|
|
28
|
+
* `-early` or less; on time strictly between. Late is checked first, so with both bounds zero the
|
|
29
|
+
* plan itself is late.
|
|
30
|
+
*
|
|
31
|
+
* @param deviation actual minus planned, in nanoseconds
|
|
32
|
+
* @param tolerance the bounds from `parsePunctualityTolerance`
|
|
33
|
+
* @returns "early", "onTime" or "late"
|
|
34
|
+
*
|
|
35
|
+
* @example punctualityOf(900000000000n, { late: 900000000000n, early: null }) // "late"
|
|
36
|
+
* @example punctualityOf(0n, { late: 900000000000n, early: 0n }) // "early"
|
|
37
|
+
*/
|
|
38
|
+
export declare function punctualityOf(deviation: bigint, tolerance: ToleranceNanoseconds): Punctuality;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { nonNegativeExactDurationNanoseconds } from "./exactDuration.js";
|
|
2
|
+
import { isObject } from "./isObject.js";
|
|
3
|
+
/**
|
|
4
|
+
* Read a `PunctualityTolerance` once into exact nanoseconds, or `null` when it is invalid.
|
|
5
|
+
*
|
|
6
|
+
* - `late` and `early` are each read exactly once, so a caller that classifies many pairs under
|
|
7
|
+
* one tolerance really uses one tolerance, whatever a getter returns on a later read.
|
|
8
|
+
* - Each bound is an exact duration (a day is 24 hours; years, months and weeks refused) and not
|
|
9
|
+
* negative (`-PT0S` is zero). `late` is required; `early: undefined` is absent and
|
|
10
|
+
* `early: null` is invalid.
|
|
11
|
+
* - A hostile value (a throwing getter, a revoked Proxy) is invalid input: `null`, never a throw.
|
|
12
|
+
*
|
|
13
|
+
* @param tolerance candidate `{ late, early? }`
|
|
14
|
+
* @returns the bounds in nanoseconds, or null on invalid input
|
|
15
|
+
*
|
|
16
|
+
* @example parsePunctualityTolerance({ late: "PT15M" }) // { late: 900000000000n, early: null }
|
|
17
|
+
* @example parsePunctualityTolerance({ late: "-PT15M" }) // null
|
|
18
|
+
*/
|
|
19
|
+
export function parsePunctualityTolerance(tolerance) {
|
|
20
|
+
try {
|
|
21
|
+
if (!isObject(tolerance)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const { late, early } = tolerance;
|
|
25
|
+
const lateNanoseconds = nonNegativeExactDurationNanoseconds(late);
|
|
26
|
+
const earlyNanoseconds = early === undefined ? null : nonNegativeExactDurationNanoseconds(early);
|
|
27
|
+
if (lateNanoseconds === null ||
|
|
28
|
+
(early !== undefined && earlyNanoseconds === null)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return { late: lateNanoseconds, early: earlyNanoseconds };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Classify a deviation (actual − planned, exact nanoseconds) against a tolerance.
|
|
39
|
+
*
|
|
40
|
+
* Late when the deviation is `late` or more; early when `early` is set and the deviation is
|
|
41
|
+
* `-early` or less; on time strictly between. Late is checked first, so with both bounds zero the
|
|
42
|
+
* plan itself is late.
|
|
43
|
+
*
|
|
44
|
+
* @param deviation actual minus planned, in nanoseconds
|
|
45
|
+
* @param tolerance the bounds from `parsePunctualityTolerance`
|
|
46
|
+
* @returns "early", "onTime" or "late"
|
|
47
|
+
*
|
|
48
|
+
* @example punctualityOf(900000000000n, { late: 900000000000n, early: null }) // "late"
|
|
49
|
+
* @example punctualityOf(0n, { late: 900000000000n, early: 0n }) // "early"
|
|
50
|
+
*/
|
|
51
|
+
export function punctualityOf(deviation, tolerance) {
|
|
52
|
+
if (deviation >= tolerance.late) {
|
|
53
|
+
return "late";
|
|
54
|
+
}
|
|
55
|
+
if (tolerance.early !== null && deviation <= -tolerance.early) {
|
|
56
|
+
return "early";
|
|
57
|
+
}
|
|
58
|
+
return "onTime";
|
|
59
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a caller's `Intl.DateTimeFormat` options once, into a plain object of primitives.
|
|
3
|
+
*
|
|
4
|
+
* - A formatter that inspects the options before it hands them to `Intl.DateTimeFormat` would
|
|
5
|
+
* otherwise read each one several times, and a getter could answer one value to the check and
|
|
6
|
+
* another to the formatter. ECMA-402 CreateDateTimeFormat reads each option with one `Get`
|
|
7
|
+
* (GetOption); this does the same, in the same order, and everything after works on the copy.
|
|
8
|
+
* - Each value is converted once as well, right after its `Get`, as GetOption converts it:
|
|
9
|
+
* ToString for a string option, ToNumber for `fractionalSecondDigits`, ToBoolean for `hour12`.
|
|
10
|
+
* An option given as an object would otherwise be asked for its value by every
|
|
11
|
+
* `Intl.DateTimeFormat` built from the copy, and could answer each one differently. The range
|
|
12
|
+
* and the allowed values are still checked by `Intl.DateTimeFormat`. `timeZone` alone is copied
|
|
13
|
+
* unconverted, for the caller's own zone rule.
|
|
14
|
+
* - The object is coerced as ECMA-402 CoerceOptionsToObject coerces it: `undefined` is no options,
|
|
15
|
+
* `null` throws TypeError, and a string or a number has none of these properties. Inherited
|
|
16
|
+
* properties are read, as `Get` reads them.
|
|
17
|
+
* - Only the options `Intl.DateTimeFormat` reads are copied, and only those that are not
|
|
18
|
+
* `undefined`. Any other key was never read by the formatter, so dropping it changes nothing.
|
|
19
|
+
*
|
|
20
|
+
* @param options the caller's options argument
|
|
21
|
+
* @returns a plain object holding each option that was set, converted to its primitive; throws
|
|
22
|
+
* TypeError for `null`, or for a value that cannot be converted, for the caller's sentinel
|
|
23
|
+
*
|
|
24
|
+
* @example readDateTimeFormatOptions({ dateStyle: "long", extra: 1 }) // { dateStyle: "long" }
|
|
25
|
+
* @example readDateTimeFormatOptions({ month: { toString: () => "long" } }) // { month: "long" }
|
|
26
|
+
* @example readDateTimeFormatOptions(undefined) // {}
|
|
27
|
+
* @example readDateTimeFormatOptions("x") // {} (a string has no date-time options)
|
|
28
|
+
* @example readDateTimeFormatOptions(null) // throws TypeError
|
|
29
|
+
*/
|
|
30
|
+
export declare function readDateTimeFormatOptions(options: unknown): Intl.DateTimeFormatOptions;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The options ECMA-402 CreateDateTimeFormat reads, in the order it reads them: the formatter's own
|
|
3
|
+
* settings, then `timeZone`, then each date-time component, then `formatMatcher` and the styles.
|
|
4
|
+
*/
|
|
5
|
+
const DATE_TIME_FORMAT_OPTIONS = [
|
|
6
|
+
"localeMatcher",
|
|
7
|
+
"calendar",
|
|
8
|
+
"numberingSystem",
|
|
9
|
+
"hour12",
|
|
10
|
+
"hourCycle",
|
|
11
|
+
"timeZone",
|
|
12
|
+
"weekday",
|
|
13
|
+
"era",
|
|
14
|
+
"year",
|
|
15
|
+
"month",
|
|
16
|
+
"day",
|
|
17
|
+
"dayPeriod",
|
|
18
|
+
"hour",
|
|
19
|
+
"minute",
|
|
20
|
+
"second",
|
|
21
|
+
"fractionalSecondDigits",
|
|
22
|
+
"timeZoneName",
|
|
23
|
+
"formatMatcher",
|
|
24
|
+
"dateStyle",
|
|
25
|
+
"timeStyle",
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Convert an option's value as ECMA-402 GetOption converts it for that option's type: ToBoolean
|
|
29
|
+
* for `hour12`, ToNumber for `fractionalSecondDigits` (GetNumberOption), ToString for every other
|
|
30
|
+
* option. `timeZone` is the exception and is returned as it was read: each caller has its own
|
|
31
|
+
* rule for a zone, and one that hands it to `Intl.DateTimeFormat` does so once.
|
|
32
|
+
*
|
|
33
|
+
* The template literal and the unary plus are ToString and ToNumber exactly, so a symbol (and a
|
|
34
|
+
* bigint for a number) throws TypeError as it does inside `Intl.DateTimeFormat`.
|
|
35
|
+
*/
|
|
36
|
+
function convertOption(name, value) {
|
|
37
|
+
switch (name) {
|
|
38
|
+
case "timeZone":
|
|
39
|
+
return value;
|
|
40
|
+
case "hour12":
|
|
41
|
+
return Boolean(value);
|
|
42
|
+
case "fractionalSecondDigits":
|
|
43
|
+
return +value;
|
|
44
|
+
default:
|
|
45
|
+
return `${value}`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read a caller's `Intl.DateTimeFormat` options once, into a plain object of primitives.
|
|
50
|
+
*
|
|
51
|
+
* - A formatter that inspects the options before it hands them to `Intl.DateTimeFormat` would
|
|
52
|
+
* otherwise read each one several times, and a getter could answer one value to the check and
|
|
53
|
+
* another to the formatter. ECMA-402 CreateDateTimeFormat reads each option with one `Get`
|
|
54
|
+
* (GetOption); this does the same, in the same order, and everything after works on the copy.
|
|
55
|
+
* - Each value is converted once as well, right after its `Get`, as GetOption converts it:
|
|
56
|
+
* ToString for a string option, ToNumber for `fractionalSecondDigits`, ToBoolean for `hour12`.
|
|
57
|
+
* An option given as an object would otherwise be asked for its value by every
|
|
58
|
+
* `Intl.DateTimeFormat` built from the copy, and could answer each one differently. The range
|
|
59
|
+
* and the allowed values are still checked by `Intl.DateTimeFormat`. `timeZone` alone is copied
|
|
60
|
+
* unconverted, for the caller's own zone rule.
|
|
61
|
+
* - The object is coerced as ECMA-402 CoerceOptionsToObject coerces it: `undefined` is no options,
|
|
62
|
+
* `null` throws TypeError, and a string or a number has none of these properties. Inherited
|
|
63
|
+
* properties are read, as `Get` reads them.
|
|
64
|
+
* - Only the options `Intl.DateTimeFormat` reads are copied, and only those that are not
|
|
65
|
+
* `undefined`. Any other key was never read by the formatter, so dropping it changes nothing.
|
|
66
|
+
*
|
|
67
|
+
* @param options the caller's options argument
|
|
68
|
+
* @returns a plain object holding each option that was set, converted to its primitive; throws
|
|
69
|
+
* TypeError for `null`, or for a value that cannot be converted, for the caller's sentinel
|
|
70
|
+
*
|
|
71
|
+
* @example readDateTimeFormatOptions({ dateStyle: "long", extra: 1 }) // { dateStyle: "long" }
|
|
72
|
+
* @example readDateTimeFormatOptions({ month: { toString: () => "long" } }) // { month: "long" }
|
|
73
|
+
* @example readDateTimeFormatOptions(undefined) // {}
|
|
74
|
+
* @example readDateTimeFormatOptions("x") // {} (a string has no date-time options)
|
|
75
|
+
* @example readDateTimeFormatOptions(null) // throws TypeError
|
|
76
|
+
*/
|
|
77
|
+
export function readDateTimeFormatOptions(options) {
|
|
78
|
+
if (options === null) {
|
|
79
|
+
throw new TypeError("options must be an object or undefined");
|
|
80
|
+
}
|
|
81
|
+
const read = {};
|
|
82
|
+
if (options === undefined) {
|
|
83
|
+
return read;
|
|
84
|
+
}
|
|
85
|
+
const source = Object(options);
|
|
86
|
+
for (const name of DATE_TIME_FORMAT_OPTIONS) {
|
|
87
|
+
const value = source[name];
|
|
88
|
+
if (value !== undefined) {
|
|
89
|
+
read[name] = convertOption(name, value);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return read;
|
|
93
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DateTimeDurationUnit } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read a `units` argument, such as `{ minutes: 15 }`, the way Temporal reads a duration-like
|
|
4
|
+
* object, and return the amounts as a fresh plain object that holds only the caller's units.
|
|
5
|
+
*
|
|
6
|
+
* The check and the read are one pass, so nothing reaches Temporal that was not checked:
|
|
7
|
+
*
|
|
8
|
+
* - `units` must be an Object (`isObject`), a function included.
|
|
9
|
+
* - An own enumerable string key that `isAllowed` refuses returns `null`, whatever its value.
|
|
10
|
+
* This is the guard against a misspelt key, which Temporal on its own ignores. A symbol key and
|
|
11
|
+
* a non-enumerable key that is no unit name are not entries and are ignored.
|
|
12
|
+
* - Each of the ten unit names is read once with an ordinary property get, in the order Temporal's
|
|
13
|
+
* ToTemporalPartialDurationRecord reads them, so an inherited or non-enumerable unit applies.
|
|
14
|
+
* `undefined` means the unit is absent. Any other value must be a finite number; nothing is
|
|
15
|
+
* converted to one.
|
|
16
|
+
* - A unit `isAllowed` refuses returns `null` when its amount is not zero. Zero is no amount:
|
|
17
|
+
* Temporal too tells a calendar duration from an exact one by its nonzero fields.
|
|
18
|
+
* - No allowed unit present returns `null`.
|
|
19
|
+
*
|
|
20
|
+
* Whole numbers, one sign and the range are left to Temporal, which throws for each. A getter
|
|
21
|
+
* that throws is not caught here; the calling function's own catch returns its sentinel.
|
|
22
|
+
*
|
|
23
|
+
* @param units the caller's `units` argument
|
|
24
|
+
* @param isAllowed type guard for the units the calling function takes
|
|
25
|
+
* @returns a new plain object of the allowed units that were present, or null on invalid input
|
|
26
|
+
*
|
|
27
|
+
* @example readDurationUnits({ minutes: 15 }, isValidTimeDurationUnit) // { minutes: 15 }
|
|
28
|
+
* @example readDurationUnits({ minutes: 15, hours: undefined }, isValidTimeDurationUnit) // { minutes: 15 }
|
|
29
|
+
* @example readDurationUnits({ minutes: 15, hour: 1 }, isValidTimeDurationUnit) // null (unknown key)
|
|
30
|
+
* @example readDurationUnits(Object.create({ minutes: "15" }), isValidTimeDurationUnit) // null (not a number)
|
|
31
|
+
* @example readDurationUnits(Object.create({ days: 1 }), isValidTimeDurationUnit) // null (a unit outside the set)
|
|
32
|
+
* @example readDurationUnits({}, isValidTimeDurationUnit) // null
|
|
33
|
+
*/
|
|
34
|
+
export declare function readDurationUnits<Unit extends DateTimeDurationUnit>(units: unknown, isAllowed: (unit: string) => unit is Unit): Partial<Record<Unit, number>> | null;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { isObject } from "./isObject.js";
|
|
2
|
+
import { isValidAmount } from "./isValidAmount.js";
|
|
3
|
+
/**
|
|
4
|
+
* The ten fields TC39 Temporal reads from a duration-like object, in the order it reads them:
|
|
5
|
+
* ToTemporalPartialDurationRecord (7.5.18) gets them in alphabetical order.
|
|
6
|
+
*/
|
|
7
|
+
const DURATION_UNIT_NAMES = [
|
|
8
|
+
"days",
|
|
9
|
+
"hours",
|
|
10
|
+
"microseconds",
|
|
11
|
+
"milliseconds",
|
|
12
|
+
"minutes",
|
|
13
|
+
"months",
|
|
14
|
+
"nanoseconds",
|
|
15
|
+
"seconds",
|
|
16
|
+
"weeks",
|
|
17
|
+
"years",
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Read a `units` argument, such as `{ minutes: 15 }`, the way Temporal reads a duration-like
|
|
21
|
+
* object, and return the amounts as a fresh plain object that holds only the caller's units.
|
|
22
|
+
*
|
|
23
|
+
* The check and the read are one pass, so nothing reaches Temporal that was not checked:
|
|
24
|
+
*
|
|
25
|
+
* - `units` must be an Object (`isObject`), a function included.
|
|
26
|
+
* - An own enumerable string key that `isAllowed` refuses returns `null`, whatever its value.
|
|
27
|
+
* This is the guard against a misspelt key, which Temporal on its own ignores. A symbol key and
|
|
28
|
+
* a non-enumerable key that is no unit name are not entries and are ignored.
|
|
29
|
+
* - Each of the ten unit names is read once with an ordinary property get, in the order Temporal's
|
|
30
|
+
* ToTemporalPartialDurationRecord reads them, so an inherited or non-enumerable unit applies.
|
|
31
|
+
* `undefined` means the unit is absent. Any other value must be a finite number; nothing is
|
|
32
|
+
* converted to one.
|
|
33
|
+
* - A unit `isAllowed` refuses returns `null` when its amount is not zero. Zero is no amount:
|
|
34
|
+
* Temporal too tells a calendar duration from an exact one by its nonzero fields.
|
|
35
|
+
* - No allowed unit present returns `null`.
|
|
36
|
+
*
|
|
37
|
+
* Whole numbers, one sign and the range are left to Temporal, which throws for each. A getter
|
|
38
|
+
* that throws is not caught here; the calling function's own catch returns its sentinel.
|
|
39
|
+
*
|
|
40
|
+
* @param units the caller's `units` argument
|
|
41
|
+
* @param isAllowed type guard for the units the calling function takes
|
|
42
|
+
* @returns a new plain object of the allowed units that were present, or null on invalid input
|
|
43
|
+
*
|
|
44
|
+
* @example readDurationUnits({ minutes: 15 }, isValidTimeDurationUnit) // { minutes: 15 }
|
|
45
|
+
* @example readDurationUnits({ minutes: 15, hours: undefined }, isValidTimeDurationUnit) // { minutes: 15 }
|
|
46
|
+
* @example readDurationUnits({ minutes: 15, hour: 1 }, isValidTimeDurationUnit) // null (unknown key)
|
|
47
|
+
* @example readDurationUnits(Object.create({ minutes: "15" }), isValidTimeDurationUnit) // null (not a number)
|
|
48
|
+
* @example readDurationUnits(Object.create({ days: 1 }), isValidTimeDurationUnit) // null (a unit outside the set)
|
|
49
|
+
* @example readDurationUnits({}, isValidTimeDurationUnit) // null
|
|
50
|
+
*/
|
|
51
|
+
export function readDurationUnits(units, isAllowed) {
|
|
52
|
+
if (!isObject(units)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (!Object.keys(units).every((key) => isAllowed(key))) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const record = units;
|
|
59
|
+
const read = {};
|
|
60
|
+
let present = false;
|
|
61
|
+
for (const name of DURATION_UNIT_NAMES) {
|
|
62
|
+
const amount = record[name];
|
|
63
|
+
if (amount === undefined) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (!isValidAmount(amount)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (isAllowed(name)) {
|
|
70
|
+
read[name] = amount;
|
|
71
|
+
present = true;
|
|
72
|
+
}
|
|
73
|
+
else if (amount !== 0) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return present ? read : null;
|
|
78
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** The date fields `setDate` takes. */
|
|
2
|
+
export declare const DATE_FIELDS: readonly ["year", "month", "monthCode", "day"];
|
|
3
|
+
/** The time fields `setTime` takes. */
|
|
4
|
+
export declare const TIME_FIELDS: readonly ["hour", "minute", "second", "millisecond", "microsecond", "nanosecond"];
|
|
5
|
+
/** The fields `setDateTime`, `setUtc`, `setUnix` and `setZoned` take. */
|
|
6
|
+
export declare const DATE_TIME_FIELDS: readonly ["year", "month", "monthCode", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"];
|
|
7
|
+
/** The one field whose value is a string; every other field a `set*` function takes is a number. */
|
|
8
|
+
declare const STRING_FIELD = "monthCode";
|
|
9
|
+
/** A field a `set*` function may take. */
|
|
10
|
+
type SetField = (typeof DATE_TIME_FIELDS)[number];
|
|
11
|
+
/** The checked values of the fields in `Field`: `monthCode` a string, every other an integer. */
|
|
12
|
+
export type SetFields<Field extends SetField> = {
|
|
13
|
+
[Name in Field]?: Name extends typeof STRING_FIELD ? string : number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Read the `fields` argument of a `set*` function the way Temporal's `with` reads it, and return
|
|
17
|
+
* the values as a fresh plain object that holds only the fields the function takes.
|
|
18
|
+
*
|
|
19
|
+
* The check and the read are one pass, so nothing reaches Temporal that was not checked:
|
|
20
|
+
*
|
|
21
|
+
* - `fields` must be an Object (`isObject`), a function included, and not a Temporal object that
|
|
22
|
+
* holds a date or a time (TC39 IsPartialTemporalObject).
|
|
23
|
+
* - An own enumerable string key outside `allowedFields` returns `null`, whatever its value: the guard
|
|
24
|
+
* against a misspelt key. A symbol key is ignored.
|
|
25
|
+
* - Each property `with` reads is read once with an ordinary property get, in the order `with`
|
|
26
|
+
* reads them, so an inherited, non-enumerable or getter field applies. `undefined` means absent.
|
|
27
|
+
* A defined property outside `allowedFields` (another type's field, an era, an offset, a
|
|
28
|
+
* `calendar` or a `timeZone`) returns `null`.
|
|
29
|
+
* - A value is not converted: `monthCode` must be a string, and every other field a number that is
|
|
30
|
+
* an integer. `null`, a numeric string, a boolean and a fraction return `null`, where Temporal
|
|
31
|
+
* would convert or truncate them. A bigint, `NaN` and an infinity return `null` too; Temporal
|
|
32
|
+
* throws for them (ToIntegerWithTruncation).
|
|
33
|
+
*
|
|
34
|
+
* Range and overflow are left to Temporal. An empty result means nothing is set: the function
|
|
35
|
+
* returns its value unchanged, where Temporal's `with` would throw. A getter that throws is not
|
|
36
|
+
* caught here, nor is a Proxy's `getPrototypeOf` trap that throws; the calling function's own catch
|
|
37
|
+
* returns its sentinel.
|
|
38
|
+
*
|
|
39
|
+
* @param fields the caller's `fields` argument
|
|
40
|
+
* @param allowedFields the fields the calling function takes
|
|
41
|
+
* @returns a new plain object of the fields set, empty when none is, or null on invalid input
|
|
42
|
+
*
|
|
43
|
+
* @example readSetFields({ year: 2025 }, DATE_FIELDS) // { year: 2025 }
|
|
44
|
+
* @example readSetFields({}, DATE_FIELDS) // {} (nothing set)
|
|
45
|
+
* @example readSetFields({ year: "2025" }, DATE_FIELDS) // null (not converted)
|
|
46
|
+
* @example readSetFields({ year: 2025, yaer: 1 }, DATE_FIELDS) // null (misspelt key)
|
|
47
|
+
* @example readSetFields({ year: 2025, hour: 5 }, DATE_FIELDS) // null (a field setDate does not take)
|
|
48
|
+
*/
|
|
49
|
+
export declare function readSetFields<Field extends SetField>(fields: unknown, allowedFields: readonly Field[]): SetFields<Field> | null;
|
|
50
|
+
export {};
|