@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
|
@@ -66,6 +66,7 @@ export function parseTimeWithPattern(value, pattern, locale) {
|
|
|
66
66
|
return "";
|
|
67
67
|
if (typeof pattern !== "string")
|
|
68
68
|
return "";
|
|
69
|
+
// A time pattern has no year token, so no two-digit-year window applies.
|
|
69
70
|
const fields = parseValueWithPattern(value, pattern, locale, TIME_PATTERN_FIELDS);
|
|
70
71
|
if (fields === null)
|
|
71
72
|
return "";
|
|
@@ -9,6 +9,8 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
9
9
|
* - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
|
|
10
10
|
* Temporal's GetOptionsObject rejects it.
|
|
11
11
|
* - Returns "" for invalid input.
|
|
12
|
+
* - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
|
|
13
|
+
* sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
12
14
|
*
|
|
13
15
|
* @param value ISO PlainDate string
|
|
14
16
|
* @param unit unit to extract from the date
|
|
@@ -16,6 +18,7 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
16
18
|
* @returns string representation of the requested unit or "" on invalid input
|
|
17
19
|
*
|
|
18
20
|
* @example parseUnitFromDate("2024-03-15", "year") // "2024"
|
|
21
|
+
* @example parseUnitFromDate("0005-06-01", "year") // "0005"
|
|
19
22
|
* @example parseUnitFromDate("2024-03-15", "month") // "03"
|
|
20
23
|
* @example parseUnitFromDate("2024-03-15", "day") // "15"
|
|
21
24
|
* @example parseUnitFromDate("2024-03-15", "week") // "11"
|
|
@@ -4,6 +4,7 @@ import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
|
|
|
4
4
|
import { getWeekNumber } from "../calculate/getWeekNumber.js";
|
|
5
5
|
import { isValidDate } from "../validate/index.js";
|
|
6
6
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
7
|
+
import { isoYearString } from "../../internal/isoYearString.js";
|
|
7
8
|
/**
|
|
8
9
|
* Return a specific date unit extracted from a PlainDate string.
|
|
9
10
|
*
|
|
@@ -14,6 +15,8 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
14
15
|
* - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
|
|
15
16
|
* Temporal's GetOptionsObject rejects it.
|
|
16
17
|
* - Returns "" for invalid input.
|
|
18
|
+
* - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
|
|
19
|
+
* sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
17
20
|
*
|
|
18
21
|
* @param value ISO PlainDate string
|
|
19
22
|
* @param unit unit to extract from the date
|
|
@@ -21,6 +24,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
21
24
|
* @returns string representation of the requested unit or "" on invalid input
|
|
22
25
|
*
|
|
23
26
|
* @example parseUnitFromDate("2024-03-15", "year") // "2024"
|
|
27
|
+
* @example parseUnitFromDate("0005-06-01", "year") // "0005"
|
|
24
28
|
* @example parseUnitFromDate("2024-03-15", "month") // "03"
|
|
25
29
|
* @example parseUnitFromDate("2024-03-15", "day") // "15"
|
|
26
30
|
* @example parseUnitFromDate("2024-03-15", "week") // "11"
|
|
@@ -44,7 +48,7 @@ export function parseUnitFromDate(value, unit, optionsArg) {
|
|
|
44
48
|
const date = Temporal.PlainDate.from(value);
|
|
45
49
|
switch (resolveDateTimeUnit(unit)) {
|
|
46
50
|
case "year":
|
|
47
|
-
return date.year
|
|
51
|
+
return isoYearString(date.year);
|
|
48
52
|
case "month":
|
|
49
53
|
return date.month.toString().padStart(2, "0");
|
|
50
54
|
case "day":
|
|
@@ -11,6 +11,8 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
11
11
|
* - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
|
|
12
12
|
* Temporal's GetOptionsObject rejects it.
|
|
13
13
|
* - Returns "" for invalid input.
|
|
14
|
+
* - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
|
|
15
|
+
* sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
14
16
|
*
|
|
15
17
|
* @param value ISO PlainDateTime string
|
|
16
18
|
* @param unit unit to extract from the datetime
|
|
@@ -18,6 +20,7 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
18
20
|
* @returns string representation of the requested unit or "" on invalid input
|
|
19
21
|
*
|
|
20
22
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "year") // "2024"
|
|
23
|
+
* @example parseUnitFromDateTime("0005-06-01T12:30:00", "year") // "0005"
|
|
21
24
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "week") // "11"
|
|
22
25
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "hour") // "14"
|
|
23
26
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "millisecond") // "123"
|
|
@@ -5,6 +5,7 @@ import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
|
|
|
5
5
|
import { getWeekNumber } from "../calculate/getWeekNumber.js";
|
|
6
6
|
import { isValidDateTime } from "../validate/index.js";
|
|
7
7
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
8
|
+
import { isoYearString } from "../../internal/isoYearString.js";
|
|
8
9
|
/**
|
|
9
10
|
* Return a specific unit extracted from a PlainDateTime string.
|
|
10
11
|
*
|
|
@@ -17,6 +18,8 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
17
18
|
* - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
|
|
18
19
|
* Temporal's GetOptionsObject rejects it.
|
|
19
20
|
* - Returns "" for invalid input.
|
|
21
|
+
* - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
|
|
22
|
+
* sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
20
23
|
*
|
|
21
24
|
* @param value ISO PlainDateTime string
|
|
22
25
|
* @param unit unit to extract from the datetime
|
|
@@ -24,6 +27,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
24
27
|
* @returns string representation of the requested unit or "" on invalid input
|
|
25
28
|
*
|
|
26
29
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "year") // "2024"
|
|
30
|
+
* @example parseUnitFromDateTime("0005-06-01T12:30:00", "year") // "0005"
|
|
27
31
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "week") // "11"
|
|
28
32
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "hour") // "14"
|
|
29
33
|
* @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "millisecond") // "123"
|
|
@@ -45,7 +49,7 @@ export function parseUnitFromDateTime(value, unit, optionsArg) {
|
|
|
45
49
|
const dateTime = Temporal.PlainDateTime.from(value);
|
|
46
50
|
switch (resolveDateTimeUnit(unit)) {
|
|
47
51
|
case "year":
|
|
48
|
-
return dateTime.year
|
|
52
|
+
return isoYearString(dateTime.year);
|
|
49
53
|
case "month":
|
|
50
54
|
return dateTime.month.toString().padStart(2, "0");
|
|
51
55
|
case "day":
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return the year for a given ISO 8601 date string.
|
|
3
3
|
*
|
|
4
|
-
* - Returns the year as
|
|
4
|
+
* - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
|
|
5
|
+
* digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
5
6
|
* - Returns "" for invalid input.
|
|
6
7
|
*
|
|
7
8
|
* @param value ISO date string
|
|
8
|
-
* @returns
|
|
9
|
+
* @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
|
|
9
10
|
*
|
|
10
11
|
* @example parseYearFromDate("2024-03-15") // "2024"
|
|
12
|
+
* @example parseYearFromDate("0005-06-01") // "0005"
|
|
13
|
+
* @example parseYearFromDate("+010000-01-01") // "+010000"
|
|
11
14
|
* @example parseYearFromDate("invalid") // ""
|
|
12
15
|
*/
|
|
13
16
|
export declare function parseYearFromDate(value: string): string;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isValidDate } from "../validate/index.js";
|
|
3
|
+
import { isoYearString } from "../../internal/isoYearString.js";
|
|
3
4
|
/**
|
|
4
5
|
* Return the year for a given ISO 8601 date string.
|
|
5
6
|
*
|
|
6
|
-
* - Returns the year as
|
|
7
|
+
* - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
|
|
8
|
+
* digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
7
9
|
* - Returns "" for invalid input.
|
|
8
10
|
*
|
|
9
11
|
* @param value ISO date string
|
|
10
|
-
* @returns
|
|
12
|
+
* @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
|
|
11
13
|
*
|
|
12
14
|
* @example parseYearFromDate("2024-03-15") // "2024"
|
|
15
|
+
* @example parseYearFromDate("0005-06-01") // "0005"
|
|
16
|
+
* @example parseYearFromDate("+010000-01-01") // "+010000"
|
|
13
17
|
* @example parseYearFromDate("invalid") // ""
|
|
14
18
|
*/
|
|
15
19
|
export function parseYearFromDate(value) {
|
|
@@ -17,7 +21,7 @@ export function parseYearFromDate(value) {
|
|
|
17
21
|
return "";
|
|
18
22
|
try {
|
|
19
23
|
const date = Temporal.PlainDate.from(value);
|
|
20
|
-
return date.year
|
|
24
|
+
return isoYearString(date.year);
|
|
21
25
|
}
|
|
22
26
|
catch {
|
|
23
27
|
return "";
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return the year for a given ISO 8601 datetime string.
|
|
3
3
|
*
|
|
4
|
-
* - Returns the year as
|
|
4
|
+
* - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
|
|
5
|
+
* digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
5
6
|
* - Returns "" for invalid input.
|
|
6
7
|
*
|
|
7
8
|
* @param value ISO datetime string
|
|
8
|
-
* @returns
|
|
9
|
+
* @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
|
|
9
10
|
*
|
|
10
11
|
* @example parseYearFromDateTime("2024-03-15T12:30:00") // "2024"
|
|
12
|
+
* @example parseYearFromDateTime("0005-06-01T12:30:00") // "0005"
|
|
11
13
|
* @example parseYearFromDateTime("invalid") // ""
|
|
12
14
|
*/
|
|
13
15
|
export declare function parseYearFromDateTime(value: string): string;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isValidDateTime } from "../validate/index.js";
|
|
3
|
+
import { isoYearString } from "../../internal/isoYearString.js";
|
|
3
4
|
/**
|
|
4
5
|
* Return the year for a given ISO 8601 datetime string.
|
|
5
6
|
*
|
|
6
|
-
* - Returns the year as
|
|
7
|
+
* - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
|
|
8
|
+
* digits outside 0000–9999 (`"+010000"`, `"-000005"`).
|
|
7
9
|
* - Returns "" for invalid input.
|
|
8
10
|
*
|
|
9
11
|
* @param value ISO datetime string
|
|
10
|
-
* @returns
|
|
12
|
+
* @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
|
|
11
13
|
*
|
|
12
14
|
* @example parseYearFromDateTime("2024-03-15T12:30:00") // "2024"
|
|
15
|
+
* @example parseYearFromDateTime("0005-06-01T12:30:00") // "0005"
|
|
13
16
|
* @example parseYearFromDateTime("invalid") // ""
|
|
14
17
|
*/
|
|
15
18
|
export function parseYearFromDateTime(value) {
|
|
@@ -17,7 +20,7 @@ export function parseYearFromDateTime(value) {
|
|
|
17
20
|
return "";
|
|
18
21
|
try {
|
|
19
22
|
const dateTime = Temporal.PlainDateTime.from(value);
|
|
20
|
-
return dateTime.year
|
|
23
|
+
return isoYearString(dateTime.year);
|
|
21
24
|
}
|
|
22
25
|
catch {
|
|
23
26
|
return "";
|
|
@@ -12,6 +12,7 @@ export * from "./isValidDateTimeRange.js";
|
|
|
12
12
|
export * from "./isValidDateTimeUnit.js";
|
|
13
13
|
export * from "./isValidDateUnit.js";
|
|
14
14
|
export * from "./isValidIsoDateLike.js";
|
|
15
|
+
export * from "./isValidSqlDateTime.js";
|
|
15
16
|
export * from "./isValidTime.js";
|
|
16
17
|
export * from "./isValidTimeCycleField.js";
|
|
17
18
|
export * from "./isValidTimeDurationUnit.js";
|
|
@@ -12,6 +12,7 @@ export * from "./isValidDateTimeRange.js";
|
|
|
12
12
|
export * from "./isValidDateTimeUnit.js";
|
|
13
13
|
export * from "./isValidDateUnit.js";
|
|
14
14
|
export * from "./isValidIsoDateLike.js";
|
|
15
|
+
export * from "./isValidSqlDateTime.js";
|
|
15
16
|
export * from "./isValidTime.js";
|
|
16
17
|
export * from "./isValidTimeCycleField.js";
|
|
17
18
|
export * from "./isValidTimeDurationUnit.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return true when `value` is a real SQL timestamp literal without a time zone: the
|
|
3
|
+
* `YYYY-MM-DD HH:MM:SS[.fff]` value of a standard SQL `TIMESTAMP` or a MySQL/SQLite `DATETIME`
|
|
4
|
+
* column. It checks one date-and-time value, not a SQL statement.
|
|
5
|
+
*
|
|
6
|
+
* - True exactly when `parseSqlDateTime` returns a plain string for the same value: the validator
|
|
7
|
+
* calls the parser, so the two cannot disagree.
|
|
8
|
+
* - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, as `sqlDateTime`
|
|
9
|
+
* matches: a single space separator, a four-digit year `0001`–`9999`, two-digit month, day,
|
|
10
|
+
* hour, minute and second (seconds are required), and an optional `.` followed by up to 9
|
|
11
|
+
* fraction digits.
|
|
12
|
+
* - Checks the calendar as well as the shape. The `sqlDateTime` pattern proves the shape alone, so
|
|
13
|
+
* it matches a day that does not exist: 30 February, 29 February in a common year and 31 June
|
|
14
|
+
* are false here.
|
|
15
|
+
* - False for a second of 60: GMT rejects leap seconds.
|
|
16
|
+
* - **Plain only.** A `T` separator, a `Z` and an offset are false: SQL's offset-carrying
|
|
17
|
+
* `TIMESTAMP WITH TIME ZONE` literal is out of scope.
|
|
18
|
+
* - False for a non-string. Read the value with `parseSqlDateTime`; write one with
|
|
19
|
+
* `formatSqlDateTime`.
|
|
20
|
+
*
|
|
21
|
+
* @param value candidate SQL timestamp literal
|
|
22
|
+
* @returns boolean indicating validity
|
|
23
|
+
*
|
|
24
|
+
* @example isValidSqlDateTime("2024-03-15 14:30:00") // true
|
|
25
|
+
* @example isValidSqlDateTime("2024-03-15 14:30:00.123456789") // true
|
|
26
|
+
* @example isValidSqlDateTime("2024-02-30 14:30:00") // false (February has no 30th; the sqlDateTime pattern matches it)
|
|
27
|
+
* @example isValidSqlDateTime("2023-02-29 14:30:00") // false (2023 has no 29 February; the sqlDateTime pattern matches it)
|
|
28
|
+
* @example isValidSqlDateTime("2024-06-31 00:00:00") // false (June has 30 days; the sqlDateTime pattern matches it)
|
|
29
|
+
* @example isValidSqlDateTime("2024-03-15 14:30") // false (seconds are required)
|
|
30
|
+
* @example isValidSqlDateTime("2024-03-15T14:30:00") // false (T separator)
|
|
31
|
+
* @example isValidSqlDateTime("not a date") // false
|
|
32
|
+
*/
|
|
33
|
+
export declare function isValidSqlDateTime(value: string): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { parseSqlDateTime } from "../parse/parseSqlDateTime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `value` is a real SQL timestamp literal without a time zone: the
|
|
4
|
+
* `YYYY-MM-DD HH:MM:SS[.fff]` value of a standard SQL `TIMESTAMP` or a MySQL/SQLite `DATETIME`
|
|
5
|
+
* column. It checks one date-and-time value, not a SQL statement.
|
|
6
|
+
*
|
|
7
|
+
* - True exactly when `parseSqlDateTime` returns a plain string for the same value: the validator
|
|
8
|
+
* calls the parser, so the two cannot disagree.
|
|
9
|
+
* - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, as `sqlDateTime`
|
|
10
|
+
* matches: a single space separator, a four-digit year `0001`–`9999`, two-digit month, day,
|
|
11
|
+
* hour, minute and second (seconds are required), and an optional `.` followed by up to 9
|
|
12
|
+
* fraction digits.
|
|
13
|
+
* - Checks the calendar as well as the shape. The `sqlDateTime` pattern proves the shape alone, so
|
|
14
|
+
* it matches a day that does not exist: 30 February, 29 February in a common year and 31 June
|
|
15
|
+
* are false here.
|
|
16
|
+
* - False for a second of 60: GMT rejects leap seconds.
|
|
17
|
+
* - **Plain only.** A `T` separator, a `Z` and an offset are false: SQL's offset-carrying
|
|
18
|
+
* `TIMESTAMP WITH TIME ZONE` literal is out of scope.
|
|
19
|
+
* - False for a non-string. Read the value with `parseSqlDateTime`; write one with
|
|
20
|
+
* `formatSqlDateTime`.
|
|
21
|
+
*
|
|
22
|
+
* @param value candidate SQL timestamp literal
|
|
23
|
+
* @returns boolean indicating validity
|
|
24
|
+
*
|
|
25
|
+
* @example isValidSqlDateTime("2024-03-15 14:30:00") // true
|
|
26
|
+
* @example isValidSqlDateTime("2024-03-15 14:30:00.123456789") // true
|
|
27
|
+
* @example isValidSqlDateTime("2024-02-30 14:30:00") // false (February has no 30th; the sqlDateTime pattern matches it)
|
|
28
|
+
* @example isValidSqlDateTime("2023-02-29 14:30:00") // false (2023 has no 29 February; the sqlDateTime pattern matches it)
|
|
29
|
+
* @example isValidSqlDateTime("2024-06-31 00:00:00") // false (June has 30 days; the sqlDateTime pattern matches it)
|
|
30
|
+
* @example isValidSqlDateTime("2024-03-15 14:30") // false (seconds are required)
|
|
31
|
+
* @example isValidSqlDateTime("2024-03-15T14:30:00") // false (T separator)
|
|
32
|
+
* @example isValidSqlDateTime("not a date") // false
|
|
33
|
+
*/
|
|
34
|
+
export function isValidSqlDateTime(value) {
|
|
35
|
+
return parseSqlDateTime(value) !== "";
|
|
36
|
+
}
|
|
@@ -5,17 +5,23 @@
|
|
|
5
5
|
* (`"...[America/New_York]"`) when one is.
|
|
6
6
|
* - No disambiguation policy applies: an instant maps to exactly one wall time in a zone,
|
|
7
7
|
* so DST gaps and overlaps cannot arise on this direction of the conversion.
|
|
8
|
-
* - A time zone, when given, must be a
|
|
9
|
-
* it (UTC), as TC39 treats an undefined argument as
|
|
8
|
+
* - A time zone, when given, must be a time zone identifier: an IANA name or a UTC offset to the
|
|
9
|
+
* minute. `undefined` is the same as omitting it (UTC), as TC39 treats an undefined argument as
|
|
10
|
+
* absent.
|
|
10
11
|
* - Rejects values outside the range `Temporal.Instant` can represent
|
|
11
12
|
* (±8_640_000_000_000_000_000_000n, i.e. ±10^8 days from the epoch).
|
|
12
13
|
* - **Storage round-trip:** most engines cannot hold nanoseconds — PostgreSQL `timestamptz`
|
|
13
14
|
* stores microseconds — so writing this value and reading it back breaks equality unless
|
|
14
15
|
* the caller applies `truncateNanoseconds` to the target precision first.
|
|
15
16
|
* - Returns "" on invalid input.
|
|
17
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
18
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call
|
|
19
|
+
* `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
|
|
20
|
+
* bracket.
|
|
16
21
|
*
|
|
17
22
|
* @param nanoseconds nanoseconds since the Unix epoch (bigint)
|
|
18
|
-
* @param timeZone optional IANA name or UTC offset
|
|
23
|
+
* @param timeZone optional IANA name or a UTC offset to the minute (what `isValidTimeZone`
|
|
24
|
+
* accepts); omitted or `undefined` is UTC
|
|
19
25
|
* @returns ISO 8601 instant string (UTC), zoned ISO 8601 string when a timeZone is given, or "" on invalid input
|
|
20
26
|
*
|
|
21
27
|
* @example fromNanoseconds(0n) // "1970-01-01T00:00:00Z"
|
|
@@ -8,17 +8,23 @@ import { isValidTimeZone } from "../../zoned/validate/index.js";
|
|
|
8
8
|
* (`"...[America/New_York]"`) when one is.
|
|
9
9
|
* - No disambiguation policy applies: an instant maps to exactly one wall time in a zone,
|
|
10
10
|
* so DST gaps and overlaps cannot arise on this direction of the conversion.
|
|
11
|
-
* - A time zone, when given, must be a
|
|
12
|
-
* it (UTC), as TC39 treats an undefined argument as
|
|
11
|
+
* - A time zone, when given, must be a time zone identifier: an IANA name or a UTC offset to the
|
|
12
|
+
* minute. `undefined` is the same as omitting it (UTC), as TC39 treats an undefined argument as
|
|
13
|
+
* absent.
|
|
13
14
|
* - Rejects values outside the range `Temporal.Instant` can represent
|
|
14
15
|
* (±8_640_000_000_000_000_000_000n, i.e. ±10^8 days from the epoch).
|
|
15
16
|
* - **Storage round-trip:** most engines cannot hold nanoseconds — PostgreSQL `timestamptz`
|
|
16
17
|
* stores microseconds — so writing this value and reading it back breaks equality unless
|
|
17
18
|
* the caller applies `truncateNanoseconds` to the target precision first.
|
|
18
19
|
* - Returns "" on invalid input.
|
|
20
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
21
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call
|
|
22
|
+
* `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
|
|
23
|
+
* bracket.
|
|
19
24
|
*
|
|
20
25
|
* @param nanoseconds nanoseconds since the Unix epoch (bigint)
|
|
21
|
-
* @param timeZone optional IANA name or UTC offset
|
|
26
|
+
* @param timeZone optional IANA name or a UTC offset to the minute (what `isValidTimeZone`
|
|
27
|
+
* accepts); omitted or `undefined` is UTC
|
|
22
28
|
* @returns ISO 8601 instant string (UTC), zoned ISO 8601 string when a timeZone is given, or "" on invalid input
|
|
23
29
|
*
|
|
24
30
|
* @example fromNanoseconds(0n) // "1970-01-01T00:00:00Z"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RegExp matching a GS1 EPCIS 2.0 `eventTimeZoneOffset`: the `pattern` the EPCIS JSON schema
|
|
3
|
+
* (https://ref.gs1.org/standards/epcis/epcis-json-schema.json, a normative artefact of EPCIS 2.0 /
|
|
4
|
+
* ISO/IEC 19987) gives for the field, verbatim: `^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$`.
|
|
5
|
+
*
|
|
6
|
+
* - The pattern is the JSON binding's. The XML binding's XSD types the same field as a bare
|
|
7
|
+
* `xsd:string` and gives no pattern.
|
|
8
|
+
* - The rule both bindings carry is the standard's prose, EPCIS Standard Release 2.0 §7.4.1
|
|
9
|
+
* (https://ref.gs1.org/standards/epcis/): the value "SHALL be a string consisting of the
|
|
10
|
+
* character '+' or the character '-', followed by two digits whose value is within the range
|
|
11
|
+
* 00 through 14 (inclusive), followed by a colon character ':', followed by two digits whose
|
|
12
|
+
* value is within the range 00 through 59 (inclusive), except that if the value of the first
|
|
13
|
+
* two digits is 14, the value of the second two digits must be 00." The pattern is that
|
|
14
|
+
* sentence as a regular expression.
|
|
15
|
+
* - `±HH:MM` from `-13:59` through `+13:59`, plus `±14:00`. GS1 published the grammar, so it is
|
|
16
|
+
* neither loosened nor tightened here: `-14:00` matches because the sign group is independent
|
|
17
|
+
* of the `14:00` alternative, and `-00:00` matches.
|
|
18
|
+
* - `Z` does not match: it is `eventTime`'s designator, and this field records the offset in
|
|
19
|
+
* force where the event happened. `+0200` (no colon) and `+02` (hours only) do not match.
|
|
20
|
+
* - Shape only. `parseEpcisEvent` reads the value through Temporal, and returns `-00:00` as
|
|
21
|
+
* `+00:00`. To check a value that may not be a string, use `isValidEpcisTimeZoneOffset`: for a
|
|
22
|
+
* string it gives this pattern's answer.
|
|
23
|
+
*
|
|
24
|
+
* Capture groups: 1 sign, 2 the hours-and-minutes or `14:00`, 3 hours, 4 minutes (3 and 4 are
|
|
25
|
+
* `undefined` for `14:00`).
|
|
26
|
+
*
|
|
27
|
+
* @example epcisTimeZoneOffset.test("-05:00") // true
|
|
28
|
+
* @example epcisTimeZoneOffset.test("+14:00") // true
|
|
29
|
+
* @example epcisTimeZoneOffset.test("+14:01") // false (past the range GS1 allows)
|
|
30
|
+
* @example epcisTimeZoneOffset.test("Z") // false (a designator, not an offset)
|
|
31
|
+
* @example epcisTimeZoneOffset.test("+0200") // false (no colon)
|
|
32
|
+
*/
|
|
33
|
+
export declare const epcisTimeZoneOffset: RegExp;
|
|
34
|
+
/**
|
|
35
|
+
* RegExp matching a GS1 EPCIS 2.0 `eventTime` (and `recordTime`): the `DateTimeStamp` pattern of
|
|
36
|
+
* the EPCIS XSD (https://ref.gs1.org/standards/epcis/epcglobal-epcis-2_0.xsd, a normative
|
|
37
|
+
* artefact of EPCIS 2.0 / ISO/IEC 19987), verbatim and anchored.
|
|
38
|
+
*
|
|
39
|
+
* - The pattern is the XML binding's. The JSON schema types the same field as a string with
|
|
40
|
+
* `format: date-time` and gives no pattern, so this is the stricter of the two bindings.
|
|
41
|
+
* - A date-time with seconds required, an optional fraction of any length, then `Z` or an offset
|
|
42
|
+
* in the same range as `epcisTimeZoneOffset`.
|
|
43
|
+
* - GS1 published the grammar, so it is neither loosened nor tightened here: four-digit years
|
|
44
|
+
* only, upper-case `T` and `Z`, a colon in the offset, no space separator.
|
|
45
|
+
* - Shape only; calendar validity is Temporal's (`2023-02-29T00:00:00Z` matches and
|
|
46
|
+
* `Temporal.Instant.from` rejects it). To check that a string is a real `eventTime`, use
|
|
47
|
+
* `isValidEpcisEventTime`: this pattern also matches a day that does not exist and a fraction
|
|
48
|
+
* longer than nine digits.
|
|
49
|
+
*
|
|
50
|
+
* Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second, 7 fraction with its
|
|
51
|
+
* period (optional), 8 `Z` or the offset, 9 the offset, 10 sign, 11 hours-and-minutes or
|
|
52
|
+
* `14:00`, 12 hours, 13 minutes.
|
|
53
|
+
*
|
|
54
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00Z") // true
|
|
55
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00.123-05:00") // true
|
|
56
|
+
* @example epcisEventTime.test("2024-06-15T14:30Z") // false (seconds are required)
|
|
57
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00") // false (Z or an offset is required)
|
|
58
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00+15:00") // false (offset past the range GS1 allows)
|
|
59
|
+
*/
|
|
60
|
+
export declare const epcisEventTime: RegExp;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RegExp matching a GS1 EPCIS 2.0 `eventTimeZoneOffset`: the `pattern` the EPCIS JSON schema
|
|
3
|
+
* (https://ref.gs1.org/standards/epcis/epcis-json-schema.json, a normative artefact of EPCIS 2.0 /
|
|
4
|
+
* ISO/IEC 19987) gives for the field, verbatim: `^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$`.
|
|
5
|
+
*
|
|
6
|
+
* - The pattern is the JSON binding's. The XML binding's XSD types the same field as a bare
|
|
7
|
+
* `xsd:string` and gives no pattern.
|
|
8
|
+
* - The rule both bindings carry is the standard's prose, EPCIS Standard Release 2.0 §7.4.1
|
|
9
|
+
* (https://ref.gs1.org/standards/epcis/): the value "SHALL be a string consisting of the
|
|
10
|
+
* character '+' or the character '-', followed by two digits whose value is within the range
|
|
11
|
+
* 00 through 14 (inclusive), followed by a colon character ':', followed by two digits whose
|
|
12
|
+
* value is within the range 00 through 59 (inclusive), except that if the value of the first
|
|
13
|
+
* two digits is 14, the value of the second two digits must be 00." The pattern is that
|
|
14
|
+
* sentence as a regular expression.
|
|
15
|
+
* - `±HH:MM` from `-13:59` through `+13:59`, plus `±14:00`. GS1 published the grammar, so it is
|
|
16
|
+
* neither loosened nor tightened here: `-14:00` matches because the sign group is independent
|
|
17
|
+
* of the `14:00` alternative, and `-00:00` matches.
|
|
18
|
+
* - `Z` does not match: it is `eventTime`'s designator, and this field records the offset in
|
|
19
|
+
* force where the event happened. `+0200` (no colon) and `+02` (hours only) do not match.
|
|
20
|
+
* - Shape only. `parseEpcisEvent` reads the value through Temporal, and returns `-00:00` as
|
|
21
|
+
* `+00:00`. To check a value that may not be a string, use `isValidEpcisTimeZoneOffset`: for a
|
|
22
|
+
* string it gives this pattern's answer.
|
|
23
|
+
*
|
|
24
|
+
* Capture groups: 1 sign, 2 the hours-and-minutes or `14:00`, 3 hours, 4 minutes (3 and 4 are
|
|
25
|
+
* `undefined` for `14:00`).
|
|
26
|
+
*
|
|
27
|
+
* @example epcisTimeZoneOffset.test("-05:00") // true
|
|
28
|
+
* @example epcisTimeZoneOffset.test("+14:00") // true
|
|
29
|
+
* @example epcisTimeZoneOffset.test("+14:01") // false (past the range GS1 allows)
|
|
30
|
+
* @example epcisTimeZoneOffset.test("Z") // false (a designator, not an offset)
|
|
31
|
+
* @example epcisTimeZoneOffset.test("+0200") // false (no colon)
|
|
32
|
+
*/
|
|
33
|
+
export const epcisTimeZoneOffset = /^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$/;
|
|
34
|
+
/**
|
|
35
|
+
* RegExp matching a GS1 EPCIS 2.0 `eventTime` (and `recordTime`): the `DateTimeStamp` pattern of
|
|
36
|
+
* the EPCIS XSD (https://ref.gs1.org/standards/epcis/epcglobal-epcis-2_0.xsd, a normative
|
|
37
|
+
* artefact of EPCIS 2.0 / ISO/IEC 19987), verbatim and anchored.
|
|
38
|
+
*
|
|
39
|
+
* - The pattern is the XML binding's. The JSON schema types the same field as a string with
|
|
40
|
+
* `format: date-time` and gives no pattern, so this is the stricter of the two bindings.
|
|
41
|
+
* - A date-time with seconds required, an optional fraction of any length, then `Z` or an offset
|
|
42
|
+
* in the same range as `epcisTimeZoneOffset`.
|
|
43
|
+
* - GS1 published the grammar, so it is neither loosened nor tightened here: four-digit years
|
|
44
|
+
* only, upper-case `T` and `Z`, a colon in the offset, no space separator.
|
|
45
|
+
* - Shape only; calendar validity is Temporal's (`2023-02-29T00:00:00Z` matches and
|
|
46
|
+
* `Temporal.Instant.from` rejects it). To check that a string is a real `eventTime`, use
|
|
47
|
+
* `isValidEpcisEventTime`: this pattern also matches a day that does not exist and a fraction
|
|
48
|
+
* longer than nine digits.
|
|
49
|
+
*
|
|
50
|
+
* Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second, 7 fraction with its
|
|
51
|
+
* period (optional), 8 `Z` or the offset, 9 the offset, 10 sign, 11 hours-and-minutes or
|
|
52
|
+
* `14:00`, 12 hours, 13 minutes.
|
|
53
|
+
*
|
|
54
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00Z") // true
|
|
55
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00.123-05:00") // true
|
|
56
|
+
* @example epcisEventTime.test("2024-06-15T14:30Z") // false (seconds are required)
|
|
57
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00") // false (Z or an offset is required)
|
|
58
|
+
* @example epcisEventTime.test("2024-06-15T14:30:00+15:00") // false (offset past the range GS1 allows)
|
|
59
|
+
*/
|
|
60
|
+
export const epcisEventTime = /^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|(([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)))$/;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `
|
|
2
|
+
* RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttpDate` emits and
|
|
3
3
|
* the preferred HTTP-date form. Day, year, and time-of-day fields are all fixed-width per the
|
|
4
4
|
* grammar (unlike RFC 5322's leniently-sized day); the trailing "GMT" literal is mandatory,
|
|
5
5
|
* never a numeric offset.
|
|
6
6
|
*
|
|
7
7
|
* - **IMF-fixdate only.** RFC 9110 requires a recipient to accept all three HTTP-date formats;
|
|
8
|
-
* the obsolete rfc850-date and asctime-date do not match this pattern. `
|
|
8
|
+
* the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttpDate` reads all
|
|
9
9
|
* three.
|
|
10
|
-
* - The day name is not checked against the date; `
|
|
10
|
+
* - The day name is not checked against the date; `parseHttpDate` does check it.
|
|
11
|
+
* - To check that a string is a real HTTP-date, use `isValidHttpDate`: this pattern also matches
|
|
12
|
+
* a day that does not exist and an hour out of range.
|
|
11
13
|
*
|
|
12
14
|
* Capture groups: 1 day-of-week, 2 day, 3 month, 4 year, 5 hour, 6 minute, 7 second.
|
|
13
15
|
*
|
|
@@ -15,6 +17,6 @@
|
|
|
15
17
|
* @example httpDate.test("Jun 09 2021 10:18:14 GMT") // false (missing day-of-week)
|
|
16
18
|
* @example httpDate.test("Wed, 9 Jun 2021 10:18:14 GMT") // false (single-digit day)
|
|
17
19
|
* @example httpDate.test("Wed, 09 Jun 2021 10:18:14 +0000") // false (numeric offset)
|
|
18
|
-
* @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date:
|
|
20
|
+
* @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttpDate reads it)
|
|
19
21
|
*/
|
|
20
22
|
export declare const httpDate: RegExp;
|
package/dist/regex/http-date.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `
|
|
2
|
+
* RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttpDate` emits and
|
|
3
3
|
* the preferred HTTP-date form. Day, year, and time-of-day fields are all fixed-width per the
|
|
4
4
|
* grammar (unlike RFC 5322's leniently-sized day); the trailing "GMT" literal is mandatory,
|
|
5
5
|
* never a numeric offset.
|
|
6
6
|
*
|
|
7
7
|
* - **IMF-fixdate only.** RFC 9110 requires a recipient to accept all three HTTP-date formats;
|
|
8
|
-
* the obsolete rfc850-date and asctime-date do not match this pattern. `
|
|
8
|
+
* the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttpDate` reads all
|
|
9
9
|
* three.
|
|
10
|
-
* - The day name is not checked against the date; `
|
|
10
|
+
* - The day name is not checked against the date; `parseHttpDate` does check it.
|
|
11
|
+
* - To check that a string is a real HTTP-date, use `isValidHttpDate`: this pattern also matches
|
|
12
|
+
* a day that does not exist and an hour out of range.
|
|
11
13
|
*
|
|
12
14
|
* Capture groups: 1 day-of-week, 2 day, 3 month, 4 year, 5 hour, 6 minute, 7 second.
|
|
13
15
|
*
|
|
@@ -15,6 +17,6 @@
|
|
|
15
17
|
* @example httpDate.test("Jun 09 2021 10:18:14 GMT") // false (missing day-of-week)
|
|
16
18
|
* @example httpDate.test("Wed, 9 Jun 2021 10:18:14 GMT") // false (single-digit day)
|
|
17
19
|
* @example httpDate.test("Wed, 09 Jun 2021 10:18:14 +0000") // false (numeric offset)
|
|
18
|
-
* @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date:
|
|
20
|
+
* @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttpDate reads it)
|
|
19
21
|
*/
|
|
20
22
|
export const httpDate = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/;
|
package/dist/regex/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./calendar-date.js";
|
|
|
3
3
|
export * from "./calendar-zoned-date-time.js";
|
|
4
4
|
export * from "./date.js";
|
|
5
5
|
export * from "./date-time.js";
|
|
6
|
+
export * from "./epcis.js";
|
|
6
7
|
export * from "./http-date.js";
|
|
7
8
|
export * from "./leap-second.js";
|
|
8
9
|
export * from "./nanoseconds.js";
|
package/dist/regex/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./calendar-date.js";
|
|
|
4
4
|
export * from "./calendar-zoned-date-time.js";
|
|
5
5
|
export * from "./date.js";
|
|
6
6
|
export * from "./date-time.js";
|
|
7
|
+
export * from "./epcis.js";
|
|
7
8
|
export * from "./http-date.js";
|
|
8
9
|
export * from "./leap-second.js";
|
|
9
10
|
export * from "./nanoseconds.js";
|
package/dist/regex/rfc-2822.d.ts
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* `parseRfc2822` reads the full receiver grammar — use it to decode a header, and this
|
|
14
14
|
* pattern only to check that a string has the strict shape.
|
|
15
15
|
* - The day-of-week is not checked against the date; `parseRfc2822` does check it.
|
|
16
|
+
* - To check that a string is a real RFC 5322 date-time, use `isValidRfc2822DateTime`: this
|
|
17
|
+
* pattern also matches a day that does not exist and an hour or zone out of range.
|
|
16
18
|
*
|
|
17
19
|
* Capture groups: 1 day-of-week (optional, for weekday-prefixed form), 2 day, 3 month,
|
|
18
20
|
* 4 year, 5 hour, 6 minute, 7 second (optional), 8 zone.
|
package/dist/regex/rfc-2822.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* `parseRfc2822` reads the full receiver grammar — use it to decode a header, and this
|
|
14
14
|
* pattern only to check that a string has the strict shape.
|
|
15
15
|
* - The day-of-week is not checked against the date; `parseRfc2822` does check it.
|
|
16
|
+
* - To check that a string is a real RFC 5322 date-time, use `isValidRfc2822DateTime`: this
|
|
17
|
+
* pattern also matches a day that does not exist and an hour or zone out of range.
|
|
16
18
|
*
|
|
17
19
|
* Capture groups: 1 day-of-week (optional, for weekday-prefixed form), 2 day, 3 month,
|
|
18
20
|
* 4 year, 5 hour, 6 minute, 7 second (optional), 8 zone.
|
package/dist/regex/rfc-3339.d.ts
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* `:59`), and the fraction is capped at 9 digits (`time-secfrac` is `1*DIGIT`; Temporal keeps
|
|
12
12
|
* nanoseconds).
|
|
13
13
|
* - Shape-only validation; real calendar validation is delegated to
|
|
14
|
-
* `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`.
|
|
14
|
+
* `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`. To check that a
|
|
15
|
+
* string is a real RFC 3339 date-time, use `isValidRfc3339DateTime`: this pattern also matches
|
|
16
|
+
* a day that does not exist, such as 29 February 2023.
|
|
15
17
|
* - Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second,
|
|
16
18
|
* 7 fractional (optional), 8 offset.
|
|
17
19
|
*
|
package/dist/regex/rfc-3339.js
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* `:59`), and the fraction is capped at 9 digits (`time-secfrac` is `1*DIGIT`; Temporal keeps
|
|
12
12
|
* nanoseconds).
|
|
13
13
|
* - Shape-only validation; real calendar validation is delegated to
|
|
14
|
-
* `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`.
|
|
14
|
+
* `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`. To check that a
|
|
15
|
+
* string is a real RFC 3339 date-time, use `isValidRfc3339DateTime`: this pattern also matches
|
|
16
|
+
* a day that does not exist, such as 29 February 2023.
|
|
15
17
|
* - Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second,
|
|
16
18
|
* 7 fractional (optional), 8 offset.
|
|
17
19
|
*
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
* - SECOND `60`–`61` does not match, although Table 10 allows them: GMT rejects leap seconds
|
|
17
17
|
* because Temporal would read one as `:59`.
|
|
18
18
|
* - Shape-only validation; the calendar date is checked by `Temporal.PlainDateTime.from` in
|
|
19
|
-
* `
|
|
19
|
+
* `parseSqlDateTime`. To check that a string is a real SQL timestamp literal, use
|
|
20
|
+
* `isValidSqlDateTime`: this pattern also matches a day that does not exist, such as 30 February.
|
|
20
21
|
*
|
|
21
22
|
* Capture groups: 1 month, 2 day, 3 hour. The year, minute, second and fraction are not
|
|
22
23
|
* captured.
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
* - SECOND `60`–`61` does not match, although Table 10 allows them: GMT rejects leap seconds
|
|
17
17
|
* because Temporal would read one as `:59`.
|
|
18
18
|
* - Shape-only validation; the calendar date is checked by `Temporal.PlainDateTime.from` in
|
|
19
|
-
* `
|
|
19
|
+
* `parseSqlDateTime`. To check that a string is a real SQL timestamp literal, use
|
|
20
|
+
* `isValidSqlDateTime`: this pattern also matches a day that does not exist, such as 30 February.
|
|
20
21
|
*
|
|
21
22
|
* Capture groups: 1 month, 2 day, 3 hour. The year, minute, second and fraction are not
|
|
22
23
|
* captured.
|