@gobrand/tiempo 3.1.2 → 3.2.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/dist/addBusinessDays.d.ts +14 -4
- package/dist/addBusinessDays.d.ts.map +1 -1
- package/dist/addBusinessDays.js +3 -3
- package/dist/addDays.d.ts +2 -2
- package/dist/addDays.js +2 -2
- package/dist/addHours.d.ts +2 -2
- package/dist/addHours.js +2 -2
- package/dist/addMicroseconds.d.ts +2 -2
- package/dist/addMicroseconds.js +2 -2
- package/dist/addMilliseconds.d.ts +2 -2
- package/dist/addMilliseconds.js +2 -2
- package/dist/addMinutes.d.ts +2 -2
- package/dist/addMinutes.js +2 -2
- package/dist/addMonths.d.ts +2 -2
- package/dist/addMonths.js +2 -2
- package/dist/addNanoseconds.d.ts +2 -2
- package/dist/addNanoseconds.js +2 -2
- package/dist/addQuarters.d.ts +1 -1
- package/dist/addQuarters.js +2 -2
- package/dist/addSeconds.d.ts +2 -2
- package/dist/addSeconds.js +2 -2
- package/dist/addWeeks.d.ts +2 -2
- package/dist/addWeeks.js +2 -2
- package/dist/addYears.d.ts +2 -2
- package/dist/addYears.js +2 -2
- package/dist/areIntervalsOverlapping.d.ts +60 -0
- package/dist/areIntervalsOverlapping.d.ts.map +1 -0
- package/dist/areIntervalsOverlapping.js +9 -0
- package/dist/areIntervalsOverlapping.js.map +1 -0
- package/dist/chunk-2JXI3CAL.js +22 -0
- package/dist/chunk-2JXI3CAL.js.map +1 -0
- package/dist/{chunk-22IDWEHQ.js → chunk-2LT2XOAL.js} +5 -83
- package/dist/chunk-2LT2XOAL.js.map +1 -0
- package/dist/{chunk-ETO77GIW.js → chunk-32AWWYBF.js} +2 -2
- package/dist/chunk-32AWWYBF.js.map +1 -0
- package/dist/{chunk-HQ3YMKQ5.js → chunk-3D4YR2SR.js} +2 -2
- package/dist/chunk-3D4YR2SR.js.map +1 -0
- package/dist/{chunk-ASIYAAQV.js → chunk-3HD7HEN4.js} +3 -3
- package/dist/chunk-3HD7HEN4.js.map +1 -0
- package/dist/{chunk-TEL44S5A.js → chunk-3HF4F36S.js} +2 -2
- package/dist/{chunk-TEL44S5A.js.map → chunk-3HF4F36S.js.map} +1 -1
- package/dist/chunk-3OOGJRXH.js +247 -0
- package/dist/chunk-3OOGJRXH.js.map +1 -0
- package/dist/{chunk-426MJGNT.js → chunk-3X2U6I44.js} +2 -2
- package/dist/chunk-3X2U6I44.js.map +1 -0
- package/dist/{chunk-EBQ25TEY.js → chunk-3XGUCQ2A.js} +2 -2
- package/dist/chunk-3XGUCQ2A.js.map +1 -0
- package/dist/chunk-42IFQS4W.js +16 -0
- package/dist/chunk-42IFQS4W.js.map +1 -0
- package/dist/{chunk-R3PZ56AD.js → chunk-4FQCY75E.js} +5 -5
- package/dist/chunk-4FQCY75E.js.map +1 -0
- package/dist/{chunk-TWRJEIBO.js → chunk-4GEF7B7W.js} +2 -2
- package/dist/{chunk-V36MCE25.js → chunk-4KAIF44F.js} +2 -2
- package/dist/chunk-4KAIF44F.js.map +1 -0
- package/dist/{chunk-YHQSI4WC.js → chunk-4VWUTQKP.js} +2 -2
- package/dist/chunk-4VWUTQKP.js.map +1 -0
- package/dist/chunk-4YCEFGZA.js +61 -0
- package/dist/chunk-4YCEFGZA.js.map +1 -0
- package/dist/{chunk-SUONQGAH.js → chunk-525OLFRD.js} +2 -2
- package/dist/{chunk-PYV7MWJJ.js → chunk-5WHGX2J3.js} +2 -2
- package/dist/chunk-5WHGX2J3.js.map +1 -0
- package/dist/{chunk-NKXMLC6T.js → chunk-67XABEBT.js} +2 -2
- package/dist/chunk-67XABEBT.js.map +1 -0
- package/dist/{chunk-TUZHOWSN.js → chunk-6QH4NCPA.js} +2 -2
- package/dist/{chunk-TUZHOWSN.js.map → chunk-6QH4NCPA.js.map} +1 -1
- package/dist/{chunk-5XJEKPO5.js → chunk-6QOLNYFY.js} +2 -2
- package/dist/chunk-6UBFKQIJ.js +20 -0
- package/dist/chunk-6UBFKQIJ.js.map +1 -0
- package/dist/{chunk-WY5I452J.js → chunk-7IKCDOCT.js} +2 -2
- package/dist/chunk-7IKCDOCT.js.map +1 -0
- package/dist/{chunk-5MB7UZCJ.js → chunk-7NGP7SAD.js} +2 -2
- package/dist/chunk-7NGP7SAD.js.map +1 -0
- package/dist/chunk-7PH5BPMS.js +14 -0
- package/dist/chunk-7PH5BPMS.js.map +1 -0
- package/dist/{chunk-NYM3EW3M.js → chunk-AUOZACFS.js} +2 -2
- package/dist/chunk-AUOZACFS.js.map +1 -0
- package/dist/{chunk-XXB6HJ2R.js → chunk-BI42E23Z.js} +3 -3
- package/dist/{chunk-5WPQUOM4.js → chunk-BPMS34GV.js} +2 -2
- package/dist/chunk-BPMS34GV.js.map +1 -0
- package/dist/chunk-C7QA4J6V.js +14 -0
- package/dist/chunk-C7QA4J6V.js.map +1 -0
- package/dist/{chunk-W5FFJSCD.js → chunk-DBOIK3XA.js} +2 -2
- package/dist/chunk-DBOIK3XA.js.map +1 -0
- package/dist/{chunk-FLVULRGY.js → chunk-DGUAV5XN.js} +2 -2
- package/dist/{chunk-23APOESH.js → chunk-DRBZDI52.js} +2 -2
- package/dist/{chunk-23APOESH.js.map → chunk-DRBZDI52.js.map} +1 -1
- package/dist/chunk-DVZDJ5LM.js +33 -0
- package/dist/chunk-DVZDJ5LM.js.map +1 -0
- package/dist/{chunk-JWYRXPR4.js → chunk-DYIISNVW.js} +15 -13
- package/dist/chunk-DYIISNVW.js.map +1 -0
- package/dist/{chunk-HSJMG5T7.js → chunk-DZ3647ZK.js} +2 -2
- package/dist/{chunk-HSJMG5T7.js.map → chunk-DZ3647ZK.js.map} +1 -1
- package/dist/{chunk-LKF7U4O4.js → chunk-EAO2SO4N.js} +2 -2
- package/dist/{chunk-LKF7U4O4.js.map → chunk-EAO2SO4N.js.map} +1 -1
- package/dist/{chunk-2OSJHJV5.js → chunk-EBOLL4LY.js} +2 -2
- package/dist/{chunk-AVPV4BA5.js → chunk-F3UZDWOQ.js} +2 -2
- package/dist/chunk-F3UZDWOQ.js.map +1 -0
- package/dist/{chunk-QD3ROUIT.js → chunk-GOJ45AG7.js} +3 -3
- package/dist/{chunk-SLBDEPBP.js → chunk-GU3CZAIN.js} +2 -2
- package/dist/{chunk-5ST6IOPN.js → chunk-GXSVYUCG.js} +2 -2
- package/dist/chunk-GXSVYUCG.js.map +1 -0
- package/dist/chunk-H43LMOCK.js +26 -0
- package/dist/chunk-H43LMOCK.js.map +1 -0
- package/dist/{chunk-B6VZ2AKN.js → chunk-HCORON7B.js} +2 -2
- package/dist/chunk-HCORON7B.js.map +1 -0
- package/dist/chunk-HH2HTC44.js +87 -0
- package/dist/chunk-HH2HTC44.js.map +1 -0
- package/dist/{chunk-FL33IWLY.js → chunk-HRCTWTP3.js} +2 -2
- package/dist/chunk-HRCTWTP3.js.map +1 -0
- package/dist/{chunk-FUVG6A7U.js → chunk-HYSGJJUR.js} +2 -2
- package/dist/chunk-HYSGJJUR.js.map +1 -0
- package/dist/chunk-IDB3R3G5.js +21 -0
- package/dist/chunk-IDB3R3G5.js.map +1 -0
- package/dist/chunk-IIEHQPKE.js +36 -0
- package/dist/chunk-IIEHQPKE.js.map +1 -0
- package/dist/{chunk-C5OJIIJP.js → chunk-IWVSM77B.js} +2 -2
- package/dist/{chunk-C5OJIIJP.js.map → chunk-IWVSM77B.js.map} +1 -1
- package/dist/{chunk-XIVWFVVX.js → chunk-IXNGK5OF.js} +2 -2
- package/dist/{chunk-XIVWFVVX.js.map → chunk-IXNGK5OF.js.map} +1 -1
- package/dist/{chunk-XR7Q6IP6.js → chunk-JA5ER27P.js} +2 -2
- package/dist/{chunk-E5HJJFUI.js → chunk-JGPTGV5X.js} +2 -2
- package/dist/{chunk-4E5OJUMN.js → chunk-K3L6MJJB.js} +2 -2
- package/dist/{chunk-4E5OJUMN.js.map → chunk-K3L6MJJB.js.map} +1 -1
- package/dist/{chunk-MCPKXTX7.js → chunk-K6NQZIAW.js} +2 -2
- package/dist/chunk-K6NQZIAW.js.map +1 -0
- package/dist/{chunk-RQ5CX67T.js → chunk-K7SY2MAX.js} +10 -4
- package/dist/chunk-K7SY2MAX.js.map +1 -0
- package/dist/{chunk-XZS6J4LM.js → chunk-KYS54PLJ.js} +2 -2
- package/dist/chunk-KYS54PLJ.js.map +1 -0
- package/dist/{chunk-2LN57UVR.js → chunk-KZCSP3DU.js} +2 -2
- package/dist/chunk-KZYWHHAQ.js +19 -0
- package/dist/chunk-KZYWHHAQ.js.map +1 -0
- package/dist/{chunk-35IJG3T2.js → chunk-LMOAA73F.js} +2 -2
- package/dist/chunk-M2XB72L5.js +17 -0
- package/dist/chunk-M2XB72L5.js.map +1 -0
- package/dist/{chunk-NNUATTN7.js → chunk-MVGBYHG5.js} +2 -2
- package/dist/{chunk-NNUATTN7.js.map → chunk-MVGBYHG5.js.map} +1 -1
- package/dist/{chunk-FAVYJIRM.js → chunk-NOWUJERX.js} +2 -2
- package/dist/chunk-NOWUJERX.js.map +1 -0
- package/dist/{chunk-O4YU4N6Q.js → chunk-NVFFQJEW.js} +3 -3
- package/dist/{chunk-OYTQWJ2O.js → chunk-OEPVYNB6.js} +2 -2
- package/dist/{chunk-T775UWIV.js → chunk-OF5YEVUT.js} +2 -2
- package/dist/chunk-OF5YEVUT.js.map +1 -0
- package/dist/chunk-OMUK2MOH.js +19 -0
- package/dist/chunk-OMUK2MOH.js.map +1 -0
- package/dist/{chunk-5FCHKIGV.js → chunk-PAM6VJQM.js} +2 -2
- package/dist/chunk-PLPGYCQQ.js +28 -0
- package/dist/chunk-PLPGYCQQ.js.map +1 -0
- package/dist/chunk-Q6QLOUXJ.js +18 -0
- package/dist/chunk-Q6QLOUXJ.js.map +1 -0
- package/dist/{chunk-YR26F7OA.js → chunk-QDY2KMYX.js} +2 -2
- package/dist/chunk-QDY2KMYX.js.map +1 -0
- package/dist/{chunk-NRYKSDVP.js → chunk-QNZJR53W.js} +2 -2
- package/dist/chunk-QNZJR53W.js.map +1 -0
- package/dist/{chunk-44EIUFJB.js → chunk-QZ6WXAUO.js} +2 -2
- package/dist/chunk-QZ6WXAUO.js.map +1 -0
- package/dist/{chunk-ZO2MTD2E.js → chunk-R2DCUSBY.js} +2 -2
- package/dist/chunk-R2DCUSBY.js.map +1 -0
- package/dist/{chunk-DXSRRBJO.js → chunk-R5XRTUWH.js} +2 -2
- package/dist/chunk-R5XRTUWH.js.map +1 -0
- package/dist/chunk-R6D3Y5NV.js +17 -0
- package/dist/chunk-R6D3Y5NV.js.map +1 -0
- package/dist/{chunk-AA56LFMF.js → chunk-SHKSAHJO.js} +2 -2
- package/dist/chunk-SHKSAHJO.js.map +1 -0
- package/dist/{chunk-33MHEBQR.js → chunk-SLH6TKGN.js} +2 -2
- package/dist/{chunk-33MHEBQR.js.map → chunk-SLH6TKGN.js.map} +1 -1
- package/dist/{chunk-2MFBXSTL.js → chunk-TCB3IDJM.js} +2 -2
- package/dist/{chunk-DHVGDIIO.js → chunk-TD6MVGV2.js} +2 -2
- package/dist/{chunk-PU6PU2JM.js → chunk-TI6WBLCB.js} +2 -2
- package/dist/chunk-TI6WBLCB.js.map +1 -0
- package/dist/{chunk-SXR2SO42.js → chunk-TIZJRCAA.js} +2 -2
- package/dist/chunk-TIZJRCAA.js.map +1 -0
- package/dist/{chunk-MXUGDXSG.js → chunk-TU3LNQKW.js} +2 -2
- package/dist/chunk-U6VFT2A5.js +14 -0
- package/dist/chunk-U6VFT2A5.js.map +1 -0
- package/dist/{chunk-NST7NM5Q.js → chunk-X27XGVCT.js} +2 -2
- package/dist/chunk-XMEPH226.js +21 -0
- package/dist/chunk-XMEPH226.js.map +1 -0
- package/dist/{chunk-D3BJEYTR.js → chunk-XSHFR2SX.js} +2 -2
- package/dist/{chunk-DCZDGS5G.js → chunk-Y24VUXMX.js} +2 -2
- package/dist/chunk-Y24VUXMX.js.map +1 -0
- package/dist/{chunk-XTS6LZBP.js → chunk-YKXRVQ4S.js} +2 -2
- package/dist/chunk-YKXRVQ4S.js.map +1 -0
- package/dist/{chunk-5KVFPVBT.js → chunk-ZNRTNR2Q.js} +4 -4
- package/dist/chunk-ZNRTNR2Q.js.map +1 -0
- package/dist/{chunk-3IYGWL34.js → chunk-ZW32E6EJ.js} +9 -9
- package/dist/{chunk-WJZHUNF5.js → chunk-ZXKU4SKR.js} +2 -2
- package/dist/chunk-ZXKU4SKR.js.map +1 -0
- package/dist/differenceInBusinessDays.d.ts +7 -5
- package/dist/differenceInBusinessDays.d.ts.map +1 -1
- package/dist/differenceInBusinessDays.js +3 -3
- package/dist/differenceInCalendarDays.d.ts +35 -0
- package/dist/differenceInCalendarDays.d.ts.map +1 -0
- package/dist/differenceInCalendarDays.js +10 -0
- package/dist/differenceInCalendarDays.js.map +1 -0
- package/dist/differenceInCalendarMonths.d.ts +27 -0
- package/dist/differenceInCalendarMonths.d.ts.map +1 -0
- package/dist/differenceInCalendarMonths.js +10 -0
- package/dist/differenceInCalendarMonths.js.map +1 -0
- package/dist/differenceInCalendarQuarters.d.ts +26 -0
- package/dist/differenceInCalendarQuarters.d.ts.map +1 -0
- package/dist/differenceInCalendarQuarters.js +11 -0
- package/dist/differenceInCalendarQuarters.js.map +1 -0
- package/dist/differenceInCalendarWeeks.d.ts +29 -0
- package/dist/differenceInCalendarWeeks.d.ts.map +1 -0
- package/dist/differenceInCalendarWeeks.js +11 -0
- package/dist/differenceInCalendarWeeks.js.map +1 -0
- package/dist/differenceInCalendarYears.d.ts +27 -0
- package/dist/differenceInCalendarYears.d.ts.map +1 -0
- package/dist/differenceInCalendarYears.js +10 -0
- package/dist/differenceInCalendarYears.js.map +1 -0
- package/dist/differenceInDays.js +2 -2
- package/dist/differenceInHours.js +2 -2
- package/dist/differenceInMicroseconds.js +2 -2
- package/dist/differenceInMilliseconds.js +2 -2
- package/dist/differenceInMinutes.js +2 -2
- package/dist/differenceInMonths.js +2 -2
- package/dist/differenceInNanoseconds.js +2 -2
- package/dist/differenceInQuarters.js +3 -3
- package/dist/differenceInSeconds.js +2 -2
- package/dist/differenceInWeeks.js +2 -2
- package/dist/differenceInYears.js +2 -2
- package/dist/eachDayOfInterval.d.ts +12 -12
- package/dist/eachDayOfInterval.js +3 -3
- package/dist/eachHourOfInterval.d.ts +14 -14
- package/dist/eachHourOfInterval.js +2 -2
- package/dist/eachMinuteOfInterval.d.ts +13 -13
- package/dist/eachMinuteOfInterval.js +2 -2
- package/dist/eachMonthOfInterval.d.ts +12 -12
- package/dist/eachMonthOfInterval.js +2 -2
- package/dist/eachQuarterOfInterval.d.ts +2 -2
- package/dist/eachQuarterOfInterval.js +2 -2
- package/dist/eachWeekOfInterval.d.ts +21 -19
- package/dist/eachWeekOfInterval.d.ts.map +1 -1
- package/dist/eachWeekOfInterval.js +3 -2
- package/dist/eachYearOfInterval.d.ts +9 -9
- package/dist/eachYearOfInterval.js +2 -2
- package/dist/endOfDay.d.ts +1 -1
- package/dist/endOfDay.js +3 -3
- package/dist/endOfMonth.d.ts +1 -1
- package/dist/endOfMonth.js +3 -3
- package/dist/endOfQuarter.d.ts +2 -2
- package/dist/endOfQuarter.js +4 -4
- package/dist/endOfWeek.d.ts +18 -8
- package/dist/endOfWeek.d.ts.map +1 -1
- package/dist/endOfWeek.js +3 -2
- package/dist/endOfYear.d.ts +1 -1
- package/dist/endOfYear.js +3 -3
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +3 -2
- package/dist/getQuarter.js +2 -2
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +169 -130
- package/dist/intlFormatDistance.js +9 -9
- package/dist/isFuture.js +3 -3
- package/dist/isPast.js +3 -3
- package/dist/isSameDay.d.ts +4 -4
- package/dist/isSameDay.js +2 -2
- package/dist/isSameHour.d.ts +4 -4
- package/dist/isSameHour.js +2 -2
- package/dist/isSameMicrosecond.d.ts +4 -4
- package/dist/isSameMicrosecond.js +2 -2
- package/dist/isSameMillisecond.d.ts +4 -4
- package/dist/isSameMillisecond.js +2 -2
- package/dist/isSameMinute.d.ts +4 -4
- package/dist/isSameMinute.js +2 -2
- package/dist/isSameMonth.d.ts +4 -4
- package/dist/isSameMonth.js +2 -2
- package/dist/isSameNanosecond.d.ts +4 -4
- package/dist/isSameNanosecond.js +2 -2
- package/dist/isSameQuarter.d.ts +2 -2
- package/dist/isSameQuarter.js +2 -2
- package/dist/isSameSecond.d.ts +4 -4
- package/dist/isSameSecond.js +2 -2
- package/dist/isSameWeek.d.ts +22 -13
- package/dist/isSameWeek.d.ts.map +1 -1
- package/dist/isSameWeek.js +3 -2
- package/dist/isSameYear.d.ts +4 -4
- package/dist/isSameYear.js +2 -2
- package/dist/isWeekend.js +3 -3
- package/dist/isWithinInterval.d.ts +52 -17
- package/dist/isWithinInterval.d.ts.map +1 -1
- package/dist/isWithinInterval.js +4 -3
- package/dist/nextDay.d.ts +33 -0
- package/dist/nextDay.d.ts.map +1 -0
- package/dist/nextDay.js +10 -0
- package/dist/nextDay.js.map +1 -0
- package/dist/parse.d.ts +57 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +9 -0
- package/dist/parse.js.map +1 -0
- package/dist/previousDay.d.ts +26 -0
- package/dist/previousDay.d.ts.map +1 -0
- package/dist/previousDay.js +10 -0
- package/dist/previousDay.js.map +1 -0
- package/dist/roundToNearestHour.js +2 -2
- package/dist/roundToNearestMinute.js +2 -2
- package/dist/roundToNearestSecond.js +2 -2
- package/dist/shared/businessDays.d.ts +15 -0
- package/dist/shared/businessDays.d.ts.map +1 -1
- package/dist/shared/businessDays.js +8 -4
- package/dist/shared/calendarDates.d.ts +9 -0
- package/dist/shared/calendarDates.d.ts.map +1 -0
- package/dist/shared/calendarDates.js +9 -0
- package/dist/shared/calendarDates.js.map +1 -0
- package/dist/shared/formatTokens.d.ts +8 -0
- package/dist/shared/formatTokens.d.ts.map +1 -0
- package/dist/shared/formatTokens.js +7 -0
- package/dist/shared/formatTokens.js.map +1 -0
- package/dist/shared/normalizeTemporalInput.d.ts +2 -0
- package/dist/shared/normalizeTemporalInput.d.ts.map +1 -1
- package/dist/shared/normalizeTemporalInput.js +1 -1
- package/dist/shared/normalizeWithPlainDate.js +2 -2
- package/dist/shared/nowZoned.js +2 -2
- package/dist/shared/week.d.ts +26 -0
- package/dist/shared/week.d.ts.map +1 -0
- package/dist/shared/week.js +9 -0
- package/dist/shared/week.js.map +1 -0
- package/dist/startOfDay.d.ts +1 -1
- package/dist/startOfDay.js +3 -3
- package/dist/startOfMonth.d.ts +1 -1
- package/dist/startOfMonth.js +3 -3
- package/dist/startOfQuarter.d.ts +2 -2
- package/dist/startOfQuarter.js +4 -4
- package/dist/startOfWeek.d.ts +18 -8
- package/dist/startOfWeek.d.ts.map +1 -1
- package/dist/startOfWeek.js +3 -2
- package/dist/startOfYear.d.ts +1 -1
- package/dist/startOfYear.js +3 -3
- package/dist/subBusinessDays.d.ts +6 -4
- package/dist/subBusinessDays.d.ts.map +1 -1
- package/dist/subBusinessDays.js +4 -4
- package/dist/subDays.d.ts +1 -1
- package/dist/subDays.js +3 -3
- package/dist/subHours.d.ts +1 -1
- package/dist/subHours.js +3 -3
- package/dist/subMicroseconds.d.ts +1 -1
- package/dist/subMicroseconds.js +3 -3
- package/dist/subMilliseconds.d.ts +1 -1
- package/dist/subMilliseconds.js +3 -3
- package/dist/subMinutes.d.ts +1 -1
- package/dist/subMinutes.js +3 -3
- package/dist/subMonths.d.ts +1 -1
- package/dist/subMonths.js +3 -3
- package/dist/subNanoseconds.d.ts +1 -1
- package/dist/subNanoseconds.js +3 -3
- package/dist/subQuarters.d.ts +1 -1
- package/dist/subQuarters.js +3 -3
- package/dist/subSeconds.d.ts +1 -1
- package/dist/subSeconds.js +3 -3
- package/dist/subWeeks.d.ts +1 -1
- package/dist/subWeeks.js +3 -3
- package/dist/subYears.d.ts +1 -1
- package/dist/subYears.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-22IDWEHQ.js.map +0 -1
- package/dist/chunk-426MJGNT.js.map +0 -1
- package/dist/chunk-44EIUFJB.js.map +0 -1
- package/dist/chunk-5KVFPVBT.js.map +0 -1
- package/dist/chunk-5MB7UZCJ.js.map +0 -1
- package/dist/chunk-5ST6IOPN.js.map +0 -1
- package/dist/chunk-5WPQUOM4.js.map +0 -1
- package/dist/chunk-AA56LFMF.js.map +0 -1
- package/dist/chunk-ASIYAAQV.js.map +0 -1
- package/dist/chunk-AVPV4BA5.js.map +0 -1
- package/dist/chunk-B6VZ2AKN.js.map +0 -1
- package/dist/chunk-DCZDGS5G.js.map +0 -1
- package/dist/chunk-DXSRRBJO.js.map +0 -1
- package/dist/chunk-EBQ25TEY.js.map +0 -1
- package/dist/chunk-ETO77GIW.js.map +0 -1
- package/dist/chunk-FAVYJIRM.js.map +0 -1
- package/dist/chunk-FL33IWLY.js.map +0 -1
- package/dist/chunk-FUVG6A7U.js.map +0 -1
- package/dist/chunk-H544BC2X.js +0 -16
- package/dist/chunk-H544BC2X.js.map +0 -1
- package/dist/chunk-HQ3YMKQ5.js.map +0 -1
- package/dist/chunk-ITQ6OJAL.js +0 -26
- package/dist/chunk-ITQ6OJAL.js.map +0 -1
- package/dist/chunk-JNAWZ4RN.js +0 -13
- package/dist/chunk-JNAWZ4RN.js.map +0 -1
- package/dist/chunk-JWYRXPR4.js.map +0 -1
- package/dist/chunk-MCPKXTX7.js.map +0 -1
- package/dist/chunk-NKXMLC6T.js.map +0 -1
- package/dist/chunk-NRYKSDVP.js.map +0 -1
- package/dist/chunk-NYM3EW3M.js.map +0 -1
- package/dist/chunk-PU6PU2JM.js.map +0 -1
- package/dist/chunk-PYV7MWJJ.js.map +0 -1
- package/dist/chunk-R3PZ56AD.js.map +0 -1
- package/dist/chunk-RQ5CX67T.js.map +0 -1
- package/dist/chunk-SATEE2TL.js +0 -15
- package/dist/chunk-SATEE2TL.js.map +0 -1
- package/dist/chunk-SMMVTXL4.js +0 -22
- package/dist/chunk-SMMVTXL4.js.map +0 -1
- package/dist/chunk-SXR2SO42.js.map +0 -1
- package/dist/chunk-T775UWIV.js.map +0 -1
- package/dist/chunk-V36MCE25.js.map +0 -1
- package/dist/chunk-W27GPK6Q.js +0 -29
- package/dist/chunk-W27GPK6Q.js.map +0 -1
- package/dist/chunk-W5FFJSCD.js.map +0 -1
- package/dist/chunk-WJZHUNF5.js.map +0 -1
- package/dist/chunk-WY5I452J.js.map +0 -1
- package/dist/chunk-XTS6LZBP.js.map +0 -1
- package/dist/chunk-XZS6J4LM.js.map +0 -1
- package/dist/chunk-YHQSI4WC.js.map +0 -1
- package/dist/chunk-YR26F7OA.js.map +0 -1
- package/dist/chunk-Z7I7YCKN.js +0 -36
- package/dist/chunk-Z7I7YCKN.js.map +0 -1
- package/dist/chunk-ZO2MTD2E.js.map +0 -1
- package/dist/chunk-ZYRUL5E7.js +0 -22
- package/dist/chunk-ZYRUL5E7.js.map +0 -1
- /package/dist/{chunk-TWRJEIBO.js.map → chunk-4GEF7B7W.js.map} +0 -0
- /package/dist/{chunk-SUONQGAH.js.map → chunk-525OLFRD.js.map} +0 -0
- /package/dist/{chunk-5XJEKPO5.js.map → chunk-6QOLNYFY.js.map} +0 -0
- /package/dist/{chunk-XXB6HJ2R.js.map → chunk-BI42E23Z.js.map} +0 -0
- /package/dist/{chunk-FLVULRGY.js.map → chunk-DGUAV5XN.js.map} +0 -0
- /package/dist/{chunk-2OSJHJV5.js.map → chunk-EBOLL4LY.js.map} +0 -0
- /package/dist/{chunk-QD3ROUIT.js.map → chunk-GOJ45AG7.js.map} +0 -0
- /package/dist/{chunk-SLBDEPBP.js.map → chunk-GU3CZAIN.js.map} +0 -0
- /package/dist/{chunk-XR7Q6IP6.js.map → chunk-JA5ER27P.js.map} +0 -0
- /package/dist/{chunk-E5HJJFUI.js.map → chunk-JGPTGV5X.js.map} +0 -0
- /package/dist/{chunk-2LN57UVR.js.map → chunk-KZCSP3DU.js.map} +0 -0
- /package/dist/{chunk-35IJG3T2.js.map → chunk-LMOAA73F.js.map} +0 -0
- /package/dist/{chunk-O4YU4N6Q.js.map → chunk-NVFFQJEW.js.map} +0 -0
- /package/dist/{chunk-OYTQWJ2O.js.map → chunk-OEPVYNB6.js.map} +0 -0
- /package/dist/{chunk-5FCHKIGV.js.map → chunk-PAM6VJQM.js.map} +0 -0
- /package/dist/{chunk-2MFBXSTL.js.map → chunk-TCB3IDJM.js.map} +0 -0
- /package/dist/{chunk-DHVGDIIO.js.map → chunk-TD6MVGV2.js.map} +0 -0
- /package/dist/{chunk-MXUGDXSG.js.map → chunk-TU3LNQKW.js.map} +0 -0
- /package/dist/{chunk-NST7NM5Q.js.map → chunk-X27XGVCT.js.map} +0 -0
- /package/dist/{chunk-D3BJEYTR.js.map → chunk-XSHFR2SX.js.map} +0 -0
- /package/dist/{chunk-3IYGWL34.js.map → chunk-ZW32E6EJ.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeTemporalInput
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
4
|
|
|
5
5
|
// src/addNanoseconds.ts
|
|
6
6
|
function addNanoseconds(input, nanoseconds) {
|
|
@@ -11,4 +11,4 @@ function addNanoseconds(input, nanoseconds) {
|
|
|
11
11
|
export {
|
|
12
12
|
addNanoseconds
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
14
|
+
//# sourceMappingURL=chunk-32AWWYBF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/addNanoseconds.ts"],"sourcesContent":["import type { Temporal } from './shared/temporal';\nimport { normalizeTemporalInput } from './shared/normalizeTemporalInput';\n\n/**\n * Adds the specified number of nanoseconds to a datetime.\n *\n * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.\n *\n * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime\n * @param nanoseconds - Number of nanoseconds to add (can be negative to subtract)\n * @returns ZonedDateTime with nanoseconds added, in the same timezone as input\n *\n * @example\n * ```ts\n * // From Instant (always UTC)\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = addNanoseconds(instant, 500);\n * // 2025-01-20T12:00:00.000000500+00:00[UTC] (500 nanoseconds later)\n * ```\n *\n * @example\n * ```ts\n * // From ZonedDateTime (preserves timezone)\n * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');\n * const result = addNanoseconds(zoned, 1000);\n * // 2025-01-20T15:30:00.000001-05:00[America/New_York]\n * ```\n *\n * @example\n * ```ts\n * // Negative values subtract nanoseconds\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00.000001Z');\n * const result = addNanoseconds(instant, -500);\n * // 2025-01-20T12:00:00.000000500+00:00[UTC] (500 nanoseconds earlier)\n * ```\n */\nexport function addNanoseconds(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n nanoseconds: number\n): Temporal.ZonedDateTime {\n const zonedDateTime = normalizeTemporalInput(input);\n return zonedDateTime.add({ nanoseconds });\n}\n"],"mappings":";;;;;AAoCO,SAAS,eACd,OACA,aACwB;AACxB,QAAM,gBAAgB,uBAAuB,KAAK;AAClD,SAAO,cAAc,IAAI,EAAE,YAAY,CAAC;AAC1C;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeWithPlainDate
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TCB3IDJM.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlainDate
|
|
6
6
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -18,4 +18,4 @@ function startOfMonth(input, timezone) {
|
|
|
18
18
|
export {
|
|
19
19
|
startOfMonth
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-3D4YR2SR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/startOfMonth.ts"],"sourcesContent":["import { isPlainDate, Temporal } from './shared/temporal';\nimport type { Timezone } from './types';\nimport { normalizeWithPlainDate } from './shared/normalizeWithPlainDate';\n\n/**\n * Returns the first boundary of the month.\n * PlainDate inputs stay in calendar space unless a timezone is provided.\n *\n * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime\n * @returns ZonedDateTime at the 1st day of the month at 00:00:00.000000000\n *\n * @example\n * ```ts\n * // From Instant (always UTC)\n * const instant = Temporal.Instant.from('2025-01-15T12:00:00Z');\n * const start = startOfMonth(instant);\n * // 2025-01-01T00:00:00+00:00[UTC]\n * ```\n *\n * @example\n * ```ts\n * // From ZonedDateTime (uses its timezone)\n * const zoned = Temporal.ZonedDateTime.from('2025-01-15T15:30:00-05:00[America/New_York]');\n * const start = startOfMonth(zoned);\n * // 2025-01-01T00:00:00-05:00[America/New_York]\n * ```\n *\n * @example\n * ```ts\n * // From PlainDate (stays a date)\n * const date = Temporal.PlainDate.from('2025-01-15');\n * const start = startOfMonth(date);\n * // 2025-01-01\n * ```\n *\n * @example\n * ```ts\n * // From PlainDate with a timezone (returns a ZonedDateTime)\n * const date = Temporal.PlainDate.from('2025-01-15');\n * const start = startOfMonth(date, 'America/New_York');\n * // 2025-01-01T00:00:00-05:00[America/New_York]\n * ```\n */\nexport function startOfMonth(\n input: Temporal.Instant | Temporal.ZonedDateTime\n): Temporal.ZonedDateTime;\nexport function startOfMonth(input: Temporal.PlainDate): Temporal.PlainDate;\nexport function startOfMonth(\n input: Temporal.PlainDate,\n timezone: Timezone\n): Temporal.ZonedDateTime;\nexport function startOfMonth(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n timezone?: Timezone\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (isPlainDate(input) && timezone === undefined) {\n return input.with({ day: 1 });\n }\n\n const zonedDateTime = normalizeWithPlainDate(input, timezone!);\n const firstDay = zonedDateTime.with({ day: 1 });\n return firstDay.startOfDay();\n}\n"],"mappings":";;;;;;;;AAmDO,SAAS,aACd,OACA,UAC6C;AAC7C,MAAI,YAAY,KAAK,KAAK,aAAa,QAAW;AAChD,WAAO,MAAM,KAAK,EAAE,KAAK,EAAE,CAAC;AAAA,EAC9B;AAEA,QAAM,gBAAgB,uBAAuB,OAAO,QAAS;AAC7D,QAAM,WAAW,cAAc,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9C,SAAO,SAAS,WAAW;AAC7B;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
differenceInDays
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JGPTGV5X.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeTemporalInput
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
7
7
|
import {
|
|
8
8
|
isPlainDate
|
|
9
9
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -39,4 +39,4 @@ function eachDayOfInterval(interval) {
|
|
|
39
39
|
export {
|
|
40
40
|
eachDayOfInterval
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
42
|
+
//# sourceMappingURL=chunk-3HD7HEN4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eachDayOfInterval.ts"],"sourcesContent":["import { Temporal, isPlainDate } from './shared/temporal';\nimport { differenceInDays } from './differenceInDays';\nimport { normalizeTemporalInput } from './shared/normalizeTemporalInput';\n\n/**\n * Returns each calendar day within the interval, including both endpoints.\n * PlainDate endpoints return PlainDates in the start calendar, without a timezone.\n * Instant/ZonedDateTime endpoints return ZonedDateTimes.\n * Each element represents the first valid moment of the day in the timezone of the interval start.\n * Nonexistent calendar dates are skipped only for timezone-aware intervals.\n * The interval is inclusive of both start and end days.\n *\n * For Instant inputs, UTC is used as the timezone.\n * For ZonedDateTime inputs, the timezone of the start date is preserved.\n *\n * @param interval - Two PlainDates, or two Instant/ZonedDateTime timeline endpoints\n * @returns PlainDates for date-only endpoints; otherwise ZonedDateTimes at each day start. Reversed endpoints return [].\n *\n * @example\n * ```ts\n * const start = Temporal.ZonedDateTime.from('2025-01-06T10:00:00+00:00[UTC]');\n * const end = Temporal.ZonedDateTime.from('2025-01-10T14:00:00+00:00[UTC]');\n *\n * const days = eachDayOfInterval({ start, end });\n * // [\n * // 2025-01-06T00:00:00+00:00[UTC],\n * // 2025-01-07T00:00:00+00:00[UTC],\n * // 2025-01-08T00:00:00+00:00[UTC],\n * // 2025-01-09T00:00:00+00:00[UTC],\n * // 2025-01-10T00:00:00+00:00[UTC]\n * // ]\n * ```\n *\n * @example\n * ```ts\n * // With timezone - preserves the timezone from start\n * const start = Temporal.ZonedDateTime.from('2025-01-06T10:00:00-05:00[America/New_York]');\n * const end = Temporal.ZonedDateTime.from('2025-01-08T14:00:00-05:00[America/New_York]');\n *\n * const days = eachDayOfInterval({ start, end });\n * // [\n * // 2025-01-06T00:00:00-05:00[America/New_York],\n * // 2025-01-07T00:00:00-05:00[America/New_York],\n * // 2025-01-08T00:00:00-05:00[America/New_York]\n * // ]\n * ```\n *\n * @example\n * ```ts\n * // With Instant (uses UTC)\n * const start = Temporal.Instant.from('2025-01-06T00:00:00Z');\n * const end = Temporal.Instant.from('2025-01-08T00:00:00Z');\n *\n * const days = eachDayOfInterval({ start, end });\n * // [\n * // 2025-01-06T00:00:00+00:00[UTC],\n * // 2025-01-07T00:00:00+00:00[UTC],\n * // 2025-01-08T00:00:00+00:00[UTC]\n * // ]\n * ```\n *\n * @example\n * ```ts\n * // Single day interval\n * const date = Temporal.ZonedDateTime.from('2025-01-15T12:00:00+00:00[UTC]');\n *\n * eachDayOfInterval({ start: date, end: date });\n * // [2025-01-15T00:00:00+00:00[UTC]]\n * ```\n */\nexport function eachDayOfInterval(interval: {\n start: Temporal.PlainDate;\n end: Temporal.PlainDate;\n}): Temporal.PlainDate[];\nexport function eachDayOfInterval(interval: {\n start: Temporal.Instant | Temporal.ZonedDateTime;\n end: Temporal.Instant | Temporal.ZonedDateTime;\n}): Temporal.ZonedDateTime[];\nexport function eachDayOfInterval(interval: {\n start: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate;\n end: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate;\n}): Temporal.ZonedDateTime[] | Temporal.PlainDate[] {\n if (isPlainDate(interval.start) || isPlainDate(interval.end)) {\n if (!isPlainDate(interval.start) || !isPlainDate(interval.end)) {\n throw new TypeError('PlainDate intervals require two PlainDate endpoints');\n }\n const dayCount = differenceInDays(\n interval.end.withCalendar(interval.start.calendarId),\n interval.start\n );\n const days: Temporal.PlainDate[] = [];\n for (let offset = 0; offset <= dayCount; offset++) {\n days.push(interval.start.add({ days: offset }));\n }\n return days;\n }\n const startZoned = normalizeTemporalInput(interval.start);\n const endZoned = normalizeTemporalInput(interval.end);\n if (startZoned.epochNanoseconds > endZoned.epochNanoseconds) return [];\n\n const days: Temporal.ZonedDateTime[] = [];\n let current = startZoned.startOfDay();\n\n // Advancing the resolved date skips nonexistent dates instead of resolving\n // two consecutive PlainDates to the same instant.\n while (current.epochNanoseconds <= endZoned.epochNanoseconds) {\n days.push(current);\n current = current.add({ days: 1 }).startOfDay();\n }\n\n return days;\n}\n"],"mappings":";;;;;;;;;;;AA8EO,SAAS,kBAAkB,UAGkB;AAClD,MAAI,YAAY,SAAS,KAAK,KAAK,YAAY,SAAS,GAAG,GAAG;AAC5D,QAAI,CAAC,YAAY,SAAS,KAAK,KAAK,CAAC,YAAY,SAAS,GAAG,GAAG;AAC9D,YAAM,IAAI,UAAU,qDAAqD;AAAA,IAC3E;AACA,UAAM,WAAW;AAAA,MACf,SAAS,IAAI,aAAa,SAAS,MAAM,UAAU;AAAA,MACnD,SAAS;AAAA,IACX;AACA,UAAMA,QAA6B,CAAC;AACpC,aAAS,SAAS,GAAG,UAAU,UAAU,UAAU;AACjD,MAAAA,MAAK,KAAK,SAAS,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;AAAA,IAChD;AACA,WAAOA;AAAA,EACT;AACA,QAAM,aAAa,uBAAuB,SAAS,KAAK;AACxD,QAAM,WAAW,uBAAuB,SAAS,GAAG;AACpD,MAAI,WAAW,mBAAmB,SAAS,iBAAkB,QAAO,CAAC;AAErE,QAAM,OAAiC,CAAC;AACxC,MAAI,UAAU,WAAW,WAAW;AAIpC,SAAO,QAAQ,oBAAoB,SAAS,kBAAkB;AAC5D,SAAK,KAAK,OAAO;AACjB,cAAU,QAAQ,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW;AAAA,EAChD;AAEA,SAAO;AACT;","names":["days"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addYears
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HRCTWTP3.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlainDate
|
|
6
6
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -13,4 +13,4 @@ function subYears(input, years) {
|
|
|
13
13
|
export {
|
|
14
14
|
subYears
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-3HF4F36S.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/subYears.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from './shared/temporal';\nimport { addYears } from './addYears';\n\n/**\n * Subtracts the specified number of years from a datetime or date.\n *\n * This is a convenience wrapper around addYears with negated value.\n * Properly handles leap years and calendar edge cases through Temporal API.\n *\n * PlainDate inputs stay in calendar space, preserving their calendar without a timezone.\n *\n * @param input - A Temporal.Instant (UTC), Temporal.ZonedDateTime, or Temporal.PlainDate\n * @param years - Number of years to subtract\n * @returns PlainDate for a date input; otherwise ZonedDateTime with years subtracted\n *\n * @example\n * ```ts\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = subYears(instant, 2);\n * // 2023-01-20T12:00:
|
|
1
|
+
{"version":3,"sources":["../src/subYears.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from './shared/temporal';\nimport { addYears } from './addYears';\n\n/**\n * Subtracts the specified number of years from a datetime or date.\n *\n * This is a convenience wrapper around addYears with negated value.\n * Properly handles leap years and calendar edge cases through Temporal API.\n *\n * PlainDate inputs stay in calendar space, preserving their calendar without a timezone.\n *\n * @param input - A Temporal.Instant (UTC), Temporal.ZonedDateTime, or Temporal.PlainDate\n * @param years - Number of years to subtract\n * @returns PlainDate for a date input; otherwise ZonedDateTime with years subtracted\n *\n * @example\n * ```ts\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = subYears(instant, 2);\n * // 2023-01-20T12:00:00+00:00[UTC] (2 years earlier)\n * ```\n */\nexport function subYears(input: Temporal.PlainDate, years: number): Temporal.PlainDate;\nexport function subYears(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n years: number\n): Temporal.ZonedDateTime;\nexport function subYears(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n years: number\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n // Narrow each branch to the matching addYears overload.\n return isPlainDate(input) ? addYears(input, -years) : addYears(input, -years);\n}\n"],"mappings":";;;;;;;;AA2BO,SAAS,SACd,OACA,OAC6C;AAE7C,SAAO,YAAY,KAAK,IAAI,SAAS,OAAO,CAAC,KAAK,IAAI,SAAS,OAAO,CAAC,KAAK;AAC9E;","names":[]}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import {
|
|
2
|
+
consumeToken
|
|
3
|
+
} from "./chunk-HH2HTC44.js";
|
|
4
|
+
import {
|
|
5
|
+
Temporal
|
|
6
|
+
} from "./chunk-BSVOJYJ7.js";
|
|
7
|
+
|
|
8
|
+
// src/parse.ts
|
|
9
|
+
function parse(text, pattern, options = {}) {
|
|
10
|
+
const { locale = "en-US", timeZone } = options;
|
|
11
|
+
const fields = readFields(text, pattern, locale);
|
|
12
|
+
const fail = (reason) => new RangeError(`Cannot parse "${text}" with pattern "${pattern}": ${reason}`);
|
|
13
|
+
if (fields.year === void 0 || fields.month === void 0 || fields.day === void 0) {
|
|
14
|
+
throw fail("the pattern needs a year, month, and day");
|
|
15
|
+
}
|
|
16
|
+
const date = Temporal.PlainDate.from(
|
|
17
|
+
{ year: fields.year, month: fields.month, day: fields.day },
|
|
18
|
+
{ overflow: "reject" }
|
|
19
|
+
);
|
|
20
|
+
if (fields.dayOfWeek !== void 0 && fields.dayOfWeek !== date.dayOfWeek) {
|
|
21
|
+
throw fail(`${date} is not that day of the week`);
|
|
22
|
+
}
|
|
23
|
+
const hasTime = fields.hour !== void 0 || fields.hour12 !== void 0 || fields.minute !== void 0 || fields.second !== void 0 || fields.millisecond !== void 0;
|
|
24
|
+
if (timeZone === void 0) {
|
|
25
|
+
if (hasTime || fields.offset !== void 0) {
|
|
26
|
+
throw new TypeError("Patterns with time or offset fields need a timeZone");
|
|
27
|
+
}
|
|
28
|
+
return date;
|
|
29
|
+
}
|
|
30
|
+
if (!hasTime && fields.offset === void 0) {
|
|
31
|
+
return date.toZonedDateTime(timeZone);
|
|
32
|
+
}
|
|
33
|
+
if (fields.hour12 !== void 0) {
|
|
34
|
+
if (fields.pm === void 0) throw fail("12-hour times (h) need AM/PM (a)");
|
|
35
|
+
if (fields.hour12 < 1 || fields.hour12 > 12)
|
|
36
|
+
throw fail(`${fields.hour12} is not a 12-hour hour`);
|
|
37
|
+
}
|
|
38
|
+
const hour = fields.hour ?? (fields.hour12 === void 0 ? 0 : fields.hour12 % 12 + (fields.pm ? 12 : 0));
|
|
39
|
+
const dateTime = Temporal.PlainDateTime.from(
|
|
40
|
+
{
|
|
41
|
+
year: date.year,
|
|
42
|
+
month: date.month,
|
|
43
|
+
day: date.day,
|
|
44
|
+
hour,
|
|
45
|
+
minute: fields.minute ?? 0,
|
|
46
|
+
second: fields.second ?? 0,
|
|
47
|
+
millisecond: fields.millisecond ?? 0
|
|
48
|
+
},
|
|
49
|
+
{ overflow: "reject" }
|
|
50
|
+
);
|
|
51
|
+
if (fields.offset !== void 0) {
|
|
52
|
+
return Temporal.Instant.from(`${dateTime}${fields.offset}`).toZonedDateTimeISO(timeZone);
|
|
53
|
+
}
|
|
54
|
+
return dateTime.toZonedDateTime(timeZone);
|
|
55
|
+
}
|
|
56
|
+
function readFields(text, pattern, locale) {
|
|
57
|
+
const fields = {};
|
|
58
|
+
let position = 0;
|
|
59
|
+
const fail = (reason) => new RangeError(`Cannot parse "${text}" with pattern "${pattern}": ${reason}`);
|
|
60
|
+
const literal = (expected) => {
|
|
61
|
+
if (!text.startsWith(expected, position)) {
|
|
62
|
+
throw fail(`expected "${expected}" at position ${position}`);
|
|
63
|
+
}
|
|
64
|
+
position += expected.length;
|
|
65
|
+
};
|
|
66
|
+
const digits = (min, max) => {
|
|
67
|
+
const match = text.slice(position).match(new RegExp(`^\\d{${min},${max}}`));
|
|
68
|
+
if (!match)
|
|
69
|
+
throw fail(`expected ${min === max ? min : `${min}\u2013${max}`} digits at position ${position}`);
|
|
70
|
+
position += match[0].length;
|
|
71
|
+
return match[0];
|
|
72
|
+
};
|
|
73
|
+
const name = (candidates) => {
|
|
74
|
+
const rest = text.slice(position).toLocaleLowerCase(locale);
|
|
75
|
+
let best = -1;
|
|
76
|
+
let length = 0;
|
|
77
|
+
candidates.forEach((candidate, index) => {
|
|
78
|
+
const lower = candidate.toLocaleLowerCase(locale);
|
|
79
|
+
if (lower.length > length && rest.startsWith(lower)) {
|
|
80
|
+
best = index;
|
|
81
|
+
length = lower.length;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (best === -1) throw fail(`expected one of ${candidates.join(", ")} at position ${position}`);
|
|
85
|
+
position += length;
|
|
86
|
+
return best;
|
|
87
|
+
};
|
|
88
|
+
for (let i = 0; i < pattern.length; ) {
|
|
89
|
+
const char = pattern[i];
|
|
90
|
+
if (char === "'") {
|
|
91
|
+
if (pattern[i + 1] === "'") {
|
|
92
|
+
literal("'");
|
|
93
|
+
i += 2;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
let quoted = "";
|
|
97
|
+
for (i++; i < pattern.length; i++) {
|
|
98
|
+
if (pattern[i] !== "'") quoted += pattern[i];
|
|
99
|
+
else if (pattern[i + 1] === "'") quoted += "'", i++;
|
|
100
|
+
else break;
|
|
101
|
+
}
|
|
102
|
+
literal(quoted);
|
|
103
|
+
i++;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const token = consumeToken(pattern, i, char);
|
|
107
|
+
if (token === null) {
|
|
108
|
+
literal(char);
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
i += token.length;
|
|
113
|
+
switch (token) {
|
|
114
|
+
case "yyyy":
|
|
115
|
+
fields.year = Number(digits(4, 4));
|
|
116
|
+
break;
|
|
117
|
+
case "y":
|
|
118
|
+
fields.year = Number(digits(1, 6));
|
|
119
|
+
break;
|
|
120
|
+
case "MMMM":
|
|
121
|
+
case "MMM":
|
|
122
|
+
fields.month = name(monthNames(locale, token === "MMMM" ? "long" : "short")) + 1;
|
|
123
|
+
break;
|
|
124
|
+
case "MM":
|
|
125
|
+
fields.month = Number(digits(2, 2));
|
|
126
|
+
break;
|
|
127
|
+
case "M":
|
|
128
|
+
fields.month = Number(digits(1, 2));
|
|
129
|
+
break;
|
|
130
|
+
case "dd":
|
|
131
|
+
fields.day = Number(digits(2, 2));
|
|
132
|
+
break;
|
|
133
|
+
case "d":
|
|
134
|
+
fields.day = Number(digits(1, 2));
|
|
135
|
+
break;
|
|
136
|
+
case "EEEE":
|
|
137
|
+
case "EEE":
|
|
138
|
+
case "EE":
|
|
139
|
+
case "E":
|
|
140
|
+
fields.dayOfWeek = name(weekdayNames(locale, token === "EEEE" ? "long" : "short")) + 1;
|
|
141
|
+
break;
|
|
142
|
+
case "HH":
|
|
143
|
+
fields.hour = Number(digits(2, 2));
|
|
144
|
+
break;
|
|
145
|
+
case "H":
|
|
146
|
+
fields.hour = Number(digits(1, 2));
|
|
147
|
+
break;
|
|
148
|
+
case "hh":
|
|
149
|
+
fields.hour12 = Number(digits(2, 2));
|
|
150
|
+
break;
|
|
151
|
+
case "h":
|
|
152
|
+
fields.hour12 = Number(digits(1, 2));
|
|
153
|
+
break;
|
|
154
|
+
case "aaaa":
|
|
155
|
+
case "aaa":
|
|
156
|
+
case "aa":
|
|
157
|
+
case "a": {
|
|
158
|
+
const [am, pm] = dayPeriods(locale);
|
|
159
|
+
const candidates = [am, pm];
|
|
160
|
+
if (isAsciiAmPm(am) && isAsciiAmPm(pm)) candidates.push("a.m.", "p.m.");
|
|
161
|
+
fields.pm = name(candidates) % 2 === 1;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case "mm":
|
|
165
|
+
fields.minute = Number(digits(2, 2));
|
|
166
|
+
break;
|
|
167
|
+
case "m":
|
|
168
|
+
fields.minute = Number(digits(1, 2));
|
|
169
|
+
break;
|
|
170
|
+
case "ss":
|
|
171
|
+
fields.second = Number(digits(2, 2));
|
|
172
|
+
break;
|
|
173
|
+
case "s":
|
|
174
|
+
fields.second = Number(digits(1, 2));
|
|
175
|
+
break;
|
|
176
|
+
case "SSS":
|
|
177
|
+
case "SS":
|
|
178
|
+
case "S":
|
|
179
|
+
fields.millisecond = Number(digits(token.length, token.length).padEnd(3, "0"));
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
if (/^[Xx]+$/.test(token)) {
|
|
183
|
+
const match = text.slice(position).match(token[0] === "X" ? /^(Z|[+-]\d{2}(:?\d{2}){0,2})/ : /^[+-]\d{2}(:?\d{2}){0,2}/);
|
|
184
|
+
if (!match) throw fail(`expected a UTC offset at position ${position}`);
|
|
185
|
+
position += match[0].length;
|
|
186
|
+
fields.offset = match[0] === "Z" ? "+00:00" : normalizeOffset(match[0]);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
throw new RangeError(
|
|
190
|
+
token === "yy" ? "parse does not read two-digit years (yy); the century would be a guess" : token === "T" || token === "t" ? "parse does not read timestamps (T, t); use toInstant" : `parse does not support the "${token}" token`
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (position !== text.length) {
|
|
195
|
+
throw fail(`unexpected "${text.slice(position)}" at position ${position}`);
|
|
196
|
+
}
|
|
197
|
+
return fields;
|
|
198
|
+
}
|
|
199
|
+
function normalizeOffset(offset) {
|
|
200
|
+
const numbers = offset.slice(1).replaceAll(":", "");
|
|
201
|
+
const parts = numbers.match(/\d{2}/g);
|
|
202
|
+
return `${offset[0]}${parts.length === 1 ? `${parts[0]}:00` : parts.join(":")}`;
|
|
203
|
+
}
|
|
204
|
+
function intlPart(locale, options, type, date) {
|
|
205
|
+
const epochMilliseconds = date.toZonedDateTime("UTC").epochMilliseconds;
|
|
206
|
+
return new Intl.DateTimeFormat(locale, { ...options, timeZone: "UTC" }).formatToParts(epochMilliseconds).find((part) => part.type === type)?.value ?? "";
|
|
207
|
+
}
|
|
208
|
+
function monthNames(locale, style) {
|
|
209
|
+
return Array.from(
|
|
210
|
+
{ length: 12 },
|
|
211
|
+
(_, index) => intlPart(
|
|
212
|
+
locale,
|
|
213
|
+
{ month: style },
|
|
214
|
+
"month",
|
|
215
|
+
Temporal.PlainDateTime.from({ year: 2e3, month: index + 1, day: 15 })
|
|
216
|
+
)
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
function weekdayNames(locale, style) {
|
|
220
|
+
return Array.from(
|
|
221
|
+
{ length: 7 },
|
|
222
|
+
(_, index) => intlPart(
|
|
223
|
+
locale,
|
|
224
|
+
{ weekday: style },
|
|
225
|
+
"weekday",
|
|
226
|
+
Temporal.PlainDateTime.from({ year: 2e3, month: 1, day: 3 + index })
|
|
227
|
+
)
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
function dayPeriods(locale) {
|
|
231
|
+
const at = (hour) => intlPart(
|
|
232
|
+
locale,
|
|
233
|
+
{ hour: "numeric", hour12: true },
|
|
234
|
+
"dayPeriod",
|
|
235
|
+
Temporal.PlainDateTime.from({ year: 2e3, month: 1, day: 3, hour })
|
|
236
|
+
);
|
|
237
|
+
return [at(9), at(15)];
|
|
238
|
+
}
|
|
239
|
+
function isAsciiAmPm(period) {
|
|
240
|
+
const normalized = period.toUpperCase().replace(/[.\s]/g, "");
|
|
241
|
+
return normalized === "AM" || normalized === "PM";
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export {
|
|
245
|
+
parse
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=chunk-3OOGJRXH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/parse.ts"],"sourcesContent":["import { Temporal } from './shared/temporal';\nimport { consumeToken } from './shared/formatTokens';\nimport type { Timezone } from './types';\n\nexport interface ParseOptions {\n /** Locale for month, weekday, and AM/PM names. @default 'en-US' */\n locale?: string;\n /** Timezone the parsed wall-clock time belongs to. Required when the pattern has time fields. */\n timeZone?: Timezone;\n}\n\ninterface Fields {\n year?: number;\n month?: number;\n day?: number;\n dayOfWeek?: number;\n hour?: number;\n hour12?: number;\n pm?: boolean;\n minute?: number;\n second?: number;\n millisecond?: number;\n offset?: string;\n}\n\n/**\n * Reads a date, or a date and time, written in a known pattern. The pattern uses\n * the same tokens as `format`, so text that `format` writes with a supported\n * pattern reads back to the same fields.\n *\n * Without a timeZone the result is a PlainDate, and the pattern may only hold\n * date fields. With a timeZone the result is a ZonedDateTime in that timezone:\n * an offset in the text (`XXX`) fixes the moment, otherwise the wall-clock time\n * is read in the timezone, and a time skipped by a DST change moves forward as\n * in Temporal. A pattern without time fields gives the start of that day.\n *\n * Supported tokens: `yyyy` `y` `MMMM` `MMM` `MM` `M` `dd` `d` `EEEE` `EEE` `HH`\n * `H` `hh` `h` `a` `mm` `m` `ss` `s` `SSS` `SS` `S` `X…XXXXX` `x…xxxxx`. Text in\n * single quotes and any other character must match exactly. Two-digit years\n * (`yy`) are rejected because the century is a guess.\n *\n * @param text - The text to read\n * @param pattern - The pattern the text is written in, such as `dd/MM/yyyy`\n * @param options - `timeZone` for patterns with a time; `locale` for names (default 'en-US')\n * @returns PlainDate without a timeZone; ZonedDateTime with one\n * @throws RangeError if the text does not match the pattern or names an impossible date\n * @throws TypeError if the pattern has time fields but no timeZone is given\n *\n * @example\n * ```ts\n * parse('20/01/2025', 'dd/MM/yyyy').toString(); // \"2025-01-20\"\n * parse('January 20, 2025', 'MMMM d, yyyy').toString(); // \"2025-01-20\"\n * ```\n *\n * @example\n * ```ts\n * parse('01/20/2025 3:45 PM', 'MM/dd/yyyy h:mm a', { timeZone: 'America/New_York' }).toString();\n * // \"2025-01-20T15:45:00-05:00[America/New_York]\"\n * ```\n *\n * @example\n * ```ts\n * parse('20 enero 2025', 'd MMMM yyyy', { locale: 'es' }).toString(); // \"2025-01-20\"\n * ```\n */\nexport function parse(\n text: string,\n pattern: string,\n options: { locale?: string; timeZone: Timezone }\n): Temporal.ZonedDateTime;\nexport function parse(\n text: string,\n pattern: string,\n options?: { locale?: string; timeZone?: undefined }\n): Temporal.PlainDate;\nexport function parse(\n text: string,\n pattern: string,\n options: ParseOptions = {}\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n const { locale = 'en-US', timeZone } = options;\n const fields = readFields(text, pattern, locale);\n const fail = (reason: string) =>\n new RangeError(`Cannot parse \"${text}\" with pattern \"${pattern}\": ${reason}`);\n\n if (fields.year === undefined || fields.month === undefined || fields.day === undefined) {\n throw fail('the pattern needs a year, month, and day');\n }\n const date = Temporal.PlainDate.from(\n { year: fields.year, month: fields.month, day: fields.day },\n { overflow: 'reject' }\n );\n if (fields.dayOfWeek !== undefined && fields.dayOfWeek !== date.dayOfWeek) {\n throw fail(`${date} is not that day of the week`);\n }\n\n const hasTime =\n fields.hour !== undefined ||\n fields.hour12 !== undefined ||\n fields.minute !== undefined ||\n fields.second !== undefined ||\n fields.millisecond !== undefined;\n if (timeZone === undefined) {\n if (hasTime || fields.offset !== undefined) {\n throw new TypeError('Patterns with time or offset fields need a timeZone');\n }\n return date;\n }\n if (!hasTime && fields.offset === undefined) {\n return date.toZonedDateTime(timeZone);\n }\n\n if (fields.hour12 !== undefined) {\n if (fields.pm === undefined) throw fail('12-hour times (h) need AM/PM (a)');\n if (fields.hour12 < 1 || fields.hour12 > 12)\n throw fail(`${fields.hour12} is not a 12-hour hour`);\n }\n const hour =\n fields.hour ?? (fields.hour12 === undefined ? 0 : (fields.hour12 % 12) + (fields.pm ? 12 : 0));\n const dateTime = Temporal.PlainDateTime.from(\n {\n year: date.year,\n month: date.month,\n day: date.day,\n hour,\n minute: fields.minute ?? 0,\n second: fields.second ?? 0,\n millisecond: fields.millisecond ?? 0\n },\n { overflow: 'reject' }\n );\n if (fields.offset !== undefined) {\n return Temporal.Instant.from(`${dateTime}${fields.offset}`).toZonedDateTimeISO(timeZone);\n }\n return dateTime.toZonedDateTime(timeZone);\n}\n\nfunction readFields(text: string, pattern: string, locale: string): Fields {\n const fields: Fields = {};\n let position = 0;\n const fail = (reason: string) =>\n new RangeError(`Cannot parse \"${text}\" with pattern \"${pattern}\": ${reason}`);\n\n const literal = (expected: string) => {\n if (!text.startsWith(expected, position)) {\n throw fail(`expected \"${expected}\" at position ${position}`);\n }\n position += expected.length;\n };\n\n const digits = (min: number, max: number) => {\n const match = text.slice(position).match(new RegExp(`^\\\\d{${min},${max}}`));\n if (!match)\n throw fail(`expected ${min === max ? min : `${min}–${max}`} digits at position ${position}`);\n position += match[0].length;\n return match[0];\n };\n\n const name = (candidates: readonly string[]) => {\n const rest = text.slice(position).toLocaleLowerCase(locale);\n let best = -1;\n let length = 0;\n candidates.forEach((candidate, index) => {\n const lower = candidate.toLocaleLowerCase(locale);\n if (lower.length > length && rest.startsWith(lower)) {\n best = index;\n length = lower.length;\n }\n });\n if (best === -1) throw fail(`expected one of ${candidates.join(', ')} at position ${position}`);\n position += length;\n return best;\n };\n\n for (let i = 0; i < pattern.length;) {\n const char = pattern[i]!;\n\n if (char === \"'\") {\n // '' is a literal quote; 'text' is literal text with '' for a quote inside.\n if (pattern[i + 1] === \"'\") {\n literal(\"'\");\n i += 2;\n continue;\n }\n let quoted = '';\n for (i++; i < pattern.length; i++) {\n if (pattern[i] !== \"'\") quoted += pattern[i];\n else if (pattern[i + 1] === \"'\") ((quoted += \"'\"), i++);\n else break;\n }\n literal(quoted);\n i++;\n continue;\n }\n\n const token = consumeToken(pattern, i, char);\n if (token === null) {\n literal(char);\n i++;\n continue;\n }\n i += token.length;\n\n switch (token) {\n case 'yyyy':\n fields.year = Number(digits(4, 4));\n break;\n case 'y':\n fields.year = Number(digits(1, 6));\n break;\n case 'MMMM':\n case 'MMM':\n fields.month = name(monthNames(locale, token === 'MMMM' ? 'long' : 'short')) + 1;\n break;\n case 'MM':\n fields.month = Number(digits(2, 2));\n break;\n case 'M':\n fields.month = Number(digits(1, 2));\n break;\n case 'dd':\n fields.day = Number(digits(2, 2));\n break;\n case 'd':\n fields.day = Number(digits(1, 2));\n break;\n case 'EEEE':\n case 'EEE':\n case 'EE':\n case 'E':\n fields.dayOfWeek = name(weekdayNames(locale, token === 'EEEE' ? 'long' : 'short')) + 1;\n break;\n case 'HH':\n fields.hour = Number(digits(2, 2));\n break;\n case 'H':\n fields.hour = Number(digits(1, 2));\n break;\n case 'hh':\n fields.hour12 = Number(digits(2, 2));\n break;\n case 'h':\n fields.hour12 = Number(digits(1, 2));\n break;\n case 'aaaa':\n case 'aaa':\n case 'aa':\n case 'a': {\n const [am, pm] = dayPeriods(locale);\n const candidates = [am, pm];\n if (isAsciiAmPm(am) && isAsciiAmPm(pm)) candidates.push('a.m.', 'p.m.');\n fields.pm = name(candidates) % 2 === 1;\n break;\n }\n case 'mm':\n fields.minute = Number(digits(2, 2));\n break;\n case 'm':\n fields.minute = Number(digits(1, 2));\n break;\n case 'ss':\n fields.second = Number(digits(2, 2));\n break;\n case 's':\n fields.second = Number(digits(1, 2));\n break;\n case 'SSS':\n case 'SS':\n case 'S':\n fields.millisecond = Number(digits(token.length, token.length).padEnd(3, '0'));\n break;\n default:\n if (/^[Xx]+$/.test(token)) {\n const match = text\n .slice(position)\n .match(token[0] === 'X' ? /^(Z|[+-]\\d{2}(:?\\d{2}){0,2})/ : /^[+-]\\d{2}(:?\\d{2}){0,2}/);\n if (!match) throw fail(`expected a UTC offset at position ${position}`);\n position += match[0].length;\n fields.offset = match[0] === 'Z' ? '+00:00' : normalizeOffset(match[0]);\n break;\n }\n throw new RangeError(\n token === 'yy'\n ? 'parse does not read two-digit years (yy); the century would be a guess'\n : token === 'T' || token === 't'\n ? 'parse does not read timestamps (T, t); use toInstant'\n : `parse does not support the \"${token}\" token`\n );\n }\n }\n\n if (position !== text.length) {\n throw fail(`unexpected \"${text.slice(position)}\" at position ${position}`);\n }\n return fields;\n}\n\n// \"+0530\" and \"+05:30\" both become \"+05:30\", which Temporal reads.\nfunction normalizeOffset(offset: string): string {\n const numbers = offset.slice(1).replaceAll(':', '');\n const parts = numbers.match(/\\d{2}/g)!;\n return `${offset[0]}${parts.length === 1 ? `${parts[0]}:00` : parts.join(':')}`;\n}\n\n// Names come from Intl exactly as format writes them, so what format writes, parse reads.\nfunction intlPart(\n locale: string,\n options: Intl.DateTimeFormatOptions,\n type: Intl.DateTimeFormatPartTypes,\n date: Temporal.PlainDateTime\n): string {\n const epochMilliseconds = date.toZonedDateTime('UTC').epochMilliseconds;\n return (\n new Intl.DateTimeFormat(locale, { ...options, timeZone: 'UTC' })\n .formatToParts(epochMilliseconds)\n .find((part) => part.type === type)?.value ?? ''\n );\n}\n\nfunction monthNames(locale: string, style: 'long' | 'short'): string[] {\n return Array.from({ length: 12 }, (_, index) =>\n intlPart(\n locale,\n { month: style },\n 'month',\n Temporal.PlainDateTime.from({ year: 2000, month: index + 1, day: 15 })\n )\n );\n}\n\nfunction weekdayNames(locale: string, style: 'long' | 'short'): string[] {\n // 3 January 2000 was a Monday.\n return Array.from({ length: 7 }, (_, index) =>\n intlPart(\n locale,\n { weekday: style },\n 'weekday',\n Temporal.PlainDateTime.from({ year: 2000, month: 1, day: 3 + index })\n )\n );\n}\n\nfunction dayPeriods(locale: string): [am: string, pm: string] {\n const at = (hour: number) =>\n intlPart(\n locale,\n { hour: 'numeric', hour12: true },\n 'dayPeriod',\n Temporal.PlainDateTime.from({ year: 2000, month: 1, day: 3, hour })\n );\n return [at(9), at(15)];\n}\n\nfunction isAsciiAmPm(period: string): boolean {\n const normalized = period.toUpperCase().replace(/[.\\s]/g, '');\n return normalized === 'AM' || normalized === 'PM';\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeTemporalInput
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlainDate
|
|
6
6
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -16,4 +16,4 @@ function addWeeks(input, weeks) {
|
|
|
16
16
|
export {
|
|
17
17
|
addWeeks
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-3X2U6I44.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/addWeeks.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from './shared/temporal';\nimport { normalizeTemporalInput } from './shared/normalizeTemporalInput';\n\n/**\n * Adds the specified number of weeks to a datetime or date.\n *\n * Properly handles DST transitions and calendar edge cases through Temporal API.\n * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.\n *\n * PlainDate inputs stay in calendar space, preserving their calendar without a timezone.\n *\n * @param input - A Temporal.Instant (UTC), Temporal.ZonedDateTime, or Temporal.PlainDate\n * @param weeks - Number of weeks to add (can be negative to subtract)\n * @returns PlainDate for a date input; otherwise ZonedDateTime with weeks added\n *\n * @example\n * ```ts\n * // From Instant (always UTC)\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = addWeeks(instant, 2);\n * // 2025-02-03T12:00:00+00:00[UTC] (2 weeks later)\n * ```\n *\n * @example\n * ```ts\n * // From ZonedDateTime (preserves timezone)\n * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');\n * const result = addWeeks(zoned, 2);\n * // 2025-02-03T15:30:00-05:00[America/New_York]\n * ```\n *\n * @example\n * ```ts\n * // Negative values subtract weeks\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = addWeeks(instant, -1);\n * // 2025-01-13T12:00:00+00:00[UTC] (1 week earlier)\n * ```\n */\nexport function addWeeks(input: Temporal.PlainDate, weeks: number): Temporal.PlainDate;\nexport function addWeeks(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n weeks: number\n): Temporal.ZonedDateTime;\nexport function addWeeks(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n weeks: number\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (isPlainDate(input)) {\n return input.add({ weeks });\n }\n return normalizeTemporalInput(input).add({ weeks });\n}\n"],"mappings":";;;;;;;;AA4CO,SAAS,SACd,OACA,OAC6C;AAC7C,MAAI,YAAY,KAAK,GAAG;AACtB,WAAO,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,EAC5B;AACA,SAAO,uBAAuB,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;AACpD;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeTemporalInput
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
4
|
|
|
5
5
|
// src/isSameMicrosecond.ts
|
|
6
6
|
function isSameMicrosecond(date1, date2) {
|
|
@@ -12,4 +12,4 @@ function isSameMicrosecond(date1, date2) {
|
|
|
12
12
|
export {
|
|
13
13
|
isSameMicrosecond
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-3XGUCQ2A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/isSameMicrosecond.ts"],"sourcesContent":["import type { Temporal } from './shared/temporal';\nimport { normalizeTemporalInput } from './shared/normalizeTemporalInput';\n\n/**\n * Returns true if both datetimes fall in the same microsecond.\n * Compares the year, month, day, hour, minute, second, millisecond, and microsecond fields directly.\n * Ignores sub-microsecond precision (nanoseconds).\n *\n * Instant inputs are converted to UTC. For ZonedDateTime inputs, their\n * timezone is preserved. Convert to a common timezone before calling if\n * you need to compare from a specific perspective.\n *\n * @param date1 - First datetime (Instant or ZonedDateTime)\n * @param date2 - Second datetime (Instant or ZonedDateTime)\n * @returns true if both dates are in the same microsecond, false otherwise\n *\n * @example\n * ```ts\n * // Same timezone, same microsecond\n * const time1 = Temporal.ZonedDateTime.from('2025-01-20T14:30:45.123456+00:00[UTC]');\n * const time2 = Temporal.ZonedDateTime.from('2025-01-20T14:30:45.123456999+00:00[UTC]');\n *\n * isSameMicrosecond(time1, time2); // true\n * ```\n *\n * @example\n * ```ts\n * // Same timezone, different microseconds\n * const us456 = Temporal.ZonedDateTime.from('2025-01-20T14:30:45.123456+00:00[UTC]');\n * const us457 = Temporal.ZonedDateTime.from('2025-01-20T14:30:45.123457+00:00[UTC]');\n *\n * isSameMicrosecond(us456, us457); // false\n * ```\n *\n * @example\n * ```ts\n * // Different timezones - compares their local microseconds\n * const ny = Temporal.ZonedDateTime.from('2025-01-20T14:30:45.123456-05:00[America/New_York]');\n * const tokyo = Temporal.ZonedDateTime.from('2025-01-21T04:30:45.123456+09:00[Asia/Tokyo]');\n *\n * // Same instant, different local microseconds from each person's perspective\n * isSameMicrosecond(ny, tokyo); // false (14:30:45.123456 in NY, 04:30:45.123456 in Tokyo)\n *\n * // Convert to UTC to compare in UTC timezone\n * isSameMicrosecond(ny.withTimeZone('UTC'), tokyo.withTimeZone('UTC')); // true (both 19:30:45.123456 in UTC)\n *\n * // Convert to NY timezone to compare from NY perspective\n * isSameMicrosecond(ny, tokyo.withTimeZone('America/New_York')); // true (both 14:30:45.123456 in NY)\n * ```\n *\n * @example\n * ```ts\n * // Instant inputs are converted to UTC\n * const instant1 = Temporal.Instant.from('2025-01-20T14:30:45.123456789Z');\n * const instant2 = Temporal.Instant.from('2025-01-20T14:30:45.123456999Z');\n *\n * isSameMicrosecond(instant1, instant2); // true (both 14:30:45.123456 in UTC)\n * ```\n */\nexport function isSameMicrosecond(\n date1: Temporal.Instant | Temporal.ZonedDateTime,\n date2: Temporal.Instant | Temporal.ZonedDateTime\n): boolean {\n const zoned1 = normalizeTemporalInput(date1);\n const zoned2 = normalizeTemporalInput(date2);\n\n return (\n zoned1.year === zoned2.year &&\n zoned1.month === zoned2.month &&\n zoned1.day === zoned2.day &&\n zoned1.hour === zoned2.hour &&\n zoned1.minute === zoned2.minute &&\n zoned1.second === zoned2.second &&\n zoned1.millisecond === zoned2.millisecond &&\n zoned1.microsecond === zoned2.microsecond\n );\n}\n"],"mappings":";;;;;AA2DO,SAAS,kBACd,OACA,OACS;AACT,QAAM,SAAS,uBAAuB,KAAK;AAC3C,QAAM,SAAS,uBAAuB,KAAK;AAE3C,SACE,OAAO,SAAS,OAAO,QACvB,OAAO,UAAU,OAAO,SACxB,OAAO,QAAQ,OAAO,OACtB,OAAO,SAAS,OAAO,QACvB,OAAO,WAAW,OAAO,UACzB,OAAO,WAAW,OAAO,UACzB,OAAO,gBAAgB,OAAO,eAC9B,OAAO,gBAAgB,OAAO;AAElC;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addBusinessDays
|
|
3
|
+
} from "./chunk-2JXI3CAL.js";
|
|
4
|
+
import {
|
|
5
|
+
isPlainDate
|
|
6
|
+
} from "./chunk-BSVOJYJ7.js";
|
|
7
|
+
|
|
8
|
+
// src/subBusinessDays.ts
|
|
9
|
+
function subBusinessDays(input, days, holidays) {
|
|
10
|
+
return isPlainDate(input) ? addBusinessDays(input, -days, holidays) : addBusinessDays(input, -days, holidays);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
subBusinessDays
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-42IFQS4W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/subBusinessDays.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from './shared/temporal';\nimport { addBusinessDays } from './addBusinessDays';\n\n/**\n * Subtracts business days (Monday–Friday), skipping weekends and any holidays\n * you pass. Equivalent to `addBusinessDays(input, -days, holidays)`.\n *\n * Instant inputs are converted to UTC. ZonedDateTime inputs keep their\n * timezone and time of day. PlainDate inputs stay dates.\n *\n * @param input - An Instant (UTC), ZonedDateTime, or PlainDate\n * @param days - Whole business days to subtract (negative to add)\n * @param holidays - Dates that are not business days. For Instant and ZonedDateTime\n * inputs they are matched against the input's own date (UTC for Instant).\n * @returns PlainDate for a date input; otherwise ZonedDateTime\n * @throws RangeError if days is not an integer\n *\n * @example\n * ```ts\n * const monday = Temporal.PlainDate.from('2025-01-27');\n *\n * subBusinessDays(monday, 1); // 2025-01-24 (Friday)\n * ```\n */\nexport function subBusinessDays(\n input: Temporal.PlainDate,\n days: number,\n holidays?: readonly Temporal.PlainDate[]\n): Temporal.PlainDate;\nexport function subBusinessDays(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n days: number,\n holidays?: readonly Temporal.PlainDate[]\n): Temporal.ZonedDateTime;\nexport function subBusinessDays(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n days: number,\n holidays?: readonly Temporal.PlainDate[]\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n // Narrow each branch to the matching addBusinessDays overload.\n return isPlainDate(input)\n ? addBusinessDays(input, -days, holidays)\n : addBusinessDays(input, -days, holidays);\n}\n"],"mappings":";;;;;;;;AAkCO,SAAS,gBACd,OACA,MACA,UAC6C;AAE7C,SAAO,YAAY,KAAK,IACpB,gBAAgB,OAAO,CAAC,MAAM,QAAQ,IACtC,gBAAgB,OAAO,CAAC,MAAM,QAAQ;AAC5C;","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
quarterStartMonth
|
|
3
|
-
} from "./chunk-XS2HUADA.js";
|
|
4
1
|
import {
|
|
5
2
|
normalizeWithPlainDate
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TCB3IDJM.js";
|
|
7
4
|
import {
|
|
8
5
|
getEndOfDay
|
|
9
6
|
} from "./chunk-NMMMAMKP.js";
|
|
7
|
+
import {
|
|
8
|
+
quarterStartMonth
|
|
9
|
+
} from "./chunk-XS2HUADA.js";
|
|
10
10
|
import {
|
|
11
11
|
isPlainDate
|
|
12
12
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -32,4 +32,4 @@ function endOfQuarter(input, timezone) {
|
|
|
32
32
|
export {
|
|
33
33
|
endOfQuarter
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-4FQCY75E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/endOfQuarter.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from \"./shared/temporal\";\nimport type { Timezone } from \"./types\";\nimport { getEndOfDay } from \"./shared/endOfDay\";\nimport { normalizeWithPlainDate } from \"./shared/normalizeWithPlainDate\";\nimport { quarterStartMonth } from \"./shared/quarter\";\n\n/**\n * Returns a ZonedDateTime representing the last moment of the quarter\n * (last day of the quarter's ending month at 23:59:59.999999999).\n *\n * Quarters: Q1 = Jan–Mar, Q2 = Apr–Jun, Q3 = Jul–Sep, Q4 = Oct–Dec.\n *\n * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime\n * @returns ZonedDateTime at the last day of the quarter at 23:59:59.999999999\n *\n * @example\n * ```ts\n * // From Instant (always UTC)\n * const instant = Temporal.Instant.from('2025-05-15T12:00:00Z');\n * const end = endOfQuarter(instant);\n * // 2025-06-30T23:59:59.999999999+00:00[UTC]\n * ```\n *\n * @example\n * ```ts\n * // From ZonedDateTime (uses its timezone)\n * const zoned = Temporal.ZonedDateTime.from('2025-02-15T15:30:00-05:00[America/New_York]');\n * const end = endOfQuarter(zoned);\n * // 2025-03-31T23:59:59.999999999-04:00[America/New_York]\n * ```\n *\n * @example\n * ```ts\n * // From a PlainDate in a timezone\n * const date = Temporal.PlainDate.from('2025-11-15');\n * const end = endOfQuarter(date, 'America/New_York');\n * // 2025-12-31T23:59:59.999999999-05:00[America/New_York]\n * ```\n */\nexport function endOfQuarter(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n): Temporal.ZonedDateTime;\nexport function endOfQuarter(input: Temporal.PlainDate): Temporal.PlainDate;\nexport function endOfQuarter(input: Temporal.PlainDate, timezone: Timezone): Temporal.ZonedDateTime;\nexport function endOfQuarter(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n timezone?: Timezone,\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n // PlainDate with no timezone stays in calendar space → last day of quarter.\n if (isPlainDate(input) && timezone === undefined) {\n const endMonth = input.with({\n month: quarterStartMonth(input.month) + 2,\n day: 1,\n });\n return endMonth.with({ day: endMonth.daysInMonth });\n }\n const zonedDateTime = normalizeWithPlainDate(input, timezone!);\n const endMonth = zonedDateTime.with({\n month: quarterStartMonth(zonedDateTime.month) + 2,\n day: 1,\n });\n const lastDay = endMonth.with({ day: endMonth.daysInMonth });\n return getEndOfDay(lastDay);\n}\n"],"mappings":";;;;;;;;;;;;;;AA4CO,SAAS,aACd,OACA,UAC6C;AAE7C,MAAI,YAAY,KAAK,KAAK,aAAa,QAAW;AAChD,UAAMA,YAAW,MAAM,KAAK;AAAA,MAC1B,OAAO,kBAAkB,MAAM,KAAK,IAAI;AAAA,MACxC,KAAK;AAAA,IACP,CAAC;AACD,WAAOA,UAAS,KAAK,EAAE,KAAKA,UAAS,YAAY,CAAC;AAAA,EACpD;AACA,QAAM,gBAAgB,uBAAuB,OAAO,QAAS;AAC7D,QAAM,WAAW,cAAc,KAAK;AAAA,IAClC,OAAO,kBAAkB,cAAc,KAAK,IAAI;AAAA,IAChD,KAAK;AAAA,EACP,CAAC;AACD,QAAM,UAAU,SAAS,KAAK,EAAE,KAAK,SAAS,YAAY,CAAC;AAC3D,SAAO,YAAY,OAAO;AAC5B;","names":["endMonth"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeTemporalInput
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
4
|
import {
|
|
5
5
|
Temporal
|
|
6
6
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -13,4 +13,4 @@ function nowZoned() {
|
|
|
13
13
|
export {
|
|
14
14
|
nowZoned
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-4GEF7B7W.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeTemporalInput
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlainDate
|
|
6
6
|
} from "./chunk-BSVOJYJ7.js";
|
|
@@ -16,4 +16,4 @@ function addDays(input, days) {
|
|
|
16
16
|
export {
|
|
17
17
|
addDays
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-4KAIF44F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/addDays.ts"],"sourcesContent":["import { type Temporal, isPlainDate } from './shared/temporal';\nimport { normalizeTemporalInput } from './shared/normalizeTemporalInput';\n\n/**\n * Adds the specified number of days to a datetime or date.\n *\n * Properly handles DST transitions and calendar edge cases through Temporal API.\n * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.\n *\n * PlainDate inputs stay in calendar space, preserving their calendar without a timezone.\n *\n * @param input - A Temporal.Instant (UTC), Temporal.ZonedDateTime, or Temporal.PlainDate\n * @param days - Number of days to add (can be negative to subtract)\n * @returns PlainDate for a date input; otherwise ZonedDateTime with days added\n *\n * @example\n * ```ts\n * // From Instant (always UTC)\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = addDays(instant, 5);\n * // 2025-01-25T12:00:00+00:00[UTC] (5 days later)\n * ```\n *\n * @example\n * ```ts\n * // From ZonedDateTime (preserves timezone)\n * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');\n * const result = addDays(zoned, 10);\n * // 2025-01-30T15:30:00-05:00[America/New_York]\n * ```\n *\n * @example\n * ```ts\n * // Negative values subtract days\n * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');\n * const result = addDays(instant, -7);\n * // 2025-01-13T12:00:00+00:00[UTC] (7 days earlier)\n * ```\n */\nexport function addDays(input: Temporal.PlainDate, days: number): Temporal.PlainDate;\nexport function addDays(\n input: Temporal.Instant | Temporal.ZonedDateTime,\n days: number\n): Temporal.ZonedDateTime;\nexport function addDays(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate,\n days: number\n): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (isPlainDate(input)) {\n return input.add({ days });\n }\n return normalizeTemporalInput(input).add({ days });\n}\n"],"mappings":";;;;;;;;AA4CO,SAAS,QACd,OACA,MAC6C;AAC7C,MAAI,YAAY,KAAK,GAAG;AACtB,WAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,EAC3B;AACA,SAAO,uBAAuB,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD;","names":[]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-XS2HUADA.js";
|
|
7
7
|
import {
|
|
8
8
|
normalizeTemporalInput
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
10
10
|
import {
|
|
11
11
|
Temporal,
|
|
12
12
|
isPlainDate
|
|
@@ -62,4 +62,4 @@ function eachQuarterStart(start, end, make) {
|
|
|
62
62
|
export {
|
|
63
63
|
eachQuarterOfInterval
|
|
64
64
|
};
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-4VWUTQKP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eachQuarterOfInterval.ts"],"sourcesContent":["import { isPlainDateAfter } from './isPlainDateAfter';\nimport { Temporal } from \"./shared/temporal\";\nimport { isPlainDate } from \"./shared/temporal\";\nimport { normalizeTemporalInput } from \"./shared/normalizeTemporalInput\";\nimport { quarterStartMonth } from \"./shared/quarter\";\n\n/**\n * Uses the start endpoint's calendar and timezone, including for the end bound.\n * Native and polyfill endpoints may be mixed.\n *\n * Returns an array with the start of each quarter within the interval, inclusive\n * of both the start and end quarters.\n *\n * Quarters: Q1 = Jan–Mar, Q2 = Apr–Jun, Q3 = Jul–Sep, Q4 = Oct–Dec. Each element\n * is the first moment of the quarter (1st day of the quarter's starting month at\n * midnight) for Instant/ZonedDateTime inputs, or the first day as a PlainDate for\n * PlainDate inputs.\n *\n * For Instant inputs, UTC is used. For ZonedDateTime inputs, the timezone of the\n * start date is preserved. PlainDate inputs need no timezone and return PlainDate[].\n *\n * @param interval - The interval with start and end\n * @returns Array of ZonedDateTime (or PlainDate) at the start of each quarter\n *\n * @example\n * ```ts\n * const start = Temporal.ZonedDateTime.from('2025-02-15T10:00:00+00:00[UTC]');\n * const end = Temporal.ZonedDateTime.from('2025-11-20T14:00:00+00:00[UTC]');\n * eachQuarterOfInterval({ start, end });\n * // [2025-01-01…, 2025-04-01…, 2025-07-01…, 2025-10-01…]\n * ```\n *\n * @example\n * ```ts\n * // PlainDate interval returns PlainDate quarter starts (no timezone)\n * eachQuarterOfInterval({\n * start: Temporal.PlainDate.from('2025-02-15'),\n * end: Temporal.PlainDate.from('2025-08-20'),\n * });\n * // [2025-01-01, 2025-04-01, 2025-07-01]\n * ```\n */\nexport function eachQuarterOfInterval(interval: {\n start: Temporal.Instant | Temporal.ZonedDateTime;\n end: Temporal.Instant | Temporal.ZonedDateTime;\n}): Temporal.ZonedDateTime[];\nexport function eachQuarterOfInterval(interval: {\n start: Temporal.PlainDate;\n end: Temporal.PlainDate;\n}): Temporal.PlainDate[];\nexport function eachQuarterOfInterval(interval: {\n start: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate;\n end: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate;\n}): Temporal.ZonedDateTime[] | Temporal.PlainDate[] {\n if (isPlainDate(interval.start) || isPlainDate(interval.end)) {\n if (!isPlainDate(interval.start) || !isPlainDate(interval.end)) {\n throw new TypeError('PlainDate intervals require two PlainDate endpoints');\n }\n if (isPlainDateAfter(interval.start, interval.end)) return [];\n return eachQuarterStart(interval.start, interval.end.withCalendar(interval.start.calendarId), (ym) => ym.toPlainDate({ day: 1 }));\n }\n\n const startZoned = normalizeTemporalInput(\n interval.start as Temporal.Instant | Temporal.ZonedDateTime,\n );\n const endZoned = normalizeTemporalInput(\n interval.end as Temporal.Instant | Temporal.ZonedDateTime,\n );\n if (startZoned.epochNanoseconds > endZoned.epochNanoseconds) return [];\n const timezone = startZoned.timeZoneId;\n\n return eachQuarterStart(startZoned, endZoned.withTimeZone(timezone).withCalendar(startZoned.calendarId), (ym) =>\n ym.toPlainDate({ day: 1 }).toZonedDateTime({\n timeZone: timezone,\n plainTime: new Temporal.PlainTime(),\n }),\n );\n}\n\n/**\n * Walks quarter-aligned year-months from start to end (inclusive) and maps each\n * to a result. Both bounds are snapped to their quarter's starting month.\n */\nfunction eachQuarterStart<T>(\n start: { year: number; month: number; calendarId: string },\n end: { year: number; month: number; calendarId: string },\n make: (ym: Temporal.PlainYearMonth) => T,\n): T[] {\n const startYearMonth = Temporal.PlainYearMonth.from({\n year: start.year,\n month: quarterStartMonth(start.month),\n calendar: start.calendarId,\n });\n const endYearMonth = Temporal.PlainYearMonth.from({\n year: end.year,\n month: quarterStartMonth(end.month),\n calendar: start.calendarId,\n });\n\n const out: T[] = [];\n let current = startYearMonth;\n while (Temporal.PlainYearMonth.compare(current, endYearMonth) <= 0) {\n out.push(make(current));\n // A calendar can have thirteen months; realign after crossing its year end.\n const next = current.add({ months: 3 });\n current = next.with({ month: quarterStartMonth(next.month) });\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkDO,SAAS,sBAAsB,UAGc;AAClD,MAAI,YAAY,SAAS,KAAK,KAAK,YAAY,SAAS,GAAG,GAAG;AAC5D,QAAI,CAAC,YAAY,SAAS,KAAK,KAAK,CAAC,YAAY,SAAS,GAAG,GAAG;AAC9D,YAAM,IAAI,UAAU,qDAAqD;AAAA,IAC3E;AACA,QAAI,iBAAiB,SAAS,OAAO,SAAS,GAAG,EAAG,QAAO,CAAC;AAC5D,WAAO,iBAAiB,SAAS,OAAO,SAAS,IAAI,aAAa,SAAS,MAAM,UAAU,GAAG,CAAC,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AAAA,EAClI;AAEA,QAAM,aAAa;AAAA,IACjB,SAAS;AAAA,EACX;AACA,QAAM,WAAW;AAAA,IACf,SAAS;AAAA,EACX;AACA,MAAI,WAAW,mBAAmB,SAAS,iBAAkB,QAAO,CAAC;AACrE,QAAM,WAAW,WAAW;AAE5B,SAAO;AAAA,IAAiB;AAAA,IAAY,SAAS,aAAa,QAAQ,EAAE,aAAa,WAAW,UAAU;AAAA,IAAG,CAAC,OACxG,GAAG,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,gBAAgB;AAAA,MACzC,UAAU;AAAA,MACV,WAAW,IAAI,SAAS,UAAU;AAAA,IACpC,CAAC;AAAA,EACH;AACF;AAMA,SAAS,iBACP,OACA,KACA,MACK;AACL,QAAM,iBAAiB,SAAS,eAAe,KAAK;AAAA,IAClD,MAAM,MAAM;AAAA,IACZ,OAAO,kBAAkB,MAAM,KAAK;AAAA,IACpC,UAAU,MAAM;AAAA,EAClB,CAAC;AACD,QAAM,eAAe,SAAS,eAAe,KAAK;AAAA,IAChD,MAAM,IAAI;AAAA,IACV,OAAO,kBAAkB,IAAI,KAAK;AAAA,IAClC,UAAU,MAAM;AAAA,EAClB,CAAC;AAED,QAAM,MAAW,CAAC;AAClB,MAAI,UAAU;AACd,SAAO,SAAS,eAAe,QAAQ,SAAS,YAAY,KAAK,GAAG;AAClE,QAAI,KAAK,KAAK,OAAO,CAAC;AAEtB,UAAM,OAAO,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtC,cAAU,KAAK,KAAK,EAAE,OAAO,kBAAkB,KAAK,KAAK,EAAE,CAAC;AAAA,EAC9D;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
normalizeTemporalInput
|
|
3
|
+
} from "./chunk-Q6QLOUXJ.js";
|
|
4
|
+
import {
|
|
5
|
+
Temporal,
|
|
6
|
+
isPlainDate
|
|
7
|
+
} from "./chunk-BSVOJYJ7.js";
|
|
8
|
+
|
|
9
|
+
// src/shared/businessDays.ts
|
|
10
|
+
function isWeekendDay(dayOfWeek) {
|
|
11
|
+
return dayOfWeek >= 6;
|
|
12
|
+
}
|
|
13
|
+
function addWeekdays(start, days) {
|
|
14
|
+
if (!Number.isInteger(days)) {
|
|
15
|
+
throw new RangeError("Business day counts must be integers");
|
|
16
|
+
}
|
|
17
|
+
const step = days < 0 ? -1 : 1;
|
|
18
|
+
const fullWeeks = Math.max(0, Math.trunc((Math.abs(days) - 1) / 5));
|
|
19
|
+
let result = fullWeeks === 0 ? start : start.add({ days: step * fullWeeks * 7 });
|
|
20
|
+
for (let remaining = Math.abs(days) - fullWeeks * 5; remaining > 0; ) {
|
|
21
|
+
result = result.add({ days: step });
|
|
22
|
+
if (!isWeekendDay(result.dayOfWeek)) remaining--;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
function isoDate(input) {
|
|
27
|
+
const date = isPlainDate(input) ? input : normalizeTemporalInput(input).toPlainDate();
|
|
28
|
+
return Temporal.PlainDate.from(date.toString()).withCalendar("iso8601");
|
|
29
|
+
}
|
|
30
|
+
function addBusinessDaysSkipping(start, days, holidays) {
|
|
31
|
+
let result = addWeekdays(start, days);
|
|
32
|
+
const dates = weekdayHolidays(holidays);
|
|
33
|
+
if (dates.length === 0 || days === 0) return result;
|
|
34
|
+
const step = days < 0 ? -1 : 1;
|
|
35
|
+
for (let from = isoDate(start); ; ) {
|
|
36
|
+
const to = isoDate(result);
|
|
37
|
+
const skipped = dates.filter(
|
|
38
|
+
(date) => step > 0 ? Temporal.PlainDate.compare(date, from) > 0 && Temporal.PlainDate.compare(date, to) <= 0 : Temporal.PlainDate.compare(date, from) < 0 && Temporal.PlainDate.compare(date, to) >= 0
|
|
39
|
+
).length;
|
|
40
|
+
if (skipped === 0) return result;
|
|
41
|
+
from = to;
|
|
42
|
+
result = addWeekdays(result, step * skipped);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function weekdayHolidays(holidays) {
|
|
46
|
+
const unique = /* @__PURE__ */ new Map();
|
|
47
|
+
for (const holiday of holidays) {
|
|
48
|
+
const date = isoDate(holiday);
|
|
49
|
+
if (!isWeekendDay(date.dayOfWeek)) unique.set(date.toString(), date);
|
|
50
|
+
}
|
|
51
|
+
return [...unique.values()];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export {
|
|
55
|
+
isWeekendDay,
|
|
56
|
+
addWeekdays,
|
|
57
|
+
isoDate,
|
|
58
|
+
addBusinessDaysSkipping,
|
|
59
|
+
weekdayHolidays
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=chunk-4YCEFGZA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/businessDays.ts"],"sourcesContent":["import { Temporal, isPlainDate } from './temporal';\nimport { normalizeTemporalInput } from './normalizeTemporalInput';\n\n/**\n * @internal\n * Saturday (6) and Sunday (7) in Temporal's Monday-based dayOfWeek.\n */\nexport function isWeekendDay(dayOfWeek: number): boolean {\n return dayOfWeek >= 6;\n}\n\n/**\n * @internal\n * Adds days counting only Monday–Friday. The result keeps the input's type,\n * time of day, and timezone.\n */\nexport function addWeekdays<T extends { dayOfWeek: number; add(duration: { days: number }): T }>(\n start: T,\n days: number\n): T {\n if (!Number.isInteger(days)) {\n throw new RangeError('Business day counts must be integers');\n }\n const step = days < 0 ? -1 : 1;\n // Any 7 consecutive days hold exactly 5 weekdays, so jump whole weeks. Keep\n // at least one business day to walk so a weekend landing is never returned.\n const fullWeeks = Math.max(0, Math.trunc((Math.abs(days) - 1) / 5));\n let result = fullWeeks === 0 ? start : start.add({ days: step * fullWeeks * 7 });\n for (let remaining = Math.abs(days) - fullWeeks * 5; remaining > 0;) {\n result = result.add({ days: step });\n if (!isWeekendDay(result.dayOfWeek)) remaining--;\n }\n return result;\n}\n\n/**\n * @internal\n * The calendar date of a value as an ISO PlainDate from this library's\n * Temporal implementation. Instant uses UTC; ZonedDateTime uses its timezone.\n */\nexport function isoDate(\n input: Temporal.Instant | Temporal.ZonedDateTime | Temporal.PlainDate\n): Temporal.PlainDate {\n const date = isPlainDate(input) ? input : normalizeTemporalInput(input).toPlainDate();\n return Temporal.PlainDate.from(date.toString()).withCalendar('iso8601');\n}\n\n/**\n * @internal\n * Adds days counting only Monday–Friday that are not holidays. Holidays are\n * matched by ISO date; those on weekends are already skipped.\n */\nexport function addBusinessDaysSkipping<\n T extends (Temporal.ZonedDateTime | Temporal.PlainDate) & {\n add(duration: { days: number }): T;\n }\n>(start: T, days: number, holidays: readonly Temporal.PlainDate[]): T {\n let result = addWeekdays<T>(start, days);\n const dates = weekdayHolidays(holidays);\n if (dates.length === 0 || days === 0) return result;\n\n // Each holiday passed over pushes the result one more business day along.\n // Repeat until a stretch passes no holiday, which also leaves the result off one.\n const step = days < 0 ? -1 : 1;\n for (let from = isoDate(start); ;) {\n const to = isoDate(result);\n const skipped = dates.filter((date) =>\n step > 0\n ? Temporal.PlainDate.compare(date, from) > 0 && Temporal.PlainDate.compare(date, to) <= 0\n : Temporal.PlainDate.compare(date, from) < 0 && Temporal.PlainDate.compare(date, to) >= 0\n ).length;\n if (skipped === 0) return result;\n from = to;\n result = addWeekdays<T>(result, step * skipped);\n }\n}\n\n/**\n * @internal\n * Distinct holidays that fall Monday–Friday, as ISO PlainDates.\n */\nexport function weekdayHolidays(holidays: readonly Temporal.PlainDate[]): Temporal.PlainDate[] {\n const unique = new Map<string, Temporal.PlainDate>();\n for (const holiday of holidays) {\n const date = isoDate(holiday);\n if (!isWeekendDay(date.dayOfWeek)) unique.set(date.toString(), date);\n }\n return [...unique.values()];\n}\n"],"mappings":";;;;;;;;;AAOO,SAAS,aAAa,WAA4B;AACvD,SAAO,aAAa;AACtB;AAOO,SAAS,YACd,OACA,MACG;AACH,MAAI,CAAC,OAAO,UAAU,IAAI,GAAG;AAC3B,UAAM,IAAI,WAAW,sCAAsC;AAAA,EAC7D;AACA,QAAM,OAAO,OAAO,IAAI,KAAK;AAG7B,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC;AAClE,MAAI,SAAS,cAAc,IAAI,QAAQ,MAAM,IAAI,EAAE,MAAM,OAAO,YAAY,EAAE,CAAC;AAC/E,WAAS,YAAY,KAAK,IAAI,IAAI,IAAI,YAAY,GAAG,YAAY,KAAI;AACnE,aAAS,OAAO,IAAI,EAAE,MAAM,KAAK,CAAC;AAClC,QAAI,CAAC,aAAa,OAAO,SAAS,EAAG;AAAA,EACvC;AACA,SAAO;AACT;AAOO,SAAS,QACd,OACoB;AACpB,QAAM,OAAO,YAAY,KAAK,IAAI,QAAQ,uBAAuB,KAAK,EAAE,YAAY;AACpF,SAAO,SAAS,UAAU,KAAK,KAAK,SAAS,CAAC,EAAE,aAAa,SAAS;AACxE;AAOO,SAAS,wBAId,OAAU,MAAc,UAA4C;AACpE,MAAI,SAAS,YAAe,OAAO,IAAI;AACvC,QAAM,QAAQ,gBAAgB,QAAQ;AACtC,MAAI,MAAM,WAAW,KAAK,SAAS,EAAG,QAAO;AAI7C,QAAM,OAAO,OAAO,IAAI,KAAK;AAC7B,WAAS,OAAO,QAAQ,KAAK,OAAM;AACjC,UAAM,KAAK,QAAQ,MAAM;AACzB,UAAM,UAAU,MAAM;AAAA,MAAO,CAAC,SAC5B,OAAO,IACH,SAAS,UAAU,QAAQ,MAAM,IAAI,IAAI,KAAK,SAAS,UAAU,QAAQ,MAAM,EAAE,KAAK,IACtF,SAAS,UAAU,QAAQ,MAAM,IAAI,IAAI,KAAK,SAAS,UAAU,QAAQ,MAAM,EAAE,KAAK;AAAA,IAC5F,EAAE;AACF,QAAI,YAAY,EAAG,QAAO;AAC1B,WAAO;AACP,aAAS,YAAe,QAAQ,OAAO,OAAO;AAAA,EAChD;AACF;AAMO,SAAS,gBAAgB,UAA+D;AAC7F,QAAM,SAAS,oBAAI,IAAgC;AACnD,aAAW,WAAW,UAAU;AAC9B,UAAM,OAAO,QAAQ,OAAO;AAC5B,QAAI,CAAC,aAAa,KAAK,SAAS,EAAG,QAAO,IAAI,KAAK,SAAS,GAAG,IAAI;AAAA,EACrE;AACA,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B;","names":[]}
|