@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,132 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/function/debounce.ts
|
|
4
|
+
function invokeFunc(context, time) {
|
|
5
|
+
const args = context.lastArgs ?? [];
|
|
6
|
+
const thisArg = context.lastThis;
|
|
7
|
+
context.lastArgs = void 0;
|
|
8
|
+
context.lastThis = void 0;
|
|
9
|
+
context.lastInvokeTime = time;
|
|
10
|
+
context.result = context.func.apply(thisArg, args);
|
|
11
|
+
return context.result;
|
|
12
|
+
}
|
|
13
|
+
function leadingEdge(context) {
|
|
14
|
+
context.lastInvokeTime = context.lastCallTime;
|
|
15
|
+
context.timerId = setTimeout(() => {
|
|
16
|
+
timerExpired(context);
|
|
17
|
+
}, context.wait);
|
|
18
|
+
return context.leading ? invokeFunc(context, context.lastCallTime) : context.result;
|
|
19
|
+
}
|
|
20
|
+
function remainingWait(context, time) {
|
|
21
|
+
const timeSinceLastCall = time - context.lastCallTime;
|
|
22
|
+
const timeSinceLastInvoke = time - context.lastInvokeTime;
|
|
23
|
+
const timeWaiting = context.wait - timeSinceLastCall;
|
|
24
|
+
return context.maxing ? Math.min(timeWaiting, context.maxWait - timeSinceLastInvoke) : timeWaiting;
|
|
25
|
+
}
|
|
26
|
+
function shouldInvoke(context, time) {
|
|
27
|
+
const timeSinceLastCall = time - context.lastCallTime;
|
|
28
|
+
const timeSinceLastInvoke = time - context.lastInvokeTime;
|
|
29
|
+
return Boolean(
|
|
30
|
+
context.lastCallTime === 0 || timeSinceLastCall >= context.wait || timeSinceLastCall < 0 || context.maxWait && timeSinceLastInvoke >= context.maxWait
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
function timerExpired(context) {
|
|
34
|
+
const time = Date.now();
|
|
35
|
+
if (shouldInvoke(context, time)) {
|
|
36
|
+
return trailingEdge(context, time);
|
|
37
|
+
}
|
|
38
|
+
context.timerId = setTimeout(
|
|
39
|
+
() => {
|
|
40
|
+
timerExpired(context);
|
|
41
|
+
},
|
|
42
|
+
remainingWait(context, time)
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
function trailingEdge(context, time) {
|
|
46
|
+
context.timerId = void 0;
|
|
47
|
+
if (context.trailing && context.lastArgs) {
|
|
48
|
+
return invokeFunc(context, time);
|
|
49
|
+
}
|
|
50
|
+
context.lastArgs = context.lastThis = void 0;
|
|
51
|
+
return context.result;
|
|
52
|
+
}
|
|
53
|
+
function cancel(context) {
|
|
54
|
+
if (context.timerId !== void 0) {
|
|
55
|
+
clearTimeout(context.timerId);
|
|
56
|
+
}
|
|
57
|
+
context.lastInvokeTime = 0;
|
|
58
|
+
context.lastCallTime = 0;
|
|
59
|
+
context.lastArgs = void 0;
|
|
60
|
+
context.lastThis = void 0;
|
|
61
|
+
context.timerId = void 0;
|
|
62
|
+
}
|
|
63
|
+
function flush(context) {
|
|
64
|
+
return context.timerId === void 0 ? context.result : trailingEdge(context, Date.now());
|
|
65
|
+
}
|
|
66
|
+
function debounce(func, _wait, _options) {
|
|
67
|
+
const wait = _wait ?? 0;
|
|
68
|
+
const maxing = _options?.maxWait !== void 0;
|
|
69
|
+
const context = {
|
|
70
|
+
func,
|
|
71
|
+
wait,
|
|
72
|
+
maxing,
|
|
73
|
+
maxWait: maxing ? Math.max(_options.maxWait ?? 0, wait) : wait,
|
|
74
|
+
leading: _options?.leading ?? false,
|
|
75
|
+
trailing: _options?.trailing ?? true,
|
|
76
|
+
lastInvokeTime: 0,
|
|
77
|
+
lastCallTime: 0,
|
|
78
|
+
result: void 0
|
|
79
|
+
};
|
|
80
|
+
function debounced(...args) {
|
|
81
|
+
const time = Date.now();
|
|
82
|
+
const isInvoking = shouldInvoke(context, time);
|
|
83
|
+
context.lastThis = this;
|
|
84
|
+
context.lastArgs = args;
|
|
85
|
+
context.lastCallTime = time;
|
|
86
|
+
if (isInvoking) {
|
|
87
|
+
if (context.timerId === void 0) {
|
|
88
|
+
return leadingEdge(context);
|
|
89
|
+
}
|
|
90
|
+
if (_options?.maxWait !== void 0) {
|
|
91
|
+
clearTimeout(context.timerId);
|
|
92
|
+
context.timerId = setTimeout(() => {
|
|
93
|
+
timerExpired(context);
|
|
94
|
+
}, wait);
|
|
95
|
+
return invokeFunc(context, context.lastCallTime);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (context.timerId === void 0) {
|
|
99
|
+
context.timerId = setTimeout(() => {
|
|
100
|
+
timerExpired(context);
|
|
101
|
+
}, wait);
|
|
102
|
+
}
|
|
103
|
+
return context.result;
|
|
104
|
+
}
|
|
105
|
+
debounced.cancel = () => {
|
|
106
|
+
cancel(context);
|
|
107
|
+
};
|
|
108
|
+
debounced.flush = () => {
|
|
109
|
+
return flush(context);
|
|
110
|
+
};
|
|
111
|
+
return debounced;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// src/function/throttle.ts
|
|
115
|
+
function throttle(func, _wait, _options) {
|
|
116
|
+
let leading = true;
|
|
117
|
+
let trailing = true;
|
|
118
|
+
if (_options) {
|
|
119
|
+
leading = _options.leading ?? leading;
|
|
120
|
+
trailing = _options.trailing ?? trailing;
|
|
121
|
+
}
|
|
122
|
+
return debounce(func, _wait, {
|
|
123
|
+
leading,
|
|
124
|
+
maxWait: _options?.maxWait,
|
|
125
|
+
trailing
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
exports.debounce = debounce;
|
|
130
|
+
exports.throttle = throttle;
|
|
131
|
+
//# sourceMappingURL=index.cjs.map
|
|
132
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/function/debounce.ts","../../src/function/throttle.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["interface DebounceSettings {\n leading?: boolean | undefined;\n maxWait?: number | undefined;\n trailing?: boolean | undefined;\n}\n\ninterface DebounceSettingsLeading extends DebounceSettings {\n leading: true;\n}\n\ninterface InvokeContext {\n func: (...args: any[]) => any;\n lastThis?: any;\n lastArgs?: any[];\n lastCallTime: number;\n lastInvokeTime: number;\n wait: number;\n\n maxing: boolean;\n maxWait: number;\n\n leading: boolean;\n trailing: boolean;\n timerId?: any;\n result: any;\n}\n\nfunction invokeFunc(context: InvokeContext, time: number) {\n const args = context.lastArgs ?? [];\n const thisArg = context.lastThis;\n context.lastArgs = undefined;\n context.lastThis = undefined;\n context.lastInvokeTime = time;\n context.result = context.func.apply(thisArg, args);\n return context.result;\n}\n\nfunction leadingEdge(context: InvokeContext) {\n // Reset any `maxWait` timer.\n context.lastInvokeTime = context.lastCallTime;\n // Start the timer for the trailing edge.\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, context.wait);\n // Invoke the leading edge.\n return context.leading ? invokeFunc(context, context.lastCallTime) : context.result;\n}\n\nfunction remainingWait(context: InvokeContext, time: number) {\n const timeSinceLastCall = time - context.lastCallTime;\n const timeSinceLastInvoke = time - context.lastInvokeTime;\n const timeWaiting = context.wait - timeSinceLastCall;\n\n return context.maxing ? Math.min(timeWaiting, context.maxWait - timeSinceLastInvoke) : timeWaiting;\n}\n\nfunction shouldInvoke(context: InvokeContext, time: number): boolean {\n const timeSinceLastCall = time - context.lastCallTime;\n const timeSinceLastInvoke = time - context.lastInvokeTime;\n\n return Boolean(\n context.lastCallTime === 0 ||\n timeSinceLastCall >= context.wait ||\n timeSinceLastCall < 0 ||\n (context.maxWait && timeSinceLastInvoke >= context.maxWait),\n );\n}\n\nfunction timerExpired(context: InvokeContext) {\n const time = Date.now();\n if (shouldInvoke(context, time)) {\n return trailingEdge(context, time);\n }\n // Restart the timer.\n context.timerId = setTimeout(\n () => {\n timerExpired(context);\n },\n remainingWait(context, time),\n );\n}\n\nfunction trailingEdge(context: InvokeContext, time: number) {\n context.timerId = undefined;\n\n if (context.trailing && context.lastArgs) {\n return invokeFunc(context, time);\n }\n context.lastArgs = context.lastThis = undefined;\n return context.result;\n}\n\nfunction cancel(context: InvokeContext) {\n if (context.timerId !== undefined) {\n clearTimeout(context.timerId);\n }\n context.lastInvokeTime = 0;\n context.lastCallTime = 0;\n context.lastArgs = undefined;\n context.lastThis = undefined;\n context.timerId = undefined;\n}\n\nfunction flush(context: InvokeContext) {\n return context.timerId === undefined ? context.result : trailingEdge(context, Date.now());\n}\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n _wait?: number,\n _options?: DebounceSettings | DebounceSettingsLeading,\n): {\n (...args: Parameters<T>): ReturnType<T> | undefined;\n cancel: () => void;\n flush: () => ReturnType<T> | undefined;\n} {\n const wait = _wait ?? 0;\n const maxing = _options?.maxWait !== undefined;\n\n const context: InvokeContext = {\n func,\n wait,\n maxing,\n maxWait: maxing ? Math.max(_options.maxWait ?? 0, wait) : wait,\n leading: _options?.leading ?? false,\n trailing: _options?.trailing ?? true,\n lastInvokeTime: 0,\n lastCallTime: 0,\n result: undefined,\n };\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(context, time);\n\n context.lastThis = this;\n context.lastArgs = args;\n context.lastCallTime = time;\n\n if (isInvoking) {\n if (context.timerId === undefined) {\n return leadingEdge(context);\n }\n if (_options?.maxWait !== undefined) {\n // Handle invocations in a tight loop.\n clearTimeout(context.timerId);\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, wait);\n return invokeFunc(context, context.lastCallTime);\n }\n }\n if (context.timerId === undefined) {\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, wait);\n }\n return context.result;\n }\n\n debounced.cancel = () => {\n cancel(context);\n };\n debounced.flush = () => {\n return flush(context);\n };\n return debounced;\n}\n","import { debounce } from './debounce';\n\ninterface ThrottleSettings {\n leading?: boolean | undefined;\n maxWait?: number | undefined;\n trailing?: boolean | undefined;\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n _wait?: number,\n _options?: ThrottleSettings,\n) {\n let leading = true;\n let trailing = true;\n if (_options) {\n leading = _options.leading ?? leading;\n trailing = _options.trailing ?? trailing;\n }\n\n return debounce(func, _wait, {\n leading,\n maxWait: _options?.maxWait,\n trailing,\n });\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface DebounceSettings {
|
|
2
|
+
leading?: boolean | undefined;
|
|
3
|
+
maxWait?: number | undefined;
|
|
4
|
+
trailing?: boolean | undefined;
|
|
5
|
+
}
|
|
6
|
+
interface DebounceSettingsLeading extends DebounceSettings {
|
|
7
|
+
leading: true;
|
|
8
|
+
}
|
|
9
|
+
declare function debounce<T extends (...args: any[]) => any>(func: T, _wait?: number, _options?: DebounceSettings | DebounceSettingsLeading): {
|
|
10
|
+
(...args: Parameters<T>): ReturnType<T> | undefined;
|
|
11
|
+
cancel: () => void;
|
|
12
|
+
flush: () => ReturnType<T> | undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
interface ThrottleSettings {
|
|
16
|
+
leading?: boolean | undefined;
|
|
17
|
+
maxWait?: number | undefined;
|
|
18
|
+
trailing?: boolean | undefined;
|
|
19
|
+
}
|
|
20
|
+
declare function throttle<T extends (...args: any[]) => any>(func: T, _wait?: number, _options?: ThrottleSettings): {
|
|
21
|
+
(...args: Parameters<T>): ReturnType<T> | undefined;
|
|
22
|
+
cancel: () => void;
|
|
23
|
+
flush: () => ReturnType<T> | undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { debounce, throttle };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface DebounceSettings {
|
|
2
|
+
leading?: boolean | undefined;
|
|
3
|
+
maxWait?: number | undefined;
|
|
4
|
+
trailing?: boolean | undefined;
|
|
5
|
+
}
|
|
6
|
+
interface DebounceSettingsLeading extends DebounceSettings {
|
|
7
|
+
leading: true;
|
|
8
|
+
}
|
|
9
|
+
declare function debounce<T extends (...args: any[]) => any>(func: T, _wait?: number, _options?: DebounceSettings | DebounceSettingsLeading): {
|
|
10
|
+
(...args: Parameters<T>): ReturnType<T> | undefined;
|
|
11
|
+
cancel: () => void;
|
|
12
|
+
flush: () => ReturnType<T> | undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
interface ThrottleSettings {
|
|
16
|
+
leading?: boolean | undefined;
|
|
17
|
+
maxWait?: number | undefined;
|
|
18
|
+
trailing?: boolean | undefined;
|
|
19
|
+
}
|
|
20
|
+
declare function throttle<T extends (...args: any[]) => any>(func: T, _wait?: number, _options?: ThrottleSettings): {
|
|
21
|
+
(...args: Parameters<T>): ReturnType<T> | undefined;
|
|
22
|
+
cancel: () => void;
|
|
23
|
+
flush: () => ReturnType<T> | undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { debounce, throttle };
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// src/function/debounce.ts
|
|
2
|
+
function invokeFunc(context, time) {
|
|
3
|
+
const args = context.lastArgs ?? [];
|
|
4
|
+
const thisArg = context.lastThis;
|
|
5
|
+
context.lastArgs = void 0;
|
|
6
|
+
context.lastThis = void 0;
|
|
7
|
+
context.lastInvokeTime = time;
|
|
8
|
+
context.result = context.func.apply(thisArg, args);
|
|
9
|
+
return context.result;
|
|
10
|
+
}
|
|
11
|
+
function leadingEdge(context) {
|
|
12
|
+
context.lastInvokeTime = context.lastCallTime;
|
|
13
|
+
context.timerId = setTimeout(() => {
|
|
14
|
+
timerExpired(context);
|
|
15
|
+
}, context.wait);
|
|
16
|
+
return context.leading ? invokeFunc(context, context.lastCallTime) : context.result;
|
|
17
|
+
}
|
|
18
|
+
function remainingWait(context, time) {
|
|
19
|
+
const timeSinceLastCall = time - context.lastCallTime;
|
|
20
|
+
const timeSinceLastInvoke = time - context.lastInvokeTime;
|
|
21
|
+
const timeWaiting = context.wait - timeSinceLastCall;
|
|
22
|
+
return context.maxing ? Math.min(timeWaiting, context.maxWait - timeSinceLastInvoke) : timeWaiting;
|
|
23
|
+
}
|
|
24
|
+
function shouldInvoke(context, time) {
|
|
25
|
+
const timeSinceLastCall = time - context.lastCallTime;
|
|
26
|
+
const timeSinceLastInvoke = time - context.lastInvokeTime;
|
|
27
|
+
return Boolean(
|
|
28
|
+
context.lastCallTime === 0 || timeSinceLastCall >= context.wait || timeSinceLastCall < 0 || context.maxWait && timeSinceLastInvoke >= context.maxWait
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
function timerExpired(context) {
|
|
32
|
+
const time = Date.now();
|
|
33
|
+
if (shouldInvoke(context, time)) {
|
|
34
|
+
return trailingEdge(context, time);
|
|
35
|
+
}
|
|
36
|
+
context.timerId = setTimeout(
|
|
37
|
+
() => {
|
|
38
|
+
timerExpired(context);
|
|
39
|
+
},
|
|
40
|
+
remainingWait(context, time)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function trailingEdge(context, time) {
|
|
44
|
+
context.timerId = void 0;
|
|
45
|
+
if (context.trailing && context.lastArgs) {
|
|
46
|
+
return invokeFunc(context, time);
|
|
47
|
+
}
|
|
48
|
+
context.lastArgs = context.lastThis = void 0;
|
|
49
|
+
return context.result;
|
|
50
|
+
}
|
|
51
|
+
function cancel(context) {
|
|
52
|
+
if (context.timerId !== void 0) {
|
|
53
|
+
clearTimeout(context.timerId);
|
|
54
|
+
}
|
|
55
|
+
context.lastInvokeTime = 0;
|
|
56
|
+
context.lastCallTime = 0;
|
|
57
|
+
context.lastArgs = void 0;
|
|
58
|
+
context.lastThis = void 0;
|
|
59
|
+
context.timerId = void 0;
|
|
60
|
+
}
|
|
61
|
+
function flush(context) {
|
|
62
|
+
return context.timerId === void 0 ? context.result : trailingEdge(context, Date.now());
|
|
63
|
+
}
|
|
64
|
+
function debounce(func, _wait, _options) {
|
|
65
|
+
const wait = _wait ?? 0;
|
|
66
|
+
const maxing = _options?.maxWait !== void 0;
|
|
67
|
+
const context = {
|
|
68
|
+
func,
|
|
69
|
+
wait,
|
|
70
|
+
maxing,
|
|
71
|
+
maxWait: maxing ? Math.max(_options.maxWait ?? 0, wait) : wait,
|
|
72
|
+
leading: _options?.leading ?? false,
|
|
73
|
+
trailing: _options?.trailing ?? true,
|
|
74
|
+
lastInvokeTime: 0,
|
|
75
|
+
lastCallTime: 0,
|
|
76
|
+
result: void 0
|
|
77
|
+
};
|
|
78
|
+
function debounced(...args) {
|
|
79
|
+
const time = Date.now();
|
|
80
|
+
const isInvoking = shouldInvoke(context, time);
|
|
81
|
+
context.lastThis = this;
|
|
82
|
+
context.lastArgs = args;
|
|
83
|
+
context.lastCallTime = time;
|
|
84
|
+
if (isInvoking) {
|
|
85
|
+
if (context.timerId === void 0) {
|
|
86
|
+
return leadingEdge(context);
|
|
87
|
+
}
|
|
88
|
+
if (_options?.maxWait !== void 0) {
|
|
89
|
+
clearTimeout(context.timerId);
|
|
90
|
+
context.timerId = setTimeout(() => {
|
|
91
|
+
timerExpired(context);
|
|
92
|
+
}, wait);
|
|
93
|
+
return invokeFunc(context, context.lastCallTime);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (context.timerId === void 0) {
|
|
97
|
+
context.timerId = setTimeout(() => {
|
|
98
|
+
timerExpired(context);
|
|
99
|
+
}, wait);
|
|
100
|
+
}
|
|
101
|
+
return context.result;
|
|
102
|
+
}
|
|
103
|
+
debounced.cancel = () => {
|
|
104
|
+
cancel(context);
|
|
105
|
+
};
|
|
106
|
+
debounced.flush = () => {
|
|
107
|
+
return flush(context);
|
|
108
|
+
};
|
|
109
|
+
return debounced;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// src/function/throttle.ts
|
|
113
|
+
function throttle(func, _wait, _options) {
|
|
114
|
+
let leading = true;
|
|
115
|
+
let trailing = true;
|
|
116
|
+
if (_options) {
|
|
117
|
+
leading = _options.leading ?? leading;
|
|
118
|
+
trailing = _options.trailing ?? trailing;
|
|
119
|
+
}
|
|
120
|
+
return debounce(func, _wait, {
|
|
121
|
+
leading,
|
|
122
|
+
maxWait: _options?.maxWait,
|
|
123
|
+
trailing
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { debounce, throttle };
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/function/debounce.ts","../../src/function/throttle.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["interface DebounceSettings {\n leading?: boolean | undefined;\n maxWait?: number | undefined;\n trailing?: boolean | undefined;\n}\n\ninterface DebounceSettingsLeading extends DebounceSettings {\n leading: true;\n}\n\ninterface InvokeContext {\n func: (...args: any[]) => any;\n lastThis?: any;\n lastArgs?: any[];\n lastCallTime: number;\n lastInvokeTime: number;\n wait: number;\n\n maxing: boolean;\n maxWait: number;\n\n leading: boolean;\n trailing: boolean;\n timerId?: any;\n result: any;\n}\n\nfunction invokeFunc(context: InvokeContext, time: number) {\n const args = context.lastArgs ?? [];\n const thisArg = context.lastThis;\n context.lastArgs = undefined;\n context.lastThis = undefined;\n context.lastInvokeTime = time;\n context.result = context.func.apply(thisArg, args);\n return context.result;\n}\n\nfunction leadingEdge(context: InvokeContext) {\n // Reset any `maxWait` timer.\n context.lastInvokeTime = context.lastCallTime;\n // Start the timer for the trailing edge.\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, context.wait);\n // Invoke the leading edge.\n return context.leading ? invokeFunc(context, context.lastCallTime) : context.result;\n}\n\nfunction remainingWait(context: InvokeContext, time: number) {\n const timeSinceLastCall = time - context.lastCallTime;\n const timeSinceLastInvoke = time - context.lastInvokeTime;\n const timeWaiting = context.wait - timeSinceLastCall;\n\n return context.maxing ? Math.min(timeWaiting, context.maxWait - timeSinceLastInvoke) : timeWaiting;\n}\n\nfunction shouldInvoke(context: InvokeContext, time: number): boolean {\n const timeSinceLastCall = time - context.lastCallTime;\n const timeSinceLastInvoke = time - context.lastInvokeTime;\n\n return Boolean(\n context.lastCallTime === 0 ||\n timeSinceLastCall >= context.wait ||\n timeSinceLastCall < 0 ||\n (context.maxWait && timeSinceLastInvoke >= context.maxWait),\n );\n}\n\nfunction timerExpired(context: InvokeContext) {\n const time = Date.now();\n if (shouldInvoke(context, time)) {\n return trailingEdge(context, time);\n }\n // Restart the timer.\n context.timerId = setTimeout(\n () => {\n timerExpired(context);\n },\n remainingWait(context, time),\n );\n}\n\nfunction trailingEdge(context: InvokeContext, time: number) {\n context.timerId = undefined;\n\n if (context.trailing && context.lastArgs) {\n return invokeFunc(context, time);\n }\n context.lastArgs = context.lastThis = undefined;\n return context.result;\n}\n\nfunction cancel(context: InvokeContext) {\n if (context.timerId !== undefined) {\n clearTimeout(context.timerId);\n }\n context.lastInvokeTime = 0;\n context.lastCallTime = 0;\n context.lastArgs = undefined;\n context.lastThis = undefined;\n context.timerId = undefined;\n}\n\nfunction flush(context: InvokeContext) {\n return context.timerId === undefined ? context.result : trailingEdge(context, Date.now());\n}\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n _wait?: number,\n _options?: DebounceSettings | DebounceSettingsLeading,\n): {\n (...args: Parameters<T>): ReturnType<T> | undefined;\n cancel: () => void;\n flush: () => ReturnType<T> | undefined;\n} {\n const wait = _wait ?? 0;\n const maxing = _options?.maxWait !== undefined;\n\n const context: InvokeContext = {\n func,\n wait,\n maxing,\n maxWait: maxing ? Math.max(_options.maxWait ?? 0, wait) : wait,\n leading: _options?.leading ?? false,\n trailing: _options?.trailing ?? true,\n lastInvokeTime: 0,\n lastCallTime: 0,\n result: undefined,\n };\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(context, time);\n\n context.lastThis = this;\n context.lastArgs = args;\n context.lastCallTime = time;\n\n if (isInvoking) {\n if (context.timerId === undefined) {\n return leadingEdge(context);\n }\n if (_options?.maxWait !== undefined) {\n // Handle invocations in a tight loop.\n clearTimeout(context.timerId);\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, wait);\n return invokeFunc(context, context.lastCallTime);\n }\n }\n if (context.timerId === undefined) {\n context.timerId = setTimeout(() => {\n timerExpired(context);\n }, wait);\n }\n return context.result;\n }\n\n debounced.cancel = () => {\n cancel(context);\n };\n debounced.flush = () => {\n return flush(context);\n };\n return debounced;\n}\n","import { debounce } from './debounce';\n\ninterface ThrottleSettings {\n leading?: boolean | undefined;\n maxWait?: number | undefined;\n trailing?: boolean | undefined;\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n _wait?: number,\n _options?: ThrottleSettings,\n) {\n let leading = true;\n let trailing = true;\n if (_options) {\n leading = _options.leading ?? leading;\n trailing = _options.trailing ?? trailing;\n }\n\n return debounce(func, _wait, {\n leading,\n maxWait: _options?.maxWait,\n trailing,\n });\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare class Node<K, T> {
|
|
2
|
+
key: K;
|
|
3
|
+
data: T;
|
|
4
|
+
readonly incoming: Map<K, Node<K, T>>;
|
|
5
|
+
readonly outgoing: Map<K, Node<K, T>>;
|
|
6
|
+
constructor(key: K, data: T);
|
|
7
|
+
}
|
|
8
|
+
declare class Graph<K, T> {
|
|
9
|
+
private readonly _hashFn;
|
|
10
|
+
private readonly _nodes;
|
|
11
|
+
constructor(_hashFn: (element: T) => K);
|
|
12
|
+
leafs(): Node<K, T>[];
|
|
13
|
+
insertEdge(from: T, to: T): void;
|
|
14
|
+
removeNode(data: T): void;
|
|
15
|
+
lookup(data: T): Node<K, T> | undefined;
|
|
16
|
+
lookupOrInsertNode(data: T): Node<K, T>;
|
|
17
|
+
isEmpty(): boolean;
|
|
18
|
+
toString(): string;
|
|
19
|
+
findCycleSlow(): string | undefined;
|
|
20
|
+
private _findCycle;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { Graph as G };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare class Node<K, T> {
|
|
2
|
+
key: K;
|
|
3
|
+
data: T;
|
|
4
|
+
readonly incoming: Map<K, Node<K, T>>;
|
|
5
|
+
readonly outgoing: Map<K, Node<K, T>>;
|
|
6
|
+
constructor(key: K, data: T);
|
|
7
|
+
}
|
|
8
|
+
declare class Graph<K, T> {
|
|
9
|
+
private readonly _hashFn;
|
|
10
|
+
private readonly _nodes;
|
|
11
|
+
constructor(_hashFn: (element: T) => K);
|
|
12
|
+
leafs(): Node<K, T>[];
|
|
13
|
+
insertEdge(from: T, to: T): void;
|
|
14
|
+
removeNode(data: T): void;
|
|
15
|
+
lookup(data: T): Node<K, T> | undefined;
|
|
16
|
+
lookupOrInsertNode(data: T): Node<K, T>;
|
|
17
|
+
isEmpty(): boolean;
|
|
18
|
+
toString(): string;
|
|
19
|
+
findCycleSlow(): string | undefined;
|
|
20
|
+
private _findCycle;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { Graph as G };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/hash/hash-t.ts
|
|
4
|
+
function doHash(obj, hashVal) {
|
|
5
|
+
switch (typeof obj) {
|
|
6
|
+
case "object":
|
|
7
|
+
if (obj === null) {
|
|
8
|
+
return numberHash(349, hashVal);
|
|
9
|
+
} else if (Array.isArray(obj)) {
|
|
10
|
+
return arrayHash(obj, hashVal);
|
|
11
|
+
}
|
|
12
|
+
return objectHash(obj, hashVal);
|
|
13
|
+
case "string":
|
|
14
|
+
return stringHash(obj, hashVal);
|
|
15
|
+
case "boolean":
|
|
16
|
+
return booleanHash(obj, hashVal);
|
|
17
|
+
case "number":
|
|
18
|
+
return numberHash(obj, hashVal);
|
|
19
|
+
case "undefined":
|
|
20
|
+
return numberHash(937, hashVal);
|
|
21
|
+
default:
|
|
22
|
+
return numberHash(617, hashVal);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function numberHash(val, initialHashVal = 0) {
|
|
26
|
+
return (initialHashVal << 5) - initialHashVal + val | 0;
|
|
27
|
+
}
|
|
28
|
+
function arrayHash(arr, initialHashVal) {
|
|
29
|
+
initialHashVal = numberHash(104579, initialHashVal);
|
|
30
|
+
return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);
|
|
31
|
+
}
|
|
32
|
+
function stringHash(s, hashVal = 0) {
|
|
33
|
+
hashVal = numberHash(149417, hashVal);
|
|
34
|
+
for (let i = 0, { length } = s; i < length; i++) {
|
|
35
|
+
hashVal = numberHash(s.charCodeAt(i), hashVal);
|
|
36
|
+
}
|
|
37
|
+
return hashVal;
|
|
38
|
+
}
|
|
39
|
+
function objectHash(obj, initialHashVal = 0) {
|
|
40
|
+
initialHashVal = numberHash(181387, initialHashVal);
|
|
41
|
+
return Object.keys(obj).sort().reduce((hashVal, key) => {
|
|
42
|
+
hashVal = stringHash(key, hashVal);
|
|
43
|
+
return doHash(obj[key], hashVal);
|
|
44
|
+
}, initialHashVal);
|
|
45
|
+
}
|
|
46
|
+
function booleanHash(b, initialHashVal) {
|
|
47
|
+
return numberHash(b ? 433 : 863, initialHashVal);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.numberHash = numberHash;
|
|
51
|
+
exports.objectHash = objectHash;
|
|
52
|
+
exports.stringHash = stringHash;
|
|
53
|
+
//# sourceMappingURL=index.cjs.map
|
|
54
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hash/hash-t.ts"],"names":[],"mappings":";;;AAAA,SAAS,MAAA,CAAO,KAAU,OAAA,EAAyB;AAClD,EAAA,QAAQ,OAAO,GAAA;AAAK,IACnB,KAAK,QAAA;AACJ,MAAA,IAAI,QAAQ,IAAA,EAAM;AACjB,QAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9B,QAAA,OAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,MAC9B;AACA,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,QAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,SAAA;AACJ,MAAA,OAAO,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,IAChC,KAAK,QAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,WAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B;AACC,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA;AAEjC;AAEO,SAAS,UAAA,CAAW,GAAA,EAAa,cAAA,GAAiB,CAAA,EAAW;AAElE,EAAA,OAAA,CAAS,cAAA,IAAkB,CAAA,IAAK,cAAA,GAAiB,GAAA,GAAO,CAAA;AAC1D;AAEO,SAAS,SAAA,CAAU,KAAY,cAAA,EAAgC;AACrE,EAAA,cAAA,GAAiB,UAAA,CAAW,QAAQ,cAAc,CAAA;AAClD,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,OAAA,EAAS,SAAS,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG,cAAc,CAAA;AAC3E;AAEO,SAAS,UAAA,CAAW,CAAA,EAAW,OAAA,GAAU,CAAA,EAAW;AACzD,EAAA,OAAA,GAAU,UAAA,CAAW,QAAQ,OAAO,CAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,GAAG,EAAC,MAAA,KAAU,CAAA,EAAG,CAAA,GAAI,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,OAAA,GAAU,UAAA,CAAW,CAAA,CAAE,UAAA,CAAW,CAAC,GAAG,OAAO,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,UAAA,CAAW,GAAA,EAAU,cAAA,GAAiB,CAAA,EAAW;AAChE,EAAA,cAAA,GAAiB,UAAA,CAAW,QAAQ,cAAc,CAAA;AAClD,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA,CAAE,MAAK,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ;AACvD,IAAA,OAAA,GAAU,UAAA,CAAW,KAAK,OAAO,CAAA;AACjC,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,CAAA;AAAA,EAChC,GAAG,cAAc,CAAA;AAClB;AAEO,SAAS,WAAA,CAAY,GAAY,cAAA,EAAgC;AACvE,EAAA,OAAO,UAAA,CAAW,CAAA,GAAI,GAAA,GAAM,GAAA,EAAK,cAAc,CAAA;AAChD","file":"index.cjs","sourcesContent":["function doHash(obj: any, hashVal: number): number {\n\tswitch (typeof obj) {\n\t\tcase 'object':\n\t\t\tif (obj === null) {\n\t\t\t\treturn numberHash(349, hashVal);\n\t\t\t} else if (Array.isArray(obj)) {\n\t\t\t\treturn arrayHash(obj, hashVal);\n\t\t\t}\n\t\t\treturn objectHash(obj, hashVal);\n\t\tcase 'string':\n\t\t\treturn stringHash(obj, hashVal);\n\t\tcase 'boolean':\n\t\t\treturn booleanHash(obj, hashVal);\n\t\tcase 'number':\n\t\t\treturn numberHash(obj, hashVal);\n\t\tcase 'undefined':\n\t\t\treturn numberHash(937, hashVal);\n\t\tdefault:\n\t\t\treturn numberHash(617, hashVal);\n\t}\n}\n\nexport function numberHash(val: number, initialHashVal = 0): number {\n // 将原始的hash值扩大范围,结果强制为int32整数\n return ((initialHashVal << 5) - initialHashVal + val) | 0;\n}\n\nexport function arrayHash(arr: any[], initialHashVal: number): number {\n\tinitialHashVal = numberHash(104579, initialHashVal);\n\treturn arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\n\nexport function stringHash(s: string, hashVal = 0): number {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, {length} = s; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\n\nexport function objectHash(obj: any, initialHashVal = 0): number {\n\tinitialHashVal = numberHash(181387, initialHashVal);\n\treturn Object.keys(obj).sort().reduce((hashVal, key) => {\n\t\thashVal = stringHash(key, hashVal);\n\t\treturn doHash(obj[key], hashVal);\n\t}, initialHashVal);\n}\n\nexport function booleanHash(b: boolean, initialHashVal: number): number {\n\treturn numberHash(b ? 433 : 863, initialHashVal);\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// src/hash/hash-t.ts
|
|
2
|
+
function doHash(obj, hashVal) {
|
|
3
|
+
switch (typeof obj) {
|
|
4
|
+
case "object":
|
|
5
|
+
if (obj === null) {
|
|
6
|
+
return numberHash(349, hashVal);
|
|
7
|
+
} else if (Array.isArray(obj)) {
|
|
8
|
+
return arrayHash(obj, hashVal);
|
|
9
|
+
}
|
|
10
|
+
return objectHash(obj, hashVal);
|
|
11
|
+
case "string":
|
|
12
|
+
return stringHash(obj, hashVal);
|
|
13
|
+
case "boolean":
|
|
14
|
+
return booleanHash(obj, hashVal);
|
|
15
|
+
case "number":
|
|
16
|
+
return numberHash(obj, hashVal);
|
|
17
|
+
case "undefined":
|
|
18
|
+
return numberHash(937, hashVal);
|
|
19
|
+
default:
|
|
20
|
+
return numberHash(617, hashVal);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function numberHash(val, initialHashVal = 0) {
|
|
24
|
+
return (initialHashVal << 5) - initialHashVal + val | 0;
|
|
25
|
+
}
|
|
26
|
+
function arrayHash(arr, initialHashVal) {
|
|
27
|
+
initialHashVal = numberHash(104579, initialHashVal);
|
|
28
|
+
return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);
|
|
29
|
+
}
|
|
30
|
+
function stringHash(s, hashVal = 0) {
|
|
31
|
+
hashVal = numberHash(149417, hashVal);
|
|
32
|
+
for (let i = 0, { length } = s; i < length; i++) {
|
|
33
|
+
hashVal = numberHash(s.charCodeAt(i), hashVal);
|
|
34
|
+
}
|
|
35
|
+
return hashVal;
|
|
36
|
+
}
|
|
37
|
+
function objectHash(obj, initialHashVal = 0) {
|
|
38
|
+
initialHashVal = numberHash(181387, initialHashVal);
|
|
39
|
+
return Object.keys(obj).sort().reduce((hashVal, key) => {
|
|
40
|
+
hashVal = stringHash(key, hashVal);
|
|
41
|
+
return doHash(obj[key], hashVal);
|
|
42
|
+
}, initialHashVal);
|
|
43
|
+
}
|
|
44
|
+
function booleanHash(b, initialHashVal) {
|
|
45
|
+
return numberHash(b ? 433 : 863, initialHashVal);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { numberHash, objectHash, stringHash };
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hash/hash-t.ts"],"names":[],"mappings":";AAAA,SAAS,MAAA,CAAO,KAAU,OAAA,EAAyB;AAClD,EAAA,QAAQ,OAAO,GAAA;AAAK,IACnB,KAAK,QAAA;AACJ,MAAA,IAAI,QAAQ,IAAA,EAAM;AACjB,QAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9B,QAAA,OAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,MAC9B;AACA,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,QAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,SAAA;AACJ,MAAA,OAAO,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,IAChC,KAAK,QAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B,KAAK,WAAA;AACJ,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IAC/B;AACC,MAAA,OAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA;AAEjC;AAEO,SAAS,UAAA,CAAW,GAAA,EAAa,cAAA,GAAiB,CAAA,EAAW;AAElE,EAAA,OAAA,CAAS,cAAA,IAAkB,CAAA,IAAK,cAAA,GAAiB,GAAA,GAAO,CAAA;AAC1D;AAEO,SAAS,SAAA,CAAU,KAAY,cAAA,EAAgC;AACrE,EAAA,cAAA,GAAiB,UAAA,CAAW,QAAQ,cAAc,CAAA;AAClD,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,OAAA,EAAS,SAAS,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG,cAAc,CAAA;AAC3E;AAEO,SAAS,UAAA,CAAW,CAAA,EAAW,OAAA,GAAU,CAAA,EAAW;AACzD,EAAA,OAAA,GAAU,UAAA,CAAW,QAAQ,OAAO,CAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,GAAG,EAAC,MAAA,KAAU,CAAA,EAAG,CAAA,GAAI,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,OAAA,GAAU,UAAA,CAAW,CAAA,CAAE,UAAA,CAAW,CAAC,GAAG,OAAO,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,UAAA,CAAW,GAAA,EAAU,cAAA,GAAiB,CAAA,EAAW;AAChE,EAAA,cAAA,GAAiB,UAAA,CAAW,QAAQ,cAAc,CAAA;AAClD,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA,CAAE,MAAK,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ;AACvD,IAAA,OAAA,GAAU,UAAA,CAAW,KAAK,OAAO,CAAA;AACjC,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,CAAA;AAAA,EAChC,GAAG,cAAc,CAAA;AAClB;AAEO,SAAS,WAAA,CAAY,GAAY,cAAA,EAAgC;AACvE,EAAA,OAAO,UAAA,CAAW,CAAA,GAAI,GAAA,GAAM,GAAA,EAAK,cAAc,CAAA;AAChD","file":"index.js","sourcesContent":["function doHash(obj: any, hashVal: number): number {\n\tswitch (typeof obj) {\n\t\tcase 'object':\n\t\t\tif (obj === null) {\n\t\t\t\treturn numberHash(349, hashVal);\n\t\t\t} else if (Array.isArray(obj)) {\n\t\t\t\treturn arrayHash(obj, hashVal);\n\t\t\t}\n\t\t\treturn objectHash(obj, hashVal);\n\t\tcase 'string':\n\t\t\treturn stringHash(obj, hashVal);\n\t\tcase 'boolean':\n\t\t\treturn booleanHash(obj, hashVal);\n\t\tcase 'number':\n\t\t\treturn numberHash(obj, hashVal);\n\t\tcase 'undefined':\n\t\t\treturn numberHash(937, hashVal);\n\t\tdefault:\n\t\t\treturn numberHash(617, hashVal);\n\t}\n}\n\nexport function numberHash(val: number, initialHashVal = 0): number {\n // 将原始的hash值扩大范围,结果强制为int32整数\n return ((initialHashVal << 5) - initialHashVal + val) | 0;\n}\n\nexport function arrayHash(arr: any[], initialHashVal: number): number {\n\tinitialHashVal = numberHash(104579, initialHashVal);\n\treturn arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\n\nexport function stringHash(s: string, hashVal = 0): number {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, {length} = s; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\n\nexport function objectHash(obj: any, initialHashVal = 0): number {\n\tinitialHashVal = numberHash(181387, initialHashVal);\n\treturn Object.keys(obj).sort().reduce((hashVal, key) => {\n\t\thashVal = stringHash(key, hashVal);\n\t\treturn doHash(obj[key], hashVal);\n\t}, initialHashVal);\n}\n\nexport function booleanHash(b: boolean, initialHashVal: number): number {\n\treturn numberHash(b ? 433 : 863, initialHashVal);\n}\n"]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
type BrandedService = {
|
|
2
|
+
_serviceBrand: undefined;
|
|
3
|
+
};
|
|
4
|
+
interface ServiceIdentifier<T> {
|
|
5
|
+
(...args: any[]): void;
|
|
6
|
+
type: T;
|
|
7
|
+
}
|
|
8
|
+
interface ServicesAccessor {
|
|
9
|
+
get: <T>(id: ServiceIdentifier<T>) => T;
|
|
10
|
+
}
|
|
11
|
+
declare function createDecorator<T>(serviceId: string): ServiceIdentifier<T>;
|
|
12
|
+
declare function refineServiceDecorator<T1, T extends T1>(serviceIdentifier: ServiceIdentifier<T1>): ServiceIdentifier<T>;
|
|
13
|
+
|
|
14
|
+
declare class SyncDescriptor<T> {
|
|
15
|
+
readonly ctor: new (...args: any[]) => T;
|
|
16
|
+
readonly staticArguments: any[];
|
|
17
|
+
readonly supportsDelayedInstantiation: boolean;
|
|
18
|
+
constructor(ctor: new (...args: any[]) => T, staticArguments?: any[], supportsDelayedInstantiation?: boolean);
|
|
19
|
+
}
|
|
20
|
+
interface SyncDescriptor0<T> {
|
|
21
|
+
readonly ctor: new () => T;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
declare enum ServiceOwnership {
|
|
25
|
+
Owned = 1,
|
|
26
|
+
Reference = 2
|
|
27
|
+
}
|
|
28
|
+
declare class ServiceOwnershipCollection {
|
|
29
|
+
private readonly _entries;
|
|
30
|
+
constructor(...entries: [ServiceIdentifier<any>, ServiceOwnership][]);
|
|
31
|
+
get entries(): Map<ServiceIdentifier<any>, ServiceOwnership>;
|
|
32
|
+
set(id: ServiceIdentifier<any>, ownership: ServiceOwnership): void;
|
|
33
|
+
has(id: ServiceIdentifier<any>): boolean;
|
|
34
|
+
get(id: ServiceIdentifier<any>): ServiceOwnership | undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type IServiceCollection = {
|
|
38
|
+
entries?: [ServiceIdentifier<any>, any][];
|
|
39
|
+
ownership?: ServiceOwnershipCollection;
|
|
40
|
+
};
|
|
41
|
+
declare class ServiceCollection {
|
|
42
|
+
private readonly _entries;
|
|
43
|
+
private readonly _ownership;
|
|
44
|
+
constructor(options?: IServiceCollection);
|
|
45
|
+
get entries(): Map<ServiceIdentifier<any>, any>;
|
|
46
|
+
get ownerships(): Map<ServiceIdentifier<any>, ServiceOwnership> | undefined;
|
|
47
|
+
set<T>(id: ServiceIdentifier<T>, instanceOrDescriptor: T | SyncDescriptor<T>): void;
|
|
48
|
+
has(id: ServiceIdentifier<any>): boolean;
|
|
49
|
+
get<T>(id: ServiceIdentifier<T>): T | SyncDescriptor<T>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
type GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? [] : TArgs extends [...infer TFirst, BrandedService] ? GetLeadingNonServiceArgs<TFirst> : TArgs;
|
|
53
|
+
interface IInstantiationService {
|
|
54
|
+
readonly _serviceBrand: undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Synchronously creates an instance that is denoted by the descriptor
|
|
57
|
+
*/
|
|
58
|
+
createInstance: {
|
|
59
|
+
<T>(descriptor: SyncDescriptor0<T>): T;
|
|
60
|
+
<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Calls a function with a service accessor.
|
|
64
|
+
*/
|
|
65
|
+
invokeFunction: <R, TS extends any[] = []>(fn: (accessor: ServicesAccessor, ...args: TS) => R, ...args: TS) => R;
|
|
66
|
+
/**
|
|
67
|
+
* Creates a child of this service which inherits all current services
|
|
68
|
+
* and adds/overwrites the given services.
|
|
69
|
+
*/
|
|
70
|
+
createChild: (services: ServiceCollection) => IInstantiationService;
|
|
71
|
+
/**
|
|
72
|
+
* 生命周期归属该DI上下文的服务进行销毁
|
|
73
|
+
*/
|
|
74
|
+
dispose: () => void;
|
|
75
|
+
}
|
|
76
|
+
declare const IInstantiationService: ServiceIdentifier<IInstantiationService>;
|
|
77
|
+
|
|
78
|
+
export { type BrandedService as B, type GetLeadingNonServiceArgs as G, IInstantiationService as I, ServiceCollection as S, type ServicesAccessor as a, type SyncDescriptor0 as b, SyncDescriptor as c, type ServiceIdentifier as d, ServiceOwnershipCollection as e, ServiceOwnership as f, createDecorator as g, type IServiceCollection as h, refineServiceDecorator as r };
|