maoda-commander-tt 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/README.md +168 -0
  2. package/dist/bedrock/assert/assert.d.ts +5 -0
  3. package/dist/bedrock/assert/assert.d.ts.map +1 -0
  4. package/dist/bedrock/assert/assert.js +21 -0
  5. package/dist/bedrock/assert/assert.js.map +1 -0
  6. package/dist/bedrock/assert/index.d.ts +2 -0
  7. package/dist/bedrock/assert/index.d.ts.map +1 -0
  8. package/dist/bedrock/assert/index.js +3 -0
  9. package/dist/bedrock/assert/index.js.map +1 -0
  10. package/dist/bedrock/async/barrier.d.ts +20 -0
  11. package/dist/bedrock/async/barrier.d.ts.map +1 -0
  12. package/dist/bedrock/async/barrier.js +37 -0
  13. package/dist/bedrock/async/barrier.js.map +1 -0
  14. package/dist/bedrock/async/cancellation.d.ts +28 -0
  15. package/dist/bedrock/async/cancellation.d.ts.map +1 -0
  16. package/dist/bedrock/async/cancellation.js +156 -0
  17. package/dist/bedrock/async/cancellation.js.map +1 -0
  18. package/dist/bedrock/async/idle.d.ts +9 -0
  19. package/dist/bedrock/async/idle.d.ts.map +1 -0
  20. package/dist/bedrock/async/idle.js +2 -0
  21. package/dist/bedrock/async/idle.js.map +1 -0
  22. package/dist/bedrock/async/index.d.ts +7 -0
  23. package/dist/bedrock/async/index.d.ts.map +1 -0
  24. package/dist/bedrock/async/index.js +13 -0
  25. package/dist/bedrock/async/index.js.map +1 -0
  26. package/dist/bedrock/async/promise.d.ts +59 -0
  27. package/dist/bedrock/async/promise.d.ts.map +1 -0
  28. package/dist/bedrock/async/promise.js +124 -0
  29. package/dist/bedrock/async/promise.js.map +1 -0
  30. package/dist/bedrock/async/replace-token.d.ts +61 -0
  31. package/dist/bedrock/async/replace-token.d.ts.map +1 -0
  32. package/dist/bedrock/async/replace-token.js +86 -0
  33. package/dist/bedrock/async/replace-token.js.map +1 -0
  34. package/dist/bedrock/async/serial-async-task.d.ts +10 -0
  35. package/dist/bedrock/async/serial-async-task.d.ts.map +1 -0
  36. package/dist/bedrock/async/serial-async-task.js +101 -0
  37. package/dist/bedrock/async/serial-async-task.js.map +1 -0
  38. package/dist/bedrock/async/wait.d.ts +6 -0
  39. package/dist/bedrock/async/wait.d.ts.map +1 -0
  40. package/dist/bedrock/async/wait.js +8 -0
  41. package/dist/bedrock/async/wait.js.map +1 -0
  42. package/dist/bedrock/cache/index.d.ts +2 -0
  43. package/dist/bedrock/cache/index.d.ts.map +1 -0
  44. package/dist/bedrock/cache/index.js +2 -0
  45. package/dist/bedrock/cache/index.js.map +1 -0
  46. package/dist/bedrock/cache/lru.d.ts +14 -0
  47. package/dist/bedrock/cache/lru.d.ts.map +1 -0
  48. package/dist/bedrock/cache/lru.js +44 -0
  49. package/dist/bedrock/cache/lru.js.map +1 -0
  50. package/dist/bedrock/dispose/disposable-linked-list.d.ts +6 -0
  51. package/dist/bedrock/dispose/disposable-linked-list.d.ts.map +1 -0
  52. package/dist/bedrock/dispose/disposable-linked-list.js +26 -0
  53. package/dist/bedrock/dispose/disposable-linked-list.js.map +1 -0
  54. package/dist/bedrock/dispose/disposable-store.d.ts +12 -0
  55. package/dist/bedrock/dispose/disposable-store.d.ts.map +1 -0
  56. package/dist/bedrock/dispose/disposable-store.js +61 -0
  57. package/dist/bedrock/dispose/disposable-store.js.map +1 -0
  58. package/dist/bedrock/dispose/disposable-t.d.ts +25 -0
  59. package/dist/bedrock/dispose/disposable-t.d.ts.map +1 -0
  60. package/dist/bedrock/dispose/disposable-t.js +85 -0
  61. package/dist/bedrock/dispose/disposable-t.js.map +1 -0
  62. package/dist/bedrock/dispose/disposable-utils.d.ts +6 -0
  63. package/dist/bedrock/dispose/disposable-utils.d.ts.map +1 -0
  64. package/dist/bedrock/dispose/disposable-utils.js +12 -0
  65. package/dist/bedrock/dispose/disposable-utils.js.map +1 -0
  66. package/dist/bedrock/dispose/dispose-base.d.ts +5 -0
  67. package/dist/bedrock/dispose/dispose-base.d.ts.map +1 -0
  68. package/dist/bedrock/dispose/dispose-base.js +3 -0
  69. package/dist/bedrock/dispose/dispose-base.js.map +1 -0
  70. package/dist/bedrock/dispose/index.d.ts +11 -0
  71. package/dist/bedrock/dispose/index.d.ts.map +1 -0
  72. package/dist/bedrock/dispose/index.js +8 -0
  73. package/dist/bedrock/dispose/index.js.map +1 -0
  74. package/dist/bedrock/dispose/logger.d.ts +8 -0
  75. package/dist/bedrock/dispose/logger.d.ts.map +1 -0
  76. package/dist/bedrock/dispose/logger.js +26 -0
  77. package/dist/bedrock/dispose/logger.js.map +1 -0
  78. package/dist/bedrock/dispose/tracker.d.ts +13 -0
  79. package/dist/bedrock/dispose/tracker.d.ts.map +1 -0
  80. package/dist/bedrock/dispose/tracker.js +59 -0
  81. package/dist/bedrock/dispose/tracker.js.map +1 -0
  82. package/dist/bedrock/error/error-base.d.ts +23 -0
  83. package/dist/bedrock/error/error-base.d.ts.map +1 -0
  84. package/dist/bedrock/error/error-base.js +5 -0
  85. package/dist/bedrock/error/error-base.js.map +1 -0
  86. package/dist/bedrock/error/error-code.d.ts +34 -0
  87. package/dist/bedrock/error/error-code.d.ts.map +1 -0
  88. package/dist/bedrock/error/error-code.js +36 -0
  89. package/dist/bedrock/error/error-code.js.map +1 -0
  90. package/dist/bedrock/error/error-const.d.ts +2 -0
  91. package/dist/bedrock/error/error-const.d.ts.map +1 -0
  92. package/dist/bedrock/error/error-const.js +16 -0
  93. package/dist/bedrock/error/error-const.js.map +1 -0
  94. package/dist/bedrock/error/error-or.d.ts +2 -0
  95. package/dist/bedrock/error/error-or.d.ts.map +1 -0
  96. package/dist/bedrock/error/error-or.js +3 -0
  97. package/dist/bedrock/error/error-or.js.map +1 -0
  98. package/dist/bedrock/error/error-t.d.ts +7 -0
  99. package/dist/bedrock/error/error-t.d.ts.map +1 -0
  100. package/dist/bedrock/error/error-t.js +76 -0
  101. package/dist/bedrock/error/error-t.js.map +1 -0
  102. package/dist/bedrock/error/index.d.ts +6 -0
  103. package/dist/bedrock/error/index.d.ts.map +1 -0
  104. package/dist/bedrock/error/index.js +6 -0
  105. package/dist/bedrock/error/index.js.map +1 -0
  106. package/dist/bedrock/event/emitter.d.ts +44 -0
  107. package/dist/bedrock/event/emitter.d.ts.map +1 -0
  108. package/dist/bedrock/event/emitter.js +118 -0
  109. package/dist/bedrock/event/emitter.js.map +1 -0
  110. package/dist/bedrock/event/error-handler.d.ts +14 -0
  111. package/dist/bedrock/event/error-handler.d.ts.map +1 -0
  112. package/dist/bedrock/event/error-handler.js +21 -0
  113. package/dist/bedrock/event/error-handler.js.map +1 -0
  114. package/dist/bedrock/event/index.d.ts +12 -0
  115. package/dist/bedrock/event/index.d.ts.map +1 -0
  116. package/dist/bedrock/event/index.js +10 -0
  117. package/dist/bedrock/event/index.js.map +1 -0
  118. package/dist/bedrock/event/once.d.ts +3 -0
  119. package/dist/bedrock/event/once.d.ts.map +1 -0
  120. package/dist/bedrock/event/once.js +26 -0
  121. package/dist/bedrock/event/once.js.map +1 -0
  122. package/dist/bedrock/event/phase-emitter.d.ts +113 -0
  123. package/dist/bedrock/event/phase-emitter.d.ts.map +1 -0
  124. package/dist/bedrock/event/phase-emitter.js +163 -0
  125. package/dist/bedrock/event/phase-emitter.js.map +1 -0
  126. package/dist/bedrock/event/shortcut-event-utils.d.ts +8 -0
  127. package/dist/bedrock/event/shortcut-event-utils.d.ts.map +1 -0
  128. package/dist/bedrock/event/shortcut-event-utils.js +21 -0
  129. package/dist/bedrock/event/shortcut-event-utils.js.map +1 -0
  130. package/dist/bedrock/get-or-create/get-or-create.d.ts +2 -0
  131. package/dist/bedrock/get-or-create/get-or-create.d.ts.map +1 -0
  132. package/dist/bedrock/get-or-create/get-or-create.js +15 -0
  133. package/dist/bedrock/get-or-create/get-or-create.js.map +1 -0
  134. package/dist/bedrock/get-or-create/index.d.ts +2 -0
  135. package/dist/bedrock/get-or-create/index.d.ts.map +1 -0
  136. package/dist/bedrock/get-or-create/index.js +2 -0
  137. package/dist/bedrock/get-or-create/index.js.map +1 -0
  138. package/dist/bedrock/hash/hash-t.d.ts +3 -0
  139. package/dist/bedrock/hash/hash-t.d.ts.map +1 -0
  140. package/dist/bedrock/hash/hash-t.js +12 -0
  141. package/dist/bedrock/hash/hash-t.js.map +1 -0
  142. package/dist/bedrock/hash/index.d.ts +3 -0
  143. package/dist/bedrock/hash/index.d.ts.map +1 -0
  144. package/dist/bedrock/hash/index.js +3 -0
  145. package/dist/bedrock/hash/index.js.map +1 -0
  146. package/dist/bedrock/json/index.d.ts +2 -0
  147. package/dist/bedrock/json/index.d.ts.map +1 -0
  148. package/dist/bedrock/json/index.js +2 -0
  149. package/dist/bedrock/json/index.js.map +1 -0
  150. package/dist/bedrock/json/json.d.ts +3 -0
  151. package/dist/bedrock/json/json.d.ts.map +1 -0
  152. package/dist/bedrock/json/json.js +17 -0
  153. package/dist/bedrock/json/json.js.map +1 -0
  154. package/dist/bedrock/lock/capability.d.ts +41 -0
  155. package/dist/bedrock/lock/capability.d.ts.map +1 -0
  156. package/dist/bedrock/lock/capability.js +76 -0
  157. package/dist/bedrock/lock/capability.js.map +1 -0
  158. package/dist/bedrock/lock/index.d.ts +2 -0
  159. package/dist/bedrock/lock/index.d.ts.map +1 -0
  160. package/dist/bedrock/lock/index.js +3 -0
  161. package/dist/bedrock/lock/index.js.map +1 -0
  162. package/dist/bedrock/lock/semaphore.d.ts +14 -0
  163. package/dist/bedrock/lock/semaphore.d.ts.map +1 -0
  164. package/dist/bedrock/lock/semaphore.js +18 -0
  165. package/dist/bedrock/lock/semaphore.js.map +1 -0
  166. package/dist/bedrock/lock/shared-mutex.d.ts +98 -0
  167. package/dist/bedrock/lock/shared-mutex.d.ts.map +1 -0
  168. package/dist/bedrock/lock/shared-mutex.js +223 -0
  169. package/dist/bedrock/lock/shared-mutex.js.map +1 -0
  170. package/dist/bedrock/response/index.d.ts +2 -0
  171. package/dist/bedrock/response/index.d.ts.map +1 -0
  172. package/dist/bedrock/response/index.js +2 -0
  173. package/dist/bedrock/response/index.js.map +1 -0
  174. package/dist/bedrock/response/response.d.ts +16 -0
  175. package/dist/bedrock/response/response.d.ts.map +1 -0
  176. package/dist/bedrock/response/response.js +14 -0
  177. package/dist/bedrock/response/response.js.map +1 -0
  178. package/dist/bedrock/structure/linked-list.d.ts +22 -0
  179. package/dist/bedrock/structure/linked-list.d.ts.map +1 -0
  180. package/dist/bedrock/structure/linked-list.js +96 -0
  181. package/dist/bedrock/structure/linked-list.js.map +1 -0
  182. package/dist/bedrock/uuid/index.d.ts +2 -0
  183. package/dist/bedrock/uuid/index.d.ts.map +1 -0
  184. package/dist/bedrock/uuid/index.js +2 -0
  185. package/dist/bedrock/uuid/index.js.map +1 -0
  186. package/dist/bedrock/uuid/uuid.d.ts +7 -0
  187. package/dist/bedrock/uuid/uuid.d.ts.map +1 -0
  188. package/dist/bedrock/uuid/uuid.js +59 -0
  189. package/dist/bedrock/uuid/uuid.js.map +1 -0
  190. package/dist/commands/hello-command.d.ts +16 -0
  191. package/dist/commands/hello-command.d.ts.map +1 -0
  192. package/dist/commands/hello-command.js +28 -0
  193. package/dist/commands/hello-command.js.map +1 -0
  194. package/dist/commands/index.d.ts +2 -0
  195. package/dist/commands/index.d.ts.map +1 -0
  196. package/dist/commands/index.js +2 -0
  197. package/dist/commands/index.js.map +1 -0
  198. package/dist/core/base-command.d.ts +27 -0
  199. package/dist/core/base-command.d.ts.map +1 -0
  200. package/dist/core/base-command.js +57 -0
  201. package/dist/core/base-command.js.map +1 -0
  202. package/dist/core/cli-app.d.ts +25 -0
  203. package/dist/core/cli-app.d.ts.map +1 -0
  204. package/dist/core/cli-app.js +52 -0
  205. package/dist/core/cli-app.js.map +1 -0
  206. package/dist/core/command-types.d.ts +6 -0
  207. package/dist/core/command-types.d.ts.map +1 -0
  208. package/dist/core/command-types.js +2 -0
  209. package/dist/core/command-types.js.map +1 -0
  210. package/dist/core/index.d.ts +6 -0
  211. package/dist/core/index.d.ts.map +1 -0
  212. package/dist/core/index.js +3 -0
  213. package/dist/core/index.js.map +1 -0
  214. package/dist/index.d.ts +1 -0
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +2 -0
  217. package/dist/index.js.map +1 -0
  218. package/dist/main.d.ts +3 -0
  219. package/dist/main.d.ts.map +1 -0
  220. package/dist/main.js +19 -0
  221. package/dist/main.js.map +1 -0
  222. package/package.json +53 -0
@@ -0,0 +1,44 @@
1
+ import { DisposableLinkedList } from '../dispose';
2
+ import type { IDisposable } from '../dispose';
3
+ export interface EmitterOptions {
4
+ onAddListener?: (...args: any) => any;
5
+ onRemoveListener?: (...args: any) => any;
6
+ onListenerError?: (e: any) => void;
7
+ }
8
+ declare class Listener<TArgs extends any[]> {
9
+ private readonly _callback;
10
+ private readonly _callbackThis;
11
+ constructor(callback: (...args: TArgs) => void, callbackThis: any | undefined);
12
+ invoke(...args: TArgs): void;
13
+ }
14
+ declare class EventDeliveryQueueElement<TArgs extends any[]> {
15
+ readonly emitter: Emitter<TArgs>;
16
+ readonly listener: Listener<TArgs>;
17
+ readonly event: TArgs;
18
+ constructor(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs);
19
+ }
20
+ export declare class EventDeliveryQueue {
21
+ private readonly _onListenerError;
22
+ protected _queue: DisposableLinkedList<EventDeliveryQueueElement<any>>;
23
+ constructor(_onListenerError?: (e: unknown) => void);
24
+ get size(): number;
25
+ push<TArgs extends any[]>(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs): void;
26
+ clear<TArgs extends any[]>(emitter: Emitter<TArgs>): void;
27
+ deliver(): void;
28
+ }
29
+ export interface Event<T extends any[]> {
30
+ (listener: (...args: T) => any, thisArgs?: any): IDisposable;
31
+ }
32
+ export declare class Emitter<TArgs extends any[]> {
33
+ protected _listeners?: DisposableLinkedList<Listener<TArgs>>;
34
+ private readonly _options?;
35
+ private _disposed;
36
+ private _event?;
37
+ private _deliveryQueue?;
38
+ constructor(options?: EmitterOptions);
39
+ get event(): Event<TArgs>;
40
+ dispose(): void;
41
+ fire(...event: TArgs): void;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IACtC,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IACzC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CACpC;AAKD,cAAM,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;gBAEpC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,SAAS;IAK7E,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI;CAG7B;AAKD,cAAM,yBAAyB,CAAC,KAAK,SAAS,GAAG,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBACV,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK;CAK7E;AAED,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,SAAS,CAAC,MAAM,uDAA8D;gBAG3D,gBAAgB,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAkC;IAGvF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,CAAC,KAAK,SAAS,GAAG,EAAE,EACtB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,KAAK,GACX,IAAI;IAIP,KAAK,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAUzD,OAAO,IAAI,IAAI;CAUhB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE;IACpC,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC;CAC9D;AAED,qBAAa,OAAO,CAAC,KAAK,SAAS,GAAG,EAAE;IACtC,SAAS,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAiB;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAe;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAEhC,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CA+BxB;IAED,OAAO,IAAI,IAAI;IASf,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI;CAW5B"}
@@ -0,0 +1,118 @@
1
+ /* eslint-disable @typescript-eslint/no-redundant-type-constituents */
2
+ import { DisposableLinkedList, makeSafeDisposable } from '../dispose';
3
+ import { asyncUnexpectedErrorHandler } from './error-handler';
4
+ //
5
+ // 事件监听中的回调实体
6
+ //
7
+ class Listener {
8
+ _callback;
9
+ _callbackThis;
10
+ constructor(callback, callbackThis) {
11
+ this._callback = callback;
12
+ this._callbackThis = callbackThis;
13
+ }
14
+ invoke(...args) {
15
+ this._callback.call(this._callbackThis, ...args);
16
+ }
17
+ }
18
+ //
19
+ // 存放在EventDeliveryQueue中的元素
20
+ //
21
+ class EventDeliveryQueueElement {
22
+ emitter;
23
+ listener;
24
+ event;
25
+ constructor(emitter, listener, event) {
26
+ this.emitter = emitter;
27
+ this.listener = listener;
28
+ this.event = event;
29
+ }
30
+ }
31
+ export class EventDeliveryQueue {
32
+ _onListenerError;
33
+ _queue = new DisposableLinkedList();
34
+ constructor(_onListenerError = asyncUnexpectedErrorHandler) {
35
+ this._onListenerError = _onListenerError;
36
+ }
37
+ get size() {
38
+ return this._queue.size;
39
+ }
40
+ push(emitter, listener, event) {
41
+ this._queue.push(new EventDeliveryQueueElement(emitter, listener, event));
42
+ }
43
+ clear(emitter) {
44
+ const newQueue = new DisposableLinkedList();
45
+ for (const element of this._queue) {
46
+ if (element.emitter !== emitter) {
47
+ newQueue.push(element);
48
+ }
49
+ }
50
+ this._queue = newQueue;
51
+ }
52
+ deliver() {
53
+ while (this._queue.size > 0) {
54
+ const element = this._queue.shift();
55
+ try {
56
+ element.listener.invoke(...element.event);
57
+ }
58
+ catch (e) {
59
+ this._onListenerError(e);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ export class Emitter {
65
+ _listeners;
66
+ _options;
67
+ _disposed = false;
68
+ _event;
69
+ _deliveryQueue;
70
+ constructor(options) {
71
+ this._options = options;
72
+ }
73
+ get event() {
74
+ if (this._event) {
75
+ return this._event;
76
+ }
77
+ this._event = (callback, thisArgs) => {
78
+ if (!this._listeners) {
79
+ this._listeners = new DisposableLinkedList();
80
+ }
81
+ const listener = new Listener(callback, thisArgs);
82
+ const removeListener = this._listeners.pushAndGetDisposableNode(listener);
83
+ if (this._options?.onAddListener) {
84
+ this._options.onAddListener(this, callback, thisArgs);
85
+ }
86
+ // 生成可销毁函数返回
87
+ const result = () => {
88
+ if (!this._disposed) {
89
+ removeListener();
90
+ if (this._options?.onRemoveListener) {
91
+ this._options.onRemoveListener(this, callback, thisArgs);
92
+ }
93
+ }
94
+ };
95
+ return makeSafeDisposable(result);
96
+ };
97
+ return this._event;
98
+ }
99
+ dispose() {
100
+ if (this._disposed) {
101
+ return;
102
+ }
103
+ this._disposed = true;
104
+ this._listeners?.clear();
105
+ this._deliveryQueue?.clear(this);
106
+ }
107
+ fire(...event) {
108
+ if (!this._listeners) {
109
+ return;
110
+ }
111
+ this._deliveryQueue ??= new EventDeliveryQueue(this._options?.onListenerError);
112
+ for (const listener of this._listeners) {
113
+ this._deliveryQueue.push(this, listener, event);
114
+ }
115
+ this._deliveryQueue.deliver();
116
+ }
117
+ }
118
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/bedrock/event/emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 针对未捕获的错误,异步抛出,不阻塞事件响应主流程
3
+ * 默认模式
4
+ */
5
+ export declare function asyncUnexpectedErrorHandler(e: any): undefined;
6
+ /**
7
+ * 针对未捕获的错误,同步抛出,阻塞事件响应主流程
8
+ */
9
+ export declare function syncUnexpectedError(e: any): undefined;
10
+ /**
11
+ * 针对未捕获的错误,静默掉,不进行处理
12
+ */
13
+ export declare function ignoreUnexpectedError(e: any): undefined;
14
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,CAI7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,CAErD;AAED;;GAEG;AAEH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,CAAG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 针对未捕获的错误,异步抛出,不阻塞事件响应主流程
3
+ * 默认模式
4
+ */
5
+ export function asyncUnexpectedErrorHandler(e) {
6
+ setTimeout(() => {
7
+ throw e;
8
+ }, 0);
9
+ }
10
+ /**
11
+ * 针对未捕获的错误,同步抛出,阻塞事件响应主流程
12
+ */
13
+ export function syncUnexpectedError(e) {
14
+ throw e;
15
+ }
16
+ /**
17
+ * 针对未捕获的错误,静默掉,不进行处理
18
+ */
19
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+ export function ignoreUnexpectedError(e) { }
21
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/bedrock/event/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,CAAM;IAChD,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAM;IACxC,MAAM,CAAC,CAAC;AACV,CAAC;AAED;;GAEG;AACH,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,CAAM,IAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { Emitter } from './emitter';
2
+ export type { Event } from './emitter';
3
+ export { PhaseEmitter } from './phase-emitter';
4
+ export { ShortcutEventMode } from './phase-emitter';
5
+ export type { IPhaseChecker } from './phase-emitter';
6
+ export type { PhaseEvent } from './phase-emitter';
7
+ export type { WhenPhaseEvent } from './phase-emitter';
8
+ export { listenOnce } from './once';
9
+ export { asyncUnexpectedErrorHandler } from './error-handler';
10
+ export { syncUnexpectedError } from './error-handler';
11
+ export { ignoreUnexpectedError } from './error-handler';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ // 事件相关能力
2
+ export { Emitter } from './emitter';
3
+ // 状态扭转事件触发能力
4
+ export { PhaseEmitter } from './phase-emitter';
5
+ export { ShortcutEventMode } from './phase-emitter';
6
+ export { listenOnce } from './once';
7
+ export { asyncUnexpectedErrorHandler } from './error-handler';
8
+ export { syncUnexpectedError } from './error-handler';
9
+ export { ignoreUnexpectedError } from './error-handler';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bedrock/event/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKpD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Event } from '../event';
2
+ export declare function listenOnce<TArgs extends any[]>(event: Event<TArgs>): Event<TArgs>;
3
+ //# sourceMappingURL=once.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"once.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/once.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAItC,wBAAgB,UAAU,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAyBjF"}
@@ -0,0 +1,26 @@
1
+ // 辅助能力:只监听某个事件一次
2
+ export function listenOnce(event) {
3
+ return (listener, thisArgs = null) => {
4
+ let didFire = false;
5
+ // 必须这样写,事件可能同步触发
6
+ let result = undefined;
7
+ result = event((...args) => {
8
+ if (didFire) {
9
+ return;
10
+ }
11
+ else if (result) {
12
+ result.dispose();
13
+ }
14
+ else {
15
+ didFire = true;
16
+ }
17
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
18
+ return listener.call(thisArgs, ...args);
19
+ }, null);
20
+ if (didFire) {
21
+ result.dispose();
22
+ }
23
+ return result;
24
+ };
25
+ }
26
+ //# sourceMappingURL=once.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"once.js","sourceRoot":"","sources":["../../../src/bedrock/event/once.ts"],"names":[],"mappings":"AAGA,iBAAiB;AACjB,MAAM,UAAU,UAAU,CAAsB,KAAmB;IACjE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,EAAE;QACnC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,iBAAiB;QAEjB,IAAI,MAAM,GAA4B,SAAS,CAAC;QAChD,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;YACzB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,+DAA+D;YAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { type Event, type EmitterOptions } from './emitter';
2
+ import type { IDisposable } from '../dispose';
3
+ export interface IPhaseChecker<T> {
4
+ (before: T, after: T): boolean;
5
+ }
6
+ /**
7
+ * WhenPhaseEvent相比较Event有如下特点
8
+ * 1. 增加了callback前第一个参数,可以明确listener对应的phase
9
+ * 2. 会进行状态补发
10
+ */
11
+ export interface WhenPhaseEvent<T> {
12
+ (phase: T, listener: () => any): IDisposable;
13
+ }
14
+ /**
15
+ * PhaseEvent相比较Event有如下特点
16
+ * 1. 参数一定为空
17
+ * 2. 会进行状态补发
18
+ */
19
+ export type PhaseEvent = Event<[]>;
20
+ export declare enum ShortcutEventMode {
21
+ Async = 0,
22
+ Sync = 1
23
+ }
24
+ interface IPhaseEmitterConfig<T> {
25
+ checker?: IPhaseChecker<T>;
26
+ shortcutEventMode?: ShortcutEventMode;
27
+ }
28
+ /**
29
+ * 阶段状态事件触发器,相比较原始的emitter有如下不同
30
+ * 1. 明确了事件类型一定是生命周期的扭转
31
+ * a. 必须传入一个枚举表示阶段状态
32
+ * b. 抛出的事件只能是生命周期扭转,不允许携带参数
33
+ *
34
+ * 2. 当状态已经到达,后监听,进行补发事件
35
+ *
36
+ * -------------------------
37
+ * 注意:由于存在事件补发,所以该事件触发器其实很危险,冲击到了依赖关系
38
+ * 本身A依赖B的某个事件,那么正确的顺序应该是:
39
+ * B模块初始化->A模块初始化->B抛出事件->A监听到事件
40
+ *
41
+ * 但如果存在事件补发,以下流程表面没有问题
42
+ * B模块初始化->B抛出事件->A模块初始化->A监听到事件
43
+ * 实际上可能有两个问题
44
+ * 1. A监听到的事件,并不清楚在A初始化前触发还是初始化后触发,信息丢失
45
+ * 2. B抛出事件,A其实必须要响应,响应晚了其实也是问题
46
+ *
47
+ * 所以事件补发是一件非常危险的事情,不要随意补发。
48
+ * -------------------------
49
+ *
50
+ * 只有状态扭转的事件可以存在合理的补发
51
+ * A监听B的状态变更
52
+ * 一般来说,A模块内代码的写法可能是
53
+ * ```
54
+ * if (B.isReady) {
55
+ * doSomething();
56
+ * } else {
57
+ * B.onReady(doSomething);
58
+ * }
59
+ * ```
60
+ * 这种情况,我们借助事件补发可以变成如下来减少代码量。
61
+ * ```
62
+ * B.onReady(doSomething);
63
+ * ```
64
+ *
65
+ * 最经典的事件补发就是CancellationSourceToken的设计,我们将其抽象出一种通用能力。
66
+ * 使用demo如下:
67
+ * ```
68
+ * enum Phase {
69
+ * Waiting,
70
+ * Eventually,
71
+ * }
72
+ *
73
+ * class Foo {
74
+ * phaseEmitter = new PhaseEmitter<Phase>(Phase.Waiting);
75
+ * // 方式1,监听指定的状态到达
76
+ * // 外部: foo.onEventually(doSomething);
77
+ * onEventually = this.phaseEmitter.when(Phase.Eventually);
78
+ *
79
+ * // 方式2,给予外部更高的自由度
80
+ * // 外部: foo.onPhase(Phase.Eventually, doSomething);
81
+ * onPhase = this.phaseEmitter.whenPhase;
82
+ *
83
+ * // 方式3,监听变更(该方式不会补发)
84
+ * // 外部: foo.onPhaseChange((phase) => doSomething)
85
+ * onPhaseChange = this.phaseEmitter.event;
86
+ * }
87
+ * ```
88
+ * 有问题联系基建侧同学。
89
+ */
90
+ export declare class PhaseEmitter<T, K extends T = T> {
91
+ private _currentPhase;
92
+ private readonly _phaseChecker;
93
+ private readonly _options?;
94
+ private _globalEmitter?;
95
+ private readonly _phaseEmitterMap;
96
+ private _phaseEvent?;
97
+ private readonly _shortcutEvent;
98
+ constructor(_currentPhase: K, config?: IPhaseEmitterConfig<T>, _phaseChecker?: IPhaseChecker<T>, _options?: EmitterOptions | undefined);
99
+ get currentPhase(): K;
100
+ get event(): Event<[T]>;
101
+ get whenPhase(): WhenPhaseEvent<T>;
102
+ when(phase: K): PhaseEvent;
103
+ dispose(): void;
104
+ setPhase(phase: K): void;
105
+ /**
106
+ * 该接口为了和emitter对齐,优先使用setPhase
107
+ * @deprecated 优先使用setPhase,未来可能会去掉
108
+ */
109
+ fire(phase: K): void;
110
+ private _setPhaseEmitter;
111
+ }
112
+ export {};
113
+ //# sourceMappingURL=phase-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-emitter.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/phase-emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAMrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;CAChC;AAMD;;;;GAIG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,WAAW,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAOnC,oBAAY,iBAAiB;IAC3B,KAAK,IAAA;IACL,IAAI,IAAA;CACL;AAED,UAAU,mBAAmB,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;IAOxC,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAT5B,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;IACrE,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAG7C,aAAa,EAAE,CAAC,EACxB,MAAM,GAAE,mBAAmB,CAAC,CAAC,CAAM,EAClB,aAAa,GAAE,aAAa,CAAC,CAAC,CAAgB,EAC9C,QAAQ,CAAC,EAAE,cAAc,YAAA;IAW5C,IAAI,YAAY,MAEf;IAED,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAKtB;IAED,IAAI,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC,CAgBjC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU;IAW1B,OAAO,IAAI,IAAI;IAOf,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAYxB;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAIpB,OAAO,CAAC,gBAAgB;CAYzB"}
@@ -0,0 +1,163 @@
1
+ import { lvAssert } from '../assert';
2
+ import { Emitter } from './emitter';
3
+ import { makeSyncShortcutEvent, makeAsyncShortcutEvent, } from './shortcut-event-utils';
4
+ function defaultCheck(_before, _after) {
5
+ return true;
6
+ }
7
+ export var ShortcutEventMode;
8
+ (function (ShortcutEventMode) {
9
+ ShortcutEventMode[ShortcutEventMode["Async"] = 0] = "Async";
10
+ ShortcutEventMode[ShortcutEventMode["Sync"] = 1] = "Sync";
11
+ })(ShortcutEventMode || (ShortcutEventMode = {}));
12
+ /**
13
+ * 阶段状态事件触发器,相比较原始的emitter有如下不同
14
+ * 1. 明确了事件类型一定是生命周期的扭转
15
+ * a. 必须传入一个枚举表示阶段状态
16
+ * b. 抛出的事件只能是生命周期扭转,不允许携带参数
17
+ *
18
+ * 2. 当状态已经到达,后监听,进行补发事件
19
+ *
20
+ * -------------------------
21
+ * 注意:由于存在事件补发,所以该事件触发器其实很危险,冲击到了依赖关系
22
+ * 本身A依赖B的某个事件,那么正确的顺序应该是:
23
+ * B模块初始化->A模块初始化->B抛出事件->A监听到事件
24
+ *
25
+ * 但如果存在事件补发,以下流程表面没有问题
26
+ * B模块初始化->B抛出事件->A模块初始化->A监听到事件
27
+ * 实际上可能有两个问题
28
+ * 1. A监听到的事件,并不清楚在A初始化前触发还是初始化后触发,信息丢失
29
+ * 2. B抛出事件,A其实必须要响应,响应晚了其实也是问题
30
+ *
31
+ * 所以事件补发是一件非常危险的事情,不要随意补发。
32
+ * -------------------------
33
+ *
34
+ * 只有状态扭转的事件可以存在合理的补发
35
+ * A监听B的状态变更
36
+ * 一般来说,A模块内代码的写法可能是
37
+ * ```
38
+ * if (B.isReady) {
39
+ * doSomething();
40
+ * } else {
41
+ * B.onReady(doSomething);
42
+ * }
43
+ * ```
44
+ * 这种情况,我们借助事件补发可以变成如下来减少代码量。
45
+ * ```
46
+ * B.onReady(doSomething);
47
+ * ```
48
+ *
49
+ * 最经典的事件补发就是CancellationSourceToken的设计,我们将其抽象出一种通用能力。
50
+ * 使用demo如下:
51
+ * ```
52
+ * enum Phase {
53
+ * Waiting,
54
+ * Eventually,
55
+ * }
56
+ *
57
+ * class Foo {
58
+ * phaseEmitter = new PhaseEmitter<Phase>(Phase.Waiting);
59
+ * // 方式1,监听指定的状态到达
60
+ * // 外部: foo.onEventually(doSomething);
61
+ * onEventually = this.phaseEmitter.when(Phase.Eventually);
62
+ *
63
+ * // 方式2,给予外部更高的自由度
64
+ * // 外部: foo.onPhase(Phase.Eventually, doSomething);
65
+ * onPhase = this.phaseEmitter.whenPhase;
66
+ *
67
+ * // 方式3,监听变更(该方式不会补发)
68
+ * // 外部: foo.onPhaseChange((phase) => doSomething)
69
+ * onPhaseChange = this.phaseEmitter.event;
70
+ * }
71
+ * ```
72
+ * 有问题联系基建侧同学。
73
+ */
74
+ export class PhaseEmitter {
75
+ _currentPhase;
76
+ _phaseChecker;
77
+ _options;
78
+ _globalEmitter;
79
+ _phaseEmitterMap = new Map();
80
+ _phaseEvent;
81
+ _shortcutEvent;
82
+ constructor(_currentPhase, config = {}, _phaseChecker = defaultCheck, _options) {
83
+ this._currentPhase = _currentPhase;
84
+ this._phaseChecker = _phaseChecker;
85
+ this._options = _options;
86
+ this._phaseChecker = config.checker ?? defaultCheck;
87
+ const shortcutEventMode = config.shortcutEventMode ?? ShortcutEventMode.Async;
88
+ this._shortcutEvent =
89
+ shortcutEventMode === ShortcutEventMode.Async
90
+ ? makeAsyncShortcutEvent
91
+ : makeSyncShortcutEvent;
92
+ }
93
+ get currentPhase() {
94
+ return this._currentPhase;
95
+ }
96
+ get event() {
97
+ if (!this._globalEmitter) {
98
+ this._globalEmitter = new Emitter();
99
+ }
100
+ return this._globalEmitter.event;
101
+ }
102
+ get whenPhase() {
103
+ if (this._phaseEvent) {
104
+ return this._phaseEvent;
105
+ }
106
+ this._phaseEvent = (phase, listener) => {
107
+ if (this._currentPhase === phase) {
108
+ return this._shortcutEvent(this._currentPhase)(listener);
109
+ }
110
+ if (!this._phaseEmitterMap.has(phase)) {
111
+ this._setPhaseEmitter(phase);
112
+ }
113
+ return this._phaseEmitterMap.get(phase).fn(listener);
114
+ };
115
+ return this._phaseEvent;
116
+ }
117
+ when(phase) {
118
+ if (this._currentPhase === phase) {
119
+ return this._shortcutEvent(phase);
120
+ }
121
+ if (!this._phaseEmitterMap.has(phase)) {
122
+ this._setPhaseEmitter(phase);
123
+ }
124
+ return this._phaseEmitterMap.get(phase).fn;
125
+ }
126
+ dispose() {
127
+ for (const [_phase, emitter] of this._phaseEmitterMap) {
128
+ emitter.emitter.dispose();
129
+ }
130
+ this._globalEmitter?.dispose();
131
+ }
132
+ setPhase(phase) {
133
+ if (this._currentPhase === phase) {
134
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
135
+ console.warn(`duplicate set phase: ${phase}.`);
136
+ return;
137
+ }
138
+ lvAssert(this._phaseChecker(this._currentPhase, phase));
139
+ this._currentPhase = phase;
140
+ this._phaseEmitterMap.get(phase)?.emitter.fire();
141
+ this._globalEmitter?.fire(phase);
142
+ }
143
+ /**
144
+ * 该接口为了和emitter对齐,优先使用setPhase
145
+ * @deprecated 优先使用setPhase,未来可能会去掉
146
+ */
147
+ fire(phase) {
148
+ this.setPhase(phase);
149
+ }
150
+ _setPhaseEmitter(phase) {
151
+ const emitter = new Emitter(this._options);
152
+ this._phaseEmitterMap.set(phase, {
153
+ emitter,
154
+ fn: (listener) => {
155
+ if (this._currentPhase === phase) {
156
+ return this._shortcutEvent(this._currentPhase)(listener);
157
+ }
158
+ return emitter.event(listener);
159
+ },
160
+ });
161
+ }
162
+ }
163
+ //# sourceMappingURL=phase-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-emitter.js","sourceRoot":"","sources":["../../../src/bedrock/event/phase-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { IDisposable } from '../dispose';
2
+ import type { Event } from './emitter';
3
+ export interface IMakeShortcutEvent<T> {
4
+ (val: T): Event<[T]>;
5
+ }
6
+ export declare function makeSyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
7
+ export declare function makeAsyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
8
+ //# sourceMappingURL=shortcut-event-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcut-event-utils.d.ts","sourceRoot":"","sources":["../../../src/bedrock/event/shortcut-event-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,KAAG,WAAW,CAO1D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAC7B,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,KAAG,WAAW,CAW1D"}
@@ -0,0 +1,21 @@
1
+ export function makeSyncShortcutEvent(val) {
2
+ return function (callback) {
3
+ callback(val);
4
+ return {
5
+ dispose() { },
6
+ };
7
+ };
8
+ }
9
+ export function makeAsyncShortcutEvent(val) {
10
+ return function (callback) {
11
+ const handle = setTimeout(() => {
12
+ callback(val);
13
+ }, 0);
14
+ return {
15
+ dispose() {
16
+ clearTimeout(handle);
17
+ },
18
+ };
19
+ };
20
+ }
21
+ //# sourceMappingURL=shortcut-event-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcut-event-utils.js","sourceRoot":"","sources":["../../../src/bedrock/event/shortcut-event-utils.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,qBAAqB,CAAI,GAAM;IAC7C,OAAO,UAAU,QAA0B;QACzC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,OAAO;YACL,OAAO,KAAI,CAAC;SACb,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,GAAM;IAC9C,OAAO,UAAU,QAA0B;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,OAAO;gBACL,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getOrCreate<T>(ctor: new () => T): T;
2
+ //# sourceMappingURL=get-or-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-or-create.d.ts","sourceRoot":"","sources":["../../../src/bedrock/get-or-create/get-or-create.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAOnD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 创建单例
3
+ * @param ctor
4
+ * @returns
5
+ */
6
+ const instanceMap = new WeakMap();
7
+ export function getOrCreate(ctor) {
8
+ let instance = instanceMap.get(ctor);
9
+ if (!instance) {
10
+ instance = new ctor();
11
+ instanceMap.set(ctor, instance);
12
+ }
13
+ return instance;
14
+ }
15
+ //# sourceMappingURL=get-or-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-or-create.js","sourceRoot":"","sources":["../../../src/bedrock/get-or-create/get-or-create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,GAAG,IAAI,OAAO,EAAe,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAI,IAAiB;IAC9C,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QACtB,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,QAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './get-or-create';
2
+ //# sourceMappingURL=index.d.ts.map