@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,179 @@
|
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import { isObject } from "./isObject.js";
|
|
3
|
+
/** The date fields `setDate` takes. */
|
|
4
|
+
export const DATE_FIELDS = ["year", "month", "monthCode", "day"];
|
|
5
|
+
/** The time fields `setTime` takes. */
|
|
6
|
+
export const TIME_FIELDS = [
|
|
7
|
+
"hour",
|
|
8
|
+
"minute",
|
|
9
|
+
"second",
|
|
10
|
+
"millisecond",
|
|
11
|
+
"microsecond",
|
|
12
|
+
"nanosecond",
|
|
13
|
+
];
|
|
14
|
+
/** The fields `setDateTime`, `setUtc`, `setUnix` and `setZoned` take. */
|
|
15
|
+
export const DATE_TIME_FIELDS = [...DATE_FIELDS, ...TIME_FIELDS];
|
|
16
|
+
/**
|
|
17
|
+
* Every property TC39 Temporal's `with` methods read from their argument, in the order they read
|
|
18
|
+
* them: `calendar` and `timeZone` first, which IsPartialTemporalObject (13.24) refuses, then the
|
|
19
|
+
* date and time fields and the `offset` that `ZonedDateTime.prototype.with` reads, in code-unit
|
|
20
|
+
* order. PrepareCalendarFields (12.3.3) sorts them so for every `with` that takes a date, and
|
|
21
|
+
* ToTemporalTimeRecord (4.5.12), which `PlainTime.prototype.with` uses, reads its six fields in
|
|
22
|
+
* the same order. The list adds the era fields,
|
|
23
|
+
* which `with` never reads for the ISO 8601 calendar (CalendarExtraFields returns none) and which
|
|
24
|
+
* GMT reads only to refuse them.
|
|
25
|
+
*/
|
|
26
|
+
const WITH_PROPERTY_NAMES = [
|
|
27
|
+
"calendar",
|
|
28
|
+
"timeZone",
|
|
29
|
+
"day",
|
|
30
|
+
"era",
|
|
31
|
+
"eraYear",
|
|
32
|
+
"hour",
|
|
33
|
+
"microsecond",
|
|
34
|
+
"millisecond",
|
|
35
|
+
"minute",
|
|
36
|
+
"month",
|
|
37
|
+
"monthCode",
|
|
38
|
+
"nanosecond",
|
|
39
|
+
"offset",
|
|
40
|
+
"second",
|
|
41
|
+
"year",
|
|
42
|
+
];
|
|
43
|
+
/** The one field whose value is a string; every other field a `set*` function takes is a number. */
|
|
44
|
+
const STRING_FIELD = "monthCode";
|
|
45
|
+
/**
|
|
46
|
+
* For each Temporal class whose objects hold a date or a time (the internal slots TC39
|
|
47
|
+
* IsPartialTemporalObject tests), a getter that throws for any receiver without that slot.
|
|
48
|
+
*/
|
|
49
|
+
const BRANDED_GETTERS = [
|
|
50
|
+
["PlainDate", "calendarId"],
|
|
51
|
+
["PlainDateTime", "calendarId"],
|
|
52
|
+
["PlainMonthDay", "calendarId"],
|
|
53
|
+
["PlainYearMonth", "calendarId"],
|
|
54
|
+
["ZonedDateTime", "calendarId"],
|
|
55
|
+
["PlainTime", "hour"],
|
|
56
|
+
];
|
|
57
|
+
/** Whether `value` holds the internal slot of one class of `namespace`. */
|
|
58
|
+
function isObjectOf(namespace, value) {
|
|
59
|
+
return BRANDED_GETTERS.some(([name, key]) => {
|
|
60
|
+
const prototype = namespace[name]?.prototype;
|
|
61
|
+
const getter = isObject(prototype)
|
|
62
|
+
? Object.getOwnPropertyDescriptor(prototype, key)?.get
|
|
63
|
+
: undefined;
|
|
64
|
+
if (typeof getter !== "function") {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
getter.call(value);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether `value` is an object of the Temporal the host provides on `globalThis`, if any. A
|
|
78
|
+
* malformed host Temporal recognises nothing, so it never changes the result for a field object.
|
|
79
|
+
*/
|
|
80
|
+
function isHostTemporalObject(value) {
|
|
81
|
+
try {
|
|
82
|
+
const host = globalThis.Temporal;
|
|
83
|
+
return (isObject(host) &&
|
|
84
|
+
host !== Temporal &&
|
|
85
|
+
isObjectOf(host, value));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Whether `value` is a Temporal object that holds a date or a time, from the polyfill GMT uses or
|
|
93
|
+
* from a Temporal the host provides. The test is the one a class's own getter makes: it reads the
|
|
94
|
+
* internal slot, so neither the prototype chain nor any property of `value` decides it.
|
|
95
|
+
*
|
|
96
|
+
* The check calls up to six getters, twelve with a host Temporal, and a throwing getter is slow, so
|
|
97
|
+
* it is skipped when the prototype is `Object.prototype`, `null` or `Function.prototype`: a plain
|
|
98
|
+
* object, an `Object.create(null)` object or a function, which no Temporal class makes.
|
|
99
|
+
*
|
|
100
|
+
* Limits:
|
|
101
|
+
* - An object from a second copy of the polyfill that is not on `globalThis` is not detected and
|
|
102
|
+
* is read as a field bag, which is also what TC39 IsPartialTemporalObject (13.24) does with an
|
|
103
|
+
* object that lacks this polyfill's internal slots.
|
|
104
|
+
* - A Temporal object whose prototype was swapped to one of the three above is not detected
|
|
105
|
+
* either. Its getters are then out of reach, so it reads as setting nothing and the function
|
|
106
|
+
* returns its value unchanged (accepted by owner decision for the speed of the plain case).
|
|
107
|
+
*/
|
|
108
|
+
function isTemporalDateOrTimeObject(value) {
|
|
109
|
+
const prototype = Object.getPrototypeOf(value);
|
|
110
|
+
if (prototype === Object.prototype ||
|
|
111
|
+
prototype === null ||
|
|
112
|
+
prototype === Function.prototype) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return (isObjectOf(Temporal, value) ||
|
|
116
|
+
isHostTemporalObject(value));
|
|
117
|
+
}
|
|
118
|
+
/** Whether `value` is one Temporal reads for `name` without converting it. */
|
|
119
|
+
function isFieldValue(name, value) {
|
|
120
|
+
return name === STRING_FIELD
|
|
121
|
+
? typeof value === "string"
|
|
122
|
+
: typeof value === "number" && Number.isInteger(value);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Read the `fields` argument of a `set*` function the way Temporal's `with` reads it, and return
|
|
126
|
+
* the values as a fresh plain object that holds only the fields the function takes.
|
|
127
|
+
*
|
|
128
|
+
* The check and the read are one pass, so nothing reaches Temporal that was not checked:
|
|
129
|
+
*
|
|
130
|
+
* - `fields` must be an Object (`isObject`), a function included, and not a Temporal object that
|
|
131
|
+
* holds a date or a time (TC39 IsPartialTemporalObject).
|
|
132
|
+
* - An own enumerable string key outside `allowedFields` returns `null`, whatever its value: the guard
|
|
133
|
+
* against a misspelt key. A symbol key is ignored.
|
|
134
|
+
* - Each property `with` reads is read once with an ordinary property get, in the order `with`
|
|
135
|
+
* reads them, so an inherited, non-enumerable or getter field applies. `undefined` means absent.
|
|
136
|
+
* A defined property outside `allowedFields` (another type's field, an era, an offset, a
|
|
137
|
+
* `calendar` or a `timeZone`) returns `null`.
|
|
138
|
+
* - A value is not converted: `monthCode` must be a string, and every other field a number that is
|
|
139
|
+
* an integer. `null`, a numeric string, a boolean and a fraction return `null`, where Temporal
|
|
140
|
+
* would convert or truncate them. A bigint, `NaN` and an infinity return `null` too; Temporal
|
|
141
|
+
* throws for them (ToIntegerWithTruncation).
|
|
142
|
+
*
|
|
143
|
+
* Range and overflow are left to Temporal. An empty result means nothing is set: the function
|
|
144
|
+
* returns its value unchanged, where Temporal's `with` would throw. A getter that throws is not
|
|
145
|
+
* caught here, nor is a Proxy's `getPrototypeOf` trap that throws; the calling function's own catch
|
|
146
|
+
* returns its sentinel.
|
|
147
|
+
*
|
|
148
|
+
* @param fields the caller's `fields` argument
|
|
149
|
+
* @param allowedFields the fields the calling function takes
|
|
150
|
+
* @returns a new plain object of the fields set, empty when none is, or null on invalid input
|
|
151
|
+
*
|
|
152
|
+
* @example readSetFields({ year: 2025 }, DATE_FIELDS) // { year: 2025 }
|
|
153
|
+
* @example readSetFields({}, DATE_FIELDS) // {} (nothing set)
|
|
154
|
+
* @example readSetFields({ year: "2025" }, DATE_FIELDS) // null (not converted)
|
|
155
|
+
* @example readSetFields({ year: 2025, yaer: 1 }, DATE_FIELDS) // null (misspelt key)
|
|
156
|
+
* @example readSetFields({ year: 2025, hour: 5 }, DATE_FIELDS) // null (a field setDate does not take)
|
|
157
|
+
*/
|
|
158
|
+
export function readSetFields(fields, allowedFields) {
|
|
159
|
+
const allowed = allowedFields;
|
|
160
|
+
if (!isObject(fields) || isTemporalDateOrTimeObject(fields)) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (!Object.keys(fields).every((key) => allowed.includes(key))) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
const record = fields;
|
|
167
|
+
const read = {};
|
|
168
|
+
for (const name of WITH_PROPERTY_NAMES) {
|
|
169
|
+
const value = record[name];
|
|
170
|
+
if (value === undefined) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (!allowed.includes(name) || !isFieldValue(name, value)) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
read[name] = value;
|
|
177
|
+
}
|
|
178
|
+
return read;
|
|
179
|
+
}
|
|
@@ -18,6 +18,10 @@ import type { DurationRelativeTo } from "../types/index.js";
|
|
|
18
18
|
* calendar must be a `CalendarSystem`, and `"ethiopic"`/`"coptic"` compute in `"ethioaa"`,
|
|
19
19
|
* which polyfill 0.5.1 can read. The digits are ISO, so this is the date Temporal itself would
|
|
20
20
|
* read.
|
|
21
|
+
* - A zoned string without a calendar annotation is read with `zonedDateTimeFrom`, so its offset
|
|
22
|
+
* is matched against the zone as TC39 `ToRelativeTemporalObject` matches it: an offset written
|
|
23
|
+
* to the minute may be the zone's sub-minute offset rounded, and one written with seconds must
|
|
24
|
+
* be the zone's offset exactly (`"1970-01-01T00:00:00-00:45:00[Africa/Monrovia]"` throws).
|
|
21
25
|
* - A leap second (second `60`) throws, in every spelling Temporal's grammar accepts — `T`, `t`
|
|
22
26
|
* or space separator, extended or basic digits, with or without a designator. Temporal's
|
|
23
27
|
* ParseISODateTime would otherwise clamp it to `:59`.
|
|
@@ -3,6 +3,7 @@ import { plainDateTime } from "../regex/date-time.js";
|
|
|
3
3
|
import { parseCalendarDateValue, temporalStringLeapSecond, } from "./calendarDateString.js";
|
|
4
4
|
import { parseCalendarZonedValue } from "./calendarZonedString.js";
|
|
5
5
|
import { hasZonedDateTimeShape, isoStringBody } from "./isoStringBody.js";
|
|
6
|
+
import { zonedDateTimeFrom } from "./zonedWallClock.js";
|
|
6
7
|
/**
|
|
7
8
|
* A calendar annotation in any spelling: critical flag or not, any letter case. An upper-case key
|
|
8
9
|
* is not Temporal syntax, so it is parsed here and throws rather than reaching Temporal later.
|
|
@@ -45,6 +46,10 @@ function hasRelativeToShape(value) {
|
|
|
45
46
|
* calendar must be a `CalendarSystem`, and `"ethiopic"`/`"coptic"` compute in `"ethioaa"`,
|
|
46
47
|
* which polyfill 0.5.1 can read. The digits are ISO, so this is the date Temporal itself would
|
|
47
48
|
* read.
|
|
49
|
+
* - A zoned string without a calendar annotation is read with `zonedDateTimeFrom`, so its offset
|
|
50
|
+
* is matched against the zone as TC39 `ToRelativeTemporalObject` matches it: an offset written
|
|
51
|
+
* to the minute may be the zone's sub-minute offset rounded, and one written with seconds must
|
|
52
|
+
* be the zone's offset exactly (`"1970-01-01T00:00:00-00:45:00[Africa/Monrovia]"` throws).
|
|
48
53
|
* - A leap second (second `60`) throws, in every spelling Temporal's grammar accepts — `T`, `t`
|
|
49
54
|
* or space separator, extended or basic digits, with or without a designator. Temporal's
|
|
50
55
|
* ParseISODateTime would otherwise clamp it to `:59`.
|
|
@@ -70,7 +75,12 @@ export function resolveDurationRelativeTo(relativeTo) {
|
|
|
70
75
|
throw new RangeError(`Not an extended ISO 8601 date, date-time or zoned date-time: ${relativeTo}`);
|
|
71
76
|
}
|
|
72
77
|
if (!anyCalendarAnnotation.test(relativeTo)) {
|
|
73
|
-
|
|
78
|
+
// A zoned string is read here, not handed on as text: `zonedDateTimeFrom` matches an offset
|
|
79
|
+
// written with seconds exactly, as TC39 `ToRelativeTemporalObject` requires and polyfill
|
|
80
|
+
// 0.5.1 does not (temporalCompat D12).
|
|
81
|
+
return timeZoneAnnotation.test(relativeTo)
|
|
82
|
+
? zonedDateTimeFrom(relativeTo)
|
|
83
|
+
: relativeTo;
|
|
74
84
|
}
|
|
75
85
|
if (timeZoneAnnotation.test(relativeTo)) {
|
|
76
86
|
return parseCalendarZonedValue(relativeTo);
|
|
@@ -3,17 +3,28 @@ import type { RelativeRoundingMethod } from "../types/index.js";
|
|
|
3
3
|
* Round a relative-time distance to an integer using the given method, defaulting to "round".
|
|
4
4
|
*
|
|
5
5
|
* Applied directly to the signed fractional value (not its absolute value), so floor/ceil
|
|
6
|
-
* respect whether the distance is past (negative) or future (positive)
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* respect whether the distance is past (negative) or future (positive): "floor" rounds toward
|
|
7
|
+
* negative infinity and "ceil" toward positive infinity, as ECMA-262 `Math.floor` / `Math.ceil`
|
|
8
|
+
* and Temporal's rounding modes of the same names do. "round" is ECMA-262 `Math.round`, a half
|
|
9
|
+
* going toward positive infinity. Comparison: date-fns's `formatDistanceStrict` `roundingMethod`
|
|
10
|
+
* rounds the unsigned distance, so its floor and ceil differ for a past value.
|
|
11
|
+
*
|
|
12
|
+
* A rounded `-0` is preserved rather than normalized to `0`: `Intl.RelativeTimeFormat` treats the
|
|
13
|
+
* sign of zero as meaningful (with `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as
|
|
14
|
+
* "in 0 <unit>"), so collapsing it here would change existing `formatRelative*` output for
|
|
15
|
+
* near-zero distances.
|
|
16
|
+
*
|
|
17
|
+
* The method is matched against the three names `RelativeRoundingMethod` lists, never looked up on
|
|
18
|
+
* `Math`: `Math.abs`, `Math.trunc`, `Math.random` and the keys `Math` inherits from
|
|
19
|
+
* `Object.prototype` are not rounding methods. An `undefined` method is the omitted option
|
|
20
|
+
* (ECMA-402 `GetOption`, which the Temporal specification also defines) and takes the default.
|
|
11
21
|
*
|
|
12
22
|
* @param value the fractional distance in the target display unit
|
|
13
23
|
* @param method optional: "floor" | "ceil" | "round" (default "round")
|
|
14
|
-
* @returns the rounded amount
|
|
24
|
+
* @returns the rounded amount; throws RangeError for any other method, for the caller's sentinel
|
|
15
25
|
* @example resolveRelativeRounding(2.7) // 3
|
|
16
26
|
* @example resolveRelativeRounding(2.7, "floor") // 2
|
|
17
27
|
* @example resolveRelativeRounding(-2.7, "ceil") // -2
|
|
28
|
+
* @example resolveRelativeRounding(-2.7, "abs" as never) // throws RangeError
|
|
18
29
|
*/
|
|
19
30
|
export declare function resolveRelativeRounding(value: number, method?: RelativeRoundingMethod): number;
|
|
@@ -2,19 +2,39 @@
|
|
|
2
2
|
* Round a relative-time distance to an integer using the given method, defaulting to "round".
|
|
3
3
|
*
|
|
4
4
|
* Applied directly to the signed fractional value (not its absolute value), so floor/ceil
|
|
5
|
-
* respect whether the distance is past (negative) or future (positive)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* respect whether the distance is past (negative) or future (positive): "floor" rounds toward
|
|
6
|
+
* negative infinity and "ceil" toward positive infinity, as ECMA-262 `Math.floor` / `Math.ceil`
|
|
7
|
+
* and Temporal's rounding modes of the same names do. "round" is ECMA-262 `Math.round`, a half
|
|
8
|
+
* going toward positive infinity. Comparison: date-fns's `formatDistanceStrict` `roundingMethod`
|
|
9
|
+
* rounds the unsigned distance, so its floor and ceil differ for a past value.
|
|
10
|
+
*
|
|
11
|
+
* A rounded `-0` is preserved rather than normalized to `0`: `Intl.RelativeTimeFormat` treats the
|
|
12
|
+
* sign of zero as meaningful (with `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as
|
|
13
|
+
* "in 0 <unit>"), so collapsing it here would change existing `formatRelative*` output for
|
|
14
|
+
* near-zero distances.
|
|
15
|
+
*
|
|
16
|
+
* The method is matched against the three names `RelativeRoundingMethod` lists, never looked up on
|
|
17
|
+
* `Math`: `Math.abs`, `Math.trunc`, `Math.random` and the keys `Math` inherits from
|
|
18
|
+
* `Object.prototype` are not rounding methods. An `undefined` method is the omitted option
|
|
19
|
+
* (ECMA-402 `GetOption`, which the Temporal specification also defines) and takes the default.
|
|
10
20
|
*
|
|
11
21
|
* @param value the fractional distance in the target display unit
|
|
12
22
|
* @param method optional: "floor" | "ceil" | "round" (default "round")
|
|
13
|
-
* @returns the rounded amount
|
|
23
|
+
* @returns the rounded amount; throws RangeError for any other method, for the caller's sentinel
|
|
14
24
|
* @example resolveRelativeRounding(2.7) // 3
|
|
15
25
|
* @example resolveRelativeRounding(2.7, "floor") // 2
|
|
16
26
|
* @example resolveRelativeRounding(-2.7, "ceil") // -2
|
|
27
|
+
* @example resolveRelativeRounding(-2.7, "abs" as never) // throws RangeError
|
|
17
28
|
*/
|
|
18
29
|
export function resolveRelativeRounding(value, method = "round") {
|
|
19
|
-
|
|
30
|
+
switch (method) {
|
|
31
|
+
case "floor":
|
|
32
|
+
return Math.floor(value);
|
|
33
|
+
case "ceil":
|
|
34
|
+
return Math.ceil(value);
|
|
35
|
+
case "round":
|
|
36
|
+
return Math.round(value);
|
|
37
|
+
default:
|
|
38
|
+
throw new RangeError(`Invalid roundingMethod: ${String(method)}`);
|
|
39
|
+
}
|
|
20
40
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RelativeUnit } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the `largestUnit` option of a `formatRelative*` function to one of the units the
|
|
4
|
+
* function allows, in its singular form.
|
|
5
|
+
*
|
|
6
|
+
* - Temporal reads a unit option with GetTemporalUnitValuedOption, which takes a plural name as
|
|
7
|
+
* its singular, then checks it with ValidateTemporalUnitValue against the unit group of the
|
|
8
|
+
* type — date, time or datetime — and throws RangeError for a unit outside the group:
|
|
9
|
+
* `Temporal.PlainDate.prototype.until` rejects `"hour"`, `Temporal.PlainTime.prototype.until`
|
|
10
|
+
* rejects `"day"`. `allowed` is that group for the calling function.
|
|
11
|
+
* - `undefined` is the omitted option (GetOption), so the caller picks the unit from the distance.
|
|
12
|
+
* - Unit names are lower case, as in Temporal.
|
|
13
|
+
* - The set of units is Temporal's. Rejecting a value that is not a string is GMT's own rule, and
|
|
14
|
+
* stricter than Temporal: GetOption converts any value with ToString, so Temporal accepts
|
|
15
|
+
* `["day"]` and an object whose `toString` returns `"day"` (test262
|
|
16
|
+
* `largestunit-wrong-type.js`). GMT takes string inputs, and its other unit readers
|
|
17
|
+
* (`roundDate`, `roundDateTime`, `roundUtc`, `roundZoned`, `startOfDate`, `totalDuration`,
|
|
18
|
+
* `areDatesEqualBy`) reject a non-string the same way, so this one does not convert either.
|
|
19
|
+
*
|
|
20
|
+
* @param largestUnit the option as read from the caller's object, `undefined` when absent
|
|
21
|
+
* @param allowed the singular units the calling function lists in its type
|
|
22
|
+
* @returns the singular unit, or `undefined` when the option is absent; throws RangeError for any
|
|
23
|
+
* other value, for the caller's sentinel
|
|
24
|
+
*
|
|
25
|
+
* @example resolveRelativeUnit("hours", ["hour", "minute", "second"]) // "hour"
|
|
26
|
+
* @example resolveRelativeUnit(undefined, ["hour", "minute", "second"]) // undefined
|
|
27
|
+
* @example resolveRelativeUnit("day", ["hour", "minute", "second"]) // throws RangeError
|
|
28
|
+
* @example resolveRelativeUnit(["hour"], ["hour", "minute", "second"]) // throws RangeError (GMT's rule; Temporal converts it to "hour")
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveRelativeUnit<Unit extends RelativeUnit>(largestUnit: unknown, allowed: readonly Unit[]): Unit | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the `largestUnit` option of a `formatRelative*` function to one of the units the
|
|
3
|
+
* function allows, in its singular form.
|
|
4
|
+
*
|
|
5
|
+
* - Temporal reads a unit option with GetTemporalUnitValuedOption, which takes a plural name as
|
|
6
|
+
* its singular, then checks it with ValidateTemporalUnitValue against the unit group of the
|
|
7
|
+
* type — date, time or datetime — and throws RangeError for a unit outside the group:
|
|
8
|
+
* `Temporal.PlainDate.prototype.until` rejects `"hour"`, `Temporal.PlainTime.prototype.until`
|
|
9
|
+
* rejects `"day"`. `allowed` is that group for the calling function.
|
|
10
|
+
* - `undefined` is the omitted option (GetOption), so the caller picks the unit from the distance.
|
|
11
|
+
* - Unit names are lower case, as in Temporal.
|
|
12
|
+
* - The set of units is Temporal's. Rejecting a value that is not a string is GMT's own rule, and
|
|
13
|
+
* stricter than Temporal: GetOption converts any value with ToString, so Temporal accepts
|
|
14
|
+
* `["day"]` and an object whose `toString` returns `"day"` (test262
|
|
15
|
+
* `largestunit-wrong-type.js`). GMT takes string inputs, and its other unit readers
|
|
16
|
+
* (`roundDate`, `roundDateTime`, `roundUtc`, `roundZoned`, `startOfDate`, `totalDuration`,
|
|
17
|
+
* `areDatesEqualBy`) reject a non-string the same way, so this one does not convert either.
|
|
18
|
+
*
|
|
19
|
+
* @param largestUnit the option as read from the caller's object, `undefined` when absent
|
|
20
|
+
* @param allowed the singular units the calling function lists in its type
|
|
21
|
+
* @returns the singular unit, or `undefined` when the option is absent; throws RangeError for any
|
|
22
|
+
* other value, for the caller's sentinel
|
|
23
|
+
*
|
|
24
|
+
* @example resolveRelativeUnit("hours", ["hour", "minute", "second"]) // "hour"
|
|
25
|
+
* @example resolveRelativeUnit(undefined, ["hour", "minute", "second"]) // undefined
|
|
26
|
+
* @example resolveRelativeUnit("day", ["hour", "minute", "second"]) // throws RangeError
|
|
27
|
+
* @example resolveRelativeUnit(["hour"], ["hour", "minute", "second"]) // throws RangeError (GMT's rule; Temporal converts it to "hour")
|
|
28
|
+
*/
|
|
29
|
+
export function resolveRelativeUnit(largestUnit, allowed) {
|
|
30
|
+
if (largestUnit === undefined) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
const unit = typeof largestUnit === "string"
|
|
34
|
+
? allowed.find((name) => name === largestUnit || `${name}s` === largestUnit)
|
|
35
|
+
: undefined;
|
|
36
|
+
if (unit === undefined) {
|
|
37
|
+
throw new RangeError(`Invalid largestUnit: ${String(largestUnit)}`);
|
|
38
|
+
}
|
|
39
|
+
return unit;
|
|
40
|
+
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { type UnixEpochUnit } from "./unixEpochValue.js";
|
|
3
|
+
import { type ZoneFrame } from "./zoneFrame.js";
|
|
3
4
|
export interface ResolvedUnixInterval {
|
|
4
5
|
startVal: Temporal.ZonedDateTime;
|
|
5
6
|
endVal: Temporal.ZonedDateTime;
|
|
6
7
|
resolvedUnit: Temporal.DateTimeUnit;
|
|
7
8
|
epochUnit: UnixEpochUnit;
|
|
9
|
+
/** The frame both ends were placed on; `frameInstant` turns a result back into an instant. */
|
|
10
|
+
frame: ZoneFrame;
|
|
8
11
|
}
|
|
9
12
|
/**
|
|
10
13
|
* Resolve the shared arguments of `intervalLengthUnix`, `intervalCountUnix` and
|
|
@@ -13,13 +16,16 @@ export interface ResolvedUnixInterval {
|
|
|
13
16
|
*
|
|
14
17
|
* - Epochs follow the one `unix/` grammar (`parseUnixEpochValue`) and must name Temporal instants.
|
|
15
18
|
* - `epochUnit` defaults to `"milliseconds"`; `timeZone` defaults to `"UTC"` (`"local"` is the
|
|
16
|
-
* system zone
|
|
19
|
+
* system zone; a time zone identifier or a stored UTC offset `±HH:MM[:SS]` is read as written;
|
|
20
|
+
* anything else is invalid).
|
|
21
|
+
* - The ends are placed with `frameZoned`: for a seconds offset they sit in the offset's
|
|
22
|
+
* whole-minute zone, moved by its seconds, to compute with and never to write.
|
|
17
23
|
*
|
|
18
24
|
* @param start interval start epoch
|
|
19
25
|
* @param end interval end epoch
|
|
20
26
|
* @param unit unit name, singular or plural
|
|
21
27
|
* @param options optional `{ epochUnit, timeZone }`
|
|
22
|
-
* @returns the zoned ends, singular unit
|
|
28
|
+
* @returns the zoned ends, singular unit, epoch unit and frame, or null on invalid input
|
|
23
29
|
*
|
|
24
30
|
* @example resolveUnixIntervalPair(0, 86400, "days", { epochUnit: "seconds" })?.resolvedUnit // "day"
|
|
25
31
|
* @example resolveUnixIntervalPair(10, 0, "day") // null (reversed)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { normalizeTimeZone } from "./normalizeTimeZone.js";
|
|
2
1
|
import { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
|
|
3
2
|
import { parseUnixEpochInterval, resolveUnixEpochUnit, unixEpochToInstant, } from "./unixEpochValue.js";
|
|
4
3
|
import { isValidDateTimeUnit } from "../plain/validate/index.js";
|
|
4
|
+
import { frameZoned, normalizeZoneFrame } from "./zoneFrame.js";
|
|
5
5
|
/**
|
|
6
6
|
* Resolve the shared arguments of `intervalLengthUnix`, `intervalCountUnix` and
|
|
7
7
|
* `splitIntervalByUnitUnix`: a non-reversed epoch pair in `epochUnit`, a singular-or-plural
|
|
@@ -9,13 +9,16 @@ import { isValidDateTimeUnit } from "../plain/validate/index.js";
|
|
|
9
9
|
*
|
|
10
10
|
* - Epochs follow the one `unix/` grammar (`parseUnixEpochValue`) and must name Temporal instants.
|
|
11
11
|
* - `epochUnit` defaults to `"milliseconds"`; `timeZone` defaults to `"UTC"` (`"local"` is the
|
|
12
|
-
* system zone
|
|
12
|
+
* system zone; a time zone identifier or a stored UTC offset `±HH:MM[:SS]` is read as written;
|
|
13
|
+
* anything else is invalid).
|
|
14
|
+
* - The ends are placed with `frameZoned`: for a seconds offset they sit in the offset's
|
|
15
|
+
* whole-minute zone, moved by its seconds, to compute with and never to write.
|
|
13
16
|
*
|
|
14
17
|
* @param start interval start epoch
|
|
15
18
|
* @param end interval end epoch
|
|
16
19
|
* @param unit unit name, singular or plural
|
|
17
20
|
* @param options optional `{ epochUnit, timeZone }`
|
|
18
|
-
* @returns the zoned ends, singular unit
|
|
21
|
+
* @returns the zoned ends, singular unit, epoch unit and frame, or null on invalid input
|
|
19
22
|
*
|
|
20
23
|
* @example resolveUnixIntervalPair(0, 86400, "days", { epochUnit: "seconds" })?.resolvedUnit // "day"
|
|
21
24
|
* @example resolveUnixIntervalPair(10, 0, "day") // null (reversed)
|
|
@@ -23,10 +26,10 @@ import { isValidDateTimeUnit } from "../plain/validate/index.js";
|
|
|
23
26
|
export function resolveUnixIntervalPair(start, end, unit, options) {
|
|
24
27
|
const interval = parseUnixEpochInterval(start, end);
|
|
25
28
|
const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
|
|
26
|
-
const
|
|
29
|
+
const frame = normalizeZoneFrame(options?.timeZone);
|
|
27
30
|
if (interval === null ||
|
|
28
31
|
epochUnit === null ||
|
|
29
|
-
|
|
32
|
+
frame === null ||
|
|
30
33
|
typeof unit !== "string") {
|
|
31
34
|
return null;
|
|
32
35
|
}
|
|
@@ -41,10 +44,11 @@ export function resolveUnixIntervalPair(start, end, unit, options) {
|
|
|
41
44
|
}
|
|
42
45
|
try {
|
|
43
46
|
return {
|
|
44
|
-
startVal: startInstant
|
|
45
|
-
endVal: endInstant
|
|
47
|
+
startVal: frameZoned(startInstant, frame),
|
|
48
|
+
endVal: frameZoned(endInstant, frame),
|
|
46
49
|
resolvedUnit,
|
|
47
50
|
epochUnit,
|
|
51
|
+
frame,
|
|
48
52
|
};
|
|
49
53
|
}
|
|
50
54
|
catch {
|
|
@@ -33,7 +33,8 @@ export declare function isExactDurationUnit(unit: string): boolean;
|
|
|
33
33
|
* - A step that goes backwards returns `null`.
|
|
34
34
|
* - More than `maxSlices` slices returns `null` as soon as the next one is due, so the work stays
|
|
35
35
|
* bounded by the limit (owner decision A2, CORE-8).
|
|
36
|
-
* - The last slice's end is
|
|
36
|
+
* - The last slice's end is `end` itself, whether the last step passes `end` (trimmed) or lands on
|
|
37
|
+
* it. Callers handle `start >= end` before calling.
|
|
37
38
|
* - A step that throws a RangeError (it lands past Temporal's last representable value, so after
|
|
38
39
|
* `end`) closes the split with a last slice ending at `end`.
|
|
39
40
|
*
|
|
@@ -57,6 +58,28 @@ export declare function isExactDurationUnit(unit: string): boolean;
|
|
|
57
58
|
export declare function tileByUnit<T extends {
|
|
58
59
|
add(duration: Temporal.DurationLike): T;
|
|
59
60
|
}>(start: T, end: T, compare: (a: T, b: T) => number, unit: string, amount: number, maxSlices: number, add?: (value: T, duration: Temporal.DurationLike) => T): Array<[T, T]> | null;
|
|
61
|
+
/**
|
|
62
|
+
* The step a split takes when its boundaries are then floored to whole `floorUnit`s.
|
|
63
|
+
*
|
|
64
|
+
* - An exact step shorter than one `floorUnit` moves each boundary by less than one unit, so the
|
|
65
|
+
* floored boundaries are every whole unit from the start to the end, each one repeated once per
|
|
66
|
+
* step that falls inside it. Stepping by one `floorUnit` gives those boundaries once each: no
|
|
67
|
+
* empty piece, and no work spent on steps the result cannot show.
|
|
68
|
+
* - Any other step is returned unchanged: a step of one `floorUnit` or more never floors two
|
|
69
|
+
* boundaries to the same value, a calendar step is never shorter than a second, and a
|
|
70
|
+
* fractional `amount` is left for Temporal to reject.
|
|
71
|
+
* - The split's start must itself be a whole `floorUnit`, as a Unix epoch is.
|
|
72
|
+
*
|
|
73
|
+
* @param unit plural duration unit, as returned by `resolveDurationUnit`
|
|
74
|
+
* @param amount positive number of units per step
|
|
75
|
+
* @param floorUnit plural exact unit the boundaries are floored to
|
|
76
|
+
* @returns the `[unit, amount]` to step by
|
|
77
|
+
*
|
|
78
|
+
* @example stepNoFinerThan("milliseconds", 500, "seconds") // ["seconds", 1]
|
|
79
|
+
* @example stepNoFinerThan("milliseconds", 1500, "seconds") // ["milliseconds", 1500]
|
|
80
|
+
* @example stepNoFinerThan("days", 1, "seconds") // ["days", 1]
|
|
81
|
+
*/
|
|
82
|
+
export declare function stepNoFinerThan(unit: string, amount: number, floorUnit: string): [unit: string, amount: number];
|
|
60
83
|
/**
|
|
61
84
|
* A lower bound on the number of slices `tileByUnit` returns for a span, without stepping.
|
|
62
85
|
*
|
|
@@ -68,7 +68,8 @@ function closedAtRangeLimit(slices, current, end, maxSlices) {
|
|
|
68
68
|
* - A step that goes backwards returns `null`.
|
|
69
69
|
* - More than `maxSlices` slices returns `null` as soon as the next one is due, so the work stays
|
|
70
70
|
* bounded by the limit (owner decision A2, CORE-8).
|
|
71
|
-
* - The last slice's end is
|
|
71
|
+
* - The last slice's end is `end` itself, whether the last step passes `end` (trimmed) or lands on
|
|
72
|
+
* it. Callers handle `start >= end` before calling.
|
|
72
73
|
* - A step that throws a RangeError (it lands past Temporal's last representable value, so after
|
|
73
74
|
* `end`) closes the split with a last slice ending at `end`.
|
|
74
75
|
*
|
|
@@ -111,7 +112,9 @@ export function tileByUnit(start, end, compare, unit, amount, maxSlices, add = (
|
|
|
111
112
|
return null;
|
|
112
113
|
}
|
|
113
114
|
stalled = 0;
|
|
114
|
-
|
|
115
|
+
// A step that lands on `end` closes with `end` itself, as a trimmed one does: the two compare
|
|
116
|
+
// equal but may be written differently (a zoned `end` in another zone than `start`).
|
|
117
|
+
slices.push([current, compare(next, end) >= 0 ? end : next]);
|
|
115
118
|
current = next;
|
|
116
119
|
}
|
|
117
120
|
return slices;
|
|
@@ -135,6 +138,35 @@ const LONGEST_UNIT_NANOSECONDS = {
|
|
|
135
138
|
months: 31 * NANOSECONDS_PER_DAY,
|
|
136
139
|
years: 385 * NANOSECONDS_PER_DAY,
|
|
137
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* The step a split takes when its boundaries are then floored to whole `floorUnit`s.
|
|
143
|
+
*
|
|
144
|
+
* - An exact step shorter than one `floorUnit` moves each boundary by less than one unit, so the
|
|
145
|
+
* floored boundaries are every whole unit from the start to the end, each one repeated once per
|
|
146
|
+
* step that falls inside it. Stepping by one `floorUnit` gives those boundaries once each: no
|
|
147
|
+
* empty piece, and no work spent on steps the result cannot show.
|
|
148
|
+
* - Any other step is returned unchanged: a step of one `floorUnit` or more never floors two
|
|
149
|
+
* boundaries to the same value, a calendar step is never shorter than a second, and a
|
|
150
|
+
* fractional `amount` is left for Temporal to reject.
|
|
151
|
+
* - The split's start must itself be a whole `floorUnit`, as a Unix epoch is.
|
|
152
|
+
*
|
|
153
|
+
* @param unit plural duration unit, as returned by `resolveDurationUnit`
|
|
154
|
+
* @param amount positive number of units per step
|
|
155
|
+
* @param floorUnit plural exact unit the boundaries are floored to
|
|
156
|
+
* @returns the `[unit, amount]` to step by
|
|
157
|
+
*
|
|
158
|
+
* @example stepNoFinerThan("milliseconds", 500, "seconds") // ["seconds", 1]
|
|
159
|
+
* @example stepNoFinerThan("milliseconds", 1500, "seconds") // ["milliseconds", 1500]
|
|
160
|
+
* @example stepNoFinerThan("days", 1, "seconds") // ["days", 1]
|
|
161
|
+
*/
|
|
162
|
+
export function stepNoFinerThan(unit, amount, floorUnit) {
|
|
163
|
+
const isFiner = isExactDurationUnit(unit) &&
|
|
164
|
+
isExactDurationUnit(floorUnit) &&
|
|
165
|
+
Number.isInteger(amount) &&
|
|
166
|
+
LONGEST_UNIT_NANOSECONDS[unit] * amount <
|
|
167
|
+
LONGEST_UNIT_NANOSECONDS[floorUnit];
|
|
168
|
+
return isFiner ? [floorUnit, 1] : [unit, amount];
|
|
169
|
+
}
|
|
138
170
|
/**
|
|
139
171
|
* A zoned boundary can sit this far from its wall-clock distance: a UTC offset lies strictly
|
|
140
172
|
* within ±24 hours (Temporal IsOffsetTimeZoneIdentifier / ECMA-262 time zone offset range), so
|
|
@@ -8,7 +8,8 @@ import type { Temporal } from "@js-temporal/polyfill";
|
|
|
8
8
|
* or `"quarter"` from `startOfQuarterForUnix` / `endOfQuarterForUnix` only.
|
|
9
9
|
* - `value` follows the one epoch grammar (`parseUnixEpochValue`); `epochUnit` accepts singular
|
|
10
10
|
* and plural names and defaults to `"milliseconds"`.
|
|
11
|
-
* - `timeZone` defaults to `"UTC"`; `"local"` is the system zone;
|
|
11
|
+
* - `timeZone` defaults to `"UTC"`; `"local"` is the system zone; a time zone identifier or a
|
|
12
|
+
* stored UTC offset (`±HH:MM[:SS]`) is read as written; anything else returns null.
|
|
12
13
|
* - `weekStartsOn` other than `"monday"` or `"sunday"` returns null.
|
|
13
14
|
* - The boundary is always the real local bucket from `internal/zonedBucket.ts` — a start never
|
|
14
15
|
* after `value`, an end never before it.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { normalizeTimeZone } from "./normalizeTimeZone.js";
|
|
2
1
|
import { resolveWeekStartsOn } from "./resolveWeekStartsOn.js";
|
|
3
2
|
import { resolveUnixEpochUnit, toUnixEpoch, unixEpochToInstant, } from "./unixEpochValue.js";
|
|
4
3
|
import { zonedUnitEnd, zonedUnitStart } from "./zonedBucket.js";
|
|
4
|
+
import { frameInstant, frameZoned, normalizeZoneFrame } from "./zoneFrame.js";
|
|
5
5
|
/**
|
|
6
6
|
* Internal shared implementation for `startOfUnix` / `endOfUnix` and the quarter functions.
|
|
7
7
|
*
|
|
@@ -11,7 +11,8 @@ import { zonedUnitEnd, zonedUnitStart } from "./zonedBucket.js";
|
|
|
11
11
|
* or `"quarter"` from `startOfQuarterForUnix` / `endOfQuarterForUnix` only.
|
|
12
12
|
* - `value` follows the one epoch grammar (`parseUnixEpochValue`); `epochUnit` accepts singular
|
|
13
13
|
* and plural names and defaults to `"milliseconds"`.
|
|
14
|
-
* - `timeZone` defaults to `"UTC"`; `"local"` is the system zone;
|
|
14
|
+
* - `timeZone` defaults to `"UTC"`; `"local"` is the system zone; a time zone identifier or a
|
|
15
|
+
* stored UTC offset (`±HH:MM[:SS]`) is read as written; anything else returns null.
|
|
15
16
|
* - `weekStartsOn` other than `"monday"` or `"sunday"` returns null.
|
|
16
17
|
* - The boundary is always the real local bucket from `internal/zonedBucket.ts` — a start never
|
|
17
18
|
* after `value`, an end never before it.
|
|
@@ -24,9 +25,9 @@ import { zonedUnitEnd, zonedUnitStart } from "./zonedBucket.js";
|
|
|
24
25
|
*/
|
|
25
26
|
export function startOrEndOfUnix(value, unit, options, isEnd) {
|
|
26
27
|
const epochUnit = resolveUnixEpochUnit(options.epochUnit);
|
|
27
|
-
const
|
|
28
|
+
const frame = normalizeZoneFrame(options.timeZone);
|
|
28
29
|
const weekStartsOn = resolveWeekStartsOn(options.weekStartsOn);
|
|
29
|
-
if (
|
|
30
|
+
if (frame === null || epochUnit === null || weekStartsOn === null) {
|
|
30
31
|
return null;
|
|
31
32
|
}
|
|
32
33
|
const instant = unixEpochToInstant(value, epochUnit);
|
|
@@ -35,11 +36,13 @@ export function startOrEndOfUnix(value, unit, options, isEnd) {
|
|
|
35
36
|
}
|
|
36
37
|
const weekStartDay = weekStartsOn === "monday" ? 1 : 7;
|
|
37
38
|
try {
|
|
38
|
-
const source = instant
|
|
39
|
+
const source = frameZoned(instant, frame);
|
|
39
40
|
const boundary = isEnd
|
|
40
41
|
? zonedUnitEnd(source, unit, weekStartDay)
|
|
41
42
|
: zonedUnitStart(source, unit, weekStartDay);
|
|
42
|
-
return boundary
|
|
43
|
+
return boundary
|
|
44
|
+
? toUnixEpoch(frameInstant(boundary, frame), epochUnit)
|
|
45
|
+
: null;
|
|
43
46
|
}
|
|
44
47
|
catch {
|
|
45
48
|
return null;
|
|
@@ -5,6 +5,7 @@ import { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
|
|
|
5
5
|
import { resolveWeekStartsOn } from "./resolveWeekStartsOn.js";
|
|
6
6
|
import { isValidDateTimeUnit } from "../plain/validate/index.js";
|
|
7
7
|
import { isValidZonedDateTime } from "../zoned/validate/index.js";
|
|
8
|
+
import { optionOrDefault } from "./optionOrDefault.js";
|
|
8
9
|
/**
|
|
9
10
|
* Internal shared implementation for `startOfZoned` / `endOfZoned`.
|
|
10
11
|
*
|
|
@@ -32,9 +33,7 @@ export function startOrEndOfZoned(value, unit, options, isEnd) {
|
|
|
32
33
|
// An end is next start − 1 ns, so it defaults to nanosecond precision: fewer digits would
|
|
33
34
|
// print an earlier instant than the end (Calendar & zone semantics §3).
|
|
34
35
|
const fractionalSecondDigits = isEnd
|
|
35
|
-
? options.fractionalSecondDigits
|
|
36
|
-
? 9
|
|
37
|
-
: options.fractionalSecondDigits
|
|
36
|
+
? optionOrDefault(options.fractionalSecondDigits, 9)
|
|
38
37
|
: defaultFractionalDigits(resolvedUnit, options.fractionalSecondDigits);
|
|
39
38
|
try {
|
|
40
39
|
const source = zonedDateTimeFrom(value);
|