@pisell/pisellos 2.1.38 → 2.2.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.
Files changed (135) hide show
  1. package/dist/core/index.d.ts +8 -1
  2. package/dist/core/index.js +116 -42
  3. package/dist/effects/index.d.ts +1 -0
  4. package/dist/effects/index.js +29 -6
  5. package/dist/modules/Account/index.js +2 -3
  6. package/dist/modules/BaseModule.d.ts +3 -0
  7. package/dist/modules/BaseModule.js +15 -0
  8. package/dist/modules/Customer/index.js +9 -10
  9. package/dist/modules/Customer/types.d.ts +2 -2
  10. package/dist/modules/Customer/types.js +2 -2
  11. package/dist/modules/Discount/index.js +1 -1
  12. package/dist/modules/Guests/index.js +9 -9
  13. package/dist/modules/Order/index.js +1 -1
  14. package/dist/modules/Payment/index.js +63 -73
  15. package/dist/modules/Payment/walletpass.js +4 -1
  16. package/dist/modules/Product/index.d.ts +1 -1
  17. package/dist/modules/Product/types.d.ts +19 -0
  18. package/dist/modules/ProductList/index.js +5 -14
  19. package/dist/modules/Resource/index.js +1 -1
  20. package/dist/modules/Rules/index.js +2 -3
  21. package/dist/modules/Schedule/types.d.ts +2 -0
  22. package/dist/plugins/request.d.ts +1 -0
  23. package/dist/server/index.d.ts +152 -0
  24. package/dist/server/index.js +946 -0
  25. package/dist/server/modules/index.d.ts +16 -0
  26. package/dist/server/modules/index.js +21 -0
  27. package/dist/server/modules/menu/index.d.ts +63 -0
  28. package/dist/server/modules/menu/index.js +476 -0
  29. package/dist/server/modules/menu/types.d.ts +68 -0
  30. package/dist/server/modules/menu/types.js +16 -0
  31. package/dist/server/modules/products/index.d.ts +141 -0
  32. package/dist/server/modules/products/index.js +768 -0
  33. package/dist/server/modules/products/types.d.ts +94 -0
  34. package/dist/server/modules/products/types.js +43 -0
  35. package/dist/server/modules/quotation/index.d.ts +47 -0
  36. package/dist/server/modules/quotation/index.js +367 -0
  37. package/dist/server/modules/quotation/types.d.ts +50 -0
  38. package/dist/server/modules/quotation/types.js +20 -0
  39. package/dist/server/modules/schedule/index.d.ts +62 -0
  40. package/dist/server/modules/schedule/index.js +431 -0
  41. package/dist/server/modules/schedule/types.d.ts +1 -0
  42. package/dist/server/modules/schedule/types.js +2 -0
  43. package/dist/server/modules/schedule/utils.d.ts +32 -0
  44. package/dist/server/modules/schedule/utils.js +747 -0
  45. package/dist/server/types.d.ts +64 -0
  46. package/dist/server/types.js +1 -0
  47. package/dist/server/utils/index.d.ts +5 -0
  48. package/dist/server/utils/index.js +6 -0
  49. package/dist/server/utils/product.d.ts +18 -0
  50. package/dist/server/utils/product.js +339 -0
  51. package/dist/server/utils/schedule.d.ts +14 -0
  52. package/dist/server/utils/schedule.js +108 -0
  53. package/dist/server/utils/time.d.ts +18 -0
  54. package/dist/server/utils/time.js +53 -0
  55. package/dist/solution/BookingByStep/index.d.ts +1 -17
  56. package/dist/solution/BookingByStep/index.js +23 -468
  57. package/dist/solution/BookingByStep/utils/capacity.d.ts +2 -7
  58. package/dist/solution/BookingByStep/utils/capacity.js +8 -24
  59. package/dist/solution/BookingTicket/index.d.ts +12 -0
  60. package/dist/solution/BookingTicket/index.js +122 -79
  61. package/dist/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  62. package/dist/solution/BookingTicket/utils/scan/index.js +25 -16
  63. package/dist/solution/BuyTickets/index.js +7 -8
  64. package/dist/solution/Checkout/index.d.ts +1 -46
  65. package/dist/solution/Checkout/index.js +530 -850
  66. package/dist/solution/ShopDiscount/index.js +9 -10
  67. package/dist/types/index.d.ts +27 -0
  68. package/lib/core/index.d.ts +8 -1
  69. package/lib/core/index.js +48 -1
  70. package/lib/effects/index.d.ts +1 -0
  71. package/lib/effects/index.js +13 -0
  72. package/lib/modules/Account/index.js +2 -3
  73. package/lib/modules/BaseModule.d.ts +3 -0
  74. package/lib/modules/BaseModule.js +9 -0
  75. package/lib/modules/Customer/index.js +9 -10
  76. package/lib/modules/Customer/types.d.ts +2 -2
  77. package/lib/modules/Customer/types.js +2 -2
  78. package/lib/modules/Discount/index.js +1 -1
  79. package/lib/modules/Guests/index.js +9 -9
  80. package/lib/modules/Order/index.js +1 -1
  81. package/lib/modules/Payment/index.js +56 -43
  82. package/lib/modules/Payment/walletpass.js +3 -1
  83. package/lib/modules/Product/index.d.ts +1 -1
  84. package/lib/modules/Product/types.d.ts +19 -0
  85. package/lib/modules/ProductList/index.js +4 -13
  86. package/lib/modules/Resource/index.js +1 -1
  87. package/lib/modules/Rules/index.js +2 -3
  88. package/lib/modules/Schedule/types.d.ts +2 -0
  89. package/lib/plugins/request.d.ts +1 -0
  90. package/lib/server/index.d.ts +152 -0
  91. package/lib/server/index.js +555 -0
  92. package/lib/server/modules/index.d.ts +16 -0
  93. package/lib/server/modules/index.js +47 -0
  94. package/lib/server/modules/menu/index.d.ts +63 -0
  95. package/lib/server/modules/menu/index.js +234 -0
  96. package/lib/server/modules/menu/types.d.ts +68 -0
  97. package/lib/server/modules/menu/types.js +33 -0
  98. package/lib/server/modules/products/index.d.ts +141 -0
  99. package/lib/server/modules/products/index.js +434 -0
  100. package/lib/server/modules/products/types.d.ts +94 -0
  101. package/lib/server/modules/products/types.js +35 -0
  102. package/lib/server/modules/quotation/index.d.ts +47 -0
  103. package/lib/server/modules/quotation/index.js +177 -0
  104. package/lib/server/modules/quotation/types.d.ts +50 -0
  105. package/lib/server/modules/quotation/types.js +33 -0
  106. package/lib/server/modules/schedule/index.d.ts +62 -0
  107. package/lib/server/modules/schedule/index.js +231 -0
  108. package/lib/server/modules/schedule/types.d.ts +1 -0
  109. package/lib/server/modules/schedule/types.js +23 -0
  110. package/lib/server/modules/schedule/utils.d.ts +32 -0
  111. package/lib/server/modules/schedule/utils.js +451 -0
  112. package/lib/server/types.d.ts +64 -0
  113. package/lib/server/types.js +17 -0
  114. package/lib/server/utils/index.d.ts +5 -0
  115. package/lib/server/utils/index.js +25 -0
  116. package/lib/server/utils/product.d.ts +18 -0
  117. package/lib/server/utils/product.js +262 -0
  118. package/lib/server/utils/schedule.d.ts +14 -0
  119. package/lib/server/utils/schedule.js +88 -0
  120. package/lib/server/utils/time.d.ts +18 -0
  121. package/lib/server/utils/time.js +70 -0
  122. package/lib/solution/BookingByStep/index.d.ts +1 -17
  123. package/lib/solution/BookingByStep/index.js +40 -312
  124. package/lib/solution/BookingByStep/utils/capacity.d.ts +2 -7
  125. package/lib/solution/BookingByStep/utils/capacity.js +8 -21
  126. package/lib/solution/BookingTicket/index.d.ts +12 -0
  127. package/lib/solution/BookingTicket/index.js +25 -6
  128. package/lib/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  129. package/lib/solution/BookingTicket/utils/scan/index.js +7 -1
  130. package/lib/solution/BuyTickets/index.js +7 -8
  131. package/lib/solution/Checkout/index.d.ts +1 -46
  132. package/lib/solution/Checkout/index.js +92 -289
  133. package/lib/solution/ShopDiscount/index.js +10 -11
  134. package/lib/types/index.d.ts +27 -0
  135. package/package.json +2 -2
@@ -0,0 +1,451 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/server/modules/schedule/utils.ts
30
+ var utils_exports = {};
31
+ __export(utils_exports, {
32
+ getDateIsInSchedule: () => getDateIsInSchedule,
33
+ getScheduleStartEndTimePoints: () => getScheduleStartEndTimePoints
34
+ });
35
+ module.exports = __toCommonJS(utils_exports);
36
+ var import_dayjs = __toESM(require("dayjs"));
37
+ var getDateIsInSchedule = (dateTime, scheduleList) => {
38
+ if (!dateTime || !scheduleList || scheduleList.length === 0) {
39
+ return false;
40
+ }
41
+ const targetDate = (0, import_dayjs.default)(dateTime);
42
+ if (!targetDate.isValid()) {
43
+ return false;
44
+ }
45
+ for (const schedule of scheduleList) {
46
+ if (isTimeInScheduleItem(dateTime, schedule)) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ };
52
+ var isTimeInScheduleItem = (dateTime, schedule) => {
53
+ const targetDate = (0, import_dayjs.default)(dateTime);
54
+ const targetDateString = dateTime.split(" ")[0];
55
+ const targetTimeString = dateTime.split(" ")[1] || "00:00:00";
56
+ switch (schedule.type) {
57
+ case "standard":
58
+ return isInStandardSchedule(targetDate, targetDateString, targetTimeString, schedule);
59
+ case "time-slots":
60
+ return isInTimeSlotsSchedule(targetDate, targetDateString, targetTimeString, schedule);
61
+ case "designation":
62
+ return isInDesignationSchedule(targetDate, targetDateString, targetTimeString, schedule);
63
+ default:
64
+ return false;
65
+ }
66
+ };
67
+ var isInStandardSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
68
+ if (!schedule.start_time || !schedule.end_time) {
69
+ return false;
70
+ }
71
+ const startDate = (0, import_dayjs.default)(schedule.start_time);
72
+ const endDate = (0, import_dayjs.default)(schedule.end_time);
73
+ const isInBasicRange = targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate);
74
+ if (schedule.repeat_type === "none") {
75
+ return isInBasicRange;
76
+ }
77
+ return isInRepeatingSchedule(targetDate, targetDateString, targetTimeString, schedule, startDate, endDate);
78
+ };
79
+ var isInTimeSlotsSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
80
+ if (!schedule.start_time) {
81
+ return false;
82
+ }
83
+ const scheduleDate = schedule.start_time.split(" ")[0];
84
+ if (targetDateString !== scheduleDate) {
85
+ return false;
86
+ }
87
+ for (const timeSlot of schedule.time_slot) {
88
+ const slotStart = `${scheduleDate} ${timeSlot.start_time}:00`;
89
+ const slotEnd = `${scheduleDate} ${timeSlot.end_time}:00`;
90
+ const slotStartDate = (0, import_dayjs.default)(slotStart);
91
+ const slotEndDate = (0, import_dayjs.default)(slotEnd);
92
+ if (targetDate.isSameOrAfter(slotStartDate) && targetDate.isSameOrBefore(slotEndDate)) {
93
+ return true;
94
+ }
95
+ }
96
+ return false;
97
+ };
98
+ var isInDesignationSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
99
+ if (!schedule.designation) {
100
+ return false;
101
+ }
102
+ for (const designation of schedule.designation) {
103
+ const startDateTime = `${designation.start_date} ${designation.start_time}:00`;
104
+ const endDateTime = `${designation.end_date} ${designation.end_time}:00`;
105
+ const startDate = (0, import_dayjs.default)(startDateTime);
106
+ const endDate = (0, import_dayjs.default)(endDateTime);
107
+ if (targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate)) {
108
+ return true;
109
+ }
110
+ }
111
+ return false;
112
+ };
113
+ var isInRepeatingSchedule = (targetDate, targetDateString, targetTimeString, schedule, startDate, endDate) => {
114
+ if (!schedule.repeat_rule) {
115
+ return false;
116
+ }
117
+ const { repeat_rule, repeat_type } = schedule;
118
+ const targetDateOnly = (0, import_dayjs.default)(targetDateString);
119
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
120
+ for (const includedDate of repeat_rule.included_date) {
121
+ const includeStartDate = (0, import_dayjs.default)(includedDate.start);
122
+ const includeEndDate = (0, import_dayjs.default)(includedDate.end);
123
+ if (targetDateOnly.isSameOrAfter(includeStartDate, "day") && targetDateOnly.isSameOrBefore(includeEndDate, "day")) {
124
+ return true;
125
+ }
126
+ }
127
+ }
128
+ for (const excludedDate of repeat_rule.excluded_date) {
129
+ const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
130
+ const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
131
+ if (targetDateOnly.isSameOrAfter(excludeStartDate, "day") && targetDateOnly.isSameOrBefore(excludeEndDate, "day")) {
132
+ return false;
133
+ }
134
+ }
135
+ if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
136
+ const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
137
+ if (targetDate.isAfter(ruleEndDate)) {
138
+ return false;
139
+ }
140
+ }
141
+ switch (repeat_type) {
142
+ case "daily":
143
+ return isInDailyRepeat(targetDate, startDate, endDate, repeat_rule);
144
+ case "weekly":
145
+ return isInWeeklyRepeat(targetDate, startDate, endDate, repeat_rule);
146
+ default:
147
+ return false;
148
+ }
149
+ };
150
+ var isInDailyRepeat = (targetDate, startDate, endDate, repeatRule) => {
151
+ const daysDiff = targetDate.diff(startDate, "day");
152
+ if (daysDiff < 0) {
153
+ return false;
154
+ }
155
+ if (daysDiff % repeatRule.frequency !== 0) {
156
+ return false;
157
+ }
158
+ const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
159
+ const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
160
+ const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
161
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
162
+ };
163
+ var isInWeeklyRepeat = (targetDate, startDate, endDate, repeatRule) => {
164
+ const targetDayOfWeek = targetDate.day();
165
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
166
+ return false;
167
+ }
168
+ const weeksDiff = targetDate.diff(startDate, "week");
169
+ if (weeksDiff < 0) {
170
+ return false;
171
+ }
172
+ if (weeksDiff % repeatRule.frequency !== 0) {
173
+ return false;
174
+ }
175
+ const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
176
+ const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
177
+ const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
178
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
179
+ };
180
+ var getScheduleStartEndTimePoints = (date, scheduleList) => {
181
+ if (!date || !scheduleList || scheduleList.length === 0) {
182
+ return [];
183
+ }
184
+ const targetDate = (0, import_dayjs.default)(date);
185
+ if (!targetDate.isValid()) {
186
+ return [];
187
+ }
188
+ const timeSlots = [];
189
+ for (const schedule of scheduleList) {
190
+ const slots = extractTimeSlotsFromSchedule(date, schedule);
191
+ timeSlots.push(...slots);
192
+ }
193
+ return mergeAndSortTimeSlots(timeSlots);
194
+ };
195
+ var extractTimeSlotsFromSchedule = (date, schedule) => {
196
+ switch (schedule.type) {
197
+ case "standard":
198
+ return extractStandardScheduleTimeSlots(date, schedule);
199
+ case "time-slots":
200
+ return extractTimeSlotsScheduleTimeSlots(date, schedule);
201
+ case "designation":
202
+ return extractDesignationScheduleTimeSlots(date, schedule);
203
+ default:
204
+ return [];
205
+ }
206
+ };
207
+ var extractStandardScheduleTimeSlots = (date, schedule) => {
208
+ if (!schedule.start_time || !schedule.end_time) {
209
+ return [];
210
+ }
211
+ const targetDate = (0, import_dayjs.default)(date);
212
+ const startDate = (0, import_dayjs.default)(schedule.start_time);
213
+ const endDate = (0, import_dayjs.default)(schedule.end_time);
214
+ if (!isDateInStandardSchedule(targetDate, schedule, startDate, endDate)) {
215
+ return [];
216
+ }
217
+ const startTime = startDate.format("HH:mm");
218
+ const endTime = endDate.format("HH:mm");
219
+ const startAt = (0, import_dayjs.default)(`${date} ${startTime}:00`);
220
+ const endAt = (0, import_dayjs.default)(`${date} ${endTime}:00`);
221
+ return [{
222
+ start_time: startTime,
223
+ end_time: endTime,
224
+ start_at: startAt,
225
+ end_at: endAt
226
+ }];
227
+ };
228
+ var extractTimeSlotsScheduleTimeSlots = (date, schedule) => {
229
+ if (!schedule.start_time || !schedule.time_slot || schedule.time_slot.length === 0) {
230
+ return [];
231
+ }
232
+ const targetDate = (0, import_dayjs.default)(date);
233
+ const scheduleStartDate = (0, import_dayjs.default)(schedule.start_time.split(" ")[0]);
234
+ if (!isDateInTimeSlotsSchedule(targetDate, schedule, scheduleStartDate)) {
235
+ return [];
236
+ }
237
+ const slots = [];
238
+ for (const timeSlot of schedule.time_slot) {
239
+ if (!timeSlot.start_time || !timeSlot.end_time) {
240
+ continue;
241
+ }
242
+ const startAt = (0, import_dayjs.default)(`${date} ${timeSlot.start_time}:00`);
243
+ const endAt = (0, import_dayjs.default)(`${date} ${timeSlot.end_time}:00`);
244
+ slots.push({
245
+ start_time: timeSlot.start_time,
246
+ end_time: timeSlot.end_time,
247
+ start_at: startAt,
248
+ end_at: endAt
249
+ });
250
+ }
251
+ return slots;
252
+ };
253
+ var isDateInTimeSlotsSchedule = (targetDate, schedule, scheduleStartDate) => {
254
+ if (schedule.repeat_type === "none") {
255
+ return targetDate.isSame(scheduleStartDate, "day");
256
+ }
257
+ if (!schedule.repeat_rule) {
258
+ return false;
259
+ }
260
+ const { repeat_rule, repeat_type } = schedule;
261
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
262
+ for (const includedDate of repeat_rule.included_date) {
263
+ const includeStartDate = (0, import_dayjs.default)(includedDate.start);
264
+ const includeEndDate = (0, import_dayjs.default)(includedDate.end);
265
+ if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
266
+ return true;
267
+ }
268
+ }
269
+ }
270
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
271
+ for (const excludedDate of repeat_rule.excluded_date) {
272
+ const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
273
+ const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
274
+ if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
275
+ return false;
276
+ }
277
+ }
278
+ }
279
+ if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
280
+ const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
281
+ if (targetDate.isAfter(ruleEndDate, "day")) {
282
+ return false;
283
+ }
284
+ }
285
+ if (targetDate.isBefore(scheduleStartDate, "day")) {
286
+ return false;
287
+ }
288
+ switch (repeat_type) {
289
+ case "daily":
290
+ return isDateInDailyRepeat(targetDate, scheduleStartDate, repeat_rule);
291
+ case "weekly":
292
+ return isDateInWeeklyRepeat(targetDate, scheduleStartDate, repeat_rule);
293
+ default:
294
+ return false;
295
+ }
296
+ };
297
+ var extractDesignationScheduleTimeSlots = (date, schedule) => {
298
+ if (!schedule.designation) {
299
+ return [];
300
+ }
301
+ const targetDate = (0, import_dayjs.default)(date);
302
+ const designations = Array.isArray(schedule.designation) ? schedule.designation : [schedule.designation];
303
+ const slots = [];
304
+ for (const designation of designations) {
305
+ const startDate = (0, import_dayjs.default)(designation.start_date);
306
+ const endDate = (0, import_dayjs.default)(designation.end_date);
307
+ if (isDateInDesignationSchedule(targetDate, schedule, designation, startDate, endDate)) {
308
+ const startAt = (0, import_dayjs.default)(`${date} ${designation.start_time}:00`);
309
+ const endAt = (0, import_dayjs.default)(`${date} ${designation.end_time}:00`);
310
+ slots.push({
311
+ start_time: designation.start_time,
312
+ end_time: designation.end_time,
313
+ start_at: startAt,
314
+ end_at: endAt
315
+ });
316
+ }
317
+ }
318
+ return slots;
319
+ };
320
+ var isDateInDesignationSchedule = (targetDate, schedule, designation, startDate, endDate) => {
321
+ if (schedule.repeat_type === "none") {
322
+ return targetDate.isSameOrAfter(startDate, "day") && targetDate.isSameOrBefore(endDate, "day");
323
+ }
324
+ if (!schedule.repeat_rule) {
325
+ return false;
326
+ }
327
+ const { repeat_rule, repeat_type } = schedule;
328
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
329
+ for (const includedDate of repeat_rule.included_date) {
330
+ const includeStartDate = (0, import_dayjs.default)(includedDate.start);
331
+ const includeEndDate = (0, import_dayjs.default)(includedDate.end);
332
+ if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
333
+ return true;
334
+ }
335
+ }
336
+ }
337
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
338
+ for (const excludedDate of repeat_rule.excluded_date) {
339
+ const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
340
+ const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
341
+ if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
342
+ return false;
343
+ }
344
+ }
345
+ }
346
+ if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
347
+ const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
348
+ if (targetDate.isAfter(ruleEndDate, "day")) {
349
+ return false;
350
+ }
351
+ }
352
+ if (!targetDate.isSameOrAfter(startDate, "day") || !targetDate.isSameOrBefore(endDate, "day")) {
353
+ if (targetDate.isBefore(startDate, "day")) {
354
+ return false;
355
+ }
356
+ }
357
+ switch (repeat_type) {
358
+ case "daily":
359
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
360
+ case "weekly":
361
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
362
+ default:
363
+ return false;
364
+ }
365
+ };
366
+ var isDateInStandardSchedule = (targetDate, schedule, startDate, endDate) => {
367
+ const targetDateString = targetDate.format("YYYY-MM-DD");
368
+ if (schedule.repeat_type === "none") {
369
+ const scheduleStartDate = startDate.format("YYYY-MM-DD");
370
+ const scheduleEndDate = endDate.format("YYYY-MM-DD");
371
+ return targetDate.isSameOrAfter(scheduleStartDate, "day") && targetDate.isSameOrBefore(scheduleEndDate, "day");
372
+ }
373
+ if (!schedule.repeat_rule) {
374
+ return false;
375
+ }
376
+ const { repeat_rule, repeat_type } = schedule;
377
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
378
+ for (const includedDate of repeat_rule.included_date) {
379
+ const includeStartDate = (0, import_dayjs.default)(includedDate.start);
380
+ const includeEndDate = (0, import_dayjs.default)(includedDate.end);
381
+ if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
382
+ return true;
383
+ }
384
+ }
385
+ }
386
+ for (const excludedDate of repeat_rule.excluded_date) {
387
+ const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
388
+ const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
389
+ if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
390
+ return false;
391
+ }
392
+ }
393
+ if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
394
+ const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
395
+ if (targetDate.isAfter(ruleEndDate, "day")) {
396
+ return false;
397
+ }
398
+ }
399
+ if (targetDate.isBefore(startDate, "day")) {
400
+ return false;
401
+ }
402
+ switch (repeat_type) {
403
+ case "daily":
404
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
405
+ case "weekly":
406
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
407
+ default:
408
+ return false;
409
+ }
410
+ };
411
+ var isDateInDailyRepeat = (targetDate, startDate, repeatRule) => {
412
+ const daysDiff = targetDate.diff(startDate, "day");
413
+ if (daysDiff < 0) {
414
+ return false;
415
+ }
416
+ return daysDiff % repeatRule.frequency === 0;
417
+ };
418
+ var isDateInWeeklyRepeat = (targetDate, startDate, repeatRule) => {
419
+ const targetDayOfWeek = targetDate.day();
420
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
421
+ return false;
422
+ }
423
+ const weeksDiff = targetDate.diff(startDate, "week");
424
+ if (weeksDiff < 0) {
425
+ return false;
426
+ }
427
+ return weeksDiff % repeatRule.frequency === 0;
428
+ };
429
+ var mergeAndSortTimeSlots = (slots) => {
430
+ if (slots.length === 0) {
431
+ return [];
432
+ }
433
+ const sorted = [...slots].sort((a, b) => {
434
+ return a.start_at.valueOf() - b.start_at.valueOf();
435
+ });
436
+ const unique = [];
437
+ const seenKeys = /* @__PURE__ */ new Set();
438
+ for (const slot of sorted) {
439
+ const key = `${slot.start_time}-${slot.end_time}`;
440
+ if (!seenKeys.has(key)) {
441
+ seenKeys.add(key);
442
+ unique.push(slot);
443
+ }
444
+ }
445
+ return unique;
446
+ };
447
+ // Annotate the CommonJS export names for ESM import in node:
448
+ 0 && (module.exports = {
449
+ getDateIsInSchedule,
450
+ getScheduleStartEndTimePoints
451
+ });
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Server 类型定义
3
+ */
4
+ export type CacheType = 'memory' | 'storage' | 'indexDB';
5
+ export interface CacheProps {
6
+ key?: string;
7
+ type?: CacheType;
8
+ updateCache?: boolean;
9
+ cacheUpdateChange?: (data: any) => void;
10
+ }
11
+ export interface RequestSetting {
12
+ abort?: boolean;
13
+ headers?: any;
14
+ cache?: CacheProps;
15
+ signal?: any;
16
+ token?: string;
17
+ osServer?: boolean;
18
+ [key: string]: any;
19
+ }
20
+ /**
21
+ * 路由处理函数类型
22
+ */
23
+ export type RouteHandler = (params: {
24
+ url: string;
25
+ method: 'get' | 'post' | 'remove' | 'put';
26
+ data?: any;
27
+ config?: RequestSetting;
28
+ }) => Promise<any> | any;
29
+ /**
30
+ * HTTP 方法类型
31
+ */
32
+ export type HttpMethod = 'get' | 'post' | 'remove' | 'put';
33
+ /**
34
+ * 路由定义类型
35
+ */
36
+ export type RouteDefinition = {
37
+ method: HttpMethod;
38
+ path: string;
39
+ handler: RouteHandler;
40
+ };
41
+ /**
42
+ * Router 对象类型
43
+ */
44
+ export interface Router {
45
+ get: Record<string, RouteHandler>;
46
+ post: Record<string, RouteHandler>;
47
+ put: Record<string, RouteHandler>;
48
+ remove: Record<string, RouteHandler>;
49
+ }
50
+ /**
51
+ * 模块注册配置(内部使用)
52
+ */
53
+ export interface ModuleRegistryConfig {
54
+ /** 模块名称 */
55
+ name: string;
56
+ /** 模块类 */
57
+ moduleClass: any;
58
+ /** 模块完整名称(用于注册到 Core) */
59
+ moduleName: string;
60
+ /** 模块版本 */
61
+ version: string;
62
+ /** 默认 store 结构 */
63
+ defaultStore: Record<string, any>;
64
+ }
@@ -0,0 +1,17 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+
15
+ // src/server/types.ts
16
+ var types_exports = {};
17
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Server 工具函数集合
3
+ */
4
+ export * from './time';
5
+ export * from './schedule';
@@ -0,0 +1,25 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/server/utils/index.ts
17
+ var utils_exports = {};
18
+ module.exports = __toCommonJS(utils_exports);
19
+ __reExport(utils_exports, require("./time"), module.exports);
20
+ __reExport(utils_exports, require("./schedule"), module.exports);
21
+ // Annotate the CommonJS export names for ESM import in node:
22
+ 0 && (module.exports = {
23
+ ...require("./time"),
24
+ ...require("./schedule")
25
+ });
@@ -0,0 +1,18 @@
1
+ import { ProductData } from '../../modules/Product/types';
2
+ import { FormattedProductData, LoadProductsPriceData, ProductFormatterContext } from '../modules/products/types';
3
+ /**
4
+ * 将价格数据应用到商品列表(高性能版本)
5
+ * 通过预构建 Map 索引,将时间复杂度从 O(n×m) 优化到 O(n+m)
6
+ * @param products 商品列表
7
+ * @param priceData 价格数据
8
+ * @returns 应用价格后的商品列表
9
+ */
10
+ export declare function applyPriceDataToProducts(products: ProductData[], priceData: LoadProductsPriceData[]): ProductData[];
11
+ export declare const getIsSessionProduct: (product: ProductData) => boolean;
12
+ /**
13
+ * 将详情值数据应用到商品列表
14
+ * @param products 商品列表
15
+ * @param context 格式化器上下文
16
+ * @returns 应用详情值后的商品列表
17
+ */
18
+ export declare function applyDetailValueToProducts(products: ProductData[], context: ProductFormatterContext): FormattedProductData[];