@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 @@
1
+ {"version":3,"file":"craft-service.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,UAAU,EACV,mBAAmB,EAEnB,MAAM,EACN,cAAc,EACd,QAAQ,EACR,QAAQ,EAER,qBAAqB,EAGrB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,gCAAgC,EAChC,gCAAgC,EAChC,4BAA4B,GAE7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,GAE1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAElB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAa/C,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EAEV,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAOpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CACjD,+BAA+B,CAChC,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AACnE,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAC5C,qCAAqC,CACtC,CAAC;AACF,MAAM,0BAA0B,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACxE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAChE,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAA4B,CAAC;AA2H1E,MAAM,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAClE,MAAM,0BAA0B,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAExE,MAAM,kBAAkB,GACtB,4CAAqD,CAAC;AAk/DxD,MAAM,oBAAoB,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAKrE,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,KAAwC,EAAE;QACzD,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvD,OAAO,OAAO,MAAM,KAAK,UAAU;gBACjC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;YACzB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAqFD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,cAAc,CAEzD,2BAA2B,EAAE;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE;CACzB,CAAC,CAAC;AA8BH,MAAM,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAMlE,MAAM,UAAU,OAAO,CAAI,KAAqB;IAC9C,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,yBAAyB,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAM,CAAC;IACrE,CAAC;IACD,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAC,KAAK,CAAC,EAAO,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,EAAO,CAAC;IACzC,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,oBAAoB,IAAI,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAWD,MAAM,SAAS,CAAC,CAAC,UAAU,CACzB,GAAuE;IAEvE,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO;QACL,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,CAAC,SAAqB;KAC3B,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,wBAAwB,CAC7B,2BAA2B,EAC3B,IAAI,cAAc,CAAW,uBAAuB,CAAC,CACtD,CAAC;AACJ,CAAC;AA4YD,MAAM,UAAU,eAAe,CAC7B,OAeM,EACN,YAA4C;IAE5C,MAAM,GAAG,GAAG,CACV,YAAY;QACV,CAAC,CAAC,YAAY,CACV;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,EACD,CAAC,MAA+B,EAAE,EAAE;YAClC,MAAM,eAAe,GAAG,4BAA4B,CAClD,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAC9D,OAAO,CAAC,IAAI,EACZ,IAAI,CACL,CAAC;YAEF,OAAO,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CACF;QACH,CAAC,CAAC,YAAY,CACV;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,EACD,GAAG,EAAE;YACH,MAAM,eAAe,GACnB,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEjE,OAAO,4BAA4B,CAAC,eAAe,CAAC,CAAC;QACvD,CAAC,CACF,CACqB,CAAC;IAE7B,MAAM,gBAAgB,GAAG,kBAAkB,CACzC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACH,CAAC;IAC7B,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;IAEvE,IAAI,YAAY,EAAE,CAAC;QACjB,iBAAiB,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,iBAAiB,CAAC,gBAAgB,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACzB,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAAC,OAErB,CAAC;QAC1B,iBAAiB,CAAC,gBAAgB;YAChC,iBAAiB,CAAC,gBAAgB;gBAClC,+BAA+B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,CAAC,gBAAgB,CACnC,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AA4PD,MAAM,UAAU,YAAY,CAC1B,OAOC,EACD,eAAqD;IAErD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,eAAe,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,eAAe,CAAC;IACpC,MAAM,eAAe,GAAG,GAAG,eAAe,aAAa,CAAC;IACxD,MAAM,aAAa,GAAG,GAAG,eAAe,WAAW,CAAC;IACpD,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACtC,oBAAoB,CAAC,eAAe,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,eAAe,sBAAsB,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,UAAU,CAC5B,GAAG,eAAe,sBAAsB,CACzC,CAAC;QACF,4BAA4B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAElE,oEAAoE;QACpE,0EAA0E;QAC1E,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,uBAAuB,GAA8B;YACzD,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,WAAW;YACvB,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,KAAK;YACf,KAAK;YACL,UAAU,EAAE,WAAW;YACvB,WAAW;YACX,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;YACvB,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,uBAAuB,EAAE,IAAI,GAAG,EAAE;SACnC,CAAC;QAEF,yEAAyE;QACzE,wCAAwC;QACxC,IAAI,gBAAyC,CAAC;QAE9C,MAAM,oBAAoB,GAAG,GAAG,EAAE;YAChC,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,MAAM,cAAc,GAAG,YAAY,CACjC,uBAAuB,EACvB,GAAG,EAAE,CAAC,gBAAgB,CACvB,CAAC;QAEF,MAAM,WAAW,GAA4B;YAC3C,CAAC,WAAW,CAAC,EAAE,cAAc;YAC7B,CAAC,eAAe,CAAC,EAAE,WAAW;YAC9B,CAAC,WAAW,CAAC,EAAE,CAAC,OAAmB,EAAE,EAAE;gBACrC,MAAM,yBAAyB,GAA8B;oBAC3D,OAAO;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,UAAU,EAAE,WAAW;oBACvB,eAAe,EAAE,KAAK;oBACtB,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,IAAI,cAAc,CAAC,GAAG,eAAe,cAAc,CAAC;oBAC3D,UAAU,EAAE,UAAU,CAAC,GAAG,eAAe,cAAc,CAAC;oBACxD,WAAW;oBACX,cAAc,EAAE,sBAAsB,CAAC,OAAO,CAAC;oBAC/C,gBAAgB,EAAE,wBAAwB,CAAC,OAAO,CAAC;oBACnD,aAAa,EAAE,IAAI,GAAG,EAAE;oBACxB,uBAAuB,EAAE,IAAI,GAAG,EAAE;iBACnC,CAAC;gBACF,4BAA4B,CAC1B,yBAAyB,CAAC,UAAW,EACrC,yBAAyB,CAAC,KAAM,CACjC,CAAC;gBACF,OAAO,eAAe,CAAC,yBAAyB,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;QAEF,gBAAgB,GAAG,qBAAqB,CAAC;YACvC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,WAAW;YACvB,MAAM,EAAE,oBAAoB;YAC5B,iBAAiB,EAAE,uBAAuB;SAC3C,CAAC,CAAC;QACH,WAAW,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAC;QAE7C,wBAAwB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC3D,wBAAwB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;QAEjE,mBAAmB,CAAC,GAAG,CACrB,OAAO,CAAC,IAAI,EACZ,oBAAmD,CACpD,CAAC;QAEF,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAAG,eAA6B,CAAC;IACtD,MAAM,iBAAiB,GAA8B;QACnD,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK;QACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;QACnC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,sBAAsB,CAAC,eAAe,CAAC;QACvD,gBAAgB,EAAE,wBAAwB,CAAC,eAAe,CAAC;QAC3D,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,uBAAuB,EAAE,IAAI,GAAG,EAAE;KACnC,CAAC;IAEF,MAAM,KAAK,GACT,OAAO,CAAC,UAAU,KAAK,QAAQ;QAC7B,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,eAAe,cAAc,EAAE;YACnD,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,GAAG,EAAE,CACZ,6BAA6B,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;SACrE,CAAC;QACJ,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU;YACjC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,cAAc,CAChB,OAAO,CAAC,UAAU,KAAK,wBAAwB;gBAC7C,CAAC,CAAC,GAAG,eAAe,WAAW;gBAC/B,CAAC,CAAC,GAAG,eAAe,cAAc,CACrC,CAAC;IACV,MAAM,WAAW,GACf,OAAO,CAAC,UAAU,KAAK,UAAU;QAC/B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,UAAU,CACR,OAAO,CAAC,UAAU,KAAK,wBAAwB;YAC7C,CAAC,CAAC,GAAG,eAAe,WAAW;YAC/B,CAAC,CAAC,GAAG,eAAe,cAAc,CACrC,CAAC;IAER,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,iBAAiB,CAAC,UAAU,GAAG,WAAW,CAAC;IAC3C,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QACzB,4BAA4B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,yEAAyE;IACzE,wCAAwC;IACxC,IAAI,eAAwC,CAAC;IAE7C,MAAM,GAAG,GAA4B;QACnC,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;KACtE,CAAC;IAEF,MAAM,YAAY,GAAG,kBAAkB,CACrC,iBAAiB,EACjB,GAAG,EAAE,CAAC,eAAe,EACrB,cAAc,CACf,CAAC;IAEF,IACE,OAAO,CAAC,UAAU,KAAK,WAAW;QAClC,OAAO,CAAC,UAAU,KAAK,wBAAwB,EAC/C,CAAC;QACD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE,CAC5C,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,KAAK,wBAAwB,IAAI,KAAK,EAAE,CAAC;QAC7D,GAAG,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,eAAe,GAAG,qBAAqB,CAAC;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,YAAY;QACpB,OAAO,EACL,OAAO,CAAC,UAAU,KAAK,WAAW;YAClC,OAAO,CAAC,UAAU,KAAK,wBAAwB;YAC7C,CAAC,CAAE,GAAG,CAAC,WAAW,CAEF;YAChB,CAAC,CAAC,SAAS;QACf,KAAK,EACH,OAAO,CAAC,UAAU,KAAK,wBAAwB;YAC7C,CAAC,CAAE,KAAiC;YACpC,CAAC,CAAC,SAAS;QACf,iBAAiB;KAClB,CAAC,CAAC;IACH,GAAG,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;IAEpC,wBAAwB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACxD,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;IAE5D,mBAAmB,CAAC,GAAG,CACrB,iBAAiB,CAAC,IAAI,EACtB,YAAgC,CACjC,CAAC;IAEF,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC/B,6BAA6B,CAAC,GAAG,CAC/B,iBAAiB,CAAC,IAAI,EACtB,YAAgC,CACjC,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;IAEX,SAAS,cAAc;QACrB,OAAO;IACT,CAAC;IACD,SAAS,cAAc;QACrB,OAAO;IACT,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAqC,EACrC,WAAsD,EACtD,YAAwB;IAExB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;IACnD,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,MAAM,YAAY,GAAG,CACnB,QAAkC,EAClC,MAAgC,EAChC,EAAE;QACF,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5E,OAAO,MAAM;YACX,CAAC,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;YAC9E,CAAC,CAAC,YAAY,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE;QACzC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,eAAe,GAAG,IAAI,KAAK,CAAC,EAAY,EAAE;wBACxC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW;4BACzB,OAAO,oBAAoB,CACzB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAC9C,CAAC;wBACJ,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAmB,CAAC;gBAEzD,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;oBAC9C,wBAAwB,CAAC,YAAY,CAAC,CAAC;oBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC;oBACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnD,MAAM,YAAY,GAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;oBACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,MAAM,YAAY,GAAG,sBAAsB,CACzC,UAAU,EACV,QAAQ,EACR,UAAU;wBACR,CAAC,CAAC,oBAAoB;wBACtB,CAAC,CAAC,YAAY;4BACZ,CAAC,CAAC,SAAS;4BACX,CAAC,CAAE,QAAQ,CAAC,CAAC,CAA6B,CAC/C,CAAC;oBACF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAElE,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,OAAO,aAAa,CAAC;oBACvB,CAAC;oBAED,OAAO,OAAO,CAAC,KAAK,CAClB,aAAgD,EAChD,MAAM,CAAC,YAAY,CAAC,EACpB,QAAQ,CACT,CAAC;gBACJ,CAAC,CAAC;gBAEF,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBACjD,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU;wBACtC,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;4BACvC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;wBAC3D,CAAC;wBACD,IAAI,cAAc,KAAK,MAAM,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;4BAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;wBAC3D,CAAC;wBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;4BAC/C,qBAAqB,CAAC,GAAG,CACvB,cAAc,EACd,CAAC,GAAG,UAAqB,EAAE,EAAE;gCAC3B,wBAAwB,CAAC,YAAY,CAAC,CAAC;gCACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gCAClC,MAAM,YAAY,GAAG,sBAAsB,CACzC,UAAU,EACV,QAAQ,EACR,UAAU,CAAC,CAAC,CAAC,KAAK,oBAAoB;oCACpC,CAAC,CAAC,oBAAoB;oCACtB,CAAC,CAAE,UAAU,CAAC,CAAC,CAA6B,CAC/C,CAAC;gCACF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;gCAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;4BACxD,CAAC,CACF,CAAC;wBACJ,CAAC;wBACD,OAAO,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBACnD,CAAC;iBACF,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAE/B,IAAI,QAAQ,EAAE,CAAC;oBACb,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACrD,CAAC;gBAED,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CACnB,UAAqC,EACrC,WAAsD;IAEtD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;IACnD,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,MAAM,aAAa,GAAG,QAAQ,CAAC,EAC7B,QAAkC,EAClC,MAAgC;QAEhC,MAAM,YAAY,GAAG,CAAC,MAAM,kBAAkB,CAC5C,UAAU,EACV,QAAQ,CACT,CAAY,CAAC;QAEd,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAY,CAAC;IACtE,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE;QAC1C,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,eAAe,GAAG,IAAI,KAAK,CAAC,EAAY,EAAE;wBACxC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW;4BACzB,OAAO,oBAAoB,CACzB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAC9C,CAAC;wBACJ,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAmB,CAAC;gBAEzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAe;oBACpD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC;oBACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnD,MAAM,YAAY,GAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;oBACpD,MAAM,YAAY,GAAG,CAAC,MAAM,kBAAkB,CAC5C,UAAU,EACV,UAAU;wBACR,CAAC,CAAC,oBAAoB;wBACtB,CAAC,CAAC,YAAY;4BACZ,CAAC,CAAC,SAAS;4BACX,CAAC,CAAE,QAAQ,CAAC,CAAC,CAA6B,CAC/C,CAAY,CAAC;oBACd,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAElE,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,OAAO,aAAa,CAAC;oBACvB,CAAC;oBAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAC1B,aAAgD,EAChD,MAAM,CAAC,YAAY,CAAC,EACpB,QAAQ,CACT,CAAC;oBAEF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtD,CAAC,CAAC;gBAEF,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBACjD,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU;wBACtC,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;4BACvC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;wBAC3D,CAAC;wBACD,IAAI,cAAc,KAAK,MAAM,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;4BAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;wBAC3D,CAAC;wBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;4BAC/C,qBAAqB,CAAC,GAAG,CACvB,cAAc,EACd,QAAQ,CAAC,EAAE,GAAG,UAAqB;gCACjC,MAAM,YAAY,GAAG,CAAC,MAAM,kBAAkB,CAC5C,UAAU,EACV,UAAU,CAAC,CAAC,CAAC,KAAK,oBAAoB;oCACpC,CAAC,CAAC,oBAAoB;oCACtB,CAAC,CAAE,UAAU,CAAC,CAAC,CAA6B,CAC/C,CAAY,CAAC;gCACd,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;gCAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;4BACxD,CAAC,CACF,CAAC;wBACJ,CAAC;wBACD,OAAO,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBACnD,CAAC;iBACF,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAE/B,IAAI,QAAQ,EAAE,CAAC;oBACb,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACrD,CAAC;gBAED,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAU,EACV,KAA+B;IAE/B,OAAO;QACL,CAAC,0BAA0B,CAAC,EAAE,IAAI;QAClC,KAAK;QACL,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAO9B;IACC,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,eAAe;QACzD,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC,QAAQ;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,gBAAgB;KAC7D,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,0BAA0B,EAAE;QAC1D,KAAK,EAAE,MAAM,CAAC,iBAAiB;QAC/B,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE;QACpD,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,2BAA2B,EAAE;QAC3D,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,QAAmC,CAAC;AAC7C,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAe,EACf,QAAiC;IAEjC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE;QAClD,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,2BAA2B,EAAE;QACzD,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,oBAAoB,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,2BAA2B,CAAC,CAE/C,CAAC;QAEd,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,mBAAmB;QAClD,0BAA0B,IAAI,KAAK,CACpC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,UAAqC,EACrC,eAA0B,EAAE;IAE5B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,iBAAiB,UAAU,CAAC,IAAI,yCAAyC,UAAU,CAAC,UAAU,IAAI,CACnG,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,iBAAiB,GAAe;QACpC;YACE,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,GAAG,EAAE,CACf,6BAA6B,CAC3B,UAAU,EACV,MAAM,CAAC,QAAQ,CAAC,EAChB,SAAS,EACT,cAAc,CACf;SACJ;KACF,CAAC;IAEF,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACrE,iBAAiB,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,UAAU,CAAC,UAAU;YAC9B,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,iBAAiB,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK;YACrC,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAElC,MAAM,gBAAgB,GAAG,SAIxB,CAAC;IAEF,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,4BAA4B,EAAE;QACpE,KAAK,EAAE;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;SACnB;QACD,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAuB;IACtD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACpE,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAY,EACZ,cAAc,GAAG,oBAAoB,EACrC,uBAAuB,GAAG,KAAK;IAE/B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,KAAe,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;IACrD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE3D,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,YAAY,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEpD,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAChD,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CACpD,CAAC;gBACJ,CAAC;gBAED,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,IACE,uBAAuB;gBACvB,QAAQ,CAAC,KAAK,CAAC;gBACf,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAChC,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtC,kBAAkB,CAAC,GAAG,CACpB,QAAQ,EACR,4BAA4B,CAC1B,KAAK,EACL,GAAG,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EACvC;wBACE,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,GAAG,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;qBAC9C,CACF,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI;YAC/B,OAAO,OAAO,CAAC,KAAK,CAClB,WAA8C,EAC9C,MAAM,EACN,IAAI,CACL,CAAC;QACJ,CAAC;KACF,CAAU,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAqC,EACrC,QAAkC;IAElC,OAAO;QACL,CAAC,4BAA4B,CAAC,EAAE,IAAI;QACpC,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;YAC/B,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACzE,OAAO,sBAAsB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAAqC,EACrC,QAAkB,EAClB,QAAkC;IAElC,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7E,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,eAAe,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,oBAAoB,CACzB,UAAU,EACV,QAAQ,EACR,2BAA2B,CAAC,eAAe,CAAC,KAAK,CAAC,CACnD,CAAC;QACJ,CAAC;QAED,IACE,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,oBAAoB;YACjC,UAAU,CAAC,eAAe,KAAK,SAAS,EACxC,CAAC;YACD,UAAU,CAAC,eAAe,GAAG,QAAQ,CAAC;QACxC,CAAC;QAED,IAAI,eAAe,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3C,eAAe,CAAC,QAAQ,GAAG,6BAA6B,CACtD,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,CACV,CAAC;QACJ,CAAC;QAED,OAAO,oBAAoB,CACzB,UAAU,EACV,QAAQ,EACR,2BAA2B,CAAC,eAAe,CAAC,QAAQ,CAAC,CACtD,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzC,OAAO,oBAAoB,CACzB,UAAU,EACV,QAAQ,EACR,2BAA2B,CACzB,6BAA6B,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAC9D,CACF,CAAC;IACJ,CAAC;IAED,IACE,QAAQ,KAAK,SAAS;QACtB,QAAQ,KAAK,oBAAoB;QACjC,UAAU,CAAC,eAAe,KAAK,SAAS,EACxC,CAAC;QACD,UAAU,CAAC,eAAe,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,OAAO,oBAAoB,CACzB,UAAU,EACV,QAAQ,EACR,2BAA2B,CACzB,sBAAsB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAClC,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,CAAW,CACtD,CACF,CACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAAqC,EACrC,QAAkB,EAClB,KAAc;IAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAClD,uBAAuB,CACrB,QAAQ,EACR,UAAU,CAAC,IAAI,EACf,KAAK,EACL,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,UAAU,CAAC,IAAI,EAAE,EAC7D,UAAU,CAAC,UAAU,CACtB,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAkB,EAClB,WAAmB;IAEnB,OAAO,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,6BAA6B,CACpC,UAAqC,EACrC,QAAkB,EAClB,gBAA0C,EAC1C,cAAwB;IAExB,MAAM,cAAc,GAAG,yBAAyB,CAC9C,QAAQ,EACR,WAAW,UAAU,CAAC,IAAI,EAAE,EAC5B,UAAU,CAAC,SAAS,IAAI,EAAE,EAC1B;QACE,SAAS,EACP,UAAU,CAAC,UAAU,KAAK,UAAU;YACpC,UAAU,CAAC,UAAU,KAAK,WAAW;KACxC,CACF,CAAC;IAEF,OAAO,qBAAqB,CAAC,cAAc,EAAE,GAAG,EAAE,CAChD,sBAAsB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;QAC9C,MAAM,UAAU,GAAG,gBAAgB,KAAK,oBAAoB,CAAC;QAC7D,MAAM,QAAQ,GAAG,UAAU;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,gBAAgB,IAAI,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,gBAAgB,CAC7B,QAAQ,EACR,cAAc,EACd,UAAU,EACV,UAAU,CAAC,IAAI,CAChB,CAAC;QACF,MAAM,cAAc,GAAG,eAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,MAAM,GACV,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;YACxB,CAAC,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACjC,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,UAAU,CAAC,UAAU;YAChC,wBAAwB,EACtB,kIAAkI;YACpI,4BAA4B,EAC1B,gEAAgE;YAClE,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAChC,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC;YACjE,cAAc,EAAE;gBACd,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,SAAS,EAAE,cAAc;gBACzB,IAAI,EAAE,WAAW,UAAU,CAAC,IAAI,EAAE;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,iBAAiB,UAAU,CAAC,IAAI,0DAA0D,CAC3F,CAAC;YACJ,CAAC;YAED,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAuE,EACvE,QAAkB,EAClB,SAA+B;IAE/B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,iBAAiB,CAAC;QACvB,QAAQ,EAAE,MAAM;QAChB,QAAQ;QACR,SAAS;QACT,wBAAwB,EACtB,kIAAkI;QACpI,4BAA4B,EAC1B,gEAAgE;QAClE,kCAAkC,EAChC,iFAAiF;QACnF,cAAc,EAAE;YACd,IAAI,EAAE,GAAG,SAAS,WAAW;YAC7B,SAAS,EAAE,cAAc;YACzB,IAAI,EAAE,YAAY,SAAS,EAAE;SAC9B;KACF,CAAC,CAAC,KAAuB,CAAC;AAC7B,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAiC,EACjC,cAAwB,EACxB,YAAY,GAAG,KAAK,EACpB,WAAW,GAAG,cAAc;IAE5B,MAAM,gBAAgB,GACpB,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC;YACE,GAAG,QAAQ;YACX,CAAC,0BAA0B,CAAC,EAAE,cAAc;SAC7C,CAAC;IAER,OAAO,IAAI,KAAK,CAA0B,EAA6B,EAAE;QACvE,GAAG,CAAC,OAAO,EAAE,QAAQ;YACnB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACtE,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,kBAAkB,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEzC,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,kBAAkB,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,sBAAsB,CAAC,KAAK,CAAC;gBAClC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC;gBACxD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,wBAAwB,CAAC,KAAK,CAAC;QAC/B,OAAO,KAAK,KAAK,UAAU,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAe,EACf,WAAmB,EACnB,QAAgB;IAEhB,MAAM,cAAc,GAClB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACnD,CAAC,CAAC,4BAA4B,CAAC,MAAM,EAAE,GAAG,WAAW,IAAI,QAAQ,EAAE,EAAE;YACjE,SAAS,EAAE,cAAc;YACzB,IAAI,EAAE,WAAW,WAAW,UAAU,QAAQ,EAAE;SACjD,CAAC;QACJ,CAAC,CAAC,MAAM,CAAC;IAEb,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;QACxD,MAAM,KAAK,GACT,OAAO,cAAc,KAAK,UAAU;YAClC,CAAC,CAAE,cAAkD,CAAC,GAAG,IAAI,CAAC;YAC9D,CAAC,CAAC,cAAc,CAAC;QAErB,OAAO,WAAW,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,mBAAmB,CAAmB,KAAK,CAAC,CAAC;IACnD,CAAC,CAAkC,CAAC;IAEpC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE;QAClD,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAAqB,EACrB,MAA+B,EAC/B,QAAkB,EAClB,SAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,iBAAiB,CAAC;YAChB,QAAQ,EAAE,QAAQ;YAClB,QAAQ;YACR,SAAS;YACT,wBAAwB,EACtB,kIAAkI;YACpI,4BAA4B,EAC1B,gEAAgE;SACnE,CAAC,CAAC,KAAK;QACV,CAAC,CAAC,QAAQ,CAAC;IAEb,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAED,QAAQ,CAAC,CAAC,kBAAkB,CAC1B,YAAqB,EACrB,MAA+B;IAM/B,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,QAIN;QACH,CAAC,CAAC,QAAQ,CAAC;IAEb,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAaD,SAAS,oBAAoB,CAC3B,YAAqB;IAErB,OAAO,IAAI,KAAK,CACd,EAAE,EACF;QACE,GAAG,CAAC,OAAO,EAAE,QAAQ;YACnB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IACE,QAAQ,KAAK,yBAAyB;gBACtC,OAAO,YAAY,KAAK,UAAU,EAClC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;KACF,CACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAAqB,EACrB,GAAW;IAEX,MAAM,OAAO,GACX,GAAG,KAAK,yBAAyB;QAC/B,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY;QACpB,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,OAAO,CAAC,MAAM,6BAA6B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAY,CAAC;IACxE,CAAyB,CAAC;IAE1B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,6BAA6B,EAAE;QAC1D,KAAK,EAAE;YACL,GAAG;YACH,OAAO;SACR;QACD,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CACpC,GAAW,EACX,OAAsB;IAEtB,OAAO;QACL,CAAC,gCAAgC,CAAC,EAAE,IAAI;QACxC,GAAG;QACH,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAAuE;IAEvE,OAAO;QACL,CAAC,gCAAgC,CAAC,EAAE,IAAI;QACxC,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAA2B,EAC3B,YAAqB;IAErB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAA4B,CAAC;IAC1E,MAAM,UAAU,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,iBAAiB,UAAU,CAAC,IAAI,2CAA2C,CAC5E,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAExD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,iBAAiB,UAAU,CAAC,IAAI,2EAA2E,CAC5G,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAErD,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC;AASD,MAAM,UAAU,yBAAyB,CAAC,YAAqB;IAC7D,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACnE,2BAA2B,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAExD,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;QACvC,OAAO,oBAAoB,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,IACE,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EACxD,CAAC;QACD,OAAO,oBAAoB,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,OAAO,2BAA2B,CAChC,oBAAoB,CAAC,YAAY,EACjC,oBAAoB,CAAC,KAAK,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,YAAqB;IAErB,IAAI,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5E,OAAO,0BAA0B,CAAC,YAAY,CAAC;YAC7C,OAAO,aAAa,KAAK,UAAU;YACnC,CAAC,CAAC;gBACE,KAAK,EAAE,aAAa;gBACpB,YAAY,EAAE,aAAgC;aAC/C;YACH,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,YAAY,GAAiC,EAAE,CAAC;IACtD,IAAI,YAAyC,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,yBAAyB,CAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,CAC7C,CAAC;QAEF,IACE,GAAG,KAAK,yBAAyB;YACjC,OAAO,aAAa,KAAK,UAAU,EACnC,CAAC;YACD,YAAY,GAAG,aAAgC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IACpC,CAAC;IAED,IAAI,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO;YACL,KAAK,EAAE,YAAY;YACnB,YAAY;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,sBAAsB,CAAC,KAAK,CAAC;QAClC,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,OAAO,EAAE;QAChD,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAS,2BAA2B,CAClC,YAAyC,EACzC,YAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,CAAC,wBAAwB,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,YAAY;YAC/D,KAAK,CACV,CACF,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,YAAY,EAAE;QAC7B,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;YAED,IACE,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACjC,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,EAChE,CAAC;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,QAAQ;YACnB,OAAO,CACL,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACzB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACjC,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CAAC;gBACN,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;gBAClC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;aACjC,CAAC,CACuB,CAAC;QAC9B,CAAC;QACD,wBAAwB,CAAC,MAAM,EAAE,QAAQ;YACvC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,OAAO,CACL,OAAO,CAAC,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI;oBAC1D,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC;iBACzD,CACF,CAAC;YACJ,CAAC;YAED,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,OAAO,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAMD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,6BAA6B,IAAI,KAAK,CAAC;AAC/E,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA2B;IAC7D,OAAO,KAAK,CAAC,6BAA6B,CAAC,CAAC,GAAG,KAAK,yBAAyB,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc;IAEd,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,uBAAuB,IAAI,KAAK,CAAC,EACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,SAA+B,EAC/B,eAAqC,EACrC,cAAsB;IAEtB,IAAI,SAAS,KAAK,QAAQ,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,gEAAgE,cAAc,IAAI,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAmB;IACnD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,+BAA+B,CACtC,cAAwD;IAExD,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,OAAO,GAAG,KAAK;SACZ,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,WAAW,EAAE,YAAY,CAAC;AAC/B,CAAC;AAED,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAUtE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,CAC9C,aAAa,EACb;IACE,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;CAClB,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAChD,eAAe,EACf;IACE,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAW;CAC3B,CACF,CAAC;AAEF,MAAM,WAAW,GAAG,YAAY,CAC9B,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,wBAAwB,EAAE,EAC1D,CAAC,MAA6B,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACtE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,iBAAiB,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC,mBAAmB,CAAC;AAEpE,MAAM,wBAAwB,GAAG,WAAW,CAAC,eAAe,CAAC;AAE7D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO;QACL,wBAAwB,CAAC,IAAI,CAAa;QAC1C;YACE,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,GAAG,EAAE;gBACf,MAAM,UAAU,GACd,MAAM,CAAC,cAAc,EAAE;oBACrB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACf,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,EAAE,GAAG,CACT,MAAM,CACJ,kBAAkE,EAClE,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,IAAI,0BAA0B,CAChC,CAAC,IAAI,EAAE,CAAC;gBAET,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAsB,CAAC;YAC/D,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,OAAO;QACL;YACE,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,GAAG,EAAE;gBACf,MAAM,UAAU,GACd,MAAM,CAAC,gBAAgB,EAAE;oBACvB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACf,CAAC,IAAI,EAAE,CAAC;gBAEX,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,CAAwB,CAAC;YACzD,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClC,CAAC;AAWD,MAAM,SAAS,CAAC,CAAC,QAAQ;IAKvB,OAAO,CAAC,MAAM;QACZ,CAAC,4BAA4B,CAAC,EAAE,IAAI;QACpC,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;KACpD,CAAsB,CAAC;AAC1B,CAAC;AAWD,MAAM,SAAS,CAAC,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM;QACZ,CAAC,4BAA4B,CAAC,EAAE,IAAI;QACpC,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACtD,CAAwB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,QAAkB,EAClB,QAAgB,EAChB,iBAAsC,EAAE,EACxC,UAA4C,EAAE;IAE9C,IAAI,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,gBAAgB,GAAsB,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,gBAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAElD,+EAA+E;IAC/E,oFAAoF;IACpF,IAAI,WAAW,GAAsB,EAAE,CAAC;IACxC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACtE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,yFAAyF;IACzF,qFAAqF;IACrF,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,6EAA6E;IAC7E,8EAA8E;IAC9E,wBAAwB;IACxB,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS;QACtC,CAAC,CAAC,GAAG,QAAQ,IAAI,CACb,QAAQ,CAAC,GAAG,CACV,kBAAkE,EAClE,IAAI,CACL,IAAI,0BAA0B,CAChC,CAAC,IAAI,EAAE,EAAE;QACZ,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,GAAG,CAAC;QACjB,CAAC,CAAC;YACE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,GAAG,WAAW;YACd,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,cAAc;SACf;QACH,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,yBAAyB,CAC3C;QACE,gBAAgB,CAAC,QAAQ,CAAC;QAC1B,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE;QACjD,GAAG,cAAc;KAClB,EACD,QAA+B,EAC/B,WAAW,QAAQ,GAAG,CACvB,CAAC;IAEF,gBAAgB,EAAE,SAAS,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import {\n assertInInjectionContext,\n createEnvironmentInjector,\n DestroyRef,\n EnvironmentInjector,\n EnvironmentProviders,\n inject,\n InjectionToken,\n Injector,\n isSignal,\n Provider,\n runInInjectionContext,\n Signal,\n Type,\n untracked,\n} from './host/craft-compat';\nimport type { Observable } from 'rxjs';\nimport {\n isGenerator,\n runCraftGenerator,\n SERVICE_APP_START_REQUEST_MARKER,\n SERVICE_DEPENDENCY_ACCESS_MARKER,\n SERVICE_YIELD_REQUEST_MARKER,\n type ResolveGeneratorResult,\n} from './craft-generator-runtime';\nimport { registerResolvedService } from './craft-register-for-runtime';\nimport {\n createYieldableReactiveValue,\n isYieldableReactiveValue,\n rawReactiveValue,\n type YieldableReactiveProperties,\n type YieldableReactiveValue,\n} from './reactive-read';\nexport {\n SERVICE_APP_START_REQUEST_MARKER,\n SERVICE_DEPENDENCY_ACCESS_MARKER,\n SERVICE_YIELD_REQUEST_MARKER,\n} from './craft-generator-runtime';\nimport {\n CRAFT_SERVICE_PROVIDER_BRAND,\n SERVICE_PROVIDED_INPUT_KEY,\n SERVICE_ROOT_EXPOSURE_KEY,\n type CRAFT_SERVICE_PROVIDER_TYPE_BRAND,\n} from './craft-service.shared';\nimport {\n COMPONENT_REGISTER,\n ComponentRegister,\n ɵfallbackComponentRegister,\n} from './component-register';\nimport { injectFnWrapper } from './fn-wrapper';\nimport type {\n CallableShell,\n ConcreteServiceScope,\n MergeObjectUnion,\n ProvidedInputKey,\n RealCapableScope,\n RequirementScope,\n RootExposureKey,\n Simplify,\n UnionToTuple,\n} from './craft-service.shared';\nimport type { ServiceTrackedDepsRequest } from './craft-primitive-gen';\nimport {\n markNamedReactiveProperties,\n markYieldableMethod,\n yieldableInvocation,\n type Yieldable,\n} from './yieldable';\nimport type { BrandReactiveProperties } from './yieldable';\nimport {\n craftToken,\n type CraftToken,\n ɵregisterCraftTokenHostToken,\n} from './host/craft-injector';\nimport { ɵcraftInjectorFromHost } from './host/craft-injector-host';\n\nexport declare const SERVICE_HELPER_DEPENDENCIES: unique symbol;\nexport declare const SERVICE_YIELD_METADATA: unique symbol;\nexport declare const SERVICE_META_DATA_TYPE: unique symbol;\ndeclare const SERVICE_APP_START_CALLBACK_YIELDED: unique symbol;\n\nexport const SERVICE_EXPOSURE_TOKEN_MARKER = Symbol(\n 'service-exposure-token-marker',\n);\nexport const SERVICE_RUNTIME_META = Symbol('service-runtime-meta');\nconst SERVICE_RUNTIME_META_GLOBAL = Symbol.for(\n '@craft-ts/core/service-runtime-meta',\n);\nconst SERVICE_RUNTIME_DEFINITION = Symbol('service-runtime-definition');\nconst REGISTERED_SERVICES = new Map<string, ServiceReference>();\nconst REGISTERED_APP_START_SERVICES = new Map<string, ServiceReference>();\n\ntype DerivedPropertiesTracking<\n Used extends object = {},\n Exposed extends object = {},\n> = {\n derivedPropertiesUsed: Simplify<Used>;\n derivedPropertiesExposed: Simplify<Exposed>;\n};\n\nexport type ServiceDependencies<\n Scope = unknown,\n Dependencies = {},\n Derived = undefined,\n> = Simplify<\n {\n providedIn: Scope;\n dependencies: Simplify<Dependencies>;\n } & (Derived extends undefined ? {} : Derived)\n>;\n\ntype WithTrackedDependencies<Helper, Metadata> = Helper & {\n readonly [SERVICE_HELPER_DEPENDENCIES]?: Metadata;\n};\n\ntype ExtractTrackedMetadata<Helper> = Helper extends {\n readonly [SERVICE_HELPER_DEPENDENCIES]?: infer Metadata;\n}\n ? Metadata\n : never;\n\nexport type GetServiceDependencies<ServiceHelper> =\n ResolveServiceTrackingMetadata<ExtractTrackedMetadata<ServiceHelper>>;\n\nexport type GetServiceOutput<ServiceHelper> =\n ExtractTrackedMetadata<ServiceHelper> extends ServiceTrackingMetadata<\n any,\n any,\n infer Output,\n any,\n any,\n any,\n any,\n any\n >\n ? Output\n : never;\n\nexport type GetServiceYields<ServiceHelper> =\n ExtractTrackedMetadata<ServiceHelper> extends ServiceTrackingMetadata<\n any,\n infer Scope extends ConcreteServiceScope,\n infer Output,\n any,\n any,\n any,\n any,\n any\n >\n ?\n | ServiceYieldRequest<\n Scope,\n Output,\n ExtractTrackedMetadata<ServiceHelper>\n >\n | (Output extends object ? ExposureYield<Output> : never)\n : never;\n\ntype ConstantCase<\n Value extends string,\n IsStart extends boolean = true,\n> = Value extends `${infer First}${infer Rest}`\n ? First extends Lowercase<First>\n ? `${Uppercase<First>}${ConstantCase<Rest, false>}`\n : First extends `${number}`\n ? `${First}${ConstantCase<Rest, false>}`\n : `${IsStart extends true ? '' : '_'}${First}${ConstantCase<Rest, false>}`\n : '';\n\ntype ServiceMetaDataKey<Name extends string> =\n `${ConstantCase<Name>}_META_DATA`;\n\ntype MetaDataTypeInfo<MetaData> = MetaData extends {\n readonly [SERVICE_META_DATA_TYPE]?: infer Info;\n}\n ? Info\n : never;\n\ntype GetServiceMetaDataInputs<MetaData> =\n MetaDataTypeInfo<MetaData> extends {\n inputs: infer Inputs extends object;\n }\n ? Inputs\n : {};\n\ntype GetServiceMetaDataOutput<MetaData> =\n MetaDataTypeInfo<MetaData> extends {\n output: infer Output;\n }\n ? Output\n : never;\n\ntype GetServiceMetaDataDependencies<MetaData> =\n MetaDataTypeInfo<MetaData> extends {\n dependencies: infer Dependencies;\n }\n ? Dependencies\n : never;\n\ntype GetServiceMetaDataTracking<MetaData> =\n MetaDataTypeInfo<MetaData> extends {\n tracking: infer Tracking;\n }\n ? Tracking\n : never;\n\ntype GetServiceMetaDataProvidedInput<MetaData> =\n MetaDataTypeInfo<MetaData> extends {\n providedInput: infer ProvidedInput;\n }\n ? ProvidedInput\n : never;\n\nconst ABSTRACT_SERVICE_MARKER = Symbol('abstract-service-marker');\nconst SERVICE_REQUIREMENT_MARKER = Symbol('service-requirement-marker');\n\nconst PROVIDED_ELSEWHERE =\n 'Provided elsewhere #warn-check-docs:inputs' as const;\n\ntype ServiceScope = ConcreteServiceScope | 'abstract';\n\ntype AnyFactory = (...args: any[]) => any;\n\ntype PublicServiceInputs<Inputs extends object> = Simplify<\n Omit<Inputs, ProvidedInputKey>\n>;\n\ntype HasProvidedInput<Inputs extends object> = unknown extends Inputs\n ? false\n : ProvidedInputKey extends keyof Inputs\n ? true\n : false;\n\ntype ServiceProvidedInput<Inputs extends object> =\n HasProvidedInput<Inputs> extends true\n ? Inputs[ProvidedInputKey & keyof Inputs]\n : never;\n\ntype ExtractHelperValue<HelperObject> = HelperObject[keyof HelperObject];\n\ntype NormalizeProvidedInput<Args extends unknown[]> = Args extends []\n ? never\n : Args extends [infer Only]\n ? Only\n : Args;\n\ntype ProvideArguments<ProvidedInput> = [ProvidedInput] extends [never]\n ? []\n : [PublicInputValue<ProvidedInput>];\n\nexport type CraftServiceProvider =\n | Provider\n | EnvironmentProviders\n | CraftServiceProvider[];\n\nexport type BrandedServiceProvider<\n Name extends string = string,\n Scope extends RequirementScope = RequirementScope,\n Output = unknown,\n Yielded = unknown,\n> = Provider & {\n readonly [CRAFT_SERVICE_PROVIDER_BRAND]?: {\n name: Name;\n providedIn: Scope;\n output: Output;\n yielded: Yielded;\n };\n};\n\n/** Provider type returned by Craft service factories. */\nexport type NamedBrandedServiceProvider<\n Name extends string = string,\n Scope extends RequirementScope = RequirementScope,\n Output = unknown,\n Yielded = unknown,\n> = BrandedServiceProvider<Name, Scope, Output, Yielded> & {\n readonly [CRAFT_SERVICE_PROVIDER_TYPE_BRAND]: { name: Name };\n};\n\nexport type ServiceMetaData<\n Name extends string = string,\n Scope extends ConcreteServiceScope = ConcreteServiceScope,\n Inputs extends object = {},\n Output = unknown,\n Dependencies = ServiceDependencies,\n InjectHelper = (...args: any[]) => unknown,\n Tracking = unknown,\n ProvidedInput = never,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n BrowserBoundary extends boolean = false,\n AppStart extends boolean = false,\n> = Simplify<\n {\n readonly kind: 'service-meta-data';\n readonly name: Name;\n readonly providedIn: Scope;\n readonly browserBoundary: BrowserBoundary;\n readonly appStart: AppStart;\n readonly inject: InjectHelper;\n readonly [SERVICE_META_DATA_TYPE]?: {\n inputs: Inputs;\n output: Output;\n dependencies: Dependencies;\n tracking: Tracking;\n providedInput: ProvidedInput;\n };\n readonly [SERVICE_RUNTIME_META]?: ServiceMetaData<\n Name,\n Scope,\n Inputs,\n Output,\n Dependencies,\n InjectHelper,\n Tracking,\n ProvidedInput,\n ProvideArgs,\n BrowserBoundary,\n AppStart\n >;\n } & (Scope extends 'toProvide' | 'manuallyProvidedAtRoot'\n ? { readonly provide: (...args: ProvideArgs) => CraftServiceProvider }\n : {}) &\n (Scope extends 'manuallyProvidedAtRoot'\n ? { readonly token: InjectionToken<Output> }\n : {})\n>;\n\ntype AnyServiceMetaData = {\n readonly kind: 'service-meta-data';\n readonly name: string;\n readonly providedIn: ConcreteServiceScope;\n readonly browserBoundary: boolean;\n readonly appStart: boolean;\n readonly inject: (...args: any[]) => unknown;\n readonly provide?: (...args: any[]) => CraftServiceProvider;\n readonly token?: InjectionToken<unknown>;\n readonly [SERVICE_META_DATA_TYPE]?: {\n inputs: any;\n output: any;\n dependencies: any;\n tracking: any;\n providedInput: any;\n };\n readonly [SERVICE_RUNTIME_META]?: AnyServiceMetaData;\n};\n\ntype WithServiceRuntimeMeta<\n Helper,\n MetaData extends AnyServiceMetaData,\n> = Helper & {\n readonly [SERVICE_RUNTIME_META]?: MetaData;\n};\n\ntype ExtractServiceRuntimeMeta<ServiceReference> = ServiceReference extends {\n readonly [SERVICE_RUNTIME_META]?: infer MetaData extends AnyServiceMetaData;\n}\n ? MetaData\n : never;\n\ntype AnyServiceRuntimeReference = {\n readonly [SERVICE_RUNTIME_META]?: AnyServiceMetaData;\n};\n\ntype InternalServiceMetaData = AnyServiceMetaData & {\n readonly [SERVICE_RUNTIME_DEFINITION]: ConcreteRuntimeDefinition;\n};\n\ntype FactoryInputs<Factory> = Factory extends (...args: infer Args) => any\n ? Args extends []\n ? {}\n : Args[0] extends object\n ? Args[0]\n : {}\n : never;\n\ntype FactoryReturn<Factory> = Factory extends (...args: any[]) => infer Result\n ? Result\n : never;\n\ntype FactoryOutput<Factory> =\n FactoryReturn<Factory> extends Generator<any, infer Result, any>\n ? Result\n : FactoryReturn<Factory>;\n\ntype FactoryYields<Factory> =\n FactoryReturn<Factory> extends Generator<infer Yielded, any, any>\n ? Yielded\n : never;\n\ntype YieldedServiceScope<Yielded> =\n Yielded extends ServiceYieldRequest<infer Scope, any, any> ? Scope : never;\n\ntype ValidateFactoryScope<\n Scope extends ConcreteServiceScope,\n Factory extends AnyFactory,\n> = ValidateYieldedScope<Scope, FactoryYields<Factory>, unknown>;\n\ntype ValidateRequirementFactory<\n Factory extends AnyFactory,\n Requirement extends ServiceRequirement<any, any>,\n> =\n FactoryOutput<Factory> extends RequirementContract<Requirement>\n ? unknown\n : never;\n\ntype ValidateProvidedInputScope<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n> =\n HasProvidedInput<Inputs> extends true\n ? Scope extends RealCapableScope\n ? unknown\n : never\n : unknown;\n\ntype ValidateYieldedScope<\n Scope extends ConcreteServiceScope,\n Yielded,\n Value,\n> = Scope extends 'global'\n ? Extract<YieldedServiceScope<Yielded>, 'toProvide'> extends never\n ? Value\n : never\n : Value;\n\ntype OptionalKeys<ObjectType extends object> = {\n [Key in keyof ObjectType]-?: {} extends Pick<ObjectType, Key> ? Key : never;\n}[keyof ObjectType];\n\ntype RequiredKeys<ObjectType extends object> = Exclude<\n keyof ObjectType,\n OptionalKeys<ObjectType>\n>;\n\ntype AppStartResult = Observable<unknown> | Promise<unknown> | void;\n\ntype AppStartCapableScope = 'global' | RealCapableScope;\n\ntype HasRequiredPublicInputs<Inputs extends object> = [\n RequiredKeys<PublicServiceInputs<Inputs>>,\n] extends [never]\n ? false\n : true;\n\ntype ValidateAppStartScope<\n Scope extends ConcreteServiceScope,\n IsEnabled extends boolean,\n> = IsEnabled extends true\n ? Scope extends AppStartCapableScope\n ? unknown\n : never\n : unknown;\n\ntype ValidateAppStartInputs<\n Inputs extends object,\n IsEnabled extends boolean,\n> = IsEnabled extends true\n ? HasProvidedInput<Inputs> extends true\n ? never\n : HasRequiredPublicInputs<Inputs> extends true\n ? never\n : unknown\n : unknown;\n\ntype ValidateAppStartFactory<\n Factory extends AnyFactory,\n IsEnabled extends boolean,\n> = IsEnabled extends true\n ? FactoryReturn<Factory> extends Generator<infer Yielded, any, any>\n ? Extract<Yielded, ServiceAppStartRequest<any>> extends never\n ? never\n : unknown\n : never\n : FactoryReturn<Factory> extends Generator<infer Yielded, any, any>\n ? Extract<Yielded, ServiceAppStartRequest<any>> extends never\n ? unknown\n : never\n : unknown;\n\ntype MissingInputKeys<Inputs extends object, Config> = Exclude<\n RequiredKeys<Inputs>,\n keyof NonNullable<Config>\n>;\n\ntype MissingInputsMessage<Inputs extends object, Config> = [\n MissingInputKeys<Inputs, Config>,\n] extends [never]\n ? never\n : `Inputs Error, ${MissingInputKeys<Inputs, Config> & string} is not provided`;\n\ntype BrandServiceProperties<Output> =\n Output extends Signal<any> ? Output : BrandReactiveProperties<Output>;\n\ntype MaybeErrorOutput<Inputs extends object, Config, Output> =\n MissingInputsMessage<Inputs, Config> extends never\n ? BrandServiceProperties<Output>\n : MissingInputsMessage<Inputs, Config>;\n\ntype InputBindings<\n Inputs extends object,\n Scope extends ConcreteServiceScope,\n> = keyof Inputs extends never\n ? {}\n : {\n [Key in keyof Inputs]:\n | PublicInputValue<Inputs[Key]>\n | AllowedProvidedElsewhere<Scope>;\n };\n\ntype PublicInputValue<Value> =\n Value extends Yieldable<[], infer Resolved, any>\n ? Resolved | Signal<Resolved> | YieldableReactiveValue<Resolved> | Value\n : Value;\n\ntype PublicInputBindings<\n Inputs extends object,\n Scope extends ConcreteServiceScope,\n> = InputBindings<PublicServiceInputs<Inputs>, Scope>;\n\ntype StrictBindings<Shape extends object, Candidate extends object> =\n Exclude<keyof Candidate, keyof Shape> extends never ? Candidate : never;\n\ntype AllowedProvidedElsewhere<Scope extends ConcreteServiceScope> =\n Scope extends 'global' | 'toProvide' | 'manuallyProvidedAtRoot'\n ? typeof PROVIDED_ELSEWHERE\n : never;\n\ntype SelectableOutput<Inputs extends object, Config, Output> =\n MaybeErrorOutput<Inputs, Config, Output> extends infer Result\n ? Result extends object\n ? Result\n : never\n : never;\n\ntype PublicExposedOutput<Exposed> = Exposed extends object\n ? BrandReactiveProperties<Omit<Exposed, RootExposureKey>>\n : Exposed;\n\ntype ExposedOutput<Output, Exposed> = Output extends (...args: any[]) => any\n ? RootExposureKey extends keyof Exposed\n ? CallableShell<Output> & PublicExposedOutput<Exposed>\n : PublicExposedOutput<Exposed>\n : PublicExposedOutput<Exposed>;\n\ntype OutputDependencyKeys<Output extends object> = Extract<\n keyof Output,\n string\n>;\n\ntype ExposureTokenMetadata<Key extends string = string, Value = unknown> = {\n key: Key;\n value: Value;\n};\n\ntype DependencyToken<Key extends string, Value> = {\n (): Generator<ServiceDependencyAccessRequest<Key, Value>, Value, unknown>;\n readonly [SERVICE_EXPOSURE_TOKEN_MARKER]: ExposureTokenMetadata<Key, Value>;\n};\n\ntype PropertyExposureTokens<Output extends object> = {\n [Key in OutputDependencyKeys<Output>]: DependencyToken<Key, Output[Key]>;\n};\n\ntype CallableExposureRootToken<Output extends (...args: any[]) => any> = {\n /**\n * Root callable token for the exposed service.\n *\n * `yield* $self()` gives access to the original callable service without\n * exposing it publicly.\n *\n * Returning `$self` from the exposure object re-attaches that callable to\n * the root of the final exposed value.\n *\n * Example:\n * `return { $self, incrementCounter: increment }`\n *\n * The final result stays callable via `myRef()`, but never exposes a public\n * `myRef.$self` property.\n */\n $self: DependencyToken<RootExposureKey, Output>;\n};\n\ntype ExposureTokens<Output extends object> = PropertyExposureTokens<Output> &\n (Output extends (...args: any[]) => any\n ? CallableExposureRootToken<Output>\n : {});\n\ntype ExposureTokenKeys<Output extends object> = Extract<\n keyof ExposureTokens<Output>,\n string\n>;\n\ntype ExposureTokenValue<\n Output extends object,\n Key extends ExposureTokenKeys<Output>,\n> =\n Key extends OutputDependencyKeys<Output>\n ? Output[Key]\n : Key extends RootExposureKey\n ? Output\n : never;\n\ntype TokenSourceKey<Value> = Value extends {\n readonly [SERVICE_EXPOSURE_TOKEN_MARKER]: ExposureTokenMetadata<\n infer Key,\n any\n >;\n}\n ? Key\n : never;\n\ntype TokenResolvedValue<Value> = Value extends {\n readonly [SERVICE_EXPOSURE_TOKEN_MARKER]: ExposureTokenMetadata<\n any,\n infer Resolved\n >;\n}\n ? Resolved\n : never;\n\ntype MaterializeExposureValue<Value> = [TokenResolvedValue<Value>] extends [\n never,\n]\n ? Value\n : TokenResolvedValue<Value>;\n\ntype MaterializeExposureResult<Value> = Value extends object\n ? {\n [Key in keyof Value]: MaterializeExposureValue<Value[Key]>;\n }\n : MaterializeExposureValue<Value>;\n\ntype ServiceDependencyAccessRequest<Key extends string, Result> = Readonly<{\n [SERVICE_DEPENDENCY_ACCESS_MARKER]: true;\n key: Key;\n resolve: () => Result;\n}>;\n\ntype ExposureYield<Output extends object> = {\n [Key in ExposureTokenKeys<Output>]: ServiceDependencyAccessRequest<\n Key,\n ExposureTokenValue<Output, Key>\n >;\n}[ExposureTokenKeys<Output>];\n\ntype InvalidRootExposureAliases<Exposed extends object> = Extract<\n {\n [Key in keyof Exposed]-?: TokenSourceKey<\n Exposed[Key]\n > extends RootExposureKey\n ? Key extends RootExposureKey\n ? never\n : Key & string\n : never;\n }[keyof Exposed],\n string\n>;\n\ntype ValidateRootExposure<Exposed extends object> = [\n InvalidRootExposureAliases<Exposed>,\n] extends [never]\n ? Exposed\n : never;\n\ntype ExposureSelector<\n Output extends object,\n Exposed extends object,\n Yielded = never,\n> = (\n dependencies: ExposureTokens<Output>,\n) =>\n | ValidateRootExposure<Exposed>\n | Generator<Yielded, ValidateRootExposure<Exposed>, unknown>;\n\ntype ExposureSourceRecord<Value> = [TokenSourceKey<Value>] extends [never]\n ? never\n : {\n [Key in TokenSourceKey<Value>]: MaterializeExposureValue<Value>;\n };\n\ntype ExposureAliasRecord<Key extends PropertyKey, Value> = [\n TokenSourceKey<Value>,\n] extends [never]\n ? never\n : Key extends string\n ? { [Property in Key]: MaterializeExposureValue<Value> }\n : never;\n\ntype DirectlyUsedProperties<Exposed extends object> = MergeObjectUnion<\n {\n [Key in keyof Exposed]-?: ExposureSourceRecord<Exposed[Key]>;\n }[keyof Exposed]\n>;\n\ntype DirectlyExposedProperties<Exposed extends object> = MergeObjectUnion<\n {\n [Key in keyof Exposed]-?: ExposureAliasRecord<Key, Exposed[Key]>;\n }[keyof Exposed]\n>;\n\ntype YieldedUsedProperties<Yielded> = MergeObjectUnion<\n Yielded extends ServiceDependencyAccessRequest<\n infer Key extends string,\n infer Result\n >\n ? { [Property in Key]: Result }\n : never\n>;\n\ntype DerivedPropertiesForExposure<\n Exposed extends object,\n Yielded,\n> = DerivedPropertiesTracking<\n DirectlyUsedProperties<Exposed> & YieldedUsedProperties<Yielded>,\n DirectlyExposedProperties<Exposed>\n>;\n\nexport type ServiceTrackingMetadata<\n Name extends string = string,\n Scope extends ConcreteServiceScope = ConcreteServiceScope,\n Output = unknown,\n Yielded = unknown,\n Derived = undefined,\n ProvidedInput = never,\n BrowserBoundary extends boolean = false,\n AppStart extends boolean = false,\n> = {\n name: Name;\n providedIn: Scope;\n output: Output;\n yielded: Yielded;\n derived: Derived;\n providedInput: ProvidedInput;\n browserBoundary: BrowserBoundary;\n appStart: AppStart;\n};\n\ntype AnyServiceTrackingMetadata = ServiceTrackingMetadata<\n string,\n ConcreteServiceScope,\n unknown,\n unknown,\n any,\n any,\n boolean,\n boolean\n>;\n\ntype WithServiceNodeFlags<\n Derived,\n BrowserBoundary extends boolean,\n AppStart extends boolean,\n> = Simplify<\n {\n browserBoundary: BrowserBoundary;\n appStart: AppStart;\n } & ([Derived] extends [undefined] ? {} : Derived)\n>;\n\ntype TrackingBrowserBoundary<Metadata> =\n Metadata extends ServiceTrackingMetadata<\n any,\n any,\n any,\n any,\n any,\n any,\n infer BrowserBoundary extends boolean,\n any\n >\n ? BrowserBoundary\n : false;\n\ntype DependencyBrowserBoundary<Node> = Node extends {\n browserBoundary: infer BrowserBoundary extends boolean;\n}\n ? BrowserBoundary\n : false;\n\ntype DependencyAppStart<Node> = Node extends {\n appStart: infer AppStart extends boolean;\n}\n ? AppStart\n : false;\n\ntype OrBoolean<Left extends boolean, Right extends boolean> = true extends\n | Left\n | Right\n ? true\n : false;\n\ntype WholeServiceUsageTracking = {\n usesWholeService: true;\n};\n\ntype DirectDependencyRequestUnion<Yielded> = Extract<\n Yielded,\n ServiceYieldRequest<any, any, any>\n>;\n\ntype AppStartDependencyRequestUnion<Yielded> =\n Extract<Yielded, ServiceAppStartRequest<any>> extends infer Request\n ? Request extends ServiceAppStartRequest<infer AppStartYielded>\n ? Extract<AppStartYielded, ServiceYieldRequest<any, any, any>>\n : never\n : never;\n\ntype DependencyRequests<Yielded> = UnionToTuple<\n | DirectDependencyRequestUnion<Yielded>\n | AppStartDependencyRequestUnion<Yielded>\n>;\n\ntype DependencyMetadata<Request> =\n Request extends ServiceYieldRequest<any, any, infer Metadata>\n ? Metadata\n : never;\n\ntype DependencyName<Request> =\n DependencyMetadata<Request> extends ServiceTrackingMetadata<\n infer Name,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? Name\n : never;\n\ntype NodeDerivedProperties<Node> = Node extends {\n derivedPropertiesUsed: infer Used extends object;\n derivedPropertiesExposed: infer Exposed extends object;\n}\n ? DerivedPropertiesTracking<Used, Exposed>\n : undefined;\n\ntype MergeDerivedProperties<Left, Right> = [Left] extends [\n DerivedPropertiesTracking<infer LeftUsed, infer LeftExposed>,\n]\n ? [Right] extends [\n DerivedPropertiesTracking<infer RightUsed, infer RightExposed>,\n ]\n ? DerivedPropertiesTracking<\n Simplify<LeftUsed & RightUsed>,\n Simplify<LeftExposed & RightExposed>\n >\n : undefined\n : undefined;\n\ntype DependencyChildren<Node> = Node extends {\n dependencies: infer Dependencies extends object;\n}\n ? Dependencies\n : {};\n\ntype DependencyScope<Node> = Node extends { providedIn: infer Scope }\n ? Scope\n : never;\n\ntype MergeDependencyNodeMaps<\n Left extends object,\n Right extends object,\n> = Simplify<{\n [Name in Extract<keyof Left | keyof Right, string>]: Name extends keyof Left\n ? Name extends keyof Right\n ? MergeDependencyNodes<Left[Name], Right[Name]>\n : Left[Name]\n : Name extends keyof Right\n ? Right[Name]\n : never;\n}>;\n\ntype MergeDependencyNodes<Left, Right> = ServiceDependencies<\n DependencyScope<Left> & DependencyScope<Right>,\n MergeDependencyNodeMaps<DependencyChildren<Left>, DependencyChildren<Right>>,\n WithServiceNodeFlags<\n MergeDerivedProperties<\n NodeDerivedProperties<Left>,\n NodeDerivedProperties<Right>\n >,\n DependencyBrowserBoundary<Left> & DependencyBrowserBoundary<Right>,\n OrBoolean<DependencyAppStart<Left>, DependencyAppStart<Right>>\n >\n>;\n\n// Dependency maps carried by primitives consumed through `yield*`. A primitive\n// generator surfaces its already-built dependency map (keyed by service name) on\n// `ServiceTrackedDepsRequest`; these are folded into the host service tree so\n// dependencies used only inside loaders/effects are detected.\n// An empty dep map has to leave the union BEFORE it is formed: `{} | Map`\n// reduces to `{}` (every object type is assignable to it), which would erase\n// every sibling map — a service mixing a dependency-free primitive with a\n// dependency-carrying one would silently lose the latter.\ntype TrackedDepMapOf<Request> =\n Request extends ServiceTrackedDepsRequest<infer DepMap>\n ? [DepMap] extends [never]\n ? never\n : [keyof DepMap] extends [never]\n ? never\n : DepMap\n : never;\n\ntype AppStartYieldedOf<Request> =\n Request extends ServiceAppStartRequest<infer AppStartYielded>\n ? AppStartYielded\n : never;\n\ntype TrackedDepMapUnion<Yielded> =\n | TrackedDepMapOf<Extract<Yielded, ServiceTrackedDepsRequest<any>>>\n | TrackedDepMapOf<\n Extract<\n AppStartYieldedOf<Extract<Yielded, ServiceAppStartRequest<any>>>,\n ServiceTrackedDepsRequest<any>\n >\n >;\n\ntype MergeAllDependencyNodeMaps<\n Maps extends object[],\n Accumulator extends object = {},\n> = Maps extends [infer First extends object, ...infer Rest extends object[]]\n ? MergeAllDependencyNodeMaps<\n Rest,\n MergeDependencyNodeMaps<Accumulator, First>\n >\n : Accumulator;\n\ntype TrackedDepsMapFromYielded<Yielded> = MergeAllDependencyNodeMaps<\n UnionToTuple<TrackedDepMapUnion<Yielded>> extends infer Tuple extends object[]\n ? Tuple\n : []\n>;\n\ntype ResolveServiceTrackingMetadata<Metadata> =\n Metadata extends ServiceTrackingMetadata<\n infer Name extends string,\n infer Scope extends ConcreteServiceScope,\n infer Output,\n infer Yielded,\n infer Derived,\n any,\n infer BrowserBoundary extends boolean,\n infer AppStart extends boolean\n >\n ? ServiceDependencies<\n Scope,\n MergeDependencyNodeMaps<\n BuildDependencyMap<DependencyRequests<Yielded>>,\n TrackedDepsMapFromYielded<Yielded>\n >,\n WithServiceNodeFlags<Derived, BrowserBoundary, AppStart>\n >\n : never;\n\nexport type ExtractServiceHelperDependencies<ServiceHelper> =\n ResolveServiceTrackingMetadata<ExtractTrackedMetadata<ServiceHelper>>;\n\nexport type ExtractServiceHelperDependencyMap<ServiceHelper> =\n ExtractTrackedMetadata<ServiceHelper> extends ServiceTrackingMetadata<\n infer Name extends string,\n ConcreteServiceScope,\n unknown,\n unknown,\n unknown,\n unknown,\n boolean,\n boolean\n >\n ? {\n [Key in Name]: ExtractServiceHelperDependencies<ServiceHelper>;\n }\n : never;\n\nexport type ServiceDependencyMapFromYielded<Yielded> = BuildDependencyMap<\n DependencyRequests<Yielded>\n>;\n\ntype DependencyMapFromValue<Value> = Value extends {\n readonly [SERVICE_HELPER_DEPENDENCIES]?: infer Dependencies extends object;\n}\n ? Dependencies\n : {};\n\ntype DependencyValues<Values> = Values extends object\n ? Values[keyof Values]\n : Values;\n\ntype DependencyMapsFromValues<Values> = DependencyMapFromValue<\n DependencyValues<Values>\n>;\n\n/**\n * Extracts and merges dependency metadata carried by insertion outputs.\n *\n * `on$` uses this carrier because subscribing to a source is a consumer-side\n * dependency, while emitting a source value is only a producer operation.\n */\nexport type ServiceDependencyMapFromValues<Values> = MergeAllDependencyNodeMaps<\n [Values] extends [never]\n ? []\n : UnionToTuple<DependencyMapsFromValues<Values>> extends infer Tuple\n ? Tuple extends object[]\n ? Tuple\n : []\n : []\n>;\n\nexport type MergeServiceDependencyMaps<\n Left extends object,\n Right extends object,\n> = MergeDependencyNodeMaps<Left, Right>;\n\nexport type ServiceDependencyMapFromYieldedAndValues<Yielded, Values> =\n MergeServiceDependencyMaps<\n ServiceDependencyMapFromYielded<Yielded>,\n ServiceDependencyMapFromValues<Values>\n >;\n\nexport type CompleteServiceDependencyMapFromYielded<Yielded> =\n MergeDependencyNodeMaps<\n ServiceDependencyMapFromYielded<Yielded>,\n TrackedDepsMapFromYielded<Yielded>\n >;\n\ntype DependencyDefinition<Request> = ResolveServiceTrackingMetadata<\n DependencyMetadata<Request>\n>;\n\ntype DependencyRecord<Request> =\n DependencyMetadata<Request> extends ServiceTrackingMetadata<\n infer Name extends string,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? // Some yield requests (e.g. raw injector helpers like `HostTag`)\n // are structurally compatible with `ServiceYieldRequest<any, any, any>`\n // but carry no explicit metadata, so `Name` widens to `string`. Without\n // this guard, `[Key in string]` would emit an index signature that\n // corrupts the merged deps map for every other entry.\n string extends Name\n ? {}\n : { [Key in Name]: DependencyDefinition<Request> }\n : {};\n\ntype BuildDependencyMap<\n Requests extends unknown[],\n Accumulator extends object = {},\n> = Requests extends [infer First, ...infer Rest]\n ? BuildDependencyMap<\n Rest,\n MergeDependencyNodeMaps<Accumulator, DependencyRecord<First>>\n >\n : Simplify<Accumulator>;\n\ntype NormalizeWholeServiceUsage<Derived> = [Derived] extends [undefined]\n ? WholeServiceUsageTracking\n : Derived;\n\ntype TrackedNodeUsage<Node> = Node extends { usesWholeService: true }\n ? WholeServiceUsageTracking\n : NodeDerivedProperties<Node>;\n\ntype MergeTrackedDependencyUsage<Left, Right> =\n Left extends WholeServiceUsageTracking\n ? WholeServiceUsageTracking\n : Right extends WholeServiceUsageTracking\n ? WholeServiceUsageTracking\n : [Left] extends [\n DerivedPropertiesTracking<infer LeftUsed, infer LeftExposed>,\n ]\n ? [Right] extends [\n DerivedPropertiesTracking<infer RightUsed, infer RightExposed>,\n ]\n ? DerivedPropertiesTracking<\n Simplify<LeftUsed & RightUsed>,\n Simplify<LeftExposed & RightExposed>\n >\n : WholeServiceUsageTracking\n : WholeServiceUsageTracking;\n\ntype MergeTrackedDependencyNodes<Left, Right> = Simplify<\n {\n providedIn: DependencyScope<Left> & DependencyScope<Right>;\n dependencies: MergeTrackedDependencyNodeMaps<\n DependencyChildren<Left>,\n DependencyChildren<Right>\n >;\n } & WithServiceNodeFlags<\n MergeTrackedDependencyUsage<\n TrackedNodeUsage<Left>,\n TrackedNodeUsage<Right>\n >,\n DependencyBrowserBoundary<Left> & DependencyBrowserBoundary<Right>,\n OrBoolean<DependencyAppStart<Left>, DependencyAppStart<Right>>\n >\n>;\n\ntype MergeTrackedDependencyNodeMaps<\n Left extends object,\n Right extends object,\n> = Simplify<{\n [Name in Extract<keyof Left | keyof Right, string>]: Name extends keyof Left\n ? Name extends keyof Right\n ? MergeTrackedDependencyNodes<Left[Name], Right[Name]>\n : Left[Name]\n : Name extends keyof Right\n ? Right[Name]\n : never;\n}>;\n\ntype ResolveTrackedDependencyMetadata<Metadata> =\n Metadata extends ServiceTrackingMetadata<\n infer Name extends string,\n infer Scope extends ConcreteServiceScope,\n infer Output,\n infer Yielded,\n infer Derived,\n any,\n infer BrowserBoundary extends boolean,\n infer AppStart extends boolean\n >\n ? Simplify<\n {\n providedIn: Scope;\n dependencies: BuildTrackedDependencyMap<DependencyRequests<Yielded>>;\n } & WithServiceNodeFlags<\n NormalizeWholeServiceUsage<Derived>,\n BrowserBoundary,\n AppStart\n >\n >\n : never;\n\ntype TrackedDependencyRecord<Request> =\n DependencyMetadata<Request> extends ServiceTrackingMetadata<\n infer Name extends string,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? {\n [Key in Name]: ResolveTrackedDependencyMetadata<\n DependencyMetadata<Request>\n >;\n }\n : {};\n\ntype BuildTrackedDependencyMap<\n Requests extends unknown[],\n Accumulator extends object = {},\n> = Requests extends [infer First, ...infer Rest]\n ? BuildTrackedDependencyMap<\n Rest,\n MergeTrackedDependencyNodeMaps<\n Accumulator,\n TrackedDependencyRecord<First>\n >\n >\n : Simplify<Accumulator>;\n\ntype FlattenTrackedDependencyNodeMapFromTracking<Tracking> =\n Tracking extends ServiceTrackingMetadata<\n any,\n any,\n any,\n infer Yielded,\n any,\n any,\n any,\n any\n >\n ? BuildFlattenedTrackedDependencyNodeMap<DependencyRequests<Yielded>>\n : {};\n\ntype BuildFlattenedTrackedDependencyNodeMap<\n Requests extends unknown[],\n Accumulator extends object = {},\n> = Requests extends [infer First, ...infer Rest]\n ? BuildFlattenedTrackedDependencyNodeMap<\n Rest,\n MergeTrackedDependencyNodeMaps<\n MergeTrackedDependencyNodeMaps<\n Accumulator,\n TrackedDependencyRecord<First>\n >,\n FlattenTrackedDependencyNodeMapFromTracking<DependencyMetadata<First>>\n >\n >\n : Simplify<Accumulator>;\n\ntype ServiceHelperMetadata<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Factory extends AnyFactory,\n BrowserBoundary extends boolean = false,\n AppStart extends boolean = false,\n> = ServiceTrackingMetadata<\n Name,\n Scope,\n FactoryOutput<Factory>,\n FactoryYields<Factory>,\n undefined,\n ServiceProvidedInput<FactoryInputs<Factory>>,\n BrowserBoundary,\n AppStart\n>;\n\ntype WithDerivedProperties<\n Metadata extends AnyServiceTrackingMetadata,\n Exposed extends object,\n Yielded,\n> =\n Metadata extends ServiceTrackingMetadata<\n infer Name extends string,\n infer Scope extends ConcreteServiceScope,\n infer Output,\n infer ChildYielded,\n any,\n infer ProvidedInput,\n infer BrowserBoundary extends boolean,\n infer AppStart extends boolean\n >\n ? ServiceTrackingMetadata<\n Name,\n Scope,\n Output,\n ChildYielded,\n DerivedPropertiesForExposure<Exposed, Yielded>,\n ProvidedInput,\n BrowserBoundary,\n AppStart\n >\n : never;\n\nexport type ServiceYieldRequest<\n Scope extends ConcreteServiceScope,\n Result,\n Metadata extends AnyServiceTrackingMetadata = AnyServiceTrackingMetadata,\n> = Readonly<{\n [SERVICE_YIELD_REQUEST_MARKER]: true;\n name: string;\n readonly [SERVICE_YIELD_METADATA]?: Metadata;\n providedIn: Scope;\n resolve: (injector: Injector, hostScope: ConcreteServiceScope) => Result;\n}>;\n\ntype AllowedAppStartYield =\n | ServiceYieldRequest<any, any, any>\n | ServiceDependencyAccessRequest<string, unknown>;\n\ntype ServiceAppStartRequest<Yielded = never> = Readonly<{\n [SERVICE_APP_START_REQUEST_MARKER]: true;\n readonly [SERVICE_APP_START_CALLBACK_YIELDED]?: Yielded;\n run: () => AppStartResult | Generator<Yielded, AppStartResult, unknown>;\n}>;\n\ntype AbstractMarker<Contract> = {\n readonly [ABSTRACT_SERVICE_MARKER]: () => Contract;\n};\n\ntype RequirementContract<Requirement> =\n Requirement extends ServiceRequirement<infer Contract, any>\n ? Contract\n : never;\n\nexport type ServiceRequirement<Contract, Name extends string = string> = {\n readonly [SERVICE_REQUIREMENT_MARKER]: true;\n readonly token: InjectionToken<Contract>;\n readonly name: Name;\n};\n\ntype ServiceRuntimeMetaDefinition<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n AppStart extends boolean = false,\n ProvidedInput = ServiceProvidedInput<Inputs>,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n> = ServiceMetaData<\n Name,\n Scope,\n PublicServiceInputs<Inputs>,\n Output,\n ResolveServiceTrackingMetadata<Metadata>,\n (...args: any[]) => unknown,\n Metadata,\n ProvidedInput,\n ProvideArgs,\n TrackingBrowserBoundary<Metadata>,\n AppStart\n>;\n\ntype InjectHelper<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n AppStart extends boolean = false,\n ProvidedInput = ServiceProvidedInput<Inputs>,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n> = {\n [Key in `inject${Capitalize<Name>}`]: WithTrackedDependencies<\n WithServiceRuntimeMeta<\n {\n (): MaybeErrorOutput<PublicServiceInputs<Inputs>, undefined, Output>;\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): MaybeErrorOutput<PublicServiceInputs<Inputs>, Config, Output>;\n <\n Exposed extends object,\n Yielded extends ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>\n > = never,\n >(\n bindings: undefined,\n expose: ExposureSelector<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n Exposed,\n Yielded\n >,\n ): ExposedOutput<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n MaterializeExposureResult<ValidateRootExposure<Exposed>>\n >;\n <\n Config extends Partial<PublicInputBindings<Inputs, Scope>>,\n Exposed extends object,\n Yielded extends ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>\n > = never,\n >(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n expose: ExposureSelector<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>,\n Exposed,\n Yielded\n >,\n ): ExposedOutput<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>,\n MaterializeExposureResult<ValidateRootExposure<Exposed>>\n >;\n } & InjectPropertyShortcuts<Scope, Inputs, Output, Metadata> &\n (keyof PublicServiceInputs<Inputs> extends never\n ? {}\n : {\n OmitInputs: OmitInputsInjectShortcuts<\n Scope,\n Inputs,\n Output,\n Metadata\n >;\n }),\n ServiceRuntimeMetaDefinition<\n Name,\n Scope,\n Inputs,\n Output,\n Metadata,\n AppStart,\n ProvidedInput,\n ProvideArgs\n >\n >,\n Metadata\n >;\n};\n\ntype SinglePropertyDerivedProperties<\n Output extends object,\n Key extends OutputDependencyKeys<Output>,\n> = DerivedPropertiesTracking<\n {\n [Property in Key]: Output[Property];\n },\n {\n [Property in Key]: Output[Property];\n }\n>;\n\ntype WithSinglePropertyDerivedProperties<\n Metadata extends AnyServiceTrackingMetadata,\n Output extends object,\n Key extends OutputDependencyKeys<Output>,\n> =\n Metadata extends ServiceTrackingMetadata<\n infer Name extends string,\n infer Scope extends ConcreteServiceScope,\n infer ServiceOutput,\n infer ChildYielded,\n any,\n infer ProvidedInput,\n infer BrowserBoundary extends boolean,\n infer AppStart extends boolean\n >\n ? ServiceTrackingMetadata<\n Name,\n Scope,\n ServiceOutput,\n ChildYielded,\n SinglePropertyDerivedProperties<Output, Key>,\n ProvidedInput,\n BrowserBoundary,\n AppStart\n >\n : never;\n\ntype NestedPropertyValue<V, NestedKey> = V extends object\n ? NestedKey extends keyof V\n ? V[NestedKey]\n : never\n : never;\n\ntype NestedPropertyDerivedProperties<\n Output extends object,\n Key extends OutputDependencyKeys<Output>,\n NestedKey extends keyof (Output[Key] extends object ? Output[Key] : never),\n> = DerivedPropertiesTracking<\n {\n [K in Key]: Output[K] extends infer V\n ? V extends object\n ? { [NK in NestedKey & keyof V]: V[NK] }\n : never\n : never;\n },\n {\n [K in Key]: Output[K] extends infer V\n ? V extends object\n ? { [NK in NestedKey & keyof V]: V[NK] }\n : never\n : never;\n }\n>;\n\ntype WithNestedPropertyDerivedProperties<\n Metadata extends AnyServiceTrackingMetadata,\n Output extends object,\n Key extends OutputDependencyKeys<Output>,\n NestedKey extends keyof (Output[Key] extends object ? Output[Key] : never),\n> =\n Metadata extends ServiceTrackingMetadata<\n infer Name extends string,\n infer Scope extends ConcreteServiceScope,\n infer ServiceOutput,\n infer ChildYielded,\n any,\n infer ProvidedInput,\n infer BrowserBoundary extends boolean,\n infer AppStart extends boolean\n >\n ? ServiceTrackingMetadata<\n Name,\n Scope,\n ServiceOutput,\n ChildYielded,\n NestedPropertyDerivedProperties<Output, Key, NestedKey>,\n ProvidedInput,\n BrowserBoundary,\n AppStart\n >\n : never;\n\ntype SinglePropertyShortcutResult<\n Inputs extends object,\n Config,\n Output extends object,\n Key extends OutputDependencyKeys<Output>,\n> =\n MaybeErrorOutput<\n PublicServiceInputs<Inputs>,\n Config,\n Output\n > extends infer Result\n ? Result extends object\n ? Key extends keyof Result\n ? Result[Key]\n : never\n : Result\n : never;\n\ntype SinglePropertyShortcutGenerator<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Config,\n Key extends OutputDependencyKeys<Output>,\n> = Generator<\n ServiceYieldRequest<\n Scope,\n MaybeErrorOutput<PublicServiceInputs<Inputs>, Config, Output>,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n >,\n SinglePropertyShortcutResult<Inputs, Config, Output, Key>,\n unknown\n>;\n\ntype InjectPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = WithTrackedDependencies<\n (keyof PublicServiceInputs<Inputs> extends never\n ? { (): SinglePropertyShortcutResult<Inputs, undefined, Output, Key> }\n : {}) & {\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): SinglePropertyShortcutResult<Inputs, Config, Output, Key>;\n } & (keyof PublicServiceInputs<Inputs> extends never\n ? Output[Key] extends (...args: infer Args) => infer Result\n ? Args extends []\n ? {}\n : (...args: Args) => ResolveGeneratorResult<Result>\n : {}\n : {}) &\n NestedInjectPropertyShortcuts<Scope, Inputs, Output, Metadata, Key>,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n>;\n\ntype NestedInjectPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n NestedKey extends keyof (Output[Key] extends object ? Output[Key] : never),\n> = WithTrackedDependencies<\n {\n (): WithTrackedDependencies<\n NestedPropertyValue<Output[Key], NestedKey>,\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n >;\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): WithTrackedDependencies<\n NestedPropertyValue<Output[Key], NestedKey>,\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n >;\n },\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n>;\n\ntype NestedInjectPropertyShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = Output[Key] extends object\n ? {\n [NestedKey in Exclude<\n keyof Output[Key],\n keyof Function | 'then'\n >]: NestedInjectPropertyShortcut<\n Scope,\n Inputs,\n Output,\n Metadata,\n Key,\n NestedKey\n >;\n }\n : {};\n\ntype YieldPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = WithTrackedDependencies<\n (keyof PublicServiceInputs<Inputs> extends never\n ? {\n (): SinglePropertyShortcutGenerator<\n Scope,\n Inputs,\n Output,\n Metadata,\n undefined,\n Key\n >;\n }\n : {}) & {\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): SinglePropertyShortcutGenerator<\n Scope,\n Inputs,\n Output,\n Metadata,\n Config,\n Key\n >;\n } & (keyof PublicServiceInputs<Inputs> extends never\n ? Output[Key] extends (...args: infer Args) => infer Result\n ? Args extends []\n ? {}\n : (\n ...args: Args\n ) => Generator<\n ServiceYieldRequest<\n Scope,\n MaybeErrorOutput<\n PublicServiceInputs<Inputs>,\n undefined,\n Output\n >,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n >,\n ResolveGeneratorResult<Result>,\n unknown\n >\n : {}\n : {}) &\n NestedYieldPropertyShortcuts<Scope, Inputs, Output, Metadata, Key>,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n>;\n\ntype NestedYieldPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n NestedKey extends keyof (Output[Key] extends object ? Output[Key] : never),\n> = WithTrackedDependencies<\n {\n (): Generator<\n ServiceYieldRequest<\n Scope,\n NestedPropertyValue<Output[Key], NestedKey>,\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n >,\n NestedPropertyValue<Output[Key], NestedKey>,\n unknown\n >;\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): Generator<\n ServiceYieldRequest<\n Scope,\n NestedPropertyValue<Output[Key], NestedKey>,\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n >,\n NestedPropertyValue<Output[Key], NestedKey>,\n unknown\n >;\n },\n WithNestedPropertyDerivedProperties<Metadata, Output, Key, NestedKey>\n>;\n\ntype NestedYieldPropertyShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = Output[Key] extends object\n ? {\n [NestedKey in Exclude<\n keyof Output[Key],\n keyof Function | 'then'\n >]: NestedYieldPropertyShortcut<\n Scope,\n Inputs,\n Output,\n Metadata,\n Key,\n NestedKey\n >;\n }\n : {};\n\ntype YieldPropertyShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n> = Output extends object\n ? {\n [Key in Exclude<\n OutputDependencyKeys<Output>,\n keyof Function | 'then'\n >]: YieldPropertyShortcut<Scope, Inputs, Output, Metadata, Key>;\n }\n : {};\n\ntype InjectPropertyShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n> = Output extends object\n ? {\n [Key in Exclude<\n OutputDependencyKeys<Output>,\n keyof Function | 'then'\n >]: InjectPropertyShortcut<Scope, Inputs, Output, Metadata, Key>;\n }\n : {};\n\ntype OmitInputsInjectPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = WithTrackedDependencies<\n {\n (): SinglePropertyShortcutResult<Inputs, undefined, Output, Key>;\n } & NestedInjectPropertyShortcuts<Scope, Inputs, Output, Metadata, Key>,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n>;\n\ntype OmitInputsInjectShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n> = Output extends object\n ? {\n [Key in Exclude<\n OutputDependencyKeys<Output>,\n keyof Function | 'then'\n >]: OmitInputsInjectPropertyShortcut<\n Scope,\n Inputs,\n Output,\n Metadata,\n Key\n >;\n }\n : {};\n\ntype OmitInputsYieldPropertyShortcut<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output extends object,\n Metadata extends AnyServiceTrackingMetadata,\n Key extends OutputDependencyKeys<Output>,\n> = WithTrackedDependencies<\n {\n (): SinglePropertyShortcutGenerator<\n Scope,\n Inputs,\n Output,\n Metadata,\n undefined,\n Key\n >;\n } & NestedYieldPropertyShortcuts<Scope, Inputs, Output, Metadata, Key>,\n WithSinglePropertyDerivedProperties<Metadata, Output, Key>\n>;\n\ntype OmitInputsYieldShortcuts<\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n> = Output extends object\n ? {\n [Key in Exclude<\n OutputDependencyKeys<Output>,\n keyof Function | 'then'\n >]: OmitInputsYieldPropertyShortcut<Scope, Inputs, Output, Metadata, Key>;\n }\n : {};\n\ntype YieldHelper<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n AppStart extends boolean = false,\n ProvidedInput = ServiceProvidedInput<Inputs>,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n> = {\n [Key in Capitalize<Name>]: WithTrackedDependencies<\n WithServiceRuntimeMeta<\n {\n (): Generator<\n ServiceYieldRequest<\n Scope,\n MaybeErrorOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n Metadata\n >,\n MaybeErrorOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n unknown\n >;\n <Config extends Partial<PublicInputBindings<Inputs, Scope>>>(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n ): Generator<\n ServiceYieldRequest<\n Scope,\n MaybeErrorOutput<PublicServiceInputs<Inputs>, Config, Output>,\n Metadata\n >,\n MaybeErrorOutput<PublicServiceInputs<Inputs>, Config, Output>,\n unknown\n >;\n <\n Exposed extends object,\n Yielded extends ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>\n > = never,\n >(\n bindings: undefined,\n expose: ExposureSelector<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n Exposed,\n Yielded\n >,\n ): Generator<\n | ServiceYieldRequest<\n Scope,\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n WithDerivedProperties<Metadata, Exposed, Yielded>\n >\n | ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>\n >,\n ExposedOutput<\n SelectableOutput<PublicServiceInputs<Inputs>, undefined, Output>,\n MaterializeExposureResult<ValidateRootExposure<Exposed>>\n >,\n unknown\n >;\n <\n Config extends Partial<PublicInputBindings<Inputs, Scope>>,\n Exposed extends object,\n Yielded extends ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>\n > = never,\n >(\n bindings: StrictBindings<\n Partial<PublicInputBindings<Inputs, Scope>>,\n Config\n >,\n expose: ExposureSelector<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>,\n Exposed,\n Yielded\n >,\n ): Generator<\n | ServiceYieldRequest<\n Scope,\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>,\n WithDerivedProperties<Metadata, Exposed, Yielded>\n >\n | ExposureYield<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>\n >,\n ExposedOutput<\n SelectableOutput<PublicServiceInputs<Inputs>, Config, Output>,\n MaterializeExposureResult<ValidateRootExposure<Exposed>>\n >,\n unknown\n >;\n } & YieldPropertyShortcuts<Scope, Inputs, Output, Metadata> &\n (keyof PublicServiceInputs<Inputs> extends never\n ? {}\n : {\n OmitInputs: OmitInputsYieldShortcuts<\n Scope,\n Inputs,\n Output,\n Metadata\n >;\n }),\n ServiceRuntimeMetaDefinition<\n Name,\n Scope,\n Inputs,\n Output,\n Metadata,\n AppStart,\n ProvidedInput,\n ProvideArgs\n >\n >,\n Metadata\n >;\n};\n\ntype ExtractServiceTrackingYielded<Metadata> =\n Metadata extends ServiceTrackingMetadata<\n any,\n any,\n any,\n infer Yielded,\n any,\n any,\n any,\n any\n >\n ? Yielded\n : never;\n\ntype ProvideHelper<\n Name extends string,\n Scope extends RealCapableScope,\n Output,\n ProvideArgs extends unknown[],\n Yielded = never,\n> = {\n [Key in `provide${Capitalize<Name>}`]: (\n ...args: ProvideArgs\n ) => NamedBrandedServiceProvider<Name, Scope, Output, Yielded>;\n};\n\ntype ToProvideTokenHelper<Name extends string, Output> = {\n [Key in `${Capitalize<Name>}ToProvide`]: InjectionToken<Output>;\n};\n\ntype RequirementHelper<Name extends string, Contract> = {\n [Key in `${Capitalize<Name>}Requirement`]: ServiceRequirement<Contract, Name>;\n};\n\ntype ServiceMetaDataHelper<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n AppStart extends boolean = false,\n ProvidedInput = ServiceProvidedInput<Inputs>,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n> = {\n [Key in ServiceMetaDataKey<Name>]: ServiceMetaData<\n Name,\n Scope,\n PublicServiceInputs<Inputs>,\n Output,\n ResolveServiceTrackingMetadata<Metadata>,\n ExtractHelperValue<\n InjectHelper<\n Name,\n Scope,\n Inputs,\n Output,\n Metadata,\n AppStart,\n ProvidedInput,\n ProvideArgs\n >\n >,\n Metadata,\n ProvidedInput,\n ProvideArgs,\n TrackingBrowserBoundary<Metadata>,\n AppStart\n >;\n};\n\ntype ConcreteServiceApi<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata,\n AppStart extends boolean = false,\n> = YieldHelper<Name, Scope, Inputs, Output, Metadata, AppStart> &\n ServiceMetaDataHelper<Name, Scope, Inputs, Output, Metadata, AppStart> &\n (Scope extends 'toProvide' | 'manuallyProvidedAtRoot'\n ? ProvideHelper<\n Name,\n Extract<Scope, RealCapableScope>,\n Output,\n ProvideArguments<ServiceProvidedInput<Inputs>>,\n ExtractServiceTrackingYielded<Metadata>\n >\n : {}) &\n (Scope extends 'manuallyProvidedAtRoot'\n ? ToProvideTokenHelper<Name, Output>\n : {});\n\nexport type CraftServiceApi<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata = ServiceTrackingMetadata<\n Name,\n Scope,\n Output,\n never\n >,\n AppStart extends boolean = false,\n> = ConcreteServiceApi<Name, Scope, Inputs, Output, Metadata, AppStart>;\n\ntype AbstractProvideFactory<Contract> =\n | (() => Contract)\n | (() => Generator<any, Contract, any>);\n\ntype AbstractProvideHelper<Name extends string, Contract> = {\n [Key in `provide${Capitalize<Name>}`]: <\n Factory extends AbstractProvideFactory<Contract>,\n >(\n factory: Factory,\n ) => NamedBrandedServiceProvider<\n Name,\n 'toProvide',\n Contract,\n FactoryYields<Factory>\n >;\n};\n\ntype AbstractHelper<Name extends string, Contract> = {\n [Key in Capitalize<Name>]: () => Generator<\n ServiceYieldRequest<\n 'toProvide',\n Contract,\n ServiceTrackingMetadata<Name, 'toProvide', Contract, never>\n >,\n Contract,\n unknown\n >;\n};\n\nexport type AbstractServiceApi<\n Name extends string,\n Contract,\n> = RequirementHelper<Name, Contract> &\n AbstractProvideHelper<Name, Contract> &\n AbstractHelper<Name, Contract>;\n\ntype DependencySourceToken<Output> = Type<Output> | InjectionToken<Output>;\ntype DependencySourceOutput<Token> =\n Token extends Type<infer Output>\n ? Output\n : Token extends InjectionToken<infer Output>\n ? Output\n : never;\n\nexport type DependencyApi<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Inputs extends object,\n Output,\n Metadata extends AnyServiceTrackingMetadata = ServiceTrackingMetadata<\n Name,\n Scope,\n Output,\n never\n >,\n ProvidedInput = ServiceProvidedInput<Inputs>,\n ProvideArgs extends unknown[] = ProvideArguments<ProvidedInput>,\n> = YieldHelper<\n Name,\n Scope,\n Inputs,\n Output,\n Metadata,\n false,\n ProvidedInput,\n ProvideArgs\n> &\n ServiceMetaDataHelper<\n Name,\n Scope,\n Inputs,\n Output,\n Metadata,\n false,\n ProvidedInput,\n ProvideArgs\n > &\n (Scope extends 'toProvide' | 'manuallyProvidedAtRoot'\n ? ProvideHelper<\n Name,\n Extract<Scope, RealCapableScope>,\n Output,\n ProvideArgs,\n ExtractServiceTrackingYielded<Metadata>\n >\n : {}) &\n (Scope extends 'manuallyProvidedAtRoot'\n ? ToProvideTokenHelper<Name, Output>\n : {});\n\ntype GlobalTokenDependencyOptions<\n Name extends string,\n Token extends DependencySourceToken<any>,\n> = {\n name: Name;\n providedIn: 'global';\n token: Token;\n};\n\ntype GlobalInjectedDependencyOptions<Name extends string, Output> = {\n name: Name;\n providedIn: 'global';\n inject: () => Output;\n};\n\ntype DependencyProvideFactory<Inputs extends object> = (\n ...args: ProvideArguments<ServiceProvidedInput<Inputs>>\n) => CraftServiceProvider;\n\ntype AnyDependencyProvideFactory = (...args: any[]) => CraftServiceProvider;\n\ntype DependencyProvideFactoryArgs<Provide extends AnyDependencyProvideFactory> =\n Parameters<Provide>;\n\ntype DependencyProvideFactoryInput<\n Provide extends AnyDependencyProvideFactory,\n> = NormalizeProvidedInput<Parameters<Provide>>;\n\ntype WithDependencyProvidedInput<\n Inputs extends object,\n Provide extends AnyDependencyProvideFactory,\n> = [DependencyProvideFactoryInput<Provide>] extends [never]\n ? Inputs\n : Inputs & {\n $provided: DependencyProvideFactoryInput<Provide>;\n };\n\ntype ProviderCapableDependencyOptions<\n Name extends string,\n Scope extends RealCapableScope,\n Token extends DependencySourceToken<any>,\n Inputs extends object = {},\n Provide extends\n AnyDependencyProvideFactory = DependencyProvideFactory<Inputs>,\n> = {\n name: Name;\n providedIn: Scope;\n token: Token;\n provide: Provide;\n};\n\ntype AnyDependencyFactory<Dependency> = (\n dependency: Dependency,\n inputs: any,\n) => any;\n\ntype DependencyFactoryInputs<Factory> = Factory extends (\n dependency: any,\n inputs: infer Inputs extends object,\n) => any\n ? Inputs\n : {};\n\ntype DependencyFactoryReturn<Factory, Output> = [Factory] extends [undefined]\n ? Output\n : Factory extends (...args: any[]) => infer Result\n ? Result\n : never;\n\ntype DependencyFactoryOutput<Factory, Output> =\n DependencyFactoryReturn<Factory, Output> extends Generator<\n any,\n infer Result,\n any\n >\n ? Result\n : DependencyFactoryReturn<Factory, Output>;\n\ntype DependencyFactoryYields<Factory> = Factory extends (\n ...args: any[]\n) => infer Result\n ? Result extends Generator<infer Yielded, any, any>\n ? Yielded\n : never\n : never;\n\ntype DependencyFactoryOutputFromResult<Result> =\n Result extends Generator<any, infer Output, any> ? Output : Result;\n\ntype DependencyFactoryYieldsFromResult<Result> =\n Result extends Generator<infer Yielded, any, any> ? Yielded : never;\n\ntype WrappedDependencyFactory<\n Dependency,\n Factory extends AnyDependencyFactory<Dependency>,\n> = (\n inputs: DependencyFactoryInputs<Factory>,\n) => DependencyFactoryReturn<Factory, Dependency>;\n\ntype toCraftServiceTrackingMetadata<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Dependency,\n Factory extends AnyDependencyFactory<Dependency> | undefined,\n BrowserBoundary extends boolean = false,\n> = ServiceTrackingMetadata<\n Name,\n Scope,\n DependencyFactoryOutput<Factory, Dependency>,\n DependencyFactoryYields<NonNullable<Factory>>,\n undefined,\n [Factory] extends [undefined]\n ? never\n : ServiceProvidedInput<DependencyFactoryInputs<NonNullable<Factory>>>,\n BrowserBoundary\n>;\n\ntype ConcreteRuntimeDefinition = {\n factory: AnyFactory;\n name: string;\n providedIn: ConcreteServiceScope;\n browserBoundary: boolean;\n appStart: boolean;\n providers?: readonly Provider[];\n token?: InjectionToken<unknown>;\n craftToken?: CraftToken<unknown>;\n requirement?: ServiceRequirement<unknown>;\n initialBindings?: Record<string, unknown>;\n hasPublicInput: boolean;\n hasProvidedInput: boolean;\n externalProviders?: (...args: unknown[]) => CraftServiceProvider;\n appStartHooks: Map<unknown, () => AppStartResult>;\n startedAppStartServices: Set<unknown>;\n};\n\nconst OMIT_INPUTS_BINDINGS = Symbol('craft-ts.omit-inputs-bindings');\ntype ConcreteServiceBindings =\n | Record<string, unknown>\n | typeof OMIT_INPUTS_BINDINGS;\n\nfunction wrapOmitInputsHelper(value: unknown): unknown {\n if (typeof value !== 'function') {\n return value;\n }\n\n return new Proxy(value as (...args: unknown[]) => unknown, {\n get(target, property, receiver) {\n const nested = Reflect.get(target, property, receiver);\n return typeof nested === 'function'\n ? wrapOmitInputsHelper(nested)\n : nested;\n },\n apply(target, thisArg, args) {\n return Reflect.apply(target, thisArg, [OMIT_INPUTS_BINDINGS, ...args]);\n },\n });\n}\n\nexport type ServiceReference<\n Name extends string = string,\n Scope extends ConcreteServiceScope = ConcreteServiceScope,\n Inputs extends object = any,\n Output = unknown,\n Dependencies = any,\n> =\n | ServiceMetaData<\n Name,\n Scope,\n Inputs,\n Output,\n Dependencies,\n any,\n any,\n any,\n any,\n boolean,\n boolean\n >\n | {\n readonly [SERVICE_RUNTIME_META]?: AnyServiceMetaData;\n };\n\ntype AnyServiceReference = ServiceReference<\n string,\n ConcreteServiceScope,\n any,\n any,\n any\n>;\n\nexport type GetServiceReferenceMeta<Reference extends ServiceReference> =\n Reference extends AnyServiceMetaData\n ? Reference\n : ExtractServiceRuntimeMeta<Reference>;\n\nexport type GetServiceInputs<Reference extends ServiceReference> =\n GetServiceMetaDataInputs<GetServiceReferenceMeta<Reference>>;\n\nexport type GetServiceReferenceOutput<Reference extends ServiceReference> =\n GetServiceMetaDataOutput<GetServiceReferenceMeta<Reference>>;\n\nexport type GetServiceProvidedInput<Reference extends ServiceReference> =\n GetServiceMetaDataProvidedInput<GetServiceReferenceMeta<Reference>>;\n\nexport type GetServiceTrackingMetadata<Reference extends ServiceReference> =\n Reference extends AnyServiceMetaData\n ? GetServiceMetaDataTracking<Reference>\n : ExtractTrackedMetadata<Reference>;\n\nexport type GetMergedServiceDependencyNodeMap<\n Reference extends ServiceReference,\n> = FlattenTrackedDependencyNodeMapFromTracking<\n GetServiceTrackingMetadata<Reference>\n>;\n\nexport type ServiceBindings<Reference extends ServiceReference> = Partial<\n InputBindings<\n GetServiceInputs<Reference>,\n Extract<GetServiceReferenceMeta<Reference>['providedIn'], ConcreteServiceScope>\n >\n>;\n\nexport type ResolvedServiceOutput<\n Reference extends ServiceReference,\n Bindings,\n> = MaybeErrorOutput<\n GetServiceInputs<Reference>,\n Bindings,\n GetServiceReferenceOutput<Reference>\n>;\n\nexport type ServiceRuntimeOverride =\n | {\n readonly kind: 'useValue';\n readonly value: unknown;\n }\n | {\n readonly kind: 'instantiate';\n instance?: unknown;\n };\n\nexport const SERVICE_RUNTIME_OVERRIDES = new InjectionToken<\n ReadonlyMap<string, ServiceRuntimeOverride>\n>('service-runtime-overrides', {\n factory: () => new Map(),\n});\n\n/**\n * A value supplied to a craft service factory.\n *\n * Service inputs are consumed as readers so a service can preserve the\n * reactive-read edge of the value it was given:\n *\n * ```ts\n * function* (inputs: { userId: CraftServiceInput<string> }) {\n * const userId = yield* inputs.userId();\n * // ...\n * }\n * ```\n *\n * The public service helper still accepts the resolved value, an Angular\n * signal, or another Craft reader for this input.\n */\nexport type CraftServiceInput<Value, Yielded = unknown> = Yieldable<\n [],\n Value,\n Yielded\n>;\n\nexport type MaybeSignal<T> =\n | T\n | Signal<T>\n | YieldableReactiveValue<T>\n | CraftServiceInput<T>;\n\nconst SERVICE_INPUT_SOURCE = Symbol('craft-service-input-source');\n\ntype ServiceInputReader = CraftServiceInput<unknown> & {\n readonly [SERVICE_INPUT_SOURCE]?: unknown;\n};\n\nexport function toValue<T>(value: MaybeSignal<T>): T {\n if (isServiceInputReader(value)) {\n return resolveServiceInputSource(value[SERVICE_INPUT_SOURCE]) as T;\n }\n if (isYieldableReactiveValue(value)) {\n return rawReactiveValue(value)() as T;\n }\n if (isSignal(value)) return value() as T;\n return value as T;\n}\n\nfunction isServiceInputReader(value: unknown): value is ServiceInputReader {\n return typeof value === 'function' && SERVICE_INPUT_SOURCE in value;\n}\n\nfunction resolveServiceInputSource(value: unknown): unknown {\n if (isYieldableReactiveValue(value)) {\n return rawReactiveValue(value)();\n }\n if (isSignal(value)) {\n return value();\n }\n if (typeof value === 'function') {\n return value();\n }\n return value;\n}\n\nexport function onAppStart(\n run: () => AppStartResult,\n): Generator<ServiceAppStartRequest<never>, void, unknown>;\nexport function onAppStart<Yielded extends AllowedAppStartYield>(\n run: () => Generator<Yielded, AppStartResult, unknown>,\n): Generator<ServiceAppStartRequest<Yielded>, void, unknown>;\nexport function onAppStart(\n run: () => Generator<unknown, AppStartResult, unknown>,\n): Generator<ServiceAppStartRequest<unknown>, void, unknown>;\nexport function* onAppStart<Yielded>(\n run: () => AppStartResult | Generator<Yielded, AppStartResult, unknown>,\n): Generator<ServiceAppStartRequest<Yielded>, void, unknown> {\n yield createAppStartRequest(run);\n}\n\nexport function abstract<Contract>(): AbstractMarker<Contract> {\n return {\n [ABSTRACT_SERVICE_MARKER]: () => undefined as Contract,\n } as AbstractMarker<Contract>;\n}\n\nexport function craftRequirement<Contract>(): ServiceRequirement<Contract> {\n return createServiceRequirement(\n 'AnonymousCraftRequirement',\n new InjectionToken<Contract>('CraftRequirementToken'),\n );\n}\n\n/**\n * Adapts an external Angular dependency so it can participate in the `craftService`\n * ecosystem.\n *\n * `toCraftService` is useful for services such as `Router`, `HttpClient`,\n * `ActivatedRoute`, custom `InjectionToken`s, or any dependency resolved through\n * `inject(...)` that you want to:\n *\n * - expose through the generated `Router()` helper\n * - derive partially with the same opaque exposure tokens as `craftService`\n * - track as a leaf dependency in `GetServiceDependencies`\n * - reuse in `setupCraftServiceTest(...)`\n *\n * External instance methods are automatically bound to their source instance so\n * exposing `navigateByUrl`, `get`, or similar methods is safe.\n *\n * Use the token form when the dependency should support provider-capable scopes\n * such as `toProvide` or `manuallyProvidedAtRoot`. Use the callback form only for\n * `global` dependencies resolved through custom `inject(...)` logic.\n *\n * @example\n * Adapt `Router` as a global dependency\n * ```ts\n * import { Router } from './host/craft-router-types';\n * import { toCraftService } from '@craft-ts/angular';\n *\n * const { Router } = toCraftService({\n * name: 'Router',\n * providedIn: 'global',\n * token: Router,\n * });\n * ```\n *\n * @example\n * Adapt an injected token through the callback form\n * ```ts\n * import { inject, InjectionToken } from './host/craft-compat';\n * import { toCraftService } from '@craft-ts/angular';\n *\n * const CURRENT_ROUTE = new InjectionToken<{ path: string }>('CurrentRoute');\n *\n * const { CurrentRoute } = toCraftService({\n * name: 'CurrentRoute',\n * providedIn: 'global',\n * inject: () => inject(CURRENT_ROUTE),\n * });\n * ```\n *\n * @example\n * Adapt a provider-capable dependency for explicit test coverage\n * ```ts\n * import { Router, provideRouter } from './host/craft-router-types';\n * import { toCraftService } from '@craft-ts/angular';\n *\n * const { provideAppRouter, AppRouterToProvide } = toCraftService({\n * name: 'AppRouter',\n * providedIn: 'manuallyProvidedAtRoot',\n * token: Router,\n * provide: () => provideRouter([]),\n * });\n * ```\n */\nexport function ɵtoCraftService<const Name extends string, Output>(options: {\n name: Name;\n providedIn: 'global';\n token: DependencySourceToken<Output>;\n browserBoundary: true;\n}): DependencyApi<\n Name,\n 'global',\n {},\n Output,\n ServiceTrackingMetadata<Name, 'global', Output, never, undefined, never, true>\n>;\nexport function ɵtoCraftService<const Name extends string, Output>(options: {\n name: Name;\n providedIn: 'global';\n token: DependencySourceToken<Output>;\n browserBoundary?: false;\n}): DependencyApi<\n Name,\n 'global',\n {},\n Output,\n ServiceTrackingMetadata<\n Name,\n 'global',\n Output,\n never,\n undefined,\n never,\n false\n >\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Output,\n Inputs extends object,\n FactoryResult,\n>(\n options: {\n name: Name;\n providedIn: 'global';\n token: DependencySourceToken<Output>;\n browserBoundary: true;\n },\n adaptFactory: ((dependency: Output, inputs: Inputs) => FactoryResult) &\n ValidateProvidedInputScope<'global', Inputs> &\n ValidateYieldedScope<\n 'global',\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n 'global',\n Inputs,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n 'global',\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n never,\n true\n >\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Output,\n Inputs extends object,\n FactoryResult,\n>(\n options: {\n name: Name;\n providedIn: 'global';\n token: DependencySourceToken<Output>;\n browserBoundary?: false;\n },\n adaptFactory: ((dependency: Output, inputs: Inputs) => FactoryResult) &\n ValidateProvidedInputScope<'global', Inputs> &\n ValidateYieldedScope<\n 'global',\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n 'global',\n Inputs,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n 'global',\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n never,\n false\n >\n>;\nexport function ɵtoCraftService<const Name extends string, Output>(\n options: GlobalInjectedDependencyOptions<Name, Output> & {\n browserBoundary: true;\n },\n): DependencyApi<\n Name,\n 'global',\n {},\n Output,\n ServiceTrackingMetadata<Name, 'global', Output, never, undefined, never, true>\n>;\nexport function ɵtoCraftService<const Name extends string, Output>(\n options: GlobalInjectedDependencyOptions<Name, Output> & {\n browserBoundary?: false;\n },\n): DependencyApi<\n Name,\n 'global',\n {},\n Output,\n ServiceTrackingMetadata<\n Name,\n 'global',\n Output,\n never,\n undefined,\n never,\n false\n >\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Output,\n Inputs extends object,\n FactoryResult,\n>(\n options: GlobalInjectedDependencyOptions<Name, Output> & {\n browserBoundary: true;\n },\n adaptFactory: ((dependency: Output, inputs: Inputs) => FactoryResult) &\n ValidateProvidedInputScope<'global', Inputs> &\n ValidateYieldedScope<\n 'global',\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n 'global',\n Inputs,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n 'global',\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n never,\n true\n >\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Output,\n Inputs extends object,\n FactoryResult,\n>(\n options: GlobalInjectedDependencyOptions<Name, Output> & {\n browserBoundary?: false;\n },\n adaptFactory: ((dependency: Output, inputs: Inputs) => FactoryResult) &\n ValidateProvidedInputScope<'global', Inputs> &\n ValidateYieldedScope<\n 'global',\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n 'global',\n Inputs,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n 'global',\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n never,\n false\n >\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Scope extends RealCapableScope,\n Token extends DependencySourceToken<any>,\n Provide extends AnyDependencyProvideFactory,\n>(\n options: ProviderCapableDependencyOptions<Name, Scope, Token, {}, Provide> & {\n browserBoundary: true;\n },\n): DependencyApi<\n Name,\n Scope,\n {},\n DependencySourceOutput<Token>,\n ServiceTrackingMetadata<\n Name,\n Scope,\n DependencySourceOutput<Token>,\n never,\n undefined,\n DependencyProvideFactoryInput<Provide>,\n true\n >,\n DependencyProvideFactoryInput<Provide>,\n DependencyProvideFactoryArgs<Provide>\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Scope extends RealCapableScope,\n Token extends DependencySourceToken<any>,\n Provide extends AnyDependencyProvideFactory,\n>(\n options: ProviderCapableDependencyOptions<Name, Scope, Token, {}, Provide> & {\n browserBoundary?: false;\n },\n): DependencyApi<\n Name,\n Scope,\n {},\n DependencySourceOutput<Token>,\n ServiceTrackingMetadata<\n Name,\n Scope,\n DependencySourceOutput<Token>,\n never,\n undefined,\n DependencyProvideFactoryInput<Provide>,\n false\n >,\n DependencyProvideFactoryInput<Provide>,\n DependencyProvideFactoryArgs<Provide>\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Scope extends RealCapableScope,\n Token extends DependencySourceToken<any>,\n Inputs extends object,\n Provide extends AnyDependencyProvideFactory,\n FactoryResult,\n>(\n options: ProviderCapableDependencyOptions<\n Name,\n Scope,\n Token,\n Inputs,\n Provide\n > & {\n browserBoundary: true;\n },\n adaptFactory: ((\n dependency: YieldableReactiveProperties<DependencySourceOutput<Token>> &\n DependencySourceOutput<Token>,\n inputs: WithDependencyProvidedInput<Inputs, Provide>,\n ) => FactoryResult) &\n ValidateYieldedScope<\n Scope,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n Scope,\n WithDependencyProvidedInput<Inputs, Provide>,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n Scope,\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n DependencyProvideFactoryInput<Provide>,\n true\n >,\n DependencyProvideFactoryInput<Provide>,\n DependencyProvideFactoryArgs<Provide>\n>;\nexport function ɵtoCraftService<\n const Name extends string,\n Scope extends RealCapableScope,\n Token extends DependencySourceToken<any>,\n Inputs extends object,\n Provide extends AnyDependencyProvideFactory,\n FactoryResult,\n>(\n options: ProviderCapableDependencyOptions<\n Name,\n Scope,\n Token,\n Inputs,\n Provide\n > & {\n browserBoundary?: false;\n },\n adaptFactory: ((\n dependency: YieldableReactiveProperties<DependencySourceOutput<Token>> &\n DependencySourceOutput<Token>,\n inputs: WithDependencyProvidedInput<Inputs, Provide>,\n ) => FactoryResult) &\n ValidateYieldedScope<\n Scope,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n unknown\n >,\n): DependencyApi<\n Name,\n Scope,\n WithDependencyProvidedInput<Inputs, Provide>,\n DependencyFactoryOutputFromResult<FactoryResult>,\n ServiceTrackingMetadata<\n Name,\n Scope,\n DependencyFactoryOutputFromResult<FactoryResult>,\n DependencyFactoryYieldsFromResult<FactoryResult>,\n undefined,\n DependencyProvideFactoryInput<Provide>,\n false\n >,\n DependencyProvideFactoryInput<Provide>,\n DependencyProvideFactoryArgs<Provide>\n>;\nexport function ɵtoCraftService(\n options:\n | (GlobalTokenDependencyOptions<string, DependencySourceToken<unknown>> & {\n browserBoundary?: boolean;\n })\n | (GlobalInjectedDependencyOptions<string, unknown> & {\n browserBoundary?: boolean;\n })\n | (ProviderCapableDependencyOptions<\n string,\n RealCapableScope,\n DependencySourceToken<unknown>,\n object,\n AnyDependencyProvideFactory\n > & {\n browserBoundary?: boolean;\n }),\n adaptFactory?: AnyDependencyFactory<unknown>,\n): unknown {\n const api = (\n adaptFactory\n ? craftService(\n {\n name: options.name,\n providedIn: options.providedIn,\n browserBoundary: options.browserBoundary,\n },\n (inputs: Record<string, unknown>) => {\n const dependencyValue = adaptExternalDependencyValue(\n 'inject' in options ? options.inject() : inject(options.token),\n options.name,\n true,\n );\n\n return adaptFactory(dependencyValue, inputs);\n },\n )\n : craftService(\n {\n name: options.name,\n providedIn: options.providedIn,\n browserBoundary: options.browserBoundary,\n },\n () => {\n const dependencyValue =\n 'inject' in options ? options.inject() : inject(options.token);\n\n return adaptExternalDependencyValue(dependencyValue);\n },\n )\n ) as Record<string, unknown>;\n\n const internalMetaData = getServiceMetaData(\n api[capitalize(options.name)],\n ) as InternalServiceMetaData;\n const runtimeDefinition = internalMetaData[SERVICE_RUNTIME_DEFINITION];\n\n if (adaptFactory) {\n runtimeDefinition.hasPublicInput = adaptFactory.length > 1;\n runtimeDefinition.hasProvidedInput = factoryUsesProvidedInput(adaptFactory);\n }\n\n if ('provide' in options) {\n runtimeDefinition.externalProviders = options.provide as (\n ...args: unknown[]\n ) => CraftServiceProvider;\n runtimeDefinition.hasProvidedInput =\n runtimeDefinition.hasProvidedInput ||\n provideFactoryUsesProvidedInput(options.provide);\n }\n\n Reflect.set(\n internalMetaData,\n 'usesProvidedInput',\n runtimeDefinition.hasProvidedInput,\n );\n\n return api;\n}\n\n/**\n * Creates a named Angular-friendly service boundary with generated service,\n * provider, and metadata helpers.\n *\n * `craftService` is designed for composing reactive features through explicit\n * dependencies instead of hidden `inject(...)` calls inside arbitrary code. Each\n * crafted service receives a stable name and scope, which are then reflected in\n * helpers such as:\n *\n * - `Counter(...)`\n * - `provideCounter()` for provider-capable scopes\n * - `CounterToProvide` for `manuallyProvidedAtRoot`\n * - `COUNTER_META_DATA`\n *\n * When a service yields other crafted services, its dependency tree becomes\n * available to the type system and to `setupCraftServiceTest(...)`.\n *\n * Partial exposure works through opaque dependency tokens. Returned tokens become\n * public API, while values used internally but not exposed must be declared with\n * `yield* token()`. Callable services can opt back into exposing their root\n * callable through the reserved `$self` token.\n *\n * The supported scopes are:\n *\n * - `global`: singleton provided at root\n * - `toProvide`: explicit provider helper required\n * - `manuallyProvidedAtRoot`: explicit provider helper plus public token\n * - `function`: new instance on each injection\n * - `abstract`: typed contract only, with no concrete implementation\n *\n * Practical recommendations for choosing a providedIn:\n *\n * - Prefer `function` for a service owned by a single component. It avoids\n * explicit providers and makes it clear the instance is not meant to be\n * shared with other components or child components.\n * - Move to `toProvide` when the same instance must be shared with child\n * components, or across several components through a common parent or route.\n * In that case, provide it at the component boundary, a parent component, or\n * the route. Angular does not report a compilation error when the provider is\n * missing, so the failure usually appears at runtime instead.\n * - Use `global` when the instance is intentionally shared application-wide.\n * - For startup-only logic that should run when the app boots but is not\n * injected elsewhere, prefer `function` together with\n * `provideAppInitializer(...)`. If the same instance also needs to be\n * injected by other services, use `global` instead.\n *\n * @example\n * Create a global callable counter service\n * ```ts\n * import { craftService, state } from '@craft-ts/core';\n *\n * const { Counter } = craftService(\n * { name: 'Counter', providedIn: 'global' },\n * () =>\n * state(0, ({ update }) => ({\n * increment: () => update((value) => value + 1),\n * })),\n * );\n * ```\n *\n * @example\n * Compose another service through `yield*`\n * ```ts\n * const { Counter } = craftService(\n * { name: 'Counter', providedIn: 'global' },\n * () =>\n * state(0, ({ update }) => ({\n * increment: () => update((value) => value + 1),\n * })),\n * );\n *\n * const { CounterFacade } = craftService(\n * { name: 'CounterFacade', providedIn: 'global' },\n * function* () {\n * const counter = yield* Counter();\n *\n * return {\n * read: () => counter(),\n * increment: () => counter.increment(),\n * };\n * },\n * );\n * ```\n *\n * @example\n * Expose only part of a dependency through opaque tokens\n * ```ts\n * const { Counter } = craftService(\n * { name: 'Counter', providedIn: 'toProvide' },\n * () =>\n * state(0, ({ update }) => ({\n * increment: () => update((value) => value + 1),\n * decrement: () => update((value) => value - 1),\n * })),\n * );\n *\n * const { CounterExtended } = craftService(\n * { name: 'CounterExtended', providedIn: 'toProvide' },\n * function* () {\n * return yield* Counter(undefined, ({ $self, increment }) => ({\n * $self,\n * incrementCounter: increment,\n * }));\n * },\n * );\n * ```\n *\n * @example\n * Build a global utility around a browser boundary dependency\n * ```ts\n * import { LocalStorageService, craftService } from '@craft-ts/core';\n *\n * const { GlobalPersisterHandlerService } = craftService(\n * { name: 'GlobalPersisterHandlerService', providedIn: 'global' },\n * function* () {\n * const storage = yield* LocalStorageService(\n * undefined,\n * ({ key, length, removeItem }) => ({\n * key,\n * length,\n * removeItem,\n * }),\n * );\n *\n * return {\n * clearAllCache: () => {\n * const keysToRemove: string[] = [];\n *\n * for (let index = 0; index < storage.length(); index++) {\n * const keyName = storage.key(index);\n * if (keyName?.startsWith('craft-ts-')) {\n * keysToRemove.push(keyName);\n * }\n * }\n *\n * keysToRemove.forEach((keyName) => storage.removeItem(keyName));\n * },\n * };\n * },\n * );\n * ```\n */\nexport function craftService<Name extends string, Contract>(\n options: { name: Name; providedIn: 'abstract' },\n marker: AbstractMarker<Contract>,\n): AbstractServiceApi<Name, Contract>;\nexport function craftService<\n Name extends string,\n Scope extends AppStartCapableScope,\n Requirement extends ServiceRequirement<any, any>,\n Factory extends AnyFactory,\n BrowserBoundary extends boolean = false,\n>(\n options: {\n name: Name;\n providedIn: Scope;\n requirement: Requirement;\n browserBoundary?: BrowserBoundary;\n appStart: true;\n providers?: readonly Provider[];\n },\n factory: Factory &\n ValidateProvidedInputScope<Scope, FactoryInputs<Factory>> &\n ValidateFactoryScope<Scope, Factory> &\n ValidateRequirementFactory<Factory, Requirement> &\n ValidateAppStartInputs<FactoryInputs<Factory>, true>,\n): ConcreteServiceApi<\n Name,\n Scope,\n FactoryInputs<Factory>,\n FactoryOutput<Factory>,\n ServiceHelperMetadata<Name, Scope, Factory, BrowserBoundary, true>,\n true\n>;\nexport function craftService<\n Name extends string,\n Scope extends RealCapableScope,\n Requirement extends ServiceRequirement<any, any>,\n Factory extends AnyFactory,\n BrowserBoundary extends boolean = false,\n>(\n options: {\n name: Name;\n providedIn: Scope;\n requirement: Requirement;\n browserBoundary?: BrowserBoundary;\n appStart?: false;\n providers?: readonly Provider[];\n },\n factory: Factory &\n ValidateProvidedInputScope<Scope, FactoryInputs<Factory>> &\n ValidateFactoryScope<Scope, Factory> &\n ValidateRequirementFactory<Factory, Requirement>,\n): ConcreteServiceApi<\n Name,\n Scope,\n FactoryInputs<Factory>,\n FactoryOutput<Factory>,\n ServiceHelperMetadata<Name, Scope, Factory, BrowserBoundary>,\n false\n>;\nexport function craftService<\n Name extends string,\n Scope extends AppStartCapableScope,\n Factory extends AnyFactory,\n BrowserBoundary extends boolean = false,\n>(\n options: {\n name: Name;\n providedIn: Scope;\n browserBoundary?: BrowserBoundary;\n appStart: true;\n providers?: readonly Provider[];\n },\n factory: Factory &\n ValidateProvidedInputScope<Scope, FactoryInputs<Factory>> &\n ValidateFactoryScope<Scope, Factory> &\n ValidateAppStartInputs<FactoryInputs<Factory>, true>,\n): ConcreteServiceApi<\n Name,\n Scope,\n FactoryInputs<Factory>,\n FactoryOutput<Factory>,\n ServiceHelperMetadata<Name, Scope, Factory, BrowserBoundary, true>,\n true\n>;\nexport function craftService<\n Name extends string,\n Scope extends ConcreteServiceScope,\n Factory extends AnyFactory,\n BrowserBoundary extends boolean = false,\n>(\n options: {\n name: Name;\n providedIn: Scope;\n browserBoundary?: BrowserBoundary;\n appStart?: false;\n providers?: readonly Provider[];\n },\n factory: Factory &\n ValidateProvidedInputScope<Scope, FactoryInputs<Factory>> &\n ValidateFactoryScope<Scope, Factory>,\n): ConcreteServiceApi<\n Name,\n Scope,\n FactoryInputs<Factory>,\n FactoryOutput<Factory>,\n ServiceHelperMetadata<Name, Scope, Factory, BrowserBoundary>,\n false\n>;\nexport function craftService(\n options: {\n name: string;\n providedIn: ServiceScope;\n requirement?: ServiceRequirement<unknown>;\n browserBoundary?: boolean;\n appStart?: boolean;\n providers?: readonly Provider[];\n },\n factoryOrMarker: AnyFactory | AbstractMarker<unknown>,\n): unknown {\n const capitalizedName = capitalize(options.name);\n const provideName = `provide${capitalizedName}`;\n const serviceName = capitalizedName;\n const requirementName = `${capitalizedName}Requirement`;\n const toProvideName = `${capitalizedName}ToProvide`;\n const metaDataName = toMetaDataPropertyName(options.name);\n\n if (options.providedIn === 'abstract') {\n assertAbstractMarker(factoryOrMarker);\n const token = new InjectionToken(`${capitalizedName}AbstractServiceToken`);\n const nativeToken = craftToken<unknown>(\n `${capitalizedName}AbstractServiceToken`,\n );\n ɵregisterCraftTokenHostToken(nativeToken, token);\n const requirement = createServiceRequirement(options.name, token);\n\n // A minimal definition so `X()` resolves the requirement token (the\n // concrete implementation bound through `provideX`) via the injector. The\n // factory is never invoked: scope is not `function`, so resolution goes\n // straight to `injector.get(token)` (or a registered test override by name).\n const abstractYieldDefinition: ConcreteRuntimeDefinition = {\n factory: () => undefined,\n name: options.name,\n providedIn: 'toProvide',\n browserBoundary: false,\n appStart: false,\n token,\n craftToken: nativeToken,\n requirement,\n hasPublicInput: false,\n hasProvidedInput: false,\n appStartHooks: new Map(),\n startedAppStartServices: new Set(),\n };\n\n // The helper closes over metadata that is initialized immediately below.\n // eslint-disable-next-line prefer-const\n let abstractMetaData: InternalServiceMetaData;\n\n const abstractInjectHelper = () => {\n assertInInjectionContext(abstractInject);\n return inject(token);\n };\n const abstractHelper = createHelper(\n abstractYieldDefinition,\n () => abstractMetaData,\n );\n\n const abstractApi: Record<string, unknown> = {\n [serviceName]: abstractHelper,\n [requirementName]: requirement,\n [provideName]: (factory: AnyFactory) => {\n const abstractRuntimeDefinition: ConcreteRuntimeDefinition = {\n factory,\n name: options.name,\n providedIn: 'toProvide',\n browserBoundary: false,\n appStart: false,\n token: new InjectionToken(`${capitalizedName}ServiceToken`),\n craftToken: craftToken(`${capitalizedName}ServiceToken`),\n requirement,\n hasPublicInput: factoryUsesPublicInput(factory),\n hasProvidedInput: factoryUsesProvidedInput(factory),\n appStartHooks: new Map(),\n startedAppStartServices: new Set(),\n };\n ɵregisterCraftTokenHostToken(\n abstractRuntimeDefinition.craftToken!,\n abstractRuntimeDefinition.token!,\n );\n return createProviders(abstractRuntimeDefinition);\n },\n };\n\n abstractMetaData = createServiceMetaData({\n name: options.name,\n providedIn: 'toProvide',\n inject: abstractInjectHelper,\n runtimeDefinition: abstractYieldDefinition,\n });\n abstractApi[metaDataName] = abstractMetaData;\n\n attachServiceRuntimeMeta(abstractHelper, abstractMetaData);\n attachServiceRuntimeMeta(abstractInjectHelper, abstractMetaData);\n\n REGISTERED_SERVICES.set(\n options.name,\n abstractInjectHelper as unknown as ServiceReference,\n );\n\n return abstractApi;\n }\n\n const concreteFactory = factoryOrMarker as AnyFactory;\n const runtimeDefinition: ConcreteRuntimeDefinition = {\n factory: concreteFactory,\n name: options.name,\n providedIn: options.providedIn,\n browserBoundary: options.browserBoundary ?? false,\n appStart: options.appStart ?? false,\n providers: options.providers,\n requirement: options.requirement,\n hasPublicInput: factoryUsesPublicInput(concreteFactory),\n hasProvidedInput: factoryUsesProvidedInput(concreteFactory),\n appStartHooks: new Map(),\n startedAppStartServices: new Set(),\n };\n\n const token =\n options.providedIn === 'global'\n ? new InjectionToken(`${capitalizedName}ServiceToken`, {\n providedIn: 'root',\n factory: () =>\n createConcreteServiceInstance(runtimeDefinition, inject(Injector)),\n })\n : options.providedIn === 'function'\n ? undefined\n : new InjectionToken(\n options.providedIn === 'manuallyProvidedAtRoot'\n ? `${capitalizedName}ToProvide`\n : `${capitalizedName}ServiceToken`,\n );\n const nativeToken =\n options.providedIn === 'function'\n ? undefined\n : craftToken<unknown>(\n options.providedIn === 'manuallyProvidedAtRoot'\n ? `${capitalizedName}ToProvide`\n : `${capitalizedName}ServiceToken`,\n );\n\n runtimeDefinition.token = token;\n runtimeDefinition.craftToken = nativeToken;\n if (token && nativeToken) {\n ɵregisterCraftTokenHostToken(nativeToken, token);\n }\n\n // The helper closes over metadata that is initialized immediately below.\n // eslint-disable-next-line prefer-const\n let serviceMetaData: InternalServiceMetaData;\n\n const api: Record<string, unknown> = {\n [serviceName]: createHelper(runtimeDefinition, () => serviceMetaData),\n };\n\n const injectHelper = createInjectHelper(\n runtimeDefinition,\n () => serviceMetaData,\n concreteInject,\n );\n\n if (\n options.providedIn === 'toProvide' ||\n options.providedIn === 'manuallyProvidedAtRoot'\n ) {\n api[provideName] = (...provided: unknown[]) =>\n createProviders(runtimeDefinition, provided);\n }\n\n if (options.providedIn === 'manuallyProvidedAtRoot' && token) {\n api[toProvideName] = token;\n }\n\n serviceMetaData = createServiceMetaData({\n name: options.name,\n providedIn: options.providedIn,\n inject: injectHelper,\n provide:\n options.providedIn === 'toProvide' ||\n options.providedIn === 'manuallyProvidedAtRoot'\n ? (api[provideName] as\n | ((...args: any[]) => CraftServiceProvider)\n | undefined)\n : undefined,\n token:\n options.providedIn === 'manuallyProvidedAtRoot'\n ? (token as InjectionToken<unknown>)\n : undefined,\n runtimeDefinition,\n });\n api[metaDataName] = serviceMetaData;\n\n attachServiceRuntimeMeta(injectHelper, serviceMetaData);\n attachServiceRuntimeMeta(api[serviceName], serviceMetaData);\n\n REGISTERED_SERVICES.set(\n runtimeDefinition.name,\n injectHelper as ServiceReference,\n );\n\n if (runtimeDefinition.appStart) {\n REGISTERED_APP_START_SERVICES.set(\n runtimeDefinition.name,\n injectHelper as ServiceReference,\n );\n }\n\n return api;\n\n function abstractInject() {\n return;\n }\n function concreteInject() {\n return;\n }\n}\n\nfunction createInjectHelper(\n definition: ConcreteRuntimeDefinition,\n getMetaData: () => InternalServiceMetaData | undefined,\n injectMarker: () => void,\n) {\n const propertyHelpers = new Map<string, unknown>();\n let omitInputsProxy: object | null = null;\n\n const injectHelper = (\n bindings?: Record<string, unknown>,\n expose?: RuntimeExposureSelector,\n ) => {\n assertInInjectionContext(injectMarker);\n const injector = inject(Injector);\n const serviceValue = resolveConcreteService(definition, injector, bindings);\n return expose\n ? resolveExposedService(serviceValue, expose, injector, definition.providedIn)\n : serviceValue;\n };\n\n const outerProxy = new Proxy(injectHelper, {\n get(target, property, receiver) {\n if (typeof property !== 'string') {\n return Reflect.get(target, property, receiver);\n }\n\n if (property === 'then' || property in target) {\n return Reflect.get(target, property, receiver);\n }\n\n if (property === 'OmitInputs') {\n if (!omitInputsProxy) {\n omitInputsProxy = new Proxy({} as object, {\n get(_, subProp, subReceiver) {\n return wrapOmitInputsHelper(\n Reflect.get(outerProxy, subProp, subReceiver),\n );\n },\n });\n }\n return omitInputsProxy;\n }\n\n if (!propertyHelpers.has(property)) {\n const nestedPropertyHelpers = new Map<string, unknown>();\n\n const propertyHelperFn = (...args: unknown[]) => {\n assertInInjectionContext(injectMarker);\n const omitInputs = args[0] === OMIT_INPUTS_BINDINGS;\n const callArgs = omitInputs ? args.slice(1) : args;\n const isDirectCall =\n callArgs.length > 0 && !definition.hasPublicInput;\n const injector = inject(Injector);\n const serviceValue = resolveConcreteService(\n definition,\n injector,\n omitInputs\n ? OMIT_INPUTS_BINDINGS\n : isDirectCall\n ? undefined\n : (callArgs[0] as Record<string, unknown>),\n );\n const propertyValue = Reflect.get(Object(serviceValue), property);\n\n if (!isDirectCall) {\n return propertyValue;\n }\n\n return Reflect.apply(\n propertyValue as (...args: unknown[]) => unknown,\n Object(serviceValue),\n callArgs,\n );\n };\n\n const propertyHelper = new Proxy(propertyHelperFn, {\n get(fnTarget, nestedProperty, fnReceiver) {\n if (typeof nestedProperty !== 'string') {\n return Reflect.get(fnTarget, nestedProperty, fnReceiver);\n }\n if (nestedProperty === 'then' || nestedProperty in fnTarget) {\n return Reflect.get(fnTarget, nestedProperty, fnReceiver);\n }\n if (!nestedPropertyHelpers.has(nestedProperty)) {\n nestedPropertyHelpers.set(\n nestedProperty,\n (...nestedArgs: unknown[]) => {\n assertInInjectionContext(injectMarker);\n const injector = inject(Injector);\n const serviceValue = resolveConcreteService(\n definition,\n injector,\n nestedArgs[0] === OMIT_INPUTS_BINDINGS\n ? OMIT_INPUTS_BINDINGS\n : (nestedArgs[0] as Record<string, unknown>),\n );\n const propValue = Reflect.get(Object(serviceValue), property);\n return Reflect.get(Object(propValue), nestedProperty);\n },\n );\n }\n return nestedPropertyHelpers.get(nestedProperty);\n },\n });\n\n const metaData = getMetaData();\n\n if (metaData) {\n attachServiceRuntimeMeta(propertyHelper, metaData);\n }\n\n propertyHelpers.set(property, propertyHelper);\n }\n\n return propertyHelpers.get(property);\n },\n });\n\n return outerProxy;\n}\n\nfunction createHelper(\n definition: ConcreteRuntimeDefinition,\n getMetaData: () => InternalServiceMetaData | undefined,\n) {\n const propertyHelpers = new Map<string, unknown>();\n let omitInputsProxy: object | null = null;\n\n const toYieldHelper = function* (\n bindings?: Record<string, unknown>,\n expose?: RuntimeExposureSelector,\n ) {\n const serviceValue = (yield createYieldRequest(\n definition,\n bindings,\n )) as unknown;\n\n if (!expose) {\n return serviceValue;\n }\n\n return (yield* exposeServiceValue(serviceValue, expose)) as unknown;\n };\n\n const outerProxy = new Proxy(toYieldHelper, {\n get(target, property, receiver) {\n if (typeof property !== 'string') {\n return Reflect.get(target, property, receiver);\n }\n\n if (property === 'then' || property in target) {\n return Reflect.get(target, property, receiver);\n }\n\n if (property === 'OmitInputs') {\n if (!omitInputsProxy) {\n omitInputsProxy = new Proxy({} as object, {\n get(_, subProp, subReceiver) {\n return wrapOmitInputsHelper(\n Reflect.get(outerProxy, subProp, subReceiver),\n );\n },\n });\n }\n return omitInputsProxy;\n }\n\n if (!propertyHelpers.has(property)) {\n const nestedPropertyHelpers = new Map<string, unknown>();\n\n const propertyHelperFn = function* (...args: unknown[]) {\n const omitInputs = args[0] === OMIT_INPUTS_BINDINGS;\n const callArgs = omitInputs ? args.slice(1) : args;\n const isDirectCall =\n callArgs.length > 0 && !definition.hasPublicInput;\n const serviceValue = (yield createYieldRequest(\n definition,\n omitInputs\n ? OMIT_INPUTS_BINDINGS\n : isDirectCall\n ? undefined\n : (callArgs[0] as Record<string, unknown>),\n )) as unknown;\n const propertyValue = Reflect.get(Object(serviceValue), property);\n\n if (!isDirectCall) {\n return propertyValue;\n }\n\n const result = Reflect.apply(\n propertyValue as (...args: unknown[]) => unknown,\n Object(serviceValue),\n callArgs,\n );\n\n return isGenerator(result) ? yield* result : result;\n };\n\n const propertyHelper = new Proxy(propertyHelperFn, {\n get(fnTarget, nestedProperty, fnReceiver) {\n if (typeof nestedProperty !== 'string') {\n return Reflect.get(fnTarget, nestedProperty, fnReceiver);\n }\n if (nestedProperty === 'then' || nestedProperty in fnTarget) {\n return Reflect.get(fnTarget, nestedProperty, fnReceiver);\n }\n if (!nestedPropertyHelpers.has(nestedProperty)) {\n nestedPropertyHelpers.set(\n nestedProperty,\n function* (...nestedArgs: unknown[]) {\n const serviceValue = (yield createYieldRequest(\n definition,\n nestedArgs[0] === OMIT_INPUTS_BINDINGS\n ? OMIT_INPUTS_BINDINGS\n : (nestedArgs[0] as Record<string, unknown>),\n )) as unknown;\n const propValue = Reflect.get(Object(serviceValue), property);\n return Reflect.get(Object(propValue), nestedProperty);\n },\n );\n }\n return nestedPropertyHelpers.get(nestedProperty);\n },\n });\n\n const metaData = getMetaData();\n\n if (metaData) {\n attachServiceRuntimeMeta(propertyHelper, metaData);\n }\n\n propertyHelpers.set(property, propertyHelper);\n }\n\n return propertyHelpers.get(property);\n },\n });\n\n return outerProxy;\n}\n\nfunction createServiceRequirement<Contract, Name extends string>(\n name: Name,\n token: InjectionToken<Contract>,\n): ServiceRequirement<Contract, Name> {\n return {\n [SERVICE_REQUIREMENT_MARKER]: true,\n token,\n name,\n };\n}\n\nfunction createServiceMetaData(config: {\n name: string;\n providedIn: ConcreteServiceScope;\n inject: (...args: any[]) => unknown;\n provide?: (...args: any[]) => CraftServiceProvider;\n token?: InjectionToken<unknown>;\n runtimeDefinition: ConcreteRuntimeDefinition;\n}): InternalServiceMetaData {\n const metaData: Record<string, unknown> = {\n kind: 'service-meta-data',\n name: config.name,\n providedIn: config.providedIn,\n browserBoundary: config.runtimeDefinition.browserBoundary,\n appStart: config.runtimeDefinition.appStart,\n inject: config.inject,\n usesProvidedInput: config.runtimeDefinition.hasProvidedInput,\n };\n\n if (config.provide) {\n metaData['provide'] = config.provide;\n }\n\n if (config.token) {\n metaData['token'] = config.token;\n }\n\n Object.defineProperty(metaData, SERVICE_RUNTIME_DEFINITION, {\n value: config.runtimeDefinition,\n enumerable: false,\n configurable: false,\n });\n\n Object.defineProperty(metaData, SERVICE_RUNTIME_META, {\n value: metaData,\n enumerable: false,\n configurable: false,\n });\n\n Object.defineProperty(metaData, SERVICE_RUNTIME_META_GLOBAL, {\n value: metaData,\n enumerable: false,\n configurable: false,\n });\n\n return metaData as InternalServiceMetaData;\n}\n\nfunction attachServiceRuntimeMeta(\n helper: unknown,\n metaData: InternalServiceMetaData,\n) {\n if (typeof helper !== 'function') {\n return;\n }\n\n Object.defineProperty(helper, SERVICE_RUNTIME_META, {\n value: metaData,\n enumerable: false,\n configurable: false,\n });\n\n Object.defineProperty(helper, SERVICE_RUNTIME_META_GLOBAL, {\n value: metaData,\n enumerable: false,\n configurable: false,\n });\n}\n\nexport function getServiceMetaData(target: unknown): AnyServiceMetaData {\n if (isServiceMetaData(target)) {\n return target;\n }\n\n if (typeof target === 'object' || typeof target === 'function') {\n const runtimeMeta = (Reflect.get(target as object, SERVICE_RUNTIME_META) ??\n Reflect.get(target as object, SERVICE_RUNTIME_META_GLOBAL)) as\n | InternalServiceMetaData\n | undefined;\n\n if (runtimeMeta) {\n return runtimeMeta;\n }\n }\n\n throw new Error(\n 'Expected a craftService/toCraftService service helper or a service metadata object.',\n );\n}\n\nfunction isServiceMetaData(value: unknown): value is InternalServiceMetaData {\n return (\n typeof value === 'object' &&\n value !== null &&\n Reflect.get(value, 'kind') === 'service-meta-data' &&\n SERVICE_RUNTIME_DEFINITION in value\n );\n}\n\nfunction createProviders(\n definition: ConcreteRuntimeDefinition,\n providedArgs: unknown[] = [],\n): NamedBrandedServiceProvider<string, RequirementScope, unknown> {\n const concreteToken = definition.token;\n\n if (!concreteToken) {\n throw new Error(\n `craftService(\"${definition.name}\") cannot create providers for scope \"${definition.providedIn}\".`,\n );\n }\n\n const providers: CraftServiceProvider[] = [];\n const providedConfig = normalizeProvidedConfig(providedArgs);\n\n if (definition.externalProviders) {\n providers.push(definition.externalProviders(...providedArgs));\n }\n\n const concreteProviders: Provider[] = [\n {\n provide: concreteToken,\n useFactory: () =>\n createConcreteServiceInstance(\n definition,\n inject(Injector),\n undefined,\n providedConfig,\n ),\n },\n ];\n\n if (definition.craftToken && definition.craftToken !== concreteToken) {\n concreteProviders.push({\n provide: definition.craftToken,\n useExisting: concreteToken,\n });\n }\n\n if (definition.requirement) {\n concreteProviders.push({\n provide: definition.requirement.token,\n useExisting: concreteToken,\n });\n }\n\n providers.push(concreteProviders);\n\n const brandedProviders = providers as NamedBrandedServiceProvider<\n string,\n RequirementScope,\n unknown\n >;\n\n Object.defineProperty(brandedProviders, CRAFT_SERVICE_PROVIDER_BRAND, {\n value: {\n name: definition.name,\n providedIn: definition.providedIn,\n output: undefined,\n yielded: undefined,\n },\n enumerable: false,\n configurable: false,\n });\n\n return brandedProviders;\n}\n\nfunction normalizeProvidedConfig(providedArgs: unknown[]): unknown {\n if (providedArgs.length === 0) {\n return undefined;\n }\n\n return providedArgs.length === 1 ? providedArgs[0] : providedArgs;\n}\n\nfunction adaptExternalDependencyValue<Value>(\n value: Value,\n dependencyName = 'externalDependency',\n trackReactiveProperties = false,\n): Value {\n if (!isObjectLike(value)) {\n return value;\n }\n\n const target = value as object;\n const boundMethods = new Map<PropertyKey, unknown>();\n const reactiveProperties = new Map<PropertyKey, unknown>();\n\n return new Proxy(target, {\n get(_proxyTarget, property) {\n const entry = Reflect.get(target, property, target);\n\n if (typeof entry === 'function' && !isSignal(entry)) {\n if (!boundMethods.has(property)) {\n boundMethods.set(property, (...args: unknown[]) =>\n untracked(() => Reflect.apply(entry, target, args)),\n );\n }\n\n return boundMethods.get(property);\n }\n\n if (\n trackReactiveProperties &&\n isSignal(entry) &&\n !isYieldableReactiveValue(entry)\n ) {\n if (!reactiveProperties.has(property)) {\n reactiveProperties.set(\n property,\n createYieldableReactiveValue(\n entry,\n `${dependencyName}.${String(property)}`,\n {\n primitive: 'toCraftService',\n path: `${dependencyName}.${String(property)}`,\n },\n ),\n );\n }\n return reactiveProperties.get(property);\n }\n\n return entry;\n },\n apply(proxyTarget, _thisArg, args) {\n return Reflect.apply(\n proxyTarget as (...args: unknown[]) => unknown,\n target,\n args,\n );\n },\n }) as Value;\n}\n\nfunction createYieldRequest(\n definition: ConcreteRuntimeDefinition,\n bindings?: ConcreteServiceBindings,\n): ServiceYieldRequest<ConcreteServiceScope, unknown> {\n return {\n [SERVICE_YIELD_REQUEST_MARKER]: true,\n name: definition.name,\n providedIn: definition.providedIn,\n resolve: (injector, hostScope) => {\n assertDependencyScope(hostScope, definition.providedIn, definition.name);\n return resolveConcreteService(definition, injector, bindings);\n },\n };\n}\n\nfunction resolveConcreteService(\n definition: ConcreteRuntimeDefinition,\n injector: Injector,\n bindings?: ConcreteServiceBindings,\n): unknown {\n const serviceOverride = getServiceRuntimeOverride(injector, definition.name);\n\n if (serviceOverride) {\n if (serviceOverride.kind === 'useValue') {\n return trackResolvedService(\n definition,\n injector,\n markNamedReactiveProperties(serviceOverride.value),\n );\n }\n\n if (\n bindings !== undefined &&\n bindings !== OMIT_INPUTS_BINDINGS &&\n definition.initialBindings === undefined\n ) {\n definition.initialBindings = bindings;\n }\n\n if (serviceOverride.instance === undefined) {\n serviceOverride.instance = createConcreteServiceInstance(\n definition,\n injector,\n bindings,\n undefined,\n );\n }\n\n return trackResolvedService(\n definition,\n injector,\n markNamedReactiveProperties(serviceOverride.instance),\n );\n }\n\n if (definition.providedIn === 'function') {\n return trackResolvedService(\n definition,\n injector,\n markNamedReactiveProperties(\n createConcreteServiceInstance(definition, injector, bindings),\n ),\n );\n }\n\n if (\n bindings !== undefined &&\n bindings !== OMIT_INPUTS_BINDINGS &&\n definition.initialBindings === undefined\n ) {\n definition.initialBindings = bindings;\n }\n\n return trackResolvedService(\n definition,\n injector,\n markNamedReactiveProperties(\n ɵcraftInjectorFromHost(injector).get(\n (definition.token ?? definition.craftToken) as object,\n ),\n ),\n );\n}\n\nfunction trackResolvedService(\n definition: ConcreteRuntimeDefinition,\n injector: Injector,\n value: unknown,\n): unknown {\n const hostTags = injector.get(ɵHOST_TAG_LIST, []);\n registerResolvedService(\n injector,\n definition.name,\n value,\n hostTags[hostTags.length - 1] ?? `service:${definition.name}`,\n definition.providedIn,\n );\n return value;\n}\n\nfunction getServiceRuntimeOverride(\n injector: Injector,\n serviceName: string,\n): ServiceRuntimeOverride | undefined {\n return injector.get(SERVICE_RUNTIME_OVERRIDES).get(serviceName);\n}\n\nfunction createConcreteServiceInstance(\n definition: ConcreteRuntimeDefinition,\n injector: Injector,\n bindingsOverride?: ConcreteServiceBindings,\n providedConfig?: unknown,\n): unknown {\n const scopedInjector = ɵcreateHostTaggedInjector(\n injector,\n `service:${definition.name}`,\n definition.providers ?? [],\n {\n instanced:\n definition.providedIn === 'function' ||\n definition.providedIn === 'toProvide',\n },\n );\n\n return runInInjectionContext(scopedInjector, () =>\n ɵcraftInjectorFromHost(scopedInjector).run(() => {\n const omitInputs = bindingsOverride === OMIT_INPUTS_BINDINGS;\n const bindings = omitInputs\n ? {}\n : (bindingsOverride ?? definition.initialBindings ?? {});\n const inputs = createInputProxy(\n bindings,\n providedConfig,\n omitInputs,\n definition.name,\n );\n const wrappedFactory = injectFnWrapper()(definition.factory);\n const result =\n definition.factory.length > 0\n ? wrappedFactory(inputs)\n : wrappedFactory();\n\n if (!isGenerator(result)) {\n return result;\n }\n\n const resolved = runCraftGenerator({\n iterator: result,\n injector: scopedInjector,\n hostScope: definition.providedIn,\n invalidYieldErrorMessage:\n 'craftService/toCraftService generators can only yield craftService dependencies, exposed dependency helpers, or onAppStart(...).',\n multipleAppStartErrorMessage:\n 'craftService generators can only declare onAppStart(...) once.',\n createAppStartHook: (run) => () =>\n runAppStartCallback(run, scopedInjector, definition.providedIn),\n reactiveReader: {\n name: definition.name,\n primitive: 'craftService',\n path: `service:${definition.name}`,\n },\n });\n\n if (resolved.appStartHook) {\n if (!definition.appStart) {\n throw new Error(\n `craftService(\"${definition.name}\") used onAppStart(...) without enabling appStart: true.`,\n );\n }\n\n definition.appStartHooks.set(resolved.value, resolved.appStartHook);\n }\n\n return resolved.value;\n }),\n );\n}\n\nfunction runAppStartCallback(\n run: () => AppStartResult | Generator<unknown, AppStartResult, unknown>,\n injector: Injector,\n hostScope: ConcreteServiceScope,\n): AppStartResult {\n const result = run();\n\n if (!isGenerator(result)) {\n return result;\n }\n\n return runCraftGenerator({\n iterator: result,\n injector,\n hostScope,\n invalidYieldErrorMessage:\n 'craftService/toCraftService generators can only yield craftService dependencies, exposed dependency helpers, or onAppStart(...).',\n multipleAppStartErrorMessage:\n 'craftService generators can only declare onAppStart(...) once.',\n onAppStartNotSupportedErrorMessage:\n 'onAppStart(...) generator callbacks cannot declare onAppStart(...) recursively.',\n reactiveReader: {\n name: `${hostScope}:appStart`,\n primitive: 'craftService',\n path: `appStart:${hostScope}`,\n },\n }).value as AppStartResult;\n}\n\nfunction createInputProxy(\n bindings: Record<string, unknown>,\n providedConfig?: unknown,\n allowMissing = false,\n serviceName = 'craftService',\n): Record<string, unknown> {\n const resolvedBindings =\n providedConfig === undefined\n ? bindings\n : {\n ...bindings,\n [SERVICE_PROVIDED_INPUT_KEY]: providedConfig,\n };\n\n return new Proxy<Record<string, unknown>>({} as Record<string, unknown>, {\n get(_target, property) {\n if (typeof property !== 'string') {\n return undefined;\n }\n\n if (!Object.prototype.hasOwnProperty.call(resolvedBindings, property)) {\n if (allowMissing) {\n return undefined;\n }\n throw new Error(`Inputs Error, ${property} is not provided`);\n }\n\n const value = resolvedBindings[property];\n\n if (value === PROVIDED_ELSEWHERE) {\n throw new Error(`Inputs Error, ${property} is not provided`);\n }\n\n return isReactiveServiceInput(value)\n ? createServiceInputReader(value, serviceName, property)\n : value;\n },\n });\n}\n\nfunction isReactiveServiceInput(value: unknown): boolean {\n return (\n isSignal(value) ||\n isYieldableReactiveValue(value) ||\n typeof value === 'function'\n );\n}\n\nfunction createServiceInputReader(\n source: unknown,\n serviceName: string,\n property: string,\n): ServiceInputReader {\n const reactiveSource =\n isSignal(source) && !isYieldableReactiveValue(source)\n ? createYieldableReactiveValue(source, `${serviceName}.${property}`, {\n primitive: 'craftService',\n path: `service:${serviceName}.input.${property}`,\n })\n : source;\n\n const reader = markYieldableMethod((...args: unknown[]) => {\n const value =\n typeof reactiveSource === 'function'\n ? (reactiveSource as (...args: unknown[]) => unknown)(...args)\n : reactiveSource;\n\n return isGenerator(value)\n ? value\n : yieldableInvocation<unknown, unknown>(value);\n }) as unknown as ServiceInputReader;\n\n Object.defineProperty(reader, SERVICE_INPUT_SOURCE, {\n value: reactiveSource,\n enumerable: false,\n configurable: false,\n });\n\n return reader;\n}\n\nfunction resolveExposedService(\n serviceValue: unknown,\n expose: RuntimeExposureSelector,\n injector: Injector,\n hostScope: ConcreteServiceScope,\n): unknown {\n const exposure = expose(createExposureTokens(serviceValue));\n const resolvedExposure = isGenerator(exposure)\n ? runCraftGenerator({\n iterator: exposure,\n injector,\n hostScope,\n invalidYieldErrorMessage:\n 'craftService/toCraftService generators can only yield craftService dependencies, exposed dependency helpers, or onAppStart(...).',\n multipleAppStartErrorMessage:\n 'craftService generators can only declare onAppStart(...) once.',\n }).value\n : exposure;\n\n return createExposedServiceValue(resolvedExposure);\n}\n\nfunction* exposeServiceValue(\n serviceValue: unknown,\n expose: RuntimeExposureSelector,\n): Generator<\n ServiceDependencyAccessRequest<string, unknown>,\n unknown,\n unknown\n> {\n const exposure = expose(createExposureTokens(serviceValue));\n const resolvedExposure = isGenerator(exposure)\n ? yield* exposure as Generator<\n ServiceDependencyAccessRequest<string, unknown>,\n unknown,\n unknown\n >\n : exposure;\n\n return createExposedServiceValue(resolvedExposure);\n}\n\ntype RuntimeExposureToken = (() => Generator<\n ServiceDependencyAccessRequest<string, unknown>,\n unknown,\n unknown\n>) & {\n [SERVICE_EXPOSURE_TOKEN_MARKER]: {\n key: string;\n resolve: () => unknown;\n };\n};\n\nfunction createExposureTokens(\n serviceValue: unknown,\n): Record<string, RuntimeExposureToken> {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (typeof property !== 'string') {\n return undefined;\n }\n\n if (\n property === SERVICE_ROOT_EXPOSURE_KEY &&\n typeof serviceValue !== 'function'\n ) {\n return undefined;\n }\n\n return createExposureToken(serviceValue, property);\n },\n },\n );\n}\n\nfunction createExposureToken(\n serviceValue: unknown,\n key: string,\n): RuntimeExposureToken {\n const resolve =\n key === SERVICE_ROOT_EXPOSURE_KEY\n ? () => serviceValue\n : () => Reflect.get(Object(serviceValue), key);\n const token = function* () {\n return (yield createDependencyAccessRequest(key, resolve)) as unknown;\n } as RuntimeExposureToken;\n\n Object.defineProperty(token, SERVICE_EXPOSURE_TOKEN_MARKER, {\n value: {\n key,\n resolve,\n },\n enumerable: false,\n configurable: false,\n });\n\n return token;\n}\n\nfunction createDependencyAccessRequest(\n key: string,\n resolve: () => unknown,\n): ServiceDependencyAccessRequest<string, unknown> {\n return {\n [SERVICE_DEPENDENCY_ACCESS_MARKER]: true,\n key,\n resolve,\n };\n}\n\nfunction createAppStartRequest<Yielded>(\n run: () => AppStartResult | Generator<Yielded, AppStartResult, unknown>,\n): ServiceAppStartRequest<Yielded> {\n return {\n [SERVICE_APP_START_REQUEST_MARKER]: true,\n run,\n };\n}\n\nexport function runServiceAppStart(\n reference: ServiceReference,\n serviceValue: unknown,\n): AppStartResult {\n const metaData = getServiceMetaData(reference) as InternalServiceMetaData;\n const definition = metaData[SERVICE_RUNTIME_DEFINITION];\n\n if (!definition.appStart) {\n throw new Error(\n `craftService(\"${definition.name}\") is not configured with appStart: true.`,\n );\n }\n\n if (definition.startedAppStartServices.has(serviceValue)) {\n return;\n }\n\n const hook = definition.appStartHooks.get(serviceValue);\n\n if (!hook) {\n throw new Error(\n `craftService(\"${definition.name}\") is configured with appStart: true but did not declare onAppStart(...).`,\n );\n }\n\n definition.startedAppStartServices.add(serviceValue);\n\n return hook();\n}\n\nexport function getRegisteredAppStartServices(): readonly ServiceReference[] {\n return Array.from(REGISTERED_APP_START_SERVICES.values());\n}\n\nexport function getRegisteredServices(): readonly ServiceReference[] {\n return Array.from(REGISTERED_SERVICES.values());\n}\n\ntype RuntimeCallable = (...args: any[]) => unknown;\n\ntype RuntimeMaterializedExposure = {\n value: unknown;\n rootCallable?: RuntimeCallable;\n};\n\nexport function createExposedServiceValue(exposedValue: unknown): unknown {\n const materializedExposure = materializeExposedValue(exposedValue);\n markNamedReactiveProperties(materializedExposure.value);\n\n if (!materializedExposure.rootCallable) {\n return materializedExposure.value;\n }\n\n if (\n !isNonCallableObject(materializedExposure.value) ||\n Reflect.ownKeys(materializedExposure.value).length === 0\n ) {\n return materializedExposure.rootCallable;\n }\n\n return createCallableExposureProxy(\n materializedExposure.rootCallable,\n materializedExposure.value,\n );\n}\n\nfunction materializeExposedValue(\n exposedValue: unknown,\n): RuntimeMaterializedExposure {\n if (isRuntimeExposureToken(exposedValue)) {\n const resolvedValue = exposedValue[SERVICE_EXPOSURE_TOKEN_MARKER].resolve();\n\n return isRootRuntimeExposureToken(exposedValue) &&\n typeof resolvedValue === 'function'\n ? {\n value: resolvedValue,\n rootCallable: resolvedValue as RuntimeCallable,\n }\n : { value: resolvedValue };\n }\n\n if (!isNonCallableObject(exposedValue)) {\n return { value: exposedValue };\n }\n\n const materialized: Record<PropertyKey, unknown> = {};\n let rootCallable: RuntimeCallable | undefined;\n\n for (const key of Reflect.ownKeys(exposedValue)) {\n const resolvedValue = unwrapDirectExposureToken(\n Reflect.get(exposedValue, key, exposedValue),\n );\n\n if (\n key === SERVICE_ROOT_EXPOSURE_KEY &&\n typeof resolvedValue === 'function'\n ) {\n rootCallable = resolvedValue as RuntimeCallable;\n continue;\n }\n\n materialized[key] = resolvedValue;\n }\n\n if (rootCallable && Reflect.ownKeys(materialized).length === 0) {\n return {\n value: rootCallable,\n rootCallable,\n };\n }\n\n return {\n value: materialized,\n rootCallable,\n };\n}\n\nfunction unwrapDirectExposureToken(value: unknown): unknown {\n return isRuntimeExposureToken(value)\n ? value[SERVICE_EXPOSURE_TOKEN_MARKER].resolve()\n : value;\n}\n\nfunction createCallableExposureProxy(\n serviceValue: (...args: any[]) => unknown,\n exposedValue: object,\n) {\n const exposedKeys = new Set(Reflect.ownKeys(exposedValue));\n const forwardedTargetKeys = new Set<PropertyKey>(\n Reflect.ownKeys(serviceValue).filter(\n (key) =>\n typeof key === 'symbol' ||\n Reflect.getOwnPropertyDescriptor(serviceValue, key)?.configurable ===\n false,\n ),\n );\n\n return new Proxy(serviceValue, {\n get(target, property, receiver) {\n if (exposedKeys.has(property)) {\n return Reflect.get(exposedValue, property, exposedValue);\n }\n\n if (\n forwardedTargetKeys.has(property) ||\n (typeof property === 'string' && property in Function.prototype)\n ) {\n return Reflect.get(target, property, receiver);\n }\n\n return undefined;\n },\n has(_target, property) {\n return (\n exposedKeys.has(property) ||\n forwardedTargetKeys.has(property) ||\n (typeof property === 'string' && property in Function.prototype)\n );\n },\n ownKeys() {\n return Array.from(\n new Set([\n ...Array.from(forwardedTargetKeys),\n ...Reflect.ownKeys(exposedValue),\n ]),\n ) as Array<string | symbol>;\n },\n getOwnPropertyDescriptor(target, property) {\n if (exposedKeys.has(property)) {\n return (\n Reflect.getOwnPropertyDescriptor(exposedValue, property) ?? {\n configurable: true,\n enumerable: true,\n writable: true,\n value: Reflect.get(exposedValue, property, exposedValue),\n }\n );\n }\n\n if (forwardedTargetKeys.has(property)) {\n return Reflect.getOwnPropertyDescriptor(target, property);\n }\n\n return undefined;\n },\n });\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return (\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n );\n}\n\nfunction isNonCallableObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n\ntype RuntimeExposureSelector = (\n dependencies: Record<string, RuntimeExposureToken>,\n) => unknown;\n\nfunction isRuntimeExposureToken(value: unknown): value is RuntimeExposureToken {\n return typeof value === 'function' && SERVICE_EXPOSURE_TOKEN_MARKER in value;\n}\n\nfunction isRootRuntimeExposureToken(value: RuntimeExposureToken): boolean {\n return value[SERVICE_EXPOSURE_TOKEN_MARKER].key === SERVICE_ROOT_EXPOSURE_KEY;\n}\n\nfunction assertAbstractMarker(\n value: unknown,\n): asserts value is AbstractMarker<unknown> {\n if (\n typeof value !== 'object' ||\n value === null ||\n !(ABSTRACT_SERVICE_MARKER in value)\n ) {\n throw new Error('craftService scope \"abstract\" expects abstract<T>().');\n }\n}\n\nfunction assertDependencyScope(\n hostScope: ConcreteServiceScope,\n dependencyScope: ConcreteServiceScope,\n dependencyName: string,\n) {\n if (hostScope === 'global' && dependencyScope === 'toProvide') {\n throw new Error(\n `Global craftService cannot depend on toProvide craftService \"${dependencyName}\".`,\n );\n }\n}\n\nfunction factoryUsesProvidedInput(factory: AnyFactory): boolean {\n return factory.toString().includes(SERVICE_PROVIDED_INPUT_KEY);\n}\n\nfunction factoryUsesPublicInput(factory: AnyFactory): boolean {\n return factory.length > 0;\n}\n\nfunction provideFactoryUsesProvidedInput(\n provideFactory: (...args: any[]) => CraftServiceProvider,\n): boolean {\n return provideFactory.length > 0;\n}\n\nfunction capitalize(value: string): string {\n return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;\n}\n\nfunction toMetaDataPropertyName(value: string): string {\n return `${value\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toUpperCase()}_META_DATA`;\n}\n\nconst HOST_TAG_INTERNAL_SERVICE_NAMES = new Set(['service:HostName']);\n\nexport interface CraftTrackTags {}\n\nexport type TrackTag = CraftTrackTags extends {\n Tags: readonly (infer Tag)[];\n}\n ? Tag & string\n : never;\n\nexport const ɵHOST_TAG_LIST = new InjectionToken<readonly string[]>(\n 'HostTagList',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\nexport const ɵTRACK_TAGS_LIST = new InjectionToken<readonly TrackTag[]>(\n 'TrackTagsList',\n {\n providedIn: 'root',\n factory: () => [] as const,\n },\n);\n\nconst hostNameApi = craftService(\n { name: 'HostName', providedIn: 'manuallyProvidedAtRoot' },\n (inputs: { $provided: string }) => inputs.$provided,\n);\n\nexport const ɵinjectHostName = hostNameApi.HOST_NAME_META_DATA.inject;\nexport const ɵHostName = hostNameApi.HostName;\nexport const ɵHostNameToProvide = hostNameApi.HostNameToProvide;\nexport const ɵHOST_NAME_META_DATA = hostNameApi.HOST_NAME_META_DATA;\n\nconst ɵprovideHostNameProvider = hostNameApi.provideHostName;\n\nexport function ɵprovideHostName(name: string): Provider[] {\n return [\n ɵprovideHostNameProvider(name) as Provider,\n {\n provide: ɵHOST_TAG_LIST,\n useFactory: () => {\n const parentTags =\n inject(ɵHOST_TAG_LIST, {\n optional: true,\n skipSelf: true,\n }) ?? [];\n const id = (\n inject(\n COMPONENT_REGISTER as unknown as InjectionToken<ComponentRegister>,\n { optional: true },\n ) ?? ɵfallbackComponentRegister\n ).next();\n\n return [...parentTags, `${name}#${id}`] as readonly string[];\n },\n },\n ];\n}\n\nexport function ɵprovideTrackTags(tags: readonly TrackTag[]): Provider[] {\n return [\n {\n provide: ɵTRACK_TAGS_LIST,\n useFactory: () => {\n const parentTags =\n inject(ɵTRACK_TAGS_LIST, {\n optional: true,\n skipSelf: true,\n }) ?? [];\n\n return [...parentTags, ...tags] as readonly TrackTag[];\n },\n },\n ];\n}\n\nexport function ɵinjectTrackTags(): readonly TrackTag[] {\n return inject(ɵTRACK_TAGS_LIST);\n}\n\nexport type ɵHostTagYield = Readonly<{\n [SERVICE_YIELD_REQUEST_MARKER]: true;\n providedIn: 'function';\n resolve: (\n injector: Injector,\n hostScope: ConcreteServiceScope,\n ) => readonly string[];\n}>;\n\nexport function* ɵHostTag(): Generator<\n ɵHostTagYield,\n readonly string[],\n unknown\n> {\n return (yield {\n [SERVICE_YIELD_REQUEST_MARKER]: true,\n providedIn: 'function',\n resolve: (injector) => injector.get(ɵHOST_TAG_LIST),\n }) as readonly string[];\n}\n\nexport type ɵTrackTagsYield = Readonly<{\n [SERVICE_YIELD_REQUEST_MARKER]: true;\n providedIn: 'function';\n resolve: (\n injector: Injector,\n hostScope: ConcreteServiceScope,\n ) => readonly TrackTag[];\n}>;\n\nexport function* ɵTrackTags(): Generator<\n ɵTrackTagsYield,\n readonly TrackTag[],\n unknown\n> {\n return (yield {\n [SERVICE_YIELD_REQUEST_MARKER]: true,\n providedIn: 'function',\n resolve: (injector) => injector.get(ɵTRACK_TAGS_LIST),\n }) as readonly TrackTag[];\n}\n\nexport function ɵcreateHostTaggedInjector(\n injector: Injector,\n hostName: string,\n extraProviders: readonly Provider[] = [],\n options: { readonly instanced?: boolean } = {},\n): Injector {\n if (HOST_TAG_INTERNAL_SERVICE_NAMES.has(hostName)) {\n return injector;\n }\n\n let parentDestroyRef: DestroyRef | null = null;\n try {\n parentDestroyRef = inject(DestroyRef, { optional: true });\n } catch {\n // not in an injection context\n }\n\n // Collect tags from the node injector chain\n const nodeTags = injector.get(ɵHOST_TAG_LIST, []);\n\n // Collect tags exclusive to the env injector chain (e.g. route-level providers\n // that are shadowed by a parent component's node injector providing the same token)\n let envOnlyTags: readonly string[] = [];\n const associatedEnvInjector = injector.get(EnvironmentInjector, null);\n if (associatedEnvInjector) {\n const envTags = associatedEnvInjector.get(ɵHOST_TAG_LIST, null) ?? [];\n envOnlyTags = envTags.filter((t) => !nodeTags.includes(t));\n }\n\n // Insert env-only tags before the last element of nodeTags (the current component's tag)\n // to preserve semantic order: parent components → route → current component → method\n // EXPERIMENT (option A): stamp the instance ordinal that provideHostName's\n // factory would have produced, which this useValue would otherwise discard.\n // A host that can exist several times at once carries which one it is, the\n // way a component tag already does. A singleton does not: a number on a host\n // there is exactly one of reads as noise, and would change every log line and\n // snapshot for nothing.\n const taggedHostName = options.instanced\n ? `${hostName}#${(\n injector.get(\n COMPONENT_REGISTER as unknown as InjectionToken<ComponentRegister>,\n null,\n ) ?? ɵfallbackComponentRegister\n ).next()}`\n : hostName;\n\n const mergedTags: readonly string[] =\n nodeTags.length > 0\n ? [\n ...nodeTags.slice(0, -1),\n ...envOnlyTags,\n nodeTags[nodeTags.length - 1],\n taggedHostName,\n ]\n : [...envOnlyTags, taggedHostName];\n\n const envInjector = createEnvironmentInjector(\n [\n ɵprovideHostName(hostName),\n { provide: ɵHOST_TAG_LIST, useValue: mergedTags },\n ...extraProviders,\n ],\n injector as EnvironmentInjector,\n `HostTag(${hostName})`,\n );\n\n parentDestroyRef?.onDestroy(() => {\n if (!envInjector.destroyed) {\n envInjector.destroy();\n }\n });\n\n return envInjector;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ export declare const SERVICE_ROOT_EXPOSURE_KEY: "$self";
2
+ export declare const SERVICE_PROVIDED_INPUT_KEY: "$provided";
3
+ export declare const CRAFT_SERVICE_PROVIDER_BRAND: unique symbol;
4
+ /** Type-only brand; it is carried by Craft provider return types, not emitted. */
5
+ export declare const CRAFT_SERVICE_PROVIDER_TYPE_BRAND: unique symbol;
6
+ export type Simplify<ObjectType> = {
7
+ [Key in keyof ObjectType]: ObjectType[Key];
8
+ } & {};
9
+ export type ConcreteServiceScope = 'global' | 'toProvide' | 'manuallyProvidedAtRoot' | 'function';
10
+ export type RealCapableScope = 'toProvide' | 'manuallyProvidedAtRoot';
11
+ export type RequirementScope = 'toProvide' | 'manuallyProvidedAtRoot' | 'abstract';
12
+ export type CallableShell<Value> = Value extends (...args: infer Args) => infer Result ? (...args: Args) => Result : never;
13
+ export type RootExposureKey = typeof SERVICE_ROOT_EXPOSURE_KEY;
14
+ export type ProvidedInputKey = typeof SERVICE_PROVIDED_INPUT_KEY;
15
+ export type UnionToIntersection<Union> = (Union extends any ? (value: Union) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
16
+ export type GetUnionLast<Union> = UnionToIntersection<Union extends any ? () => Union : never> extends () => infer Last ? Last : never;
17
+ export type UnionToTuple<Union, Tuple extends unknown[] = []> = [
18
+ Union
19
+ ] extends [never] ? Tuple : UnionToTuple<Exclude<Union, GetUnionLast<Union>>, [
20
+ GetUnionLast<Union>,
21
+ ...Tuple
22
+ ]>;
23
+ export type MergeObjectUnion<Union> = [Union] extends [never] ? {} : Simplify<UnionToIntersection<Union>>;
24
+ export type DependencyTreeChildren<Node> = Node extends {
25
+ dependencies: infer Dependencies extends object;
26
+ } ? Dependencies : {};
27
+ export type DependencyNodeScope<Node> = Node extends {
28
+ providedIn: infer Scope;
29
+ } ? Scope : never;
30
+ export type FlattenDependencyTree<Tree extends object> = Simplify<MergeObjectUnion<{
31
+ [Name in Extract<keyof Tree, string>]: {
32
+ [Key in Name]: Tree[Name];
33
+ } | FlattenDependencyTree<DependencyTreeChildren<Tree[Name]>>;
34
+ }[Extract<keyof Tree, string>]>>;
35
+ //# sourceMappingURL=craft-service.shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-service.shared.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-service.shared.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,EAAG,OAAgB,CAAC;AAC1D,eAAO,MAAM,0BAA0B,EAAG,WAAoB,CAAC;AAC/D,eAAO,MAAM,4BAA4B,eAExC,CAAC;AACF,kFAAkF;AAClF,MAAM,CAAC,OAAO,CAAC,MAAM,iCAAiC,EAAE,OAAO,MAAM,CAAC;AAEtE,MAAM,MAAM,QAAQ,CAAC,UAAU,IAAI;KAChC,GAAG,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC;CAC3C,GAAG,EAAE,CAAC;AAEP,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,WAAW,GACX,wBAAwB,GACxB,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,wBAAwB,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,wBAAwB,GACxB,UAAU,CAAC;AAEf,MAAM,MAAM,aAAa,CAAC,KAAK,IAAI,KAAK,SAAS,CAC/C,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,GACzB,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,GAAG,OAAO,yBAAyB,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,OAAO,0BAA0B,CAAC;AAEjE,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI,CACvC,KAAK,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,CACnD,SAAS,CAAC,KAAK,EAAE,MAAM,YAAY,KAAK,IAAI,GACzC,YAAY,GACZ,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,CAAC,KAAK,IAC5B,mBAAmB,CACjB,KAAK,SAAS,GAAG,GAAG,MAAM,KAAK,GAAG,KAAK,CACxC,SAAS,MAAM,MAAM,IAAI,GACtB,IAAI,GACJ,KAAK,CAAC;AAEZ,MAAM,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,SAAS,OAAO,EAAE,GAAG,EAAE,IAAI;IAC9D,KAAK;CACN,SAAS,CAAC,KAAK,CAAC,GACb,KAAK,GACL,YAAY,CACV,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EACnC;IAAC,YAAY,CAAC,KAAK,CAAC;IAAE,GAAG,KAAK;CAAC,CAChC,CAAC;AAEN,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GACzD,EAAE,GACF,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzC,MAAM,MAAM,sBAAsB,CAAC,IAAI,IAAI,IAAI,SAAS;IACtD,YAAY,EAAE,MAAM,YAAY,SAAS,MAAM,CAAC;CACjD,GACG,YAAY,GACZ,EAAE,CAAC;AAEP,MAAM,MAAM,mBAAmB,CAAC,IAAI,IAAI,IAAI,SAAS;IAAE,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GAC5E,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,qBAAqB,CAAC,IAAI,SAAS,MAAM,IAAI,QAAQ,CAC/D,gBAAgB,CACd;KACG,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,GAChC;SAAG,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KAAE,GAC7B,qBAAqB,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;CAC9D,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,CAAC,CAC/B,CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const SERVICE_ROOT_EXPOSURE_KEY = '$self';
2
+ export const SERVICE_PROVIDED_INPUT_KEY = '$provided';
3
+ export const CRAFT_SERVICE_PROVIDER_BRAND = Symbol('craft-service-provider-brand');
4
+ //# sourceMappingURL=craft-service.shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-service.shared.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/craft-service.shared.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAgB,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAChD,8BAA8B,CAC/B,CAAC","sourcesContent":["export const SERVICE_ROOT_EXPOSURE_KEY = '$self' as const;\nexport const SERVICE_PROVIDED_INPUT_KEY = '$provided' as const;\nexport const CRAFT_SERVICE_PROVIDER_BRAND = Symbol(\n 'craft-service-provider-brand',\n);\n/** Type-only brand; it is carried by Craft provider return types, not emitted. */\nexport declare const CRAFT_SERVICE_PROVIDER_TYPE_BRAND: unique symbol;\n\nexport type Simplify<ObjectType> = {\n [Key in keyof ObjectType]: ObjectType[Key];\n} & {};\n\nexport type ConcreteServiceScope =\n | 'global'\n | 'toProvide'\n | 'manuallyProvidedAtRoot'\n | 'function';\n\nexport type RealCapableScope = 'toProvide' | 'manuallyProvidedAtRoot';\n\nexport type RequirementScope =\n | 'toProvide'\n | 'manuallyProvidedAtRoot'\n | 'abstract';\n\nexport type CallableShell<Value> = Value extends (\n ...args: infer Args\n) => infer Result\n ? (...args: Args) => Result\n : never;\n\nexport type RootExposureKey = typeof SERVICE_ROOT_EXPOSURE_KEY;\nexport type ProvidedInputKey = typeof SERVICE_PROVIDED_INPUT_KEY;\n\nexport type UnionToIntersection<Union> = (\n Union extends any ? (value: Union) => void : never\n) extends (value: infer Intersection) => void\n ? Intersection\n : never;\n\nexport type GetUnionLast<Union> =\n UnionToIntersection<\n Union extends any ? () => Union : never\n > extends () => infer Last\n ? Last\n : never;\n\nexport type UnionToTuple<Union, Tuple extends unknown[] = []> = [\n Union,\n] extends [never]\n ? Tuple\n : UnionToTuple<\n Exclude<Union, GetUnionLast<Union>>,\n [GetUnionLast<Union>, ...Tuple]\n >;\n\nexport type MergeObjectUnion<Union> = [Union] extends [never]\n ? {}\n : Simplify<UnionToIntersection<Union>>;\n\nexport type DependencyTreeChildren<Node> = Node extends {\n dependencies: infer Dependencies extends object;\n}\n ? Dependencies\n : {};\n\nexport type DependencyNodeScope<Node> = Node extends { providedIn: infer Scope }\n ? Scope\n : never;\n\nexport type FlattenDependencyTree<Tree extends object> = Simplify<\n MergeObjectUnion<\n {\n [Name in Extract<keyof Tree, string>]:\n | { [Key in Name]: Tree[Name] }\n | FlattenDependencyTree<DependencyTreeChildren<Tree[Name]>>;\n }[Extract<keyof Tree, string>]\n >\n>;\n"]}