@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,340 @@
1
+ // src/_internal/logger.ts
2
+ var Logger = {
3
+ error(...data) {
4
+ if (typeof console.error === "function") {
5
+ console.error(...data);
6
+ }
7
+ },
8
+ info(...data) {
9
+ if (typeof console.info === "function") {
10
+ console.info(...data);
11
+ }
12
+ },
13
+ log(...data) {
14
+ if (typeof console.log === "function") {
15
+ console.log(...data);
16
+ }
17
+ },
18
+ time(label) {
19
+ if (typeof console.time === "function") {
20
+ console.time(label);
21
+ }
22
+ },
23
+ timeEnd(label) {
24
+ if (typeof console.timeEnd === "function") {
25
+ console.timeEnd(label);
26
+ }
27
+ },
28
+ timeLog(label, ...data) {
29
+ if (typeof console.timeLog === "function") {
30
+ console.timeLog(label, ...data);
31
+ }
32
+ },
33
+ timeStamp(label) {
34
+ if (typeof console.timeStamp === "function") {
35
+ console.timeStamp(label);
36
+ }
37
+ },
38
+ trace(...data) {
39
+ if (typeof console.trace === "function") {
40
+ console.trace(...data);
41
+ }
42
+ },
43
+ warn(...data) {
44
+ if (typeof console.warn === "function") {
45
+ console.warn(...data);
46
+ }
47
+ },
48
+ profile(label) {
49
+ if (typeof console.profile === "function") {
50
+ console.profile(label);
51
+ }
52
+ },
53
+ profileEnd(label) {
54
+ if (typeof console.profileEnd === "function") {
55
+ console.profileEnd(label);
56
+ }
57
+ }
58
+ };
59
+ function BRANCH_DISPOSE(from, to) {
60
+ }
61
+
62
+ // src/dispose/dispose-base.ts
63
+ var EmptyDispose = Object.freeze({ dispose() {
64
+ } });
65
+
66
+ // src/dispose/tracker.ts
67
+ var disposableTracker = null;
68
+ function makeDefaultTracker() {
69
+ const ignorePattern = /commitHookEffectList/i;
70
+ const __is_disposable_tracked__ = "__is_disposable_tracked__";
71
+ const __is_leak_marked__ = "__is_leak_marked__";
72
+ return new class {
73
+ trackDisposable(x) {
74
+ const stack = new Error("Potentially leaked disposable").stack;
75
+ setTimeout(() => {
76
+ if (stack.match(ignorePattern)) {
77
+ return;
78
+ }
79
+ if (x[__is_leak_marked__]) {
80
+ return;
81
+ }
82
+ if (!x[__is_disposable_tracked__]) {
83
+ Logger.log(stack);
84
+ }
85
+ }, 3e3);
86
+ }
87
+ setParent(child, parent) {
88
+ if (child && child !== EmptyDispose) {
89
+ try {
90
+ child[__is_disposable_tracked__] = true;
91
+ } catch {
92
+ }
93
+ }
94
+ }
95
+ markAsDisposed(disposable) {
96
+ if (disposable && disposable !== EmptyDispose) {
97
+ try {
98
+ disposable[__is_disposable_tracked__] = true;
99
+ } catch {
100
+ }
101
+ }
102
+ }
103
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
104
+ markAsLeaked(disposable) {
105
+ if (disposable && disposable !== EmptyDispose) {
106
+ try {
107
+ disposable[__is_leak_marked__] = true;
108
+ } catch {
109
+ }
110
+ }
111
+ }
112
+ }();
113
+ }
114
+ function setDisposableTracker(tracker) {
115
+ disposableTracker = tracker;
116
+ }
117
+ function enableTrack(tracker = makeDefaultTracker()) {
118
+ setDisposableTracker(tracker);
119
+ }
120
+ function disableTrack() {
121
+ setDisposableTracker(null);
122
+ }
123
+ function TRACK_DISPOSABLE(x) {
124
+ disposableTracker?.trackDisposable(x);
125
+ return x;
126
+ }
127
+ function MARK_AS_DISPOSED(x) {
128
+ disposableTracker?.markAsDisposed(x);
129
+ }
130
+ function SET_PARENT_OF_DISPOSABLE(child, parent) {
131
+ disposableTracker?.setParent(child, parent);
132
+ }
133
+ function MARK_AS_LEAKED(x) {
134
+ disposableTracker?.markAsLeaked(x);
135
+ }
136
+
137
+ // src/dispose/disposable-store.ts
138
+ var _DisposableStore = class _DisposableStore {
139
+ constructor() {
140
+ this._toDispose = /* @__PURE__ */ new Set();
141
+ this._isDisposed = false;
142
+ TRACK_DISPOSABLE(this);
143
+ }
144
+ get isDisposed() {
145
+ return this._isDisposed;
146
+ }
147
+ dispose() {
148
+ if (this._isDisposed) {
149
+ Logger.warn(new Error("DisposableStore has disposed.").stack);
150
+ return;
151
+ }
152
+ MARK_AS_DISPOSED(this);
153
+ this._isDisposed = true;
154
+ this.clear();
155
+ }
156
+ clear() {
157
+ if (this._toDispose.size === 0) {
158
+ return;
159
+ }
160
+ for (const disposable of this._toDispose) {
161
+ BRANCH_DISPOSE(this.constructor.name, disposable.constructor.name);
162
+ }
163
+ const errors = [];
164
+ for (const disposable of this._toDispose) {
165
+ try {
166
+ disposable.dispose();
167
+ } catch (e) {
168
+ errors.push(e);
169
+ }
170
+ }
171
+ this._toDispose.clear();
172
+ if (errors.length > 0) {
173
+ throw new AggregateError(errors, "find error when dispose store.");
174
+ }
175
+ }
176
+ add(o) {
177
+ if (!o) {
178
+ return o;
179
+ }
180
+ if (o === this) {
181
+ throw new Error("Cannot register a disposable on itself.");
182
+ }
183
+ SET_PARENT_OF_DISPOSABLE(o, this);
184
+ if (this._isDisposed) {
185
+ if (!_DisposableStore.DISABLE_DISPOSED_WARNING) {
186
+ Logger.warn(
187
+ new Error(
188
+ "Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!"
189
+ ).stack
190
+ );
191
+ }
192
+ } else {
193
+ this._toDispose.add(o);
194
+ }
195
+ return o;
196
+ }
197
+ };
198
+ _DisposableStore.DISABLE_DISPOSED_WARNING = false;
199
+ var DisposableStore = _DisposableStore;
200
+
201
+ // src/assert/assert.ts
202
+ function abort(reason) {
203
+ throw new Error(`lvAssert(${reason})`);
204
+ }
205
+ function lvAssertNotNil(val, reason) {
206
+ if (val === null || val === void 0) {
207
+ abort("#val is nil");
208
+ }
209
+ }
210
+
211
+ // src/dispose/disposable-t.ts
212
+ var Disposable = class {
213
+ constructor() {
214
+ this._store = new DisposableStore();
215
+ TRACK_DISPOSABLE(this);
216
+ SET_PARENT_OF_DISPOSABLE(this._store, this);
217
+ }
218
+ // 销毁该节点和所有的子节点
219
+ dispose() {
220
+ MARK_AS_DISPOSED(this);
221
+ BRANCH_DISPOSE(this.constructor.name, this._store.constructor.name);
222
+ this._store.dispose();
223
+ }
224
+ // 挂载子节点
225
+ _register(o) {
226
+ if (o === this) {
227
+ throw new Error("Cannot register a disposable on itself!");
228
+ }
229
+ return this._store.add(o);
230
+ }
231
+ };
232
+ var MutableDisposable = class {
233
+ constructor(value) {
234
+ this._isDisposed = false;
235
+ TRACK_DISPOSABLE(this);
236
+ this.value = value;
237
+ }
238
+ get value() {
239
+ return this._isDisposed ? void 0 : this._value;
240
+ }
241
+ set value(value) {
242
+ if (this._isDisposed || value === this._value) {
243
+ return;
244
+ }
245
+ this._value?.dispose();
246
+ if (value) {
247
+ SET_PARENT_OF_DISPOSABLE(value, this);
248
+ }
249
+ this._value = value;
250
+ }
251
+ clear() {
252
+ this.value = void 0;
253
+ }
254
+ dispose() {
255
+ this._isDisposed = true;
256
+ MARK_AS_DISPOSED(this);
257
+ this._value?.dispose();
258
+ this._value = void 0;
259
+ }
260
+ release() {
261
+ const oldValue = this._value;
262
+ this._value = void 0;
263
+ if (oldValue) {
264
+ SET_PARENT_OF_DISPOSABLE(oldValue, null);
265
+ }
266
+ return oldValue;
267
+ }
268
+ };
269
+ var SafeDisposable = class {
270
+ constructor(value) {
271
+ this._value = value;
272
+ TRACK_DISPOSABLE(this);
273
+ }
274
+ get value() {
275
+ return this._value;
276
+ }
277
+ isEmpty() {
278
+ return this._value === void 0;
279
+ }
280
+ dispose() {
281
+ if (!this._value) {
282
+ return;
283
+ }
284
+ this._value.dispose();
285
+ this._value = void 0;
286
+ MARK_AS_DISPOSED(this);
287
+ }
288
+ };
289
+ var TransferDisposable = class extends Disposable {
290
+ constructor(val) {
291
+ super();
292
+ this._val = val;
293
+ }
294
+ release() {
295
+ lvAssertNotNil(this._val);
296
+ const v = this._val;
297
+ this._val = void 0;
298
+ return v;
299
+ }
300
+ dispose() {
301
+ Logger.warn(new Error("TransferDisposable call dispose."));
302
+ this._val?.dispose();
303
+ super.dispose();
304
+ }
305
+ };
306
+
307
+ // src/dispose/disposable-utils.ts
308
+ function makeSafeDisposable(fn) {
309
+ const disposable = new SafeDisposable({
310
+ dispose: fn
311
+ });
312
+ return disposable;
313
+ }
314
+ function ignoreDispose(x) {
315
+ MARK_AS_LEAKED(x);
316
+ }
317
+ function isDisposable(thing) {
318
+ return typeof thing.dispose === "function" && thing.dispose.length === 0;
319
+ }
320
+ function makeTransferDisposable(val) {
321
+ return new TransferDisposable(val);
322
+ }
323
+
324
+ // src/dispose/timer.ts
325
+ function setDisposableTimeout(fn, timeout) {
326
+ const handle = setTimeout(() => {
327
+ fn();
328
+ }, timeout);
329
+ return makeSafeDisposable(() => clearTimeout(handle));
330
+ }
331
+ function setDisposableInterval(fn, timeout) {
332
+ const handle = setInterval(() => {
333
+ fn();
334
+ }, timeout);
335
+ return makeSafeDisposable(() => clearInterval(handle));
336
+ }
337
+
338
+ export { Disposable, DisposableStore, EmptyDispose, MutableDisposable, SET_PARENT_OF_DISPOSABLE, SafeDisposable, TransferDisposable, disableTrack, enableTrack, ignoreDispose, isDisposable, makeSafeDisposable, makeTransferDisposable, setDisposableInterval, setDisposableTimeout };
339
+ //# sourceMappingURL=index.js.map
340
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/_internal/logger.ts","../../src/dispose/logger.ts","../../src/dispose/dispose-base.ts","../../src/dispose/tracker.ts","../../src/dispose/disposable-store.ts","../../src/assert/assert.ts","../../src/dispose/disposable-t.ts","../../src/dispose/disposable-utils.ts","../../src/dispose/timer.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* eslint-disable no-console */\n\nexport const Logger = {\n error(...data: any[]): void {\n if (typeof console.error === 'function') {\n console.error(...data);\n }\n },\n info(...data: any[]): void {\n if (typeof console.info === 'function') {\n console.info(...data);\n }\n },\n log(...data: any[]): void {\n if (typeof console.log === 'function') {\n console.log(...data);\n }\n },\n time(label?: string): void {\n if (typeof console.time === 'function') {\n console.time(label);\n }\n },\n timeEnd(label?: string): void {\n if (typeof console.timeEnd === 'function') {\n console.timeEnd(label);\n }\n },\n timeLog(label?: string, ...data: any[]): void {\n if (typeof console.timeLog === 'function') {\n console.timeLog(label, ...data);\n }\n },\n timeStamp(label?: string): void {\n if (typeof console.timeStamp === 'function') {\n console.timeStamp(label);\n }\n },\n trace(...data: any[]): void {\n if (typeof console.trace === 'function') {\n console.trace(...data);\n }\n },\n warn(...data: any[]): void {\n if (typeof console.warn === 'function') {\n console.warn(...data);\n }\n },\n profile(label?: string): void {\n if (typeof console.profile === 'function') {\n console.profile(label);\n }\n },\n profileEnd(label?: string): void {\n if (typeof console.profileEnd === 'function') {\n console.profileEnd(label);\n }\n },\n};\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\n\nlet disposableLogger: IDisposableLogger | null = null;\n\nexport interface IDisposableLogger {\n branch: (from: string, to: string) => void;\n end: () => void;\n}\n\nfunction setDisposableLogger(logger: IDisposableLogger | null): void {\n disposableLogger = logger;\n}\n\nfunction makeDefaultLogger() {\n return new (class implements IDisposableLogger {\n private readonly _dep: [string, string][] = [];\n\n branch(from: string, to: string): void {\n this._dep.push([from, to]);\n }\n\n end(): void {\n Logger.log(this._dep);\n }\n })();\n}\n\n// 辅助能力 dispose触发时记录\nexport function BRANCH_DISPOSE(from: string, to: string) {\n disposableLogger?.branch(from, to);\n}\n\nexport function disposeWithLog<T extends IDisposable>(x: T, logger: IDisposableLogger = makeDefaultLogger()) {\n setDisposableLogger(logger);\n x.dispose();\n logger.end();\n setDisposableLogger(null);\n}\n","//\n// Disposable特征约束\n//\nexport interface IDisposable {\n dispose: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const EmptyDispose = Object.freeze<IDisposable>({ dispose() {} });\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { EmptyDispose } from './dispose-base';\n\nexport interface IDisposableTracker {\n trackDisposable: (disposable: IDisposable) => void;\n\n setParent: (child: IDisposable, parent: IDisposable | null) => void;\n\n markAsDisposed: (disposable: IDisposable) => void;\n\n markAsLeaked: (disposable: IDisposable) => void;\n}\n\nlet disposableTracker: IDisposableTracker | null = null;\n\nfunction makeDefaultTracker() {\n // reactHooks useEffect中出现disposable,我们默认为不会泄漏\n // 默认使用者一定会在useEffect的返回值中进行dispose\n const ignorePattern = /commitHookEffectList/i;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_leak_marked__ = '__is_leak_marked__';\n return new (class implements IDisposableTracker {\n trackDisposable(x: IDisposable): void {\n const stack = new Error('Potentially leaked disposable').stack!;\n setTimeout(() => {\n if (stack.match(ignorePattern)) {\n return;\n }\n if ((x as any)[__is_leak_marked__]) {\n return;\n }\n if (!(x as any)[__is_disposable_tracked__]) {\n Logger.log(stack);\n }\n }, 3000);\n }\n\n setParent(child: IDisposable, parent: IDisposable | null): void {\n if (child && child !== EmptyDispose) {\n try {\n (child as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n\n markAsDisposed(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n markAsLeaked(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_leak_marked__] = true;\n } catch {\n // noop\n }\n }\n }\n })();\n}\n\nfunction setDisposableTracker(tracker: IDisposableTracker | null): void {\n disposableTracker = tracker;\n}\n\nexport function enableTrack(tracker: IDisposableTracker = makeDefaultTracker()) {\n setDisposableTracker(tracker);\n}\n\nexport function disableTrack() {\n setDisposableTracker(null);\n}\n\n// 辅助能力 跟踪disposable\nexport function TRACK_DISPOSABLE<T extends IDisposable>(x: T): T {\n disposableTracker?.trackDisposable(x);\n return x;\n}\n\n// 辅助能力 标记disposable成功\nexport function MARK_AS_DISPOSED<T extends IDisposable>(x: T): void {\n disposableTracker?.markAsDisposed(x);\n}\n\n// 辅助能力 标记disposable关系\nexport function SET_PARENT_OF_DISPOSABLE(child: IDisposable, parent: IDisposable | null): void {\n disposableTracker?.setParent(child, parent);\n}\n\n// 辅助能力 主动标记泄漏\nexport function MARK_AS_LEAKED<T extends IDisposable>(x: T) {\n disposableTracker?.markAsLeaked(x);\n}\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\nexport class DisposableStore implements IDisposable {\n static DISABLE_DISPOSED_WARNING = false;\n\n private readonly _toDispose = new Set<IDisposable>();\n private _isDisposed = false;\n\n constructor() {\n TRACK_DISPOSABLE(this);\n }\n\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n dispose(): void {\n if (this._isDisposed) {\n // 不应该出现重复dispose\n Logger.warn(new Error('DisposableStore has disposed.').stack);\n return;\n }\n\n MARK_AS_DISPOSED(this);\n this._isDisposed = true;\n this.clear();\n }\n\n clear(): void {\n if (this._toDispose.size === 0) {\n return;\n }\n\n for (const disposable of this._toDispose) {\n BRANCH_DISPOSE(this.constructor.name, disposable.constructor.name);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const errors: any[] = [];\n for (const disposable of this._toDispose) {\n try {\n disposable.dispose();\n } catch (e) {\n errors.push(e);\n }\n }\n\n this._toDispose.clear();\n if (errors.length > 0) {\n throw new AggregateError(errors, 'find error when dispose store.');\n }\n }\n\n add<T extends IDisposable>(o: T): T {\n if (!o) {\n return o;\n }\n if ((o as unknown as DisposableStore) === this) {\n throw new Error('Cannot register a disposable on itself.');\n }\n\n SET_PARENT_OF_DISPOSABLE(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n Logger.warn(\n new Error(\n 'Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!',\n ).stack,\n );\n }\n } else {\n this._toDispose.add(o);\n }\n\n return o;\n }\n}\n","function abort(reason: string): never {\n throw new Error(`lvAssert(${reason})`);\n}\n\n/**\n * 断言表达式为真\n * @param expr \n * @param reason \n */\nexport function lvAssert(expr: unknown, reason?: string): asserts expr {\n if (!expr) {\n abort(reason ?? '#expr is false');\n }\n}\n\n/**\n * 断言deadcode路径\n * @param reason \n */\nexport function lvAssertNotHere(reason?: string): never {\n abort(reason ?? 'unreachable code flow');\n}\n\n/**\n * 断言类型不可达\n * @param member \n * @param message \n */\nexport function lvAssertNever(member: never, message = 'Illegal value:'): never {\n abort(`${message}: ${member}`);\n}\n\n/**\n * 断言变量为null或者undefined\n * @param val \n * @param reason \n */\nexport function lvAssertNotNil<T>(val: T, reason?: string): asserts val is NonNullable<T> {\n if (val === null || val === undefined) {\n abort(reason ?? '#val is nil');\n }\n}\n","import { Logger } from '@/_internal/logger';\nimport { lvAssertNotNil } from '@/assert';\nimport { DisposableStore } from './disposable-store';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\n//\n// Disposable基类\n//\n// 自动添加DisposableStore,提供默认的dispose和register方法\n//\nexport abstract class Disposable implements IDisposable {\n protected readonly _store = new DisposableStore();\n\n constructor() {\n TRACK_DISPOSABLE(this);\n SET_PARENT_OF_DISPOSABLE(this._store, this);\n }\n\n // 销毁该节点和所有的子节点\n dispose(): void {\n MARK_AS_DISPOSED(this);\n BRANCH_DISPOSE(this.constructor.name, this._store.constructor.name);\n\n this._store.dispose();\n }\n\n // 挂载子节点\n protected _register<T extends IDisposable>(o: T): T {\n if ((o as unknown as Disposable) === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\n\n/**\n * 容器类\n * 提供一个容器,容器内部的IDisposable对象可以切换更新,每次更新的时候,旧的IDisposable对象会自动进行dispose\n *\n * 使用方式:\n * class Foo {\n * private readonly _barRef: MutableDisposable;\n *\n * toggle() {\n * this._barRef.setValue(new Bar());\n * }\n *\n * doSomething() {\n * this._barRef.value.xxx();\n * }\n * }\n */\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n private _isDisposed = false;\n\n constructor(value?: T) {\n TRACK_DISPOSABLE(this);\n this.value = value;\n }\n\n get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n\n this._value?.dispose();\n if (value) {\n SET_PARENT_OF_DISPOSABLE(value, this);\n }\n this._value = value;\n }\n\n clear(): void {\n this.value = undefined;\n }\n\n dispose(): void {\n this._isDisposed = true;\n MARK_AS_DISPOSED(this);\n this._value?.dispose();\n this._value = undefined;\n }\n\n release(): T | undefined {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n SET_PARENT_OF_DISPOSABLE(oldValue, null);\n }\n return oldValue;\n }\n}\n\n/**\n * 容器类\n * 通过该容器进行dispose试,可以保证内部的IDisposable一会进行一次dispose\n * 本质是一种防御性质的处理,如果需要使用时,最好有明确的理由\n */\nexport class SafeDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n isEmpty() {\n return this._value === undefined;\n }\n\n dispose() {\n if (!this._value) {\n return;\n }\n this._value.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n}\n\n/**\n * 容器类\n * 引用计数容器,当引用为0时自动执行dispose\n * 注意:初始计数为1,默认构造的地方自动获得引用,如果在栈上构造,记得最后调用release\n *\n * 使用实例:\n * class Foo {\n * private _bar: RefCountedDisposable = new RefCountedDisposable(new Bar());\n *\n * getBar() {\n * this._bar.acquire();\n * return this._bar;\n * }\n * }\n *\n * // 如果在栈上构造\n * const bar = new RefCountedDisposable(new Bar());\n * makeFoo(bar);\n * makeFoo(bar);\n * bar.release();\n */\nexport class RefCountedDisposable<T extends IDisposable> implements IDisposable {\n private _counter: number = 1;\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n acquire() {\n if (!this._value) {\n return this;\n }\n this._counter++;\n return this;\n }\n\n release() {\n if (--this._counter === 0) {\n this._value!.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n return this;\n }\n\n dispose() {\n this.release();\n }\n}\n\n/**\n * 容器类,表示了一个T生命周期的转移\n *\n * 由于js引用传递的特性,正常情况下,我们默认为传递过来的对象不具备dispose权利\n * class Foo extends Disposable {\n * private readonly _bar = new Bar();\n *\n * constructor(\n * thirdparty: Thirdparty,\n * ) {\n * this._register(this._bar); // class内部构造的,具备dispose权利\n * this._register(thirdparty); // ❌,很少会直接这么写,除非能很确定存在生命周期转移\n * }\n *\n * constructor(\n * thirdparty: TransferDisposable<Thirdparty>, // ✅,明确表示了我依赖了Thirdparty,但是该对象生命周期要归我所有\n * ) {\n * this._register(this._bar);\n * this._register(thirdparty.release()); // ✅,可以直接register\n * }\n * }\n *\n * 注意:\n * 不同于C++中的unique_ptr,该class只作用于转移场景。\n * 所以class理论上只在栈上出现,不应该在堆上存在。\n * 如果出现了需要在堆上存储的场景,可以联系架构侧\n */\nexport class TransferDisposable<T extends IDisposable> extends Disposable {\n private _val?: T;\n\n constructor(val: T) {\n super();\n\n this._val = val;\n }\n\n release() {\n // 只能release一次\n lvAssertNotNil(this._val);\n const v = this._val;\n this._val = undefined;\n return v;\n }\n\n dispose(): void {\n // 虽然它有dispose,但是不应该被执行,应该直接被gc才对\n Logger.warn(new Error('TransferDisposable call dispose.'));\n this._val?.dispose();\n super.dispose();\n }\n}\n","import { SafeDisposable, TransferDisposable } from './disposable-t';\nimport { EmptyDispose, type IDisposable } from './dispose-base';\nimport { MARK_AS_LEAKED } from './tracker';\n\nexport function makeSafeDisposable(fn: (...args: any) => any) {\n const disposable = new SafeDisposable({\n dispose: fn,\n });\n return disposable;\n}\n\nexport function makeEmptyDisposable() {\n return EmptyDispose;\n}\n\n// 忽略dispose\nexport function ignoreDispose(x: IDisposable) {\n MARK_AS_LEAKED(x);\n}\n\n// 判断一个thing是否是disposable\nexport function isDisposable<E = any>(thing: E): thing is E & IDisposable {\n return typeof (thing as IDisposable).dispose === 'function' && (thing as IDisposable).dispose.length === 0;\n}\n\nexport function makeTransferDisposable<T extends IDisposable>(val: T) {\n return new TransferDisposable(val);\n}\n","import type { IDisposable } from './dispose-base';\nimport { makeSafeDisposable } from './disposable-utils';\n\nexport function setDisposableTimeout(fn: (...args: any[]) => void, timeout: number): IDisposable {\n const handle = setTimeout(() => {\n fn();\n }, timeout);\n return makeSafeDisposable(() => clearTimeout(handle));\n}\n\nexport function setDisposableInterval(fn: (...args: any[]) => void, timeout: number): IDisposable {\n const handle = setInterval(() => {\n fn();\n }, timeout);\n return makeSafeDisposable(() => clearInterval(handle));\n}\n"]}
@@ -0,0 +1,6 @@
1
+ interface IDisposable {
2
+ dispose: () => void;
3
+ }
4
+ declare const EmptyDispose: Readonly<IDisposable>;
5
+
6
+ export { EmptyDispose as E, type IDisposable as I };
@@ -0,0 +1,6 @@
1
+ interface IDisposable {
2
+ dispose: () => void;
3
+ }
4
+ declare const EmptyDispose: Readonly<IDisposable>;
5
+
6
+ export { EmptyDispose as E, type IDisposable as I };
@@ -0,0 +1,35 @@
1
+ import { I as IDisposable } from './dispose-base-CAeXDpjg.cjs';
2
+ import { L as LinkedList } from './linked-list-CUkue5DZ.cjs';
3
+
4
+ declare class DisposableLinkedList<T> extends LinkedList<T> {
5
+ unshiftAndGetDisposableNode(value: T): () => void;
6
+ pushAndGetDisposableNode(value: T): () => void;
7
+ }
8
+
9
+ interface EmitterOptions {
10
+ onAddListener?: (...args: any) => any;
11
+ onRemoveListener?: (...args: any) => any;
12
+ onListenerError?: (e: any) => void;
13
+ }
14
+ declare class Listener<TArgs extends any[]> {
15
+ private readonly _callback;
16
+ private readonly _callbackThis;
17
+ constructor(callback: (...args: TArgs) => void, callbackThis: any | undefined);
18
+ invoke(...args: TArgs): void;
19
+ }
20
+ interface Event<T extends any[]> {
21
+ (listener: (...args: T) => any, thisArgs?: any): IDisposable;
22
+ }
23
+ declare class Emitter<TArgs extends any[]> {
24
+ protected _listeners?: DisposableLinkedList<Listener<TArgs>>;
25
+ private readonly _options?;
26
+ private _disposed;
27
+ private _event?;
28
+ private _deliveryQueue?;
29
+ constructor(options?: EmitterOptions);
30
+ get event(): Event<TArgs>;
31
+ dispose(): void;
32
+ fire(...event: TArgs): void;
33
+ }
34
+
35
+ export { type Event as E, Emitter as a, type EmitterOptions as b };
@@ -0,0 +1,35 @@
1
+ import { I as IDisposable } from './dispose-base-CAeXDpjg.js';
2
+ import { L as LinkedList } from './linked-list-CUkue5DZ.js';
3
+
4
+ declare class DisposableLinkedList<T> extends LinkedList<T> {
5
+ unshiftAndGetDisposableNode(value: T): () => void;
6
+ pushAndGetDisposableNode(value: T): () => void;
7
+ }
8
+
9
+ interface EmitterOptions {
10
+ onAddListener?: (...args: any) => any;
11
+ onRemoveListener?: (...args: any) => any;
12
+ onListenerError?: (e: any) => void;
13
+ }
14
+ declare class Listener<TArgs extends any[]> {
15
+ private readonly _callback;
16
+ private readonly _callbackThis;
17
+ constructor(callback: (...args: TArgs) => void, callbackThis: any | undefined);
18
+ invoke(...args: TArgs): void;
19
+ }
20
+ interface Event<T extends any[]> {
21
+ (listener: (...args: T) => any, thisArgs?: any): IDisposable;
22
+ }
23
+ declare class Emitter<TArgs extends any[]> {
24
+ protected _listeners?: DisposableLinkedList<Listener<TArgs>>;
25
+ private readonly _options?;
26
+ private _disposed;
27
+ private _event?;
28
+ private _deliveryQueue?;
29
+ constructor(options?: EmitterOptions);
30
+ get event(): Event<TArgs>;
31
+ dispose(): void;
32
+ fire(...event: TArgs): void;
33
+ }
34
+
35
+ export { type Event as E, Emitter as a, type EmitterOptions as b };
@@ -0,0 +1,145 @@
1
+ 'use strict';
2
+
3
+ // src/error/error-t.ts
4
+ var lvErrorRefSymbol = /* @__PURE__ */ Symbol("lvErrorRef");
5
+ function findJsError(error) {
6
+ let obj = error;
7
+ while (obj) {
8
+ if (obj instanceof Error) {
9
+ return obj;
10
+ }
11
+ obj = obj.cause;
12
+ }
13
+ return new Error(error.toString());
14
+ }
15
+ function makeOk() {
16
+ return {
17
+ ok: true,
18
+ value: null,
19
+ pair() {
20
+ return [null, null];
21
+ },
22
+ code: 0,
23
+ msg: "",
24
+ ...{ [lvErrorRefSymbol]: true }
25
+ // 跳过类型检测
26
+ };
27
+ }
28
+ function makeOkWith(value) {
29
+ return {
30
+ ok: true,
31
+ value,
32
+ pair() {
33
+ return [null, value];
34
+ },
35
+ code: 0,
36
+ msg: "",
37
+ ...{ [lvErrorRefSymbol]: true }
38
+ // 跳过类型检测
39
+ };
40
+ }
41
+ function printCause(cause) {
42
+ if (cause === void 0) {
43
+ return "";
44
+ } else if (cause instanceof Error) {
45
+ return `
46
+ caused by [jsError]${cause.name}-${cause.message}`;
47
+ } else {
48
+ return `
49
+ caused by [${cause.code}]${cause.msg}${cause.ok ? "" : printCause(cause.cause)}`;
50
+ }
51
+ }
52
+ function internalMakeError(code, msg, cause, errorInfo) {
53
+ const errorRef = {
54
+ ok: false,
55
+ code,
56
+ msg,
57
+ cause,
58
+ errorInfo,
59
+ toString() {
60
+ return `[${code}]${msg}.${cause ? printCause(cause) : ""}`;
61
+ },
62
+ pair() {
63
+ return [errorRef, null];
64
+ },
65
+ stack: cause instanceof Error ? cause.stack : void 0,
66
+ findJsError: () => findJsError(errorRef),
67
+ ...{ [lvErrorRefSymbol]: true }
68
+ // 跳过类型检测
69
+ };
70
+ return errorRef;
71
+ }
72
+ function makeError(code, msg, errorInfo) {
73
+ return internalMakeError(code, msg, void 0, errorInfo);
74
+ }
75
+ function makeErrorBy(code, msg, cause, errorInfo) {
76
+ return internalMakeError(code, msg, cause, errorInfo);
77
+ }
78
+ function isLvErrorRef(val) {
79
+ return typeof val === "object" && val !== null && lvErrorRefSymbol in val;
80
+ }
81
+
82
+ // src/error/error-const.ts
83
+ function lvErrorConst(code, msg) {
84
+ return (rewrite) => {
85
+ if (!rewrite) {
86
+ return makeError(code, msg);
87
+ }
88
+ if (typeof rewrite === "string") {
89
+ return makeError(code, rewrite);
90
+ }
91
+ return makeErrorBy(code, rewrite.message, rewrite);
92
+ };
93
+ }
94
+
95
+ // src/error/error-code.ts
96
+ var GenericError = /* @__PURE__ */ ((GenericError2) => {
97
+ GenericError2[GenericError2["Ok"] = 0] = "Ok";
98
+ GenericError2[GenericError2["Cancelled"] = 1] = "Cancelled";
99
+ GenericError2[GenericError2["TimedOut"] = 2] = "TimedOut";
100
+ GenericError2[GenericError2["PermissionDenied"] = 3] = "PermissionDenied";
101
+ GenericError2[GenericError2["AlreadyExists"] = 4] = "AlreadyExists";
102
+ GenericError2[GenericError2["NotSupported"] = 5] = "NotSupported";
103
+ GenericError2[GenericError2["ResourceUnavailable"] = 6] = "ResourceUnavailable";
104
+ GenericError2[GenericError2["OutOfRange"] = 7] = "OutOfRange";
105
+ GenericError2[GenericError2["InvalidArgument"] = 8] = "InvalidArgument";
106
+ GenericError2[GenericError2["NetworkFailed"] = 9] = "NetworkFailed";
107
+ GenericError2[GenericError2["Interrupted"] = 10] = "Interrupted";
108
+ GenericError2[GenericError2["ResultNil"] = 11] = "ResultNil";
109
+ return GenericError2;
110
+ })(GenericError || {});
111
+ var cancelledError = lvErrorConst(1 /* Cancelled */, "operation(s) cancelled.");
112
+ var timeoutError = lvErrorConst(2 /* TimedOut */, "operation(s) timed out.");
113
+ var permissionDeniedError = lvErrorConst(3 /* PermissionDenied */, "permission denied.");
114
+ var alreadyExistsError = lvErrorConst(4 /* AlreadyExists */, "already exists.");
115
+ var notSupportedError = lvErrorConst(5 /* NotSupported */, "operation(s) not supported.");
116
+ var resourceUnavailableError = lvErrorConst(
117
+ 6 /* ResourceUnavailable */,
118
+ "resource is unavailable."
119
+ );
120
+ var outOfRangeError = lvErrorConst(7 /* OutOfRange */, "out of range.");
121
+ var invalidArgumentError = lvErrorConst(8 /* InvalidArgument */, "invalid arguments.");
122
+ var networkFailedError = lvErrorConst(9 /* NetworkFailed */, "network failed.");
123
+ var interruptedError = lvErrorConst(10 /* Interrupted */, "interrupted.");
124
+ var resultNilError = lvErrorConst(11 /* ResultNil */, "result is nil.");
125
+
126
+ exports.GenericError = GenericError;
127
+ exports.alreadyExistsError = alreadyExistsError;
128
+ exports.cancelledError = cancelledError;
129
+ exports.interruptedError = interruptedError;
130
+ exports.invalidArgumentError = invalidArgumentError;
131
+ exports.isLvErrorRef = isLvErrorRef;
132
+ exports.lvErrorConst = lvErrorConst;
133
+ exports.makeError = makeError;
134
+ exports.makeErrorBy = makeErrorBy;
135
+ exports.makeOk = makeOk;
136
+ exports.makeOkWith = makeOkWith;
137
+ exports.networkFailedError = networkFailedError;
138
+ exports.notSupportedError = notSupportedError;
139
+ exports.outOfRangeError = outOfRangeError;
140
+ exports.permissionDeniedError = permissionDeniedError;
141
+ exports.resourceUnavailableError = resourceUnavailableError;
142
+ exports.resultNilError = resultNilError;
143
+ exports.timeoutError = timeoutError;
144
+ //# sourceMappingURL=index.cjs.map
145
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/error/error-t.ts","../../src/error/error-const.ts","../../src/error/error-code.ts"],"names":["GenericError"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ILvErrorRef, ILvErrorOr, ILvRealErrorRef } from './error-base';\n\n//\n// Error类\n//\n// 用户给函数签名明确错误\n// function foo(): ILvErrorRef\n// return makeOk(); // 如果没有错误\n// return makeError(code, msg); // 指定错误码和携带消息\n//\n// const SomeError = LvErrorConst(code, msg); // 更推荐用LvErrorConst生成\n// return SomeError();\n//\n\nconst lvErrorRefSymbol = Symbol('lvErrorRef');\n\nfunction findJsError(error: ILvErrorRef | Error) {\n let obj: ILvErrorRef | Error | undefined = error;\n while (obj) {\n if (obj instanceof Error) {\n return obj;\n }\n obj = (obj as ILvErrorRef).cause;\n }\n // 如果没有Error,那就序列化lvError\n return new Error((error as ILvErrorRef).toString());\n}\n\nexport function makeOk<K>(): ILvErrorOr<never, K> {\n return {\n ok: true,\n value: null!,\n pair() {\n return [null, null!];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nexport function makeOkWith<T, K = unknown>(value: T): ILvErrorOr<T, K> {\n return {\n ok: true,\n value,\n pair() {\n return [null, value];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nfunction printCause(cause: ILvErrorRef | Error | undefined): string {\n if (cause === undefined) {\n return '';\n } else if (cause instanceof Error) {\n return `\\ncaused by [jsError]${cause.name}-${cause.message}`;\n } else {\n return `\\ncaused by [${cause.code}]${cause.msg}${cause.ok ? '' : printCause(cause.cause)}`;\n }\n}\n\nfunction internalMakeError<T>(code: number, msg: string, cause?: ILvErrorRef | Error, errorInfo?: T) {\n const errorRef: ILvRealErrorRef<T> = {\n ok: false,\n code,\n msg,\n cause,\n errorInfo,\n toString() {\n return `[${code}]${msg}.${cause ? printCause(cause) : ''}`;\n },\n pair() {\n return [errorRef, null];\n },\n stack: cause instanceof Error ? cause.stack : undefined,\n findJsError: () => findJsError(errorRef),\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n return errorRef;\n}\n\nexport function makeError<T = unknown>(code: number, msg: string, errorInfo?: T): ILvRealErrorRef<T> {\n return internalMakeError(code, msg, undefined, errorInfo);\n}\n\nexport function makeErrorBy<T = unknown>(\n code: number,\n msg: string,\n cause: ILvErrorRef | Error,\n errorInfo?: T,\n): ILvRealErrorRef<T> {\n return internalMakeError(code, msg, cause, errorInfo);\n}\n\nexport function isLvErrorRef(val: unknown): val is ILvErrorRef {\n return typeof val === 'object' && val !== null && lvErrorRefSymbol in val;\n}\n","import { makeError, makeErrorBy } from './error-t';\n\n//\n// Error编译时错误对象\n//\nexport function lvErrorConst(code: number, msg: string) {\n return (rewrite?: string | Error) => {\n if (!rewrite) {\n return makeError(code, msg);\n }\n if (typeof rewrite === 'string') {\n return makeError(code, rewrite);\n }\n return makeErrorBy(code, rewrite.message, rewrite);\n };\n}\n","import { lvErrorConst } from './error-const';\n\n/**\n * 提供了通用的错误码(+1至+256)\n *\n * 注意:这里只是提供了通用的错误码,方便服务使用,但并不是要求服务一定使用如下的错误码来表明某种错误\n */\nexport enum GenericError {\n Ok = 0,\n Cancelled = 1, // 操作被取消\n TimedOut = 2, // 操作超时\n PermissionDenied = 3, // 无权限\n AlreadyExists = 4, // 已经存在(文件/记录等)\n NotSupported = 5, // 操作不支持\n ResourceUnavailable = 6, // 资源不可用\n OutOfRange = 7, // (参数/结果等)发生越界\n InvalidArgument = 8, // 无效参数\n NetworkFailed = 9, // 网络失败\n Interrupted = 10, // 操作被中断(捕获异常转为错误)\n ResultNil = 11, // 结果不存在(null or undefined转为错误)\n}\n\n/**\n * 通用错误码所对应的编译时常量对象(ErrorConst)\n */\nexport const cancelledError = lvErrorConst(GenericError.Cancelled, 'operation(s) cancelled.');\nexport const timeoutError = lvErrorConst(GenericError.TimedOut, 'operation(s) timed out.');\nexport const permissionDeniedError = lvErrorConst(GenericError.PermissionDenied, 'permission denied.');\nexport const alreadyExistsError = lvErrorConst(GenericError.AlreadyExists, 'already exists.');\nexport const notSupportedError = lvErrorConst(GenericError.NotSupported, 'operation(s) not supported.');\nexport const resourceUnavailableError = lvErrorConst(\n GenericError.ResourceUnavailable,\n 'resource is unavailable.',\n);\nexport const outOfRangeError = lvErrorConst(GenericError.OutOfRange, 'out of range.');\nexport const invalidArgumentError = lvErrorConst(GenericError.InvalidArgument, 'invalid arguments.');\nexport const networkFailedError = lvErrorConst(GenericError.NetworkFailed, 'network failed.');\nexport const interruptedError = lvErrorConst(GenericError.Interrupted, 'interrupted.');\nexport const resultNilError = lvErrorConst(GenericError.ResultNil, 'result is nil.');\n"]}