@perdieminc/time-slots 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -8
- package/lib/constants.d.ts +37 -0
- package/lib/constants.d.ts.map +1 -0
- package/lib/constants.js +37 -0
- package/lib/constants.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +41 -0
- package/lib/index.js.map +1 -0
- package/lib/schedule/available-dates.d.ts +3 -0
- package/lib/schedule/available-dates.d.ts.map +1 -0
- package/lib/schedule/available-dates.js +84 -0
- package/lib/schedule/available-dates.js.map +1 -0
- package/lib/schedule/generate.d.ts +3 -0
- package/lib/schedule/generate.d.ts.map +1 -0
- package/lib/schedule/generate.js +155 -0
- package/lib/schedule/generate.js.map +1 -0
- package/lib/schedule/get-schedules.d.ts +3 -0
- package/lib/schedule/get-schedules.d.ts.map +1 -0
- package/lib/schedule/get-schedules.js +182 -0
- package/lib/schedule/get-schedules.js.map +1 -0
- package/lib/schedule/location.d.ts +3 -0
- package/lib/schedule/location.d.ts.map +1 -0
- package/lib/schedule/location.js +38 -0
- package/lib/schedule/location.js.map +1 -0
- package/lib/types/index.d.ts +7 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +3 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types.d.ts +24 -0
- package/lib/types.js +2 -0
- package/lib/utils/business-hours.d.ts +6 -0
- package/lib/utils/business-hours.d.ts.map +1 -0
- package/lib/utils/business-hours.js +82 -0
- package/lib/utils/business-hours.js.map +1 -0
- package/lib/utils/catering.d.ts +9 -0
- package/lib/utils/catering.d.ts.map +1 -0
- package/lib/utils/catering.js +56 -0
- package/lib/utils/catering.js.map +1 -0
- package/lib/utils/date.d.ts +15 -0
- package/lib/utils/date.d.ts.map +1 -0
- package/lib/utils/date.js +109 -0
- package/lib/utils/date.js.map +1 -0
- package/lib/utils/schedule-filter.d.ts +8 -0
- package/lib/utils/schedule-filter.d.ts.map +1 -0
- package/lib/utils/schedule-filter.js +95 -0
- package/lib/utils/schedule-filter.js.map +1 -0
- package/lib/utils/store-hours.d.ts +14 -0
- package/lib/utils/store-hours.d.ts.map +1 -0
- package/lib/utils/store-hours.js +120 -0
- package/lib/utils/store-hours.js.map +1 -0
- package/lib/utils/time.d.ts +12 -0
- package/lib/utils/time.d.ts.map +1 -0
- package/lib/utils/time.js +30 -0
- package/lib/utils/time.js.map +1 -0
- package/lib/utils.d.ts +8 -0
- package/lib/utils.js +18 -0
- package/package.json +8 -7
- package/src/constants.ts +0 -45
- package/src/index.ts +0 -23
- package/src/schedule/available-dates.ts +0 -129
- package/src/schedule/generate.ts +0 -276
- package/src/schedule/get-schedules.ts +0 -264
- package/src/schedule/location.ts +0 -58
- package/src/types/business-hours.d.ts +0 -32
- package/src/types/common.d.ts +0 -5
- package/src/types/get-schedules.d.ts +0 -122
- package/src/types/index.ts +0 -34
- package/src/types/location.d.ts +0 -25
- package/src/types/schedule-filter.d.ts +0 -27
- package/src/types/schedule.d.ts +0 -83
- package/src/types/timezone-support.d.ts +0 -31
- package/src/utils/business-hours.ts +0 -120
- package/src/utils/catering.ts +0 -85
- package/src/utils/date.ts +0 -163
- package/src/utils/schedule-filter.ts +0 -140
- package/src/utils/store-hours.ts +0 -223
- package/src/utils/time.ts +0 -38
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSchedules = getSchedules;
|
|
4
|
+
const date_fns_1 = require("date-fns");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const business_hours_1 = require("../utils/business-hours");
|
|
7
|
+
const catering_1 = require("../utils/catering");
|
|
8
|
+
const date_1 = require("../utils/date");
|
|
9
|
+
const schedule_filter_1 = require("../utils/schedule-filter");
|
|
10
|
+
const location_1 = require("./location");
|
|
11
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
12
|
+
function deriveCartInfo(cartItems) {
|
|
13
|
+
return {
|
|
14
|
+
hasPreSaleItem: cartItems.some((item) => item.preSale),
|
|
15
|
+
hasWeeklyPreSaleItem: cartItems.some((item) => item.weeklyPreSale),
|
|
16
|
+
categoryIds: Array.from(new Set(cartItems
|
|
17
|
+
.map((item) => item.internalCategoryId)
|
|
18
|
+
.filter((id) => Boolean(id)))),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function resolvePreSaleDates(preSaleConfig, timezone) {
|
|
22
|
+
return {
|
|
23
|
+
startDate: preSaleConfig?.due_start_date
|
|
24
|
+
? (0, date_1.overrideTimeZoneOnUTC)(preSaleConfig.due_start_date, timezone)
|
|
25
|
+
: new Date(),
|
|
26
|
+
endDate: preSaleConfig?.due_end_date
|
|
27
|
+
? (0, date_1.overrideTimeZoneOnUTC)(preSaleConfig.due_end_date, timezone)
|
|
28
|
+
: new Date(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function getPreSaleHoursOverride(preSaleConfig, hasPreSaleItem) {
|
|
32
|
+
if (preSaleConfig &&
|
|
33
|
+
!preSaleConfig.use_store_hours_due &&
|
|
34
|
+
hasPreSaleItem &&
|
|
35
|
+
preSaleConfig.due_start_time &&
|
|
36
|
+
preSaleConfig.due_end_time) {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
startTime: preSaleConfig.due_start_time,
|
|
40
|
+
endTime: preSaleConfig.due_end_time,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
function resolveStartDate(zonedDueStartDate, hasPreSaleItem) {
|
|
47
|
+
if (hasPreSaleItem) {
|
|
48
|
+
return new Date(Math.max(zonedDueStartDate.getTime(), Date.now()));
|
|
49
|
+
}
|
|
50
|
+
return new Date();
|
|
51
|
+
}
|
|
52
|
+
const WEEKDAY_KEYS = [0, 1, 2, 3, 4, 5, 6];
|
|
53
|
+
function addEstimatedDeliveryToWeekDays(weekDayPrepTimes, estimatedDeliveryMinutes) {
|
|
54
|
+
const result = {};
|
|
55
|
+
for (const day of WEEKDAY_KEYS) {
|
|
56
|
+
result[day] = (weekDayPrepTimes[day] ?? 0) + estimatedDeliveryMinutes;
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Returns prep time cadence and frequency for schedule generation.
|
|
62
|
+
* If prepTimeCadence and prepTimeFrequency exist on settings (e.g. from catering), returns them.
|
|
63
|
+
* Otherwise derives from fulfillAtBusinessDayStart and prepTimeInMinutes (days = prepTimeInMinutes / MINUTES_PER_DAY).
|
|
64
|
+
*/
|
|
65
|
+
function getPrepTimeCadenceAndFrequency(settings) {
|
|
66
|
+
const hasCadence = settings.prepTimeCadence != null && settings.prepTimeFrequency != null;
|
|
67
|
+
if (hasCadence) {
|
|
68
|
+
return settings;
|
|
69
|
+
}
|
|
70
|
+
const fulfillAtBusinessDayStart = settings.fulfillAtBusinessDayStart;
|
|
71
|
+
return {
|
|
72
|
+
...settings,
|
|
73
|
+
prepTimeCadence: fulfillAtBusinessDayStart
|
|
74
|
+
? constants_1.PREP_TIME_CADENCE.DAY
|
|
75
|
+
: constants_1.PREP_TIME_CADENCE.MINUTE,
|
|
76
|
+
prepTimeFrequency: fulfillAtBusinessDayStart
|
|
77
|
+
? Math.floor(settings.prepTimeInMinutes / constants_1.MINUTES_PER_DAY)
|
|
78
|
+
: (settings?.prepTimeInMinutes ?? 0),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolves prep time config: for catering flow uses cart-derived cadence/frequency;
|
|
83
|
+
* when fulfillment is DELIVERY, adds estimatedDeliveryMinutes to all weekday prep times.
|
|
84
|
+
*/
|
|
85
|
+
function resolvePrepTimeConfig(prepTimeSettings, cartItems, isCateringFlow, fulfillmentPreference, timezone = constants_1.DEFAULT_TIMEZONE) {
|
|
86
|
+
let resolved;
|
|
87
|
+
if (!isCateringFlow) {
|
|
88
|
+
const isDayCadence = prepTimeSettings.prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
|
|
89
|
+
resolved = {
|
|
90
|
+
...prepTimeSettings,
|
|
91
|
+
...(isDayCadence && { weekDayPrepTimes: {} }),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const cateringPrepTimeConfig = (0, catering_1.getCateringPrepTimeConfig)({
|
|
96
|
+
items: cartItems,
|
|
97
|
+
prepTimeCadence: prepTimeSettings.prepTimeCadence,
|
|
98
|
+
prepTimeFrequency: prepTimeSettings.prepTimeFrequency,
|
|
99
|
+
timezone,
|
|
100
|
+
});
|
|
101
|
+
resolved = {
|
|
102
|
+
...prepTimeSettings,
|
|
103
|
+
...cateringPrepTimeConfig,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const { estimatedDeliveryMinutes = 0 } = prepTimeSettings;
|
|
107
|
+
if (fulfillmentPreference === constants_1.FULFILLMENT_TYPES.DELIVERY &&
|
|
108
|
+
estimatedDeliveryMinutes > 0) {
|
|
109
|
+
const baseWeekDays = resolved.weekDayPrepTimes ?? {};
|
|
110
|
+
resolved = {
|
|
111
|
+
...resolved,
|
|
112
|
+
weekDayPrepTimes: addEstimatedDeliveryToWeekDays(baseWeekDays, prepTimeSettings.estimatedDeliveryMinutes ?? 0),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return resolved;
|
|
116
|
+
}
|
|
117
|
+
// ── Main ────────────────────────────────────────────────────────────────────
|
|
118
|
+
function getSchedules({ store, locations, cartItems, fulfillmentPreference, prepTimeSettings, currentLocation, isCateringFlow = false, platform = constants_1.PLATFORM.WEB, }) {
|
|
119
|
+
const { isAsapOrders, isSameDayOrders, max_future_order_days: daysCount = 7, weeklyPreSaleConfig, preSaleConfig, } = store;
|
|
120
|
+
const cart = deriveCartInfo(cartItems);
|
|
121
|
+
const resolvedPrepTime = resolvePrepTimeConfig(getPrepTimeCadenceAndFrequency(prepTimeSettings), cartItems, isCateringFlow, fulfillmentPreference, currentLocation?.timezone);
|
|
122
|
+
const { gapInMinutes, busyTimes: busyTimesByLocationId, prepTimeFrequency, prepTimeCadence, weekDayPrepTimes, } = resolvedPrepTime;
|
|
123
|
+
const busyTimes = busyTimesByLocationId?.[currentLocation.location_id] ?? [];
|
|
124
|
+
const businessHoursOverrides = (0, business_hours_1.getLocationsBusinessHoursOverrides)(store.businessHoursOverrides, locations)[currentLocation.location_id] ?? [];
|
|
125
|
+
const filterSchedule = (schedule) => (0, schedule_filter_1.filterBusyTimesFromSchedule)({
|
|
126
|
+
schedule,
|
|
127
|
+
busyTimes,
|
|
128
|
+
cartCategoryIds: cart.categoryIds,
|
|
129
|
+
});
|
|
130
|
+
// ── Weekly pre-sale path (early return) ─────────────────────────────────
|
|
131
|
+
if (cart.hasWeeklyPreSaleItem &&
|
|
132
|
+
weeklyPreSaleConfig?.active &&
|
|
133
|
+
!isCateringFlow) {
|
|
134
|
+
const weeklyPickupDates = (0, date_1.getPreSalePickupDates)(weeklyPreSaleConfig?.pickup_days, weeklyPreSaleConfig?.ordering_days);
|
|
135
|
+
if (weeklyPickupDates.length > 0) {
|
|
136
|
+
const schedule = (0, location_1.generateLocationFulfillmentSchedule)({
|
|
137
|
+
startDate: weeklyPickupDates[0],
|
|
138
|
+
location: currentLocation,
|
|
139
|
+
fulfillmentPreference,
|
|
140
|
+
businessHoursOverrides,
|
|
141
|
+
gapInMinutes,
|
|
142
|
+
daysCount: 7,
|
|
143
|
+
preSaleDates: weeklyPickupDates.map((d) => d.getDate()),
|
|
144
|
+
presalePickupWeekDays: weeklyPreSaleConfig.pickup_days,
|
|
145
|
+
platform,
|
|
146
|
+
});
|
|
147
|
+
return {
|
|
148
|
+
schedule: filterSchedule(schedule),
|
|
149
|
+
isWeeklyPreSaleAvailable: true,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ── Main schedule path ──────────────────────────────────────────────────
|
|
154
|
+
const isPreSaleEnabled = (preSaleConfig?.active ?? false) && cart.hasPreSaleItem && !isCateringFlow;
|
|
155
|
+
const preSaleDates = resolvePreSaleDates(preSaleConfig, currentLocation.timezone);
|
|
156
|
+
const preSaleHoursOverride = getPreSaleHoursOverride(preSaleConfig, cart.hasPreSaleItem);
|
|
157
|
+
const schedule = (0, location_1.generateLocationFulfillmentSchedule)({
|
|
158
|
+
startDate: resolveStartDate(preSaleDates.startDate, cart.hasPreSaleItem),
|
|
159
|
+
prepTimeFrequency,
|
|
160
|
+
prepTimeCadence,
|
|
161
|
+
location: currentLocation,
|
|
162
|
+
fulfillmentPreference,
|
|
163
|
+
businessHoursOverrides,
|
|
164
|
+
gapInMinutes,
|
|
165
|
+
daysCount: isPreSaleEnabled
|
|
166
|
+
? (0, date_fns_1.differenceInDays)(preSaleDates.endDate, preSaleDates.startDate) + 1
|
|
167
|
+
: !isAsapOrders && !isSameDayOrders
|
|
168
|
+
? daysCount
|
|
169
|
+
: 1,
|
|
170
|
+
platform,
|
|
171
|
+
...(!isPreSaleEnabled && {
|
|
172
|
+
weekDayPrepTimes,
|
|
173
|
+
}),
|
|
174
|
+
...(preSaleHoursOverride && { preSaleHoursOverride }),
|
|
175
|
+
...(isPreSaleEnabled && { endDate: preSaleDates.endDate }),
|
|
176
|
+
});
|
|
177
|
+
return {
|
|
178
|
+
schedule: filterSchedule(schedule),
|
|
179
|
+
isWeeklyPreSaleAvailable: false,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=get-schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-schedules.js","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { FulfillmentSchedule, GenerateLocationFulfillmentScheduleParams } from "../types";
|
|
2
|
+
export declare function generateLocationFulfillmentSchedule({ startDate, prepTimeFrequency, prepTimeCadence, weekDayPrepTimes, location, fulfillmentPreference, businessHoursOverrides, preSaleHoursOverride, gapInMinutes, daysCount, preSaleDates, presalePickupWeekDays, endDate, platform, }: GenerateLocationFulfillmentScheduleParams): FulfillmentSchedule;
|
|
3
|
+
//# sourceMappingURL=location.d.ts.map
|
|
@@ -0,0 +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,iBAAqB,EACrB,eAA0C,EAC1C,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,EACrB,sBAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,SAAa,EACb,YAAiB,EACjB,qBAA0B,EAC1B,OAAc,EACd,QAAuB,GACvB,EAAE,yCAAyC,GAAG,mBAAmB,CAgCjE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateLocationFulfillmentSchedule = generateLocationFulfillmentSchedule;
|
|
4
|
+
const date_fns_1 = require("date-fns");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const business_hours_1 = require("../utils/business-hours");
|
|
7
|
+
const available_dates_1 = require("./available-dates");
|
|
8
|
+
const generate_1 = require("./generate");
|
|
9
|
+
function generateLocationFulfillmentSchedule({ startDate, prepTimeFrequency = 0, prepTimeCadence = constants_1.PREP_TIME_CADENCE.MINUTE, weekDayPrepTimes, location, fulfillmentPreference, businessHoursOverrides = [], preSaleHoursOverride, gapInMinutes, daysCount = 1, preSaleDates = [], presalePickupWeekDays = [], endDate = null, platform = constants_1.PLATFORM.WEB, }) {
|
|
10
|
+
const isDaysCadence = prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
|
|
11
|
+
const businessHours = (0, business_hours_1.getLocationBusinessHoursForFulfillment)(location, fulfillmentPreference);
|
|
12
|
+
const dates = (0, available_dates_1.getNextAvailableDates)({
|
|
13
|
+
startDate,
|
|
14
|
+
businessHours,
|
|
15
|
+
businessHoursOverrides,
|
|
16
|
+
timeZone: location.timezone,
|
|
17
|
+
datesCount: daysCount,
|
|
18
|
+
preSaleDates,
|
|
19
|
+
endDate,
|
|
20
|
+
presalePickupWeekDays,
|
|
21
|
+
isDaysCadence,
|
|
22
|
+
platform,
|
|
23
|
+
});
|
|
24
|
+
// If prepTimeCadence is days, we need to skip opening days by prepTimeFrequency
|
|
25
|
+
const availableDates = isDaysCadence ? dates.slice(prepTimeFrequency) : dates;
|
|
26
|
+
return (0, generate_1.generateSchedule)({
|
|
27
|
+
currentDate: (0, date_fns_1.roundToNearestMinutes)(startDate),
|
|
28
|
+
weekDayPrepTimes,
|
|
29
|
+
timeZone: location.timezone,
|
|
30
|
+
dates: availableDates,
|
|
31
|
+
businessHours,
|
|
32
|
+
businessHoursOverrides,
|
|
33
|
+
preSaleHoursOverride,
|
|
34
|
+
gapInMinutes,
|
|
35
|
+
prepTimeCadence,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/schedule/location.ts"],"names":[],"mappings":";;AAUA,kFA+CC;AAzDD,uCAAiD;AACjD,4CAA2D;AAK3D,4DAAiF;AACjF,uDAA0D;AAC1D,yCAA8C;AAE9C,SAAgB,mCAAmC,CAAC,EACnD,SAAS,EACT,iBAAiB,GAAG,CAAC,EACrB,eAAe,GAAG,6BAAiB,CAAC,MAAM,EAC1C,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,EACrB,sBAAsB,GAAG,EAAE,EAC3B,oBAAoB,EACpB,YAAY,EACZ,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,EAAE,EACjB,qBAAqB,GAAG,EAAE,EAC1B,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,oBAAQ,CAAC,GAAG,GACoB;IAC3C,MAAM,aAAa,GAAG,eAAe,KAAK,6BAAiB,CAAC,GAAG,CAAC;IAChE,MAAM,aAAa,GAAG,IAAA,uDAAsC,EAC3D,QAAQ,EACR,qBAAqB,CACrB,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,uCAAqB,EAAC;QACnC,SAAS;QACT,aAAa;QACb,sBAAsB;QACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,SAAS;QACrB,YAAY;QACZ,OAAO;QACP,qBAAqB;QACrB,aAAa;QACb,QAAQ;KACR,CAAC,CAAC;IACH,gFAAgF;IAChF,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9E,OAAO,IAAA,2BAAgB,EAAC;QACvB,WAAW,EAAE,IAAA,gCAAqB,EAAC,SAAS,CAAC;QAC7C,gBAAgB;QAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,cAAc;QACrB,aAAa;QACb,sBAAsB;QACtB,oBAAoB;QACpB,YAAY;QACZ,eAAe;KACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { BusinessHour, BusinessHourInput, BusinessHoursOverrideInput, BusinessHoursOverrideOutput, } from "./business-hours";
|
|
2
|
+
export type { BusyTimeItem } from "./common";
|
|
3
|
+
export type { CartItem, CateringPrepTimeResult, GetCateringPrepTimeParams, GetSchedulesParams, GetSchedulesResult, InitScheduleParams, InitScheduleResult, PrepTimeSettings, PreSaleConfig, StoreConfig, WeeklyPreSaleConfig, } from "./get-schedules";
|
|
4
|
+
export type { FulfillmentPreference, LocationLike } from "./location";
|
|
5
|
+
export type { DaySchedule, FulfillmentSchedule, GenerateLocationFulfillmentScheduleParams, GenerateScheduleParams, GetNextAvailableDatesParams, GetOpeningClosingTimeOnDateParams, Platform, } from "./schedule";
|
|
6
|
+
export type { FilterBusyTimesFromScheduleParams, MenuType, } from "./schedule-filter";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,YAAY,EACZ,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EACX,QAAQ,EACR,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,mBAAmB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EACX,WAAW,EACX,mBAAmB,EACnB,yCAAyC,EACzC,sBAAsB,EACtB,2BAA2B,EAC3B,iCAAiC,EACjC,QAAQ,GACR,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,iCAAiC,EACjC,QAAQ,GACR,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single time slot with start and end.
|
|
3
|
+
*/
|
|
4
|
+
export interface TimeSlot {
|
|
5
|
+
start: Date;
|
|
6
|
+
end: Date;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Options for generating a schedule of time slots.
|
|
10
|
+
*/
|
|
11
|
+
export interface GenerateScheduleOptions {
|
|
12
|
+
/** Start of the range to generate slots within */
|
|
13
|
+
start: Date;
|
|
14
|
+
/** End of the range to generate slots within */
|
|
15
|
+
end: Date;
|
|
16
|
+
/** Duration of each slot in minutes */
|
|
17
|
+
slotDurationMinutes: number;
|
|
18
|
+
/** Optional gap between slots in minutes (default 0) */
|
|
19
|
+
gapMinutes?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result of generateSchedule.
|
|
23
|
+
*/
|
|
24
|
+
export type Schedule = TimeSlot[];
|
package/lib/types.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BusinessHour, BusinessHoursOverrideInput, BusinessHoursOverrideOutput, FulfillmentPreference, LocationLike } from "../types";
|
|
2
|
+
export declare function toBusinessHoursOverride(businessHoursOverride: BusinessHoursOverrideInput): BusinessHoursOverrideOutput;
|
|
3
|
+
export declare function getLocationsBusinessHoursOverrides(businessHoursOverrides: BusinessHoursOverrideInput[], locations: LocationLike[]): Record<string, BusinessHoursOverrideOutput[]>;
|
|
4
|
+
export declare const isLocationCateringEnabled: (location: LocationLike | undefined) => boolean;
|
|
5
|
+
export declare function getLocationBusinessHoursForFulfillment(location: LocationLike, fulfillmentPreference: FulfillmentPreference, isCatering?: boolean): BusinessHour[];
|
|
6
|
+
//# sourceMappingURL=business-hours.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-hours.d.ts","sourceRoot":"","sources":["../../src/utils/business-hours.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,YAAY,EACZ,MAAM,UAAU,CAAC;AAElB,wBAAgB,uBAAuB,CACtC,qBAAqB,EAAE,0BAA0B,GAC/C,2BAA2B,CAe7B;AAED,wBAAgB,kCAAkC,CACjD,sBAAsB,EAAE,0BAA0B,EAAE,EACpD,SAAS,EAAE,YAAY,EAAE,GACvB,MAAM,CAAC,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAyB/C;AAED,eAAO,MAAM,yBAAyB,GACrC,UAAU,YAAY,GAAG,SAAS,KAChC,OAKF,CAAC;AAEF,wBAAgB,sCAAsC,CACrD,QAAQ,EAAE,YAAY,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,UAAU,UAAQ,GAChB,YAAY,EAAE,CAgDhB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLocationCateringEnabled = void 0;
|
|
4
|
+
exports.toBusinessHoursOverride = toBusinessHoursOverride;
|
|
5
|
+
exports.getLocationsBusinessHoursOverrides = getLocationsBusinessHoursOverrides;
|
|
6
|
+
exports.getLocationBusinessHoursForFulfillment = getLocationBusinessHoursForFulfillment;
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
function toBusinessHoursOverride(businessHoursOverride) {
|
|
9
|
+
const { month, day, start_time: startTime, end_time: endTime, is_open: isOpen, } = businessHoursOverride;
|
|
10
|
+
return {
|
|
11
|
+
month,
|
|
12
|
+
day,
|
|
13
|
+
startTime: isOpen ? startTime : null,
|
|
14
|
+
endTime: isOpen ? endTime : null,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function getLocationsBusinessHoursOverrides(businessHoursOverrides, locations) {
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const override of businessHoursOverrides) {
|
|
20
|
+
const { all_locations: allLocations, location_ids: locationIds } = override || {};
|
|
21
|
+
if (allLocations === true) {
|
|
22
|
+
for (const location of locations || []) {
|
|
23
|
+
const id = location.location_id;
|
|
24
|
+
result[id] ?? (result[id] = []);
|
|
25
|
+
result[id].push(toBusinessHoursOverride(override));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
for (const id of locationIds || []) {
|
|
30
|
+
const location = locations.find((loc) => loc.location_id === id);
|
|
31
|
+
if (location) {
|
|
32
|
+
result[id] ?? (result[id] = []);
|
|
33
|
+
result[id].push(toBusinessHoursOverride(override));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
const isLocationCateringEnabled = (location) => {
|
|
41
|
+
if (!location)
|
|
42
|
+
return false;
|
|
43
|
+
return (!!location?.catering?.enabled && location?.catering?.enabled !== "false");
|
|
44
|
+
};
|
|
45
|
+
exports.isLocationCateringEnabled = isLocationCateringEnabled;
|
|
46
|
+
function getLocationBusinessHoursForFulfillment(location, fulfillmentPreference, isCatering = false) {
|
|
47
|
+
const fulfillmentBusinessHours = {
|
|
48
|
+
[constants_1.FULFILLMENT_TYPES.PICKUP]: location?.pickup_hours,
|
|
49
|
+
[constants_1.FULFILLMENT_TYPES.DELIVERY]: location?.delivery_hours,
|
|
50
|
+
[constants_1.FULFILLMENT_TYPES.CURBSIDE]: location?.curbside_hours?.use_pickup_hours
|
|
51
|
+
? location?.pickup_hours
|
|
52
|
+
: location?.curbside_hours?.times,
|
|
53
|
+
};
|
|
54
|
+
const cateringBusinessTimings = {
|
|
55
|
+
[constants_1.FULFILLMENT_TYPES.PICKUP]: location?.catering?.pickup,
|
|
56
|
+
[constants_1.FULFILLMENT_TYPES.DELIVERY]: location?.catering?.delivery,
|
|
57
|
+
};
|
|
58
|
+
const businessHours = fulfillmentBusinessHours[fulfillmentPreference];
|
|
59
|
+
const cateringBusinessTiming = isCatering && (0, exports.isLocationCateringEnabled)(location)
|
|
60
|
+
? cateringBusinessTimings[fulfillmentPreference]
|
|
61
|
+
: null;
|
|
62
|
+
if (isCatering && !cateringBusinessTiming) {
|
|
63
|
+
//if catering is enabled but no business hours are set, return empty arrayif
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
return (businessHours?.map((businessHour) => {
|
|
67
|
+
if (isCatering && cateringBusinessTiming) {
|
|
68
|
+
//if catering is enabled and catering business hours are set, return catering business hours
|
|
69
|
+
return {
|
|
70
|
+
day: businessHour.day,
|
|
71
|
+
startTime: cateringBusinessTiming.start_time,
|
|
72
|
+
endTime: cateringBusinessTiming.end_time,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
day: businessHour.day,
|
|
77
|
+
startTime: businessHour.start_time,
|
|
78
|
+
endTime: businessHour.end_time,
|
|
79
|
+
};
|
|
80
|
+
}) ?? []);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=business-hours.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-hours.js","sourceRoot":"","sources":["../../src/utils/business-hours.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CateringPrepTimeResult, GetCateringPrepTimeParams } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Derives prep time config (cadence, frequency, weekDayPrepTimes) from cart items for catering flow.
|
|
4
|
+
* DAY cadence has priority; if any item uses days, returns max day frequency.
|
|
5
|
+
* Otherwise returns HOUR cadence with max hour frequency across items.
|
|
6
|
+
* When items are empty or have no catering prep time, falls back to params (e.g. from prepTimeSettings).
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCateringPrepTimeConfig(params: GetCateringPrepTimeParams): CateringPrepTimeResult;
|
|
9
|
+
//# sourceMappingURL=catering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catering.d.ts","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,UAAU,CAAC;AAwBlB;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,yBAAyB,GAC/B,sBAAsB,CA+CxB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCateringPrepTimeConfig = getCateringPrepTimeConfig;
|
|
4
|
+
const timezone_support_1 = require("timezone-support");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
function buildCateringPrepTimeResult(prepTimeCadence, prepTimeFrequency, timezone = constants_1.DEFAULT_TIMEZONE) {
|
|
7
|
+
const result = {
|
|
8
|
+
prepTimeCadence,
|
|
9
|
+
prepTimeFrequency,
|
|
10
|
+
};
|
|
11
|
+
if (prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY) {
|
|
12
|
+
result.weekDayPrepTimes = {};
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
result.weekDayPrepTimes = {
|
|
16
|
+
[(0, timezone_support_1.getZonedTime)(new Date(), (0, timezone_support_1.findTimeZone)(timezone)).dayOfWeek]: prepTimeCadence === constants_1.PREP_TIME_CADENCE.HOUR
|
|
17
|
+
? prepTimeFrequency * 60
|
|
18
|
+
: prepTimeFrequency,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Derives prep time config (cadence, frequency, weekDayPrepTimes) from cart items for catering flow.
|
|
25
|
+
* DAY cadence has priority; if any item uses days, returns max day frequency.
|
|
26
|
+
* Otherwise returns HOUR cadence with max hour frequency across items.
|
|
27
|
+
* When items are empty or have no catering prep time, falls back to params (e.g. from prepTimeSettings).
|
|
28
|
+
*/
|
|
29
|
+
function getCateringPrepTimeConfig(params) {
|
|
30
|
+
const { items, timezone = constants_1.DEFAULT_TIMEZONE } = params;
|
|
31
|
+
if (items.length === 0) {
|
|
32
|
+
return buildCateringPrepTimeResult(params.prepTimeCadence ?? constants_1.PREP_TIME_CADENCE.HOUR, params.prepTimeFrequency ?? 1, timezone);
|
|
33
|
+
}
|
|
34
|
+
const dayFrequencies = [];
|
|
35
|
+
const hourFrequencies = [];
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
const cadence = item.cateringService?.prep_time?.cadence;
|
|
38
|
+
const frequency = item.cateringService?.prep_time?.frequency;
|
|
39
|
+
if (cadence == null || frequency == null)
|
|
40
|
+
continue;
|
|
41
|
+
if (cadence === constants_1.PREP_TIME_CADENCE.DAY) {
|
|
42
|
+
dayFrequencies.push(frequency);
|
|
43
|
+
}
|
|
44
|
+
else if (cadence === constants_1.PREP_TIME_CADENCE.HOUR) {
|
|
45
|
+
hourFrequencies.push(frequency);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (dayFrequencies.length > 0) {
|
|
49
|
+
return buildCateringPrepTimeResult(constants_1.PREP_TIME_CADENCE.DAY, Math.max(...dayFrequencies), timezone);
|
|
50
|
+
}
|
|
51
|
+
if (hourFrequencies.length > 0) {
|
|
52
|
+
return buildCateringPrepTimeResult(constants_1.PREP_TIME_CADENCE.HOUR, Math.max(...hourFrequencies), timezone);
|
|
53
|
+
}
|
|
54
|
+
return buildCateringPrepTimeResult(params.prepTimeCadence ?? constants_1.PREP_TIME_CADENCE.HOUR, params.prepTimeFrequency ?? 1, timezone);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=catering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catering.js","sourceRoot":"","sources":["../../src/utils/catering.ts"],"names":[],"mappings":";;AAmCA,8DAiDC;AApFD,uDAA8D;AAC9D,4CAAmE;AAMnE,SAAS,2BAA2B,CACnC,eAA0D,EAC1D,iBAAyB,EACzB,WAAmB,4BAAgB;IAEnC,MAAM,MAAM,GAA2B;QACtC,eAAe;QACf,iBAAiB;KACjB,CAAC;IACF,IAAI,eAAe,KAAK,6BAAiB,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC9B,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,gBAAgB,GAAG;YACzB,CAAC,IAAA,+BAAY,EAAC,IAAI,IAAI,EAAE,EAAE,IAAA,+BAAY,EAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAC3D,eAAe,KAAK,6BAAiB,CAAC,IAAI;gBACzC,CAAC,CAAC,iBAAiB,GAAG,EAAE;gBACxB,CAAC,CAAC,iBAAiB;SACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CACxC,MAAiC;IAEjC,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,4BAAgB,EAAE,GAAG,MAAM,CAAC;IAEtD,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,EAC7B,QAAQ,CACR,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,EAC3B,QAAQ,CACR,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,EAC5B,QAAQ,CACR,CAAC;IACH,CAAC;IAED,OAAO,2BAA2B,CACjC,MAAM,CAAC,eAAe,IAAI,6BAAiB,CAAC,IAAI,EAChD,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAC7B,QAAQ,CACR,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BusinessHour } from "../types";
|
|
2
|
+
export declare function setHmOnDate(date: Date, hm: string, timeZone: string): Date;
|
|
3
|
+
export declare function getNextDateForDayOfWeek(targetDayIndex: number, referenceDate?: Date): Date;
|
|
4
|
+
export declare function getPreSalePickupDates(preSalePickupDays?: number[], preSaleOrderingDays?: number[]): Date[];
|
|
5
|
+
export declare function overrideTimeZoneOnUTC(date: Date | string, timeZoneB: string): Date;
|
|
6
|
+
export declare function isTodayInTimeZone(date: Date, timeZone: string): boolean;
|
|
7
|
+
export declare function isTomorrowInTimeZone(date: Date, timeZone: string): boolean;
|
|
8
|
+
export declare function isSameDateInTimeZone(dateLeft: Date, dateRight: Date, timeZone: string): boolean;
|
|
9
|
+
export declare function isMidnightTransition(endDate: Date, startDateNextDay: Date, timeZone: string): boolean;
|
|
10
|
+
export declare function addDaysInTimeZone(date: Date, days: number, timeZone: string): Date;
|
|
11
|
+
export declare function isZeroPrepTimeForMidnightShift({ prevDayBusinessHours, businessHour, }: {
|
|
12
|
+
prevDayBusinessHours: BusinessHour[];
|
|
13
|
+
businessHour: BusinessHour;
|
|
14
|
+
}): boolean;
|
|
15
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +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,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,iBAAiB,CAChC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACd,IAAI,CAWN;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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setHmOnDate = setHmOnDate;
|
|
4
|
+
exports.getNextDateForDayOfWeek = getNextDateForDayOfWeek;
|
|
5
|
+
exports.getPreSalePickupDates = getPreSalePickupDates;
|
|
6
|
+
exports.overrideTimeZoneOnUTC = overrideTimeZoneOnUTC;
|
|
7
|
+
exports.isTodayInTimeZone = isTodayInTimeZone;
|
|
8
|
+
exports.isTomorrowInTimeZone = isTomorrowInTimeZone;
|
|
9
|
+
exports.isSameDateInTimeZone = isSameDateInTimeZone;
|
|
10
|
+
exports.isMidnightTransition = isMidnightTransition;
|
|
11
|
+
exports.addDaysInTimeZone = addDaysInTimeZone;
|
|
12
|
+
exports.isZeroPrepTimeForMidnightShift = isZeroPrepTimeForMidnightShift;
|
|
13
|
+
const date_fns_1 = require("date-fns");
|
|
14
|
+
const timezone_support_1 = require("timezone-support");
|
|
15
|
+
function setHmOnDate(date, hm, timeZone) {
|
|
16
|
+
const [hours, minutes] = String(hm).split(":");
|
|
17
|
+
const zonedTime = (0, timezone_support_1.getZonedTime)(new Date(date), (0, timezone_support_1.findTimeZone)(timeZone));
|
|
18
|
+
return new Date((0, timezone_support_1.getUnixTime)({
|
|
19
|
+
zone: zonedTime.zone,
|
|
20
|
+
year: zonedTime.year,
|
|
21
|
+
month: zonedTime.month,
|
|
22
|
+
day: zonedTime.day,
|
|
23
|
+
hours: hours === "24" ? 23 : Number(hours),
|
|
24
|
+
minutes: hours === "24" ? 59 : Number(minutes),
|
|
25
|
+
seconds: 0,
|
|
26
|
+
milliseconds: 0,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
function getNextDateForDayOfWeek(targetDayIndex, referenceDate = new Date()) {
|
|
30
|
+
const currentDayIndex = referenceDate.getDay();
|
|
31
|
+
const daysUntilTarget = (targetDayIndex - currentDayIndex + 7) % 7;
|
|
32
|
+
return (0, date_fns_1.addDays)(referenceDate, daysUntilTarget);
|
|
33
|
+
}
|
|
34
|
+
function getPreSalePickupDates(preSalePickupDays = [], preSaleOrderingDays = []) {
|
|
35
|
+
const today = new Date();
|
|
36
|
+
const currentDayIndex = today.getDay();
|
|
37
|
+
if (preSalePickupDays.includes(currentDayIndex)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
if (!preSaleOrderingDays.includes(currentDayIndex)) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
return preSalePickupDays
|
|
44
|
+
.map((day) => getNextDateForDayOfWeek(day))
|
|
45
|
+
.sort(date_fns_1.compareAsc);
|
|
46
|
+
}
|
|
47
|
+
function overrideTimeZoneOnUTC(date, timeZoneB) {
|
|
48
|
+
const timeZoneATime = (0, timezone_support_1.getZonedTime)(new Date(date), (0, timezone_support_1.findTimeZone)("UTC"));
|
|
49
|
+
const timeZoneBTime = (0, timezone_support_1.getZonedTime)(new Date(date), (0, timezone_support_1.findTimeZone)(timeZoneB));
|
|
50
|
+
return new Date((0, timezone_support_1.getUnixTime)({
|
|
51
|
+
...timeZoneATime,
|
|
52
|
+
zone: timeZoneBTime.zone,
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
function isTodayInTimeZone(date, timeZone) {
|
|
56
|
+
if (!date) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const zonedNow = (0, timezone_support_1.getZonedTime)(Date.now(), (0, timezone_support_1.findTimeZone)(timeZone));
|
|
60
|
+
const zonedTime = (0, timezone_support_1.getZonedTime)(date, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
61
|
+
return zonedNow.day === zonedTime.day && zonedNow.month === zonedTime.month;
|
|
62
|
+
}
|
|
63
|
+
function isTomorrowInTimeZone(date, timeZone) {
|
|
64
|
+
const zonedNow = (0, timezone_support_1.getZonedTime)((0, date_fns_1.addDays)(Date.now(), 1), (0, timezone_support_1.findTimeZone)(timeZone));
|
|
65
|
+
const zonedTime = (0, timezone_support_1.getZonedTime)(date, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
66
|
+
return zonedNow.day === zonedTime.day && zonedNow.month === zonedTime.month;
|
|
67
|
+
}
|
|
68
|
+
function isSameDateInTimeZone(dateLeft, dateRight, timeZone) {
|
|
69
|
+
const zonedDateLeft = (0, timezone_support_1.getZonedTime)(dateLeft, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
70
|
+
const zonedDateRight = (0, timezone_support_1.getZonedTime)(dateRight, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
71
|
+
return (zonedDateLeft.year === zonedDateRight.year &&
|
|
72
|
+
zonedDateLeft.month === zonedDateRight.month &&
|
|
73
|
+
zonedDateLeft.day === zonedDateRight.day);
|
|
74
|
+
}
|
|
75
|
+
function isMidnightTransition(endDate, startDateNextDay, timeZone) {
|
|
76
|
+
if (!endDate || !startDateNextDay) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const zonedEndDate = (0, timezone_support_1.getZonedTime)(endDate, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
80
|
+
const zonedStartDate = (0, timezone_support_1.getZonedTime)(startDateNextDay, (0, timezone_support_1.findTimeZone)(timeZone));
|
|
81
|
+
return (zonedEndDate.hours === 23 &&
|
|
82
|
+
zonedEndDate.minutes === 59 &&
|
|
83
|
+
zonedStartDate.hours === 0 &&
|
|
84
|
+
zonedStartDate.minutes === 0);
|
|
85
|
+
}
|
|
86
|
+
function addDaysInTimeZone(date, days, timeZone) {
|
|
87
|
+
const zonedTime = (0, timezone_support_1.getZonedTime)((0, date_fns_1.addDays)(date, days), (0, timezone_support_1.findTimeZone)(timeZone));
|
|
88
|
+
return new Date((0, timezone_support_1.getUnixTime)({
|
|
89
|
+
...zonedTime,
|
|
90
|
+
hours: 0,
|
|
91
|
+
minutes: 0,
|
|
92
|
+
seconds: 0,
|
|
93
|
+
milliseconds: 0,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
function isZeroPrepTimeForMidnightShift({ prevDayBusinessHours, businessHour, }) {
|
|
97
|
+
if (!Array.isArray(prevDayBusinessHours) ||
|
|
98
|
+
prevDayBusinessHours.length === 0) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (!businessHour || businessHour.startTime !== "00:00") {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
const currentDay = businessHour.day;
|
|
105
|
+
const prevDay = (currentDay + 6) % 7;
|
|
106
|
+
const prevDayHas24End = prevDayBusinessHours.some((bh) => bh.day === prevDay && (bh.endTime === "24:00" || bh.endTime === "23:59"));
|
|
107
|
+
return prevDayHas24End;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FilterBusyTimesFromScheduleParams, FulfillmentSchedule, MenuType } from "../types";
|
|
2
|
+
export declare function filterBusyTimesFromSchedule({ schedule, busyTimes, cartCategoryIds, }: FilterBusyTimesFromScheduleParams): FulfillmentSchedule;
|
|
3
|
+
export declare function filterMenusFromSchedule({ schedule, menus, timeZone, }: {
|
|
4
|
+
schedule?: FulfillmentSchedule;
|
|
5
|
+
menus?: MenuType[];
|
|
6
|
+
timeZone: string;
|
|
7
|
+
}): FulfillmentSchedule;
|
|
8
|
+
//# sourceMappingURL=schedule-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-filter.d.ts","sourceRoot":"","sources":["../../src/utils/schedule-filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,iCAAiC,EACjC,mBAAmB,EACnB,QAAQ,EACR,MAAM,UAAU,CAAC;AA6BlB,wBAAgB,2BAA2B,CAAC,EAC3C,QAAa,EACb,SAAc,EACd,eAAoB,GACpB,EAAE,iCAAiC,GAAG,mBAAmB,CAiDzD;AAED,wBAAgB,uBAAuB,CAAC,EACvC,QAAa,EACb,KAAU,EACV,QAAQ,GACR,EAAE;IACF,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CAwCtB"}
|