@northguild/gmt 1.18.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 -2920
- package/dist/calendar/calculate/bucketRange.d.ts +10 -2
- package/dist/calendar/calculate/bucketRange.js +18 -61
- package/dist/calendar/calculate/floorToZone.d.ts +10 -2
- package/dist/calendar/calculate/floorToZone.js +15 -7
- package/dist/calendar/hours/addOperatingTime.d.ts +6 -0
- package/dist/calendar/hours/addOperatingTime.js +7 -1
- package/dist/calendar/hours/isOpenAt.d.ts +6 -0
- package/dist/calendar/hours/isOpenAt.js +6 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +6 -0
- package/dist/calendar/hours/nextCloseAt.js +7 -1
- package/dist/calendar/hours/nextOpenAt.d.ts +6 -0
- package/dist/calendar/hours/nextOpenAt.js +7 -1
- package/dist/calendar/hours/operatingIntervals.d.ts +5 -0
- package/dist/calendar/hours/operatingIntervals.js +5 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +5 -0
- package/dist/calendar/hours/operatingTimeBetween.js +5 -0
- package/dist/calendar/hours/recurringWindows.d.ts +8 -1
- package/dist/calendar/hours/recurringWindows.js +12 -4
- 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/{durationAs.d.ts → totalDuration.d.ts} +25 -19
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +25 -19
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +1 -1
- package/dist/duration/compare/compareDurations.js +1 -1
- 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 +4 -0
- package/dist/instant/convert/fromOffsetInstant.js +6 -1
- package/dist/instant/convert/resolveLocal.d.ts +7 -2
- package/dist/instant/convert/resolveLocal.js +16 -8
- package/dist/instant/convert/toOffsetInstant.d.ts +12 -8
- package/dist/instant/convert/toOffsetInstant.js +19 -11
- 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/chargeableDays.d.ts +6 -0
- package/dist/intermodal/calculate/chargeableDays.js +12 -4
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +7 -0
- package/dist/intermodal/calculate/freeTimeExpiry.js +15 -4
- 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.js +4 -9
- 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 +3 -1
- package/dist/internal/freeTimeLedger.d.ts +5 -0
- package/dist/internal/freeTimeLedger.js +11 -2
- package/dist/internal/index.d.ts +5 -2
- package/dist/internal/index.js +9 -2
- 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/maxPieces.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +4 -1
- package/dist/internal/normalizeTimeZone.js +4 -1
- package/dist/internal/operatingSchedule.d.ts +13 -4
- package/dist/internal/operatingSchedule.js +146 -58
- package/dist/internal/patternToken.d.ts +10 -3
- package/dist/internal/patternToken.js +31 -12
- 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/resolveRelativeUnit.d.ts +1 -1
- package/dist/internal/resolveRelativeUnit.js +1 -1
- package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/startOrEndOfUnix.d.ts +2 -1
- package/dist/internal/startOrEndOfUnix.js +9 -6
- 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/zonedNowUnitValue.d.ts +7 -4
- package/dist/internal/zonedNowUnitValue.js +8 -4
- package/dist/internal/zonedWallClockDifference.js +4 -4
- package/dist/internal/zonedWallClockOperations.d.ts +5 -2
- package/dist/internal/zonedWallClockOperations.js +7 -10
- package/dist/plain/calculate/addDate.js +4 -7
- package/dist/plain/calculate/addDateTime.js +4 -7
- package/dist/plain/calculate/addTime.js +4 -7
- package/dist/plain/calculate/endOfTime.d.ts +1 -1
- package/dist/plain/calculate/setDate.d.ts +20 -3
- package/dist/plain/calculate/setDate.js +27 -7
- package/dist/plain/calculate/setDateTime.d.ts +15 -3
- package/dist/plain/calculate/setDateTime.js +22 -7
- package/dist/plain/calculate/setTime.d.ts +13 -1
- package/dist/plain/calculate/setTime.js +21 -6
- package/dist/plain/calculate/startOfTime.d.ts +1 -1
- package/dist/plain/calculate/subtractDate.js +4 -7
- package/dist/plain/calculate/subtractDateTime.js +4 -7
- package/dist/plain/calculate/subtractTime.js +4 -7
- package/dist/plain/format/formatCalendar.js +2 -1
- package/dist/plain/format/formatRelativeDate.js +2 -1
- package/dist/plain/format/formatRelativeDateTime.js +2 -1
- package/dist/plain/format/formatRelativeTime.js +2 -1
- 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/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/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
- package/dist/plain/interval/intervalXorAllTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsTime.js +2 -2
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +16 -3
- package/dist/plain/parse/parseDateTimeWithPattern.js +20 -5
- package/dist/plain/parse/parseDateWithPattern.d.ts +17 -3
- package/dist/plain/parse/parseDateWithPattern.js +21 -5
- 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.js +1 -0
- package/dist/plain/parse/parseUnitFromDate.d.ts +3 -0
- package/dist/plain/parse/parseUnitFromDate.js +5 -1
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +3 -0
- package/dist/plain/parse/parseUnitFromDateTime.js +5 -1
- 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/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
- package/dist/precision/convert/fromNanoseconds.js +9 -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/transport/calculate/crossingTime.d.ts +6 -1
- package/dist/transport/calculate/crossingTime.js +6 -1
- package/dist/transport/calculate/cutoffAt.d.ts +6 -1
- package/dist/transport/calculate/cutoffAt.js +2 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +6 -1
- package/dist/transport/calculate/cutoffSchedule.js +2 -0
- package/dist/transport/calculate/dwellTime.d.ts +6 -1
- package/dist/transport/calculate/dwellTime.js +6 -1
- package/dist/transport/calculate/scheduleDelivery.d.ts +13 -5
- package/dist/transport/calculate/scheduleDelivery.js +6 -1
- package/dist/transport/convert/etaAtZone.d.ts +6 -1
- package/dist/transport/convert/etaAtZone.js +6 -1
- package/dist/types/business-calendar.d.ts +5 -4
- package/dist/types/duty.d.ts +777 -0
- package/dist/types/duty.js +0 -0
- package/dist/types/edi.d.ts +407 -0
- package/dist/types/edi.js +0 -0
- package/dist/types/epcis.d.ts +25 -0
- package/dist/types/epcis.js +0 -0
- package/dist/types/exact-duration-unit.d.ts +8 -0
- package/dist/types/exact-duration-unit.js +0 -0
- package/dist/types/free-time-options.d.ts +4 -3
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types/operating-schedule.d.ts +3 -2
- 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 +11 -2
- package/dist/unix/calculate/addUnix.js +14 -11
- package/dist/unix/calculate/diffUnix.d.ts +10 -2
- package/dist/unix/calculate/diffUnix.js +11 -6
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +10 -2
- package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/endOfUnix.d.ts +11 -2
- package/dist/unix/calculate/endOfUnix.js +7 -0
- package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
- package/dist/unix/calculate/isBetweenUnix.js +3 -3
- package/dist/unix/calculate/roundUnix.d.ts +10 -2
- package/dist/unix/calculate/roundUnix.js +13 -6
- package/dist/unix/calculate/setUnix.d.ts +25 -5
- package/dist/unix/calculate/setUnix.js +33 -12
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/startOfUnix.d.ts +11 -2
- package/dist/unix/calculate/startOfUnix.js +7 -0
- package/dist/unix/calculate/subtractUnix.d.ts +10 -2
- package/dist/unix/calculate/subtractUnix.js +13 -11
- package/dist/unix/compare/areUnixEqualBy.d.ts +11 -2
- package/dist/unix/compare/areUnixEqualBy.js +7 -0
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainTime.js +5 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +5 -1
- package/dist/unix/convert/convertUnixToZoned.js +5 -1
- package/dist/unix/format/formatCalendarUnix.d.ts +6 -2
- package/dist/unix/format/formatCalendarUnix.js +6 -1
- package/dist/unix/format/formatRelativeUnix.d.ts +11 -3
- package/dist/unix/format/formatRelativeUnix.js +13 -5
- package/dist/unix/format/formatUnix.d.ts +7 -2
- package/dist/unix/format/formatUnix.js +4 -0
- 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/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 +11 -2
- package/dist/unix/interval/intervalCountUnix.js +7 -0
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
- package/dist/unix/interval/intervalFromDurationUnix.js +12 -7
- package/dist/unix/interval/intervalLengthUnix.d.ts +10 -2
- package/dist/unix/interval/intervalLengthUnix.js +6 -0
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +10 -2
- package/dist/unix/interval/splitIntervalByUnitUnix.js +12 -6
- package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDateFromUnix.js +3 -3
- package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
- package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
- package/dist/unix/parse/parseTimeFromUnix.js +4 -3
- package/dist/unix/parse/parseUnitFromUnix.d.ts +9 -3
- package/dist/unix/parse/parseUnitFromUnix.js +21 -14
- package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
- package/dist/unix/parse/parseWeekFromUnix.js +4 -4
- package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
- package/dist/unix/parse/parseYearFromUnix.js +4 -1
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.js +4 -7
- package/dist/utc/calculate/setUtc.d.ts +16 -3
- package/dist/utc/calculate/setUtc.js +22 -8
- package/dist/utc/calculate/subtractUtc.js +4 -7
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -2
- package/dist/utc/convert/convertUtcToPlainDate.js +10 -7
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +9 -2
- package/dist/utc/convert/convertUtcToPlainDateTime.js +12 -13
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +5 -2
- package/dist/utc/convert/convertUtcToPlainTime.js +7 -6
- package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
- package/dist/utc/convert/convertUtcToZoned.js +5 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +6 -2
- package/dist/utc/format/formatCalendarUtc.js +6 -1
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +7 -7
- package/dist/utc/format/formatRelativeUtc.d.ts +11 -3
- package/dist/utc/format/formatRelativeUtc.js +13 -5
- package/dist/utc/format/formatUtc.d.ts +7 -2
- package/dist/utc/format/formatUtc.js +4 -0
- 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/intervalXorAllUtc.js +2 -2
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDateFromUtc.js +2 -2
- package/dist/utc/parse/parseDayFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDayFromUtc.js +2 -2
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -4
- package/dist/utc/parse/parseHourFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseHourFromUtc.js +2 -2
- 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 +4 -2
- package/dist/utc/parse/parseMicrosecondFromUtc.js +2 -2
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMillisecondFromUtc.js +2 -2
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
- package/dist/utc/parse/parseMonthFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMonthFromUtc.js +2 -2
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseNanosecondFromUtc.js +2 -2
- package/dist/utc/parse/parseSecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseSecondFromUtc.js +2 -2
- package/dist/utc/parse/parseTimeFromUtc.d.ts +5 -2
- package/dist/utc/parse/parseTimeFromUtc.js +5 -4
- package/dist/utc/parse/parseUnitFromUtc.d.ts +10 -3
- package/dist/utc/parse/parseUnitFromUtc.js +11 -5
- package/dist/utc/parse/parseWeekFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseWeekFromUtc.js +4 -4
- package/dist/utc/parse/parseYearFromUtc.d.ts +8 -4
- package/dist/utc/parse/parseYearFromUtc.js +8 -5
- 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/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/zoned/calculate/addZoned.js +4 -7
- package/dist/zoned/calculate/setZoned.d.ts +19 -5
- package/dist/zoned/calculate/setZoned.js +26 -9
- package/dist/zoned/calculate/subtractZoned.js +4 -7
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +4 -1
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +4 -1
- package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
- package/dist/zoned/convert/convertZonedToZoned.js +5 -1
- package/dist/zoned/format/formatCalendarZoned.js +2 -1
- package/dist/zoned/format/formatRelativeZoned.js +2 -1
- package/dist/zoned/format/formatTimeZoneName.d.ts +5 -1
- package/dist/zoned/format/formatTimeZoneName.js +5 -1
- package/dist/zoned/get/getDstTransitions.d.ts +5 -3
- package/dist/zoned/get/getDstTransitions.js +12 -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 +10 -2
- package/dist/zoned/get/getTimeZoneOffset.js +18 -5
- 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 +5 -1
- package/dist/zoned/get/getZonedNow.js +5 -1
- 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/intervalXorAllZoned.js +2 -2
- package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +4 -1
- package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +4 -2
- package/dist/zoned/validate/hasDaylightSaving.js +13 -7
- 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/package.json +50 -1
- package/skills/gmt-arithmetic/SKILL.md +99 -12
- package/skills/gmt-basics/SKILL.md +57 -15
- package/skills/gmt-integration/SKILL.md +24 -9
- package/skills/gmt-timezone/SKILL.md +134 -29
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -19
- package/dist/internal/utcZonedDateTime.js +0 -31
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/** What each half of a value of each kind is: a period of dates is two dates. */
|
|
2
|
+
const VALUE_KIND = {
|
|
3
|
+
date: "date",
|
|
4
|
+
time: "time",
|
|
5
|
+
dateTime: "dateTime",
|
|
6
|
+
offsetDateTime: "offsetDateTime",
|
|
7
|
+
datePeriod: "date",
|
|
8
|
+
dateTimePeriod: "dateTime",
|
|
9
|
+
dateRange: "date",
|
|
10
|
+
dateTimeRange: "dateTime",
|
|
11
|
+
};
|
|
12
|
+
/** Hour, 00–23. */
|
|
13
|
+
const HH = "([01][0-9]|2[0-3])";
|
|
14
|
+
/** Minute, 00–59. */
|
|
15
|
+
const MI = "([0-5][0-9])";
|
|
16
|
+
/** The regex source of each part: one capture group, the field's whole range of digits. */
|
|
17
|
+
const FRAGMENT = {
|
|
18
|
+
// Century and year: four digits.
|
|
19
|
+
CCYY: "(\\d{4})",
|
|
20
|
+
// Month, 01–12.
|
|
21
|
+
MM: "(0[1-9]|1[0-2])",
|
|
22
|
+
// Day of month, 01–31.
|
|
23
|
+
DD: "(0[1-9]|[12][0-9]|3[01])",
|
|
24
|
+
HH,
|
|
25
|
+
MI,
|
|
26
|
+
// Second, 00–59. `60` does not match: GMT rejects a leap second, which Temporal would read as 59.
|
|
27
|
+
SS: "([0-5][0-9])",
|
|
28
|
+
// Element 337: "D = tenths (0-9)". One digit.
|
|
29
|
+
SD: "(\\d)",
|
|
30
|
+
// Element 337: "DD = hundredths (00-99)". Two digits.
|
|
31
|
+
SDD: "(\\d{2})",
|
|
32
|
+
// 2379 codes 205 and 208: "Z is plus (+) or minus (-)", then hours and minutes.
|
|
33
|
+
ZS: "([+-])",
|
|
34
|
+
ZH: HH,
|
|
35
|
+
ZM: MI,
|
|
36
|
+
// 2379 codes 303 and 304: a signed hour `[+-]HH`, 00–23 (Rec 7 ¶12), or the literals `UTC` and
|
|
37
|
+
// `GMT`. Nothing else is read: no UN/EDIFACT text defines a zone abbreviation, and a sign or a
|
|
38
|
+
// digit outside a valid signed hour (`+24`, `000`) is a broken offset (GMT rule; see the file
|
|
39
|
+
// header).
|
|
40
|
+
ZZZ: "([+-](?:[01][0-9]|2[0-3])|UTC|GMT)",
|
|
41
|
+
};
|
|
42
|
+
/** The `ZHHMM` offset of 2379 codes 205 and 208: sign, hours, minutes. */
|
|
43
|
+
const ZHHMM = ["ZS", "ZH", "ZM"];
|
|
44
|
+
/** The parts' sources joined, anchored, flagless; a period's halves joined by `join`. */
|
|
45
|
+
function grammarOf(layout, join) {
|
|
46
|
+
const source = (parts) => parts.map((part) => FRAGMENT[part]).join("");
|
|
47
|
+
const end = layout.end === undefined ? "" : `${join}${source(layout.end)}`;
|
|
48
|
+
return new RegExp(`^${source(layout.start)}${end}$`);
|
|
49
|
+
}
|
|
50
|
+
/** A grammar table from a layout table, in the layout table's key order. */
|
|
51
|
+
function grammarsOf(layouts, join) {
|
|
52
|
+
const grammars = {};
|
|
53
|
+
for (const code of Object.keys(layouts)) {
|
|
54
|
+
grammars[code] = grammarOf(layouts[code], join);
|
|
55
|
+
}
|
|
56
|
+
return grammars;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The 11 UNTDID 2379 codes GMT reads, in directory order: a date (`102`), a date and time
|
|
60
|
+
* (`203`, `204`), a date and time with a `ZHHMM` offset (`205`, `208`), a date and time with
|
|
61
|
+
* three zone characters (`303`, `304`), a time (`401`, `402`) and a period (`718`, `719`).
|
|
62
|
+
*
|
|
63
|
+
* Every other 2379 code returns the sentinel; the file header lists the ones cut and why.
|
|
64
|
+
*/
|
|
65
|
+
export const EDIFACT_DTM_FORMATS = [
|
|
66
|
+
"102",
|
|
67
|
+
"203",
|
|
68
|
+
"204",
|
|
69
|
+
"205",
|
|
70
|
+
"208",
|
|
71
|
+
"303",
|
|
72
|
+
"304",
|
|
73
|
+
"401",
|
|
74
|
+
"402",
|
|
75
|
+
"718",
|
|
76
|
+
"719",
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* UNTDID 2379 code → its kind and its value's parts. Typed kind by kind from the public unions,
|
|
80
|
+
* so a missing code, and a code filed under a kind its union does not name, both fail typecheck.
|
|
81
|
+
*/
|
|
82
|
+
const EDIFACT_DTM_LAYOUT = {
|
|
83
|
+
// 102 CCYYMMDD — "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day."
|
|
84
|
+
"102": { kind: "date", start: ["CCYY", "MM", "DD"] },
|
|
85
|
+
// 203 CCYYMMDDHHMM — "Calendar date including time with minutes"
|
|
86
|
+
"203": { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI"] },
|
|
87
|
+
// 204 CCYYMMDDHHMMSS — "Calendar date including time with seconds"
|
|
88
|
+
"204": { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI", "SS"] },
|
|
89
|
+
// 205 CCYYMMDDHHMMZHHMM — "Calendar date including time and time zone expressed in hours and minutes."
|
|
90
|
+
"205": {
|
|
91
|
+
kind: "offsetDateTime",
|
|
92
|
+
start: ["CCYY", "MM", "DD", "HH", "MI", ...ZHHMM],
|
|
93
|
+
},
|
|
94
|
+
// 208 CCYYMMDDHHMMSSZHHMM — "Calendar date including time with seconds, with Time Zone: … Z = leading plus/minus sign, HHMM = difference to UTC in Hours and Minutes." (D.12A on)
|
|
95
|
+
"208": {
|
|
96
|
+
kind: "offsetDateTime",
|
|
97
|
+
start: ["CCYY", "MM", "DD", "HH", "MI", "SS", ...ZHHMM],
|
|
98
|
+
},
|
|
99
|
+
// 303 CCYYMMDDHHMMZZZ — "See 203 plus Z=Time zone."
|
|
100
|
+
"303": {
|
|
101
|
+
kind: "offsetDateTime",
|
|
102
|
+
start: ["CCYY", "MM", "DD", "HH", "MI", "ZZZ"],
|
|
103
|
+
},
|
|
104
|
+
// 304 CCYYMMDDHHMMSSZZZ — "See 204 plus Z=Time zone."
|
|
105
|
+
"304": {
|
|
106
|
+
kind: "offsetDateTime",
|
|
107
|
+
start: ["CCYY", "MM", "DD", "HH", "MI", "SS", "ZZZ"],
|
|
108
|
+
},
|
|
109
|
+
// 401 HHMM — "Time without seconds: H = Hour; m = Minute."
|
|
110
|
+
"401": { kind: "time", start: ["HH", "MI"] },
|
|
111
|
+
// 402 HHMMSS — "Time with seconds: H = Hour; m = Minute; s = Seconds."
|
|
112
|
+
"402": { kind: "time", start: ["HH", "MI", "SS"] },
|
|
113
|
+
// 718 CCYYMMDD-CCYYMMDD — "A period of time specified by giving the start date followed by the end date (both including century)."
|
|
114
|
+
"718": {
|
|
115
|
+
kind: "datePeriod",
|
|
116
|
+
start: ["CCYY", "MM", "DD"],
|
|
117
|
+
end: ["CCYY", "MM", "DD"],
|
|
118
|
+
},
|
|
119
|
+
// 719 CCYYMMDDHHMM-CCYYMMDDHHMM — "A period of time which includes the century, year, month, day, hour and minute."
|
|
120
|
+
"719": {
|
|
121
|
+
kind: "dateTimePeriod",
|
|
122
|
+
start: ["CCYY", "MM", "DD", "HH", "MI"],
|
|
123
|
+
end: ["CCYY", "MM", "DD", "HH", "MI"],
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* UNTDID 2379 code → the anchored, flagless grammar of its value. A period's halves are run
|
|
128
|
+
* together with nothing between them: every directory read gives a period "without hyphen" (the
|
|
129
|
+
* file header quotes each entry).
|
|
130
|
+
*/
|
|
131
|
+
export const EDIFACT_DTM_GRAMMAR = grammarsOf(EDIFACT_DTM_LAYOUT, "");
|
|
132
|
+
/**
|
|
133
|
+
* The 10 X12 1250 codes GMT reads: a date (`D8`, `DB`), a date and time (`DT`, `RTS`), a time
|
|
134
|
+
* (`TM`, `TS`), a range of dates (`RD8`, `RD`) and a range of date-times (`RDT`, `DTS`).
|
|
135
|
+
*
|
|
136
|
+
* The other 32 of the 42 codes return the sentinel; the file header lists the ones cut and why.
|
|
137
|
+
* `TS` is also a code of data element 623, with an unrelated meaning there.
|
|
138
|
+
*/
|
|
139
|
+
export const X12_DATE_TIME_PERIOD_FORMATS = ["D8", "DB", "DT", "RTS", "TM", "TS", "RD8", "RD", "RDT", "DTS"];
|
|
140
|
+
/**
|
|
141
|
+
* X12 1250 code → its kind and its value's parts. Typed kind by kind from the public unions, so
|
|
142
|
+
* a missing code, and a code filed under a kind its union does not name, both fail typecheck.
|
|
143
|
+
*/
|
|
144
|
+
const X12_DATE_TIME_PERIOD_LAYOUT = {
|
|
145
|
+
// D8 CCYYMMDD — "Date Expressed in Format CCYYMMDD"
|
|
146
|
+
D8: { kind: "date", start: ["CCYY", "MM", "DD"] },
|
|
147
|
+
// DB MMDDCCYY — "Date Expressed in Format MMDDCCYY"
|
|
148
|
+
DB: { kind: "date", start: ["MM", "DD", "CCYY"] },
|
|
149
|
+
// DT CCYYMMDDHHMM — "Date and Time Expressed in Format CCYYMMDDHHMM"
|
|
150
|
+
DT: { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI"] },
|
|
151
|
+
// RTS CCYYMMDDHHMMSS — "Date and Time Expressed in Format CCYYMMDDHHMMSS" (one date-time despite the R)
|
|
152
|
+
RTS: { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI", "SS"] },
|
|
153
|
+
// TM HHMM — "Time Expressed in Format HHMM"
|
|
154
|
+
TM: { kind: "time", start: ["HH", "MI"] },
|
|
155
|
+
// TS HHMMSS — "Time Expressed in Format HHMMSS"
|
|
156
|
+
TS: { kind: "time", start: ["HH", "MI", "SS"] },
|
|
157
|
+
// RD8 CCYYMMDD-CCYYMMDD — "Range of Dates Expressed in Format CCYYMMDD-CCYYMMDD"
|
|
158
|
+
RD8: {
|
|
159
|
+
kind: "dateRange",
|
|
160
|
+
start: ["CCYY", "MM", "DD"],
|
|
161
|
+
end: ["CCYY", "MM", "DD"],
|
|
162
|
+
},
|
|
163
|
+
// RD MMDDCCYY-MMDDCCYY — "Range of Dates Expressed in Format MMDDCCYY-MMDDCCYY"
|
|
164
|
+
RD: {
|
|
165
|
+
kind: "dateRange",
|
|
166
|
+
start: ["MM", "DD", "CCYY"],
|
|
167
|
+
end: ["MM", "DD", "CCYY"],
|
|
168
|
+
},
|
|
169
|
+
// RDT CCYYMMDDHHMM-CCYYMMDDHHMM — "Range of Date and Time, Expressed in Format CCYYMMDDHHMM-CCYYMMDDHHMM"
|
|
170
|
+
RDT: {
|
|
171
|
+
kind: "dateTimeRange",
|
|
172
|
+
start: ["CCYY", "MM", "DD", "HH", "MI"],
|
|
173
|
+
end: ["CCYY", "MM", "DD", "HH", "MI"],
|
|
174
|
+
},
|
|
175
|
+
// DTS CCYYMMDDHHMMSS-CCYYMMDDHHMMSS — "Range of Date and Time Expressed in Format CCYYMMDDHHMMSS-CCYYMMDDHHMMSS" (a range despite having no R)
|
|
176
|
+
DTS: {
|
|
177
|
+
kind: "dateTimeRange",
|
|
178
|
+
start: ["CCYY", "MM", "DD", "HH", "MI", "SS"],
|
|
179
|
+
end: ["CCYY", "MM", "DD", "HH", "MI", "SS"],
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* X12 1250 code → the anchored, flagless grammar of its value. A range's halves are joined by
|
|
184
|
+
* exactly one hyphen, the one X12 transmits.
|
|
185
|
+
*/
|
|
186
|
+
export const X12_DATE_TIME_PERIOD_GRAMMAR = grammarsOf(X12_DATE_TIME_PERIOD_LAYOUT, "-");
|
|
187
|
+
/**
|
|
188
|
+
* X12 data element 337 (Time), the time element of `AT7`, `G62` and `DTM-03`: "Time expressed in
|
|
189
|
+
* 24-hour clock time as follows: HHMM, or HHMMSS, or HHMMSSD, or HHMMSSDD, where H = hours
|
|
190
|
+
* (00-23), M = minutes (00-59), S = integer seconds (00-59) and DD = decimal seconds; decimal
|
|
191
|
+
* seconds are expressed as follows: D = tenths (0-9) and DD = hundredths (00-99)", length 4 to 8
|
|
192
|
+
* (release 005010, https://www.stedi.com/edi/x12-005010/element/337).
|
|
193
|
+
*
|
|
194
|
+
* Mask → its parts, keyed by the element's own four masks in the order the definition gives
|
|
195
|
+
* them. Not a 1250 table: the element has no format qualifier, its four- and six-digit forms
|
|
196
|
+
* coincide with `TM` and `TS`, and no 1250 code holds decimal seconds. Typed from the public
|
|
197
|
+
* union, so a missing form fails typecheck.
|
|
198
|
+
*/
|
|
199
|
+
export const X12_TIME_ELEMENT_LAYOUT = {
|
|
200
|
+
// HHMM — "H = hours (00-23), M = minutes (00-59)"
|
|
201
|
+
HHMM: { kind: "time", start: ["HH", "MI"] },
|
|
202
|
+
// HHMMSS — "S = integer seconds (00-59)"
|
|
203
|
+
HHMMSS: { kind: "time", start: ["HH", "MI", "SS"] },
|
|
204
|
+
// HHMMSSD — "D = tenths (0-9)"
|
|
205
|
+
HHMMSSD: { kind: "time", start: ["HH", "MI", "SS", "SD"] },
|
|
206
|
+
// HHMMSSDD — "DD = hundredths (00-99)"
|
|
207
|
+
HHMMSSDD: { kind: "time", start: ["HH", "MI", "SS", "SDD"] },
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* The four forms of X12 data element 337, shortest first: the layout table's own keys, so the
|
|
211
|
+
* list cannot name a form the table lacks.
|
|
212
|
+
*/
|
|
213
|
+
export const X12_TIME_ELEMENT_FORMS = Object.keys(X12_TIME_ELEMENT_LAYOUT);
|
|
214
|
+
/**
|
|
215
|
+
* Element 337 form → the anchored, flagless grammar of its value. The four masks have four
|
|
216
|
+
* lengths (4, 6, 7 and 8 digits), so a value fits one form or none, and the reader needs no
|
|
217
|
+
* qualifier to tell them apart.
|
|
218
|
+
*/
|
|
219
|
+
export const X12_TIME_ELEMENT_GRAMMAR = grammarsOf(X12_TIME_ELEMENT_LAYOUT, "");
|
|
220
|
+
/**
|
|
221
|
+
* The milliseconds one unit of each decimal-seconds part is worth: a tenth of a second is 100
|
|
222
|
+
* and a hundredth is 10. The reader multiplies by it and the writer divides by it, so the two
|
|
223
|
+
* agree on what `D` and `DD` mean.
|
|
224
|
+
*/
|
|
225
|
+
export const MILLISECONDS_PER_DECIMAL_SECOND = { SD: 100, SDD: 10 };
|
|
226
|
+
/**
|
|
227
|
+
* Look a form of X12 data element 337 up by its mask, for the writer
|
|
228
|
+
* (`writeX12TimeElement`), whose caller names the form. The reader (`readX12Time`) is given no
|
|
229
|
+
* form: it tries the grammar of each form in the same table.
|
|
230
|
+
*
|
|
231
|
+
* - Matching is exact and by own key, so `"__proto__"`, `" HHMM"` and `"hhmm"` are not forms.
|
|
232
|
+
* - Null for a data element 1250 code (`TM`, `TS`): a qualifier is not a mask.
|
|
233
|
+
* - Null for a non-string argument.
|
|
234
|
+
*
|
|
235
|
+
* @param form the element's mask: `HHMM`, `HHMMSS`, `HHMMSSD` or `HHMMSSDD`
|
|
236
|
+
* @returns the form's parts in mask order, as a single time, or null
|
|
237
|
+
*
|
|
238
|
+
* @example x12TimeElementLayoutOf("HHMMSSDD") // { kind: "time", start: ["HH", "MI", "SS", "SDD"] }
|
|
239
|
+
* @example x12TimeElementLayoutOf("TS") // null (a 1250 code, not a mask)
|
|
240
|
+
* @example x12TimeElementLayoutOf("__proto__") // null
|
|
241
|
+
*/
|
|
242
|
+
export function x12TimeElementLayoutOf(form) {
|
|
243
|
+
return typeof form === "string" &&
|
|
244
|
+
Object.hasOwn(X12_TIME_ELEMENT_LAYOUT, form)
|
|
245
|
+
? X12_TIME_ELEMENT_LAYOUT[form]
|
|
246
|
+
: null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* The 56 X12 623 codes, release 008010, in dictionary order: `01`–`12` (UTC+1 … UTC+12), `13`–`24`
|
|
250
|
+
* (UTC−12 … UTC−1, descending), `25`–`29` (the half-hour offsets, added in release 006010), then
|
|
251
|
+
* the 27 letter codes. Release 005010 has the 51 codes other than `25`–`29`. Membership is by
|
|
252
|
+
* this list, never by shape. `TS`, `TT`, `CD` and `MD` are also codes of data element 1250, with
|
|
253
|
+
* unrelated meanings there.
|
|
254
|
+
*/
|
|
255
|
+
export const X12_TIME_CODES = [
|
|
256
|
+
// fallow-ignore-next-line code-duplication -- the 56 DE 623 codes as a runtime list; `X12TimeCode` in types/edi.ts is the same enumeration in type position
|
|
257
|
+
"01",
|
|
258
|
+
"02",
|
|
259
|
+
"03",
|
|
260
|
+
"04",
|
|
261
|
+
"05",
|
|
262
|
+
"06",
|
|
263
|
+
"07",
|
|
264
|
+
"08",
|
|
265
|
+
"09",
|
|
266
|
+
"10",
|
|
267
|
+
"11",
|
|
268
|
+
"12",
|
|
269
|
+
"13",
|
|
270
|
+
"14",
|
|
271
|
+
"15",
|
|
272
|
+
"16",
|
|
273
|
+
"17",
|
|
274
|
+
"18",
|
|
275
|
+
"19",
|
|
276
|
+
"20",
|
|
277
|
+
"21",
|
|
278
|
+
"22",
|
|
279
|
+
"23",
|
|
280
|
+
"24",
|
|
281
|
+
"25",
|
|
282
|
+
"26",
|
|
283
|
+
"27",
|
|
284
|
+
"28",
|
|
285
|
+
"29",
|
|
286
|
+
"AD",
|
|
287
|
+
"AS",
|
|
288
|
+
"AT",
|
|
289
|
+
"CD",
|
|
290
|
+
"CS",
|
|
291
|
+
"CT",
|
|
292
|
+
"ED",
|
|
293
|
+
"ES",
|
|
294
|
+
"ET",
|
|
295
|
+
"GM",
|
|
296
|
+
"HD",
|
|
297
|
+
"HS",
|
|
298
|
+
"HT",
|
|
299
|
+
"LT",
|
|
300
|
+
"MD",
|
|
301
|
+
"MS",
|
|
302
|
+
"MT",
|
|
303
|
+
"ND",
|
|
304
|
+
"NS",
|
|
305
|
+
"NT",
|
|
306
|
+
"PD",
|
|
307
|
+
"PS",
|
|
308
|
+
"PT",
|
|
309
|
+
"TD",
|
|
310
|
+
"TS",
|
|
311
|
+
"TT",
|
|
312
|
+
"UT",
|
|
313
|
+
];
|
|
314
|
+
const EDI_CODE_TABLES = {
|
|
315
|
+
edifact: {
|
|
316
|
+
layouts: EDIFACT_DTM_LAYOUT,
|
|
317
|
+
grammars: EDIFACT_DTM_GRAMMAR,
|
|
318
|
+
// UNTDID 2379, every directory read (twelve, from D.93A to D.22B): a period is given
|
|
319
|
+
// "without hyphen".
|
|
320
|
+
rangeSeparator: "",
|
|
321
|
+
},
|
|
322
|
+
x12: {
|
|
323
|
+
layouts: X12_DATE_TIME_PERIOD_LAYOUT,
|
|
324
|
+
grammars: X12_DATE_TIME_PERIOD_GRAMMAR,
|
|
325
|
+
// X12 1250: each range definition gives the format with its hyphen.
|
|
326
|
+
rangeSeparator: "-",
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* Look a format code up in its standard's tables: the one lookup the classifier, the reader and
|
|
331
|
+
* the writer share.
|
|
332
|
+
*
|
|
333
|
+
* - Matching is exact and by own key, so `"__proto__"`, `" 102"` and `"d8"` are not codes.
|
|
334
|
+
* - Null for a code that is not read (`101`, `209`, `D6`, `UN`), like an unknown code.
|
|
335
|
+
* - Null for a standard that is not `"edifact"` or `"x12"`, and for a non-string argument.
|
|
336
|
+
*
|
|
337
|
+
* @param standard which element the code belongs to
|
|
338
|
+
* @param code the 2379 or 1250 format code
|
|
339
|
+
* @returns the code's kind, layout, grammar and range separator, or null
|
|
340
|
+
*
|
|
341
|
+
* @example ediCodeOf("edifact", "718") // { kind: "datePeriod", valueKind: "date", layout: { kind: "datePeriod", start: ["CCYY", "MM", "DD"], end: [...] }, grammar: /^…$/, rangeSeparator: "" }
|
|
342
|
+
* @example ediCodeOf("x12", "RD8") // { kind: "dateRange", valueKind: "date", layout: {...}, grammar: /^…$/, rangeSeparator: "-" }
|
|
343
|
+
* @example ediCodeOf("edifact", "101") // null (a two-digit year: not read)
|
|
344
|
+
* @example ediCodeOf("edifact", "D8") // null (an X12 code)
|
|
345
|
+
*/
|
|
346
|
+
export function ediCodeOf(standard, code) {
|
|
347
|
+
if (typeof standard !== "string" || typeof code !== "string") {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
if (!Object.hasOwn(EDI_CODE_TABLES, standard)) {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
const table = EDI_CODE_TABLES[standard];
|
|
354
|
+
if (!Object.hasOwn(table.layouts, code)) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
const layout = table.layouts[code];
|
|
358
|
+
const grammar = table.grammars[code];
|
|
359
|
+
return {
|
|
360
|
+
kind: layout.kind,
|
|
361
|
+
valueKind: VALUE_KIND[layout.kind],
|
|
362
|
+
layout,
|
|
363
|
+
grammar,
|
|
364
|
+
rangeSeparator: table.rangeSeparator,
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Look a format code up as a code of one kind: null unless the code is in its standard's tables
|
|
369
|
+
* under exactly that kind. Each public function names its own kind here, so a code of another
|
|
370
|
+
* kind (`203` given to a date function) is refused before any value is read.
|
|
371
|
+
*
|
|
372
|
+
* @param standard which element the code belongs to
|
|
373
|
+
* @param kind the kind of value the calling function reads or writes
|
|
374
|
+
* @param code the 2379 or 1250 format code
|
|
375
|
+
* @returns the code's entry, or null when the code is not one of that kind
|
|
376
|
+
*
|
|
377
|
+
* @example ediCodeOfKind("edifact", "date", "102") // { kind: "date", … }
|
|
378
|
+
* @example ediCodeOfKind("edifact", "date", "203") // null (a date-time code)
|
|
379
|
+
* @example ediCodeOfKind("x12", "dateRange", "RD8") // { kind: "dateRange", … }
|
|
380
|
+
*/
|
|
381
|
+
export function ediCodeOfKind(standard, kind, code) {
|
|
382
|
+
const entry = ediCodeOf(standard, code);
|
|
383
|
+
return entry !== null && entry.kind === kind ? entry : null;
|
|
384
|
+
}
|
|
@@ -5,7 +5,9 @@ export declare const ENGLISH_MONTH_NAMES: readonly ["Jan", "Feb", "Mar", "Apr",
|
|
|
5
5
|
* The `Mon, 15 Jul 2024 12:00:00` stem RFC 5322 date-time and RFC 9110 IMF-fixdate share: English
|
|
6
6
|
* day and month names, zero-padded fields, read from the date-time's own wall clock.
|
|
7
7
|
*
|
|
8
|
-
* @param zdt the date-time; the caller has already rejected a year
|
|
8
|
+
* @param zdt the date-time; the caller has already rejected a year its grammar cannot hold: a
|
|
9
|
+
* negative one for RFC 5322 (`year = 4*DIGIT`, so five digits are written in full), and any
|
|
10
|
+
* outside 0000–9999 for RFC 9110 (`year = 4DIGIT`)
|
|
9
11
|
* @returns the stem, without a zone or `GMT` suffix
|
|
10
12
|
* @example englishDateTimeStem(Temporal.ZonedDateTime.from("2024-07-15T12:00:05+00:00[UTC]")) // "Mon, 15 Jul 2024 12:00:05"
|
|
11
13
|
* @example englishDateTimeStem(Temporal.ZonedDateTime.from("0099-01-03T04:05:06+00:00[UTC]")) // "Sat, 03 Jan 0099 04:05:06"
|
|
@@ -32,7 +32,9 @@ export const ENGLISH_MONTH_NAMES = [
|
|
|
32
32
|
* The `Mon, 15 Jul 2024 12:00:00` stem RFC 5322 date-time and RFC 9110 IMF-fixdate share: English
|
|
33
33
|
* day and month names, zero-padded fields, read from the date-time's own wall clock.
|
|
34
34
|
*
|
|
35
|
-
* @param zdt the date-time; the caller has already rejected a year
|
|
35
|
+
* @param zdt the date-time; the caller has already rejected a year its grammar cannot hold: a
|
|
36
|
+
* negative one for RFC 5322 (`year = 4*DIGIT`, so five digits are written in full), and any
|
|
37
|
+
* outside 0000–9999 for RFC 9110 (`year = 4DIGIT`)
|
|
36
38
|
* @returns the stem, without a zone or `GMT` suffix
|
|
37
39
|
* @example englishDateTimeStem(Temporal.ZonedDateTime.from("2024-07-15T12:00:05+00:00[UTC]")) // "Mon, 15 Jul 2024 12:00:05"
|
|
38
40
|
* @example englishDateTimeStem(Temporal.ZonedDateTime.from("0099-01-03T04:05:06+00:00[UTC]")) // "Sat, 03 Jan 0099 04:05:06"
|
|
@@ -13,6 +13,11 @@ export declare const MAX_WALKED_DAYS = 10000;
|
|
|
13
13
|
* are counted against, `null` when every local day after expiry is charged.
|
|
14
14
|
*/
|
|
15
15
|
export type FreeTimeTerms = {
|
|
16
|
+
/**
|
|
17
|
+
* The counting zone as the caller wrote it: a time zone identifier or a stored UTC offset
|
|
18
|
+
* (`±HH:MM[:SS]`), so always readable by `zoneFrame`. The walk's zoned values are placed with
|
|
19
|
+
* `frameZoned` and turned back with `frameInstant`.
|
|
20
|
+
*/
|
|
16
21
|
timeZone: string;
|
|
17
22
|
firstDay: "eventDay" | "nextDay";
|
|
18
23
|
calendar: ResolvedBusinessCalendar | null;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { isValidTimeZone } from "../zoned/validate/isValidTimeZone.js";
|
|
3
2
|
import { isBusinessDate, parseBusinessCalendar, } from "./businessCalendar.js";
|
|
4
3
|
import { isObject } from "./isObject.js";
|
|
5
4
|
import { nextZonedBucketStart, zonedUnitStart } from "./zonedBucket.js";
|
|
5
|
+
import { zoneFrame } from "./zoneFrame.js";
|
|
6
|
+
import { certainlyTouchesMoreBuckets } from "./zoneBucketCap.js";
|
|
6
7
|
/**
|
|
7
8
|
* Local days a free-time walk may visit before giving up: the same cap as `bucketRange`. A
|
|
8
9
|
* valid business calendar leaves at least one working day a week, so a working-day count needs
|
|
@@ -34,7 +35,7 @@ function readFreeTimeTerms(options, readChargeBasis = false) {
|
|
|
34
35
|
if (firstDay !== "eventDay" && firstDay !== "nextDay") {
|
|
35
36
|
return null;
|
|
36
37
|
}
|
|
37
|
-
if (typeof timeZone !== "string" ||
|
|
38
|
+
if (typeof timeZone !== "string" || zoneFrame(timeZone) === null) {
|
|
38
39
|
return null;
|
|
39
40
|
}
|
|
40
41
|
const needsCalendar = basis === "working" || (readChargeBasis && chargeBasis === "working");
|
|
@@ -209,6 +210,14 @@ export function walkFreeTime(clockStart, freeDays, terms, clockEnd) {
|
|
|
209
210
|
let expiresAt = null;
|
|
210
211
|
let expiryPending = false;
|
|
211
212
|
let skipEventDay = terms.firstDay === "nextDay";
|
|
213
|
+
// A dwell that certainly touches more local days than the walk may visit ends it with the
|
|
214
|
+
// sentinel anyway: the walk needs one visit for every day the dwell touches, and one more to
|
|
215
|
+
// pass it. Deciding that from the span skips a 10,000-day walk. When it is not certain, the walk
|
|
216
|
+
// runs as before, so no answer changes.
|
|
217
|
+
if (clockEnd !== undefined &&
|
|
218
|
+
certainlyTouchesMoreBuckets(clockStart, clockEnd, "day", MAX_WALKED_DAYS)) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
212
221
|
let day = localDayOf(clockStart);
|
|
213
222
|
if (day === null) {
|
|
214
223
|
return null;
|
package/dist/internal/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { isValidEpochNanoseconds, MAX_EPOCH_NANOSECOND_DIGITS, } from "./epochNa
|
|
|
15
15
|
export { dateCycleFieldBounds } from "./dateCycleFieldBounds.js";
|
|
16
16
|
export { timeCycleFieldBounds } from "./timeCycleFieldBounds.js";
|
|
17
17
|
export { durationUntilString } from "./durationUntilString.js";
|
|
18
|
+
export { EDIFACT_DTM_FORMATS, X12_DATE_TIME_PERIOD_FORMATS, X12_TIME_CODES, } from "./ediGrammar.js";
|
|
18
19
|
export { exactDurationNanoseconds, nonNegativeExactDurationNanoseconds, } from "./exactDuration.js";
|
|
19
20
|
export { type ExactMoment, readExactMoment, writeExactMoment, } from "./exactMoment.js";
|
|
20
21
|
export { formatDateInCalendar } from "./formatDateInCalendar.js";
|
|
@@ -45,9 +46,10 @@ export { plainDateAdd } from "./plainDateAdd.js";
|
|
|
45
46
|
export { parsePunctualityTolerance, punctualityOf } from "./punctuality.js";
|
|
46
47
|
export { plainDateUntil } from "./plainDateUntil.js";
|
|
47
48
|
export { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
|
|
49
|
+
export { readDurationUnits } from "./readDurationUnits.js";
|
|
50
|
+
export { DATE_FIELDS, DATE_TIME_FIELDS, readSetFields, TIME_FIELDS, } from "./readSetFields.js";
|
|
48
51
|
export { resolveDurationUnit } from "./resolveDurationUnit.js";
|
|
49
52
|
export { resolveOverflow } from "./resolveOverflow.js";
|
|
50
|
-
export { resolveRelativeRounding } from "./resolveRelativeRounding.js";
|
|
51
53
|
export { parseUnixEpochInterval, parseUnixEpochIntervalList, parseUnixEpochIntervalPair, parseUnixEpochValue, } from "./unixEpochValue.js";
|
|
52
54
|
export { tileByUnit } from "./splitStep.js";
|
|
53
55
|
export { parseTimestampEvents } from "./timestampEvents.js";
|
|
@@ -56,5 +58,6 @@ export { countZonedLocalDates } from "./zonedLocalDates.js";
|
|
|
56
58
|
export { zonedDateTimeFrom } from "./zonedWallClock.js";
|
|
57
59
|
export { wallClockAtOffset } from "./wallClockAtOffset.js";
|
|
58
60
|
export { durationCompare, durationRound, durationTotal, isCalendarDifferenceAcrossZones, plainUntilWithRounding, zonedUntil, } from "./zonedWallClockDifference.js";
|
|
59
|
-
export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition,
|
|
61
|
+
export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
|
|
60
62
|
export { zonelessCalendarDate } from "./zonelessCalendarDate.js";
|
|
63
|
+
export { frameInstant, frameOffset, frameWallClock, frameZoned, instantOfWallClock, normalizeZoneFrame, zoneFrame, } from "./zoneFrame.js";
|
package/dist/internal/index.js
CHANGED
|
@@ -15,6 +15,11 @@ export { isValidEpochNanoseconds, MAX_EPOCH_NANOSECOND_DIGITS, } from "./epochNa
|
|
|
15
15
|
export { dateCycleFieldBounds } from "./dateCycleFieldBounds.js";
|
|
16
16
|
export { timeCycleFieldBounds } from "./timeCycleFieldBounds.js";
|
|
17
17
|
export { durationUntilString } from "./durationUntilString.js";
|
|
18
|
+
// The EDI readers (./ediDateTimeFields) and writers (./ediDateTimeWriter) are deliberately not
|
|
19
|
+
// re-exported here: they import `instant/convert/toOffsetInstant`, which reads this barrel at
|
|
20
|
+
// module top level, so a barrel entry would close a cycle. Import each from its own file
|
|
21
|
+
// ("../../internal/ediDateTimeFields", "../../internal/ediDateTimeWriter").
|
|
22
|
+
export { EDIFACT_DTM_FORMATS, X12_DATE_TIME_PERIOD_FORMATS, X12_TIME_CODES, } from "./ediGrammar.js";
|
|
18
23
|
export { exactDurationNanoseconds, nonNegativeExactDurationNanoseconds, } from "./exactDuration.js";
|
|
19
24
|
export { readExactMoment, writeExactMoment, } from "./exactMoment.js";
|
|
20
25
|
export { formatDateInCalendar } from "./formatDateInCalendar.js";
|
|
@@ -45,9 +50,10 @@ export { plainDateAdd } from "./plainDateAdd.js";
|
|
|
45
50
|
export { parsePunctualityTolerance, punctualityOf } from "./punctuality.js";
|
|
46
51
|
export { plainDateUntil } from "./plainDateUntil.js";
|
|
47
52
|
export { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
|
|
53
|
+
export { readDurationUnits } from "./readDurationUnits.js";
|
|
54
|
+
export { DATE_FIELDS, DATE_TIME_FIELDS, readSetFields, TIME_FIELDS, } from "./readSetFields.js";
|
|
48
55
|
export { resolveDurationUnit } from "./resolveDurationUnit.js";
|
|
49
56
|
export { resolveOverflow } from "./resolveOverflow.js";
|
|
50
|
-
export { resolveRelativeRounding } from "./resolveRelativeRounding.js";
|
|
51
57
|
export { parseUnixEpochInterval, parseUnixEpochIntervalList, parseUnixEpochIntervalPair, parseUnixEpochValue, } from "./unixEpochValue.js";
|
|
52
58
|
export { tileByUnit } from "./splitStep.js";
|
|
53
59
|
export { parseTimestampEvents } from "./timestampEvents.js";
|
|
@@ -56,5 +62,6 @@ export { countZonedLocalDates } from "./zonedLocalDates.js";
|
|
|
56
62
|
export { zonedDateTimeFrom } from "./zonedWallClock.js";
|
|
57
63
|
export { wallClockAtOffset } from "./wallClockAtOffset.js";
|
|
58
64
|
export { durationCompare, durationRound, durationTotal, isCalendarDifferenceAcrossZones, plainUntilWithRounding, zonedUntil, } from "./zonedWallClockDifference.js";
|
|
59
|
-
export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition,
|
|
65
|
+
export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
|
|
60
66
|
export { zonelessCalendarDate } from "./zonelessCalendarDate.js";
|
|
67
|
+
export { frameInstant, frameOffset, frameWallClock, frameZoned, instantOfWallClock, normalizeZoneFrame, zoneFrame, } from "./zoneFrame.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseInstantNanoseconds } from "./instantNanoseconds.js";
|
|
2
|
+
import { isObject } from "./isObject.js";
|
|
2
3
|
/**
|
|
3
4
|
* Parse a candidate `Interval` to epoch nanoseconds, or `null` when it is not one.
|
|
4
5
|
*
|
|
@@ -13,7 +14,7 @@ import { parseInstantNanoseconds } from "./instantNanoseconds.js";
|
|
|
13
14
|
* @example parseIntervalNanoseconds({ start: "1970-01-01T00:00:01Z", end: "1970-01-01T00:00:00Z" }) // null — inverted
|
|
14
15
|
*/
|
|
15
16
|
export function parseIntervalNanoseconds(value) {
|
|
16
|
-
if (
|
|
17
|
+
if (!isObject(value)) {
|
|
17
18
|
return null;
|
|
18
19
|
}
|
|
19
20
|
const { start: startText, end: endText } = value;
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type guard for a non-null object
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Type guard for an ECMAScript Object (ECMA-262 §6.1.7): a non-null object, arrays included, or a
|
|
3
|
+
* function. It is the shape an options bag, a property bag or a props object must have before it
|
|
4
|
+
* is destructured. A default parameter covers only `undefined`, so a `null` or primitive argument
|
|
5
|
+
* reaches the destructure and throws `TypeError` without this check.
|
|
6
|
+
*
|
|
7
|
+
* A function is an Object, so it is accepted wherever Temporal and ECMA-402 accept one:
|
|
8
|
+
* GetOptionsObject returns any Object, and the polyfill reads
|
|
9
|
+
* `Object.assign(() => 0, { largestUnit: "hours" })` as `{ largestUnit: "hours" }`. Checking
|
|
10
|
+
* `typeof value === "object"` alone wrongly refused it.
|
|
5
11
|
*
|
|
6
12
|
* @param value candidate
|
|
7
13
|
* @example isObject({ smallestUnit: "day" }) // true
|
|
14
|
+
* @example isObject(Object.assign(() => 0, { smallestUnit: "day" })) // true
|
|
8
15
|
* @example isObject(null) // false
|
|
9
16
|
* @example isObject("day") // false
|
|
10
|
-
* @returns whether `value` is
|
|
17
|
+
* @returns whether `value` is an Object
|
|
11
18
|
*/
|
|
12
19
|
export declare function isObject(value: unknown): value is object;
|
|
13
20
|
/**
|
|
14
21
|
* Whether an `options` argument is acceptable under Temporal GetOptionsObject: omitted
|
|
15
|
-
* (`undefined`, the defaults) or an
|
|
22
|
+
* (`undefined`, the defaults) or an Object, a function included. `null`, a string, a number or a boolean is a TypeError
|
|
16
23
|
* there, so a function that takes an options bag returns its sentinel for it rather than silently
|
|
17
24
|
* reading the defaults (e.g. a legacy positional unit string such as `"seconds"`).
|
|
18
25
|
*
|
|
@@ -21,6 +28,6 @@ export declare function isObject(value: unknown): value is object;
|
|
|
21
28
|
* @example isOptionsArgument({ overflow: "reject" }) // true
|
|
22
29
|
* @example isOptionsArgument(null) // false
|
|
23
30
|
* @example isOptionsArgument("seconds") // false
|
|
24
|
-
* @returns whether `options` is `undefined` or
|
|
31
|
+
* @returns whether `options` is `undefined` or an Object
|
|
25
32
|
*/
|
|
26
33
|
export declare function isOptionsArgument(options: unknown): boolean;
|
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type guard for a non-null object
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Type guard for an ECMAScript Object (ECMA-262 §6.1.7): a non-null object, arrays included, or a
|
|
3
|
+
* function. It is the shape an options bag, a property bag or a props object must have before it
|
|
4
|
+
* is destructured. A default parameter covers only `undefined`, so a `null` or primitive argument
|
|
5
|
+
* reaches the destructure and throws `TypeError` without this check.
|
|
6
|
+
*
|
|
7
|
+
* A function is an Object, so it is accepted wherever Temporal and ECMA-402 accept one:
|
|
8
|
+
* GetOptionsObject returns any Object, and the polyfill reads
|
|
9
|
+
* `Object.assign(() => 0, { largestUnit: "hours" })` as `{ largestUnit: "hours" }`. Checking
|
|
10
|
+
* `typeof value === "object"` alone wrongly refused it.
|
|
5
11
|
*
|
|
6
12
|
* @param value candidate
|
|
7
13
|
* @example isObject({ smallestUnit: "day" }) // true
|
|
14
|
+
* @example isObject(Object.assign(() => 0, { smallestUnit: "day" })) // true
|
|
8
15
|
* @example isObject(null) // false
|
|
9
16
|
* @example isObject("day") // false
|
|
10
|
-
* @returns whether `value` is
|
|
17
|
+
* @returns whether `value` is an Object
|
|
11
18
|
*/
|
|
12
19
|
export function isObject(value) {
|
|
13
|
-
return typeof value === "object" && value !== null;
|
|
20
|
+
return ((typeof value === "object" && value !== null) || typeof value === "function");
|
|
14
21
|
}
|
|
15
22
|
/**
|
|
16
23
|
* Whether an `options` argument is acceptable under Temporal GetOptionsObject: omitted
|
|
17
|
-
* (`undefined`, the defaults) or an
|
|
24
|
+
* (`undefined`, the defaults) or an Object, a function included. `null`, a string, a number or a boolean is a TypeError
|
|
18
25
|
* there, so a function that takes an options bag returns its sentinel for it rather than silently
|
|
19
26
|
* reading the defaults (e.g. a legacy positional unit string such as `"seconds"`).
|
|
20
27
|
*
|
|
@@ -23,7 +30,7 @@ export function isObject(value) {
|
|
|
23
30
|
* @example isOptionsArgument({ overflow: "reject" }) // true
|
|
24
31
|
* @example isOptionsArgument(null) // false
|
|
25
32
|
* @example isOptionsArgument("seconds") // false
|
|
26
|
-
* @returns whether `options` is `undefined` or
|
|
33
|
+
* @returns whether `options` is `undefined` or an Object
|
|
27
34
|
*/
|
|
28
35
|
export function isOptionsArgument(options) {
|
|
29
36
|
return options === undefined || isObject(options);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write an ISO year as Temporal writes it at the head of a date string (TC39 Temporal
|
|
3
|
+
* `PadISOYear ( y )`, §3.5.10): four digits from 0000 to 9999, otherwise a sign and six digits.
|
|
4
|
+
*
|
|
5
|
+
* A year written any other way does not read back. `"10000-01-01"` and `"00-5-01-01"` are not ISO
|
|
6
|
+
* 8601 or Temporal strings, and `isValidDate` rejects both; `"+010000-01-01"` and
|
|
7
|
+
* `"-000005-01-01"` are what `Temporal.PlainDate#toString` writes.
|
|
8
|
+
*
|
|
9
|
+
* - Every function that returns a year on its own writes it this way.
|
|
10
|
+
* - Where a Temporal value is at hand, let its own `toString` write the whole date. This is for a
|
|
11
|
+
* year on its own, or a date assembled from fields with no Temporal value behind them.
|
|
12
|
+
*
|
|
13
|
+
* @param year an ISO year, an integer
|
|
14
|
+
* @returns the year as `YYYY` or `±YYYYYY`
|
|
15
|
+
*
|
|
16
|
+
* @example isoYearString(2024) // "2024"
|
|
17
|
+
* @example isoYearString(5) // "0005"
|
|
18
|
+
* @example isoYearString(10000) // "+010000"
|
|
19
|
+
* @example isoYearString(-5) // "-000005"
|
|
20
|
+
*/
|
|
21
|
+
export declare function isoYearString(year: number): string;
|