@perdieminc/time-slots 0.0.1 → 0.0.2

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.
Files changed (78) hide show
  1. package/README.md +2 -2
  2. package/lib/constants.d.ts +36 -0
  3. package/lib/constants.d.ts.map +1 -0
  4. package/lib/constants.js +36 -0
  5. package/lib/constants.js.map +1 -0
  6. package/lib/index.d.ts +10 -0
  7. package/lib/index.d.ts.map +1 -0
  8. package/lib/index.js +41 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/schedule/available-dates.d.ts +3 -0
  11. package/lib/schedule/available-dates.d.ts.map +1 -0
  12. package/lib/schedule/available-dates.js +84 -0
  13. package/lib/schedule/available-dates.js.map +1 -0
  14. package/lib/schedule/generate.d.ts +3 -0
  15. package/lib/schedule/generate.d.ts.map +1 -0
  16. package/lib/schedule/generate.js +155 -0
  17. package/lib/schedule/generate.js.map +1 -0
  18. package/lib/schedule/get-schedules.d.ts +3 -0
  19. package/lib/schedule/get-schedules.d.ts.map +1 -0
  20. package/lib/schedule/get-schedules.js +161 -0
  21. package/lib/schedule/get-schedules.js.map +1 -0
  22. package/lib/schedule/location.d.ts +3 -0
  23. package/lib/schedule/location.d.ts.map +1 -0
  24. package/lib/schedule/location.js +38 -0
  25. package/lib/schedule/location.js.map +1 -0
  26. package/lib/types/index.d.ts +7 -0
  27. package/lib/types/index.d.ts.map +1 -0
  28. package/lib/types/index.js +3 -0
  29. package/lib/types/index.js.map +1 -0
  30. package/lib/types.d.ts +24 -0
  31. package/lib/types.js +2 -0
  32. package/lib/utils/business-hours.d.ts +6 -0
  33. package/lib/utils/business-hours.d.ts.map +1 -0
  34. package/lib/utils/business-hours.js +82 -0
  35. package/lib/utils/business-hours.js.map +1 -0
  36. package/lib/utils/catering.d.ts +9 -0
  37. package/lib/utils/catering.d.ts.map +1 -0
  38. package/lib/utils/catering.js +56 -0
  39. package/lib/utils/catering.js.map +1 -0
  40. package/lib/utils/date.d.ts +15 -0
  41. package/lib/utils/date.d.ts.map +1 -0
  42. package/lib/utils/date.js +109 -0
  43. package/lib/utils/date.js.map +1 -0
  44. package/lib/utils/schedule-filter.d.ts +8 -0
  45. package/lib/utils/schedule-filter.d.ts.map +1 -0
  46. package/lib/utils/schedule-filter.js +95 -0
  47. package/lib/utils/schedule-filter.js.map +1 -0
  48. package/lib/utils/store-hours.d.ts +14 -0
  49. package/lib/utils/store-hours.d.ts.map +1 -0
  50. package/lib/utils/store-hours.js +120 -0
  51. package/lib/utils/store-hours.js.map +1 -0
  52. package/lib/utils/time.d.ts +12 -0
  53. package/lib/utils/time.d.ts.map +1 -0
  54. package/lib/utils/time.js +30 -0
  55. package/lib/utils/time.js.map +1 -0
  56. package/lib/utils.d.ts +8 -0
  57. package/lib/utils.js +18 -0
  58. package/package.json +8 -7
  59. package/src/constants.ts +0 -45
  60. package/src/index.ts +0 -23
  61. package/src/schedule/available-dates.ts +0 -129
  62. package/src/schedule/generate.ts +0 -276
  63. package/src/schedule/get-schedules.ts +0 -264
  64. package/src/schedule/location.ts +0 -58
  65. package/src/types/business-hours.d.ts +0 -32
  66. package/src/types/common.d.ts +0 -5
  67. package/src/types/get-schedules.d.ts +0 -122
  68. package/src/types/index.ts +0 -34
  69. package/src/types/location.d.ts +0 -25
  70. package/src/types/schedule-filter.d.ts +0 -27
  71. package/src/types/schedule.d.ts +0 -83
  72. package/src/types/timezone-support.d.ts +0 -31
  73. package/src/utils/business-hours.ts +0 -120
  74. package/src/utils/catering.ts +0 -85
  75. package/src/utils/date.ts +0 -163
  76. package/src/utils/schedule-filter.ts +0 -140
  77. package/src/utils/store-hours.ts +0 -223
  78. package/src/utils/time.ts +0 -38
package/README.md CHANGED
@@ -96,5 +96,5 @@ MIT © Per Diem Subscriptions Inc.
96
96
 
97
97
  ## Repository
98
98
 
99
- - **Homepage:** [perdiem-pkgs](https://github.com/PerDiemInc/perdiem-pkgs#readme)
100
- - **Issues:** [perdiem-pkgs/issues](https://github.com/PerDiemInc/perdiem-pkgs/issues)
99
+ - **Homepage:** [time-slots](https://github.com/PerDiemInc/time-slots#readme)
100
+ - **Issues:** [time-slots/issues](https://github.com/PerDiemInc/time-slots/issues)
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Fulfillment types for pickup, delivery, curbside.
3
+ */
4
+ export declare const FULFILLMENT_TYPES: {
5
+ readonly PICKUP: "PICKUP";
6
+ readonly DELIVERY: "DELIVERY";
7
+ readonly CURBSIDE: "CURBSIDE";
8
+ };
9
+ export declare const DEFAULT_TIMEZONE = "America/New_York";
10
+ export type FulfillmentType = (typeof FULFILLMENT_TYPES)[keyof typeof FULFILLMENT_TYPES];
11
+ export declare const DEFAULT_GAP_IN_MINUTES = 15;
12
+ export declare const DEFAULT_PREP_TIME_IN_MINUTES = 5;
13
+ /**
14
+ * Prep time behaviour when computing first available slot.
15
+ */
16
+ export declare const PrepTimeBehaviour: Readonly<{
17
+ FIRST_SHIFT: 0;
18
+ EVERY_SHIFT: 1;
19
+ ROLL_FROM_FIRST_SHIFT: 2;
20
+ }>;
21
+ export type PrepTimeBehaviourType = (typeof PrepTimeBehaviour)[keyof typeof PrepTimeBehaviour];
22
+ export declare const PREP_TIME_CADENCE: {
23
+ readonly MINUTE: "minute";
24
+ readonly DAY: "day";
25
+ readonly HOUR: "hour";
26
+ };
27
+ export type PrepTimeCadence = (typeof PREP_TIME_CADENCE)[keyof typeof PREP_TIME_CADENCE];
28
+ /**
29
+ * Platform for timezone handling (web uses @date-fns/tz; ios/android use timezone-support).
30
+ */
31
+ export declare const PLATFORM: {
32
+ readonly WEB: "web";
33
+ readonly IOS: "ios";
34
+ readonly ANDROID: "android";
35
+ };
36
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +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;AAE9C;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAChC,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE5D,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"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLATFORM = exports.PREP_TIME_CADENCE = exports.PrepTimeBehaviour = exports.DEFAULT_PREP_TIME_IN_MINUTES = exports.DEFAULT_GAP_IN_MINUTES = exports.DEFAULT_TIMEZONE = exports.FULFILLMENT_TYPES = void 0;
4
+ /**
5
+ * Fulfillment types for pickup, delivery, curbside.
6
+ */
7
+ exports.FULFILLMENT_TYPES = {
8
+ PICKUP: "PICKUP",
9
+ DELIVERY: "DELIVERY",
10
+ CURBSIDE: "CURBSIDE",
11
+ };
12
+ exports.DEFAULT_TIMEZONE = "America/New_York";
13
+ exports.DEFAULT_GAP_IN_MINUTES = 15;
14
+ exports.DEFAULT_PREP_TIME_IN_MINUTES = 5;
15
+ /**
16
+ * Prep time behaviour when computing first available slot.
17
+ */
18
+ exports.PrepTimeBehaviour = Object.freeze({
19
+ FIRST_SHIFT: 0,
20
+ EVERY_SHIFT: 1,
21
+ ROLL_FROM_FIRST_SHIFT: 2,
22
+ });
23
+ exports.PREP_TIME_CADENCE = {
24
+ MINUTE: "minute",
25
+ DAY: "day",
26
+ HOUR: "hour",
27
+ };
28
+ /**
29
+ * Platform for timezone handling (web uses @date-fns/tz; ios/android use timezone-support).
30
+ */
31
+ exports.PLATFORM = {
32
+ WEB: "web",
33
+ IOS: "ios",
34
+ ANDROID: "android",
35
+ };
36
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +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;AAE9C;;GAEG;AACU,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,qBAAqB,EAAE,CAAC;CACxB,CAAC,CAAC;AAKU,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 ADDED
@@ -0,0 +1,10 @@
1
+ export type { FulfillmentType, PrepTimeBehaviourType } from "./constants";
2
+ export { DEFAULT_GAP_IN_MINUTES, DEFAULT_PREP_TIME_IN_MINUTES, FULFILLMENT_TYPES, PLATFORM, PrepTimeBehaviour, } from "./constants";
3
+ export { getSchedules } from "./schedule/get-schedules";
4
+ export * from "./types";
5
+ export { getLocationsBusinessHoursOverrides } from "./utils/business-hours";
6
+ export { getCateringPrepTimeConfig } from "./utils/catering";
7
+ export { getPreSalePickupDates, isTodayInTimeZone, isTomorrowInTimeZone, overrideTimeZoneOnUTC, } from "./utils/date";
8
+ export { filterBusyTimesFromSchedule, filterMenusFromSchedule, } from "./utils/schedule-filter";
9
+ export { getOpeningClosingTime } from "./utils/store-hours";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACN,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,cAAc,SAAS,CAAC;AACxB,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 ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
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.PrepTimeBehaviour = exports.PLATFORM = exports.FULFILLMENT_TYPES = exports.DEFAULT_PREP_TIME_IN_MINUTES = exports.DEFAULT_GAP_IN_MINUTES = void 0;
18
+ var constants_1 = require("./constants");
19
+ Object.defineProperty(exports, "DEFAULT_GAP_IN_MINUTES", { enumerable: true, get: function () { return constants_1.DEFAULT_GAP_IN_MINUTES; } });
20
+ Object.defineProperty(exports, "DEFAULT_PREP_TIME_IN_MINUTES", { enumerable: true, get: function () { return constants_1.DEFAULT_PREP_TIME_IN_MINUTES; } });
21
+ Object.defineProperty(exports, "FULFILLMENT_TYPES", { enumerable: true, get: function () { return constants_1.FULFILLMENT_TYPES; } });
22
+ Object.defineProperty(exports, "PLATFORM", { enumerable: true, get: function () { return constants_1.PLATFORM; } });
23
+ Object.defineProperty(exports, "PrepTimeBehaviour", { enumerable: true, get: function () { return constants_1.PrepTimeBehaviour; } });
24
+ var get_schedules_1 = require("./schedule/get-schedules");
25
+ Object.defineProperty(exports, "getSchedules", { enumerable: true, get: function () { return get_schedules_1.getSchedules; } });
26
+ __exportStar(require("./types"), exports);
27
+ var business_hours_1 = require("./utils/business-hours");
28
+ Object.defineProperty(exports, "getLocationsBusinessHoursOverrides", { enumerable: true, get: function () { return business_hours_1.getLocationsBusinessHoursOverrides; } });
29
+ var catering_1 = require("./utils/catering");
30
+ Object.defineProperty(exports, "getCateringPrepTimeConfig", { enumerable: true, get: function () { return catering_1.getCateringPrepTimeConfig; } });
31
+ var date_1 = require("./utils/date");
32
+ Object.defineProperty(exports, "getPreSalePickupDates", { enumerable: true, get: function () { return date_1.getPreSalePickupDates; } });
33
+ Object.defineProperty(exports, "isTodayInTimeZone", { enumerable: true, get: function () { return date_1.isTodayInTimeZone; } });
34
+ Object.defineProperty(exports, "isTomorrowInTimeZone", { enumerable: true, get: function () { return date_1.isTomorrowInTimeZone; } });
35
+ Object.defineProperty(exports, "overrideTimeZoneOnUTC", { enumerable: true, get: function () { return date_1.overrideTimeZoneOnUTC; } });
36
+ var schedule_filter_1 = require("./utils/schedule-filter");
37
+ Object.defineProperty(exports, "filterBusyTimesFromSchedule", { enumerable: true, get: function () { return schedule_filter_1.filterBusyTimesFromSchedule; } });
38
+ Object.defineProperty(exports, "filterMenusFromSchedule", { enumerable: true, get: function () { return schedule_filter_1.filterMenusFromSchedule; } });
39
+ var store_hours_1 = require("./utils/store-hours");
40
+ Object.defineProperty(exports, "getOpeningClosingTime", { enumerable: true, get: function () { return store_hours_1.getOpeningClosingTime; } });
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,yCAMqB;AALpB,mHAAA,sBAAsB,OAAA;AACtB,yHAAA,4BAA4B,OAAA;AAC5B,8GAAA,iBAAiB,OAAA;AACjB,qGAAA,QAAQ,OAAA;AACR,8GAAA,iBAAiB,OAAA;AAElB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,0CAAwB;AACxB,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"}
@@ -0,0 +1,3 @@
1
+ import type { GetNextAvailableDatesParams } from "../types";
2
+ export declare function getNextAvailableDates({ startDate, timeZone, businessHours, businessHoursOverrides, datesCount, preSaleDates, presalePickupWeekDays, endDate, isDaysCadence, platform, }: GetNextAvailableDatesParams): Date[];
3
+ //# sourceMappingURL=available-dates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"available-dates.d.ts","sourceRoot":"","sources":["../../src/schedule/available-dates.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAY,MAAM,UAAU,CAAC;AAuBtE,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,EACT,QAAQ,EACR,aAAa,EACb,sBAA2B,EAC3B,UAAc,EACd,YAAiB,EACjB,qBAA0B,EAC1B,OAAc,EACd,aAAqB,EACrB,QAAuB,GACvB,EAAE,2BAA2B,GAAG,IAAI,EAAE,CAyFtC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNextAvailableDates = getNextAvailableDates;
4
+ const tz_1 = require("@date-fns/tz");
5
+ const date_fns_1 = require("date-fns");
6
+ const timezone_support_1 = require("timezone-support");
7
+ const constants_1 = require("../constants");
8
+ const date_1 = require("../utils/date");
9
+ function getStartOfDayInZone(startDate, timeZone, platform) {
10
+ if (platform !== constants_1.PLATFORM.ANDROID) {
11
+ return (0, date_fns_1.startOfDay)(startDate, { in: (0, tz_1.tz)(timeZone) });
12
+ }
13
+ const zoned = (0, timezone_support_1.getZonedTime)(startDate, (0, timezone_support_1.findTimeZone)(timeZone));
14
+ return new Date((0, timezone_support_1.getUnixTime)({
15
+ ...zoned,
16
+ hours: 0,
17
+ minutes: 0,
18
+ seconds: 0,
19
+ milliseconds: 0,
20
+ }));
21
+ }
22
+ function getNextAvailableDates({ startDate, timeZone, businessHours, businessHoursOverrides = [], datesCount = 1, preSaleDates = [], presalePickupWeekDays = [], endDate = null, isDaysCadence = false, platform = constants_1.PLATFORM.WEB, }) {
23
+ const startOfDayInZone = getStartOfDayInZone(startDate, timeZone, platform);
24
+ const zonedStartTime = (0, timezone_support_1.getZonedTime)(startOfDayInZone, (0, timezone_support_1.findTimeZone)(timeZone));
25
+ const dates = [];
26
+ for (let date = new Date((0, timezone_support_1.getUnixTime)({
27
+ ...zonedStartTime,
28
+ hours: 0,
29
+ minutes: 0,
30
+ seconds: 0,
31
+ milliseconds: 0,
32
+ })), maxRuns = 0; dates.length < datesCount && maxRuns <= 30; date = (0, date_1.addDaysInTimeZone)(date, 1, timeZone), maxRuns += 1) {
33
+ const lastDate = dates?.at(-1);
34
+ if (lastDate && (0, date_fns_1.isSameDay)(lastDate, date)) {
35
+ continue;
36
+ }
37
+ if (endDate && (0, date_fns_1.isAfter)(date, endDate)) {
38
+ break;
39
+ }
40
+ if (date.getTime() < (0, timezone_support_1.getUnixTime)(zonedStartTime)) {
41
+ continue;
42
+ }
43
+ const zonedDate = (0, timezone_support_1.getZonedTime)(date, (0, timezone_support_1.findTimeZone)(timeZone));
44
+ const dayOfWeek = zonedDate.dayOfWeek ?? 0;
45
+ const todayBusinessHoursOverride = businessHoursOverrides.filter((override) => zonedDate.month === override.month && zonedDate.day === override.day);
46
+ const closedBusinessHoursOverride = todayBusinessHoursOverride.filter((override) => !override.startTime && !override.endTime);
47
+ if (closedBusinessHoursOverride.length) {
48
+ continue;
49
+ }
50
+ const todayBusinessHours = businessHours.filter((bh) => bh.day === dayOfWeek);
51
+ // If days cadence, we dont need to skip date even if it is after the last shift end time
52
+ if (isDaysCadence) {
53
+ const lastShiftEndTime = todayBusinessHours.at(-1)?.endTime;
54
+ const shiftEndDate = lastShiftEndTime
55
+ ? (0, date_1.setHmOnDate)(date, lastShiftEndTime, timeZone)
56
+ : null;
57
+ /**
58
+ * Skip current date if current time is after the last shift end time
59
+ */
60
+ if (shiftEndDate && (0, date_fns_1.isAfter)(startDate, shiftEndDate)) {
61
+ continue;
62
+ }
63
+ }
64
+ /**
65
+ * Skip if today is closed by location hours or by override hours
66
+ */
67
+ if (!todayBusinessHours?.length &&
68
+ !todayBusinessHoursOverride.length &&
69
+ !endDate) {
70
+ continue;
71
+ }
72
+ if (preSaleDates.length && presalePickupWeekDays.length) {
73
+ if (preSaleDates.includes(zonedDate.day) &&
74
+ presalePickupWeekDays.includes(dayOfWeek)) {
75
+ dates.push(date);
76
+ }
77
+ }
78
+ else {
79
+ dates.push(date);
80
+ }
81
+ }
82
+ return dates;
83
+ }
84
+ //# sourceMappingURL=available-dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"available-dates.js","sourceRoot":"","sources":["../../src/schedule/available-dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DaySchedule, GenerateScheduleParams } from "../types";
2
+ export declare function generateSchedule({ currentDate, prepTimeBehaviour, weekDayPrepTimes, timeZone, dates, businessHours, businessHoursOverrides, preSaleHoursOverride, gapInMinutes, prepTimeCadence, }: GenerateScheduleParams): DaySchedule[];
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAGX,WAAW,EACX,sBAAsB,EACtB,MAAM,UAAU,CAAC;AAiElB,wBAAgB,gBAAgB,CAAC,EAChC,WAAwB,EACxB,iBAA2D,EAC3D,gBAAqB,EACrB,QAAQ,EACR,KAAU,EACV,aAAkB,EAClB,sBAA2B,EAC3B,oBAAoB,EACpB,YAAiB,EACjB,eAAsB,GACtB,EAAE,sBAAsB,GAAG,WAAW,EAAE,CAmLxC"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSchedule = generateSchedule;
4
+ const date_fns_1 = require("date-fns");
5
+ const timezone_support_1 = require("timezone-support");
6
+ const constants_1 = require("../constants");
7
+ const date_1 = require("../utils/date");
8
+ function getSelectedBusinessHours({ businessHours = [], businessHoursOverrides = [], date, timeZone, preSaleHoursOverride, }) {
9
+ if (!date || !timeZone) {
10
+ return [[], (0, timezone_support_1.getZonedTime)(new Date(), (0, timezone_support_1.findTimeZone)(timeZone ?? "UTC"))];
11
+ }
12
+ const zonedDate = (0, timezone_support_1.getZonedTime)(date, (0, timezone_support_1.findTimeZone)(timeZone));
13
+ const dayOfWeek = zonedDate.dayOfWeek ?? 0;
14
+ const dayBusinessHours = businessHours?.filter((bh) => bh.day === dayOfWeek);
15
+ const businessHoursOverride = businessHoursOverrides?.filter((override) => zonedDate.month === override.month && zonedDate.day === override.day);
16
+ const selectedBusinessHours = preSaleHoursOverride
17
+ ? preSaleHoursOverride.map((o) => ({
18
+ day: dayOfWeek,
19
+ startTime: o.startTime,
20
+ endTime: o.endTime,
21
+ }))
22
+ : businessHoursOverride.length
23
+ ? businessHoursOverride.map((o) => ({
24
+ day: dayOfWeek,
25
+ startTime: o.startTime ?? "00:00",
26
+ endTime: o.endTime ?? "23:59",
27
+ }))
28
+ : (dayBusinessHours ?? []);
29
+ return [selectedBusinessHours, zonedDate];
30
+ }
31
+ // ── Public API ──────────────────────────────────────────────────────────────
32
+ function generateSchedule({ currentDate = new Date(), prepTimeBehaviour = constants_1.PrepTimeBehaviour.ROLL_FROM_FIRST_SHIFT, weekDayPrepTimes = {}, timeZone, dates = [], businessHours = [], businessHoursOverrides = [], preSaleHoursOverride, gapInMinutes = 15, prepTimeCadence = null, }) {
33
+ const isMinutesCadence = prepTimeCadence === constants_1.PREP_TIME_CADENCE.MINUTE;
34
+ let shiftStartDateWithPrepTime = null;
35
+ return dates
36
+ .map((date, index) => {
37
+ const lastDate = dates?.[index - 1];
38
+ const [selectedBusinessHours, zonedDate] = getSelectedBusinessHours({
39
+ businessHours,
40
+ businessHoursOverrides,
41
+ date,
42
+ timeZone,
43
+ preSaleHoursOverride,
44
+ });
45
+ const [prevSelectedBusinessHours] = getSelectedBusinessHours({
46
+ businessHours,
47
+ businessHoursOverrides,
48
+ date: lastDate,
49
+ timeZone,
50
+ preSaleHoursOverride,
51
+ });
52
+ const weekDayPrepTime = weekDayPrepTimes[zonedDate.dayOfWeek] ?? constants_1.DEFAULT_PREP_TIME_IN_MINUTES;
53
+ const storeTimes = {
54
+ openingTime: null,
55
+ closingTime: null,
56
+ remainingShifts: 0,
57
+ totalShifts: 0,
58
+ };
59
+ let isPrevDayMidnightTransition = false;
60
+ const slots = selectedBusinessHours
61
+ .flatMap((businessHour, i) => {
62
+ const startDate = (0, date_1.setHmOnDate)(date, businessHour.startTime, timeZone);
63
+ const shiftStartDate = isMinutesCadence && shiftStartDateWithPrepTime
64
+ ? (0, date_fns_1.max)([shiftStartDateWithPrepTime, startDate])
65
+ : startDate;
66
+ const shiftEndDate = (0, date_1.setHmOnDate)(date, businessHour.endTime, timeZone);
67
+ if (i === 0) {
68
+ storeTimes.openingTime = shiftStartDate;
69
+ }
70
+ if (i === selectedBusinessHours.length - 1) {
71
+ storeTimes.closingTime = shiftEndDate;
72
+ }
73
+ if (!(0, date_fns_1.isBefore)(shiftStartDate, shiftEndDate)) {
74
+ if (isMinutesCadence) {
75
+ shiftStartDateWithPrepTime = null;
76
+ }
77
+ return [];
78
+ }
79
+ storeTimes.totalShifts += 1;
80
+ const fixedSlots = (0, date_fns_1.eachMinuteOfInterval)({ start: shiftStartDate, end: shiftEndDate }, { step: gapInMinutes });
81
+ if ((0, date_1.isTodayInTimeZone)(date, timeZone)) {
82
+ const openingTime = storeTimes.openingTime ?? new Date(0);
83
+ const baseDate = currentDate instanceof Date ? currentDate : new Date(currentDate);
84
+ const currentDateWithPrepTime = (0, date_fns_1.addMinutes)(new Date(Math.max(baseDate.getTime(), openingTime.getTime())), Math.max(constants_1.DEFAULT_PREP_TIME_IN_MINUTES, weekDayPrepTime));
85
+ if ((0, date_fns_1.isAfter)(currentDateWithPrepTime, shiftEndDate)) {
86
+ // If the prep time cadence is minutes, we need to set the shift start date with the prep time
87
+ if (isMinutesCadence) {
88
+ shiftStartDateWithPrepTime = currentDateWithPrepTime;
89
+ }
90
+ return [];
91
+ }
92
+ if ((0, date_fns_1.isBefore)(currentDateWithPrepTime, shiftStartDate)) {
93
+ storeTimes.remainingShifts += 1;
94
+ if (prepTimeBehaviour ===
95
+ constants_1.PrepTimeBehaviour.EVERY_SHIFT) {
96
+ const shiftStartDateWithPrepTime = (0, date_fns_1.addMinutes)(shiftStartDate, weekDayPrepTime);
97
+ const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, shiftStartDateWithPrepTime));
98
+ slotDates.unshift(shiftStartDateWithPrepTime);
99
+ return slotDates;
100
+ }
101
+ return fixedSlots;
102
+ }
103
+ const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, currentDateWithPrepTime));
104
+ slotDates.unshift(currentDateWithPrepTime);
105
+ storeTimes.remainingShifts += 1;
106
+ return slotDates;
107
+ }
108
+ if (prepTimeBehaviour === constants_1.PrepTimeBehaviour.FIRST_SHIFT && i !== 0) {
109
+ storeTimes.remainingShifts += 1;
110
+ return fixedSlots;
111
+ }
112
+ const allowZeroPrepTimeForMidnightShift = (0, date_1.isZeroPrepTimeForMidnightShift)({
113
+ prevDayBusinessHours: prevSelectedBusinessHours,
114
+ businessHour,
115
+ });
116
+ const prepTimeSlot = (0, date_fns_1.addMinutes)(prepTimeBehaviour === constants_1.PrepTimeBehaviour.ROLL_FROM_FIRST_SHIFT &&
117
+ !isPrevDayMidnightTransition &&
118
+ storeTimes.openingTime
119
+ ? storeTimes.openingTime
120
+ : shiftStartDate, allowZeroPrepTimeForMidnightShift ? 0 : weekDayPrepTime);
121
+ isPrevDayMidnightTransition = allowZeroPrepTimeForMidnightShift;
122
+ if (prepTimeSlot > shiftEndDate) {
123
+ if (isMinutesCadence) {
124
+ shiftStartDateWithPrepTime = prepTimeSlot;
125
+ }
126
+ shiftStartDateWithPrepTime = prepTimeSlot;
127
+ return [];
128
+ }
129
+ if (prepTimeSlot < shiftStartDate) {
130
+ storeTimes.remainingShifts += 1;
131
+ return fixedSlots;
132
+ }
133
+ const slotDates = fixedSlots.filter((d) => (0, date_fns_1.isAfter)(d, prepTimeSlot));
134
+ slotDates.unshift(prepTimeSlot);
135
+ storeTimes.remainingShifts += 1;
136
+ shiftStartDateWithPrepTime = null; //reset the shift start date with prep time
137
+ return slotDates;
138
+ })
139
+ .sort(date_fns_1.compareAsc);
140
+ const currentDateMs = currentDate instanceof Date ? currentDate.getTime() : currentDate;
141
+ const availableSlots = slots.filter((d) => d.getTime() >= currentDateMs);
142
+ return {
143
+ date,
144
+ originalStoreOpeningTime: storeTimes.openingTime,
145
+ originalStoreClosingTime: storeTimes.closingTime,
146
+ remainingShifts: storeTimes.remainingShifts,
147
+ openingTime: slots[0],
148
+ closingTime: slots[slots.length - 1],
149
+ firstAvailableSlot: availableSlots[0],
150
+ slots: availableSlots,
151
+ };
152
+ })
153
+ .filter((a) => a.slots.length);
154
+ }
155
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/schedule/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GetSchedulesParams, GetSchedulesResult } from "../types";
2
+ export declare function getSchedules({ store, locations, cartItems, fulfillmentPreference, prepTimeSettings, currentLocation, isCateringFlow, platform, }: GetSchedulesParams): GetSchedulesResult;
3
+ //# sourceMappingURL=get-schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-schedules.d.ts","sourceRoot":"","sources":["../../src/schedule/get-schedules.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGX,kBAAkB,EAClB,kBAAkB,EAGlB,MAAM,UAAU,CAAC;AAoIlB,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,cAAsB,EACtB,QAAuB,GACvB,EAAE,kBAAkB,GAAG,kBAAkB,CA4GzC"}
@@ -0,0 +1,161 @@
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
+ * Resolves prep time config: for catering flow uses cart-derived cadence/frequency;
62
+ * when fulfillment is DELIVERY, adds estimatedDeliveryMinutes to all weekday prep times.
63
+ */
64
+ function resolvePrepTimeConfig(prepTimeSettings, cartItems, isCateringFlow, fulfillmentPreference, timezone = constants_1.DEFAULT_TIMEZONE) {
65
+ let resolved;
66
+ if (!isCateringFlow) {
67
+ const isDayCadence = prepTimeSettings.prepTimeCadence === constants_1.PREP_TIME_CADENCE.DAY;
68
+ resolved = {
69
+ ...prepTimeSettings,
70
+ ...(isDayCadence && { weekDayPrepTimes: {} }),
71
+ };
72
+ }
73
+ else {
74
+ const cateringPrepTimeConfig = (0, catering_1.getCateringPrepTimeConfig)({
75
+ items: cartItems,
76
+ prepTimeCadence: prepTimeSettings.prepTimeCadence,
77
+ prepTimeFrequency: prepTimeSettings.prepTimeFrequency,
78
+ timezone,
79
+ });
80
+ resolved = {
81
+ ...prepTimeSettings,
82
+ ...cateringPrepTimeConfig,
83
+ };
84
+ }
85
+ const { estimatedDeliveryMinutes = 0 } = prepTimeSettings;
86
+ if (fulfillmentPreference === constants_1.FULFILLMENT_TYPES.DELIVERY &&
87
+ estimatedDeliveryMinutes > 0) {
88
+ const baseWeekDays = resolved.weekDayPrepTimes ?? {};
89
+ resolved = {
90
+ ...resolved,
91
+ weekDayPrepTimes: addEstimatedDeliveryToWeekDays(baseWeekDays, prepTimeSettings.estimatedDeliveryMinutes ?? 0),
92
+ };
93
+ }
94
+ return resolved;
95
+ }
96
+ // ── Main ────────────────────────────────────────────────────────────────────
97
+ function getSchedules({ store, locations, cartItems, fulfillmentPreference, prepTimeSettings, currentLocation, isCateringFlow = false, platform = constants_1.PLATFORM.WEB, }) {
98
+ const { isAsapOrders, isSameDayOrders, max_future_order_days: daysCount = 7, weeklyPreSaleConfig, preSaleConfig, } = store;
99
+ const cart = deriveCartInfo(cartItems);
100
+ const resolvedPrepTime = resolvePrepTimeConfig(prepTimeSettings, cartItems, isCateringFlow, fulfillmentPreference, currentLocation?.timezone);
101
+ const { gapInMinutes, busyTimes: busyTimesByLocationId, prepTimeFrequency, prepTimeCadence, weekDayPrepTimes, } = resolvedPrepTime;
102
+ const busyTimes = busyTimesByLocationId?.[currentLocation.location_id] ?? [];
103
+ const businessHoursOverrides = (0, business_hours_1.getLocationsBusinessHoursOverrides)(store.businessHoursOverrides, locations)[currentLocation.location_id] ?? [];
104
+ const filterSchedule = (schedule) => (0, schedule_filter_1.filterBusyTimesFromSchedule)({
105
+ schedule,
106
+ busyTimes,
107
+ cartCategoryIds: cart.categoryIds,
108
+ });
109
+ // ── Weekly pre-sale path (early return) ─────────────────────────────────
110
+ if (cart.hasWeeklyPreSaleItem &&
111
+ weeklyPreSaleConfig?.active &&
112
+ !isCateringFlow) {
113
+ const weeklyPickupDates = (0, date_1.getPreSalePickupDates)(weeklyPreSaleConfig?.pickup_days, weeklyPreSaleConfig?.ordering_days);
114
+ if (weeklyPickupDates.length > 0) {
115
+ const schedule = (0, location_1.generateLocationFulfillmentSchedule)({
116
+ startDate: weeklyPickupDates[0],
117
+ location: currentLocation,
118
+ fulfillmentPreference,
119
+ businessHoursOverrides,
120
+ gapInMinutes,
121
+ daysCount: 7,
122
+ preSaleDates: weeklyPickupDates.map((d) => d.getDate()),
123
+ presalePickupWeekDays: weeklyPreSaleConfig.pickup_days,
124
+ platform,
125
+ });
126
+ return {
127
+ schedule: filterSchedule(schedule),
128
+ isWeeklyPreSaleAvailable: true,
129
+ };
130
+ }
131
+ }
132
+ // ── Main schedule path ──────────────────────────────────────────────────
133
+ const isPreSaleEnabled = (preSaleConfig?.active ?? false) && cart.hasPreSaleItem && !isCateringFlow;
134
+ const preSaleDates = resolvePreSaleDates(preSaleConfig, currentLocation.timezone);
135
+ const preSaleHoursOverride = getPreSaleHoursOverride(preSaleConfig, cart.hasPreSaleItem);
136
+ const schedule = (0, location_1.generateLocationFulfillmentSchedule)({
137
+ startDate: resolveStartDate(preSaleDates.startDate, cart.hasPreSaleItem),
138
+ prepTimeFrequency,
139
+ prepTimeCadence,
140
+ location: currentLocation,
141
+ fulfillmentPreference,
142
+ businessHoursOverrides,
143
+ gapInMinutes,
144
+ daysCount: isPreSaleEnabled
145
+ ? (0, date_fns_1.differenceInDays)(preSaleDates.endDate, preSaleDates.startDate) + 1
146
+ : !isAsapOrders && !isSameDayOrders
147
+ ? daysCount
148
+ : 1,
149
+ platform,
150
+ ...(!isPreSaleEnabled && {
151
+ weekDayPrepTimes,
152
+ }),
153
+ ...(preSaleHoursOverride && { preSaleHoursOverride }),
154
+ ...(isPreSaleEnabled && { endDate: preSaleDates.endDate }),
155
+ });
156
+ return {
157
+ schedule: filterSchedule(schedule),
158
+ isWeeklyPreSaleAvailable: false,
159
+ };
160
+ }
161
+ //# 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"}