@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.
Files changed (390) hide show
  1. package/README.md +24 -0
  2. package/dist/array/index.cjs +22 -0
  3. package/dist/array/index.cjs.map +1 -0
  4. package/dist/array/index.d.cts +13 -0
  5. package/dist/array/index.d.ts +13 -0
  6. package/dist/array/index.js +19 -0
  7. package/dist/array/index.js.map +1 -0
  8. package/dist/assert/index.cjs +29 -0
  9. package/dist/assert/index.cjs.map +1 -0
  10. package/dist/assert/index.d.cts +25 -0
  11. package/dist/assert/index.d.ts +25 -0
  12. package/dist/assert/index.js +24 -0
  13. package/dist/assert/index.js.map +1 -0
  14. package/dist/async/index.cjs +746 -0
  15. package/dist/async/index.cjs.map +1 -0
  16. package/dist/async/index.d.cts +47 -0
  17. package/dist/async/index.d.ts +47 -0
  18. package/dist/async/index.js +738 -0
  19. package/dist/async/index.js.map +1 -0
  20. package/dist/barrier-316Xonfd.d.cts +18 -0
  21. package/dist/barrier-316Xonfd.d.ts +18 -0
  22. package/dist/byte/index.cjs +59 -0
  23. package/dist/byte/index.cjs.map +1 -0
  24. package/dist/byte/index.d.cts +12 -0
  25. package/dist/byte/index.d.ts +12 -0
  26. package/dist/byte/index.js +49 -0
  27. package/dist/byte/index.js.map +1 -0
  28. package/dist/cache/index.cjs +418 -0
  29. package/dist/cache/index.cjs.map +1 -0
  30. package/dist/cache/index.d.cts +40 -0
  31. package/dist/cache/index.d.ts +40 -0
  32. package/dist/cache/index.js +415 -0
  33. package/dist/cache/index.js.map +1 -0
  34. package/dist/cancellation-BIIv2UJm.d.cts +25 -0
  35. package/dist/cancellation-ClqPPsV1.d.ts +25 -0
  36. package/dist/context/index.cjs +59 -0
  37. package/dist/context/index.cjs.map +1 -0
  38. package/dist/context/index.d.cts +33 -0
  39. package/dist/context/index.d.ts +33 -0
  40. package/dist/context/index.js +51 -0
  41. package/dist/context/index.js.map +1 -0
  42. package/dist/di/index.cjs +1965 -0
  43. package/dist/di/index.cjs.map +1 -0
  44. package/dist/di/index.d.cts +140 -0
  45. package/dist/di/index.d.ts +140 -0
  46. package/dist/di/index.js +1949 -0
  47. package/dist/di/index.js.map +1 -0
  48. package/dist/disposable-t-B15Nu57y.d.ts +93 -0
  49. package/dist/disposable-t-CVsiyHPL.d.cts +93 -0
  50. package/dist/dispose/index.cjs +356 -0
  51. package/dist/dispose/index.cjs.map +1 -0
  52. package/dist/dispose/index.d.cts +26 -0
  53. package/dist/dispose/index.d.ts +26 -0
  54. package/dist/dispose/index.js +340 -0
  55. package/dist/dispose/index.js.map +1 -0
  56. package/dist/dispose-base-CAeXDpjg.d.cts +6 -0
  57. package/dist/dispose-base-CAeXDpjg.d.ts +6 -0
  58. package/dist/emitter-CAfCtSTg.d.cts +35 -0
  59. package/dist/emitter-DeM5mlEm.d.ts +35 -0
  60. package/dist/error/index.cjs +145 -0
  61. package/dist/error/index.cjs.map +1 -0
  62. package/dist/error/index.d.cts +45 -0
  63. package/dist/error/index.d.ts +45 -0
  64. package/dist/error/index.js +126 -0
  65. package/dist/error/index.js.map +1 -0
  66. package/dist/error-base-B4zaiJ5m.d.cts +32 -0
  67. package/dist/error-base-B4zaiJ5m.d.ts +32 -0
  68. package/dist/event/index.cjs +550 -0
  69. package/dist/event/index.cjs.map +1 -0
  70. package/dist/event/index.d.cts +139 -0
  71. package/dist/event/index.d.ts +139 -0
  72. package/dist/event/index.js +538 -0
  73. package/dist/event/index.js.map +1 -0
  74. package/dist/function/index.cjs +132 -0
  75. package/dist/function/index.cjs.map +1 -0
  76. package/dist/function/index.d.cts +26 -0
  77. package/dist/function/index.d.ts +26 -0
  78. package/dist/function/index.js +129 -0
  79. package/dist/function/index.js.map +1 -0
  80. package/dist/graph-BGbNOniY.d.cts +23 -0
  81. package/dist/graph-BGbNOniY.d.ts +23 -0
  82. package/dist/hash/index.cjs +54 -0
  83. package/dist/hash/index.cjs.map +1 -0
  84. package/dist/hash/index.d.cts +5 -0
  85. package/dist/hash/index.d.ts +5 -0
  86. package/dist/hash/index.js +50 -0
  87. package/dist/hash/index.js.map +1 -0
  88. package/dist/instantiation-service.interface-CVFMBUUD.d.cts +78 -0
  89. package/dist/instantiation-service.interface-CVFMBUUD.d.ts +78 -0
  90. package/dist/json/index.cjs +28 -0
  91. package/dist/json/index.cjs.map +1 -0
  92. package/dist/json/index.d.cts +8 -0
  93. package/dist/json/index.d.ts +8 -0
  94. package/dist/json/index.js +26 -0
  95. package/dist/json/index.js.map +1 -0
  96. package/dist/launch/index.cjs +213 -0
  97. package/dist/launch/index.cjs.map +1 -0
  98. package/dist/launch/index.d.cts +46 -0
  99. package/dist/launch/index.d.ts +46 -0
  100. package/dist/launch/index.js +211 -0
  101. package/dist/launch/index.js.map +1 -0
  102. package/dist/linked-list-CUkue5DZ.d.cts +24 -0
  103. package/dist/linked-list-CUkue5DZ.d.ts +24 -0
  104. package/dist/lock/index.cjs +662 -0
  105. package/dist/lock/index.cjs.map +1 -0
  106. package/dist/lock/index.d.cts +145 -0
  107. package/dist/lock/index.d.ts +145 -0
  108. package/dist/lock/index.js +656 -0
  109. package/dist/lock/index.js.map +1 -0
  110. package/dist/lodash-es/index.cjs +14 -0
  111. package/dist/lodash-es/index.cjs.map +1 -0
  112. package/dist/lodash-es/index.d.cts +1 -0
  113. package/dist/lodash-es/index.d.ts +1 -0
  114. package/dist/lodash-es/index.js +3 -0
  115. package/dist/lodash-es/index.js.map +1 -0
  116. package/dist/math/index.cjs +161 -0
  117. package/dist/math/index.cjs.map +1 -0
  118. package/dist/math/index.d.cts +76 -0
  119. package/dist/math/index.d.ts +76 -0
  120. package/dist/math/index.js +156 -0
  121. package/dist/math/index.js.map +1 -0
  122. package/dist/network/index.cjs +91 -0
  123. package/dist/network/index.cjs.map +1 -0
  124. package/dist/network/index.d.cts +62 -0
  125. package/dist/network/index.d.ts +62 -0
  126. package/dist/network/index.js +82 -0
  127. package/dist/network/index.js.map +1 -0
  128. package/dist/objects/index.cjs +80 -0
  129. package/dist/objects/index.cjs.map +1 -0
  130. package/dist/objects/index.d.cts +11 -0
  131. package/dist/objects/index.d.ts +11 -0
  132. package/dist/objects/index.js +77 -0
  133. package/dist/objects/index.js.map +1 -0
  134. package/dist/platform/index.cjs +62 -0
  135. package/dist/platform/index.cjs.map +1 -0
  136. package/dist/platform/index.d.cts +21 -0
  137. package/dist/platform/index.d.ts +21 -0
  138. package/dist/platform/index.js +48 -0
  139. package/dist/platform/index.js.map +1 -0
  140. package/dist/promise/index.cjs +639 -0
  141. package/dist/promise/index.cjs.map +1 -0
  142. package/dist/promise/index.d.cts +63 -0
  143. package/dist/promise/index.d.ts +63 -0
  144. package/dist/promise/index.js +633 -0
  145. package/dist/promise/index.js.map +1 -0
  146. package/dist/scheduler/index.cjs +599 -0
  147. package/dist/scheduler/index.cjs.map +1 -0
  148. package/dist/scheduler/index.d.cts +57 -0
  149. package/dist/scheduler/index.d.ts +57 -0
  150. package/dist/scheduler/index.js +594 -0
  151. package/dist/scheduler/index.js.map +1 -0
  152. package/dist/sprintf/index.cjs +101 -0
  153. package/dist/sprintf/index.cjs.map +1 -0
  154. package/dist/sprintf/index.d.cts +3 -0
  155. package/dist/sprintf/index.d.ts +3 -0
  156. package/dist/sprintf/index.js +99 -0
  157. package/dist/sprintf/index.js.map +1 -0
  158. package/dist/structure/index.cjs +300 -0
  159. package/dist/structure/index.cjs.map +1 -0
  160. package/dist/structure/index.d.cts +21 -0
  161. package/dist/structure/index.d.ts +21 -0
  162. package/dist/structure/index.js +296 -0
  163. package/dist/structure/index.js.map +1 -0
  164. package/dist/type/index.cjs +4 -0
  165. package/dist/type/index.cjs.map +1 -0
  166. package/dist/type/index.d.cts +20 -0
  167. package/dist/type/index.d.ts +20 -0
  168. package/dist/type/index.js +3 -0
  169. package/dist/type/index.js.map +1 -0
  170. package/dist/undo-redo-stack/index.cjs +545 -0
  171. package/dist/undo-redo-stack/index.cjs.map +1 -0
  172. package/dist/undo-redo-stack/index.d.cts +130 -0
  173. package/dist/undo-redo-stack/index.d.ts +130 -0
  174. package/dist/undo-redo-stack/index.js +542 -0
  175. package/dist/undo-redo-stack/index.js.map +1 -0
  176. package/dist/uuid/index.cjs +67 -0
  177. package/dist/uuid/index.cjs.map +1 -0
  178. package/dist/uuid/index.d.cts +17 -0
  179. package/dist/uuid/index.d.ts +17 -0
  180. package/dist/uuid/index.js +61 -0
  181. package/dist/uuid/index.js.map +1 -0
  182. package/dist/worker/index.cjs +271 -0
  183. package/dist/worker/index.cjs.map +1 -0
  184. package/dist/worker/index.d.cts +66 -0
  185. package/dist/worker/index.d.ts +66 -0
  186. package/dist/worker/index.js +267 -0
  187. package/dist/worker/index.js.map +1 -0
  188. package/package.json +285 -0
  189. package/src/_internal/logger.ts +59 -0
  190. package/src/array/array.test.ts +35 -0
  191. package/src/array/array.ts +25 -0
  192. package/src/array/index.ts +1 -0
  193. package/src/assert/assert.test.ts +86 -0
  194. package/src/assert/assert.ts +42 -0
  195. package/src/assert/index.ts +2 -0
  196. package/src/async/barrier.test.ts +90 -0
  197. package/src/async/barrier.ts +58 -0
  198. package/src/async/cancellation.test.ts +85 -0
  199. package/src/async/cancellation.ts +193 -0
  200. package/src/async/index.ts +18 -0
  201. package/src/async/queue/queue.test.ts +70 -0
  202. package/src/async/queue/queue.ts +56 -0
  203. package/src/async/queue/task.test.ts +155 -0
  204. package/src/async/queue/task.ts +67 -0
  205. package/src/async/utils.test.ts +28 -0
  206. package/src/async/utils.ts +8 -0
  207. package/src/async/wait.ts +9 -0
  208. package/src/byte/format.test.ts +64 -0
  209. package/src/byte/format.ts +44 -0
  210. package/src/byte/index.ts +2 -0
  211. package/src/byte/node_modules/.vitest/results.json +1 -0
  212. package/src/byte/var.ts +11 -0
  213. package/src/cache/index.ts +2 -0
  214. package/src/cache/lru-with-timeout.test.ts +88 -0
  215. package/src/cache/lru-with-timeout.ts +85 -0
  216. package/src/cache/lru.test.ts +56 -0
  217. package/src/cache/lru.ts +59 -0
  218. package/src/context/context.test.ts +17 -0
  219. package/src/context/context.ts +60 -0
  220. package/src/context/index.ts +8 -0
  221. package/src/di/base.ts +73 -0
  222. package/src/di/container-service.test.ts +179 -0
  223. package/src/di/context.web.tsx +41 -0
  224. package/src/di/descriptor.ts +31 -0
  225. package/src/di/idle-value.test.ts +73 -0
  226. package/src/di/idle-value.ts +63 -0
  227. package/src/di/index.common.ts +32 -0
  228. package/src/di/index.ts +2 -0
  229. package/src/di/instantiation-service.interface.ts +46 -0
  230. package/src/di/instantiation-service.test.ts +337 -0
  231. package/src/di/instantiation-service.ts +468 -0
  232. package/src/di/lazy/foo.mock.ts +28 -0
  233. package/src/di/lazy/idle-load.ts +39 -0
  234. package/src/di/lazy/index.ts +4 -0
  235. package/src/di/lazy/lazy-service.test.ts +65 -0
  236. package/src/di/lazy/lazy-service.ts +71 -0
  237. package/src/di/lazy/type.ts +5 -0
  238. package/src/di/node_modules/.vitest/results.json +1 -0
  239. package/src/di/proxy-builder.test.ts +45 -0
  240. package/src/di/proxy-builder.ts +38 -0
  241. package/src/di/service-collection.test.ts +27 -0
  242. package/src/di/service-collection.ts +46 -0
  243. package/src/di/service-ownership-collection.test.ts +39 -0
  244. package/src/di/service-ownership-collection.ts +38 -0
  245. package/src/di/service-registry.test.ts +66 -0
  246. package/src/di/service-registry.ts +99 -0
  247. package/src/di/trace.ts +85 -0
  248. package/src/dispose/disposable-store.test.ts +57 -0
  249. package/src/dispose/disposable-store.ts +80 -0
  250. package/src/dispose/disposable-t.test.ts +123 -0
  251. package/src/dispose/disposable-t.ts +238 -0
  252. package/src/dispose/disposable-utils.test.ts +15 -0
  253. package/src/dispose/disposable-utils.ts +28 -0
  254. package/src/dispose/dispose-base.ts +9 -0
  255. package/src/dispose/index.ts +34 -0
  256. package/src/dispose/logger.test.ts +65 -0
  257. package/src/dispose/logger.ts +39 -0
  258. package/src/dispose/timer.test.ts +30 -0
  259. package/src/dispose/timer.ts +16 -0
  260. package/src/dispose/tracker.test.ts +51 -0
  261. package/src/dispose/tracker.ts +105 -0
  262. package/src/error/error-base.ts +45 -0
  263. package/src/error/error-code.ts +39 -0
  264. package/src/error/error-const.test.ts +30 -0
  265. package/src/error/error-const.ts +16 -0
  266. package/src/error/error-or.test.ts +44 -0
  267. package/src/error/error-or.ts +2 -0
  268. package/src/error/error-t.test.ts +116 -0
  269. package/src/error/error-t.ts +100 -0
  270. package/src/error/index.ts +24 -0
  271. package/src/error/node_modules/.vitest/results.json +1 -0
  272. package/src/event/disposable-linked-list.ts +29 -0
  273. package/src/event/emitter.test.ts +191 -0
  274. package/src/event/emitter.ts +162 -0
  275. package/src/event/error-handler.ts +22 -0
  276. package/src/event/index.ts +34 -0
  277. package/src/event/once.ts +29 -0
  278. package/src/event/phase-emitter.test.ts +212 -0
  279. package/src/event/phase-emitter.ts +209 -0
  280. package/src/event/shortcut-event-utils.ts +33 -0
  281. package/src/event/utils.ts +6 -0
  282. package/src/event/when.ts +40 -0
  283. package/src/function/debounce.test.ts +274 -0
  284. package/src/function/debounce.ts +168 -0
  285. package/src/function/index.ts +2 -0
  286. package/src/function/node_modules/.vitest/results.json +1 -0
  287. package/src/function/throttle.test.ts +179 -0
  288. package/src/function/throttle.ts +26 -0
  289. package/src/hash/hash-t.test.ts +100 -0
  290. package/src/hash/hash-t.ts +51 -0
  291. package/src/hash/index.ts +3 -0
  292. package/src/json/index.ts +1 -0
  293. package/src/json/node_modules/.vitest/results.json +1 -0
  294. package/src/json/parse.ts +19 -0
  295. package/src/launch/abstract-job.ts +45 -0
  296. package/src/launch/cost-recorder.ts +22 -0
  297. package/src/launch/index.ts +2 -0
  298. package/src/launch/job-scheduler.test.ts +122 -0
  299. package/src/launch/job-scheduler.ts +118 -0
  300. package/src/launch/node_modules/.vitest/deps/_metadata.json +8 -0
  301. package/src/launch/node_modules/.vitest/deps/package.json +3 -0
  302. package/src/launch/node_modules/.vitest/results.json +1 -0
  303. package/src/lock/README.md +11 -0
  304. package/src/lock/capability.test.ts +110 -0
  305. package/src/lock/capability.ts +89 -0
  306. package/src/lock/index.ts +15 -0
  307. package/src/lock/node_modules/.vitest/results.json +1 -0
  308. package/src/lock/semaphore.ts +21 -0
  309. package/src/lock/shared-mutex.test.ts +537 -0
  310. package/src/lock/shared-mutex.ts +242 -0
  311. package/src/lock/utils.test.ts +165 -0
  312. package/src/lock/utils.ts +135 -0
  313. package/src/lodash-es/index.ts +1 -0
  314. package/src/math/degree.ts +16 -0
  315. package/src/math/index.ts +7 -0
  316. package/src/math/math.test.ts +40 -0
  317. package/src/math/math.ts +64 -0
  318. package/src/math/node_modules/.vitest/results.json +1 -0
  319. package/src/math/vector.test.ts +73 -0
  320. package/src/math/vector.ts +114 -0
  321. package/src/network/client.interface.ts +104 -0
  322. package/src/network/client.web.ts +24 -0
  323. package/src/network/index.common.ts +10 -0
  324. package/src/network/index.ts +2 -0
  325. package/src/network/plugins/retry.ts +98 -0
  326. package/src/objects/deep-clone.test.ts +40 -0
  327. package/src/objects/deep-clone.ts +13 -0
  328. package/src/objects/deep-equal.test.ts +86 -0
  329. package/src/objects/deep-equal.ts +60 -0
  330. package/src/objects/index.ts +4 -0
  331. package/src/platform/index.ts +64 -0
  332. package/src/promise/index.ts +16 -0
  333. package/src/promise/promise.test.ts +254 -0
  334. package/src/promise/promise.ts +212 -0
  335. package/src/scheduler/callback-token.ts +31 -0
  336. package/src/scheduler/core/actuator-args.test.ts +47 -0
  337. package/src/scheduler/core/actuator.test.ts +82 -0
  338. package/src/scheduler/core/actuator.ts +58 -0
  339. package/src/scheduler/core/chunk-scheduler.test.ts +54 -0
  340. package/src/scheduler/core/chunk-scheduler.ts +28 -0
  341. package/src/scheduler/core/node_modules/.vitest/results.json +1 -0
  342. package/src/scheduler/core/scheduler.test.ts +328 -0
  343. package/src/scheduler/core/scheduler.ts +172 -0
  344. package/src/scheduler/core/task-queue.test.ts +78 -0
  345. package/src/scheduler/core/task-queue.ts +44 -0
  346. package/src/scheduler/core/task.test.ts +34 -0
  347. package/src/scheduler/core/task.ts +52 -0
  348. package/src/scheduler/core/utils.ts +48 -0
  349. package/src/scheduler/executor/abstract-executor.test.ts +44 -0
  350. package/src/scheduler/executor/abstract-executor.ts +38 -0
  351. package/src/scheduler/executor/executor.interface.ts +39 -0
  352. package/src/scheduler/executor/idle-callback-executor.test.ts +70 -0
  353. package/src/scheduler/executor/idle-callback-executor.ts +98 -0
  354. package/src/scheduler/executor/make-executor.ts +18 -0
  355. package/src/scheduler/executor/post-message-executor.test.ts +66 -0
  356. package/src/scheduler/executor/post-message-executor.ts +52 -0
  357. package/src/scheduler/index.ts +15 -0
  358. package/src/scheduler/lv-scheduler-callback.ts +19 -0
  359. package/src/scheduler/lv-scheduler-config.ts +17 -0
  360. package/src/scheduler/type.ts +48 -0
  361. package/src/sprintf/index.ts +2 -0
  362. package/src/sprintf/sprintf.test.ts +95 -0
  363. package/src/sprintf/sprintf.ts +97 -0
  364. package/src/structure/graph.test.ts +181 -0
  365. package/src/structure/graph.ts +105 -0
  366. package/src/structure/index.ts +8 -0
  367. package/src/structure/linked-list.test.ts +74 -0
  368. package/src/structure/linked-list.ts +145 -0
  369. package/src/structure/min-heap.test.ts +71 -0
  370. package/src/structure/min-heap.ts +91 -0
  371. package/src/type/REAME.md +2 -0
  372. package/src/type/distributive-omit.interface.ts +4 -0
  373. package/src/type/index.ts +3 -0
  374. package/src/type/object-key-paths.interface.ts +40 -0
  375. package/src/undo-redo-stack/README.md +61 -0
  376. package/src/undo-redo-stack/action-stack.test.ts +330 -0
  377. package/src/undo-redo-stack/action-stack.ts +150 -0
  378. package/src/undo-redo-stack/element.ts +4 -0
  379. package/src/undo-redo-stack/index.ts +7 -0
  380. package/src/undo-redo-stack/state-stack.test.ts +118 -0
  381. package/src/undo-redo-stack/state-stack.ts +133 -0
  382. package/src/uuid/index.ts +7 -0
  383. package/src/uuid/uuid.ts +86 -0
  384. package/src/worker/cors-worker.ts +38 -0
  385. package/src/worker/index.ts +4 -0
  386. package/src/worker/node_modules/.vitest/results.json +1 -0
  387. package/src/worker/promise-worker-main-thread.test.ts +91 -0
  388. package/src/worker/promise-worker-main-thread.ts +76 -0
  389. package/src/worker/promise-worker-worker-thread.ts +64 -0
  390. 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,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=index.cjs.map
4
+ //# sourceMappingURL=index.cjs.map
@@ -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,3 @@
1
+
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}