@pisell/pisellos 0.0.566 → 0.0.568
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.
- package/dist/core/index.js +6 -9
- package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +1 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +14 -41
- package/dist/modules/Payment/index.js +142 -270
- package/dist/modules/Payment/walletpass.js +4 -5
- package/dist/modules/Rules/index.js +0 -7
- package/dist/modules/SalesSummary/utils.js +4 -2
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/modules/Summary/utils.js +2 -2
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +88 -121
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/products/index.js +29 -49
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +32 -40
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +5 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -246
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.d.ts +5 -0
- package/dist/solution/VenueBooking/index.js +364 -327
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +130 -131
- package/lib/effects/index.js +46 -57
- package/lib/index.js +92 -53
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
- package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
- package/lib/model/strategy/adapter/promotion/examples.js +139 -159
- package/lib/model/strategy/adapter/promotion/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/type.js +199 -35
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +652 -402
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +22 -45
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +306 -241
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +72 -78
- package/lib/modules/Cart/utils/changePrice.js +26 -62
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +216 -153
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +117 -113
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +63 -74
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +332 -320
- package/lib/modules/Order/types.js +24 -33
- package/lib/modules/Order/utils.js +350 -284
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +566 -432
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +216 -107
- package/lib/modules/Payment/utils.js +50 -47
- package/lib/modules/Payment/walletpass.js +221 -203
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +111 -110
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +60 -82
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/Rules/index.js +1172 -872
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +59 -68
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +178 -193
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
- package/lib/modules/Schedule/index.js +97 -107
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -70
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +782 -429
- package/lib/modules/index.js +212 -57
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +882 -623
- package/lib/server/modules/index.js +85 -59
- package/lib/server/modules/menu/index.js +146 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +195 -231
- package/lib/server/modules/order/types.js +107 -32
- package/lib/server/modules/order/utils/filterBookings.js +174 -140
- package/lib/server/modules/order/utils/filterOrders.js +89 -60
- package/lib/server/modules/products/index.js +430 -335
- package/lib/server/modules/products/types.js +41 -34
- package/lib/server/modules/quotation/index.js +76 -77
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +216 -187
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +134 -119
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1530 -1343
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +147 -122
- package/lib/solution/BookingTicket/types.js +38 -64
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
- package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +227 -158
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +218 -200
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +803 -840
- package/lib/solution/ScanOrder/types.js +34 -34
- package/lib/solution/ScanOrder/utils.js +372 -331
- package/lib/solution/ShopDiscount/index.js +230 -236
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +309 -172
- package/lib/solution/VenueBooking/index.d.ts +5 -0
- package/lib/solution/VenueBooking/index.js +886 -929
- package/lib/solution/VenueBooking/types.js +20 -40
- package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
- package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +102 -37
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
package/dist/utils/task.js
CHANGED
|
@@ -94,7 +94,7 @@ var Tasks = /*#__PURE__*/function () {
|
|
|
94
94
|
// 遍历任务队列
|
|
95
95
|
case 6:
|
|
96
96
|
if (!(this.taskQueue.length > 0)) {
|
|
97
|
-
_context.next =
|
|
97
|
+
_context.next = 29;
|
|
98
98
|
break;
|
|
99
99
|
}
|
|
100
100
|
// 获取任务,但是不删除
|
|
@@ -109,7 +109,7 @@ var Tasks = /*#__PURE__*/function () {
|
|
|
109
109
|
// 获取任务对应的action
|
|
110
110
|
action = this.actions.get(task.type); // 如果找到对应的action,则执行
|
|
111
111
|
if (!action) {
|
|
112
|
-
_context.next =
|
|
112
|
+
_context.next = 26;
|
|
113
113
|
break;
|
|
114
114
|
}
|
|
115
115
|
_context.prev = 13;
|
|
@@ -118,36 +118,33 @@ var Tasks = /*#__PURE__*/function () {
|
|
|
118
118
|
uuid: task === null || task === void 0 ? void 0 : task.uuid
|
|
119
119
|
}));
|
|
120
120
|
case 16:
|
|
121
|
-
|
|
122
|
-
_context.next = 22;
|
|
121
|
+
_context.next = 21;
|
|
123
122
|
break;
|
|
124
|
-
case
|
|
125
|
-
_context.prev =
|
|
123
|
+
case 18:
|
|
124
|
+
_context.prev = 18;
|
|
126
125
|
_context.t0 = _context["catch"](13);
|
|
127
126
|
console.error('task_error>>>>>>>', _context.t0);
|
|
128
|
-
case
|
|
129
|
-
_context.prev =
|
|
127
|
+
case 21:
|
|
128
|
+
_context.prev = 21;
|
|
130
129
|
// 将任务删除
|
|
131
130
|
_task = this.taskQueue.shift();
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
_context.next = 30;
|
|
131
|
+
return _context.finish(21);
|
|
132
|
+
case 24:
|
|
133
|
+
_context.next = 27;
|
|
136
134
|
break;
|
|
137
|
-
case
|
|
135
|
+
case 26:
|
|
138
136
|
// 如果找不到对应的action,则删除任务
|
|
139
137
|
_task2 = this.taskQueue.shift();
|
|
140
|
-
|
|
141
|
-
case 30:
|
|
138
|
+
case 27:
|
|
142
139
|
_context.next = 6;
|
|
143
140
|
break;
|
|
144
|
-
case
|
|
141
|
+
case 29:
|
|
145
142
|
this.isRunning = false;
|
|
146
|
-
case
|
|
143
|
+
case 30:
|
|
147
144
|
case "end":
|
|
148
145
|
return _context.stop();
|
|
149
146
|
}
|
|
150
|
-
}, _callee, this, [[13,
|
|
147
|
+
}, _callee, this, [[13, 18, 21, 24]]);
|
|
151
148
|
}));
|
|
152
149
|
function run() {
|
|
153
150
|
return _run.apply(this, arguments);
|
package/dist/utils/watch.js
CHANGED
|
@@ -203,7 +203,6 @@ var Watch = /*#__PURE__*/function () {
|
|
|
203
203
|
key: "getLastEnableEventKey",
|
|
204
204
|
value: function getLastEnableEventKey(watchKey) {
|
|
205
205
|
var enableList = this.enableListMap.get(watchKey);
|
|
206
|
-
console.log('enableList', enableList);
|
|
207
206
|
if (!enableList) {
|
|
208
207
|
return undefined;
|
|
209
208
|
}
|
package/lib/apis/picoding.js
CHANGED
package/lib/core/index.js
CHANGED
|
@@ -1,116 +1,101 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
__export(core_exports, {
|
|
32
|
-
PisellOSCore: () => PisellOSCore,
|
|
33
|
-
default: () => core_default
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
34
5
|
});
|
|
35
|
-
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
|
|
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
|
+
|
|
40
24
|
constructor(options) {
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
56
|
-
options.plugins.forEach(
|
|
35
|
+
if (options?.plugins) {
|
|
36
|
+
options.plugins.forEach(item => {
|
|
57
37
|
this.registerPlugin(item.plugin, item.options);
|
|
58
38
|
});
|
|
59
39
|
}
|
|
60
|
-
if (options
|
|
61
|
-
options.modules.forEach(
|
|
40
|
+
if (options?.modules) {
|
|
41
|
+
options.modules.forEach(item => {
|
|
62
42
|
this.registerModule(item.module, item.options);
|
|
63
43
|
});
|
|
64
44
|
}
|
|
65
|
-
this.log(
|
|
45
|
+
this.log('[PisellOS] 核心初始化完成');
|
|
66
46
|
}
|
|
47
|
+
|
|
67
48
|
/**
|
|
68
49
|
* 初始化 Server(公开方法,需要外部显式调用并等待)
|
|
69
50
|
* Server 配置从构造函数传入的 options.server 中获取
|
|
70
51
|
*/
|
|
71
52
|
async initializeServer(options) {
|
|
53
|
+
// 检查是否已经初始化
|
|
72
54
|
if (this.server) {
|
|
73
|
-
this.log(
|
|
55
|
+
this.log('Server 已经初始化,跳过重复初始化', 'warn');
|
|
74
56
|
return;
|
|
75
57
|
}
|
|
58
|
+
|
|
59
|
+
// 检查是否有 Server 配置
|
|
76
60
|
if (!this.serverOptions) {
|
|
77
|
-
this.log(
|
|
61
|
+
this.log('未提供 Server 配置,无法初始化', 'warn');
|
|
78
62
|
return;
|
|
79
63
|
}
|
|
80
64
|
try {
|
|
81
|
-
|
|
65
|
+
// 动态导入 Server 类以避免循环依赖
|
|
66
|
+
const ServerModule = await Promise.resolve().then(() => _interopRequireWildcard(require("../server")));
|
|
82
67
|
const Server = ServerModule.default;
|
|
68
|
+
|
|
69
|
+
// 创建 Server 实例
|
|
83
70
|
this.server = new Server(this);
|
|
84
|
-
this.log(
|
|
71
|
+
this.log('Server 实例已创建');
|
|
72
|
+
|
|
73
|
+
// 初始化模块并预加载数据
|
|
85
74
|
if (this.serverOptions.modules) {
|
|
86
|
-
await this.server.initialize(
|
|
87
|
-
this.serverOptions.modules,
|
|
88
|
-
this.serverOptions.autoInitData !== false,
|
|
89
|
-
options
|
|
90
|
-
);
|
|
75
|
+
await this.server.initialize(this.serverOptions.modules, this.serverOptions.autoInitData !== false, options);
|
|
91
76
|
}
|
|
92
|
-
|
|
93
|
-
this.log("[PisellOS] Server 初始化完成");
|
|
77
|
+
this.log('[PisellOS] Server 初始化完成');
|
|
94
78
|
} catch (error) {
|
|
95
|
-
console.error(
|
|
96
|
-
this.log(`Server 初始化失败: ${error}`,
|
|
79
|
+
console.error('[PisellOS] ❌ Server 初始化失败:', error);
|
|
80
|
+
this.log(`Server 初始化失败: ${error}`, 'error');
|
|
97
81
|
throw error;
|
|
98
82
|
}
|
|
99
83
|
}
|
|
84
|
+
|
|
100
85
|
// 日志方法
|
|
101
|
-
log(message, level =
|
|
102
|
-
if (!this.debug && level ===
|
|
86
|
+
log(message, level = 'info') {
|
|
87
|
+
if (!this.debug && level === 'info') {
|
|
103
88
|
return;
|
|
104
89
|
}
|
|
105
|
-
const prefix =
|
|
90
|
+
const prefix = '[PisellOS]';
|
|
106
91
|
switch (level) {
|
|
107
|
-
case
|
|
108
|
-
console.log(`${prefix} ${message}`);
|
|
92
|
+
case 'info':
|
|
109
93
|
break;
|
|
110
|
-
case
|
|
111
|
-
console.log
|
|
94
|
+
case 'warn':
|
|
95
|
+
// 使用 console.log 避免显示堆栈跟踪,提升性能
|
|
96
|
+
|
|
112
97
|
break;
|
|
113
|
-
case
|
|
98
|
+
case 'error':
|
|
114
99
|
console.error(`${prefix} ${message}`);
|
|
115
100
|
break;
|
|
116
101
|
}
|
|
@@ -118,27 +103,31 @@ var PisellOSCore = class {
|
|
|
118
103
|
// 插件相关方法
|
|
119
104
|
registerPlugin(plugin, options) {
|
|
120
105
|
if (this.plugins.has(plugin.name)) {
|
|
121
|
-
this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`,
|
|
106
|
+
this.log(`插件 ${plugin.name} 已经注册过,将被覆盖`, 'warn');
|
|
122
107
|
}
|
|
123
|
-
|
|
108
|
+
|
|
109
|
+
// 检查依赖
|
|
110
|
+
if (options?.dependencies) {
|
|
124
111
|
for (const dep of options.dependencies) {
|
|
125
112
|
if (!this.plugins.has(dep)) {
|
|
126
113
|
throw new Error(`注册插件 ${plugin.name} 失败:缺少依赖插件 ${dep}`);
|
|
127
114
|
}
|
|
128
115
|
}
|
|
129
116
|
}
|
|
117
|
+
|
|
118
|
+
// 初始化插件
|
|
130
119
|
try {
|
|
131
120
|
const result = plugin.initialize();
|
|
132
121
|
if (result instanceof Promise) {
|
|
133
|
-
result.catch(
|
|
134
|
-
this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`,
|
|
122
|
+
result.catch(err => {
|
|
123
|
+
this.log(`插件 ${plugin.name} 初始化失败: ${err.message}`, 'error');
|
|
135
124
|
throw err;
|
|
136
125
|
});
|
|
137
126
|
}
|
|
138
127
|
this.plugins.set(plugin.name, plugin);
|
|
139
128
|
this.log(`插件 ${plugin.name} v${plugin.version} 注册成功`);
|
|
140
129
|
} catch (error) {
|
|
141
|
-
this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`,
|
|
130
|
+
this.log(`插件 ${plugin.name} 初始化过程中出错: ${error}`, 'error');
|
|
142
131
|
throw error;
|
|
143
132
|
}
|
|
144
133
|
}
|
|
@@ -148,125 +137,135 @@ var PisellOSCore = class {
|
|
|
148
137
|
hasPlugin(name) {
|
|
149
138
|
return this.plugins.has(name);
|
|
150
139
|
}
|
|
140
|
+
|
|
151
141
|
// 模块相关方法
|
|
152
|
-
registerModule(
|
|
153
|
-
if (this.modules.has(
|
|
154
|
-
this.log(`模块 ${
|
|
142
|
+
registerModule(module, options) {
|
|
143
|
+
if (this.modules.has(module.name)) {
|
|
144
|
+
this.log(`模块 ${module.name} 已经注册过,将被覆盖`, 'warn');
|
|
155
145
|
}
|
|
156
|
-
|
|
146
|
+
|
|
147
|
+
// 检查依赖模块
|
|
148
|
+
if (options?.dependencies) {
|
|
157
149
|
for (const dep of options.dependencies) {
|
|
158
150
|
if (!this.modules.has(dep)) {
|
|
159
|
-
throw new Error(`注册模块 ${
|
|
151
|
+
throw new Error(`注册模块 ${module.name} 失败:缺少依赖模块 ${dep}`);
|
|
160
152
|
}
|
|
161
153
|
}
|
|
162
154
|
}
|
|
163
|
-
|
|
155
|
+
|
|
156
|
+
// 检查依赖插件
|
|
157
|
+
if (options?.plugins) {
|
|
164
158
|
for (const plugin of options.plugins) {
|
|
165
159
|
if (!this.plugins.has(plugin)) {
|
|
166
|
-
throw new Error(
|
|
167
|
-
`注册模块 ${module2.name} 失败:缺少依赖插件 ${plugin}`
|
|
168
|
-
);
|
|
160
|
+
throw new Error(`注册模块 ${module.name} 失败:缺少依赖插件 ${plugin}`);
|
|
169
161
|
}
|
|
170
162
|
}
|
|
171
163
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
);
|
|
182
|
-
this.stores.set(
|
|
164
|
+
// 预先给模块初始化值系统
|
|
165
|
+
const {
|
|
166
|
+
proxy
|
|
167
|
+
} = (0, _createStore.createStore)(options?.initialState || {}, module.name, (path, value) => {
|
|
168
|
+
this.effects.emit(`${module.name}:changed`, {
|
|
169
|
+
path,
|
|
170
|
+
value
|
|
171
|
+
});
|
|
172
|
+
if (module.storeChange) module.storeChange(path, value);
|
|
173
|
+
});
|
|
174
|
+
this.stores.set(module.name, proxy);
|
|
175
|
+
// 初始化模块
|
|
183
176
|
try {
|
|
184
|
-
const result =
|
|
177
|
+
const result = module.initialize(this, {
|
|
178
|
+
store: proxy,
|
|
179
|
+
...options
|
|
180
|
+
});
|
|
185
181
|
if (result instanceof Promise) {
|
|
186
|
-
result.catch(
|
|
187
|
-
this.log(`模块 ${
|
|
182
|
+
result.catch(err => {
|
|
183
|
+
this.log(`模块 ${module.name} 初始化失败: ${err.message}`, 'error');
|
|
188
184
|
throw err;
|
|
189
185
|
});
|
|
190
186
|
}
|
|
191
|
-
this.modules.set(
|
|
192
|
-
this.log(`模块 ${
|
|
187
|
+
this.modules.set(module.name, module);
|
|
188
|
+
this.log(`模块 ${module.name} v${module.version} 注册成功`);
|
|
193
189
|
} catch (error) {
|
|
194
|
-
this.log(`模块 ${
|
|
190
|
+
this.log(`模块 ${module.name} 初始化过程中出错: ${error}`, 'error');
|
|
195
191
|
throw error;
|
|
196
192
|
}
|
|
197
193
|
}
|
|
198
|
-
unregisterModule(
|
|
199
|
-
this.stores.delete(
|
|
200
|
-
this.modules.delete(
|
|
194
|
+
unregisterModule(module) {
|
|
195
|
+
this.stores.delete(module.name);
|
|
196
|
+
this.modules.delete(module.name);
|
|
201
197
|
}
|
|
202
198
|
getModule(name) {
|
|
203
199
|
return this.modules.get(name) || null;
|
|
204
200
|
}
|
|
205
201
|
getModuleExports(name) {
|
|
206
|
-
const
|
|
207
|
-
return
|
|
202
|
+
const module = this.modules.get(name);
|
|
203
|
+
return module?.exports || null;
|
|
208
204
|
}
|
|
209
205
|
hasModule(name) {
|
|
210
206
|
return this.modules.has(name);
|
|
211
207
|
}
|
|
208
|
+
|
|
212
209
|
// 销毁方法
|
|
213
210
|
async destroy() {
|
|
214
|
-
|
|
215
|
-
|
|
211
|
+
// 先销毁模块
|
|
212
|
+
for (const [name, module] of this.modules.entries()) {
|
|
213
|
+
if (module.destroy) {
|
|
216
214
|
try {
|
|
217
|
-
await Promise.resolve(
|
|
215
|
+
await Promise.resolve(module.destroy());
|
|
218
216
|
this.log(`模块 ${name} 已销毁`);
|
|
219
217
|
} catch (error) {
|
|
220
|
-
this.log(`销毁模块 ${name} 时出错: ${error}`,
|
|
218
|
+
this.log(`销毁模块 ${name} 时出错: ${error}`, 'error');
|
|
221
219
|
}
|
|
222
220
|
}
|
|
223
221
|
}
|
|
224
222
|
this.modules.clear();
|
|
223
|
+
|
|
224
|
+
// 再销毁插件
|
|
225
225
|
for (const [name, plugin] of this.plugins.entries()) {
|
|
226
226
|
if (plugin.destroy) {
|
|
227
227
|
try {
|
|
228
228
|
await Promise.resolve(plugin.destroy());
|
|
229
229
|
this.log(`插件 ${name} 已销毁`);
|
|
230
230
|
} catch (error) {
|
|
231
|
-
this.log(`销毁插件 ${name} 时出错: ${error}`,
|
|
231
|
+
this.log(`销毁插件 ${name} 时出错: ${error}`, 'error');
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
this.plugins.clear();
|
|
236
|
-
this.log(
|
|
236
|
+
this.log('PisellOS 核心已销毁');
|
|
237
237
|
}
|
|
238
238
|
setContext(ctx) {
|
|
239
|
-
this.context = {
|
|
239
|
+
this.context = {
|
|
240
|
+
...this.context,
|
|
241
|
+
...ctx
|
|
242
|
+
};
|
|
240
243
|
this.log(`上下文已更新: ${JSON.stringify(Object.keys(ctx))}`);
|
|
241
244
|
}
|
|
245
|
+
|
|
242
246
|
/**
|
|
243
247
|
* 验证上下文参数
|
|
244
248
|
*/
|
|
245
249
|
validateContext(config) {
|
|
246
250
|
for (const rule of config.validations) {
|
|
247
251
|
const value = this.context[rule.name];
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
);
|
|
252
|
+
|
|
253
|
+
// 检查必需参数
|
|
254
|
+
if (rule.required && (value === undefined || value === null)) {
|
|
255
|
+
this.log(`模块 ${config.name} 缺少必需的上下文参数: ${rule.name}`, 'error');
|
|
253
256
|
return false;
|
|
254
257
|
}
|
|
255
|
-
|
|
258
|
+
|
|
259
|
+
// 执行自定义验证
|
|
260
|
+
if (rule.validate && value !== undefined && value !== null) {
|
|
256
261
|
if (!rule.validate(value)) {
|
|
257
|
-
this.log(
|
|
258
|
-
`模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || "验证失败"}`,
|
|
259
|
-
"error"
|
|
260
|
-
);
|
|
262
|
+
this.log(`模块 ${config.name} 上下文参数验证失败: ${rule.name} - ${rule.message || '验证失败'}`, 'error');
|
|
261
263
|
return false;
|
|
262
264
|
}
|
|
263
265
|
}
|
|
264
266
|
}
|
|
265
267
|
return true;
|
|
266
268
|
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
0 && (module.exports = {
|
|
271
|
-
PisellOSCore
|
|
272
|
-
});
|
|
269
|
+
}
|
|
270
|
+
exports.PisellOSCore = PisellOSCore;
|
|
271
|
+
var _default = exports.default = PisellOSCore;
|
package/lib/effects/index.js
CHANGED
|
@@ -1,93 +1,82 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
__export(effects_exports, {
|
|
22
|
-
EffectsManager: () => EffectsManager
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
23
5
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
6
|
+
exports.EffectsManager = void 0;
|
|
7
|
+
// 取消监听函数类型
|
|
8
|
+
|
|
9
|
+
class EffectsManager {
|
|
10
|
+
listeners = new Map();
|
|
29
11
|
on(event, callback) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
23
|
+
// 清除该事件的所有现有监听器
|
|
41
24
|
if (this.listeners.has(event)) {
|
|
42
|
-
|
|
25
|
+
this.listeners.get(event)?.clear();
|
|
43
26
|
} else {
|
|
44
|
-
this.listeners.set(event,
|
|
27
|
+
this.listeners.set(event, new Set());
|
|
45
28
|
}
|
|
46
|
-
|
|
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
|
-
|
|
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(
|
|
57
|
-
Array.from(this.listeners.keys()).forEach(
|
|
58
|
-
if (item.startsWith(
|
|
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
|
|
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
|
-
|
|
61
|
+
if (!callbacks) return {
|
|
62
|
+
status: true,
|
|
63
|
+
data: []
|
|
64
|
+
};
|
|
74
65
|
const res = [];
|
|
75
|
-
await Promise.all(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
91
|
-
0 && (module.exports = {
|
|
92
|
-
EffectsManager
|
|
93
|
-
});
|
|
81
|
+
}
|
|
82
|
+
exports.EffectsManager = EffectsManager;
|