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.
- package/README.md +168 -0
- package/dist/bedrock/assert/assert.d.ts +5 -0
- package/dist/bedrock/assert/assert.d.ts.map +1 -0
- package/dist/bedrock/assert/assert.js +21 -0
- package/dist/bedrock/assert/assert.js.map +1 -0
- package/dist/bedrock/assert/index.d.ts +2 -0
- package/dist/bedrock/assert/index.d.ts.map +1 -0
- package/dist/bedrock/assert/index.js +3 -0
- package/dist/bedrock/assert/index.js.map +1 -0
- package/dist/bedrock/async/barrier.d.ts +20 -0
- package/dist/bedrock/async/barrier.d.ts.map +1 -0
- package/dist/bedrock/async/barrier.js +37 -0
- package/dist/bedrock/async/barrier.js.map +1 -0
- package/dist/bedrock/async/cancellation.d.ts +28 -0
- package/dist/bedrock/async/cancellation.d.ts.map +1 -0
- package/dist/bedrock/async/cancellation.js +156 -0
- package/dist/bedrock/async/cancellation.js.map +1 -0
- package/dist/bedrock/async/idle.d.ts +9 -0
- package/dist/bedrock/async/idle.d.ts.map +1 -0
- package/dist/bedrock/async/idle.js +2 -0
- package/dist/bedrock/async/idle.js.map +1 -0
- package/dist/bedrock/async/index.d.ts +7 -0
- package/dist/bedrock/async/index.d.ts.map +1 -0
- package/dist/bedrock/async/index.js +13 -0
- package/dist/bedrock/async/index.js.map +1 -0
- package/dist/bedrock/async/promise.d.ts +59 -0
- package/dist/bedrock/async/promise.d.ts.map +1 -0
- package/dist/bedrock/async/promise.js +124 -0
- package/dist/bedrock/async/promise.js.map +1 -0
- package/dist/bedrock/async/replace-token.d.ts +61 -0
- package/dist/bedrock/async/replace-token.d.ts.map +1 -0
- package/dist/bedrock/async/replace-token.js +86 -0
- package/dist/bedrock/async/replace-token.js.map +1 -0
- package/dist/bedrock/async/serial-async-task.d.ts +10 -0
- package/dist/bedrock/async/serial-async-task.d.ts.map +1 -0
- package/dist/bedrock/async/serial-async-task.js +101 -0
- package/dist/bedrock/async/serial-async-task.js.map +1 -0
- package/dist/bedrock/async/wait.d.ts +6 -0
- package/dist/bedrock/async/wait.d.ts.map +1 -0
- package/dist/bedrock/async/wait.js +8 -0
- package/dist/bedrock/async/wait.js.map +1 -0
- package/dist/bedrock/cache/index.d.ts +2 -0
- package/dist/bedrock/cache/index.d.ts.map +1 -0
- package/dist/bedrock/cache/index.js +2 -0
- package/dist/bedrock/cache/index.js.map +1 -0
- package/dist/bedrock/cache/lru.d.ts +14 -0
- package/dist/bedrock/cache/lru.d.ts.map +1 -0
- package/dist/bedrock/cache/lru.js +44 -0
- package/dist/bedrock/cache/lru.js.map +1 -0
- package/dist/bedrock/dispose/disposable-linked-list.d.ts +6 -0
- package/dist/bedrock/dispose/disposable-linked-list.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-linked-list.js +26 -0
- package/dist/bedrock/dispose/disposable-linked-list.js.map +1 -0
- package/dist/bedrock/dispose/disposable-store.d.ts +12 -0
- package/dist/bedrock/dispose/disposable-store.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-store.js +61 -0
- package/dist/bedrock/dispose/disposable-store.js.map +1 -0
- package/dist/bedrock/dispose/disposable-t.d.ts +25 -0
- package/dist/bedrock/dispose/disposable-t.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-t.js +85 -0
- package/dist/bedrock/dispose/disposable-t.js.map +1 -0
- package/dist/bedrock/dispose/disposable-utils.d.ts +6 -0
- package/dist/bedrock/dispose/disposable-utils.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-utils.js +12 -0
- package/dist/bedrock/dispose/disposable-utils.js.map +1 -0
- package/dist/bedrock/dispose/dispose-base.d.ts +5 -0
- package/dist/bedrock/dispose/dispose-base.d.ts.map +1 -0
- package/dist/bedrock/dispose/dispose-base.js +3 -0
- package/dist/bedrock/dispose/dispose-base.js.map +1 -0
- package/dist/bedrock/dispose/index.d.ts +11 -0
- package/dist/bedrock/dispose/index.d.ts.map +1 -0
- package/dist/bedrock/dispose/index.js +8 -0
- package/dist/bedrock/dispose/index.js.map +1 -0
- package/dist/bedrock/dispose/logger.d.ts +8 -0
- package/dist/bedrock/dispose/logger.d.ts.map +1 -0
- package/dist/bedrock/dispose/logger.js +26 -0
- package/dist/bedrock/dispose/logger.js.map +1 -0
- package/dist/bedrock/dispose/tracker.d.ts +13 -0
- package/dist/bedrock/dispose/tracker.d.ts.map +1 -0
- package/dist/bedrock/dispose/tracker.js +59 -0
- package/dist/bedrock/dispose/tracker.js.map +1 -0
- package/dist/bedrock/error/error-base.d.ts +23 -0
- package/dist/bedrock/error/error-base.d.ts.map +1 -0
- package/dist/bedrock/error/error-base.js +5 -0
- package/dist/bedrock/error/error-base.js.map +1 -0
- package/dist/bedrock/error/error-code.d.ts +34 -0
- package/dist/bedrock/error/error-code.d.ts.map +1 -0
- package/dist/bedrock/error/error-code.js +36 -0
- package/dist/bedrock/error/error-code.js.map +1 -0
- package/dist/bedrock/error/error-const.d.ts +2 -0
- package/dist/bedrock/error/error-const.d.ts.map +1 -0
- package/dist/bedrock/error/error-const.js +16 -0
- package/dist/bedrock/error/error-const.js.map +1 -0
- package/dist/bedrock/error/error-or.d.ts +2 -0
- package/dist/bedrock/error/error-or.d.ts.map +1 -0
- package/dist/bedrock/error/error-or.js +3 -0
- package/dist/bedrock/error/error-or.js.map +1 -0
- package/dist/bedrock/error/error-t.d.ts +7 -0
- package/dist/bedrock/error/error-t.d.ts.map +1 -0
- package/dist/bedrock/error/error-t.js +76 -0
- package/dist/bedrock/error/error-t.js.map +1 -0
- package/dist/bedrock/error/index.d.ts +6 -0
- package/dist/bedrock/error/index.d.ts.map +1 -0
- package/dist/bedrock/error/index.js +6 -0
- package/dist/bedrock/error/index.js.map +1 -0
- package/dist/bedrock/event/emitter.d.ts +44 -0
- package/dist/bedrock/event/emitter.d.ts.map +1 -0
- package/dist/bedrock/event/emitter.js +118 -0
- package/dist/bedrock/event/emitter.js.map +1 -0
- package/dist/bedrock/event/error-handler.d.ts +14 -0
- package/dist/bedrock/event/error-handler.d.ts.map +1 -0
- package/dist/bedrock/event/error-handler.js +21 -0
- package/dist/bedrock/event/error-handler.js.map +1 -0
- package/dist/bedrock/event/index.d.ts +12 -0
- package/dist/bedrock/event/index.d.ts.map +1 -0
- package/dist/bedrock/event/index.js +10 -0
- package/dist/bedrock/event/index.js.map +1 -0
- package/dist/bedrock/event/once.d.ts +3 -0
- package/dist/bedrock/event/once.d.ts.map +1 -0
- package/dist/bedrock/event/once.js +26 -0
- package/dist/bedrock/event/once.js.map +1 -0
- package/dist/bedrock/event/phase-emitter.d.ts +113 -0
- package/dist/bedrock/event/phase-emitter.d.ts.map +1 -0
- package/dist/bedrock/event/phase-emitter.js +163 -0
- package/dist/bedrock/event/phase-emitter.js.map +1 -0
- package/dist/bedrock/event/shortcut-event-utils.d.ts +8 -0
- package/dist/bedrock/event/shortcut-event-utils.d.ts.map +1 -0
- package/dist/bedrock/event/shortcut-event-utils.js +21 -0
- package/dist/bedrock/event/shortcut-event-utils.js.map +1 -0
- package/dist/bedrock/get-or-create/get-or-create.d.ts +2 -0
- package/dist/bedrock/get-or-create/get-or-create.d.ts.map +1 -0
- package/dist/bedrock/get-or-create/get-or-create.js +15 -0
- package/dist/bedrock/get-or-create/get-or-create.js.map +1 -0
- package/dist/bedrock/get-or-create/index.d.ts +2 -0
- package/dist/bedrock/get-or-create/index.d.ts.map +1 -0
- package/dist/bedrock/get-or-create/index.js +2 -0
- package/dist/bedrock/get-or-create/index.js.map +1 -0
- package/dist/bedrock/hash/hash-t.d.ts +3 -0
- package/dist/bedrock/hash/hash-t.d.ts.map +1 -0
- package/dist/bedrock/hash/hash-t.js +12 -0
- package/dist/bedrock/hash/hash-t.js.map +1 -0
- package/dist/bedrock/hash/index.d.ts +3 -0
- package/dist/bedrock/hash/index.d.ts.map +1 -0
- package/dist/bedrock/hash/index.js +3 -0
- package/dist/bedrock/hash/index.js.map +1 -0
- package/dist/bedrock/json/index.d.ts +2 -0
- package/dist/bedrock/json/index.d.ts.map +1 -0
- package/dist/bedrock/json/index.js +2 -0
- package/dist/bedrock/json/index.js.map +1 -0
- package/dist/bedrock/json/json.d.ts +3 -0
- package/dist/bedrock/json/json.d.ts.map +1 -0
- package/dist/bedrock/json/json.js +17 -0
- package/dist/bedrock/json/json.js.map +1 -0
- package/dist/bedrock/lock/capability.d.ts +41 -0
- package/dist/bedrock/lock/capability.d.ts.map +1 -0
- package/dist/bedrock/lock/capability.js +76 -0
- package/dist/bedrock/lock/capability.js.map +1 -0
- package/dist/bedrock/lock/index.d.ts +2 -0
- package/dist/bedrock/lock/index.d.ts.map +1 -0
- package/dist/bedrock/lock/index.js +3 -0
- package/dist/bedrock/lock/index.js.map +1 -0
- package/dist/bedrock/lock/semaphore.d.ts +14 -0
- package/dist/bedrock/lock/semaphore.d.ts.map +1 -0
- package/dist/bedrock/lock/semaphore.js +18 -0
- package/dist/bedrock/lock/semaphore.js.map +1 -0
- package/dist/bedrock/lock/shared-mutex.d.ts +98 -0
- package/dist/bedrock/lock/shared-mutex.d.ts.map +1 -0
- package/dist/bedrock/lock/shared-mutex.js +223 -0
- package/dist/bedrock/lock/shared-mutex.js.map +1 -0
- package/dist/bedrock/response/index.d.ts +2 -0
- package/dist/bedrock/response/index.d.ts.map +1 -0
- package/dist/bedrock/response/index.js +2 -0
- package/dist/bedrock/response/index.js.map +1 -0
- package/dist/bedrock/response/response.d.ts +16 -0
- package/dist/bedrock/response/response.d.ts.map +1 -0
- package/dist/bedrock/response/response.js +14 -0
- package/dist/bedrock/response/response.js.map +1 -0
- package/dist/bedrock/structure/linked-list.d.ts +22 -0
- package/dist/bedrock/structure/linked-list.d.ts.map +1 -0
- package/dist/bedrock/structure/linked-list.js +96 -0
- package/dist/bedrock/structure/linked-list.js.map +1 -0
- package/dist/bedrock/uuid/index.d.ts +2 -0
- package/dist/bedrock/uuid/index.d.ts.map +1 -0
- package/dist/bedrock/uuid/index.js +2 -0
- package/dist/bedrock/uuid/index.js.map +1 -0
- package/dist/bedrock/uuid/uuid.d.ts +7 -0
- package/dist/bedrock/uuid/uuid.d.ts.map +1 -0
- package/dist/bedrock/uuid/uuid.js +59 -0
- package/dist/bedrock/uuid/uuid.js.map +1 -0
- package/dist/commands/hello-command.d.ts +16 -0
- package/dist/commands/hello-command.d.ts.map +1 -0
- package/dist/commands/hello-command.js +28 -0
- package/dist/commands/hello-command.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/base-command.d.ts +27 -0
- package/dist/core/base-command.d.ts.map +1 -0
- package/dist/core/base-command.js +57 -0
- package/dist/core/base-command.js.map +1 -0
- package/dist/core/cli-app.d.ts +25 -0
- package/dist/core/cli-app.d.ts.map +1 -0
- package/dist/core/cli-app.js +52 -0
- package/dist/core/cli-app.js.map +1 -0
- package/dist/core/command-types.d.ts +6 -0
- package/dist/core/command-types.d.ts.map +1 -0
- package/dist/core/command-types.js +2 -0
- package/dist/core/command-types.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +19 -0
- package/dist/main.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|