@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,78 @@
1
+ type BrandedService = {
2
+ _serviceBrand: undefined;
3
+ };
4
+ interface ServiceIdentifier<T> {
5
+ (...args: any[]): void;
6
+ type: T;
7
+ }
8
+ interface ServicesAccessor {
9
+ get: <T>(id: ServiceIdentifier<T>) => T;
10
+ }
11
+ declare function createDecorator<T>(serviceId: string): ServiceIdentifier<T>;
12
+ declare function refineServiceDecorator<T1, T extends T1>(serviceIdentifier: ServiceIdentifier<T1>): ServiceIdentifier<T>;
13
+
14
+ declare class SyncDescriptor<T> {
15
+ readonly ctor: new (...args: any[]) => T;
16
+ readonly staticArguments: any[];
17
+ readonly supportsDelayedInstantiation: boolean;
18
+ constructor(ctor: new (...args: any[]) => T, staticArguments?: any[], supportsDelayedInstantiation?: boolean);
19
+ }
20
+ interface SyncDescriptor0<T> {
21
+ readonly ctor: new () => T;
22
+ }
23
+
24
+ declare enum ServiceOwnership {
25
+ Owned = 1,
26
+ Reference = 2
27
+ }
28
+ declare class ServiceOwnershipCollection {
29
+ private readonly _entries;
30
+ constructor(...entries: [ServiceIdentifier<any>, ServiceOwnership][]);
31
+ get entries(): Map<ServiceIdentifier<any>, ServiceOwnership>;
32
+ set(id: ServiceIdentifier<any>, ownership: ServiceOwnership): void;
33
+ has(id: ServiceIdentifier<any>): boolean;
34
+ get(id: ServiceIdentifier<any>): ServiceOwnership | undefined;
35
+ }
36
+
37
+ type IServiceCollection = {
38
+ entries?: [ServiceIdentifier<any>, any][];
39
+ ownership?: ServiceOwnershipCollection;
40
+ };
41
+ declare class ServiceCollection {
42
+ private readonly _entries;
43
+ private readonly _ownership;
44
+ constructor(options?: IServiceCollection);
45
+ get entries(): Map<ServiceIdentifier<any>, any>;
46
+ get ownerships(): Map<ServiceIdentifier<any>, ServiceOwnership> | undefined;
47
+ set<T>(id: ServiceIdentifier<T>, instanceOrDescriptor: T | SyncDescriptor<T>): void;
48
+ has(id: ServiceIdentifier<any>): boolean;
49
+ get<T>(id: ServiceIdentifier<T>): T | SyncDescriptor<T>;
50
+ }
51
+
52
+ type GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? [] : TArgs extends [...infer TFirst, BrandedService] ? GetLeadingNonServiceArgs<TFirst> : TArgs;
53
+ interface IInstantiationService {
54
+ readonly _serviceBrand: undefined;
55
+ /**
56
+ * Synchronously creates an instance that is denoted by the descriptor
57
+ */
58
+ createInstance: {
59
+ <T>(descriptor: SyncDescriptor0<T>): T;
60
+ <Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;
61
+ };
62
+ /**
63
+ * Calls a function with a service accessor.
64
+ */
65
+ invokeFunction: <R, TS extends any[] = []>(fn: (accessor: ServicesAccessor, ...args: TS) => R, ...args: TS) => R;
66
+ /**
67
+ * Creates a child of this service which inherits all current services
68
+ * and adds/overwrites the given services.
69
+ */
70
+ createChild: (services: ServiceCollection) => IInstantiationService;
71
+ /**
72
+ * 生命周期归属该DI上下文的服务进行销毁
73
+ */
74
+ dispose: () => void;
75
+ }
76
+ declare const IInstantiationService: ServiceIdentifier<IInstantiationService>;
77
+
78
+ export { type BrandedService as B, type GetLeadingNonServiceArgs as G, IInstantiationService as I, ServiceCollection as S, type ServicesAccessor as a, type SyncDescriptor0 as b, SyncDescriptor as c, type ServiceIdentifier as d, ServiceOwnershipCollection as e, ServiceOwnership as f, createDecorator as g, type IServiceCollection as h, refineServiceDecorator as r };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ // src/assert/assert.ts
4
+ function abort(reason) {
5
+ throw new Error(`lvAssert(${reason})`);
6
+ }
7
+ function lvAssert(expr, reason) {
8
+ if (!expr) {
9
+ abort("#expr is false");
10
+ }
11
+ }
12
+
13
+ // src/json/parse.ts
14
+ function safeJsonParse(value, fallback = {}) {
15
+ if (!value) {
16
+ return fallback;
17
+ }
18
+ try {
19
+ lvAssert(typeof value === "string");
20
+ return JSON.parse(value);
21
+ } catch (e) {
22
+ return fallback;
23
+ }
24
+ }
25
+
26
+ exports.safeJsonParse = safeJsonParse;
27
+ //# sourceMappingURL=index.cjs.map
28
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/assert/assert.ts","../../src/json/parse.ts"],"names":[],"mappings":";;;AAAA,SAAS,MAAM,MAAA,EAAuB;AACpC,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA,CAAG,CAAA;AACvC;AAOO,SAAS,QAAA,CAAS,MAAe,MAAA,EAA+B;AACrE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,KAAA,CAAgB,gBAAgB,CAAA;AAAA,EAClC;AACF;;;ACNO,SAAS,aAAA,CAAc,KAAA,EAAe,QAAA,GAAgC,EAAC,EAAwB;AACpG,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,OAAO,UAAU,QAAQ,CAAA;AAClC,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,CAAA,EAAG;AACV,IAAA,OAAO,QAAA;AAAA,EACT;AACF","file":"index.cjs","sourcesContent":["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 { lvAssert } from '@/assert';\n\n/**\n * 解析 json 字符串,如果解析失败,返回空对象。\n * @param value 序列化后的 json 字符串,注意,一定是json字符串\n * @returns 反序列化的 json 字符串对应的对象,如果解析异常,返回空对象\n */\nexport function safeJsonParse(value: string, fallback: Record<string, any> = {}): Record<string, any> {\n if (!value) {\n return fallback;\n }\n\n try {\n lvAssert(typeof value === 'string');\n return JSON.parse(value);\n } catch (e) {\n return fallback;\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 解析 json 字符串,如果解析失败,返回空对象。
3
+ * @param value 序列化后的 json 字符串,注意,一定是json字符串
4
+ * @returns 反序列化的 json 字符串对应的对象,如果解析异常,返回空对象
5
+ */
6
+ declare function safeJsonParse(value: string, fallback?: Record<string, any>): Record<string, any>;
7
+
8
+ export { safeJsonParse };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 解析 json 字符串,如果解析失败,返回空对象。
3
+ * @param value 序列化后的 json 字符串,注意,一定是json字符串
4
+ * @returns 反序列化的 json 字符串对应的对象,如果解析异常,返回空对象
5
+ */
6
+ declare function safeJsonParse(value: string, fallback?: Record<string, any>): Record<string, any>;
7
+
8
+ export { safeJsonParse };
@@ -0,0 +1,26 @@
1
+ // src/assert/assert.ts
2
+ function abort(reason) {
3
+ throw new Error(`lvAssert(${reason})`);
4
+ }
5
+ function lvAssert(expr, reason) {
6
+ if (!expr) {
7
+ abort("#expr is false");
8
+ }
9
+ }
10
+
11
+ // src/json/parse.ts
12
+ function safeJsonParse(value, fallback = {}) {
13
+ if (!value) {
14
+ return fallback;
15
+ }
16
+ try {
17
+ lvAssert(typeof value === "string");
18
+ return JSON.parse(value);
19
+ } catch (e) {
20
+ return fallback;
21
+ }
22
+ }
23
+
24
+ export { safeJsonParse };
25
+ //# sourceMappingURL=index.js.map
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/assert/assert.ts","../../src/json/parse.ts"],"names":[],"mappings":";AAAA,SAAS,MAAM,MAAA,EAAuB;AACpC,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA,CAAG,CAAA;AACvC;AAOO,SAAS,QAAA,CAAS,MAAe,MAAA,EAA+B;AACrE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,KAAA,CAAgB,gBAAgB,CAAA;AAAA,EAClC;AACF;;;ACNO,SAAS,aAAA,CAAc,KAAA,EAAe,QAAA,GAAgC,EAAC,EAAwB;AACpG,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,OAAO,UAAU,QAAQ,CAAA;AAClC,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,CAAA,EAAG;AACV,IAAA,OAAO,QAAA;AAAA,EACT;AACF","file":"index.js","sourcesContent":["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 { lvAssert } from '@/assert';\n\n/**\n * 解析 json 字符串,如果解析失败,返回空对象。\n * @param value 序列化后的 json 字符串,注意,一定是json字符串\n * @returns 反序列化的 json 字符串对应的对象,如果解析异常,返回空对象\n */\nexport function safeJsonParse(value: string, fallback: Record<string, any> = {}): Record<string, any> {\n if (!value) {\n return fallback;\n }\n\n try {\n lvAssert(typeof value === 'string');\n return JSON.parse(value);\n } catch (e) {\n return fallback;\n }\n}\n"]}
@@ -0,0 +1,213 @@
1
+ 'use strict';
2
+
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (decorator(result)) || result;
9
+ return result;
10
+ };
11
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
12
+
13
+ // src/assert/assert.ts
14
+ function abort(reason) {
15
+ throw new Error(`lvAssert(${reason})`);
16
+ }
17
+ function lvAssert(expr, reason) {
18
+ if (!expr) {
19
+ abort(reason);
20
+ }
21
+ }
22
+ function lvAssertNotHere(reason) {
23
+ abort(reason ?? "unreachable code flow");
24
+ }
25
+
26
+ // src/launch/abstract-job.ts
27
+ var AbstractJob = class {
28
+ constructor() {
29
+ this._store = /* @__PURE__ */ new Map();
30
+ }
31
+ get name() {
32
+ return this._name;
33
+ }
34
+ shouldWait(phase) {
35
+ const barriers = this._store.get(phase);
36
+ if (!barriers?.length) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ wait(phase) {
42
+ try {
43
+ const barriers = this._store.get(phase);
44
+ if (!barriers?.length) {
45
+ return Promise.resolve();
46
+ }
47
+ return Promise.all(barriers.map((barrier) => barrier.wait()));
48
+ } finally {
49
+ this._store.delete(phase);
50
+ }
51
+ }
52
+ prepare(phase) {
53
+ this._executePhase(phase);
54
+ }
55
+ _setBarrier(phase, barrier) {
56
+ if (!this._store.has(phase)) {
57
+ this._store.set(phase, []);
58
+ }
59
+ const barriers = this._store.get(phase);
60
+ barriers.push(barrier);
61
+ }
62
+ };
63
+
64
+ // src/di/base.ts
65
+ var serviceIds = /* @__PURE__ */ new Map();
66
+ var DI_TARGET = "$di$target";
67
+ var DI_DEPENDENCIES = "$di$dependencies";
68
+ function setServiceDependency(id, ctor, index) {
69
+ if (ctor[DI_TARGET] === ctor) {
70
+ ctor[DI_DEPENDENCIES].push({ id, index });
71
+ } else {
72
+ ctor[DI_DEPENDENCIES] = [{ id, index }];
73
+ ctor[DI_TARGET] = ctor;
74
+ }
75
+ }
76
+ function createDecorator(serviceId) {
77
+ if (serviceIds.has(serviceId)) {
78
+ return serviceIds.get(serviceId);
79
+ }
80
+ const id = function(target, key, index) {
81
+ if (arguments.length !== 3) {
82
+ throw new Error("@IServiceName-decorator can only be used to decorate a parameter");
83
+ }
84
+ setServiceDependency(id, target, index);
85
+ };
86
+ id.toString = () => serviceId;
87
+ serviceIds.set(serviceId, id);
88
+ return id;
89
+ }
90
+
91
+ // src/di/instantiation-service.interface.ts
92
+ var IInstantiationService = createDecorator("instantiation");
93
+
94
+ // src/launch/cost-recorder.ts
95
+ var CostRecorder = class {
96
+ constructor() {
97
+ // 每个job在不同阶段的耗时
98
+ this._jobCost = {};
99
+ }
100
+ record(jobName, lifecycle, cost) {
101
+ if (!this._jobCost[jobName]) {
102
+ this._jobCost[jobName] = {};
103
+ }
104
+ if (!this._jobCost[jobName][lifecycle]) {
105
+ this._jobCost[jobName][lifecycle] = 0;
106
+ }
107
+ this._jobCost[jobName][lifecycle] += cost;
108
+ }
109
+ toString() {
110
+ return JSON.stringify(this._jobCost);
111
+ }
112
+ };
113
+
114
+ // src/launch/job-scheduler.ts
115
+ var JobDescriptor = class {
116
+ constructor(ctor, args) {
117
+ this.ctor = ctor;
118
+ this.staticArguments = args;
119
+ }
120
+ };
121
+ exports.JobScheduler = class JobScheduler {
122
+ constructor(_currentPhase, _instantiationService) {
123
+ this._currentPhase = _currentPhase;
124
+ this._instantiationService = _instantiationService;
125
+ this._jobPools = /* @__PURE__ */ new Map();
126
+ this._costRecorder = new CostRecorder();
127
+ this._unconstructedJobs = /* @__PURE__ */ new Map();
128
+ }
129
+ get currentPhase() {
130
+ return this._currentPhase;
131
+ }
132
+ /**
133
+ * 按需添加一个job,job会在phase时刻才进行实例化
134
+ * @param phase job实例化时机
135
+ * @param ctor job构造函数
136
+ * @param args job构造静态参数
137
+ */
138
+ registerJob(phase, ctor, ...args) {
139
+ if (!this._unconstructedJobs.has(phase)) {
140
+ this._unconstructedJobs.set(phase, [new JobDescriptor(ctor, args)]);
141
+ } else {
142
+ this._unconstructedJobs.get(phase).push(new JobDescriptor(ctor, args));
143
+ }
144
+ }
145
+ /**
146
+ * 添加一个构造好的job
147
+ * @param job 任务
148
+ */
149
+ addJob(job) {
150
+ lvAssert(!this._jobPools.has(job.name), "cant duplicate add job.");
151
+ this._jobPools.set(job.name, job);
152
+ }
153
+ removeJob(jobName) {
154
+ this._jobPools.delete(jobName);
155
+ }
156
+ prepare(phase) {
157
+ const descriptors = this._unconstructedJobs.get(phase) ?? [];
158
+ for (const d of descriptors) {
159
+ this.addJob(this._instantiationService.createInstance(d.ctor, ...d.staticArguments));
160
+ }
161
+ let shouldWait = false;
162
+ this._unconstructedJobs.delete(phase);
163
+ for (const [, job] of this._jobPools) {
164
+ const start = Date.now();
165
+ job.prepare(phase);
166
+ this._costRecorder.record(job.name, phase, Date.now() - start);
167
+ if (job.shouldWait(phase)) {
168
+ shouldWait = true;
169
+ }
170
+ }
171
+ return shouldWait;
172
+ }
173
+ getCost() {
174
+ return this._costRecorder.toString();
175
+ }
176
+ /**
177
+ * 推进到目标阶段,要求目标阶段没有需要等待的任务
178
+ * @param phase 目标阶段
179
+ */
180
+ advanceToPhase(phase) {
181
+ for (const [, job] of this._jobPools) {
182
+ if (job.shouldWait(phase)) {
183
+ lvAssertNotHere(`exists job should wait, job name: ${job.name}, phase: ${phase}`);
184
+ }
185
+ }
186
+ this._currentPhase = phase;
187
+ }
188
+ async wait(phase) {
189
+ const jobPromises = [];
190
+ for (const [, job] of this._jobPools) {
191
+ if (!job.shouldWait(phase)) {
192
+ continue;
193
+ }
194
+ jobPromises.push(
195
+ (() => {
196
+ const start = Date.now();
197
+ return job.wait(phase).then(() => {
198
+ this._costRecorder.record(job.name, phase, Date.now() - start);
199
+ });
200
+ })()
201
+ );
202
+ }
203
+ await Promise.all(jobPromises);
204
+ this._currentPhase = phase;
205
+ }
206
+ };
207
+ exports.JobScheduler = __decorateClass([
208
+ __decorateParam(1, IInstantiationService)
209
+ ], exports.JobScheduler);
210
+
211
+ exports.AbstractJob = AbstractJob;
212
+ //# sourceMappingURL=index.cjs.map
213
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/assert/assert.ts","../../src/launch/abstract-job.ts","../../src/di/base.ts","../../src/di/instantiation-service.interface.ts","../../src/launch/cost-recorder.ts","../../src/launch/job-scheduler.ts"],"names":["JobScheduler"],"mappings":"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","file":"index.cjs","sourcesContent":["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 { Barrier } from '@/async';\n\nexport abstract class AbstractJob<T, K extends T = T> {\n protected abstract _name: string;\n protected _store: Map<K, Barrier[]> = new Map();\n\n get name() {\n return this._name;\n }\n\n shouldWait(phase: K) {\n const barriers = this._store.get(phase);\n if (!barriers?.length) {\n return false;\n }\n return true;\n }\n\n wait(phase: K): Promise<void> {\n try {\n const barriers = this._store.get(phase);\n if (!barriers?.length) {\n return Promise.resolve();\n }\n return Promise.all(barriers.map((barrier) => barrier.wait())) as unknown as Promise<void>;\n } finally {\n // 执行之后就清空,确保失败或cancel态时可以重复 prepare.\n this._store.delete(phase);\n }\n }\n\n prepare(phase: K) {\n this._executePhase(phase);\n }\n\n protected _setBarrier(phase: K, barrier: Barrier) {\n if (!this._store.has(phase)) {\n this._store.set(phase, []);\n }\n const barriers = this._store.get(phase)!;\n barriers.push(barrier);\n }\n\n protected abstract _executePhase(phase: K): void;\n}\n","// service特征标识\nexport type BrandedService = { _serviceBrand: undefined };\n\n//\n// 服务唯一标识符(编译时生成)\n// 需要DI进行注入的服务必须拥有该标识符\n// 本质上是一个参数装饰器\n//\nexport interface ServiceIdentifier<T> {\n (...args: any[]): void;\n type: T;\n}\n\n// 获取服务的视图接口\nexport interface ServicesAccessor {\n get: <T>(id: ServiceIdentifier<T>) => T;\n}\n\n// 服务唯一标识符存储\nconst serviceIds = new Map<string, ServiceIdentifier<any>>();\n\nexport const DI_TARGET = '$di$target';\nexport const DI_DEPENDENCIES = '$di$dependencies';\n\n// 获取某个服务的依赖\n// 因为服务依赖关系会存放在构造函数的属性上\nexport function getServiceDependencies(ctor: any): { id: ServiceIdentifier<any>; index: number }[] {\n return ctor[DI_DEPENDENCIES] || [];\n}\n\n// 更新服务依赖依赖关系\nfunction setServiceDependency(id: ServiceIdentifier<any>, ctor: any, index: number): void {\n if (ctor[DI_TARGET] === ctor) {\n ctor[DI_DEPENDENCIES].push({ id, index });\n } else {\n ctor[DI_DEPENDENCIES] = [{ id, index }];\n ctor[DI_TARGET] = ctor;\n }\n}\n\n//\n// 创建服务唯一标识符\n// 传入服务ID,返回一个参数装饰器\n// 参数装饰器会记录A需要\n// const IFooServiceId = createDecorator<FooService>('FooService');\n//\n// class Bar\n// constructor(@IFooServiceId a: IFooService) // IFooService是接口声明\n//\nexport function createDecorator<T>(serviceId: string): ServiceIdentifier<T> {\n if (serviceIds.has(serviceId)) {\n return serviceIds.get(serviceId)!;\n }\n\n const id = function (target: any, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n setServiceDependency(id, target, index);\n } as any;\n\n id.toString = () => serviceId;\n\n serviceIds.set(serviceId, id);\n return id;\n}\n\n// TODO(niurouwan): 补一下注释和例子\nexport function refineServiceDecorator<T1, T extends T1>(\n serviceIdentifier: ServiceIdentifier<T1>,\n): ServiceIdentifier<T> {\n return serviceIdentifier as ServiceIdentifier<T>;\n}\n","import type { BrandedService, ServicesAccessor } from './base';\nimport { createDecorator } from './base';\nimport type { SyncDescriptor0 } from './descriptor';\nimport type { ServiceCollection } from './service-collection';\n\nexport type GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends []\n ? []\n : TArgs extends [...infer TFirst, BrandedService]\n ? GetLeadingNonServiceArgs<TFirst>\n : TArgs;\n\nexport interface IInstantiationService {\n readonly _serviceBrand: undefined;\n\n /**\n * Synchronously creates an instance that is denoted by the descriptor\n */\n createInstance: {\n <T>(descriptor: SyncDescriptor0<T>): T;\n <Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(\n ctor: Ctor,\n ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>\n ): R;\n };\n\n /**\n * Calls a function with a service accessor.\n */\n invokeFunction: <R, TS extends any[] = []>(\n fn: (accessor: ServicesAccessor, ...args: TS) => R,\n ...args: TS\n ) => R;\n\n /**\n * Creates a child of this service which inherits all current services\n * and adds/overwrites the given services.\n */\n createChild: (services: ServiceCollection) => IInstantiationService;\n\n /**\n * 生命周期归属该DI上下文的服务进行销毁\n */\n dispose: () => void;\n}\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('instantiation');\n","// lifecycle -> cost\n// 启动流程lifecycle某个阶段对应的耗时\ntype Trace = Record<string | number, number>;\n\nexport class CostRecorder {\n // 每个job在不同阶段的耗时\n private _jobCost: Record<string, Trace> = {};\n\n record(jobName: string, lifecycle: string | number, cost: number) {\n if (!this._jobCost[jobName]) {\n this._jobCost[jobName] = {};\n }\n if (!this._jobCost[jobName][lifecycle]) {\n this._jobCost[jobName][lifecycle] = 0;\n }\n this._jobCost[jobName][lifecycle] += cost;\n }\n\n toString() {\n return JSON.stringify(this._jobCost);\n }\n}\n","import { IInstantiationService, type GetLeadingNonServiceArgs } from '@/di';\nimport { lvAssert, lvAssertNotHere } from '@/assert';\nimport type { AbstractJob } from './abstract-job';\nimport { CostRecorder } from './cost-recorder';\n\nclass JobDescriptor<T, K extends T> {\n readonly ctor: new (...args: any[]) => AbstractJob<T, K>;\n readonly staticArguments: any[];\n\n constructor(ctor: new (...args: any[]) => AbstractJob<T, K>, args: any[]) {\n this.ctor = ctor;\n this.staticArguments = args;\n }\n}\n\nexport class JobScheduler<T, K extends T = T> {\n private readonly _jobPools: Map<string, AbstractJob<T, K>> = new Map();\n private readonly _costRecorder = new CostRecorder();\n private readonly _unconstructedJobs: Map<K, JobDescriptor<AbstractJob<T, K>, any>[]> = new Map();\n\n constructor(\n private _currentPhase: K,\n @IInstantiationService private readonly _instantiationService: IInstantiationService,\n ) {}\n\n get currentPhase() {\n return this._currentPhase;\n }\n\n /**\n * 按需添加一个job,job会在phase时刻才进行实例化\n * @param phase job实例化时机\n * @param ctor job构造函数\n * @param args job构造静态参数\n */\n registerJob<Ctor extends new (...args: any[]) => AbstractJob<T, K>>(\n phase: K,\n ctor: Ctor,\n ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>\n ) {\n if (!this._unconstructedJobs.has(phase)) {\n this._unconstructedJobs.set(phase, [new JobDescriptor(ctor, args)]);\n } else {\n this._unconstructedJobs.get(phase)!.push(new JobDescriptor(ctor, args));\n }\n }\n\n /**\n * 添加一个构造好的job\n * @param job 任务\n */\n addJob(job: AbstractJob<T, K>) {\n lvAssert(!this._jobPools.has(job.name), 'cant duplicate add job.');\n this._jobPools.set(job.name, job);\n }\n\n removeJob(jobName: string) {\n this._jobPools.delete(jobName);\n }\n\n prepare(phase: K) {\n const descriptors = this._unconstructedJobs.get(phase) ?? [];\n for (const d of descriptors) {\n this.addJob(this._instantiationService.createInstance(d.ctor, ...d.staticArguments));\n }\n let shouldWait = false;\n this._unconstructedJobs.delete(phase);\n for (const [, job] of this._jobPools) {\n const start = Date.now();\n job.prepare(phase);\n this._costRecorder.record(job.name, phase as number | string, Date.now() - start);\n\n if (job.shouldWait(phase)) {\n shouldWait = true;\n }\n }\n\n return shouldWait;\n }\n\n getCost() {\n return this._costRecorder.toString();\n }\n\n /**\n * 推进到目标阶段,要求目标阶段没有需要等待的任务\n * @param phase 目标阶段\n */\n advanceToPhase(phase: K) {\n for (const [, job] of this._jobPools) {\n if (job.shouldWait(phase)) {\n lvAssertNotHere(`exists job should wait, job name: ${job.name}, phase: ${phase}`);\n }\n }\n\n this._currentPhase = phase;\n }\n\n async wait(phase: K) {\n const jobPromises: Promise<void>[] = [];\n for (const [, job] of this._jobPools) {\n if (!job.shouldWait(phase)) {\n continue;\n }\n jobPromises.push(\n (() => {\n const start = Date.now();\n return job.wait(phase).then(() => {\n this._costRecorder.record(job.name, phase as number | string, Date.now() - start);\n });\n })(),\n );\n }\n\n await Promise.all(jobPromises);\n this._currentPhase = phase;\n }\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { B as Barrier } from '../barrier-316Xonfd.cjs';
2
+ import { I as IInstantiationService, G as GetLeadingNonServiceArgs } from '../instantiation-service.interface-CVFMBUUD.cjs';
3
+
4
+ declare abstract class AbstractJob<T, K extends T = T> {
5
+ protected abstract _name: string;
6
+ protected _store: Map<K, Barrier[]>;
7
+ get name(): string;
8
+ shouldWait(phase: K): boolean;
9
+ wait(phase: K): Promise<void>;
10
+ prepare(phase: K): void;
11
+ protected _setBarrier(phase: K, barrier: Barrier): void;
12
+ protected abstract _executePhase(phase: K): void;
13
+ }
14
+
15
+ declare class JobScheduler<T, K extends T = T> {
16
+ private _currentPhase;
17
+ private readonly _instantiationService;
18
+ private readonly _jobPools;
19
+ private readonly _costRecorder;
20
+ private readonly _unconstructedJobs;
21
+ constructor(_currentPhase: K, _instantiationService: IInstantiationService);
22
+ get currentPhase(): K;
23
+ /**
24
+ * 按需添加一个job,job会在phase时刻才进行实例化
25
+ * @param phase job实例化时机
26
+ * @param ctor job构造函数
27
+ * @param args job构造静态参数
28
+ */
29
+ registerJob<Ctor extends new (...args: any[]) => AbstractJob<T, K>>(phase: K, ctor: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): void;
30
+ /**
31
+ * 添加一个构造好的job
32
+ * @param job 任务
33
+ */
34
+ addJob(job: AbstractJob<T, K>): void;
35
+ removeJob(jobName: string): void;
36
+ prepare(phase: K): boolean;
37
+ getCost(): string;
38
+ /**
39
+ * 推进到目标阶段,要求目标阶段没有需要等待的任务
40
+ * @param phase 目标阶段
41
+ */
42
+ advanceToPhase(phase: K): void;
43
+ wait(phase: K): Promise<void>;
44
+ }
45
+
46
+ export { AbstractJob, JobScheduler };
@@ -0,0 +1,46 @@
1
+ import { B as Barrier } from '../barrier-316Xonfd.js';
2
+ import { I as IInstantiationService, G as GetLeadingNonServiceArgs } from '../instantiation-service.interface-CVFMBUUD.js';
3
+
4
+ declare abstract class AbstractJob<T, K extends T = T> {
5
+ protected abstract _name: string;
6
+ protected _store: Map<K, Barrier[]>;
7
+ get name(): string;
8
+ shouldWait(phase: K): boolean;
9
+ wait(phase: K): Promise<void>;
10
+ prepare(phase: K): void;
11
+ protected _setBarrier(phase: K, barrier: Barrier): void;
12
+ protected abstract _executePhase(phase: K): void;
13
+ }
14
+
15
+ declare class JobScheduler<T, K extends T = T> {
16
+ private _currentPhase;
17
+ private readonly _instantiationService;
18
+ private readonly _jobPools;
19
+ private readonly _costRecorder;
20
+ private readonly _unconstructedJobs;
21
+ constructor(_currentPhase: K, _instantiationService: IInstantiationService);
22
+ get currentPhase(): K;
23
+ /**
24
+ * 按需添加一个job,job会在phase时刻才进行实例化
25
+ * @param phase job实例化时机
26
+ * @param ctor job构造函数
27
+ * @param args job构造静态参数
28
+ */
29
+ registerJob<Ctor extends new (...args: any[]) => AbstractJob<T, K>>(phase: K, ctor: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): void;
30
+ /**
31
+ * 添加一个构造好的job
32
+ * @param job 任务
33
+ */
34
+ addJob(job: AbstractJob<T, K>): void;
35
+ removeJob(jobName: string): void;
36
+ prepare(phase: K): boolean;
37
+ getCost(): string;
38
+ /**
39
+ * 推进到目标阶段,要求目标阶段没有需要等待的任务
40
+ * @param phase 目标阶段
41
+ */
42
+ advanceToPhase(phase: K): void;
43
+ wait(phase: K): Promise<void>;
44
+ }
45
+
46
+ export { AbstractJob, JobScheduler };