@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,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X12 data element 623 code → the zone its definition names, release 008010, read from Stedi's
|
|
3
|
+
* X12-licensed dictionary (https://www.stedi.com/edi/x12-008010/element/623); the X12 text was
|
|
4
|
+
* not reached. Each comment quotes the definition. Typed by `X12ZoneTimeCode`, so a missing code
|
|
5
|
+
* fails typecheck.
|
|
6
|
+
*/
|
|
7
|
+
const X12_TIME_CODE_ZONE = {
|
|
8
|
+
// "Alaska Daylight Time", "Alaska Standard Time", "Alaska Time"
|
|
9
|
+
AD: { zone: "Alaska", daylight: true },
|
|
10
|
+
AS: { zone: "Alaska", daylight: false },
|
|
11
|
+
AT: { zone: "Alaska", daylight: null },
|
|
12
|
+
// "Central Daylight Time", "Central Standard Time", "Central Time"
|
|
13
|
+
CD: { zone: "Central", daylight: true },
|
|
14
|
+
CS: { zone: "Central", daylight: false },
|
|
15
|
+
CT: { zone: "Central", daylight: null },
|
|
16
|
+
// "Eastern Daylight Time", "Eastern Standard Time", "Eastern Time"
|
|
17
|
+
ED: { zone: "Eastern", daylight: true },
|
|
18
|
+
ES: { zone: "Eastern", daylight: false },
|
|
19
|
+
ET: { zone: "Eastern", daylight: null },
|
|
20
|
+
// "Hawaii-Aleutian Daylight Time", "Hawaii-Aleutian Standard Time", "Hawaii-Aleutian Time"
|
|
21
|
+
HD: { zone: "Hawaii-Aleutian", daylight: true },
|
|
22
|
+
HS: { zone: "Hawaii-Aleutian", daylight: false },
|
|
23
|
+
HT: { zone: "Hawaii-Aleutian", daylight: null },
|
|
24
|
+
// "Local Time"
|
|
25
|
+
LT: { zone: "Local", daylight: null },
|
|
26
|
+
// "Mountain Daylight Time", "Mountain Standard Time", "Mountain Time"
|
|
27
|
+
MD: { zone: "Mountain", daylight: true },
|
|
28
|
+
MS: { zone: "Mountain", daylight: false },
|
|
29
|
+
MT: { zone: "Mountain", daylight: null },
|
|
30
|
+
// "Newfoundland Daylight Time", "Newfoundland Standard Time", "Newfoundland Time"
|
|
31
|
+
ND: { zone: "Newfoundland", daylight: true },
|
|
32
|
+
NS: { zone: "Newfoundland", daylight: false },
|
|
33
|
+
NT: { zone: "Newfoundland", daylight: null },
|
|
34
|
+
// "Pacific Daylight Time", "Pacific Standard Time", "Pacific Time"
|
|
35
|
+
PD: { zone: "Pacific", daylight: true },
|
|
36
|
+
PS: { zone: "Pacific", daylight: false },
|
|
37
|
+
PT: { zone: "Pacific", daylight: null },
|
|
38
|
+
// "Atlantic Daylight Time", "Atlantic Standard Time", "Atlantic Time"
|
|
39
|
+
TD: { zone: "Atlantic", daylight: true },
|
|
40
|
+
TS: { zone: "Atlantic", daylight: false },
|
|
41
|
+
TT: { zone: "Atlantic", daylight: null },
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Read the zone an X12 time code (data element 623) names.
|
|
45
|
+
*
|
|
46
|
+
* Data element 623 is the code beside the date (element 373) and time (element 337) of an X12
|
|
47
|
+
* `AT7`, `G62` or `DTM` segment. 25 of its 56 codes name a zone and state no offset; this
|
|
48
|
+
* function reads those. Codes are release 008010, read from
|
|
49
|
+
* [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
|
|
50
|
+
* text itself was not reached.
|
|
51
|
+
*
|
|
52
|
+
* ### Time codes that name a zone
|
|
53
|
+
* | Codes | The dictionary's definition | `zone` |
|
|
54
|
+
* |---|---|---|
|
|
55
|
+
* | `AD`, `AS`, `AT` | "Alaska Daylight Time", "Alaska Standard Time", "Alaska Time" | `Alaska` |
|
|
56
|
+
* | `CD`, `CS`, `CT` | "Central Daylight Time", "Central Standard Time", "Central Time" | `Central` |
|
|
57
|
+
* | `ED`, `ES`, `ET` | "Eastern Daylight Time", "Eastern Standard Time", "Eastern Time" | `Eastern` |
|
|
58
|
+
* | `HD`, `HS`, `HT` | "Hawaii-Aleutian Daylight Time", "Hawaii-Aleutian Standard Time", "Hawaii-Aleutian Time" | `Hawaii-Aleutian` |
|
|
59
|
+
* | `MD`, `MS`, `MT` | "Mountain Daylight Time", "Mountain Standard Time", "Mountain Time" | `Mountain` |
|
|
60
|
+
* | `ND`, `NS`, `NT` | "Newfoundland Daylight Time", "Newfoundland Standard Time", "Newfoundland Time" | `Newfoundland` |
|
|
61
|
+
* | `PD`, `PS`, `PT` | "Pacific Daylight Time", "Pacific Standard Time", "Pacific Time" | `Pacific` |
|
|
62
|
+
* | `TD`, `TS`, `TT` | "Atlantic Daylight Time", "Atlantic Standard Time", "Atlantic Time" | `Atlantic` |
|
|
63
|
+
* | `LT` | "Local Time" | `Local` |
|
|
64
|
+
*
|
|
65
|
+
* - **The result is a zone name, not an offset.** X12 states no offset for these codes and GMT
|
|
66
|
+
* holds no registry of places, so the caller maps the name to an IANA zone. A caller might
|
|
67
|
+
* choose `America/New_York` for `Eastern`; the choice is the caller's. Resolve the local
|
|
68
|
+
* date-time in that zone with `resolveLocal`.
|
|
69
|
+
* - **`daylight` is `true` for a `D` code, `false` for an `S` code and `null` for a `T` code**,
|
|
70
|
+
* which says neither: the date decides. Both members are always present.
|
|
71
|
+
* - **`LT` is local to the event** and returns `{ zone: "Local", daylight: null }`. The place is
|
|
72
|
+
* elsewhere in the message, so the caller supplies its zone.
|
|
73
|
+
* - **An offset code returns `null`**: `01`–`29`, `UT` and `GM` state an offset and name no
|
|
74
|
+
* zone. Read one with `x12TimeCodeOffset`.
|
|
75
|
+
* - **`TS`, `TT`, `CD` and `MD` are codes of data element 1250 too**, with unrelated meanings:
|
|
76
|
+
* here they are Atlantic Standard, Atlantic, Central Daylight and Mountain Daylight Time;
|
|
77
|
+
* there `TS` is the format `HHMMSS`. Pass a time code here and a format qualifier to the
|
|
78
|
+
* `parseX12…` functions.
|
|
79
|
+
* - **For a code that arrives as a string**, call `classifyX12TimeCode` first: its `"zone"`
|
|
80
|
+
* result carries the code narrowed to this function's parameter.
|
|
81
|
+
* - Matching is exact: two characters, upper case, no padding. Each call returns a new object.
|
|
82
|
+
* Returns `null` for a code that is not one of the 56 and for a non-string.
|
|
83
|
+
*
|
|
84
|
+
* @param timeCode X12 data element 623 time code (e.g. "ES")
|
|
85
|
+
* @returns `{ zone, daylight }`, or null on invalid input
|
|
86
|
+
*
|
|
87
|
+
* @example x12TimeCodeZone("ES") // { zone: "Eastern", daylight: false }
|
|
88
|
+
* @example x12TimeCodeZone("ED") // { zone: "Eastern", daylight: true }
|
|
89
|
+
* @example x12TimeCodeZone("ET") // { zone: "Eastern", daylight: null } (the date decides)
|
|
90
|
+
* @example x12TimeCodeZone("PD") // { zone: "Pacific", daylight: true }
|
|
91
|
+
* @example x12TimeCodeZone("TS") // { zone: "Atlantic", daylight: false }
|
|
92
|
+
* @example x12TimeCodeZone("LT") // { zone: "Local", daylight: null } (the place is elsewhere in the message)
|
|
93
|
+
* @example x12TimeCodeZone("UT") // null (an offset code: use x12TimeCodeOffset)
|
|
94
|
+
* @example x12TimeCodeZone("20") // null (an offset code)
|
|
95
|
+
* @example x12TimeCodeZone("EST") // null (not a 623 code)
|
|
96
|
+
* @example x12TimeCodeZone("et") // null (matching is exact)
|
|
97
|
+
*/
|
|
98
|
+
export function x12TimeCodeZone(timeCode) {
|
|
99
|
+
if (typeof timeCode !== "string" ||
|
|
100
|
+
!Object.hasOwn(X12_TIME_CODE_ZONE, timeCode)) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
// A copy, so a caller cannot change the table through a result.
|
|
104
|
+
return { ...X12_TIME_CODE_ZONE[timeCode] };
|
|
105
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from "./isValidEdifactDate.js";
|
|
2
|
+
export * from "./isValidEdifactDatePeriod.js";
|
|
3
|
+
export * from "./isValidEdifactDateTime.js";
|
|
4
|
+
export * from "./isValidEdifactDateTimePeriod.js";
|
|
5
|
+
export * from "./isValidEdifactDtmFormat.js";
|
|
6
|
+
export * from "./isValidEdifactOffsetDateTime.js";
|
|
7
|
+
export * from "./isValidEdifactTime.js";
|
|
8
|
+
export * from "./isValidEpcisEvent.js";
|
|
9
|
+
export * from "./isValidEpcisEventTime.js";
|
|
10
|
+
export * from "./isValidEpcisTimeZoneOffset.js";
|
|
11
|
+
export * from "./isValidX12Date.js";
|
|
12
|
+
export * from "./isValidX12DateAndTime.js";
|
|
13
|
+
export * from "./isValidX12DateRange.js";
|
|
14
|
+
export * from "./isValidX12DateTime.js";
|
|
15
|
+
export * from "./isValidX12DateTimePeriodFormat.js";
|
|
16
|
+
export * from "./isValidX12DateTimeRange.js";
|
|
17
|
+
export * from "./isValidX12Time.js";
|
|
18
|
+
export * from "./isValidX12TimeCode.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from "./isValidEdifactDate.js";
|
|
2
|
+
export * from "./isValidEdifactDatePeriod.js";
|
|
3
|
+
export * from "./isValidEdifactDateTime.js";
|
|
4
|
+
export * from "./isValidEdifactDateTimePeriod.js";
|
|
5
|
+
export * from "./isValidEdifactDtmFormat.js";
|
|
6
|
+
export * from "./isValidEdifactOffsetDateTime.js";
|
|
7
|
+
export * from "./isValidEdifactTime.js";
|
|
8
|
+
export * from "./isValidEpcisEvent.js";
|
|
9
|
+
export * from "./isValidEpcisEventTime.js";
|
|
10
|
+
export * from "./isValidEpcisTimeZoneOffset.js";
|
|
11
|
+
export * from "./isValidX12Date.js";
|
|
12
|
+
export * from "./isValidX12DateAndTime.js";
|
|
13
|
+
export * from "./isValidX12DateRange.js";
|
|
14
|
+
export * from "./isValidX12DateTime.js";
|
|
15
|
+
export * from "./isValidX12DateTimePeriodFormat.js";
|
|
16
|
+
export * from "./isValidX12DateTimeRange.js";
|
|
17
|
+
export * from "./isValidX12Time.js";
|
|
18
|
+
export * from "./isValidX12TimeCode.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { EdifactDateFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* calendar date in a date format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `102` | `CCYYMMDD` | "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDate` returns a date for the same arguments: the validator
|
|
12
|
+
* calls the parser, so the two cannot disagree.
|
|
13
|
+
* - Checks the calendar as well as the shape: 31 June and 29 February 2023 are false.
|
|
14
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
15
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
16
|
+
*
|
|
17
|
+
* @param value The data element 2380 value (e.g. "20240615")
|
|
18
|
+
* @param format The data element 2379 format code
|
|
19
|
+
* @returns boolean indicating validity
|
|
20
|
+
*
|
|
21
|
+
* @example isValidEdifactDate("20240615", "102") // true
|
|
22
|
+
* @example isValidEdifactDate("20230229", "102") // false (2023 has no 29 February)
|
|
23
|
+
* @example isValidEdifactDate("240615", "102") // false (a two-digit year is not read)
|
|
24
|
+
* @example isValidEdifactDate("202406151430", "203") // false (a date-time code)
|
|
25
|
+
*/
|
|
26
|
+
export declare function isValidEdifactDate(value: string, format: EdifactDateFormat): boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { parseEdifactDate } from "../parse/parseEdifactDate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* calendar date in a date format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `102` | `CCYYMMDD` | "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDate` returns a date for the same arguments: the validator
|
|
12
|
+
* calls the parser, so the two cannot disagree.
|
|
13
|
+
* - Checks the calendar as well as the shape: 31 June and 29 February 2023 are false.
|
|
14
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
15
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
16
|
+
*
|
|
17
|
+
* @param value The data element 2380 value (e.g. "20240615")
|
|
18
|
+
* @param format The data element 2379 format code
|
|
19
|
+
* @returns boolean indicating validity
|
|
20
|
+
*
|
|
21
|
+
* @example isValidEdifactDate("20240615", "102") // true
|
|
22
|
+
* @example isValidEdifactDate("20230229", "102") // false (2023 has no 29 February)
|
|
23
|
+
* @example isValidEdifactDate("240615", "102") // false (a two-digit year is not read)
|
|
24
|
+
* @example isValidEdifactDate("202406151430", "203") // false (a date-time code)
|
|
25
|
+
*/
|
|
26
|
+
export function isValidEdifactDate(value, format) {
|
|
27
|
+
return parseEdifactDate(value, format) !== "";
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EdifactDatePeriodFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
|
|
4
|
+
* between two real calendar dates, in a date period format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `718` | `CCYYMMDD-CCYYMMDD` | "A period of time specified by giving the start date followed by the end date (both including century). Data is to be transmitted as consecutive characters without hyphen." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDatePeriod` returns a period for the same arguments: the
|
|
12
|
+
* validator calls the parser, so the two cannot disagree.
|
|
13
|
+
* - A period is valid in its wire form only, with no hyphen: `"20240615-20240620"` is false.
|
|
14
|
+
* - A period whose end precedes its start is false; an end equal to its start is true.
|
|
15
|
+
* - Checks the calendar as well as the shape: 29 February 2023 in either date is false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "2024061520240620")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactDatePeriod("2024061520240620", "718") // true
|
|
24
|
+
* @example isValidEdifactDatePeriod("20240615-20240620", "718") // false (a period is transmitted without a hyphen)
|
|
25
|
+
* @example isValidEdifactDatePeriod("2024062020240615", "718") // false (the end precedes the start)
|
|
26
|
+
* @example isValidEdifactDatePeriod("20240615", "718") // false (one date)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isValidEdifactDatePeriod(value: string, format: EdifactDatePeriodFormat): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { parseEdifactDatePeriod } from "../parse/parseEdifactDatePeriod.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
|
|
4
|
+
* between two real calendar dates, in a date period format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `718` | `CCYYMMDD-CCYYMMDD` | "A period of time specified by giving the start date followed by the end date (both including century). Data is to be transmitted as consecutive characters without hyphen." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDatePeriod` returns a period for the same arguments: the
|
|
12
|
+
* validator calls the parser, so the two cannot disagree.
|
|
13
|
+
* - A period is valid in its wire form only, with no hyphen: `"20240615-20240620"` is false.
|
|
14
|
+
* - A period whose end precedes its start is false; an end equal to its start is true.
|
|
15
|
+
* - Checks the calendar as well as the shape: 29 February 2023 in either date is false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "2024061520240620")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactDatePeriod("2024061520240620", "718") // true
|
|
24
|
+
* @example isValidEdifactDatePeriod("20240615-20240620", "718") // false (a period is transmitted without a hyphen)
|
|
25
|
+
* @example isValidEdifactDatePeriod("2024062020240615", "718") // false (the end precedes the start)
|
|
26
|
+
* @example isValidEdifactDatePeriod("20240615", "718") // false (one date)
|
|
27
|
+
*/
|
|
28
|
+
export function isValidEdifactDatePeriod(value, format) {
|
|
29
|
+
return parseEdifactDatePeriod(value, format) !== null;
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { EdifactDateTimeFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* date and time in a format code with no offset (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `203` | `CCYYMMDDHHMM` | "Calendar date including time with minutes" |
|
|
10
|
+
* | `204` | `CCYYMMDDHHMMSS` | "Calendar date including time with seconds" |
|
|
11
|
+
*
|
|
12
|
+
* - True exactly when `parseEdifactDateTime` returns a date-time for the same arguments: the
|
|
13
|
+
* validator calls the parser, so the two cannot disagree.
|
|
14
|
+
* - A value is valid only against its code: `"202406151430"` is a `203` value and not a `204`
|
|
15
|
+
* one.
|
|
16
|
+
* - Checks the calendar as well as the shape: 31 June, 29 February 2023, hour 24 and second 60
|
|
17
|
+
* are false.
|
|
18
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
19
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
20
|
+
*
|
|
21
|
+
* @param value The data element 2380 value (e.g. "202406151430")
|
|
22
|
+
* @param format The data element 2379 format code
|
|
23
|
+
* @returns boolean indicating validity
|
|
24
|
+
*
|
|
25
|
+
* @example isValidEdifactDateTime("202406151430", "203") // true
|
|
26
|
+
* @example isValidEdifactDateTime("20240615143045", "204") // true
|
|
27
|
+
* @example isValidEdifactDateTime("202406151430", "204") // false (twelve digits is a 203 value)
|
|
28
|
+
* @example isValidEdifactDateTime("202302291430", "203") // false (2023 has no 29 February)
|
|
29
|
+
*/
|
|
30
|
+
export declare function isValidEdifactDateTime(value: string, format: EdifactDateTimeFormat): boolean;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { parseEdifactDateTime } from "../parse/parseEdifactDateTime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* date and time in a format code with no offset (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `203` | `CCYYMMDDHHMM` | "Calendar date including time with minutes" |
|
|
10
|
+
* | `204` | `CCYYMMDDHHMMSS` | "Calendar date including time with seconds" |
|
|
11
|
+
*
|
|
12
|
+
* - True exactly when `parseEdifactDateTime` returns a date-time for the same arguments: the
|
|
13
|
+
* validator calls the parser, so the two cannot disagree.
|
|
14
|
+
* - A value is valid only against its code: `"202406151430"` is a `203` value and not a `204`
|
|
15
|
+
* one.
|
|
16
|
+
* - Checks the calendar as well as the shape: 31 June, 29 February 2023, hour 24 and second 60
|
|
17
|
+
* are false.
|
|
18
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
19
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
20
|
+
*
|
|
21
|
+
* @param value The data element 2380 value (e.g. "202406151430")
|
|
22
|
+
* @param format The data element 2379 format code
|
|
23
|
+
* @returns boolean indicating validity
|
|
24
|
+
*
|
|
25
|
+
* @example isValidEdifactDateTime("202406151430", "203") // true
|
|
26
|
+
* @example isValidEdifactDateTime("20240615143045", "204") // true
|
|
27
|
+
* @example isValidEdifactDateTime("202406151430", "204") // false (twelve digits is a 203 value)
|
|
28
|
+
* @example isValidEdifactDateTime("202302291430", "203") // false (2023 has no 29 February)
|
|
29
|
+
*/
|
|
30
|
+
export function isValidEdifactDateTime(value, format) {
|
|
31
|
+
return parseEdifactDateTime(value, format) !== "";
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EdifactDateTimePeriodFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
|
|
4
|
+
* between two real local date-times, in a date-time period format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `719` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "A period of time which includes the century, year, month, day, hour and minute. Format of period to be given in actual message without hyphen." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDateTimePeriod` returns a period for the same arguments: the
|
|
12
|
+
* validator calls the parser, so the two cannot disagree.
|
|
13
|
+
* - A period is valid in its wire form only, with no hyphen.
|
|
14
|
+
* - A period whose end precedes its start is false; an end equal to its start is true.
|
|
15
|
+
* - Checks the calendar as well as the shape: hour 24 and 29 February 2023 are false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "202406151430202406201600")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactDateTimePeriod("202406151430202406201600", "719") // true
|
|
24
|
+
* @example isValidEdifactDateTimePeriod("202406151430-202406201600", "719") // false (a period is transmitted without a hyphen)
|
|
25
|
+
* @example isValidEdifactDateTimePeriod("202406151431202406151430", "719") // false (the end precedes the start)
|
|
26
|
+
* @example isValidEdifactDateTimePeriod("202406151430", "719") // false (one date-time)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isValidEdifactDateTimePeriod(value: string, format: EdifactDateTimePeriodFormat): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { parseEdifactDateTimePeriod } from "../parse/parseEdifactDateTimePeriod.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
|
|
4
|
+
* between two real local date-times, in a date-time period format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format code
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `719` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "A period of time which includes the century, year, month, day, hour and minute. Format of period to be given in actual message without hyphen." |
|
|
10
|
+
*
|
|
11
|
+
* - True exactly when `parseEdifactDateTimePeriod` returns a period for the same arguments: the
|
|
12
|
+
* validator calls the parser, so the two cannot disagree.
|
|
13
|
+
* - A period is valid in its wire form only, with no hyphen.
|
|
14
|
+
* - A period whose end precedes its start is false; an end equal to its start is true.
|
|
15
|
+
* - Checks the calendar as well as the shape: hour 24 and 29 February 2023 are false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "202406151430202406201600")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactDateTimePeriod("202406151430202406201600", "719") // true
|
|
24
|
+
* @example isValidEdifactDateTimePeriod("202406151430-202406201600", "719") // false (a period is transmitted without a hyphen)
|
|
25
|
+
* @example isValidEdifactDateTimePeriod("202406151431202406151430", "719") // false (the end precedes the start)
|
|
26
|
+
* @example isValidEdifactDateTimePeriod("202406151430", "719") // false (one date-time)
|
|
27
|
+
*/
|
|
28
|
+
export function isValidEdifactDateTimePeriod(value, format) {
|
|
29
|
+
return parseEdifactDateTimePeriod(value, format) !== null;
|
|
30
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EdifactDtmFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `format` is a UN/EDIFACT data element 2379 format code that the EDIFACT
|
|
4
|
+
* functions read and write.
|
|
5
|
+
*
|
|
6
|
+
* - The 11 supported codes are `102` (a date); `401`, `402` (a time); `203`, `204` (a date and
|
|
7
|
+
* time with no offset); `205`, `208`, `303`, `304` (a date and time with an offset); `718` (a
|
|
8
|
+
* period of dates) and `719` (a period of date-times). `classifyEdifactDtmFormat` names the
|
|
9
|
+
* kind of a code, and each kind has its own parser, formatter and validator.
|
|
10
|
+
* - A code with a two-digit year returns false: `101`, `201`, `202`, `206`, `207`, `301`,
|
|
11
|
+
* `302`, `713` and `717`. UN/EDIFACT does not say which century `YY` belongs to; read such a
|
|
12
|
+
* value with `parseDateWithPattern` or `parseDateTimeWithPattern`, a `yy` pattern and its
|
|
13
|
+
* `yearWindow` option.
|
|
14
|
+
* - `209` and `404` (a time with an offset and no date) and `406` (an offset alone) return
|
|
15
|
+
* false: none names a date, a time, a date-time or an instant.
|
|
16
|
+
* - Every other 2379 code returns false: the day-first and month-first dates `2`–`5`, `10`
|
|
17
|
+
* (`CCYYMMDDTHHMM`), `103`, the ordinal date `105`, `210`, `307`, `308`, the time spans
|
|
18
|
+
* `501`–`503`, `711`, the partial values, the weekday period `720` and the quantities (`801`
|
|
19
|
+
* and up).
|
|
20
|
+
* - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
|
|
21
|
+
* - Accepts any input type and returns false for non-string values.
|
|
22
|
+
* - A parser returns its sentinel for a code it does not read, the same sentinel it returns for
|
|
23
|
+
* a value that does not fit its code. Check the code here to tell an unsupported format apart
|
|
24
|
+
* from bad data.
|
|
25
|
+
*
|
|
26
|
+
* @param format candidate value of any type
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidEdifactDtmFormat("203") // true
|
|
30
|
+
* @example isValidEdifactDtmFormat("718") // true
|
|
31
|
+
* @example isValidEdifactDtmFormat("208") // true
|
|
32
|
+
* @example isValidEdifactDtmFormat("101") // false (a two-digit year: not read)
|
|
33
|
+
* @example isValidEdifactDtmFormat("602") // false (a partial value: not supported)
|
|
34
|
+
* @example isValidEdifactDtmFormat("801") // false (a quantity: not supported)
|
|
35
|
+
* @example isValidEdifactDtmFormat("0203") // false (matching is exact)
|
|
36
|
+
* @example isValidEdifactDtmFormat(203) // false (a code is a string)
|
|
37
|
+
* @example isValidEdifactDtmFormat(null) // false
|
|
38
|
+
*/
|
|
39
|
+
export declare function isValidEdifactDtmFormat(format: unknown): format is EdifactDtmFormat;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EDIFACT_DTM_FORMATS } from "../../internal/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `format` is a UN/EDIFACT data element 2379 format code that the EDIFACT
|
|
4
|
+
* functions read and write.
|
|
5
|
+
*
|
|
6
|
+
* - The 11 supported codes are `102` (a date); `401`, `402` (a time); `203`, `204` (a date and
|
|
7
|
+
* time with no offset); `205`, `208`, `303`, `304` (a date and time with an offset); `718` (a
|
|
8
|
+
* period of dates) and `719` (a period of date-times). `classifyEdifactDtmFormat` names the
|
|
9
|
+
* kind of a code, and each kind has its own parser, formatter and validator.
|
|
10
|
+
* - A code with a two-digit year returns false: `101`, `201`, `202`, `206`, `207`, `301`,
|
|
11
|
+
* `302`, `713` and `717`. UN/EDIFACT does not say which century `YY` belongs to; read such a
|
|
12
|
+
* value with `parseDateWithPattern` or `parseDateTimeWithPattern`, a `yy` pattern and its
|
|
13
|
+
* `yearWindow` option.
|
|
14
|
+
* - `209` and `404` (a time with an offset and no date) and `406` (an offset alone) return
|
|
15
|
+
* false: none names a date, a time, a date-time or an instant.
|
|
16
|
+
* - Every other 2379 code returns false: the day-first and month-first dates `2`–`5`, `10`
|
|
17
|
+
* (`CCYYMMDDTHHMM`), `103`, the ordinal date `105`, `210`, `307`, `308`, the time spans
|
|
18
|
+
* `501`–`503`, `711`, the partial values, the weekday period `720` and the quantities (`801`
|
|
19
|
+
* and up).
|
|
20
|
+
* - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
|
|
21
|
+
* - Accepts any input type and returns false for non-string values.
|
|
22
|
+
* - A parser returns its sentinel for a code it does not read, the same sentinel it returns for
|
|
23
|
+
* a value that does not fit its code. Check the code here to tell an unsupported format apart
|
|
24
|
+
* from bad data.
|
|
25
|
+
*
|
|
26
|
+
* @param format candidate value of any type
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidEdifactDtmFormat("203") // true
|
|
30
|
+
* @example isValidEdifactDtmFormat("718") // true
|
|
31
|
+
* @example isValidEdifactDtmFormat("208") // true
|
|
32
|
+
* @example isValidEdifactDtmFormat("101") // false (a two-digit year: not read)
|
|
33
|
+
* @example isValidEdifactDtmFormat("602") // false (a partial value: not supported)
|
|
34
|
+
* @example isValidEdifactDtmFormat("801") // false (a quantity: not supported)
|
|
35
|
+
* @example isValidEdifactDtmFormat("0203") // false (matching is exact)
|
|
36
|
+
* @example isValidEdifactDtmFormat(203) // false (a code is a string)
|
|
37
|
+
* @example isValidEdifactDtmFormat(null) // false
|
|
38
|
+
*/
|
|
39
|
+
export function isValidEdifactDtmFormat(format) {
|
|
40
|
+
return (typeof format === "string" &&
|
|
41
|
+
EDIFACT_DTM_FORMATS.includes(format));
|
|
42
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EdifactOffsetDateTimeFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* date and time with an offset from UTC, in a format code that carries one (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `205` | `CCYYMMDDHHMMZHHMM` | "Calendar date including time and time zone expressed in hours and minutes." |
|
|
10
|
+
* | `208` | `CCYYMMDDHHMMSSZHHMM` | "Calendar date including time with seconds, with Time Zone" (D.12A and later) |
|
|
11
|
+
* | `303` | `CCYYMMDDHHMMZZZ` | "See 203 plus Z=Time zone." |
|
|
12
|
+
* | `304` | `CCYYMMDDHHMMSSZZZ` | "See 204 plus Z=Time zone." |
|
|
13
|
+
*
|
|
14
|
+
* - True exactly when `parseEdifactOffsetDateTime` returns a value for the same arguments: the
|
|
15
|
+
* validator calls the parser, so the two cannot disagree.
|
|
16
|
+
* - The three `ZZZ` characters of `303` and `304` are valid only as an offset: a signed hour
|
|
17
|
+
* from `00` to `23`, `UTC` or `GMT`. An abbreviation such as `CET`, a broken offset (`+24`)
|
|
18
|
+
* and a lone `Z` are false.
|
|
19
|
+
* - Takes the unescaped element value: `"202406151430?+02"` is false.
|
|
20
|
+
* - Checks the calendar as well as the shape: 29 February 2023, hour 24 and second 60 are
|
|
21
|
+
* false.
|
|
22
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
23
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
24
|
+
*
|
|
25
|
+
* @param value The data element 2380 value, unescaped (e.g. "202406151430+0200")
|
|
26
|
+
* @param format The data element 2379 format code
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidEdifactOffsetDateTime("202406151430+0200", "205") // true
|
|
30
|
+
* @example isValidEdifactOffsetDateTime("20240615143045+0530", "208") // true
|
|
31
|
+
* @example isValidEdifactOffsetDateTime("202406151430UTC", "303") // true
|
|
32
|
+
* @example isValidEdifactOffsetDateTime("20240615143045-05", "304") // true
|
|
33
|
+
* @example isValidEdifactOffsetDateTime("202406151430CET", "303") // false (an abbreviation names no offset)
|
|
34
|
+
* @example isValidEdifactOffsetDateTime("202406151430", "205") // false (no offset)
|
|
35
|
+
*/
|
|
36
|
+
export declare function isValidEdifactOffsetDateTime(value: string, format: EdifactOffsetDateTimeFormat): boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parseEdifactOffsetDateTime } from "../parse/parseEdifactOffsetDateTime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* date and time with an offset from UTC, in a format code that carries one (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `205` | `CCYYMMDDHHMMZHHMM` | "Calendar date including time and time zone expressed in hours and minutes." |
|
|
10
|
+
* | `208` | `CCYYMMDDHHMMSSZHHMM` | "Calendar date including time with seconds, with Time Zone" (D.12A and later) |
|
|
11
|
+
* | `303` | `CCYYMMDDHHMMZZZ` | "See 203 plus Z=Time zone." |
|
|
12
|
+
* | `304` | `CCYYMMDDHHMMSSZZZ` | "See 204 plus Z=Time zone." |
|
|
13
|
+
*
|
|
14
|
+
* - True exactly when `parseEdifactOffsetDateTime` returns a value for the same arguments: the
|
|
15
|
+
* validator calls the parser, so the two cannot disagree.
|
|
16
|
+
* - The three `ZZZ` characters of `303` and `304` are valid only as an offset: a signed hour
|
|
17
|
+
* from `00` to `23`, `UTC` or `GMT`. An abbreviation such as `CET`, a broken offset (`+24`)
|
|
18
|
+
* and a lone `Z` are false.
|
|
19
|
+
* - Takes the unescaped element value: `"202406151430?+02"` is false.
|
|
20
|
+
* - Checks the calendar as well as the shape: 29 February 2023, hour 24 and second 60 are
|
|
21
|
+
* false.
|
|
22
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
23
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
24
|
+
*
|
|
25
|
+
* @param value The data element 2380 value, unescaped (e.g. "202406151430+0200")
|
|
26
|
+
* @param format The data element 2379 format code
|
|
27
|
+
* @returns boolean indicating validity
|
|
28
|
+
*
|
|
29
|
+
* @example isValidEdifactOffsetDateTime("202406151430+0200", "205") // true
|
|
30
|
+
* @example isValidEdifactOffsetDateTime("20240615143045+0530", "208") // true
|
|
31
|
+
* @example isValidEdifactOffsetDateTime("202406151430UTC", "303") // true
|
|
32
|
+
* @example isValidEdifactOffsetDateTime("20240615143045-05", "304") // true
|
|
33
|
+
* @example isValidEdifactOffsetDateTime("202406151430CET", "303") // false (an abbreviation names no offset)
|
|
34
|
+
* @example isValidEdifactOffsetDateTime("202406151430", "205") // false (no offset)
|
|
35
|
+
*/
|
|
36
|
+
export function isValidEdifactOffsetDateTime(value, format) {
|
|
37
|
+
return parseEdifactOffsetDateTime(value, format) !== "";
|
|
38
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EdifactTimeFormat } from "../../types/edi.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* time of day in a time format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `401` | `HHMM` | "Time without seconds: H = Hour; m = Minute." |
|
|
10
|
+
* | `402` | `HHMMSS` | "Time with seconds: H = Hour; m = Minute; s = Seconds." |
|
|
11
|
+
*
|
|
12
|
+
* - True exactly when `parseEdifactTime` returns a time for the same arguments: the validator
|
|
13
|
+
* calls the parser, so the two cannot disagree.
|
|
14
|
+
* - A value is valid only against its code: `"1430"` is a `401` value and not a `402` one.
|
|
15
|
+
* - Hour 24, minute 60 and second 60 are false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "1430")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactTime("1430", "401") // true
|
|
24
|
+
* @example isValidEdifactTime("143045", "402") // true
|
|
25
|
+
* @example isValidEdifactTime("1430", "402") // false (four digits is a 401 value)
|
|
26
|
+
* @example isValidEdifactTime("2400", "401") // false (hour 24)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isValidEdifactTime(value: string, format: EdifactTimeFormat): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { parseEdifactTime } from "../parse/parseEdifactTime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
|
|
4
|
+
* time of day in a time format code (data element 2379).
|
|
5
|
+
*
|
|
6
|
+
* ### Format codes
|
|
7
|
+
* | Code | Mask | The directory's description |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `401` | `HHMM` | "Time without seconds: H = Hour; m = Minute." |
|
|
10
|
+
* | `402` | `HHMMSS` | "Time with seconds: H = Hour; m = Minute; s = Seconds." |
|
|
11
|
+
*
|
|
12
|
+
* - True exactly when `parseEdifactTime` returns a time for the same arguments: the validator
|
|
13
|
+
* calls the parser, so the two cannot disagree.
|
|
14
|
+
* - A value is valid only against its code: `"1430"` is a `401` value and not a `402` one.
|
|
15
|
+
* - Hour 24, minute 60 and second 60 are false.
|
|
16
|
+
* - False for any other code, a code of another kind included; check a code alone with
|
|
17
|
+
* `isValidEdifactDtmFormat`. False for a non-string argument.
|
|
18
|
+
*
|
|
19
|
+
* @param value The data element 2380 value (e.g. "1430")
|
|
20
|
+
* @param format The data element 2379 format code
|
|
21
|
+
* @returns boolean indicating validity
|
|
22
|
+
*
|
|
23
|
+
* @example isValidEdifactTime("1430", "401") // true
|
|
24
|
+
* @example isValidEdifactTime("143045", "402") // true
|
|
25
|
+
* @example isValidEdifactTime("1430", "402") // false (four digits is a 401 value)
|
|
26
|
+
* @example isValidEdifactTime("2400", "401") // false (hour 24)
|
|
27
|
+
*/
|
|
28
|
+
export function isValidEdifactTime(value, format) {
|
|
29
|
+
return parseEdifactTime(value, format) !== "";
|
|
30
|
+
}
|