@askrjs/askr 0.0.50 → 0.0.52

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 (594) hide show
  1. package/dist/bench/components/benchmark-row.d.ts +2 -2
  2. package/dist/bench/components/benchmark-row.js +0 -2
  3. package/dist/bench/components/benchmark-table.js +0 -2
  4. package/dist/benchmark.d.ts +1 -2
  5. package/dist/benchmark.js +5 -6
  6. package/dist/bin/askr-ssg.d.ts +1 -2
  7. package/dist/bin/askr-ssg.js +21 -6
  8. package/dist/boot/hydration.js +10 -11
  9. package/dist/boot/index.d.ts +1 -2
  10. package/dist/boot/index.js +21 -11
  11. package/dist/boot/root-lifecycle.d.ts +6 -3
  12. package/dist/boot/root-lifecycle.js +18 -14
  13. package/dist/boot/route-startup.js +13 -4
  14. package/dist/boot/types.d.ts +1 -2
  15. package/dist/common/attr-names.js +0 -2
  16. package/dist/common/component.d.ts +1 -2
  17. package/dist/common/control.d.ts +1 -2
  18. package/dist/common/control.js +0 -2
  19. package/dist/common/dom-range.d.ts +13 -0
  20. package/dist/common/env.js +1 -7
  21. package/dist/common/error-boundary.d.ts +15 -0
  22. package/dist/common/invariant.js +15 -0
  23. package/dist/common/jsx.d.ts +1 -2
  24. package/dist/common/jsx.js +0 -2
  25. package/dist/{dev → common}/logger.js +5 -8
  26. package/dist/common/promise.js +0 -2
  27. package/dist/common/props.d.ts +1 -2
  28. package/dist/common/render-context.js +0 -2
  29. package/dist/common/route-activity.js +0 -2
  30. package/dist/common/router-internal.js +0 -2
  31. package/dist/common/router.d.ts +1 -2
  32. package/dist/common/ssr-errors.d.ts +1 -2
  33. package/dist/common/ssr-errors.js +0 -2
  34. package/dist/common/ssr.d.ts +1 -2
  35. package/dist/common/ssr.js +0 -2
  36. package/dist/common/vnode.d.ts +1 -2
  37. package/dist/common/vnode.js +0 -2
  38. package/dist/components/error-boundary.d.ts +2 -16
  39. package/dist/components/error-boundary.js +2 -76
  40. package/dist/components/index.d.ts +2 -1
  41. package/dist/components/link.d.ts +2 -2
  42. package/dist/components/link.js +2 -2
  43. package/dist/control/case.d.ts +1 -2
  44. package/dist/control/case.js +1 -2
  45. package/dist/control/for.d.ts +3 -4
  46. package/dist/control/for.js +2 -4
  47. package/dist/control/shared.d.ts +1 -2
  48. package/dist/control/shared.js +0 -2
  49. package/dist/control/show.d.ts +1 -2
  50. package/dist/control/show.js +1 -2
  51. package/dist/data/data-runtime.d.ts +1 -2
  52. package/dist/data/data-runtime.js +3 -5
  53. package/dist/data/invalidation-listeners.js +0 -2
  54. package/dist/data/invalidation.d.ts +1 -2
  55. package/dist/data/invalidation.js +2 -4
  56. package/dist/data/mutation-cell.d.ts +1 -2
  57. package/dist/data/mutation-cell.js +7 -6
  58. package/dist/data/query-cell.d.ts +3 -2
  59. package/dist/data/query-cell.js +45 -11
  60. package/dist/data/query-key.js +0 -2
  61. package/dist/data/shared.js +3 -3
  62. package/dist/data/testing.js +2 -0
  63. package/dist/data/types.d.ts +1 -2
  64. package/dist/foundations/icon/icon.d.ts +1 -2
  65. package/dist/foundations/icon/icon.js +0 -2
  66. package/dist/foundations/icon/icon.types.d.ts +1 -2
  67. package/dist/foundations/index.d.ts +1 -1
  68. package/dist/foundations/index.js +1 -1
  69. package/dist/foundations/interactions/dismissable.d.ts +1 -2
  70. package/dist/foundations/interactions/dismissable.js +0 -2
  71. package/dist/foundations/interactions/focusable.d.ts +1 -2
  72. package/dist/foundations/interactions/focusable.js +0 -2
  73. package/dist/foundations/interactions/hoverable.d.ts +1 -2
  74. package/dist/foundations/interactions/hoverable.js +0 -2
  75. package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
  76. package/dist/foundations/interactions/interaction-policy.js +0 -2
  77. package/dist/foundations/interactions/pressable.d.ts +1 -2
  78. package/dist/foundations/interactions/pressable.js +0 -2
  79. package/dist/foundations/interactions/roving-focus.d.ts +1 -2
  80. package/dist/foundations/interactions/roving-focus.js +0 -2
  81. package/dist/foundations/state/controllable.d.ts +1 -3
  82. package/dist/foundations/state/controllable.js +1 -2
  83. package/dist/foundations/structures/collection.d.ts +1 -2
  84. package/dist/foundations/structures/collection.js +0 -2
  85. package/dist/foundations/structures/index.d.ts +1 -1
  86. package/dist/foundations/structures/index.js +2 -1
  87. package/dist/foundations/structures/layer.d.ts +1 -2
  88. package/dist/foundations/structures/layer.js +0 -2
  89. package/dist/foundations/structures/layout.d.ts +1 -2
  90. package/dist/foundations/structures/layout.js +0 -2
  91. package/dist/foundations/structures/portal.d.ts +2 -24
  92. package/dist/foundations/structures/portal.js +3 -187
  93. package/dist/foundations/structures/presence.d.ts +1 -2
  94. package/dist/foundations/structures/presence.js +0 -2
  95. package/dist/foundations/structures/slot.d.ts +1 -2
  96. package/dist/foundations/structures/slot.js +0 -2
  97. package/dist/foundations/utilities/aria.d.ts +1 -2
  98. package/dist/foundations/utilities/aria.js +0 -2
  99. package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
  100. package/dist/foundations/utilities/compose-handlers.js +0 -2
  101. package/dist/foundations/utilities/compose-ref.d.ts +1 -2
  102. package/dist/foundations/utilities/compose-ref.js +0 -2
  103. package/dist/foundations/utilities/event-types.d.ts +1 -2
  104. package/dist/foundations/utilities/merge-props.d.ts +1 -2
  105. package/dist/foundations/utilities/merge-props.js +0 -2
  106. package/dist/foundations/utilities/use-id.d.ts +1 -2
  107. package/dist/foundations/utilities/use-id.js +0 -2
  108. package/dist/fx/fx.d.ts +1 -2
  109. package/dist/fx/fx.js +2 -4
  110. package/dist/fx/index.js +1 -0
  111. package/dist/fx/noop.js +0 -2
  112. package/dist/fx/timing.d.ts +1 -2
  113. package/dist/fx/timing.js +0 -2
  114. package/dist/index.d.ts +4 -4
  115. package/dist/index.js +4 -6
  116. package/dist/jsx/types.d.ts +1 -2
  117. package/dist/jsx/utils.d.ts +1 -2
  118. package/dist/jsx/utils.js +0 -2
  119. package/dist/jsx-dev-runtime.d.ts +16 -2
  120. package/dist/jsx-dev-runtime.js +4 -12
  121. package/dist/jsx-runtime.d.ts +16 -2
  122. package/dist/jsx-runtime.js +16 -24
  123. package/dist/jsx-runtime2.d.ts +1 -1
  124. package/dist/renderer/attributes.js +29 -6
  125. package/dist/renderer/boundaries.js +50 -174
  126. package/dist/renderer/boundary-materialization.js +72 -0
  127. package/dist/renderer/boundary-range-adoption.js +76 -0
  128. package/dist/renderer/boundary-range-sync.js +101 -0
  129. package/dist/renderer/boundary-state.js +50 -0
  130. package/dist/renderer/child-shape.js +2 -4
  131. package/dist/renderer/children-fastpath.js +149 -0
  132. package/dist/renderer/children.js +3 -140
  133. package/dist/renderer/cleanup.js +72 -15
  134. package/dist/renderer/component-host-cleanup.js +124 -49
  135. package/dist/renderer/component-host-instances.js +60 -9
  136. package/dist/renderer/component-host-replacement.js +105 -0
  137. package/dist/renderer/component-host-results.js +138 -0
  138. package/dist/renderer/component-host.js +95 -170
  139. package/dist/renderer/dom-host.js +0 -2
  140. package/dist/renderer/dom-internal.js +115 -57
  141. package/dist/renderer/dom-range.js +161 -0
  142. package/dist/renderer/dom.js +7 -5
  143. package/dist/renderer/element-children.js +112 -32
  144. package/dist/renderer/error-boundary-dom.js +70 -13
  145. package/dist/renderer/evaluate-dom-range.js +3 -4
  146. package/dist/renderer/evaluate-reconcile.js +18 -42
  147. package/dist/renderer/evaluate.js +14 -3
  148. package/dist/renderer/fastpath.js +7 -14
  149. package/dist/renderer/for-commit-dom-map.js +6 -18
  150. package/dist/renderer/for-commit-removal.js +8 -17
  151. package/dist/renderer/for-commit-reorder.js +2 -4
  152. package/dist/renderer/for-commit.js +173 -45
  153. package/dist/renderer/hydration-boundaries.js +60 -0
  154. package/dist/renderer/hydration-listener-transaction.js +49 -0
  155. package/dist/renderer/index.js +11 -8
  156. package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
  157. package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
  158. package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
  159. package/dist/renderer/intrinsic-blueprint.js +30 -0
  160. package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
  161. package/dist/renderer/keyed-children.js +3 -9
  162. package/dist/renderer/keyed.js +10 -10
  163. package/dist/renderer/namespaces.js +0 -2
  164. package/dist/renderer/prop-bindings.js +59 -24
  165. package/dist/renderer/reactive-child-dom.js +10 -4
  166. package/dist/renderer/reactive-child-sources.js +0 -2
  167. package/dist/renderer/reactive-children.js +33 -24
  168. package/dist/renderer/reconcile-commit.js +0 -2
  169. package/dist/renderer/reconcile-fastpaths.js +6 -12
  170. package/dist/renderer/reconcile-resolution.js +32 -56
  171. package/dist/renderer/reconcile.js +0 -2
  172. package/dist/renderer/retained-element-rollback.js +161 -149
  173. package/dist/renderer/stable-patch.js +5 -7
  174. package/dist/renderer/static-reuse.js +0 -2
  175. package/dist/renderer/utils.js +20 -10
  176. package/dist/resources/index.js +1 -2
  177. package/dist/router/access.js +0 -2
  178. package/dist/router/activity.d.ts +1 -2
  179. package/dist/router/activity.js +20 -24
  180. package/dist/router/authoring.d.ts +1 -2
  181. package/dist/router/authoring.js +1 -3
  182. package/dist/router/index.d.ts +1 -1
  183. package/dist/router/internal-types.d.ts +1 -2
  184. package/dist/router/lazy.d.ts +1 -2
  185. package/dist/router/lazy.js +0 -2
  186. package/dist/router/manifest.d.ts +1 -2
  187. package/dist/router/manifest.js +0 -2
  188. package/dist/router/match.js +0 -2
  189. package/dist/router/navigate.d.ts +1 -2
  190. package/dist/router/navigate.js +5 -8
  191. package/dist/router/navigation-registry.d.ts +1 -2
  192. package/dist/router/navigation-registry.js +1 -3
  193. package/dist/router/navigation-scroll.d.ts +1 -2
  194. package/dist/router/navigation-scroll.js +0 -2
  195. package/dist/router/navigation-targets.d.ts +3 -4
  196. package/dist/router/navigation-targets.js +425 -44
  197. package/dist/router/policy.d.ts +1 -2
  198. package/dist/router/policy.js +0 -2
  199. package/dist/router/rendering.d.ts +1 -2
  200. package/dist/router/rendering.js +5 -3
  201. package/dist/router/resolution.d.ts +2 -16
  202. package/dist/router/resolution.js +6 -175
  203. package/dist/router/route-context.js +0 -2
  204. package/dist/router/route-matching.d.ts +19 -0
  205. package/dist/router/route-matching.js +173 -0
  206. package/dist/router/route-query.d.ts +1 -2
  207. package/dist/router/route-query.js +1 -3
  208. package/dist/router/route.js +4 -2
  209. package/dist/router/store.d.ts +1 -2
  210. package/dist/router/store.js +0 -2
  211. package/dist/router/testing.js +4 -0
  212. package/dist/runtime/access.d.ts +19 -0
  213. package/dist/runtime/access.js +0 -2
  214. package/dist/runtime/child-scope.d.ts +21 -2
  215. package/dist/runtime/child-scope.js +101 -54
  216. package/dist/runtime/component-cleanup.d.ts +1 -2
  217. package/dist/runtime/component-cleanup.js +3 -5
  218. package/dist/runtime/component-commit.js +26 -24
  219. package/dist/runtime/component-facade.js +5 -3
  220. package/dist/runtime/component-internal.d.ts +12 -7
  221. package/dist/runtime/component-internal.js +64 -46
  222. package/dist/runtime/component-lifecycle.d.ts +2 -41
  223. package/dist/runtime/component-lifecycle.js +6 -149
  224. package/dist/runtime/component-scope.d.ts +4 -5
  225. package/dist/runtime/component-scope.js +27 -8
  226. package/dist/runtime/component.js +4 -3
  227. package/dist/runtime/context.d.ts +5 -2
  228. package/dist/runtime/context.js +29 -3
  229. package/dist/runtime/control.d.ts +22 -3
  230. package/dist/runtime/control.js +168 -55
  231. package/dist/runtime/derive.d.ts +1 -2
  232. package/dist/runtime/derive.js +0 -2
  233. package/dist/runtime/dev-namespace.d.ts +30 -0
  234. package/dist/runtime/dev-namespace.js +32 -25
  235. package/dist/runtime/effect.d.ts +8 -5
  236. package/dist/runtime/effect.js +158 -75
  237. package/dist/runtime/error-boundary.d.ts +4 -0
  238. package/dist/runtime/error-boundary.js +29 -0
  239. package/dist/runtime/events.d.ts +58 -0
  240. package/dist/runtime/events.js +67 -70
  241. package/dist/runtime/execution-model.d.ts +6 -0
  242. package/dist/runtime/execution-model.js +0 -2
  243. package/dist/runtime/fastlane.d.ts +33 -0
  244. package/dist/runtime/fastlane.js +0 -2
  245. package/dist/runtime/for-bench.d.ts +1 -2
  246. package/dist/runtime/for-bench.js +9 -167
  247. package/dist/runtime/for-internal.d.ts +73 -10
  248. package/dist/runtime/for-internal.js +201 -14
  249. package/dist/runtime/for-reconcile.d.ts +1 -2
  250. package/dist/runtime/for-reconcile.js +76 -23
  251. package/dist/runtime/for-scopes.d.ts +5 -5
  252. package/dist/runtime/for-scopes.js +168 -48
  253. package/dist/runtime/for-signals.d.ts +14 -5
  254. package/dist/runtime/for-signals.js +157 -83
  255. package/dist/runtime/for-types.d.ts +8 -0
  256. package/dist/runtime/for.d.ts +2 -2
  257. package/dist/runtime/for.js +3 -3
  258. package/dist/runtime/index.d.ts +24 -0
  259. package/dist/runtime/index.js +33 -0
  260. package/dist/runtime/lifecycle-batch.d.ts +59 -0
  261. package/dist/runtime/lifecycle-batch.js +178 -0
  262. package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
  263. package/dist/runtime/lifecycle-operation-settlement.js +51 -0
  264. package/dist/runtime/lifecycle-operations.d.ts +1 -2
  265. package/dist/runtime/lifecycle-operations.js +5 -6
  266. package/dist/runtime/perf-metrics.d.ts +27 -0
  267. package/dist/runtime/perf-metrics.js +4 -68
  268. package/dist/runtime/portal.d.ts +21 -0
  269. package/dist/runtime/portal.js +305 -0
  270. package/dist/runtime/readable.d.ts +9 -4
  271. package/dist/runtime/readable.js +41 -17
  272. package/dist/runtime/resource-cell.js +3 -5
  273. package/dist/runtime/resource-operation.d.ts +1 -2
  274. package/dist/runtime/resource-operation.js +38 -35
  275. package/dist/runtime/runtime.d.ts +2 -3
  276. package/dist/runtime/runtime.js +0 -2
  277. package/dist/runtime/scheduler.d.ts +1 -2
  278. package/dist/runtime/scheduler.js +10 -13
  279. package/dist/runtime/selector-store.js +22 -0
  280. package/dist/runtime/selector.d.ts +1 -2
  281. package/dist/runtime/selector.js +6 -29
  282. package/dist/runtime/snapshot-source.d.ts +1 -2
  283. package/dist/runtime/snapshot-source.js +0 -2
  284. package/dist/runtime/state.d.ts +1 -2
  285. package/dist/runtime/state.js +1 -3
  286. package/dist/ssg/batch-render.js +0 -2
  287. package/dist/ssg/create-static-gen.d.ts +4 -2
  288. package/dist/ssg/create-static-gen.js +66 -14
  289. package/dist/ssg/generate-metadata.js +0 -2
  290. package/dist/ssg/generation-plan.js +0 -2
  291. package/dist/ssg/incremental-manifest.js +1 -3
  292. package/dist/ssg/resolve-ssg-data.js +0 -2
  293. package/dist/ssg/route-utils.js +0 -2
  294. package/dist/ssg/static-routes.js +1 -2
  295. package/dist/ssg/types.d.ts +2 -3
  296. package/dist/ssg/write-static-files.js +16 -12
  297. package/dist/ssr/attrs.js +0 -2
  298. package/dist/ssr/boundaries.js +17 -6
  299. package/dist/ssr/component-runtime.js +4 -30
  300. package/dist/ssr/context.d.ts +1 -2
  301. package/dist/ssr/context.js +0 -2
  302. package/dist/ssr/errors.d.ts +1 -2
  303. package/dist/ssr/errors.js +0 -2
  304. package/dist/ssr/escape.js +0 -2
  305. package/dist/ssr/hydration-data.js +0 -2
  306. package/dist/ssr/hydration-verify.d.ts +1 -2
  307. package/dist/ssr/hydration-verify.js +34 -7
  308. package/dist/ssr/index-internal.d.ts +1 -2
  309. package/dist/ssr/index-internal.js +0 -2
  310. package/dist/ssr/render-keys.js +0 -2
  311. package/dist/ssr/render-resolved.d.ts +1 -2
  312. package/dist/ssr/render-resolved.js +1 -3
  313. package/dist/ssr/render-sync.d.ts +1 -2
  314. package/dist/ssr/render-sync.js +28 -20
  315. package/dist/ssr/route-policy-resolution.js +2 -3
  316. package/dist/ssr/route-render.d.ts +1 -2
  317. package/dist/ssr/route-render.js +2 -3
  318. package/dist/ssr/sink.d.ts +1 -2
  319. package/dist/ssr/sink.js +0 -2
  320. package/dist/ssr/types.d.ts +1 -2
  321. package/dist/ssr/verify-hydration.js +0 -2
  322. package/dist/testing/index.d.ts +1 -2
  323. package/dist/testing/index.js +3 -4
  324. package/package.json +60 -47
  325. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  326. package/dist/bench/components/benchmark-row.js.map +0 -1
  327. package/dist/bench/components/benchmark-table.js.map +0 -1
  328. package/dist/benchmark.d.ts.map +0 -1
  329. package/dist/benchmark.js.map +0 -1
  330. package/dist/bin/askr-ssg.d.ts.map +0 -1
  331. package/dist/bin/askr-ssg.js.map +0 -1
  332. package/dist/boot/hydration.js.map +0 -1
  333. package/dist/boot/index.d.ts.map +0 -1
  334. package/dist/boot/index.js.map +0 -1
  335. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  336. package/dist/boot/root-lifecycle.js.map +0 -1
  337. package/dist/boot/route-startup.js.map +0 -1
  338. package/dist/boot/types.d.ts.map +0 -1
  339. package/dist/common/attr-names.js.map +0 -1
  340. package/dist/common/component.d.ts.map +0 -1
  341. package/dist/common/control.d.ts.map +0 -1
  342. package/dist/common/control.js.map +0 -1
  343. package/dist/common/env.js.map +0 -1
  344. package/dist/common/jsx.d.ts.map +0 -1
  345. package/dist/common/jsx.js.map +0 -1
  346. package/dist/common/promise.js.map +0 -1
  347. package/dist/common/props.d.ts.map +0 -1
  348. package/dist/common/render-context.js.map +0 -1
  349. package/dist/common/route-activity.js.map +0 -1
  350. package/dist/common/router-internal.js.map +0 -1
  351. package/dist/common/router.d.ts.map +0 -1
  352. package/dist/common/ssr-errors.d.ts.map +0 -1
  353. package/dist/common/ssr-errors.js.map +0 -1
  354. package/dist/common/ssr.d.ts.map +0 -1
  355. package/dist/common/ssr.js.map +0 -1
  356. package/dist/common/vnode.d.ts.map +0 -1
  357. package/dist/common/vnode.js.map +0 -1
  358. package/dist/components/error-boundary.d.ts.map +0 -1
  359. package/dist/components/error-boundary.js.map +0 -1
  360. package/dist/components/link.d.ts.map +0 -1
  361. package/dist/components/link.js.map +0 -1
  362. package/dist/control/case.d.ts.map +0 -1
  363. package/dist/control/case.js.map +0 -1
  364. package/dist/control/for.d.ts.map +0 -1
  365. package/dist/control/for.js.map +0 -1
  366. package/dist/control/shared.d.ts.map +0 -1
  367. package/dist/control/shared.js.map +0 -1
  368. package/dist/control/show.d.ts.map +0 -1
  369. package/dist/control/show.js.map +0 -1
  370. package/dist/data/data-runtime.d.ts.map +0 -1
  371. package/dist/data/data-runtime.js.map +0 -1
  372. package/dist/data/invalidation-listeners.js.map +0 -1
  373. package/dist/data/invalidation.d.ts.map +0 -1
  374. package/dist/data/invalidation.js.map +0 -1
  375. package/dist/data/mutation-cell.d.ts.map +0 -1
  376. package/dist/data/mutation-cell.js.map +0 -1
  377. package/dist/data/query-cell.d.ts.map +0 -1
  378. package/dist/data/query-cell.js.map +0 -1
  379. package/dist/data/query-key.js.map +0 -1
  380. package/dist/data/shared.js.map +0 -1
  381. package/dist/data/types.d.ts.map +0 -1
  382. package/dist/dev/invariant.js +0 -29
  383. package/dist/dev/invariant.js.map +0 -1
  384. package/dist/dev/logger.js.map +0 -1
  385. package/dist/foundations/icon/icon.d.ts.map +0 -1
  386. package/dist/foundations/icon/icon.js.map +0 -1
  387. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  388. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  389. package/dist/foundations/interactions/dismissable.js.map +0 -1
  390. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  391. package/dist/foundations/interactions/focusable.js.map +0 -1
  392. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  393. package/dist/foundations/interactions/hoverable.js.map +0 -1
  394. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  395. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  396. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  397. package/dist/foundations/interactions/pressable.js.map +0 -1
  398. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  399. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  400. package/dist/foundations/state/controllable.d.ts.map +0 -1
  401. package/dist/foundations/state/controllable.js.map +0 -1
  402. package/dist/foundations/structures/collection.d.ts.map +0 -1
  403. package/dist/foundations/structures/collection.js.map +0 -1
  404. package/dist/foundations/structures/layer.d.ts.map +0 -1
  405. package/dist/foundations/structures/layer.js.map +0 -1
  406. package/dist/foundations/structures/layout.d.ts.map +0 -1
  407. package/dist/foundations/structures/layout.js.map +0 -1
  408. package/dist/foundations/structures/portal.d.ts.map +0 -1
  409. package/dist/foundations/structures/portal.js.map +0 -1
  410. package/dist/foundations/structures/presence.d.ts.map +0 -1
  411. package/dist/foundations/structures/presence.js.map +0 -1
  412. package/dist/foundations/structures/slot.d.ts.map +0 -1
  413. package/dist/foundations/structures/slot.js.map +0 -1
  414. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  415. package/dist/foundations/utilities/aria.js.map +0 -1
  416. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  417. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  418. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  419. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  420. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  421. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  422. package/dist/foundations/utilities/merge-props.js.map +0 -1
  423. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  424. package/dist/foundations/utilities/use-id.js.map +0 -1
  425. package/dist/fx/fx.d.ts.map +0 -1
  426. package/dist/fx/fx.js.map +0 -1
  427. package/dist/fx/noop.js.map +0 -1
  428. package/dist/fx/timing.d.ts.map +0 -1
  429. package/dist/fx/timing.js.map +0 -1
  430. package/dist/index.js.map +0 -1
  431. package/dist/jsx/types.d.ts.map +0 -1
  432. package/dist/jsx/utils.d.ts.map +0 -1
  433. package/dist/jsx/utils.js.map +0 -1
  434. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  435. package/dist/jsx-dev-runtime.js.map +0 -1
  436. package/dist/jsx-runtime.d.ts.map +0 -1
  437. package/dist/jsx-runtime.js.map +0 -1
  438. package/dist/renderer/attributes.js.map +0 -1
  439. package/dist/renderer/boundaries.js.map +0 -1
  440. package/dist/renderer/child-shape.js.map +0 -1
  441. package/dist/renderer/children.js.map +0 -1
  442. package/dist/renderer/cleanup.js.map +0 -1
  443. package/dist/renderer/component-host-cleanup.js.map +0 -1
  444. package/dist/renderer/component-host-instances.js.map +0 -1
  445. package/dist/renderer/component-host.js.map +0 -1
  446. package/dist/renderer/dom-host.js.map +0 -1
  447. package/dist/renderer/dom-internal.js.map +0 -1
  448. package/dist/renderer/element-children.js.map +0 -1
  449. package/dist/renderer/error-boundary-dom.js.map +0 -1
  450. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  451. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  452. package/dist/renderer/evaluate.js.map +0 -1
  453. package/dist/renderer/fastpath.js.map +0 -1
  454. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  455. package/dist/renderer/for-commit-removal.js.map +0 -1
  456. package/dist/renderer/for-commit-reorder.js.map +0 -1
  457. package/dist/renderer/for-commit.js.map +0 -1
  458. package/dist/renderer/index.js.map +0 -1
  459. package/dist/renderer/keyed-children.js.map +0 -1
  460. package/dist/renderer/keyed.js.map +0 -1
  461. package/dist/renderer/namespaces.js.map +0 -1
  462. package/dist/renderer/prop-bindings.js.map +0 -1
  463. package/dist/renderer/reactive-child-dom.js.map +0 -1
  464. package/dist/renderer/reactive-child-sources.js.map +0 -1
  465. package/dist/renderer/reactive-children.js.map +0 -1
  466. package/dist/renderer/reconcile-commit.js.map +0 -1
  467. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  468. package/dist/renderer/reconcile-resolution.js.map +0 -1
  469. package/dist/renderer/reconcile.js.map +0 -1
  470. package/dist/renderer/retained-element-rollback.js.map +0 -1
  471. package/dist/renderer/stable-patch.js.map +0 -1
  472. package/dist/renderer/static-reuse.js.map +0 -1
  473. package/dist/renderer/utils.js.map +0 -1
  474. package/dist/router/access.js.map +0 -1
  475. package/dist/router/activity.d.ts.map +0 -1
  476. package/dist/router/activity.js.map +0 -1
  477. package/dist/router/authoring.d.ts.map +0 -1
  478. package/dist/router/authoring.js.map +0 -1
  479. package/dist/router/internal-types.d.ts.map +0 -1
  480. package/dist/router/lazy.d.ts.map +0 -1
  481. package/dist/router/lazy.js.map +0 -1
  482. package/dist/router/manifest.d.ts.map +0 -1
  483. package/dist/router/manifest.js.map +0 -1
  484. package/dist/router/match.js.map +0 -1
  485. package/dist/router/navigate.d.ts.map +0 -1
  486. package/dist/router/navigate.js.map +0 -1
  487. package/dist/router/navigation-registry.d.ts.map +0 -1
  488. package/dist/router/navigation-registry.js.map +0 -1
  489. package/dist/router/navigation-scroll.d.ts.map +0 -1
  490. package/dist/router/navigation-scroll.js.map +0 -1
  491. package/dist/router/navigation-targets.d.ts.map +0 -1
  492. package/dist/router/navigation-targets.js.map +0 -1
  493. package/dist/router/policy.d.ts.map +0 -1
  494. package/dist/router/policy.js.map +0 -1
  495. package/dist/router/rendering.d.ts.map +0 -1
  496. package/dist/router/rendering.js.map +0 -1
  497. package/dist/router/resolution.d.ts.map +0 -1
  498. package/dist/router/resolution.js.map +0 -1
  499. package/dist/router/route-context.js.map +0 -1
  500. package/dist/router/route-query.d.ts.map +0 -1
  501. package/dist/router/route-query.js.map +0 -1
  502. package/dist/router/store.d.ts.map +0 -1
  503. package/dist/router/store.js.map +0 -1
  504. package/dist/runtime/access.js.map +0 -1
  505. package/dist/runtime/child-scope.d.ts.map +0 -1
  506. package/dist/runtime/child-scope.js.map +0 -1
  507. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  508. package/dist/runtime/component-cleanup.js.map +0 -1
  509. package/dist/runtime/component-commit.js.map +0 -1
  510. package/dist/runtime/component-contracts.js +0 -5
  511. package/dist/runtime/component-internal.d.ts.map +0 -1
  512. package/dist/runtime/component-internal.js.map +0 -1
  513. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  514. package/dist/runtime/component-lifecycle.js.map +0 -1
  515. package/dist/runtime/component-scope.d.ts.map +0 -1
  516. package/dist/runtime/component-scope.js.map +0 -1
  517. package/dist/runtime/context.d.ts.map +0 -1
  518. package/dist/runtime/context.js.map +0 -1
  519. package/dist/runtime/control.d.ts.map +0 -1
  520. package/dist/runtime/control.js.map +0 -1
  521. package/dist/runtime/derive.d.ts.map +0 -1
  522. package/dist/runtime/derive.js.map +0 -1
  523. package/dist/runtime/dev-namespace.js.map +0 -1
  524. package/dist/runtime/effect.d.ts.map +0 -1
  525. package/dist/runtime/effect.js.map +0 -1
  526. package/dist/runtime/events.js.map +0 -1
  527. package/dist/runtime/execution-model.js.map +0 -1
  528. package/dist/runtime/fastlane.js.map +0 -1
  529. package/dist/runtime/for-bench.d.ts.map +0 -1
  530. package/dist/runtime/for-bench.js.map +0 -1
  531. package/dist/runtime/for-internal.d.ts.map +0 -1
  532. package/dist/runtime/for-internal.js.map +0 -1
  533. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  534. package/dist/runtime/for-reconcile.js.map +0 -1
  535. package/dist/runtime/for-scopes.d.ts.map +0 -1
  536. package/dist/runtime/for-scopes.js.map +0 -1
  537. package/dist/runtime/for-signals.d.ts.map +0 -1
  538. package/dist/runtime/for-signals.js.map +0 -1
  539. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  540. package/dist/runtime/lifecycle-operations.js.map +0 -1
  541. package/dist/runtime/perf-metrics.js.map +0 -1
  542. package/dist/runtime/readable.d.ts.map +0 -1
  543. package/dist/runtime/readable.js.map +0 -1
  544. package/dist/runtime/resource-cell.js.map +0 -1
  545. package/dist/runtime/resource-operation.d.ts.map +0 -1
  546. package/dist/runtime/resource-operation.js.map +0 -1
  547. package/dist/runtime/runtime.d.ts.map +0 -1
  548. package/dist/runtime/runtime.js.map +0 -1
  549. package/dist/runtime/scheduler.d.ts.map +0 -1
  550. package/dist/runtime/scheduler.js.map +0 -1
  551. package/dist/runtime/selector.d.ts.map +0 -1
  552. package/dist/runtime/selector.js.map +0 -1
  553. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  554. package/dist/runtime/snapshot-source.js.map +0 -1
  555. package/dist/runtime/state.d.ts.map +0 -1
  556. package/dist/runtime/state.js.map +0 -1
  557. package/dist/ssg/batch-render.js.map +0 -1
  558. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  559. package/dist/ssg/create-static-gen.js.map +0 -1
  560. package/dist/ssg/generate-metadata.js.map +0 -1
  561. package/dist/ssg/generation-plan.js.map +0 -1
  562. package/dist/ssg/incremental-manifest.js.map +0 -1
  563. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  564. package/dist/ssg/route-utils.js.map +0 -1
  565. package/dist/ssg/static-routes.js.map +0 -1
  566. package/dist/ssg/types.d.ts.map +0 -1
  567. package/dist/ssg/write-static-files.js.map +0 -1
  568. package/dist/ssr/attrs.js.map +0 -1
  569. package/dist/ssr/boundaries.js.map +0 -1
  570. package/dist/ssr/component-runtime.js.map +0 -1
  571. package/dist/ssr/context.d.ts.map +0 -1
  572. package/dist/ssr/context.js.map +0 -1
  573. package/dist/ssr/errors.d.ts.map +0 -1
  574. package/dist/ssr/errors.js.map +0 -1
  575. package/dist/ssr/escape.js.map +0 -1
  576. package/dist/ssr/hydration-data.js.map +0 -1
  577. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  578. package/dist/ssr/hydration-verify.js.map +0 -1
  579. package/dist/ssr/index-internal.d.ts.map +0 -1
  580. package/dist/ssr/index-internal.js.map +0 -1
  581. package/dist/ssr/render-keys.js.map +0 -1
  582. package/dist/ssr/render-resolved.d.ts.map +0 -1
  583. package/dist/ssr/render-resolved.js.map +0 -1
  584. package/dist/ssr/render-sync.d.ts.map +0 -1
  585. package/dist/ssr/render-sync.js.map +0 -1
  586. package/dist/ssr/route-policy-resolution.js.map +0 -1
  587. package/dist/ssr/route-render.d.ts.map +0 -1
  588. package/dist/ssr/route-render.js.map +0 -1
  589. package/dist/ssr/sink.d.ts.map +0 -1
  590. package/dist/ssr/sink.js.map +0 -1
  591. package/dist/ssr/types.d.ts.map +0 -1
  592. package/dist/ssr/verify-hydration.js.map +0 -1
  593. package/dist/testing/index.d.ts.map +0 -1
  594. package/dist/testing/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-runtime.js","names":[],"sources":["../../src/ssr/component-runtime.ts"],"sourcesContent":["/**\n * SSR component execution and temporary owner lifecycle.\n */\n\nimport type { JSXElement } from '../common/jsx';\nimport type { Props } from '../common/props';\nimport type { ComponentFunction } from '../common/component';\nimport { isPromiseLike } from '../common/promise';\nimport { Fragment, ELEMENT_TYPE } from '../jsx';\nimport { DefaultPortal } from '../foundations/structures/portal';\nimport { disposeDefaultPortalScope } from '../foundations/structures/portal';\nimport {\n cleanupComponent,\n createComponentInstance,\n getCurrentComponentInstance,\n setCurrentComponentInstance,\n} from '../runtime/component';\nimport { throwSSRDataMissing, type RenderContext } from './context';\nimport type { SSRComponent, VNode } from './types';\n\nexport type Component = SSRComponent;\n\nconst __ssrGuardStack: Array<{ random: () => number; now: () => number }> = [];\n\nfunction pushSSRStrictPurityGuard() {\n /* istanbul ignore if - dev-only guard */\n if (process.env.NODE_ENV === 'production') return;\n __ssrGuardStack.push({\n random: Reflect.get(Math, 'random') as () => number,\n now: Reflect.get(Date, 'now') as () => number,\n });\n Reflect.set(Math, 'random', () => {\n throw new Error(\n 'SSR Strict Purity: Math.random is not allowed during synchronous SSR. Use the provided `ssr` context RNG instead.'\n );\n });\n Reflect.set(Date, 'now', () => {\n throw new Error(\n 'SSR Strict Purity: Date.now is not allowed during synchronous SSR. Pass timestamps explicitly or use deterministic helpers.'\n );\n });\n}\n\nfunction popSSRStrictPurityGuard() {\n /* istanbul ignore if - dev-only guard */\n if (process.env.NODE_ENV === 'production') return;\n const prev = __ssrGuardStack.pop();\n if (prev) {\n Reflect.set(Math, 'random', prev.random);\n Reflect.set(Date, 'now', prev.now);\n }\n}\n\nexport function executeComponentSync(\n component: Component,\n props: Record<string, unknown> | undefined,\n ctx: RenderContext\n): VNode | JSXElement {\n try {\n if (process.env.NODE_ENV !== 'production') {\n pushSSRStrictPurityGuard();\n }\n const prev = getCurrentComponentInstance();\n const temp = createComponentInstance(\n 'ssr-temp',\n component as ComponentFunction,\n (props || {}) as Props,\n null\n );\n temp.ssr = true;\n temp.portalScope = temp;\n ctx.ssrCleanupFns.push(() => {\n let cleanupError: unknown = null;\n\n try {\n cleanupComponent(temp);\n } catch (error) {\n cleanupError = error;\n }\n\n try {\n disposeDefaultPortalScope(temp);\n } catch (error) {\n if (cleanupError) {\n throw new AggregateError(\n [cleanupError, error],\n 'SSR temporary owner cleanup failed'\n );\n }\n throw error;\n }\n\n if (cleanupError) {\n throw cleanupError;\n }\n });\n setCurrentComponentInstance(temp);\n try {\n const result = component((props || {}) as Props, { ssr: ctx });\n if (isPromiseLike(result)) {\n throwSSRDataMissing();\n }\n if (\n typeof result === 'string' ||\n typeof result === 'number' ||\n typeof result === 'boolean' ||\n result === null ||\n result === undefined\n ) {\n const inner =\n result === null || result === undefined || result === false\n ? ''\n : String(result);\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children: inner ? [inner] : [] },\n } as unknown as VNode | JSXElement;\n }\n return result as VNode | JSXElement;\n } finally {\n setCurrentComponentInstance(prev);\n }\n } finally {\n if (process.env.NODE_ENV !== 'production') popSSRStrictPurityGuard();\n }\n}\n\nexport function disposeSSRTemporaryOwners(ctx: RenderContext): void {\n const cleanupFns = ctx.ssrCleanupFns;\n ctx.ssrCleanupFns = [];\n const cleanupErrors: unknown[] = [];\n\n for (let index = cleanupFns.length - 1; index >= 0; index -= 1) {\n try {\n cleanupFns[index]();\n } catch (error) {\n cleanupErrors.push(error);\n }\n }\n\n if (cleanupErrors.length === 1) {\n throw cleanupErrors[0];\n }\n\n if (cleanupErrors.length > 1) {\n throw new AggregateError(\n cleanupErrors,\n 'SSR temporary owner cleanup failed'\n );\n }\n}\n\nfunction wrapWithDefaultPortal(out: unknown): VNode | JSXElement {\n if (isPromiseLike(out)) {\n throwSSRDataMissing();\n }\n\n const portalVNode = {\n $$typeof: ELEMENT_TYPE,\n type: DefaultPortal,\n props: {},\n key: '__default_portal',\n } as unknown;\n\n if (out == null) {\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children: [portalVNode] },\n } as unknown as VNode | JSXElement;\n }\n\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children: [out as unknown, portalVNode] },\n } as unknown as VNode | JSXElement;\n}\n\nexport function renderSyncComponentRoot(\n component: Component,\n props: Record<string, unknown> | undefined,\n ctx: RenderContext\n): VNode | JSXElement {\n const wrapped: Component = (\n p?: Record<string, unknown>,\n c?: { signal?: AbortSignal; ssr?: RenderContext }\n ) => wrapWithDefaultPortal(component(p ?? {}, c));\n\n return executeComponentSync(wrapped, props || {}, ctx);\n}\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,kBAAsE,CAAC;AAE7E,SAAS,2BAA2B;CAGlC,gBAAgB,KAAK;EACnB,QAAQ,QAAQ,IAAI,MAAM,QAAQ;EAClC,KAAK,QAAQ,IAAI,MAAM,KAAK;CAC9B,CAAC;CACD,QAAQ,IAAI,MAAM,gBAAgB;EAChC,MAAM,IAAI,MACR,mHACF;CACF,CAAC;CACD,QAAQ,IAAI,MAAM,aAAa;EAC7B,MAAM,IAAI,MACR,6HACF;CACF,CAAC;AACH;AAEA,SAAS,0BAA0B;CAGjC,MAAM,OAAO,gBAAgB,IAAI;CACjC,IAAI,MAAM;EACR,QAAQ,IAAI,MAAM,UAAU,KAAK,MAAM;EACvC,QAAQ,IAAI,MAAM,OAAO,KAAK,GAAG;CACnC;AACF;AAEA,SAAgB,qBACd,WACA,OACA,KACoB;CACpB,IAAI;EAEA,yBAAyB;EAE3B,MAAM,OAAO,4BAA4B;EACzC,MAAM,OAAO,wBACX,YACA,WACC,SAAS,CAAC,GACX,IACF;EACA,KAAK,MAAM;EACX,KAAK,cAAc;EACnB,IAAI,cAAc,WAAW;GAC3B,IAAI,eAAwB;GAE5B,IAAI;IACF,iBAAiB,IAAI;GACvB,SAAS,OAAO;IACd,eAAe;GACjB;GAEA,IAAI;IACF,0BAA0B,IAAI;GAChC,SAAS,OAAO;IACd,IAAI,cACF,MAAM,IAAI,eACR,CAAC,cAAc,KAAK,GACpB,oCACF;IAEF,MAAM;GACR;GAEA,IAAI,cACF,MAAM;EAEV,CAAC;EACD,4BAA4B,IAAI;EAChC,IAAI;GACF,MAAM,SAAS,UAAW,SAAS,CAAC,GAAa,EAAE,KAAK,IAAI,CAAC;GAC7D,IAAI,cAAc,MAAM,GACtB,oBAAoB;GAEtB,IACE,OAAO,WAAW,YAClB,OAAO,WAAW,YAClB,OAAO,WAAW,aAClB,WAAW,QACX,WAAW,QACX;IACA,MAAM,QACJ,WAAW,QAAQ,WAAW,UAAa,WAAW,QAClD,KACA,OAAO,MAAM;IACnB,OAAO;KACL,UAAU;KACV,MAAM;KACN,OAAO,EAAE,UAAU,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE;IAC1C;GACF;GACA,OAAO;EACT,UAAU;GACR,4BAA4B,IAAI;EAClC;CACF,UAAU;EACmC,wBAAwB;CACrE;AACF;AAEA,SAAgB,0BAA0B,KAA0B;CAClE,MAAM,aAAa,IAAI;CACvB,IAAI,gBAAgB,CAAC;CACrB,MAAM,gBAA2B,CAAC;CAElC,KAAK,IAAI,QAAQ,WAAW,SAAS,GAAG,SAAS,GAAG,SAAS,GAC3D,IAAI;EACF,WAAW,MAAM,CAAC;CACpB,SAAS,OAAO;EACd,cAAc,KAAK,KAAK;CAC1B;CAGF,IAAI,cAAc,WAAW,GAC3B,MAAM,cAAc;CAGtB,IAAI,cAAc,SAAS,GACzB,MAAM,IAAI,eACR,eACA,oCACF;AAEJ;AAEA,SAAS,sBAAsB,KAAkC;CAC/D,IAAI,cAAc,GAAG,GACnB,oBAAoB;CAGtB,MAAM,cAAc;EAClB,UAAU;EACV,MAAM;EACN,OAAO,CAAC;EACR,KAAK;CACP;CAEA,IAAI,OAAO,MACT,OAAO;EACL,UAAU;EACV,MAAM;EACN,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE;CACnC;CAGF,OAAO;EACL,UAAU;EACV,MAAM;EACN,OAAO,EAAE,UAAU,CAAC,KAAgB,WAAW,EAAE;CACnD;AACF;AAEA,SAAgB,wBACd,WACA,OACA,KACoB;CACpB,MAAM,WACJ,GACA,MACG,sBAAsB,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC;CAEhD,OAAO,qBAAqB,SAAS,SAAS,CAAC,GAAG,GAAG;AACvD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/ssr/context.ts"],"mappings":";;;;UAqBiB,aAAA;EACf,GAAA;EACA,IAAA;EACA,IAAA,GAAO,OAAA;EACP,MAAA,GAAS,MAAA;EACT,MAAA,YAAkB,KAAA;EAClB,SAAA,GAAY,gBAAA;EACZ,MAAA,GAAS,WAAA;EACT,WAAA;EACA,UAAA,GAAa,GAAA;EACb,aAAA,EAAe,KAAA;EAEf,UAAA;EACA,UAAA,EAAY,MAAA;AAAA;AAAA,KAIF,UAAA,GAAa,aAAa;AAAA,iBAoDtB,mBAAA,CACd,IAAA,WACA,IAAA;EACE,GAAA;EACA,IAAA,GAAO,OAAA;EACP,MAAA,GAAS,MAAA;EACT,MAAA,YAAkB,KAAA;EAClB,SAAA,GAAY,gBAAA;EACZ,MAAA,GAAS,WAAA;EACT,WAAA;AAAA,IAED,aAAA;;;;;iBAuBa,iBAAA,IAAqB,GAAA,EAAK,aAAA,EAAe,EAAA,QAAU,CAAA,GAAI,CAAA;AA1FnD;AAIpB;;;AAJoB,iBAiHJ,gBAAA,IAAoB,aAAa;AAAA,cAapC,aAAA,SAAa,gBAAmB;AAAA,cAChC,cAAA,SAAc,iBAAoB;AAAA,cAClC,oBAAA,SAAoB,gBAAmB;AAAA,iBAEpC,iBAAA,IAAqB,GAAA,EAAK,aAAA,EAAe,EAAA,QAAU,CAAA,GAAI,CAAA;;;;;iBASvD,mBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../src/ssr/context.ts"],"sourcesContent":["/**\n * SSR Context Management\n *\n * Provides render-context storage for server-side rendering.\n * Node SSR lazily installs AsyncLocalStorage on first use; browser builds use\n * the fallback stack.\n */\n\nimport { SSRDataMissingError } from './errors';\nimport { clearEscapeCache } from './escape';\nimport { isPromiseLike } from '../common/promise';\nimport { configureRenderContextProvider } from '../common/render-context';\n\nexport type { SSRData } from '../common/ssr';\nimport type { SSRData } from '../common/ssr';\nimport type { Route, RouteAuthOptions } from '../common/router';\n\nconst FALLBACK_ASYNC_CONTEXT_ERROR =\n '[Askr] async SSR render context fallback is unsupported in this environment. Use synchronous SSR rendering or a runtime with AsyncLocalStorage.';\n\n// Unified per-render context combining SSRContext and RenderContext\nexport interface RenderContext {\n url: string;\n seed: number;\n data?: SSRData;\n params?: Record<string, string>;\n routes?: readonly Route[];\n routeAuth?: RouteAuthOptions;\n signal?: AbortSignal;\n dataRuntime?: unknown;\n queryCache?: Map<string, unknown>;\n ssrCleanupFns: Array<() => void>;\n // Per-render key state (moved from render-keys.ts globals)\n keyCounter: number;\n renderData: Record<string, unknown> | null;\n}\n\n// Legacy alias for compatibility\nexport type SSRContext = RenderContext;\n\ntype RenderContextAccessor = {\n getStore(): RenderContext | undefined;\n run<R>(store: RenderContext, fn: () => R): R;\n};\n\ntype AsyncHooksModule = {\n AsyncLocalStorage?: new () => RenderContextAccessor;\n};\n\nlet renderContextAccessor: RenderContextAccessor | null = null;\nlet renderContextAccessorInitialized = false;\n\n// Fallback stack for non-Node environments\nlet fallbackStack: RenderContext | null = null;\n\nfunction ensureRenderContextAccessor(): void {\n if (renderContextAccessorInitialized) {\n return;\n }\n\n renderContextAccessorInitialized = true;\n\n if (typeof process === 'undefined' || !process.versions?.node) {\n return;\n }\n\n try {\n // Hide the Node builtin from browser dependency scanners.\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const loadAsyncHooks = new Function(\n 'return require(' + JSON.stringify('async_hooks') + ');'\n ) as () => AsyncHooksModule;\n const asyncHooks = loadAsyncHooks();\n\n if (asyncHooks.AsyncLocalStorage) {\n const asyncLocalStorage = new asyncHooks.AsyncLocalStorage();\n renderContextAccessor = {\n getStore() {\n return asyncLocalStorage.getStore();\n },\n run<R>(store: RenderContext, fn: () => R): R {\n return asyncLocalStorage.run(store, fn);\n },\n };\n }\n } catch {\n // Keep the fallback stack when async_hooks is unavailable.\n }\n}\n\nexport function createRenderContext(\n seed = 12345,\n opts: {\n url?: string;\n data?: SSRData;\n params?: Record<string, string>;\n routes?: readonly Route[];\n routeAuth?: RouteAuthOptions;\n signal?: AbortSignal;\n dataRuntime?: unknown;\n } = {}\n): RenderContext {\n clearEscapeCache();\n\n return {\n url: opts.url ?? '',\n seed,\n data: opts.data,\n params: opts.params,\n routes: opts.routes,\n routeAuth: opts.routeAuth,\n signal: opts.signal,\n dataRuntime: opts.dataRuntime,\n queryCache: new Map<string, unknown>(),\n ssrCleanupFns: [],\n keyCounter: 0,\n renderData: null,\n };\n}\n\n/**\n * Run a function with the given render context.\n * Concurrency-safe in Node.js via AsyncLocalStorage.\n */\nexport function withRenderContext<T>(ctx: RenderContext, fn: () => T): T {\n ensureRenderContextAccessor();\n if (renderContextAccessor) {\n return renderContextAccessor.run(ctx, fn);\n }\n // Fallback: stack-based (not concurrency-safe)\n const prev = fallbackStack;\n fallbackStack = ctx;\n try {\n const result = fn();\n if (isPromiseLike(result)) {\n throw new Error(FALLBACK_ASYNC_CONTEXT_ERROR);\n }\n return result;\n } finally {\n fallbackStack = prev;\n }\n}\n\n/**\n * Get the current render context.\n * Returns null if not inside a render.\n */\nexport function getRenderContext(): RenderContext | null {\n ensureRenderContextAccessor();\n if (renderContextAccessor) {\n return renderContextAccessor.getStore() ?? null;\n }\n return fallbackStack;\n}\n\nconfigureRenderContextProvider({\n getRenderContext,\n});\n\n// Legacy API aliases (deprecated, for backwards compatibility)\nexport const getSSRContext = getRenderContext;\nexport const withSSRContext = withRenderContext;\nexport const getCurrentSSRContext = getRenderContext;\n\nexport function runWithSSRContext<T>(ctx: RenderContext, fn: () => T): T {\n // This was a separate path for sync detection; now unified\n return withRenderContext(ctx, fn);\n}\n\n/**\n * Centralized SSR enforcement helper — throws a consistent error when async\n * data is encountered during synchronous SSR.\n */\nexport function throwSSRDataMissing(): never {\n throw new SSRDataMissingError();\n}\n\nexport { SSRDataMissingError };\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAM,+BACJ;AA+BF,IAAI,wBAAsD;AAC1D,IAAI,mCAAmC;AAGvC,IAAI,gBAAsC;AAE1C,SAAS,8BAAoC;CAC3C,IAAI,kCACF;CAGF,mCAAmC;CAEnC,IAAI,OAAO,YAAY,eAAe,CAAC,QAAQ,UAAU,MACvD;CAGF,IAAI;EAMF,MAAM,aAAa,IAHQ,SACzB,oBAAoB,KAAK,UAAU,aAAa,IAAI,IAEnC,CAAA,CAAe;EAElC,IAAI,WAAW,mBAAmB;GAChC,MAAM,oBAAoB,IAAI,WAAW,kBAAkB;GAC3D,wBAAwB;IACtB,WAAW;KACT,OAAO,kBAAkB,SAAS;IACpC;IACA,IAAO,OAAsB,IAAgB;KAC3C,OAAO,kBAAkB,IAAI,OAAO,EAAE;IACxC;GACF;EACF;CACF,QAAQ,CAER;AACF;AAEA,SAAgB,oBACd,OAAO,OACP,OAQI,CAAC,GACU;CACf,iBAAiB;CAEjB,OAAO;EACL,KAAK,KAAK,OAAO;EACjB;EACA,MAAM,KAAK;EACX,QAAQ,KAAK;EACb,QAAQ,KAAK;EACb,WAAW,KAAK;EAChB,QAAQ,KAAK;EACb,aAAa,KAAK;EAClB,4BAAY,IAAI,IAAqB;EACrC,eAAe,CAAC;EAChB,YAAY;EACZ,YAAY;CACd;AACF;;;;;AAMA,SAAgB,kBAAqB,KAAoB,IAAgB;CACvE,4BAA4B;CAC5B,IAAI,uBACF,OAAO,sBAAsB,IAAI,KAAK,EAAE;CAG1C,MAAM,OAAO;CACb,gBAAgB;CAChB,IAAI;EACF,MAAM,SAAS,GAAG;EAClB,IAAI,cAAc,MAAM,GACtB,MAAM,IAAI,MAAM,4BAA4B;EAE9C,OAAO;CACT,UAAU;EACR,gBAAgB;CAClB;AACF;;;;;AAMA,SAAgB,mBAAyC;CACvD,4BAA4B;CAC5B,IAAI,uBACF,OAAO,sBAAsB,SAAS,KAAK;CAE7C,OAAO;AACT;AAEA,+BAA+B,EAC7B,iBACF,CAAC;;;;;AAgBD,SAAgB,sBAA6B;CAC3C,MAAM,IAAI,oBAAoB;AAChC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","names":[],"sources":["../../src/ssr/errors.ts"],"mappings":";;;cAEa,iBAAA,SAA0B,KAAK;EAAA,SACjC,IAAA;cACG,OAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../../src/ssr/errors.ts"],"sourcesContent":["export { SSRDataMissingError } from '../common/ssr-errors';\n\nexport class SSRInvariantError extends Error {\n readonly code = 'SSR_INVARIANT_VIOLATION';\n constructor(message: string) {\n super(message);\n this.name = 'SSRInvariantError';\n Object.setPrototypeOf(this, SSRInvariantError.prototype);\n }\n}\n"],"mappings":";;AAEA,IAAa,oBAAb,MAAa,0BAA0B,MAAM;CAE3C,YAAY,SAAiB;EAC3B,MAAM,OAAO;cAFC;EAGd,KAAK,OAAO;EACZ,OAAO,eAAe,MAAM,kBAAkB,SAAS;CACzD;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape.js","names":[],"sources":["../../src/ssr/escape.ts"],"sourcesContent":["/**\n * HTML escaping utilities for SSR\n *\n * Centralizes text and attribute escaping to avoid duplication\n * between sync and streaming SSR renderers.\n */\n\n// HTML5 void elements that don't have closing tags\nexport const VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\n// Escape cache for common values (bounded and clearable for long-running servers)\nconst escapeCache = new Map<string, string>();\nconst MAX_CACHE_SIZE = 256;\n\nconst _TEXT_ESCAPE_RE = /[&<>]/g;\n\nconst CSS_UNSAFE_RE = /[{}<>\\\\]/g;\nconst CSS_URI_SCHEME_RE = /(?:^|[\\s(,])([a-z][a-z0-9+.-]*):/i;\nconst CSS_FUNCTION_NAME_RE = /([a-z-][a-z0-9-]*)\\s*\\(/gi;\n\nconst CSS_ALLOWED_FUNCTIONS = new Set([\n 'var',\n 'calc',\n 'min',\n 'max',\n 'clamp',\n 'rgb',\n 'rgba',\n 'hsl',\n 'hsla',\n 'lab',\n 'lch',\n 'oklab',\n 'oklch',\n 'color',\n 'color-mix',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'skew',\n 'skewx',\n 'skewy',\n 'matrix',\n 'matrix3d',\n 'linear-gradient',\n 'radial-gradient',\n 'conic-gradient',\n 'repeating-linear-gradient',\n 'repeating-radial-gradient',\n 'repeating-conic-gradient',\n 'cubic-bezier',\n 'steps',\n]);\n\nconst STYLE_PROP_CACHE = new Map<string, string>();\nconst MAX_STYLE_PROP_CACHE_SIZE = 512;\n\n// Pre-compute escape map functions for faster replacement\nconst _textEscapeMap = (ch: string): string => {\n const code = ch.charCodeAt(0);\n if (code === 38) return '&amp;'; // &\n if (code === 60) return '&lt;'; // <\n if (code === 62) return '&gt;'; // >\n return ch;\n};\n\nfunction toKebabCached(prop: string): string {\n const cached = STYLE_PROP_CACHE.get(prop);\n if (cached !== undefined) return cached;\n const kebab = prop.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n if (STYLE_PROP_CACHE.size < MAX_STYLE_PROP_CACHE_SIZE) {\n STYLE_PROP_CACHE.set(prop, kebab);\n }\n return kebab;\n}\n\n/**\n * Clear the escape cache. Call between SSR requests in long-running servers\n * to prevent memory buildup from unique strings.\n */\nexport function clearEscapeCache(): void {\n escapeCache.clear();\n}\n\n/**\n * Fast check if a string needs text escaping.\n * Used to skip the full escape call when not needed.\n */\nexport function needsEscapeText(text: string): boolean {\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (ch === 38 || ch === 60 || ch === 62) return true;\n }\n return false;\n}\n\n/**\n * Fast check if a string needs attribute escaping.\n * Checks for & \" ' < > characters.\n */\nexport function needsEscapeAttr(value: string): boolean {\n for (let i = 0; i < value.length; i++) {\n const ch = value.charCodeAt(i);\n // & \" ' < >\n if (ch === 38 || ch === 34 || ch === 39 || ch === 60 || ch === 62) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Escape HTML special characters in text content\n * Fast-path: cache first, then scan-then-escape for new strings\n */\nexport function escapeText(text: string): string {\n // Only use cache for short strings (likely to be repeated)\n const useCache = text.length <= 64;\n\n if (useCache) {\n const cached = escapeCache.get(text);\n if (cached !== undefined) return cached;\n }\n\n // Fast path: check if escaping needed\n if (!needsEscapeText(text)) {\n if (useCache && escapeCache.size < MAX_CACHE_SIZE) {\n escapeCache.set(text, text);\n }\n return text;\n }\n\n // Single-pass scan-and-build: avoids 3 separate regex passes\n let escaped = '';\n let lastIndex = 0;\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n let entity: string;\n if (ch === 38) entity = '&amp;';\n else if (ch === 60) entity = '&lt;';\n else if (ch === 62) entity = '&gt;';\n else continue;\n escaped += text.slice(lastIndex, i) + entity;\n lastIndex = i + 1;\n }\n const result = escaped + text.slice(lastIndex);\n\n if (useCache && escapeCache.size < MAX_CACHE_SIZE) {\n escapeCache.set(text, result);\n }\n return result;\n}\n\n/**\n * Escape HTML special characters in attribute values.\n * Single-pass scan: returns the original string unchanged when no special\n * characters are found, so callers can drop separate needsEscapeAttr checks.\n */\nexport function escapeAttr(value: string): string {\n let escaped = '';\n let lastIndex = 0;\n for (let i = 0; i < value.length; i++) {\n const ch = value.charCodeAt(i);\n let entity: string;\n if (ch === 38) entity = '&amp;';\n else if (ch === 34) entity = '&quot;';\n else if (ch === 39) entity = '&#x27;';\n else if (ch === 60) entity = '&lt;';\n else if (ch === 62) entity = '&gt;';\n else continue;\n escaped += value.slice(lastIndex, i) + entity;\n lastIndex = i + 1;\n }\n // Return original reference when nothing needed escaping (no allocation)\n return lastIndex === 0 ? value : escaped + value.slice(lastIndex);\n}\n\n/**\n * Escape CSS value to prevent injection attacks.\n * Removes characters that could break out of CSS context.\n */\nfunction escapeCssValue(value: string): string {\n const str = String(value);\n\n if (CSS_URI_SCHEME_RE.test(str)) {\n return '';\n }\n\n if (str.includes('(')) {\n for (const match of str.matchAll(CSS_FUNCTION_NAME_RE)) {\n if (!CSS_ALLOWED_FUNCTIONS.has(match[1].toLowerCase())) {\n return '';\n }\n }\n }\n\n // Remove characters that could break out of CSS value context\n return str.replace(CSS_UNSAFE_RE, '');\n}\n\n/**\n * Convert style object to CSS string with value escaping\n * Optimized to avoid Object.entries allocation\n */\nexport function styleObjToCss(value: unknown): string | null {\n if (!value || typeof value !== 'object') return null;\n\n const styleObj = value as Record<string, unknown>;\n let result = '';\n\n for (const k in styleObj) {\n const v = styleObj[k];\n if (v === null || v === undefined || v === false) continue;\n\n const prop = toKebabCached(k);\n const safeValue = escapeCssValue(String(v));\n if (safeValue) {\n result += `${prop}:${safeValue};`;\n }\n }\n\n return result || null;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydration-data.js","names":[],"sources":["../../src/ssr/hydration-data.ts"],"sourcesContent":["import { SSR_RENDER_DATA_ATTR } from '../common/ssr';\nimport type { SSRData } from './context';\n\nexport function serializeHydrationRenderData(\n data: SSRData | undefined\n): string {\n if (!data || Object.keys(data).length === 0) {\n return '';\n }\n\n return `<script type=\"application/json\" ${SSR_RENDER_DATA_ATTR}=\"true\">${JSON.stringify(\n data\n )\n .replace(/</g, '\\\\u003C')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')}</script>`;\n}\n"],"mappings":";;AAGA,SAAgB,6BACd,MACQ;CACR,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GACxC,OAAO;CAGT,OAAO,mCAAmC,qBAAqB,UAAU,KAAK,UAC5E,IACF,CAAC,CACE,QAAQ,MAAM,SAAS,CAAC,CACxB,QAAQ,WAAW,SAAS,CAAC,CAC7B,QAAQ,WAAW,SAAS,EAAE;AACnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydration-verify.d.ts","names":[],"sources":["../../src/ssr/hydration-verify.ts"],"mappings":";;;KAoBK,WAAA;EACH,OAAA,EAAS,SAAS;EAClB,WAAA;AAAA;AAAA,iBAkSO,oBAAA,CACP,KAAA,WACA,KAAA,EAAO,WAAA,EACP,GAAA,EAAK,aAAa;AAAA,cAOP,iBAAA;+BAEZ,oBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydration-verify.js","names":[],"sources":["../../src/ssr/hydration-verify.ts"],"sourcesContent":["import { getPublicAttributeName } from '../common/attr-names';\nimport { __CONTROL_BOUNDARY__ } from '../common/control';\nimport type { JSXElement } from '../common/jsx';\nimport type { Props } from '../common/props';\nimport { __ERROR_BOUNDARY__ } from '../common/vnode';\nimport { Fragment } from '../jsx';\nimport {\n createErrorBoundaryReset,\n evaluateControlBoundaryChildren,\n getErrorBoundaryState,\n getRenderableChildren,\n normalizeRenderableChildren,\n resolveErrorBoundaryFallbackNode,\n} from './boundaries';\nimport { executeComponentSync, type Component } from './component-runtime';\nimport type { RenderContext } from './context';\nimport { VOID_ELEMENTS, styleObjToCss } from './escape';\nimport { inheritRenderableKey } from './render-sync';\nimport type { VNode } from './types';\n\ntype VerifyState = {\n current: ChildNode | null;\n pendingText: string;\n};\n\nfunction isSSRAttrEventHandler(key: string): boolean {\n return (\n key.length >= 3 &&\n key.charCodeAt(0) === 111 &&\n key.charCodeAt(1) === 110 &&\n key.charCodeAt(2) >= 65 &&\n key.charCodeAt(2) <= 90\n );\n}\n\nfunction flushPendingText(state: VerifyState): boolean {\n if (state.pendingText.length === 0) {\n return true;\n }\n if (!state.current || state.current.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n if (state.current.textContent !== state.pendingText) {\n return false;\n }\n state.current = state.current.nextSibling;\n state.pendingText = '';\n return true;\n}\n\nfunction verifyRenderedAttrs(\n element: Element,\n props: Props | undefined\n): { matched: boolean; dangerousHtml?: string } {\n const matchedAttrs = new Set<string>();\n let dangerousHtml: string | undefined;\n\n if (!props || typeof props !== 'object') {\n return {\n matched: element.attributes.length === 0,\n dangerousHtml,\n };\n }\n\n const propsObj = props as Record<string, unknown>;\n for (const key in propsObj) {\n const value = propsObj[key];\n\n if (\n key === 'children' ||\n key === 'key' ||\n key === 'ref' ||\n key === 'dangerouslySetInnerHTML'\n ) {\n if (\n key === 'dangerouslySetInnerHTML' &&\n value &&\n typeof value === 'object' &&\n '__html' in value\n ) {\n dangerousHtml = String((value as { __html: unknown }).__html);\n }\n continue;\n }\n\n if (isSSRAttrEventHandler(key) || key.charCodeAt(0) === 95) {\n continue;\n }\n\n const attrName = key === 'class' ? 'class' : getPublicAttributeName(key);\n\n if (attrName === 'style') {\n const css = typeof value === 'string' ? value : styleObjToCss(value);\n if (!css) continue;\n if (element.getAttribute('style') !== css) {\n return { matched: false };\n }\n matchedAttrs.add('style');\n continue;\n }\n\n if (value === true) {\n if (!element.hasAttribute(attrName)) {\n return { matched: false };\n }\n matchedAttrs.add(attrName);\n continue;\n }\n\n if (value === false || value === null || value === undefined) {\n continue;\n }\n\n const stringValue = String(value);\n if (element.getAttribute(attrName) !== stringValue) {\n return { matched: false };\n }\n matchedAttrs.add(attrName);\n }\n\n if (element.attributes.length !== matchedAttrs.size) {\n return { matched: false };\n }\n\n return { matched: true, dangerousHtml };\n}\n\nfunction verifyExpectedNode(\n node: unknown,\n state: VerifyState,\n ctx: RenderContext\n): boolean {\n if (node === null || node === undefined || node === false) {\n return true;\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n state.pendingText += String(node);\n return true;\n }\n\n if (Array.isArray(node)) {\n return verifyExpectedChildren(node, state, ctx);\n }\n\n if (!node || typeof node !== 'object' || !('type' in node)) {\n return true;\n }\n\n const vnode = node as VNode | JSXElement;\n const { type, props } = vnode;\n\n if (typeof type === 'function') {\n return verifyRenderableNode(\n inheritRenderableKey(\n vnode,\n executeComponentSync(type as Component, props, ctx)\n ),\n state,\n ctx\n );\n }\n\n if (typeof type === 'symbol') {\n if (type === __CONTROL_BOUNDARY__) {\n const children = evaluateControlBoundaryChildren(vnode);\n if (!children || children.length === 0) {\n return true;\n }\n for (let index = 0; index < children.length; index += 1) {\n if (!verifyExpectedNode(children[index], state, ctx)) {\n return false;\n }\n }\n return true;\n }\n if (type === __ERROR_BOUNDARY__) {\n const boundaryState = getErrorBoundaryState(vnode);\n const fallback = props?.fallback;\n const reset = createErrorBoundaryReset(vnode);\n\n const snapshot: VerifyState = {\n current: state.current,\n pendingText: state.pendingText,\n };\n\n if (boundaryState?.error != null) {\n const fallbackNode = resolveErrorBoundaryFallbackNode(\n fallback,\n boundaryState.error,\n reset\n );\n return verifyRenderableNode(fallbackNode, state, ctx);\n }\n\n try {\n if (\n verifyExpectedChildren(\n normalizeRenderableChildren(props?.children),\n state,\n ctx\n )\n ) {\n return true;\n }\n } catch (error) {\n if (boundaryState) {\n boundaryState.error = error;\n boundaryState.notified = true;\n }\n }\n\n state.current = snapshot.current;\n state.pendingText = snapshot.pendingText;\n\n const fallbackNode = resolveErrorBoundaryFallbackNode(\n fallback,\n boundaryState?.error ?? new Error('ErrorBoundary render failed'),\n reset\n );\n return verifyRenderableNode(fallbackNode, state, ctx);\n }\n if (type !== Fragment) {\n throw new Error(\n `verifyHydrationSyncForUrl: unsupported VNode symbol type: ${String(type)}`\n );\n }\n const children = getRenderableChildren(vnode);\n if (!children || children.length === 0) {\n return true;\n }\n for (let index = 0; index < children.length; index += 1) {\n if (!verifyExpectedNode(children[index], state, ctx)) {\n return false;\n }\n }\n return true;\n }\n\n if (!flushPendingText(state)) {\n return false;\n }\n\n if (!state.current || state.current.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n const actualElement = state.current as Element;\n if (actualElement.tagName.toLowerCase() !== String(type).toLowerCase()) {\n return false;\n }\n\n const attrMatch = verifyRenderedAttrs(actualElement, props);\n if (!attrMatch.matched) {\n return false;\n }\n\n if (VOID_ELEMENTS.has(String(type))) {\n if (actualElement.firstChild !== null) {\n return false;\n }\n state.current = actualElement.nextSibling;\n return true;\n }\n\n if (attrMatch.dangerousHtml !== undefined) {\n if (actualElement.innerHTML !== attrMatch.dangerousHtml) {\n return false;\n }\n state.current = actualElement.nextSibling;\n return true;\n }\n\n const childState: VerifyState = {\n current: actualElement.firstChild,\n pendingText: '',\n };\n const children = getRenderableChildren(vnode);\n if (children && children.length > 0) {\n for (let index = 0; index < children.length; index += 1) {\n if (!verifyExpectedNode(children[index], childState, ctx)) {\n return false;\n }\n }\n }\n\n if (!flushPendingText(childState) || childState.current !== null) {\n return false;\n }\n\n state.current = actualElement.nextSibling;\n return true;\n}\n\nfunction verifyExpectedChildren(\n children: unknown[] | undefined,\n state: VerifyState,\n ctx: RenderContext\n): boolean {\n if (!children || children.length === 0) {\n return true;\n }\n\n for (let index = 0; index < children.length; index += 1) {\n if (!verifyExpectedNode(children[index], state, ctx)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction verifyRenderableNode(\n value: unknown,\n state: VerifyState,\n ctx: RenderContext\n): boolean {\n return Array.isArray(value)\n ? verifyExpectedChildren(normalizeRenderableChildren(value), state, ctx)\n : verifyExpectedNode(value, state, ctx);\n}\n\nexport const hydrationVerifier = {\n verifyRenderableNode,\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-internal.d.ts","names":[],"sources":["../../src/ssr/index-internal.ts"],"mappings":";;;;;;;;;iBA4BgB,cAAA,CACd,SAAA,GACE,KAAA,GAAQ,MAAA,sBACL,KAAA,GAAQ,UAAA;AAAA,iBAEC,cAAA,CAAe,IAAwB,EAAlB,kBAAkB;AAAA,iBAavC,cAAA,CAAe,IAAwB,EAAlB,kBAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-internal.js","names":[],"sources":["../../src/ssr/index-internal.ts"],"sourcesContent":["import type { JSXElement } from '../common/jsx';\nimport {\n renderRouteToStream,\n renderRouteToString,\n resolveRequest,\n type RouteRenderHost,\n type RouteRenderOptions,\n type RouteStreamOptions,\n} from './route-render';\nimport { renderSSRRouteAppToSink, renderToStringSync } from './render-sync';\nimport type { VNode } from './types';\nimport './hydration-verify';\n\nexport { SSRDataMissingError } from './context';\nexport type {\n DocumentRenderArgs,\n DocumentRenderContext,\n DocumentRenderer,\n} from '../common/ssr';\nexport type { SSRRoute } from './route-render';\nexport type { VNode, SSRComponent } from './types';\nexport { renderResolvedToStringSync } from './render-resolved';\nexport { renderToStringSync, resolveRequest };\n\nconst routeRenderHost: RouteRenderHost = {\n renderAppToSink: renderSSRRouteAppToSink,\n};\n\nexport function renderToString(\n component: (\n props?: Record<string, unknown>\n ) => VNode | JSXElement | string | number | null\n): string;\nexport function renderToString(opts: RouteRenderOptions): string;\nexport function renderToString(arg: unknown): string {\n if (typeof arg === 'function') {\n return renderToStringSync(\n arg as (\n props?: Record<string, unknown>\n ) => VNode | JSXElement | string | number | null\n );\n }\n const opts = arg as RouteRenderOptions;\n return renderRouteToString(opts, routeRenderHost);\n}\n\nexport function renderToStream(opts: RouteStreamOptions): void {\n renderRouteToStream(opts, routeRenderHost);\n}\n"],"mappings":";;;;;;;AAwBA,MAAM,kBAAmC,EACvC,iBAAiB,wBACnB;AAQA,SAAgB,eAAe,KAAsB;CACnD,IAAI,OAAO,QAAQ,YACjB,OAAO,mBACL,GAGF;CAGF,OAAO,oBAAoB,KAAM,eAAe;AAClD;AAEA,SAAgB,eAAe,MAAgC;CAC7D,oBAAoB,MAAM,eAAe;AAC3C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-keys.js","names":["getCommonCurrentRenderData"],"sources":["../../src/ssr/render-keys.ts"],"sourcesContent":["/**\n * SSR Data Management\n *\n * Manages render-phase keying for deterministic SSR data lookup.\n * All state is stored in the per-render context for concurrency safety.\n */\n\nimport type { SSRRoute } from './index';\nimport {\n getCurrentRenderData as getCommonCurrentRenderData,\n getNextRenderKey,\n resetRenderKeyCounter,\n startHydrationRenderPhase as startCommonHydrationRenderPhase,\n startRenderPhase as startCommonRenderPhase,\n stopHydrationRenderPhase as stopCommonHydrationRenderPhase,\n stopRenderPhase as stopCommonRenderPhase,\n} from '../common/render-context';\n\nexport type ResourceDescriptor = {\n key: string;\n fn: (opts: { signal?: AbortSignal }) => Promise<unknown> | unknown;\n deps: unknown[];\n index: number;\n};\n\nexport type ResourcePlan = {\n resources: ResourceDescriptor[]; // declarative manifest in stable order\n};\n\nexport function getCurrentRenderData(): Record<string, unknown> | null {\n return getCommonCurrentRenderData();\n}\n\nexport function resetKeyCounter() {\n resetRenderKeyCounter();\n}\n\nexport function getNextKey(): string {\n return getNextRenderKey();\n}\n\nexport function startHydrationRenderPhase(data: Record<string, unknown>) {\n startCommonHydrationRenderPhase(data);\n}\n\nexport function stopHydrationRenderPhase() {\n stopCommonHydrationRenderPhase();\n}\n\nexport function startRenderPhase(data: Record<string, unknown> | null) {\n startCommonRenderPhase(data);\n}\n\nexport function stopRenderPhase() {\n stopCommonRenderPhase();\n}\n\n// --- Deprecated APIs (throw descriptive errors) ---\n\nconst PREPASS_REMOVED_MSG =\n 'SSR collection/prepass is removed: SSR is strictly synchronous';\n\n/** @deprecated SSR prepass has been removed */\nexport function startCollection(): never {\n throw new Error(`${PREPASS_REMOVED_MSG}; do not call startCollection()`);\n}\n\n/** @deprecated SSR prepass has been removed */\nexport function stopCollection(): ResourcePlan {\n throw new Error(`${PREPASS_REMOVED_MSG}; do not call stopCollection()`);\n}\n\n/** @deprecated SSR prepass has been removed */\nexport function registerResourceIntent(\n _fn: ResourceDescriptor['fn'],\n _deps: unknown[]\n): string {\n throw new Error(\n `${PREPASS_REMOVED_MSG}; resource() no longer registers intents for prepass`\n );\n}\n\n/** @deprecated SSR prepass has been removed */\nexport async function resolvePlan(\n _plan: ResourcePlan\n): Promise<Record<string, unknown>> {\n throw new Error(\n `${PREPASS_REMOVED_MSG}; async resource plans are not supported`\n );\n}\n\n/** @deprecated SSR prepass has been removed */\nexport function collectResources(_opts: {\n url: string;\n routes: SSRRoute[];\n}): ResourcePlan {\n throw new Error(`${PREPASS_REMOVED_MSG}; collectResources is disabled`);\n}\n\n/** @deprecated Alias for resolvePlan */\nexport const resolveResources = resolvePlan;\n"],"mappings":";AAiDA,SAAgB,iBAAiB,MAAsC;CACrE,mBAAuB,IAAI;AAC7B;AAEA,SAAgB,kBAAkB;CAChC,kBAAsB;AACxB;AAIA,MAAM,sBACJ;;AAuBF,eAAsB,YACpB,OACkC;CAClC,MAAM,IAAI,MACR,GAAG,oBAAoB,yCACzB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-resolved.d.ts","names":[],"sources":["../../src/ssr/render-resolved.ts"],"mappings":";;;iBA4BgB,0BAAA,CAA2B,IAAA;EACzC,GAAA;EACA,MAAA,EAAQ,aAAA;IACN,IAAA;IACA,OAAA,EAAS,YAAA;IACT,SAAA;EAAA;EAEF,OAAA,EAAS,YAAA;EACT,MAAA,GAAS,MAAA;EACT,OAAA;IAAY,IAAA;IAAe,IAAA,GAAO,OAAA;EAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-resolved.js","names":["RouteModule.resolveRouteFromRoutes"],"sources":["../../src/ssr/render-resolved.ts"],"sourcesContent":["import type { RouteHandler } from '../common/router';\nimport * as RouteModule from '../router/route';\nimport type { SSRData } from './context';\nimport { renderToString, type SSRRoute } from './index';\n\nfunction sameRouteParams(\n left: Record<string, string> | undefined,\n right: Record<string, string> | undefined\n): boolean {\n if (!left || !right) {\n return !left && !right;\n }\n\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n for (const key of leftKeys) {\n if (left[key] !== right[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function renderResolvedToStringSync(opts: {\n url: string;\n routes: ReadonlyArray<{\n path: string;\n handler: RouteHandler;\n namespace?: string;\n }>;\n handler: RouteHandler;\n params?: Record<string, string>;\n options?: { seed?: number; data?: SSRData };\n}): string {\n const { url, routes, handler, params, options } = opts;\n const requestUrl = new URL(url, 'http://localhost');\n\n const matchedIndex = routes.findIndex((route) => {\n const resolved = RouteModule.resolveRouteFromRoutes(requestUrl.pathname, [\n route,\n ]);\n\n return (\n resolved !== null &&\n resolved.handler === route.handler &&\n sameRouteParams(resolved.params, params)\n );\n });\n\n if (matchedIndex < 0) {\n throw new Error(\n `renderResolvedToStringSync: no route found for url: ${url}`\n );\n }\n\n const effectiveRoutes = routes.map((route, index) =>\n index === matchedIndex ? { ...route, handler } : route\n );\n\n return renderToString({\n url,\n routes: effectiveRoutes as SSRRoute[],\n seed: options?.seed,\n data: options?.data,\n });\n}\n"],"mappings":";;;;;AAKA,SAAS,gBACP,MACA,OACS;CACT,IAAI,CAAC,QAAQ,CAAC,OACZ,OAAO,CAAC,QAAQ,CAAC;CAGnB,MAAM,WAAW,OAAO,KAAK,IAAI;CACjC,MAAM,YAAY,OAAO,KAAK,KAAK;CACnC,IAAI,SAAS,WAAW,UAAU,QAChC,OAAO;CAGT,KAAK,MAAM,OAAO,UAChB,IAAI,KAAK,SAAS,MAAM,MACtB,OAAO;CAIX,OAAO;AACT;AAEA,SAAgB,2BAA2B,MAUhC;CACT,MAAM,EAAE,KAAK,QAAQ,SAAS,QAAQ,YAAY;CAClD,MAAM,aAAa,IAAI,IAAI,KAAK,kBAAkB;CAElD,MAAM,eAAe,OAAO,WAAW,UAAU;EAC/C,MAAM,WAAWA,uBAAmC,WAAW,UAAU,CACvE,KACF,CAAC;EAED,OACE,aAAa,QACb,SAAS,YAAY,MAAM,WAC3B,gBAAgB,SAAS,QAAQ,MAAM;CAE3C,CAAC;CAED,IAAI,eAAe,GACjB,MAAM,IAAI,MACR,uDAAuD,KACzD;CAOF,OAAO,eAAe;EACpB;EACA,QANsB,OAAO,KAAK,OAAO,UACzC,UAAU,eAAe;GAAE,GAAG;GAAO;EAAQ,IAAI,KAKzC;EACR,MAAM,SAAS;EACf,MAAM,SAAS;CACjB,CAAC;AACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-sync.d.ts","names":[],"sources":["../../src/ssr/render-sync.ts"],"mappings":";;;;;;;iBAsCgB,oBAAA,CACd,MAAA,EAAQ,KAAA,GAAQ,UAAA,EAChB,MAAA,EAAQ,KAAA,GAAQ,UAAA,GACf,KAAA,GAAQ,UAAA;AAAA,iBA2CK,0BAAA,CACd,KAAA,WACA,IAAA;EACE,KAAA,CAAM,IAAA;EACN,MAAA,IAAU,CAAA,UAAW,CAAA;EACrB,MAAA,IAAU,CAAA,UAAW,CAAA,UAAW,CAAA;AAAA,GAElC,GAAA,EAAK,aAAa;AAAA,iBA8VJ,kBAAA,CACd,SAAA,GACE,KAAA,GAAQ,MAAA,sBACL,KAAA,GAAQ,UAAA,iDACb,KAAA,GAAQ,MAAA,mBACR,OAAA;EAAY,IAAA;EAAe,IAAA,GAAO,OAAA;AAAA;AAAA,iBA+BpB,uBAAA,CAAwB,KAA0B,EAAnB,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-sync.js","names":[],"sources":["../../src/ssr/render-sync.ts"],"sourcesContent":["import type { JSXElement } from '../common/jsx';\nimport { __CONTROL_BOUNDARY__ } from '../common/control';\nimport type { DOMElement } from '../common/vnode';\nimport { __ERROR_BOUNDARY__ } from '../common/vnode';\nimport { Fragment } from '../jsx';\nimport { logger } from '../dev/logger';\nimport {\n createRenderContext,\n withRenderContext,\n type RenderContext,\n type SSRData,\n} from './context';\nimport {\n disposeSSRTemporaryOwners,\n executeComponentSync,\n renderSyncComponentRoot,\n type Component,\n} from './component-runtime';\nimport {\n createErrorBoundaryReset,\n evaluateControlBoundaryChildren,\n getErrorBoundaryState,\n getRenderableChildren,\n normalizeRenderableChildren,\n resolveErrorBoundaryFallbackNode,\n} from './boundaries';\nimport { renderAttrs, renderAttrsDirect } from './attrs';\nimport { VOID_ELEMENTS, escapeText } from './escape';\nimport { serializeHydrationRenderData } from './hydration-data';\nimport { startRenderPhase, stopRenderPhase } from './render-keys';\nimport type { RouteAppRenderInput } from './route-render';\nimport { StringSink } from './sink';\nimport type { VNode } from './types';\n\nconst __SSR_DEBUG =\n process.env.NODE_ENV !== 'production' &&\n (process.env.ASKR_SSR_DEBUG === '1' || process.env.ASKR_SSR_DEBUG === 'true');\n\nexport function inheritRenderableKey(\n source: VNode | JSXElement,\n result: VNode | JSXElement\n): VNode | JSXElement {\n const inheritedKey = (source as DOMElement).key;\n if (inheritedKey === undefined || inheritedKey === null) {\n return result;\n }\n\n if (!result || typeof result !== 'object' || !('type' in result)) {\n return result;\n }\n\n const resultVNode = result as DOMElement;\n if (resultVNode.key === undefined || resultVNode.key === null) {\n resultVNode.key = inheritedKey;\n }\n\n if (typeof resultVNode.type === 'string') {\n if (!resultVNode.props) {\n resultVNode.props = {};\n }\n\n if (resultVNode.props['data-key'] === undefined) {\n resultVNode.props['data-key'] = String(inheritedKey);\n }\n }\n\n return result;\n}\n\nfunction renderRenderableSync(value: unknown, ctx: RenderContext): string {\n if (typeof value === 'string') return escapeText(value);\n if (typeof value === 'number') return escapeText(String(value));\n if (value === null || value === undefined || value === false) return '';\n if (Array.isArray(value)) return renderChildrenSync(value, ctx);\n if (value && typeof value === 'object' && 'type' in value) {\n return renderNodeSync(value as VNode, ctx);\n }\n return '';\n}\n\nfunction renderChildSync(child: unknown, ctx: RenderContext): string {\n return renderRenderableSync(child, ctx);\n}\n\nexport function renderRenderableSyncToSink(\n value: unknown,\n sink: {\n write(html: string): void;\n write2?: (a: string, b: string) => void;\n write3?: (a: string, b: string, c: string) => void;\n },\n ctx: RenderContext\n): void {\n if (value === null || value === undefined || value === false) return;\n if (typeof value === 'string') {\n sink.write(escapeText(value));\n return;\n }\n if (typeof value === 'number') {\n sink.write(escapeText(String(value)));\n return;\n }\n if (Array.isArray(value)) {\n renderChildrenSyncToSink(value, sink, ctx);\n return;\n }\n if (value && typeof value === 'object' && 'type' in value) {\n renderNodeSyncToSink(value as VNode, sink, ctx);\n }\n}\n\nfunction renderChildSyncToSink(\n child: unknown,\n sink: { write(html: string): void },\n ctx: RenderContext\n): void {\n renderRenderableSyncToSink(child, sink, ctx);\n}\n\nfunction renderChildrenSync(\n children: unknown[] | undefined,\n ctx: RenderContext\n): string {\n if (!children || !Array.isArray(children) || children.length === 0) return '';\n if (children.length === 1) return renderChildSync(children[0], ctx);\n\n if (children.length <= 8) {\n let result = '';\n for (const child of children) result += renderChildSync(child, ctx);\n return result;\n }\n\n const parts = Array.from({ length: children.length }, (_, index) =>\n renderChildSync(children[index], ctx)\n );\n return parts.join('');\n}\n\nfunction renderErrorBoundaryFallbackValue(\n fallback: unknown,\n error: unknown,\n reset: () => void,\n ctx: RenderContext\n): string {\n const nextValue = resolveErrorBoundaryFallbackNode(fallback, error, reset);\n\n return Array.isArray(nextValue)\n ? renderChildrenSync(normalizeRenderableChildren(nextValue), ctx)\n : renderChildSync(nextValue, ctx);\n}\n\nfunction renderErrorBoundaryFallbackValueToSink(\n fallback: unknown,\n error: unknown,\n reset: () => void,\n sink: { write(html: string): void },\n ctx: RenderContext\n): void {\n sink.write(renderErrorBoundaryFallbackValue(fallback, error, reset, ctx));\n}\n\nfunction renderChildrenSyncToSink(\n children: unknown[] | undefined,\n sink: { write(html: string): void },\n ctx: RenderContext\n): void {\n if (!children || !Array.isArray(children) || children.length === 0) return;\n if (children.length >= 32) {\n for (let i = 0; i < children.length; i++) {\n renderRenderableSyncToSink(children[i], sink, ctx);\n }\n return;\n }\n for (let i = 0; i < children.length; i++) {\n renderChildSyncToSink(children[i], sink, ctx);\n }\n}\n\nfunction sinkWrite2(\n sink: { write(html: string): void; write2?: (a: string, b: string) => void },\n a: string,\n b: string\n): void {\n if (typeof sink.write2 === 'function') {\n sink.write2(a, b);\n return;\n }\n sink.write(a);\n sink.write(b);\n}\n\nfunction sinkWrite3(\n sink: {\n write(html: string): void;\n write3?: (a: string, b: string, c: string) => void;\n },\n a: string,\n b: string,\n c: string\n): void {\n if (typeof sink.write3 === 'function') {\n sink.write3(a, b, c);\n return;\n }\n sink.write(a);\n sink.write(b);\n sink.write(c);\n}\n\nfunction renderNodeSync(node: VNode | JSXElement, ctx: RenderContext): string {\n const { type, props } = node;\n\n /* istanbul ignore if - dev-only debug */\n if (__SSR_DEBUG) {\n try {\n logger.warn('[SSR] renderNodeSync type:', typeof type, type);\n } catch {}\n }\n\n if (typeof type === 'function') {\n const result = executeComponentSync(type as Component, props, ctx);\n return renderRenderableSync(inheritRenderableKey(node, result), ctx);\n }\n\n if (typeof type === 'symbol') {\n if (type === Fragment) {\n const childrenArr = getRenderableChildren(node);\n /* istanbul ignore if - dev-only debug */\n if (__SSR_DEBUG) {\n try {\n logger.warn('[SSR] fragment children length:', childrenArr?.length);\n } catch {\n // Ignore\n }\n }\n return renderChildrenSync(childrenArr, ctx);\n }\n if (type === __CONTROL_BOUNDARY__) {\n return renderChildrenSync(evaluateControlBoundaryChildren(node), ctx);\n }\n if (type === __ERROR_BOUNDARY__) {\n const boundaryState = getErrorBoundaryState(node);\n const fallback = props?.fallback;\n const reset = createErrorBoundaryReset(node);\n\n if (boundaryState?.error != null) {\n return renderErrorBoundaryFallbackValue(\n fallback,\n boundaryState.error,\n reset,\n ctx\n );\n }\n\n try {\n return renderChildrenSync(\n normalizeRenderableChildren(props?.children),\n ctx\n );\n } catch (error) {\n if (boundaryState) {\n boundaryState.error = error;\n boundaryState.notified = true;\n }\n logger.error('[Askr] ErrorBoundary caught render error:', error);\n return renderErrorBoundaryFallbackValue(fallback, error, reset, ctx);\n }\n }\n throw new Error(\n `renderNodeSync: unsupported VNode symbol type: ${String(type)}`\n );\n }\n\n const typeStr = type as string;\n if (VOID_ELEMENTS.has(typeStr)) {\n const attrs = renderAttrs(props);\n return `<${typeStr}${attrs} />`;\n }\n\n const maybeDangerous = (\n props as unknown as { dangerouslySetInnerHTML?: unknown }\n )?.dangerouslySetInnerHTML;\n if (maybeDangerous !== undefined && maybeDangerous !== null) {\n const { attrs, dangerousHtml } = renderAttrs(props, {\n returnDangerousHtml: true,\n });\n if (dangerousHtml !== undefined) {\n return `<${typeStr}${attrs}>${dangerousHtml}</${typeStr}>`;\n }\n const childrenHtml = renderChildrenSync(getRenderableChildren(node), ctx);\n return `<${typeStr}${attrs}>${childrenHtml}</${typeStr}>`;\n }\n\n const attrs = renderAttrs(props);\n const childrenHtml = renderChildrenSync(getRenderableChildren(node), ctx);\n return `<${typeStr}${attrs}>${childrenHtml}</${typeStr}>`;\n}\n\nfunction renderNodeSyncToSink(\n node: VNode | JSXElement,\n sink: {\n write(html: string): void;\n write2?: (a: string, b: string) => void;\n write3?: (a: string, b: string, c: string) => void;\n },\n ctx: RenderContext\n): void {\n const { type, props } = node;\n\n if (typeof type === 'function') {\n const result = executeComponentSync(type as Component, props, ctx);\n renderRenderableSyncToSink(inheritRenderableKey(node, result), sink, ctx);\n return;\n }\n\n if (typeof type === 'symbol') {\n if (type === Fragment) {\n const childrenArr = getRenderableChildren(node);\n renderChildrenSyncToSink(childrenArr, sink, ctx);\n return;\n }\n if (type === __CONTROL_BOUNDARY__) {\n renderChildrenSyncToSink(\n evaluateControlBoundaryChildren(node),\n sink,\n ctx\n );\n return;\n }\n if (type === __ERROR_BOUNDARY__) {\n const boundaryState = getErrorBoundaryState(node);\n const fallback = props?.fallback;\n const reset = createErrorBoundaryReset(node);\n\n if (boundaryState?.error != null) {\n renderErrorBoundaryFallbackValueToSink(\n fallback,\n boundaryState.error,\n reset,\n sink,\n ctx\n );\n return;\n }\n\n try {\n renderChildrenSyncToSink(\n normalizeRenderableChildren(props?.children),\n sink,\n ctx\n );\n } catch (error) {\n if (boundaryState) {\n boundaryState.error = error;\n boundaryState.notified = true;\n }\n logger.error('[Askr] ErrorBoundary caught render error:', error);\n renderErrorBoundaryFallbackValueToSink(\n fallback,\n error,\n reset,\n sink,\n ctx\n );\n }\n return;\n }\n throw new Error(\n `renderNodeSyncToSink: unsupported VNode symbol type: ${String(type)}`\n );\n }\n\n const typeStr = type as string;\n if (VOID_ELEMENTS.has(typeStr)) {\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write(' />');\n return;\n }\n\n const maybeDangerous = props\n ? (props as unknown as { dangerouslySetInnerHTML?: unknown })\n ?.dangerouslySetInnerHTML\n : undefined;\n\n if (maybeDangerous !== undefined && maybeDangerous !== null) {\n const dangerousHtml =\n typeof maybeDangerous === 'object' && '__html' in maybeDangerous\n ? String((maybeDangerous as { __html: unknown }).__html)\n : undefined;\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write('>');\n if (dangerousHtml !== undefined) {\n sink.write(dangerousHtml);\n } else {\n renderChildrenSyncToSink(getRenderableChildren(node), sink, ctx);\n }\n sinkWrite3(sink, '</', typeStr, '>');\n return;\n }\n\n const children = getRenderableChildren(node);\n\n if (!children || (Array.isArray(children) && children.length === 0)) {\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write('>');\n sinkWrite3(sink, '</', typeStr, '>');\n return;\n }\n\n if (Array.isArray(children) && children.length === 1) {\n const only = children[0];\n if (typeof only === 'string') {\n const content = escapeText(only);\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write('>');\n sink.write(content);\n sinkWrite3(sink, '</', typeStr, '>');\n return;\n }\n if (typeof only === 'number') {\n const content = escapeText(String(only));\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write('>');\n sink.write(content);\n sinkWrite3(sink, '</', typeStr, '>');\n return;\n }\n }\n\n sinkWrite2(sink, '<', typeStr);\n renderAttrsDirect(props, sink);\n sink.write('>');\n renderChildrenSyncToSink(children, sink, ctx);\n sinkWrite3(sink, '</', typeStr, '>');\n}\n\nexport function renderToStringSync(\n component: (\n props?: Record<string, unknown>\n ) => VNode | JSXElement | string | number | boolean | null | undefined,\n props?: Record<string, unknown>,\n options?: { seed?: number; data?: SSRData }\n): string {\n const seed = options?.seed ?? 12345;\n const ctx = createRenderContext(seed, { data: options?.data });\n\n return withRenderContext(ctx, () => {\n startRenderPhase(options?.data ?? null);\n try {\n const node = renderSyncComponentRoot(\n component as unknown as Component,\n props || {},\n ctx\n );\n if (!node) {\n throw new Error('renderToStringSync: wrapped component returned empty');\n }\n const sink = new StringSink();\n renderNodeSyncToSink(node, sink, ctx);\n sink.write(serializeHydrationRenderData(options?.data));\n sink.end();\n return sink.toString();\n } finally {\n try {\n stopRenderPhase();\n } finally {\n disposeSSRTemporaryOwners(ctx);\n }\n }\n });\n}\n\nexport function renderSSRRouteAppToSink(input: RouteAppRenderInput): void {\n const { ctx, data, route, params, sink } = input;\n\n withRenderContext(ctx, () => {\n startRenderPhase(data || null);\n try {\n const app = executeComponentSync(\n route.handler as unknown as Component,\n params,\n ctx\n );\n renderRenderableSyncToSink(app, sink, ctx);\n sink.write(serializeHydrationRenderData(data));\n } finally {\n try {\n stopRenderPhase();\n } finally {\n disposeSSRTemporaryOwners(ctx);\n }\n }\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-policy-resolution.js","names":["RouteModule._resolveRouteMatchFromRoutes","RouteModule.resolveRouteRequest"],"sources":["../../src/ssr/route-policy-resolution.ts"],"sourcesContent":["import { isPromiseLike } from '../common/promise';\nimport type {\n AccessDenyStatus,\n RouteManifest,\n RouteRequestResult,\n} from '../common/router';\nimport * as RouteModule from '../router/route';\nimport { throwSSRDataMissing } from './context';\nimport type { RouteRenderOptions, SSRRoute } from './route-render';\n\nconst MAX_SSR_REDIRECTS = 20;\n\ntype ResolvedPolicyAwareSSRRoute = {\n url: string;\n route: SSRRoute;\n params: Record<string, string>;\n};\n\nfunction getRouteRequestResultSync(\n result: RouteRequestResult | Promise<RouteRequestResult>\n): RouteRequestResult {\n if (isPromiseLike(result)) {\n throwSSRDataMissing();\n }\n\n return result;\n}\n\nfunction buildDeniedRoute(route: SSRRoute, status: AccessDenyStatus): SSRRoute {\n return {\n ...route,\n handler: () => ({\n type: 'div',\n props: {\n 'data-route-denied': String(status),\n },\n children: [String(status)],\n }),\n };\n}\n\nfunction routeHasSSRLoader(manifest: RouteManifest, route: SSRRoute): boolean {\n const routeFallbackPrefix = (route as { fallbackPrefix?: string })\n .fallbackPrefix;\n\n return manifest.records.some((record) => {\n const recordFallbackPrefix = (record as { fallbackPrefix?: string })\n .fallbackPrefix;\n\n return (\n record.path === route.path &&\n recordFallbackPrefix === routeFallbackPrefix &&\n typeof record.options?.loader === 'function'\n );\n });\n}\n\nexport function resolvePolicyAwareSSRRoute(\n opts: RouteRenderOptions,\n routeTable: SSRRoute[]\n): ResolvedPolicyAwareSSRRoute {\n const manifest = opts.registry?.manifest;\n\n if (!manifest) {\n const requestUrl = new URL(opts.url, 'http://localhost');\n const matched = RouteModule._resolveRouteMatchFromRoutes(\n requestUrl.pathname,\n routeTable\n );\n if (!matched) {\n throw new Error(`SSR: no route found for url: ${opts.url}`);\n }\n\n return {\n url: opts.url,\n route: matched.route,\n params: matched.params,\n };\n }\n\n let href = opts.url;\n const visited = new Set<string>();\n\n for (let redirects = 0; redirects <= MAX_SSR_REDIRECTS; redirects += 1) {\n const requestUrl = new URL(href, 'http://localhost');\n const matched = RouteModule._resolveRouteMatchFromRoutes(\n requestUrl.pathname,\n routeTable\n );\n\n if (!matched) {\n throw new Error(`SSR: no route found for url: ${href}`);\n }\n\n const resolved = getRouteRequestResultSync(\n RouteModule.resolveRouteRequest(href, {\n manifest,\n mode: 'ssr',\n })\n );\n\n if (resolved === null) {\n throw new Error(`SSR: no route found for url: ${href}`);\n }\n\n if (resolved.kind === 'redirect') {\n const redirectTarget = new URL(resolved.to, 'http://localhost');\n const redirectHref = `${redirectTarget.pathname}${redirectTarget.search}${redirectTarget.hash}`;\n\n if (redirectHref === href || visited.has(redirectHref)) {\n throw new Error(\n `[Askr] SSR redirect cycle detected at ${redirectHref}.`\n );\n }\n\n if (redirects >= MAX_SSR_REDIRECTS) {\n throw new Error(\n `[Askr] SSR redirect limit exceeded (${MAX_SSR_REDIRECTS}).`\n );\n }\n\n visited.add(redirectHref);\n href = redirectHref;\n continue;\n }\n\n if (resolved.kind === 'deny') {\n return {\n url: href,\n route: buildDeniedRoute(matched.route, resolved.status),\n params: matched.params,\n };\n }\n\n return {\n url: href,\n route: {\n ...matched.route,\n handler: routeHasSSRLoader(manifest, matched.route)\n ? resolved.handler\n : matched.route.handler,\n },\n params: matched.params,\n };\n }\n\n throw new Error(`[Askr] SSR redirect limit exceeded (${MAX_SSR_REDIRECTS}).`);\n}\n"],"mappings":";;;;;AAUA,MAAM,oBAAoB;AAQ1B,SAAS,0BACP,QACoB;CACpB,IAAI,cAAc,MAAM,GACtB,oBAAoB;CAGtB,OAAO;AACT;AAEA,SAAS,iBAAiB,OAAiB,QAAoC;CAC7E,OAAO;EACL,GAAG;EACH,gBAAgB;GACd,MAAM;GACN,OAAO,EACL,qBAAqB,OAAO,MAAM,EACpC;GACA,UAAU,CAAC,OAAO,MAAM,CAAC;EAC3B;CACF;AACF;AAEA,SAAS,kBAAkB,UAAyB,OAA0B;CAC5E,MAAM,sBAAuB,MAC1B;CAEH,OAAO,SAAS,QAAQ,MAAM,WAAW;EACvC,MAAM,uBAAwB,OAC3B;EAEH,OACE,OAAO,SAAS,MAAM,QACtB,yBAAyB,uBACzB,OAAO,OAAO,SAAS,WAAW;CAEtC,CAAC;AACH;AAEA,SAAgB,2BACd,MACA,YAC6B;CAC7B,MAAM,WAAW,KAAK,UAAU;CAEhC,IAAI,CAAC,UAAU;EAEb,MAAM,UAAUA,6BACd,IAFqB,IAAI,KAAK,KAAK,kBAEnC,CAAA,CAAW,UACX,UACF;EACA,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,gCAAgC,KAAK,KAAK;EAG5D,OAAO;GACL,KAAK,KAAK;GACV,OAAO,QAAQ;GACf,QAAQ,QAAQ;EAClB;CACF;CAEA,IAAI,OAAO,KAAK;CAChB,MAAM,0BAAU,IAAI,IAAY;CAEhC,KAAK,IAAI,YAAY,GAAG,aAAa,mBAAmB,aAAa,GAAG;EAEtE,MAAM,UAAUA,6BACd,IAFqB,IAAI,MAAM,kBAE/B,CAAA,CAAW,UACX,UACF;EAEA,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,gCAAgC,MAAM;EAGxD,MAAM,WAAW,0BACfC,oBAAgC,MAAM;GACpC;GACA,MAAM;EACR,CAAC,CACH;EAEA,IAAI,aAAa,MACf,MAAM,IAAI,MAAM,gCAAgC,MAAM;EAGxD,IAAI,SAAS,SAAS,YAAY;GAChC,MAAM,iBAAiB,IAAI,IAAI,SAAS,IAAI,kBAAkB;GAC9D,MAAM,eAAe,GAAG,eAAe,WAAW,eAAe,SAAS,eAAe;GAEzF,IAAI,iBAAiB,QAAQ,QAAQ,IAAI,YAAY,GACnD,MAAM,IAAI,MACR,yCAAyC,aAAa,EACxD;GAGF,IAAI,aAAa,mBACf,MAAM,IAAI,MACR,uCAAuC,kBAAkB,GAC3D;GAGF,QAAQ,IAAI,YAAY;GACxB,OAAO;GACP;EACF;EAEA,IAAI,SAAS,SAAS,QACpB,OAAO;GACL,KAAK;GACL,OAAO,iBAAiB,QAAQ,OAAO,SAAS,MAAM;GACtD,QAAQ,QAAQ;EAClB;EAGF,OAAO;GACL,KAAK;GACL,OAAO;IACL,GAAG,QAAQ;IACX,SAAS,kBAAkB,UAAU,QAAQ,KAAK,IAC9C,SAAS,UACT,QAAQ,MAAM;GACpB;GACA,QAAQ,QAAQ;EAClB;CACF;CAEA,MAAM,IAAI,MAAM,uCAAuC,kBAAkB,GAAG;AAC9E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-render.d.ts","names":[],"sources":["../../src/ssr/route-render.ts"],"mappings":";;;;;;KAsBY,QAAA;EACV,IAAA;EACA,OAAA,EAAS,YAAY;EACrB,SAAA;AAAA;AAAA,KAGG,cAAA;EAEC,QAAA,EAAU,aAAA;EACV,MAAA,YAAkB,QAAA;AAAA;EAGlB,QAAA,GAAW,aAAA;EACX,MAAA,WAAiB,QAAA;AAAA;AAAA,KAGX,kBAAA,GAAqB,cAAA;EAC/B,GAAA;EACA,IAAA;EACA,IAAA,GAAO,OAAA;EACP,QAAA,GAAW,gBAAA;AAAA;AAAA,KAGD,kBAAA,GAAqB,kBAAkB;EACjD,OAAA,CAAQ,IAAA;EACR,UAAA;AAAA;AAAA,KAcU,mBAAA;EACV,KAAA,EAAO,QAAA;EACP,MAAA,EAAQ,MAAA;EACR,IAAA,GAAO,OAAA;EACP,GAAA,EAAK,aAAA;EACL,IAAA,EAAM,UAAA;AAAA;AAAA,UAGS,eAAA;EACf,eAAA,CAAgB,KAAA,EAAO,mBAAmB;AAAA;AAAA,iBAGtB,cAAA,CACpB,IAAA;EAEM,GAAA;EACA,QAAA,EAAU,aAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA,GAAS,KAAA;IACP,IAAA;IACA,OAAA,EAAS,YAAA;IACT,SAAA;EAAA;EAEF,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,WAAA;AAAA;EAGT,GAAA;EACA,QAAA,EAAU,aAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA,GAAS,KAAA;IACP,IAAA;IACA,OAAA,EAAS,YAAA;IACT,SAAA;EAAA;EAEF,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,WAAA;AAAA;EAGT,GAAA;EACA,QAAA,GAAW,aAAA;EACX,QAAA,GAAW,aAAA;EACX,MAAA,EAAQ,KAAA;IACN,IAAA;IACA,OAAA,EAAS,YAAA;IACT,SAAA;EAAA;EAEF,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,WAAA;AAAA,IAEd,OAAA,CAAQ,kBAAA;AAAA,iBA2IK,mBAAA,CACd,IAAA,EAAM,kBAAA,EACN,IAAA,EAAM,eAAe;AAAA,iBAQP,mBAAA,CACd,IAAA,EAAM,kBAAA,EACN,IAAA,EAAM,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-render.js","names":["RouteModule.resolveRouteRequest","RouteModule.resolveRouteFromRoutes"],"sources":["../../src/ssr/route-render.ts"],"sourcesContent":["import {\n type DocumentRenderArgs,\n type DocumentRenderContext,\n type DocumentRenderer,\n renderDocument,\n} from '../common/ssr';\nimport type {\n RouteAuthOptions,\n RouteHandler,\n RouteManifest,\n RouteRegistry,\n RouteRequestResult,\n} from '../common/router';\nimport * as RouteModule from '../router/route';\nimport {\n createRenderContext,\n type RenderContext,\n type SSRData,\n} from './context';\nimport { resolvePolicyAwareSSRRoute } from './route-policy-resolution';\nimport { StringSink, StreamSink, type RenderSink } from './sink';\n\nexport type SSRRoute = {\n path: string;\n handler: RouteHandler;\n namespace?: string;\n};\n\ntype SSRRouteSource =\n | {\n registry: RouteRegistry;\n routes?: readonly SSRRoute[];\n }\n | {\n registry?: RouteRegistry;\n routes: readonly SSRRoute[];\n };\n\nexport type RouteRenderOptions = SSRRouteSource & {\n url: string;\n seed?: number;\n data?: SSRData;\n document?: DocumentRenderer;\n};\n\nexport type RouteStreamOptions = RouteRenderOptions & {\n onChunk(html: string): void;\n onComplete(): void;\n};\n\ntype ResolvedSSRRouteRender = {\n url: string;\n requestUrl: URL;\n route: SSRRoute;\n params: Record<string, string>;\n seed: number;\n data?: SSRData;\n ctx: RenderContext;\n document?: DocumentRenderer;\n};\n\nexport type RouteAppRenderInput = {\n route: SSRRoute;\n params: Record<string, string>;\n data?: SSRData;\n ctx: RenderContext;\n sink: RenderSink;\n};\n\nexport interface RouteRenderHost {\n renderAppToSink(input: RouteAppRenderInput): void;\n}\n\nexport async function resolveRequest(\n opts:\n | {\n url: string;\n registry: RouteRegistry;\n manifest?: RouteManifest;\n routes?: Array<{\n path: string;\n handler: RouteHandler;\n namespace?: string;\n }>;\n auth?: RouteAuthOptions;\n signal?: AbortSignal;\n }\n | {\n url: string;\n manifest: RouteManifest;\n registry?: RouteRegistry;\n routes?: Array<{\n path: string;\n handler: RouteHandler;\n namespace?: string;\n }>;\n auth?: RouteAuthOptions;\n signal?: AbortSignal;\n }\n | {\n url: string;\n manifest?: RouteManifest;\n registry?: RouteRegistry;\n routes: Array<{\n path: string;\n handler: RouteHandler;\n namespace?: string;\n }>;\n auth?: RouteAuthOptions;\n signal?: AbortSignal;\n }\n): Promise<RouteRequestResult> {\n const { url, auth, signal } = opts;\n const manifest = opts.manifest ?? opts.registry?.manifest;\n const routes = opts.routes ?? opts.registry?.routes;\n\n if (manifest) {\n return await RouteModule.resolveRouteRequest(url, {\n manifest,\n mode: 'ssr',\n auth,\n signal,\n });\n }\n\n if (!routes) {\n throw new Error('resolveRequest requires a route manifest or route table.');\n }\n\n const requestUrl = new URL(url, 'http://localhost');\n const resolved = RouteModule.resolveRouteFromRoutes(\n requestUrl.pathname,\n routes\n );\n\n if (!resolved) {\n return null;\n }\n\n return {\n kind: 'render',\n handler: resolved.handler,\n params: resolved.params,\n };\n}\n\nfunction resolveSSRRouteSource(source: SSRRouteSource): SSRRoute[] {\n const routes = source.routes ?? source.registry?.routes;\n if (!routes || routes.length === 0) {\n throw new Error('SSR requires a route registry or route table.');\n }\n\n return routes.map((route) => ({\n ...route,\n path: route.path,\n handler: route.handler,\n namespace: route.namespace,\n }));\n}\n\nfunction resolveSSRRouteRender(\n opts: RouteRenderOptions\n): ResolvedSSRRouteRender {\n const { seed = 12345, data, document } = opts;\n const routeTable = resolveSSRRouteSource(opts);\n const resolvedRoute = resolvePolicyAwareSSRRoute(opts, routeTable);\n const requestUrl = new URL(resolvedRoute.url, 'http://localhost');\n\n const ctx = createRenderContext(seed, {\n url: resolvedRoute.url,\n data,\n params: resolvedRoute.params,\n routes: routeTable,\n });\n\n return {\n url: resolvedRoute.url,\n requestUrl,\n route: resolvedRoute.route,\n params: resolvedRoute.params,\n seed,\n data,\n ctx,\n document,\n };\n}\n\nfunction buildDocumentRenderArgs(\n resolved: ResolvedSSRRouteRender,\n appHtml: string\n): DocumentRenderArgs {\n const context: DocumentRenderContext = {\n mode: 'ssr',\n url: resolved.url,\n pathname: resolved.requestUrl.pathname,\n search: resolved.requestUrl.search,\n hash: resolved.requestUrl.hash,\n params: resolved.params,\n data: resolved.data,\n seed: resolved.seed,\n route: {\n path: resolved.route.path,\n namespace: resolved.route.namespace,\n },\n };\n\n return {\n appHtml,\n context,\n };\n}\n\nfunction renderResolvedRouteAppToSink(\n resolved: ResolvedSSRRouteRender,\n sink: RenderSink,\n host: RouteRenderHost\n): void {\n host.renderAppToSink({\n route: resolved.route,\n params: resolved.params,\n data: resolved.data,\n ctx: resolved.ctx,\n sink,\n });\n}\n\nfunction renderToSinkInternal(\n opts: RouteRenderOptions & { sink: RenderSink },\n host: RouteRenderHost\n) {\n const { sink, ...renderOptions } = opts;\n const resolved = resolveSSRRouteRender(renderOptions);\n\n if (!resolved.document) {\n renderResolvedRouteAppToSink(resolved, sink, host);\n return;\n }\n\n const appSink = new StringSink();\n renderResolvedRouteAppToSink(resolved, appSink, host);\n appSink.end();\n sink.write(\n renderDocument(\n resolved.document,\n buildDocumentRenderArgs(resolved, appSink.toString()),\n 'renderToString()/renderToStream()'\n )\n );\n}\n\nexport function renderRouteToString(\n opts: RouteRenderOptions,\n host: RouteRenderHost\n): string {\n const sink = new StringSink();\n renderToSinkInternal({ ...opts, sink }, host);\n sink.end();\n return sink.toString();\n}\n\nexport function renderRouteToStream(\n opts: RouteStreamOptions,\n host: RouteRenderHost\n): void {\n const sink = new StreamSink(opts.onChunk, opts.onComplete);\n renderToSinkInternal({ ...opts, sink }, host);\n sink.end();\n}\n"],"mappings":";;;;;;;AAyEA,eAAsB,eACpB,MAqC6B;CAC7B,MAAM,EAAE,KAAK,MAAM,WAAW;CAC9B,MAAM,WAAW,KAAK,YAAY,KAAK,UAAU;CACjD,MAAM,SAAS,KAAK,UAAU,KAAK,UAAU;CAE7C,IAAI,UACF,OAAO,MAAMA,oBAAgC,KAAK;EAChD;EACA,MAAM;EACN;EACA;CACF,CAAC;CAGH,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,0DAA0D;CAI5E,MAAM,WAAWC,uBACf,IAFqB,IAAI,KAAK,kBAE9B,CAAA,CAAW,UACX,MACF;CAEA,IAAI,CAAC,UACH,OAAO;CAGT,OAAO;EACL,MAAM;EACN,SAAS,SAAS;EAClB,QAAQ,SAAS;CACnB;AACF;AAEA,SAAS,sBAAsB,QAAoC;CACjE,MAAM,SAAS,OAAO,UAAU,OAAO,UAAU;CACjD,IAAI,CAAC,UAAU,OAAO,WAAW,GAC/B,MAAM,IAAI,MAAM,+CAA+C;CAGjE,OAAO,OAAO,KAAK,WAAW;EAC5B,GAAG;EACH,MAAM,MAAM;EACZ,SAAS,MAAM;EACf,WAAW,MAAM;CACnB,EAAE;AACJ;AAEA,SAAS,sBACP,MACwB;CACxB,MAAM,EAAE,OAAO,OAAO,MAAM,aAAa;CACzC,MAAM,aAAa,sBAAsB,IAAI;CAC7C,MAAM,gBAAgB,2BAA2B,MAAM,UAAU;CACjE,MAAM,aAAa,IAAI,IAAI,cAAc,KAAK,kBAAkB;CAEhE,MAAM,MAAM,oBAAoB,MAAM;EACpC,KAAK,cAAc;EACnB;EACA,QAAQ,cAAc;EACtB,QAAQ;CACV,CAAC;CAED,OAAO;EACL,KAAK,cAAc;EACnB;EACA,OAAO,cAAc;EACrB,QAAQ,cAAc;EACtB;EACA;EACA;EACA;CACF;AACF;AAEA,SAAS,wBACP,UACA,SACoB;CAgBpB,OAAO;EACL;EACA;GAhBA,MAAM;GACN,KAAK,SAAS;GACd,UAAU,SAAS,WAAW;GAC9B,QAAQ,SAAS,WAAW;GAC5B,MAAM,SAAS,WAAW;GAC1B,QAAQ,SAAS;GACjB,MAAM,SAAS;GACf,MAAM,SAAS;GACf,OAAO;IACL,MAAM,SAAS,MAAM;IACrB,WAAW,SAAS,MAAM;GAC5B;EAKA;CACF;AACF;AAEA,SAAS,6BACP,UACA,MACA,MACM;CACN,KAAK,gBAAgB;EACnB,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,MAAM,SAAS;EACf,KAAK,SAAS;EACd;CACF,CAAC;AACH;AAEA,SAAS,qBACP,MACA,MACA;CACA,MAAM,EAAE,MAAM,GAAG,kBAAkB;CACnC,MAAM,WAAW,sBAAsB,aAAa;CAEpD,IAAI,CAAC,SAAS,UAAU;EACtB,6BAA6B,UAAU,MAAM,IAAI;EACjD;CACF;CAEA,MAAM,UAAU,IAAI,WAAW;CAC/B,6BAA6B,UAAU,SAAS,IAAI;CACpD,QAAQ,IAAI;CACZ,KAAK,MACH,eACE,SAAS,UACT,wBAAwB,UAAU,QAAQ,SAAS,CAAC,GACpD,mCACF,CACF;AACF;AAEA,SAAgB,oBACd,MACA,MACQ;CACR,MAAM,OAAO,IAAI,WAAW;CAC5B,qBAAqB;EAAE,GAAG;EAAM;CAAK,GAAG,IAAI;CAC5C,KAAK,IAAI;CACT,OAAO,KAAK,SAAS;AACvB;AAEA,SAAgB,oBACd,MACA,MACM;CACN,MAAM,OAAO,IAAI,WAAW,KAAK,SAAS,KAAK,UAAU;CACzD,qBAAqB;EAAE,GAAG;EAAM;CAAK,GAAG,IAAI;CAC5C,KAAK,IAAI;AACX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sink.d.ts","names":[],"sources":["../../src/ssr/sink.ts"],"mappings":";UAAiB,UAAA;EACf,KAAA,CAAM,IAAA;EACN,GAAA;AAAA;AAAA,cAGW,UAAA,YAAsB,UAAU;EAAA,QACnC,MAAA;EAAA,QACA,YAAA;EAAA,QACA,SAAA;EAAA,wBAKgB,eAAA;EAExB,KAAA,CAAM,IAAA;EAYN,MAAA,CAAO,CAAA,UAAW,CAAA;EAgBlB,MAAA,CAAO,CAAA,UAAW,CAAA,UAAW,CAAA;EAoB7B,GAAA;EAQA,QAAA;AAAA;AAAA,cAWW,UAAA,YAAsB,UAAU;EAAA,iBAExB,OAAA;EAAA,iBACA,UAAA;cADA,OAAA,GAAU,IAAA,mBACV,UAAA;EAGnB,KAAA,CAAM,IAAA;EAIN,GAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sink.js","names":[],"sources":["../../src/ssr/sink.ts"],"sourcesContent":["export interface RenderSink {\n write(html: string): void;\n end(): void;\n}\n\nexport class StringSink implements RenderSink {\n private chunks: string[] = [];\n private bufferChunks: string[] = [];\n private bufferLen = 0;\n\n // Reduce array churn by batching many small writes into a larger buffer.\n // This is especially important for large SSR trees where we may write\n // hundreds of thousands of small fragments.\n private static readonly FLUSH_THRESHOLD = 32 * 1024;\n\n write(html: string) {\n if (!html) return;\n this.bufferChunks.push(html);\n this.bufferLen += html.length;\n if (this.bufferLen >= StringSink.FLUSH_THRESHOLD) {\n this.chunks.push(this.bufferChunks.join(''));\n this.bufferChunks.length = 0;\n this.bufferLen = 0;\n }\n }\n\n // Batch write for hot paths (avoids multiple push calls)\n write2(a: string, b: string) {\n if (a) {\n this.bufferChunks.push(a);\n this.bufferLen += a.length;\n }\n if (b) {\n this.bufferChunks.push(b);\n this.bufferLen += b.length;\n }\n if (this.bufferLen >= StringSink.FLUSH_THRESHOLD) {\n this.chunks.push(this.bufferChunks.join(''));\n this.bufferChunks.length = 0;\n this.bufferLen = 0;\n }\n }\n\n write3(a: string, b: string, c: string) {\n if (a) {\n this.bufferChunks.push(a);\n this.bufferLen += a.length;\n }\n if (b) {\n this.bufferChunks.push(b);\n this.bufferLen += b.length;\n }\n if (c) {\n this.bufferChunks.push(c);\n this.bufferLen += c.length;\n }\n if (this.bufferLen >= StringSink.FLUSH_THRESHOLD) {\n this.chunks.push(this.bufferChunks.join(''));\n this.bufferChunks.length = 0;\n this.bufferLen = 0;\n }\n }\n\n end() {\n if (this.bufferLen) {\n this.chunks.push(this.bufferChunks.join(''));\n this.bufferChunks.length = 0;\n this.bufferLen = 0;\n }\n }\n\n toString() {\n // Ensure any buffered content is included even if end() wasn't called.\n if (this.bufferLen) {\n this.chunks.push(this.bufferChunks.join(''));\n this.bufferChunks.length = 0;\n this.bufferLen = 0;\n }\n return this.chunks.join('');\n }\n}\n\nexport class StreamSink implements RenderSink {\n constructor(\n private readonly onChunk: (html: string) => void,\n private readonly onComplete: () => void\n ) {}\n\n write(html: string) {\n if (html) this.onChunk(html);\n }\n\n end() {\n this.onComplete();\n }\n}\n"],"mappings":";AAKA,IAAa,aAAb,MAAa,WAAiC;;gBACjB,CAAC;sBACK,CAAC;mBACd;;;yBAKsB,KAAK;;CAE/C,MAAM,MAAc;EAClB,IAAI,CAAC,MAAM;EACX,KAAK,aAAa,KAAK,IAAI;EAC3B,KAAK,aAAa,KAAK;EACvB,IAAI,KAAK,aAAa,WAAW,iBAAiB;GAChD,KAAK,OAAO,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;GAC3C,KAAK,aAAa,SAAS;GAC3B,KAAK,YAAY;EACnB;CACF;CAGA,OAAO,GAAW,GAAW;EAC3B,IAAI,GAAG;GACL,KAAK,aAAa,KAAK,CAAC;GACxB,KAAK,aAAa,EAAE;EACtB;EACA,IAAI,GAAG;GACL,KAAK,aAAa,KAAK,CAAC;GACxB,KAAK,aAAa,EAAE;EACtB;EACA,IAAI,KAAK,aAAa,WAAW,iBAAiB;GAChD,KAAK,OAAO,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;GAC3C,KAAK,aAAa,SAAS;GAC3B,KAAK,YAAY;EACnB;CACF;CAEA,OAAO,GAAW,GAAW,GAAW;EACtC,IAAI,GAAG;GACL,KAAK,aAAa,KAAK,CAAC;GACxB,KAAK,aAAa,EAAE;EACtB;EACA,IAAI,GAAG;GACL,KAAK,aAAa,KAAK,CAAC;GACxB,KAAK,aAAa,EAAE;EACtB;EACA,IAAI,GAAG;GACL,KAAK,aAAa,KAAK,CAAC;GACxB,KAAK,aAAa,EAAE;EACtB;EACA,IAAI,KAAK,aAAa,WAAW,iBAAiB;GAChD,KAAK,OAAO,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;GAC3C,KAAK,aAAa,SAAS;GAC3B,KAAK,YAAY;EACnB;CACF;CAEA,MAAM;EACJ,IAAI,KAAK,WAAW;GAClB,KAAK,OAAO,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;GAC3C,KAAK,aAAa,SAAS;GAC3B,KAAK,YAAY;EACnB;CACF;CAEA,WAAW;EAET,IAAI,KAAK,WAAW;GAClB,KAAK,OAAO,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;GAC3C,KAAK,aAAa,SAAS;GAC3B,KAAK,YAAY;EACnB;EACA,OAAO,KAAK,OAAO,KAAK,EAAE;CAC5B;AACF;AAEA,IAAa,aAAb,MAA8C;CAC5C,YACE,SACA,YACA;EAFiB,KAAA,UAAA;EACA,KAAA,aAAA;CAChB;CAEH,MAAM,MAAc;EAClB,IAAI,MAAM,KAAK,QAAQ,IAAI;CAC7B;CAEA,MAAM;EACJ,KAAK,WAAW;CAClB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/ssr/types.ts"],"mappings":";;;;;;KASY,KAAA;EACV,IAAA,WAAe,YAAA;EACf,KAAA,GAAQ,KAAK;EACb,QAAA;EACA,GAAA;AAAA;;;;AAAG;KAOO,YAAA,IACV,KAAA,EAAO,KAAA,EACP,OAAA;EAAY,MAAA,GAAS,WAAA;EAAa,GAAA,GAAM,aAAA;AAAA,MACrC,KAAA,GAAQ,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-hydration.js","names":[],"sources":["../../src/ssr/verify-hydration.ts"],"sourcesContent":["import type { SSRRoute } from './index';\nimport type { SSRData } from './context';\nimport type { ResolvedRoute } from '../common/router';\nimport { SSR_RENDER_DATA_ATTR } from '../common/ssr';\nimport { renderResolvedToStringSync } from './render-resolved';\n\nfunction normalizeHydrationHtml(html: string): string {\n const template = document.createElement('template');\n template.innerHTML = html;\n for (const script of Array.from(\n template.content.querySelectorAll(`script[${SSR_RENDER_DATA_ATTR}]`)\n )) {\n script.remove();\n }\n return template.innerHTML.replace(/<!--[\\s\\S]*?-->/g, '');\n}\n\nexport function verifyHydrationSyncForUrl(opts: {\n root: Element;\n url: string;\n routes: readonly SSRRoute[];\n resolved: ResolvedRoute;\n options?: { seed?: number; data?: SSRData };\n}): boolean {\n const { root, url, routes, resolved, options } = opts;\n const expected = renderResolvedToStringSync({\n url,\n routes,\n handler: resolved.handler,\n params: resolved.params,\n options,\n });\n\n return (\n normalizeHydrationHtml(root.innerHTML) === normalizeHydrationHtml(expected)\n );\n}\n"],"mappings":";;;AAMA,SAAS,uBAAuB,MAAsB;CACpD,MAAM,WAAW,SAAS,cAAc,UAAU;CAClD,SAAS,YAAY;CACrB,KAAK,MAAM,UAAU,MAAM,KACzB,SAAS,QAAQ,iBAAiB,UAAU,qBAAqB,EAAE,CACrE,GACE,OAAO,OAAO;CAEhB,OAAO,SAAS,UAAU,QAAQ,oBAAoB,EAAE;AAC1D;AAEA,SAAgB,0BAA0B,MAM9B;CACV,MAAM,EAAE,MAAM,KAAK,QAAQ,UAAU,YAAY;CACjD,MAAM,WAAW,2BAA2B;EAC1C;EACA;EACA,SAAS,SAAS;EAClB,QAAQ,SAAS;EACjB;CACF,CAAC;CAED,OACE,uBAAuB,KAAK,SAAS,MAAM,uBAAuB,QAAQ;AAE9E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/testing/index.ts"],"mappings":";;;KAeY,WAAA,gBAA2B,OAAO;AAAA,UAE7B,gBAAA;EACf,OAAA,GAAU,WAAW;AAAA;AAAA,UAGN,kBAAA;EACf,MAAA;EACA,gBAAgB;AAAA;AAAA,UAGD,oBAAA;EAAA,SACN,KAAA,WAAgB,kBAAkB;EAAA,SAClC,QAAA;EACT,KAAA;EACA,IAAA;AAAA;AAAA,UAGQ,iBAAA;EACR,QAAA,GAAW,aAAA;EACX,MAAA,YAAkB,KAAK;AAAA;AAAA,UAGR,mBAAA;EACf,IAAA;EACA,IAAA;EACA,eAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;AAAA;AAAA,KAGG,gBAAA,GAAmB,OAAO,CAAC,gBAAA;AAAA,iBAkBvB,gBAAA,eACP,IAAA,EAAM,CAAA,EACN,OAAA,GAAU,gBAAA,GACT,KAAA,CAAM,CAAA;AAAA,cAeI,SAAA,SAAS,gBAAA;6BACA,OAAA,GAAiB,gBAAA,GAAmB,KAAA,CAAM,CAAA;2BAe5C,KAAA,MACP,YAAA,GACM,CAAA,EAAC,OAAA,GACN,gBAAA,GACT,KAAA,CAAM,CAAA;2BAec,IAAA,EAAQ,CAAA,EAAC,OAAA,GAAY,gBAAA,GAAmB,KAAA,CAAM,CAAA;sBAenD,IAAA,EACV,CAAA,EAAC,MAAA,GACC,gBAAA,EAAgB,OAAA,GACd,gBAAA,GACT,KAAA,CAAM,CAAA;6BAegB,IAAA,EAAQ,CAAA,EAAC,OAAA,GAAY,gBAAA,GAAmB,KAAA,CAAM,CAAA;AAAA;AAAA,cAgB5D,UAAA;;+BApFS,OAAA,GAAiB,gBAAA,KAAmB,KAAA,CAAM,CAAA;6BAe5C,KAAA,MACP,YAAA,GACM,CAAA,EAAC,OAAA,GACN,gBAAA,KACT,KAAA,CAAM,CAAA;6BAec,IAAA,EAAQ,CAAA,EAAC,OAAA,GAAY,gBAAA,KAAmB,KAAA,CAAM,CAAA;wBAenD,IAAA,EACV,CAAA,EAAC,MAAA,GACC,gBAAA,EAAgB,OAAA,GACd,gBAAA,KACT,KAAA,CAAM,CAAA;+BAegB,IAAA,EAAQ,CAAA,EAAC,OAAA,GAAY,gBAAA,KAAmB,KAAA,CAAM,CAAA;AAAA;AAAA,iBAyBzD,0BAAA,IAA8B,oBAAoB;AAAA,iBAmClD,UAAA,CACd,IAAA,UACA,OAAA,GAAS,iBAAA,GACR,UAAU;AAAA,iBAoDG,gBAAA,CACd,OAAA,GAAS,iBAAA,GACR,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/testing/index.ts"],"sourcesContent":["import type { Query, QueryStaleReason } from '../data';\nimport { parseSegments } from '../router/match';\nimport { computeRouteActivityMatches } from '../router/route';\nimport type {\n ParsedSegment,\n Route,\n RouteManifest,\n RouteMatch,\n RouteRecord,\n} from '../common/router';\nimport {\n addInvalidationListener,\n type InvalidationEvent,\n} from '../data/invalidation-listeners';\n\nexport type MockRefresh = () => void | Promise<void>;\n\nexport interface MockQueryOptions {\n refresh?: MockRefresh;\n}\n\nexport interface InvalidationRecord {\n prefix: string;\n markPendingWrite: boolean;\n}\n\nexport interface InvalidationRecorder {\n readonly calls: readonly InvalidationRecord[];\n readonly prefixes: readonly string[];\n clear(): void;\n stop(): void;\n}\n\ninterface MatchRouteOptions {\n manifest?: RouteManifest;\n routes?: readonly Route[];\n}\n\nexport interface RoutePatternWarning {\n kind: 'route-collision';\n path: string;\n conflictingPath: string;\n segment: string;\n namespace: string | undefined;\n message: string;\n}\n\ntype StaleValueReason = Exclude<QueryStaleReason, 'error'>;\n\nfunction normalizeRefresh(options?: MockQueryOptions): () => Promise<void> {\n return async () => {\n await options?.refresh?.();\n };\n}\n\nfunction makeQuery<T extends {}>(\n state: Omit<Query<T>, 'refresh'>,\n options?: MockQueryOptions\n): Query<T> {\n return {\n ...state,\n refresh: normalizeRefresh(options),\n } as Query<T>;\n}\n\nfunction createFreshQuery<T extends {}>(\n data: T,\n options?: MockQueryOptions\n): Query<T> {\n return makeQuery(\n {\n data,\n error: null,\n loading: false,\n refreshing: false,\n stale: false,\n consistency: 'fresh',\n staleReason: null,\n },\n options\n );\n}\n\nexport const mockQuery = Object.assign(createFreshQuery, {\n loading<T extends {} = {}>(options?: MockQueryOptions): Query<T> {\n return makeQuery<T>(\n {\n data: null,\n error: null,\n loading: true,\n refreshing: false,\n stale: false,\n consistency: 'fresh',\n staleReason: null,\n },\n options\n );\n },\n\n error<T extends {} = {}>(\n error: {},\n previousData?: T,\n options?: MockQueryOptions\n ): Query<T> {\n return makeQuery(\n {\n data: previousData ?? null,\n error,\n loading: false,\n refreshing: false,\n stale: true,\n consistency: 'stale',\n staleReason: 'error',\n } as Omit<Query<T>, 'refresh'>,\n options\n );\n },\n\n refreshing<T extends {}>(data: T, options?: MockQueryOptions): Query<T> {\n return makeQuery(\n {\n data,\n error: null,\n loading: false,\n refreshing: true,\n stale: true,\n consistency: 'refreshing',\n staleReason: null,\n },\n options\n );\n },\n\n stale<T extends {}>(\n data: T,\n reason: StaleValueReason = 'inconsistent',\n options?: MockQueryOptions\n ): Query<T> {\n return makeQuery(\n {\n data,\n error: null,\n loading: false,\n refreshing: false,\n stale: true,\n consistency: 'stale',\n staleReason: reason,\n },\n options\n );\n },\n\n pendingWrite<T extends {}>(data: T, options?: MockQueryOptions): Query<T> {\n return makeQuery(\n {\n data,\n error: null,\n loading: false,\n refreshing: true,\n stale: true,\n consistency: 'pending-write',\n staleReason: null,\n },\n options\n );\n },\n});\n\nexport const queryState = {\n fresh: createFreshQuery,\n loading: mockQuery.loading,\n error: mockQuery.error,\n refreshing: mockQuery.refreshing,\n stale: mockQuery.stale,\n pendingWrite: mockQuery.pendingWrite,\n};\n\nexport function createInvalidationRecorder(): InvalidationRecorder {\n const records: InvalidationRecord[] = [];\n let active = true;\n\n const unsubscribe = addInvalidationListener((event: InvalidationEvent) => {\n records.push({\n prefix: event.prefix,\n markPendingWrite: event.markPendingWrite,\n });\n });\n\n return {\n get calls() {\n return records.slice();\n },\n\n get prefixes() {\n return records.map((record) => record.prefix);\n },\n\n clear() {\n records.length = 0;\n },\n\n stop() {\n if (!active) {\n return;\n }\n\n active = false;\n unsubscribe();\n },\n };\n}\n\nexport function matchRoute(\n path: string,\n options: MatchRouteOptions = {}\n): RouteMatch | null {\n return computeRouteActivityMatches(path, options)[0] ?? null;\n}\n\ntype RoutePatternRecord = {\n path: string;\n segments: ParsedSegment[];\n namespace: string | undefined;\n};\n\nfunction getRoutePatternRecords(\n options: MatchRouteOptions\n): RoutePatternRecord[] {\n if (options.manifest) {\n return options.manifest.records.map((record: RouteRecord) => ({\n path: record.path,\n segments: record.segments,\n namespace: record.options.namespace,\n }));\n }\n\n return (options.routes ?? []).map((route) => ({\n path: route.path,\n segments: parseSegments(route.path),\n namespace: route.namespace,\n }));\n}\n\nfunction routePrefixMatches(\n splatPrefix: readonly ParsedSegment[],\n routeSegments: readonly ParsedSegment[]\n): boolean {\n if (routeSegments.length <= splatPrefix.length) {\n return false;\n }\n\n for (let index = 0; index < splatPrefix.length; index++) {\n const splatSegment = splatPrefix[index];\n const routeSegment = routeSegments[index];\n\n if (\n splatSegment.kind === 'static' &&\n routeSegment.kind === 'static' &&\n splatSegment.value !== routeSegment.value\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getRouteWarnings(\n options: MatchRouteOptions = {}\n): RoutePatternWarning[] {\n const records = getRoutePatternRecords(options);\n const warnings: RoutePatternWarning[] = [];\n\n for (const record of records) {\n const splatIndex = record.segments.findIndex(\n (segment) => segment.kind === 'splat'\n );\n if (splatIndex === -1) {\n continue;\n }\n\n const splatPrefix = record.segments.slice(0, splatIndex);\n for (const candidate of records) {\n if (\n candidate === record ||\n candidate.namespace !== record.namespace ||\n !routePrefixMatches(splatPrefix, candidate.segments)\n ) {\n continue;\n }\n\n const reservedSegment = candidate.segments[splatIndex];\n if (reservedSegment?.kind !== 'static') {\n continue;\n }\n\n warnings.push({\n kind: 'route-collision',\n path: record.path,\n conflictingPath: candidate.path,\n segment: reservedSegment.value,\n namespace: record.namespace,\n message: `Route \"${candidate.path}\" reserves segment \"${reservedSegment.value}\" under named splat route \"${record.path}\".`,\n });\n }\n }\n\n return warnings.sort((left, right) => {\n const pathOrder = left.path.localeCompare(right.path);\n if (pathOrder !== 0) {\n return pathOrder;\n }\n return left.conflictingPath.localeCompare(right.conflictingPath);\n });\n}\n"],"mappings":";;;;;AAiDA,SAAS,iBAAiB,SAAiD;CACzE,OAAO,YAAY;EACjB,MAAM,SAAS,UAAU;CAC3B;AACF;AAEA,SAAS,UACP,OACA,SACU;CACV,OAAO;EACL,GAAG;EACH,SAAS,iBAAiB,OAAO;CACnC;AACF;AAEA,SAAS,iBACP,MACA,SACU;CACV,OAAO,UACL;EACE;EACA,OAAO;EACP,SAAS;EACT,YAAY;EACZ,OAAO;EACP,aAAa;EACb,aAAa;CACf,GACA,OACF;AACF;AAEA,MAAa,YAAY,OAAO,OAAO,kBAAkB;CACvD,QAA2B,SAAsC;EAC/D,OAAO,UACL;GACE,MAAM;GACN,OAAO;GACP,SAAS;GACT,YAAY;GACZ,OAAO;GACP,aAAa;GACb,aAAa;EACf,GACA,OACF;CACF;CAEA,MACE,OACA,cACA,SACU;EACV,OAAO,UACL;GACE,MAAM,gBAAgB;GACtB;GACA,SAAS;GACT,YAAY;GACZ,OAAO;GACP,aAAa;GACb,aAAa;EACf,GACA,OACF;CACF;CAEA,WAAyB,MAAS,SAAsC;EACtE,OAAO,UACL;GACE;GACA,OAAO;GACP,SAAS;GACT,YAAY;GACZ,OAAO;GACP,aAAa;GACb,aAAa;EACf,GACA,OACF;CACF;CAEA,MACE,MACA,SAA2B,gBAC3B,SACU;EACV,OAAO,UACL;GACE;GACA,OAAO;GACP,SAAS;GACT,YAAY;GACZ,OAAO;GACP,aAAa;GACb,aAAa;EACf,GACA,OACF;CACF;CAEA,aAA2B,MAAS,SAAsC;EACxE,OAAO,UACL;GACE;GACA,OAAO;GACP,SAAS;GACT,YAAY;GACZ,OAAO;GACP,aAAa;GACb,aAAa;EACf,GACA,OACF;CACF;AACF,CAAC;AAED,MAAa,aAAa;CACxB,OAAO;CACP,SAAS,UAAU;CACnB,OAAO,UAAU;CACjB,YAAY,UAAU;CACtB,OAAO,UAAU;CACjB,cAAc,UAAU;AAC1B;AAEA,SAAgB,6BAAmD;CACjE,MAAM,UAAgC,CAAC;CACvC,IAAI,SAAS;CAEb,MAAM,cAAc,yBAAyB,UAA6B;EACxE,QAAQ,KAAK;GACX,QAAQ,MAAM;GACd,kBAAkB,MAAM;EAC1B,CAAC;CACH,CAAC;CAED,OAAO;EACL,IAAI,QAAQ;GACV,OAAO,QAAQ,MAAM;EACvB;EAEA,IAAI,WAAW;GACb,OAAO,QAAQ,KAAK,WAAW,OAAO,MAAM;EAC9C;EAEA,QAAQ;GACN,QAAQ,SAAS;EACnB;EAEA,OAAO;GACL,IAAI,CAAC,QACH;GAGF,SAAS;GACT,YAAY;EACd;CACF;AACF;AAEA,SAAgB,WACd,MACA,UAA6B,CAAC,GACX;CACnB,OAAO,4BAA4B,MAAM,OAAO,CAAC,CAAC,MAAM;AAC1D;AAQA,SAAS,uBACP,SACsB;CACtB,IAAI,QAAQ,UACV,OAAO,QAAQ,SAAS,QAAQ,KAAK,YAAyB;EAC5D,MAAM,OAAO;EACb,UAAU,OAAO;EACjB,WAAW,OAAO,QAAQ;CAC5B,EAAE;CAGJ,QAAQ,QAAQ,UAAU,CAAC,EAAA,CAAG,KAAK,WAAW;EAC5C,MAAM,MAAM;EACZ,UAAU,cAAc,MAAM,IAAI;EAClC,WAAW,MAAM;CACnB,EAAE;AACJ;AAEA,SAAS,mBACP,aACA,eACS;CACT,IAAI,cAAc,UAAU,YAAY,QACtC,OAAO;CAGT,KAAK,IAAI,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS;EACvD,MAAM,eAAe,YAAY;EACjC,MAAM,eAAe,cAAc;EAEnC,IACE,aAAa,SAAS,YACtB,aAAa,SAAS,YACtB,aAAa,UAAU,aAAa,OAEpC,OAAO;CAEX;CAEA,OAAO;AACT;AAEA,SAAgB,iBACd,UAA6B,CAAC,GACP;CACvB,MAAM,UAAU,uBAAuB,OAAO;CAC9C,MAAM,WAAkC,CAAC;CAEzC,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,aAAa,OAAO,SAAS,WAChC,YAAY,QAAQ,SAAS,OAChC;EACA,IAAI,eAAe,IACjB;EAGF,MAAM,cAAc,OAAO,SAAS,MAAM,GAAG,UAAU;EACvD,KAAK,MAAM,aAAa,SAAS;GAC/B,IACE,cAAc,UACd,UAAU,cAAc,OAAO,aAC/B,CAAC,mBAAmB,aAAa,UAAU,QAAQ,GAEnD;GAGF,MAAM,kBAAkB,UAAU,SAAS;GAC3C,IAAI,iBAAiB,SAAS,UAC5B;GAGF,SAAS,KAAK;IACZ,MAAM;IACN,MAAM,OAAO;IACb,iBAAiB,UAAU;IAC3B,SAAS,gBAAgB;IACzB,WAAW,OAAO;IAClB,SAAS,UAAU,UAAU,KAAK,sBAAsB,gBAAgB,MAAM,6BAA6B,OAAO,KAAK;GACzH,CAAC;EACH;CACF;CAEA,OAAO,SAAS,MAAM,MAAM,UAAU;EACpC,MAAM,YAAY,KAAK,KAAK,cAAc,MAAM,IAAI;EACpD,IAAI,cAAc,GAChB,OAAO;EAET,OAAO,KAAK,gBAAgB,cAAc,MAAM,eAAe;CACjE,CAAC;AACH"}