bobe-shared 0.0.21 → 0.0.22

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.
@@ -1,48 +1,61 @@
1
1
  'use strict';
2
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) => {
3
+ function _arrayLikeToArray(r, a) {
4
+ (null == a || a > r.length) && (a = r.length);
5
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
6
+ return n;
7
+ }
8
+ function _arrayWithHoles(r) {
9
+ if (Array.isArray(r)) return r;
10
+ }
11
+ function _iterableToArrayLimit(r, l) {
12
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
13
+ if (null != t) {
14
+ var e,
15
+ n,
16
+ i,
17
+ u,
18
+ a = [],
19
+ f = true,
20
+ o = false;
21
+ try {
22
+ if (i = (t = t.call(r)).next, 0 === l) {
23
+ if (Object(t) !== t) return;
24
+ f = !1;
25
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
26
+ } catch (r) {
27
+ o = true, n = r;
28
+ } finally {
29
29
  try {
30
- step(generator.throw(value));
31
- } catch (e) {
32
- reject(e);
30
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
31
+ } finally {
32
+ if (o) throw n;
33
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
- };
34
+ }
35
+ return a;
36
+ }
37
+ }
38
+ function _nonIterableRest() {
39
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
40
+ }
41
+ function _slicedToArray(r, e) {
42
+ return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
43
+ }
44
+ function _unsupportedIterableToArray(r, a) {
45
+ if (r) {
46
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
47
+ var t = {}.toString.call(r).slice(8, -1);
48
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
49
+ }
50
+ }
51
+
39
52
  const timestamp = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
40
- var EventMode = /* @__PURE__ */ ((EventMode2) => {
53
+ var EventMode = /* @__PURE__ */(EventMode2 => {
41
54
  EventMode2[EventMode2["Immediate"] = 0] = "Immediate";
42
55
  EventMode2[EventMode2["Queue"] = 1] = "Queue";
43
56
  return EventMode2;
44
57
  })(EventMode || {});
45
- var ProcessStatus = /* @__PURE__ */ ((ProcessStatus2) => {
58
+ var ProcessStatus = /* @__PURE__ */(ProcessStatus2 => {
46
59
  ProcessStatus2[ProcessStatus2["None"] = 0] = "None";
47
60
  ProcessStatus2[ProcessStatus2["Processing"] = 1] = "Processing";
48
61
  ProcessStatus2[ProcessStatus2["Paused"] = 2] = "Paused";
@@ -57,15 +70,15 @@ class BaseEvent {
57
70
  this.opt = opt;
58
71
  this.eventQueue = [];
59
72
  this.status = 0 /* None */;
60
- this.subMap = /* @__PURE__ */ new Map();
73
+ this.subMap = /* @__PURE__ */new Map();
61
74
  this.on = (type, fn) => {
62
75
  if (type == null) type = ALL;
63
- const suber = this.subMap.get(type) || /* @__PURE__ */ new Set();
76
+ const suber = this.subMap.get(type) || /* @__PURE__ */new Set();
64
77
  suber.add(fn);
65
78
  this.subMap.set(type, suber);
66
79
  };
67
80
  this.off = (type, fn) => {
68
- const suber = this.subMap.get(type != null ? type : ALL);
81
+ const suber = this.subMap.get(type ?? ALL);
69
82
  if (!suber) return;
70
83
  suber.delete(fn);
71
84
  };
@@ -73,8 +86,8 @@ class BaseEvent {
73
86
  fn["once"] = true;
74
87
  this.on(type, fn);
75
88
  };
76
- this.promiseOnce = (type) => {
77
- return new Promise((resolve) => {
89
+ this.promiseOnce = type => {
90
+ return new Promise(resolve => {
78
91
  this.once(type, (...args) => {
79
92
  resolve(args);
80
93
  });
@@ -85,7 +98,7 @@ class BaseEvent {
85
98
  this.scheduler = type;
86
99
  return;
87
100
  }
88
- const set = this.subMap.get(type) || /* @__PURE__ */ new Set();
101
+ const set = this.subMap.get(type) || /* @__PURE__ */new Set();
89
102
  set["scheduler"] = scheduler;
90
103
  this.subMap.set(type, set);
91
104
  };
@@ -111,12 +124,14 @@ class BaseEvent {
111
124
  this.processQueue = () => {
112
125
  if (this.status === 2 /* Paused */) return;
113
126
  this.status = 1 /* Processing */;
114
- let { type, args } = this.eventQueue.shift() || {};
127
+ let _ref = this.eventQueue.shift() || {},
128
+ type = _ref.type,
129
+ args = _ref.args;
115
130
  if (type) {
116
131
  const fns = this.subMap.get(type);
117
132
  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));
133
+ fns?.forEach(it => this.callSub(it, fns, args));
134
+ allSub?.forEach(it => this.callSub(it, allSub, args));
120
135
  if (this.eventQueue.length > 0) {
121
136
  this.processQueue();
122
137
  }
@@ -125,11 +140,15 @@ class BaseEvent {
125
140
  this.status = 0 /* None */;
126
141
  }
127
142
  };
128
- this.dispatchEvent = (iList) => {
143
+ this.dispatchEvent = iList => {
129
144
  iList.sort((a, b) => b - a);
130
- iList.forEach((idx) => {
131
- const [item] = this.eventQueue.splice(idx, 1);
132
- const { type, args } = item || {};
145
+ iList.forEach(idx => {
146
+ const _this$eventQueue$spli = this.eventQueue.splice(idx, 1),
147
+ _this$eventQueue$spli2 = _slicedToArray(_this$eventQueue$spli, 1),
148
+ item = _this$eventQueue$spli2[0];
149
+ const _ref2 = item || {},
150
+ type = _ref2.type,
151
+ args = _ref2.args;
133
152
  if (type && args) {
134
153
  this.emitImmediate(type, ...args);
135
154
  }
@@ -140,7 +159,13 @@ class BaseEvent {
140
159
  this.eventQueue = [];
141
160
  this.scheduler = void 0;
142
161
  };
143
- this.opt = __spreadValues(__spreadValues({}, DefaultEventOpt), opt);
162
+ this.opt = {
163
+ ...DefaultEventOpt,
164
+ ...opt
165
+ };
166
+ }
167
+ static {
168
+ this.a = 19;
144
169
  }
145
170
  callSub(it, fns, args) {
146
171
  const doCall = (...args2) => {
@@ -158,24 +183,31 @@ class BaseEvent {
158
183
  emitImmediate(type, ...args) {
159
184
  const fns = this.subMap.get(type);
160
185
  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));
186
+ fns?.forEach(it => this.callSub(it, fns, args));
187
+ allSub?.forEach(it => this.callSub(it, allSub, args));
163
188
  }
164
189
  emitQueue(type, ...args) {
165
- this.eventQueue.push({ type, args, time: timestamp() });
190
+ this.eventQueue.push({
191
+ type,
192
+ args,
193
+ time: timestamp()
194
+ });
166
195
  this.process();
167
196
  }
168
197
  }
169
- BaseEvent.a = 19;
170
198
  class EventNode extends BaseEvent {
171
199
  constructor() {
172
- super({ mode: 1 /* Queue */ });
200
+ super({
201
+ mode: 1 /* Queue */
202
+ });
173
203
  this.pipe = (type, ...fns) => {
174
- const { firstNode, lastNode } = this.buildPip(fns);
204
+ const _this$buildPip = this.buildPip(fns),
205
+ firstNode = _this$buildPip.firstNode,
206
+ lastNode = _this$buildPip.lastNode;
175
207
  this.on(type, (...args) => firstNode.emit("process", args));
176
208
  return lastNode;
177
209
  };
178
- this.buildPip = (fns) => {
210
+ this.buildPip = fns => {
179
211
  const startWithPipeNode = fns[0] instanceof PipeNode;
180
212
  let firstNode;
181
213
  let curNode = firstNode = startWithPipeNode ? fns[0] : new PipeNode();
@@ -189,7 +221,7 @@ class EventNode extends BaseEvent {
189
221
  }
190
222
  curNode.pipList = toAdd;
191
223
  toAdd = [];
192
- curNode.on("finish", (args) => it.emit("process", args));
224
+ curNode.on("finish", args => it.emit("process", args));
193
225
  curNode = it;
194
226
  i++;
195
227
  }
@@ -200,16 +232,25 @@ class EventNode extends BaseEvent {
200
232
  lastNode: curNode
201
233
  };
202
234
  };
203
- this.preProcessMap = /* @__PURE__ */ new Map();
235
+ this.preProcessMap = /* @__PURE__ */new Map();
204
236
  this.preProcess = (type, ...fns) => {
205
- const { firstNode, lastNode } = this.buildPip(fns);
237
+ const _this$buildPip2 = this.buildPip(fns),
238
+ firstNode = _this$buildPip2.firstNode,
239
+ lastNode = _this$buildPip2.lastNode;
206
240
  this.preProcessMap.set(type, [firstNode, lastNode]);
207
241
  };
208
242
  this.emit = (type, ...args) => {
209
- const [firstNode, lastNode] = this.preProcessMap.get(type) || [];
243
+ const _ref3 = this.preProcessMap.get(type) || [],
244
+ _ref4 = _slicedToArray(_ref3, 2),
245
+ firstNode = _ref4[0],
246
+ lastNode = _ref4[1];
210
247
  if (firstNode && lastNode) {
211
248
  lastNode.once("real-finish", (...args2) => {
212
- this.eventQueue.push({ type, args: args2, time: timestamp() });
249
+ this.eventQueue.push({
250
+ type,
251
+ args: args2,
252
+ time: timestamp()
253
+ });
213
254
  this.start();
214
255
  });
215
256
  this.pause();
@@ -221,14 +262,11 @@ class EventNode extends BaseEvent {
221
262
  }
222
263
  from(type, promise) {
223
264
  if (promise) {
224
- promise.then(
225
- (value) => {
226
- this.emit(type, value);
227
- },
228
- (err) => {
229
- this.emit(type, err);
230
- }
231
- );
265
+ promise.then(value => {
266
+ this.emit(type, value);
267
+ }, err => {
268
+ this.emit(type, err);
269
+ });
232
270
  return;
233
271
  }
234
272
  return (...args) => {
@@ -238,20 +276,22 @@ class EventNode extends BaseEvent {
238
276
  }
239
277
  class PipeNode extends BaseEvent {
240
278
  constructor() {
241
- super({ mode: 1 /* Queue */ });
279
+ super({
280
+ mode: 1 /* Queue */
281
+ });
242
282
  this.pipList = [];
243
- this.onFinish = (fn) => {
283
+ this.onFinish = fn => {
244
284
  this.on("real-finish", fn);
245
285
  };
246
286
  this.isLastNode = false;
247
287
  this.markLast = () => this.isLastNode = true;
248
- this.on("process", (args) => __async(this, null, function* () {
288
+ this.on("process", async args => {
249
289
  let res;
250
290
  for (const pipeFn of this.pipList) {
251
291
  try {
252
292
  res = pipeFn(...args);
253
293
  if (res instanceof Promise) {
254
- res = yield res;
294
+ res = await res;
255
295
  }
256
296
  } catch (error) {
257
297
  res = error;
@@ -263,7 +303,7 @@ class PipeNode extends BaseEvent {
263
303
  } else {
264
304
  this.emitImmediate("finish", args);
265
305
  }
266
- }));
306
+ });
267
307
  }
268
308
  }
269
309
 
@@ -272,20 +312,21 @@ class Queue {
272
312
  this.len = 0;
273
313
  }
274
314
  get first() {
275
- var _a;
276
- return (_a = this._first) == null ? void 0 : _a.v;
315
+ return this._first?.v;
277
316
  }
278
317
  get last() {
279
- var _a;
280
- return (_a = this._last) == null ? void 0 : _a.v;
318
+ return this._last?.v;
281
319
  }
282
320
  push(it) {
283
321
  return this.insetAfter(it, this._last);
284
322
  }
285
323
  insetAfter(it, anchor) {
286
- var _a;
287
- const item = { v: it, prev: null, next: null };
288
- const prev = anchor || ((_a = this._first) == null ? void 0 : _a.prev);
324
+ const item = {
325
+ v: it,
326
+ prev: null,
327
+ next: null
328
+ };
329
+ const prev = anchor || this._first?.prev;
289
330
  const after = prev ? prev.next : this._first;
290
331
  item.prev = prev;
291
332
  item.next = after;
@@ -305,7 +346,8 @@ class Queue {
305
346
  return item;
306
347
  }
307
348
  delete(item) {
308
- const { prev, next } = item;
349
+ const prev = item.prev,
350
+ next = item.next;
309
351
  if (prev) {
310
352
  if (item === this._first) this._first = next;
311
353
  prev.next = next;
@@ -374,7 +416,7 @@ class Queue {
374
416
  function isNum(char) {
375
417
  return char === "0" || char === "1" || char === "2" || char === "3" || char === "4" || char === "5" || char === "6" || char === "7" || char === "8" || char === "9";
376
418
  }
377
- const genKey = (v) => `${v}-${Date.now()}-${Math.random()}`;
419
+ const genKey = v => `${v}-${Date.now()}-${Math.random()}`;
378
420
  class SortMap {
379
421
  constructor() {
380
422
  this.data = {};
@@ -383,7 +425,7 @@ class SortMap {
383
425
  this.data = {};
384
426
  }
385
427
  add(key, value) {
386
- const { data } = this;
428
+ const data = this.data;
387
429
  let list = data[key];
388
430
  if (!list) {
389
431
  list = new Queue();
@@ -393,27 +435,29 @@ class SortMap {
393
435
  }
394
436
  }
395
437
  function pick(obj, keys) {
396
- return keys.reduce(
397
- (acc, key) => {
398
- acc[key] = obj[key];
399
- return acc;
400
- },
401
- {}
402
- );
438
+ return keys.reduce((acc, key) => {
439
+ acc[key] = obj[key];
440
+ return acc;
441
+ }, {});
403
442
  }
404
443
  const NatureNum = /^(0|[1-9]\d*)$/;
405
- const isNatureNumStr = (val) => typeof val === "string" && NatureNum.test(val);
406
- const matchIdStart = (char) => {
444
+ const isNatureNumStr = val => typeof val === "string" && NatureNum.test(val);
445
+ const matchIdStart = char => {
407
446
  const code = char.charCodeAt(0);
408
- return code >= 48 && code <= 57 || // 2. 大写字母 A-Z (65-90)
409
- code >= 65 && code <= 90 || // 3. 小写字母 a-z (97-122)
410
- code >= 97 && code <= 122 || // 4. 下划线 _ (95)
411
- code === 95 || // 5. 斜杠 / (47)
412
- code === 47 || // 5. $ / (36)
447
+ return code >= 48 && code <= 57 ||
448
+ // 2. 大写字母 A-Z (65-90)
449
+ code >= 65 && code <= 90 ||
450
+ // 3. 小写字母 a-z (97-122)
451
+ code >= 97 && code <= 122 ||
452
+ // 4. 下划线 _ (95)
453
+ code === 95 ||
454
+ // 5. 斜杠 / (47)
455
+ code === 47 ||
456
+ // 5. $ / (36)
413
457
  code === 36;
414
458
  };
415
459
  const mask = new Uint8Array(128);
416
- [36, 47, 95].forEach((c) => mask[c] = 1);
460
+ [36, 47, 95].forEach(c => mask[c] = 1);
417
461
  for (let i = 48; i <= 57; i++) mask[i] = 1;
418
462
  for (let i = 65; i <= 90; i++) mask[i] = 1;
419
463
  for (let i = 97; i <= 122; i++) mask[i] = 1;
@@ -1 +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}","export 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 return this.insetAfter(it, this._last);\n }\n\n insetAfter(it: T, anchor?: QueueItem<T>) {\n const item = { v: it, prev: null, next: null } as QueueItem<T>;\n const prev = anchor || this._first?.prev;\n const after = prev ? prev.next : this._first;\n item.prev = prev;\n item.next = after;\n\n if (prev) {\n // 子 Queue 逻辑\n if (prev.next === this._first) this._first = item;\n prev.next = item;\n } else {\n this._first = item;\n }\n if (after) {\n if (after.prev === this._last) this._last = item;\n after.prev = item;\n } else {\n this._last = item;\n }\n this.len++;\n return item;\n }\n\n delete(item: QueueItem<T>) {\n const { prev, next } = item;\n if (prev) {\n if (item === this._first) this._first = next;\n prev.next = next;\n } else {\n this._first = next;\n }\n if (next) {\n if (item === this._last) this._last = prev;\n next.prev = prev;\n } else {\n this._last = prev;\n }\n item.next = null;\n item.prev = null;\n this.len--;\n return item.v;\n }\n\n static forEach<V>(firstItem: QueueItem<V>, lastItem: QueueItem<V>, fn: (value: V, item: QueueItem<V>) => void) {\n if (!firstItem) return;\n let point = firstItem;\n let next = point.next;\n while (true) {\n fn(point.v, point);\n if (!next || point === lastItem) {\n break;\n }\n point = next;\n next = point.next;\n }\n }\n\n forEach(fn: (value: T, item: QueueItem<T>) => void) {\n if (!this._first) return;\n let point = this._first;\n let next = point.next;\n while (true) {\n fn(point.v, point);\n if (!next || point === this._last) {\n break;\n }\n point = next;\n next = point.next;\n }\n }\n /** TODO: Queue.len 不准确 */\n subRef(firstItem: QueueItem<T>, lastItem: QueueItem<T>) {\n const subQueue = new Queue<T>();\n subQueue._first = firstItem;\n subQueue._last = lastItem;\n return subQueue as SubQueue<T>;\n }\n\n shift() {\n return this.delete(this._first);\n }\n\n clone() {\n const c = new Queue<T>();\n let point = this._first;\n if (!point) return c;\n while (true) {\n c.push(point.v);\n if (point === this._last) break;\n point = point.next;\n }\n return c;\n }\n}\n\nexport type SubQueue<T> = Omit<Queue<T>, 'push' | 'insetAfter' | 'delete' | 'shift'>;\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, Queue<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 = new Queue<T>();\n data[key] = list;\n }\n return 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\nconst NatureNum = /^(0|[1-9]\\d*)$/;\nexport const isNatureNumStr = (val: unknown) => typeof val === 'string' && NatureNum.test(val);\n/**\n * 替代 /[\\$\\d\\w\\/]/.test(char) 的高性能版本\n * @param {string} char - 传入的单个字符\n * @returns {boolean}\n */\nexport const matchIdStart = (char: string) => {\n // 获取第一个字符的 Unicode 编码\n const code = char.charCodeAt(0);\n\n // 1. 数字 0-9 (48-57)\n return (\n (code >= 48 && code <= 57) ||\n // 2. 大写字母 A-Z (65-90)\n (code >= 65 && code <= 90) ||\n // 3. 小写字母 a-z (97-122)\n (code >= 97 && code <= 122) ||\n // 4. 下划线 _ (95)\n code === 95 ||\n // 5. 斜杠 / (47)\n code === 47 ||\n // 5. $ / (36)\n code === 36\n );\n};\n\n// 提前创建一个长度为 128 的布尔映射数组\nconst mask = new Uint8Array(128);\n[36, 47, 95].forEach(c => (mask[c] = 1)); // $, /, _\nfor (let i = 48; i <= 57; i++) mask[i] = 1; // 0-9\nfor (let i = 65; i <= 90; i++) mask[i] = 1; // A-Z\nfor (let i = 97; i <= 122; i++) mask[i] = 1; // a-z\n\nexport const matchIdStart2 = (char: string, i: number) => {\n const code = char.charCodeAt(i);\n return mask[code] === 1;\n};\n\nexport const jsVarRegexp = /\\b[a-zA-Z_$][a-zA-Z0-9_$]*\\b/g;\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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"}
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}","export 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 return this.insetAfter(it, this._last);\n }\n\n insetAfter(it: T, anchor?: QueueItem<T>) {\n const item = { v: it, prev: null, next: null } as QueueItem<T>;\n const prev = anchor || this._first?.prev;\n const after = prev ? prev.next : this._first;\n item.prev = prev;\n item.next = after;\n\n if (prev) {\n // 子 Queue 逻辑\n if (prev.next === this._first) this._first = item;\n prev.next = item;\n } else {\n this._first = item;\n }\n if (after) {\n if (after.prev === this._last) this._last = item;\n after.prev = item;\n } else {\n this._last = item;\n }\n this.len++;\n return item;\n }\n\n delete(item: QueueItem<T>) {\n const { prev, next } = item;\n if (prev) {\n if (item === this._first) this._first = next;\n prev.next = next;\n } else {\n this._first = next;\n }\n if (next) {\n if (item === this._last) this._last = prev;\n next.prev = prev;\n } else {\n this._last = prev;\n }\n item.next = null;\n item.prev = null;\n this.len--;\n return item.v;\n }\n\n static forEach<V>(firstItem: QueueItem<V>, lastItem: QueueItem<V>, fn: (value: V, item: QueueItem<V>) => void) {\n if (!firstItem) return;\n let point = firstItem;\n let next = point.next;\n while (true) {\n fn(point.v, point);\n if (!next || point === lastItem) {\n break;\n }\n point = next;\n next = point.next;\n }\n }\n\n forEach(fn: (value: T, item: QueueItem<T>) => void) {\n if (!this._first) return;\n let point = this._first;\n let next = point.next;\n while (true) {\n fn(point.v, point);\n if (!next || point === this._last) {\n break;\n }\n point = next;\n next = point.next;\n }\n }\n /** TODO: Queue.len 不准确 */\n subRef(firstItem: QueueItem<T>, lastItem: QueueItem<T>) {\n const subQueue = new Queue<T>();\n subQueue._first = firstItem;\n subQueue._last = lastItem;\n return subQueue as SubQueue<T>;\n }\n\n shift() {\n return this.delete(this._first);\n }\n\n clone() {\n const c = new Queue<T>();\n let point = this._first;\n if (!point) return c;\n while (true) {\n c.push(point.v);\n if (point === this._last) break;\n point = point.next;\n }\n return c;\n }\n}\n\nexport type SubQueue<T> = Omit<Queue<T>, 'push' | 'insetAfter' | 'delete' | 'shift'>;\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, Queue<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 = new Queue<T>();\n data[key] = list;\n }\n return 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\nconst NatureNum = /^(0|[1-9]\\d*)$/;\nexport const isNatureNumStr = (val: unknown) => typeof val === 'string' && NatureNum.test(val);\n/**\n * 替代 /[\\$\\d\\w\\/]/.test(char) 的高性能版本\n * @param {string} char - 传入的单个字符\n * @returns {boolean}\n */\nexport const matchIdStart = (char: string) => {\n // 获取第一个字符的 Unicode 编码\n const code = char.charCodeAt(0);\n\n // 1. 数字 0-9 (48-57)\n return (\n (code >= 48 && code <= 57) ||\n // 2. 大写字母 A-Z (65-90)\n (code >= 65 && code <= 90) ||\n // 3. 小写字母 a-z (97-122)\n (code >= 97 && code <= 122) ||\n // 4. 下划线 _ (95)\n code === 95 ||\n // 5. 斜杠 / (47)\n code === 47 ||\n // 5. $ / (36)\n code === 36\n );\n};\n\n// 提前创建一个长度为 128 的布尔映射数组\nconst mask = new Uint8Array(128);\n[36, 47, 95].forEach(c => (mask[c] = 1)); // $, /, _\nfor (let i = 48; i <= 57; i++) mask[i] = 1; // 0-9\nfor (let i = 65; i <= 90; i++) mask[i] = 1; // A-Z\nfor (let i = 97; i <= 122; i++) mask[i] = 1; // a-z\n\nexport const matchIdStart2 = (char: string, i: number) => {\n const code = char.charCodeAt(i);\n return mask[code] === 1;\n};\n\nexport const jsVarRegexp = /\\b[a-zA-Z_$][a-zA-Z0-9_$]*\\b/g;\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":["timestamp","globalThis","performance","now","bind","Date","EventMode","ProcessStatus","DefaultEventOpt","mode","ALL","BaseEvent","constructor","opt","eventQueue","status","subMap","Map","on","type","fn","suber","get","Set","add","set","off","delete","once","promiseOnce","Promise","resolve","args","setScheduler","scheduler","emit","emitImmediate","emitQueue","pause","unPause","start","processQueue","process","recallScheduler","_ref","shift","fns","allSub","forEach","it","callSub","length","dispatchEvent","iList","sort","a","b","idx","_this$eventQueue$spli","splice","_this$eventQueue$spli2","_slicedToArray","item","_ref2","clear","doCall","push","time","EventNode","pipe","_this$buildPip","buildPip","firstNode","lastNode","startWithPipeNode","PipeNode","curNode","i","toAdd","pipList","markLast","preProcessMap","preProcess","_this$buildPip2","_ref3","_ref4","from","promise","then","value","err","onFinish","isLastNode","res","pipeFn","error","Queue","len","first","_first","v","last","_last","insetAfter","anchor","prev","next","after","firstItem","lastItem","point","subRef","subQueue","clone","c","isNum","char","genKey","Math","random","SortMap","data","key","list","pick","obj","keys","reduce","acc","NatureNum","isNatureNumStr","val","test","matchIdStart","code","charCodeAt","mask","Uint8Array","matchIdStart2","jsVarRegexp"],"mappings":"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"}