@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,97 @@
|
|
|
1
|
+
import { type EdiKind, type EdiStandard } from "./ediGrammar.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read a single EDI date/time value against a format code of one kind, as one ISO 8601 string:
|
|
4
|
+
* the reader behind every public parser of a date, a time, a local date-time and a date-time
|
|
5
|
+
* with an offset.
|
|
6
|
+
*
|
|
7
|
+
* - The code must be one of `kind` in its standard's table (`ediGrammar.ts`); a code of another
|
|
8
|
+
* kind, a period or range code and a code that is not read return `""`.
|
|
9
|
+
* - The value is tested against the code's grammar, its digits are read into a field bag, and
|
|
10
|
+
* the bag goes through `Temporal.PlainDate.from` / `PlainTime.from` / `PlainDateTime.from` with
|
|
11
|
+
* `overflow: "reject"`: the grammar proves shape, Temporal proves the date is real.
|
|
12
|
+
* - A date is `YYYY-MM-DD`, a time `HH:MM:SS` and a local date-time `YYYY-MM-DDTHH:MM:SS`.
|
|
13
|
+
* Seconds are always written, `00` for a mask without them.
|
|
14
|
+
* - A date-time with an offset (`205`, `208`; `303` and `304`, whose `ZZZ` is `[+-]HH`, `UTC` or
|
|
15
|
+
* `GMT`) is the wall clock as written with its offset, `YYYY-MM-DDTHH:MM:SS±HH:MM`. The wall
|
|
16
|
+
* clock and the offset are joined as an extended ISO string, read by `toOffsetInstant` and
|
|
17
|
+
* written by `fromOffsetInstant`; no offset digit is moved by hand.
|
|
18
|
+
* - Never throws: any failure is `""`.
|
|
19
|
+
*
|
|
20
|
+
* @param standard which element the code belongs to
|
|
21
|
+
* @param kind the kind of value the calling function reads
|
|
22
|
+
* @param code the 2379 or 1250 format code
|
|
23
|
+
* @param value the element value, after the interchange has been unescaped
|
|
24
|
+
* @returns the value as one ISO 8601 string, or `""`
|
|
25
|
+
*
|
|
26
|
+
* @example readEdiValue("edifact", "date", "102", "20240615") // "2024-06-15"
|
|
27
|
+
* @example readEdiValue("edifact", "dateTime", "203", "202406151430") // "2024-06-15T14:30:00"
|
|
28
|
+
* @example readEdiValue("edifact", "offsetDateTime", "303", "202406151430+02") // "2024-06-15T14:30:00+02:00"
|
|
29
|
+
* @example readEdiValue("x12", "date", "DB", "06152024") // "2024-06-15"
|
|
30
|
+
* @example readEdiValue("edifact", "date", "203", "202406151430") // "" (a date-time code)
|
|
31
|
+
* @example readEdiValue("edifact", "date", "102", "20230229") // "" (2023 has no 29 February)
|
|
32
|
+
*/
|
|
33
|
+
export declare function readEdiValue(standard: EdiStandard, kind: EdiKind, code: string, value: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Read an EDI period or range against a format code of one kind, as its two ends: the reader
|
|
36
|
+
* behind every public parser of a period (UNTDID 2379) and a range (X12 1250).
|
|
37
|
+
*
|
|
38
|
+
* - The code must be one of `kind`; a single-value code and a code of another kind return null.
|
|
39
|
+
* - Each half is read as `readEdiValue` reads a date or a local date-time. A 2379 period is run
|
|
40
|
+
* together and a 1250 range has exactly one hyphen: the grammar holds that.
|
|
41
|
+
* - An end that precedes its start returns null (**GMT rule**: a reversed period names no span
|
|
42
|
+
* of time). An end equal to its start is a valid period.
|
|
43
|
+
* - Never throws: any failure is null.
|
|
44
|
+
*
|
|
45
|
+
* @param standard which element the code belongs to
|
|
46
|
+
* @param kind the kind of period or range the calling function reads
|
|
47
|
+
* @param code the 2379 or 1250 format code
|
|
48
|
+
* @param value the element value
|
|
49
|
+
* @returns the two ends as ISO 8601 strings, or null
|
|
50
|
+
*
|
|
51
|
+
* @example readEdiRange("edifact", "datePeriod", "718", "2024061520240620") // { start: "2024-06-15", end: "2024-06-20" }
|
|
52
|
+
* @example readEdiRange("x12", "dateTimeRange", "RDT", "202406151430-202406201600") // { start: "2024-06-15T14:30:00", end: "2024-06-20T16:00:00" }
|
|
53
|
+
* @example readEdiRange("x12", "dateRange", "RD8", "20240620-20240615") // null (the end precedes the start)
|
|
54
|
+
* @example readEdiRange("edifact", "datePeriod", "102", "20240615") // null (a single date code)
|
|
55
|
+
*/
|
|
56
|
+
export declare function readEdiRange(standard: EdiStandard, kind: EdiKind, code: string, value: string): {
|
|
57
|
+
start: string;
|
|
58
|
+
end: string;
|
|
59
|
+
} | null;
|
|
60
|
+
/**
|
|
61
|
+
* Read an X12 data element 337 (Time) value as an ISO 8601 time, `HH:MM:SS[.f[f]]`.
|
|
62
|
+
*
|
|
63
|
+
* - The value is tested against the grammar of each form in the element's layout table
|
|
64
|
+
* (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`; `ediGrammar.ts`). The four masks have four lengths,
|
|
65
|
+
* so at most one matches. Its digits are read by part name, and the fields go through
|
|
66
|
+
* `Temporal.PlainTime.from` with `overflow: "reject"`.
|
|
67
|
+
* - Decimal seconds become the fraction of the second exactly: one digit is tenths, two are
|
|
68
|
+
* hundredths. Temporal writes no trailing zero, so `14304550` is `14:30:45.5`.
|
|
69
|
+
* - `""` for a non-string, a value of any other length or shape, hour 24, and minute or second
|
|
70
|
+
* 60. Never throws.
|
|
71
|
+
*
|
|
72
|
+
* @param value the element 337 value as transmitted
|
|
73
|
+
* @returns the time, or `""`
|
|
74
|
+
*
|
|
75
|
+
* @example readX12Time("1430") // "14:30:00"
|
|
76
|
+
* @example readX12Time("143045") // "14:30:45"
|
|
77
|
+
* @example readX12Time("14300012") // "14:30:00.12"
|
|
78
|
+
* @example readX12Time("2430") // ""
|
|
79
|
+
*/
|
|
80
|
+
export declare function readX12Time(value: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Read the date (element 373, `CCYYMMDD`) and the time (element 337) of an X12 segment as one
|
|
83
|
+
* local date-time, `YYYY-MM-DDTHH:MM:SS[.f[f]]`.
|
|
84
|
+
*
|
|
85
|
+
* - The date is read by the `CCYYMMDD` mask of the 1250 code `D8` (one grammar, one reader) and
|
|
86
|
+
* the time by `readX12Time`; Temporal joins the two.
|
|
87
|
+
* - `""` when either is missing, is not a string or is not a real date or time. Never throws.
|
|
88
|
+
*
|
|
89
|
+
* @param date the element 373 value as transmitted
|
|
90
|
+
* @param time the element 337 value as transmitted
|
|
91
|
+
* @returns the local date-time, or `""`
|
|
92
|
+
*
|
|
93
|
+
* @example readX12DateAndTime("20240615", "1430") // "2024-06-15T14:30:00"
|
|
94
|
+
* @example readX12DateAndTime("20240615", "14300012") // "2024-06-15T14:30:00.12"
|
|
95
|
+
* @example readX12DateAndTime("20240615", "") // ""
|
|
96
|
+
*/
|
|
97
|
+
export declare function readX12DateAndTime(date: string, time: string): string;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// Not re-exported from `internal/index.ts`: `toOffsetInstant` reads that barrel at module top
|
|
2
|
+
// level (`TIME_ZONE_ANNOTATION`), so a barrel entry for this module would close a cycle and leave
|
|
3
|
+
// the constant undefined when `toOffsetInstant` evaluates. Import this file directly.
|
|
4
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
5
|
+
import { fromOffsetInstant } from "../instant/convert/fromOffsetInstant.js";
|
|
6
|
+
import { toOffsetInstant } from "../instant/convert/toOffsetInstant.js";
|
|
7
|
+
import { MILLISECONDS_PER_DECIMAL_SECOND, X12_TIME_ELEMENT_FORMS, X12_TIME_ELEMENT_GRAMMAR, X12_TIME_ELEMENT_LAYOUT, ediCodeOfKind, } from "./ediGrammar.js";
|
|
8
|
+
/**
|
|
9
|
+
* The bag member each digit part of a mask fills. The offset parts (`ZS`, `ZH`, `ZM`) and `ZZZ`
|
|
10
|
+
* are text, not numbers, and are read apart.
|
|
11
|
+
*/
|
|
12
|
+
const NUMBER_FIELD_OF_PART = {
|
|
13
|
+
CCYY: "year",
|
|
14
|
+
MM: "month",
|
|
15
|
+
DD: "day",
|
|
16
|
+
HH: "hour",
|
|
17
|
+
MI: "minute",
|
|
18
|
+
SS: "second",
|
|
19
|
+
SD: "tenths",
|
|
20
|
+
SDD: "hundredths",
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The two `ZZZ` literals that are +00:00. `UTC` is what the SMDG IFTSAI 2.0 and BAPLIE 3.1.1
|
|
24
|
+
* guides write in a `303` value. `GMT` is the same scale by UN/ECE Recommendation 7 ¶12:
|
|
25
|
+
* "Co-ordinated Universal Time (formerly known as Greenwich Mean Time)".
|
|
26
|
+
*/
|
|
27
|
+
const UTC_LITERALS = ["UTC", "GMT"];
|
|
28
|
+
/**
|
|
29
|
+
* Read a single EDI date/time value against a format code of one kind, as one ISO 8601 string:
|
|
30
|
+
* the reader behind every public parser of a date, a time, a local date-time and a date-time
|
|
31
|
+
* with an offset.
|
|
32
|
+
*
|
|
33
|
+
* - The code must be one of `kind` in its standard's table (`ediGrammar.ts`); a code of another
|
|
34
|
+
* kind, a period or range code and a code that is not read return `""`.
|
|
35
|
+
* - The value is tested against the code's grammar, its digits are read into a field bag, and
|
|
36
|
+
* the bag goes through `Temporal.PlainDate.from` / `PlainTime.from` / `PlainDateTime.from` with
|
|
37
|
+
* `overflow: "reject"`: the grammar proves shape, Temporal proves the date is real.
|
|
38
|
+
* - A date is `YYYY-MM-DD`, a time `HH:MM:SS` and a local date-time `YYYY-MM-DDTHH:MM:SS`.
|
|
39
|
+
* Seconds are always written, `00` for a mask without them.
|
|
40
|
+
* - A date-time with an offset (`205`, `208`; `303` and `304`, whose `ZZZ` is `[+-]HH`, `UTC` or
|
|
41
|
+
* `GMT`) is the wall clock as written with its offset, `YYYY-MM-DDTHH:MM:SS±HH:MM`. The wall
|
|
42
|
+
* clock and the offset are joined as an extended ISO string, read by `toOffsetInstant` and
|
|
43
|
+
* written by `fromOffsetInstant`; no offset digit is moved by hand.
|
|
44
|
+
* - Never throws: any failure is `""`.
|
|
45
|
+
*
|
|
46
|
+
* @param standard which element the code belongs to
|
|
47
|
+
* @param kind the kind of value the calling function reads
|
|
48
|
+
* @param code the 2379 or 1250 format code
|
|
49
|
+
* @param value the element value, after the interchange has been unescaped
|
|
50
|
+
* @returns the value as one ISO 8601 string, or `""`
|
|
51
|
+
*
|
|
52
|
+
* @example readEdiValue("edifact", "date", "102", "20240615") // "2024-06-15"
|
|
53
|
+
* @example readEdiValue("edifact", "dateTime", "203", "202406151430") // "2024-06-15T14:30:00"
|
|
54
|
+
* @example readEdiValue("edifact", "offsetDateTime", "303", "202406151430+02") // "2024-06-15T14:30:00+02:00"
|
|
55
|
+
* @example readEdiValue("x12", "date", "DB", "06152024") // "2024-06-15"
|
|
56
|
+
* @example readEdiValue("edifact", "date", "203", "202406151430") // "" (a date-time code)
|
|
57
|
+
* @example readEdiValue("edifact", "date", "102", "20230229") // "" (2023 has no 29 February)
|
|
58
|
+
*/
|
|
59
|
+
export function readEdiValue(standard, kind, code, value) {
|
|
60
|
+
try {
|
|
61
|
+
const halves = readHalves(ediCodeOfKind(standard, kind, code), value);
|
|
62
|
+
return halves === null || halves.length !== 1 ? "" : halves[0];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return "";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read an EDI period or range against a format code of one kind, as its two ends: the reader
|
|
70
|
+
* behind every public parser of a period (UNTDID 2379) and a range (X12 1250).
|
|
71
|
+
*
|
|
72
|
+
* - The code must be one of `kind`; a single-value code and a code of another kind return null.
|
|
73
|
+
* - Each half is read as `readEdiValue` reads a date or a local date-time. A 2379 period is run
|
|
74
|
+
* together and a 1250 range has exactly one hyphen: the grammar holds that.
|
|
75
|
+
* - An end that precedes its start returns null (**GMT rule**: a reversed period names no span
|
|
76
|
+
* of time). An end equal to its start is a valid period.
|
|
77
|
+
* - Never throws: any failure is null.
|
|
78
|
+
*
|
|
79
|
+
* @param standard which element the code belongs to
|
|
80
|
+
* @param kind the kind of period or range the calling function reads
|
|
81
|
+
* @param code the 2379 or 1250 format code
|
|
82
|
+
* @param value the element value
|
|
83
|
+
* @returns the two ends as ISO 8601 strings, or null
|
|
84
|
+
*
|
|
85
|
+
* @example readEdiRange("edifact", "datePeriod", "718", "2024061520240620") // { start: "2024-06-15", end: "2024-06-20" }
|
|
86
|
+
* @example readEdiRange("x12", "dateTimeRange", "RDT", "202406151430-202406201600") // { start: "2024-06-15T14:30:00", end: "2024-06-20T16:00:00" }
|
|
87
|
+
* @example readEdiRange("x12", "dateRange", "RD8", "20240620-20240615") // null (the end precedes the start)
|
|
88
|
+
* @example readEdiRange("edifact", "datePeriod", "102", "20240615") // null (a single date code)
|
|
89
|
+
*/
|
|
90
|
+
export function readEdiRange(standard, kind, code, value) {
|
|
91
|
+
try {
|
|
92
|
+
const entry = ediCodeOfKind(standard, kind, code);
|
|
93
|
+
const halves = readHalves(entry, value);
|
|
94
|
+
if (entry === null || halves === null || halves.length !== 2) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const [start, end] = halves;
|
|
98
|
+
return endPrecedesStart(entry.valueKind, start, end)
|
|
99
|
+
? null
|
|
100
|
+
: { start, end };
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Read an X12 data element 337 (Time) value as an ISO 8601 time, `HH:MM:SS[.f[f]]`.
|
|
108
|
+
*
|
|
109
|
+
* - The value is tested against the grammar of each form in the element's layout table
|
|
110
|
+
* (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`; `ediGrammar.ts`). The four masks have four lengths,
|
|
111
|
+
* so at most one matches. Its digits are read by part name, and the fields go through
|
|
112
|
+
* `Temporal.PlainTime.from` with `overflow: "reject"`.
|
|
113
|
+
* - Decimal seconds become the fraction of the second exactly: one digit is tenths, two are
|
|
114
|
+
* hundredths. Temporal writes no trailing zero, so `14304550` is `14:30:45.5`.
|
|
115
|
+
* - `""` for a non-string, a value of any other length or shape, hour 24, and minute or second
|
|
116
|
+
* 60. Never throws.
|
|
117
|
+
*
|
|
118
|
+
* @param value the element 337 value as transmitted
|
|
119
|
+
* @returns the time, or `""`
|
|
120
|
+
*
|
|
121
|
+
* @example readX12Time("1430") // "14:30:00"
|
|
122
|
+
* @example readX12Time("143045") // "14:30:45"
|
|
123
|
+
* @example readX12Time("14300012") // "14:30:00.12"
|
|
124
|
+
* @example readX12Time("2430") // ""
|
|
125
|
+
*/
|
|
126
|
+
export function readX12Time(value) {
|
|
127
|
+
try {
|
|
128
|
+
if (typeof value !== "string") {
|
|
129
|
+
return "";
|
|
130
|
+
}
|
|
131
|
+
for (const form of X12_TIME_ELEMENT_FORMS) {
|
|
132
|
+
const match = X12_TIME_ELEMENT_GRAMMAR[form].exec(value);
|
|
133
|
+
if (match !== null) {
|
|
134
|
+
return timeOf(readBag(X12_TIME_ELEMENT_LAYOUT[form].start, match.slice(1)));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return "";
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return "";
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Read the date (element 373, `CCYYMMDD`) and the time (element 337) of an X12 segment as one
|
|
145
|
+
* local date-time, `YYYY-MM-DDTHH:MM:SS[.f[f]]`.
|
|
146
|
+
*
|
|
147
|
+
* - The date is read by the `CCYYMMDD` mask of the 1250 code `D8` (one grammar, one reader) and
|
|
148
|
+
* the time by `readX12Time`; Temporal joins the two.
|
|
149
|
+
* - `""` when either is missing, is not a string or is not a real date or time. Never throws.
|
|
150
|
+
*
|
|
151
|
+
* @param date the element 373 value as transmitted
|
|
152
|
+
* @param time the element 337 value as transmitted
|
|
153
|
+
* @returns the local date-time, or `""`
|
|
154
|
+
*
|
|
155
|
+
* @example readX12DateAndTime("20240615", "1430") // "2024-06-15T14:30:00"
|
|
156
|
+
* @example readX12DateAndTime("20240615", "14300012") // "2024-06-15T14:30:00.12"
|
|
157
|
+
* @example readX12DateAndTime("20240615", "") // ""
|
|
158
|
+
*/
|
|
159
|
+
export function readX12DateAndTime(date, time) {
|
|
160
|
+
try {
|
|
161
|
+
const dateOnly = readEdiValue("x12", "date", "D8", date);
|
|
162
|
+
const timeOnly = readX12Time(time);
|
|
163
|
+
if (dateOnly === "" || timeOnly === "") {
|
|
164
|
+
return "";
|
|
165
|
+
}
|
|
166
|
+
return Temporal.PlainDate.from(dateOnly)
|
|
167
|
+
.toPlainDateTime(Temporal.PlainTime.from(timeOnly))
|
|
168
|
+
.toString();
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return "";
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The value as one ISO 8601 string per half: one for a single value, two for a period or range.
|
|
176
|
+
* Null when there is no code, the value is not a string, it does not match the code's grammar,
|
|
177
|
+
* or a half states an offset no instant can be read at. Temporal throws for a date or time that
|
|
178
|
+
* is not real.
|
|
179
|
+
*/
|
|
180
|
+
function readHalves(entry, value) {
|
|
181
|
+
if (entry === null || typeof value !== "string") {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
const match = entry.grammar.exec(value);
|
|
185
|
+
if (match === null) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
const captures = match.slice(1);
|
|
189
|
+
const { start, end } = entry.layout;
|
|
190
|
+
const bags = end === undefined
|
|
191
|
+
? [readBag(start, captures)]
|
|
192
|
+
: [
|
|
193
|
+
readBag(start, captures.slice(0, start.length)),
|
|
194
|
+
readBag(end, captures.slice(start.length)),
|
|
195
|
+
];
|
|
196
|
+
const halves = [];
|
|
197
|
+
for (const bag of bags) {
|
|
198
|
+
const half = HALF_READERS[entry.valueKind](bag);
|
|
199
|
+
if (half === null) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
halves.push(half);
|
|
203
|
+
}
|
|
204
|
+
return halves;
|
|
205
|
+
}
|
|
206
|
+
/** The captured digits of one half, read by part name into a field bag. */
|
|
207
|
+
function readBag(parts, captures) {
|
|
208
|
+
const bag = {};
|
|
209
|
+
const text = {};
|
|
210
|
+
parts.forEach((part, index) => {
|
|
211
|
+
const raw = captures[index] ?? "";
|
|
212
|
+
const field = NUMBER_FIELD_OF_PART[part];
|
|
213
|
+
if (field === undefined) {
|
|
214
|
+
text[part] = raw;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
bag[field] = Number(raw);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
const offset = offsetOf(text);
|
|
221
|
+
return offset === null ? bag : { ...bag, offset };
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* The `±HH:MM` a half states: `ZS`, `ZH` and `ZM` joined, or the three `ZZZ` characters read as
|
|
225
|
+
* a signed hour (UN/ECE Rec 7 ¶12, hours only) or as `UTC` or `GMT` (+00:00). The grammar
|
|
226
|
+
* admits nothing else in `ZZZ`. Null for a half with no offset.
|
|
227
|
+
*/
|
|
228
|
+
function offsetOf(text) {
|
|
229
|
+
if (text.ZS !== undefined) {
|
|
230
|
+
return `${text.ZS}${text.ZH}:${text.ZM}`;
|
|
231
|
+
}
|
|
232
|
+
if (text.ZZZ === undefined) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
return UTC_LITERALS.includes(text.ZZZ) ? "+00:00" : `${text.ZZZ}:00`;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* The time of day of a half that has no date, built by Temporal from its fields. The decimal
|
|
239
|
+
* seconds of X12 data element 337 are counted in milliseconds: "1" is one tenth (100 ms) and
|
|
240
|
+
* "12" is twelve hundredths (120 ms). A mask without them, which is every 2379 and 1250 mask,
|
|
241
|
+
* gives 0.
|
|
242
|
+
*/
|
|
243
|
+
function timeOf(bag) {
|
|
244
|
+
return Temporal.PlainTime.from({
|
|
245
|
+
hour: bag.hour,
|
|
246
|
+
minute: bag.minute,
|
|
247
|
+
second: bag.second ?? 0,
|
|
248
|
+
millisecond: (bag.tenths ?? 0) * MILLISECONDS_PER_DECIMAL_SECOND.SD +
|
|
249
|
+
(bag.hundredths ?? 0) * MILLISECONDS_PER_DECIMAL_SECOND.SDD,
|
|
250
|
+
}, { overflow: "reject" }).toString();
|
|
251
|
+
}
|
|
252
|
+
/** The wall clock of a half that has a date and a time, built by Temporal from its fields. */
|
|
253
|
+
function localDateTime(bag) {
|
|
254
|
+
return Temporal.PlainDateTime.from({
|
|
255
|
+
year: bag.year,
|
|
256
|
+
month: bag.month,
|
|
257
|
+
day: bag.day,
|
|
258
|
+
hour: bag.hour,
|
|
259
|
+
minute: bag.minute,
|
|
260
|
+
second: bag.second ?? 0,
|
|
261
|
+
}, { overflow: "reject" }).toString();
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Each kind's reader: one half's fields as the ISO 8601 string of that kind. Temporal throws for
|
|
265
|
+
* a date or time that is not real; null is for an offset no instant can be read at.
|
|
266
|
+
*/
|
|
267
|
+
const HALF_READERS = {
|
|
268
|
+
date: (bag) => Temporal.PlainDate.from({ year: bag.year, month: bag.month, day: bag.day }, { overflow: "reject" }).toString(),
|
|
269
|
+
time: timeOf,
|
|
270
|
+
dateTime: localDateTime,
|
|
271
|
+
// The wall clock and its offset, read by `toOffsetInstant` and written back by
|
|
272
|
+
// `fromOffsetInstant`: the pair's own string, so `-00:00` is `+00:00` and the result reads
|
|
273
|
+
// back through the instant functions.
|
|
274
|
+
offsetDateTime: (bag) => {
|
|
275
|
+
const pair = toOffsetInstant(`${localDateTime(bag)}${bag.offset ?? ""}`);
|
|
276
|
+
const written = pair === null ? "" : fromOffsetInstant(pair);
|
|
277
|
+
return written === "" ? null : written;
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* GMT rule: a reversed period names no span of time. Two dates compare by calendar date and two
|
|
282
|
+
* local date-times to the second.
|
|
283
|
+
*/
|
|
284
|
+
function endPrecedesStart(valueKind, start, end) {
|
|
285
|
+
return valueKind === "date"
|
|
286
|
+
? Temporal.PlainDate.compare(end, start) < 0
|
|
287
|
+
: Temporal.PlainDateTime.compare(end, start) < 0;
|
|
288
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type EdiKind, type EdiStandard } from "./ediGrammar.js";
|
|
2
|
+
/**
|
|
3
|
+
* Write one ISO 8601 value as a single EDI date/time value in a format code of one kind: the
|
|
4
|
+
* inverse of `readEdiValue`, driven by the same layout tables (`ediGrammar.ts`), so what one
|
|
5
|
+
* writes the other reads back.
|
|
6
|
+
*
|
|
7
|
+
* - The code must be one of `kind`; a code of another kind, a period or range code and a code
|
|
8
|
+
* that is not written return `""`.
|
|
9
|
+
* - The kind fixes the ISO 8601 string `value` must be, as the house plain functions fix theirs:
|
|
10
|
+
* a date is what `isValidDate` accepts, a time what `isValidTime` accepts, a local date-time
|
|
11
|
+
* what `isValidDateTime` accepts, and a date-time with an offset what `toOffsetInstant` reads
|
|
12
|
+
* (an offset, `Z`, or a bracketed zone that agrees). Temporal then reads the fields; no digit
|
|
13
|
+
* of the input is sliced.
|
|
14
|
+
* - Precision is cut to the mask and never refused: a fraction of a second is dropped under
|
|
15
|
+
* every 2379 and 1250 mask (none has decimal seconds) and the seconds under a mask with no
|
|
16
|
+
* `SS`. The cut is a truncation, never a rounding, so a written value never names a later
|
|
17
|
+
* minute or second than its input.
|
|
18
|
+
* - A value with an offset is written on its own wall clock, never the UTC clock. `ZHHMM` holds
|
|
19
|
+
* whole minutes and `ZZZ` whole hours, always written as the signed hour of UN/ECE
|
|
20
|
+
* Recommendation 7 ¶12 (`+02`), never `UTC` or `GMT`. An offset the field cannot hold returns
|
|
21
|
+
* `""`: rounding it would name another instant.
|
|
22
|
+
* - A year outside 0000–9999 returns `""`: `CCYY` is four digits and no sign.
|
|
23
|
+
* - Never throws: any failure is `""`.
|
|
24
|
+
*
|
|
25
|
+
* @param standard which element the code belongs to
|
|
26
|
+
* @param kind the kind of value the calling function writes
|
|
27
|
+
* @param code the 2379 or 1250 format code
|
|
28
|
+
* @param value one ISO 8601 string of that kind
|
|
29
|
+
* @returns the element value, or `""`
|
|
30
|
+
*
|
|
31
|
+
* @example writeEdiValue("edifact", "dateTime", "203", "2024-06-15T14:30:45") // "202406151430"
|
|
32
|
+
* @example writeEdiValue("edifact", "offsetDateTime", "303", "2024-06-15T14:30:00+02:00") // "202406151430+02"
|
|
33
|
+
* @example writeEdiValue("x12", "date", "DB", "2024-06-15") // "06152024"
|
|
34
|
+
* @example writeEdiValue("edifact", "offsetDateTime", "303", "2024-06-15T14:30:00+05:30") // "" (ZZZ holds whole hours)
|
|
35
|
+
* @example writeEdiValue("edifact", "date", "102", "2024-06-15T14:30:00") // "" (a date-time is not a date)
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeEdiValue(standard: EdiStandard, kind: EdiKind, code: string, value: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Write two ISO 8601 values as an EDI period or range in a format code of one kind: the inverse
|
|
40
|
+
* of `readEdiRange`.
|
|
41
|
+
*
|
|
42
|
+
* - The code must be one of `kind`; a single-value code and a code of another kind return `""`.
|
|
43
|
+
* - Each end is read and written as `writeEdiValue` reads and writes a date or a local
|
|
44
|
+
* date-time. The halves are joined by what the standard transmits: nothing for UNTDID 2379,
|
|
45
|
+
* one hyphen for X12 1250.
|
|
46
|
+
* - An end that precedes its start returns `""` (**GMT rule**: a reversed period names no span
|
|
47
|
+
* of time). The ends are compared as given, before either is cut to the mask, so an end 35
|
|
48
|
+
* seconds before its start is reversed under a minute mask too. An end equal to its start is
|
|
49
|
+
* written.
|
|
50
|
+
* - Never throws: any failure is `""`.
|
|
51
|
+
*
|
|
52
|
+
* @param standard which element the code belongs to
|
|
53
|
+
* @param kind the kind of period or range the calling function writes
|
|
54
|
+
* @param code the 2379 or 1250 format code
|
|
55
|
+
* @param start the first end, one ISO 8601 string of the kind's half
|
|
56
|
+
* @param end the second end, of the same kind
|
|
57
|
+
* @returns the element value, or `""`
|
|
58
|
+
*
|
|
59
|
+
* @example writeEdiRange("edifact", "datePeriod", "718", "2024-06-15", "2024-06-20") // "2024061520240620"
|
|
60
|
+
* @example writeEdiRange("x12", "dateRange", "RD8", "2024-06-15", "2024-06-20") // "20240615-20240620"
|
|
61
|
+
* @example writeEdiRange("x12", "dateRange", "RD8", "2024-06-20", "2024-06-15") // "" (the end precedes the start)
|
|
62
|
+
*/
|
|
63
|
+
export declare function writeEdiRange(standard: EdiStandard, kind: EdiKind, code: string, start: string, end: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Write one ISO 8601 time as an X12 data element 337 (Time) value in one of the element's four
|
|
66
|
+
* forms: the inverse of `readX12Time`, driven by the same layout table (`ediGrammar.ts`), so
|
|
67
|
+
* what one writes the other reads back.
|
|
68
|
+
*
|
|
69
|
+
* - The form is the element's own mask (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`), looked up
|
|
70
|
+
* exactly and by own key. A data element 1250 code (`TM`, `TS`) and any other string return
|
|
71
|
+
* `""`.
|
|
72
|
+
* - `value` is a time, as `isValidTime` accepts it; Temporal then reads the fields. No digit of
|
|
73
|
+
* the input is sliced.
|
|
74
|
+
* - The form alone fixes the digits written. It is never read off the value, so the width of the
|
|
75
|
+
* field does not depend on the data: a time with no fraction is `14300000` under `HHMMSSDD`.
|
|
76
|
+
* - Precision is cut to the mask and never refused: `D` is the whole tenths of the second and
|
|
77
|
+
* `DD` its whole hundredths. The cut is a truncation, never a rounding, so a written value
|
|
78
|
+
* never names a later second than its input.
|
|
79
|
+
* - Never throws: any failure is `""`.
|
|
80
|
+
*
|
|
81
|
+
* @param form the element's mask
|
|
82
|
+
* @param value one ISO 8601 time
|
|
83
|
+
* @returns the element value, or `""`
|
|
84
|
+
*
|
|
85
|
+
* @example writeX12TimeElement("HHMMSSDD", "14:30:00.12") // "14300012"
|
|
86
|
+
* @example writeX12TimeElement("HHMMSSD", "14:30:00.12") // "1430001" (cut, not rounded)
|
|
87
|
+
* @example writeX12TimeElement("HHMMSSDD", "14:30") // "14300000"
|
|
88
|
+
* @example writeX12TimeElement("HHMM", "14:30:45.999") // "1430"
|
|
89
|
+
* @example writeX12TimeElement("TS", "14:30:45") // "" (a 1250 code, not a mask)
|
|
90
|
+
* @example writeX12TimeElement("HHMM", "2024-06-15T14:30:00") // "" (a date-time is not a time)
|
|
91
|
+
*/
|
|
92
|
+
export declare function writeX12TimeElement(form: string, value: string): string;
|