@northguild/gmt 1.19.0 → 1.20.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 +12 -12
- package/dist/calendar/business/businessDaysBetween.d.ts +2 -2
- package/dist/calendar/business/businessDaysBetween.js +11 -35
- package/dist/calendar/business/mergeCalendars.d.ts +1 -1
- package/dist/calendar/business/mergeCalendars.js +8 -9
- package/dist/calendar/business/nextBusinessDay.d.ts +2 -2
- package/dist/calendar/business/nextBusinessDay.js +2 -2
- package/dist/calendar/business/previousBusinessDay.d.ts +2 -2
- package/dist/calendar/business/previousBusinessDay.js +2 -2
- package/dist/calendar/business/rollDate.d.ts +3 -3
- package/dist/calendar/business/rollDate.js +10 -43
- package/dist/calendar/calculate/bucketRange.d.ts +9 -9
- package/dist/calendar/calculate/bucketRange.js +9 -9
- package/dist/calendar/calculate/floorToZone.d.ts +2 -2
- package/dist/calendar/calculate/floorToZone.js +1 -1
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +50 -40
- package/dist/calendar/calculate/getFiscalPeriod.js +78 -57
- package/dist/calendar/calculate/getQuarter.d.ts +26 -21
- package/dist/calendar/calculate/getQuarter.js +48 -19
- package/dist/calendar/hours/addOperatingTime.d.ts +3 -3
- package/dist/calendar/hours/addOperatingTime.js +3 -3
- package/dist/calendar/hours/isOpenAt.d.ts +3 -3
- package/dist/calendar/hours/isOpenAt.js +3 -3
- package/dist/calendar/hours/nextCloseAt.d.ts +2 -2
- package/dist/calendar/hours/nextCloseAt.js +2 -2
- package/dist/calendar/hours/nextOpenAt.d.ts +3 -3
- package/dist/calendar/hours/nextOpenAt.js +3 -3
- package/dist/calendar/hours/operatingIntervals.d.ts +2 -2
- package/dist/calendar/hours/operatingIntervals.js +4 -6
- package/dist/calendar/hours/operatingTimeBetween.d.ts +3 -3
- package/dist/calendar/hours/operatingTimeBetween.js +6 -8
- package/dist/calendar/hours/recurringWindows.d.ts +5 -5
- package/dist/calendar/hours/recurringWindows.js +9 -10
- package/dist/calendar/index.d.ts +1 -1
- package/dist/calendar/index.js +2 -2
- package/dist/calendar/validate/index.d.ts +3 -0
- package/dist/calendar/validate/index.js +3 -0
- package/dist/calendar/validate/isValidFiscalCalendar.d.ts +23 -0
- package/dist/calendar/validate/isValidFiscalCalendar.js +44 -0
- package/dist/calendar/validate/isValidFiscalExtraWeek.d.ts +19 -0
- package/dist/calendar/validate/isValidFiscalExtraWeek.js +23 -0
- package/dist/calendar/validate/isValidFiscalPattern.d.ts +7 -7
- package/dist/calendar/validate/isValidFiscalPattern.js +7 -7
- package/dist/calendar/validate/isValidFiscalYearLabel.d.ts +20 -0
- package/dist/calendar/validate/isValidFiscalYearLabel.js +24 -0
- package/dist/calendar/validate/isValidRollConvention.js +2 -10
- package/dist/calendar/validate/isValidZoneBucketUnit.d.ts +1 -1
- package/dist/duration/calculate/absDuration.js +1 -1
- package/dist/duration/calculate/addDuration.js +1 -1
- package/dist/duration/calculate/durationFromUnits.js +1 -1
- package/dist/duration/calculate/getDurationSign.js +1 -1
- package/dist/duration/calculate/getDurationUnit.d.ts +1 -1
- package/dist/duration/calculate/getDurationUnit.js +1 -1
- package/dist/duration/calculate/negateDuration.js +1 -1
- package/dist/duration/calculate/subtractDuration.js +1 -1
- package/dist/duration/calculate/totalDuration.d.ts +4 -4
- package/dist/duration/calculate/totalDuration.js +4 -4
- package/dist/duration/calculate/totalUnits.js +1 -1
- package/dist/duration/compare/compareDurations.d.ts +3 -3
- package/dist/duration/compare/compareDurations.js +3 -3
- package/dist/duration/format/formatDuration.d.ts +9 -9
- package/dist/duration/format/formatDuration.js +14 -13
- package/dist/duration/index.d.ts +1 -1
- package/dist/duration/index.js +2 -2
- package/dist/duration/normalize/normalizeDuration.d.ts +3 -3
- package/dist/duration/normalize/normalizeDuration.js +3 -3
- package/dist/duration/parse/parseDuration.d.ts +1 -1
- package/dist/duration/parse/parseDuration.js +1 -1
- package/dist/duration/validate/isValidDuration.js +2 -11
- package/dist/gnss/convert/gnssToUtc.d.ts +24 -0
- package/dist/gnss/convert/gnssToUtc.js +39 -0
- package/dist/gnss/convert/gnssWeekToUtc.d.ts +53 -0
- package/dist/gnss/convert/gnssWeekToUtc.js +80 -0
- package/dist/gnss/convert/index.d.ts +6 -0
- package/dist/gnss/convert/index.js +6 -0
- package/dist/gnss/convert/rinexWeekToUtc.d.ts +34 -0
- package/dist/gnss/convert/rinexWeekToUtc.js +57 -0
- package/dist/gnss/convert/utcToGnss.d.ts +38 -0
- package/dist/gnss/convert/utcToGnss.js +53 -0
- package/dist/gnss/convert/utcToGnssWeek.d.ts +24 -0
- package/dist/gnss/convert/utcToGnssWeek.js +40 -0
- package/dist/gnss/convert/utcToRinexWeek.d.ts +19 -0
- package/dist/gnss/convert/utcToRinexWeek.js +45 -0
- package/dist/gnss/index.d.ts +2 -0
- package/dist/gnss/index.js +3 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/instant/convert/classifyLocal.d.ts +4 -4
- package/dist/instant/convert/classifyLocal.js +8 -19
- package/dist/instant/convert/fromOffsetInstant.d.ts +4 -4
- package/dist/instant/convert/fromOffsetInstant.js +5 -5
- package/dist/instant/convert/resolveLocal.d.ts +9 -9
- package/dist/instant/convert/resolveLocal.js +9 -9
- package/dist/instant/convert/toOffsetInstant.d.ts +11 -11
- package/dist/instant/convert/toOffsetInstant.js +11 -28
- package/dist/instant/index.d.ts +1 -1
- package/dist/instant/index.js +2 -2
- package/dist/instant/validate/isValidUtcOffset.d.ts +1 -1
- package/dist/instant/validate/isValidUtcOffset.js +1 -1
- package/dist/intermodal/calculate/billingTimeline.js +1 -1
- package/dist/intermodal/calculate/chargeableDays.d.ts +12 -12
- package/dist/intermodal/calculate/chargeableDays.js +17 -16
- package/dist/intermodal/calculate/demurrageClock.d.ts +1 -1
- package/dist/intermodal/calculate/demurrageClock.js +2 -2
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +10 -10
- package/dist/intermodal/calculate/freeTimeExpiry.js +19 -15
- package/dist/intermodal/calculate/multimodalETA.d.ts +1 -1
- package/dist/intermodal/calculate/multimodalETA.js +2 -2
- package/dist/intermodal/format/bolTimestamp.d.ts +6 -6
- package/dist/intermodal/format/bolTimestamp.js +6 -6
- package/dist/intermodal/format/formatEpcisEvent.d.ts +1 -1
- package/dist/intermodal/format/formatEpcisEvent.js +2 -2
- package/dist/intermodal/index.d.ts +1 -1
- package/dist/intermodal/index.js +2 -2
- package/dist/intermodal/parse/parseEpcisEvent.js +1 -1
- package/dist/intermodal/validate/isValidEpcisEventTime.js +1 -1
- package/dist/internal/advanceToWeekday.d.ts +1 -1
- package/dist/internal/businessCalendar.d.ts +28 -12
- package/dist/internal/businessCalendar.js +129 -118
- package/dist/internal/businessDayValues.js +1 -1
- package/dist/internal/calendarDatePairPolicy.d.ts +1 -1
- package/dist/internal/calendarDateString.d.ts +1 -1
- package/dist/internal/calendarDateString.js +1 -1
- package/dist/internal/calendarSystemIds.js +1 -1
- package/dist/internal/calendarValueOfDate.js +1 -1
- package/dist/internal/calendarZonedPairPolicy.d.ts +1 -1
- package/dist/internal/calendarZonedString.d.ts +3 -3
- package/dist/internal/calendarZonedString.js +4 -4
- package/dist/internal/compareUnixEpochs.js +1 -1
- package/dist/internal/cutoffAtResolved.d.ts +62 -0
- package/dist/internal/cutoffAtResolved.js +162 -0
- package/dist/internal/cycleFieldValue.d.ts +0 -2
- package/dist/internal/cycleFieldValue.js +0 -2
- package/dist/internal/dateTimeUnitHelpers.d.ts +1 -1
- package/dist/internal/dateUnitHelpers.d.ts +1 -1
- package/dist/internal/daylightTime.d.ts +1 -1
- package/dist/internal/differenceRecord.d.ts +1 -1
- package/dist/internal/durationUntilString.d.ts +1 -1
- package/dist/internal/durationUntilString.js +1 -1
- package/dist/internal/dutyEngine.d.ts +6 -6
- package/dist/internal/dutyEngine.js +206 -197
- package/dist/internal/dutyPeriods.d.ts +1 -1
- package/dist/internal/dutyPeriods.js +8 -2
- package/dist/internal/dutyRules.d.ts +2 -1
- package/dist/internal/dutyRules.js +1 -1
- package/dist/internal/dutyRunIndex.d.ts +150 -0
- package/dist/internal/dutyRunIndex.js +398 -0
- package/dist/internal/earlierOccurrence.d.ts +41 -0
- package/dist/internal/earlierOccurrence.js +57 -0
- package/dist/internal/ediDateTimeFields.js +1 -1
- package/dist/internal/ediDateTimeWriter.js +1 -1
- package/dist/internal/englishCalendarNames.d.ts +1 -1
- package/dist/internal/epochDay.d.ts +41 -0
- package/dist/internal/epochDay.js +129 -0
- package/dist/internal/exactDuration.js +1 -1
- package/dist/internal/exactMoment.d.ts +4 -4
- package/dist/internal/exactMoment.js +5 -5
- package/dist/internal/fiscalCalendar.d.ts +41 -7
- package/dist/internal/fiscalCalendar.js +77 -9
- package/dist/internal/foreignEpochs.d.ts +5 -0
- package/dist/internal/foreignEpochs.js +5 -0
- package/dist/internal/formatCalendarDays.d.ts +4 -4
- package/dist/internal/formatCalendarDays.js +6 -5
- package/dist/internal/formatDateInCalendar.d.ts +1 -1
- package/dist/internal/formatRelativeDuration.d.ts +7 -7
- package/dist/internal/formatRelativeDuration.js +8 -7
- package/dist/internal/formatterCache.d.ts +40 -0
- package/dist/internal/formatterCache.js +181 -0
- package/dist/internal/freeTimeLedger.d.ts +31 -43
- package/dist/internal/freeTimeLedger.js +322 -30
- package/dist/internal/getLocaleWeekYearBounds.d.ts +1 -1
- package/dist/internal/gnssTimeScales.d.ts +53 -0
- package/dist/internal/gnssTimeScales.js +128 -0
- package/dist/internal/gnssWeek.d.ts +92 -0
- package/dist/internal/gnssWeek.js +212 -0
- package/dist/internal/halfOpenIntervals.d.ts +1 -1
- package/dist/internal/halfOpenIntervals.js +1 -1
- package/dist/internal/hasCalendarAnnotation.d.ts +3 -3
- package/dist/internal/hasCalendarAnnotation.js +3 -3
- package/dist/internal/hourDurationString.js +1 -1
- package/dist/internal/httpDateFields.js +1 -1
- package/dist/internal/index.d.ts +9 -3
- package/dist/internal/index.js +9 -3
- package/dist/internal/inputChecks.d.ts +53 -0
- package/dist/internal/inputChecks.js +132 -0
- package/dist/internal/instantFormatOptions.d.ts +1 -1
- package/dist/internal/instantFormatOptions.js +4 -8
- package/dist/internal/instantIntervalText.js +1 -1
- package/dist/internal/instantNanoseconds.d.ts +2 -2
- package/dist/internal/instantNanoseconds.js +2 -2
- package/dist/internal/intervalCountHelpers.d.ts +1 -1
- package/dist/internal/isoStringBody.d.ts +2 -2
- package/dist/internal/isoStringBody.js +2 -2
- package/dist/internal/joinDateTimeConnector.js +3 -2
- package/dist/internal/leapSeconds.d.ts +63 -0
- package/dist/internal/leapSeconds.js +162 -0
- package/dist/internal/localeWeekInfo.d.ts +1 -1
- package/dist/internal/localeWeekInfo.js +1 -1
- package/dist/internal/monthGridWeekRow.d.ts +1 -1
- package/dist/internal/normalizeDateTime.d.ts +2 -1
- package/dist/internal/normalizeDateTime.js +3 -2
- package/dist/internal/normalizeTimeZone.d.ts +1 -1
- package/dist/internal/normalizeTimeZone.js +1 -1
- package/dist/internal/offsetTimeline.d.ts +56 -0
- package/dist/internal/offsetTimeline.js +166 -0
- package/dist/internal/operatingSchedule.d.ts +28 -32
- package/dist/internal/operatingSchedule.js +538 -176
- package/dist/internal/patternToken.js +10 -7
- package/dist/internal/plainDateAdd.d.ts +1 -1
- package/dist/internal/plainDateAdd.js +1 -1
- package/dist/internal/plainDateUntil.d.ts +1 -1
- package/dist/internal/plainDateUntil.js +1 -1
- package/dist/internal/readSetFields.js +1 -1
- package/dist/internal/resolveDurationRelativeTo.d.ts +1 -1
- package/dist/internal/resolveDurationRelativeTo.js +1 -1
- package/dist/internal/resolveLocale.d.ts +2 -2
- package/dist/internal/resolveLocale.js +2 -2
- package/dist/internal/resolveManualRoundingOptions.d.ts +1 -1
- package/dist/internal/resolveUnixIntervalPair.d.ts +1 -1
- package/dist/internal/rinexWeek.d.ts +22 -0
- package/dist/internal/rinexWeek.js +30 -0
- package/dist/internal/rollBusinessDate.d.ts +15 -0
- package/dist/internal/rollBusinessDate.js +46 -0
- package/dist/internal/splitStep.d.ts +1 -1
- package/dist/internal/splitStep.js +1 -1
- package/dist/internal/startOrEndOfUnix.d.ts +1 -1
- package/dist/internal/startOrEndOfUtc.d.ts +1 -1
- package/dist/internal/startOrEndOfUtc.js +1 -1
- package/dist/internal/startOrEndOfZoned.d.ts +1 -1
- package/dist/internal/temporal.d.ts +5 -0
- package/dist/internal/temporal.js +5 -0
- package/dist/internal/temporalCompat/calendarDateArithmetic.d.ts +1 -1
- package/dist/internal/temporalCompat/calendarDateFromFields.d.ts +1 -1
- package/dist/internal/temporalCompat/calendarDateFromFields.js +1 -1
- package/dist/internal/temporalCompat/calendarFields.d.ts +1 -1
- package/dist/internal/temporalCompat/capabilities.d.ts +27 -5
- package/dist/internal/temporalCompat/capabilities.js +28 -4
- package/dist/internal/temporalCompat/fieldSearch.d.ts +1 -1
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/fixedDay.d.ts +1 -1
- package/dist/internal/temporalCompat/fixedDay.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/largeMonthSpan.js +1 -1
- package/dist/internal/temporalCompat/nonIsoArithmetic.d.ts +1 -1
- package/dist/internal/temporalCompat/nonIsoArithmetic.js +1 -1
- package/dist/internal/temporalCompat/probeRepros.d.ts +35 -0
- package/dist/internal/temporalCompat/probeRepros.js +571 -0
- package/dist/internal/temporalCompat/readArithmeticModel.js +2 -2
- package/dist/internal/temporalCompat/repros.d.ts +3 -10
- package/dist/internal/temporalCompat/repros.js +13 -520
- package/dist/internal/timeScaleString.d.ts +47 -0
- package/dist/internal/timeScaleString.js +86 -0
- package/dist/internal/toInstantFromUtc.d.ts +1 -1
- package/dist/internal/toInstantFromUtc.js +1 -1
- package/dist/internal/unixEpochValue.d.ts +1 -1
- package/dist/internal/unixEpochValue.js +1 -1
- package/dist/internal/unixFormatReference.d.ts +1 -1
- package/dist/internal/unixFormatReference.js +1 -1
- package/dist/internal/unixWallClock.d.ts +1 -1
- package/dist/internal/utcOffsetString.d.ts +16 -0
- package/dist/internal/utcOffsetString.js +31 -1
- package/dist/internal/utcReading.d.ts +59 -0
- package/dist/internal/utcReading.js +113 -0
- package/dist/internal/utcWallClock.d.ts +1 -1
- package/dist/internal/utcWallClock.js +1 -1
- package/dist/internal/validatedZones.d.ts +20 -0
- package/dist/internal/validatedZones.js +33 -0
- package/dist/internal/wallClockAtOffset.d.ts +1 -1
- package/dist/internal/yearWindowStart.js +1 -1
- package/dist/internal/zoneBucketCap.d.ts +1 -1
- package/dist/internal/zoneBucketCap.js +2 -2
- package/dist/internal/zoneFrame.d.ts +4 -4
- package/dist/internal/zoneFrame.js +4 -4
- package/dist/internal/zonedBucket.d.ts +2 -2
- package/dist/internal/zonedBucket.js +92 -21
- package/dist/internal/zonedFormatReference.d.ts +1 -1
- package/dist/internal/zonedFormatReference.js +1 -1
- package/dist/internal/zonedLocalDates.d.ts +1 -1
- package/dist/internal/zonedLocalDates.js +22 -19
- package/dist/internal/zonedNowUnitValue.d.ts +1 -1
- package/dist/internal/zonedNowUnitValue.js +1 -1
- package/dist/internal/zonedTransitionSearch.d.ts +2 -0
- package/dist/internal/zonedTransitionSearch.js +165 -16
- package/dist/internal/zonedWallClock.d.ts +15 -4
- package/dist/internal/zonedWallClock.js +34 -6
- package/dist/internal/zonedWallClockDifference.d.ts +1 -1
- package/dist/internal/zonedWallClockDifference.js +2 -2
- package/dist/internal/zonedWallClockOperations.d.ts +2 -2
- package/dist/internal/zonedWallClockOperations.js +51 -6
- package/dist/internal/zonelessCalendarDate.d.ts +1 -1
- package/dist/internal/zonelessCalendarDate.js +1 -1
- package/dist/interval/index.d.ts +1 -1
- package/dist/interval/index.js +2 -2
- package/dist/plain/calculate/addBusinessDays.d.ts +2 -2
- package/dist/plain/calculate/addBusinessDays.js +2 -2
- package/dist/plain/calculate/addDateTime.js +1 -1
- package/dist/plain/calculate/addTime.js +1 -1
- package/dist/plain/calculate/clampDate.js +1 -1
- package/dist/plain/calculate/closestDateTo.js +1 -1
- package/dist/plain/calculate/cycleDate.js +1 -1
- package/dist/plain/calculate/cycleDateTime.js +1 -1
- package/dist/plain/calculate/cycleTime.js +1 -1
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +1 -1
- package/dist/plain/calculate/endOfDate.js +1 -1
- package/dist/plain/calculate/endOfDateTime.d.ts +1 -1
- package/dist/plain/calculate/endOfDateTime.js +1 -1
- package/dist/plain/calculate/endOfQuarterForDate.js +1 -1
- package/dist/plain/calculate/endOfQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/endOfTime.d.ts +1 -1
- package/dist/plain/calculate/endOfTime.js +1 -1
- package/dist/plain/calculate/getDayOfYear.js +1 -1
- package/dist/plain/calculate/getDaysInMonth.js +1 -1
- package/dist/plain/calculate/getDaysInYear.js +1 -1
- package/dist/plain/calculate/getLargestDateDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLargestDateTimeDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLargestTimeDurationUnit.d.ts +1 -1
- package/dist/plain/calculate/getLocaleDayOfWeek.d.ts +6 -6
- package/dist/plain/calculate/getLocaleDayOfWeek.js +7 -7
- package/dist/plain/calculate/getLocaleEndOfWeek.d.ts +4 -4
- package/dist/plain/calculate/getLocaleEndOfWeek.js +5 -5
- package/dist/plain/calculate/getLocaleStartOfWeek.d.ts +5 -5
- package/dist/plain/calculate/getLocaleStartOfWeek.js +6 -6
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +10 -10
- package/dist/plain/calculate/getLocaleWeekYear.js +11 -11
- package/dist/plain/calculate/getQuarterForDate.js +1 -1
- package/dist/plain/calculate/getQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/getWeekNumber.js +1 -1
- package/dist/plain/calculate/getWeekOfMonth.d.ts +10 -14
- package/dist/plain/calculate/getWeekOfMonth.js +11 -15
- package/dist/plain/calculate/getWeekYear.js +1 -1
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +7 -7
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +8 -8
- package/dist/plain/calculate/getWeeksInMonth.d.ts +8 -11
- package/dist/plain/calculate/getWeeksInMonth.js +9 -12
- package/dist/plain/calculate/getWeeksInYear.js +1 -1
- package/dist/plain/calculate/maxDate.js +1 -1
- package/dist/plain/calculate/maxDateTime.js +1 -1
- package/dist/plain/calculate/maxTime.js +1 -1
- package/dist/plain/calculate/minDate.js +1 -1
- package/dist/plain/calculate/minDateTime.js +1 -1
- package/dist/plain/calculate/minTime.js +1 -1
- package/dist/plain/calculate/nextWeekday.d.ts +14 -12
- package/dist/plain/calculate/nextWeekday.js +15 -13
- package/dist/plain/calculate/previousWeekday.d.ts +14 -12
- package/dist/plain/calculate/previousWeekday.js +15 -13
- package/dist/plain/calculate/roundDate.d.ts +1 -1
- package/dist/plain/calculate/roundDate.js +1 -1
- package/dist/plain/calculate/roundDateTime.d.ts +1 -1
- package/dist/plain/calculate/roundDateTime.js +1 -1
- package/dist/plain/calculate/roundTime.d.ts +1 -1
- package/dist/plain/calculate/roundTime.js +1 -1
- package/dist/plain/calculate/setDate.d.ts +1 -1
- package/dist/plain/calculate/setDate.js +1 -1
- package/dist/plain/calculate/setDateTime.d.ts +1 -1
- package/dist/plain/calculate/setDateTime.js +1 -1
- package/dist/plain/calculate/setTime.d.ts +1 -1
- package/dist/plain/calculate/setTime.js +1 -1
- package/dist/plain/calculate/sortDateTimes.js +1 -1
- package/dist/plain/calculate/sortDates.js +1 -1
- package/dist/plain/calculate/sortTimes.js +1 -1
- package/dist/plain/calculate/startOfDate.d.ts +1 -1
- package/dist/plain/calculate/startOfDate.js +1 -1
- package/dist/plain/calculate/startOfDateTime.d.ts +1 -1
- package/dist/plain/calculate/startOfDateTime.js +1 -1
- package/dist/plain/calculate/startOfQuarterForDate.js +1 -1
- package/dist/plain/calculate/startOfQuarterForDateTime.js +1 -1
- package/dist/plain/calculate/startOfTime.d.ts +1 -1
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractBusinessDays.d.ts +2 -2
- package/dist/plain/calculate/subtractBusinessDays.js +2 -2
- package/dist/plain/calculate/subtractDate.js +1 -1
- package/dist/plain/calculate/subtractDateTime.js +1 -1
- package/dist/plain/calculate/subtractTime.js +1 -1
- package/dist/plain/calculate/weekOfYearForDate.js +1 -1
- package/dist/plain/calculate/weekOfYearForDateTime.js +1 -1
- package/dist/plain/chop/chopDate.js +1 -1
- package/dist/plain/chop/chopMilliseconds.js +1 -1
- package/dist/plain/chop/chopSeconds.js +1 -1
- package/dist/plain/chop/chopTime.js +1 -1
- package/dist/plain/compare/areDateTimesEqual.js +1 -1
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +2 -4
- package/dist/plain/compare/areDateTimesEqualBy.js +2 -4
- package/dist/plain/compare/areDatesEqual.js +1 -1
- package/dist/plain/compare/areDatesEqualBy.d.ts +5 -5
- package/dist/plain/compare/areDatesEqualBy.js +5 -5
- package/dist/plain/compare/areTimesEqual.js +1 -1
- package/dist/plain/compare/isAfterDate.js +1 -1
- package/dist/plain/compare/isAfterDateTime.js +1 -1
- package/dist/plain/compare/isAfterTime.js +1 -1
- package/dist/plain/compare/isBeforeDate.js +1 -1
- package/dist/plain/compare/isBeforeDateTime.js +1 -1
- package/dist/plain/compare/isBeforeTime.js +1 -1
- package/dist/plain/compare/isBetweenDate.js +1 -1
- package/dist/plain/compare/isBetweenDateTime.js +1 -1
- package/dist/plain/compare/isBetweenTime.js +1 -1
- package/dist/plain/compare/isBusinessDay.d.ts +2 -2
- package/dist/plain/compare/isBusinessDay.js +3 -3
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +8 -6
- package/dist/plain/compare/isThisUnit.js +7 -5
- package/dist/plain/compare/isWeekend.d.ts +5 -5
- package/dist/plain/compare/isWeekend.js +6 -6
- package/dist/plain/format/formatCalendar.d.ts +3 -5
- package/dist/plain/format/formatCalendar.js +10 -9
- package/dist/plain/format/formatDate.d.ts +4 -4
- package/dist/plain/format/formatDate.js +8 -7
- package/dist/plain/format/formatDateRange.d.ts +4 -4
- package/dist/plain/format/formatDateRange.js +8 -7
- package/dist/plain/format/formatDateTime.d.ts +4 -4
- package/dist/plain/format/formatDateTime.js +8 -7
- package/dist/plain/format/formatDateTimeRange.d.ts +4 -4
- package/dist/plain/format/formatDateTimeRange.js +8 -7
- package/dist/plain/format/formatDateTimeToParts.d.ts +6 -6
- package/dist/plain/format/formatDateTimeToParts.js +10 -9
- package/dist/plain/format/formatDateToParts.d.ts +6 -6
- package/dist/plain/format/formatDateToParts.js +10 -9
- package/dist/plain/format/formatRelativeDate.d.ts +3 -3
- package/dist/plain/format/formatRelativeDate.js +4 -4
- package/dist/plain/format/formatRelativeDateTime.d.ts +3 -3
- package/dist/plain/format/formatRelativeDateTime.js +4 -4
- package/dist/plain/format/formatRelativeTime.d.ts +3 -3
- package/dist/plain/format/formatRelativeTime.js +4 -4
- package/dist/plain/format/formatSqlDateTime.js +1 -1
- package/dist/plain/format/formatTime.d.ts +4 -4
- package/dist/plain/format/formatTime.js +8 -7
- package/dist/plain/get/getDay.js +1 -1
- package/dist/plain/get/getDayOfWeek.js +1 -1
- package/dist/plain/get/getHour.js +1 -1
- package/dist/plain/get/getMicrosecond.js +1 -1
- package/dist/plain/get/getMillisecond.js +1 -1
- package/dist/plain/get/getMinute.js +1 -1
- package/dist/plain/get/getMonth.js +1 -1
- package/dist/plain/get/getNanosecond.js +1 -1
- package/dist/plain/get/getNow.js +1 -1
- package/dist/plain/get/getNowUnit.js +1 -1
- package/dist/plain/get/getSecond.js +1 -1
- package/dist/plain/get/getToday.js +1 -1
- package/dist/plain/get/getWeekOfYear.js +1 -1
- package/dist/plain/get/getYear.js +1 -1
- package/dist/plain/index.d.ts +1 -1
- package/dist/plain/index.js +2 -2
- package/dist/plain/interval/intervalAbutsDate.d.ts +1 -2
- package/dist/plain/interval/intervalAbutsDate.js +2 -3
- package/dist/plain/interval/intervalAbutsDateTime.js +1 -1
- package/dist/plain/interval/intervalAbutsTime.js +1 -1
- package/dist/plain/interval/intervalContainsDate.d.ts +1 -1
- package/dist/plain/interval/intervalContainsDate.js +2 -2
- package/dist/plain/interval/intervalContainsDateTime.js +1 -1
- package/dist/plain/interval/intervalContainsTime.js +1 -1
- package/dist/plain/interval/intervalCountDate.js +1 -1
- package/dist/plain/interval/intervalCountDateTime.js +1 -1
- package/dist/plain/interval/intervalCountTime.js +1 -1
- package/dist/plain/interval/intervalDifferenceDate.d.ts +1 -1
- package/dist/plain/interval/intervalDifferenceDate.js +2 -2
- package/dist/plain/interval/intervalDifferenceDateTime.js +1 -1
- package/dist/plain/interval/intervalDifferenceTime.js +1 -1
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +3 -3
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -3
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +1 -1
- package/dist/plain/interval/intervalDivideEquallyTime.js +1 -1
- package/dist/plain/interval/intervalEngulfsDate.d.ts +1 -1
- package/dist/plain/interval/intervalEngulfsDate.js +2 -2
- package/dist/plain/interval/intervalEngulfsDateTime.js +1 -1
- package/dist/plain/interval/intervalEngulfsTime.js +1 -1
- package/dist/plain/interval/intervalFromDurationDate.js +1 -1
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -1
- package/dist/plain/interval/intervalFromDurationTime.js +1 -1
- package/dist/plain/interval/intervalIntersectionDate.d.ts +1 -1
- package/dist/plain/interval/intervalIntersectionDate.js +2 -2
- package/dist/plain/interval/intervalIntersectionDateTime.js +1 -1
- package/dist/plain/interval/intervalIntersectionTime.js +1 -1
- package/dist/plain/interval/intervalLengthDateTime.js +1 -1
- package/dist/plain/interval/intervalLengthTime.js +1 -1
- package/dist/plain/interval/intervalOverlappingDaysDate.js +1 -1
- package/dist/plain/interval/intervalOverlappingDaysDateTime.js +1 -1
- package/dist/plain/interval/intervalSplitAtDate.d.ts +1 -1
- package/dist/plain/interval/intervalSplitAtDate.js +2 -2
- package/dist/plain/interval/intervalSplitAtDateTime.js +1 -1
- package/dist/plain/interval/intervalSplitAtTime.js +1 -1
- package/dist/plain/interval/intervalUnionDate.d.ts +2 -2
- package/dist/plain/interval/intervalUnionDate.js +3 -3
- package/dist/plain/interval/intervalUnionDateTime.js +1 -1
- package/dist/plain/interval/intervalUnionTime.js +1 -1
- package/dist/plain/interval/intervalXorAllDate.d.ts +1 -1
- package/dist/plain/interval/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.js +1 -1
- package/dist/plain/interval/intervalXorAllTime.js +1 -1
- package/dist/plain/interval/intervalXorDate.d.ts +1 -1
- package/dist/plain/interval/intervalXorDate.js +2 -2
- package/dist/plain/interval/intervalXorDateTime.js +1 -1
- package/dist/plain/interval/intervalXorTime.js +1 -1
- package/dist/plain/interval/intervalsOverlapDate.d.ts +1 -1
- package/dist/plain/interval/intervalsOverlapDate.js +2 -2
- package/dist/plain/interval/intervalsOverlapDateTime.js +1 -1
- package/dist/plain/interval/intervalsOverlapTime.js +1 -1
- package/dist/plain/interval/mergeIntervalsDate.d.ts +1 -1
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.js +1 -1
- package/dist/plain/interval/mergeIntervalsTime.js +1 -1
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +2 -3
- package/dist/plain/interval/splitIntervalByUnitDate.js +3 -4
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +2 -1
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +3 -2
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -1
- package/dist/plain/interval/validate/isValidDateInterval.d.ts +1 -1
- package/dist/plain/interval/validate/isValidDateInterval.js +2 -2
- package/dist/plain/interval/validate/isValidDateTimeInterval.js +1 -1
- package/dist/plain/interval/validate/isValidTimeInterval.js +1 -1
- package/dist/plain/locale/getLocaleEraNames.d.ts +6 -6
- package/dist/plain/locale/getLocaleEraNames.js +8 -7
- package/dist/plain/locale/getLocaleMeridiems.d.ts +5 -5
- package/dist/plain/locale/getLocaleMeridiems.js +7 -6
- package/dist/plain/locale/getLocaleMonthNames.d.ts +6 -6
- package/dist/plain/locale/getLocaleMonthNames.js +17 -11
- package/dist/plain/locale/getLocaleWeekdayNames.d.ts +3 -3
- package/dist/plain/locale/getLocaleWeekdayNames.js +12 -5
- package/dist/plain/map/mapDatesInRange.js +1 -1
- package/dist/plain/map/mapDaysInMonth.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +14 -13
- package/dist/plain/parse/parseDateTimeWithPattern.js +15 -14
- package/dist/plain/parse/parseDateWithPattern.d.ts +18 -17
- package/dist/plain/parse/parseDateWithPattern.js +19 -18
- package/dist/plain/parse/parseDayFromDate.js +1 -1
- package/dist/plain/parse/parseDayFromDateTime.js +1 -1
- package/dist/plain/parse/parseDayOfWeekFromDate.js +1 -1
- package/dist/plain/parse/parseDayOfWeekFromDateTime.js +1 -1
- package/dist/plain/parse/parseHourFromDateTime.js +1 -1
- package/dist/plain/parse/parseHourFromTime.js +1 -1
- package/dist/plain/parse/parseMicrosecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseMicrosecondFromTime.js +1 -1
- package/dist/plain/parse/parseMillisecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseMillisecondFromTime.js +1 -1
- package/dist/plain/parse/parseMinuteFromDateTime.js +1 -1
- package/dist/plain/parse/parseMinuteFromTime.js +1 -1
- package/dist/plain/parse/parseMonthFromDate.js +1 -1
- package/dist/plain/parse/parseMonthFromDateTime.js +1 -1
- package/dist/plain/parse/parseNanosecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseNanosecondFromTime.js +1 -1
- package/dist/plain/parse/parseSecondFromDateTime.js +1 -1
- package/dist/plain/parse/parseSecondFromTime.js +1 -1
- package/dist/plain/parse/parseSqlDateTime.js +1 -1
- package/dist/plain/parse/parseTimeWithPattern.d.ts +6 -4
- package/dist/plain/parse/parseTimeWithPattern.js +7 -5
- package/dist/plain/parse/parseUnitFromDate.d.ts +1 -1
- package/dist/plain/parse/parseUnitFromDate.js +1 -1
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +1 -1
- package/dist/plain/parse/parseUnitFromDateTime.js +1 -1
- package/dist/plain/parse/parseUnitFromTime.d.ts +1 -1
- package/dist/plain/parse/parseUnitFromTime.js +1 -1
- package/dist/plain/parse/parseWeekFromDateTime.js +1 -1
- package/dist/plain/parse/parseYearFromDate.js +1 -1
- package/dist/plain/parse/parseYearFromDateTime.js +1 -1
- package/dist/plain/validate/{isLeapSecond.d.ts → hasSecond60.d.ts} +16 -14
- package/dist/plain/validate/{isLeapSecond.js → hasSecond60.js} +16 -14
- package/dist/plain/validate/index.d.ts +1 -1
- package/dist/plain/validate/index.js +1 -1
- package/dist/plain/validate/isLeapYear.js +1 -1
- package/dist/plain/validate/isValidDate.js +2 -17
- package/dist/plain/validate/isValidDateRange.js +1 -1
- package/dist/plain/validate/isValidDateTime.d.ts +1 -1
- package/dist/plain/validate/isValidDateTime.js +4 -4
- package/dist/plain/validate/isValidDateTimeRange.js +1 -1
- package/dist/plain/validate/isValidIsoDateLike.js +3 -3
- package/dist/plain/validate/isValidTime.js +2 -18
- package/dist/plain/validate/isValidTimeRange.js +1 -1
- package/dist/precision/convert/fromNanoseconds.d.ts +2 -2
- package/dist/precision/convert/fromNanoseconds.js +3 -3
- package/dist/precision/convert/toNanoseconds.d.ts +2 -2
- package/dist/precision/convert/toNanoseconds.js +2 -2
- package/dist/precision/index.d.ts +1 -1
- package/dist/precision/index.js +2 -2
- package/dist/precision/validate/isValidInstant.d.ts +1 -1
- package/dist/precision/validate/isValidInstant.js +1 -1
- package/dist/regex/calendar-zoned-date-time.d.ts +4 -4
- package/dist/regex/calendar-zoned-date-time.js +4 -4
- package/dist/regex/index.d.ts +1 -1
- package/dist/regex/index.js +2 -2
- package/dist/regex/leap-second.d.ts +1 -1
- package/dist/regex/leap-second.js +1 -1
- package/dist/regex/time-zone-like.d.ts +2 -2
- package/dist/regex/time-zone-like.js +2 -2
- package/dist/span/calculate/spanMs.d.ts +4 -3
- package/dist/span/calculate/spanMs.js +4 -3
- package/dist/span/calculate/spanNs.d.ts +4 -3
- package/dist/span/calculate/spanNs.js +4 -3
- package/dist/span/calculate/spanWallClock.d.ts +12 -12
- package/dist/span/calculate/spanWallClock.js +13 -13
- package/dist/span/index.d.ts +1 -1
- package/dist/span/index.js +2 -2
- package/dist/span/validate/isValidSpan.d.ts +3 -3
- package/dist/span/validate/isValidSpan.js +3 -3
- package/dist/timescale/calculate/index.d.ts +3 -0
- package/dist/timescale/calculate/index.js +3 -0
- package/dist/timescale/calculate/leapSecondsBetween.d.ts +26 -0
- package/dist/timescale/calculate/leapSecondsBetween.js +62 -0
- package/dist/timescale/calculate/nextLeapSecond.d.ts +18 -0
- package/dist/timescale/calculate/nextLeapSecond.js +33 -0
- package/dist/timescale/calculate/taiMinusUtc.d.ts +21 -0
- package/dist/timescale/calculate/taiMinusUtc.js +38 -0
- package/dist/timescale/convert/fromTAI.d.ts +22 -0
- package/dist/timescale/convert/fromTAI.js +35 -0
- package/dist/timescale/convert/index.d.ts +2 -0
- package/dist/timescale/convert/index.js +2 -0
- package/dist/timescale/convert/toTAI.d.ts +23 -0
- package/dist/timescale/convert/toTAI.js +39 -0
- package/dist/timescale/index.d.ts +4 -0
- package/dist/timescale/index.js +5 -0
- package/dist/timescale/validate/index.d.ts +1 -0
- package/dist/timescale/validate/index.js +1 -0
- package/dist/timescale/validate/isLeapSecond.d.ts +25 -0
- package/dist/timescale/validate/isLeapSecond.js +36 -0
- package/dist/transport/calculate/crossingTime.d.ts +2 -2
- package/dist/transport/calculate/crossingTime.js +3 -3
- package/dist/transport/calculate/cutoffAt.d.ts +4 -4
- package/dist/transport/calculate/cutoffAt.js +24 -133
- package/dist/transport/calculate/cutoffSchedule.d.ts +2 -2
- package/dist/transport/calculate/cutoffSchedule.js +52 -20
- package/dist/transport/calculate/dwellTime.d.ts +3 -3
- package/dist/transport/calculate/dwellTime.js +4 -4
- package/dist/transport/calculate/estimateDrift.d.ts +1 -1
- package/dist/transport/calculate/estimateDrift.js +1 -1
- package/dist/transport/calculate/nextDeparture.d.ts +2 -2
- package/dist/transport/calculate/nextDeparture.js +2 -2
- package/dist/transport/calculate/scheduleDelivery.d.ts +2 -2
- package/dist/transport/calculate/scheduleDelivery.js +3 -3
- package/dist/transport/calculate/transitTime.d.ts +11 -11
- package/dist/transport/calculate/transitTime.js +11 -11
- package/dist/transport/compare/classifyPunctuality.d.ts +1 -1
- package/dist/transport/compare/classifyPunctuality.js +1 -1
- package/dist/transport/compare/isPastCutoff.d.ts +1 -1
- package/dist/transport/compare/isPastCutoff.js +2 -2
- package/dist/transport/compare/scheduleDeviation.d.ts +1 -1
- package/dist/transport/compare/scheduleDeviation.js +1 -1
- package/dist/transport/compare/timeToCutoff.d.ts +1 -1
- package/dist/transport/compare/timeToCutoff.js +1 -1
- package/dist/transport/convert/etaAtZone.d.ts +2 -2
- package/dist/transport/convert/etaAtZone.js +2 -2
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +2 -2
- package/dist/types/date-duration-unit.d.ts +1 -1
- package/dist/types/date-time-duration-units.d.ts +1 -1
- package/dist/types/date-time-unit.d.ts +1 -1
- package/dist/types/date-unit.d.ts +1 -1
- package/dist/types/disambiguation.d.ts +1 -1
- package/dist/types/duration-relative-to.d.ts +1 -1
- package/dist/types/duration-string-options.d.ts +1 -1
- package/dist/types/exact-duration-unit.d.ts +1 -1
- package/dist/types/fiscal-calendar.d.ts +40 -4
- package/dist/types/gnss.d.ts +51 -0
- package/dist/types/gnss.js +0 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/now-unit.d.ts +1 -1
- package/dist/types/offset.d.ts +1 -1
- package/dist/types/overflow.d.ts +1 -1
- package/dist/types/rounding-options.d.ts +1 -1
- package/dist/types/stored-zoned-classification.d.ts +83 -0
- package/dist/types/stored-zoned-classification.js +0 -0
- package/dist/types/time-duration-unit.d.ts +1 -1
- package/dist/types/time-unit.d.ts +1 -1
- package/dist/types/utc-now-unit.d.ts +1 -1
- package/dist/unix/calculate/diffUnix.d.ts +1 -1
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +1 -1
- package/dist/unix/calculate/endOfUnix.d.ts +2 -2
- package/dist/unix/calculate/endOfUnix.js +1 -1
- package/dist/unix/calculate/isBetweenUnix.js +1 -1
- package/dist/unix/calculate/roundUnix.d.ts +7 -5
- package/dist/unix/calculate/roundUnix.js +6 -4
- package/dist/unix/calculate/setUnix.d.ts +3 -3
- package/dist/unix/calculate/setUnix.js +2 -2
- package/dist/unix/calculate/startOfUnix.d.ts +2 -2
- package/dist/unix/calculate/startOfUnix.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +6 -6
- package/dist/unix/compare/areUnixEqualBy.js +5 -5
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +1 -1
- package/dist/unix/convert/convertUnixToPlainTime.js +1 -1
- package/dist/unix/convert/convertUnixToZoned.d.ts +1 -1
- package/dist/unix/convert/convertUnixToZoned.js +1 -1
- package/dist/unix/format/formatCalendarUnix.d.ts +10 -9
- package/dist/unix/format/formatCalendarUnix.js +6 -6
- package/dist/unix/format/formatRelativeUnix.d.ts +7 -7
- package/dist/unix/format/formatRelativeUnix.js +7 -7
- package/dist/unix/format/formatUnix.d.ts +9 -9
- package/dist/unix/format/formatUnix.js +9 -9
- package/dist/unix/get/getUnixDay.js +1 -1
- package/dist/unix/get/getUnixHour.js +1 -1
- package/dist/unix/get/getUnixMicrosecond.js +1 -1
- package/dist/unix/get/getUnixMillisecond.js +1 -1
- package/dist/unix/get/getUnixMinute.js +1 -1
- package/dist/unix/get/getUnixMonth.js +1 -1
- package/dist/unix/get/getUnixNanosecond.js +1 -1
- package/dist/unix/get/getUnixNow.js +1 -1
- package/dist/unix/get/getUnixNowUnit.d.ts +1 -1
- package/dist/unix/get/getUnixNowUnit.js +1 -1
- package/dist/unix/get/getUnixSecond.js +1 -1
- package/dist/unix/get/getUnixYear.js +1 -1
- package/dist/unix/index.d.ts +1 -1
- package/dist/unix/index.js +2 -2
- package/dist/unix/interval/intervalFromDurationUnix.js +1 -1
- package/dist/unix/interval/intervalLengthUnix.d.ts +2 -2
- package/dist/unix/interval/intervalLengthUnix.js +2 -2
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +3 -2
- package/dist/unix/interval/splitIntervalByUnitUnix.js +4 -3
- package/dist/unix/parse/parseUnitFromUnix.d.ts +1 -1
- package/dist/utc/calculate/addUtc.js +1 -1
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfQuarterForUtc.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +1 -1
- package/dist/utc/calculate/isBetweenUtc.js +1 -1
- package/dist/utc/calculate/maxUtc.js +1 -1
- package/dist/utc/calculate/minUtc.js +1 -1
- package/dist/utc/calculate/roundUtc.d.ts +1 -1
- package/dist/utc/calculate/roundUtc.js +1 -1
- package/dist/utc/calculate/setUtc.d.ts +1 -1
- package/dist/utc/calculate/setUtc.js +1 -1
- package/dist/utc/calculate/sortUtc.js +1 -1
- package/dist/utc/calculate/startOfQuarterForUtc.js +1 -1
- package/dist/utc/calculate/startOfUtc.d.ts +1 -1
- package/dist/utc/calculate/subtractUtc.js +1 -1
- package/dist/utc/compare/areUtcEqual.js +1 -1
- package/dist/utc/compare/areUtcEqualBy.d.ts +2 -2
- package/dist/utc/compare/areUtcEqualBy.js +2 -2
- package/dist/utc/compare/isAfterUtc.js +1 -1
- package/dist/utc/compare/isBeforeUtc.js +1 -1
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +1 -1
- package/dist/utc/convert/convertUtcToPlainDate.js +2 -2
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +1 -1
- package/dist/utc/convert/convertUtcToPlainDateTime.js +2 -2
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +1 -1
- package/dist/utc/convert/convertUtcToPlainTime.js +2 -2
- package/dist/utc/convert/convertUtcToUnix.js +1 -1
- package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
- package/dist/utc/convert/convertUtcToZoned.js +2 -2
- package/dist/utc/format/formatCalendarUtc.d.ts +6 -5
- package/dist/utc/format/formatCalendarUtc.js +3 -3
- package/dist/utc/format/formatHttpDate.js +1 -1
- package/dist/utc/format/formatRelativeUtc.d.ts +5 -5
- package/dist/utc/format/formatRelativeUtc.js +5 -5
- package/dist/utc/format/formatUtc.d.ts +8 -8
- package/dist/utc/format/formatUtc.js +8 -8
- package/dist/utc/get/getUtcDay.js +1 -1
- package/dist/utc/get/getUtcHour.js +1 -1
- package/dist/utc/get/getUtcMicrosecond.js +1 -1
- package/dist/utc/get/getUtcMillisecond.js +1 -1
- package/dist/utc/get/getUtcMinute.js +1 -1
- package/dist/utc/get/getUtcMonth.js +1 -1
- package/dist/utc/get/getUtcNanosecond.js +1 -1
- package/dist/utc/get/getUtcNow.js +1 -1
- package/dist/utc/get/getUtcNowUnit.js +1 -1
- package/dist/utc/get/getUtcSecond.js +1 -1
- package/dist/utc/get/getUtcYear.js +1 -1
- package/dist/utc/index.d.ts +1 -1
- package/dist/utc/index.js +2 -2
- package/dist/utc/interval/intervalAbutsUtc.js +1 -1
- package/dist/utc/interval/intervalContainsUtc.js +1 -1
- package/dist/utc/interval/intervalCountUtc.js +1 -1
- package/dist/utc/interval/intervalDivideEquallyUtc.js +1 -1
- package/dist/utc/interval/intervalEngulfsUtc.js +1 -1
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -1
- package/dist/utc/interval/intervalLengthUtc.js +1 -1
- package/dist/utc/interval/intervalOverlappingDaysUtc.js +1 -1
- package/dist/utc/interval/intervalSplitAtUtc.js +1 -1
- package/dist/utc/interval/intervalXorAllUtc.js +1 -1
- package/dist/utc/interval/intervalXorUtc.js +1 -1
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +2 -1
- package/dist/utc/interval/splitIntervalByUnitUtc.js +3 -2
- package/dist/utc/interval/validate/isValidUtcInterval.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseDateFromUtc.js +1 -1
- package/dist/utc/parse/parseDayFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseDayFromUtc.js +1 -1
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +2 -2
- package/dist/utc/parse/parseHourFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseHourFromUtc.js +1 -1
- package/dist/utc/parse/parseHttpDate.js +1 -1
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -1
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseMillisecondFromUtc.js +1 -1
- package/dist/utc/parse/parseMonthFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseMonthFromUtc.js +1 -1
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseNanosecondFromUtc.js +1 -1
- package/dist/utc/parse/parseSecondFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseSecondFromUtc.js +1 -1
- package/dist/utc/parse/parseTimeFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseTimeFromUtc.js +2 -2
- package/dist/utc/parse/parseUnitFromUtc.d.ts +2 -2
- package/dist/utc/parse/parseUnitFromUtc.js +2 -2
- package/dist/utc/parse/parseWeekFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseWeekFromUtc.js +2 -2
- package/dist/utc/parse/parseYearFromUtc.d.ts +1 -1
- package/dist/utc/parse/parseYearFromUtc.js +1 -1
- package/dist/utc/validate/isValidUtc.js +3 -3
- package/dist/utc/validate/isValidUtcRange.js +1 -1
- package/dist/{duty → workforce}/calculate/dutyDayFor.js +1 -1
- package/dist/{duty → workforce}/calculate/evaluateDutyLog.js +1 -1
- package/dist/{duty → workforce}/calculate/longestRun.js +1 -1
- package/dist/{duty → workforce}/calculate/qualifyingRestPairs.js +1 -1
- package/dist/{duty → workforce}/calculate/qualifyingRests.js +1 -1
- package/dist/workforce/index.d.ts +3 -0
- package/dist/workforce/index.js +4 -0
- package/dist/{duty → workforce}/validate/isValidDutyLog.d.ts +2 -2
- package/dist/{duty → workforce}/validate/isValidDutyLog.js +2 -2
- package/dist/zoned/calculate/addZoned.d.ts +15 -15
- package/dist/zoned/calculate/addZoned.js +15 -15
- package/dist/zoned/calculate/addZonedBusinessDays.d.ts +5 -4
- package/dist/zoned/calculate/addZonedBusinessDays.js +5 -4
- package/dist/zoned/calculate/clampZoned.js +1 -1
- package/dist/zoned/calculate/diffZoned.d.ts +8 -8
- package/dist/zoned/calculate/diffZoned.js +7 -7
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +5 -5
- package/dist/zoned/calculate/diffZonedAsDuration.js +4 -4
- package/dist/zoned/calculate/endOfZoned.d.ts +3 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -2
- package/dist/zoned/calculate/getHoursInZonedDay.d.ts +2 -2
- package/dist/zoned/calculate/getHoursInZonedDay.js +2 -2
- package/dist/zoned/calculate/getLocaleZonedDayOfWeek.d.ts +6 -5
- package/dist/zoned/calculate/getLocaleZonedDayOfWeek.js +6 -5
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +5 -5
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -5
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +6 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +6 -6
- package/dist/zoned/calculate/maxZoned.d.ts +2 -2
- package/dist/zoned/calculate/maxZoned.js +3 -3
- package/dist/zoned/calculate/minZoned.d.ts +2 -2
- package/dist/zoned/calculate/minZoned.js +3 -3
- package/dist/zoned/calculate/roundZoned.d.ts +11 -9
- package/dist/zoned/calculate/roundZoned.js +11 -9
- package/dist/zoned/calculate/setZoned.d.ts +8 -8
- package/dist/zoned/calculate/setZoned.js +8 -8
- package/dist/zoned/calculate/sortZoned.d.ts +3 -3
- package/dist/zoned/calculate/sortZoned.js +4 -4
- package/dist/zoned/calculate/startOfZoned.d.ts +3 -3
- package/dist/zoned/calculate/startOfZoned.js +2 -2
- package/dist/zoned/calculate/subtractZoned.d.ts +14 -14
- package/dist/zoned/calculate/subtractZoned.js +14 -14
- package/dist/zoned/calculate/subtractZonedBusinessDays.d.ts +5 -4
- package/dist/zoned/calculate/subtractZonedBusinessDays.js +5 -4
- package/dist/zoned/chop/chopZonedDate.d.ts +1 -1
- package/dist/zoned/chop/chopZonedDate.js +1 -1
- package/dist/zoned/chop/chopZonedMilliseconds.d.ts +1 -1
- package/dist/zoned/chop/chopZonedMilliseconds.js +1 -1
- package/dist/zoned/chop/chopZonedSeconds.d.ts +1 -1
- package/dist/zoned/chop/chopZonedSeconds.js +1 -1
- package/dist/zoned/chop/chopZonedTime.d.ts +1 -1
- package/dist/zoned/chop/chopZonedTime.js +1 -1
- package/dist/zoned/chop/chopZonedTimezone.d.ts +1 -1
- package/dist/zoned/chop/chopZonedTimezone.js +1 -1
- package/dist/zoned/classify/classifyStoredZoned.d.ts +46 -0
- package/dist/zoned/classify/classifyStoredZoned.js +177 -0
- package/dist/zoned/classify/index.d.ts +1 -0
- package/dist/zoned/classify/index.js +1 -0
- package/dist/zoned/compare/areZonedEqual.js +1 -1
- package/dist/zoned/compare/areZonedEqualBy.d.ts +8 -10
- package/dist/zoned/compare/areZonedEqualBy.js +8 -10
- package/dist/zoned/compare/isAfterZoned.js +1 -1
- package/dist/zoned/compare/isBeforeZoned.d.ts +2 -2
- package/dist/zoned/compare/isBeforeZoned.js +3 -3
- package/dist/zoned/compare/isBetweenZoned.js +1 -1
- package/dist/zoned/compare/isInDaylightSaving.d.ts +2 -2
- package/dist/zoned/compare/isInDaylightSaving.js +2 -2
- package/dist/zoned/compare/isZonedBusinessDay.d.ts +7 -6
- package/dist/zoned/compare/isZonedBusinessDay.js +7 -6
- package/dist/zoned/compare/isZonedFuture.js +1 -1
- package/dist/zoned/compare/isZonedPast.js +1 -1
- package/dist/zoned/compare/isZonedRelativeDay.d.ts +2 -2
- package/dist/zoned/compare/isZonedRelativeDay.js +3 -3
- package/dist/zoned/compare/isZonedThisUnit.d.ts +7 -7
- package/dist/zoned/compare/isZonedThisUnit.js +7 -7
- package/dist/zoned/compare/isZonedWeekend.d.ts +5 -5
- package/dist/zoned/compare/isZonedWeekend.js +5 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +6 -6
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -6
- package/dist/zoned/convert/convertZonedToCalendar.d.ts +5 -5
- package/dist/zoned/convert/convertZonedToCalendar.js +5 -5
- package/dist/zoned/convert/convertZonedToPlainDateTime.d.ts +3 -3
- package/dist/zoned/convert/convertZonedToPlainDateTime.js +3 -3
- package/dist/zoned/convert/convertZonedToZoned.d.ts +2 -2
- package/dist/zoned/convert/convertZonedToZoned.js +2 -2
- package/dist/zoned/format/formatCalendarZoned.d.ts +7 -6
- package/dist/zoned/format/formatCalendarZoned.js +5 -5
- package/dist/zoned/format/formatRelativeZoned.d.ts +3 -3
- package/dist/zoned/format/formatRelativeZoned.js +4 -4
- package/dist/zoned/format/formatRfc2822.d.ts +3 -3
- package/dist/zoned/format/formatRfc2822.js +3 -3
- package/dist/zoned/format/formatRfc3339.d.ts +2 -2
- package/dist/zoned/format/formatRfc3339.js +2 -2
- package/dist/zoned/format/formatTimeZoneName.d.ts +17 -17
- package/dist/zoned/format/formatTimeZoneName.js +13 -12
- package/dist/zoned/format/formatZonedDateTime.d.ts +10 -10
- package/dist/zoned/format/formatZonedDateTime.js +12 -11
- package/dist/zoned/format/formatZonedRange.d.ts +7 -7
- package/dist/zoned/format/formatZonedRange.js +9 -8
- package/dist/zoned/format/formatZonedToParts.d.ts +11 -11
- package/dist/zoned/format/formatZonedToParts.js +13 -12
- package/dist/zoned/get/getDstTransitions.d.ts +9 -9
- package/dist/zoned/get/getDstTransitions.js +3 -3
- package/dist/zoned/get/getSystemTimeZone.d.ts +2 -2
- package/dist/zoned/get/getSystemTimeZone.js +2 -2
- package/dist/zoned/get/getTimeZoneOffset.d.ts +5 -5
- package/dist/zoned/get/getTimeZoneOffset.js +5 -5
- package/dist/zoned/get/getTimeZones.d.ts +1 -1
- package/dist/zoned/get/getTimeZones.js +1 -1
- package/dist/zoned/get/getZonedDay.d.ts +1 -1
- package/dist/zoned/get/getZonedDay.js +1 -1
- package/dist/zoned/get/getZonedDayOfWeek.d.ts +1 -1
- package/dist/zoned/get/getZonedDayOfWeek.js +1 -1
- package/dist/zoned/get/getZonedHour.d.ts +1 -1
- package/dist/zoned/get/getZonedHour.js +1 -1
- package/dist/zoned/get/getZonedMicrosecond.d.ts +1 -1
- package/dist/zoned/get/getZonedMicrosecond.js +1 -1
- package/dist/zoned/get/getZonedMillisecond.d.ts +1 -1
- package/dist/zoned/get/getZonedMillisecond.js +1 -1
- package/dist/zoned/get/getZonedMinute.d.ts +1 -1
- package/dist/zoned/get/getZonedMinute.js +1 -1
- package/dist/zoned/get/getZonedMonth.d.ts +1 -1
- package/dist/zoned/get/getZonedMonth.js +1 -1
- package/dist/zoned/get/getZonedNanosecond.d.ts +1 -1
- package/dist/zoned/get/getZonedNanosecond.js +1 -1
- package/dist/zoned/get/getZonedNow.d.ts +4 -4
- package/dist/zoned/get/getZonedNow.js +4 -4
- package/dist/zoned/get/getZonedNowUnit.d.ts +2 -2
- package/dist/zoned/get/getZonedNowUnit.js +1 -1
- package/dist/zoned/get/getZonedSecond.d.ts +1 -1
- package/dist/zoned/get/getZonedSecond.js +1 -1
- package/dist/zoned/get/getZonedToday.d.ts +1 -1
- package/dist/zoned/get/getZonedToday.js +1 -1
- package/dist/zoned/get/getZonedWeekOfYear.d.ts +1 -1
- package/dist/zoned/get/getZonedWeekOfYear.js +1 -1
- package/dist/zoned/get/getZonedYear.d.ts +1 -1
- package/dist/zoned/get/getZonedYear.js +1 -1
- package/dist/zoned/index.d.ts +2 -1
- package/dist/zoned/index.js +3 -2
- package/dist/zoned/interval/intervalAbutsZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalAbutsZoned.js +3 -3
- package/dist/zoned/interval/intervalContainsZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalContainsZoned.js +2 -2
- package/dist/zoned/interval/intervalCountZoned.d.ts +4 -4
- package/dist/zoned/interval/intervalCountZoned.js +5 -5
- package/dist/zoned/interval/intervalDifferenceZoned.js +1 -1
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +2 -2
- package/dist/zoned/interval/intervalEngulfsZoned.d.ts +1 -1
- package/dist/zoned/interval/intervalEngulfsZoned.js +2 -2
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +6 -6
- package/dist/zoned/interval/intervalFromDurationZoned.js +7 -7
- package/dist/zoned/interval/intervalIntersectionZoned.js +1 -1
- package/dist/zoned/interval/intervalLengthZoned.d.ts +5 -5
- package/dist/zoned/interval/intervalLengthZoned.js +5 -5
- package/dist/zoned/interval/intervalOverlappingDaysZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalOverlappingDaysZoned.js +3 -3
- package/dist/zoned/interval/intervalSplitAtZoned.js +14 -16
- package/dist/zoned/interval/intervalUnionZoned.js +1 -1
- package/dist/zoned/interval/intervalXorAllZoned.js +1 -1
- package/dist/zoned/interval/intervalXorZoned.js +1 -1
- package/dist/zoned/interval/intervalsOverlapZoned.d.ts +2 -2
- package/dist/zoned/interval/intervalsOverlapZoned.js +3 -3
- package/dist/zoned/interval/mergeIntervalsZoned.js +1 -1
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +2 -1
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +3 -2
- package/dist/zoned/interval/validate/isValidCalendarZonedInterval.d.ts +2 -2
- package/dist/zoned/interval/validate/isValidCalendarZonedInterval.js +3 -3
- package/dist/zoned/interval/validate/isValidZonedInterval.d.ts +1 -1
- package/dist/zoned/interval/validate/isValidZonedInterval.js +2 -2
- package/dist/zoned/map/mapZonedDatesInRange.js +1 -1
- package/dist/zoned/map/mapZonedHoursInDay.d.ts +1 -1
- package/dist/zoned/map/mapZonedHoursInDay.js +2 -2
- package/dist/zoned/parse/getZonedOffset.d.ts +1 -1
- package/dist/zoned/parse/getZonedOffset.js +1 -1
- package/dist/zoned/parse/getZonedOffsetAs.d.ts +6 -6
- package/dist/zoned/parse/getZonedOffsetAs.js +3 -3
- package/dist/zoned/parse/parseDateTimeFromZoned.js +2 -2
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseRfc3339.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +1 -1
- package/dist/zoned/validate/hasDaylightSaving.d.ts +2 -2
- package/dist/zoned/validate/hasDaylightSaving.js +3 -3
- package/dist/zoned/validate/isValidCalendarZonedDateTime.d.ts +8 -8
- package/dist/zoned/validate/isValidCalendarZonedDateTime.js +8 -8
- package/dist/zoned/validate/isValidTimeZone.d.ts +1 -1
- package/dist/zoned/validate/isValidTimeZone.js +3 -18
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +7 -7
- package/dist/zoned/validate/isValidZonedDateTime.js +9 -9
- package/dist/zoned/validate/isValidZonedRange.d.ts +1 -1
- package/dist/zoned/validate/isValidZonedRange.js +5 -5
- package/package.json +71 -21
- package/skills/gmt-arithmetic/SKILL.md +18 -59
- package/skills/gmt-basics/SKILL.md +32 -12
- package/skills/gmt-gnss/SKILL.md +92 -0
- package/skills/gmt-integration/SKILL.md +48 -15
- package/skills/gmt-intermodal/SKILL.md +189 -0
- package/skills/gmt-timezone/SKILL.md +34 -257
- package/skills/gmt-transport/SKILL.md +133 -0
- package/skills/gmt-workforce/SKILL.md +84 -0
- package/dist/duty/index.d.ts +0 -3
- package/dist/duty/index.js +0 -4
- /package/dist/{duty → workforce}/calculate/dutyDayFor.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/dutyTotals.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/dutyTotals.js +0 -0
- /package/dist/{duty → workforce}/calculate/dutyViolations.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/dutyViolations.js +0 -0
- /package/dist/{duty → workforce}/calculate/evaluateDutyLog.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/index.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/index.js +0 -0
- /package/dist/{duty → workforce}/calculate/longestRun.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/qualifyingRestPairs.d.ts +0 -0
- /package/dist/{duty → workforce}/calculate/qualifyingRests.d.ts +0 -0
- /package/dist/{duty → workforce}/validate/index.d.ts +0 -0
- /package/dist/{duty → workforce}/validate/index.js +0 -0
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { Temporal } from "
|
|
1
|
+
import { Temporal } from "./temporal.js";
|
|
2
2
|
import { parseDutyLog } from "./dutyLog.js";
|
|
3
3
|
import { calendarScale, datePlusDays, localDateOf, operatorDayScale, periodAfter, periodsEndingAt, resolveWallClock, WallClockRejected, } from "./dutyPeriods.js";
|
|
4
4
|
import { MAX_PERIOD_COUNT, parseDutyRules, usesOperatorDays, } from "./dutyRules.js";
|
|
5
|
+
import { countEvents, countInRange, latestPairFrom, createRunStore, endingAtOrBefore, entryHolding, firstEndingAfter, firstEntryIn, firstStartingAtOrAfter, firstWhere, interruptionResetAt, lastAtLeastUntil, lastEntryBefore, latestAtLeast, logStartBefore, runEndingAt, runIndex, runsMatching, runsUntil, timeInBefore, viewRun, } from "./dutyRunIndex.js";
|
|
6
|
+
import { MIN_EPOCH_NANOSECONDS } from "./epochNanoseconds.js";
|
|
5
7
|
import { isObject } from "./isObject.js";
|
|
6
8
|
import { parseScheduleDisambiguation } from "./operatingSchedule.js";
|
|
7
9
|
import { formatHourDuration } from "./hourDurationString.js";
|
|
8
|
-
import { coalesceIntervalNanoseconds } from "./intervalNanoseconds.js";
|
|
9
10
|
import { zoneFrame } from "./zoneFrame.js";
|
|
10
11
|
import { parseDayStartTime } from "./dutyPeriods.js";
|
|
11
|
-
/** TC39 `nsMinInstant`: a window never reaches back past the first instant. */
|
|
12
|
-
const MIN_INSTANT_NANOSECONDS = -8640000000000000000000n;
|
|
13
12
|
/** A window a call cannot place in Temporal's range. Caught by the public function. */
|
|
14
13
|
export class Unrepresentable extends RangeError {
|
|
15
14
|
}
|
|
@@ -67,7 +66,7 @@ export function prepareDutyCall(log, rules, options) {
|
|
|
67
66
|
scales: new Map(),
|
|
68
67
|
wallClocks: new Map(),
|
|
69
68
|
windowInstances: new Map(),
|
|
70
|
-
|
|
69
|
+
store: createRunStore(entries),
|
|
71
70
|
},
|
|
72
71
|
rules: resolved,
|
|
73
72
|
};
|
|
@@ -90,18 +89,6 @@ function scaleFor(context, unit) {
|
|
|
90
89
|
context.scales.set(unit, scale);
|
|
91
90
|
return scale;
|
|
92
91
|
}
|
|
93
|
-
/** The log as it stands at `at`: later entries dropped, one straddling `at` cut there. */
|
|
94
|
-
function clip(entries, at) {
|
|
95
|
-
const clipped = [];
|
|
96
|
-
for (const entry of entries) {
|
|
97
|
-
if (entry.start >= at) {
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
clipped.push(entry.end > at ? { ...entry, end: at } : entry);
|
|
101
|
-
}
|
|
102
|
-
return clipped;
|
|
103
|
-
}
|
|
104
|
-
const matches = (test, status) => typeof test === "function" ? test(status) : test.has(status);
|
|
105
92
|
/**
|
|
106
93
|
* Read a status list a helper takes: an array of strings, `[]` allowed. Each element is read once.
|
|
107
94
|
*
|
|
@@ -128,19 +115,7 @@ export function readStatusList(value) {
|
|
|
128
115
|
* them (CORE-6): touching entries join, and a gap or another status ends a run.
|
|
129
116
|
*/
|
|
130
117
|
export function runsOf(log, test) {
|
|
131
|
-
return
|
|
132
|
-
.filter((entry) => matches(test, entry.status))
|
|
133
|
-
.map(({ start, end }) => ({ start, end, startText: "", endText: "" }))).map(({ start, end }) => ({ start, end }));
|
|
134
|
-
}
|
|
135
|
-
/** The runs of the whole log in a set of statuses, found once per call and kept. */
|
|
136
|
-
function logRuns(context, statuses) {
|
|
137
|
-
const known = context.runs.get(statuses);
|
|
138
|
-
if (known !== undefined) {
|
|
139
|
-
return known;
|
|
140
|
-
}
|
|
141
|
-
const found = runsOf(context.entries, statuses);
|
|
142
|
-
context.runs.set(statuses, found);
|
|
143
|
-
return found;
|
|
118
|
+
return runsMatching(log, (status) => test.has(status));
|
|
144
119
|
}
|
|
145
120
|
/**
|
|
146
121
|
* The parts of ordered, separate runs inside `[from, to)`, empty parts dropped: `clipRuns`, with
|
|
@@ -185,7 +160,7 @@ export function clipRuns(runs, from, to) {
|
|
|
185
160
|
export function timeIn(log, statuses, from, to) {
|
|
186
161
|
let total = 0n;
|
|
187
162
|
for (const entry of log) {
|
|
188
|
-
if (
|
|
163
|
+
if (statuses.has(entry.status)) {
|
|
189
164
|
const start = max(entry.start, from);
|
|
190
165
|
const end = min(entry.end, to);
|
|
191
166
|
total += end > start ? end - start : 0n;
|
|
@@ -193,16 +168,6 @@ export function timeIn(log, statuses, from, to) {
|
|
|
193
168
|
}
|
|
194
169
|
return total;
|
|
195
170
|
}
|
|
196
|
-
/** The latest run at least `minimum` long. */
|
|
197
|
-
function lastAtLeast(runs, minimum) {
|
|
198
|
-
for (let index = runs.length - 1; index >= 0; index--) {
|
|
199
|
-
const run = runs[index];
|
|
200
|
-
if (length(run) >= minimum) {
|
|
201
|
-
return run;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return undefined;
|
|
205
|
-
}
|
|
206
171
|
/**
|
|
207
172
|
* The paired rests among runs of rest: two runs in a row, each shorter than `fullRest` and at
|
|
208
173
|
* least `pair.each`, the longer at least `pair.one` and both together at least `pair.combined`.
|
|
@@ -249,7 +214,7 @@ function windowOf(context, period, at, anchor) {
|
|
|
249
214
|
if (period.kind === "elapsed") {
|
|
250
215
|
return {
|
|
251
216
|
span: {
|
|
252
|
-
start: max(at - period.length,
|
|
217
|
+
start: max(at - period.length, MIN_EPOCH_NANOSECONDS),
|
|
253
218
|
end: at,
|
|
254
219
|
},
|
|
255
220
|
basis: "elapsed",
|
|
@@ -525,7 +490,7 @@ function evaluateFreePeriod(context, rule, at, anchor) {
|
|
|
525
490
|
const window = windowOf(context, rule.within, at, anchor);
|
|
526
491
|
// Every count below ends at or before `at`, so the runs of the whole log, cut to the count's
|
|
527
492
|
// span, are the runs of the log as it stands at `at`.
|
|
528
|
-
const rests =
|
|
493
|
+
const rests = runIndex(context.store, rule.restStatuses).runs;
|
|
529
494
|
const countIn = (from, to, extendTo) => {
|
|
530
495
|
const inside = runsBetween(rests, from, to);
|
|
531
496
|
const runs = extendTo === undefined ? inside : withRestUntil(inside, at, extendTo);
|
|
@@ -605,11 +570,66 @@ function evaluateFreePeriod(context, rule, at, anchor) {
|
|
|
605
570
|
grouping: groupingOf(window),
|
|
606
571
|
};
|
|
607
572
|
}
|
|
608
|
-
|
|
573
|
+
/**
|
|
574
|
+
* The stretches without rest in the log as it stood at `at`: each runs from the end of one rest to
|
|
575
|
+
* the start of the next, the last to `at` (or nowhere, when a rest reaches `at`). The log's first
|
|
576
|
+
* entry starts one too, as a rest ending there would: time before the log is unknown, but the work
|
|
577
|
+
* logged before the first rest is a stretch without rest like any other.
|
|
578
|
+
*/
|
|
579
|
+
function restGaps(rests, logStart, at) {
|
|
580
|
+
const taken = rests.count;
|
|
581
|
+
const resting = rests.last !== undefined && rests.last.end === at;
|
|
582
|
+
const prepended = logStart !== undefined &&
|
|
583
|
+
(taken === 0 || viewRun(rests, 0).start !== logStart);
|
|
584
|
+
const startAt = (gap) => prepended
|
|
585
|
+
? gap === 0
|
|
586
|
+
? logStart
|
|
587
|
+
: viewRun(rests, gap - 1).end
|
|
588
|
+
: viewRun(rests, gap).end;
|
|
589
|
+
const endAt = (gap) => {
|
|
590
|
+
const next = prepended ? gap : gap + 1;
|
|
591
|
+
return next < taken
|
|
592
|
+
? viewRun(rests, next).start
|
|
593
|
+
: resting
|
|
594
|
+
? startAt(gap)
|
|
595
|
+
: at;
|
|
596
|
+
};
|
|
597
|
+
return {
|
|
598
|
+
count: prepended ? taken + 1 : taken,
|
|
599
|
+
resting,
|
|
600
|
+
startAt,
|
|
601
|
+
endAt,
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* The longest stretch without rest touching `[from, to)`, found from the first that ends after
|
|
606
|
+
* `from`.
|
|
607
|
+
*/
|
|
608
|
+
function widestGap(gaps, from, to) {
|
|
609
|
+
let widest = 0n;
|
|
610
|
+
for (let gap = firstWhere(gaps.count, (position) => gaps.endAt(position) > from); gap < gaps.count && gaps.startAt(gap) < to; gap++) {
|
|
611
|
+
widest = max(widest, gaps.endAt(gap) - gaps.startAt(gap));
|
|
612
|
+
}
|
|
613
|
+
return widest;
|
|
614
|
+
}
|
|
615
|
+
/** The widest stretch without rest in `[from, upper)` at `at`, and when the next rest falls due. */
|
|
616
|
+
function widestRestGap(context, index, at, from, upper, maxGap) {
|
|
617
|
+
const gaps = restGaps(runsUntil(index, at), logStartBefore(context.store, at), at);
|
|
618
|
+
return {
|
|
619
|
+
widest: widestGap(gaps, from, upper),
|
|
620
|
+
dueBy: gaps.count > 0 && !gaps.resting
|
|
621
|
+
? gaps.startAt(gaps.count - 1) + maxGap
|
|
622
|
+
: null,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function evaluateRestRequirement(context, rule, at, anchor) {
|
|
609
626
|
const window = windowOf(context, rule.per, at, anchor);
|
|
610
627
|
const { span } = window;
|
|
611
|
-
const
|
|
612
|
-
const
|
|
628
|
+
const index = runIndex(context.store, rule.restStatuses);
|
|
629
|
+
const upper = min(span.end, at);
|
|
630
|
+
// The count ends at or before `at`, so the runs of the whole log, cut to it, are the runs of
|
|
631
|
+
// the log as it stands at `at`.
|
|
632
|
+
const inside = span.start < upper ? runsBetween(index.runs, span.start, upper) : [];
|
|
613
633
|
const actual = restChecks(rule, inside.map(length));
|
|
614
634
|
const met = actual.met ||
|
|
615
635
|
(span.end > at &&
|
|
@@ -624,30 +644,7 @@ function evaluateRestRequirement(context, rule, log, at, anchor) {
|
|
|
624
644
|
grouping: groupingOf(window),
|
|
625
645
|
};
|
|
626
646
|
if (rule.maxGap !== null) {
|
|
627
|
-
const
|
|
628
|
-
const resting = last !== undefined && last.end === at;
|
|
629
|
-
// A stretch without rest runs from the end of one rest to the start of the next. The log's
|
|
630
|
-
// first entry starts one too, as a rest ending there would: time before the log is unknown,
|
|
631
|
-
// but the work logged before the first rest is a stretch without rest like any other.
|
|
632
|
-
const logStart = log[0]?.start;
|
|
633
|
-
const gapStarts = logStart === undefined || rests[0]?.start === logStart
|
|
634
|
-
? rests.map((run) => run.end)
|
|
635
|
-
: [logStart, ...rests.map((run) => run.end)];
|
|
636
|
-
const gapEnds = gapStarts.length > rests.length
|
|
637
|
-
? rests.map((run) => run.start)
|
|
638
|
-
: rests.slice(1).map((run) => run.start);
|
|
639
|
-
let widest = 0n;
|
|
640
|
-
for (let index = 0; index < gapStarts.length; index++) {
|
|
641
|
-
const gapStart = gapStarts[index];
|
|
642
|
-
const gapEnd = gapEnds[index] ?? (resting ? gapStart : at);
|
|
643
|
-
if (gapEnd > span.start && gapStart < min(span.end, at)) {
|
|
644
|
-
widest = max(widest, gapEnd - gapStart);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
const lastGapStart = gapStarts[gapStarts.length - 1];
|
|
648
|
-
const dueBy = lastGapStart !== undefined && !resting
|
|
649
|
-
? lastGapStart + rule.maxGap
|
|
650
|
-
: null;
|
|
647
|
+
const { widest, dueBy } = widestRestGap(context, index, at, span.start, upper, rule.maxGap);
|
|
651
648
|
if (widest > rule.maxGap) {
|
|
652
649
|
return {
|
|
653
650
|
satisfied: false,
|
|
@@ -669,57 +666,57 @@ function evaluateRestRequirement(context, rule, log, at, anchor) {
|
|
|
669
666
|
dueBy: null,
|
|
670
667
|
});
|
|
671
668
|
}
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
//
|
|
678
|
-
|
|
679
|
-
const
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
//
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
grouping: "start",
|
|
707
|
-
}),
|
|
708
|
-
// A rest that starts with the log, or a duty with none logged before it, may have more
|
|
709
|
-
// rest before the log: the record does not judge it.
|
|
710
|
-
beforeLog: restStart <= logStart,
|
|
711
|
-
key: restStart,
|
|
712
|
-
};
|
|
713
|
-
}
|
|
714
|
-
const windowStart = max(dutyStart - rule.within, MIN_INSTANT_NANOSECONDS);
|
|
715
|
-
// The rest before the duty: the longest run of rest inside the window, the latest on a tie.
|
|
669
|
+
/** The rest right before a duty, measured whole, against the duty before it (`orFactor`). */
|
|
670
|
+
function restBeforeDutyScaled(rule, orFactor, { rests, dutyStart, onDuty, logStart }) {
|
|
671
|
+
// The rest judged is the one right before the duty, measured whole, against the duty it
|
|
672
|
+
// ends: from the end of the last rest of at least `minimum` before it, breaks included, to
|
|
673
|
+
// where it starts. A duty between an earlier rest and this one is never skipped, and more
|
|
674
|
+
// rest before the duty only lengthens the rest or shortens the duty before it.
|
|
675
|
+
const rest = runEndingAt(rests, dutyStart);
|
|
676
|
+
const restStart = rest?.start ?? dutyStart;
|
|
677
|
+
const fullRest = latestAtLeast(rests, endingAtOrBefore(rests, restStart), rule.minimum);
|
|
678
|
+
const dutyFrom = fullRest?.end ?? min(logStart, restStart);
|
|
679
|
+
const previousDuty = restStart - dutyFrom;
|
|
680
|
+
const { numerator, denominator } = orFactor.k;
|
|
681
|
+
// k × the duty, rounded up to the nanosecond, exactly.
|
|
682
|
+
const scaled = (previousDuty * numerator + denominator - 1n) / denominator;
|
|
683
|
+
const limit = max(rule.minimum, max(scaled, orFactor.floor));
|
|
684
|
+
const used = rest === undefined ? 0n : length(rest);
|
|
685
|
+
return {
|
|
686
|
+
...floored(used, limit, !onDuty || used >= limit, {
|
|
687
|
+
window: { start: dutyFrom, end: dutyStart },
|
|
688
|
+
periodBasis: "elapsed",
|
|
689
|
+
dueBy: null,
|
|
690
|
+
resetAt: null,
|
|
691
|
+
grouping: "start",
|
|
692
|
+
}),
|
|
693
|
+
// A rest that starts with the log, or a duty with none logged before it, may have more
|
|
694
|
+
// rest before the log: the record does not judge it.
|
|
695
|
+
beforeLog: restStart <= logStart,
|
|
696
|
+
key: restStart,
|
|
697
|
+
};
|
|
698
|
+
}
|
|
699
|
+
/** The longest run of rest inside `[windowStart, dutyStart)`, the latest on a tie. */
|
|
700
|
+
function longestRestInside(rests, windowStart, dutyStart) {
|
|
701
|
+
// Only the runs reaching into the window are read, and dutyStart is at most `at`, so the cut
|
|
702
|
+
// last run reads as it does whole.
|
|
716
703
|
let rest;
|
|
717
|
-
for (
|
|
704
|
+
for (let position = firstEndingAfter(rests, windowStart); position < rests.count; position++) {
|
|
705
|
+
const run = viewRun(rests, position);
|
|
706
|
+
if (run.start >= dutyStart) {
|
|
707
|
+
break;
|
|
708
|
+
}
|
|
718
709
|
const inside = min(run.end, dutyStart) - max(run.start, windowStart);
|
|
719
710
|
if (inside > 0n && (rest === undefined || inside >= rest.inside)) {
|
|
720
711
|
rest = { run, inside };
|
|
721
712
|
}
|
|
722
713
|
}
|
|
714
|
+
return rest;
|
|
715
|
+
}
|
|
716
|
+
/** The rest before a duty: the longest inside the window, against the minimum. */
|
|
717
|
+
function restBeforeDutyWithin(rule, { rests, dutyStart, onDuty }) {
|
|
718
|
+
const windowStart = max(dutyStart - rule.within, MIN_EPOCH_NANOSECONDS);
|
|
719
|
+
const rest = longestRestInside(rests, windowStart, dutyStart);
|
|
723
720
|
const used = rest?.inside ?? 0n;
|
|
724
721
|
return {
|
|
725
722
|
...floored(used, rule.minimum, !onDuty || used >= rule.minimum, {
|
|
@@ -733,18 +730,44 @@ function evaluateRestBeforeDuty(rule, log, at) {
|
|
|
733
730
|
key: rest?.run.start ?? windowStart,
|
|
734
731
|
};
|
|
735
732
|
}
|
|
733
|
+
function evaluateRestBeforeDuty(context, rule, at) {
|
|
734
|
+
const { store } = context;
|
|
735
|
+
const rests = runsUntil(runIndex(store, rule.restStatuses), at);
|
|
736
|
+
const last = lastEntryBefore(store, at);
|
|
737
|
+
const onDuty = last !== undefined &&
|
|
738
|
+
last.end === at &&
|
|
739
|
+
!rule.restStatuses.has(last.status);
|
|
740
|
+
// On duty, the duty started where the run outside rest reaching `at` began; resting, a duty
|
|
741
|
+
// starting now is the one to be ready for.
|
|
742
|
+
const dutyStart = onDuty
|
|
743
|
+
? runsUntil(runIndex(store, { not: rule.restStatuses }), at)
|
|
744
|
+
.last.start
|
|
745
|
+
: at;
|
|
746
|
+
const started = {
|
|
747
|
+
rests,
|
|
748
|
+
dutyStart,
|
|
749
|
+
onDuty,
|
|
750
|
+
logStart: logStartBefore(store, at) ?? at,
|
|
751
|
+
};
|
|
752
|
+
return rule.orFactor === null
|
|
753
|
+
? restBeforeDutyWithin(rule, started)
|
|
754
|
+
: restBeforeDutyScaled(rule, rule.orFactor, started);
|
|
755
|
+
}
|
|
736
756
|
function evaluateRule(context, rule, at, anchor) {
|
|
737
757
|
// A free period reads only runs of rest, kept for the whole call, not the log cut at `at`.
|
|
738
758
|
if (rule.kind === "freePeriod") {
|
|
739
759
|
return evaluateFreePeriod(context, rule, at, anchor);
|
|
740
760
|
}
|
|
741
|
-
|
|
742
|
-
const
|
|
761
|
+
// The log as it stands at `at` is the whole log read up to `at`: no copy is made.
|
|
762
|
+
const { store } = context;
|
|
763
|
+
const first = logStartBefore(store, at) ?? at;
|
|
764
|
+
const viewOf = (test) => runsUntil(runIndex(store, test), at);
|
|
765
|
+
const timeOf = (test, from, to) => timeInBefore(runIndex(store, test), from, to, at);
|
|
743
766
|
switch (rule.kind) {
|
|
744
767
|
case "cumulativeCap": {
|
|
745
|
-
const reset =
|
|
768
|
+
const reset = lastAtLeastUntil(viewOf(rule.since.statuses), rule.since.consecutive);
|
|
746
769
|
const from = reset?.end ?? first;
|
|
747
|
-
return capped(duration(
|
|
770
|
+
return capped(duration(timeOf(rule.statuses, from, at)), duration(rule.cap), {
|
|
748
771
|
window: { start: from, end: at },
|
|
749
772
|
periodBasis: null,
|
|
750
773
|
dueBy: null,
|
|
@@ -753,11 +776,10 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
753
776
|
});
|
|
754
777
|
}
|
|
755
778
|
case "elapsedWindow": {
|
|
756
|
-
const rests =
|
|
757
|
-
const reset =
|
|
779
|
+
const rests = viewOf(rule.since.statuses);
|
|
780
|
+
const reset = lastAtLeastUntil(rests, rule.since.consecutive);
|
|
758
781
|
const after = reset?.end ?? null;
|
|
759
|
-
const opener =
|
|
760
|
-
rule.startStatuses.has(entry.status));
|
|
782
|
+
const opener = firstEntryIn(store, rule.startStatuses, after, at);
|
|
761
783
|
if (opener === undefined) {
|
|
762
784
|
return {
|
|
763
785
|
satisfied: true,
|
|
@@ -775,8 +797,7 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
775
797
|
let opensAt = opener.start;
|
|
776
798
|
let second;
|
|
777
799
|
if (rule.exclude !== null) {
|
|
778
|
-
const
|
|
779
|
-
const latest = pairs[pairs.length - 1];
|
|
800
|
+
const latest = latestPairFrom(rests, firstStartingAtOrAfter(rests, opener.start), rule.since.consecutive, rule.exclude);
|
|
780
801
|
if (latest !== undefined) {
|
|
781
802
|
opensAt = latest.first.end;
|
|
782
803
|
second = latest.second;
|
|
@@ -806,7 +827,7 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
806
827
|
limit += rule.extension.by;
|
|
807
828
|
}
|
|
808
829
|
}
|
|
809
|
-
const late =
|
|
830
|
+
const late = timeOf(rule.restrictedStatuses, closesAt, at);
|
|
810
831
|
return {
|
|
811
832
|
satisfied: late === 0n,
|
|
812
833
|
used: duration(at - opensAt - excluded),
|
|
@@ -821,28 +842,13 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
821
842
|
};
|
|
822
843
|
}
|
|
823
844
|
case "requiredInterruption": {
|
|
824
|
-
const
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
for (const pause of breaks) {
|
|
830
|
-
const taken = length(pause);
|
|
831
|
-
const split = rule.orderedSplit;
|
|
832
|
-
if (taken >= rule.minimum) {
|
|
833
|
-
resetAt = pause.end;
|
|
834
|
-
part = 0;
|
|
835
|
-
}
|
|
836
|
-
else if (split !== null && taken >= split[part]) {
|
|
837
|
-
part++;
|
|
838
|
-
if (part === split.length) {
|
|
839
|
-
resetAt = pause.end;
|
|
840
|
-
part = 0;
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
}
|
|
845
|
+
const breaks = viewOf({
|
|
846
|
+
not: rule.countedStatuses,
|
|
847
|
+
within: rule.outsideStatuses,
|
|
848
|
+
});
|
|
849
|
+
const resetAt = interruptionResetAt(breaks, rule.minimum, rule.orderedSplit);
|
|
844
850
|
const from = resetAt ?? first;
|
|
845
|
-
return capped(duration(
|
|
851
|
+
return capped(duration(timeOf(rule.countedStatuses, from, at)), duration(rule.after), {
|
|
846
852
|
window: { start: from, end: at },
|
|
847
853
|
periodBasis: null,
|
|
848
854
|
dueBy: null,
|
|
@@ -854,19 +860,20 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
854
860
|
const window = windowOf(context, rule.window, at, anchor);
|
|
855
861
|
const reset = rule.reset === null
|
|
856
862
|
? undefined
|
|
857
|
-
:
|
|
863
|
+
: lastAtLeastUntil(viewOf(rule.reset.statuses), rule.reset.consecutive);
|
|
858
864
|
const from = reset !== undefined && reset.end > window.span.start
|
|
859
865
|
? reset.end
|
|
860
866
|
: window.span.start;
|
|
861
867
|
const to = min(window.span.end, at);
|
|
862
|
-
let used =
|
|
868
|
+
let used = timeOf(rule.statuses, from, to);
|
|
863
869
|
let limit = rule.cap;
|
|
864
870
|
if (rule.precondition !== null) {
|
|
865
871
|
const { restStatuses, minimum, beforeHours } = rule.precondition;
|
|
866
|
-
|
|
867
|
-
const
|
|
868
|
-
?
|
|
869
|
-
:
|
|
872
|
+
// `to` is at most `at`, so the runs of the whole log, cut to it, are the log's.
|
|
873
|
+
const rest = (from < to
|
|
874
|
+
? runsBetween(runIndex(store, restStatuses).runs, from, to)
|
|
875
|
+
: []).find((run) => length(run) >= minimum);
|
|
876
|
+
const before = rest === undefined ? used : timeOf(rule.statuses, from, rest.start);
|
|
870
877
|
if (rest === undefined || before > beforeHours) {
|
|
871
878
|
limit = beforeHours;
|
|
872
879
|
used = before;
|
|
@@ -882,7 +889,7 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
882
889
|
}
|
|
883
890
|
case "fixedPeriodCap": {
|
|
884
891
|
const window = windowOf(context, repeated(rule.period, rule.adjacent), at, anchor);
|
|
885
|
-
const total =
|
|
892
|
+
const total = timeOf(rule.statuses, window.span.start, min(window.span.end, at));
|
|
886
893
|
const rest = {
|
|
887
894
|
window: window.span,
|
|
888
895
|
periodBasis: basisOf(window),
|
|
@@ -905,20 +912,20 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
905
912
|
};
|
|
906
913
|
}
|
|
907
914
|
case "restRequirement":
|
|
908
|
-
return evaluateRestRequirement(context, rule,
|
|
915
|
+
return evaluateRestRequirement(context, rule, at, anchor);
|
|
909
916
|
case "restBeforeDuty":
|
|
910
|
-
return evaluateRestBeforeDuty(
|
|
917
|
+
return evaluateRestBeforeDuty(context, rule, at);
|
|
911
918
|
case "quota": {
|
|
912
|
-
const continuing =
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
const
|
|
916
|
-
|
|
917
|
-
|
|
919
|
+
const continuing = entryHolding(store, at);
|
|
920
|
+
const running = continuing !== undefined && rule.statuses.has(continuing.status);
|
|
921
|
+
const runs = viewOf(rule.statuses);
|
|
922
|
+
const sizes = { minimum: rule.minimum, maximum: rule.maximum };
|
|
923
|
+
// A run going on at `at` is not an event yet.
|
|
924
|
+
const skipEndingAt = running ? at : null;
|
|
918
925
|
if ("every" in rule.reset) {
|
|
919
926
|
const window = windowOf(context, rule.reset.every, at, anchor);
|
|
920
927
|
const to = min(window.span.end, at);
|
|
921
|
-
const found =
|
|
928
|
+
const found = countEvents(runs, sizes, { from: window.span.start, to }, skipEndingAt);
|
|
922
929
|
return capped(tally(found), tally(rule.count), {
|
|
923
930
|
window: window.span,
|
|
924
931
|
periodBasis: basisOf(window),
|
|
@@ -927,9 +934,9 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
927
934
|
grouping: groupingOf(window),
|
|
928
935
|
});
|
|
929
936
|
}
|
|
930
|
-
const reset =
|
|
937
|
+
const reset = lastAtLeastUntil(viewOf(rule.reset.statuses), rule.reset.consecutive);
|
|
931
938
|
const from = reset?.end ?? first;
|
|
932
|
-
return capped(tally(
|
|
939
|
+
return capped(tally(countEvents(runs, sizes, { from, to: null }, skipEndingAt)), tally(rule.count), {
|
|
933
940
|
window: { start: from, end: at },
|
|
934
941
|
periodBasis: null,
|
|
935
942
|
dueBy: null,
|
|
@@ -938,11 +945,11 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
938
945
|
});
|
|
939
946
|
}
|
|
940
947
|
case "dueBy": {
|
|
941
|
-
const events =
|
|
942
|
-
const event =
|
|
948
|
+
const events = viewOf(rule.statuses);
|
|
949
|
+
const event = lastAtLeastUntil(events, rule.minimum);
|
|
943
950
|
const reset = rule.reset === null
|
|
944
951
|
? undefined
|
|
945
|
-
:
|
|
952
|
+
: lastAtLeastUntil(viewOf(rule.reset.statuses), rule.reset.consecutive);
|
|
946
953
|
const clock = event === undefined
|
|
947
954
|
? (reset?.end ?? null)
|
|
948
955
|
: reset === undefined
|
|
@@ -950,7 +957,7 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
950
957
|
: max(event.end, reset.end);
|
|
951
958
|
const from = clock ?? first;
|
|
952
959
|
const due = boundaryAfter(context, rule.period, rule.periods, from);
|
|
953
|
-
const latest = events
|
|
960
|
+
const latest = events.last;
|
|
954
961
|
const pending = latest !== undefined && latest.end === at && latest.start <= due;
|
|
955
962
|
return {
|
|
956
963
|
satisfied: at <= due || pending,
|
|
@@ -974,12 +981,12 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
974
981
|
const unfinished = span.end > at;
|
|
975
982
|
const counts = new Map();
|
|
976
983
|
for (const named of rule.classes) {
|
|
977
|
-
const runs =
|
|
984
|
+
const runs = viewOf(named.statuses);
|
|
978
985
|
const qualifies = (run) => run.start >= span.start &&
|
|
979
986
|
run.start < to &&
|
|
980
987
|
length(run) >= named.minimum;
|
|
981
|
-
const found = runs.
|
|
982
|
-
const last = runs
|
|
988
|
+
const found = countEvents(runs, { minimum: named.minimum, maximum: null }, { from: span.start, to }, null);
|
|
989
|
+
const last = runs.last;
|
|
983
990
|
let best = found;
|
|
984
991
|
if (unfinished) {
|
|
985
992
|
// A run counts in the window it starts in, measured whole, so the most the window can
|
|
@@ -1030,7 +1037,7 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
1030
1037
|
}
|
|
1031
1038
|
case "occurrenceCap": {
|
|
1032
1039
|
const scale = scaleFor(context, rule.per.unit);
|
|
1033
|
-
const runs =
|
|
1040
|
+
const runs = viewOf(rule.statuses);
|
|
1034
1041
|
const blocks = [];
|
|
1035
1042
|
let blockAnchor = anchor;
|
|
1036
1043
|
for (let index = 0; index < rule.lookback; index++) {
|
|
@@ -1043,9 +1050,11 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
1043
1050
|
}
|
|
1044
1051
|
const occupied = blocks.filter((block) => {
|
|
1045
1052
|
const to = min(block.end, at);
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1053
|
+
// The first run that can count: starting in the block, or ending after it starts.
|
|
1054
|
+
const position = rule.byInitiationDate
|
|
1055
|
+
? firstStartingAtOrAfter(runs, block.start)
|
|
1056
|
+
: firstEndingAfter(runs, block.start);
|
|
1057
|
+
return position < runs.count && viewRun(runs, position).start < to;
|
|
1049
1058
|
}).length;
|
|
1050
1059
|
const earliest = blocks[blocks.length - 1];
|
|
1051
1060
|
const latest = blocks[0];
|
|
@@ -1059,18 +1068,18 @@ function evaluateRule(context, rule, at, anchor) {
|
|
|
1059
1068
|
}
|
|
1060
1069
|
case "usageLookback": {
|
|
1061
1070
|
const window = windowOf(context, rule.notWithin, at, anchor);
|
|
1062
|
-
const reset =
|
|
1071
|
+
const reset = lastAtLeastUntil(viewOf(rule.reset.statuses), rule.reset.consecutive);
|
|
1063
1072
|
const from = reset !== undefined && reset.end > window.span.start
|
|
1064
1073
|
? reset.end
|
|
1065
1074
|
: window.span.start;
|
|
1066
1075
|
// A use is an instant, and each window holds it once. An elapsed window runs up to and
|
|
1067
1076
|
// including the use being made at `at`, so one exactly its length earlier is outside it; a
|
|
1068
1077
|
// window of local periods holds only its own, so one on its end is the next's.
|
|
1069
|
-
const found = rule.uses.
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1078
|
+
const found = countInRange(rule.uses, rule.notWithin.kind === "elapsed"
|
|
1079
|
+
? max(from, at - rule.notWithin.length + 1n)
|
|
1080
|
+
: from, rule.notWithin.kind === "elapsed"
|
|
1081
|
+
? at + 1n
|
|
1082
|
+
: min(at + 1n, window.span.end));
|
|
1074
1083
|
return capped(tally(found), tally(1), {
|
|
1075
1084
|
window: { start: from, end: window.span.end },
|
|
1076
1085
|
periodBasis: basisOf(window),
|
|
@@ -1262,11 +1271,9 @@ function runFloors(rule) {
|
|
|
1262
1271
|
},
|
|
1263
1272
|
];
|
|
1264
1273
|
case "requiredInterruption": {
|
|
1265
|
-
const outside = rule.outsideStatuses;
|
|
1266
1274
|
return [
|
|
1267
1275
|
{
|
|
1268
|
-
test:
|
|
1269
|
-
(outside === null || outside.has(status)),
|
|
1276
|
+
test: { not: rule.countedStatuses, within: rule.outsideStatuses },
|
|
1270
1277
|
floors: [rule.minimum, ...(rule.orderedSplit ?? [])],
|
|
1271
1278
|
sliding: false,
|
|
1272
1279
|
},
|
|
@@ -1408,7 +1415,7 @@ function candidateInstants(context, rule, range) {
|
|
|
1408
1415
|
}
|
|
1409
1416
|
}
|
|
1410
1417
|
for (const { test, floors, sliding } of runFloors(rule)) {
|
|
1411
|
-
for (const run of
|
|
1418
|
+
for (const run of runIndex(context.store, test).runs) {
|
|
1412
1419
|
for (const floor of floors) {
|
|
1413
1420
|
around(run.start + floor);
|
|
1414
1421
|
if (sliding) {
|
|
@@ -1425,7 +1432,7 @@ function candidateInstants(context, rule, range) {
|
|
|
1425
1432
|
// full rest between. A run shorter than `each` is skipped, never a partner.
|
|
1426
1433
|
const fullRest = rule.since.consecutive;
|
|
1427
1434
|
let partner;
|
|
1428
|
-
for (const run of
|
|
1435
|
+
for (const run of runIndex(context.store, rule.since.statuses).runs) {
|
|
1429
1436
|
if (partner !== undefined) {
|
|
1430
1437
|
around(run.start + rule.exclude.combined - length(partner));
|
|
1431
1438
|
}
|
|
@@ -1439,7 +1446,7 @@ function candidateInstants(context, rule, range) {
|
|
|
1439
1446
|
}
|
|
1440
1447
|
}
|
|
1441
1448
|
if (rule.kind === "restRequirement") {
|
|
1442
|
-
const rests =
|
|
1449
|
+
const rests = runIndex(context.store, rule.restStatuses).runs;
|
|
1443
1450
|
const ranks = rule.composition !== null || rule.composite !== null;
|
|
1444
1451
|
if (rule.maxGap !== null) {
|
|
1445
1452
|
// A stretch without rest starts at each rest's end and at the log's first entry.
|
|
@@ -1458,11 +1465,13 @@ function candidateInstants(context, rule, range) {
|
|
|
1458
1465
|
for (let index = 0; index < near.length; index++) {
|
|
1459
1466
|
const earlier = near[index];
|
|
1460
1467
|
// A rest shrinking out of the window crosses one growing at its end, or one held whole.
|
|
1461
|
-
|
|
1468
|
+
// The rests are ordered and separate, so those within two window lengths of `earlier`
|
|
1469
|
+
// are one stretch of them: from the first that ends within reach to the first that
|
|
1470
|
+
// starts out of it.
|
|
1471
|
+
for (let other = firstWhere(near.length, (position) => near[position].end > earlier.start - 2n * shift); other < near.length; other++) {
|
|
1462
1472
|
const later = near[other];
|
|
1463
|
-
if (later.start - earlier.end >= 2n * shift
|
|
1464
|
-
|
|
1465
|
-
continue;
|
|
1473
|
+
if (later.start - earlier.end >= 2n * shift) {
|
|
1474
|
+
break;
|
|
1466
1475
|
}
|
|
1467
1476
|
const crossing = (earlier.end + shift + later.start) / 2n;
|
|
1468
1477
|
around(crossing);
|
|
@@ -1479,7 +1488,7 @@ function candidateInstants(context, rule, range) {
|
|
|
1479
1488
|
// a run further than that before the range, or after it, adds none inside it.
|
|
1480
1489
|
const farthest = (BigInt(rule.atLeast) + 1n) * minimum +
|
|
1481
1490
|
shifts.reduce((longest, shift) => max(longest, shift), 0n);
|
|
1482
|
-
const rests =
|
|
1491
|
+
const rests = runIndex(context.store, rule.restStatuses).runs.filter((run) => run.end + farthest >= range.start && run.start <= until + 1n);
|
|
1483
1492
|
// A window fails only while it holds fewer than `atLeast` free periods, so a run's count
|
|
1484
1493
|
// changing above `atLeast` changes no answer: each run's first `atLeast + 1` multiples are
|
|
1485
1494
|
// the ones that matter. Of those, only the ones that land in the range are taken.
|
|
@@ -1520,13 +1529,13 @@ function candidateInstants(context, rule, range) {
|
|
|
1520
1529
|
// and the log's start, set one.
|
|
1521
1530
|
const clocks = [
|
|
1522
1531
|
context.entries[0]?.start,
|
|
1523
|
-
...
|
|
1524
|
-
.filter((run) => length(run) >= rule.minimum)
|
|
1532
|
+
...runIndex(context.store, rule.statuses)
|
|
1533
|
+
.runs.filter((run) => length(run) >= rule.minimum)
|
|
1525
1534
|
.map((run) => run.end),
|
|
1526
1535
|
...(rule.reset === null
|
|
1527
1536
|
? []
|
|
1528
|
-
:
|
|
1529
|
-
.filter((run) => length(run) >=
|
|
1537
|
+
: runIndex(context.store, rule.reset.statuses)
|
|
1538
|
+
.runs.filter((run) => length(run) >=
|
|
1530
1539
|
rule.reset.consecutive)
|
|
1531
1540
|
.map((run) => run.end)),
|
|
1532
1541
|
];
|