@perdieminc/time-slots 0.0.12 → 1.0.1
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/lib/constants.d.ts +0 -9
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +1 -9
- package/lib/constants.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/schedule/generate.d.ts +1 -1
- package/lib/schedule/generate.d.ts.map +1 -1
- package/lib/schedule/generate.js +142 -59
- package/lib/schedule/generate.js.map +1 -1
- package/lib/schedule/get-schedules.d.ts.map +1 -1
- package/lib/schedule/get-schedules.js +35 -53
- package/lib/schedule/get-schedules.js.map +1 -1
- package/lib/schedule/location.d.ts +1 -1
- package/lib/schedule/location.d.ts.map +1 -1
- package/lib/schedule/location.js +16 -7
- package/lib/schedule/location.js.map +1 -1
- package/lib/utils/catering.d.ts +1 -1
- package/lib/utils/catering.d.ts.map +1 -1
- package/lib/utils/catering.js +19 -15
- package/lib/utils/catering.js.map +1 -1
- package/lib/utils/date.d.ts +1 -0
- package/lib/utils/date.d.ts.map +1 -1
- package/lib/utils/date.js +7 -0
- package/lib/utils/date.js.map +1 -1
- package/package.json +1 -1
package/lib/constants.d.ts
CHANGED
|
@@ -11,15 +11,6 @@ export type FulfillmentType = (typeof FULFILLMENT_TYPES)[keyof typeof FULFILLMEN
|
|
|
11
11
|
export declare const DEFAULT_GAP_IN_MINUTES = 15;
|
|
12
12
|
export declare const DEFAULT_PREP_TIME_IN_MINUTES = 5;
|
|
13
13
|
export declare const MINUTES_PER_DAY = 1440;
|
|
14
|
-
/**
|
|
15
|
-
* Prep time behaviour when computing first available slot.
|
|
16
|
-
*/
|
|
17
|
-
export declare const PrepTimeBehaviour: Readonly<{
|
|
18
|
-
FIRST_SHIFT: 0;
|
|
19
|
-
EVERY_SHIFT: 1;
|
|
20
|
-
ROLL_FROM_FIRST_SHIFT: 2;
|
|
21
|
-
}>;
|
|
22
|
-
export type PrepTimeBehaviourType = (typeof PrepTimeBehaviour)[keyof typeof PrepTimeBehaviour];
|
|
23
14
|
export declare const PREP_TIME_CADENCE: {
|
|
24
15
|
readonly MINUTE: "minute";
|
|
25
16
|
readonly DAY: "day";
|
package/lib/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,MAAM,MAAM,eAAe,GAC1B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,MAAM,MAAM,eAAe,GAC1B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAC1B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;CAIX,CAAC"}
|
package/lib/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PLATFORM = exports.PREP_TIME_CADENCE = exports.
|
|
3
|
+
exports.PLATFORM = exports.PREP_TIME_CADENCE = exports.MINUTES_PER_DAY = exports.DEFAULT_PREP_TIME_IN_MINUTES = exports.DEFAULT_GAP_IN_MINUTES = exports.DEFAULT_TIMEZONE = exports.FULFILLMENT_TYPES = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Fulfillment types for pickup, delivery, curbside.
|
|
6
6
|
*/
|
|
@@ -13,14 +13,6 @@ exports.DEFAULT_TIMEZONE = "America/New_York";
|
|
|
13
13
|
exports.DEFAULT_GAP_IN_MINUTES = 15;
|
|
14
14
|
exports.DEFAULT_PREP_TIME_IN_MINUTES = 5;
|
|
15
15
|
exports.MINUTES_PER_DAY = 1440;
|
|
16
|
-
/**
|
|
17
|
-
* Prep time behaviour when computing first available slot.
|
|
18
|
-
*/
|
|
19
|
-
exports.PrepTimeBehaviour = Object.freeze({
|
|
20
|
-
FIRST_SHIFT: 0,
|
|
21
|
-
EVERY_SHIFT: 1,
|
|
22
|
-
ROLL_FROM_FIRST_SHIFT: 2,
|
|
23
|
-
});
|
|
24
16
|
exports.PREP_TIME_CADENCE = {
|
|
25
17
|
MINUTE: "minute",
|
|
26
18
|
DAY: "day",
|
package/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACX,CAAC;AAEE,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAItC,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,eAAe,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACX,CAAC;AAEE,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAItC,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,eAAe,GAAG,IAAI,CAAC;AACvB,QAAA,iBAAiB,GAAG;IAChC,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACH,CAAC;AAKX;;GAEG;AACU,QAAA,QAAQ,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;CACT,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { FulfillmentType
|
|
2
|
-
export { DEFAULT_GAP_IN_MINUTES, DEFAULT_PREP_TIME_IN_MINUTES, FULFILLMENT_TYPES,
|
|
1
|
+
export type { FulfillmentType } from "./constants";
|
|
2
|
+
export { DEFAULT_GAP_IN_MINUTES, DEFAULT_PREP_TIME_IN_MINUTES, FULFILLMENT_TYPES, } from "./constants";
|
|
3
3
|
export { getSchedules } from "./schedule/get-schedules";
|
|
4
4
|
export * from "./types";
|
|
5
5
|
export type { BusinessHour, BusinessHourInput, BusinessHoursOverrideInput, BusinessHoursOverrideOutput, } from "./types/business-hours";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACN,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,cAAc,SAAS,CAAC;AACxB,YAAY,EACX,YAAY,EACZ,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,2BAA2B,EAC3B,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -14,12 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.getOpeningClosingTime = exports.filterMenusFromSchedule = exports.filterBusyTimesFromSchedule = exports.overrideTimeZoneOnUTC = exports.isTomorrowInTimeZone = exports.isTodayInTimeZone = exports.getPreSalePickupDates = exports.getCateringPrepTimeConfig = exports.getLocationsBusinessHoursOverrides = exports.getSchedules = exports.
|
|
17
|
+
exports.getOpeningClosingTime = exports.filterMenusFromSchedule = exports.filterBusyTimesFromSchedule = exports.overrideTimeZoneOnUTC = exports.isTomorrowInTimeZone = exports.isTodayInTimeZone = exports.getPreSalePickupDates = exports.getCateringPrepTimeConfig = exports.getLocationsBusinessHoursOverrides = exports.getSchedules = exports.FULFILLMENT_TYPES = exports.DEFAULT_PREP_TIME_IN_MINUTES = exports.DEFAULT_GAP_IN_MINUTES = void 0;
|
|
18
18
|
var constants_1 = require("./constants");
|
|
19
19
|
Object.defineProperty(exports, "DEFAULT_GAP_IN_MINUTES", { enumerable: true, get: function () { return constants_1.DEFAULT_GAP_IN_MINUTES; } });
|
|
20
20
|
Object.defineProperty(exports, "DEFAULT_PREP_TIME_IN_MINUTES", { enumerable: true, get: function () { return constants_1.DEFAULT_PREP_TIME_IN_MINUTES; } });
|
|
21
21
|
Object.defineProperty(exports, "FULFILLMENT_TYPES", { enumerable: true, get: function () { return constants_1.FULFILLMENT_TYPES; } });
|
|
22
|
-
Object.defineProperty(exports, "PrepTimeBehaviour", { enumerable: true, get: function () { return constants_1.PrepTimeBehaviour; } });
|
|
23
22
|
var get_schedules_1 = require("./schedule/get-schedules");
|
|
24
23
|
Object.defineProperty(exports, "getSchedules", { enumerable: true, get: function () { return get_schedules_1.getSchedules; } });
|
|
25
24
|
__exportStar(require("./types"), exports);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,yCAIqB;AAHpB,mHAAA,sBAAsB,OAAA;AACtB,yHAAA,4BAA4B,OAAA;AAC5B,8GAAA,iBAAiB,OAAA;AAElB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,0CAAwB;AAOxB,yDAA4E;AAAnE,oIAAA,kCAAkC,OAAA;AAC3C,6CAA6D;AAApD,qHAAA,yBAAyB,OAAA;AAClC,qCAKsB;AAJrB,6GAAA,qBAAqB,OAAA;AACrB,yGAAA,iBAAiB,OAAA;AACjB,4GAAA,oBAAoB,OAAA;AACpB,6GAAA,qBAAqB,OAAA;AAEtB,2DAGiC;AAFhC,8HAAA,2BAA2B,OAAA;AAC3B,0HAAA,uBAAuB,OAAA;AAExB,mDAA4D;AAAnD,oHAAA,qBAAqB,OAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { DaySchedule, GenerateScheduleParams } from "../types";
|
|
2
|
-
export declare function generateSchedule({ currentDate,
|
|
2
|
+
export declare function generateSchedule({ currentDate, timeZone, dates, businessHours, businessHoursOverrides, preSaleHoursOverride, gapInMinutes, prepTimeCadence, prepTimeFrequency, openingBuffer, closingBuffer, estimatedDeliveryMinutes, }: GenerateScheduleParams): DaySchedule[];
|
|
3
3
|
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGX,WAAW,EACX,sBAAsB,EACtB,MAAM,UAAU,CAAC;AA6ElB,wBAAgB,gBAAgB,CAAC,EAChC,WAAwB,EACxB,QAAQ,EACR,KAAU,EACV,aAAkB,EAClB,sBAA2B,EAC3B,oBAAoB,EACpB,YAAiB,EACjB,eAAsB,EACtB,iBAAqB,EACrB,aAAiB,EACjB,aAAiB,EACjB,wBAA4B,GAC5B,EAAE,sBAAsB,GAAG,WAAW,EAAE,CAgRxC"}
|
package/lib/schedule/generate.js
CHANGED
|
@@ -7,13 +7,13 @@ const constants_1 = require("../constants");
|
|
|
7
7
|
const date_1 = require("../utils/date");
|
|
8
8
|
function getSelectedBusinessHours({ businessHours = [], businessHoursOverrides = [], date, timeZone, preSaleHoursOverride, }) {
|
|
9
9
|
if (!date || !timeZone) {
|
|
10
|
-
return [
|
|
10
|
+
return [];
|
|
11
11
|
}
|
|
12
12
|
const zonedDate = (0, timezone_support_1.getZonedTime)(date, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
13
13
|
const dayOfWeek = zonedDate.dayOfWeek ?? 0;
|
|
14
14
|
const dayBusinessHours = businessHours?.filter((bh) => bh.day === dayOfWeek);
|
|
15
15
|
const businessHoursOverride = businessHoursOverrides?.filter((override) => zonedDate.month === override.month && zonedDate.day === override.day);
|
|
16
|
-
|
|
16
|
+
return preSaleHoursOverride
|
|
17
17
|
? preSaleHoursOverride.map((o) => ({
|
|
18
18
|
day: dayOfWeek,
|
|
19
19
|
startTime: o.startTime,
|
|
@@ -26,116 +26,199 @@ function getSelectedBusinessHours({ businessHours = [], businessHoursOverrides =
|
|
|
26
26
|
endTime: o.endTime ?? "23:59",
|
|
27
27
|
}))
|
|
28
28
|
: (dayBusinessHours ?? []);
|
|
29
|
-
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Project the time-of-day from `source` onto `targetDate` in the given timezone.
|
|
32
|
+
* e.g. source = Sat 2:30 PM, targetDate = Mon → Mon 2:30 PM (in timezone).
|
|
33
|
+
*/
|
|
34
|
+
function projectTimeOfDay(source, targetDate, timeZone) {
|
|
35
|
+
const tz = (0, timezone_support_1.findTimeZone)(timeZone);
|
|
36
|
+
const zonedSource = (0, timezone_support_1.getZonedTime)(source, tz);
|
|
37
|
+
const hh = String(zonedSource.hours).padStart(2, "0");
|
|
38
|
+
const mm = String(zonedSource.minutes).padStart(2, "0");
|
|
39
|
+
return (0, date_1.setHmOnDate)(targetDate, `${hh}:${mm}`, timeZone);
|
|
30
40
|
}
|
|
31
41
|
// ── Public API ──────────────────────────────────────────────────────────────
|
|
32
|
-
function generateSchedule({ currentDate = new Date(),
|
|
42
|
+
function generateSchedule({ currentDate = new Date(), timeZone, dates = [], businessHours = [], businessHoursOverrides = [], preSaleHoursOverride, gapInMinutes = 15, prepTimeCadence = null, prepTimeFrequency = 0, openingBuffer = 0, closingBuffer = 0, estimatedDeliveryMinutes = 0, }) {
|
|
33
43
|
const isMinutesCadence = prepTimeCadence !== constants_1.PREP_TIME_CADENCE.DAY;
|
|
34
|
-
const
|
|
44
|
+
const isDayCadence = prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
|
|
45
|
+
const minuteCadenceDaysSkipped = isMinutesCadence
|
|
46
|
+
? Math.floor(prepTimeFrequency / constants_1.MINUTES_PER_DAY)
|
|
47
|
+
: 0;
|
|
48
|
+
const effectivePrepMinutes = minuteCadenceDaysSkipped > 0
|
|
49
|
+
? prepTimeFrequency % constants_1.MINUTES_PER_DAY
|
|
50
|
+
: prepTimeFrequency;
|
|
35
51
|
let shiftStartDateWithPrepTime = null;
|
|
36
52
|
return dates
|
|
37
53
|
.map((date, index) => {
|
|
38
54
|
const lastDate = dates?.[index - 1];
|
|
39
|
-
const
|
|
55
|
+
const selectedBusinessHours = getSelectedBusinessHours({
|
|
40
56
|
businessHours,
|
|
41
57
|
businessHoursOverrides,
|
|
42
58
|
date,
|
|
43
59
|
timeZone,
|
|
44
60
|
preSaleHoursOverride,
|
|
45
61
|
});
|
|
46
|
-
const
|
|
62
|
+
const prevSelectedBusinessHours = getSelectedBusinessHours({
|
|
47
63
|
businessHours,
|
|
48
64
|
businessHoursOverrides,
|
|
49
65
|
date: lastDate,
|
|
50
66
|
timeZone,
|
|
51
67
|
preSaleHoursOverride,
|
|
52
68
|
});
|
|
53
|
-
const weekDayPrepTime = weekDayPrepTimes[zonedDate.dayOfWeek] ?? defaultPrep;
|
|
54
69
|
const storeTimes = {
|
|
55
70
|
openingTime: null,
|
|
56
71
|
closingTime: null,
|
|
57
72
|
remainingShifts: 0,
|
|
58
73
|
totalShifts: 0,
|
|
59
74
|
};
|
|
60
|
-
|
|
75
|
+
// Track midnight spill: if today's last shift ends at 24:00, we need to
|
|
76
|
+
// apply closing buffer to tomorrow's last shift instead
|
|
77
|
+
const isTodayEndingInMidnightSpill = (0, date_1.lastShiftEndsAtMidnight)(selectedBusinessHours);
|
|
78
|
+
// For DAY cadence: the first date in dates IS the target date (after slicing in location.ts)
|
|
79
|
+
const isDayCadenceFirstDate = isDayCadence && index === 0;
|
|
80
|
+
// For MINUTE cadence with ≥1 day of prep: days were skipped via dates.slice()
|
|
81
|
+
// in location.ts, so the first date here is the target day.
|
|
82
|
+
const isMinuteCadenceFirstDate = isMinutesCadence && minuteCadenceDaysSkipped > 0 && index === 0;
|
|
61
83
|
const slots = selectedBusinessHours
|
|
62
84
|
.flatMap((businessHour, i) => {
|
|
85
|
+
const isFirstShift = i === 0;
|
|
86
|
+
const isLastShift = i === selectedBusinessHours.length - 1;
|
|
63
87
|
const startDate = (0, date_1.setHmOnDate)(date, businessHour.startTime, timeZone);
|
|
64
|
-
|
|
88
|
+
// The effective start accounts for prep-time rollover from a prior
|
|
89
|
+
// shift, but the slot grid must always be anchored to the raw
|
|
90
|
+
// business-hour start so that the 15-min cadence stays on
|
|
91
|
+
// :00 / :15 / :30 / :45.
|
|
92
|
+
const effectiveShiftStart = isMinutesCadence && shiftStartDateWithPrepTime
|
|
65
93
|
? (0, date_fns_1.max)([shiftStartDateWithPrepTime, startDate])
|
|
66
94
|
: startDate;
|
|
67
|
-
const
|
|
68
|
-
if
|
|
69
|
-
|
|
95
|
+
const shiftStartDate = startDate;
|
|
96
|
+
// Check if this is a midnight spill continuation from previous day
|
|
97
|
+
// (first shift starts at 00:00 AND previous day ended at 24:00)
|
|
98
|
+
const isMidnightShiftContinuation = isFirstShift &&
|
|
99
|
+
(0, date_1.isZeroPrepTimeForMidnightShift)({
|
|
100
|
+
prevDayBusinessHours: prevSelectedBusinessHours,
|
|
101
|
+
businessHour,
|
|
102
|
+
});
|
|
103
|
+
// Determine if closing buffer should be applied:
|
|
104
|
+
// - Apply to last shift normally
|
|
105
|
+
// - BUT if this day ends in midnight spill, don't apply yet (wait for tomorrow's last shift)
|
|
106
|
+
// - Always apply to midnight continuation shifts (they are the real
|
|
107
|
+
// end of the previous day's shift that spilled past midnight)
|
|
108
|
+
const shouldApplyClosingBuffer = isMidnightShiftContinuation ||
|
|
109
|
+
(isLastShift && !isTodayEndingInMidnightSpill);
|
|
110
|
+
const rawEndDate = (0, date_1.setHmOnDate)(date, businessHour.endTime, timeZone);
|
|
111
|
+
const shiftEndDate = shouldApplyClosingBuffer
|
|
112
|
+
? (0, date_fns_1.addMinutes)(rawEndDate, -closingBuffer)
|
|
113
|
+
: rawEndDate;
|
|
114
|
+
if (isFirstShift) {
|
|
115
|
+
// Store the raw opening time (pre-buffer) for reference in today logic
|
|
116
|
+
storeTimes.openingTime = startDate;
|
|
70
117
|
}
|
|
71
|
-
if (
|
|
118
|
+
if (isLastShift) {
|
|
72
119
|
storeTimes.closingTime = shiftEndDate;
|
|
73
120
|
}
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
121
|
+
if ((0, date_fns_1.isAfter)(effectiveShiftStart, shiftEndDate)) {
|
|
122
|
+
// Shift fully skipped — keep shiftStartDateWithPrepTime so it
|
|
123
|
+
// can carry forward to the next shift or day.
|
|
78
124
|
return [];
|
|
79
125
|
}
|
|
80
126
|
storeTimes.totalShifts += 1;
|
|
81
127
|
const fixedSlots = (0, date_fns_1.eachMinuteOfInterval)({ start: shiftStartDate, end: shiftEndDate }, { step: gapInMinutes });
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
128
|
+
// ── Today / first-date logic ────────────────────────────────────
|
|
129
|
+
const isActualToday = (0, date_1.isTodayInTimeZone)(date, timeZone);
|
|
130
|
+
if (isActualToday ||
|
|
131
|
+
isDayCadenceFirstDate ||
|
|
132
|
+
isMinuteCadenceFirstDate) {
|
|
133
|
+
let effectiveFirstSlot;
|
|
134
|
+
if (isFirstShift) {
|
|
135
|
+
const openingTime = startDate;
|
|
136
|
+
if (isDayCadenceFirstDate) {
|
|
137
|
+
// DAY cadence: first slot = opening + buffer
|
|
138
|
+
effectiveFirstSlot = (0, date_fns_1.addMinutes)(openingTime, openingBuffer);
|
|
139
|
+
}
|
|
140
|
+
else if (isMinuteCadenceFirstDate) {
|
|
141
|
+
// MINUTE cadence with day skipping: project now's time-of-day
|
|
142
|
+
// onto the target date, then add any remaining prep minutes.
|
|
143
|
+
const projectedNow = projectTimeOfDay(currentDate, date, timeZone);
|
|
144
|
+
const projectedWithPrep = (0, date_fns_1.addMinutes)(projectedNow, effectivePrepMinutes);
|
|
145
|
+
const openingPlusBuffer = (0, date_fns_1.addMinutes)(openingTime, openingBuffer);
|
|
146
|
+
effectiveFirstSlot = (0, date_fns_1.max)([
|
|
147
|
+
projectedWithPrep,
|
|
148
|
+
openingPlusBuffer,
|
|
149
|
+
]);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Actual today with MINUTE cadence
|
|
153
|
+
if ((0, date_fns_1.isBefore)(currentDate, openingTime)) {
|
|
154
|
+
effectiveFirstSlot = (0, date_fns_1.addMinutes)(openingTime, Math.max(openingBuffer, prepTimeFrequency));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const nowPlusPrep = (0, date_fns_1.addMinutes)(currentDate, prepTimeFrequency);
|
|
158
|
+
const openingPlusBuffer = (0, date_fns_1.addMinutes)(openingTime, openingBuffer);
|
|
159
|
+
effectiveFirstSlot = (0, date_fns_1.max)([nowPlusPrep, openingPlusBuffer]);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Delivery always added on top
|
|
163
|
+
effectiveFirstSlot = (0, date_fns_1.addMinutes)(effectiveFirstSlot, estimatedDeliveryMinutes);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Non-first shifts: use the effective start (which accounts for
|
|
167
|
+
// prep-time rollover) but keep the slot grid on the raw boundary.
|
|
168
|
+
effectiveFirstSlot = effectiveShiftStart;
|
|
169
|
+
}
|
|
170
|
+
if ((0, date_fns_1.isAfter)(effectiveFirstSlot, shiftEndDate)) {
|
|
89
171
|
if (isMinutesCadence) {
|
|
90
|
-
shiftStartDateWithPrepTime =
|
|
172
|
+
shiftStartDateWithPrepTime = effectiveFirstSlot;
|
|
91
173
|
}
|
|
92
174
|
return [];
|
|
93
175
|
}
|
|
94
|
-
if ((0, date_fns_1.isBefore)(
|
|
176
|
+
if ((0, date_fns_1.isBefore)(effectiveFirstSlot, effectiveShiftStart)) {
|
|
95
177
|
storeTimes.remainingShifts += 1;
|
|
96
|
-
if (prepTimeBehaviour ===
|
|
97
|
-
constants_1.PrepTimeBehaviour.EVERY_SHIFT) {
|
|
98
|
-
const shiftStartDateWithPrepTime = (0, date_fns_1.addMinutes)(shiftStartDate, weekDayPrepTime);
|
|
99
|
-
const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, shiftStartDateWithPrepTime));
|
|
100
|
-
slotDates.unshift(shiftStartDateWithPrepTime);
|
|
101
|
-
return slotDates;
|
|
102
|
-
}
|
|
103
178
|
return fixedSlots;
|
|
104
179
|
}
|
|
105
|
-
const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d,
|
|
106
|
-
slotDates.unshift(
|
|
180
|
+
const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, effectiveFirstSlot));
|
|
181
|
+
slotDates.unshift(effectiveFirstSlot);
|
|
107
182
|
storeTimes.remainingShifts += 1;
|
|
108
|
-
return slotDates;
|
|
109
|
-
}
|
|
110
|
-
if (prepTimeBehaviour === constants_1.PrepTimeBehaviour.FIRST_SHIFT && i !== 0) {
|
|
111
|
-
storeTimes.remainingShifts += 1;
|
|
112
|
-
return fixedSlots;
|
|
113
|
-
}
|
|
114
|
-
const allowZeroPrepTimeForMidnightShift = (0, date_1.isZeroPrepTimeForMidnightShift)({
|
|
115
|
-
prevDayBusinessHours: prevSelectedBusinessHours,
|
|
116
|
-
businessHour,
|
|
117
|
-
});
|
|
118
|
-
const prepTimeSlot = (0, date_fns_1.addMinutes)(prepTimeBehaviour === constants_1.PrepTimeBehaviour.ROLL_FROM_FIRST_SHIFT &&
|
|
119
|
-
!isPrevDayMidnightTransition &&
|
|
120
|
-
storeTimes.openingTime
|
|
121
|
-
? storeTimes.openingTime
|
|
122
|
-
: shiftStartDate, allowZeroPrepTimeForMidnightShift ? 0 : weekDayPrepTime);
|
|
123
|
-
isPrevDayMidnightTransition = allowZeroPrepTimeForMidnightShift;
|
|
124
|
-
if (prepTimeSlot > shiftEndDate) {
|
|
125
183
|
if (isMinutesCadence) {
|
|
126
|
-
shiftStartDateWithPrepTime =
|
|
184
|
+
shiftStartDateWithPrepTime = null;
|
|
127
185
|
}
|
|
128
|
-
|
|
186
|
+
return slotDates;
|
|
187
|
+
}
|
|
188
|
+
// ── Future day logic ─────────────────────────────────────────────
|
|
189
|
+
// Opening buffer applies to the first "real" shift of the day — i.e. the
|
|
190
|
+
// first shift that is NOT a midnight-spill continuation. When a
|
|
191
|
+
// continuation is present it is always i === 0, so the real first shift
|
|
192
|
+
// is i === 1 (the second element).
|
|
193
|
+
const hasMidnightContinuation = selectedBusinessHours.length > 1 &&
|
|
194
|
+
(0, date_1.isZeroPrepTimeForMidnightShift)({
|
|
195
|
+
prevDayBusinessHours: prevSelectedBusinessHours,
|
|
196
|
+
businessHour: selectedBusinessHours[0],
|
|
197
|
+
});
|
|
198
|
+
const isRealFirstShift = hasMidnightContinuation
|
|
199
|
+
? i === 1
|
|
200
|
+
: isFirstShift;
|
|
201
|
+
const effectiveOpeningBuffer = isRealFirstShift ? openingBuffer : 0;
|
|
202
|
+
// Roll from the opening time for the real first shift; other shifts from their own start
|
|
203
|
+
const rollFromDate = isRealFirstShift && storeTimes.openingTime
|
|
204
|
+
? (hasMidnightContinuation ? startDate : storeTimes.openingTime)
|
|
205
|
+
: startDate;
|
|
206
|
+
const prepTimeSlot = (0, date_fns_1.addMinutes)(rollFromDate, effectiveOpeningBuffer + estimatedDeliveryMinutes);
|
|
207
|
+
// Use the later of prepTimeSlot and effectiveShiftStart, so that
|
|
208
|
+
// prep-time rollover from a prior day is respected.
|
|
209
|
+
const effectiveFirstSlot = (0, date_fns_1.max)([prepTimeSlot, effectiveShiftStart]);
|
|
210
|
+
if ((0, date_fns_1.isAfter)(effectiveFirstSlot, shiftEndDate)) {
|
|
211
|
+
shiftStartDateWithPrepTime = effectiveFirstSlot;
|
|
129
212
|
return [];
|
|
130
213
|
}
|
|
131
|
-
if (
|
|
214
|
+
if ((0, date_fns_1.isBefore)(effectiveFirstSlot, startDate)) {
|
|
132
215
|
storeTimes.remainingShifts += 1;
|
|
133
216
|
return fixedSlots;
|
|
134
217
|
}
|
|
135
|
-
const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d,
|
|
136
|
-
slotDates.unshift(
|
|
218
|
+
const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, effectiveFirstSlot));
|
|
219
|
+
slotDates.unshift(effectiveFirstSlot);
|
|
137
220
|
storeTimes.remainingShifts += 1;
|
|
138
|
-
shiftStartDateWithPrepTime = null;
|
|
221
|
+
shiftStartDateWithPrepTime = null;
|
|
139
222
|
return slotDates;
|
|
140
223
|
})
|
|
141
224
|
.sort(date_fns_1.compareAsc);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-schedules.d.ts","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-schedules.d.ts","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGX,kBAAkB,EAClB,kBAAkB,EAGlB,MAAM,UAAU,CAAC;AAgIlB,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,cAAsB,GACtB,EAAE,kBAAkB,GAAG,kBAAkB,CAkIzC"}
|
|
@@ -44,23 +44,15 @@ function getPreSaleHoursOverride(preSaleConfig, hasPreSaleItem) {
|
|
|
44
44
|
}
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
|
-
function resolveStartDate({ preSaleStartDate, hasPreSaleItem,
|
|
47
|
+
function resolveStartDate({ preSaleStartDate, hasPreSaleItem, cateringShiftMinutes = 0, }) {
|
|
48
48
|
if (hasPreSaleItem) {
|
|
49
49
|
return new Date(Math.max(preSaleStartDate.getTime(), Date.now()));
|
|
50
50
|
}
|
|
51
|
-
if (
|
|
52
|
-
return (0, date_fns_1.
|
|
51
|
+
if (cateringShiftMinutes > 0) {
|
|
52
|
+
return (0, date_fns_1.addMinutes)(new Date(), cateringShiftMinutes);
|
|
53
53
|
}
|
|
54
54
|
return new Date();
|
|
55
55
|
}
|
|
56
|
-
const WEEKDAY_KEYS = [0, 1, 2, 3, 4, 5, 6];
|
|
57
|
-
function addEstimatedDeliveryToWeekDays(weekDayPrepTimes, estimatedDeliveryMinutes) {
|
|
58
|
-
const result = {};
|
|
59
|
-
for (const day of WEEKDAY_KEYS) {
|
|
60
|
-
result[day] = (weekDayPrepTimes[day] ?? 0) + estimatedDeliveryMinutes;
|
|
61
|
-
}
|
|
62
|
-
return result;
|
|
63
|
-
}
|
|
64
56
|
/**
|
|
65
57
|
* Returns prep time cadence and frequency for schedule generation.
|
|
66
58
|
* If prepTimeCadence and prepTimeFrequency exist on settings (e.g. from catering), returns them.
|
|
@@ -83,47 +75,37 @@ function getPrepTimeCadenceAndFrequency(settings) {
|
|
|
83
75
|
};
|
|
84
76
|
}
|
|
85
77
|
/**
|
|
86
|
-
* Resolves prep time config: for catering flow uses cart-derived cadence/frequency
|
|
87
|
-
*
|
|
78
|
+
* Resolves prep time config: for catering flow uses cart-derived cadence/frequency.
|
|
79
|
+
* estimatedDeliveryMinutes is now passed directly to generateSchedule rather than
|
|
80
|
+
* being baked into prep time, so it is always additive on top of prep time.
|
|
88
81
|
*/
|
|
89
|
-
function resolvePrepTimeConfig(prepTimeSettings, cartItems, isCateringFlow
|
|
90
|
-
let resolved;
|
|
82
|
+
function resolvePrepTimeConfig(prepTimeSettings, cartItems, isCateringFlow) {
|
|
91
83
|
if (!isCateringFlow) {
|
|
92
|
-
|
|
93
|
-
resolved = {
|
|
94
|
-
...prepTimeSettings,
|
|
95
|
-
...(isDayCadence && { weekDayPrepTimes: {} }),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
const cateringPrepTimeConfig = (0, catering_1.getCateringPrepTimeConfig)({
|
|
100
|
-
items: cartItems,
|
|
101
|
-
prepTimeCadence: prepTimeSettings.prepTimeCadence,
|
|
102
|
-
prepTimeFrequency: prepTimeSettings.prepTimeFrequency,
|
|
103
|
-
});
|
|
104
|
-
resolved = {
|
|
105
|
-
...prepTimeSettings,
|
|
106
|
-
...cateringPrepTimeConfig,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
const { estimatedDeliveryMinutes = 0 } = prepTimeSettings;
|
|
110
|
-
if (fulfillmentPreference === constants_1.FULFILLMENT_TYPES.DELIVERY &&
|
|
111
|
-
estimatedDeliveryMinutes > 0) {
|
|
112
|
-
const baseWeekDays = resolved.weekDayPrepTimes ?? {};
|
|
113
|
-
resolved = {
|
|
114
|
-
...resolved,
|
|
115
|
-
weekDayPrepTimes: addEstimatedDeliveryToWeekDays(baseWeekDays, prepTimeSettings.estimatedDeliveryMinutes ?? 0),
|
|
116
|
-
};
|
|
84
|
+
return prepTimeSettings;
|
|
117
85
|
}
|
|
118
|
-
|
|
86
|
+
const cateringPrepTimeConfig = (0, catering_1.getCateringPrepTimeConfig)({
|
|
87
|
+
items: cartItems,
|
|
88
|
+
prepTimeCadence: prepTimeSettings.prepTimeCadence,
|
|
89
|
+
prepTimeFrequency: prepTimeSettings.prepTimeFrequency,
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
...prepTimeSettings,
|
|
93
|
+
...cateringPrepTimeConfig,
|
|
94
|
+
};
|
|
119
95
|
}
|
|
120
96
|
// ── Main ────────────────────────────────────────────────────────────────────
|
|
121
97
|
function getSchedules({ store, locations, cartItems, fulfillmentPreference, prepTimeSettings, currentLocation, isCateringFlow = false, }) {
|
|
122
98
|
const { isAsapOrders, isSameDayOrders, max_future_order_days: daysCount = 7, weeklyPreSaleConfig, preSaleConfig, } = store;
|
|
123
99
|
const cart = deriveCartInfo(cartItems);
|
|
124
|
-
const resolvedPrepTime = resolvePrepTimeConfig(getPrepTimeCadenceAndFrequency(prepTimeSettings), cartItems, isCateringFlow
|
|
125
|
-
const { gapInMinutes, busyTimes: busyTimesByLocationId, prepTimeFrequency, prepTimeCadence,
|
|
126
|
-
const
|
|
100
|
+
const resolvedPrepTime = resolvePrepTimeConfig(getPrepTimeCadenceAndFrequency(prepTimeSettings), cartItems, isCateringFlow);
|
|
101
|
+
const { gapInMinutes, busyTimes: busyTimesByLocationId, prepTimeFrequency: rawPrepTimeFrequency, prepTimeCadence, openingBuffer = 0, closingBuffer = 0, } = resolvedPrepTime;
|
|
102
|
+
const isDayCadence = prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
|
|
103
|
+
const cateringShiftMinutes = isCateringFlow && !isDayCadence ? (rawPrepTimeFrequency ?? 0) : 0;
|
|
104
|
+
const prepTimeFrequency = cateringShiftMinutes > 0 ? 0 : (rawPrepTimeFrequency ?? 0);
|
|
105
|
+
const isDelivery = fulfillmentPreference === constants_1.FULFILLMENT_TYPES.DELIVERY;
|
|
106
|
+
const estimatedDeliveryMinutes = isDelivery
|
|
107
|
+
? (resolvedPrepTime.estimatedDeliveryMinutes ?? 0)
|
|
108
|
+
: 0;
|
|
127
109
|
const busyTimes = busyTimesByLocationId?.[currentLocation.location_id] ?? [];
|
|
128
110
|
const businessHoursOverrides = (0, business_hours_1.getLocationsBusinessHoursOverrides)(store.businessHoursOverrides, locations)[currentLocation.location_id] ?? [];
|
|
129
111
|
const filterSchedule = (schedule) => (0, schedule_filter_1.filterBusyTimesFromSchedule)({
|
|
@@ -146,7 +128,9 @@ function getSchedules({ store, locations, cartItems, fulfillmentPreference, prep
|
|
|
146
128
|
gapInMinutes,
|
|
147
129
|
daysCount: 7,
|
|
148
130
|
preSaleDates: weeklyPickupDates,
|
|
149
|
-
|
|
131
|
+
openingBuffer,
|
|
132
|
+
closingBuffer,
|
|
133
|
+
estimatedDeliveryMinutes,
|
|
150
134
|
});
|
|
151
135
|
const filteredSchedule = filterSchedule(schedule);
|
|
152
136
|
if (cart.hasWeeklyPreSaleItem) {
|
|
@@ -174,21 +158,19 @@ function getSchedules({ store, locations, cartItems, fulfillmentPreference, prep
|
|
|
174
158
|
currentDate: resolveStartDate({
|
|
175
159
|
preSaleStartDate: preSaleDates.startDate,
|
|
176
160
|
hasPreSaleItem: cart.hasPreSaleItem,
|
|
177
|
-
|
|
178
|
-
isCateringFlow,
|
|
161
|
+
cateringShiftMinutes,
|
|
179
162
|
}),
|
|
180
|
-
prepTimeFrequency,
|
|
181
|
-
prepTimeCadence,
|
|
163
|
+
prepTimeFrequency: isPreSaleEnabled ? 0 : prepTimeFrequency,
|
|
164
|
+
prepTimeCadence: isPreSaleEnabled ? undefined : prepTimeCadence,
|
|
182
165
|
location: currentLocation,
|
|
183
166
|
fulfillmentPreference,
|
|
184
167
|
businessHoursOverrides,
|
|
185
168
|
gapInMinutes,
|
|
186
169
|
daysCount: effectiveDaysCount,
|
|
187
170
|
isCatering: isCateringFlow,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}),
|
|
171
|
+
openingBuffer: isPreSaleEnabled ? 0 : openingBuffer,
|
|
172
|
+
closingBuffer: isPreSaleEnabled ? 0 : closingBuffer,
|
|
173
|
+
estimatedDeliveryMinutes,
|
|
192
174
|
...(preSaleHoursOverride && { preSaleHoursOverride }),
|
|
193
175
|
...(isPreSaleEnabled && { endDate: preSaleDates.endDate }),
|
|
194
176
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-schedules.js","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"get-schedules.js","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { FulfillmentSchedule, GenerateLocationFulfillmentScheduleParams } from "../types";
|
|
2
|
-
export declare function generateLocationFulfillmentSchedule({ startDate, currentDate, prepTimeFrequency, prepTimeCadence,
|
|
2
|
+
export declare function generateLocationFulfillmentSchedule({ startDate, currentDate, prepTimeFrequency, prepTimeCadence, location, fulfillmentPreference, businessHoursOverrides, preSaleHoursOverride, gapInMinutes, daysCount, preSaleDates, endDate, isCatering, openingBuffer, closingBuffer, estimatedDeliveryMinutes, }: GenerateLocationFulfillmentScheduleParams): FulfillmentSchedule;
|
|
3
3
|
//# sourceMappingURL=location.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/schedule/location.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,mBAAmB,EACnB,yCAAyC,EACzC,MAAM,UAAU,CAAC;AAKlB,wBAAgB,mCAAmC,CAAC,EACnD,SAAS,EACT,WAAwB,EACxB,iBAAqB,EACrB,eAA0C,EAC1C,
|
|
1
|
+
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/schedule/location.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,mBAAmB,EACnB,yCAAyC,EACzC,MAAM,UAAU,CAAC;AAKlB,wBAAgB,mCAAmC,CAAC,EACnD,SAAS,EACT,WAAwB,EACxB,iBAAqB,EACrB,eAA0C,EAC1C,QAAQ,EACR,qBAAqB,EACrB,sBAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,SAAa,EACb,YAAiB,EACjB,OAAc,EACd,UAAkB,EAClB,aAAiB,EACjB,aAAiB,EACjB,wBAA4B,GAC5B,EAAE,yCAAyC,GAAG,mBAAmB,CA6CjE"}
|
package/lib/schedule/location.js
CHANGED
|
@@ -6,9 +6,15 @@ const constants_1 = require("../constants");
|
|
|
6
6
|
const business_hours_1 = require("../utils/business-hours");
|
|
7
7
|
const available_dates_1 = require("./available-dates");
|
|
8
8
|
const generate_1 = require("./generate");
|
|
9
|
-
function generateLocationFulfillmentSchedule({ startDate, currentDate = new Date(), prepTimeFrequency = 0, prepTimeCadence = constants_1.PREP_TIME_CADENCE.MINUTE,
|
|
9
|
+
function generateLocationFulfillmentSchedule({ startDate, currentDate = new Date(), prepTimeFrequency = 0, prepTimeCadence = constants_1.PREP_TIME_CADENCE.MINUTE, location, fulfillmentPreference, businessHoursOverrides = [], preSaleHoursOverride, gapInMinutes, daysCount = 1, preSaleDates = [], endDate = null, isCatering = false, openingBuffer = 0, closingBuffer = 0, estimatedDeliveryMinutes = 0, }) {
|
|
10
10
|
const isDaysCadence = prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
|
|
11
11
|
const businessHours = (0, business_hours_1.getLocationBusinessHoursForFulfillment)(location, fulfillmentPreference, isCatering);
|
|
12
|
+
// DAY cadence: prepTimeFrequency is already in days.
|
|
13
|
+
// MINUTE cadence: convert minutes - full days to skip, remainder applied on target day.
|
|
14
|
+
const minuteCadenceDaysSkipped = !isDaysCadence
|
|
15
|
+
? Math.floor(prepTimeFrequency / constants_1.MINUTES_PER_DAY)
|
|
16
|
+
: 0;
|
|
17
|
+
const hasDaySkipping = isDaysCadence || minuteCadenceDaysSkipped > 0;
|
|
12
18
|
const dates = (0, available_dates_1.getNextAvailableDates)({
|
|
13
19
|
startDate: startDate || currentDate,
|
|
14
20
|
businessHours,
|
|
@@ -17,14 +23,14 @@ function generateLocationFulfillmentSchedule({ startDate, currentDate = new Date
|
|
|
17
23
|
datesCount: daysCount,
|
|
18
24
|
preSaleDates,
|
|
19
25
|
endDate,
|
|
20
|
-
isDaysCadence,
|
|
26
|
+
isDaysCadence: hasDaySkipping,
|
|
21
27
|
});
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
const daysToSkip = isDaysCadence
|
|
29
|
+
? prepTimeFrequency
|
|
30
|
+
: minuteCadenceDaysSkipped;
|
|
31
|
+
const availableDates = daysToSkip > 0 ? dates.slice(daysToSkip) : dates;
|
|
24
32
|
return (0, generate_1.generateSchedule)({
|
|
25
33
|
currentDate: (0, date_fns_1.roundToNearestMinutes)(currentDate),
|
|
26
|
-
weekDayPrepTimes,
|
|
27
|
-
defaultPrepTimeInMinutes,
|
|
28
34
|
timeZone: location.timezone,
|
|
29
35
|
dates: availableDates,
|
|
30
36
|
businessHours,
|
|
@@ -32,7 +38,10 @@ function generateLocationFulfillmentSchedule({ startDate, currentDate = new Date
|
|
|
32
38
|
preSaleHoursOverride,
|
|
33
39
|
gapInMinutes,
|
|
34
40
|
prepTimeCadence,
|
|
35
|
-
prepTimeFrequency
|
|
41
|
+
prepTimeFrequency,
|
|
42
|
+
openingBuffer,
|
|
43
|
+
closingBuffer,
|
|
44
|
+
estimatedDeliveryMinutes,
|
|
36
45
|
});
|
|
37
46
|
}
|
|
38
47
|
//# sourceMappingURL=location.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/schedule/location.ts"],"names":[],"mappings":";;AAUA,
|
|
1
|
+
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/schedule/location.ts"],"names":[],"mappings":";;AAUA,kFA8DC;AAxED,uCAAiD;AACjD,4CAAkE;AAKlE,4DAAiF;AACjF,uDAA0D;AAC1D,yCAA8C;AAE9C,SAAgB,mCAAmC,CAAC,EACnD,SAAS,EACT,WAAW,GAAG,IAAI,IAAI,EAAE,EACxB,iBAAiB,GAAG,CAAC,EACrB,eAAe,GAAG,6BAAiB,CAAC,MAAM,EAC1C,QAAQ,EACR,qBAAqB,EACrB,sBAAsB,GAAG,EAAE,EAC3B,oBAAoB,EACpB,YAAY,EACZ,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,EAAE,EACjB,OAAO,GAAG,IAAI,EACd,UAAU,GAAG,KAAK,EAClB,aAAa,GAAG,CAAC,EACjB,aAAa,GAAG,CAAC,EACjB,wBAAwB,GAAG,CAAC,GACe;IAC3C,MAAM,aAAa,GAAG,eAAe,KAAK,6BAAiB,CAAC,GAAG,CAAC;IAChE,MAAM,aAAa,GAAG,IAAA,uDAAsC,EAC3D,QAAQ,EACR,qBAAqB,EACrB,UAAU,CACV,CAAC;IAEF,qDAAqD;IACrD,wFAAwF;IACxF,MAAM,wBAAwB,GAAG,CAAC,aAAa;QAC9C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,2BAAe,CAAC;QACjD,CAAC,CAAC,CAAC,CAAC;IACL,MAAM,cAAc,GAAG,aAAa,IAAI,wBAAwB,GAAG,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG,IAAA,uCAAqB,EAAC;QACnC,SAAS,EAAE,SAAS,IAAI,WAAW;QACnC,aAAa;QACb,sBAAsB;QACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,SAAS;QACrB,YAAY;QACZ,OAAO;QACP,aAAa,EAAE,cAAc;KAC7B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,aAAa;QAC/B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,wBAAwB,CAAC;IAC5B,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAExE,OAAO,IAAA,2BAAgB,EAAC;QACvB,WAAW,EAAE,IAAA,gCAAqB,EAAC,WAAW,CAAC;QAC/C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,cAAc;QACrB,aAAa;QACb,sBAAsB;QACtB,oBAAoB;QACpB,YAAY;QACZ,eAAe;QACf,iBAAiB;QACjB,aAAa;QACb,aAAa;QACb,wBAAwB;KACxB,CAAC,CAAC;AACJ,CAAC"}
|
package/lib/utils/catering.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CateringPrepTimeResult, GetCateringPrepTimeParams } from "../types";
|
|
2
2
|
/**
|
|
3
|
-
* Derives prep time config (cadence, frequency
|
|
3
|
+
* Derives prep time config (cadence, frequency) from cart items for catering flow.
|
|
4
4
|
* DAY cadence has priority; if any item uses days, returns max day frequency.
|
|
5
5
|
* Otherwise returns HOUR cadence with max hour frequency across items.
|
|
6
6
|
* When items are empty or have no catering prep time, falls back to params (e.g. from prepTimeSettings).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catering.d.ts","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"catering.d.ts","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,UAAU,CAAC;AAiClB;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,yBAAyB,GAC/B,sBAAsB,CA2CxB"}
|
package/lib/utils/catering.js
CHANGED
|
@@ -2,28 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getCateringPrepTimeConfig = getCateringPrepTimeConfig;
|
|
4
4
|
const constants_1 = require("../constants");
|
|
5
|
-
const getTotalCateringPrepTimeInHours = (prepTimeCadence, prepTimeFrequency) => {
|
|
6
|
-
if (prepTimeCadence === constants_1.PREP_TIME_CADENCE.MINUTE) {
|
|
7
|
-
return Math.floor(prepTimeFrequency / 60);
|
|
8
|
-
}
|
|
9
|
-
if (prepTimeCadence === constants_1.PREP_TIME_CADENCE.HOUR) {
|
|
10
|
-
return prepTimeFrequency;
|
|
11
|
-
}
|
|
12
|
-
return prepTimeFrequency * 24;
|
|
13
|
-
};
|
|
14
5
|
/**
|
|
15
|
-
* Catering prep time is applied to the first slot only
|
|
6
|
+
* Catering prep time is applied to the first slot only.
|
|
7
|
+
* DAY cadence is preserved so it flows through the same business-day-skip
|
|
8
|
+
* logic (dates.slice) as non-catering orders.
|
|
9
|
+
* HOUR cadence is converted to minutes so the standard minute-cadence
|
|
10
|
+
* rollover logic handles it.
|
|
16
11
|
*/
|
|
17
12
|
function buildCateringPrepTimeResult(prepTimeCadence, prepTimeFrequency) {
|
|
13
|
+
if (prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY) {
|
|
14
|
+
return {
|
|
15
|
+
prepTimeCadence: constants_1.PREP_TIME_CADENCE.DAY,
|
|
16
|
+
prepTimeFrequency,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Convert HOUR → minutes so the existing minute-cadence rollover logic
|
|
20
|
+
// in generateSchedule handles it uniformly.
|
|
21
|
+
const frequencyInMinutes = prepTimeCadence === constants_1.PREP_TIME_CADENCE.HOUR
|
|
22
|
+
? prepTimeFrequency * 60
|
|
23
|
+
: prepTimeFrequency;
|
|
18
24
|
return {
|
|
19
|
-
prepTimeCadence:
|
|
20
|
-
prepTimeFrequency:
|
|
21
|
-
weekDayPrepTimes: {},
|
|
22
|
-
totalCateringPrepTimeInHours: getTotalCateringPrepTimeInHours(prepTimeCadence, prepTimeFrequency),
|
|
25
|
+
prepTimeCadence: constants_1.PREP_TIME_CADENCE.MINUTE,
|
|
26
|
+
prepTimeFrequency: frequencyInMinutes,
|
|
23
27
|
};
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
|
-
* Derives prep time config (cadence, frequency
|
|
30
|
+
* Derives prep time config (cadence, frequency) from cart items for catering flow.
|
|
27
31
|
* DAY cadence has priority; if any item uses days, returns max day frequency.
|
|
28
32
|
* Otherwise returns HOUR cadence with max hour frequency across items.
|
|
29
33
|
* When items are empty or have no catering prep time, falls back to params (e.g. from prepTimeSettings).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catering.js","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"catering.js","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":";;AA2CA,8DA6CC;AAxFD,4CAAiD;AAMjD;;;;;;GAMG;AACH,SAAS,2BAA2B,CACnC,eAA0D,EAC1D,iBAAyB;IAEzB,IAAI,eAAe,KAAK,6BAAiB,CAAC,GAAG,EAAE,CAAC;QAC/C,OAAO;YACN,eAAe,EAAE,6BAAiB,CAAC,GAAG;YACtC,iBAAiB;SACjB,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,4CAA4C;IAC5C,MAAM,kBAAkB,GACvB,eAAe,KAAK,6BAAiB,CAAC,IAAI;QACzC,CAAC,CAAC,iBAAiB,GAAG,EAAE;QACxB,CAAC,CAAC,iBAAiB,CAAC;IAEtB,OAAO;QACN,eAAe,EAAE,6BAAiB,CAAC,MAAM;QACzC,iBAAiB,EAAE,kBAAkB;KACrC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CACxC,MAAiC;IAEjC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,2BAA2B,CACjC,MAAM,CAAC,eAAe,IAAI,6BAAiB,CAAC,IAAI,EAChD,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAC7B,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;QAC7D,IAAI,OAAO,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI;YAAE,SAAS;QAEnD,IAAI,OAAO,KAAK,6BAAiB,CAAC,GAAG,EAAE,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,6BAAiB,CAAC,IAAI,EAAE,CAAC;YAC/C,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,2BAA2B,CACjC,6BAAiB,CAAC,GAAG,EACrB,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAC3B,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,2BAA2B,CACjC,6BAAiB,CAAC,IAAI,EACtB,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAC5B,CAAC;IACH,CAAC;IAED,OAAO,2BAA2B,CACjC,MAAM,CAAC,eAAe,IAAI,6BAAiB,CAAC,IAAI,EAChD,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAC7B,CAAC;AACH,CAAC"}
|
package/lib/utils/date.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare function isTomorrowInTimeZone(date: Date, timeZone: string): bool
|
|
|
9
9
|
export declare function toDateStringInTimeZone(date: Date, timeZone: string): string;
|
|
10
10
|
export declare function isSameDateInTimeZone(dateLeft: Date, dateRight: Date, timeZone: string): boolean;
|
|
11
11
|
export declare function isMidnightTransition(endDate: Date, startDateNextDay: Date, timeZone: string): boolean;
|
|
12
|
+
export declare function lastShiftEndsAtMidnight(businessHours: BusinessHour[]): boolean;
|
|
12
13
|
export declare function isZeroPrepTimeForMidnightShift({ prevDayBusinessHours, businessHour, }: {
|
|
13
14
|
prevDayBusinessHours: BusinessHour[];
|
|
14
15
|
businessHour: BusinessHour;
|
package/lib/utils/date.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiB1E;AAED,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,IAAiB,GAC9B,IAAI,CAIN;AAED,wBAAgB,qBAAqB,CACpC,iBAAiB,GAAE,MAAM,EAAO,EAChC,mBAAmB,GAAE,MAAM,EAAO,GAChC,IAAI,EAAE,CAeR;AAED,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,SAAS,EAAE,MAAM,GACf,IAAI,CAUN;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK1E;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,MAAM,GACd,OAAO,CAST;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,EACb,gBAAgB,EAAE,IAAI,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAaT;AAED,wBAAgB,8BAA8B,CAAC,EAC9C,oBAAoB,EACpB,YAAY,GACZ,EAAE;IACF,oBAAoB,EAAE,YAAY,EAAE,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;CAC3B,GAAG,OAAO,CAoBV"}
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiB1E;AAED,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,IAAiB,GAC9B,IAAI,CAIN;AAED,wBAAgB,qBAAqB,CACpC,iBAAiB,GAAE,MAAM,EAAO,EAChC,mBAAmB,GAAE,MAAM,EAAO,GAChC,IAAI,EAAE,CAeR;AAED,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,SAAS,EAAE,MAAM,GACf,IAAI,CAUN;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK1E;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,MAAM,GACd,OAAO,CAST;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,EACb,gBAAgB,EAAE,IAAI,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAaT;AAED,wBAAgB,uBAAuB,CACtC,aAAa,EAAE,YAAY,EAAE,GAC3B,OAAO,CAIT;AAED,wBAAgB,8BAA8B,CAAC,EAC9C,oBAAoB,EACpB,YAAY,GACZ,EAAE;IACF,oBAAoB,EAAE,YAAY,EAAE,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;CAC3B,GAAG,OAAO,CAoBV"}
|
package/lib/utils/date.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.isTomorrowInTimeZone = isTomorrowInTimeZone;
|
|
|
9
9
|
exports.toDateStringInTimeZone = toDateStringInTimeZone;
|
|
10
10
|
exports.isSameDateInTimeZone = isSameDateInTimeZone;
|
|
11
11
|
exports.isMidnightTransition = isMidnightTransition;
|
|
12
|
+
exports.lastShiftEndsAtMidnight = lastShiftEndsAtMidnight;
|
|
12
13
|
exports.isZeroPrepTimeForMidnightShift = isZeroPrepTimeForMidnightShift;
|
|
13
14
|
const date_fns_1 = require("date-fns");
|
|
14
15
|
const timezone_support_1 = require("timezone-support");
|
|
@@ -89,6 +90,12 @@ function isMidnightTransition(endDate, startDateNextDay, timeZone) {
|
|
|
89
90
|
zonedStartDate.hours === 0 &&
|
|
90
91
|
zonedStartDate.minutes === 0);
|
|
91
92
|
}
|
|
93
|
+
function lastShiftEndsAtMidnight(businessHours) {
|
|
94
|
+
if (!businessHours.length)
|
|
95
|
+
return false;
|
|
96
|
+
const lastShift = businessHours[businessHours.length - 1];
|
|
97
|
+
return lastShift.endTime === "24:00" || lastShift.endTime === "23:59";
|
|
98
|
+
}
|
|
92
99
|
function isZeroPrepTimeForMidnightShift({ prevDayBusinessHours, businessHour, }) {
|
|
93
100
|
if (!Array.isArray(prevDayBusinessHours) ||
|
|
94
101
|
prevDayBusinessHours.length === 0) {
|
package/lib/utils/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":";;AAKA,kCAiBC;AAED,0DAOC;AAED,sDAkBC;AAED,sDAaC;AAED,8CAQC;AAED,oDAKC;AAGD,wDAIC;AAED,oDAaC;AAED,oDAiBC;AAED,wEA0BC;
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
|