@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
package/lib/core/index.js CHANGED
@@ -1,134 +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 {
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;
39
24
  constructor(options) {
40
- this.plugins = /* @__PURE__ */ new Map();
41
- this.modules = /* @__PURE__ */ new Map();
42
- this.stores = /* @__PURE__ */ new Map();
43
- this.effects = new import_effects.EffectsManager();
44
- this.debug = false;
45
- this.context = {};
46
- this.debug = (options == null ? void 0 : options.debug) || false;
47
- this.context = (options == null ? void 0 : options.context) || {};
48
- 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) {
49
30
  this.serverOptions = options.server;
50
31
  }
51
32
  this.initialize(options);
52
- console.log("constructor1234567890");
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
+
67
48
  /**
68
49
  * 仅预加载 Server 模块代码,不创建实例、不注册模块、不请求业务数据。
69
50
  * 导入失败会清空 Promise,正式 initializeServer 时仍可重新尝试。
70
51
  */
71
52
  async preloadServerModule() {
72
- if (this.server || !this.serverOptions)
73
- return;
53
+ if (this.server || !this.serverOptions) return;
74
54
  await this.loadServerModule();
75
55
  }
76
56
  loadServerModule() {
77
57
  if (!this.serverModulePromise) {
78
- this.serverModulePromise = import("../server").catch((error) => {
79
- this.serverModulePromise = void 0;
58
+ this.serverModulePromise = Promise.resolve().then(() => _interopRequireWildcard(require("../server"))).catch(error => {
59
+ this.serverModulePromise = undefined;
80
60
  throw error;
81
61
  });
82
62
  }
83
63
  return this.serverModulePromise;
84
64
  }
65
+
85
66
  /**
86
67
  * 初始化 Server(公开方法,需要外部显式调用并等待)
87
68
  * Server 配置从构造函数传入的 options.server 中获取
88
69
  */
89
70
  async initializeServer(options) {
71
+ // 检查是否已经初始化
90
72
  if (this.server) {
91
- this.log("Server 已经初始化,跳过重复初始化", "warn");
73
+ this.log('Server 已经初始化,跳过重复初始化', 'warn');
92
74
  return;
93
75
  }
76
+
77
+ // 检查是否有 Server 配置
94
78
  if (!this.serverOptions) {
95
- this.log("未提供 Server 配置,无法初始化", "warn");
79
+ this.log('未提供 Server 配置,无法初始化', 'warn');
96
80
  return;
97
81
  }
98
82
  try {
83
+ // 动态导入 Server 类以避免循环依赖
99
84
  const ServerModule = await this.loadServerModule();
100
85
  const Server = ServerModule.default;
86
+
87
+ // 创建 Server 实例
101
88
  this.server = new Server(this);
102
- this.log("Server 实例已创建");
89
+ this.log('Server 实例已创建');
90
+
91
+ // 初始化模块并预加载数据
103
92
  if (this.serverOptions.modules) {
104
- await this.server.initialize(
105
- this.serverOptions.modules,
106
- this.serverOptions.autoInitData !== false,
107
- options
108
- );
93
+ await this.server.initialize(this.serverOptions.modules, this.serverOptions.autoInitData !== false, options);
109
94
  }
110
- console.log("[PisellOS] Server 初始化完成,所有数据已预加载");
111
- this.log("[PisellOS] Server 初始化完成");
95
+ this.log('[PisellOS] Server 初始化完成');
112
96
  } catch (error) {
113
- console.error("[PisellOS] ❌ Server 初始化失败:", error);
114
- this.log(`Server 初始化失败: ${error}`, "error");
97
+ console.error('[PisellOS] ❌ Server 初始化失败:', error);
98
+ this.log(`Server 初始化失败: ${error}`, 'error');
115
99
  throw error;
116
100
  }
117
101
  }
102
+
118
103
  // 日志方法
119
- log(message, level = "info") {
120
- if (!this.debug && level === "info") {
104
+ log(message, level = 'info') {
105
+ if (!this.debug && level === 'info') {
121
106
  return;
122
107
  }
123
- const prefix = "[PisellOS]";
108
+ const prefix = '[PisellOS]';
124
109
  switch (level) {
125
- case "info":
126
- console.log(`${prefix} ${message}`);
110
+ case 'info':
127
111
  break;
128
- case "warn":
129
- console.log(`%c${prefix}%c ${message}`, "color: #f59e0b; font-weight: bold;", "color: #f59e0b;");
112
+ case 'warn':
113
+ // 使用 console.log 避免显示堆栈跟踪,提升性能
114
+
130
115
  break;
131
- case "error":
116
+ case 'error':
132
117
  console.error(`${prefix} ${message}`);
133
118
  break;
134
119
  }
@@ -136,27 +121,31 @@ var PisellOSCore = class {
136
121
  // 插件相关方法
137
122
  registerPlugin(plugin, options) {
138
123
  if (this.plugins.has(plugin.name)) {
139
- this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`, "warn");
124
+ this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`, 'warn');
140
125
  }
141
- if (options == null ? void 0 : options.dependencies) {
126
+
127
+ // 检查依赖
128
+ if (options?.dependencies) {
142
129
  for (const dep of options.dependencies) {
143
130
  if (!this.plugins.has(dep)) {
144
131
  throw new Error(`注册插件 ${plugin.name} 失败:缺少依赖插件 ${dep}`);
145
132
  }
146
133
  }
147
134
  }
135
+
136
+ // 初始化插件
148
137
  try {
149
138
  const result = plugin.initialize();
150
139
  if (result instanceof Promise) {
151
- result.catch((err) => {
152
- this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`, "error");
140
+ result.catch(err => {
141
+ this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`, 'error');
153
142
  throw err;
154
143
  });
155
144
  }
156
145
  this.plugins.set(plugin.name, plugin);
157
146
  this.log(`插件 ${plugin.name} v${plugin.version} 注册成功`);
158
147
  } catch (error) {
159
- this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`, "error");
148
+ this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`, 'error');
160
149
  throw error;
161
150
  }
162
151
  }
@@ -166,129 +155,140 @@ var PisellOSCore = class {
166
155
  hasPlugin(name) {
167
156
  return this.plugins.has(name);
168
157
  }
158
+
169
159
  // 模块相关方法
170
- registerModule(module2, options) {
171
- if (this.modules.has(module2.name)) {
172
- this.log(`模块 ${module2.name} 已经注册过,将被覆盖`, "warn");
160
+ registerModule(module, options) {
161
+ if (this.modules.has(module.name)) {
162
+ this.log(`模块 ${module.name} 已经注册过,将被覆盖`, 'warn');
173
163
  }
174
- if (options == null ? void 0 : options.dependencies) {
164
+
165
+ // 检查依赖模块
166
+ if (options?.dependencies) {
175
167
  for (const dep of options.dependencies) {
176
168
  if (!this.modules.has(dep)) {
177
- throw new Error(`注册模块 ${module2.name} 失败:缺少依赖模块 ${dep}`);
169
+ throw new Error(`注册模块 ${module.name} 失败:缺少依赖模块 ${dep}`);
178
170
  }
179
171
  }
180
172
  }
181
- if (options == null ? void 0 : options.plugins) {
173
+
174
+ // 检查依赖插件
175
+ if (options?.plugins) {
182
176
  for (const plugin of options.plugins) {
183
177
  if (!this.plugins.has(plugin)) {
184
- throw new Error(
185
- `注册模块 ${module2.name} 失败:缺少依赖插件 ${plugin}`
186
- );
178
+ throw new Error(`注册模块 ${module.name} 失败:缺少依赖插件 ${plugin}`);
187
179
  }
188
180
  }
189
181
  }
190
- const { proxy } = (0, import_createStore.createStore)(
191
- (options == null ? void 0 : options.initialState) || {},
192
- module2.name,
193
- (path, value) => {
194
- console.log("core 检测到模块值更新", module2.name, path, value);
195
- this.effects.emit(`${module2.name}:changed`, { path, value });
196
- if (module2.storeChange)
197
- module2.storeChange(path, value);
198
- }
199
- );
200
- 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
+ // 初始化模块
201
194
  try {
202
- const result = module2.initialize(this, { store: proxy, ...options });
195
+ const result = module.initialize(this, {
196
+ store: proxy,
197
+ ...options
198
+ });
203
199
  if (result instanceof Promise) {
204
- result.catch((err) => {
205
- this.log(`模块 ${module2.name} 初始化失败: ${err.message}`, "error");
200
+ result.catch(err => {
201
+ this.log(`模块 ${module.name} 初始化失败: ${err.message}`, 'error');
206
202
  throw err;
207
203
  });
208
204
  }
209
- this.modules.set(module2.name, module2);
210
- this.log(`模块 ${module2.name} v${module2.version} 注册成功`);
205
+ this.modules.set(module.name, module);
206
+ this.log(`模块 ${module.name} v${module.version} 注册成功`);
211
207
  } catch (error) {
212
- this.log(`模块 ${module2.name} 初始化过程中出错: ${error}`, "error");
208
+ this.log(`模块 ${module.name} 初始化过程中出错: ${error}`, 'error');
213
209
  throw error;
214
210
  }
215
211
  }
216
- unregisterModule(module2) {
217
- this.stores.delete(module2.name);
218
- this.modules.delete(module2.name);
212
+ unregisterModule(module) {
213
+ this.stores.delete(module.name);
214
+ this.modules.delete(module.name);
219
215
  }
220
216
  getModule(name) {
221
217
  return this.modules.get(name) || null;
222
218
  }
223
219
  getModuleExports(name) {
224
- const module2 = this.modules.get(name);
225
- return (module2 == null ? void 0 : module2.exports) || null;
220
+ const module = this.modules.get(name);
221
+ return module?.exports || null;
226
222
  }
227
223
  hasModule(name) {
228
224
  return this.modules.has(name);
229
225
  }
226
+
230
227
  /** 返回当前已注册模块名,供宿主在切换店铺等生命周期中定向清理运行态。 */
231
228
  getModuleNames() {
232
229
  return Array.from(this.modules.keys());
233
230
  }
231
+
234
232
  // 销毁方法
235
233
  async destroy() {
236
- for (const [name, module2] of this.modules.entries()) {
237
- if (module2.destroy) {
234
+ // 先销毁模块
235
+ for (const [name, module] of this.modules.entries()) {
236
+ if (module.destroy) {
238
237
  try {
239
- await Promise.resolve(module2.destroy());
238
+ await Promise.resolve(module.destroy());
240
239
  this.log(`模块 ${name} 已销毁`);
241
240
  } catch (error) {
242
- this.log(`销毁模块 ${name} 时出错: ${error}`, "error");
241
+ this.log(`销毁模块 ${name} 时出错: ${error}`, 'error');
243
242
  }
244
243
  }
245
244
  }
246
245
  this.modules.clear();
246
+
247
+ // 再销毁插件
247
248
  for (const [name, plugin] of this.plugins.entries()) {
248
249
  if (plugin.destroy) {
249
250
  try {
250
251
  await Promise.resolve(plugin.destroy());
251
252
  this.log(`插件 ${name} 已销毁`);
252
253
  } catch (error) {
253
- this.log(`销毁插件 ${name} 时出错: ${error}`, "error");
254
+ this.log(`销毁插件 ${name} 时出错: ${error}`, 'error');
254
255
  }
255
256
  }
256
257
  }
257
258
  this.plugins.clear();
258
- this.log("PisellOS 核心已销毁");
259
+ this.log('PisellOS 核心已销毁');
259
260
  }
260
261
  setContext(ctx) {
261
- this.context = { ...this.context, ...ctx };
262
+ this.context = {
263
+ ...this.context,
264
+ ...ctx
265
+ };
262
266
  this.log(`上下文已更新: ${JSON.stringify(Object.keys(ctx))}`);
263
267
  }
268
+
264
269
  /**
265
270
  * 验证上下文参数
266
271
  */
267
272
  validateContext(config) {
268
273
  for (const rule of config.validations) {
269
274
  const value = this.context[rule.name];
270
- if (rule.required && (value === void 0 || value === null)) {
271
- this.log(
272
- `模块 ${config.name} 缺少必需的上下文参数: ${rule.name}`,
273
- "error"
274
- );
275
+
276
+ // 检查必需参数
277
+ if (rule.required && (value === undefined || value === null)) {
278
+ this.log(`模块 ${config.name} 缺少必需的上下文参数: ${rule.name}`, 'error');
275
279
  return false;
276
280
  }
277
- if (rule.validate && value !== void 0 && value !== null) {
281
+
282
+ // 执行自定义验证
283
+ if (rule.validate && value !== undefined && value !== null) {
278
284
  if (!rule.validate(value)) {
279
- this.log(
280
- `模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || "验证失败"}`,
281
- "error"
282
- );
285
+ this.log(`模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || '验证失败'}`, 'error');
283
286
  return false;
284
287
  }
285
288
  }
286
289
  }
287
290
  return true;
288
291
  }
289
- };
290
- var core_default = PisellOSCore;
291
- // Annotate the CommonJS export names for ESM import in node:
292
- 0 && (module.exports = {
293
- PisellOSCore
294
- });
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;