@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,266 @@
1
+ import { requiresClientContext, } from './server-function';
2
+ import { craftHandshakeName } from './craft-handshake';
3
+ export class ServerFunctionInputError extends Error {
4
+ code = 'CRAFT_SERVER_FUNCTION_INPUT_INVALID';
5
+ id;
6
+ issues;
7
+ constructor(id, issues) {
8
+ super(`CRAFT_SERVER_FUNCTION_INPUT_INVALID: Invalid input for server function "${id}": ${issues
9
+ .map((issue) => issue.message)
10
+ .join(', ')}`);
11
+ this.id = id;
12
+ this.issues = issues;
13
+ this.name = 'ServerFunctionInputError';
14
+ }
15
+ }
16
+ /**
17
+ * Contexte client refusé. Distinct de `ServerFunctionInputError` à dessein :
18
+ * dans les journaux, une donnée métier invalide et un contexte navigateur
19
+ * invalide ne racontent pas la même histoire.
20
+ */
21
+ export class ServerFunctionClientContextError extends Error {
22
+ code = 'CRAFT_SERVER_FUNCTION_CLIENT_CONTEXT_INVALID';
23
+ id;
24
+ issues;
25
+ constructor(id, issues) {
26
+ super(`CRAFT_SERVER_FUNCTION_CLIENT_CONTEXT_INVALID: Invalid client context for server function "${id}": ${issues
27
+ .map((issue) => issue.message)
28
+ .join(', ')}`);
29
+ this.id = id;
30
+ this.issues = issues;
31
+ this.name = 'ServerFunctionClientContextError';
32
+ }
33
+ }
34
+ export class ServerFunctionProtocolError extends Error {
35
+ code = 'CRAFT_SERVER_FUNCTION_PROTOCOL_UNSUPPORTED';
36
+ constructor(version) {
37
+ super(`CRAFT_SERVER_FUNCTION_PROTOCOL_UNSUPPORTED: unsupported server function protocol version ${JSON.stringify(version)}. This registry speaks version 1 (and the version-less legacy format).`);
38
+ this.name = 'ServerFunctionProtocolError';
39
+ }
40
+ }
41
+ export class ServerFunctionPermissionError extends Error {
42
+ code = 'CRAFT_SERVER_FUNCTION_PERMISSION_DENIED';
43
+ id;
44
+ permission;
45
+ constructor(id, permission, reason) {
46
+ super(`CRAFT_SERVER_FUNCTION_PERMISSION_DENIED: Server function "${id}" requires permission "${permission}": ${reason}`);
47
+ this.id = id;
48
+ this.permission = permission;
49
+ this.name = 'ServerFunctionPermissionError';
50
+ }
51
+ }
52
+ export class ServerFunctionOutputError extends Error {
53
+ code = 'CRAFT_SERVER_FUNCTION_OUTPUT_INVALID';
54
+ id;
55
+ issues;
56
+ constructor(id, issues) {
57
+ super(`CRAFT_SERVER_FUNCTION_OUTPUT_INVALID: Invalid output for server function "${id}": ${issues
58
+ .map((issue) => issue.message)
59
+ .join(', ')}`);
60
+ this.id = id;
61
+ this.issues = issues;
62
+ this.name = 'ServerFunctionOutputError';
63
+ }
64
+ }
65
+ export function createServer(options) {
66
+ const byId = new Map();
67
+ for (const definition of options.functions) {
68
+ if (byId.has(definition.contract.id)) {
69
+ throw new Error(`Duplicate server function id "${definition.contract.id}" in server registry.`);
70
+ }
71
+ byId.set(definition.contract.id, definition);
72
+ }
73
+ const invoke = async (id, input, clientContext) => {
74
+ const definition = byId.get(id);
75
+ if (!definition) {
76
+ throw new Error(`Server function "${id}" is not registered.`);
77
+ }
78
+ await checkServerFunctionPermissions(definition, options.checkPermission);
79
+ const invoked = definition.invoke(await parseServerFunctionInput(definition, input), options.runtime, await parseServerFunctionClientContext(definition, clientContext));
80
+ // Portable definitions keep their opaque program intact until the adapter
81
+ // sees it. Legacy definitions retain the historical behaviour where a
82
+ // Promise returned by the handler is awaited before execute(value).
83
+ const program = definition.programMode === 'portable' ? invoked : await invoked;
84
+ const executed = options.execute
85
+ ? await options.execute(program)
86
+ : await program;
87
+ return parseServerFunctionOutput(definition.contract, executed);
88
+ };
89
+ return {
90
+ functions: options.functions,
91
+ invoke,
92
+ async handle(request) {
93
+ if (request.method !== 'POST') {
94
+ return new Response('Method Not Allowed', { status: 405 });
95
+ }
96
+ const body = (await request.json());
97
+ if (!isRecord(body) || typeof body['id'] !== 'string') {
98
+ return new Response('Invalid server function request', { status: 400 });
99
+ }
100
+ try {
101
+ assertSupportedProtocol(body['protocolVersion']);
102
+ const result = await invoke(body['id'], body['input'], body['context']);
103
+ return Response.json(result);
104
+ }
105
+ catch (error) {
106
+ if (error instanceof ServerFunctionPermissionError) {
107
+ return Response.json({ error: { message: error.message } }, { status: 403 });
108
+ }
109
+ if (error instanceof ServerFunctionInputError ||
110
+ error instanceof ServerFunctionClientContextError) {
111
+ return Response.json({ error: { message: error.message, issues: error.issues } }, { status: 400 });
112
+ }
113
+ if (error instanceof ServerFunctionProtocolError) {
114
+ return Response.json({ error: { message: error.message } }, { status: 400 });
115
+ }
116
+ const failure = toServerFunctionFailure(error);
117
+ if (failure) {
118
+ return Response.json({ error: failure }, { status: serverFunctionFailureStatus(failure) });
119
+ }
120
+ return Response.json({
121
+ error: {
122
+ message: error instanceof Error ? error.message : String(error),
123
+ },
124
+ }, { status: 500 });
125
+ }
126
+ },
127
+ };
128
+ }
129
+ function isRecord(value) {
130
+ return typeof value === 'object' && value !== null;
131
+ }
132
+ async function checkServerFunctionPermissions(definition, checkPermission) {
133
+ const id = definition.contract.id;
134
+ for (const pipe of definition.pipes) {
135
+ if (pipe.kind !== 'server-permission' || !pipe.permission)
136
+ continue;
137
+ if (!checkPermission) {
138
+ throw new ServerFunctionPermissionError(id, pipe.permission, 'no permission checker is configured on the server registry.');
139
+ }
140
+ if (!(await checkPermission(pipe.permission, { id }))) {
141
+ throw new ServerFunctionPermissionError(id, pipe.permission, 'denied.');
142
+ }
143
+ }
144
+ }
145
+ /**
146
+ * Standard Schema ne sait pas fusionner deux schémas : on valide donc l'input
147
+ * brut avec chacun d'eux, puis on fusionne les sorties. Un schéma de middleware
148
+ * doit par conséquent ignorer les clés en trop, ce qui est le comportement par
149
+ * défaut d'un `Schema.Struct`.
150
+ */
151
+ async function parseServerFunctionInput(definition, input) {
152
+ const contract = definition.contract;
153
+ const schemas = definition.inputSchemas ?? [
154
+ contract.input,
155
+ ];
156
+ if (schemas.length === 1) {
157
+ return validateInputSchema(contract.id, schemas[0], input);
158
+ }
159
+ const merged = {};
160
+ for (const schema of schemas) {
161
+ const value = await validateInputSchema(contract.id, schema, input);
162
+ if (!isRecord(value)) {
163
+ throw new Error(`CRAFT_SERVER_FUNCTION_INPUT_NOT_MERGEABLE: Server function "${contract.id}" combines several input schemas, so each one must produce an object.`);
164
+ }
165
+ Object.assign(merged, value);
166
+ }
167
+ return merged;
168
+ }
169
+ async function validateInputSchema(id, schema, input) {
170
+ const result = await schema['~standard'].validate(input);
171
+ if (result.issues) {
172
+ throw new ServerFunctionInputError(id, result.issues);
173
+ }
174
+ return result.value;
175
+ }
176
+ function assertSupportedProtocol(version) {
177
+ if (version === undefined || version === 1)
178
+ return;
179
+ throw new ServerFunctionProtocolError(version);
180
+ }
181
+ /**
182
+ * Valide le contexte envoyé par le navigateur.
183
+ *
184
+ * Deux canaux, tous deux issus du client et tous deux traités comme non
185
+ * fiables : le schéma `clientContext` du contrat (ce que la chaîne de
186
+ * middleware client publie), et les valeurs de chaque `requireClientDI(...)`.
187
+ * Rien n'est fusionné dans le contexte de confiance produit par les middleware
188
+ * serveur : le résultat vit dans son propre champ, `clientContext`.
189
+ */
190
+ async function parseServerFunctionClientContext(definition, raw) {
191
+ if (!requiresClientContext(definition))
192
+ return undefined;
193
+ const id = definition.contract.id;
194
+ if (raw === undefined || raw === null) {
195
+ throw new ServerFunctionClientContextError(id, [
196
+ {
197
+ message: 'the function declares a client context but the request carried none.',
198
+ },
199
+ ]);
200
+ }
201
+ if (!isRecord(raw)) {
202
+ throw new ServerFunctionClientContextError(id, [
203
+ { message: 'the client context must be an object.' },
204
+ ]);
205
+ }
206
+ const validated = {};
207
+ for (const schema of definition.clientContextSchemas ?? []) {
208
+ const result = await schema['~standard'].validate(raw);
209
+ if (result.issues) {
210
+ // Nommer le handshake fautif quand il y en a un : dans un journal, savoir
211
+ // *quel* accord n'a pas été tenu vaut mieux que la seule liste des clés.
212
+ const handshake = craftHandshakeName(schema);
213
+ throw new ServerFunctionClientContextError(id, handshake === undefined
214
+ ? result.issues
215
+ : result.issues.map((issue) => ({
216
+ message: `handshake "${handshake}": ${issue.message}`,
217
+ })));
218
+ }
219
+ if (!isRecord(result.value)) {
220
+ throw new ServerFunctionClientContextError(id, [
221
+ { message: 'a client context schema must produce an object.' },
222
+ ]);
223
+ }
224
+ Object.assign(validated, result.value);
225
+ }
226
+ return validated;
227
+ }
228
+ /**
229
+ * Sérialise un échec métier tagué (`Data.TaggedError` et assimilés) en objet
230
+ * transportable. Effect rejette avec l'erreur elle-même, il n'y a donc pas de
231
+ * `Cause` à déballer ici, et le core reste sans dépendance runtime sur Effect.
232
+ */
233
+ export function toServerFunctionFailure(error) {
234
+ if (typeof error !== 'object' || error === null)
235
+ return undefined;
236
+ const tag = error._tag;
237
+ if (typeof tag !== 'string')
238
+ return undefined;
239
+ const failure = { _tag: tag };
240
+ for (const key of Object.getOwnPropertyNames(error)) {
241
+ if (key === 'stack' || key === '_tag')
242
+ continue;
243
+ failure[key] = error[key];
244
+ }
245
+ return failure;
246
+ }
247
+ function serverFunctionFailureStatus(failure) {
248
+ const status = failure['status'] ??
249
+ (isRecord(failure['payload']) ? failure['payload']['status'] : undefined);
250
+ return typeof status === 'number' &&
251
+ Number.isInteger(status) &&
252
+ status >= 400 &&
253
+ status <= 599
254
+ ? status
255
+ : 422;
256
+ }
257
+ async function parseServerFunctionOutput(contract, output) {
258
+ if (!contract.output)
259
+ return output;
260
+ const result = await contract.output['~standard'].validate(output);
261
+ if (result.issues) {
262
+ throw new ServerFunctionOutputError(contract.id, result.issues);
263
+ }
264
+ return result.value;
265
+ }
266
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/server.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ServerFunctionContract } from './server-function-contract';\nimport {\n requiresClientContext,\n type ServerFunctionDefinition,\n type ServerFunctionRuntime,\n} from './server-function';\nimport type { CraftSchema } from './schema-validation';\nimport { craftHandshakeName } from './craft-handshake';\n\nexport type ServerFunctionServerOptions = {\n readonly runtime?: ServerFunctionRuntime;\n readonly execute?: (value: unknown) => unknown | Promise<unknown>;\n /**\n * Évalue une permission déclarée par `requireServerPermission(...)`.\n *\n * Le registre échoue en fermeture : une server function qui déclare une\n * permission sans que ce contrôle soit configuré est rejetée, plutôt que\n * d'exposer silencieusement une déclaration qui ne vérifie rien.\n */\n readonly checkPermission?: (\n permission: string,\n context: { readonly id: string },\n ) => boolean | Promise<boolean>;\n};\n\nexport class ServerFunctionInputError extends Error {\n readonly code = 'CRAFT_SERVER_FUNCTION_INPUT_INVALID';\n readonly id: string;\n readonly issues: readonly { readonly message: string }[];\n\n constructor(id: string, issues: readonly { readonly message: string }[]) {\n super(\n `CRAFT_SERVER_FUNCTION_INPUT_INVALID: Invalid input for server function \"${id}\": ${issues\n .map((issue) => issue.message)\n .join(', ')}`,\n );\n this.id = id;\n this.issues = issues;\n this.name = 'ServerFunctionInputError';\n }\n}\n\n/**\n * Contexte client refusé. Distinct de `ServerFunctionInputError` à dessein :\n * dans les journaux, une donnée métier invalide et un contexte navigateur\n * invalide ne racontent pas la même histoire.\n */\nexport class ServerFunctionClientContextError extends Error {\n readonly code = 'CRAFT_SERVER_FUNCTION_CLIENT_CONTEXT_INVALID';\n readonly id: string;\n readonly issues: readonly { readonly message: string }[];\n\n constructor(id: string, issues: readonly { readonly message: string }[]) {\n super(\n `CRAFT_SERVER_FUNCTION_CLIENT_CONTEXT_INVALID: Invalid client context for server function \"${id}\": ${issues\n .map((issue) => issue.message)\n .join(', ')}`,\n );\n this.id = id;\n this.issues = issues;\n this.name = 'ServerFunctionClientContextError';\n }\n}\n\nexport class ServerFunctionProtocolError extends Error {\n readonly code = 'CRAFT_SERVER_FUNCTION_PROTOCOL_UNSUPPORTED';\n\n constructor(version: unknown) {\n super(\n `CRAFT_SERVER_FUNCTION_PROTOCOL_UNSUPPORTED: unsupported server function protocol version ${JSON.stringify(version)}. This registry speaks version 1 (and the version-less legacy format).`,\n );\n this.name = 'ServerFunctionProtocolError';\n }\n}\n\nexport class ServerFunctionPermissionError extends Error {\n readonly code = 'CRAFT_SERVER_FUNCTION_PERMISSION_DENIED';\n readonly id: string;\n readonly permission: string;\n\n constructor(id: string, permission: string, reason: string) {\n super(\n `CRAFT_SERVER_FUNCTION_PERMISSION_DENIED: Server function \"${id}\" requires permission \"${permission}\": ${reason}`,\n );\n this.id = id;\n this.permission = permission;\n this.name = 'ServerFunctionPermissionError';\n }\n}\n\nexport class ServerFunctionOutputError extends Error {\n readonly code = 'CRAFT_SERVER_FUNCTION_OUTPUT_INVALID';\n readonly id: string;\n readonly issues: readonly { readonly message: string }[];\n\n constructor(id: string, issues: readonly { readonly message: string }[]) {\n super(\n `CRAFT_SERVER_FUNCTION_OUTPUT_INVALID: Invalid output for server function \"${id}\": ${issues\n .map((issue) => issue.message)\n .join(', ')}`,\n );\n this.id = id;\n this.issues = issues;\n this.name = 'ServerFunctionOutputError';\n }\n}\n\nexport type Server = {\n readonly functions: readonly ServerFunctionDefinition<any, any, any>[];\n readonly invoke: (\n id: string,\n input: unknown,\n /** Contexte brut envoyé par le navigateur, validé avant tout usage. */\n clientContext?: unknown,\n ) => Promise<unknown>;\n readonly handle: (request: Request) => Promise<Response>;\n};\n\nexport function createServer(\n options: ServerFunctionServerOptions & {\n readonly functions: readonly ServerFunctionDefinition<any, any, any>[];\n },\n): Server {\n const byId = new Map<string, ServerFunctionDefinition<any, any, any>>();\n for (const definition of options.functions) {\n if (byId.has(definition.contract.id)) {\n throw new Error(\n `Duplicate server function id \"${definition.contract.id}\" in server registry.`,\n );\n }\n byId.set(definition.contract.id, definition);\n }\n\n const invoke = async (\n id: string,\n input: unknown,\n clientContext?: unknown,\n ): Promise<unknown> => {\n const definition = byId.get(id);\n if (!definition) {\n throw new Error(`Server function \"${id}\" is not registered.`);\n }\n await checkServerFunctionPermissions(definition, options.checkPermission);\n const invoked = definition.invoke(\n await parseServerFunctionInput(definition, input),\n options.runtime,\n await parseServerFunctionClientContext(definition, clientContext),\n );\n // Portable definitions keep their opaque program intact until the adapter\n // sees it. Legacy definitions retain the historical behaviour where a\n // Promise returned by the handler is awaited before execute(value).\n const program =\n definition.programMode === 'portable' ? invoked : await invoked;\n const executed = options.execute\n ? await options.execute(program)\n : await program;\n return parseServerFunctionOutput(definition.contract, executed);\n };\n\n return {\n functions: options.functions,\n invoke,\n async handle(request) {\n if (request.method !== 'POST') {\n return new Response('Method Not Allowed', { status: 405 });\n }\n const body = (await request.json()) as unknown;\n if (!isRecord(body) || typeof body['id'] !== 'string') {\n return new Response('Invalid server function request', { status: 400 });\n }\n try {\n assertSupportedProtocol(body['protocolVersion']);\n const result = await invoke(\n body['id'] as string,\n body['input'],\n body['context'],\n );\n return Response.json(result);\n } catch (error) {\n if (error instanceof ServerFunctionPermissionError) {\n return Response.json(\n { error: { message: error.message } },\n { status: 403 },\n );\n }\n if (\n error instanceof ServerFunctionInputError ||\n error instanceof ServerFunctionClientContextError\n ) {\n return Response.json(\n { error: { message: error.message, issues: error.issues } },\n { status: 400 },\n );\n }\n if (error instanceof ServerFunctionProtocolError) {\n return Response.json(\n { error: { message: error.message } },\n { status: 400 },\n );\n }\n const failure = toServerFunctionFailure(error);\n if (failure) {\n return Response.json(\n { error: failure },\n { status: serverFunctionFailureStatus(failure) },\n );\n }\n return Response.json(\n {\n error: {\n message: error instanceof Error ? error.message : String(error),\n },\n },\n { status: 500 },\n );\n }\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport type { ServerFunctionContract };\n\nasync function checkServerFunctionPermissions(\n definition: ServerFunctionDefinition<any, any, any, any>,\n checkPermission: ServerFunctionServerOptions['checkPermission'],\n): Promise<void> {\n const id = definition.contract.id as string;\n for (const pipe of definition.pipes as readonly {\n kind?: string;\n permission?: string;\n }[]) {\n if (pipe.kind !== 'server-permission' || !pipe.permission) continue;\n if (!checkPermission) {\n throw new ServerFunctionPermissionError(\n id,\n pipe.permission,\n 'no permission checker is configured on the server registry.',\n );\n }\n if (!(await checkPermission(pipe.permission, { id }))) {\n throw new ServerFunctionPermissionError(id, pipe.permission, 'denied.');\n }\n }\n}\n\n/**\n * Standard Schema ne sait pas fusionner deux schémas : on valide donc l'input\n * brut avec chacun d'eux, puis on fusionne les sorties. Un schéma de middleware\n * doit par conséquent ignorer les clés en trop, ce qui est le comportement par\n * défaut d'un `Schema.Struct`.\n */\nasync function parseServerFunctionInput(\n definition: ServerFunctionDefinition<any, any, any, any>,\n input: unknown,\n): Promise<unknown> {\n const contract = definition.contract as ServerFunctionContract;\n const schemas: readonly CraftSchema[] = definition.inputSchemas ?? [\n contract.input,\n ];\n if (schemas.length === 1) {\n return validateInputSchema(contract.id, schemas[0], input);\n }\n\n const merged: Record<string, unknown> = {};\n for (const schema of schemas) {\n const value = await validateInputSchema(contract.id, schema, input);\n if (!isRecord(value)) {\n throw new Error(\n `CRAFT_SERVER_FUNCTION_INPUT_NOT_MERGEABLE: Server function \"${contract.id}\" combines several input schemas, so each one must produce an object.`,\n );\n }\n Object.assign(merged, value);\n }\n return merged;\n}\n\nasync function validateInputSchema(\n id: string,\n schema: CraftSchema,\n input: unknown,\n): Promise<unknown> {\n const result = await schema['~standard'].validate(input);\n if (result.issues) {\n throw new ServerFunctionInputError(id, result.issues);\n }\n return result.value;\n}\n\nfunction assertSupportedProtocol(version: unknown): void {\n if (version === undefined || version === 1) return;\n throw new ServerFunctionProtocolError(version);\n}\n\n/**\n * Valide le contexte envoyé par le navigateur.\n *\n * Deux canaux, tous deux issus du client et tous deux traités comme non\n * fiables : le schéma `clientContext` du contrat (ce que la chaîne de\n * middleware client publie), et les valeurs de chaque `requireClientDI(...)`.\n * Rien n'est fusionné dans le contexte de confiance produit par les middleware\n * serveur : le résultat vit dans son propre champ, `clientContext`.\n */\nasync function parseServerFunctionClientContext(\n definition: ServerFunctionDefinition<any, any, any, any>,\n raw: unknown,\n): Promise<Record<string, unknown> | undefined> {\n if (!requiresClientContext(definition)) return undefined;\n const id = definition.contract.id as string;\n if (raw === undefined || raw === null) {\n throw new ServerFunctionClientContextError(id, [\n {\n message:\n 'the function declares a client context but the request carried none.',\n },\n ]);\n }\n if (!isRecord(raw)) {\n throw new ServerFunctionClientContextError(id, [\n { message: 'the client context must be an object.' },\n ]);\n }\n\n const validated: Record<string, unknown> = {};\n for (const schema of definition.clientContextSchemas ?? []) {\n const result = await schema['~standard'].validate(raw);\n if (result.issues) {\n // Nommer le handshake fautif quand il y en a un : dans un journal, savoir\n // *quel* accord n'a pas été tenu vaut mieux que la seule liste des clés.\n const handshake = craftHandshakeName(schema);\n throw new ServerFunctionClientContextError(\n id,\n handshake === undefined\n ? result.issues\n : result.issues.map((issue) => ({\n message: `handshake \"${handshake}\": ${issue.message}`,\n })),\n );\n }\n if (!isRecord(result.value)) {\n throw new ServerFunctionClientContextError(id, [\n { message: 'a client context schema must produce an object.' },\n ]);\n }\n Object.assign(validated, result.value);\n }\n\n return validated;\n}\n\nexport type ServerFunctionFailure = {\n readonly _tag: string;\n readonly [key: string]: unknown;\n};\n\n/**\n * Sérialise un échec métier tagué (`Data.TaggedError` et assimilés) en objet\n * transportable. Effect rejette avec l'erreur elle-même, il n'y a donc pas de\n * `Cause` à déballer ici, et le core reste sans dépendance runtime sur Effect.\n */\nexport function toServerFunctionFailure(\n error: unknown,\n): ServerFunctionFailure | undefined {\n if (typeof error !== 'object' || error === null) return undefined;\n const tag = (error as { _tag?: unknown })._tag;\n if (typeof tag !== 'string') return undefined;\n\n const failure: Record<string, unknown> = { _tag: tag };\n for (const key of Object.getOwnPropertyNames(error)) {\n if (key === 'stack' || key === '_tag') continue;\n failure[key] = (error as Record<string, unknown>)[key];\n }\n return failure as ServerFunctionFailure;\n}\n\nfunction serverFunctionFailureStatus(failure: ServerFunctionFailure): number {\n const status =\n failure['status'] ??\n (isRecord(failure['payload']) ? failure['payload']['status'] : undefined);\n return typeof status === 'number' &&\n Number.isInteger(status) &&\n status >= 400 &&\n status <= 599\n ? status\n : 422;\n}\n\nasync function parseServerFunctionOutput(\n contract: ServerFunctionContract,\n output: unknown,\n): Promise<unknown> {\n if (!contract.output) return output;\n const result = await contract.output['~standard'].validate(output);\n if (result.issues) {\n throw new ServerFunctionOutputError(contract.id, result.issues);\n }\n return result.value;\n}\n"]}
@@ -0,0 +1,90 @@
1
+ import { type CraftInjector, type CraftProvider } from './host/craft-injector';
2
+ import type { BrandedServiceProvider, CraftServiceProvider, GetServiceDependencies, GetServiceReferenceOutput, ResolvedServiceOutput, ServiceBindings, ServiceMetaData, ServiceReference } from './craft-service';
3
+ import type { CallableShell, ConcreteServiceScope, DependencyNodeScope, DependencyTreeChildren, FlattenDependencyTree, RequirementScope, RootExposureKey, Simplify } from './craft-service.shared';
4
+ type GetServiceDependenciesTree<Target extends ServiceReference> = Target extends ServiceMetaData<any, any, any, any, infer Dependencies, any, any, any, any, any, boolean> ? Dependencies : GetServiceDependencies<Target>;
5
+ type ServiceDependencyChildren<Target extends ServiceReference> = GetServiceDependenciesTree<Target> extends {
6
+ dependencies: infer Dependencies extends object;
7
+ } ? Dependencies : {};
8
+ type FlattenedServiceTestingDependencyTree<Target extends ServiceReference> = FlattenDependencyTree<ServiceDependencyChildren<Target>>;
9
+ type DependencyNodeDerivedPropertiesUsed<Node> = Node extends {
10
+ derivedPropertiesUsed: infer Used extends object;
11
+ } ? Used : {};
12
+ type RequiredUsedMockImplementation<UsedProperties extends object> = Simplify<{
13
+ [Key in Extract<keyof UsedProperties, string>]-?: Key extends RootExposureKey ? UsedProperties[Key] extends (...args: any[]) => any ? CallableShell<UsedProperties[Key]> : never : UsedProperties[Key];
14
+ }>;
15
+ type MockImplementation<Output> = Simplify<(Output extends object ? Partial<{
16
+ [Key in Extract<keyof Output, string>]: Output[Key];
17
+ }> : {}) & (Output extends (...args: any[]) => any ? {
18
+ $self?: CallableShell<Output>;
19
+ } : {})>;
20
+ type DerivedMockImplementationForNode<Node> = Simplify<Record<string, unknown> & RequiredUsedMockImplementation<DependencyNodeDerivedPropertiesUsed<Node>>>;
21
+ type MockImplementationForNode<Node> = Simplify<[
22
+ keyof DependencyNodeDerivedPropertiesUsed<Node>
23
+ ] extends [never] ? Record<string, unknown> : DerivedMockImplementationForNode<Node>>;
24
+ type PublicMockShape<Implementation> = Implementation extends object ? Omit<Implementation, RootExposureKey> : {};
25
+ type MockRootCallable<Implementation> = NonNullable<Implementation> extends {
26
+ $self: infer Root extends (...args: any[]) => any;
27
+ } ? CallableShell<Root> : never;
28
+ type MockPublicValueFromImplementation<Implementation> = [
29
+ Implementation
30
+ ] extends [undefined] ? {} : [MockRootCallable<Implementation>] extends [never] ? PublicMockShape<NonNullable<Implementation>> : MockRootCallable<Implementation> & PublicMockShape<NonNullable<Implementation>>;
31
+ type ImplicitMockServiceOverride<Implementation extends object> = {
32
+ readonly kind: 'mock';
33
+ readonly implementation: Implementation;
34
+ readonly reference?: undefined;
35
+ };
36
+ type ExplicitMockServiceOverride<Reference extends ServiceReference = ServiceReference, Implementation extends object = object> = {
37
+ readonly kind: 'mock';
38
+ readonly reference: Reference;
39
+ readonly implementation: Implementation;
40
+ };
41
+ type AnyMockServiceOverride = ImplicitMockServiceOverride<any> | ExplicitMockServiceOverride<any, any>;
42
+ type OverrideForDependencyNode<Name extends string, Node> = ImplicitMockServiceOverride<MockImplementationForNode<Node>> | ExplicitMockServiceOverride<ServiceReference<Name, Extract<DependencyNodeScope<Node>, ConcreteServiceScope>>, MockImplementationForNode<Node>> | (DependencyNodeScope<Node> extends RequirementScope ? BrandedServiceProvider<Name, Extract<DependencyNodeScope<Node>, RequirementScope>> : never);
43
+ type MissingCoverageForTree<Tree extends object, Overrides> = {
44
+ [Name in Extract<keyof Tree, string>]: MissingCoverageForNode<Name, Tree[Name], Overrides>;
45
+ }[Extract<keyof Tree, string>];
46
+ type OverrideAtPath<Overrides, Name extends string> = Name extends keyof Overrides ? NonNullable<Overrides[Name]> : never;
47
+ type InvalidOverrideEntry<Target extends ServiceReference, Name extends string, Override> = [NonNullable<Override>] extends [never] ? never : Name extends keyof FlattenedServiceTestingDependencyTree<Target> ? NonNullable<Override> extends OverrideForDependencyNode<Name, FlattenedServiceTestingDependencyTree<Target>[Name]> ? never : Name : Name;
48
+ type InvalidOverrideEntries<Target extends ServiceReference, Overrides> = {
49
+ [Name in Extract<keyof Overrides, string>]: InvalidOverrideEntry<Target, Name, Overrides[Name]>;
50
+ }[Extract<keyof Overrides, string>];
51
+ type AssertValidServiceTestOverrides<Target extends ServiceReference, Overrides> = [InvalidOverrideEntries<Target, Overrides>] extends [never] ? {} : {
52
+ ERROR_invalid_service_test_overrides: InvalidOverrideEntries<Target, Overrides>;
53
+ };
54
+ type MissingCoverageForNode<Name extends string, Node, Overrides> = [
55
+ OverrideAtPath<Overrides, Name>
56
+ ] extends [never] ? DependencyNodeScope<Node> extends RequirementScope ? Name : MissingCoverageForTree<DependencyTreeChildren<Node>, Overrides> : OverrideAtPath<Overrides, Name> extends AnyMockServiceOverride ? never : OverrideAtPath<Overrides, Name> extends BrandedServiceProvider<Name, RequirementScope> ? MissingCoverageForTree<DependencyTreeChildren<Node>, Overrides> : DependencyNodeScope<Node> extends RequirementScope ? Name : MissingCoverageForTree<DependencyTreeChildren<Node>, Overrides>;
57
+ type AssertServiceTestCoverage<Target extends ServiceReference, Overrides> = [
58
+ MissingCoverageForTree<ServiceDependencyChildren<Target>, Overrides>
59
+ ] extends [never] ? {} : {
60
+ ERROR_missing_service_test_overrides: MissingCoverageForTree<ServiceDependencyChildren<Target>, Overrides>;
61
+ };
62
+ type ResolvedMockValueForNode<_Node, Override> = Override extends ImplicitMockServiceOverride<infer Implementation> ? MockPublicValueFromImplementation<Implementation> : Override extends ExplicitMockServiceOverride<any, infer Implementation> ? MockPublicValueFromImplementation<Implementation> : never;
63
+ type ExtractMockOverride<Override> = Extract<NonNullable<Override>, AnyMockServiceOverride>;
64
+ type CreateAngularTestMocks<Target extends ServiceReference, Overrides> = Simplify<{
65
+ [Name in keyof Overrides as [ExtractMockOverride<Overrides[Name]>] extends [
66
+ never
67
+ ] ? never : Name]: Name extends keyof FlattenedServiceTestingDependencyTree<Target> ? ResolvedMockValueForNode<FlattenedServiceTestingDependencyTree<Target>[Name], ExtractMockOverride<Overrides[Name]>> : never;
68
+ }>;
69
+ export declare function mock<Implementation extends object>(implementation: Implementation): ImplicitMockServiceOverride<Implementation>;
70
+ export declare function mock<Reference extends ServiceReference, Implementation extends MockImplementation<GetServiceReferenceOutput<Reference>>>(reference: Reference, implementation: Implementation): ExplicitMockServiceOverride<Reference, Implementation>;
71
+ /** Flush queued microtasks and the host effect scheduler without TestBed.tick(). */
72
+ export declare function flushCraftTest(injector: CraftInjector): Promise<void>;
73
+ export declare function setupCraftServiceTest(): {
74
+ injector: CraftInjector;
75
+ };
76
+ export declare function setupCraftServiceTest(options: {
77
+ providers: readonly CraftProvider[];
78
+ }): {
79
+ injector: CraftInjector;
80
+ };
81
+ export declare function setupCraftServiceTest<Target extends ServiceReference, const Overrides extends Record<string, unknown>, Bindings extends ServiceBindings<Target> | undefined = undefined>(target: Target, overrides: Overrides & AssertValidServiceTestOverrides<Target, Overrides> & AssertServiceTestCoverage<Target, Overrides>, options?: {
82
+ bindings?: Bindings;
83
+ providers?: CraftServiceProvider[];
84
+ }): {
85
+ sut: ResolvedServiceOutput<Target, Bindings>;
86
+ mocks: CreateAngularTestMocks<Target, Overrides>;
87
+ injector: CraftInjector;
88
+ };
89
+ export {};
90
+ //# sourceMappingURL=setup-craft-service-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-craft-service-test.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/setup-craft-service-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ import { createEnvironmentInjector, ErrorHandler, getCraftRootDefaultProviders, inject, Injector, runInInjectionContext, ɵEffectScheduler, ɵINJECTOR_SCOPE, } from './host/craft-compat';
2
+ import { createExposedServiceValue, getServiceMetaData, SERVICE_RUNTIME_OVERRIDES, } from './craft-service';
3
+ import { CRAFT_SERVICE_PROVIDER_BRAND } from './craft-service.shared';
4
+ import { ɵcraftInjectorFromHost } from './host/craft-injector-host';
5
+ import { createCraftInjector, } from './host/craft-injector';
6
+ import { APP_SNAPSHOT_REGISTRY, AppSnapshotRegistry } from './take-app-snapshot';
7
+ function createMockPublicValue(implementation) {
8
+ return implementation === undefined
9
+ ? {}
10
+ : createExposedServiceValue(implementation);
11
+ }
12
+ function getProviderOverrideMeta(value) {
13
+ if (typeof value !== 'object' ||
14
+ value === null ||
15
+ !(CRAFT_SERVICE_PROVIDER_BRAND in value)) {
16
+ return undefined;
17
+ }
18
+ return Reflect.get(value, CRAFT_SERVICE_PROVIDER_BRAND);
19
+ }
20
+ function assertOverrideReferenceName(name, reference) {
21
+ const metaData = getServiceMetaData(reference);
22
+ if (metaData.name !== name) {
23
+ throw new Error(`Test override "${name}" does not match craftService/toCraftService reference "${metaData.name}".`);
24
+ }
25
+ }
26
+ function assertProviderOverrideName(name, provider) {
27
+ const metaData = getProviderOverrideMeta(provider);
28
+ if (!metaData) {
29
+ throw new Error(`Expected a raw provider returned by provide${name}(...).`);
30
+ }
31
+ if (metaData.name !== name) {
32
+ throw new Error(`Test override "${name}" does not match provider value for "${metaData.name}".`);
33
+ }
34
+ }
35
+ function isMockServiceOverride(override) {
36
+ return (typeof override === 'object' &&
37
+ override !== null &&
38
+ 'kind' in override &&
39
+ override.kind === 'mock');
40
+ }
41
+ export function mock(referenceOrImplementation, implementation) {
42
+ if (implementation === undefined) {
43
+ return {
44
+ kind: 'mock',
45
+ implementation: referenceOrImplementation,
46
+ };
47
+ }
48
+ return {
49
+ kind: 'mock',
50
+ reference: referenceOrImplementation,
51
+ implementation: implementation,
52
+ };
53
+ }
54
+ /**
55
+ * Sets up a `craftService` or `toCraftService` in an isolated injector with
56
+ * typed dependency coverage.
57
+ *
58
+ * `setupCraftServiceTest` reads the runtime metadata attached to an inject helper
59
+ * or a metadata object and instantiates the target inside an isolated injection
60
+ * context. Its type system checks the dependency tree so required child services
61
+ * are either:
62
+ *
63
+ * - mocked through `mock(...)`
64
+ * - covered by the real raw provider returned by `provideX(...)`
65
+ * - or pruned by mocking one of their ancestors
66
+ *
67
+ * Global dependencies remain optional to override, but can still be mocked. For
68
+ * real Angular providers such as `provideRouter(...)`, use the `options.providers`
69
+ * array.
70
+ *
71
+ * The returned `sut` is the fully injected service output. The returned `mocks`
72
+ * object contains the public mock values actually injected into the test tree.
73
+ *
74
+ * @example
75
+ * Mock a required child service
76
+ * ```ts
77
+ * const { sut, mocks } = setupCraftServiceTest(CounterExtended, {
78
+ * Counter: mock({
79
+ * $self: vi.fn(() => 41),
80
+ * increment: vi.fn(),
81
+ * }),
82
+ * });
83
+ *
84
+ * sut.incrementCounter();
85
+ * expect(mocks.Counter.increment).toHaveBeenCalledTimes(1);
86
+ * ```
87
+ *
88
+ * @example
89
+ * Use the real router while keeping explicit Angular providers in the test setup
90
+ * ```ts
91
+ * const { sut } = setupCraftServiceTest(Navigation, {}, {
92
+ * providers: [provideRouter([])],
93
+ * });
94
+ * ```
95
+ *
96
+ * @example
97
+ * Force explicit coverage for a manually provided dependency
98
+ * ```ts
99
+ * const { sut } = setupCraftServiceTest(Navigation, {
100
+ * Router: provideAppRouter(),
101
+ * });
102
+ * ```
103
+ */
104
+ function createAngularHostCraftInjector(extraProviders = []) {
105
+ const environmentInjector = createEnvironmentInjector([
106
+ ...getCraftRootDefaultProviders(),
107
+ { provide: ɵINJECTOR_SCOPE, useValue: 'root' },
108
+ { provide: ErrorHandler, useClass: ErrorHandler },
109
+ { provide: APP_SNAPSHOT_REGISTRY, useValue: new AppSnapshotRegistry() },
110
+ ...extraProviders,
111
+ ], Injector.NULL, 'setupCraftServiceTest');
112
+ return {
113
+ environmentInjector,
114
+ injector: ɵcraftInjectorFromHost(environmentInjector),
115
+ };
116
+ }
117
+ /** Flush queued microtasks and the host effect scheduler without TestBed.tick(). */
118
+ export async function flushCraftTest(injector) {
119
+ const flushScheduler = () => {
120
+ injector.run(() => {
121
+ inject(ɵEffectScheduler).flush();
122
+ });
123
+ };
124
+ for (let index = 0; index < 5; index += 1) {
125
+ flushScheduler();
126
+ await Promise.resolve();
127
+ }
128
+ flushScheduler();
129
+ }
130
+ export function setupCraftServiceTest(targetOrOptions, overrides, options) {
131
+ if (arguments.length === 0) {
132
+ return {
133
+ injector: createAngularHostCraftInjector().injector,
134
+ };
135
+ }
136
+ if (arguments.length === 1) {
137
+ const nativeOptions = targetOrOptions;
138
+ return {
139
+ injector: createCraftInjector(nativeOptions.providers),
140
+ };
141
+ }
142
+ const target = targetOrOptions;
143
+ const internalMetaData = getServiceMetaData(target);
144
+ const providers = [...(options?.providers ?? [])];
145
+ const runtimeOverrides = new Map();
146
+ const mocks = {};
147
+ const hasExplicitTargetProvider = providers.some((provider) => getProviderOverrideMeta(provider)?.name === internalMetaData.name);
148
+ if (internalMetaData.providedIn === 'toProvide' ||
149
+ internalMetaData.providedIn === 'manuallyProvidedAtRoot') {
150
+ if (!('provide' in internalMetaData) ||
151
+ typeof internalMetaData.provide !== 'function') {
152
+ throw new Error(`Missing provide helper for craftService/toCraftService "${internalMetaData.name}" in setupCraftServiceTest.`);
153
+ }
154
+ if (!hasExplicitTargetProvider) {
155
+ if (Reflect.get(internalMetaData, 'usesProvidedInput') === true) {
156
+ throw new Error(`setupCraftServiceTest requires an explicit provider for "${internalMetaData.name}" because it uses $provided.`);
157
+ }
158
+ providers.push(internalMetaData.provide());
159
+ }
160
+ }
161
+ for (const [name, override] of Object.entries(overrides ?? {})) {
162
+ if (!override) {
163
+ continue;
164
+ }
165
+ if (!isMockServiceOverride(override)) {
166
+ assertProviderOverrideName(name, override);
167
+ providers.push(override);
168
+ continue;
169
+ }
170
+ if (override.reference) {
171
+ assertOverrideReferenceName(name, override.reference);
172
+ }
173
+ const publicValue = createMockPublicValue(override.implementation);
174
+ runtimeOverrides.set(name, {
175
+ kind: 'useValue',
176
+ value: publicValue,
177
+ });
178
+ mocks[name] = publicValue;
179
+ }
180
+ providers.push({
181
+ provide: SERVICE_RUNTIME_OVERRIDES,
182
+ useValue: runtimeOverrides,
183
+ });
184
+ const { environmentInjector, injector } = createAngularHostCraftInjector(providers);
185
+ return injector.run(() => runInInjectionContext(environmentInjector, () => ({
186
+ sut: options?.bindings === undefined
187
+ ? internalMetaData.inject()
188
+ : internalMetaData.inject(options.bindings),
189
+ mocks,
190
+ injector,
191
+ })));
192
+ }
193
+ //# sourceMappingURL=setup-craft-service-test.js.map