@pisell/pisellos 2.3.74 → 2.3.76

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 (283) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.d.ts +1 -1
  11. package/dist/modules/Order/index.js +75 -91
  12. package/dist/modules/Order/types.d.ts +3 -1
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Rules/index.js +1 -4
  15. package/dist/modules/Schedule/index.js +0 -1
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/plugins/request.js +1 -4
  19. package/dist/plugins/window.js +2 -6
  20. package/dist/server/index.js +97 -129
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/order/index.js +2 -4
  23. package/dist/server/modules/products/index.js +24 -42
  24. package/dist/server/modules/quotation/index.js +29 -38
  25. package/dist/server/modules/resource/index.js +3 -4
  26. package/dist/server/modules/schedule/index.js +27 -35
  27. package/dist/server/utils/product.js +0 -1
  28. package/dist/solution/BaseSales/index.js +100 -72
  29. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  30. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  31. package/dist/solution/BookingByStep/index.js +7 -59
  32. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  33. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  34. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  35. package/dist/solution/BookingTicket/index.js +0 -2
  36. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  37. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  38. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  39. package/dist/solution/BuyTickets/index.js +9 -12
  40. package/dist/solution/Checkout/index.js +177 -252
  41. package/dist/solution/Checkout/utils/index.js +4 -16
  42. package/dist/solution/RegisterAndLogin/index.js +30 -76
  43. package/dist/solution/ScanOrder/index.js +50 -60
  44. package/dist/solution/ShopDiscount/index.js +2 -7
  45. package/dist/solution/VenueBooking/index.js +45 -55
  46. package/dist/utils/task.js +15 -18
  47. package/dist/utils/watch.js +0 -1
  48. package/lib/apis/picoding.js +2 -0
  49. package/lib/core/index.js +134 -134
  50. package/lib/effects/index.js +46 -57
  51. package/lib/index.js +82 -49
  52. package/lib/model/index.js +14 -21
  53. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  54. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  55. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  56. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  57. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  58. package/lib/model/strategy/adapter/index.js +100 -64
  59. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  60. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  61. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  62. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  63. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  64. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  65. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  66. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  67. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  68. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  69. package/lib/model/strategy/adapter/type.js +4 -16
  70. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  71. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  72. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  73. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  74. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  75. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  76. package/lib/model/strategy/engine.js +270 -168
  77. package/lib/model/strategy/index.js +49 -34
  78. package/lib/model/strategy/strategy-example.js +243 -239
  79. package/lib/model/strategy/type.js +100 -40
  80. package/lib/modules/Account/index.js +39 -53
  81. package/lib/modules/Account/types.js +20 -33
  82. package/lib/modules/AccountList/index.js +116 -154
  83. package/lib/modules/AccountList/types.js +30 -31
  84. package/lib/modules/AccountList/utils.js +18 -30
  85. package/lib/modules/BaseModule.js +23 -42
  86. package/lib/modules/BookingContext/index.js +158 -136
  87. package/lib/modules/BookingContext/types.js +46 -32
  88. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  89. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  90. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  91. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  92. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  93. package/lib/modules/BookingContext/utils/index.js +124 -41
  94. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  95. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  96. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  97. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  98. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  99. package/lib/modules/BookingContext/utils/resources.js +209 -167
  100. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  101. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  102. package/lib/modules/Cart/index.js +170 -124
  103. package/lib/modules/Cart/types.js +46 -51
  104. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  105. package/lib/modules/Cart/utils/cartDate.js +56 -61
  106. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  107. package/lib/modules/Cart/utils/cartNote.js +27 -32
  108. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  109. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  110. package/lib/modules/Cart/utils/cartResource.js +70 -78
  111. package/lib/modules/Cart/utils/changePrice.js +22 -50
  112. package/lib/modules/Cart/utils/index.js +106 -48
  113. package/lib/modules/Customer/constants.js +13 -34
  114. package/lib/modules/Customer/index.js +235 -172
  115. package/lib/modules/Customer/types.js +38 -35
  116. package/lib/modules/Date/index.js +116 -115
  117. package/lib/modules/Date/types.js +16 -28
  118. package/lib/modules/Date/utils.js +174 -123
  119. package/lib/modules/Discount/index.js +122 -127
  120. package/lib/modules/Discount/types.js +9 -31
  121. package/lib/modules/Guests/index.js +30 -56
  122. package/lib/modules/Guests/types.js +23 -33
  123. package/lib/modules/Holder/index.js +209 -189
  124. package/lib/modules/Holder/types.js +4 -16
  125. package/lib/modules/Holder/utils.js +20 -49
  126. package/lib/modules/OpenData/index.js +70 -76
  127. package/lib/modules/OpenData/types.js +4 -16
  128. package/lib/modules/OpenData/utils.js +44 -78
  129. package/lib/modules/Order/index.d.ts +1 -1
  130. package/lib/modules/Order/index.js +1733 -2121
  131. package/lib/modules/Order/payment-utils.js +77 -120
  132. package/lib/modules/Order/types.d.ts +3 -1
  133. package/lib/modules/Order/types.js +88 -35
  134. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  135. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  136. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  137. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  138. package/lib/modules/Order/utils.js +814 -647
  139. package/lib/modules/Payment/cash.js +20 -33
  140. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  141. package/lib/modules/Payment/eftpos.js +16 -30
  142. package/lib/modules/Payment/index.js +532 -399
  143. package/lib/modules/Payment/mx51.js +1 -0
  144. package/lib/modules/Payment/types.js +230 -108
  145. package/lib/modules/Payment/utils.js +52 -51
  146. package/lib/modules/Payment/walletpass.js +485 -660
  147. package/lib/modules/Product/index.js +51 -46
  148. package/lib/modules/Product/types.js +4 -16
  149. package/lib/modules/Product/utils.js +32 -33
  150. package/lib/modules/ProductList/index.js +113 -123
  151. package/lib/modules/ProductList/types.js +9 -31
  152. package/lib/modules/Quotation/index.js +81 -118
  153. package/lib/modules/Quotation/types.js +4 -16
  154. package/lib/modules/Resource/index.js +27 -59
  155. package/lib/modules/Resource/types.js +22 -32
  156. package/lib/modules/Resource/utils.js +30 -38
  157. package/lib/modules/ResourcePlanner/index.js +25 -23
  158. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  159. package/lib/modules/ResourcePlanner/planner.js +589 -770
  160. package/lib/modules/ResourcePlanner/types.js +10 -29
  161. package/lib/modules/Rules/index.js +1218 -959
  162. package/lib/modules/Rules/types.js +17 -40
  163. package/lib/modules/SalesSummary/index.js +85 -90
  164. package/lib/modules/SalesSummary/types.js +4 -16
  165. package/lib/modules/SalesSummary/utils.js +355 -430
  166. package/lib/modules/ScanOrderLogger/index.js +59 -79
  167. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  168. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  169. package/lib/modules/ScanOrderLogger/types.js +4 -16
  170. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  171. package/lib/modules/Schedule/index.js +100 -114
  172. package/lib/modules/Schedule/type.js +4 -16
  173. package/lib/modules/Schedule/types.js +4 -16
  174. package/lib/modules/Schedule/utils.js +433 -291
  175. package/lib/modules/Step/index.js +40 -52
  176. package/lib/modules/Step/tyeps.js +4 -16
  177. package/lib/modules/Summary/index.js +66 -71
  178. package/lib/modules/Summary/types.js +4 -16
  179. package/lib/modules/Summary/utils.js +773 -418
  180. package/lib/modules/SurchargeList/index.js +46 -60
  181. package/lib/modules/SurchargeList/types.js +4 -16
  182. package/lib/modules/index.js +245 -63
  183. package/lib/plugins/app.js +4 -16
  184. package/lib/plugins/index.js +36 -25
  185. package/lib/plugins/request.js +137 -126
  186. package/lib/plugins/shopStore.js +4 -16
  187. package/lib/plugins/user.js +4 -16
  188. package/lib/plugins/window.js +171 -179
  189. package/lib/server/index.js +3050 -2665
  190. package/lib/server/modules/floor-plan/index.js +118 -134
  191. package/lib/server/modules/floor-plan/types.js +15 -30
  192. package/lib/server/modules/index.js +106 -68
  193. package/lib/server/modules/menu/index.js +142 -122
  194. package/lib/server/modules/menu/types.js +18 -31
  195. package/lib/server/modules/order/index.js +784 -1002
  196. package/lib/server/modules/order/types.js +122 -33
  197. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  198. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  199. package/lib/server/modules/payment/index.js +59 -83
  200. package/lib/server/modules/payment/types.js +4 -16
  201. package/lib/server/modules/products/index.js +583 -471
  202. package/lib/server/modules/products/types.js +44 -34
  203. package/lib/server/modules/quotation/index.js +137 -172
  204. package/lib/server/modules/quotation/types.js +21 -31
  205. package/lib/server/modules/resource/index.js +220 -186
  206. package/lib/server/modules/resource/types.js +42 -33
  207. package/lib/server/modules/schedule/index.js +135 -123
  208. package/lib/server/modules/schedule/types.js +14 -21
  209. package/lib/server/modules/schedule/utils.js +334 -163
  210. package/lib/server/types.js +4 -16
  211. package/lib/server/utils/index.js +25 -23
  212. package/lib/server/utils/product.js +196 -139
  213. package/lib/server/utils/schedule.js +34 -41
  214. package/lib/server/utils/small-ticket.js +479 -456
  215. package/lib/server/utils/time.js +40 -49
  216. package/lib/solution/BaseSales/index.js +1220 -1412
  217. package/lib/solution/BaseSales/types.js +42 -38
  218. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  219. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  220. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  221. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  222. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  223. package/lib/solution/BaseSales/utils.js +158 -143
  224. package/lib/solution/BookingByStep/index.js +1527 -1340
  225. package/lib/solution/BookingByStep/types.js +40 -99
  226. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  227. package/lib/solution/BookingByStep/utils/products.js +42 -52
  228. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  229. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  230. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  231. package/lib/solution/BookingTicket/index.js +607 -522
  232. package/lib/solution/BookingTicket/types.js +99 -77
  233. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  234. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  235. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  236. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  237. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  238. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  239. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  240. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  241. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  242. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  243. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  244. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  245. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  246. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  247. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  248. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  249. package/lib/solution/BuyTickets/index.js +67 -70
  250. package/lib/solution/BuyTickets/types.js +22 -38
  251. package/lib/solution/Checkout/index.js +1451 -1158
  252. package/lib/solution/Checkout/types.js +91 -61
  253. package/lib/solution/Checkout/utils/index.js +228 -156
  254. package/lib/solution/PlaceOrder/index.js +55 -0
  255. package/lib/solution/RegisterAndLogin/config.js +493 -460
  256. package/lib/solution/RegisterAndLogin/index.js +633 -630
  257. package/lib/solution/RegisterAndLogin/types.js +189 -76
  258. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  259. package/lib/solution/Sales/index.js +328 -324
  260. package/lib/solution/Sales/types.js +27 -33
  261. package/lib/solution/ScanOrder/index.js +832 -864
  262. package/lib/solution/ScanOrder/types.js +33 -34
  263. package/lib/solution/ScanOrder/utils.js +409 -374
  264. package/lib/solution/ShopDiscount/index.js +226 -232
  265. package/lib/solution/ShopDiscount/types.js +15 -37
  266. package/lib/solution/ShopDiscount/utils.js +300 -172
  267. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  268. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  269. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  270. package/lib/solution/VenueBooking/index.js +811 -879
  271. package/lib/solution/VenueBooking/types.js +19 -39
  272. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  273. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  274. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  275. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  276. package/lib/solution/VenueBooking/utils.js +130 -67
  277. package/lib/solution/index.js +124 -41
  278. package/lib/store/createStore.js +32 -29
  279. package/lib/types/index.js +4 -16
  280. package/lib/utils/payment-number.js +26 -46
  281. package/lib/utils/task.js +36 -36
  282. package/lib/utils/watch.js +81 -47
  283. package/package.json +2 -1
@@ -1,84 +1,62 @@
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/modules/Order/payment-utils.ts
20
- var payment_utils_exports = {};
21
- __export(payment_utils_exports, {
22
- ensureOrderPaymentNumber: () => ensureOrderPaymentNumber,
23
- getOrderPaymentIdentityKeys: () => getOrderPaymentIdentityKeys,
24
- hasOrderPaymentIdentityOverlap: () => hasOrderPaymentIdentityOverlap,
25
- isIdentifiedPendingOrderPayment: () => isIdentifiedPendingOrderPayment,
26
- isPendingOrderPayment: () => isPendingOrderPayment,
27
- mergeOrderPaymentListsByIdentity: () => mergeOrderPaymentListsByIdentity,
28
- mergeOrderPaymentRecord: () => mergeOrderPaymentRecord,
29
- mergeOrderPaymentSnapshot: () => mergeOrderPaymentSnapshot,
30
- mergeOrderPaymentTransactions: () => mergeOrderPaymentTransactions,
31
- resolveOrderPaymentIdentity: () => resolveOrderPaymentIdentity
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
32
5
  });
33
- module.exports = __toCommonJS(payment_utils_exports);
34
- var PAYMENT_IDENTITY_TYPES = [
35
- "payment_number",
36
- "order_payment_id",
37
- "unique_payment_number"
38
- ];
6
+ exports.ensureOrderPaymentNumber = ensureOrderPaymentNumber;
7
+ exports.getOrderPaymentIdentityKeys = getOrderPaymentIdentityKeys;
8
+ exports.hasOrderPaymentIdentityOverlap = hasOrderPaymentIdentityOverlap;
9
+ exports.isIdentifiedPendingOrderPayment = isIdentifiedPendingOrderPayment;
10
+ exports.isPendingOrderPayment = isPendingOrderPayment;
11
+ exports.mergeOrderPaymentListsByIdentity = mergeOrderPaymentListsByIdentity;
12
+ exports.mergeOrderPaymentRecord = mergeOrderPaymentRecord;
13
+ exports.mergeOrderPaymentSnapshot = mergeOrderPaymentSnapshot;
14
+ exports.mergeOrderPaymentTransactions = mergeOrderPaymentTransactions;
15
+ exports.resolveOrderPaymentIdentity = resolveOrderPaymentIdentity;
16
+ const PAYMENT_IDENTITY_TYPES = ['payment_number', 'order_payment_id', 'unique_payment_number'];
39
17
  function normalizePaymentIdentityValue(value) {
40
- if (value === void 0 || value === null || value === "")
41
- return null;
18
+ if (value === undefined || value === null || value === '') return null;
42
19
  return String(value);
43
20
  }
44
21
  function getPaymentIdentityValue(payment, type) {
45
- var _a;
46
- if (type === "unique_payment_number") {
47
- return (_a = payment == null ? void 0 : payment.metadata) == null ? void 0 : _a.unique_payment_number;
22
+ if (type === 'unique_payment_number') {
23
+ return payment?.metadata?.unique_payment_number;
48
24
  }
49
- return payment == null ? void 0 : payment[type];
25
+ return payment?.[type];
50
26
  }
51
27
  function getOrderPaymentIdentityKeys(payment) {
52
28
  const record = payment;
53
- if (!record)
54
- return [];
55
- return PAYMENT_IDENTITY_TYPES.flatMap((type) => {
29
+ if (!record) return [];
30
+ return PAYMENT_IDENTITY_TYPES.flatMap(type => {
56
31
  const value = normalizePaymentIdentityValue(getPaymentIdentityValue(record, type));
57
32
  return value === null ? [] : [`${type}:${value}`];
58
33
  });
59
34
  }
60
35
  function isPendingOrderPayment(payment) {
61
36
  const record = payment;
62
- return String((record == null ? void 0 : record.status) || "").toLowerCase() === "payment_pending";
37
+ return String(record?.status || '').toLowerCase() === 'payment_pending';
63
38
  }
64
39
  function isIdentifiedPendingOrderPayment(payment) {
65
40
  return isPendingOrderPayment(payment) && getOrderPaymentIdentityKeys(payment).length > 0;
66
41
  }
67
42
  function hasOrderPaymentIdentityOverlap(left, right) {
68
43
  const leftKeys = new Set(getOrderPaymentIdentityKeys(left));
69
- if (leftKeys.size === 0)
70
- return false;
71
- return getOrderPaymentIdentityKeys(right).some((key) => leftKeys.has(key));
44
+ if (leftKeys.size === 0) return false;
45
+ return getOrderPaymentIdentityKeys(right).some(key => leftKeys.has(key));
72
46
  }
73
- function resolveOrderPaymentIdentity(payments, identity, mode = "payment_number") {
47
+ function resolveOrderPaymentIdentity(payments, identity, mode = 'payment_number') {
74
48
  const target = String(identity);
75
- const identityTypes = mode === "payment_number" ? ["payment_number"] : PAYMENT_IDENTITY_TYPES;
76
- const matchesByIndex = /* @__PURE__ */ new Map();
49
+ const identityTypes = mode === 'payment_number' ? ['payment_number'] : PAYMENT_IDENTITY_TYPES;
50
+ const matchesByIndex = new Map();
77
51
  for (const type of identityTypes) {
78
52
  (payments || []).forEach((payment, index) => {
79
53
  const value = normalizePaymentIdentityValue(getPaymentIdentityValue(payment, type));
80
54
  if (value === target && !matchesByIndex.has(index)) {
81
- matchesByIndex.set(index, { index, payment, matchedBy: type });
55
+ matchesByIndex.set(index, {
56
+ index,
57
+ payment,
58
+ matchedBy: type
59
+ });
82
60
  }
83
61
  });
84
62
  }
@@ -90,26 +68,32 @@ function resolveOrderPaymentIdentity(payments, identity, mode = "payment_number"
90
68
  }
91
69
  function ensureOrderPaymentNumber(payment, devicePrefix, createPaymentNumber) {
92
70
  const existing = normalizePaymentIdentityValue(payment.payment_number);
93
- if (existing)
94
- return { ...payment, payment_number: existing };
71
+ if (existing) return {
72
+ ...payment,
73
+ payment_number: existing
74
+ };
95
75
  const uuid = normalizePaymentIdentityValue(payment.uuid) || createPaymentNumber();
96
- const prefix = normalizePaymentIdentityValue(devicePrefix) || "LOCAL";
97
- return { ...payment, payment_number: `${prefix}_${uuid}` };
76
+ const prefix = normalizePaymentIdentityValue(devicePrefix) || 'LOCAL';
77
+ // TODO: 使用 ID Generator 替换当前 UUID 段生成器。
78
+ return {
79
+ ...payment,
80
+ payment_number: `${prefix}_${uuid}`
81
+ };
98
82
  }
99
83
  function mergeOrderPaymentTransactions(current, incoming) {
100
- const records = /* @__PURE__ */ new Map();
101
- const append = (value) => {
102
- if (!Array.isArray(value))
103
- return;
104
- value.forEach((item) => {
105
- const number = item && typeof item === "object" ? String(item.number || "") : "";
106
- const status = item && typeof item === "object" ? item.status : void 0;
107
- if (!number || status !== "success" && status !== "fail")
108
- return;
84
+ const records = new Map();
85
+ const append = value => {
86
+ if (!Array.isArray(value)) return;
87
+ value.forEach(item => {
88
+ const number = item && typeof item === 'object' ? String(item.number || '') : '';
89
+ const status = item && typeof item === 'object' ? item.status : undefined;
90
+ if (!number || status !== 'success' && status !== 'fail') return;
109
91
  const previous = records.get(number);
110
- if ((previous == null ? void 0 : previous.status) === "success" && status === "fail")
111
- return;
112
- records.set(number, { number, status });
92
+ if (previous?.status === 'success' && status === 'fail') return;
93
+ records.set(number, {
94
+ number,
95
+ status
96
+ });
113
97
  });
114
98
  };
115
99
  append(current);
@@ -119,12 +103,9 @@ function mergeOrderPaymentTransactions(current, incoming) {
119
103
  function mergeOrderPaymentRecord(payment, updates) {
120
104
  const currentMetadata = payment.metadata || {};
121
105
  const incomingMetadata = updates.metadata || {};
122
- const transactions = mergeOrderPaymentTransactions(
123
- currentMetadata.transactions,
124
- incomingMetadata.transactions
125
- );
126
- const currentPaid = payment.status === "paid";
127
- const nextStatus = currentPaid && updates.status !== "paid" ? "paid" : updates.status ?? payment.status;
106
+ const transactions = mergeOrderPaymentTransactions(currentMetadata.transactions, incomingMetadata.transactions);
107
+ const currentPaid = payment.status === 'paid';
108
+ const nextStatus = currentPaid && updates.status !== 'paid' ? 'paid' : updates.status ?? payment.status;
128
109
  return {
129
110
  ...payment,
130
111
  ...updates,
@@ -133,30 +114,21 @@ function mergeOrderPaymentRecord(payment, updates) {
133
114
  metadata: {
134
115
  ...currentMetadata,
135
116
  ...incomingMetadata,
136
- ...transactions.length > 0 || Array.isArray(incomingMetadata.transactions) ? { transactions } : {}
117
+ ...(transactions.length > 0 || Array.isArray(incomingMetadata.transactions) ? {
118
+ transactions
119
+ } : {})
137
120
  }
138
121
  };
139
122
  }
140
123
  function mergeOrderPaymentSnapshot(current, incoming) {
141
124
  const currentMetadata = current.metadata || {};
142
125
  const incomingMetadata = incoming.metadata || {};
143
- const currentUniquePaymentNumber = normalizePaymentIdentityValue(
144
- currentMetadata.unique_payment_number
145
- );
146
- const incomingUniquePaymentNumber = normalizePaymentIdentityValue(
147
- incomingMetadata.unique_payment_number
148
- );
149
- const incomingOrderPaymentId = normalizePaymentIdentityValue(
150
- incoming.order_payment_id
151
- );
126
+ const currentUniquePaymentNumber = normalizePaymentIdentityValue(currentMetadata.unique_payment_number);
127
+ const incomingUniquePaymentNumber = normalizePaymentIdentityValue(incomingMetadata.unique_payment_number);
128
+ const incomingOrderPaymentId = normalizePaymentIdentityValue(incoming.order_payment_id);
152
129
  const incomingFallbackPrefix = incomingOrderPaymentId ? `os-fallback:payment:order-payment:${incomingOrderPaymentId}` : null;
153
- const incomingUsesDerivedUniquePaymentNumber = Boolean(
154
- incomingUniquePaymentNumber && incomingFallbackPrefix && (incomingUniquePaymentNumber === incomingFallbackPrefix || incomingUniquePaymentNumber.startsWith(`${incomingFallbackPrefix}:conflict:`))
155
- );
156
- const transactions = mergeOrderPaymentTransactions(
157
- currentMetadata.transactions,
158
- incomingMetadata.transactions
159
- );
130
+ const incomingUsesDerivedUniquePaymentNumber = Boolean(incomingUniquePaymentNumber && incomingFallbackPrefix && (incomingUniquePaymentNumber === incomingFallbackPrefix || incomingUniquePaymentNumber.startsWith(`${incomingFallbackPrefix}:conflict:`)));
131
+ const transactions = mergeOrderPaymentTransactions(currentMetadata.transactions, incomingMetadata.transactions);
160
132
  return {
161
133
  ...current,
162
134
  ...incoming,
@@ -165,8 +137,12 @@ function mergeOrderPaymentSnapshot(current, incoming) {
165
137
  metadata: {
166
138
  ...currentMetadata,
167
139
  ...incomingMetadata,
168
- ...incomingUsesDerivedUniquePaymentNumber && currentUniquePaymentNumber ? { unique_payment_number: currentUniquePaymentNumber } : {},
169
- ...transactions.length > 0 ? { transactions } : {}
140
+ ...(incomingUsesDerivedUniquePaymentNumber && currentUniquePaymentNumber ? {
141
+ unique_payment_number: currentUniquePaymentNumber
142
+ } : {}),
143
+ ...(transactions.length > 0 ? {
144
+ transactions
145
+ } : {})
170
146
  }
171
147
  };
172
148
  }
@@ -191,34 +167,15 @@ function compactOrderPaymentList(payments) {
191
167
  return result;
192
168
  }
193
169
  function mergeOrderPaymentListsByIdentity(existing, incoming, options = {}) {
194
- const existingList = compactOrderPaymentList([...existing || []]);
195
- const incomingList = compactOrderPaymentList([...incoming || []]);
170
+ const existingList = compactOrderPaymentList([...(existing || [])]);
171
+ const incomingList = compactOrderPaymentList([...(incoming || [])]);
196
172
  if (options.preserveUnmatchedExisting) {
197
173
  return compactOrderPaymentList([...existingList, ...incomingList]);
198
174
  }
199
- const mergedIncoming = incomingList.map((incomingPayment) => {
200
- const matchingExisting = existingList.filter((existingPayment) => hasOrderPaymentIdentityOverlap(existingPayment, incomingPayment));
201
- return matchingExisting.reduce(
202
- (merged, existingPayment) => mergeOrderPaymentSnapshot(existingPayment, merged),
203
- incomingPayment
204
- );
175
+ const mergedIncoming = incomingList.map(incomingPayment => {
176
+ const matchingExisting = existingList.filter(existingPayment => hasOrderPaymentIdentityOverlap(existingPayment, incomingPayment));
177
+ return matchingExisting.reduce((merged, existingPayment) => mergeOrderPaymentSnapshot(existingPayment, merged), incomingPayment);
205
178
  });
206
- const preservedExisting = options.preserveUnmatchedExistingWhen ? existingList.filter((existingPayment) => {
207
- var _a;
208
- return !incomingList.some((incomingPayment) => hasOrderPaymentIdentityOverlap(existingPayment, incomingPayment)) && ((_a = options.preserveUnmatchedExistingWhen) == null ? void 0 : _a.call(options, existingPayment));
209
- }) : [];
179
+ const preservedExisting = options.preserveUnmatchedExistingWhen ? existingList.filter(existingPayment => !incomingList.some(incomingPayment => hasOrderPaymentIdentityOverlap(existingPayment, incomingPayment)) && options.preserveUnmatchedExistingWhen?.(existingPayment)) : [];
210
180
  return compactOrderPaymentList([...mergedIncoming, ...preservedExisting]);
211
- }
212
- // Annotate the CommonJS export names for ESM import in node:
213
- 0 && (module.exports = {
214
- ensureOrderPaymentNumber,
215
- getOrderPaymentIdentityKeys,
216
- hasOrderPaymentIdentityOverlap,
217
- isIdentifiedPendingOrderPayment,
218
- isPendingOrderPayment,
219
- mergeOrderPaymentListsByIdentity,
220
- mergeOrderPaymentRecord,
221
- mergeOrderPaymentSnapshot,
222
- mergeOrderPaymentTransactions,
223
- resolveOrderPaymentIdentity
224
- });
181
+ }
@@ -330,6 +330,8 @@ export type AddProductBookingInput = Record<string, any>;
330
330
  */
331
331
  export interface AddProductToOrderOptions {
332
332
  insertAfterProductUid?: string;
333
+ /** 跳过同商品/规格匹配,始终新增购物车行。 */
334
+ disableMerge?: boolean;
333
335
  }
334
336
  /**
335
337
  * 删除商品后的可选位置保持策略。
@@ -821,7 +823,7 @@ export interface OrderModuleAPI {
821
823
  saveDraft: () => Promise<void>;
822
824
  hydrateTempOrderFromRecord: (record: Record<string, any>, options?: {
823
825
  recalcOnHydrate?: boolean;
824
- source?: 'salesDetail' | 'sessionStorage';
826
+ source?: 'salesDetail' | 'mergedSalesDetail' | 'sessionStorage';
825
827
  }) => Promise<OrderTempOrder>;
826
828
  syncPaymentsToOrder: <T = any>(params: SyncPaymentsToOrderParams) => Promise<SyncPaymentsToOrderResult<T>>;
827
829
  getSalesOrderByLookup: (params: SalesOrderLookupParams) => Promise<any>;
@@ -1,37 +1,90 @@
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/modules/Order/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- OrderHooks: () => OrderHooks
23
- });
24
- module.exports = __toCommonJS(types_exports);
25
- var OrderHooks = /* @__PURE__ */ ((OrderHooks2) => {
26
- OrderHooks2["OnOrderCreate"] = "order:onOrderCreate";
27
- OrderHooks2["OnOrderUpdate"] = "order:onOrderUpdate";
28
- OrderHooks2["OnOrderCancel"] = "order:onOrderCancel";
29
- OrderHooks2["OnOrderStatusChange"] = "order:onOrderStatusChange";
30
- OrderHooks2["OnOrderCustomerChange"] = "order:onOrderCustomerChange";
31
- OrderHooks2["OnPromotionApplied"] = "order:onPromotionApplied";
32
- return OrderHooks2;
33
- })(OrderHooks || {});
34
- // Annotate the CommonJS export names for ESM import in node:
35
- 0 && (module.exports = {
36
- OrderHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
37
5
  });
6
+ exports.OrderHooks = void 0;
7
+ let OrderHooks = exports.OrderHooks = /*#__PURE__*/function (OrderHooks) {
8
+ OrderHooks["OnOrderCreate"] = "order:onOrderCreate";
9
+ OrderHooks["OnOrderUpdate"] = "order:onOrderUpdate";
10
+ OrderHooks["OnOrderCancel"] = "order:onOrderCancel";
11
+ OrderHooks["OnOrderStatusChange"] = "order:onOrderStatusChange";
12
+ OrderHooks["OnOrderCustomerChange"] = "order:onOrderCustomerChange";
13
+ OrderHooks["OnPromotionApplied"] = "order:onPromotionApplied";
14
+ return OrderHooks;
15
+ }({});
16
+ /**
17
+ * 促销评估器协议(OS 与 PromotionEvaluator 之间的桥接接口)。
18
+ *
19
+ * 与 `pisell_os/src/model/strategy/adapter/promotion/evaluator.ts` 中的
20
+ * `PromotionEvaluator` 实例结构保持兼容。SalesSdkProvider 会从 `appHelper.utils.promotionEvaluator`
21
+ * 读取实例并通过 `setPromotionEvaluator` 注入到 OrderModule。
22
+ *
23
+ * 这里只声明 OrderModule 需要调用的子集,避免反向依赖具体 evaluator 实现。
24
+ */
25
+ /** 赠品解析回调 context(OS → SDK 的请求体) */
26
+ /**
27
+ * 赠品 resolver 返回值。
28
+ *
29
+ * @example
30
+ * return { products: [giftProduct], bookings: [giftBooking] };
31
+ */
32
+ /**
33
+ * 赠品解析回调签名(SDK → OS 的返回值)。
34
+ *
35
+ * - 单选项:SDK 内部自动构造商品,不弹窗
36
+ * - 多选项:SDK 弹窗等用户确认后构造
37
+ * - 用户取消:抛错或返回空数组(OS 视为放弃本次添加)
38
+ *
39
+ * 返回数组时沿用旧协议,只写 tempOrder.products;返回对象时可同时写入预约 bookings。
40
+ */
41
+ /** 未满足的促销策略(购物车底部 alert 渲染源) */
42
+ /** 上一次 applyPromotion 计算出的赠品操作(仅供调试/读取使用) */
43
+ /** onPromotionApplied 事件 payload */
44
+ /**
45
+ * tempOrder 上的下单客户协议字段视图。
46
+ * 这些字段会随订单提交到后端。
47
+ *
48
+ * customer_id 与 OrderTempOrder.customer_id 保持一致(number | null),
49
+ * 调用方若持有 string id(如 ICustomer.id 联合类型),需自行 Number() 转型。
50
+ */
51
+ /**
52
+ * 写入下单客户的协议字段输入。
53
+ * `customer_id` 必传(null 表示无客户);其余字段缺省视为「清空」(全量覆盖语义)。
54
+ */
55
+ /**
56
+ * 下单客户变更事件 payload。
57
+ * - `patch`:tempOrder 上的协议字段视图(会随订单提交)
58
+ * - `snapshot`:UI 富字段快照(仅本地,不随订单提交)
59
+ * - `source`:缺省表示真实业务变更;`detailHydrate` 仅表示打开详情时快照已就绪
60
+ * 清空时整个 payload 为 null。
61
+ */
62
+ /**
63
+ * 添加商品行时的顺序控制。
64
+ * 默认追加到 products 尾部;预约数量同步可插入到既有预约组的最新行之后,
65
+ * 避免步进器修改数量改变该组展示位置。
66
+ */
67
+ /**
68
+ * 删除商品后的可选位置保持策略。
69
+ * 预约合并行减量时仍删除最新真实行,再把剩余代表行移动到被删除代表行原位置。
70
+ */
71
+ /** 更新购物车行:仅传 SKU 时命中同 SKU 第一行;多行同 SKU 须传 unique_identification_number / 选项指纹等 */
72
+ /** 仅更新购物车行数量;行定位语义与 updateOrderProduct / removeProductFromOrder 保持一致 */
73
+ /**
74
+ * 订单信息
75
+ */
76
+ /**
77
+ * 支付项数据
78
+ */
79
+ /**
80
+ * Checkout 专用订单创建参数
81
+ */
82
+ /**
83
+ * 取消订单参数
84
+ */
85
+ /**
86
+ * 变更预约状态参数
87
+ */
88
+ /**
89
+ * 订单模块 API
90
+ */
@@ -1,99 +1,72 @@
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/modules/Order/utils/bundleDiscountHydration.ts
20
- var bundleDiscountHydration_exports = {};
21
- __export(bundleDiscountHydration_exports, {
22
- expandHydratedProductsForDiscountCollection: () => expandHydratedProductsForDiscountCollection,
23
- restoreHydratedBundleDiscounts: () => restoreHydratedBundleDiscounts
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(bundleDiscountHydration_exports);
26
- var BUNDLE_MAP_ID_KEY = "custom_product_bundle_map_id";
6
+ exports.expandHydratedProductsForDiscountCollection = expandHydratedProductsForDiscountCollection;
7
+ exports.restoreHydratedBundleDiscounts = restoreHydratedBundleDiscounts;
8
+ const BUNDLE_MAP_ID_KEY = 'custom_product_bundle_map_id';
27
9
  function getBundleMapId(bundle) {
28
- var _a;
29
- const metadataMapId = (_a = bundle == null ? void 0 : bundle.metadata) == null ? void 0 : _a[BUNDLE_MAP_ID_KEY];
30
- if (metadataMapId !== void 0 && metadataMapId !== null && metadataMapId !== "") {
10
+ const metadataMapId = bundle?.metadata?.[BUNDLE_MAP_ID_KEY];
11
+ if (metadataMapId !== undefined && metadataMapId !== null && metadataMapId !== '') {
31
12
  return String(metadataMapId);
32
13
  }
33
- if ((bundle == null ? void 0 : bundle._id) !== void 0 && bundle._id !== null && bundle._id !== "") {
14
+ if (bundle?._id !== undefined && bundle._id !== null && bundle._id !== '') {
34
15
  return String(bundle._id);
35
16
  }
36
17
  return null;
37
18
  }
38
19
  function getDiscountBundleMapId(discount) {
39
- var _a;
40
- const mapId = (_a = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a[BUNDLE_MAP_ID_KEY];
41
- if (mapId === void 0 || mapId === null || mapId === "")
42
- return null;
20
+ const mapId = discount?.metadata?.[BUNDLE_MAP_ID_KEY];
21
+ if (mapId === undefined || mapId === null || mapId === '') return null;
43
22
  return String(mapId);
44
23
  }
45
24
  function hasSameBundleDiscount(discountList, discount) {
46
- var _a;
47
25
  const targetOrderDiscountId = discount.order_discount_id;
48
- if (targetOrderDiscountId !== void 0 && targetOrderDiscountId !== null) {
49
- return discountList.some((item) => (item == null ? void 0 : item.order_discount_id) === targetOrderDiscountId);
26
+ if (targetOrderDiscountId !== undefined && targetOrderDiscountId !== null) {
27
+ return discountList.some(item => item?.order_discount_id === targetOrderDiscountId);
50
28
  }
51
- const targetResourceId = ((_a = discount == null ? void 0 : discount.discount) == null ? void 0 : _a.resource_id) ?? (discount == null ? void 0 : discount.resource_id) ?? (discount == null ? void 0 : discount.discount_id);
29
+ const targetResourceId = discount?.discount?.resource_id ?? discount?.resource_id ?? discount?.discount_id;
52
30
  const targetMapId = getDiscountBundleMapId(discount);
53
- return discountList.some((item) => {
54
- var _a2;
55
- const resourceId = ((_a2 = item == null ? void 0 : item.discount) == null ? void 0 : _a2.resource_id) ?? (item == null ? void 0 : item.resource_id) ?? (item == null ? void 0 : item.discount_id);
56
- return resourceId === targetResourceId && String((item == null ? void 0 : item.amount) ?? "") === String((discount == null ? void 0 : discount.amount) ?? "") && getDiscountBundleMapId(item) === targetMapId;
31
+ return discountList.some(item => {
32
+ const resourceId = item?.discount?.resource_id ?? item?.resource_id ?? item?.discount_id;
33
+ return resourceId === targetResourceId && String(item?.amount ?? '') === String(discount?.amount ?? '') && getDiscountBundleMapId(item) === targetMapId;
57
34
  });
58
35
  }
59
36
  function restoreHydratedBundleDiscounts(product, normalizeDiscountList) {
60
37
  if (!Array.isArray(product.product_bundle) || !Array.isArray(product.discount_list)) {
61
38
  return product;
62
39
  }
63
- const bundleByMapId = /* @__PURE__ */ new Map();
64
- product.product_bundle.forEach((bundle) => {
65
- if (!bundle || typeof bundle !== "object")
66
- return;
40
+ const bundleByMapId = new Map();
41
+ product.product_bundle.forEach(bundle => {
42
+ if (!bundle || typeof bundle !== 'object') return;
67
43
  const mapId = getBundleMapId(bundle);
68
- if (mapId)
69
- bundleByMapId.set(mapId, bundle);
44
+ if (mapId) bundleByMapId.set(mapId, bundle);
70
45
  });
71
- if (!bundleByMapId.size)
72
- return product;
46
+ if (!bundleByMapId.size) return product;
73
47
  const mainDiscountList = [];
74
48
  const bundleDiscounts = [];
75
- product.discount_list.forEach((discount) => {
49
+ product.discount_list.forEach(discount => {
76
50
  const mapId = getDiscountBundleMapId(discount);
77
51
  if (mapId && bundleByMapId.has(mapId)) {
78
- bundleDiscounts.push({ mapId, discount });
52
+ bundleDiscounts.push({
53
+ mapId,
54
+ discount
55
+ });
79
56
  } else {
80
57
  mainDiscountList.push(discount);
81
58
  }
82
59
  });
83
- if (!bundleDiscounts.length)
84
- return product;
60
+ if (!bundleDiscounts.length) return product;
85
61
  return {
86
62
  ...product,
87
63
  discount_list: normalizeDiscountList(mainDiscountList),
88
- product_bundle: product.product_bundle.map((bundle) => {
89
- if (!bundle || typeof bundle !== "object")
90
- return bundle;
64
+ product_bundle: product.product_bundle.map(bundle => {
65
+ if (!bundle || typeof bundle !== 'object') return bundle;
91
66
  const mapId = getBundleMapId(bundle);
92
- if (!mapId)
93
- return bundle;
94
- const matchedDiscounts = bundleDiscounts.filter((item) => item.mapId === mapId).map((item) => item.discount);
95
- if (!matchedDiscounts.length)
96
- return bundle;
67
+ if (!mapId) return bundle;
68
+ const matchedDiscounts = bundleDiscounts.filter(item => item.mapId === mapId).map(item => item.discount);
69
+ if (!matchedDiscounts.length) return bundle;
97
70
  const currentDiscountList = Array.isArray(bundle.discount_list) ? [...bundle.discount_list] : [];
98
71
  for (const discount of matchedDiscounts) {
99
72
  if (!hasSameBundleDiscount(currentDiscountList, discount)) {
@@ -104,7 +77,7 @@ function restoreHydratedBundleDiscounts(product, normalizeDiscountList) {
104
77
  ...bundle,
105
78
  discount_list: normalizeDiscountList(currentDiscountList),
106
79
  metadata: {
107
- ...bundle.metadata || {},
80
+ ...(bundle.metadata || {}),
108
81
  [BUNDLE_MAP_ID_KEY]: mapId
109
82
  }
110
83
  };
@@ -115,25 +88,19 @@ function expandHydratedProductsForDiscountCollection(products) {
115
88
  const expanded = [];
116
89
  for (const product of products || []) {
117
90
  expanded.push(product);
118
- for (const bundle of (product == null ? void 0 : product.product_bundle) || []) {
119
- if (!Array.isArray(bundle == null ? void 0 : bundle.discount_list) || bundle.discount_list.length === 0)
120
- continue;
91
+ for (const bundle of product?.product_bundle || []) {
92
+ if (!Array.isArray(bundle?.discount_list) || bundle.discount_list.length === 0) continue;
121
93
  expanded.push({
122
94
  ...product,
123
- product_id: bundle.bundle_product_id ?? bundle._bundle_product_id ?? bundle.product_id ?? (product == null ? void 0 : product.product_id),
124
- num: bundle.num ?? bundle.quantity ?? (product == null ? void 0 : product.num),
125
- product_quantity: bundle.quantity ?? bundle.num ?? (product == null ? void 0 : product.product_quantity),
95
+ product_id: bundle.bundle_product_id ?? bundle._bundle_product_id ?? bundle.product_id ?? product?.product_id,
96
+ num: bundle.num ?? bundle.quantity ?? product?.num,
97
+ product_quantity: bundle.quantity ?? bundle.num ?? product?.product_quantity,
126
98
  original_price: bundle.original_price ?? bundle.product_price ?? bundle.price,
127
99
  selling_price: bundle.bundle_selling_price ?? bundle.price,
128
- is_charge_tax: bundle.is_charge_tax ?? (product == null ? void 0 : product.is_charge_tax),
100
+ is_charge_tax: bundle.is_charge_tax ?? product?.is_charge_tax,
129
101
  discount_list: bundle.discount_list
130
102
  });
131
103
  }
132
104
  }
133
105
  return expanded;
134
- }
135
- // Annotate the CommonJS export names for ESM import in node:
136
- 0 && (module.exports = {
137
- expandHydratedProductsForDiscountCollection,
138
- restoreHydratedBundleDiscounts
139
- });
106
+ }