@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/structure/graph.ts","../../src/structure/linked-list.ts","../../src/structure/min-heap.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["class Node<K, T> {\n readonly incoming = new Map<K, Node<K, T>>();\n readonly outgoing = new Map<K, Node<K, T>>();\n\n constructor(\n public key: K,\n public data: T,\n ) {}\n}\n\nexport class Graph<K, T> {\n private readonly _nodes = new Map<K, Node<K, T>>();\n\n constructor(private readonly _hashFn: (element: T) => K) {}\n\n // 寻找所有的叶子节点\n public leafs(): Node<K, T>[] {\n const ret: Node<K, T>[] = [];\n for (const node of this._nodes.values()) {\n if (node.outgoing.size === 0) {\n ret.push(node);\n }\n }\n return ret;\n }\n\n // 插入一条边\n public insertEdge(from: T, to: T): void {\n const fromNode = this.lookupOrInsertNode(from);\n const toNode = this.lookupOrInsertNode(to);\n\n fromNode.outgoing.set(toNode.key, toNode);\n toNode.incoming.set(fromNode.key, fromNode);\n }\n\n // 移除某个节点\n public removeNode(data: T): void {\n const key = this._hashFn(data);\n this._nodes.delete(key);\n for (const node of this._nodes.values()) {\n node.outgoing.delete(key);\n node.incoming.delete(key);\n }\n }\n\n // 查找某个节点\n public lookup(data: T): Node<K, T> | undefined {\n return this._nodes.get(this._hashFn(data));\n }\n\n // 查找某个节点,不存在则插入\n public lookupOrInsertNode(data: T): Node<K, T> {\n const key = this._hashFn(data);\n let node = this._nodes.get(key);\n\n if (!node) {\n node = new Node(key, data);\n this._nodes.set(key, node);\n }\n\n return node;\n }\n\n public isEmpty(): boolean {\n return this._nodes.size === 0;\n }\n\n public toString(): string {\n const data: string[] = [];\n for (const [key, value] of this._nodes) {\n data.push(\n `${key}\\n\\t(-> incoming)[${[...value.incoming.keys()].join(', ')}]\\n\\t(outgoing ->)[${[\n ...value.outgoing.keys(),\n ].join(',')}]\\n`,\n );\n }\n return data.join('\\n');\n }\n\n public findCycleSlow() {\n for (const [id, node] of this._nodes) {\n const seen = new Set<K>([id]);\n const res = this._findCycle(node, seen);\n if (res) {\n return res;\n }\n }\n return undefined;\n }\n\n private _findCycle(node: Node<K, T>, seen: Set<K>): string | undefined {\n for (const [id, outgoing] of node.outgoing) {\n if (seen.has(id)) {\n return [...seen, id].join(' -> ');\n }\n seen.add(id);\n const value = this._findCycle(outgoing, seen);\n if (value) {\n return value;\n }\n seen.delete(id);\n }\n return undefined;\n }\n}\n","class ListNode<T> {\n constructor(\n public value: T,\n public next: ListNode<T> | null = null,\n public prev: ListNode<T> | null = null,\n ) {}\n}\n\nexport class LinkedList<T> {\n protected _head: ListNode<T> | null = null;\n protected _tail: ListNode<T> | null = null;\n protected _count = 0;\n\n public get size(): number {\n return this._count;\n }\n\n public get firstNode(): ListNode<T> | null {\n return this._head;\n }\n\n public isEmpty(): boolean {\n return this._head === null;\n }\n\n public clear(): void {\n let current = this._head;\n while (current !== null) {\n const next = current.next;\n current.prev = null;\n current.next = null;\n current = next;\n }\n\n this._head = null;\n this._tail = null;\n this._count = 0;\n }\n\n public unshift(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldHead = this._head;\n this._head = node;\n node.next = oldHead;\n oldHead!.prev = node;\n }\n\n this._count++;\n return this;\n }\n\n public push(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldTail = this._tail;\n this._tail = node;\n node.prev = oldTail;\n oldTail!.next = node;\n }\n\n this._count++;\n return this;\n }\n\n public shift(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._head!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public pop(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._tail!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public toArray(): T[] {\n const result: T[] = [];\n for (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n public *[Symbol.iterator](): Iterator<T> {\n let current = this._head;\n while (current !== null) {\n yield current.value;\n current = current.next;\n }\n }\n\n protected _remove(node: ListNode<T>): void {\n // 如果节点已经被移除(prev 和 next 都为 null),直接返回\n if (node.prev === null && node.next === null && node !== this._head && node !== this._tail) {\n return;\n }\n\n // 更新链表头尾指针\n if (node === this._head) {\n this._head = node.next;\n if (this._head) {\n this._head.prev = null;\n }\n }\n if (node === this._tail) {\n this._tail = node.prev;\n if (this._tail) {\n this._tail.next = null;\n }\n }\n\n // 更新相邻节点的引用\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n // 清理被移除节点的引用\n node.prev = null;\n node.next = null;\n this._count--;\n }\n}\n","export class MinHeap<T> {\n private readonly _heap: T[] = [];\n private readonly _compare: (a: T, b: T) => number;\n\n constructor(compareFunction?: (a: T, b: T) => number) {\n if (compareFunction) {\n this._compare = compareFunction;\n } else {\n this._compare = (a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n }\n }\n\n public insert(value: T): void {\n this._heap.push(value);\n this._siftUp();\n }\n\n public peek(): T | null {\n return this._heap.length > 0 ? this._heap[0] : null;\n }\n\n public remove(): T | null {\n if (this._heap.length === 0) return null;\n if (this._heap.length === 1) return this._heap.pop()!;\n\n const item = this._heap[0];\n this._heap[0] = this._heap.pop()!;\n this._siftDown();\n return item;\n }\n\n public size(): number {\n return this._heap.length;\n }\n\n public clear(): void {\n this._heap.length = 0;\n }\n\n private _getLeftChildIndex(parentIndex: number): number {\n return 2 * parentIndex + 1;\n }\n\n private _getRightChildIndex(parentIndex: number): number {\n return 2 * parentIndex + 2;\n }\n\n private _getParentIndex(childIndex: number): number {\n return Math.floor((childIndex - 1) / 2);\n }\n\n private _swap(indexOne: number, indexTwo: number): void {\n [this._heap[indexOne], this._heap[indexTwo]] = [this._heap[indexTwo], this._heap[indexOne]];\n }\n\n private _siftUp(): void {\n let index = this._heap.length - 1;\n while (index > 0 && this._compare(this._heap[this._getParentIndex(index)], this._heap[index]) > 0) {\n const parentIndex = this._getParentIndex(index);\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n }\n\n private _siftDown(): void {\n let index = 0;\n let smallerChildIndex = this._getLeftChildIndex(index);\n\n while (smallerChildIndex < this._heap.length) {\n const rightChildIndex = this._getRightChildIndex(index);\n if (\n rightChildIndex < this._heap.length &&\n this._compare(this._heap[rightChildIndex], this._heap[smallerChildIndex]) < 0\n ) {\n smallerChildIndex = rightChildIndex;\n }\n\n if (this._compare(this._heap[index], this._heap[smallerChildIndex]) <= 0) {\n break;\n }\n\n this._swap(index, smallerChildIndex);\n index = smallerChildIndex;\n smallerChildIndex = this._getLeftChildIndex(index);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { G as Graph } from '../graph-BGbNOniY.cjs';
|
|
2
|
+
export { L as LinkedList } from '../linked-list-CUkue5DZ.cjs';
|
|
3
|
+
|
|
4
|
+
declare class MinHeap<T> {
|
|
5
|
+
private readonly _heap;
|
|
6
|
+
private readonly _compare;
|
|
7
|
+
constructor(compareFunction?: (a: T, b: T) => number);
|
|
8
|
+
insert(value: T): void;
|
|
9
|
+
peek(): T | null;
|
|
10
|
+
remove(): T | null;
|
|
11
|
+
size(): number;
|
|
12
|
+
clear(): void;
|
|
13
|
+
private _getLeftChildIndex;
|
|
14
|
+
private _getRightChildIndex;
|
|
15
|
+
private _getParentIndex;
|
|
16
|
+
private _swap;
|
|
17
|
+
private _siftUp;
|
|
18
|
+
private _siftDown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { MinHeap };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { G as Graph } from '../graph-BGbNOniY.js';
|
|
2
|
+
export { L as LinkedList } from '../linked-list-CUkue5DZ.js';
|
|
3
|
+
|
|
4
|
+
declare class MinHeap<T> {
|
|
5
|
+
private readonly _heap;
|
|
6
|
+
private readonly _compare;
|
|
7
|
+
constructor(compareFunction?: (a: T, b: T) => number);
|
|
8
|
+
insert(value: T): void;
|
|
9
|
+
peek(): T | null;
|
|
10
|
+
remove(): T | null;
|
|
11
|
+
size(): number;
|
|
12
|
+
clear(): void;
|
|
13
|
+
private _getLeftChildIndex;
|
|
14
|
+
private _getRightChildIndex;
|
|
15
|
+
private _getParentIndex;
|
|
16
|
+
private _swap;
|
|
17
|
+
private _siftUp;
|
|
18
|
+
private _siftDown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { MinHeap };
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// src/structure/graph.ts
|
|
2
|
+
var Node = class {
|
|
3
|
+
constructor(key, data) {
|
|
4
|
+
this.key = key;
|
|
5
|
+
this.data = data;
|
|
6
|
+
this.incoming = /* @__PURE__ */ new Map();
|
|
7
|
+
this.outgoing = /* @__PURE__ */ new Map();
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var Graph = class {
|
|
11
|
+
constructor(_hashFn) {
|
|
12
|
+
this._hashFn = _hashFn;
|
|
13
|
+
this._nodes = /* @__PURE__ */ new Map();
|
|
14
|
+
}
|
|
15
|
+
// 寻找所有的叶子节点
|
|
16
|
+
leafs() {
|
|
17
|
+
const ret = [];
|
|
18
|
+
for (const node of this._nodes.values()) {
|
|
19
|
+
if (node.outgoing.size === 0) {
|
|
20
|
+
ret.push(node);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return ret;
|
|
24
|
+
}
|
|
25
|
+
// 插入一条边
|
|
26
|
+
insertEdge(from, to) {
|
|
27
|
+
const fromNode = this.lookupOrInsertNode(from);
|
|
28
|
+
const toNode = this.lookupOrInsertNode(to);
|
|
29
|
+
fromNode.outgoing.set(toNode.key, toNode);
|
|
30
|
+
toNode.incoming.set(fromNode.key, fromNode);
|
|
31
|
+
}
|
|
32
|
+
// 移除某个节点
|
|
33
|
+
removeNode(data) {
|
|
34
|
+
const key = this._hashFn(data);
|
|
35
|
+
this._nodes.delete(key);
|
|
36
|
+
for (const node of this._nodes.values()) {
|
|
37
|
+
node.outgoing.delete(key);
|
|
38
|
+
node.incoming.delete(key);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// 查找某个节点
|
|
42
|
+
lookup(data) {
|
|
43
|
+
return this._nodes.get(this._hashFn(data));
|
|
44
|
+
}
|
|
45
|
+
// 查找某个节点,不存在则插入
|
|
46
|
+
lookupOrInsertNode(data) {
|
|
47
|
+
const key = this._hashFn(data);
|
|
48
|
+
let node = this._nodes.get(key);
|
|
49
|
+
if (!node) {
|
|
50
|
+
node = new Node(key, data);
|
|
51
|
+
this._nodes.set(key, node);
|
|
52
|
+
}
|
|
53
|
+
return node;
|
|
54
|
+
}
|
|
55
|
+
isEmpty() {
|
|
56
|
+
return this._nodes.size === 0;
|
|
57
|
+
}
|
|
58
|
+
toString() {
|
|
59
|
+
const data = [];
|
|
60
|
+
for (const [key, value] of this._nodes) {
|
|
61
|
+
data.push(
|
|
62
|
+
`${key}
|
|
63
|
+
(-> incoming)[${[...value.incoming.keys()].join(", ")}]
|
|
64
|
+
(outgoing ->)[${[
|
|
65
|
+
...value.outgoing.keys()
|
|
66
|
+
].join(",")}]
|
|
67
|
+
`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
return data.join("\n");
|
|
71
|
+
}
|
|
72
|
+
findCycleSlow() {
|
|
73
|
+
for (const [id, node] of this._nodes) {
|
|
74
|
+
const seen = /* @__PURE__ */ new Set([id]);
|
|
75
|
+
const res = this._findCycle(node, seen);
|
|
76
|
+
if (res) {
|
|
77
|
+
return res;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return void 0;
|
|
81
|
+
}
|
|
82
|
+
_findCycle(node, seen) {
|
|
83
|
+
for (const [id, outgoing] of node.outgoing) {
|
|
84
|
+
if (seen.has(id)) {
|
|
85
|
+
return [...seen, id].join(" -> ");
|
|
86
|
+
}
|
|
87
|
+
seen.add(id);
|
|
88
|
+
const value = this._findCycle(outgoing, seen);
|
|
89
|
+
if (value) {
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
seen.delete(id);
|
|
93
|
+
}
|
|
94
|
+
return void 0;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// src/structure/linked-list.ts
|
|
99
|
+
var ListNode = class {
|
|
100
|
+
constructor(value, next = null, prev = null) {
|
|
101
|
+
this.value = value;
|
|
102
|
+
this.next = next;
|
|
103
|
+
this.prev = prev;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
var LinkedList = class {
|
|
107
|
+
constructor() {
|
|
108
|
+
this._head = null;
|
|
109
|
+
this._tail = null;
|
|
110
|
+
this._count = 0;
|
|
111
|
+
}
|
|
112
|
+
get size() {
|
|
113
|
+
return this._count;
|
|
114
|
+
}
|
|
115
|
+
get firstNode() {
|
|
116
|
+
return this._head;
|
|
117
|
+
}
|
|
118
|
+
isEmpty() {
|
|
119
|
+
return this._head === null;
|
|
120
|
+
}
|
|
121
|
+
clear() {
|
|
122
|
+
let current = this._head;
|
|
123
|
+
while (current !== null) {
|
|
124
|
+
const next = current.next;
|
|
125
|
+
current.prev = null;
|
|
126
|
+
current.next = null;
|
|
127
|
+
current = next;
|
|
128
|
+
}
|
|
129
|
+
this._head = null;
|
|
130
|
+
this._tail = null;
|
|
131
|
+
this._count = 0;
|
|
132
|
+
}
|
|
133
|
+
unshift(value) {
|
|
134
|
+
const node = new ListNode(value);
|
|
135
|
+
if (this.isEmpty()) {
|
|
136
|
+
this._head = node;
|
|
137
|
+
this._tail = node;
|
|
138
|
+
} else {
|
|
139
|
+
const oldHead = this._head;
|
|
140
|
+
this._head = node;
|
|
141
|
+
node.next = oldHead;
|
|
142
|
+
oldHead.prev = node;
|
|
143
|
+
}
|
|
144
|
+
this._count++;
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
push(value) {
|
|
148
|
+
const node = new ListNode(value);
|
|
149
|
+
if (this.isEmpty()) {
|
|
150
|
+
this._head = node;
|
|
151
|
+
this._tail = node;
|
|
152
|
+
} else {
|
|
153
|
+
const oldTail = this._tail;
|
|
154
|
+
this._tail = node;
|
|
155
|
+
node.prev = oldTail;
|
|
156
|
+
oldTail.next = node;
|
|
157
|
+
}
|
|
158
|
+
this._count++;
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
shift() {
|
|
162
|
+
if (this.isEmpty()) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const node = this._head;
|
|
166
|
+
const value = node.value;
|
|
167
|
+
this._remove(node);
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
pop() {
|
|
171
|
+
if (this.isEmpty()) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
const node = this._tail;
|
|
175
|
+
const value = node.value;
|
|
176
|
+
this._remove(node);
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
toArray() {
|
|
180
|
+
const result = [];
|
|
181
|
+
for (const value of this) {
|
|
182
|
+
result.push(value);
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
*[Symbol.iterator]() {
|
|
187
|
+
let current = this._head;
|
|
188
|
+
while (current !== null) {
|
|
189
|
+
yield current.value;
|
|
190
|
+
current = current.next;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
_remove(node) {
|
|
194
|
+
if (node.prev === null && node.next === null && node !== this._head && node !== this._tail) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (node === this._head) {
|
|
198
|
+
this._head = node.next;
|
|
199
|
+
if (this._head) {
|
|
200
|
+
this._head.prev = null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (node === this._tail) {
|
|
204
|
+
this._tail = node.prev;
|
|
205
|
+
if (this._tail) {
|
|
206
|
+
this._tail.next = null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (node.prev) {
|
|
210
|
+
node.prev.next = node.next;
|
|
211
|
+
}
|
|
212
|
+
if (node.next) {
|
|
213
|
+
node.next.prev = node.prev;
|
|
214
|
+
}
|
|
215
|
+
node.prev = null;
|
|
216
|
+
node.next = null;
|
|
217
|
+
this._count--;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// src/structure/min-heap.ts
|
|
222
|
+
var MinHeap = class {
|
|
223
|
+
constructor(compareFunction) {
|
|
224
|
+
this._heap = [];
|
|
225
|
+
if (compareFunction) {
|
|
226
|
+
this._compare = compareFunction;
|
|
227
|
+
} else {
|
|
228
|
+
this._compare = (a, b) => {
|
|
229
|
+
if (a < b) return -1;
|
|
230
|
+
if (a > b) return 1;
|
|
231
|
+
return 0;
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
insert(value) {
|
|
236
|
+
this._heap.push(value);
|
|
237
|
+
this._siftUp();
|
|
238
|
+
}
|
|
239
|
+
peek() {
|
|
240
|
+
return this._heap.length > 0 ? this._heap[0] : null;
|
|
241
|
+
}
|
|
242
|
+
remove() {
|
|
243
|
+
if (this._heap.length === 0) return null;
|
|
244
|
+
if (this._heap.length === 1) return this._heap.pop();
|
|
245
|
+
const item = this._heap[0];
|
|
246
|
+
this._heap[0] = this._heap.pop();
|
|
247
|
+
this._siftDown();
|
|
248
|
+
return item;
|
|
249
|
+
}
|
|
250
|
+
size() {
|
|
251
|
+
return this._heap.length;
|
|
252
|
+
}
|
|
253
|
+
clear() {
|
|
254
|
+
this._heap.length = 0;
|
|
255
|
+
}
|
|
256
|
+
_getLeftChildIndex(parentIndex) {
|
|
257
|
+
return 2 * parentIndex + 1;
|
|
258
|
+
}
|
|
259
|
+
_getRightChildIndex(parentIndex) {
|
|
260
|
+
return 2 * parentIndex + 2;
|
|
261
|
+
}
|
|
262
|
+
_getParentIndex(childIndex) {
|
|
263
|
+
return Math.floor((childIndex - 1) / 2);
|
|
264
|
+
}
|
|
265
|
+
_swap(indexOne, indexTwo) {
|
|
266
|
+
[this._heap[indexOne], this._heap[indexTwo]] = [this._heap[indexTwo], this._heap[indexOne]];
|
|
267
|
+
}
|
|
268
|
+
_siftUp() {
|
|
269
|
+
let index = this._heap.length - 1;
|
|
270
|
+
while (index > 0 && this._compare(this._heap[this._getParentIndex(index)], this._heap[index]) > 0) {
|
|
271
|
+
const parentIndex = this._getParentIndex(index);
|
|
272
|
+
this._swap(index, parentIndex);
|
|
273
|
+
index = parentIndex;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
_siftDown() {
|
|
277
|
+
let index = 0;
|
|
278
|
+
let smallerChildIndex = this._getLeftChildIndex(index);
|
|
279
|
+
while (smallerChildIndex < this._heap.length) {
|
|
280
|
+
const rightChildIndex = this._getRightChildIndex(index);
|
|
281
|
+
if (rightChildIndex < this._heap.length && this._compare(this._heap[rightChildIndex], this._heap[smallerChildIndex]) < 0) {
|
|
282
|
+
smallerChildIndex = rightChildIndex;
|
|
283
|
+
}
|
|
284
|
+
if (this._compare(this._heap[index], this._heap[smallerChildIndex]) <= 0) {
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
this._swap(index, smallerChildIndex);
|
|
288
|
+
index = smallerChildIndex;
|
|
289
|
+
smallerChildIndex = this._getLeftChildIndex(index);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export { Graph, LinkedList, MinHeap };
|
|
295
|
+
//# sourceMappingURL=index.js.map
|
|
296
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/structure/graph.ts","../../src/structure/linked-list.ts","../../src/structure/min-heap.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["class Node<K, T> {\n readonly incoming = new Map<K, Node<K, T>>();\n readonly outgoing = new Map<K, Node<K, T>>();\n\n constructor(\n public key: K,\n public data: T,\n ) {}\n}\n\nexport class Graph<K, T> {\n private readonly _nodes = new Map<K, Node<K, T>>();\n\n constructor(private readonly _hashFn: (element: T) => K) {}\n\n // 寻找所有的叶子节点\n public leafs(): Node<K, T>[] {\n const ret: Node<K, T>[] = [];\n for (const node of this._nodes.values()) {\n if (node.outgoing.size === 0) {\n ret.push(node);\n }\n }\n return ret;\n }\n\n // 插入一条边\n public insertEdge(from: T, to: T): void {\n const fromNode = this.lookupOrInsertNode(from);\n const toNode = this.lookupOrInsertNode(to);\n\n fromNode.outgoing.set(toNode.key, toNode);\n toNode.incoming.set(fromNode.key, fromNode);\n }\n\n // 移除某个节点\n public removeNode(data: T): void {\n const key = this._hashFn(data);\n this._nodes.delete(key);\n for (const node of this._nodes.values()) {\n node.outgoing.delete(key);\n node.incoming.delete(key);\n }\n }\n\n // 查找某个节点\n public lookup(data: T): Node<K, T> | undefined {\n return this._nodes.get(this._hashFn(data));\n }\n\n // 查找某个节点,不存在则插入\n public lookupOrInsertNode(data: T): Node<K, T> {\n const key = this._hashFn(data);\n let node = this._nodes.get(key);\n\n if (!node) {\n node = new Node(key, data);\n this._nodes.set(key, node);\n }\n\n return node;\n }\n\n public isEmpty(): boolean {\n return this._nodes.size === 0;\n }\n\n public toString(): string {\n const data: string[] = [];\n for (const [key, value] of this._nodes) {\n data.push(\n `${key}\\n\\t(-> incoming)[${[...value.incoming.keys()].join(', ')}]\\n\\t(outgoing ->)[${[\n ...value.outgoing.keys(),\n ].join(',')}]\\n`,\n );\n }\n return data.join('\\n');\n }\n\n public findCycleSlow() {\n for (const [id, node] of this._nodes) {\n const seen = new Set<K>([id]);\n const res = this._findCycle(node, seen);\n if (res) {\n return res;\n }\n }\n return undefined;\n }\n\n private _findCycle(node: Node<K, T>, seen: Set<K>): string | undefined {\n for (const [id, outgoing] of node.outgoing) {\n if (seen.has(id)) {\n return [...seen, id].join(' -> ');\n }\n seen.add(id);\n const value = this._findCycle(outgoing, seen);\n if (value) {\n return value;\n }\n seen.delete(id);\n }\n return undefined;\n }\n}\n","class ListNode<T> {\n constructor(\n public value: T,\n public next: ListNode<T> | null = null,\n public prev: ListNode<T> | null = null,\n ) {}\n}\n\nexport class LinkedList<T> {\n protected _head: ListNode<T> | null = null;\n protected _tail: ListNode<T> | null = null;\n protected _count = 0;\n\n public get size(): number {\n return this._count;\n }\n\n public get firstNode(): ListNode<T> | null {\n return this._head;\n }\n\n public isEmpty(): boolean {\n return this._head === null;\n }\n\n public clear(): void {\n let current = this._head;\n while (current !== null) {\n const next = current.next;\n current.prev = null;\n current.next = null;\n current = next;\n }\n\n this._head = null;\n this._tail = null;\n this._count = 0;\n }\n\n public unshift(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldHead = this._head;\n this._head = node;\n node.next = oldHead;\n oldHead!.prev = node;\n }\n\n this._count++;\n return this;\n }\n\n public push(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldTail = this._tail;\n this._tail = node;\n node.prev = oldTail;\n oldTail!.next = node;\n }\n\n this._count++;\n return this;\n }\n\n public shift(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._head!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public pop(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._tail!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public toArray(): T[] {\n const result: T[] = [];\n for (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n public *[Symbol.iterator](): Iterator<T> {\n let current = this._head;\n while (current !== null) {\n yield current.value;\n current = current.next;\n }\n }\n\n protected _remove(node: ListNode<T>): void {\n // 如果节点已经被移除(prev 和 next 都为 null),直接返回\n if (node.prev === null && node.next === null && node !== this._head && node !== this._tail) {\n return;\n }\n\n // 更新链表头尾指针\n if (node === this._head) {\n this._head = node.next;\n if (this._head) {\n this._head.prev = null;\n }\n }\n if (node === this._tail) {\n this._tail = node.prev;\n if (this._tail) {\n this._tail.next = null;\n }\n }\n\n // 更新相邻节点的引用\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n // 清理被移除节点的引用\n node.prev = null;\n node.next = null;\n this._count--;\n }\n}\n","export class MinHeap<T> {\n private readonly _heap: T[] = [];\n private readonly _compare: (a: T, b: T) => number;\n\n constructor(compareFunction?: (a: T, b: T) => number) {\n if (compareFunction) {\n this._compare = compareFunction;\n } else {\n this._compare = (a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n }\n }\n\n public insert(value: T): void {\n this._heap.push(value);\n this._siftUp();\n }\n\n public peek(): T | null {\n return this._heap.length > 0 ? this._heap[0] : null;\n }\n\n public remove(): T | null {\n if (this._heap.length === 0) return null;\n if (this._heap.length === 1) return this._heap.pop()!;\n\n const item = this._heap[0];\n this._heap[0] = this._heap.pop()!;\n this._siftDown();\n return item;\n }\n\n public size(): number {\n return this._heap.length;\n }\n\n public clear(): void {\n this._heap.length = 0;\n }\n\n private _getLeftChildIndex(parentIndex: number): number {\n return 2 * parentIndex + 1;\n }\n\n private _getRightChildIndex(parentIndex: number): number {\n return 2 * parentIndex + 2;\n }\n\n private _getParentIndex(childIndex: number): number {\n return Math.floor((childIndex - 1) / 2);\n }\n\n private _swap(indexOne: number, indexTwo: number): void {\n [this._heap[indexOne], this._heap[indexTwo]] = [this._heap[indexTwo], this._heap[indexOne]];\n }\n\n private _siftUp(): void {\n let index = this._heap.length - 1;\n while (index > 0 && this._compare(this._heap[this._getParentIndex(index)], this._heap[index]) > 0) {\n const parentIndex = this._getParentIndex(index);\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n }\n\n private _siftDown(): void {\n let index = 0;\n let smallerChildIndex = this._getLeftChildIndex(index);\n\n while (smallerChildIndex < this._heap.length) {\n const rightChildIndex = this._getRightChildIndex(index);\n if (\n rightChildIndex < this._heap.length &&\n this._compare(this._heap[rightChildIndex], this._heap[smallerChildIndex]) < 0\n ) {\n smallerChildIndex = rightChildIndex;\n }\n\n if (this._compare(this._heap[index], this._heap[smallerChildIndex]) <= 0) {\n break;\n }\n\n this._swap(index, smallerChildIndex);\n index = smallerChildIndex;\n smallerChildIndex = this._getLeftChildIndex(index);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type DistributiveOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 提取对象的 key 用 . 拼接成 path 形式
|
|
5
|
+
* type T1 = ObjectKeyPaths<{ name: string; age: number }>; // expected to be 'name' | 'age'
|
|
6
|
+
* type T2 = ObjectKeyPaths<{
|
|
7
|
+
* refCount: number;
|
|
8
|
+
* person: { name: string; age: number };
|
|
9
|
+
* }>; // expected to be 'refCount' | 'person' | 'person.name' | 'person.age'
|
|
10
|
+
*/
|
|
11
|
+
type GenNode<K extends string | number, IsRoot extends boolean> = IsRoot extends true ? `${K}` : `.${K}` | (K extends number ? `[${K}]` : never);
|
|
12
|
+
type ObjectKeyPaths<T extends Record<string, unknown>, IsRoot extends boolean = true, K extends keyof T = keyof T> = K extends string | number ? GenNode<K, IsRoot> | (T[K] extends Record<string, unknown> ? `${GenNode<K, IsRoot>}${ObjectKeyPaths<T[K], false>}` : never) : never;
|
|
13
|
+
/**
|
|
14
|
+
* 获取对象 path 对应的类型
|
|
15
|
+
* type T = ValueAtPath<{ a: { b: number } }, 'a.b'>; // expected to be number
|
|
16
|
+
*/
|
|
17
|
+
type ValueAtPath<T extends Record<string, unknown>, // 泛型类型参数 T 表示对象类型
|
|
18
|
+
P extends ObjectKeyPaths<T>> = P extends `${infer K}.${infer R}` ? K extends keyof T ? T[K] extends Record<string, unknown> ? ValueAtPath<T[K], R> : never : never : P extends keyof T ? T[P] : never;
|
|
19
|
+
|
|
20
|
+
export type { DistributiveOmit, ObjectKeyPaths, ValueAtPath };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type DistributiveOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 提取对象的 key 用 . 拼接成 path 形式
|
|
5
|
+
* type T1 = ObjectKeyPaths<{ name: string; age: number }>; // expected to be 'name' | 'age'
|
|
6
|
+
* type T2 = ObjectKeyPaths<{
|
|
7
|
+
* refCount: number;
|
|
8
|
+
* person: { name: string; age: number };
|
|
9
|
+
* }>; // expected to be 'refCount' | 'person' | 'person.name' | 'person.age'
|
|
10
|
+
*/
|
|
11
|
+
type GenNode<K extends string | number, IsRoot extends boolean> = IsRoot extends true ? `${K}` : `.${K}` | (K extends number ? `[${K}]` : never);
|
|
12
|
+
type ObjectKeyPaths<T extends Record<string, unknown>, IsRoot extends boolean = true, K extends keyof T = keyof T> = K extends string | number ? GenNode<K, IsRoot> | (T[K] extends Record<string, unknown> ? `${GenNode<K, IsRoot>}${ObjectKeyPaths<T[K], false>}` : never) : never;
|
|
13
|
+
/**
|
|
14
|
+
* 获取对象 path 对应的类型
|
|
15
|
+
* type T = ValueAtPath<{ a: { b: number } }, 'a.b'>; // expected to be number
|
|
16
|
+
*/
|
|
17
|
+
type ValueAtPath<T extends Record<string, unknown>, // 泛型类型参数 T 表示对象类型
|
|
18
|
+
P extends ObjectKeyPaths<T>> = P extends `${infer K}.${infer R}` ? K extends keyof T ? T[K] extends Record<string, unknown> ? ValueAtPath<T[K], R> : never : never : P extends keyof T ? T[P] : never;
|
|
19
|
+
|
|
20
|
+
export type { DistributiveOmit, ObjectKeyPaths, ValueAtPath };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|