@zk-tech/bedrock 0.0.1
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 +24 -0
- package/dist/array/index.cjs +22 -0
- package/dist/array/index.cjs.map +1 -0
- package/dist/array/index.d.cts +13 -0
- package/dist/array/index.d.ts +13 -0
- package/dist/array/index.js +19 -0
- package/dist/array/index.js.map +1 -0
- package/dist/assert/index.cjs +29 -0
- package/dist/assert/index.cjs.map +1 -0
- package/dist/assert/index.d.cts +25 -0
- package/dist/assert/index.d.ts +25 -0
- package/dist/assert/index.js +24 -0
- package/dist/assert/index.js.map +1 -0
- package/dist/async/index.cjs +746 -0
- package/dist/async/index.cjs.map +1 -0
- package/dist/async/index.d.cts +47 -0
- package/dist/async/index.d.ts +47 -0
- package/dist/async/index.js +738 -0
- package/dist/async/index.js.map +1 -0
- package/dist/barrier-316Xonfd.d.cts +18 -0
- package/dist/barrier-316Xonfd.d.ts +18 -0
- package/dist/byte/index.cjs +59 -0
- package/dist/byte/index.cjs.map +1 -0
- package/dist/byte/index.d.cts +12 -0
- package/dist/byte/index.d.ts +12 -0
- package/dist/byte/index.js +49 -0
- package/dist/byte/index.js.map +1 -0
- package/dist/cache/index.cjs +418 -0
- package/dist/cache/index.cjs.map +1 -0
- package/dist/cache/index.d.cts +40 -0
- package/dist/cache/index.d.ts +40 -0
- package/dist/cache/index.js +415 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cancellation-BIIv2UJm.d.cts +25 -0
- package/dist/cancellation-ClqPPsV1.d.ts +25 -0
- package/dist/context/index.cjs +59 -0
- package/dist/context/index.cjs.map +1 -0
- package/dist/context/index.d.cts +33 -0
- package/dist/context/index.d.ts +33 -0
- package/dist/context/index.js +51 -0
- package/dist/context/index.js.map +1 -0
- package/dist/di/index.cjs +1965 -0
- package/dist/di/index.cjs.map +1 -0
- package/dist/di/index.d.cts +140 -0
- package/dist/di/index.d.ts +140 -0
- package/dist/di/index.js +1949 -0
- package/dist/di/index.js.map +1 -0
- package/dist/disposable-t-B15Nu57y.d.ts +93 -0
- package/dist/disposable-t-CVsiyHPL.d.cts +93 -0
- package/dist/dispose/index.cjs +356 -0
- package/dist/dispose/index.cjs.map +1 -0
- package/dist/dispose/index.d.cts +26 -0
- package/dist/dispose/index.d.ts +26 -0
- package/dist/dispose/index.js +340 -0
- package/dist/dispose/index.js.map +1 -0
- package/dist/dispose-base-CAeXDpjg.d.cts +6 -0
- package/dist/dispose-base-CAeXDpjg.d.ts +6 -0
- package/dist/emitter-CAfCtSTg.d.cts +35 -0
- package/dist/emitter-DeM5mlEm.d.ts +35 -0
- package/dist/error/index.cjs +145 -0
- package/dist/error/index.cjs.map +1 -0
- package/dist/error/index.d.cts +45 -0
- package/dist/error/index.d.ts +45 -0
- package/dist/error/index.js +126 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error-base-B4zaiJ5m.d.cts +32 -0
- package/dist/error-base-B4zaiJ5m.d.ts +32 -0
- package/dist/event/index.cjs +550 -0
- package/dist/event/index.cjs.map +1 -0
- package/dist/event/index.d.cts +139 -0
- package/dist/event/index.d.ts +139 -0
- package/dist/event/index.js +538 -0
- package/dist/event/index.js.map +1 -0
- package/dist/function/index.cjs +132 -0
- package/dist/function/index.cjs.map +1 -0
- package/dist/function/index.d.cts +26 -0
- package/dist/function/index.d.ts +26 -0
- package/dist/function/index.js +129 -0
- package/dist/function/index.js.map +1 -0
- package/dist/graph-BGbNOniY.d.cts +23 -0
- package/dist/graph-BGbNOniY.d.ts +23 -0
- package/dist/hash/index.cjs +54 -0
- package/dist/hash/index.cjs.map +1 -0
- package/dist/hash/index.d.cts +5 -0
- package/dist/hash/index.d.ts +5 -0
- package/dist/hash/index.js +50 -0
- package/dist/hash/index.js.map +1 -0
- package/dist/instantiation-service.interface-CVFMBUUD.d.cts +78 -0
- package/dist/instantiation-service.interface-CVFMBUUD.d.ts +78 -0
- package/dist/json/index.cjs +28 -0
- package/dist/json/index.cjs.map +1 -0
- package/dist/json/index.d.cts +8 -0
- package/dist/json/index.d.ts +8 -0
- package/dist/json/index.js +26 -0
- package/dist/json/index.js.map +1 -0
- package/dist/launch/index.cjs +213 -0
- package/dist/launch/index.cjs.map +1 -0
- package/dist/launch/index.d.cts +46 -0
- package/dist/launch/index.d.ts +46 -0
- package/dist/launch/index.js +211 -0
- package/dist/launch/index.js.map +1 -0
- package/dist/linked-list-CUkue5DZ.d.cts +24 -0
- package/dist/linked-list-CUkue5DZ.d.ts +24 -0
- package/dist/lock/index.cjs +662 -0
- package/dist/lock/index.cjs.map +1 -0
- package/dist/lock/index.d.cts +145 -0
- package/dist/lock/index.d.ts +145 -0
- package/dist/lock/index.js +656 -0
- package/dist/lock/index.js.map +1 -0
- package/dist/lodash-es/index.cjs +14 -0
- package/dist/lodash-es/index.cjs.map +1 -0
- package/dist/lodash-es/index.d.cts +1 -0
- package/dist/lodash-es/index.d.ts +1 -0
- package/dist/lodash-es/index.js +3 -0
- package/dist/lodash-es/index.js.map +1 -0
- package/dist/math/index.cjs +161 -0
- package/dist/math/index.cjs.map +1 -0
- package/dist/math/index.d.cts +76 -0
- package/dist/math/index.d.ts +76 -0
- package/dist/math/index.js +156 -0
- package/dist/math/index.js.map +1 -0
- package/dist/network/index.cjs +91 -0
- package/dist/network/index.cjs.map +1 -0
- package/dist/network/index.d.cts +62 -0
- package/dist/network/index.d.ts +62 -0
- package/dist/network/index.js +82 -0
- package/dist/network/index.js.map +1 -0
- package/dist/objects/index.cjs +80 -0
- package/dist/objects/index.cjs.map +1 -0
- package/dist/objects/index.d.cts +11 -0
- package/dist/objects/index.d.ts +11 -0
- package/dist/objects/index.js +77 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/platform/index.cjs +62 -0
- package/dist/platform/index.cjs.map +1 -0
- package/dist/platform/index.d.cts +21 -0
- package/dist/platform/index.d.ts +21 -0
- package/dist/platform/index.js +48 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/promise/index.cjs +639 -0
- package/dist/promise/index.cjs.map +1 -0
- package/dist/promise/index.d.cts +63 -0
- package/dist/promise/index.d.ts +63 -0
- package/dist/promise/index.js +633 -0
- package/dist/promise/index.js.map +1 -0
- package/dist/scheduler/index.cjs +599 -0
- package/dist/scheduler/index.cjs.map +1 -0
- package/dist/scheduler/index.d.cts +57 -0
- package/dist/scheduler/index.d.ts +57 -0
- package/dist/scheduler/index.js +594 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/sprintf/index.cjs +101 -0
- package/dist/sprintf/index.cjs.map +1 -0
- package/dist/sprintf/index.d.cts +3 -0
- package/dist/sprintf/index.d.ts +3 -0
- package/dist/sprintf/index.js +99 -0
- package/dist/sprintf/index.js.map +1 -0
- package/dist/structure/index.cjs +300 -0
- package/dist/structure/index.cjs.map +1 -0
- package/dist/structure/index.d.cts +21 -0
- package/dist/structure/index.d.ts +21 -0
- package/dist/structure/index.js +296 -0
- package/dist/structure/index.js.map +1 -0
- package/dist/type/index.cjs +4 -0
- package/dist/type/index.cjs.map +1 -0
- package/dist/type/index.d.cts +20 -0
- package/dist/type/index.d.ts +20 -0
- package/dist/type/index.js +3 -0
- package/dist/type/index.js.map +1 -0
- package/dist/undo-redo-stack/index.cjs +545 -0
- package/dist/undo-redo-stack/index.cjs.map +1 -0
- package/dist/undo-redo-stack/index.d.cts +130 -0
- package/dist/undo-redo-stack/index.d.ts +130 -0
- package/dist/undo-redo-stack/index.js +542 -0
- package/dist/undo-redo-stack/index.js.map +1 -0
- package/dist/uuid/index.cjs +67 -0
- package/dist/uuid/index.cjs.map +1 -0
- package/dist/uuid/index.d.cts +17 -0
- package/dist/uuid/index.d.ts +17 -0
- package/dist/uuid/index.js +61 -0
- package/dist/uuid/index.js.map +1 -0
- package/dist/worker/index.cjs +271 -0
- package/dist/worker/index.cjs.map +1 -0
- package/dist/worker/index.d.cts +66 -0
- package/dist/worker/index.d.ts +66 -0
- package/dist/worker/index.js +267 -0
- package/dist/worker/index.js.map +1 -0
- package/package.json +285 -0
- package/src/_internal/logger.ts +59 -0
- package/src/array/array.test.ts +35 -0
- package/src/array/array.ts +25 -0
- package/src/array/index.ts +1 -0
- package/src/assert/assert.test.ts +86 -0
- package/src/assert/assert.ts +42 -0
- package/src/assert/index.ts +2 -0
- package/src/async/barrier.test.ts +90 -0
- package/src/async/barrier.ts +58 -0
- package/src/async/cancellation.test.ts +85 -0
- package/src/async/cancellation.ts +193 -0
- package/src/async/index.ts +18 -0
- package/src/async/queue/queue.test.ts +70 -0
- package/src/async/queue/queue.ts +56 -0
- package/src/async/queue/task.test.ts +155 -0
- package/src/async/queue/task.ts +67 -0
- package/src/async/utils.test.ts +28 -0
- package/src/async/utils.ts +8 -0
- package/src/async/wait.ts +9 -0
- package/src/byte/format.test.ts +64 -0
- package/src/byte/format.ts +44 -0
- package/src/byte/index.ts +2 -0
- package/src/byte/node_modules/.vitest/results.json +1 -0
- package/src/byte/var.ts +11 -0
- package/src/cache/index.ts +2 -0
- package/src/cache/lru-with-timeout.test.ts +88 -0
- package/src/cache/lru-with-timeout.ts +85 -0
- package/src/cache/lru.test.ts +56 -0
- package/src/cache/lru.ts +59 -0
- package/src/context/context.test.ts +17 -0
- package/src/context/context.ts +60 -0
- package/src/context/index.ts +8 -0
- package/src/di/base.ts +73 -0
- package/src/di/container-service.test.ts +179 -0
- package/src/di/context.web.tsx +41 -0
- package/src/di/descriptor.ts +31 -0
- package/src/di/idle-value.test.ts +73 -0
- package/src/di/idle-value.ts +63 -0
- package/src/di/index.common.ts +32 -0
- package/src/di/index.ts +2 -0
- package/src/di/instantiation-service.interface.ts +46 -0
- package/src/di/instantiation-service.test.ts +337 -0
- package/src/di/instantiation-service.ts +468 -0
- package/src/di/lazy/foo.mock.ts +28 -0
- package/src/di/lazy/idle-load.ts +39 -0
- package/src/di/lazy/index.ts +4 -0
- package/src/di/lazy/lazy-service.test.ts +65 -0
- package/src/di/lazy/lazy-service.ts +71 -0
- package/src/di/lazy/type.ts +5 -0
- package/src/di/node_modules/.vitest/results.json +1 -0
- package/src/di/proxy-builder.test.ts +45 -0
- package/src/di/proxy-builder.ts +38 -0
- package/src/di/service-collection.test.ts +27 -0
- package/src/di/service-collection.ts +46 -0
- package/src/di/service-ownership-collection.test.ts +39 -0
- package/src/di/service-ownership-collection.ts +38 -0
- package/src/di/service-registry.test.ts +66 -0
- package/src/di/service-registry.ts +99 -0
- package/src/di/trace.ts +85 -0
- package/src/dispose/disposable-store.test.ts +57 -0
- package/src/dispose/disposable-store.ts +80 -0
- package/src/dispose/disposable-t.test.ts +123 -0
- package/src/dispose/disposable-t.ts +238 -0
- package/src/dispose/disposable-utils.test.ts +15 -0
- package/src/dispose/disposable-utils.ts +28 -0
- package/src/dispose/dispose-base.ts +9 -0
- package/src/dispose/index.ts +34 -0
- package/src/dispose/logger.test.ts +65 -0
- package/src/dispose/logger.ts +39 -0
- package/src/dispose/timer.test.ts +30 -0
- package/src/dispose/timer.ts +16 -0
- package/src/dispose/tracker.test.ts +51 -0
- package/src/dispose/tracker.ts +105 -0
- package/src/error/error-base.ts +45 -0
- package/src/error/error-code.ts +39 -0
- package/src/error/error-const.test.ts +30 -0
- package/src/error/error-const.ts +16 -0
- package/src/error/error-or.test.ts +44 -0
- package/src/error/error-or.ts +2 -0
- package/src/error/error-t.test.ts +116 -0
- package/src/error/error-t.ts +100 -0
- package/src/error/index.ts +24 -0
- package/src/error/node_modules/.vitest/results.json +1 -0
- package/src/event/disposable-linked-list.ts +29 -0
- package/src/event/emitter.test.ts +191 -0
- package/src/event/emitter.ts +162 -0
- package/src/event/error-handler.ts +22 -0
- package/src/event/index.ts +34 -0
- package/src/event/once.ts +29 -0
- package/src/event/phase-emitter.test.ts +212 -0
- package/src/event/phase-emitter.ts +209 -0
- package/src/event/shortcut-event-utils.ts +33 -0
- package/src/event/utils.ts +6 -0
- package/src/event/when.ts +40 -0
- package/src/function/debounce.test.ts +274 -0
- package/src/function/debounce.ts +168 -0
- package/src/function/index.ts +2 -0
- package/src/function/node_modules/.vitest/results.json +1 -0
- package/src/function/throttle.test.ts +179 -0
- package/src/function/throttle.ts +26 -0
- package/src/hash/hash-t.test.ts +100 -0
- package/src/hash/hash-t.ts +51 -0
- package/src/hash/index.ts +3 -0
- package/src/json/index.ts +1 -0
- package/src/json/node_modules/.vitest/results.json +1 -0
- package/src/json/parse.ts +19 -0
- package/src/launch/abstract-job.ts +45 -0
- package/src/launch/cost-recorder.ts +22 -0
- package/src/launch/index.ts +2 -0
- package/src/launch/job-scheduler.test.ts +122 -0
- package/src/launch/job-scheduler.ts +118 -0
- package/src/launch/node_modules/.vitest/deps/_metadata.json +8 -0
- package/src/launch/node_modules/.vitest/deps/package.json +3 -0
- package/src/launch/node_modules/.vitest/results.json +1 -0
- package/src/lock/README.md +11 -0
- package/src/lock/capability.test.ts +110 -0
- package/src/lock/capability.ts +89 -0
- package/src/lock/index.ts +15 -0
- package/src/lock/node_modules/.vitest/results.json +1 -0
- package/src/lock/semaphore.ts +21 -0
- package/src/lock/shared-mutex.test.ts +537 -0
- package/src/lock/shared-mutex.ts +242 -0
- package/src/lock/utils.test.ts +165 -0
- package/src/lock/utils.ts +135 -0
- package/src/lodash-es/index.ts +1 -0
- package/src/math/degree.ts +16 -0
- package/src/math/index.ts +7 -0
- package/src/math/math.test.ts +40 -0
- package/src/math/math.ts +64 -0
- package/src/math/node_modules/.vitest/results.json +1 -0
- package/src/math/vector.test.ts +73 -0
- package/src/math/vector.ts +114 -0
- package/src/network/client.interface.ts +104 -0
- package/src/network/client.web.ts +24 -0
- package/src/network/index.common.ts +10 -0
- package/src/network/index.ts +2 -0
- package/src/network/plugins/retry.ts +98 -0
- package/src/objects/deep-clone.test.ts +40 -0
- package/src/objects/deep-clone.ts +13 -0
- package/src/objects/deep-equal.test.ts +86 -0
- package/src/objects/deep-equal.ts +60 -0
- package/src/objects/index.ts +4 -0
- package/src/platform/index.ts +64 -0
- package/src/promise/index.ts +16 -0
- package/src/promise/promise.test.ts +254 -0
- package/src/promise/promise.ts +212 -0
- package/src/scheduler/callback-token.ts +31 -0
- package/src/scheduler/core/actuator-args.test.ts +47 -0
- package/src/scheduler/core/actuator.test.ts +82 -0
- package/src/scheduler/core/actuator.ts +58 -0
- package/src/scheduler/core/chunk-scheduler.test.ts +54 -0
- package/src/scheduler/core/chunk-scheduler.ts +28 -0
- package/src/scheduler/core/node_modules/.vitest/results.json +1 -0
- package/src/scheduler/core/scheduler.test.ts +328 -0
- package/src/scheduler/core/scheduler.ts +172 -0
- package/src/scheduler/core/task-queue.test.ts +78 -0
- package/src/scheduler/core/task-queue.ts +44 -0
- package/src/scheduler/core/task.test.ts +34 -0
- package/src/scheduler/core/task.ts +52 -0
- package/src/scheduler/core/utils.ts +48 -0
- package/src/scheduler/executor/abstract-executor.test.ts +44 -0
- package/src/scheduler/executor/abstract-executor.ts +38 -0
- package/src/scheduler/executor/executor.interface.ts +39 -0
- package/src/scheduler/executor/idle-callback-executor.test.ts +70 -0
- package/src/scheduler/executor/idle-callback-executor.ts +98 -0
- package/src/scheduler/executor/make-executor.ts +18 -0
- package/src/scheduler/executor/post-message-executor.test.ts +66 -0
- package/src/scheduler/executor/post-message-executor.ts +52 -0
- package/src/scheduler/index.ts +15 -0
- package/src/scheduler/lv-scheduler-callback.ts +19 -0
- package/src/scheduler/lv-scheduler-config.ts +17 -0
- package/src/scheduler/type.ts +48 -0
- package/src/sprintf/index.ts +2 -0
- package/src/sprintf/sprintf.test.ts +95 -0
- package/src/sprintf/sprintf.ts +97 -0
- package/src/structure/graph.test.ts +181 -0
- package/src/structure/graph.ts +105 -0
- package/src/structure/index.ts +8 -0
- package/src/structure/linked-list.test.ts +74 -0
- package/src/structure/linked-list.ts +145 -0
- package/src/structure/min-heap.test.ts +71 -0
- package/src/structure/min-heap.ts +91 -0
- package/src/type/REAME.md +2 -0
- package/src/type/distributive-omit.interface.ts +4 -0
- package/src/type/index.ts +3 -0
- package/src/type/object-key-paths.interface.ts +40 -0
- package/src/undo-redo-stack/README.md +61 -0
- package/src/undo-redo-stack/action-stack.test.ts +330 -0
- package/src/undo-redo-stack/action-stack.ts +150 -0
- package/src/undo-redo-stack/element.ts +4 -0
- package/src/undo-redo-stack/index.ts +7 -0
- package/src/undo-redo-stack/state-stack.test.ts +118 -0
- package/src/undo-redo-stack/state-stack.ts +133 -0
- package/src/uuid/index.ts +7 -0
- package/src/uuid/uuid.ts +86 -0
- package/src/worker/cors-worker.ts +38 -0
- package/src/worker/index.ts +4 -0
- package/src/worker/node_modules/.vitest/results.json +1 -0
- package/src/worker/promise-worker-main-thread.test.ts +91 -0
- package/src/worker/promise-worker-main-thread.ts +76 -0
- package/src/worker/promise-worker-worker-thread.ts +64 -0
- package/src/worker/promise-worker.interface.ts +15 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { b as EmitterOptions, E as Event } from '../emitter-CAfCtSTg.cjs';
|
|
2
|
+
export { a as Emitter } from '../emitter-CAfCtSTg.cjs';
|
|
3
|
+
import { I as IDisposable } from '../dispose-base-CAeXDpjg.cjs';
|
|
4
|
+
import '../linked-list-CUkue5DZ.cjs';
|
|
5
|
+
|
|
6
|
+
interface IPhaseChecker<T> {
|
|
7
|
+
(before: T, after: T): boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* WhenPhaseEvent相比较Event有如下特点
|
|
11
|
+
* 1. 增加了callback前第一个参数,可以明确listener对应的phase
|
|
12
|
+
* 2. 会进行状态补发
|
|
13
|
+
*/
|
|
14
|
+
interface WhenPhaseEvent<T> {
|
|
15
|
+
(phase: T, listener: () => any): IDisposable;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* PhaseEvent相比较Event有如下特点
|
|
19
|
+
* 1. 参数一定为空
|
|
20
|
+
* 2. 会进行状态补发
|
|
21
|
+
*/
|
|
22
|
+
type PhaseEvent = Event<[]>;
|
|
23
|
+
declare enum ShortcutEventMode {
|
|
24
|
+
Async = 0,
|
|
25
|
+
Sync = 1
|
|
26
|
+
}
|
|
27
|
+
interface IPhaseEmitterConfig<T> {
|
|
28
|
+
checker?: IPhaseChecker<T>;
|
|
29
|
+
shortcutEventMode?: ShortcutEventMode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 阶段状态事件触发器,相比较原始的emitter有如下不同
|
|
33
|
+
* 1. 明确了事件类型一定是生命周期的扭转
|
|
34
|
+
* a. 必须传入一个枚举表示阶段状态
|
|
35
|
+
* b. 抛出的事件只能是生命周期扭转,不允许携带参数
|
|
36
|
+
*
|
|
37
|
+
* 2. 当状态已经到达,后监听,进行补发事件
|
|
38
|
+
*
|
|
39
|
+
* -------------------------
|
|
40
|
+
* 注意:由于存在事件补发,所以该事件触发器其实很危险,冲击到了依赖关系
|
|
41
|
+
* 本身A依赖B的某个事件,那么正确的顺序应该是:
|
|
42
|
+
* B模块初始化->A模块初始化->B抛出事件->A监听到事件
|
|
43
|
+
*
|
|
44
|
+
* 但如果存在事件补发,以下流程表面没有问题
|
|
45
|
+
* B模块初始化->B抛出事件->A模块初始化->A监听到事件
|
|
46
|
+
* 实际上可能有两个问题
|
|
47
|
+
* 1. A监听到的事件,并不清楚在A初始化前触发还是初始化后触发,信息丢失
|
|
48
|
+
* 2. B抛出事件,A其实必须要响应,响应晚了其实也是问题
|
|
49
|
+
*
|
|
50
|
+
* 所以事件补发是一件非常危险的事情,不要随意补发。
|
|
51
|
+
* -------------------------
|
|
52
|
+
*
|
|
53
|
+
* 只有状态扭转的事件可以存在合理的补发
|
|
54
|
+
* A监听B的状态变更
|
|
55
|
+
* 一般来说,A模块内代码的写法可能是
|
|
56
|
+
* ```
|
|
57
|
+
* if (B.isReady) {
|
|
58
|
+
* doSomething();
|
|
59
|
+
* } else {
|
|
60
|
+
* B.onReady(doSomething);
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
* 这种情况,我们借助事件补发可以变成如下来减少代码量。
|
|
64
|
+
* ```
|
|
65
|
+
* B.onReady(doSomething);
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* 最经典的事件补发就是CancellationSourceToken的设计,我们将其抽象出一种通用能力。
|
|
69
|
+
* 使用demo如下:
|
|
70
|
+
* ```
|
|
71
|
+
* enum Phase {
|
|
72
|
+
* Waiting,
|
|
73
|
+
* Eventually,
|
|
74
|
+
* }
|
|
75
|
+
*
|
|
76
|
+
* class Foo {
|
|
77
|
+
* phaseEmitter = new PhaseEmitter<Phase>(Phase.Waiting);
|
|
78
|
+
* // 方式1,监听指定的状态到达
|
|
79
|
+
* // 外部: foo.onEventually(doSomething);
|
|
80
|
+
* onEventually = this.phaseEmitter.when(Phase.Eventually);
|
|
81
|
+
*
|
|
82
|
+
* // 方式2,给予外部更高的自由度
|
|
83
|
+
* // 外部: foo.onPhase(Phase.Eventually, doSomething);
|
|
84
|
+
* onPhase = this.phaseEmitter.whenPhase;
|
|
85
|
+
*
|
|
86
|
+
* // 方式3,监听变更(该方式不会补发)
|
|
87
|
+
* // 外部: foo.onPhaseChange((phase) => doSomething)
|
|
88
|
+
* onPhaseChange = this.phaseEmitter.event;
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
* 有问题联系基建侧同学。
|
|
92
|
+
*/
|
|
93
|
+
declare class PhaseEmitter<T, K extends T = T> {
|
|
94
|
+
private _currentPhase;
|
|
95
|
+
private readonly _phaseChecker;
|
|
96
|
+
private readonly _options?;
|
|
97
|
+
private _globalEmitter?;
|
|
98
|
+
private readonly _phaseEmitterMap;
|
|
99
|
+
private _phaseEvent?;
|
|
100
|
+
private readonly _shortcutEvent;
|
|
101
|
+
constructor(_currentPhase: K, config?: IPhaseEmitterConfig<T>, _phaseChecker?: IPhaseChecker<T>, _options?: EmitterOptions | undefined);
|
|
102
|
+
get currentPhase(): K;
|
|
103
|
+
get event(): Event<[T]>;
|
|
104
|
+
get whenPhase(): WhenPhaseEvent<T>;
|
|
105
|
+
when(phase: K): PhaseEvent;
|
|
106
|
+
dispose(): void;
|
|
107
|
+
setPhase(phase: K): void;
|
|
108
|
+
/**
|
|
109
|
+
* 该接口为了和emitter对齐,优先使用setPhase
|
|
110
|
+
* @deprecated 优先使用setPhase,未来可能会去掉
|
|
111
|
+
*/
|
|
112
|
+
fire(phase: K): void;
|
|
113
|
+
private _setPhaseEmitter;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare function makeSyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
|
|
117
|
+
declare function makeAsyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
|
|
118
|
+
|
|
119
|
+
declare function listenOnce<TArgs extends any[]>(event: Event<TArgs>): Event<TArgs>;
|
|
120
|
+
|
|
121
|
+
declare function listenWhen<TArgs extends any[]>(event: Event<TArgs>, predicate: (...args: TArgs) => boolean): Event<TArgs>;
|
|
122
|
+
|
|
123
|
+
declare const NeverEvent: Event<[any]>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* 针对未捕获的错误,异步抛出,不阻塞事件响应主流程
|
|
127
|
+
* 默认模式
|
|
128
|
+
*/
|
|
129
|
+
declare function asyncUnexpectedError(e: any): void;
|
|
130
|
+
/**
|
|
131
|
+
* 针对未捕获的错误,同步抛出,阻塞事件响应主流程
|
|
132
|
+
*/
|
|
133
|
+
declare function syncUnexpectedError(e: any): void;
|
|
134
|
+
/**
|
|
135
|
+
* 针对未捕获的错误,静默掉,不进行处理
|
|
136
|
+
*/
|
|
137
|
+
declare function ignoreUnexpectedError(e: any): void;
|
|
138
|
+
|
|
139
|
+
export { Event, NeverEvent, PhaseEmitter, type PhaseEvent, ShortcutEventMode, type WhenPhaseEvent, asyncUnexpectedError, ignoreUnexpectedError, listenOnce, listenWhen, makeAsyncShortcutEvent, makeSyncShortcutEvent, syncUnexpectedError };
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { b as EmitterOptions, E as Event } from '../emitter-DeM5mlEm.js';
|
|
2
|
+
export { a as Emitter } from '../emitter-DeM5mlEm.js';
|
|
3
|
+
import { I as IDisposable } from '../dispose-base-CAeXDpjg.js';
|
|
4
|
+
import '../linked-list-CUkue5DZ.js';
|
|
5
|
+
|
|
6
|
+
interface IPhaseChecker<T> {
|
|
7
|
+
(before: T, after: T): boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* WhenPhaseEvent相比较Event有如下特点
|
|
11
|
+
* 1. 增加了callback前第一个参数,可以明确listener对应的phase
|
|
12
|
+
* 2. 会进行状态补发
|
|
13
|
+
*/
|
|
14
|
+
interface WhenPhaseEvent<T> {
|
|
15
|
+
(phase: T, listener: () => any): IDisposable;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* PhaseEvent相比较Event有如下特点
|
|
19
|
+
* 1. 参数一定为空
|
|
20
|
+
* 2. 会进行状态补发
|
|
21
|
+
*/
|
|
22
|
+
type PhaseEvent = Event<[]>;
|
|
23
|
+
declare enum ShortcutEventMode {
|
|
24
|
+
Async = 0,
|
|
25
|
+
Sync = 1
|
|
26
|
+
}
|
|
27
|
+
interface IPhaseEmitterConfig<T> {
|
|
28
|
+
checker?: IPhaseChecker<T>;
|
|
29
|
+
shortcutEventMode?: ShortcutEventMode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 阶段状态事件触发器,相比较原始的emitter有如下不同
|
|
33
|
+
* 1. 明确了事件类型一定是生命周期的扭转
|
|
34
|
+
* a. 必须传入一个枚举表示阶段状态
|
|
35
|
+
* b. 抛出的事件只能是生命周期扭转,不允许携带参数
|
|
36
|
+
*
|
|
37
|
+
* 2. 当状态已经到达,后监听,进行补发事件
|
|
38
|
+
*
|
|
39
|
+
* -------------------------
|
|
40
|
+
* 注意:由于存在事件补发,所以该事件触发器其实很危险,冲击到了依赖关系
|
|
41
|
+
* 本身A依赖B的某个事件,那么正确的顺序应该是:
|
|
42
|
+
* B模块初始化->A模块初始化->B抛出事件->A监听到事件
|
|
43
|
+
*
|
|
44
|
+
* 但如果存在事件补发,以下流程表面没有问题
|
|
45
|
+
* B模块初始化->B抛出事件->A模块初始化->A监听到事件
|
|
46
|
+
* 实际上可能有两个问题
|
|
47
|
+
* 1. A监听到的事件,并不清楚在A初始化前触发还是初始化后触发,信息丢失
|
|
48
|
+
* 2. B抛出事件,A其实必须要响应,响应晚了其实也是问题
|
|
49
|
+
*
|
|
50
|
+
* 所以事件补发是一件非常危险的事情,不要随意补发。
|
|
51
|
+
* -------------------------
|
|
52
|
+
*
|
|
53
|
+
* 只有状态扭转的事件可以存在合理的补发
|
|
54
|
+
* A监听B的状态变更
|
|
55
|
+
* 一般来说,A模块内代码的写法可能是
|
|
56
|
+
* ```
|
|
57
|
+
* if (B.isReady) {
|
|
58
|
+
* doSomething();
|
|
59
|
+
* } else {
|
|
60
|
+
* B.onReady(doSomething);
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
* 这种情况,我们借助事件补发可以变成如下来减少代码量。
|
|
64
|
+
* ```
|
|
65
|
+
* B.onReady(doSomething);
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* 最经典的事件补发就是CancellationSourceToken的设计,我们将其抽象出一种通用能力。
|
|
69
|
+
* 使用demo如下:
|
|
70
|
+
* ```
|
|
71
|
+
* enum Phase {
|
|
72
|
+
* Waiting,
|
|
73
|
+
* Eventually,
|
|
74
|
+
* }
|
|
75
|
+
*
|
|
76
|
+
* class Foo {
|
|
77
|
+
* phaseEmitter = new PhaseEmitter<Phase>(Phase.Waiting);
|
|
78
|
+
* // 方式1,监听指定的状态到达
|
|
79
|
+
* // 外部: foo.onEventually(doSomething);
|
|
80
|
+
* onEventually = this.phaseEmitter.when(Phase.Eventually);
|
|
81
|
+
*
|
|
82
|
+
* // 方式2,给予外部更高的自由度
|
|
83
|
+
* // 外部: foo.onPhase(Phase.Eventually, doSomething);
|
|
84
|
+
* onPhase = this.phaseEmitter.whenPhase;
|
|
85
|
+
*
|
|
86
|
+
* // 方式3,监听变更(该方式不会补发)
|
|
87
|
+
* // 外部: foo.onPhaseChange((phase) => doSomething)
|
|
88
|
+
* onPhaseChange = this.phaseEmitter.event;
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
* 有问题联系基建侧同学。
|
|
92
|
+
*/
|
|
93
|
+
declare class PhaseEmitter<T, K extends T = T> {
|
|
94
|
+
private _currentPhase;
|
|
95
|
+
private readonly _phaseChecker;
|
|
96
|
+
private readonly _options?;
|
|
97
|
+
private _globalEmitter?;
|
|
98
|
+
private readonly _phaseEmitterMap;
|
|
99
|
+
private _phaseEvent?;
|
|
100
|
+
private readonly _shortcutEvent;
|
|
101
|
+
constructor(_currentPhase: K, config?: IPhaseEmitterConfig<T>, _phaseChecker?: IPhaseChecker<T>, _options?: EmitterOptions | undefined);
|
|
102
|
+
get currentPhase(): K;
|
|
103
|
+
get event(): Event<[T]>;
|
|
104
|
+
get whenPhase(): WhenPhaseEvent<T>;
|
|
105
|
+
when(phase: K): PhaseEvent;
|
|
106
|
+
dispose(): void;
|
|
107
|
+
setPhase(phase: K): void;
|
|
108
|
+
/**
|
|
109
|
+
* 该接口为了和emitter对齐,优先使用setPhase
|
|
110
|
+
* @deprecated 优先使用setPhase,未来可能会去掉
|
|
111
|
+
*/
|
|
112
|
+
fire(phase: K): void;
|
|
113
|
+
private _setPhaseEmitter;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare function makeSyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
|
|
117
|
+
declare function makeAsyncShortcutEvent<T>(val: T): (callback: (val: T) => void) => IDisposable;
|
|
118
|
+
|
|
119
|
+
declare function listenOnce<TArgs extends any[]>(event: Event<TArgs>): Event<TArgs>;
|
|
120
|
+
|
|
121
|
+
declare function listenWhen<TArgs extends any[]>(event: Event<TArgs>, predicate: (...args: TArgs) => boolean): Event<TArgs>;
|
|
122
|
+
|
|
123
|
+
declare const NeverEvent: Event<[any]>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* 针对未捕获的错误,异步抛出,不阻塞事件响应主流程
|
|
127
|
+
* 默认模式
|
|
128
|
+
*/
|
|
129
|
+
declare function asyncUnexpectedError(e: any): void;
|
|
130
|
+
/**
|
|
131
|
+
* 针对未捕获的错误,同步抛出,阻塞事件响应主流程
|
|
132
|
+
*/
|
|
133
|
+
declare function syncUnexpectedError(e: any): void;
|
|
134
|
+
/**
|
|
135
|
+
* 针对未捕获的错误,静默掉,不进行处理
|
|
136
|
+
*/
|
|
137
|
+
declare function ignoreUnexpectedError(e: any): void;
|
|
138
|
+
|
|
139
|
+
export { Event, NeverEvent, PhaseEmitter, type PhaseEvent, ShortcutEventMode, type WhenPhaseEvent, asyncUnexpectedError, ignoreUnexpectedError, listenOnce, listenWhen, makeAsyncShortcutEvent, makeSyncShortcutEvent, syncUnexpectedError };
|