@pisell/pisellos 2.3.73 → 2.3.75

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 (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
package/lib/core/index.js CHANGED
@@ -1,116 +1,119 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/core/index.ts
30
- var core_exports = {};
31
- __export(core_exports, {
32
- PisellOSCore: () => PisellOSCore,
33
- default: () => core_default
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
34
5
  });
35
- module.exports = __toCommonJS(core_exports);
36
- var import_createStore = require("../store/createStore");
37
- var import_effects = require("../effects");
38
- var PisellOSCore = class {
39
- // 保存 Server 配置
6
+ exports.default = exports.PisellOSCore = void 0;
7
+ var _createStore = require("../store/createStore");
8
+ var _effects = require("../effects");
9
+ 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); }
10
+ 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; }
11
+ /**
12
+ * pisell OS 核心实现
13
+ */
14
+ class PisellOSCore {
15
+ plugins = new Map();
16
+ modules = new Map();
17
+ stores = new Map();
18
+ effects = new _effects.EffectsManager();
19
+ debug = false;
20
+ context = {};
21
+ server; // Server 实例
22
+ serverOptions; // 保存 Server 配置
23
+ serverModulePromise;
40
24
  constructor(options) {
41
- this.plugins = /* @__PURE__ */ new Map();
42
- this.modules = /* @__PURE__ */ new Map();
43
- this.stores = /* @__PURE__ */ new Map();
44
- this.effects = new import_effects.EffectsManager();
45
- this.debug = false;
46
- this.context = {};
47
- this.debug = (options == null ? void 0 : options.debug) || false;
48
- this.context = (options == null ? void 0 : options.context) || {};
49
- if (options == null ? void 0 : options.server) {
25
+ this.debug = options?.debug || false;
26
+ this.context = options?.context || {};
27
+
28
+ // 保存 Server 配置但不初始化
29
+ if (options?.server) {
50
30
  this.serverOptions = options.server;
51
31
  }
52
32
  this.initialize(options);
53
33
  }
54
34
  initialize(options) {
55
- if (options == null ? void 0 : options.plugins) {
56
- options.plugins.forEach((item) => {
35
+ if (options?.plugins) {
36
+ options.plugins.forEach(item => {
57
37
  this.registerPlugin(item.plugin, item.options);
58
38
  });
59
39
  }
60
- if (options == null ? void 0 : options.modules) {
61
- options.modules.forEach((item) => {
40
+ if (options?.modules) {
41
+ options.modules.forEach(item => {
62
42
  this.registerModule(item.module, item.options);
63
43
  });
64
44
  }
65
- this.log("[PisellOS] 核心初始化完成");
45
+ this.log('[PisellOS] 核心初始化完成');
66
46
  }
47
+
48
+ /**
49
+ * 仅预加载 Server 模块代码,不创建实例、不注册模块、不请求业务数据。
50
+ * 导入失败会清空 Promise,正式 initializeServer 时仍可重新尝试。
51
+ */
52
+ async preloadServerModule() {
53
+ if (this.server || !this.serverOptions) return;
54
+ await this.loadServerModule();
55
+ }
56
+ loadServerModule() {
57
+ if (!this.serverModulePromise) {
58
+ this.serverModulePromise = Promise.resolve().then(() => _interopRequireWildcard(require("../server"))).catch(error => {
59
+ this.serverModulePromise = undefined;
60
+ throw error;
61
+ });
62
+ }
63
+ return this.serverModulePromise;
64
+ }
65
+
67
66
  /**
68
67
  * 初始化 Server(公开方法,需要外部显式调用并等待)
69
68
  * Server 配置从构造函数传入的 options.server 中获取
70
69
  */
71
70
  async initializeServer(options) {
71
+ // 检查是否已经初始化
72
72
  if (this.server) {
73
- this.log("Server 已经初始化,跳过重复初始化", "warn");
73
+ this.log('Server 已经初始化,跳过重复初始化', 'warn');
74
74
  return;
75
75
  }
76
+
77
+ // 检查是否有 Server 配置
76
78
  if (!this.serverOptions) {
77
- this.log("未提供 Server 配置,无法初始化", "warn");
79
+ this.log('未提供 Server 配置,无法初始化', 'warn');
78
80
  return;
79
81
  }
80
82
  try {
81
- const ServerModule = await import("../server");
83
+ // 动态导入 Server 类以避免循环依赖
84
+ const ServerModule = await this.loadServerModule();
82
85
  const Server = ServerModule.default;
86
+
87
+ // 创建 Server 实例
83
88
  this.server = new Server(this);
84
- this.log("Server 实例已创建");
89
+ this.log('Server 实例已创建');
90
+
91
+ // 初始化模块并预加载数据
85
92
  if (this.serverOptions.modules) {
86
- await this.server.initialize(
87
- this.serverOptions.modules,
88
- this.serverOptions.autoInitData !== false,
89
- options
90
- );
93
+ await this.server.initialize(this.serverOptions.modules, this.serverOptions.autoInitData !== false, options);
91
94
  }
92
- console.log("[PisellOS] Server 初始化完成,所有数据已预加载");
93
- this.log("[PisellOS] Server 初始化完成");
95
+ this.log('[PisellOS] Server 初始化完成');
94
96
  } catch (error) {
95
- console.error("[PisellOS] ❌ Server 初始化失败:", error);
96
- this.log(`Server 初始化失败: ${error}`, "error");
97
+ console.error('[PisellOS] ❌ Server 初始化失败:', error);
98
+ this.log(`Server 初始化失败: ${error}`, 'error');
97
99
  throw error;
98
100
  }
99
101
  }
102
+
100
103
  // 日志方法
101
- log(message, level = "info") {
102
- if (!this.debug && level === "info") {
104
+ log(message, level = 'info') {
105
+ if (!this.debug && level === 'info') {
103
106
  return;
104
107
  }
105
- const prefix = "[PisellOS]";
108
+ const prefix = '[PisellOS]';
106
109
  switch (level) {
107
- case "info":
108
- console.log(`${prefix} ${message}`);
110
+ case 'info':
109
111
  break;
110
- case "warn":
111
- console.log(`%c${prefix}%c ${message}`, "color: #f59e0b; font-weight: bold;", "color: #f59e0b;");
112
+ case 'warn':
113
+ // 使用 console.log 避免显示堆栈跟踪,提升性能
114
+
112
115
  break;
113
- case "error":
116
+ case 'error':
114
117
  console.error(`${prefix} ${message}`);
115
118
  break;
116
119
  }
@@ -118,27 +121,31 @@ var PisellOSCore = class {
118
121
  // 插件相关方法
119
122
  registerPlugin(plugin, options) {
120
123
  if (this.plugins.has(plugin.name)) {
121
- this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`, "warn");
124
+ this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`, 'warn');
122
125
  }
123
- if (options == null ? void 0 : options.dependencies) {
126
+
127
+ // 检查依赖
128
+ if (options?.dependencies) {
124
129
  for (const dep of options.dependencies) {
125
130
  if (!this.plugins.has(dep)) {
126
131
  throw new Error(`注册插件 ${plugin.name} 失败:缺少依赖插件 ${dep}`);
127
132
  }
128
133
  }
129
134
  }
135
+
136
+ // 初始化插件
130
137
  try {
131
138
  const result = plugin.initialize();
132
139
  if (result instanceof Promise) {
133
- result.catch((err) => {
134
- this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`, "error");
140
+ result.catch(err => {
141
+ this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`, 'error');
135
142
  throw err;
136
143
  });
137
144
  }
138
145
  this.plugins.set(plugin.name, plugin);
139
146
  this.log(`插件 ${plugin.name} v${plugin.version} 注册成功`);
140
147
  } catch (error) {
141
- this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`, "error");
148
+ this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`, 'error');
142
149
  throw error;
143
150
  }
144
151
  }
@@ -148,129 +155,140 @@ var PisellOSCore = class {
148
155
  hasPlugin(name) {
149
156
  return this.plugins.has(name);
150
157
  }
158
+
151
159
  // 模块相关方法
152
- registerModule(module2, options) {
153
- if (this.modules.has(module2.name)) {
154
- this.log(`模块 ${module2.name} 已经注册过,将被覆盖`, "warn");
160
+ registerModule(module, options) {
161
+ if (this.modules.has(module.name)) {
162
+ this.log(`模块 ${module.name} 已经注册过,将被覆盖`, 'warn');
155
163
  }
156
- if (options == null ? void 0 : options.dependencies) {
164
+
165
+ // 检查依赖模块
166
+ if (options?.dependencies) {
157
167
  for (const dep of options.dependencies) {
158
168
  if (!this.modules.has(dep)) {
159
- throw new Error(`注册模块 ${module2.name} 失败:缺少依赖模块 ${dep}`);
169
+ throw new Error(`注册模块 ${module.name} 失败:缺少依赖模块 ${dep}`);
160
170
  }
161
171
  }
162
172
  }
163
- if (options == null ? void 0 : options.plugins) {
173
+
174
+ // 检查依赖插件
175
+ if (options?.plugins) {
164
176
  for (const plugin of options.plugins) {
165
177
  if (!this.plugins.has(plugin)) {
166
- throw new Error(
167
- `注册模块 ${module2.name} 失败:缺少依赖插件 ${plugin}`
168
- );
178
+ throw new Error(`注册模块 ${module.name} 失败:缺少依赖插件 ${plugin}`);
169
179
  }
170
180
  }
171
181
  }
172
- const { proxy } = (0, import_createStore.createStore)(
173
- (options == null ? void 0 : options.initialState) || {},
174
- module2.name,
175
- (path, value) => {
176
- console.log("core 检测到模块值更新", module2.name, path, value);
177
- this.effects.emit(`${module2.name}:changed`, { path, value });
178
- if (module2.storeChange)
179
- module2.storeChange(path, value);
180
- }
181
- );
182
- this.stores.set(module2.name, proxy);
182
+ // 预先给模块初始化值系统
183
+ const {
184
+ proxy
185
+ } = (0, _createStore.createStore)(options?.initialState || {}, module.name, (path, value) => {
186
+ this.effects.emit(`${module.name}:changed`, {
187
+ path,
188
+ value
189
+ });
190
+ if (module.storeChange) module.storeChange(path, value);
191
+ });
192
+ this.stores.set(module.name, proxy);
193
+ // 初始化模块
183
194
  try {
184
- const result = module2.initialize(this, { store: proxy, ...options });
195
+ const result = module.initialize(this, {
196
+ store: proxy,
197
+ ...options
198
+ });
185
199
  if (result instanceof Promise) {
186
- result.catch((err) => {
187
- this.log(`模块 ${module2.name} 初始化失败: ${err.message}`, "error");
200
+ result.catch(err => {
201
+ this.log(`模块 ${module.name} 初始化失败: ${err.message}`, 'error');
188
202
  throw err;
189
203
  });
190
204
  }
191
- this.modules.set(module2.name, module2);
192
- this.log(`模块 ${module2.name} v${module2.version} 注册成功`);
205
+ this.modules.set(module.name, module);
206
+ this.log(`模块 ${module.name} v${module.version} 注册成功`);
193
207
  } catch (error) {
194
- this.log(`模块 ${module2.name} 初始化过程中出错: ${error}`, "error");
208
+ this.log(`模块 ${module.name} 初始化过程中出错: ${error}`, 'error');
195
209
  throw error;
196
210
  }
197
211
  }
198
- unregisterModule(module2) {
199
- this.stores.delete(module2.name);
200
- this.modules.delete(module2.name);
212
+ unregisterModule(module) {
213
+ this.stores.delete(module.name);
214
+ this.modules.delete(module.name);
201
215
  }
202
216
  getModule(name) {
203
217
  return this.modules.get(name) || null;
204
218
  }
205
219
  getModuleExports(name) {
206
- const module2 = this.modules.get(name);
207
- return (module2 == null ? void 0 : module2.exports) || null;
220
+ const module = this.modules.get(name);
221
+ return module?.exports || null;
208
222
  }
209
223
  hasModule(name) {
210
224
  return this.modules.has(name);
211
225
  }
226
+
212
227
  /** 返回当前已注册模块名,供宿主在切换店铺等生命周期中定向清理运行态。 */
213
228
  getModuleNames() {
214
229
  return Array.from(this.modules.keys());
215
230
  }
231
+
216
232
  // 销毁方法
217
233
  async destroy() {
218
- for (const [name, module2] of this.modules.entries()) {
219
- if (module2.destroy) {
234
+ // 先销毁模块
235
+ for (const [name, module] of this.modules.entries()) {
236
+ if (module.destroy) {
220
237
  try {
221
- await Promise.resolve(module2.destroy());
238
+ await Promise.resolve(module.destroy());
222
239
  this.log(`模块 ${name} 已销毁`);
223
240
  } catch (error) {
224
- this.log(`销毁模块 ${name} 时出错: ${error}`, "error");
241
+ this.log(`销毁模块 ${name} 时出错: ${error}`, 'error');
225
242
  }
226
243
  }
227
244
  }
228
245
  this.modules.clear();
246
+
247
+ // 再销毁插件
229
248
  for (const [name, plugin] of this.plugins.entries()) {
230
249
  if (plugin.destroy) {
231
250
  try {
232
251
  await Promise.resolve(plugin.destroy());
233
252
  this.log(`插件 ${name} 已销毁`);
234
253
  } catch (error) {
235
- this.log(`销毁插件 ${name} 时出错: ${error}`, "error");
254
+ this.log(`销毁插件 ${name} 时出错: ${error}`, 'error');
236
255
  }
237
256
  }
238
257
  }
239
258
  this.plugins.clear();
240
- this.log("PisellOS 核心已销毁");
259
+ this.log('PisellOS 核心已销毁');
241
260
  }
242
261
  setContext(ctx) {
243
- this.context = { ...this.context, ...ctx };
262
+ this.context = {
263
+ ...this.context,
264
+ ...ctx
265
+ };
244
266
  this.log(`上下文已更新: ${JSON.stringify(Object.keys(ctx))}`);
245
267
  }
268
+
246
269
  /**
247
270
  * 验证上下文参数
248
271
  */
249
272
  validateContext(config) {
250
273
  for (const rule of config.validations) {
251
274
  const value = this.context[rule.name];
252
- if (rule.required && (value === void 0 || value === null)) {
253
- this.log(
254
- `模块 ${config.name} 缺少必需的上下文参数: ${rule.name}`,
255
- "error"
256
- );
275
+
276
+ // 检查必需参数
277
+ if (rule.required && (value === undefined || value === null)) {
278
+ this.log(`模块 ${config.name} 缺少必需的上下文参数: ${rule.name}`, 'error');
257
279
  return false;
258
280
  }
259
- if (rule.validate && value !== void 0 && value !== null) {
281
+
282
+ // 执行自定义验证
283
+ if (rule.validate && value !== undefined && value !== null) {
260
284
  if (!rule.validate(value)) {
261
- this.log(
262
- `模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || "验证失败"}`,
263
- "error"
264
- );
285
+ this.log(`模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || '验证失败'}`, 'error');
265
286
  return false;
266
287
  }
267
288
  }
268
289
  }
269
290
  return true;
270
291
  }
271
- };
272
- var core_default = PisellOSCore;
273
- // Annotate the CommonJS export names for ESM import in node:
274
- 0 && (module.exports = {
275
- PisellOSCore
276
- });
292
+ }
293
+ exports.PisellOSCore = PisellOSCore;
294
+ var _default = exports.default = PisellOSCore;
@@ -1,93 +1,82 @@
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/effects/index.ts
20
- var effects_exports = {};
21
- __export(effects_exports, {
22
- EffectsManager: () => EffectsManager
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(effects_exports);
25
- var EffectsManager = class {
26
- constructor() {
27
- this.listeners = /* @__PURE__ */ new Map();
28
- }
6
+ exports.EffectsManager = void 0;
7
+ // 取消监听函数类型
8
+
9
+ class EffectsManager {
10
+ listeners = new Map();
29
11
  on(event, callback) {
30
- var _a;
31
- if (!this.listeners.has(event))
32
- this.listeners.set(event, /* @__PURE__ */ new Set());
33
- (_a = this.listeners.get(event)) == null ? void 0 : _a.add(callback);
12
+ if (!this.listeners.has(event)) this.listeners.set(event, new Set());
13
+ this.listeners.get(event)?.add(callback);
14
+
15
+ // 返回取消函数
34
16
  return () => {
35
17
  this.off(event, callback);
36
18
  };
37
19
  }
20
+
38
21
  // 设置单例监听器,只能存在一个,新的会替换旧的
39
22
  only(event, callback) {
40
- var _a, _b;
23
+ // 清除该事件的所有现有监听器
41
24
  if (this.listeners.has(event)) {
42
- (_a = this.listeners.get(event)) == null ? void 0 : _a.clear();
25
+ this.listeners.get(event)?.clear();
43
26
  } else {
44
- this.listeners.set(event, /* @__PURE__ */ new Set());
27
+ this.listeners.set(event, new Set());
45
28
  }
46
- (_b = this.listeners.get(event)) == null ? void 0 : _b.add(callback);
29
+
30
+ // 添加新的监听器
31
+ this.listeners.get(event)?.add(callback);
32
+
33
+ // 返回取消函数
47
34
  return () => {
48
35
  this.off(event, callback);
49
36
  };
50
37
  }
51
38
  off(event, callback) {
52
- var _a;
53
- (_a = this.listeners.get(event)) == null ? void 0 : _a.delete(callback);
39
+ this.listeners.get(event)?.delete(callback);
54
40
  }
41
+
55
42
  // 模块销毁时,删除所有以模块名开头的监听
56
- offByModuleDestroy(module2) {
57
- Array.from(this.listeners.keys()).forEach((item) => {
58
- if (item.startsWith(module2)) {
43
+ offByModuleDestroy(module) {
44
+ Array.from(this.listeners.keys()).forEach(item => {
45
+ if (item.startsWith(module)) {
59
46
  this.listeners.delete(item);
60
47
  }
61
48
  });
62
49
  }
63
50
  once(event, callback) {
64
- const wrapper = async (payload) => {
51
+ const wrapper = async payload => {
65
52
  await callback(payload);
66
53
  this.off(event, wrapper);
67
54
  };
55
+
56
+ // 调用修改后的on方法,它会返回取消函数
68
57
  return this.on(event, wrapper);
69
58
  }
70
59
  async emit(event, payload) {
71
60
  const callbacks = this.listeners.get(event);
72
- if (!callbacks)
73
- return { status: true, data: [] };
61
+ if (!callbacks) return {
62
+ status: true,
63
+ data: []
64
+ };
74
65
  const res = [];
75
- await Promise.all(
76
- Array.from(callbacks).reverse().map(async (cb) => {
77
- const result = await cb(payload);
78
- if (result !== void 0 && typeof result === "object" && "status" in result) {
79
- res.push(result);
80
- }
81
- })
82
- );
83
- const isAllPass = res.every((r) => (r == null ? void 0 : r.status) !== false);
84
- return { status: isAllPass, data: res };
66
+ await Promise.all(Array.from(callbacks).reverse().map(async cb => {
67
+ const result = await cb(payload);
68
+ if (result !== undefined && typeof result === 'object' && 'status' in result) {
69
+ res.push(result);
70
+ }
71
+ }));
72
+ const isAllPass = res.every(r => r?.status !== false);
73
+ return {
74
+ status: isAllPass,
75
+ data: res
76
+ };
85
77
  }
86
78
  clear() {
87
79
  this.listeners.clear();
88
80
  }
89
- };
90
- // Annotate the CommonJS export names for ESM import in node:
91
- 0 && (module.exports = {
92
- EffectsManager
93
- });
81
+ }
82
+ exports.EffectsManager = EffectsManager;