@craft-ts/core 0.7.0-beta.13

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 (682) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +58 -0
  3. package/src/index.d.ts +148 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +150 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/after-recomputation.d.ts +327 -0
  8. package/src/lib/after-recomputation.d.ts.map +1 -0
  9. package/src/lib/after-recomputation.js +25 -0
  10. package/src/lib/after-recomputation.js.map +1 -0
  11. package/src/lib/app-checked-di.d.ts +82 -0
  12. package/src/lib/app-checked-di.d.ts.map +1 -0
  13. package/src/lib/app-checked-di.js +1 -0
  14. package/src/lib/app-checked-di.js.map +1 -0
  15. package/src/lib/async-process.d.ts +411 -0
  16. package/src/lib/async-process.d.ts.map +1 -0
  17. package/src/lib/async-process.js +702 -0
  18. package/src/lib/async-process.js.map +1 -0
  19. package/src/lib/branded-component/branded-component.d.ts +129 -0
  20. package/src/lib/branded-component/branded-component.d.ts.map +1 -0
  21. package/src/lib/branded-component/branded-component.js +7 -0
  22. package/src/lib/branded-component/branded-component.js.map +1 -0
  23. package/src/lib/browser-boundaries.d.ts +165 -0
  24. package/src/lib/browser-boundaries.d.ts.map +1 -0
  25. package/src/lib/browser-boundaries.js +550 -0
  26. package/src/lib/browser-boundaries.js.map +1 -0
  27. package/src/lib/client-di-requirement.d.ts +28 -0
  28. package/src/lib/client-di-requirement.d.ts.map +1 -0
  29. package/src/lib/client-di-requirement.js +11 -0
  30. package/src/lib/client-di-requirement.js.map +1 -0
  31. package/src/lib/client-function-middleware.d.ts +130 -0
  32. package/src/lib/client-function-middleware.d.ts.map +1 -0
  33. package/src/lib/client-function-middleware.js +144 -0
  34. package/src/lib/client-function-middleware.js.map +1 -0
  35. package/src/lib/component-monitoring.d.ts +7 -0
  36. package/src/lib/component-monitoring.d.ts.map +1 -0
  37. package/src/lib/component-monitoring.js +28 -0
  38. package/src/lib/component-monitoring.js.map +1 -0
  39. package/src/lib/component-register.d.ts +12 -0
  40. package/src/lib/component-register.d.ts.map +1 -0
  41. package/src/lib/component-register.js +13 -0
  42. package/src/lib/component-register.js.map +1 -0
  43. package/src/lib/computed-source.d.ts +303 -0
  44. package/src/lib/computed-source.d.ts.map +1 -0
  45. package/src/lib/computed-source.js +319 -0
  46. package/src/lib/computed-source.js.map +1 -0
  47. package/src/lib/correlation-id-plugin.d.ts +3 -0
  48. package/src/lib/correlation-id-plugin.d.ts.map +1 -0
  49. package/src/lib/correlation-id-plugin.js +73 -0
  50. package/src/lib/correlation-id-plugin.js.map +1 -0
  51. package/src/lib/correlation-id.d.ts +30 -0
  52. package/src/lib/correlation-id.d.ts.map +1 -0
  53. package/src/lib/correlation-id.js +86 -0
  54. package/src/lib/correlation-id.js.map +1 -0
  55. package/src/lib/craft-a11y.d.ts +22 -0
  56. package/src/lib/craft-a11y.d.ts.map +1 -0
  57. package/src/lib/craft-a11y.js +32 -0
  58. package/src/lib/craft-a11y.js.map +1 -0
  59. package/src/lib/craft-activated-route.d.ts +21 -0
  60. package/src/lib/craft-activated-route.d.ts.map +1 -0
  61. package/src/lib/craft-activated-route.js +20 -0
  62. package/src/lib/craft-activated-route.js.map +1 -0
  63. package/src/lib/craft-app-config.d.ts +91 -0
  64. package/src/lib/craft-app-config.d.ts.map +1 -0
  65. package/src/lib/craft-app-config.js +64 -0
  66. package/src/lib/craft-app-config.js.map +1 -0
  67. package/src/lib/craft-codec.d.ts +16 -0
  68. package/src/lib/craft-codec.d.ts.map +1 -0
  69. package/src/lib/craft-codec.js +1 -0
  70. package/src/lib/craft-codec.js.map +1 -0
  71. package/src/lib/craft-computed.d.ts +31 -0
  72. package/src/lib/craft-computed.d.ts.map +1 -0
  73. package/src/lib/craft-computed.js +81 -0
  74. package/src/lib/craft-computed.js.map +1 -0
  75. package/src/lib/craft-control-flow.d.ts +14 -0
  76. package/src/lib/craft-control-flow.d.ts.map +1 -0
  77. package/src/lib/craft-control-flow.js +18 -0
  78. package/src/lib/craft-control-flow.js.map +1 -0
  79. package/src/lib/craft-effect.d.ts +13 -0
  80. package/src/lib/craft-effect.d.ts.map +1 -0
  81. package/src/lib/craft-effect.js +93 -0
  82. package/src/lib/craft-effect.js.map +1 -0
  83. package/src/lib/craft-exception.d.ts +40 -0
  84. package/src/lib/craft-exception.d.ts.map +1 -0
  85. package/src/lib/craft-exception.js +16 -0
  86. package/src/lib/craft-exception.js.map +1 -0
  87. package/src/lib/craft-gen.d.ts +123 -0
  88. package/src/lib/craft-gen.d.ts.map +1 -0
  89. package/src/lib/craft-gen.js +90 -0
  90. package/src/lib/craft-gen.js.map +1 -0
  91. package/src/lib/craft-generator-runtime.d.ts +110 -0
  92. package/src/lib/craft-generator-runtime.d.ts.map +1 -0
  93. package/src/lib/craft-generator-runtime.js +191 -0
  94. package/src/lib/craft-generator-runtime.js.map +1 -0
  95. package/src/lib/craft-guard-runtime.d.ts +70 -0
  96. package/src/lib/craft-guard-runtime.d.ts.map +1 -0
  97. package/src/lib/craft-guard-runtime.js +195 -0
  98. package/src/lib/craft-guard-runtime.js.map +1 -0
  99. package/src/lib/craft-handshake.d.ts +35 -0
  100. package/src/lib/craft-handshake.d.ts.map +1 -0
  101. package/src/lib/craft-handshake.js +34 -0
  102. package/src/lib/craft-handshake.js.map +1 -0
  103. package/src/lib/craft-http-client.d.ts +236 -0
  104. package/src/lib/craft-http-client.d.ts.map +1 -0
  105. package/src/lib/craft-http-client.js +437 -0
  106. package/src/lib/craft-http-client.js.map +1 -0
  107. package/src/lib/craft-http-trace.d.ts +12 -0
  108. package/src/lib/craft-http-trace.d.ts.map +1 -0
  109. package/src/lib/craft-http-trace.js +28 -0
  110. package/src/lib/craft-http-trace.js.map +1 -0
  111. package/src/lib/craft-lazy.d.ts +42 -0
  112. package/src/lib/craft-lazy.d.ts.map +1 -0
  113. package/src/lib/craft-lazy.js +83 -0
  114. package/src/lib/craft-lazy.js.map +1 -0
  115. package/src/lib/craft-load-retry.d.ts +76 -0
  116. package/src/lib/craft-load-retry.d.ts.map +1 -0
  117. package/src/lib/craft-load-retry.js +160 -0
  118. package/src/lib/craft-load-retry.js.map +1 -0
  119. package/src/lib/craft-machine-history.d.ts +145 -0
  120. package/src/lib/craft-machine-history.d.ts.map +1 -0
  121. package/src/lib/craft-machine-history.js +276 -0
  122. package/src/lib/craft-machine-history.js.map +1 -0
  123. package/src/lib/craft-match.d.ts +49 -0
  124. package/src/lib/craft-match.d.ts.map +1 -0
  125. package/src/lib/craft-match.js +58 -0
  126. package/src/lib/craft-match.js.map +1 -0
  127. package/src/lib/craft-method.d.ts +28 -0
  128. package/src/lib/craft-method.d.ts.map +1 -0
  129. package/src/lib/craft-method.js +45 -0
  130. package/src/lib/craft-method.js.map +1 -0
  131. package/src/lib/craft-node-directive.d.ts +32 -0
  132. package/src/lib/craft-node-directive.d.ts.map +1 -0
  133. package/src/lib/craft-node-directive.js +22 -0
  134. package/src/lib/craft-node-directive.js.map +1 -0
  135. package/src/lib/craft-pending.d.ts +115 -0
  136. package/src/lib/craft-pending.d.ts.map +1 -0
  137. package/src/lib/craft-pending.js +187 -0
  138. package/src/lib/craft-pending.js.map +1 -0
  139. package/src/lib/craft-pipe.d.ts +63 -0
  140. package/src/lib/craft-pipe.d.ts.map +1 -0
  141. package/src/lib/craft-pipe.js +57 -0
  142. package/src/lib/craft-pipe.js.map +1 -0
  143. package/src/lib/craft-platform.d.ts +50 -0
  144. package/src/lib/craft-platform.d.ts.map +1 -0
  145. package/src/lib/craft-platform.js +175 -0
  146. package/src/lib/craft-platform.js.map +1 -0
  147. package/src/lib/craft-primitive-gen.d.ts +137 -0
  148. package/src/lib/craft-primitive-gen.d.ts.map +1 -0
  149. package/src/lib/craft-primitive-gen.js +76 -0
  150. package/src/lib/craft-primitive-gen.js.map +1 -0
  151. package/src/lib/craft-primitive-registry.d.ts +113 -0
  152. package/src/lib/craft-primitive-registry.d.ts.map +1 -0
  153. package/src/lib/craft-primitive-registry.js +159 -0
  154. package/src/lib/craft-primitive-registry.js.map +1 -0
  155. package/src/lib/craft-program-operators.d.ts +101 -0
  156. package/src/lib/craft-program-operators.d.ts.map +1 -0
  157. package/src/lib/craft-program-operators.js +116 -0
  158. package/src/lib/craft-program-operators.js.map +1 -0
  159. package/src/lib/craft-program-runtime.d.ts +80 -0
  160. package/src/lib/craft-program-runtime.d.ts.map +1 -0
  161. package/src/lib/craft-program-runtime.js +166 -0
  162. package/src/lib/craft-program-runtime.js.map +1 -0
  163. package/src/lib/craft-register-for-runtime.d.ts +39 -0
  164. package/src/lib/craft-register-for-runtime.d.ts.map +1 -0
  165. package/src/lib/craft-register-for-runtime.js +96 -0
  166. package/src/lib/craft-register-for-runtime.js.map +1 -0
  167. package/src/lib/craft-register-for.d.ts +57 -0
  168. package/src/lib/craft-register-for.d.ts.map +1 -0
  169. package/src/lib/craft-register-for.js +200 -0
  170. package/src/lib/craft-register-for.js.map +1 -0
  171. package/src/lib/craft-render-identity.d.ts +19 -0
  172. package/src/lib/craft-render-identity.d.ts.map +1 -0
  173. package/src/lib/craft-render-identity.js +23 -0
  174. package/src/lib/craft-render-identity.js.map +1 -0
  175. package/src/lib/craft-replay.d.ts +5 -0
  176. package/src/lib/craft-replay.d.ts.map +1 -0
  177. package/src/lib/craft-replay.js +28 -0
  178. package/src/lib/craft-replay.js.map +1 -0
  179. package/src/lib/craft-resolve.d.ts +39 -0
  180. package/src/lib/craft-resolve.d.ts.map +1 -0
  181. package/src/lib/craft-resolve.js +9 -0
  182. package/src/lib/craft-resolve.js.map +1 -0
  183. package/src/lib/craft-resource.d.ts +11 -0
  184. package/src/lib/craft-resource.d.ts.map +1 -0
  185. package/src/lib/craft-resource.js +264 -0
  186. package/src/lib/craft-resource.js.map +1 -0
  187. package/src/lib/craft-route-exceptions.d.ts +785 -0
  188. package/src/lib/craft-route-exceptions.d.ts.map +1 -0
  189. package/src/lib/craft-route-exceptions.js +86 -0
  190. package/src/lib/craft-route-exceptions.js.map +1 -0
  191. package/src/lib/craft-route-load-error.d.ts +1145 -0
  192. package/src/lib/craft-route-load-error.d.ts.map +1 -0
  193. package/src/lib/craft-route-load-error.js +173 -0
  194. package/src/lib/craft-route-load-error.js.map +1 -0
  195. package/src/lib/craft-route-meta.d.ts +52 -0
  196. package/src/lib/craft-route-meta.d.ts.map +1 -0
  197. package/src/lib/craft-route-meta.js +16 -0
  198. package/src/lib/craft-route-meta.js.map +1 -0
  199. package/src/lib/craft-route-target.d.ts +27 -0
  200. package/src/lib/craft-route-target.d.ts.map +1 -0
  201. package/src/lib/craft-route-target.js +22 -0
  202. package/src/lib/craft-route-target.js.map +1 -0
  203. package/src/lib/craft-router-outlet.d.ts +105 -0
  204. package/src/lib/craft-router-outlet.d.ts.map +1 -0
  205. package/src/lib/craft-router-outlet.js +735 -0
  206. package/src/lib/craft-router-outlet.js.map +1 -0
  207. package/src/lib/craft-router-tokens.d.ts +49 -0
  208. package/src/lib/craft-router-tokens.d.ts.map +1 -0
  209. package/src/lib/craft-router-tokens.js +15 -0
  210. package/src/lib/craft-router-tokens.js.map +1 -0
  211. package/src/lib/craft-router-trace.d.ts +18 -0
  212. package/src/lib/craft-router-trace.d.ts.map +1 -0
  213. package/src/lib/craft-router-trace.js +54 -0
  214. package/src/lib/craft-router-trace.js.map +1 -0
  215. package/src/lib/craft-router.d.ts +248 -0
  216. package/src/lib/craft-router.d.ts.map +1 -0
  217. package/src/lib/craft-router.js +559 -0
  218. package/src/lib/craft-router.js.map +1 -0
  219. package/src/lib/craft-routes.d.ts +755 -0
  220. package/src/lib/craft-routes.d.ts.map +1 -0
  221. package/src/lib/craft-routes.js +510 -0
  222. package/src/lib/craft-routes.js.map +1 -0
  223. package/src/lib/craft-service.d.ts +1034 -0
  224. package/src/lib/craft-service.d.ts.map +1 -0
  225. package/src/lib/craft-service.js +1072 -0
  226. package/src/lib/craft-service.js.map +1 -0
  227. package/src/lib/craft-service.shared.d.ts +35 -0
  228. package/src/lib/craft-service.shared.d.ts.map +1 -0
  229. package/src/lib/craft-service.shared.js +4 -0
  230. package/src/lib/craft-service.shared.js.map +1 -0
  231. package/src/lib/craft-settled.d.ts +171 -0
  232. package/src/lib/craft-settled.d.ts.map +1 -0
  233. package/src/lib/craft-settled.js +130 -0
  234. package/src/lib/craft-settled.js.map +1 -0
  235. package/src/lib/craft-ssr.d.ts +29 -0
  236. package/src/lib/craft-ssr.d.ts.map +1 -0
  237. package/src/lib/craft-ssr.js +27 -0
  238. package/src/lib/craft-ssr.js.map +1 -0
  239. package/src/lib/craft-state-machine-runtime.d.ts +88 -0
  240. package/src/lib/craft-state-machine-runtime.d.ts.map +1 -0
  241. package/src/lib/craft-state-machine-runtime.js +167 -0
  242. package/src/lib/craft-state-machine-runtime.js.map +1 -0
  243. package/src/lib/craft-state-machine.d.ts +233 -0
  244. package/src/lib/craft-state-machine.d.ts.map +1 -0
  245. package/src/lib/craft-state-machine.js +254 -0
  246. package/src/lib/craft-state-machine.js.map +1 -0
  247. package/src/lib/craft-target-runtime.d.ts +20 -0
  248. package/src/lib/craft-target-runtime.d.ts.map +1 -0
  249. package/src/lib/craft-target-runtime.js +42 -0
  250. package/src/lib/craft-target-runtime.js.map +1 -0
  251. package/src/lib/craft-transfer-snapshot.d.ts +19 -0
  252. package/src/lib/craft-transfer-snapshot.d.ts.map +1 -0
  253. package/src/lib/craft-transfer-snapshot.js +90 -0
  254. package/src/lib/craft-transfer-snapshot.js.map +1 -0
  255. package/src/lib/craft-unique.d.ts +7 -0
  256. package/src/lib/craft-unique.d.ts.map +1 -0
  257. package/src/lib/craft-unique.js +16 -0
  258. package/src/lib/craft-unique.js.map +1 -0
  259. package/src/lib/craft-until-settled.d.ts +99 -0
  260. package/src/lib/craft-until-settled.d.ts.map +1 -0
  261. package/src/lib/craft-until-settled.js +81 -0
  262. package/src/lib/craft-until-settled.js.map +1 -0
  263. package/src/lib/craft-use.d.ts +26 -0
  264. package/src/lib/craft-use.d.ts.map +1 -0
  265. package/src/lib/craft-use.js +37 -0
  266. package/src/lib/craft-use.js.map +1 -0
  267. package/src/lib/craft-view-transition.d.ts +102 -0
  268. package/src/lib/craft-view-transition.d.ts.map +1 -0
  269. package/src/lib/craft-view-transition.js +130 -0
  270. package/src/lib/craft-view-transition.js.map +1 -0
  271. package/src/lib/dom-event-hook.d.ts +30 -0
  272. package/src/lib/dom-event-hook.d.ts.map +1 -0
  273. package/src/lib/dom-event-hook.js +16 -0
  274. package/src/lib/dom-event-hook.js.map +1 -0
  275. package/src/lib/fn-wrapper.d.ts +13 -0
  276. package/src/lib/fn-wrapper.d.ts.map +1 -0
  277. package/src/lib/fn-wrapper.js +66 -0
  278. package/src/lib/fn-wrapper.js.map +1 -0
  279. package/src/lib/form/craft-field.d.ts +155 -0
  280. package/src/lib/form/craft-field.d.ts.map +1 -0
  281. package/src/lib/form/craft-field.directive.d.ts +70 -0
  282. package/src/lib/form/craft-field.directive.d.ts.map +1 -0
  283. package/src/lib/form/craft-field.directive.js +549 -0
  284. package/src/lib/form/craft-field.directive.js.map +1 -0
  285. package/src/lib/form/craft-field.js +586 -0
  286. package/src/lib/form/craft-field.js.map +1 -0
  287. package/src/lib/form/field-exception.d.ts +62 -0
  288. package/src/lib/form/field-exception.d.ts.map +1 -0
  289. package/src/lib/form/field-exception.js +37 -0
  290. package/src/lib/form/field-exception.js.map +1 -0
  291. package/src/lib/form/field-lens.d.ts +29 -0
  292. package/src/lib/form/field-lens.d.ts.map +1 -0
  293. package/src/lib/form/field-lens.js +32 -0
  294. package/src/lib/form/field-lens.js.map +1 -0
  295. package/src/lib/form/insert-form-attributes.d.ts +69 -0
  296. package/src/lib/form/insert-form-attributes.d.ts.map +1 -0
  297. package/src/lib/form/insert-form-attributes.js +163 -0
  298. package/src/lib/form/insert-form-attributes.js.map +1 -0
  299. package/src/lib/form/insert-form-internals.d.ts +110 -0
  300. package/src/lib/form/insert-form-internals.d.ts.map +1 -0
  301. package/src/lib/form/insert-form-internals.js +276 -0
  302. package/src/lib/form/insert-form-internals.js.map +1 -0
  303. package/src/lib/form/insert-form-schema.d.ts +10 -0
  304. package/src/lib/form/insert-form-schema.d.ts.map +1 -0
  305. package/src/lib/form/insert-form-schema.js +62 -0
  306. package/src/lib/form/insert-form-schema.js.map +1 -0
  307. package/src/lib/form/insert-form-submit.d.ts +79 -0
  308. package/src/lib/form/insert-form-submit.d.ts.map +1 -0
  309. package/src/lib/form/insert-form-submit.js +126 -0
  310. package/src/lib/form/insert-form-submit.js.map +1 -0
  311. package/src/lib/form/insert-form.d.ts +39 -0
  312. package/src/lib/form/insert-form.d.ts.map +1 -0
  313. package/src/lib/form/insert-form.js +255 -0
  314. package/src/lib/form/insert-form.js.map +1 -0
  315. package/src/lib/form/insert-select-form-tree.d.ts +33 -0
  316. package/src/lib/form/insert-select-form-tree.d.ts.map +1 -0
  317. package/src/lib/form/insert-select-form-tree.js +144 -0
  318. package/src/lib/form/insert-select-form-tree.js.map +1 -0
  319. package/src/lib/form/insert-sub-form-field.d.ts +17 -0
  320. package/src/lib/form/insert-sub-form-field.d.ts.map +1 -0
  321. package/src/lib/form/insert-sub-form-field.js +41 -0
  322. package/src/lib/form/insert-sub-form-field.js.map +1 -0
  323. package/src/lib/form/make-form-tree-insert.d.ts +22 -0
  324. package/src/lib/form/make-form-tree-insert.d.ts.map +1 -0
  325. package/src/lib/form/make-form-tree-insert.js +43 -0
  326. package/src/lib/form/make-form-tree-insert.js.map +1 -0
  327. package/src/lib/form/target-form-field.d.ts +11 -0
  328. package/src/lib/form/target-form-field.d.ts.map +1 -0
  329. package/src/lib/form/target-form-field.js +1 -0
  330. package/src/lib/form/target-form-field.js.map +1 -0
  331. package/src/lib/form/validator.d.ts +174 -0
  332. package/src/lib/form/validator.d.ts.map +1 -0
  333. package/src/lib/form/validator.js +465 -0
  334. package/src/lib/form/validator.js.map +1 -0
  335. package/src/lib/from-event-to-source$.d.ts +210 -0
  336. package/src/lib/from-event-to-source$.d.ts.map +1 -0
  337. package/src/lib/from-event-to-source$.js +29 -0
  338. package/src/lib/from-event-to-source$.js.map +1 -0
  339. package/src/lib/global-persister-handler.service.d.ts +10 -0
  340. package/src/lib/global-persister-handler.service.d.ts.map +1 -0
  341. package/src/lib/global-persister-handler.service.js +40 -0
  342. package/src/lib/global-persister-handler.service.js.map +1 -0
  343. package/src/lib/host/craft-compat.d.ts +242 -0
  344. package/src/lib/host/craft-compat.d.ts.map +1 -0
  345. package/src/lib/host/craft-compat.js +444 -0
  346. package/src/lib/host/craft-compat.js.map +1 -0
  347. package/src/lib/host/craft-dom.d.ts +16 -0
  348. package/src/lib/host/craft-dom.d.ts.map +1 -0
  349. package/src/lib/host/craft-dom.js +24 -0
  350. package/src/lib/host/craft-dom.js.map +1 -0
  351. package/src/lib/host/craft-http.d.ts +22 -0
  352. package/src/lib/host/craft-http.d.ts.map +1 -0
  353. package/src/lib/host/craft-http.js +80 -0
  354. package/src/lib/host/craft-http.js.map +1 -0
  355. package/src/lib/host/craft-injector-host.d.ts +3 -0
  356. package/src/lib/host/craft-injector-host.d.ts.map +1 -0
  357. package/src/lib/host/craft-injector-host.js +2 -0
  358. package/src/lib/host/craft-injector-host.js.map +1 -0
  359. package/src/lib/host/craft-injector.d.ts +40 -0
  360. package/src/lib/host/craft-injector.d.ts.map +1 -0
  361. package/src/lib/host/craft-injector.js +318 -0
  362. package/src/lib/host/craft-injector.js.map +1 -0
  363. package/src/lib/host/craft-linked-signal.d.ts +17 -0
  364. package/src/lib/host/craft-linked-signal.d.ts.map +1 -0
  365. package/src/lib/host/craft-linked-signal.js +86 -0
  366. package/src/lib/host/craft-linked-signal.js.map +1 -0
  367. package/src/lib/host/craft-router-runtime.d.ts +61 -0
  368. package/src/lib/host/craft-router-runtime.d.ts.map +1 -0
  369. package/src/lib/host/craft-router-runtime.js +456 -0
  370. package/src/lib/host/craft-router-runtime.js.map +1 -0
  371. package/src/lib/host/craft-router-types.d.ts +84 -0
  372. package/src/lib/host/craft-router-types.d.ts.map +1 -0
  373. package/src/lib/host/craft-router-types.js +35 -0
  374. package/src/lib/host/craft-router-types.js.map +1 -0
  375. package/src/lib/host/craft-signal.d.ts +45 -0
  376. package/src/lib/host/craft-signal.d.ts.map +1 -0
  377. package/src/lib/host/craft-signal.js +161 -0
  378. package/src/lib/host/craft-signal.js.map +1 -0
  379. package/src/lib/host/craft-test-bed.d.ts +63 -0
  380. package/src/lib/host/craft-test-bed.d.ts.map +1 -0
  381. package/src/lib/host/craft-test-bed.js +114 -0
  382. package/src/lib/host/craft-test-bed.js.map +1 -0
  383. package/src/lib/host-tag.d.ts +2 -0
  384. package/src/lib/host-tag.d.ts.map +1 -0
  385. package/src/lib/host-tag.js +2 -0
  386. package/src/lib/host-tag.js.map +1 -0
  387. package/src/lib/insert-entities.d.ts +131 -0
  388. package/src/lib/insert-entities.d.ts.map +1 -0
  389. package/src/lib/insert-entities.js +159 -0
  390. package/src/lib/insert-entities.js.map +1 -0
  391. package/src/lib/insert-noop-typing-anchor.d.ts +15 -0
  392. package/src/lib/insert-noop-typing-anchor.d.ts.map +1 -0
  393. package/src/lib/insert-noop-typing-anchor.js +16 -0
  394. package/src/lib/insert-noop-typing-anchor.js.map +1 -0
  395. package/src/lib/insert-pagination-placeholder-data.d.ts +122 -0
  396. package/src/lib/insert-pagination-placeholder-data.d.ts.map +1 -0
  397. package/src/lib/insert-pagination-placeholder-data.js +244 -0
  398. package/src/lib/insert-pagination-placeholder-data.js.map +1 -0
  399. package/src/lib/insert-react-on-mutation.d.ts +261 -0
  400. package/src/lib/insert-react-on-mutation.d.ts.map +1 -0
  401. package/src/lib/insert-react-on-mutation.js +227 -0
  402. package/src/lib/insert-react-on-mutation.js.map +1 -0
  403. package/src/lib/insert-select-resource.d.ts +31 -0
  404. package/src/lib/insert-select-resource.d.ts.map +1 -0
  405. package/src/lib/insert-select-resource.js +27 -0
  406. package/src/lib/insert-select-resource.js.map +1 -0
  407. package/src/lib/insert-select.d.ts +126 -0
  408. package/src/lib/insert-select.d.ts.map +1 -0
  409. package/src/lib/insert-select.js +535 -0
  410. package/src/lib/insert-select.js.map +1 -0
  411. package/src/lib/insert-storage-persister.d.ts +27 -0
  412. package/src/lib/insert-storage-persister.d.ts.map +1 -0
  413. package/src/lib/insert-storage-persister.js +65 -0
  414. package/src/lib/insert-storage-persister.js.map +1 -0
  415. package/src/lib/insert-typed-pipes.d.ts +64 -0
  416. package/src/lib/insert-typed-pipes.d.ts.map +1 -0
  417. package/src/lib/insert-typed-pipes.js +32 -0
  418. package/src/lib/insert-typed-pipes.js.map +1 -0
  419. package/src/lib/linked-source.d.ts +8 -0
  420. package/src/lib/linked-source.d.ts.map +1 -0
  421. package/src/lib/linked-source.js +24 -0
  422. package/src/lib/linked-source.js.map +1 -0
  423. package/src/lib/local-storage-persister.d.ts +4 -0
  424. package/src/lib/local-storage-persister.d.ts.map +1 -0
  425. package/src/lib/local-storage-persister.js +342 -0
  426. package/src/lib/local-storage-persister.js.map +1 -0
  427. package/src/lib/middleware-schema-shared.d.ts +67 -0
  428. package/src/lib/middleware-schema-shared.d.ts.map +1 -0
  429. package/src/lib/middleware-schema-shared.js +34 -0
  430. package/src/lib/middleware-schema-shared.js.map +1 -0
  431. package/src/lib/mock-http-request-for-route.d.ts +173 -0
  432. package/src/lib/mock-http-request-for-route.d.ts.map +1 -0
  433. package/src/lib/mock-http-request-for-route.js +127 -0
  434. package/src/lib/mock-http-request-for-route.js.map +1 -0
  435. package/src/lib/mutation.d.ts +332 -0
  436. package/src/lib/mutation.d.ts.map +1 -0
  437. package/src/lib/mutation.js +923 -0
  438. package/src/lib/mutation.js.map +1 -0
  439. package/src/lib/on$.d.ts +26 -0
  440. package/src/lib/on$.d.ts.map +1 -0
  441. package/src/lib/on$.js +19 -0
  442. package/src/lib/on$.js.map +1 -0
  443. package/src/lib/portable-server-function.d.ts +68 -0
  444. package/src/lib/portable-server-function.d.ts.map +1 -0
  445. package/src/lib/portable-server-function.js +97 -0
  446. package/src/lib/portable-server-function.js.map +1 -0
  447. package/src/lib/preserved-resource.d.ts +4 -0
  448. package/src/lib/preserved-resource.d.ts.map +1 -0
  449. package/src/lib/preserved-resource.js +60 -0
  450. package/src/lib/preserved-resource.js.map +1 -0
  451. package/src/lib/primitive-method-runtime-context.d.ts +28 -0
  452. package/src/lib/primitive-method-runtime-context.d.ts.map +1 -0
  453. package/src/lib/primitive-method-runtime-context.js +38 -0
  454. package/src/lib/primitive-method-runtime-context.js.map +1 -0
  455. package/src/lib/primitive-resource-runtime-context.d.ts +46 -0
  456. package/src/lib/primitive-resource-runtime-context.d.ts.map +1 -0
  457. package/src/lib/primitive-resource-runtime-context.js +102 -0
  458. package/src/lib/primitive-resource-runtime-context.js.map +1 -0
  459. package/src/lib/query-params.d.ts +216 -0
  460. package/src/lib/query-params.d.ts.map +1 -0
  461. package/src/lib/query-params.js +324 -0
  462. package/src/lib/query-params.js.map +1 -0
  463. package/src/lib/query.core.d.ts +214 -0
  464. package/src/lib/query.core.d.ts.map +1 -0
  465. package/src/lib/query.core.js +210 -0
  466. package/src/lib/query.core.js.map +1 -0
  467. package/src/lib/query.d.ts +324 -0
  468. package/src/lib/query.d.ts.map +1 -0
  469. package/src/lib/query.js +971 -0
  470. package/src/lib/query.js.map +1 -0
  471. package/src/lib/reactive-read.d.ts +162 -0
  472. package/src/lib/reactive-read.d.ts.map +1 -0
  473. package/src/lib/reactive-read.js +389 -0
  474. package/src/lib/reactive-read.js.map +1 -0
  475. package/src/lib/resource-by-id.d.ts +71 -0
  476. package/src/lib/resource-by-id.d.ts.map +1 -0
  477. package/src/lib/resource-by-id.js +294 -0
  478. package/src/lib/resource-by-id.js.map +1 -0
  479. package/src/lib/resource-exception.d.ts +30 -0
  480. package/src/lib/resource-exception.d.ts.map +1 -0
  481. package/src/lib/resource-exception.js +86 -0
  482. package/src/lib/resource-exception.js.map +1 -0
  483. package/src/lib/route-checked-di.d.ts +229 -0
  484. package/src/lib/route-checked-di.d.ts.map +1 -0
  485. package/src/lib/route-checked-di.js +1 -0
  486. package/src/lib/route-checked-di.js.map +1 -0
  487. package/src/lib/schema-validation.d.ts +89 -0
  488. package/src/lib/schema-validation.d.ts.map +1 -0
  489. package/src/lib/schema-validation.js +110 -0
  490. package/src/lib/schema-validation.js.map +1 -0
  491. package/src/lib/send-context-to-ai.d.ts +20 -0
  492. package/src/lib/send-context-to-ai.d.ts.map +1 -0
  493. package/src/lib/send-context-to-ai.js +18 -0
  494. package/src/lib/send-context-to-ai.js.map +1 -0
  495. package/src/lib/send-context-to-ai.tokens.d.ts +12 -0
  496. package/src/lib/send-context-to-ai.tokens.d.ts.map +1 -0
  497. package/src/lib/send-context-to-ai.tokens.js +1 -0
  498. package/src/lib/send-context-to-ai.tokens.js.map +1 -0
  499. package/src/lib/server-function-client.d.ts +102 -0
  500. package/src/lib/server-function-client.d.ts.map +1 -0
  501. package/src/lib/server-function-client.js +106 -0
  502. package/src/lib/server-function-client.js.map +1 -0
  503. package/src/lib/server-function-contract.d.ts +42 -0
  504. package/src/lib/server-function-contract.d.ts.map +1 -0
  505. package/src/lib/server-function-contract.js +23 -0
  506. package/src/lib/server-function-contract.js.map +1 -0
  507. package/src/lib/server-function-middleware.d.ts +222 -0
  508. package/src/lib/server-function-middleware.d.ts.map +1 -0
  509. package/src/lib/server-function-middleware.js +189 -0
  510. package/src/lib/server-function-middleware.js.map +1 -0
  511. package/src/lib/server-function.d.ts +114 -0
  512. package/src/lib/server-function.d.ts.map +1 -0
  513. package/src/lib/server-function.js +80 -0
  514. package/src/lib/server-function.js.map +1 -0
  515. package/src/lib/server-layer.d.ts +185 -0
  516. package/src/lib/server-layer.d.ts.map +1 -0
  517. package/src/lib/server-layer.js +121 -0
  518. package/src/lib/server-layer.js.map +1 -0
  519. package/src/lib/server.d.ts +83 -0
  520. package/src/lib/server.d.ts.map +1 -0
  521. package/src/lib/server.js +266 -0
  522. package/src/lib/server.js.map +1 -0
  523. package/src/lib/setup-craft-service-test.d.ts +90 -0
  524. package/src/lib/setup-craft-service-test.d.ts.map +1 -0
  525. package/src/lib/setup-craft-service-test.js +193 -0
  526. package/src/lib/setup-craft-service-test.js.map +1 -0
  527. package/src/lib/setup-craft-service-testing-by-register.d.ts +245 -0
  528. package/src/lib/setup-craft-service-testing-by-register.d.ts.map +1 -0
  529. package/src/lib/setup-craft-service-testing-by-register.js +316 -0
  530. package/src/lib/setup-craft-service-testing-by-register.js.map +1 -0
  531. package/src/lib/signal-proxy.d.ts +21 -0
  532. package/src/lib/signal-proxy.d.ts.map +1 -0
  533. package/src/lib/signal-proxy.js +79 -0
  534. package/src/lib/signal-proxy.js.map +1 -0
  535. package/src/lib/signal-source.d.ts +392 -0
  536. package/src/lib/signal-source.d.ts.map +1 -0
  537. package/src/lib/signal-source.js +433 -0
  538. package/src/lib/signal-source.js.map +1 -0
  539. package/src/lib/source$.d.ts +121 -0
  540. package/src/lib/source$.d.ts.map +1 -0
  541. package/src/lib/source$.js +171 -0
  542. package/src/lib/source$.js.map +1 -0
  543. package/src/lib/source-from-event.d.ts +350 -0
  544. package/src/lib/source-from-event.d.ts.map +1 -0
  545. package/src/lib/source-from-event.js +26 -0
  546. package/src/lib/source-from-event.js.map +1 -0
  547. package/src/lib/stacked-source.d.ts +6 -0
  548. package/src/lib/stacked-source.d.ts.map +1 -0
  549. package/src/lib/stacked-source.js +29 -0
  550. package/src/lib/stacked-source.js.map +1 -0
  551. package/src/lib/standard-schema.d.ts +43 -0
  552. package/src/lib/standard-schema.d.ts.map +1 -0
  553. package/src/lib/standard-schema.js +1 -0
  554. package/src/lib/standard-schema.js.map +1 -0
  555. package/src/lib/state-method-runtime-context.d.ts +13 -0
  556. package/src/lib/state-method-runtime-context.d.ts.map +1 -0
  557. package/src/lib/state-method-runtime-context.js +11 -0
  558. package/src/lib/state-method-runtime-context.js.map +1 -0
  559. package/src/lib/state.d.ts +158 -0
  560. package/src/lib/state.d.ts.map +1 -0
  561. package/src/lib/state.js +388 -0
  562. package/src/lib/state.js.map +1 -0
  563. package/src/lib/storage-persister.service.d.ts +25 -0
  564. package/src/lib/storage-persister.service.d.ts.map +1 -0
  565. package/src/lib/storage-persister.service.js +27 -0
  566. package/src/lib/storage-persister.service.js.map +1 -0
  567. package/src/lib/take-app-snapshot.d.ts +31 -0
  568. package/src/lib/take-app-snapshot.d.ts.map +1 -0
  569. package/src/lib/take-app-snapshot.js +93 -0
  570. package/src/lib/take-app-snapshot.js.map +1 -0
  571. package/src/lib/template-trace.d.ts +37 -0
  572. package/src/lib/template-trace.d.ts.map +1 -0
  573. package/src/lib/template-trace.js +37 -0
  574. package/src/lib/template-trace.js.map +1 -0
  575. package/src/lib/temporal-runtime.d.ts +146 -0
  576. package/src/lib/temporal-runtime.d.ts.map +1 -0
  577. package/src/lib/temporal-runtime.js +375 -0
  578. package/src/lib/temporal-runtime.js.map +1 -0
  579. package/src/lib/to-source.d.ts +335 -0
  580. package/src/lib/to-source.d.ts.map +1 -0
  581. package/src/lib/to-source.js +359 -0
  582. package/src/lib/to-source.js.map +1 -0
  583. package/src/lib/util/craft-resource-ref.d.ts +29 -0
  584. package/src/lib/util/craft-resource-ref.d.ts.map +1 -0
  585. package/src/lib/util/craft-resource-ref.js +1 -0
  586. package/src/lib/util/craft-resource-ref.js.map +1 -0
  587. package/src/lib/util/craft-resource-status.d.ts +17 -0
  588. package/src/lib/util/craft-resource-status.d.ts.map +1 -0
  589. package/src/lib/util/craft-resource-status.js +14 -0
  590. package/src/lib/util/craft-resource-status.js.map +1 -0
  591. package/src/lib/util/entities-util.d.ts +340 -0
  592. package/src/lib/util/entities-util.d.ts.map +1 -0
  593. package/src/lib/util/entities-util.js +136 -0
  594. package/src/lib/util/entities-util.js.map +1 -0
  595. package/src/lib/util/explicit-effect.d.ts +42 -0
  596. package/src/lib/util/explicit-effect.d.ts.map +1 -0
  597. package/src/lib/util/explicit-effect.js +37 -0
  598. package/src/lib/util/explicit-effect.js.map +1 -0
  599. package/src/lib/util/extract-signal-props-and-methods.d.ts +20 -0
  600. package/src/lib/util/extract-signal-props-and-methods.d.ts.map +1 -0
  601. package/src/lib/util/extract-signal-props-and-methods.js +1 -0
  602. package/src/lib/util/extract-signal-props-and-methods.js.map +1 -0
  603. package/src/lib/util/method-trigger-nonce.d.ts +45 -0
  604. package/src/lib/util/method-trigger-nonce.d.ts.map +1 -0
  605. package/src/lib/util/method-trigger-nonce.js +58 -0
  606. package/src/lib/util/method-trigger-nonce.js.map +1 -0
  607. package/src/lib/util/persister.type.d.ts +37 -0
  608. package/src/lib/util/persister.type.d.ts.map +1 -0
  609. package/src/lib/util/persister.type.js +1 -0
  610. package/src/lib/util/persister.type.js.map +1 -0
  611. package/src/lib/util/persister.util.d.ts +8 -0
  612. package/src/lib/util/persister.util.d.ts.map +1 -0
  613. package/src/lib/util/persister.util.js +71 -0
  614. package/src/lib/util/persister.util.js.map +1 -0
  615. package/src/lib/util/react-on-mutation-effect.d.ts +16 -0
  616. package/src/lib/util/react-on-mutation-effect.d.ts.map +1 -0
  617. package/src/lib/util/react-on-mutation-effect.js +148 -0
  618. package/src/lib/util/react-on-mutation-effect.js.map +1 -0
  619. package/src/lib/util/resource-by-id-changes-tracker.util.d.ts +27 -0
  620. package/src/lib/util/resource-by-id-changes-tracker.util.d.ts.map +1 -0
  621. package/src/lib/util/resource-by-id-changes-tracker.util.js +97 -0
  622. package/src/lib/util/resource-by-id-changes-tracker.util.js.map +1 -0
  623. package/src/lib/util/source.type.d.ts +6 -0
  624. package/src/lib/util/source.type.d.ts.map +1 -0
  625. package/src/lib/util/source.type.js +1 -0
  626. package/src/lib/util/source.type.js.map +1 -0
  627. package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts +4 -0
  628. package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts.map +1 -0
  629. package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js +1 -0
  630. package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js.map +1 -0
  631. package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts +27 -0
  632. package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts.map +1 -0
  633. package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js +1 -0
  634. package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js.map +1 -0
  635. package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts +24 -0
  636. package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts.map +1 -0
  637. package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js +1 -0
  638. package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js.map +1 -0
  639. package/src/lib/util/types/brand.d.ts +7 -0
  640. package/src/lib/util/types/brand.d.ts.map +1 -0
  641. package/src/lib/util/types/brand.js +9 -0
  642. package/src/lib/util/types/brand.js.map +1 -0
  643. package/src/lib/util/types/object-deep-path-mapper.type.d.ts +13 -0
  644. package/src/lib/util/types/object-deep-path-mapper.type.d.ts.map +1 -0
  645. package/src/lib/util/types/object-deep-path-mapper.type.js +1 -0
  646. package/src/lib/util/types/object-deep-path-mapper.type.js.map +1 -0
  647. package/src/lib/util/types/resource-by-id-config.type.d.ts +115 -0
  648. package/src/lib/util/types/resource-by-id-config.type.d.ts.map +1 -0
  649. package/src/lib/util/types/resource-by-id-config.type.js +1 -0
  650. package/src/lib/util/types/resource-by-id-config.type.js.map +1 -0
  651. package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts +52 -0
  652. package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts.map +1 -0
  653. package/src/lib/util/types/resource-with-params-or-params-fn.type.js +1 -0
  654. package/src/lib/util/types/resource-with-params-or-params-fn.type.js.map +1 -0
  655. package/src/lib/util/types/shared.type.d.ts +66 -0
  656. package/src/lib/util/types/shared.type.d.ts.map +1 -0
  657. package/src/lib/util/types/shared.type.js +1 -0
  658. package/src/lib/util/types/shared.type.js.map +1 -0
  659. package/src/lib/util/types/util.d.ts +16 -0
  660. package/src/lib/util/types/util.d.ts.map +1 -0
  661. package/src/lib/util/types/util.js +60 -0
  662. package/src/lib/util/types/util.js.map +1 -0
  663. package/src/lib/util/types/util.type.d.ts +67 -0
  664. package/src/lib/util/types/util.type.d.ts.map +1 -0
  665. package/src/lib/util/types/util.type.js +5 -0
  666. package/src/lib/util/types/util.type.js.map +1 -0
  667. package/src/lib/util/update-state.util.d.ts +10 -0
  668. package/src/lib/util/update-state.util.d.ts.map +1 -0
  669. package/src/lib/util/update-state.util.js +31 -0
  670. package/src/lib/util/update-state.util.js.map +1 -0
  671. package/src/lib/util/util.d.ts +19 -0
  672. package/src/lib/util/util.d.ts.map +1 -0
  673. package/src/lib/util/util.js +50 -0
  674. package/src/lib/util/util.js.map +1 -0
  675. package/src/lib/util/util.type.d.ts +107 -0
  676. package/src/lib/util/util.type.d.ts.map +1 -0
  677. package/src/lib/util/util.type.js +9 -0
  678. package/src/lib/util/util.type.js.map +1 -0
  679. package/src/lib/yieldable.d.ts +94 -0
  680. package/src/lib/yieldable.d.ts.map +1 -0
  681. package/src/lib/yieldable.js +109 -0
  682. package/src/lib/yieldable.js.map +1 -0
@@ -0,0 +1,166 @@
1
+ import { computed, DestroyRef, runInInjectionContext, } from './host/craft-compat';
2
+ import { toObservable } from './host/craft-compat';
3
+ import { filter, take } from 'rxjs';
4
+ import { CraftGenShortCircuit, isCraftGenShortCircuit } from './craft-gen';
5
+ import { GUARD_AWAIT_REQUEST_MARKER, isGenerator, isGuardAwaitRequest, isServiceAppStartRequest, resolveCraftGeneratorYield, } from './craft-generator-runtime';
6
+ import { injectFnWrapper } from './fn-wrapper';
7
+ import { ɵcraftInjectorFromHost } from './host/craft-injector-host';
8
+ import { CRAFT_TEMPORAL_RUNTIME, isTemporalAwaitRequest, RealCraftTemporalRuntime, TemporalCancelledError, } from './temporal-runtime';
9
+ const FOREIGN_YIELD_OUTCOME = Symbol('foreign-yield-outcome');
10
+ function isTaggedForeignYieldOutcome(value) {
11
+ return (typeof value === 'object' && value !== null && FOREIGN_YIELD_OUTCOME in value);
12
+ }
13
+ let foreignYieldBridge;
14
+ /** Registers the bridge; returns a disposer restoring the previous one. */
15
+ export function setForeignYieldBridge(bridge) {
16
+ const previous = foreignYieldBridge;
17
+ foreignYieldBridge = bridge;
18
+ return () => {
19
+ foreignYieldBridge = previous;
20
+ };
21
+ }
22
+ /** @deprecated Prototype spelling, kept for the wave-0 fixtures. */
23
+ export const ɵsetForeignYieldBridge = setForeignYieldBridge;
24
+ // Pumps `iterator` synchronously, resolving craft service yields, until it
25
+ // completes, throws a `CraftGenShortCircuit` (caught and surfaced as the carried
26
+ // exception), or yields an await-request — at which point the iterator is
27
+ // left positioned right after the await so the caller can resume it once the
28
+ // awaited value is available. `resumeValue` feeds the first `next(...)` (used to
29
+ // resume after an await; ignored on the initial pump).
30
+ export function pumpCraftProgramSync(iterator, injector, options, resumeValue) {
31
+ try {
32
+ // A resumed foreign yield either carries its value back into the generator
33
+ // or short-circuits here, so the exception lands on the regular
34
+ // `shortCircuit` step rather than surfacing as a thrown error.
35
+ let resumeWith = resumeValue;
36
+ if (isTaggedForeignYieldOutcome(resumeWith)) {
37
+ if (resumeWith.kind === 'exception') {
38
+ throw new CraftGenShortCircuit(resumeWith.exception);
39
+ }
40
+ resumeWith = resumeWith.value;
41
+ }
42
+ let current = iterator.next(resumeWith);
43
+ while (!current.done) {
44
+ const yielded = current.value;
45
+ if (isGuardAwaitRequest(yielded) || isTemporalAwaitRequest(yielded)) {
46
+ return { kind: 'await', request: yielded };
47
+ }
48
+ const resolution = resolveCraftGeneratorYield(yielded, injector, 'function');
49
+ if (!resolution.handled) {
50
+ if (options.appStartNotSupportedErrorMessage &&
51
+ isServiceAppStartRequest(yielded)) {
52
+ throw new Error(options.appStartNotSupportedErrorMessage);
53
+ }
54
+ // Last chance before the invalid-yield error: a bridged foreign yield
55
+ // suspends through the existing `'promise'` await path.
56
+ const bridged = foreignYieldBridge?.(yielded, {
57
+ injector,
58
+ abortSignal: options.abortSignal,
59
+ });
60
+ if (bridged) {
61
+ return {
62
+ kind: 'await',
63
+ request: {
64
+ [GUARD_AWAIT_REQUEST_MARKER]: true,
65
+ kind: 'promise',
66
+ value: bridged.then((outcome) => ({
67
+ ...outcome,
68
+ [FOREIGN_YIELD_OUTCOME]: true,
69
+ })),
70
+ },
71
+ };
72
+ }
73
+ throw new Error(options.invalidYieldErrorMessage);
74
+ }
75
+ current = iterator.next(resolution.value);
76
+ }
77
+ return { kind: 'done', value: current.value };
78
+ }
79
+ catch (error) {
80
+ if (isCraftGenShortCircuit(error)) {
81
+ return { kind: 'shortCircuit', exception: error.exception };
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ function isResourceSettled(resource) {
87
+ const status = resource.status();
88
+ // Angular's raw `resource()` reports technical loader failures as `error`,
89
+ // while Craft resources map business failures to `exception`.
90
+ return status === 'resolved' || status === 'exception' || status === 'error';
91
+ }
92
+ // Bridges a single await-request to a Promise: `'promise'` requests await
93
+ // the thenable directly; `'settle'` requests subscribe to the resource's settled
94
+ // status (computed off its signals, observed on `injector`) and resolve on the
95
+ // first settle.
96
+ export function awaitCraftProgramRequest(request, injector, abortSignal) {
97
+ if (isTemporalAwaitRequest(request)) {
98
+ const temporalRuntime = injector.get(CRAFT_TEMPORAL_RUNTIME, null) ??
99
+ new RealCraftTemporalRuntime();
100
+ return temporalRuntime.sleep(request.delayMs, {
101
+ kind: 'sleep',
102
+ owner: request.owner,
103
+ destroyRef: injector.get(DestroyRef, null) ?? undefined,
104
+ signal: request.signal ?? abortSignal,
105
+ });
106
+ }
107
+ if (request.kind === 'promise') {
108
+ return Promise.resolve(request.value);
109
+ }
110
+ return new Promise((resolve, reject) => {
111
+ try {
112
+ const settled$ = runInInjectionContext(injector, () => toObservable(computed(() => isResourceSettled(request.resource)), {
113
+ injector,
114
+ })).pipe(filter((settled) => settled), take(1));
115
+ settled$.subscribe({
116
+ next: () => resolve(undefined),
117
+ error: reject,
118
+ });
119
+ }
120
+ catch (error) {
121
+ reject(error);
122
+ }
123
+ });
124
+ }
125
+ // Resumes `iterator` across every await it hits until it settles (completes or
126
+ // short-circuits). Each post-await segment runs inside the injection context —
127
+ // ambient context is gone after an `await`, so service resolution and the next
128
+ // `toObservable({ injector })` need it restored.
129
+ export async function driveCraftProgramAsync(iterator, injector, step, options) {
130
+ let current = step;
131
+ while (current.kind === 'await') {
132
+ const value = await awaitCraftProgramRequest(current.request, injector, options.abortSignal);
133
+ if (options.abortSignal?.aborted) {
134
+ throw new TemporalCancelledError();
135
+ }
136
+ current = runInInjectionContext(injector, () => pumpCraftProgramSync(iterator, injector, options, value));
137
+ }
138
+ return current;
139
+ }
140
+ /**
141
+ * Async counterpart of `executeGeneratorCompatibleFactory`: same contract (a
142
+ * factory that returns either a plain value or a craft generator), but the
143
+ * generator path is driven by the async program pump — `craftUntilSettled` /
144
+ * `craftUntilDefined` awaits suspend instead of erroring, and a
145
+ * `CraftGenShortCircuit` settles as a `shortCircuit` step instead of throwing.
146
+ * The `done` value is awaited (generator loaders may return a bare promise).
147
+ */
148
+ export async function executeGeneratorCompatibleFactoryAsync({ factory, thisArg, getInjector, args, invalidYieldErrorMessage, appStartNotSupportedErrorMessage, abortSignal, }) {
149
+ const injector = ɵcraftInjectorFromHost(getInjector());
150
+ const options = {
151
+ invalidYieldErrorMessage,
152
+ appStartNotSupportedErrorMessage,
153
+ abortSignal,
154
+ };
155
+ const wrappedFactory = runInInjectionContext(injector, () => injectFnWrapper()(factory));
156
+ const result = wrappedFactory.apply(thisArg, args);
157
+ if (!isGenerator(result)) {
158
+ return { kind: 'done', value: await result };
159
+ }
160
+ const first = runInInjectionContext(injector, () => pumpCraftProgramSync(result, injector, options));
161
+ const settled = await driveCraftProgramAsync(result, injector, first, options);
162
+ return settled.kind === 'done'
163
+ ? { kind: 'done', value: await settled.value }
164
+ : settled;
165
+ }
166
+ //# sourceMappingURL=craft-program-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-program-runtime.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-program-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n DestroyRef,\n Injector,\n runInInjectionContext,\n} from './host/craft-compat';\nimport { toObservable } from './host/craft-compat';\nimport { filter, take } from 'rxjs';\nimport type { AnyCraftException } from './craft-exception';\nimport { CraftGenShortCircuit, isCraftGenShortCircuit } from './craft-gen';\nimport {\n GUARD_AWAIT_REQUEST_MARKER,\n isGenerator,\n isGuardAwaitRequest,\n isServiceAppStartRequest,\n resolveCraftGeneratorYield,\n type GuardAwaitResourceLike,\n type RuntimeAwaitRequest,\n} from './craft-generator-runtime';\nimport { injectFnWrapper } from './fn-wrapper';\nimport { ɵcraftInjectorFromHost } from './host/craft-injector-host';\nimport {\n CRAFT_TEMPORAL_RUNTIME,\n isTemporalAwaitRequest,\n RealCraftTemporalRuntime,\n TemporalCancelledError,\n} from './temporal-runtime';\n\n// ---------------------------------------------------------------------------\n// Generic async craft-program driver.\n//\n// A \"program\" is any craft generator (route guard, resolve stage, exception\n// handler, or a primitive's generator loader): it yields craft service\n// requests — resolved synchronously — and may suspend on an\n// `craftUntilSettled`/`craftUntilDefined` await-request. The driver pumps synchronously\n// between awaits and goes async only across real suspensions; a\n// `CraftGenShortCircuit` (a composed `craftGen` producing a `craftException`)\n// settles as a structured `shortCircuit` step instead of a thrown error.\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Foreign yields.\n//\n// A \"foreign yield\" is a value the pump cannot resolve as a craft request —\n// canonically an `Effect`, produced by `yield* someEffect`. A registered bridge\n// turns such a yield into a promise of a `ForeignYieldOutcome`; the pump then\n// suspends on the *existing* `'promise'` await path (nothing new to drive) and,\n// on resume, either feeds the success value back into the generator or\n// short-circuits with the carried craft exception.\n//\n// The bridge lives outside this file on purpose, so `libs/core` keeps no\n// dependency on `effect`: see `@craft-ts/effect`. Core only knows that\n// *something* may claim a yield it does not understand.\n// ---------------------------------------------------------------------------\n\n/** What a foreign yield settled to, once its bridge resolved it. */\nexport type ForeignYieldOutcome =\n | { kind: 'value'; value: unknown }\n | { kind: 'exception'; exception: AnyCraftException };\n\nconst FOREIGN_YIELD_OUTCOME = Symbol('foreign-yield-outcome');\n\ntype TaggedForeignYieldOutcome = ForeignYieldOutcome & {\n [FOREIGN_YIELD_OUTCOME]: true;\n};\n\nfunction isTaggedForeignYieldOutcome(\n value: unknown,\n): value is TaggedForeignYieldOutcome {\n return (\n typeof value === 'object' && value !== null && FOREIGN_YIELD_OUTCOME in value\n );\n}\n\n/** The context a bridge needs in order to resolve and run a foreign yield. */\nexport type ForeignYieldContext = {\n /**\n * The injector of the program that yielded. A bridge resolves its runtime\n * from here, which is what makes per-route runtimes and their inheritance\n * possible at all.\n */\n readonly injector: Injector;\n /** Aborted when the owning program is superseded or destroyed. */\n readonly abortSignal?: AbortSignal;\n};\n\n/**\n * Returns a promise for yields it recognises, `undefined` for everything else\n * (which then falls through to the usual invalid-yield error).\n */\nexport type ForeignYieldBridge = (\n yielded: unknown,\n context: ForeignYieldContext,\n) => PromiseLike<ForeignYieldOutcome> | undefined;\n\nlet foreignYieldBridge: ForeignYieldBridge | undefined;\n\n/** Registers the bridge; returns a disposer restoring the previous one. */\nexport function setForeignYieldBridge(bridge: ForeignYieldBridge): () => void {\n const previous = foreignYieldBridge;\n foreignYieldBridge = bridge;\n return () => {\n foreignYieldBridge = previous;\n };\n}\n\n/** @deprecated Prototype spelling, kept for the wave-0 fixtures. */\nexport const ɵsetForeignYieldBridge = setForeignYieldBridge;\n\n/** A program's driver step: settled (`done`/`shortCircuit`) or suspended on an await. */\nexport type CraftProgramStep =\n | { kind: 'done'; value: unknown }\n | { kind: 'await'; request: RuntimeAwaitRequest }\n | { kind: 'shortCircuit'; exception: AnyCraftException };\n\n/** A settled program step (the `await` suspension already driven through). */\nexport type CraftProgramSettledStep = Exclude<\n CraftProgramStep,\n { kind: 'await' }\n>;\n\nexport type CraftProgramPumpOptions = {\n /** Error raised when the program yields something the driver cannot resolve. */\n invalidYieldErrorMessage: string;\n /**\n * When set, an `onAppStart(...)` yield raises this dedicated error instead of\n * the generic invalid-yield one (primitive loaders keep their historical\n * message); when omitted, an app-start yield falls through to\n * `invalidYieldErrorMessage` (route guards).\n */\n appStartNotSupportedErrorMessage?: string;\n /** Abort signal for temporal awaits owned by the current async program. */\n abortSignal?: AbortSignal;\n};\n\n// Pumps `iterator` synchronously, resolving craft service yields, until it\n// completes, throws a `CraftGenShortCircuit` (caught and surfaced as the carried\n// exception), or yields an await-request — at which point the iterator is\n// left positioned right after the await so the caller can resume it once the\n// awaited value is available. `resumeValue` feeds the first `next(...)` (used to\n// resume after an await; ignored on the initial pump).\nexport function pumpCraftProgramSync(\n iterator: Generator<unknown, unknown, unknown>,\n injector: Injector,\n options: CraftProgramPumpOptions,\n resumeValue?: unknown,\n): CraftProgramStep {\n try {\n // A resumed foreign yield either carries its value back into the generator\n // or short-circuits here, so the exception lands on the regular\n // `shortCircuit` step rather than surfacing as a thrown error.\n let resumeWith = resumeValue;\n if (isTaggedForeignYieldOutcome(resumeWith)) {\n if (resumeWith.kind === 'exception') {\n throw new CraftGenShortCircuit(resumeWith.exception);\n }\n resumeWith = resumeWith.value;\n }\n\n let current = iterator.next(resumeWith as never);\n\n while (!current.done) {\n const yielded = current.value;\n\n if (isGuardAwaitRequest(yielded) || isTemporalAwaitRequest(yielded)) {\n return { kind: 'await', request: yielded };\n }\n\n const resolution = resolveCraftGeneratorYield(\n yielded,\n injector,\n 'function',\n );\n\n if (!resolution.handled) {\n if (\n options.appStartNotSupportedErrorMessage &&\n isServiceAppStartRequest(yielded)\n ) {\n throw new Error(options.appStartNotSupportedErrorMessage);\n }\n\n // Last chance before the invalid-yield error: a bridged foreign yield\n // suspends through the existing `'promise'` await path.\n const bridged = foreignYieldBridge?.(yielded, {\n injector,\n abortSignal: options.abortSignal,\n });\n if (bridged) {\n return {\n kind: 'await',\n request: {\n [GUARD_AWAIT_REQUEST_MARKER]: true,\n kind: 'promise',\n value: bridged.then((outcome) => ({\n ...outcome,\n [FOREIGN_YIELD_OUTCOME]: true as const,\n })),\n },\n };\n }\n\n throw new Error(options.invalidYieldErrorMessage);\n }\n\n current = iterator.next(resolution.value as never);\n }\n\n return { kind: 'done', value: current.value };\n } catch (error) {\n if (isCraftGenShortCircuit(error)) {\n return { kind: 'shortCircuit', exception: error.exception };\n }\n\n throw error;\n }\n}\n\nfunction isResourceSettled(resource: GuardAwaitResourceLike): boolean {\n const status = resource.status();\n\n // Angular's raw `resource()` reports technical loader failures as `error`,\n // while Craft resources map business failures to `exception`.\n return status === 'resolved' || status === 'exception' || status === 'error';\n}\n\n// Bridges a single await-request to a Promise: `'promise'` requests await\n// the thenable directly; `'settle'` requests subscribe to the resource's settled\n// status (computed off its signals, observed on `injector`) and resolve on the\n// first settle.\nexport function awaitCraftProgramRequest(\n request: RuntimeAwaitRequest,\n injector: Injector,\n abortSignal?: AbortSignal,\n): Promise<unknown> {\n if (isTemporalAwaitRequest(request)) {\n const temporalRuntime =\n injector.get(CRAFT_TEMPORAL_RUNTIME, null) ??\n new RealCraftTemporalRuntime();\n return temporalRuntime.sleep(request.delayMs, {\n kind: 'sleep',\n owner: request.owner,\n destroyRef: injector.get(DestroyRef, null) ?? undefined,\n signal: request.signal ?? abortSignal,\n });\n }\n\n if (request.kind === 'promise') {\n return Promise.resolve(request.value);\n }\n\n return new Promise<unknown>((resolve, reject) => {\n try {\n const settled$ = runInInjectionContext(injector, () =>\n toObservable(\n computed(() => isResourceSettled(request.resource)),\n {\n injector,\n },\n ),\n ).pipe(\n filter((settled) => settled),\n take(1),\n );\n\n settled$.subscribe({\n next: () => resolve(undefined),\n error: reject,\n });\n } catch (error) {\n reject(error);\n }\n });\n}\n\n// Resumes `iterator` across every await it hits until it settles (completes or\n// short-circuits). Each post-await segment runs inside the injection context —\n// ambient context is gone after an `await`, so service resolution and the next\n// `toObservable({ injector })` need it restored.\nexport async function driveCraftProgramAsync(\n iterator: Generator<unknown, unknown, unknown>,\n injector: Injector,\n step: CraftProgramStep,\n options: CraftProgramPumpOptions,\n): Promise<CraftProgramSettledStep> {\n let current = step;\n\n while (current.kind === 'await') {\n const value = await awaitCraftProgramRequest(\n current.request,\n injector,\n options.abortSignal,\n );\n if (options.abortSignal?.aborted) {\n throw new TemporalCancelledError();\n }\n current = runInInjectionContext(injector, () =>\n pumpCraftProgramSync(iterator, injector, options, value),\n );\n }\n\n return current;\n}\n\n/**\n * Async counterpart of `executeGeneratorCompatibleFactory`: same contract (a\n * factory that returns either a plain value or a craft generator), but the\n * generator path is driven by the async program pump — `craftUntilSettled` /\n * `craftUntilDefined` awaits suspend instead of erroring, and a\n * `CraftGenShortCircuit` settles as a `shortCircuit` step instead of throwing.\n * The `done` value is awaited (generator loaders may return a bare promise).\n */\nexport async function executeGeneratorCompatibleFactoryAsync<\n This,\n Args extends unknown[],\n Result,\n>({\n factory,\n thisArg,\n getInjector,\n args,\n invalidYieldErrorMessage,\n appStartNotSupportedErrorMessage,\n abortSignal,\n}: {\n factory: (this: This, ...args: Args) => Result;\n thisArg: This;\n getInjector: () => Injector | object;\n args: Args;\n invalidYieldErrorMessage: string;\n appStartNotSupportedErrorMessage?: string;\n abortSignal?: AbortSignal;\n}): Promise<CraftProgramSettledStep> {\n const injector = ɵcraftInjectorFromHost(getInjector());\n const options: CraftProgramPumpOptions = {\n invalidYieldErrorMessage,\n appStartNotSupportedErrorMessage,\n abortSignal,\n };\n const wrappedFactory = runInInjectionContext(injector, () =>\n injectFnWrapper()(factory),\n );\n const result = wrappedFactory.apply(thisArg, args);\n\n if (!isGenerator(result)) {\n return { kind: 'done', value: await result };\n }\n\n const first = runInInjectionContext(injector, () =>\n pumpCraftProgramSync(result, injector, options),\n );\n const settled = await driveCraftProgramAsync(\n result,\n injector,\n first,\n options,\n );\n\n return settled.kind === 'done'\n ? { kind: 'done', value: await settled.value }\n : settled;\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import { InjectionToken, type Injector, type Signal } from './host/craft-compat';
2
+ import type { ConcreteServiceScope } from './craft-service.shared';
3
+ export declare const CRAFT_REGISTRATION_TARGET: unique symbol;
4
+ export type CraftRegistrationTargetMetadata = Readonly<{
5
+ kind: 'component' | 'directive';
6
+ name: string;
7
+ }>;
8
+ export type CraftRegistrationTarget<Name extends string = string, Kind extends 'component' | 'directive' = 'component' | 'directive', Instance = unknown> = {
9
+ readonly [CRAFT_REGISTRATION_TARGET]: CraftRegistrationTargetMetadata & {
10
+ kind: Kind;
11
+ name: Name;
12
+ instance: Instance;
13
+ };
14
+ };
15
+ export type RegisterForEntry<Value = unknown> = Readonly<{
16
+ hostName: string;
17
+ ref: Value;
18
+ }>;
19
+ export type RegisterForSignal<Value = unknown> = Signal<readonly RegisterForEntry<Value>[] | undefined>;
20
+ export type RegisterForTargetDescriptor = Readonly<{
21
+ key: string;
22
+ matches(candidate: unknown): boolean;
23
+ }>;
24
+ export type RegisterForRegistry = Readonly<{
25
+ signalFor(key: string): RegisterForSignal;
26
+ registerService(name: string, ref: unknown, hostName: string, scope?: ConcreteServiceScope): () => void;
27
+ registerTarget(target: unknown, ref: unknown, hostName: string): () => void;
28
+ }>;
29
+ export declare const REGISTER_FOR_REGISTRY: InjectionToken<readonly Readonly<{
30
+ signalFor(key: string): RegisterForSignal;
31
+ registerService(name: string, ref: unknown, hostName: string, scope?: ConcreteServiceScope): () => void;
32
+ registerTarget(target: unknown, ref: unknown, hostName: string): () => void;
33
+ }>[]>;
34
+ export declare function createRegisterForRegistry(descriptors: readonly RegisterForTargetDescriptor[], options: {
35
+ readonly includeGlobal: boolean;
36
+ }): RegisterForRegistry;
37
+ export declare function registerResolvedService(injector: Injector, name: string, ref: unknown, hostName: string, scope: ConcreteServiceScope): void;
38
+ export declare function ɵregisterCraftTarget(injector: Injector, target: unknown, ref: unknown, hostName: string, autoCleanup?: boolean): () => void;
39
+ //# sourceMappingURL=craft-register-for-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-register-for-runtime.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-register-for-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACrD,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,uBAAuB,CACjC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,EAClE,QAAQ,GAAG,OAAO,IAChB;IACF,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,+BAA+B,GAAG;QACtE,IAAI,EAAE,IAAI,CAAC;QACX,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,QAAQ,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,KAAK,CAAC;CACZ,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,OAAO,IAAI,MAAM,CACrD,SAAS,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAC/C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,oBAAoB,GAC3B,MAAM,IAAI,CAAC;IACd,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CAC7E,CAAC,CAAC;AAIH,eAAO,MAAM,qBAAqB;mBAZjB,MAAM,GAAG,iBAAiB;0BAEjC,MAAM,OACP,OAAO,YACF,MAAM,UACR,oBAAoB,GAC3B,MAAM,IAAI;2BACU,OAAO,OAAO,OAAO,YAAY,MAAM,GAAG,MAAM,IAAI;KAW3E,CAAC;AAEH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,SAAS,2BAA2B,EAAE,EACnD,OAAO,EAAE;IAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GAC3C,mBAAmB,CAkFrB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAQN;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,UAAO,GACjB,MAAM,IAAI,CAsBZ"}
@@ -0,0 +1,96 @@
1
+ import { DestroyRef, InjectionToken, signal, } from './host/craft-compat';
2
+ import { ɵrunCraftTargetWrappers } from './craft-target-runtime';
3
+ export const CRAFT_REGISTRATION_TARGET = Symbol.for('@craft-ts/core/craft-registration-target');
4
+ const EMPTY_CLEANUP = () => undefined;
5
+ export const REGISTER_FOR_REGISTRY = new InjectionToken('REGISTER_FOR_REGISTRY', {
6
+ providedIn: 'root',
7
+ factory: () => [],
8
+ multi: true,
9
+ });
10
+ export function createRegisterForRegistry(descriptors, options) {
11
+ const entriesByKey = new Map();
12
+ const signalsByKey = new Map();
13
+ for (const descriptor of descriptors) {
14
+ entriesByKey.set(descriptor.key, []);
15
+ signalsByKey.set(descriptor.key, signal(undefined));
16
+ }
17
+ const register = (descriptor, ref, hostName) => {
18
+ if (descriptor === undefined) {
19
+ return EMPTY_CLEANUP;
20
+ }
21
+ const entries = entriesByKey.get(descriptor.key);
22
+ const entriesSignal = signalsByKey.get(descriptor.key);
23
+ if (entries === undefined || entriesSignal === undefined) {
24
+ return EMPTY_CLEANUP;
25
+ }
26
+ const existing = entries.find((entry) => Object.is(entry.ref, ref) && entry.hostName === hostName);
27
+ if (existing !== undefined) {
28
+ return EMPTY_CLEANUP;
29
+ }
30
+ const entry = {
31
+ hostName,
32
+ ref,
33
+ };
34
+ entries.push(entry);
35
+ entriesSignal.set(entries.map(toPublicEntry));
36
+ let active = true;
37
+ return () => {
38
+ if (!active)
39
+ return;
40
+ active = false;
41
+ const index = entries.indexOf(entry);
42
+ if (index === -1)
43
+ return;
44
+ entries.splice(index, 1);
45
+ entriesSignal.set(entries.length === 0 ? undefined : entries.map(toPublicEntry));
46
+ };
47
+ };
48
+ return {
49
+ signalFor(key) {
50
+ return signalsByKey.get(key) ?? signal(undefined);
51
+ },
52
+ registerService(name, ref, hostName, scope) {
53
+ if (scope === 'global' && !options.includeGlobal) {
54
+ return EMPTY_CLEANUP;
55
+ }
56
+ return register(descriptors.find((descriptor) => descriptor.matches({ kind: 'service', name })), ref, hostName);
57
+ },
58
+ registerTarget(target, ref, hostName) {
59
+ return register(descriptors.find((descriptor) => descriptor.matches(target)), ref, hostName);
60
+ },
61
+ };
62
+ }
63
+ export function registerResolvedService(injector, name, ref, hostName, scope) {
64
+ const registries = injector.get(REGISTER_FOR_REGISTRY, []);
65
+ for (const registry of registries) {
66
+ attachCleanup(injector, registry.registerService(name, ref, hostName, scope));
67
+ }
68
+ }
69
+ export function ɵregisterCraftTarget(injector, target, ref, hostName, autoCleanup = true) {
70
+ const metadata = target[CRAFT_REGISTRATION_TARGET];
71
+ if (metadata === undefined) {
72
+ return EMPTY_CLEANUP;
73
+ }
74
+ return ɵrunCraftTargetWrappers(injector, {
75
+ target,
76
+ kind: metadata.kind,
77
+ name: metadata.name,
78
+ ref,
79
+ hostName,
80
+ injector,
81
+ }, autoCleanup);
82
+ }
83
+ function attachCleanup(injector, cleanup) {
84
+ if (cleanup === EMPTY_CLEANUP)
85
+ return cleanup;
86
+ const destroyRef = injector.get(DestroyRef, null);
87
+ destroyRef?.onDestroy(cleanup);
88
+ return cleanup;
89
+ }
90
+ function toPublicEntry(entry) {
91
+ return {
92
+ hostName: entry.hostName,
93
+ ref: entry.ref,
94
+ };
95
+ }
96
+ //# sourceMappingURL=craft-register-for-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-register-for-runtime.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-register-for-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n InjectionToken,\n signal,\n type Injector,\n type Signal,\n} from './host/craft-compat';\nimport type { ConcreteServiceScope } from './craft-service.shared';\nimport { ɵrunCraftTargetWrappers } from './craft-target-runtime';\n\nexport const CRAFT_REGISTRATION_TARGET = Symbol.for(\n '@craft-ts/core/craft-registration-target',\n);\n\nexport type CraftRegistrationTargetMetadata = Readonly<{\n kind: 'component' | 'directive';\n name: string;\n}>;\n\nexport type CraftRegistrationTarget<\n Name extends string = string,\n Kind extends 'component' | 'directive' = 'component' | 'directive',\n Instance = unknown,\n> = {\n readonly [CRAFT_REGISTRATION_TARGET]: CraftRegistrationTargetMetadata & {\n kind: Kind;\n name: Name;\n instance: Instance;\n };\n};\n\nexport type RegisterForEntry<Value = unknown> = Readonly<{\n hostName: string;\n ref: Value;\n}>;\n\nexport type RegisterForSignal<Value = unknown> = Signal<\n readonly RegisterForEntry<Value>[] | undefined\n>;\n\nexport type RegisterForTargetDescriptor = Readonly<{\n key: string;\n matches(candidate: unknown): boolean;\n}>;\n\nexport type RegisterForRegistry = Readonly<{\n signalFor(key: string): RegisterForSignal;\n registerService(\n name: string,\n ref: unknown,\n hostName: string,\n scope?: ConcreteServiceScope,\n ): () => void;\n registerTarget(target: unknown, ref: unknown, hostName: string): () => void;\n}>;\n\nconst EMPTY_CLEANUP = () => undefined;\n\nexport const REGISTER_FOR_REGISTRY = new InjectionToken<\n readonly RegisterForRegistry[]\n>('REGISTER_FOR_REGISTRY', {\n providedIn: 'root',\n factory: () => [],\n multi: true,\n});\n\nexport function createRegisterForRegistry(\n descriptors: readonly RegisterForTargetDescriptor[],\n options: { readonly includeGlobal: boolean },\n): RegisterForRegistry {\n const entriesByKey = new Map<string, InternalEntry[]>();\n const signalsByKey = new Map<\n string,\n ReturnType<typeof signal<readonly RegisterForEntry[] | undefined>>\n >();\n\n for (const descriptor of descriptors) {\n entriesByKey.set(descriptor.key, []);\n signalsByKey.set(\n descriptor.key,\n signal<readonly RegisterForEntry[] | undefined>(undefined),\n );\n }\n\n const register = (\n descriptor: RegisterForTargetDescriptor | undefined,\n ref: unknown,\n hostName: string,\n ): (() => void) => {\n if (descriptor === undefined) {\n return EMPTY_CLEANUP;\n }\n\n const entries = entriesByKey.get(descriptor.key);\n const entriesSignal = signalsByKey.get(descriptor.key);\n if (entries === undefined || entriesSignal === undefined) {\n return EMPTY_CLEANUP;\n }\n\n const existing = entries.find(\n (entry) => Object.is(entry.ref, ref) && entry.hostName === hostName,\n );\n if (existing !== undefined) {\n return EMPTY_CLEANUP;\n }\n\n const entry: InternalEntry = {\n hostName,\n ref,\n };\n entries.push(entry);\n entriesSignal.set(entries.map(toPublicEntry));\n\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n\n const index = entries.indexOf(entry);\n if (index === -1) return;\n entries.splice(index, 1);\n entriesSignal.set(\n entries.length === 0 ? undefined : entries.map(toPublicEntry),\n );\n };\n };\n\n return {\n signalFor(key) {\n return signalsByKey.get(key) ?? signal(undefined);\n },\n registerService(name, ref, hostName, scope) {\n if (scope === 'global' && !options.includeGlobal) {\n return EMPTY_CLEANUP;\n }\n return register(\n descriptors.find((descriptor) =>\n descriptor.matches({ kind: 'service', name }),\n ),\n ref,\n hostName,\n );\n },\n registerTarget(target, ref, hostName) {\n return register(\n descriptors.find((descriptor) => descriptor.matches(target)),\n ref,\n hostName,\n );\n },\n };\n}\n\nexport function registerResolvedService(\n injector: Injector,\n name: string,\n ref: unknown,\n hostName: string,\n scope: ConcreteServiceScope,\n): void {\n const registries = injector.get(REGISTER_FOR_REGISTRY, []);\n for (const registry of registries) {\n attachCleanup(\n injector,\n registry.registerService(name, ref, hostName, scope),\n );\n }\n}\n\nexport function ɵregisterCraftTarget(\n injector: Injector,\n target: unknown,\n ref: unknown,\n hostName: string,\n autoCleanup = true,\n): () => void {\n const metadata = (\n target as {\n readonly [CRAFT_REGISTRATION_TARGET]?: CraftRegistrationTargetMetadata;\n }\n )[CRAFT_REGISTRATION_TARGET];\n if (metadata === undefined) {\n return EMPTY_CLEANUP;\n }\n\n return ɵrunCraftTargetWrappers(\n injector,\n {\n target,\n kind: metadata.kind,\n name: metadata.name,\n ref,\n hostName,\n injector,\n },\n autoCleanup,\n );\n}\n\nfunction attachCleanup(injector: Injector, cleanup: () => void): () => void {\n if (cleanup === EMPTY_CLEANUP) return cleanup;\n\n const destroyRef = injector.get(DestroyRef, null);\n destroyRef?.onDestroy(cleanup);\n return cleanup;\n}\n\ntype InternalEntry = {\n readonly hostName: string;\n readonly ref: unknown;\n};\n\nfunction toPublicEntry(entry: InternalEntry): RegisterForEntry {\n return {\n hostName: entry.hostName,\n ref: entry.ref,\n };\n}\n"]}
@@ -0,0 +1,57 @@
1
+ import { type GetServiceReferenceMeta, type GetServiceReferenceOutput, type ServiceReference } from './craft-service';
2
+ import { CRAFT_REGISTRATION_TARGET, REGISTER_FOR_REGISTRY, type CraftRegistrationTarget, type RegisterForEntry, type RegisterForRegistry, type RegisterForSignal } from './craft-register-for-runtime';
3
+ import { type Provider } from './host/craft-compat';
4
+ export { CRAFT_REGISTRATION_TARGET, REGISTER_FOR_REGISTRY, type CraftRegistrationTarget, type RegisterForEntry, type RegisterForRegistry, type RegisterForSignal, };
5
+ export type RegisterForOptions = Readonly<{
6
+ /** Track global services resolved below this register. Defaults to true. */
7
+ includeGlobal?: boolean;
8
+ }>;
9
+ export type RegisterForExposureTokens<Value> = Readonly<{
10
+ /** The complete live signal for the selected register group. */
11
+ $self: RegisterForSignal<Value>;
12
+ }>;
13
+ export type RegisterForExposureSelector<Value, Exposed> = (tokens: RegisterForExposureTokens<Value>) => Exposed | Generator<unknown, Exposed, unknown>;
14
+ type AnyRegisterTarget = ServiceReference | CraftRegistrationTarget;
15
+ type TargetName<Target> = Target extends ServiceReference ? GetServiceReferenceMeta<Target>['name'] : Target extends CraftRegistrationTarget<infer Name, any, any> ? Name : never;
16
+ type TargetReference<Target> = Target extends ServiceReference ? GetServiceReferenceOutput<Target> : Target extends CraftRegistrationTarget<any, any, infer Instance> ? Instance : never;
17
+ type TargetNames<Targets extends readonly AnyRegisterTarget[]> = Extract<TargetName<Targets[number]>, string>;
18
+ type GroupKey<Name extends string> = Capitalize<Name>;
19
+ type SignalForTarget<Target> = RegisterForSignal<TargetReference<Target>>;
20
+ type RegisterForProjectionResult<Result> = Result extends Generator<infer Yielded, infer Output, unknown> ? {
21
+ yielded: Yielded;
22
+ output: Output;
23
+ } : {
24
+ yielded: never;
25
+ output: Result;
26
+ };
27
+ type RegisterForDirectValue<Value, Derived> = RegisterForSignal<Value> & ([Derived] extends [never] ? {} : Derived);
28
+ type RegisterForTargetHelper<Value, Derived = never> = {
29
+ (): Generator<never, RegisterForDirectValue<Value, Derived>, unknown>;
30
+ <Projection extends (tokens: RegisterForExposureTokens<Value>) => unknown>(bindings: undefined, expose: Projection): Generator<RegisterForProjectionResult<ReturnType<Projection>>['yielded'], RegisterForProjectionResult<ReturnType<Projection>>['output'], unknown>;
31
+ };
32
+ type RegisterForAdditionalGroups<Targets extends readonly AnyRegisterTarget[]> = Targets extends readonly [AnyRegisterTarget, ...infer Rest] ? {
33
+ [Name in TargetNames<readonly [Extract<Rest[number], AnyRegisterTarget>]> as GroupKey<Name>]: RegisterForTargetHelper<TargetReference<TargetForKey<Extract<Rest[number], AnyRegisterTarget>[], GroupKey<Name>>>>;
34
+ } : Record<never, never>;
35
+ type TargetForKey<Targets extends readonly AnyRegisterTarget[], Key extends string> = Targets[number] extends infer Target ? Target extends AnyRegisterTarget ? GroupKey<Extract<TargetName<Target>, string>> extends Key ? Target : never : never : never;
36
+ export type RegisterForGroups<Targets extends readonly AnyRegisterTarget[]> = {
37
+ [Name in TargetNames<Targets> as GroupKey<Name>]: SignalForTarget<TargetForKey<Targets, GroupKey<Name>>>;
38
+ };
39
+ type RegisterForDerivedHelper<Derived> = [Derived] extends [never] ? Record<never, never> : {
40
+ [Name in Extract<keyof Derived, string>]: () => Generator<never, Derived[Name], unknown>;
41
+ };
42
+ type RegisterForHelper<Targets extends readonly AnyRegisterTarget[], Derived = never> = Targets extends readonly [infer Primary, ...unknown[]] ? Primary extends AnyRegisterTarget ? RegisterForTargetHelper<TargetReference<Primary>, Derived> & RegisterForAdditionalGroups<Targets> & RegisterForDerivedHelper<Derived> : never : never;
43
+ export type CraftRegisterForApi<RegistryName extends string, Targets extends readonly AnyRegisterTarget[], Derived = never> = Readonly<{
44
+ [Name in `RegisterFor${Capitalize<RegistryName>}`]: RegisterForHelper<Targets, Derived>;
45
+ } & {
46
+ [Name in `provideRegisterFor${Capitalize<RegistryName>}`]: () => Provider[];
47
+ }>;
48
+ export type RegisterForDerivedSelector<Targets extends readonly AnyRegisterTarget[], Derived extends object> = (groups: RegisterForGroups<Targets>) => Derived;
49
+ /**
50
+ * Creates a typed, DI-scoped view of live Craft service/component/directive
51
+ * instances. The returned helper is yieldable from Craft factories.
52
+ */
53
+ export declare function craftRegisterFor<const RegistryName extends string, const Targets extends readonly AnyRegisterTarget[], const Derived extends object>(registryName: RegistryName, targets: Targets, derive: RegisterForDerivedSelector<Targets, Derived>): CraftRegisterForApi<RegistryName, Targets, Derived>;
54
+ export declare function craftRegisterFor<const RegistryName extends string, const Target extends AnyRegisterTarget, const Derived extends object>(registryName: RegistryName, target: Target, derive: RegisterForDerivedSelector<readonly [Target], Derived>): CraftRegisterForApi<RegistryName, readonly [Target], Derived>;
55
+ export declare function craftRegisterFor<const RegistryName extends string, const Targets extends readonly AnyRegisterTarget[]>(registryName: RegistryName, targets: Targets, options?: RegisterForOptions): CraftRegisterForApi<RegistryName, Targets>;
56
+ export declare function craftRegisterFor<const RegistryName extends string, const Target extends AnyRegisterTarget>(registryName: RegistryName, target: Target, options?: RegisterForOptions): CraftRegisterForApi<RegistryName, readonly [Target]>;
57
+ //# sourceMappingURL=craft-register-for.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-register-for.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-register-for.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { HOST_TAG_LIST } from './host-tag';
2
+ import { getServiceMetaData, } from './craft-service';
3
+ import { CRAFT_REGISTRATION_TARGET, createRegisterForRegistry, REGISTER_FOR_REGISTRY, registerResolvedService, } from './craft-register-for-runtime';
4
+ import { isGenerator, provideServiceYieldWrapper, } from './craft-generator-runtime';
5
+ import { provideCraftTargetWrapper } from './craft-target-runtime';
6
+ import { assertInInjectionContext, inject, InjectionToken, Injector, } from './host/craft-compat';
7
+ export { CRAFT_REGISTRATION_TARGET, REGISTER_FOR_REGISTRY, };
8
+ export function craftRegisterFor(registryName, targetsOrTarget, optionsOrDerive = {}) {
9
+ const targets = Array.isArray(targetsOrTarget)
10
+ ? targetsOrTarget
11
+ : [targetsOrTarget];
12
+ return createCraftRegisterFor(registryName, targets, optionsOrDerive);
13
+ }
14
+ function createCraftRegisterFor(registryName, targets, optionsOrDerive) {
15
+ if (!registryName) {
16
+ throw new Error('craftRegisterFor requires a non-empty registry name.');
17
+ }
18
+ if (targets.length === 0) {
19
+ throw new Error('craftRegisterFor requires at least one target.');
20
+ }
21
+ const descriptors = targets.map(toDescriptor);
22
+ assertUniqueDescriptorKeys(descriptors);
23
+ const derive = typeof optionsOrDerive === 'function' ? optionsOrDerive : undefined;
24
+ const options = typeof optionsOrDerive === 'function' ? {} : optionsOrDerive;
25
+ const includeGlobal = options.includeGlobal ?? true;
26
+ const registryToken = new InjectionToken(`REGISTER_FOR_REGISTRY_${registryName}`);
27
+ const registerForName = `RegisterFor${capitalize(registryName)}`;
28
+ const provideRegisterForName = `provideRegisterFor${capitalize(registryName)}`;
29
+ const derivedByInjector = new WeakMap();
30
+ const createTargetHelper = (descriptor, exposeDerived) => function* (_bindings, expose) {
31
+ const value = requireRegistry().signalFor(descriptor.key);
32
+ if (expose === undefined) {
33
+ return exposeDerived ? extendWithDerived(value) : value;
34
+ }
35
+ const exposed = expose({ $self: value });
36
+ if (isGenerator(exposed)) {
37
+ return yield* exposed;
38
+ }
39
+ return exposed;
40
+ };
41
+ const helper = createTargetHelper(descriptors[0], true);
42
+ for (const descriptor of descriptors.slice(1)) {
43
+ Object.defineProperty(helper, descriptor.key, {
44
+ value: createTargetHelper(descriptor, false),
45
+ enumerable: false,
46
+ });
47
+ }
48
+ const registerFor = new Proxy(helper, {
49
+ get(target, property, receiver) {
50
+ const value = Reflect.get(target, property, receiver);
51
+ if (value !== undefined ||
52
+ typeof property !== 'string' ||
53
+ derive === undefined ||
54
+ property === 'then') {
55
+ return value;
56
+ }
57
+ return function* () {
58
+ const derived = getDerivedForCurrentInjector();
59
+ if (!Object.prototype.hasOwnProperty.call(derived, property)) {
60
+ throw new Error(`Unknown RegisterFor property "${property}".`);
61
+ }
62
+ return derived[property];
63
+ };
64
+ },
65
+ });
66
+ function extendWithDerived(value) {
67
+ if (derive === undefined) {
68
+ return value;
69
+ }
70
+ const derived = getDerivedForCurrentInjector();
71
+ return new Proxy(value, {
72
+ get(target, property, receiver) {
73
+ if (typeof property === 'string' &&
74
+ Object.prototype.hasOwnProperty.call(derived, property)) {
75
+ return derived[property];
76
+ }
77
+ return Reflect.get(target, property, receiver);
78
+ },
79
+ });
80
+ }
81
+ const provideRegisterFor = () => {
82
+ const registryProvider = {
83
+ provide: registryToken,
84
+ useFactory: () => createRegisterForRegistry(descriptors, { includeGlobal }),
85
+ };
86
+ const registryCollectionProvider = {
87
+ provide: REGISTER_FOR_REGISTRY,
88
+ useExisting: registryToken,
89
+ multi: true,
90
+ };
91
+ const targetWrapper = provideCraftTargetWrapper('Warning: dependency injection here is not type-safe and may fail at runtime', function* (context, next) {
92
+ const registry = context.injector.get(registryToken, null);
93
+ if (registry === null) {
94
+ return yield* next();
95
+ }
96
+ const release = registry.registerTarget(context.target, context.ref, context.hostName);
97
+ const downstreamRelease = yield* next();
98
+ return () => {
99
+ downstreamRelease();
100
+ release();
101
+ };
102
+ });
103
+ const yieldWrapper = provideServiceYieldWrapper('Register Craft service yields for craftRegisterFor.', function* (context, next) {
104
+ const ref = yield* next();
105
+ if (context.providedIn !== 'global' || includeGlobal) {
106
+ const hostTags = context.injector.get(HOST_TAG_LIST, []);
107
+ registerResolvedService(context.injector, context.name, ref, hostTags[hostTags.length - 1] ?? `service:${context.name}`, context.providedIn);
108
+ }
109
+ return ref;
110
+ });
111
+ return [
112
+ registryProvider,
113
+ registryCollectionProvider,
114
+ targetWrapper,
115
+ yieldWrapper,
116
+ ];
117
+ };
118
+ return {
119
+ [registerForName]: registerFor,
120
+ [provideRegisterForName]: provideRegisterFor,
121
+ };
122
+ function getDerivedForCurrentInjector() {
123
+ if (derive === undefined) {
124
+ return {};
125
+ }
126
+ const injector = currentInjector();
127
+ const cached = derivedByInjector.get(injector);
128
+ if (cached !== undefined) {
129
+ return cached;
130
+ }
131
+ const groups = {};
132
+ const registry = requireRegistry();
133
+ for (const descriptor of descriptors) {
134
+ groups[descriptor.key] = registry.signalFor(descriptor.key);
135
+ }
136
+ const derived = derive(groups);
137
+ if (isGenerator(derived)) {
138
+ throw new Error('craftRegisterFor derived properties must be returned synchronously.');
139
+ }
140
+ const result = derived;
141
+ derivedByInjector.set(injector, result);
142
+ return result;
143
+ }
144
+ function requireRegistry() {
145
+ throwIfNoInjectionContext();
146
+ const registry = currentInjector().get(registryToken, null);
147
+ if (registry === null) {
148
+ throw new Error(`${registerForName} requires ${provideRegisterForName}() in the current Craft injector.`);
149
+ }
150
+ return registry;
151
+ }
152
+ }
153
+ function toDescriptor(target) {
154
+ try {
155
+ const service = getServiceMetaData(target);
156
+ return {
157
+ key: capitalize(service.name),
158
+ matches(candidate) {
159
+ return isServiceCandidate(candidate) && candidate.name === service.name;
160
+ },
161
+ };
162
+ }
163
+ catch {
164
+ const metadata = target[CRAFT_REGISTRATION_TARGET];
165
+ if (!metadata) {
166
+ throw new Error('craftRegisterFor only accepts Craft services, components, and directives.');
167
+ }
168
+ return {
169
+ key: capitalize(metadata.name),
170
+ matches(candidate) {
171
+ return candidate === target;
172
+ },
173
+ };
174
+ }
175
+ }
176
+ function assertUniqueDescriptorKeys(descriptors) {
177
+ const seen = new Set();
178
+ for (const descriptor of descriptors) {
179
+ if (seen.has(descriptor.key)) {
180
+ throw new Error(`craftRegisterFor cannot contain duplicate group name "${descriptor.key}".`);
181
+ }
182
+ seen.add(descriptor.key);
183
+ }
184
+ }
185
+ function isServiceCandidate(candidate) {
186
+ return (typeof candidate === 'object' &&
187
+ candidate !== null &&
188
+ Reflect.get(candidate, 'kind') === 'service' &&
189
+ typeof Reflect.get(candidate, 'name') === 'string');
190
+ }
191
+ function capitalize(value) {
192
+ return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;
193
+ }
194
+ function throwIfNoInjectionContext() {
195
+ assertInInjectionContext(throwIfNoInjectionContext);
196
+ }
197
+ function currentInjector() {
198
+ return inject(Injector);
199
+ }
200
+ //# sourceMappingURL=craft-register-for.js.map