@pisell/pisellos 0.10.14 → 0.10.16

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 (301) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  3. package/dist/model/strategy/strategy-example.js +5 -19
  4. package/dist/modules/Cart/index.js +0 -3
  5. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  6. package/dist/modules/Date/index.js +1 -5
  7. package/dist/modules/Discount/index.js +2 -4
  8. package/dist/modules/OpenData/index.js +0 -2
  9. package/dist/modules/Order/index.d.ts +1 -1
  10. package/dist/modules/Order/index.js +75 -91
  11. package/dist/modules/Order/types.d.ts +5 -1
  12. package/dist/modules/Order/utils/virtualSettlement.d.ts +8 -1
  13. package/dist/modules/Order/utils/virtualSettlement.js +15 -2
  14. package/dist/modules/Order/utils.js +7 -1
  15. package/dist/modules/Payment/index.js +97 -162
  16. package/dist/modules/Product/types.d.ts +2 -0
  17. package/dist/modules/Rules/index.js +1 -4
  18. package/dist/modules/Schedule/index.js +0 -1
  19. package/dist/modules/Schedule/utils.js +0 -1
  20. package/dist/modules/Step/index.js +0 -1
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.js +97 -129
  24. package/dist/server/modules/menu/index.js +32 -41
  25. package/dist/server/modules/order/index.js +2 -4
  26. package/dist/server/modules/products/index.js +24 -42
  27. package/dist/server/modules/quotation/index.js +29 -38
  28. package/dist/server/modules/resource/index.js +3 -4
  29. package/dist/server/modules/schedule/index.js +27 -35
  30. package/dist/server/utils/product.js +0 -1
  31. package/dist/solution/BaseSales/index.js +107 -76
  32. package/dist/solution/BaseSales/types.d.ts +2 -0
  33. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  34. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  37. package/dist/solution/BaseSales/utils.js +6 -3
  38. package/dist/solution/BookingByStep/index.d.ts +2 -2
  39. package/dist/solution/BookingByStep/index.js +7 -59
  40. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  41. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  42. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  43. package/dist/solution/BookingTicket/index.js +8 -4
  44. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  45. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  46. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  47. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  48. package/dist/solution/BuyTickets/index.js +9 -12
  49. package/dist/solution/Checkout/index.js +177 -252
  50. package/dist/solution/Checkout/utils/index.js +4 -16
  51. package/dist/solution/RegisterAndLogin/index.js +30 -76
  52. package/dist/solution/ScanOrder/index.js +50 -60
  53. package/dist/solution/ScanOrder/types.d.ts +2 -0
  54. package/dist/solution/ScanOrder/utils.js +6 -3
  55. package/dist/solution/ShopDiscount/index.js +2 -7
  56. package/dist/solution/VenueBooking/index.js +45 -55
  57. package/dist/utils/task.js +15 -18
  58. package/dist/utils/watch.js +0 -1
  59. package/lib/apis/picoding.js +2 -0
  60. package/lib/core/index.js +131 -131
  61. package/lib/effects/index.js +46 -57
  62. package/lib/index.js +82 -49
  63. package/lib/model/index.js +14 -21
  64. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  66. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  67. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  68. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  69. package/lib/model/strategy/adapter/index.js +100 -64
  70. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  71. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  72. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  73. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  74. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  75. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  76. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  77. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  78. package/lib/model/strategy/adapter/promotion/index.js +43 -48
  79. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  80. package/lib/model/strategy/adapter/type.js +4 -16
  81. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  82. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  83. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  84. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  85. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  86. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  87. package/lib/model/strategy/engine.js +270 -168
  88. package/lib/model/strategy/index.js +49 -34
  89. package/lib/model/strategy/strategy-example.js +243 -239
  90. package/lib/model/strategy/type.js +100 -40
  91. package/lib/modules/Account/index.js +39 -53
  92. package/lib/modules/Account/types.js +20 -33
  93. package/lib/modules/AccountList/index.js +116 -154
  94. package/lib/modules/AccountList/types.js +30 -31
  95. package/lib/modules/AccountList/utils.js +18 -30
  96. package/lib/modules/BaseModule.js +23 -42
  97. package/lib/modules/BookingContext/index.js +158 -136
  98. package/lib/modules/BookingContext/types.js +46 -32
  99. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  100. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  101. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  102. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  103. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  104. package/lib/modules/BookingContext/utils/index.js +124 -41
  105. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  106. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  107. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  108. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  109. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  110. package/lib/modules/BookingContext/utils/resources.js +209 -167
  111. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  112. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  113. package/lib/modules/Cart/index.js +170 -124
  114. package/lib/modules/Cart/types.js +46 -51
  115. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  116. package/lib/modules/Cart/utils/cartDate.js +56 -61
  117. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  118. package/lib/modules/Cart/utils/cartNote.js +27 -32
  119. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  120. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  121. package/lib/modules/Cart/utils/cartResource.js +70 -78
  122. package/lib/modules/Cart/utils/changePrice.js +22 -50
  123. package/lib/modules/Cart/utils/index.js +106 -48
  124. package/lib/modules/Customer/constants.js +13 -34
  125. package/lib/modules/Customer/index.js +235 -172
  126. package/lib/modules/Customer/types.js +38 -35
  127. package/lib/modules/Date/index.js +116 -115
  128. package/lib/modules/Date/types.js +16 -28
  129. package/lib/modules/Date/utils.js +174 -123
  130. package/lib/modules/Discount/index.js +133 -143
  131. package/lib/modules/Discount/types.js +9 -31
  132. package/lib/modules/Guests/index.js +30 -56
  133. package/lib/modules/Guests/types.js +23 -33
  134. package/lib/modules/Holder/index.js +209 -189
  135. package/lib/modules/Holder/types.js +4 -16
  136. package/lib/modules/Holder/utils.js +20 -49
  137. package/lib/modules/OpenData/index.js +70 -76
  138. package/lib/modules/OpenData/types.js +4 -16
  139. package/lib/modules/OpenData/utils.js +44 -78
  140. package/lib/modules/Order/index.d.ts +1 -1
  141. package/lib/modules/Order/index.js +1810 -2238
  142. package/lib/modules/Order/payment-utils.js +77 -120
  143. package/lib/modules/Order/types.d.ts +5 -1
  144. package/lib/modules/Order/types.js +87 -35
  145. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  146. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  147. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  148. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  149. package/lib/modules/Order/utils/virtualSettlement.d.ts +8 -1
  150. package/lib/modules/Order/utils/virtualSettlement.js +126 -164
  151. package/lib/modules/Order/utils.js +834 -668
  152. package/lib/modules/Payment/cash.js +20 -33
  153. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  154. package/lib/modules/Payment/eftpos.js +16 -30
  155. package/lib/modules/Payment/index.js +532 -399
  156. package/lib/modules/Payment/mx51.js +1 -0
  157. package/lib/modules/Payment/types.js +230 -108
  158. package/lib/modules/Payment/utils.js +52 -51
  159. package/lib/modules/Payment/walletpass.js +485 -660
  160. package/lib/modules/Product/index.js +51 -46
  161. package/lib/modules/Product/types.d.ts +2 -0
  162. package/lib/modules/Product/types.js +4 -16
  163. package/lib/modules/Product/utils.js +32 -33
  164. package/lib/modules/ProductList/index.js +138 -161
  165. package/lib/modules/ProductList/types.js +9 -31
  166. package/lib/modules/Quotation/index.js +66 -100
  167. package/lib/modules/Quotation/types.js +4 -16
  168. package/lib/modules/Resource/index.js +27 -59
  169. package/lib/modules/Resource/types.js +22 -32
  170. package/lib/modules/Resource/utils.js +30 -38
  171. package/lib/modules/ResourcePlanner/index.js +25 -23
  172. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  173. package/lib/modules/ResourcePlanner/planner.js +591 -772
  174. package/lib/modules/ResourcePlanner/types.js +10 -29
  175. package/lib/modules/Rules/index.js +1218 -959
  176. package/lib/modules/Rules/types.js +17 -40
  177. package/lib/modules/SalesSummary/index.js +78 -89
  178. package/lib/modules/SalesSummary/types.js +4 -16
  179. package/lib/modules/SalesSummary/utils.js +359 -442
  180. package/lib/modules/ScanOrderLogger/index.js +59 -79
  181. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  182. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  183. package/lib/modules/ScanOrderLogger/types.js +4 -16
  184. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  185. package/lib/modules/Schedule/index.js +100 -114
  186. package/lib/modules/Schedule/type.js +4 -16
  187. package/lib/modules/Schedule/types.js +4 -16
  188. package/lib/modules/Schedule/utils.js +433 -291
  189. package/lib/modules/Step/index.js +40 -52
  190. package/lib/modules/Step/tyeps.js +4 -16
  191. package/lib/modules/Summary/index.js +66 -71
  192. package/lib/modules/Summary/types.js +4 -16
  193. package/lib/modules/Summary/utils.js +773 -418
  194. package/lib/modules/SurchargeList/index.js +46 -60
  195. package/lib/modules/SurchargeList/types.js +4 -16
  196. package/lib/modules/index.js +245 -63
  197. package/lib/plugins/app.js +4 -16
  198. package/lib/plugins/index.js +36 -25
  199. package/lib/plugins/request.js +137 -126
  200. package/lib/plugins/shopStore.js +4 -16
  201. package/lib/plugins/user.js +4 -16
  202. package/lib/plugins/window.js +171 -179
  203. package/lib/server/index.js +3027 -2655
  204. package/lib/server/modules/floor-plan/index.js +102 -123
  205. package/lib/server/modules/floor-plan/types.js +15 -30
  206. package/lib/server/modules/index.js +106 -68
  207. package/lib/server/modules/menu/index.js +146 -122
  208. package/lib/server/modules/menu/types.js +18 -31
  209. package/lib/server/modules/order/index.js +758 -956
  210. package/lib/server/modules/order/types.js +122 -33
  211. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  212. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  213. package/lib/server/modules/payment/index.js +59 -83
  214. package/lib/server/modules/payment/types.js +4 -16
  215. package/lib/server/modules/products/index.js +575 -459
  216. package/lib/server/modules/products/types.js +44 -34
  217. package/lib/server/modules/quotation/index.js +137 -172
  218. package/lib/server/modules/quotation/types.js +21 -31
  219. package/lib/server/modules/resource/index.js +213 -184
  220. package/lib/server/modules/resource/types.js +42 -33
  221. package/lib/server/modules/schedule/index.js +135 -123
  222. package/lib/server/modules/schedule/types.js +14 -21
  223. package/lib/server/modules/schedule/utils.js +334 -163
  224. package/lib/server/types.js +4 -16
  225. package/lib/server/utils/index.js +25 -23
  226. package/lib/server/utils/product.js +196 -139
  227. package/lib/server/utils/schedule.js +34 -41
  228. package/lib/server/utils/small-ticket.js +479 -456
  229. package/lib/server/utils/time.js +40 -49
  230. package/lib/solution/BaseSales/index.js +1276 -1485
  231. package/lib/solution/BaseSales/types.d.ts +2 -0
  232. package/lib/solution/BaseSales/types.js +42 -38
  233. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  234. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  235. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  236. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  237. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  238. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  239. package/lib/solution/BaseSales/utils.js +161 -143
  240. package/lib/solution/BookingByStep/index.d.ts +2 -2
  241. package/lib/solution/BookingByStep/index.js +1527 -1340
  242. package/lib/solution/BookingByStep/types.js +40 -99
  243. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  244. package/lib/solution/BookingByStep/utils/products.js +42 -52
  245. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  246. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  247. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  248. package/lib/solution/BookingTicket/index.js +598 -514
  249. package/lib/solution/BookingTicket/types.js +99 -77
  250. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  251. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  252. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  253. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  254. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  255. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  256. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  257. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  258. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  259. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  260. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  261. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  262. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  263. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  264. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  265. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  266. package/lib/solution/BuyTickets/index.js +67 -70
  267. package/lib/solution/BuyTickets/types.js +22 -38
  268. package/lib/solution/Checkout/index.js +1451 -1158
  269. package/lib/solution/Checkout/types.js +91 -61
  270. package/lib/solution/Checkout/utils/index.js +228 -156
  271. package/lib/solution/PlaceOrder/index.js +55 -0
  272. package/lib/solution/RegisterAndLogin/config.js +493 -460
  273. package/lib/solution/RegisterAndLogin/index.js +633 -630
  274. package/lib/solution/RegisterAndLogin/types.js +189 -76
  275. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  276. package/lib/solution/Sales/index.js +328 -324
  277. package/lib/solution/Sales/types.js +27 -33
  278. package/lib/solution/ScanOrder/index.js +822 -852
  279. package/lib/solution/ScanOrder/types.d.ts +2 -0
  280. package/lib/solution/ScanOrder/types.js +33 -34
  281. package/lib/solution/ScanOrder/utils.js +412 -374
  282. package/lib/solution/ShopDiscount/index.js +226 -232
  283. package/lib/solution/ShopDiscount/types.js +15 -37
  284. package/lib/solution/ShopDiscount/utils.js +300 -172
  285. package/lib/solution/UnifiedBookingSales/index.js +1052 -1213
  286. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  287. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  288. package/lib/solution/VenueBooking/index.js +811 -879
  289. package/lib/solution/VenueBooking/types.js +19 -39
  290. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  291. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  292. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  293. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  294. package/lib/solution/VenueBooking/utils.js +130 -67
  295. package/lib/solution/index.js +124 -41
  296. package/lib/store/createStore.js +32 -29
  297. package/lib/types/index.js +4 -16
  298. package/lib/utils/payment-number.js +26 -46
  299. package/lib/utils/task.js +36 -36
  300. package/lib/utils/watch.js +81 -47
  301. package/package.json +2 -1
@@ -1,17 +1,5 @@
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);
1
+ "use strict";
14
2
 
15
- // src/server/types.ts
16
- var types_exports = {};
17
- module.exports = __toCommonJS(types_exports);
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -1,25 +1,27 @@
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);
1
+ "use strict";
15
2
 
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")
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
25
5
  });
6
+ var _time = require("./time");
7
+ Object.keys(_time).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _time[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _time[key];
14
+ }
15
+ });
16
+ });
17
+ var _schedule = require("./schedule");
18
+ Object.keys(_schedule).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _schedule[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _schedule[key];
25
+ }
26
+ });
27
+ });
@@ -1,90 +1,105 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/utils/product.ts
20
- var product_exports = {};
21
- __export(product_exports, {
22
- applyDetailValueToProducts: () => applyDetailValueToProducts,
23
- applyI18nToProducts: () => applyI18nToProducts,
24
- applyPriceDataToProducts: () => applyPriceDataToProducts,
25
- getIsSessionProduct: () => getIsSessionProduct,
26
- perfMark: () => perfMark
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
27
5
  });
28
- module.exports = __toCommonJS(product_exports);
29
- var import_utils = require("../modules/schedule/utils");
30
- var import_utils2 = require("../../modules/Cart/utils");
6
+ exports.applyDetailValueToProducts = applyDetailValueToProducts;
7
+ exports.applyI18nToProducts = applyI18nToProducts;
8
+ exports.applyPriceDataToProducts = applyPriceDataToProducts;
9
+ exports.getIsSessionProduct = void 0;
10
+ exports.perfMark = perfMark;
11
+ var _utils = require("../modules/schedule/utils");
12
+ var _utils2 = require("../../modules/Cart/utils");
31
13
  function perfMark(label, durationMs, meta) {
32
14
  try {
33
- const w = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : null;
34
- if (!w)
35
- return;
36
- if (!w.__PERF__)
37
- w.__PERF__ = { records: [] };
38
- w.__PERF__.records.push({ label, duration: Math.round(durationMs * 100) / 100, ts: Date.now(), ...meta });
39
- } catch {
40
- }
15
+ const w = typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : null;
16
+ if (!w) return;
17
+ if (!w.__PERF__) w.__PERF__ = {
18
+ records: []
19
+ };
20
+ w.__PERF__.records.push({
21
+ label,
22
+ duration: Math.round(durationMs * 100) / 100,
23
+ ts: Date.now(),
24
+ ...meta
25
+ });
26
+ } catch {/* noop */}
41
27
  }
28
+
29
+ /**
30
+ * 构建价格数据的 Map 索引结构
31
+ * 使用三层 Map 实现 O(1) 查询,大幅提升性能
32
+ * @param priceData 价格数据数组
33
+ * @returns 三层 Map 索引:商品、variant、bundle
34
+ */
42
35
  function buildPriceIndexMap(priceData) {
43
- const priceMap = new Map(
44
- priceData.map((p) => [p.id, p])
45
- );
46
- const variantMap = /* @__PURE__ */ new Map();
47
- priceData.forEach((p) => {
36
+ // 1. 商品主价格 Map: productId -> priceInfo
37
+ const priceMap = new Map(priceData.map(p => [p.id, p]));
38
+
39
+ // 2. Variant 价格 Map: productId -> (variantId -> variantPriceInfo)
40
+ const variantMap = new Map();
41
+ priceData.forEach(p => {
48
42
  if (p.variant && p.variant.length > 0) {
49
- const variantById = new Map(p.variant.map((v) => [v.id, v]));
43
+ const variantById = new Map(p.variant.map(v => [v.id, v]));
50
44
  variantMap.set(p.id, variantById);
51
45
  }
52
46
  });
53
- const bundleMap = /* @__PURE__ */ new Map();
54
- priceData.forEach((p) => {
47
+
48
+ // 3. Bundle 价格 Map: productId -> (groupId -> (itemId -> itemPriceInfo))
49
+ const bundleMap = new Map();
50
+ priceData.forEach(p => {
55
51
  if (p.bundle_group && p.bundle_group.length > 0) {
56
- const groupMap = /* @__PURE__ */ new Map();
57
- p.bundle_group.forEach((bg) => {
58
- const itemMap = new Map((bg.bundle_item || []).map((bi) => [bi.id, bi]));
52
+ const groupMap = new Map();
53
+ p.bundle_group.forEach(bg => {
54
+ const itemMap = new Map((bg.bundle_item || []).map(bi => [bi.id, bi]));
59
55
  groupMap.set(bg.id, itemMap);
60
56
  });
61
57
  bundleMap.set(p.id, groupMap);
62
58
  }
63
59
  });
64
- return { priceMap, variantMap, bundleMap };
60
+ return {
61
+ priceMap,
62
+ variantMap,
63
+ bundleMap
64
+ };
65
65
  }
66
+
67
+ /**
68
+ * 将价格数据应用到商品列表(高性能版本)
69
+ * 通过预构建 Map 索引,将时间复杂度从 O(n×m) 优化到 O(n+m)
70
+ * @param products 商品列表
71
+ * @param priceData 价格数据
72
+ * @returns 应用价格后的商品列表
73
+ */
66
74
  function applyPriceDataToProducts(products, priceData) {
67
75
  const t0 = performance.now();
68
76
  if (!priceData || priceData.length === 0) {
69
- console.log("[applyPriceDataToProducts] 没有价格数据,返回原商品");
70
77
  return products;
71
78
  }
72
79
  const t1 = performance.now();
73
- const { priceMap, variantMap, bundleMap } = buildPriceIndexMap(priceData);
74
- perfMark("buildPriceIndexMap", performance.now() - t1, { priceCount: priceData.length });
80
+ const {
81
+ priceMap,
82
+ variantMap,
83
+ bundleMap
84
+ } = buildPriceIndexMap(priceData);
85
+ perfMark('buildPriceIndexMap', performance.now() - t1, {
86
+ priceCount: priceData.length
87
+ });
75
88
  const t2 = performance.now();
76
- const updatedProducts = products.map((product) => {
89
+ const updatedProducts = products.map(product => {
77
90
  const priceInfo = priceMap.get(product.id);
78
91
  if (!priceInfo) {
79
92
  return product;
80
93
  }
81
- const updatedProduct = { ...product };
94
+ const updatedProduct = {
95
+ ...product
96
+ };
82
97
  updatedProduct.price = priceInfo.price;
83
98
  updatedProduct.base_price = priceInfo.base_price;
84
99
  if (updatedProduct.variant && updatedProduct.variant.length > 0) {
85
100
  const productVariantMap = variantMap.get(product.id);
86
101
  if (productVariantMap) {
87
- updatedProduct.variant = updatedProduct.variant.map((v) => {
102
+ updatedProduct.variant = updatedProduct.variant.map(v => {
88
103
  const priceVariant = productVariantMap.get(v.id);
89
104
  if (priceVariant) {
90
105
  return {
@@ -100,127 +115,155 @@ function applyPriceDataToProducts(products, priceData) {
100
115
  if (updatedProduct.bundle_group && updatedProduct.bundle_group.length > 0) {
101
116
  const productBundleMap = bundleMap.get(product.id);
102
117
  if (productBundleMap) {
103
- updatedProduct.bundle_group = updatedProduct.bundle_group.map(
104
- (bg) => {
105
- const groupItemMap = productBundleMap.get(bg.id);
106
- if (!groupItemMap)
107
- return bg;
108
- return {
109
- ...bg,
110
- bundle_item: bg.bundle_item.map((bi) => {
111
- const priceBi = groupItemMap.get(bi.id);
112
- if (priceBi) {
113
- let price = priceBi.price;
114
- return {
115
- ...bi,
116
- price: String(price),
117
- base_price: String(priceBi.base_price)
118
- };
119
- }
120
- return bi;
121
- })
122
- };
123
- }
124
- );
118
+ updatedProduct.bundle_group = updatedProduct.bundle_group.map(bg => {
119
+ const groupItemMap = productBundleMap.get(bg.id);
120
+ if (!groupItemMap) return bg;
121
+ return {
122
+ ...bg,
123
+ bundle_item: bg.bundle_item.map(bi => {
124
+ const priceBi = groupItemMap.get(bi.id);
125
+ if (priceBi) {
126
+ let price = priceBi.price;
127
+ return {
128
+ ...bi,
129
+ price: String(price),
130
+ base_price: String(priceBi.base_price)
131
+ };
132
+ }
133
+ return bi;
134
+ })
135
+ };
136
+ });
125
137
  }
126
138
  }
127
139
  return updatedProduct;
128
140
  });
129
- perfMark("applyPriceDataToProducts.mapProducts", performance.now() - t2, { count: products.length });
130
- perfMark("applyPriceDataToProducts", performance.now() - t0, {
141
+ perfMark('applyPriceDataToProducts.mapProducts', performance.now() - t2, {
142
+ count: products.length
143
+ });
144
+ perfMark('applyPriceDataToProducts', performance.now() - t0, {
131
145
  productCount: products.length,
132
146
  priceCount: priceData.length
133
147
  });
134
148
  return updatedProducts;
135
149
  }
136
- var getIsSessionProduct = (product) => {
137
- return ["session_product", "session_ticket"].includes(product.extension_type);
150
+ const getIsSessionProduct = product => {
151
+ return ['session_product', 'session_ticket'].includes(product.extension_type);
138
152
  };
139
- var getIsOpenDetailModal = (product, context) => {
153
+
154
+ /**
155
+ * 获取是否打开详情弹窗
156
+ * @param product 商品
157
+ * @param context 格式化器上下文
158
+ * @returns 是否打开详情弹窗
159
+ */
160
+ exports.getIsSessionProduct = getIsSessionProduct;
161
+ const getIsOpenDetailModal = (product, context) => {
162
+ /** 是否为套餐组商品 */
140
163
  const isBundleProduct = product.bundle_group_count > 0;
164
+
165
+ /** 是否为选项组商品 */
141
166
  const isOptionProduct = product.option_group_count > 0;
167
+
168
+ /** 是否为组合规格商品 */
142
169
  const isVariantProduct = product.is_variant > 0;
170
+
171
+ /** 是否为日程商品 */
143
172
  const isSessionProduct = getIsSessionProduct(product);
173
+
174
+ // 获取商品关联的日程时间段
144
175
  let scheduleTimeSlots = [];
145
- if (isSessionProduct && product["schedule.ids"] && context.scheduleModule) {
146
- const scheduleIds = product["schedule.ids"];
176
+ if (isSessionProduct && product['schedule.ids'] && context.scheduleModule) {
177
+ const scheduleIds = product['schedule.ids'];
178
+ // 从 context 中获取完整的 scheduleList,然后过滤出商品关联的 schedule
147
179
  const productSchedules = context.scheduleModule.getScheduleByIds(scheduleIds);
148
- scheduleTimeSlots = (0, import_utils.getScheduleStartEndTimePoints)(
149
- context.schedule_date,
150
- productSchedules
151
- );
180
+ // 获取当前日期的所有时间段
181
+ scheduleTimeSlots = (0, _utils.getScheduleStartEndTimePoints)(context.schedule_date, productSchedules);
152
182
  }
183
+
184
+ // 是否打开详情弹窗 套餐组、选项组、组合规格、日程商品、日程时间段大于1个 打开详情弹窗
153
185
  const isOpenDetailModal = isBundleProduct || isOptionProduct || isVariantProduct || scheduleTimeSlots.length > 1;
154
186
  return {
155
187
  isOpenDetailModal,
156
188
  scheduleTimeSlots
157
189
  };
158
190
  };
159
- var I18N_FIELD_MAP = {
160
- title_i18n: "title",
161
- subtitle_i18n: "subtitle",
162
- description_i18n: "description",
163
- cover_i18n: "cover"
191
+ const I18N_FIELD_MAP = {
192
+ title_i18n: 'title',
193
+ subtitle_i18n: 'subtitle',
194
+ description_i18n: 'description',
195
+ cover_i18n: 'cover'
164
196
  };
197
+
198
+ /**
199
+ * 根据 locale 将商品的 i18n 字段覆盖到对应原始字段
200
+ */
165
201
  function applyI18nToProducts(products, locale) {
166
- if (!locale)
167
- return products;
168
- return products.map((product) => {
202
+ if (!locale) return products;
203
+ return products.map(product => {
169
204
  let patched = null;
170
205
  for (const [i18nKey, originalKey] of Object.entries(I18N_FIELD_MAP)) {
171
206
  const i18nDict = product[i18nKey];
172
- if (!i18nDict)
173
- continue;
207
+ if (!i18nDict) continue;
174
208
  const localizedValue = i18nDict[locale];
175
209
  if (localizedValue) {
176
- if (!patched)
177
- patched = { ...product };
210
+ if (!patched) patched = {
211
+ ...product
212
+ };
178
213
  patched[originalKey] = localizedValue;
179
214
  }
180
215
  }
181
216
  return patched ?? product;
182
217
  });
183
218
  }
184
- var formatDataKey = (data) => {
185
- var _a, _b, _c, _d;
219
+ const formatDataKey = data => {
186
220
  const _data = {
187
221
  ...data
188
222
  };
189
223
  let key = `${_data.product_id}`;
190
224
  let rowKey = key;
225
+
226
+ // 组合规格
191
227
  if (_data.product_variant_id) {
192
228
  let str = `_${_data.product_variant_id}`;
193
229
  key += str;
194
230
  rowKey += str;
195
231
  }
196
- if ((_a = _data == null ? void 0 : _data.option) == null ? void 0 : _a.length) {
232
+
233
+ // 单规格
234
+ if (_data?.option?.length) {
197
235
  for (const item of _data.option) {
198
236
  let str = `_${item.option_group_id}_${item.option_group_item_id}`;
199
237
  key += str;
200
238
  rowKey += `${str}_${item.quantity || item.num}`;
201
239
  }
202
240
  }
203
- if ((_b = _data == null ? void 0 : _data.bundle) == null ? void 0 : _b.length) {
241
+
242
+ // 套餐
243
+ if (_data?.bundle?.length) {
204
244
  for (const item of _data.bundle) {
205
245
  let str = `_${item.group_id}_${item.bundle_product_id}`;
206
246
  key += str;
207
247
  rowKey += `${str}_${item.quantity || item.num}`;
208
- if (item == null ? void 0 : item.option) {
248
+ // 如果有单规格
249
+ if (item?.option) {
209
250
  for (const opt of item.option) {
210
- let str2 = `_${opt.option_group_id}_${opt.option_group_item_id}`;
211
- key += str2;
212
- rowKey += `${str2}_${opt.quantity || opt.num}`;
251
+ let str = `_${opt.option_group_id}_${opt.option_group_item_id}`;
252
+ key += str;
253
+ rowKey += `${str}_${opt.quantity || opt.num}`;
213
254
  }
214
255
  }
215
256
  }
216
257
  }
217
- if (_data == null ? void 0 : _data.session) {
218
- let str = `_${(_c = _data == null ? void 0 : _data.session) == null ? void 0 : _c.key}`;
258
+
259
+ // session time
260
+ if (_data?.session) {
261
+ let str = `_${_data?.session?.key}`;
219
262
  key += str;
220
263
  rowKey += str;
221
264
  }
222
- if (_data == null ? void 0 : _data.schedule) {
223
- let str = `_${(_d = _data == null ? void 0 : _data.schedule) == null ? void 0 : _d.key}`;
265
+ if (_data?.schedule) {
266
+ let str = `_${_data?.schedule?.key}`;
224
267
  key += str;
225
268
  rowKey += str;
226
269
  }
@@ -228,46 +271,66 @@ var formatDataKey = (data) => {
228
271
  _data.rowKey = rowKey;
229
272
  return _data;
230
273
  };
231
- var genCartDetailValue = (product, scheduleTimeSlots) => {
274
+
275
+ /**
276
+ * 生成购物车详情值
277
+ * @param product 商品
278
+ * @param context 格式化器上下文
279
+ * @returns 购物车详情值
280
+ */
281
+ const genCartDetailValue = (product, scheduleTimeSlots) => {
232
282
  const params = {
233
- product_id: product == null ? void 0 : product.id,
283
+ product_id: product?.id,
234
284
  option: [],
235
285
  bundle: [],
236
286
  product_variant_id: 0,
237
287
  quantity: 1,
238
- unique: (0, import_utils2.getUniqueId)(),
288
+ unique: (0, _utils2.getUniqueId)(),
239
289
  session: null
240
290
  };
241
291
  if (scheduleTimeSlots.length) {
242
- params.session = scheduleTimeSlots.map((item) => ({
292
+ params.session = scheduleTimeSlots.map(item => ({
243
293
  ...item,
244
- unique: (0, import_utils2.getUniqueId)()
294
+ unique: (0, _utils2.getUniqueId)()
245
295
  }))[0];
246
296
  }
247
- if (product == null ? void 0 : product.service_times) {
248
- params.service_times = product == null ? void 0 : product.service_times;
297
+ if (product?.service_times) {
298
+ params.service_times = product?.service_times;
249
299
  }
250
- if (product == null ? void 0 : product.machine_code) {
300
+
301
+ // 票务订单需要返回对应的扩展属性
302
+ if (product?.machine_code) {
251
303
  params.machine_code = product.machine_code;
252
304
  }
253
- if (product == null ? void 0 : product["schedule.ids"]) {
254
- params.schedule_id = product["schedule.ids"];
305
+ if (product?.['schedule.ids']) {
306
+ params.schedule_id = product['schedule.ids'];
255
307
  }
256
- if (product == null ? void 0 : product.policy) {
257
- params.policy_id = product == null ? void 0 : product.policy;
308
+
309
+ // 协议id
310
+ if (product?.policy) {
311
+ params.policy_id = product?.policy;
258
312
  }
259
- if (product == null ? void 0 : product.duration) {
313
+
314
+ // appointment预约商品
315
+ if (product?.duration) {
260
316
  params.duration = product.duration;
261
317
  }
262
318
  return formatDataKey(params);
263
319
  };
320
+
321
+ /**
322
+ * 将详情值数据应用到商品列表
323
+ * @param products 商品列表
324
+ * @param context 格式化器上下文
325
+ * @returns 应用详情值后的商品列表
326
+ */
264
327
  function applyDetailValueToProducts(products, context) {
265
328
  const t0 = performance.now();
266
- const newProducts = products.map((product) => {
267
- const { isOpenDetailModal, scheduleTimeSlots } = getIsOpenDetailModal(
268
- product,
269
- context
270
- );
329
+ const newProducts = products.map(product => {
330
+ const {
331
+ isOpenDetailModal,
332
+ scheduleTimeSlots
333
+ } = getIsOpenDetailModal(product, context);
271
334
  let cartDetailValue = null;
272
335
  if (!isOpenDetailModal) {
273
336
  cartDetailValue = genCartDetailValue(product, scheduleTimeSlots);
@@ -278,14 +341,8 @@ function applyDetailValueToProducts(products, context) {
278
341
  cartDetailValue
279
342
  };
280
343
  });
281
- perfMark("applyDetailValueToProducts", performance.now() - t0, { count: products.length });
344
+ perfMark('applyDetailValueToProducts', performance.now() - t0, {
345
+ count: products.length
346
+ });
282
347
  return newProducts;
283
- }
284
- // Annotate the CommonJS export names for ESM import in node:
285
- 0 && (module.exports = {
286
- applyDetailValueToProducts,
287
- applyI18nToProducts,
288
- applyPriceDataToProducts,
289
- getIsSessionProduct,
290
- perfMark
291
- });
348
+ }
@@ -1,29 +1,16 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/utils/schedule.ts
20
- var schedule_exports = {};
21
- __export(schedule_exports, {
22
- extractScheduleIdsFromMenus: () => extractScheduleIdsFromMenus,
23
- extractTimePointsFromSchedules: () => extractTimePointsFromSchedules
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(schedule_exports);
26
- var import_time = require("./time");
6
+ exports.extractScheduleIdsFromMenus = extractScheduleIdsFromMenus;
7
+ exports.extractTimePointsFromSchedules = extractTimePointsFromSchedules;
8
+ var _time = require("./time");
9
+ /**
10
+ * 从餐牌列表中提取所有 schedule IDs
11
+ * @param menus 餐牌列表
12
+ * @returns 去重后的日程ID数组
13
+ */
27
14
  function extractScheduleIdsFromMenus(menus) {
28
15
  const scheduleIds = menus.reduce((ids, menu) => {
29
16
  if (menu.schedule && Array.isArray(menu.schedule)) {
@@ -31,25 +18,33 @@ function extractScheduleIdsFromMenus(menus) {
31
18
  }
32
19
  return ids;
33
20
  }, []);
21
+
22
+ // 去重
34
23
  return Array.from(new Set(scheduleIds));
35
24
  }
25
+
26
+ /**
27
+ * 从日程列表中提取所有时间点
28
+ * @param schedules 日程列表
29
+ * @returns 排序后的时间点数组,格式为 ["10:00", "12:00", "14:00", "18:00"]
30
+ */
36
31
  function extractTimePointsFromSchedules(schedules) {
37
- const timePointsSet = /* @__PURE__ */ new Set();
32
+ const timePointsSet = new Set();
38
33
  for (const schedule of schedules) {
39
34
  switch (schedule.type) {
40
- case "standard":
35
+ case 'standard':
36
+ // 标准类型:从 start_time 和 end_time 中提取时间部分
41
37
  if (schedule.start_time) {
42
- const startTime = (0, import_time.extractTimeFromDateTime)(schedule.start_time);
43
- if (startTime)
44
- timePointsSet.add(startTime);
38
+ const startTime = (0, _time.extractTimeFromDateTime)(schedule.start_time);
39
+ if (startTime) timePointsSet.add(startTime);
45
40
  }
46
41
  if (schedule.end_time) {
47
- const endTime = (0, import_time.extractTimeFromDateTime)(schedule.end_time);
48
- if (endTime)
49
- timePointsSet.add(endTime);
42
+ const endTime = (0, _time.extractTimeFromDateTime)(schedule.end_time);
43
+ if (endTime) timePointsSet.add(endTime);
50
44
  }
51
45
  break;
52
- case "time-slots":
46
+ case 'time-slots':
47
+ // 时间段类型:从 time_slot 数组中提取时间
53
48
  if (schedule.time_slot && Array.isArray(schedule.time_slot)) {
54
49
  for (const slot of schedule.time_slot) {
55
50
  if (slot.start_time) {
@@ -61,7 +56,8 @@ function extractTimePointsFromSchedules(schedules) {
61
56
  }
62
57
  }
63
58
  break;
64
- case "designation":
59
+ case 'designation':
60
+ // 指定日期类型:从 designation 中提取时间
65
61
  if (schedule.designation) {
66
62
  const designations = Array.isArray(schedule.designation) ? schedule.designation : [schedule.designation];
67
63
  for (const des of designations) {
@@ -78,11 +74,8 @@ function extractTimePointsFromSchedules(schedules) {
78
74
  console.warn(`[ScheduleUtils] 未知的日程类型: ${schedule.type}`);
79
75
  }
80
76
  }
77
+
78
+ // 转换为数组并排序
81
79
  const timePoints = Array.from(timePointsSet);
82
- return (0, import_time.sortTimePoints)(timePoints);
83
- }
84
- // Annotate the CommonJS export names for ESM import in node:
85
- 0 && (module.exports = {
86
- extractScheduleIdsFromMenus,
87
- extractTimePointsFromSchedules
88
- });
80
+ return (0, _time.sortTimePoints)(timePoints);
81
+ }