@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,60 +1,86 @@
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 });
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ ItemRuleEvaluator: true,
8
+ ItemRuleAdapter: true,
9
+ MIN_CONDIMENT_PER_PERSON_STRATEGY: true,
10
+ MAX_BUNS_PER_TABLE_STRATEGY: true,
11
+ HOTPOT_BASE_REQUIRED_STRATEGY: true,
12
+ HOTPOT_BASE_PICK_ONE_STRATEGY: true,
13
+ quickUseItemRuleEvaluator: true,
14
+ runItemRuleEvaluatorDemo: true
10
15
  };
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
+ Object.defineProperty(exports, "HOTPOT_BASE_PICK_ONE_STRATEGY", {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _examples.HOTPOT_BASE_PICK_ONE_STRATEGY;
16
20
  }
17
- return to;
18
- };
19
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/model/strategy/adapter/itemRule/index.ts
31
- var itemRule_exports = {};
32
- __export(itemRule_exports, {
33
- HOTPOT_BASE_PICK_ONE_STRATEGY: () => import_examples.HOTPOT_BASE_PICK_ONE_STRATEGY,
34
- HOTPOT_BASE_REQUIRED_STRATEGY: () => import_examples.HOTPOT_BASE_REQUIRED_STRATEGY,
35
- ItemRuleAdapter: () => import_adapter.ItemRuleAdapter,
36
- ItemRuleEvaluator: () => import_evaluator.ItemRuleEvaluator,
37
- MAX_BUNS_PER_TABLE_STRATEGY: () => import_examples.MAX_BUNS_PER_TABLE_STRATEGY,
38
- MIN_CONDIMENT_PER_PERSON_STRATEGY: () => import_examples.MIN_CONDIMENT_PER_PERSON_STRATEGY,
39
- default: () => import_adapter2.default,
40
- quickUseItemRuleEvaluator: () => import_examples.quickUseItemRuleEvaluator,
41
- runItemRuleEvaluatorDemo: () => import_examples.runItemRuleEvaluatorDemo
42
- });
43
- module.exports = __toCommonJS(itemRule_exports);
44
- var import_evaluator = require("./evaluator");
45
- var import_adapter = require("./adapter");
46
- var import_adapter2 = __toESM(require("./adapter"));
47
- var import_examples = require("./examples");
48
- __reExport(itemRule_exports, require("./type"), module.exports);
49
- // Annotate the CommonJS export names for ESM import in node:
50
- 0 && (module.exports = {
51
- HOTPOT_BASE_PICK_ONE_STRATEGY,
52
- HOTPOT_BASE_REQUIRED_STRATEGY,
53
- ItemRuleAdapter,
54
- ItemRuleEvaluator,
55
- MAX_BUNS_PER_TABLE_STRATEGY,
56
- MIN_CONDIMENT_PER_PERSON_STRATEGY,
57
- quickUseItemRuleEvaluator,
58
- runItemRuleEvaluatorDemo,
59
- ...require("./type")
60
21
  });
22
+ Object.defineProperty(exports, "HOTPOT_BASE_REQUIRED_STRATEGY", {
23
+ enumerable: true,
24
+ get: function () {
25
+ return _examples.HOTPOT_BASE_REQUIRED_STRATEGY;
26
+ }
27
+ });
28
+ Object.defineProperty(exports, "ItemRuleAdapter", {
29
+ enumerable: true,
30
+ get: function () {
31
+ return _adapter.ItemRuleAdapter;
32
+ }
33
+ });
34
+ Object.defineProperty(exports, "ItemRuleEvaluator", {
35
+ enumerable: true,
36
+ get: function () {
37
+ return _evaluator.ItemRuleEvaluator;
38
+ }
39
+ });
40
+ Object.defineProperty(exports, "MAX_BUNS_PER_TABLE_STRATEGY", {
41
+ enumerable: true,
42
+ get: function () {
43
+ return _examples.MAX_BUNS_PER_TABLE_STRATEGY;
44
+ }
45
+ });
46
+ Object.defineProperty(exports, "MIN_CONDIMENT_PER_PERSON_STRATEGY", {
47
+ enumerable: true,
48
+ get: function () {
49
+ return _examples.MIN_CONDIMENT_PER_PERSON_STRATEGY;
50
+ }
51
+ });
52
+ Object.defineProperty(exports, "default", {
53
+ enumerable: true,
54
+ get: function () {
55
+ return _adapter.default;
56
+ }
57
+ });
58
+ Object.defineProperty(exports, "quickUseItemRuleEvaluator", {
59
+ enumerable: true,
60
+ get: function () {
61
+ return _examples.quickUseItemRuleEvaluator;
62
+ }
63
+ });
64
+ Object.defineProperty(exports, "runItemRuleEvaluatorDemo", {
65
+ enumerable: true,
66
+ get: function () {
67
+ return _examples.runItemRuleEvaluatorDemo;
68
+ }
69
+ });
70
+ var _evaluator = require("./evaluator");
71
+ var _adapter = _interopRequireWildcard(require("./adapter"));
72
+ var _examples = require("./examples");
73
+ var _type = require("./type");
74
+ Object.keys(_type).forEach(function (key) {
75
+ if (key === "default" || key === "__esModule") return;
76
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
77
+ if (key in exports && exports[key] === _type[key]) return;
78
+ Object.defineProperty(exports, key, {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _type[key];
82
+ }
83
+ });
84
+ });
85
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
86
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -1,46 +1,107 @@
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/model/strategy/adapter/itemRule/type.ts
20
- var type_exports = {};
21
- __export(type_exports, {
22
- ITEM_RULE_ACTION_TYPES: () => ITEM_RULE_ACTION_TYPES,
23
- ITEM_RULE_TEMPLATES: () => ITEM_RULE_TEMPLATES
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(type_exports);
26
- var ITEM_RULE_ACTION_TYPES = {
6
+ exports.ITEM_RULE_TEMPLATES = exports.ITEM_RULE_ACTION_TYPES = void 0;
7
+ // ============================================
8
+ // Action Type 常量
9
+ // ============================================
10
+
11
+ const ITEM_RULE_ACTION_TYPES = exports.ITEM_RULE_ACTION_TYPES = {
27
12
  /** 数量校验 */
28
- QUANTITY_CHECK: "QUANTITY_CHECK",
13
+ QUANTITY_CHECK: 'QUANTITY_CHECK',
29
14
  /** 预填购物车 */
30
- PREFILL_CART: "PREFILL_CART"
15
+ PREFILL_CART: 'PREFILL_CART'
31
16
  };
32
- var ITEM_RULE_TEMPLATES = {
17
+ // ============================================
18
+ // Rule Template 类型(创建规则时的起始模板)
19
+ // ============================================
20
+
21
+ const ITEM_RULE_TEMPLATES = exports.ITEM_RULE_TEMPLATES = {
33
22
  /** 空白规则 */
34
- BLANK: "blank",
23
+ BLANK: 'blank',
35
24
  /** 人数关联最少量(每人至少N份) */
36
- MINIMUM_PER_PERSON: "minimum_per_person",
25
+ MINIMUM_PER_PERSON: 'minimum_per_person',
37
26
  /** 每桌限量 */
38
- MAXIMUM_PER_TABLE: "maximum_per_table",
27
+ MAXIMUM_PER_TABLE: 'maximum_per_table',
39
28
  /** 必选商品 */
40
- MUST_INCLUDE: "must_include"
29
+ MUST_INCLUDE: 'must_include'
41
30
  };
42
- // Annotate the CommonJS export names for ESM import in node:
43
- 0 && (module.exports = {
44
- ITEM_RULE_ACTION_TYPES,
45
- ITEM_RULE_TEMPLATES
46
- });
31
+
32
+ // ============================================
33
+ // Quantity Check 相关类型
34
+ // ============================================
35
+
36
+ /** 数量比较类型 */
37
+
38
+ /** 数量来源 */
39
+
40
+ /** 目标类型(当前仅支持按商品) */
41
+
42
+ /** 作用范围 */
43
+
44
+ /**
45
+ * 单条数量规则
46
+ *
47
+ * 例如:Minimum + Total Pax 表示"最少数量 = 总人数"
48
+ * 例如:Maximum + Fixed + 10 表示"最多10份"
49
+ */
50
+
51
+ /**
52
+ * Quantity Check Action 的详细配置
53
+ *
54
+ * 存储在 ActionEffect.config 中
55
+ */
56
+
57
+ /** 目标项 */
58
+
59
+ // ============================================
60
+ // Prefill Cart 相关类型
61
+ // ============================================
62
+
63
+ /**
64
+ * 预填商品项
65
+ */
66
+
67
+ /**
68
+ * Prefill Cart Action 的详细配置
69
+ *
70
+ * 存储在 ActionEffect.config 中
71
+ */
72
+
73
+ // ============================================
74
+ // 业务数据类型(Evaluator 输入)
75
+ // ============================================
76
+
77
+ /**
78
+ * 购物车商品摘要
79
+ */
80
+
81
+ /**
82
+ * 就餐人数信息
83
+ */
84
+
85
+ /**
86
+ * ItemRule 评估器的输入业务数据
87
+ */
88
+
89
+ // ============================================
90
+ // 评估结果类型
91
+ // ============================================
92
+
93
+ /**
94
+ * 单个 Quantity Check 的校验结果
95
+ */
96
+
97
+ /**
98
+ * 单个 Prefill Cart 的预填结果
99
+ */
100
+
101
+ /**
102
+ * 单条规则的数量限制(不含校验结果,仅描述配置中的约束)
103
+ */
104
+
105
+ /**
106
+ * ItemRule 评估器的完整输出结果
107
+ */
@@ -1,43 +1,42 @@
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);
18
-
19
- // src/model/strategy/adapter/promotion/adapter.ts
20
- var adapter_exports = {};
21
- __export(adapter_exports, {
22
- PromotionAdapter: () => PromotionAdapter,
23
- default: () => adapter_default
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(adapter_exports);
26
- var import_type = require("./type");
27
- var PromotionAdapter = class {
28
- constructor() {
29
- this.name = "PromotionAdapter";
30
- this.version = "1.0.0";
31
- }
6
+ exports.default = exports.PromotionAdapter = void 0;
7
+ var _type = require("./type");
8
+ // ============================================
9
+ // Promotion 适配器实现
10
+ // ============================================
11
+
12
+ /**
13
+ * Promotion 适配器
14
+ *
15
+ * 用于将促销活动业务数据转换为策略引擎可识别的格式
16
+ * 策略引擎只负责匹配,具体的优惠计算由业务层完成
17
+ */
18
+ class PromotionAdapter {
19
+ name = 'PromotionAdapter';
20
+ version = '1.0.0';
21
+
32
22
  /**
33
23
  * 准备运行时上下文
34
24
  *
35
25
  * 将业务数据转换为策略引擎可识别的 RuntimeContext
36
26
  */
37
27
  prepareContext(businessData) {
38
- const { products, currentProduct, channel, custom } = businessData;
39
- const now = /* @__PURE__ */ new Date();
28
+ const {
29
+ products,
30
+ currentProduct,
31
+ channel,
32
+ custom
33
+ } = businessData;
34
+
35
+ // 当前时间(用于时间条件判断)
36
+ const now = new Date();
40
37
  const currentDateTime = this.formatDateTime(now);
38
+
39
+ // 如果有 currentProduct,用于单商品场景(商品卡片展示)
41
40
  const evaluatingProduct = currentProduct || (products.length > 0 ? products[0] : null);
42
41
  return {
43
42
  entities: {
@@ -53,7 +52,7 @@ var PromotionAdapter = class {
53
52
  product_variant_id: evaluatingProduct.product_variant_id
54
53
  } : null,
55
54
  // 渠道
56
- channel: channel || "",
55
+ channel: channel || '',
57
56
  // 商品总数量
58
57
  totalQuantity: products.reduce((sum, p) => sum + p.quantity, 0),
59
58
  // 商品总金额
@@ -66,6 +65,7 @@ var PromotionAdapter = class {
66
65
  }
67
66
  };
68
67
  }
68
+
69
69
  /**
70
70
  * 转换执行结果
71
71
  *
@@ -73,6 +73,7 @@ var PromotionAdapter = class {
73
73
  * 主要是整理 matchedActions,让业务层更容易使用
74
74
  */
75
75
  transformResult(result, businessData) {
76
+ // 获取适用的商品列表
76
77
  const applicableProducts = businessData ? this.getApplicableProducts(result, businessData) : [];
77
78
  if (!result.applicable) {
78
79
  return {
@@ -83,16 +84,20 @@ var PromotionAdapter = class {
83
84
  strategyResult: result
84
85
  };
85
86
  }
87
+
88
+ // 获取第一个匹配的 action(按 priority 排序后的)
86
89
  const matchedAction = result.matchedActions[0];
87
90
  if (!matchedAction) {
88
91
  return {
89
92
  isApplicable: false,
90
93
  applicableProducts: [],
91
- reason: "No matched action",
92
- reasonCode: "NO_ACTION",
94
+ reason: 'No matched action',
95
+ reasonCode: 'NO_ACTION',
93
96
  strategyResult: result
94
97
  };
95
98
  }
99
+
100
+ // 解析 action 详情
96
101
  const actionDetail = this.parseActionDetail(matchedAction);
97
102
  return {
98
103
  isApplicable: true,
@@ -102,27 +107,34 @@ var PromotionAdapter = class {
102
107
  strategyResult: result
103
108
  };
104
109
  }
110
+
105
111
  /**
106
112
  * 格式化配置
107
113
  */
108
114
  formatConfig(result, businessData) {
109
- return { result, businessData };
115
+ return {
116
+ result,
117
+ businessData
118
+ };
110
119
  }
120
+
111
121
  // ============================================
112
122
  // 私有辅助方法
113
123
  // ============================================
124
+
114
125
  /**
115
126
  * 格式化日期时间
116
127
  */
117
128
  formatDateTime(date) {
118
129
  const year = date.getFullYear();
119
- const month = String(date.getMonth() + 1).padStart(2, "0");
120
- const day = String(date.getDate()).padStart(2, "0");
121
- const hours = String(date.getHours()).padStart(2, "0");
122
- const minutes = String(date.getMinutes()).padStart(2, "0");
123
- const seconds = String(date.getSeconds()).padStart(2, "0");
130
+ const month = String(date.getMonth() + 1).padStart(2, '0');
131
+ const day = String(date.getDate()).padStart(2, '0');
132
+ const hours = String(date.getHours()).padStart(2, '0');
133
+ const minutes = String(date.getMinutes()).padStart(2, '0');
134
+ const seconds = String(date.getSeconds()).padStart(2, '0');
124
135
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
125
136
  }
137
+
126
138
  /**
127
139
  * 解析 Action 详情
128
140
  *
@@ -130,16 +142,17 @@ var PromotionAdapter = class {
130
142
  */
131
143
  parseActionDetail(action) {
132
144
  switch (action.type) {
133
- case import_type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE:
145
+ case _type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE:
134
146
  return this.parseXItemsForYPriceAction(action);
135
- case import_type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE:
147
+ case _type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE:
136
148
  return this.parseBuyXGetYFreeAction(action);
137
- case import_type.PROMOTION_ACTION_TYPES.ITEM_REWARD:
149
+ case _type.PROMOTION_ACTION_TYPES.ITEM_REWARD:
138
150
  return this.parseItemRewardAction(action);
139
151
  default:
140
- return void 0;
152
+ return undefined;
141
153
  }
142
154
  }
155
+
143
156
  /**
144
157
  * 解析 X件Y元 Action
145
158
  */
@@ -147,13 +160,14 @@ var PromotionAdapter = class {
147
160
  const value = action.value || {};
148
161
  const config = action.config || {};
149
162
  return {
150
- type: import_type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE,
163
+ type: _type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE,
151
164
  x: value.x || 2,
152
165
  price: value.price || 0,
153
166
  allowCrossProduct: config.allowCrossProduct ?? true,
154
167
  cumulative: config.cumulative ?? true
155
168
  };
156
169
  }
170
+
157
171
  /**
158
172
  * 解析 买X送Y Action
159
173
  */
@@ -161,14 +175,15 @@ var PromotionAdapter = class {
161
175
  const value = action.value || {};
162
176
  const config = action.config || {};
163
177
  return {
164
- type: import_type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE,
178
+ type: _type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE,
165
179
  buyQuantity: value.buyQuantity || 1,
166
180
  freeQuantity: value.freeQuantity || 1,
167
- giftSelectionMode: config.giftSelectionMode || "user_select",
181
+ giftSelectionMode: config.giftSelectionMode || 'user_select',
168
182
  cumulative: config.cumulative ?? true,
169
183
  giftProducts: config.giftProducts || []
170
184
  };
171
185
  }
186
+
172
187
  /**
173
188
  * 解析 商品奖励 Action
174
189
  */
@@ -176,62 +191,69 @@ var PromotionAdapter = class {
176
191
  const value = action.value || {};
177
192
  const config = action.config || {};
178
193
  return {
179
- type: import_type.PROMOTION_ACTION_TYPES.ITEM_REWARD,
180
- rewardMethod: value.rewardMethod || "free",
194
+ type: _type.PROMOTION_ACTION_TYPES.ITEM_REWARD,
195
+ rewardMethod: value.rewardMethod || 'free',
181
196
  rewardValue: Number(value.rewardValue || 0),
182
- quantityRule: value.quantityRule || "per_condition_quantity",
197
+ quantityRule: value.quantityRule || 'per_condition_quantity',
183
198
  triggerQuantity: Number(value.triggerQuantity || 1),
184
199
  rewardQuantity: Number(value.rewardQuantity || 1),
185
- maxRewardQuantity: value.maxRewardQuantity === void 0 || value.maxRewardQuantity === null ? void 0 : Number(value.maxRewardQuantity),
200
+ maxRewardQuantity: value.maxRewardQuantity === undefined || value.maxRewardQuantity === null ? undefined : Number(value.maxRewardQuantity),
186
201
  rewardTargets: Array.isArray(config.rewardTargets) ? config.rewardTargets : [],
187
- targetSelection: config.targetSelection || "consumer_best"
202
+ targetSelection: config.targetSelection || 'consumer_best'
188
203
  };
189
204
  }
205
+
190
206
  /**
191
207
  * 获取适用的商品列表
192
208
  *
193
209
  * 从购物车商品中筛选出符合策略条件的商品
194
210
  */
195
211
  getApplicableProducts(result, businessData) {
196
- const { products } = businessData;
212
+ const {
213
+ products
214
+ } = businessData;
215
+
216
+ // 从策略配置中获取商品范围条件
197
217
  const productMatchRule = this.findProductMatchRule(result.config);
198
218
  if (!productMatchRule) {
219
+ // 如果没有商品范围条件,所有商品都适用
199
220
  return products;
200
221
  }
201
222
  const configProducts = productMatchRule.value;
202
- return products.filter(
203
- (product) => this.isProductMatch(product, configProducts)
204
- );
223
+
224
+ // 筛选适用的商品
225
+ return products.filter(product => this.isProductMatch(product, configProducts));
205
226
  }
227
+
206
228
  /**
207
229
  * 查找商品匹配规则
208
230
  */
209
231
  findProductMatchRule(config) {
210
- var _a;
211
- if (!((_a = config == null ? void 0 : config.conditions) == null ? void 0 : _a.rules)) {
232
+ if (!config?.conditions?.rules) {
212
233
  return null;
213
234
  }
214
- return config.conditions.rules.find(
215
- (rule) => rule.field === "productIdAndVariantId" && (rule.operator === "product_match" || rule.operator === "object_in")
216
- );
235
+ return config.conditions.rules.find(rule => rule.field === 'productIdAndVariantId' && (rule.operator === 'product_match' || rule.operator === 'object_in'));
217
236
  }
237
+
218
238
  /**
219
239
  * 检查商品是否匹配
220
240
  */
221
241
  isProductMatch(product, configProducts) {
222
- return configProducts.some((config) => {
242
+ return configProducts.some(config => {
243
+ // 首先检查 product_id
223
244
  if (config.product_id !== product.product_id) {
224
245
  return false;
225
246
  }
247
+
248
+ // 如果配置的 product_variant_id = 0,只需要 product_id 匹配
226
249
  if (config.product_variant_id === 0) {
227
250
  return true;
228
251
  }
252
+
253
+ // 否则需要 product_variant_id 精确匹配
229
254
  return config.product_variant_id === product.product_variant_id;
230
255
  });
231
256
  }
232
- };
233
- var adapter_default = PromotionAdapter;
234
- // Annotate the CommonJS export names for ESM import in node:
235
- 0 && (module.exports = {
236
- PromotionAdapter
237
- });
257
+ }
258
+ exports.PromotionAdapter = PromotionAdapter;
259
+ var _default = exports.default = PromotionAdapter;