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.
@@ -0,0 +1,348 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __async = (__this, __arguments, generator) => {
18
+ return new Promise((resolve, reject) => {
19
+ var fulfilled = (value) => {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ };
26
+ var rejected = (value) => {
27
+ try {
28
+ step(generator.throw(value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ };
33
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
34
+ step((generator = generator.apply(__this, __arguments)).next());
35
+ });
36
+ };
37
+ const timestamp = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
38
+ var EventMode = /* @__PURE__ */ ((EventMode2) => {
39
+ EventMode2[EventMode2["Immediate"] = 0] = "Immediate";
40
+ EventMode2[EventMode2["Queue"] = 1] = "Queue";
41
+ return EventMode2;
42
+ })(EventMode || {});
43
+ var ProcessStatus = /* @__PURE__ */ ((ProcessStatus2) => {
44
+ ProcessStatus2[ProcessStatus2["None"] = 0] = "None";
45
+ ProcessStatus2[ProcessStatus2["Processing"] = 1] = "Processing";
46
+ ProcessStatus2[ProcessStatus2["Paused"] = 2] = "Paused";
47
+ return ProcessStatus2;
48
+ })(ProcessStatus || {});
49
+ const DefaultEventOpt = {
50
+ mode: 0 /* Immediate */
51
+ };
52
+ const ALL = "__ALL_KEY";
53
+ class BaseEvent {
54
+ constructor(opt = {}) {
55
+ this.opt = opt;
56
+ this.eventQueue = [];
57
+ this.status = 0 /* None */;
58
+ this.subMap = /* @__PURE__ */ new Map();
59
+ this.on = (type, fn) => {
60
+ if (type == null) type = ALL;
61
+ const suber = this.subMap.get(type) || /* @__PURE__ */ new Set();
62
+ suber.add(fn);
63
+ this.subMap.set(type, suber);
64
+ };
65
+ this.off = (type, fn) => {
66
+ const suber = this.subMap.get(type != null ? type : ALL);
67
+ if (!suber) return;
68
+ suber.delete(fn);
69
+ };
70
+ this.once = (type, fn) => {
71
+ fn["once"] = true;
72
+ this.on(type, fn);
73
+ };
74
+ this.promiseOnce = (type) => {
75
+ return new Promise((resolve) => {
76
+ this.once(type, (...args) => {
77
+ resolve(args);
78
+ });
79
+ });
80
+ };
81
+ this.setScheduler = (type, scheduler) => {
82
+ if (typeof type !== "string") {
83
+ this.scheduler = type;
84
+ return;
85
+ }
86
+ const set = this.subMap.get(type) || /* @__PURE__ */ new Set();
87
+ set["scheduler"] = scheduler;
88
+ this.subMap.set(type, set);
89
+ };
90
+ // construct 会初始化为下面其中一种
91
+ this.emit = (type, ...args) => {
92
+ this.opt.mode === 0 /* Immediate */ ? this.emitImmediate(type, ...args) : this.emitQueue(type, ...args);
93
+ };
94
+ this.pause = () => this.status = 2 /* Paused */;
95
+ this.unPause = () => this.status = 0 /* None */;
96
+ this.start = () => {
97
+ this.status = 0 /* None */;
98
+ this.processQueue();
99
+ };
100
+ this.process = () => {
101
+ if (this.scheduler) {
102
+ return this.scheduler(this.recallScheduler);
103
+ }
104
+ return this.processQueue();
105
+ };
106
+ this.recallScheduler = () => {
107
+ this.scheduler(this.recallScheduler);
108
+ };
109
+ this.processQueue = () => {
110
+ if (this.status === 2 /* Paused */) return;
111
+ this.status = 1 /* Processing */;
112
+ let { type, args } = this.eventQueue.shift() || {};
113
+ if (type) {
114
+ const fns = this.subMap.get(type);
115
+ const allSub = this.subMap.get(ALL);
116
+ fns == null ? void 0 : fns.forEach((it) => this.callSub(it, fns, args));
117
+ allSub == null ? void 0 : allSub.forEach((it) => this.callSub(it, allSub, args));
118
+ if (this.eventQueue.length > 0) {
119
+ this.processQueue();
120
+ }
121
+ }
122
+ if (this.status !== 2 /* Paused */) {
123
+ this.status = 0 /* None */;
124
+ }
125
+ };
126
+ this.dispatchEvent = (iList) => {
127
+ iList.sort((a, b) => b - a);
128
+ iList.forEach((idx) => {
129
+ const [item] = this.eventQueue.splice(idx, 1);
130
+ const { type, args } = item || {};
131
+ if (type && args) {
132
+ this.emitImmediate(type, ...args);
133
+ }
134
+ });
135
+ };
136
+ this.clear = () => {
137
+ this.subMap.clear();
138
+ this.eventQueue = [];
139
+ this.scheduler = void 0;
140
+ };
141
+ this.opt = __spreadValues(__spreadValues({}, DefaultEventOpt), opt);
142
+ }
143
+ callSub(it, fns, args) {
144
+ const doCall = (...args2) => {
145
+ it(...args2);
146
+ if (it["once"] === true) fns.delete(it);
147
+ };
148
+ const scheduler = it["scheduler"] || fns["scheduler"];
149
+ if (scheduler) {
150
+ scheduler(doCall, ...args);
151
+ } else {
152
+ it(...args);
153
+ if (it["once"] === true) fns.delete(it);
154
+ }
155
+ }
156
+ emitImmediate(type, ...args) {
157
+ const fns = this.subMap.get(type);
158
+ const allSub = this.subMap.get(ALL);
159
+ fns == null ? void 0 : fns.forEach((it) => this.callSub(it, fns, args));
160
+ allSub == null ? void 0 : allSub.forEach((it) => this.callSub(it, allSub, args));
161
+ }
162
+ emitQueue(type, ...args) {
163
+ this.eventQueue.push({ type, args, time: timestamp() });
164
+ this.process();
165
+ }
166
+ }
167
+ BaseEvent.a = 19;
168
+ class EventNode extends BaseEvent {
169
+ constructor() {
170
+ super({ mode: 1 /* Queue */ });
171
+ this.pipe = (type, ...fns) => {
172
+ const { firstNode, lastNode } = this.buildPip(fns);
173
+ this.on(type, (...args) => firstNode.emit("process", args));
174
+ return lastNode;
175
+ };
176
+ this.buildPip = (fns) => {
177
+ const startWithPipeNode = fns[0] instanceof PipeNode;
178
+ let firstNode;
179
+ let curNode = firstNode = startWithPipeNode ? fns[0] : new PipeNode();
180
+ let i = startWithPipeNode ? 1 : 0;
181
+ let toAdd = [];
182
+ while (i < fns.length) {
183
+ const it = fns[i];
184
+ if (!(it instanceof PipeNode)) {
185
+ toAdd.push(it);
186
+ continue;
187
+ }
188
+ curNode.pipList = toAdd;
189
+ toAdd = [];
190
+ curNode.on("finish", (args) => it.emit("process", args));
191
+ curNode = it;
192
+ i++;
193
+ }
194
+ curNode.markLast();
195
+ curNode.pipList = toAdd;
196
+ return {
197
+ firstNode,
198
+ lastNode: curNode
199
+ };
200
+ };
201
+ this.preProcessMap = /* @__PURE__ */ new Map();
202
+ this.preProcess = (type, ...fns) => {
203
+ const { firstNode, lastNode } = this.buildPip(fns);
204
+ this.preProcessMap.set(type, [firstNode, lastNode]);
205
+ };
206
+ this.emit = (type, ...args) => {
207
+ const [firstNode, lastNode] = this.preProcessMap.get(type) || [];
208
+ if (firstNode && lastNode) {
209
+ lastNode.once("real-finish", (...args2) => {
210
+ this.eventQueue.push({ type, args: args2, time: timestamp() });
211
+ this.start();
212
+ });
213
+ this.pause();
214
+ firstNode.emit("process", args);
215
+ } else {
216
+ this.emitQueue(type, ...args);
217
+ }
218
+ };
219
+ }
220
+ from(type, promise) {
221
+ if (promise) {
222
+ promise.then(
223
+ (value) => {
224
+ this.emit(type, value);
225
+ },
226
+ (err) => {
227
+ this.emit(type, err);
228
+ }
229
+ );
230
+ return;
231
+ }
232
+ return (...args) => {
233
+ this.emit(type, ...args);
234
+ };
235
+ }
236
+ }
237
+ class PipeNode extends BaseEvent {
238
+ constructor() {
239
+ super({ mode: 1 /* Queue */ });
240
+ this.pipList = [];
241
+ this.onFinish = (fn) => {
242
+ this.on("real-finish", fn);
243
+ };
244
+ this.isLastNode = false;
245
+ this.markLast = () => this.isLastNode = true;
246
+ this.on("process", (args) => __async(this, null, function* () {
247
+ let res;
248
+ for (const pipeFn of this.pipList) {
249
+ try {
250
+ res = pipeFn(...args);
251
+ if (res instanceof Promise) {
252
+ res = yield res;
253
+ }
254
+ } catch (error) {
255
+ res = error;
256
+ }
257
+ args = [res];
258
+ }
259
+ if (this.isLastNode) {
260
+ this.emitImmediate("real-finish", ...args);
261
+ } else {
262
+ this.emitImmediate("finish", args);
263
+ }
264
+ }));
265
+ }
266
+ }
267
+
268
+ class Queue {
269
+ constructor() {
270
+ this.len = 0;
271
+ }
272
+ get first() {
273
+ var _a;
274
+ return (_a = this._first) == null ? void 0 : _a.v;
275
+ }
276
+ get last() {
277
+ var _a;
278
+ return (_a = this._last) == null ? void 0 : _a.v;
279
+ }
280
+ push(it) {
281
+ this.len++;
282
+ const { _last: last } = this;
283
+ const item = { v: it };
284
+ if (!last) {
285
+ this._first = this._last = item;
286
+ return;
287
+ }
288
+ item.prev = this._last;
289
+ last.next = item;
290
+ this._last = item;
291
+ }
292
+ shift() {
293
+ const { _first: first } = this;
294
+ if (!first) return void 0;
295
+ this.len--;
296
+ const { next } = first;
297
+ first.next = void 0;
298
+ if (next) {
299
+ next.prev = void 0;
300
+ } else {
301
+ this._last = void 0;
302
+ }
303
+ this._first = next;
304
+ return first.v;
305
+ }
306
+ clone() {
307
+ const c = new Queue();
308
+ let point = this._first;
309
+ while (point != null) {
310
+ c.push(point.v);
311
+ point = point.next;
312
+ }
313
+ return c;
314
+ }
315
+ }
316
+ function isNum(char) {
317
+ return char === "0" || char === "1" || char === "2" || char === "3" || char === "4" || char === "5" || char === "6" || char === "7" || char === "8" || char === "9";
318
+ }
319
+ const genKey = (v) => `${v}-${Date.now()}-${Math.random()}`;
320
+ class SortMap {
321
+ constructor() {
322
+ this.data = {};
323
+ }
324
+ clear() {
325
+ this.data = {};
326
+ }
327
+ add(key, value) {
328
+ const { data } = this;
329
+ let list = data[key];
330
+ if (!list) {
331
+ list = [];
332
+ data[key] = list;
333
+ }
334
+ list.push(value);
335
+ }
336
+ }
337
+ function pick(obj, keys) {
338
+ return keys.reduce(
339
+ (acc, key) => {
340
+ acc[key] = obj[key];
341
+ return acc;
342
+ },
343
+ {}
344
+ );
345
+ }
346
+
347
+ export { BaseEvent, EventMode, EventNode, PipeNode, ProcessStatus, Queue, SortMap, genKey, isNum, pick, timestamp };
348
+ //# sourceMappingURL=bobe-shared.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bobe-shared.esm.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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"}
@@ -0,0 +1,98 @@
1
+ type Func = (...args: any[]) => any;
2
+ declare const timestamp: any;
3
+ declare enum EventMode {
4
+ Immediate = 0,
5
+ Queue = 1
6
+ }
7
+ declare enum ProcessStatus {
8
+ None = 0,
9
+ Processing = 1,
10
+ Paused = 2
11
+ }
12
+ declare const DefaultEventOpt: {
13
+ mode: EventMode;
14
+ };
15
+ type IEventOpt = Partial<typeof DefaultEventOpt>;
16
+ type IScheduler = (doCall: Func, ...args: any[]) => void;
17
+ type IGlobalScheduler = (goOn: () => void) => void;
18
+ type ISetScheduler = {
19
+ (type: string, scheduler: IScheduler): void;
20
+ (scheduler: IGlobalScheduler): void;
21
+ };
22
+ type IEventItem = {
23
+ type: string;
24
+ args: any[];
25
+ time: number;
26
+ };
27
+ declare class BaseEvent {
28
+ private opt;
29
+ static a: number;
30
+ constructor(opt?: IEventOpt);
31
+ scheduler?: IGlobalScheduler;
32
+ eventQueue: IEventItem[];
33
+ status: ProcessStatus;
34
+ subMap: Map<string, Set<Func>>;
35
+ on: (type: string | undefined, fn: Func) => void;
36
+ off: (type: string | undefined, fn: Func) => void;
37
+ once: (type: string | undefined, fn: Func) => void;
38
+ promiseOnce: (type: string | undefined) => Promise<unknown>;
39
+ setScheduler: ISetScheduler;
40
+ callSub(it: Func, fns: any, args: any): void;
41
+ emit: (type: string, ...args: any[]) => void;
42
+ emitImmediate(type: string, ...args: any[]): void;
43
+ emitQueue(type: string, ...args: any[]): void;
44
+ pause: () => ProcessStatus;
45
+ unPause: () => ProcessStatus;
46
+ start: () => void;
47
+ process: () => void;
48
+ recallScheduler: () => void;
49
+ processQueue: () => void;
50
+ dispatchEvent: (iList: number[]) => void;
51
+ clear: () => void;
52
+ }
53
+ declare class EventNode extends BaseEvent {
54
+ constructor();
55
+ pipe: (type: string, ...fns: (Func | PipeNode)[]) => PipeNode;
56
+ buildPip: (fns: (Func | PipeNode)[]) => {
57
+ firstNode: PipeNode;
58
+ lastNode: PipeNode;
59
+ };
60
+ preProcessMap: Map<string, [PipeNode, PipeNode]>;
61
+ preProcess: (type: string, ...fns: (Func | PipeNode)[]) => void;
62
+ emit: (type: string, ...args: any[]) => void;
63
+ from(type: string, promise?: Promise<any>): (...args: any[]) => void;
64
+ }
65
+ declare class PipeNode extends BaseEvent {
66
+ pipList: Func[];
67
+ onFinish: (fn: Func) => void;
68
+ isLastNode: boolean;
69
+ markLast: () => boolean;
70
+ constructor();
71
+ }
72
+
73
+ type QueueItem<T> = {
74
+ v: T;
75
+ prev?: QueueItem<T>;
76
+ next?: QueueItem<T>;
77
+ };
78
+ declare class Queue<T> {
79
+ _first?: QueueItem<T>;
80
+ get first(): T;
81
+ _last?: QueueItem<T>;
82
+ get last(): T;
83
+ len: number;
84
+ push(it: T): void;
85
+ shift(): T;
86
+ clone(): Queue<T>;
87
+ }
88
+ declare function isNum(char: string): char is "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
89
+ declare const genKey: (v: string | number) => number;
90
+ declare class SortMap<T> {
91
+ data: Record<string | symbol, T[]>;
92
+ clear(): void;
93
+ add(key: string | symbol, value: T): void;
94
+ }
95
+ declare function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
96
+
97
+ export { BaseEvent, EventMode, EventNode, PipeNode, ProcessStatus, Queue, SortMap, genKey, isNum, pick, timestamp };
98
+ export type { Func, IEventItem, IEventOpt, IGlobalScheduler, IScheduler, ISetScheduler };