@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,189 @@
1
+ import { assertMiddlewareId, flattenMiddlewareGraph, } from './middleware-schema-shared';
2
+ export { assertMiddlewareId, };
3
+ export function portableServerMiddleware(id, run) {
4
+ assertMiddlewareId(id);
5
+ return Object.freeze({
6
+ kind: 'server-function-middleware',
7
+ id,
8
+ inputs: [],
9
+ clientContexts: [],
10
+ dependencies: [],
11
+ run,
12
+ });
13
+ }
14
+ /** Déclare dans un pipe de middleware la forme attendue du contexte client. */
15
+ export function clientContext(schema) {
16
+ return Object.freeze({
17
+ kind: 'server-function-client-context',
18
+ schema,
19
+ });
20
+ }
21
+ export function craftMiddleware(id) {
22
+ assertMiddlewareId(id);
23
+ return makeBuilder(id, [], [], [], []);
24
+ }
25
+ function makeBuilder(id, inputs, dependencies, provides, clientContexts) {
26
+ return {
27
+ pipe(...members) {
28
+ let nextInputs = inputs;
29
+ let nextDependencies = dependencies;
30
+ let nextProvides = provides;
31
+ let nextClientContexts = clientContexts;
32
+ for (const member of members) {
33
+ if (isClientContextDeclaration(member)) {
34
+ nextClientContexts = [...nextClientContexts, member.schema];
35
+ continue;
36
+ }
37
+ nextInputs =
38
+ member.kind === 'server-function-middleware'
39
+ ? [...nextInputs, ...member.inputs]
40
+ : nextInputs;
41
+ nextDependencies = [...nextDependencies, member];
42
+ nextProvides =
43
+ member.kind === 'client-function-middleware'
44
+ ? [...nextProvides, ...member.provides]
45
+ : nextProvides;
46
+ nextClientContexts =
47
+ member.kind === 'server-function-middleware'
48
+ ? [...nextClientContexts, ...member.clientContexts]
49
+ : nextClientContexts;
50
+ }
51
+ return makeBuilder(id, nextInputs, nextDependencies, nextProvides, nextClientContexts);
52
+ },
53
+ use(middleware) {
54
+ return makeBuilder(id, middleware.kind === 'server-function-middleware'
55
+ ? [...inputs, ...middleware.inputs]
56
+ : inputs, [...dependencies, middleware], middleware.kind === 'client-function-middleware'
57
+ ? [...provides, ...middleware.provides]
58
+ : provides, middleware.kind === 'server-function-middleware'
59
+ ? [...clientContexts, ...middleware.clientContexts]
60
+ : clientContexts);
61
+ },
62
+ input(schema) {
63
+ return makeBuilder(id, [...inputs, schema], dependencies, provides, clientContexts);
64
+ },
65
+ provides(schema) {
66
+ return makeBuilder(id, inputs, dependencies, [...provides, schema], clientContexts);
67
+ },
68
+ clientContext(schema) {
69
+ return makeBuilder(id, inputs, dependencies, provides, [
70
+ ...clientContexts,
71
+ schema,
72
+ ]);
73
+ },
74
+ server(run) {
75
+ return Object.freeze({
76
+ kind: 'server-function-middleware',
77
+ id,
78
+ inputs,
79
+ clientContexts,
80
+ dependencies: assertSameFamily(id, dependencies, 'server-function-middleware'),
81
+ run,
82
+ });
83
+ },
84
+ client(run) {
85
+ return Object.freeze({
86
+ kind: 'client-function-middleware',
87
+ id,
88
+ provides,
89
+ dependencies: assertSameFamily(id, dependencies, 'client-function-middleware'),
90
+ run,
91
+ });
92
+ },
93
+ };
94
+ }
95
+ function isClientContextDeclaration(value) {
96
+ return value.kind === 'server-function-client-context';
97
+ }
98
+ /**
99
+ * Un middleware client et un middleware serveur ne s'exécutent ni au même
100
+ * endroit ni avec le même moteur : les composer serait un contresens, et le
101
+ * runtime ne saurait pas quoi faire de la dépendance étrangère.
102
+ */
103
+ function assertSameFamily(id, dependencies, kind) {
104
+ for (const dependency of dependencies) {
105
+ if (dependency.kind !== kind) {
106
+ throw new Error(`Middleware "${id}" is a ${kind === 'client-function-middleware' ? 'client' : 'server'} middleware but depends on "${dependency.id}", which is a ${dependency.kind === 'client-function-middleware' ? 'client' : 'server'} middleware. A chain cannot mix both families.`);
107
+ }
108
+ }
109
+ return dependencies;
110
+ }
111
+ export function isCraftMiddleware(value) {
112
+ return (typeof value === 'object' &&
113
+ value !== null &&
114
+ value.kind === 'server-function-middleware');
115
+ }
116
+ /** Aplatit les dépendances (profondeur d'abord) et déduplique par identifiant. */
117
+ export function flattenMiddlewares(middlewares) {
118
+ return flattenMiddlewareGraph(middlewares);
119
+ }
120
+ /** Schémas d'input collectés le long de la chaîne, dédupliqués, contrat en tête. */
121
+ export function collectMiddlewareSchemas(contractInput, middlewares) {
122
+ const schemas = [contractInput];
123
+ for (const middleware of flattenMiddlewares(middlewares)) {
124
+ for (const schema of middleware.inputs) {
125
+ if (!schemas.includes(schema))
126
+ schemas.push(schema);
127
+ }
128
+ }
129
+ return schemas;
130
+ }
131
+ /** Même mécanique, appliquée au canal du contexte client. */
132
+ export function collectMiddlewareClientContextSchemas(contractClientContext, middlewares) {
133
+ const schemas = contractClientContext
134
+ ? [contractClientContext]
135
+ : [];
136
+ for (const middleware of flattenMiddlewares(middlewares)) {
137
+ for (const schema of middleware.clientContexts ?? []) {
138
+ if (!schemas.includes(schema))
139
+ schemas.push(schema);
140
+ }
141
+ }
142
+ return schemas;
143
+ }
144
+ /**
145
+ * Compose la chaîne en oignon. Un middleware peut soit retourner directement
146
+ * `{ context }` (ou une Promise de cette enveloppe), soit retourner un
147
+ * programme opaque — typiquement un Effect — qui doit appeler `next()` pour
148
+ * composer la suite. Aucun combinateur Effect n'est utilisé ici : le core reste
149
+ * donc sans dépendance runtime sur Effect.
150
+ */
151
+ export function runMiddlewareChain(middlewares, input, handler, clientContext = {}, resolve = () => {
152
+ throw new Error('This server middleware requires DI, but no server runtime resolver was provided.');
153
+ }) {
154
+ const chain = flattenMiddlewares(middlewares);
155
+ const step = (index, context) => {
156
+ const middleware = chain[index];
157
+ if (!middleware)
158
+ return handler({ input, context });
159
+ const result = middleware.run({
160
+ input: input,
161
+ context,
162
+ clientContext: clientContext,
163
+ resolve,
164
+ next: ((patch) => step(index + 1, { ...context, ...patch.context })),
165
+ });
166
+ if (isMiddlewareContextPatch(result)) {
167
+ return step(index + 1, { ...context, ...result.context });
168
+ }
169
+ if (isPromiseLike(result)) {
170
+ return result.then((patch) => step(index + 1, { ...context, ...patch.context }));
171
+ }
172
+ return result;
173
+ };
174
+ return step(0, {});
175
+ }
176
+ function isMiddlewareContextPatch(value) {
177
+ return (typeof value === 'object' &&
178
+ value !== null &&
179
+ 'context' in value &&
180
+ typeof value.context === 'object' &&
181
+ value.context !== null);
182
+ }
183
+ function isPromiseLike(value) {
184
+ return (typeof value === 'object' &&
185
+ value !== null &&
186
+ 'then' in value &&
187
+ typeof value.then === 'function');
188
+ }
189
+ //# sourceMappingURL=server-function-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function-middleware.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/server-function-middleware.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertMiddlewareId,\n flattenMiddlewareGraph,\n type MergeOptionalSchemaOutputs,\n type MergeSchemaInputs,\n type MergeSchemaOutputs,\n type MiddlewareContext,\n type MiddlewareDownstreamError,\n type MiddlewareResult,\n type OverwriteContext,\n} from './middleware-schema-shared';\nimport type {\n AnyCraftClientMiddleware,\n ClientMiddlewareContextOf,\n ClientMiddlewareProvidesOf,\n ClientMiddlewareRunContext,\n CraftClientMiddleware,\n} from './client-function-middleware';\nimport type { CraftSchema } from './schema-validation';\nimport type { ServerFunctionToken } from './client-di-requirement';\nimport type * as Effect from 'effect/Effect';\n\nexport {\n assertMiddlewareId,\n type MergeOptionalSchemaOutputs,\n type MergeSchemaInputs,\n type MergeSchemaOutputs,\n type MiddlewareContext,\n type MiddlewareDownstreamError,\n type MiddlewareResult,\n type OverwriteContext,\n};\n\n/** Concatène les schémas de tous les middleware d'une chaîne, dépendances comprises. */\nexport type MiddlewareSchemasOfAll<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = Middlewares extends readonly [\n infer Head extends AnyCraftMiddleware,\n ...infer Tail extends readonly AnyCraftMiddleware[],\n]\n ? readonly [...MiddlewareSchemasOf<Head>, ...MiddlewareSchemasOfAll<Tail>]\n : readonly [];\n\nexport type MiddlewareProgram = unknown;\n\n/**\n * Enrichissement direct du contexte d'un middleware synchrone (ou Promise).\n *\n * Cette forme est volontairement distincte de `MiddlewareResult`, qui reste\n * le résultat opaque produit par `next()` pour les programmes Effect.\n */\nexport type MiddlewareContextPatch<\n Context extends MiddlewareContext = MiddlewareContext,\n> = {\n readonly context: Context;\n};\n\nexport type MiddlewareDirectResult<Context extends MiddlewareContext> =\n | MiddlewareContextPatch<Context>\n | PromiseLike<MiddlewareContextPatch<Context>>;\n\nexport type MiddlewareNext<\n Program = Effect.Effect<\n unknown,\n MiddlewareDownstreamError,\n never\n >,\n> = <Context extends MiddlewareContext>(patch: {\n readonly context: Context;\n}) => Program extends Effect.Effect<unknown, infer Error, infer Requirements>\n ? Effect.Effect<MiddlewareResult<Context>, Error, Requirements>\n : Program;\n\nexport type MiddlewareRunContext<\n Schemas extends readonly CraftSchema[],\n ContextIn extends MiddlewareContext,\n ClientSchemas extends readonly CraftSchema[] = readonly [],\n Program = Effect.Effect<\n MiddlewareResult<MiddlewareContext>,\n MiddlewareDownstreamError,\n never\n >,\n> = {\n readonly input: MergeSchemaOutputs<Schemas>;\n readonly context: ContextIn;\n /**\n * Ce que le middleware a déclaré attendre du navigateur, via\n * `clientContext(schema)` dans le `.pipe(...)`, validé par le registre avant l'entrée dans la\n * chaîne. Donnée **non fiable** par nature : c'est précisément ce qu'un\n * middleware d'autorisation est là pour confronter à la vraie session.\n */\n readonly clientContext: MergeOptionalSchemaOutputs<ClientSchemas>;\n readonly next: MiddlewareNext<Program>;\n /** Résout une dépendance dans le runtime serveur de la server function. */\n readonly resolve: <Value>(token: ServerFunctionToken<Value>) => Value;\n};\n\nexport interface CraftMiddleware<\n Id extends string = string,\n Schemas extends readonly CraftSchema[] = readonly CraftSchema[],\n ContextOut extends MiddlewareContext = MiddlewareContext,\n Error = never,\n Requirements = never,\n ClientSchemas extends readonly CraftSchema[] = readonly CraftSchema[],\n Program = Effect.Effect<unknown, Error, Requirements>,\n> {\n readonly kind: 'server-function-middleware';\n readonly id: Id;\n readonly inputs: Schemas;\n /** Schémas du contexte client exigés, dépendances comprises. */\n readonly clientContexts: ClientSchemas;\n readonly dependencies: readonly AnyCraftMiddleware[];\n readonly run: (\n context: MiddlewareRunContext<\n Schemas,\n MiddlewareContext,\n ClientSchemas,\n Program\n >,\n ) => Program | MiddlewareDirectResult<ContextOut>;\n /** Porteur type-only du contexte publié, dépendances transitives comprises. */\n readonly __contextOut?: ContextOut;\n /** Porteur type-only du programme exécuté par ce middleware. */\n readonly __program?: Program;\n}\n\n/**\n * Middleware whose program type is owned by the application rather than by\n * core. The first generic is the only one an adapter needs to specialise.\n */\nexport type PortableServerMiddleware<\n Program = unknown,\n Id extends string = string,\n Schemas extends readonly CraftSchema[] = readonly CraftSchema[],\n ContextOut extends MiddlewareContext = MiddlewareContext,\n Error = unknown,\n Requirements = unknown,\n ClientSchemas extends readonly CraftSchema[] = readonly CraftSchema[],\n> = CraftMiddleware<\n Id,\n Schemas,\n ContextOut,\n Error,\n Requirements,\n ClientSchemas,\n Program\n>;\n\nexport function portableServerMiddleware<const Id extends string, Program>(\n id: Id,\n run: (\n context: MiddlewareRunContext<\n readonly [],\n Record<never, never>,\n readonly [],\n Program\n >,\n ) => Program,\n): PortableServerMiddleware<\n Program,\n Id,\n readonly [],\n MiddlewareContext,\n never,\n never,\n readonly []\n> {\n assertMiddlewareId(id);\n return Object.freeze({\n kind: 'server-function-middleware' as const,\n id,\n inputs: [] as const,\n clientContexts: [] as const,\n dependencies: [] as const,\n run,\n });\n}\n\nexport type AnyCraftMiddleware = CraftMiddleware<\n string,\n readonly CraftSchema[],\n any,\n any,\n any,\n readonly CraftSchema[],\n any\n>;\n\n/**\n * Déclaration portable d'un fragment de contexte attendu du navigateur.\n *\n * Cette valeur est une insertion de déclaration, pas un middleware exécutable :\n * elle enrichit l'état du builder jusqu'au terminal `.server(...)`.\n */\nexport interface CraftClientContextDeclaration<\n Schema extends CraftSchema = CraftSchema,\n> {\n readonly kind: 'server-function-client-context';\n readonly schema: Schema;\n}\n\nexport type AnyCraftMiddlewarePipeMember =\n | AnyCraftMiddleware\n | AnyCraftClientMiddleware\n | CraftClientContextDeclaration;\n\n/** Déclare dans un pipe de middleware la forme attendue du contexte client. */\nexport function clientContext<Schema extends CraftSchema>(\n schema: Schema,\n): CraftClientContextDeclaration<Schema> {\n return Object.freeze({\n kind: 'server-function-client-context' as const,\n schema,\n });\n}\n\nexport type MiddlewareClientContextsOf<Middleware> =\n Middleware extends CraftMiddleware<\n any,\n any,\n any,\n any,\n any,\n infer ClientSchemas,\n any\n >\n ? ClientSchemas\n : readonly [];\n\n/** Schémas de contexte client de toute une chaîne, dépendances comprises. */\nexport type MiddlewareClientContextsOfAll<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = Middlewares extends readonly [\n infer Head extends AnyCraftMiddleware,\n ...infer Tail extends readonly AnyCraftMiddleware[],\n]\n ? readonly [\n ...MiddlewareClientContextsOf<Head>,\n ...MiddlewareClientContextsOfAll<Tail>,\n ]\n : readonly [];\n\nexport type MiddlewareSchemasOf<Middleware> =\n Middleware extends CraftMiddleware<\n any,\n infer Schemas,\n any,\n any,\n any,\n any,\n any\n >\n ? Schemas\n : readonly [];\n\nexport type MiddlewareContextOf<Middleware> =\n Middleware extends CraftMiddleware<\n any,\n any,\n infer Context,\n any,\n any,\n any,\n any\n >\n ? Context\n : never;\n\nexport type MiddlewareErrorOf<Middleware> =\n Middleware extends CraftMiddleware<any, any, any, infer Error, any, any, any>\n ? Error\n : never;\n\nexport type MiddlewareRequirementsOf<Middleware> =\n Middleware extends CraftMiddleware<\n any,\n any,\n any,\n any,\n infer Requirements,\n any,\n any\n >\n ? Requirements\n : never;\n\n/**\n * Fold ordonné des contextes : le dernier middleware gagne. Les dépendances\n * transitives sont déjà aplaties dans le contexte publié par chaque middleware,\n * le fold reste donc à un seul niveau.\n */\nexport type MergedMiddlewareContext<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = Middlewares extends readonly [\n infer Head extends AnyCraftMiddleware,\n ...infer Tail extends readonly AnyCraftMiddleware[],\n]\n ? OverwriteContext<MiddlewareContextOf<Head>, MergedMiddlewareContext<Tail>>\n : Record<never, never>;\n\nexport type MergedMiddlewareError<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = MiddlewareErrorOf<Middlewares[number]>;\n\nexport type MergedMiddlewareRequirements<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = MiddlewareRequirementsOf<Middlewares[number]>;\n\ntype CraftMiddlewareBuilderState = {\n readonly schemas: readonly CraftSchema[];\n readonly contextIn: MiddlewareContext;\n readonly error: unknown;\n readonly requirements: unknown;\n readonly provides: readonly CraftSchema[];\n readonly clientSchemas: readonly CraftSchema[];\n};\n\ntype ApplyCraftMiddlewarePipeMember<\n State extends CraftMiddlewareBuilderState,\n Member extends AnyCraftMiddlewarePipeMember,\n> = Member extends AnyCraftMiddleware\n ? {\n readonly schemas: readonly [\n ...State['schemas'],\n ...MiddlewareSchemasOf<Member>,\n ];\n readonly contextIn: OverwriteContext<\n State['contextIn'],\n MiddlewareContextOf<Member>\n >;\n readonly error: State['error'] | MiddlewareErrorOf<Member>;\n readonly requirements:\n | State['requirements']\n | MiddlewareRequirementsOf<Member>;\n readonly provides: readonly [\n ...State['provides'],\n ...ClientMiddlewareProvidesOf<Member>,\n ];\n readonly clientSchemas: readonly [\n ...State['clientSchemas'],\n ...MiddlewareClientContextsOf<Member>,\n ];\n }\n : Member extends AnyCraftClientMiddleware\n ? {\n readonly schemas: State['schemas'];\n readonly contextIn: OverwriteContext<\n State['contextIn'],\n ClientMiddlewareContextOf<Member>\n >;\n readonly error: State['error'];\n readonly requirements: State['requirements'];\n readonly provides: readonly [\n ...State['provides'],\n ...ClientMiddlewareProvidesOf<Member>,\n ];\n readonly clientSchemas: State['clientSchemas'];\n }\n : Member extends CraftClientContextDeclaration<infer Schema>\n ? {\n readonly schemas: State['schemas'];\n readonly contextIn: State['contextIn'];\n readonly error: State['error'];\n readonly requirements: State['requirements'];\n readonly provides: State['provides'];\n readonly clientSchemas: readonly [...State['clientSchemas'], Schema];\n }\n : State;\n\ntype ApplyCraftMiddlewarePipe<\n State extends CraftMiddlewareBuilderState,\n Members extends readonly AnyCraftMiddlewarePipeMember[],\n> = Members extends readonly [\n infer Head extends AnyCraftMiddlewarePipeMember,\n ...infer Tail extends readonly AnyCraftMiddlewarePipeMember[],\n]\n ? ApplyCraftMiddlewarePipe<\n ApplyCraftMiddlewarePipeMember<State, Head>,\n Tail\n >\n : State;\n\ntype CraftMiddlewareBuilderFromState<\n Id extends string,\n State extends CraftMiddlewareBuilderState,\n> = CraftMiddlewareBuilder<\n Id,\n State['schemas'],\n State['contextIn'],\n State['error'],\n State['requirements'],\n State['provides'],\n State['clientSchemas']\n>;\n\nexport interface CraftMiddlewareBuilder<\n Id extends string,\n Schemas extends readonly CraftSchema[],\n ContextIn extends MiddlewareContext,\n Error,\n Requirements,\n Provides extends readonly CraftSchema[] = readonly [],\n ClientSchemas extends readonly CraftSchema[] = readonly [],\n> {\n /**\n * Accumule des middleware et des déclarations dans l'état du builder.\n * Chaque membre enrichit ce que le terminal `.server(...)` recevra : un\n * middleware ajoute ses entrées, son contexte et ses dépendances ;\n * `clientContext(schema)` ajoute une forme attendue du navigateur.\n */\n readonly pipe: <\n const Members extends readonly AnyCraftMiddlewarePipeMember[],\n >(\n ...members: Members\n ) => CraftMiddlewareBuilderFromState<\n Id,\n ApplyCraftMiddlewarePipe<\n {\n readonly schemas: Schemas;\n readonly contextIn: ContextIn;\n readonly error: Error;\n readonly requirements: Requirements;\n readonly provides: Provides;\n readonly clientSchemas: ClientSchemas;\n },\n Members\n >\n >;\n /**\n * Déclare une dépendance : son contexte, ses schémas et ses canaux sont\n * hérités. Les deux familles sont acceptées, mais pas mélangées : le\n * terminal (`.server` ou `.client`) refuse une dépendance de l'autre famille.\n */\n readonly use: {\n <Middleware extends AnyCraftMiddleware>(\n middleware: Middleware,\n ): CraftMiddlewareBuilder<\n Id,\n readonly [...Schemas, ...MiddlewareSchemasOf<Middleware>],\n OverwriteContext<ContextIn, MiddlewareContextOf<Middleware>>,\n Error | MiddlewareErrorOf<Middleware>,\n Requirements | MiddlewareRequirementsOf<Middleware>,\n Provides,\n readonly [...ClientSchemas, ...MiddlewareClientContextsOf<Middleware>]\n >;\n <Middleware extends AnyCraftClientMiddleware>(\n middleware: Middleware,\n ): CraftMiddlewareBuilder<\n Id,\n Schemas,\n OverwriteContext<ContextIn, ClientMiddlewareContextOf<Middleware>>,\n Error,\n Requirements,\n readonly [...Provides, ...ClientMiddlewareProvidesOf<Middleware>],\n ClientSchemas\n >;\n };\n /** Ajoute un fragment d'input, fusionné dans celui de la server function. */\n readonly input: <Schema extends CraftSchema>(\n schema: Schema,\n ) => CraftMiddlewareBuilder<\n Id,\n readonly [...Schemas, Schema],\n ContextIn,\n Error,\n Requirements,\n Provides,\n ClientSchemas\n >;\n /**\n * Déclare ce que ce middleware **serveur** attend du navigateur.\n *\n * Le schéma remonte dans le contexte client attendu par toute server function\n * qui l'utilise — même mécanique que la fusion des schémas d'input. Le\n * registre le valide en amont de la chaîne, et le middleware le lit sous\n * `clientContext`, séparé de `context` : c'est une déclaration du client, à\n * confronter à la session, jamais à accepter telle quelle.\n */\n readonly clientContext: <Schema extends CraftSchema>(\n schema: Schema,\n ) => CraftMiddlewareBuilder<\n Id,\n Schemas,\n ContextIn,\n Error,\n Requirements,\n Provides,\n readonly [...ClientSchemas, Schema]\n >;\n /**\n * Déclare ce qu'un middleware **client** publie dans le contexte transporté.\n * Ce schéma est le contrat lisible par le serveur : il valide la sortie de la\n * chaîne côté navigateur, et c'est lui que le graphe d'architecture compare\n * au `clientContext` attendu par la server function.\n */\n readonly provides: <Schema extends CraftSchema>(\n schema: Schema,\n ) => CraftMiddlewareBuilder<\n Id,\n Schemas,\n ContextIn,\n Error,\n Requirements,\n readonly [...Provides, Schema],\n ClientSchemas\n >;\n readonly server: {\n /**\n * Forme courte : un enrichissement direct est fusionné puis la chaîne\n * continue automatiquement. Pour un programme Effect, utiliser la\n * surcharge suivante et appeler `next()`.\n */\n <ContextOut extends MiddlewareContext>(\n run: (\n context: MiddlewareRunContext<Schemas, ContextIn, ClientSchemas>,\n ) => MiddlewareDirectResult<ContextOut>,\n ): CraftMiddleware<\n Id,\n Schemas,\n OverwriteContext<ContextIn, ContextOut>,\n Error,\n Requirements,\n ClientSchemas,\n MiddlewareDirectResult<ContextOut>\n >;\n <ContextOut extends MiddlewareContext, RunError, RunRequirements>(\n run: (\n context: MiddlewareRunContext<Schemas, ContextIn, ClientSchemas>,\n ) => Effect.Effect<\n MiddlewareResult<ContextOut>,\n RunError,\n RunRequirements\n >,\n ): CraftMiddleware<\n Id,\n Schemas,\n OverwriteContext<ContextIn, ContextOut>,\n Error | Exclude<RunError, MiddlewareDownstreamError>,\n Requirements | RunRequirements,\n ClientSchemas,\n Effect.Effect<unknown, Error | RunError, Requirements | RunRequirements>\n >;\n };\n /**\n * Terminal client : `run` est un générateur craft nu, drivé par le runtime\n * craft (le même que les guards), et non un Effect.\n */\n readonly client: <ContextOut extends MiddlewareContext>(\n run: (\n context: ClientMiddlewareRunContext<ContextIn>,\n ) => Generator<unknown, MiddlewareResult<ContextOut>, unknown>,\n ) => CraftClientMiddleware<\n Id,\n Provides,\n OverwriteContext<ContextIn, ContextOut>\n >;\n}\n\nexport function craftMiddleware<const Id extends string>(\n id: Id,\n): CraftMiddlewareBuilder<\n Id,\n readonly [],\n Record<never, never>,\n never,\n never,\n readonly [],\n readonly []\n> {\n assertMiddlewareId(id);\n return makeBuilder(id, [], [], [], []) as CraftMiddlewareBuilder<\n Id,\n readonly [],\n Record<never, never>,\n never,\n never,\n readonly [],\n readonly []\n >;\n}\n\ntype AnyMiddlewareValue = AnyCraftMiddleware | AnyCraftClientMiddleware;\n\nfunction makeBuilder(\n id: string,\n inputs: readonly CraftSchema[],\n dependencies: readonly AnyMiddlewareValue[],\n provides: readonly CraftSchema[],\n clientContexts: readonly CraftSchema[],\n): unknown {\n return {\n pipe(...members: AnyCraftMiddlewarePipeMember[]) {\n let nextInputs = inputs;\n let nextDependencies = dependencies;\n let nextProvides = provides;\n let nextClientContexts = clientContexts;\n\n for (const member of members) {\n if (isClientContextDeclaration(member)) {\n nextClientContexts = [...nextClientContexts, member.schema];\n continue;\n }\n\n nextInputs =\n member.kind === 'server-function-middleware'\n ? [...nextInputs, ...member.inputs]\n : nextInputs;\n nextDependencies = [...nextDependencies, member];\n nextProvides =\n member.kind === 'client-function-middleware'\n ? [...nextProvides, ...member.provides]\n : nextProvides;\n nextClientContexts =\n member.kind === 'server-function-middleware'\n ? [...nextClientContexts, ...member.clientContexts]\n : nextClientContexts;\n }\n\n return makeBuilder(\n id,\n nextInputs,\n nextDependencies,\n nextProvides,\n nextClientContexts,\n );\n },\n use(middleware: AnyMiddlewareValue) {\n return makeBuilder(\n id,\n middleware.kind === 'server-function-middleware'\n ? [...inputs, ...middleware.inputs]\n : inputs,\n [...dependencies, middleware],\n middleware.kind === 'client-function-middleware'\n ? [...provides, ...middleware.provides]\n : provides,\n middleware.kind === 'server-function-middleware'\n ? [...clientContexts, ...middleware.clientContexts]\n : clientContexts,\n );\n },\n input(schema: CraftSchema) {\n return makeBuilder(\n id,\n [...inputs, schema],\n dependencies,\n provides,\n clientContexts,\n );\n },\n provides(schema: CraftSchema) {\n return makeBuilder(\n id,\n inputs,\n dependencies,\n [...provides, schema],\n clientContexts,\n );\n },\n clientContext(schema: CraftSchema) {\n return makeBuilder(id, inputs, dependencies, provides, [\n ...clientContexts,\n schema,\n ]);\n },\n server(run: CraftMiddleware['run']) {\n return Object.freeze({\n kind: 'server-function-middleware' as const,\n id,\n inputs,\n clientContexts,\n dependencies: assertSameFamily(\n id,\n dependencies,\n 'server-function-middleware',\n ),\n run,\n });\n },\n client(run: CraftClientMiddleware['run']) {\n return Object.freeze({\n kind: 'client-function-middleware' as const,\n id,\n provides,\n dependencies: assertSameFamily(\n id,\n dependencies,\n 'client-function-middleware',\n ),\n run,\n });\n },\n };\n}\n\nfunction isClientContextDeclaration(\n value: AnyCraftMiddlewarePipeMember,\n): value is CraftClientContextDeclaration {\n return value.kind === 'server-function-client-context';\n}\n\n/**\n * Un middleware client et un middleware serveur ne s'exécutent ni au même\n * endroit ni avec le même moteur : les composer serait un contresens, et le\n * runtime ne saurait pas quoi faire de la dépendance étrangère.\n */\nfunction assertSameFamily<Kind extends AnyMiddlewareValue['kind']>(\n id: string,\n dependencies: readonly AnyMiddlewareValue[],\n kind: Kind,\n): readonly Extract<AnyMiddlewareValue, { kind: Kind }>[] {\n for (const dependency of dependencies) {\n if (dependency.kind !== kind) {\n throw new Error(\n `Middleware \"${id}\" is a ${kind === 'client-function-middleware' ? 'client' : 'server'} middleware but depends on \"${dependency.id}\", which is a ${dependency.kind === 'client-function-middleware' ? 'client' : 'server'} middleware. A chain cannot mix both families.`,\n );\n }\n }\n return dependencies as readonly Extract<AnyMiddlewareValue, { kind: Kind }>[];\n}\n\nexport function isCraftMiddleware(value: unknown): value is AnyCraftMiddleware {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'server-function-middleware'\n );\n}\n\n/** Aplatit les dépendances (profondeur d'abord) et déduplique par identifiant. */\nexport function flattenMiddlewares(\n middlewares: readonly AnyCraftMiddleware[],\n): readonly AnyCraftMiddleware[] {\n return flattenMiddlewareGraph(middlewares);\n}\n\n/** Schémas d'input collectés le long de la chaîne, dédupliqués, contrat en tête. */\nexport function collectMiddlewareSchemas(\n contractInput: CraftSchema,\n middlewares: readonly AnyCraftMiddleware[],\n): readonly CraftSchema[] {\n const schemas: CraftSchema[] = [contractInput];\n for (const middleware of flattenMiddlewares(middlewares)) {\n for (const schema of middleware.inputs) {\n if (!schemas.includes(schema)) schemas.push(schema);\n }\n }\n return schemas;\n}\n\n/** Même mécanique, appliquée au canal du contexte client. */\nexport function collectMiddlewareClientContextSchemas(\n contractClientContext: CraftSchema | undefined,\n middlewares: readonly AnyCraftMiddleware[],\n): readonly CraftSchema[] {\n const schemas: CraftSchema[] = contractClientContext\n ? [contractClientContext]\n : [];\n for (const middleware of flattenMiddlewares(middlewares)) {\n for (const schema of middleware.clientContexts ?? []) {\n if (!schemas.includes(schema)) schemas.push(schema);\n }\n }\n return schemas;\n}\n\nexport type MiddlewareChainHandler = (context: {\n readonly input: unknown;\n readonly context: MiddlewareContext;\n}) => unknown;\n\n/**\n * Compose la chaîne en oignon. Un middleware peut soit retourner directement\n * `{ context }` (ou une Promise de cette enveloppe), soit retourner un\n * programme opaque — typiquement un Effect — qui doit appeler `next()` pour\n * composer la suite. Aucun combinateur Effect n'est utilisé ici : le core reste\n * donc sans dépendance runtime sur Effect.\n */\nexport function runMiddlewareChain(\n middlewares: readonly AnyCraftMiddleware[],\n input: unknown,\n handler: MiddlewareChainHandler,\n clientContext: MiddlewareContext = {},\n resolve: <Value>(token: ServerFunctionToken<Value>) => Value = () => {\n throw new Error(\n 'This server middleware requires DI, but no server runtime resolver was provided.',\n );\n },\n): unknown {\n const chain = flattenMiddlewares(middlewares);\n\n const step = (index: number, context: MiddlewareContext): unknown => {\n const middleware = chain[index];\n if (!middleware) return handler({ input, context });\n const result = middleware.run({\n input: input as never,\n context,\n clientContext: clientContext as never,\n resolve,\n next: ((patch: { readonly context: MiddlewareContext }) =>\n step(index + 1, { ...context, ...patch.context })) as never,\n });\n\n if (isMiddlewareContextPatch(result)) {\n return step(index + 1, { ...context, ...result.context });\n }\n\n if (isPromiseLike<MiddlewareContextPatch>(result)) {\n return result.then((patch) =>\n step(index + 1, { ...context, ...patch.context }),\n );\n }\n\n return result;\n };\n\n return step(0, {});\n}\n\nfunction isMiddlewareContextPatch(\n value: unknown,\n): value is MiddlewareContextPatch {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'context' in value &&\n typeof value.context === 'object' &&\n value.context !== null\n );\n}\n\nfunction isPromiseLike<Value>(value: unknown): value is PromiseLike<Value> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n );\n}\n"]}
@@ -0,0 +1,114 @@
1
+ import { type ServerFunctionContract, type ServerFunctionExposure } from './server-function-contract';
2
+ import type { ServerFunctionPipe, ServerFunctionToken } from './client-di-requirement';
3
+ import { type AnyCraftMiddleware, type MergedMiddlewareContext, type MergedMiddlewareError, type MergedMiddlewareRequirements, type MergeSchemaInputs, type MergeSchemaOutputs, type MiddlewareClientContextsOfAll, type MiddlewareSchemasOf, type MiddlewareSchemasOfAll } from './server-function-middleware';
4
+ import type { MergeOptionalSchemaInputs, MergeOptionalSchemaOutputs } from './middleware-schema-shared';
5
+ import type { AnyServerLayer } from './server-layer';
6
+ import type { CraftSchema } from './schema-validation';
7
+ import type * as Effect from 'effect/Effect';
8
+ /** Résout un token dans le DI **du serveur**, via le `runtime` du registre. */
9
+ export type ServerFunctionRequired = <Value>(token: ServerFunctionToken<Value>) => Value;
10
+ type ContractClientContextSchemas<Contract extends ServerFunctionContract<any, any, any>> = Contract extends ServerFunctionContract<any, any, any, any, infer ClientContextSchema> ? [ClientContextSchema] extends [CraftSchema] ? readonly [ClientContextSchema] : readonly [] : readonly [];
11
+ /**
12
+ * Le canal du contexte client, fusionné comme celui de l'input : le schéma
13
+ * déclaré par la fonction, suivi de ceux exigés par ses middleware.
14
+ */
15
+ export type ServerFunctionClientContextSchemas<Contract extends ServerFunctionContract<any, any, any>, Middlewares extends readonly AnyCraftMiddleware[]> = readonly [
16
+ ...ContractClientContextSchemas<Contract>,
17
+ ...MiddlewareClientContextsOfAll<Middlewares>
18
+ ];
19
+ export type ServerFunctionHandlerContext<Contract extends ServerFunctionContract<any, any, any>, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Middlewares extends readonly AnyCraftMiddleware[] = readonly [], Schemas extends readonly CraftSchema[] = readonly [Contract['input']]> = {
20
+ /**
21
+ * Input validé : la fusion des sorties du schéma du contrat et de tous les
22
+ * schémas déclarés par les middleware de la chaîne.
23
+ */
24
+ readonly input: MergeSchemaOutputs<Schemas>;
25
+ /** Contexte produit par la chaîne de middleware, fusionné dans l'ordre. */
26
+ readonly context: MergedMiddlewareContext<Middlewares>;
27
+ /**
28
+ * Contexte envoyé par le **navigateur**, validé par le schéma du contrat.
29
+ *
30
+ * Délibérément séparé de `context` : c'est une déclaration du client, pas une
31
+ * donnée de confiance. Un middleware serveur doit la confronter à la vraie
32
+ * session avant d'en faire quoi que ce soit.
33
+ */
34
+ readonly clientContext: MergeOptionalSchemaOutputs<ServerFunctionClientContextSchemas<Contract, Middlewares>>;
35
+ readonly required: ServerFunctionRequired;
36
+ readonly pipes: Pipes;
37
+ };
38
+ export type ServerFunctionHandler<Contract extends ServerFunctionContract<any, any, any>, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly [], Schemas extends readonly CraftSchema[] = readonly [Contract['input']]> = (context: ServerFunctionHandlerContext<Contract, Pipes, Middlewares, Schemas>) => Output;
39
+ export type ServerFunctionDefinition<Contract extends ServerFunctionContract<any, any, any> = ServerFunctionContract, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly AnyCraftMiddleware[]> = {
40
+ readonly kind: 'server-function';
41
+ /** Selects whether the registry must hand the result to an opaque adapter. */
42
+ readonly programMode?: 'portable';
43
+ readonly contract: Contract;
44
+ readonly pipes: Pipes;
45
+ readonly middlewares: Middlewares;
46
+ /**
47
+ * Couches composées par `.pipe(...)`, dans l'ordre déclaré. Séparées des
48
+ * middleware : elles ne déclarent ni schéma ni contexte client, seulement une
49
+ * composition de programme.
50
+ */
51
+ readonly layers?: readonly AnyServerLayer[];
52
+ /** Schéma du contrat suivi de ceux des middleware, dédupliqués. */
53
+ readonly inputSchemas: readonly CraftSchema[];
54
+ /** Idem pour le contexte client attendu du navigateur. */
55
+ readonly clientContextSchemas: readonly CraftSchema[];
56
+ readonly handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares>;
57
+ readonly invoke: (input: unknown, runtime?: ServerFunctionRuntime, clientContext?: Record<string, unknown>) => Output | Promise<Output>;
58
+ };
59
+ /** Vrai dès que la fonction attend un contexte du navigateur. */
60
+ export declare function requiresClientContext(definition: ServerFunctionDefinition<any, any, any, any>): boolean;
61
+ export type ServerFunctionRuntime = {
62
+ readonly resolve?: <Value>(token: ServerFunctionToken<Value>) => Value;
63
+ };
64
+ /**
65
+ * Dès qu'un middleware est branché, le handler doit renvoyer un Effect : c'est
66
+ * le seul moyen de composer la chaîne sans que le core dépende d'Effect au
67
+ * runtime.
68
+ */
69
+ type HandlerOutputConstraint<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [] ? unknown : Effect.Effect<any, any, any>;
70
+ /** Injecte les canaux d'erreur et de dépendances des middleware dans la sortie. */
71
+ type ComposedOutput<Middlewares extends readonly AnyCraftMiddleware[], Output> = Middlewares extends readonly [] ? Output : Output extends Effect.Effect<infer Success, infer Error, infer Requirements> ? Effect.Effect<Success, Error | MergedMiddlewareError<Middlewares>, Requirements | MergedMiddlewareRequirements<Middlewares>> : Output;
72
+ export type ServerFunctionBuilder<Contract extends ServerFunctionContract<any, any, any>, Pipes extends readonly ServerFunctionPipe[], Middlewares extends readonly AnyCraftMiddleware[] = readonly [], Schemas extends readonly CraftSchema[] = readonly [Contract['input']]> = {
73
+ readonly pipe: <Pipe extends ServerFunctionPipe>(pipe: Pipe) => ServerFunctionBuilder<Contract, readonly [...Pipes, Pipe], Middlewares, Schemas>;
74
+ readonly use: <Middleware extends AnyCraftMiddleware>(middleware: Middleware) => ServerFunctionBuilder<Contract, Pipes, readonly [...Middlewares, Middleware], readonly [...Schemas, ...MiddlewareSchemasOf<Middleware>]>;
75
+ readonly handler: <Output extends HandlerOutputConstraint<Middlewares>>(handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares, Schemas>) => ServerFunctionDefinition<Contract, Pipes, ComposedOutput<Middlewares, Output>, Middlewares>;
76
+ };
77
+ export declare function serverFunction<const Id extends string, Schema extends CraftSchema>(id: Id, input: Schema): ServerFunctionBuilder<ServerFunctionContract<Schema, 'server', undefined, Id>, readonly []>;
78
+ export declare function serverFunction<const Id extends string, Schema extends CraftSchema, Exposure extends ServerFunctionExposure, OutputSchema extends CraftSchema | undefined = undefined, ClientContextSchema extends CraftSchema | undefined = undefined>(id: Id, input: Schema, options: {
79
+ readonly exposure: Exposure;
80
+ readonly output?: OutputSchema;
81
+ readonly clientContext?: ClientContextSchema;
82
+ }): ServerFunctionBuilder<ServerFunctionContract<Schema, Exposure, OutputSchema, Id, ClientContextSchema>, readonly []>;
83
+ export declare function serverFunction<Schema extends CraftSchema, Exposure extends ServerFunctionExposure, OutputSchema extends CraftSchema | undefined, ClientContextSchema extends CraftSchema | undefined = CraftSchema | undefined>(contract: ServerFunctionContract<Schema, Exposure, OutputSchema, string, ClientContextSchema>): ServerFunctionBuilder<ServerFunctionContract<Schema, Exposure, OutputSchema, string, ClientContextSchema>, readonly []>;
84
+ /**
85
+ * Ce que l'appelant doit fournir : le schéma du contrat et ceux des middleware,
86
+ * côté entrée. La façade client reste donc alignée sur ce que le registre valide.
87
+ */
88
+ export type ServerFunctionInput<Definition extends ServerFunctionDefinition<any, any, any, any>> = Definition extends ServerFunctionDefinition<infer Contract, any, any, infer Middlewares> ? MergeSchemaInputs<readonly [Contract['input'], ...MiddlewareSchemasOfAll<Middlewares>]> : never;
89
+ /** Ce que le navigateur doit produire pour cette fonction. */
90
+ export type ServerFunctionExpectedClientContext<Definition extends ServerFunctionDefinition<any, any, any, any>> = Definition extends ServerFunctionDefinition<infer Contract, any, any, infer Middlewares> ? MergeOptionalSchemaInputs<ServerFunctionClientContextSchemas<Contract, Middlewares>> : Record<never, never>;
91
+ export type ServerFunctionOutput<Definition extends ServerFunctionDefinition<any, any, any, any>> = Definition extends ServerFunctionDefinition<any, any, infer Output, any> ? Output : never;
92
+ type AwaitedServerFunctionOutput<Definition extends ServerFunctionDefinition<any, any, any, any>> = Awaited<ServerFunctionOutput<Definition>>;
93
+ export type ServerFunctionSuccess<Definition extends ServerFunctionDefinition<any, any, any, any>> = AwaitedServerFunctionOutput<Definition> extends Effect.Effect<infer Success, infer _Error, infer _Requirements> ? Success : AwaitedServerFunctionOutput<Definition>;
94
+ export type ServerFunctionError<Definition extends ServerFunctionDefinition<any, any, any, any>> = AwaitedServerFunctionOutput<Definition> extends Effect.Effect<infer _Success, infer Error, infer _Requirements> ? Error : never;
95
+ /**
96
+ * `serverFunction` pré-équipé d'une chaîne de middleware serveur par défaut.
97
+ *
98
+ * Sucre volontairement léger : la factory ne fait qu'appliquer `.use(...)` dans
99
+ * l'ordre donné avant de rendre la main au builder habituel. Les middleware par
100
+ * défaut sont donc soumis aux mêmes règles que les autres — aplatissement,
101
+ * déduplication par id, fusion des schémas — et une fonction peut toujours en
102
+ * ajouter les siens par-dessus.
103
+ */
104
+ export type ServerFunctionFactory<Defaults extends readonly AnyCraftMiddleware[]> = {
105
+ <const Id extends string, Schema extends CraftSchema>(id: Id, input: Schema): ServerFunctionBuilder<ServerFunctionContract<Schema, 'server', undefined, Id>, readonly [], Defaults, readonly [Schema, ...MiddlewareSchemasOfAll<Defaults>]>;
106
+ <const Id extends string, Schema extends CraftSchema, Exposure extends ServerFunctionExposure, OutputSchema extends CraftSchema | undefined = undefined, ClientContextSchema extends CraftSchema | undefined = undefined>(id: Id, input: Schema, options: {
107
+ readonly exposure: Exposure;
108
+ readonly output?: OutputSchema;
109
+ readonly clientContext?: ClientContextSchema;
110
+ }): ServerFunctionBuilder<ServerFunctionContract<Schema, Exposure, OutputSchema, Id, ClientContextSchema>, readonly [], Defaults, readonly [Schema, ...MiddlewareSchemasOfAll<Defaults>]>;
111
+ };
112
+ export declare function createServerFunctionFactory<const Defaults extends readonly AnyCraftMiddleware[]>(defaultServerMiddlewares: Defaults): ServerFunctionFactory<Defaults>;
113
+ export {};
114
+ //# sourceMappingURL=server-function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/server-function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { assertServerFunctionId, serverFunctionContract, } from './server-function-contract';
2
+ import { collectMiddlewareClientContextSchemas, collectMiddlewareSchemas, runMiddlewareChain, } from './server-function-middleware';
3
+ /** Vrai dès que la fonction attend un contexte du navigateur. */
4
+ export function requiresClientContext(definition) {
5
+ return (definition.clientContextSchemas ?? []).length > 0;
6
+ }
7
+ export function serverFunction(contractOrId, input, options) {
8
+ const contract = (typeof contractOrId === 'string'
9
+ ? serverFunctionContract({
10
+ id: contractOrId,
11
+ input: input,
12
+ exposure: options?.exposure ?? 'server',
13
+ output: options?.output,
14
+ clientContext: options?.clientContext,
15
+ })
16
+ : contractOrId);
17
+ assertServerFunctionId(contract.id);
18
+ return createBuilder(contract, [], []);
19
+ }
20
+ function createBuilder(contract, pipes, middlewares) {
21
+ return {
22
+ pipe(pipe) {
23
+ return createBuilder(contract, [...pipes, pipe], middlewares);
24
+ },
25
+ use(middleware) {
26
+ return createBuilder(contract, pipes, [
27
+ ...middlewares,
28
+ middleware,
29
+ ]);
30
+ },
31
+ handler(handler) {
32
+ return createDefinition(contract, pipes, middlewares, handler);
33
+ },
34
+ };
35
+ }
36
+ function createDefinition(contract, pipes, middlewares, handler) {
37
+ return {
38
+ kind: 'server-function',
39
+ contract,
40
+ pipes,
41
+ middlewares,
42
+ inputSchemas: collectMiddlewareSchemas(contract.input, middlewares),
43
+ clientContextSchemas: collectMiddlewareClientContextSchemas(contract.clientContext, middlewares),
44
+ handler,
45
+ invoke(input, runtime, clientContext) {
46
+ const required = (token) => {
47
+ if (!runtime?.resolve) {
48
+ throw new Error(`Server function "${contract.id}" requires DI, but no server runtime resolver was provided.`);
49
+ }
50
+ return runtime.resolve(token);
51
+ };
52
+ const call = (context) => handler({
53
+ input: input,
54
+ context: context,
55
+ clientContext: (clientContext ?? {}),
56
+ required,
57
+ pipes,
58
+ });
59
+ if (middlewares.length === 0)
60
+ return call({});
61
+ return runMiddlewareChain(middlewares, input, ({ context }) => call(context), clientContext ?? {}, required);
62
+ },
63
+ };
64
+ }
65
+ export function createServerFunctionFactory(defaultServerMiddlewares) {
66
+ return ((id, input, options) => {
67
+ let builder = serverFunction(id, input, {
68
+ exposure: options?.exposure ?? 'server',
69
+ ...(options?.output === undefined ? {} : { output: options.output }),
70
+ ...(options?.clientContext === undefined
71
+ ? {}
72
+ : { clientContext: options.clientContext }),
73
+ });
74
+ for (const middleware of defaultServerMiddlewares) {
75
+ builder = builder.use(middleware);
76
+ }
77
+ return builder;
78
+ });
79
+ }
80
+ //# sourceMappingURL=server-function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/server-function.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertServerFunctionId,\n serverFunctionContract,\n type ServerFunctionContract,\n type ServerFunctionExposure,\n} from './server-function-contract';\nimport type {\n ServerFunctionPipe,\n ServerFunctionToken,\n} from './client-di-requirement';\nimport {\n collectMiddlewareClientContextSchemas,\n collectMiddlewareSchemas,\n runMiddlewareChain,\n type AnyCraftMiddleware,\n type MergedMiddlewareContext,\n type MergedMiddlewareError,\n type MergedMiddlewareRequirements,\n type MergeSchemaInputs,\n type MergeSchemaOutputs,\n type MiddlewareClientContextsOfAll,\n type MiddlewareSchemasOf,\n type MiddlewareSchemasOfAll,\n} from './server-function-middleware';\nimport type {\n MergeOptionalSchemaInputs,\n MergeOptionalSchemaOutputs,\n} from './middleware-schema-shared';\nimport type { AnyServerLayer } from './server-layer';\nimport type { CraftSchema } from './schema-validation';\nimport type * as Effect from 'effect/Effect';\n\n/** Résout un token dans le DI **du serveur**, via le `runtime` du registre. */\nexport type ServerFunctionRequired = <Value>(\n token: ServerFunctionToken<Value>,\n) => Value;\n\ntype ContractClientContextSchemas<\n Contract extends ServerFunctionContract<any, any, any>,\n> =\n Contract extends ServerFunctionContract<\n any,\n any,\n any,\n any,\n infer ClientContextSchema\n >\n ? [ClientContextSchema] extends [CraftSchema]\n ? readonly [ClientContextSchema]\n : readonly []\n : readonly [];\n\n/**\n * Le canal du contexte client, fusionné comme celui de l'input : le schéma\n * déclaré par la fonction, suivi de ceux exigés par ses middleware.\n */\nexport type ServerFunctionClientContextSchemas<\n Contract extends ServerFunctionContract<any, any, any>,\n Middlewares extends readonly AnyCraftMiddleware[],\n> = readonly [\n ...ContractClientContextSchemas<Contract>,\n ...MiddlewareClientContextsOfAll<Middlewares>,\n];\n\nexport type ServerFunctionHandlerContext<\n Contract extends ServerFunctionContract<any, any, any>,\n Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[],\n Middlewares extends readonly AnyCraftMiddleware[] = readonly [],\n Schemas extends readonly CraftSchema[] = readonly [Contract['input']],\n> = {\n /**\n * Input validé : la fusion des sorties du schéma du contrat et de tous les\n * schémas déclarés par les middleware de la chaîne.\n */\n readonly input: MergeSchemaOutputs<Schemas>;\n /** Contexte produit par la chaîne de middleware, fusionné dans l'ordre. */\n readonly context: MergedMiddlewareContext<Middlewares>;\n /**\n * Contexte envoyé par le **navigateur**, validé par le schéma du contrat.\n *\n * Délibérément séparé de `context` : c'est une déclaration du client, pas une\n * donnée de confiance. Un middleware serveur doit la confronter à la vraie\n * session avant d'en faire quoi que ce soit.\n */\n readonly clientContext: MergeOptionalSchemaOutputs<\n ServerFunctionClientContextSchemas<Contract, Middlewares>\n >;\n readonly required: ServerFunctionRequired;\n readonly pipes: Pipes;\n};\n\nexport type ServerFunctionHandler<\n Contract extends ServerFunctionContract<any, any, any>,\n Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[],\n Output = unknown,\n Middlewares extends readonly AnyCraftMiddleware[] = readonly [],\n Schemas extends readonly CraftSchema[] = readonly [Contract['input']],\n> = (\n context: ServerFunctionHandlerContext<Contract, Pipes, Middlewares, Schemas>,\n) => Output;\n\nexport type ServerFunctionDefinition<\n Contract extends ServerFunctionContract<\n any,\n any,\n any\n > = ServerFunctionContract,\n Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[],\n Output = unknown,\n Middlewares extends\n readonly AnyCraftMiddleware[] = readonly AnyCraftMiddleware[],\n> = {\n readonly kind: 'server-function';\n /** Selects whether the registry must hand the result to an opaque adapter. */\n readonly programMode?: 'portable';\n readonly contract: Contract;\n readonly pipes: Pipes;\n readonly middlewares: Middlewares;\n /**\n * Couches composées par `.pipe(...)`, dans l'ordre déclaré. Séparées des\n * middleware : elles ne déclarent ni schéma ni contexte client, seulement une\n * composition de programme.\n */\n readonly layers?: readonly AnyServerLayer[];\n /** Schéma du contrat suivi de ceux des middleware, dédupliqués. */\n readonly inputSchemas: readonly CraftSchema[];\n /** Idem pour le contexte client attendu du navigateur. */\n readonly clientContextSchemas: readonly CraftSchema[];\n readonly handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares>;\n readonly invoke: (\n input: unknown,\n runtime?: ServerFunctionRuntime,\n clientContext?: Record<string, unknown>,\n ) => Output | Promise<Output>;\n};\n\n/** Vrai dès que la fonction attend un contexte du navigateur. */\nexport function requiresClientContext(\n definition: ServerFunctionDefinition<any, any, any, any>,\n): boolean {\n return (definition.clientContextSchemas ?? []).length > 0;\n}\n\nexport type ServerFunctionRuntime = {\n readonly resolve?: <Value>(token: ServerFunctionToken<Value>) => Value;\n};\n\n/**\n * Dès qu'un middleware est branché, le handler doit renvoyer un Effect : c'est\n * le seul moyen de composer la chaîne sans que le core dépende d'Effect au\n * runtime.\n */\ntype HandlerOutputConstraint<\n Middlewares extends readonly AnyCraftMiddleware[],\n> = Middlewares extends readonly [] ? unknown : Effect.Effect<any, any, any>;\n\n/** Injecte les canaux d'erreur et de dépendances des middleware dans la sortie. */\ntype ComposedOutput<\n Middlewares extends readonly AnyCraftMiddleware[],\n Output,\n> = Middlewares extends readonly []\n ? Output\n : Output extends Effect.Effect<infer Success, infer Error, infer Requirements>\n ? Effect.Effect<\n Success,\n Error | MergedMiddlewareError<Middlewares>,\n Requirements | MergedMiddlewareRequirements<Middlewares>\n >\n : Output;\n\nexport type ServerFunctionBuilder<\n Contract extends ServerFunctionContract<any, any, any>,\n Pipes extends readonly ServerFunctionPipe[],\n Middlewares extends readonly AnyCraftMiddleware[] = readonly [],\n Schemas extends readonly CraftSchema[] = readonly [Contract['input']],\n> = {\n readonly pipe: <Pipe extends ServerFunctionPipe>(\n pipe: Pipe,\n ) => ServerFunctionBuilder<\n Contract,\n readonly [...Pipes, Pipe],\n Middlewares,\n Schemas\n >;\n readonly use: <Middleware extends AnyCraftMiddleware>(\n middleware: Middleware,\n ) => ServerFunctionBuilder<\n Contract,\n Pipes,\n readonly [...Middlewares, Middleware],\n readonly [...Schemas, ...MiddlewareSchemasOf<Middleware>]\n >;\n readonly handler: <Output extends HandlerOutputConstraint<Middlewares>>(\n handler: ServerFunctionHandler<\n Contract,\n Pipes,\n Output,\n Middlewares,\n Schemas\n >,\n ) => ServerFunctionDefinition<\n Contract,\n Pipes,\n ComposedOutput<Middlewares, Output>,\n Middlewares\n >;\n};\n\nexport function serverFunction<\n const Id extends string,\n Schema extends CraftSchema,\n>(\n id: Id,\n input: Schema,\n): ServerFunctionBuilder<\n ServerFunctionContract<Schema, 'server', undefined, Id>,\n readonly []\n>;\nexport function serverFunction<\n const Id extends string,\n Schema extends CraftSchema,\n Exposure extends ServerFunctionExposure,\n OutputSchema extends CraftSchema | undefined = undefined,\n ClientContextSchema extends CraftSchema | undefined = undefined,\n>(\n id: Id,\n input: Schema,\n options: {\n readonly exposure: Exposure;\n readonly output?: OutputSchema;\n readonly clientContext?: ClientContextSchema;\n },\n): ServerFunctionBuilder<\n ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n Id,\n ClientContextSchema\n >,\n readonly []\n>;\nexport function serverFunction<\n Schema extends CraftSchema,\n Exposure extends ServerFunctionExposure,\n OutputSchema extends CraftSchema | undefined,\n ClientContextSchema extends CraftSchema | undefined = CraftSchema | undefined,\n>(\n contract: ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n string,\n ClientContextSchema\n >,\n): ServerFunctionBuilder<\n ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n string,\n ClientContextSchema\n >,\n readonly []\n>;\nexport function serverFunction<\n const Id extends string,\n Schema extends CraftSchema,\n Exposure extends ServerFunctionExposure,\n OutputSchema extends CraftSchema | undefined = undefined,\n ClientContextSchema extends CraftSchema | undefined = undefined,\n>(\n contractOrId: Id | ServerFunctionContract<Schema, Exposure, OutputSchema>,\n input?: Schema,\n options?: {\n readonly exposure?: Exposure;\n readonly output?: OutputSchema;\n readonly clientContext?: ClientContextSchema;\n },\n): ServerFunctionBuilder<\n ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n Id,\n ClientContextSchema\n >,\n readonly []\n> {\n const contract = (\n typeof contractOrId === 'string'\n ? serverFunctionContract({\n id: contractOrId,\n input: input as Schema,\n exposure: options?.exposure ?? 'server',\n output: options?.output,\n clientContext: options?.clientContext,\n })\n : contractOrId\n ) as ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n Id,\n ClientContextSchema\n >;\n assertServerFunctionId(contract.id);\n\n return createBuilder(contract, [] as readonly [], [] as readonly []);\n}\n\nfunction createBuilder<\n Contract extends ServerFunctionContract<any, any, any>,\n Pipes extends readonly ServerFunctionPipe[],\n Middlewares extends readonly AnyCraftMiddleware[],\n>(\n contract: Contract,\n pipes: Pipes,\n middlewares: Middlewares,\n): ServerFunctionBuilder<Contract, Pipes, Middlewares> {\n return {\n pipe(pipe: ServerFunctionPipe) {\n return createBuilder(\n contract,\n [...pipes, pipe] as readonly [...Pipes, ServerFunctionPipe],\n middlewares,\n ) as never;\n },\n use(middleware: AnyCraftMiddleware) {\n return createBuilder(contract, pipes, [\n ...middlewares,\n middleware,\n ] as readonly [...Middlewares, typeof middleware]) as never;\n },\n handler(\n handler: ServerFunctionHandler<Contract, Pipes, unknown, Middlewares>,\n ) {\n return createDefinition(contract, pipes, middlewares, handler) as never;\n },\n } as unknown as ServerFunctionBuilder<Contract, Pipes, Middlewares>;\n}\n\nfunction createDefinition<\n Contract extends ServerFunctionContract<any, any, any>,\n Pipes extends readonly ServerFunctionPipe[],\n Middlewares extends readonly AnyCraftMiddleware[],\n Output,\n>(\n contract: Contract,\n pipes: Pipes,\n middlewares: Middlewares,\n handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares>,\n): ServerFunctionDefinition<Contract, Pipes, Output, Middlewares> {\n return {\n kind: 'server-function',\n contract,\n pipes,\n middlewares,\n inputSchemas: collectMiddlewareSchemas(contract.input, middlewares),\n clientContextSchemas: collectMiddlewareClientContextSchemas(\n contract.clientContext as CraftSchema | undefined,\n middlewares,\n ),\n handler,\n invoke(input, runtime, clientContext) {\n const required: ServerFunctionRequired = (token) => {\n if (!runtime?.resolve) {\n throw new Error(\n `Server function \"${contract.id}\" requires DI, but no server runtime resolver was provided.`,\n );\n }\n return runtime.resolve(token);\n };\n const call = (context: Record<string, unknown>): Output =>\n handler({\n input: input as never,\n context: context as never,\n clientContext: (clientContext ?? {}) as never,\n required,\n pipes,\n });\n\n if (middlewares.length === 0) return call({});\n return runMiddlewareChain(\n middlewares,\n input,\n ({ context }) => call(context),\n clientContext ?? {},\n required,\n ) as Output;\n },\n };\n}\n\n/**\n * Ce que l'appelant doit fournir : le schéma du contrat et ceux des middleware,\n * côté entrée. La façade client reste donc alignée sur ce que le registre valide.\n */\nexport type ServerFunctionInput<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> =\n Definition extends ServerFunctionDefinition<\n infer Contract,\n any,\n any,\n infer Middlewares\n >\n ? MergeSchemaInputs<\n readonly [Contract['input'], ...MiddlewareSchemasOfAll<Middlewares>]\n >\n : never;\n\n/** Ce que le navigateur doit produire pour cette fonction. */\nexport type ServerFunctionExpectedClientContext<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> =\n Definition extends ServerFunctionDefinition<\n infer Contract,\n any,\n any,\n infer Middlewares\n >\n ? MergeOptionalSchemaInputs<\n ServerFunctionClientContextSchemas<Contract, Middlewares>\n >\n : Record<never, never>;\n\nexport type ServerFunctionOutput<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> =\n Definition extends ServerFunctionDefinition<any, any, infer Output, any>\n ? Output\n : never;\n\ntype AwaitedServerFunctionOutput<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> = Awaited<ServerFunctionOutput<Definition>>;\n\nexport type ServerFunctionSuccess<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> =\n AwaitedServerFunctionOutput<Definition> extends Effect.Effect<\n infer Success,\n infer _Error,\n infer _Requirements\n >\n ? Success\n : AwaitedServerFunctionOutput<Definition>;\n\nexport type ServerFunctionError<\n Definition extends ServerFunctionDefinition<any, any, any, any>,\n> =\n AwaitedServerFunctionOutput<Definition> extends Effect.Effect<\n infer _Success,\n infer Error,\n infer _Requirements\n >\n ? Error\n : never;\n\n/**\n * `serverFunction` pré-équipé d'une chaîne de middleware serveur par défaut.\n *\n * Sucre volontairement léger : la factory ne fait qu'appliquer `.use(...)` dans\n * l'ordre donné avant de rendre la main au builder habituel. Les middleware par\n * défaut sont donc soumis aux mêmes règles que les autres — aplatissement,\n * déduplication par id, fusion des schémas — et une fonction peut toujours en\n * ajouter les siens par-dessus.\n */\nexport type ServerFunctionFactory<\n Defaults extends readonly AnyCraftMiddleware[],\n> = {\n <const Id extends string, Schema extends CraftSchema>(\n id: Id,\n input: Schema,\n ): ServerFunctionBuilder<\n ServerFunctionContract<Schema, 'server', undefined, Id>,\n readonly [],\n Defaults,\n readonly [Schema, ...MiddlewareSchemasOfAll<Defaults>]\n >;\n <\n const Id extends string,\n Schema extends CraftSchema,\n Exposure extends ServerFunctionExposure,\n OutputSchema extends CraftSchema | undefined = undefined,\n ClientContextSchema extends CraftSchema | undefined = undefined,\n >(\n id: Id,\n input: Schema,\n options: {\n readonly exposure: Exposure;\n readonly output?: OutputSchema;\n readonly clientContext?: ClientContextSchema;\n },\n ): ServerFunctionBuilder<\n ServerFunctionContract<\n Schema,\n Exposure,\n OutputSchema,\n Id,\n ClientContextSchema\n >,\n readonly [],\n Defaults,\n readonly [Schema, ...MiddlewareSchemasOfAll<Defaults>]\n >;\n};\n\nexport function createServerFunctionFactory<\n const Defaults extends readonly AnyCraftMiddleware[],\n>(defaultServerMiddlewares: Defaults): ServerFunctionFactory<Defaults> {\n return ((\n id: string,\n input: CraftSchema,\n options?: {\n readonly exposure?: ServerFunctionExposure;\n readonly output?: CraftSchema;\n readonly clientContext?: CraftSchema;\n },\n ) => {\n let builder = serverFunction(id, input, {\n exposure: options?.exposure ?? 'server',\n ...(options?.output === undefined ? {} : { output: options.output }),\n ...(options?.clientContext === undefined\n ? {}\n : { clientContext: options.clientContext }),\n }) as unknown as {\n use: (middleware: AnyCraftMiddleware) => typeof builder;\n };\n for (const middleware of defaultServerMiddlewares) {\n builder = builder.use(middleware);\n }\n return builder;\n }) as unknown as ServerFunctionFactory<Defaults>;\n}\n"]}