bobe-shared 0.0.4
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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/bobe-shared.cjs.js +360 -0
- package/dist/bobe-shared.cjs.js.map +1 -0
- package/dist/bobe-shared.esm.js +348 -0
- package/dist/bobe-shared.esm.js.map +1 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.umd.js +366 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 smooth-cat
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __async = (__this, __arguments, generator) => {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
var fulfilled = (value) => {
|
|
22
|
+
try {
|
|
23
|
+
step(generator.next(value));
|
|
24
|
+
} catch (e) {
|
|
25
|
+
reject(e);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var rejected = (value) => {
|
|
29
|
+
try {
|
|
30
|
+
step(generator.throw(value));
|
|
31
|
+
} catch (e) {
|
|
32
|
+
reject(e);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
36
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const timestamp = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
|
|
40
|
+
var EventMode = /* @__PURE__ */ ((EventMode2) => {
|
|
41
|
+
EventMode2[EventMode2["Immediate"] = 0] = "Immediate";
|
|
42
|
+
EventMode2[EventMode2["Queue"] = 1] = "Queue";
|
|
43
|
+
return EventMode2;
|
|
44
|
+
})(EventMode || {});
|
|
45
|
+
var ProcessStatus = /* @__PURE__ */ ((ProcessStatus2) => {
|
|
46
|
+
ProcessStatus2[ProcessStatus2["None"] = 0] = "None";
|
|
47
|
+
ProcessStatus2[ProcessStatus2["Processing"] = 1] = "Processing";
|
|
48
|
+
ProcessStatus2[ProcessStatus2["Paused"] = 2] = "Paused";
|
|
49
|
+
return ProcessStatus2;
|
|
50
|
+
})(ProcessStatus || {});
|
|
51
|
+
const DefaultEventOpt = {
|
|
52
|
+
mode: 0 /* Immediate */
|
|
53
|
+
};
|
|
54
|
+
const ALL = "__ALL_KEY";
|
|
55
|
+
class BaseEvent {
|
|
56
|
+
constructor(opt = {}) {
|
|
57
|
+
this.opt = opt;
|
|
58
|
+
this.eventQueue = [];
|
|
59
|
+
this.status = 0 /* None */;
|
|
60
|
+
this.subMap = /* @__PURE__ */ new Map();
|
|
61
|
+
this.on = (type, fn) => {
|
|
62
|
+
if (type == null) type = ALL;
|
|
63
|
+
const suber = this.subMap.get(type) || /* @__PURE__ */ new Set();
|
|
64
|
+
suber.add(fn);
|
|
65
|
+
this.subMap.set(type, suber);
|
|
66
|
+
};
|
|
67
|
+
this.off = (type, fn) => {
|
|
68
|
+
const suber = this.subMap.get(type != null ? type : ALL);
|
|
69
|
+
if (!suber) return;
|
|
70
|
+
suber.delete(fn);
|
|
71
|
+
};
|
|
72
|
+
this.once = (type, fn) => {
|
|
73
|
+
fn["once"] = true;
|
|
74
|
+
this.on(type, fn);
|
|
75
|
+
};
|
|
76
|
+
this.promiseOnce = (type) => {
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
this.once(type, (...args) => {
|
|
79
|
+
resolve(args);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
this.setScheduler = (type, scheduler) => {
|
|
84
|
+
if (typeof type !== "string") {
|
|
85
|
+
this.scheduler = type;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const set = this.subMap.get(type) || /* @__PURE__ */ new Set();
|
|
89
|
+
set["scheduler"] = scheduler;
|
|
90
|
+
this.subMap.set(type, set);
|
|
91
|
+
};
|
|
92
|
+
// construct 会初始化为下面其中一种
|
|
93
|
+
this.emit = (type, ...args) => {
|
|
94
|
+
this.opt.mode === 0 /* Immediate */ ? this.emitImmediate(type, ...args) : this.emitQueue(type, ...args);
|
|
95
|
+
};
|
|
96
|
+
this.pause = () => this.status = 2 /* Paused */;
|
|
97
|
+
this.unPause = () => this.status = 0 /* None */;
|
|
98
|
+
this.start = () => {
|
|
99
|
+
this.status = 0 /* None */;
|
|
100
|
+
this.processQueue();
|
|
101
|
+
};
|
|
102
|
+
this.process = () => {
|
|
103
|
+
if (this.scheduler) {
|
|
104
|
+
return this.scheduler(this.recallScheduler);
|
|
105
|
+
}
|
|
106
|
+
return this.processQueue();
|
|
107
|
+
};
|
|
108
|
+
this.recallScheduler = () => {
|
|
109
|
+
this.scheduler(this.recallScheduler);
|
|
110
|
+
};
|
|
111
|
+
this.processQueue = () => {
|
|
112
|
+
if (this.status === 2 /* Paused */) return;
|
|
113
|
+
this.status = 1 /* Processing */;
|
|
114
|
+
let { type, args } = this.eventQueue.shift() || {};
|
|
115
|
+
if (type) {
|
|
116
|
+
const fns = this.subMap.get(type);
|
|
117
|
+
const allSub = this.subMap.get(ALL);
|
|
118
|
+
fns == null ? void 0 : fns.forEach((it) => this.callSub(it, fns, args));
|
|
119
|
+
allSub == null ? void 0 : allSub.forEach((it) => this.callSub(it, allSub, args));
|
|
120
|
+
if (this.eventQueue.length > 0) {
|
|
121
|
+
this.processQueue();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (this.status !== 2 /* Paused */) {
|
|
125
|
+
this.status = 0 /* None */;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
this.dispatchEvent = (iList) => {
|
|
129
|
+
iList.sort((a, b) => b - a);
|
|
130
|
+
iList.forEach((idx) => {
|
|
131
|
+
const [item] = this.eventQueue.splice(idx, 1);
|
|
132
|
+
const { type, args } = item || {};
|
|
133
|
+
if (type && args) {
|
|
134
|
+
this.emitImmediate(type, ...args);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
this.clear = () => {
|
|
139
|
+
this.subMap.clear();
|
|
140
|
+
this.eventQueue = [];
|
|
141
|
+
this.scheduler = void 0;
|
|
142
|
+
};
|
|
143
|
+
this.opt = __spreadValues(__spreadValues({}, DefaultEventOpt), opt);
|
|
144
|
+
}
|
|
145
|
+
callSub(it, fns, args) {
|
|
146
|
+
const doCall = (...args2) => {
|
|
147
|
+
it(...args2);
|
|
148
|
+
if (it["once"] === true) fns.delete(it);
|
|
149
|
+
};
|
|
150
|
+
const scheduler = it["scheduler"] || fns["scheduler"];
|
|
151
|
+
if (scheduler) {
|
|
152
|
+
scheduler(doCall, ...args);
|
|
153
|
+
} else {
|
|
154
|
+
it(...args);
|
|
155
|
+
if (it["once"] === true) fns.delete(it);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
emitImmediate(type, ...args) {
|
|
159
|
+
const fns = this.subMap.get(type);
|
|
160
|
+
const allSub = this.subMap.get(ALL);
|
|
161
|
+
fns == null ? void 0 : fns.forEach((it) => this.callSub(it, fns, args));
|
|
162
|
+
allSub == null ? void 0 : allSub.forEach((it) => this.callSub(it, allSub, args));
|
|
163
|
+
}
|
|
164
|
+
emitQueue(type, ...args) {
|
|
165
|
+
this.eventQueue.push({ type, args, time: timestamp() });
|
|
166
|
+
this.process();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
BaseEvent.a = 19;
|
|
170
|
+
class EventNode extends BaseEvent {
|
|
171
|
+
constructor() {
|
|
172
|
+
super({ mode: 1 /* Queue */ });
|
|
173
|
+
this.pipe = (type, ...fns) => {
|
|
174
|
+
const { firstNode, lastNode } = this.buildPip(fns);
|
|
175
|
+
this.on(type, (...args) => firstNode.emit("process", args));
|
|
176
|
+
return lastNode;
|
|
177
|
+
};
|
|
178
|
+
this.buildPip = (fns) => {
|
|
179
|
+
const startWithPipeNode = fns[0] instanceof PipeNode;
|
|
180
|
+
let firstNode;
|
|
181
|
+
let curNode = firstNode = startWithPipeNode ? fns[0] : new PipeNode();
|
|
182
|
+
let i = startWithPipeNode ? 1 : 0;
|
|
183
|
+
let toAdd = [];
|
|
184
|
+
while (i < fns.length) {
|
|
185
|
+
const it = fns[i];
|
|
186
|
+
if (!(it instanceof PipeNode)) {
|
|
187
|
+
toAdd.push(it);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
curNode.pipList = toAdd;
|
|
191
|
+
toAdd = [];
|
|
192
|
+
curNode.on("finish", (args) => it.emit("process", args));
|
|
193
|
+
curNode = it;
|
|
194
|
+
i++;
|
|
195
|
+
}
|
|
196
|
+
curNode.markLast();
|
|
197
|
+
curNode.pipList = toAdd;
|
|
198
|
+
return {
|
|
199
|
+
firstNode,
|
|
200
|
+
lastNode: curNode
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
this.preProcessMap = /* @__PURE__ */ new Map();
|
|
204
|
+
this.preProcess = (type, ...fns) => {
|
|
205
|
+
const { firstNode, lastNode } = this.buildPip(fns);
|
|
206
|
+
this.preProcessMap.set(type, [firstNode, lastNode]);
|
|
207
|
+
};
|
|
208
|
+
this.emit = (type, ...args) => {
|
|
209
|
+
const [firstNode, lastNode] = this.preProcessMap.get(type) || [];
|
|
210
|
+
if (firstNode && lastNode) {
|
|
211
|
+
lastNode.once("real-finish", (...args2) => {
|
|
212
|
+
this.eventQueue.push({ type, args: args2, time: timestamp() });
|
|
213
|
+
this.start();
|
|
214
|
+
});
|
|
215
|
+
this.pause();
|
|
216
|
+
firstNode.emit("process", args);
|
|
217
|
+
} else {
|
|
218
|
+
this.emitQueue(type, ...args);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
from(type, promise) {
|
|
223
|
+
if (promise) {
|
|
224
|
+
promise.then(
|
|
225
|
+
(value) => {
|
|
226
|
+
this.emit(type, value);
|
|
227
|
+
},
|
|
228
|
+
(err) => {
|
|
229
|
+
this.emit(type, err);
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
return (...args) => {
|
|
235
|
+
this.emit(type, ...args);
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
class PipeNode extends BaseEvent {
|
|
240
|
+
constructor() {
|
|
241
|
+
super({ mode: 1 /* Queue */ });
|
|
242
|
+
this.pipList = [];
|
|
243
|
+
this.onFinish = (fn) => {
|
|
244
|
+
this.on("real-finish", fn);
|
|
245
|
+
};
|
|
246
|
+
this.isLastNode = false;
|
|
247
|
+
this.markLast = () => this.isLastNode = true;
|
|
248
|
+
this.on("process", (args) => __async(this, null, function* () {
|
|
249
|
+
let res;
|
|
250
|
+
for (const pipeFn of this.pipList) {
|
|
251
|
+
try {
|
|
252
|
+
res = pipeFn(...args);
|
|
253
|
+
if (res instanceof Promise) {
|
|
254
|
+
res = yield res;
|
|
255
|
+
}
|
|
256
|
+
} catch (error) {
|
|
257
|
+
res = error;
|
|
258
|
+
}
|
|
259
|
+
args = [res];
|
|
260
|
+
}
|
|
261
|
+
if (this.isLastNode) {
|
|
262
|
+
this.emitImmediate("real-finish", ...args);
|
|
263
|
+
} else {
|
|
264
|
+
this.emitImmediate("finish", args);
|
|
265
|
+
}
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
class Queue {
|
|
271
|
+
constructor() {
|
|
272
|
+
this.len = 0;
|
|
273
|
+
}
|
|
274
|
+
get first() {
|
|
275
|
+
var _a;
|
|
276
|
+
return (_a = this._first) == null ? void 0 : _a.v;
|
|
277
|
+
}
|
|
278
|
+
get last() {
|
|
279
|
+
var _a;
|
|
280
|
+
return (_a = this._last) == null ? void 0 : _a.v;
|
|
281
|
+
}
|
|
282
|
+
push(it) {
|
|
283
|
+
this.len++;
|
|
284
|
+
const { _last: last } = this;
|
|
285
|
+
const item = { v: it };
|
|
286
|
+
if (!last) {
|
|
287
|
+
this._first = this._last = item;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
item.prev = this._last;
|
|
291
|
+
last.next = item;
|
|
292
|
+
this._last = item;
|
|
293
|
+
}
|
|
294
|
+
shift() {
|
|
295
|
+
const { _first: first } = this;
|
|
296
|
+
if (!first) return void 0;
|
|
297
|
+
this.len--;
|
|
298
|
+
const { next } = first;
|
|
299
|
+
first.next = void 0;
|
|
300
|
+
if (next) {
|
|
301
|
+
next.prev = void 0;
|
|
302
|
+
} else {
|
|
303
|
+
this._last = void 0;
|
|
304
|
+
}
|
|
305
|
+
this._first = next;
|
|
306
|
+
return first.v;
|
|
307
|
+
}
|
|
308
|
+
clone() {
|
|
309
|
+
const c = new Queue();
|
|
310
|
+
let point = this._first;
|
|
311
|
+
while (point != null) {
|
|
312
|
+
c.push(point.v);
|
|
313
|
+
point = point.next;
|
|
314
|
+
}
|
|
315
|
+
return c;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function isNum(char) {
|
|
319
|
+
return char === "0" || char === "1" || char === "2" || char === "3" || char === "4" || char === "5" || char === "6" || char === "7" || char === "8" || char === "9";
|
|
320
|
+
}
|
|
321
|
+
const genKey = (v) => `${v}-${Date.now()}-${Math.random()}`;
|
|
322
|
+
class SortMap {
|
|
323
|
+
constructor() {
|
|
324
|
+
this.data = {};
|
|
325
|
+
}
|
|
326
|
+
clear() {
|
|
327
|
+
this.data = {};
|
|
328
|
+
}
|
|
329
|
+
add(key, value) {
|
|
330
|
+
const { data } = this;
|
|
331
|
+
let list = data[key];
|
|
332
|
+
if (!list) {
|
|
333
|
+
list = [];
|
|
334
|
+
data[key] = list;
|
|
335
|
+
}
|
|
336
|
+
list.push(value);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function pick(obj, keys) {
|
|
340
|
+
return keys.reduce(
|
|
341
|
+
(acc, key) => {
|
|
342
|
+
acc[key] = obj[key];
|
|
343
|
+
return acc;
|
|
344
|
+
},
|
|
345
|
+
{}
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
exports.BaseEvent = BaseEvent;
|
|
350
|
+
exports.EventMode = EventMode;
|
|
351
|
+
exports.EventNode = EventNode;
|
|
352
|
+
exports.PipeNode = PipeNode;
|
|
353
|
+
exports.ProcessStatus = ProcessStatus;
|
|
354
|
+
exports.Queue = Queue;
|
|
355
|
+
exports.SortMap = SortMap;
|
|
356
|
+
exports.genKey = genKey;
|
|
357
|
+
exports.isNum = isNum;
|
|
358
|
+
exports.pick = pick;
|
|
359
|
+
exports.timestamp = timestamp;
|
|
360
|
+
//# sourceMappingURL=bobe-shared.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bobe-shared.cjs.js","sources":["../src/event.ts","../src/util.ts"],"sourcesContent":["// @ts-nocheck\nexport type Func = (...args: any[]) => any;\n\nconst None = Symbol('none');\nexport const timestamp = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;\n\nexport enum EventMode {\n Immediate,\n Queue,\n}\n\nexport enum ProcessStatus {\n None,\n Processing,\n Paused,\n}\n\nconst DefaultEventOpt = {\n mode: EventMode.Immediate,\n};\n\nconst ALL = '__ALL_KEY';\nconst myNull = null;\n\nexport type IEventOpt = Partial<typeof DefaultEventOpt>;\n\nexport type IScheduler = (doCall: Func, ...args: any[]) => void;\nexport type IGlobalScheduler = (goOn: () => void) => void;\nexport type ISetScheduler = {\n (type: string, scheduler: IScheduler): void;\n (scheduler: IGlobalScheduler): void;\n};\n\nexport type IEventItem = {\n type: string;\n args: any[];\n time: number;\n};\n\nexport class BaseEvent {\n static a = 19\n constructor(private opt: IEventOpt = {}) {\n this.opt = { ...DefaultEventOpt, ...opt };\n }\n scheduler?: IGlobalScheduler;\n eventQueue: IEventItem[] = [];\n status = ProcessStatus.None;\n subMap = new Map<string, Set<Func>>();\n on = (type: string | undefined, fn: Func) => {\n if (type == null) type = ALL;\n const suber = this.subMap.get(type) || new Set<Func>();\n suber.add(fn);\n this.subMap.set(type, suber);\n };\n\n off = (type: string | undefined, fn: Func) => {\n const suber = this.subMap.get(type ?? ALL);\n if (!suber) return;\n suber.delete(fn);\n };\n\n once = (type: string | undefined, fn: Func) => {\n fn['once'] = true;\n this.on(type, fn);\n };\n\n promiseOnce = (type: string | undefined) => {\n return new Promise((resolve) => {\n this.once(type, (...args) => {\n resolve(args)\n })\n })\n }\n\n setScheduler: ISetScheduler = (type: string | IGlobalScheduler, scheduler?: Func) => {\n if (typeof type !== 'string') {\n this.scheduler = type;\n return;\n }\n const set = this.subMap.get(type) || new Set<Func>();\n set['scheduler'] = scheduler;\n this.subMap.set(type, set);\n };\n\n callSub(it: Func, fns, args) {\n const doCall = (...args) => {\n it(...args);\n if (it['once'] === true) fns.delete(it);\n };\n const scheduler = it['scheduler'] || fns['scheduler'];\n\n if (scheduler) {\n scheduler(doCall, ...args);\n } else {\n it(...args);\n if (it['once'] === true) fns.delete(it);\n }\n }\n\n // construct 会初始化为下面其中一种\n emit = (type: string, ...args: any[]) => {\n this.opt.mode === EventMode.Immediate\n ? this.emitImmediate(type, ...args)\n : this.emitQueue(type, ...args);\n };\n \n emitImmediate(type: string, ...args: any[]) {\n const fns = this.subMap.get(type);\n const allSub = this.subMap.get(ALL);\n fns?.forEach((it) => this.callSub(it, fns, args));\n allSub?.forEach((it) => this.callSub(it, allSub, args));\n }\n\n emitQueue(type: string, ...args: any[]) {\n this.eventQueue.push({ type, args, time: timestamp() });\n this.process();\n }\n\n pause = () => (this.status = ProcessStatus.Paused);\n unPause = () => (this.status = ProcessStatus.None);\n start = () => {\n this.status = ProcessStatus.None;\n this.processQueue();\n };\n\n process = () => {\n if (this.scheduler) {\n return this.scheduler(this.recallScheduler);\n }\n return this.processQueue();\n }\n\n recallScheduler = () => {\n this.scheduler!(this.recallScheduler);\n };\n\n processQueue = () => {\n // 如果是挂起状态则直接结束\n if (this.status === ProcessStatus.Paused) return;\n this.status = ProcessStatus.Processing;\n\n let { type, args } = this.eventQueue.shift() || {};\n if (type) {\n // 在此过程中用户可通过 pause 和 start 同步控制事件处理\n const fns = this.subMap.get(type);\n const allSub = this.subMap.get(ALL);\n fns?.forEach((it) => this.callSub(it, fns, args));\n allSub?.forEach((it) => this.callSub(it, allSub, args));\n if (this.eventQueue.length > 0) {\n this.processQueue();\n }\n }\n //@ts-ignore 队列全部处理完成,如果执行过程中被 pause \n if(this.status !== ProcessStatus.Paused) {\n this.status = ProcessStatus.None;\n }\n };\n\n\n dispatchEvent = (iList: number[]) => {\n // 从大到小排序\n iList.sort((a, b) => b - a);\n iList.forEach((idx) => {\n const [item] = this.eventQueue.splice(idx, 1);\n const { type, args } = item || {};\n if (type && args) {\n this.emitImmediate(type, ...args);\n }\n });\n };\n\n clear = () => {\n this.subMap.clear();\n this.eventQueue = [];\n this.scheduler = undefined;\n };\n}\n\nexport class EventNode extends BaseEvent {\n constructor() {\n super({ mode: EventMode.Queue });\n }\n pipe = (type: string, ...fns: (Func | PipeNode)[]) => {\n const { firstNode, lastNode } = this.buildPip(fns);\n // 将第一个节点与事件源节点关联\n this.on(type, (...args) => firstNode.emit('process', args));\n return lastNode;\n };\n\n buildPip = (fns: (Func | PipeNode)[]) => {\n const startWithPipeNode = fns[0] instanceof PipeNode;\n let firstNode: PipeNode;\n // @ts-ignore\n let curNode: PipeNode = (firstNode = startWithPipeNode ? fns[0] : new PipeNode());\n let i = startWithPipeNode ? 1 : 0;\n let toAdd: Func[] = [];\n while (i < fns.length) {\n const it = fns[i];\n if (!(it instanceof PipeNode)) {\n toAdd.push(it);\n continue;\n }\n\n // 遇到下一个 pipeNode,把上一个完成\n curNode.pipList = toAdd;\n toAdd = [];\n curNode.on('finish', (args) => it.emit('process', args));\n\n curNode = it;\n i++;\n }\n // 处理最后一个节点\n curNode.markLast();\n curNode.pipList = toAdd;\n return {\n firstNode,\n lastNode: curNode,\n };\n };\n\n preProcessMap = new Map<string, [PipeNode, PipeNode]>();\n preProcess = (type: string, ...fns: (Func | PipeNode)[]) => {\n const { firstNode, lastNode } = this.buildPip(fns);\n this.preProcessMap.set(type, [firstNode, lastNode]);\n };\n\n emit = (type: string, ...args: any[]) => {\n const [firstNode, lastNode] = this.preProcessMap.get(type) || [];\n if (firstNode && lastNode) {\n lastNode.once('real-finish', (...args) => {\n // 等待预处理完成后再开始触发事件,且修正 args\n this.eventQueue.push({ type, args, time: timestamp() });\n this.start();\n });\n this.pause();\n firstNode.emit('process', args);\n } else {\n this.emitQueue(type, ...args);\n }\n };\n\n from(type: string, promise?: Promise<any>) {\n if (promise) {\n promise.then(\n (value) => {\n this.emit(type, value);\n },\n (err) => {\n this.emit(type, err);\n },\n );\n return;\n }\n\n return (...args: any[]) => {\n this.emit(type, ...args);\n };\n }\n}\n\nexport class PipeNode extends BaseEvent {\n public pipList: Func[] = [];\n\n onFinish = (fn: Func) => {\n this.on('real-finish', fn);\n };\n\n isLastNode = false;\n\n markLast = () => (this.isLastNode = true);\n\n constructor() {\n super({ mode: EventMode.Queue });\n this.on('process', async (args) => {\n let res;\n for (const pipeFn of this.pipList) {\n try {\n res = pipeFn(...args);\n if (res instanceof Promise) {\n res = await res;\n }\n } catch (error) {\n res = error;\n }\n args = [res];\n }\n if (this.isLastNode) {\n this.emitImmediate('real-finish', ...args);\n } else {\n this.emitImmediate('finish', args);\n }\n });\n }\n}","type QueueItem<T> = {\n v: T;\n prev?: QueueItem<T>;\n next?: QueueItem<T>;\n};\n\nexport class Queue<T> {\n _first?: QueueItem<T>;\n get first() {\n return this._first?.v!;\n }\n _last?: QueueItem<T>;\n get last() {\n return this._last?.v!;\n }\n len = 0;\n push(it: T) {\n this.len++;\n const { _last: last } = this;\n const item = { v: it } as QueueItem<T>;\n if (!last) {\n this._first = this._last = item;\n return;\n }\n item.prev = this._last!;\n last.next = item;\n this._last = item;\n }\n shift() {\n const { _first: first } = this;\n if (!first) return undefined;\n this.len--;\n\n const { next } = first;\n first.next = undefined;\n\n if (next) {\n next.prev = undefined;\n } else {\n this._last = undefined;\n }\n\n this._first = next;\n return first.v;\n }\n clone() {\n const c = new Queue<T>();\n let point = this._first;\n while (point != null) {\n c.push(point.v);\n point = point.next;\n }\n return c;\n }\n}\n\nexport function isNum(char: string) {\n return (\n char === '0' ||\n char === '1' ||\n char === '2' ||\n char === '3' ||\n char === '4' ||\n char === '5' ||\n char === '6' ||\n char === '7' ||\n char === '8' ||\n char === '9'\n );\n}\n\nexport const genKey = (v: string | number) => `${v}-${Date.now()}-${Math.random()}` as unknown as number;\n\nexport class SortMap<T> {\n data: Record<string | symbol, T[]> = {};\n clear() {\n this.data = {};\n }\n add(key: string | symbol, value: T) {\n const { data } = this;\n let list = data[key];\n if (!list) {\n list = [];\n data[key] = list;\n }\n list.push(value);\n }\n}\n\nexport function pick<T, K extends keyof T>(obj: T, keys: K[]) {\n return keys.reduce(\n (acc, key) => {\n acc[key] = obj[key];\n return acc;\n },\n {} as Pick<T, K>\n );\n}\n\n// const queue = new Queue([1,2,3,4]);\n// queue.shift()\n// queue.pop()\n// // @ts-ignore\n// queue.unshift('a')\n// // @ts-ignore\n// queue.push('b')\n// queue.shift()\n// queue.pop()\n// queue.shift()\n// queue.pop()\n// queue.shift()\n// queue.pop()\n// queue.push(10)\n// queue.array();\n"],"names":["EventMode","ProcessStatus","args"],"mappings":"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"}
|