@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,33 @@
|
|
|
1
|
+
import { parseX12DateTimeRange } from "../parse/parseX12DateTimeRange.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is an X12 Date Time Period value (data element 1251) that states a
|
|
4
|
+
* range between two real local date-times, in a date-time range format qualifier (data element
|
|
5
|
+
* 1250).
|
|
6
|
+
*
|
|
7
|
+
* ### Format codes
|
|
8
|
+
* | Code | Mask | The dictionary's definition |
|
|
9
|
+
* |---|---|---|
|
|
10
|
+
* | `RDT` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "Range of Date and Time, Expressed in Format CCYYMMDDHHMM-CCYYMMDDHHMM" |
|
|
11
|
+
* | `DTS` | `CCYYMMDDHHMMSS-CCYYMMDDHHMMSS` | "Range of Date and Time Expressed in Format CCYYMMDDHHMMSS-CCYYMMDDHHMMSS" |
|
|
12
|
+
*
|
|
13
|
+
* - True exactly when `parseX12DateTimeRange` returns a range for the same arguments: the
|
|
14
|
+
* validator calls the parser, so the two cannot disagree.
|
|
15
|
+
* - A range is valid with exactly one hyphen, and only against its code.
|
|
16
|
+
* - A range whose end precedes its start is false; an end equal to its start is true.
|
|
17
|
+
* - Checks the calendar as well as the shape: hour 24, second 60 and 29 February 2023 are
|
|
18
|
+
* false.
|
|
19
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
20
|
+
* `isValidX12DateTimePeriodFormat`. False for a non-string argument.
|
|
21
|
+
*
|
|
22
|
+
* @param value The data element 1251 value (e.g. "202406151430-202406201600")
|
|
23
|
+
* @param format X12 data element 1250 format qualifier
|
|
24
|
+
* @returns boolean indicating validity
|
|
25
|
+
*
|
|
26
|
+
* @example isValidX12DateTimeRange("202406151430-202406201600", "RDT") // true
|
|
27
|
+
* @example isValidX12DateTimeRange("20240615143045-20240620160030", "DTS") // true
|
|
28
|
+
* @example isValidX12DateTimeRange("202406151430202406201600", "RDT") // false (a range is transmitted with its hyphen)
|
|
29
|
+
* @example isValidX12DateTimeRange("202406151431-202406151430", "RDT") // false (the end precedes the start)
|
|
30
|
+
*/
|
|
31
|
+
export function isValidX12DateTimeRange(value, format) {
|
|
32
|
+
return parseX12DateTimeRange(value, format) !== null;
|
|
33
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { X12TimeFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is an X12 time that states a real time of day: a data element 337
|
|
4
|
+
* value with no qualifier, or a time that fits the data element 1250 format qualifier it
|
|
5
|
+
* arrived with.
|
|
6
|
+
*
|
|
7
|
+
* ### Forms
|
|
8
|
+
* | `format` | Digits | Mask | The dictionary's definition |
|
|
9
|
+
* |---|---|---|---|
|
|
10
|
+
* | omitted | 4, 6, 7 or 8 | `HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD` | Element 337: "H = hours (00-23), M = minutes (00-59), S = integer seconds (00-59) … D = tenths (0-9) and DD = hundredths (00-99)" |
|
|
11
|
+
* | `TM` | 4 | `HHMM` | "Time Expressed in Format HHMM" |
|
|
12
|
+
* | `TS` | 6 | `HHMMSS` | "Time Expressed in Format HHMMSS" |
|
|
13
|
+
*
|
|
14
|
+
* - True exactly when `parseX12Time` returns a time for the same arguments: the validator calls
|
|
15
|
+
* the parser, so the two cannot disagree.
|
|
16
|
+
* - Omit `format` for the time element of a freight segment (`AT7-06`, `G62-04`, `DTM-03`),
|
|
17
|
+
* which has no qualifier. Pass it for a time that arrives with one (`DTP-02` and `DTP-03`,
|
|
18
|
+
* `DTM-05` and `DTM-06`).
|
|
19
|
+
* - A qualifier is strict: `"143045"` is false under `TM`, and a 7- or 8-digit value is false
|
|
20
|
+
* under either qualifier, although all three are true with none.
|
|
21
|
+
* - A `format` that is present and is not `TM` or `TS` is false.
|
|
22
|
+
* - Hour 24, minute 60, second 60 and a value of 5 or 9 digits are false.
|
|
23
|
+
* - False for a non-string value.
|
|
24
|
+
*
|
|
25
|
+
* @param value The time as transmitted (e.g. "1430")
|
|
26
|
+
* @param format X12 data element 1250 format qualifier the time arrived with; omit it for a data element 337 value
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidX12Time("1430") // true
|
|
30
|
+
* @example isValidX12Time("1430", "TM") // true
|
|
31
|
+
* @example isValidX12Time("143045", "TS") // true
|
|
32
|
+
* @example isValidX12Time("14300012") // true (hundredths of a second)
|
|
33
|
+
* @example isValidX12Time("14300012", "TS") // false (no 1250 code holds decimal seconds)
|
|
34
|
+
* @example isValidX12Time("143045", "TM") // false (six digits is a TS value)
|
|
35
|
+
* @example isValidX12Time("2430") // false (hour 24)
|
|
36
|
+
* @example isValidX12Time("14304") // false (five digits is not an element 337 form)
|
|
37
|
+
*/
|
|
38
|
+
export declare function isValidX12Time(value: string, format?: X12TimeFormat): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { parseX12Time } from "../parse/parseX12Time.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is an X12 time that states a real time of day: a data element 337
|
|
4
|
+
* value with no qualifier, or a time that fits the data element 1250 format qualifier it
|
|
5
|
+
* arrived with.
|
|
6
|
+
*
|
|
7
|
+
* ### Forms
|
|
8
|
+
* | `format` | Digits | Mask | The dictionary's definition |
|
|
9
|
+
* |---|---|---|---|
|
|
10
|
+
* | omitted | 4, 6, 7 or 8 | `HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD` | Element 337: "H = hours (00-23), M = minutes (00-59), S = integer seconds (00-59) … D = tenths (0-9) and DD = hundredths (00-99)" |
|
|
11
|
+
* | `TM` | 4 | `HHMM` | "Time Expressed in Format HHMM" |
|
|
12
|
+
* | `TS` | 6 | `HHMMSS` | "Time Expressed in Format HHMMSS" |
|
|
13
|
+
*
|
|
14
|
+
* - True exactly when `parseX12Time` returns a time for the same arguments: the validator calls
|
|
15
|
+
* the parser, so the two cannot disagree.
|
|
16
|
+
* - Omit `format` for the time element of a freight segment (`AT7-06`, `G62-04`, `DTM-03`),
|
|
17
|
+
* which has no qualifier. Pass it for a time that arrives with one (`DTP-02` and `DTP-03`,
|
|
18
|
+
* `DTM-05` and `DTM-06`).
|
|
19
|
+
* - A qualifier is strict: `"143045"` is false under `TM`, and a 7- or 8-digit value is false
|
|
20
|
+
* under either qualifier, although all three are true with none.
|
|
21
|
+
* - A `format` that is present and is not `TM` or `TS` is false.
|
|
22
|
+
* - Hour 24, minute 60, second 60 and a value of 5 or 9 digits are false.
|
|
23
|
+
* - False for a non-string value.
|
|
24
|
+
*
|
|
25
|
+
* @param value The time as transmitted (e.g. "1430")
|
|
26
|
+
* @param format X12 data element 1250 format qualifier the time arrived with; omit it for a data element 337 value
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidX12Time("1430") // true
|
|
30
|
+
* @example isValidX12Time("1430", "TM") // true
|
|
31
|
+
* @example isValidX12Time("143045", "TS") // true
|
|
32
|
+
* @example isValidX12Time("14300012") // true (hundredths of a second)
|
|
33
|
+
* @example isValidX12Time("14300012", "TS") // false (no 1250 code holds decimal seconds)
|
|
34
|
+
* @example isValidX12Time("143045", "TM") // false (six digits is a TS value)
|
|
35
|
+
* @example isValidX12Time("2430") // false (hour 24)
|
|
36
|
+
* @example isValidX12Time("14304") // false (five digits is not an element 337 form)
|
|
37
|
+
*/
|
|
38
|
+
export function isValidX12Time(value, format) {
|
|
39
|
+
return parseX12Time(value, format) !== "";
|
|
40
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { X12TimeCode } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `timeCode` is one of the 56 X12 data element 623 time codes, the codes
|
|
4
|
+
* `x12TimeCodeOffset` and `x12TimeCodeZone` read between them.
|
|
5
|
+
*
|
|
6
|
+
* - The codes are `01`–`29`, `GM`, `UT`, `LT` and the named zone codes (`AD`, `AS`, `AT`, `CD`,
|
|
7
|
+
* `CS`, `CT`, `ED`, `ES`, `ET`, `HD`, `HS`, `HT`, `MD`, `MS`, `MT`, `ND`, `NS`, `NT`, `PD`,
|
|
8
|
+
* `PS`, `PT`, `TD`, `TS`, `TT`), release 008010, read from
|
|
9
|
+
* [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
|
|
10
|
+
* text itself was not reached.
|
|
11
|
+
* - **The function takes no release, so it accepts the superset.**
|
|
12
|
+
* [Release 005010](https://www.stedi.com/edi/x12-005010/element/623) has 51 of the codes:
|
|
13
|
+
* `25`–`29` were added in release 006010 and are not valid in an 004010 or 005010 interchange,
|
|
14
|
+
* although this returns true for them.
|
|
15
|
+
* - `TS`, `TT`, `CD` and `MD` are codes of data element 1250 too, with unrelated meanings there.
|
|
16
|
+
* True here says the value is a time code; check a format qualifier with
|
|
17
|
+
* `isValidX12DateTimePeriodFormat`.
|
|
18
|
+
* - Membership is by the list, never by shape: `00` and `30` are two digits and are not codes.
|
|
19
|
+
* - Matching is exact: two characters, upper case, no padding.
|
|
20
|
+
* - Accepts any input type and returns false for non-string values.
|
|
21
|
+
* - True exactly when one of `x12TimeCodeOffset` and `x12TimeCodeZone` returns a value: the 31
|
|
22
|
+
* codes that state an offset and the 25 that name a zone are the 56. A valid code says the
|
|
23
|
+
* value is in the list, not that it carries an offset: `ES` is valid and names a zone.
|
|
24
|
+
* `classifyX12TimeCode` says which of the two a code is, and narrows it for that reader.
|
|
25
|
+
*
|
|
26
|
+
* @param timeCode candidate value of any type
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidX12TimeCode("ES") // true
|
|
30
|
+
* @example isValidX12TimeCode("13") // true
|
|
31
|
+
* @example isValidX12TimeCode("LT") // true
|
|
32
|
+
* @example isValidX12TimeCode("27") // true (in release 006010 and later)
|
|
33
|
+
* @example isValidX12TimeCode("et") // false (case is exact)
|
|
34
|
+
* @example isValidX12TimeCode("30") // false (not a 623 code)
|
|
35
|
+
* @example isValidX12TimeCode("EST") // false (an abbreviation, not a 623 code)
|
|
36
|
+
* @example isValidX12TimeCode(null) // false
|
|
37
|
+
*/
|
|
38
|
+
export declare function isValidX12TimeCode(timeCode: unknown): timeCode is X12TimeCode;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { X12_TIME_CODES } from "../../internal/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `timeCode` is one of the 56 X12 data element 623 time codes, the codes
|
|
4
|
+
* `x12TimeCodeOffset` and `x12TimeCodeZone` read between them.
|
|
5
|
+
*
|
|
6
|
+
* - The codes are `01`–`29`, `GM`, `UT`, `LT` and the named zone codes (`AD`, `AS`, `AT`, `CD`,
|
|
7
|
+
* `CS`, `CT`, `ED`, `ES`, `ET`, `HD`, `HS`, `HT`, `MD`, `MS`, `MT`, `ND`, `NS`, `NT`, `PD`,
|
|
8
|
+
* `PS`, `PT`, `TD`, `TS`, `TT`), release 008010, read from
|
|
9
|
+
* [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
|
|
10
|
+
* text itself was not reached.
|
|
11
|
+
* - **The function takes no release, so it accepts the superset.**
|
|
12
|
+
* [Release 005010](https://www.stedi.com/edi/x12-005010/element/623) has 51 of the codes:
|
|
13
|
+
* `25`–`29` were added in release 006010 and are not valid in an 004010 or 005010 interchange,
|
|
14
|
+
* although this returns true for them.
|
|
15
|
+
* - `TS`, `TT`, `CD` and `MD` are codes of data element 1250 too, with unrelated meanings there.
|
|
16
|
+
* True here says the value is a time code; check a format qualifier with
|
|
17
|
+
* `isValidX12DateTimePeriodFormat`.
|
|
18
|
+
* - Membership is by the list, never by shape: `00` and `30` are two digits and are not codes.
|
|
19
|
+
* - Matching is exact: two characters, upper case, no padding.
|
|
20
|
+
* - Accepts any input type and returns false for non-string values.
|
|
21
|
+
* - True exactly when one of `x12TimeCodeOffset` and `x12TimeCodeZone` returns a value: the 31
|
|
22
|
+
* codes that state an offset and the 25 that name a zone are the 56. A valid code says the
|
|
23
|
+
* value is in the list, not that it carries an offset: `ES` is valid and names a zone.
|
|
24
|
+
* `classifyX12TimeCode` says which of the two a code is, and narrows it for that reader.
|
|
25
|
+
*
|
|
26
|
+
* @param timeCode candidate value of any type
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidX12TimeCode("ES") // true
|
|
30
|
+
* @example isValidX12TimeCode("13") // true
|
|
31
|
+
* @example isValidX12TimeCode("LT") // true
|
|
32
|
+
* @example isValidX12TimeCode("27") // true (in release 006010 and later)
|
|
33
|
+
* @example isValidX12TimeCode("et") // false (case is exact)
|
|
34
|
+
* @example isValidX12TimeCode("30") // false (not a 623 code)
|
|
35
|
+
* @example isValidX12TimeCode("EST") // false (an abbreviation, not a 623 code)
|
|
36
|
+
* @example isValidX12TimeCode(null) // false
|
|
37
|
+
*/
|
|
38
|
+
export function isValidX12TimeCode(timeCode) {
|
|
39
|
+
return (typeof timeCode === "string" &&
|
|
40
|
+
X12_TIME_CODES.includes(timeCode));
|
|
41
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isValidDate } from "../plain/validate/isValidDate.js";
|
|
3
3
|
import { isValidTimeZone } from "../zoned/validate/isValidTimeZone.js";
|
|
4
|
+
import { isObject } from "./isObject.js";
|
|
5
|
+
import { isoYearString } from "./isoYearString.js";
|
|
4
6
|
const ISO_WEEKDAYS = 7;
|
|
5
7
|
/**
|
|
6
8
|
* The weekend GMT assumed before calendars existed: Saturday and Sunday, no holidays. It is
|
|
@@ -59,9 +61,7 @@ export function parseHolidays(holidays) {
|
|
|
59
61
|
* absent calendar as the default Saturday–Sunday week.
|
|
60
62
|
*/
|
|
61
63
|
export function parseBusinessCalendar(calendar) {
|
|
62
|
-
if (
|
|
63
|
-
calendar === null ||
|
|
64
|
-
Array.isArray(calendar)) {
|
|
64
|
+
if (!isObject(calendar) || Array.isArray(calendar)) {
|
|
65
65
|
return null;
|
|
66
66
|
}
|
|
67
67
|
const { weekend, holidays, timeZone } = calendar;
|
|
@@ -106,8 +106,6 @@ const EPOCH_WEEKDAY_OFFSET = 3;
|
|
|
106
106
|
const DAYS_PER_400_YEARS = 146_097;
|
|
107
107
|
/** Days from 0000-03-01, the start of a March-based year, to 1970-01-01. */
|
|
108
108
|
const DAYS_FROM_MARCH_0000_TO_EPOCH = 719_468;
|
|
109
|
-
/** TC39 `PadISOYear`: years 0–9999 print with four digits, any other with a sign and six. */
|
|
110
|
-
const MAX_FOUR_DIGIT_YEAR = 9999;
|
|
111
109
|
/**
|
|
112
110
|
* Days from 1970-01-01 to an ISO date, in the proleptic Gregorian calendar of ECMA-262 §21.4.1
|
|
113
111
|
* that Temporal's ISO calendar extends. Years run from March so the leap day ends each one.
|
|
@@ -147,10 +145,7 @@ function isoFieldsOf(epochDay) {
|
|
|
147
145
|
/** `Temporal.PlainDate#toString` for an ISO date, which is how `holidays` stores its dates. */
|
|
148
146
|
function isoDateString(epochDay) {
|
|
149
147
|
const [year, month, day] = isoFieldsOf(epochDay);
|
|
150
|
-
|
|
151
|
-
? `${year < 0 ? "-" : "+"}${String(Math.abs(year)).padStart(6, "0")}`
|
|
152
|
-
: String(year).padStart(4, "0");
|
|
153
|
-
return `${yearText}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
|
|
148
|
+
return `${isoYearString(year)}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
|
|
154
149
|
}
|
|
155
150
|
/**
|
|
156
151
|
* Days from 1970-01-01 to `date`, an ISO-calendar date. Any other calendar throws a
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import type { Disambiguation, DutyViolation, RuleOutcome } from "../types/index.js";
|
|
3
|
+
import { type DutyLogEntry, type DutyRun } from "./dutyLog.js";
|
|
4
|
+
import { type ResolvedWallClock, type UnitScale, type UnitSpan } from "./dutyPeriods.js";
|
|
5
|
+
import { type ResolvedPair, type ResolvedPeriod, type ResolvedRule, type StatusSet } from "./dutyRules.js";
|
|
6
|
+
import { type ZoneFrame } from "./zoneFrame.js";
|
|
7
|
+
/** Everything one call evaluates its rules against. */
|
|
8
|
+
export type DutyContext = {
|
|
9
|
+
entries: readonly DutyLogEntry[];
|
|
10
|
+
frame: ZoneFrame;
|
|
11
|
+
dayStartTime: Temporal.PlainTime | null;
|
|
12
|
+
/** How a day start or local window edge the zone repeats or skips is resolved. */
|
|
13
|
+
disambiguation: Disambiguation;
|
|
14
|
+
scales: Map<string, UnitScale>;
|
|
15
|
+
/** Local window edges already resolved, by local date-time: Temporal resolves each once. */
|
|
16
|
+
wallClocks: Map<string, ResolvedWallClock | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Local window instances already resolved, by window: separate stretches of local dates, each
|
|
19
|
+
* with the span it covers.
|
|
20
|
+
*/
|
|
21
|
+
windowInstances: Map<string, WindowInstances[]>;
|
|
22
|
+
/** The runs of the whole log in a set of statuses, found once per call. */
|
|
23
|
+
runs: Map<StatusSet, DutyRun[]>;
|
|
24
|
+
};
|
|
25
|
+
/** A window a call cannot place in Temporal's range. Caught by the public function. */
|
|
26
|
+
export declare class Unrepresentable extends RangeError {
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read the log, rules and options `evaluateDutyLog` and `dutyViolations` take, all-or-nothing.
|
|
30
|
+
*
|
|
31
|
+
* - `options` must be an object with a valid `timeZone`; `dayStartTime` is optional, but a rule
|
|
32
|
+
* that counts operator days needs it; `disambiguation` is `"compatible"` when absent. Each
|
|
33
|
+
* member is read once.
|
|
34
|
+
*
|
|
35
|
+
* @param log candidate duty log
|
|
36
|
+
* @param rules candidate rules
|
|
37
|
+
* @param options candidate `{ timeZone, dayStartTime?, disambiguation? }`
|
|
38
|
+
* @returns the context and resolved rules, or null on invalid input
|
|
39
|
+
*/
|
|
40
|
+
export declare function prepareDutyCall(log: unknown, rules: unknown, options: unknown): {
|
|
41
|
+
context: DutyContext;
|
|
42
|
+
rules: ResolvedRule[];
|
|
43
|
+
} | null;
|
|
44
|
+
type StatusTest = StatusSet | ((status: string) => boolean);
|
|
45
|
+
/**
|
|
46
|
+
* Read a status list a helper takes: an array of strings, `[]` allowed. Each element is read once.
|
|
47
|
+
*
|
|
48
|
+
* @param value candidate status list
|
|
49
|
+
* @returns the statuses, or null when `value` is not an array of strings
|
|
50
|
+
*/
|
|
51
|
+
export declare function readStatusList(value: unknown): StatusSet | null;
|
|
52
|
+
/**
|
|
53
|
+
* Maximal runs of touching entries whose status passes `test`, merged as `mergeIntervals` merges
|
|
54
|
+
* them (CORE-6): touching entries join, and a gap or another status ends a run.
|
|
55
|
+
*/
|
|
56
|
+
export declare function runsOf(log: readonly DutyLogEntry[], test: StatusTest): DutyRun[];
|
|
57
|
+
/** The parts of runs inside `[from, to)`, empty parts dropped. */
|
|
58
|
+
export declare function clipRuns(runs: readonly DutyRun[], from: bigint, to: bigint): DutyRun[];
|
|
59
|
+
/** Time in `statuses` inside `[from, to)`. */
|
|
60
|
+
export declare function timeIn(log: readonly DutyLogEntry[], statuses: StatusTest, from: bigint, to: bigint): bigint;
|
|
61
|
+
/**
|
|
62
|
+
* The paired rests among runs of rest: two runs in a row, each shorter than `fullRest` and at
|
|
63
|
+
* least `pair.each`, the longer at least `pair.one` and both together at least `pair.combined`.
|
|
64
|
+
*
|
|
65
|
+
* - A run of `fullRest` or more is a rest on its own: it pairs with nothing, and no pair spans it.
|
|
66
|
+
* - A run shorter than `pair.each` is neither half of a pair nor a break between two runs.
|
|
67
|
+
* - Pairs may chain: of runs a, b and c, both (a, b) and (b, c) are returned when both qualify.
|
|
68
|
+
*
|
|
69
|
+
* @param runs runs of rest, in order
|
|
70
|
+
* @param fullRest the length at which a run is a full rest
|
|
71
|
+
* @param pair the three floors
|
|
72
|
+
* @returns the qualifying pairs, in order
|
|
73
|
+
*/
|
|
74
|
+
export declare function restPairs(runs: readonly DutyRun[], fullRest: bigint, pair: ResolvedPair): {
|
|
75
|
+
first: DutyRun;
|
|
76
|
+
second: DutyRun;
|
|
77
|
+
}[];
|
|
78
|
+
/** One local window on one local date, resolved; `rejected` as `resolveWallClock` reports it. */
|
|
79
|
+
type WindowInstance = {
|
|
80
|
+
start: bigint;
|
|
81
|
+
end: bigint;
|
|
82
|
+
rejected: boolean;
|
|
83
|
+
};
|
|
84
|
+
/** The instances of one local window on the local dates `first` to `last`, covering `[from, to)`. */
|
|
85
|
+
type WindowInstances = {
|
|
86
|
+
from: bigint;
|
|
87
|
+
to: bigint;
|
|
88
|
+
first: Temporal.PlainDate;
|
|
89
|
+
last: Temporal.PlainDate;
|
|
90
|
+
instances: WindowInstance[];
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Evaluate every rule at one instant.
|
|
94
|
+
*
|
|
95
|
+
* @param context the call's context
|
|
96
|
+
* @param rules the resolved rules
|
|
97
|
+
* @param at the instant, epoch nanoseconds
|
|
98
|
+
* @returns one outcome per rule, in order
|
|
99
|
+
*/
|
|
100
|
+
export declare function evaluateDutyRules(context: DutyContext, rules: readonly ResolvedRule[], at: bigint): RuleOutcome[];
|
|
101
|
+
/**
|
|
102
|
+
* Call `visit` with the end of every period of `scale` that ends inside `(from, until]`, starting
|
|
103
|
+
* with the one `from` falls in.
|
|
104
|
+
*
|
|
105
|
+
* - Throws `Unrepresentable` when more than `MAX_PERIOD_COUNT` periods end there, or for a period
|
|
106
|
+
* Temporal cannot hold.
|
|
107
|
+
* - A span of `MAX_PERIOD_COUNT + 1` times `LONGER_THAN_ANY` or more certainly holds more ends
|
|
108
|
+
* than that, so it is refused without a lookup. A shorter span is walked, and the walk decides.
|
|
109
|
+
*/
|
|
110
|
+
export declare function walkBoundaries(scale: UnitScale, unit: Extract<ResolvedPeriod, {
|
|
111
|
+
kind: "units";
|
|
112
|
+
}>["unit"], from: bigint, until: bigint, visit: (boundary: bigint) => void): void;
|
|
113
|
+
/**
|
|
114
|
+
* Every violation of the rules whose severity is `"violation"` inside a range. A moving window's
|
|
115
|
+
* failures are one violation while no check passes between them; a count since a reset, or one
|
|
116
|
+
* fixed period, is one violation however often it is checked. Each is reported by its worst
|
|
117
|
+
* window and listed in the range it began in.
|
|
118
|
+
*
|
|
119
|
+
* @param context the call's context
|
|
120
|
+
* @param rules the resolved rules
|
|
121
|
+
* @param range the range, epoch nanoseconds
|
|
122
|
+
* @returns the violations, ordered by window start and then by rule
|
|
123
|
+
*/
|
|
124
|
+
export declare function scanDutyViolations(context: DutyContext, rules: readonly ResolvedRule[], range: UnitSpan): DutyViolation[];
|
|
125
|
+
export {};
|