@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askrjs/askr",
3
- "version": "0.0.50",
3
+ "version": "0.0.52",
4
4
  "description": "Actor-backed deterministic UI framework",
5
5
  "keywords": [
6
6
  "askr",
@@ -20,10 +20,14 @@
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "https://github.com/askrjs/askr.git"
23
+ "url": "git+https://github.com/askrjs/askr.git"
24
+ },
25
+ "bin": {
26
+ "askr-ssg": "./dist/bin/askr-ssg.js"
24
27
  },
25
28
  "files": [
26
- "dist"
29
+ "dist/**/*.js",
30
+ "dist/**/*.d.ts"
27
31
  ],
28
32
  "type": "module",
29
33
  "sideEffects": [
@@ -33,80 +37,80 @@
33
37
  "types": "./dist/index.d.ts",
34
38
  "exports": {
35
39
  ".": {
36
- "import": "./dist/index.js",
37
- "types": "./dist/index.d.ts"
40
+ "types": "./dist/index.d.ts",
41
+ "import": "./dist/index.js"
38
42
  },
39
43
  "./boot": {
40
- "import": "./dist/boot/index.js",
41
- "types": "./dist/boot/index.d.ts"
44
+ "types": "./dist/boot/index.d.ts",
45
+ "import": "./dist/boot/index.js"
42
46
  },
43
47
  "./components": {
44
- "import": "./dist/components/index.js",
45
- "types": "./dist/components/index.d.ts"
48
+ "types": "./dist/components/index.d.ts",
49
+ "import": "./dist/components/index.js"
46
50
  },
47
51
  "./control": {
48
- "import": "./dist/control/index.js",
49
- "types": "./dist/control/index.d.ts"
52
+ "types": "./dist/control/index.d.ts",
53
+ "import": "./dist/control/index.js"
50
54
  },
51
55
  "./foundations": {
52
- "import": "./dist/foundations/index.js",
53
- "types": "./dist/foundations/index.d.ts"
56
+ "types": "./dist/foundations/index.d.ts",
57
+ "import": "./dist/foundations/index.js"
54
58
  },
55
59
  "./foundations/utilities": {
56
- "import": "./dist/foundations/utilities/index.js",
57
- "types": "./dist/foundations/utilities/index.d.ts"
60
+ "types": "./dist/foundations/utilities/index.d.ts",
61
+ "import": "./dist/foundations/utilities/index.js"
58
62
  },
59
63
  "./foundations/interactions": {
60
- "import": "./dist/foundations/interactions/index.js",
61
- "types": "./dist/foundations/interactions/index.d.ts"
64
+ "types": "./dist/foundations/interactions/index.d.ts",
65
+ "import": "./dist/foundations/interactions/index.js"
62
66
  },
63
67
  "./foundations/state": {
64
- "import": "./dist/foundations/state/index.js",
65
- "types": "./dist/foundations/state/index.d.ts"
68
+ "types": "./dist/foundations/state/index.d.ts",
69
+ "import": "./dist/foundations/state/index.js"
66
70
  },
67
71
  "./foundations/structures": {
68
- "import": "./dist/foundations/structures/index.js",
69
- "types": "./dist/foundations/structures/index.d.ts"
72
+ "types": "./dist/foundations/structures/index.d.ts",
73
+ "import": "./dist/foundations/structures/index.js"
70
74
  },
71
75
  "./foundations/icon": {
72
- "import": "./dist/foundations/icon/index.js",
73
- "types": "./dist/foundations/icon/index.d.ts"
76
+ "types": "./dist/foundations/icon/index.d.ts",
77
+ "import": "./dist/foundations/icon/index.js"
74
78
  },
75
79
  "./resources": {
76
- "import": "./dist/resources/index.js",
77
- "types": "./dist/resources/index.d.ts"
80
+ "types": "./dist/resources/index.d.ts",
81
+ "import": "./dist/resources/index.js"
78
82
  },
79
83
  "./data": {
80
- "import": "./dist/data/index.js",
81
- "types": "./dist/data/index.d.ts"
84
+ "types": "./dist/data/index.d.ts",
85
+ "import": "./dist/data/index.js"
82
86
  },
83
87
  "./testing": {
84
- "import": "./dist/testing/index.js",
85
- "types": "./dist/testing/index.d.ts"
88
+ "types": "./dist/testing/index.d.ts",
89
+ "import": "./dist/testing/index.js"
86
90
  },
87
91
  "./fx": {
88
- "import": "./dist/fx/index.js",
89
- "types": "./dist/fx/index.d.ts"
92
+ "types": "./dist/fx/index.d.ts",
93
+ "import": "./dist/fx/index.js"
90
94
  },
91
95
  "./router": {
92
- "import": "./dist/router/index.js",
93
- "types": "./dist/router/index.d.ts"
96
+ "types": "./dist/router/index.d.ts",
97
+ "import": "./dist/router/index.js"
94
98
  },
95
99
  "./ssr": {
96
- "import": "./dist/ssr/index.js",
97
- "types": "./dist/ssr/index.d.ts"
100
+ "types": "./dist/ssr/index.d.ts",
101
+ "import": "./dist/ssr/index.js"
98
102
  },
99
103
  "./ssg": {
100
- "import": "./dist/ssg/index.js",
101
- "types": "./dist/ssg/index.d.ts"
104
+ "types": "./dist/ssg/index.d.ts",
105
+ "import": "./dist/ssg/index.js"
102
106
  },
103
107
  "./jsx-runtime": {
104
- "import": "./dist/jsx-runtime.js",
105
- "types": "./dist/jsx-runtime.d.ts"
108
+ "types": "./dist/jsx-runtime.d.ts",
109
+ "import": "./dist/jsx-runtime.js"
106
110
  },
107
111
  "./jsx-dev-runtime": {
108
- "import": "./dist/jsx-dev-runtime.js",
109
- "types": "./dist/jsx-dev-runtime.d.ts"
112
+ "types": "./dist/jsx-dev-runtime.d.ts",
113
+ "import": "./dist/jsx-dev-runtime.js"
110
114
  }
111
115
  },
112
116
  "publishConfig": {
@@ -124,22 +128,31 @@
124
128
  "test:checks": "vp test run -c vitest.test.checks.config.ts",
125
129
  "test:jsdom": "vp test run -c vitest.test.jsdom.config.ts",
126
130
  "test:types": "vp pack && tsd --files \"tests/types/**/*.test-d.ts\" --files \"tests/types/**/*.test-d.tsx\"",
131
+ "test:publint": "publint",
132
+ "release:verify": "npm run lint && npm run build && npm run test:publint && npm run test:checks && npm run test:types && npm run test:unit && npm run test:jsdom && npm run test:browser",
127
133
  "test:unit": "vp test run -c vitest.test.unit.config.ts",
128
134
  "bench": "npm run bench:tier1 && npm run bench:tier2 && npm run bench:tier3 && npm run bench:tier4",
129
135
  "bench:tier1": "cross-env NODE_ENV=production vp test bench --run --reporter=default --config vitest.bench.tier1.config.ts",
130
136
  "bench:tier2": "cross-env NODE_ENV=production vp test bench --run --reporter=default --config vitest.bench.tier2.config.ts",
131
137
  "bench:tier3": "cross-env NODE_ENV=production vp test bench --run --reporter=default --config vitest.bench.tier3.config.ts",
132
- "bench:tier4": "cross-env NODE_ENV=production vp test bench --run --reporter=default --config vitest.bench.tier4.config.ts"
138
+ "bench:tier4": "cross-env NODE_ENV=production vp test bench --run --reporter=default --config vitest.bench.tier4.config.ts",
139
+ "prepack": "npm run build",
140
+ "prepublishOnly": "npm run release:verify"
141
+ },
142
+ "dependencies": {
143
+ "tsx": "^4.23.0"
133
144
  },
134
145
  "devDependencies": {
135
- "@types/node": "^26.0.1",
136
- "@vitest/browser-playwright": "4.1.9",
146
+ "@types/node": "^26.1.1",
147
+ "@vitest/browser-playwright": "4.1.10",
137
148
  "cross-env": "^10.1.0",
138
149
  "jsdom": "^29.1.1",
139
150
  "playwright": "^1.61.1",
151
+ "publint": "^0.3.21",
140
152
  "tsd": "^0.33.0",
141
- "typescript": "^6.0.3",
142
- "vite-plus": "^0.2.1"
153
+ "typescript": "6.0.3",
154
+ "vite": "^8.1.4",
155
+ "vite-plus": "^0.2.4"
143
156
  },
144
157
  "tsd": {
145
158
  "compilerOptions": {
@@ -151,7 +164,7 @@
151
164
  "engines": {
152
165
  "node": ">=18"
153
166
  },
154
- "packageManager": "npm@11.18.0",
167
+ "packageManager": "npm@12.0.1",
155
168
  "allowScripts": {
156
169
  "fsevents@2.3.3": true,
157
170
  "fsevents@2.3.2": true
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-row.d.ts","names":[],"sources":["../../../src/bench/components/benchmark-row.tsx"],"mappings":";UAAiB,gBAAA;EACf,EAAA;EACA,KAAK;AAAA;AAAA,UAGG,iBAAA;EACR,IAAA,EAAM,gBAAgB;EACtB,UAAA,GAAa,EAAA;EACb,QAAA,GAAW,EAAA;EACX,QAAA,GAAW,EAAA;AAAA;AAAA,iBAGG,YAAA;EACd,IAAA;EACA,UAAA;EACA,QAAA;EACA;AAAA,GACC,iBAAA,GAAiB,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-row.js","names":[],"sources":["../../../src/bench/components/benchmark-row.tsx"],"sourcesContent":["export interface BenchmarkRowData {\n id: number;\n label: string;\n}\n\ninterface BenchmarkRowProps {\n item: BenchmarkRowData;\n isSelected: (id: number) => boolean;\n onSelect: (id: number) => void;\n onRemove: (id: number) => void;\n}\n\nexport function BenchmarkRow({\n item,\n isSelected,\n onSelect,\n onRemove,\n}: BenchmarkRowProps) {\n return (\n <tr class={() => (isSelected(item.id) ? 'danger' : '')}>\n <td key=\"id\" class=\"col-md-1\">\n {() => item.id}\n </td>\n <td key=\"label\" class=\"col-md-4\">\n <a\n onClick={(event: MouseEvent) => {\n event.preventDefault();\n onSelect(item.id);\n }}\n >\n {() => item.label}\n </a>\n </td>\n <td key=\"remove\" class=\"col-md-1\">\n <a\n onClick={(event: MouseEvent) => {\n event.preventDefault();\n onRemove(item.id);\n }}\n >\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\" />\n </a>\n </td>\n <td key=\"spacer\" class=\"col-md-6\" />\n </tr>\n );\n}\n"],"mappings":";;;AAYA,SAAgB,aAAa,EAC3B,MACA,YACA,UACA,YACoB;CACpB,OACE,qBAAC,MAAD;EAAI,aAAc,WAAW,KAAK,EAAE,IAAI,WAAW;YAAnD;GACE,oBAAC,MAAD;IAAa,OAAM;oBACV,KAAK;GACV,GAFI,IAEJ;GACJ,oBAAC,MAAD;IAAgB,OAAM;cACpB,oBAAC,KAAD;KACE,UAAU,UAAsB;MAC9B,MAAM,eAAe;MACrB,SAAS,KAAK,EAAE;KAClB;qBAEO,KAAK;IACX,CAAA;GACD,GATI,OASJ;GACJ,oBAAC,MAAD;IAAiB,OAAM;cACrB,oBAAC,KAAD;KACE,UAAU,UAAsB;MAC9B,MAAM,eAAe;MACrB,SAAS,KAAK,EAAE;KAClB;eAEA,oBAAC,QAAD;MAAM,OAAM;MAA6B,eAAY;KAAQ,CAAA;IAC5D,CAAA;GACD,GATI,QASJ;GACJ,oBAAC,MAAD,EAAiB,OAAM,WAAY,GAA3B,QAA2B;EACjC;;AAER"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-table.js","names":[],"sources":["../../../src/bench/components/benchmark-table.tsx"],"sourcesContent":["import { For } from '../../control';\nimport type { State } from '../../runtime/state';\nimport { BenchmarkRow, type BenchmarkRowData } from './benchmark-row';\n\ninterface BenchmarkTableProps {\n rows: State<BenchmarkRowData[]>;\n isSelected: (id: number) => boolean;\n onSelect: (id: number) => void;\n onRemove: (id: number) => void;\n}\n\nexport function BenchmarkTable({\n rows,\n isSelected,\n onSelect,\n onRemove,\n}: BenchmarkTableProps) {\n return (\n <table class=\"table table-hover table-striped test-data\">\n <tbody>\n {\n <For each={() => rows()} by={(item) => item.id}>\n {(item) => (\n <BenchmarkRow\n item={item}\n isSelected={isSelected}\n onSelect={onSelect}\n onRemove={onRemove}\n />\n )}\n </For>\n }\n </tbody>\n </table>\n );\n}\n"],"mappings":";;;;;;AAWA,SAAgB,eAAe,EAC7B,MACA,YACA,UACA,YACsB;CACtB,OACE,oBAAC,SAAD;EAAO,OAAM;YACX,oBAAC,SAAD,EAAA,UAEI,oBAAC,KAAD;GAAK,YAAY,KAAK;GAAG,KAAK,SAAS,KAAK;cACxC,SACA,oBAAC,cAAD;IACQ;IACM;IACF;IACA;GACX,CAAA;EAEA,CAAA,EAEF,CAAA;CACF,CAAA;AAEX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.d.ts","names":[],"sources":["../src/bench/benchmark-entry.tsx"],"mappings":";;;KAWK,OAAA,GAAU,gBAAgB;AAAA,UAEd,iBAAA;EACf,WAAA;EACA,cAAA;EACA,UAAA;AAAA;AAAA,cAYW,iBAAA,EAAmB,iBAK/B;AAAA,iBAEe,oBAAA,IAAwB,iBAAiB;AAAA,iBAIzC,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,WAAA,GAAc,OAAA;gBAmC1C,OAAA;;;;cAcjB,QAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.js","names":[],"sources":["../src/bench/benchmark-entry.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createIsland } from '../boot';\nimport { installRendererBridge } from '../renderer';\nimport { flushRuntimeScheduler } from '../runtime/access';\nimport { selector } from '../runtime/selector';\nimport { state, State } from '../runtime/state';\nimport { BenchmarkTable } from './components/benchmark-table';\nimport type { BenchmarkRowData } from './components/benchmark-row';\n\ninstallRendererBridge();\n\ntype RowData = BenchmarkRowData;\n\nexport interface BenchmarkMetadata {\n packageName: string;\n packageVersion: string;\n buildLabel: string;\n}\n\nconst packageName =\n process.env.ASKR_PACKAGE_NAME ||\n process.env.npm_package_name ||\n '@askrjs/askr';\nconst packageVersion =\n process.env.ASKR_PACKAGE_VERSION ||\n process.env.npm_package_version ||\n '0.0.0';\n\nexport const benchmarkMetadata: BenchmarkMetadata = {\n packageName,\n packageVersion,\n buildLabel:\n process.env.ASKR_BENCHMARK_BUILD_LABEL || `${packageVersion}-local`,\n};\n\nexport function getBenchmarkMetadata(): BenchmarkMetadata {\n return { ...benchmarkMetadata };\n}\n\nexport function mountBenchmark(root: Element, initialRows?: RowData[]) {\n const initialRowsTyped: RowData[] = Array.isArray(initialRows)\n ? initialRows\n : [];\n let dataState!: State<RowData[]>;\n let selectedState!: State<number | null>;\n\n const App = () => {\n dataState = state<RowData[]>(initialRowsTyped);\n selectedState = state<number | null>(null);\n dataState._hasBeenRead = true;\n const isSelected = selector(selectedState);\n\n const select = (id: number) => selectedState.set(id);\n const remove = (id: number) => {\n dataState.set((rows) => rows.filter((item) => item.id !== id));\n selectedState.set((selected) => (selected === id ? null : selected));\n };\n\n return (\n <div class=\"container\">\n <BenchmarkTable\n rows={dataState}\n isSelected={isSelected}\n onSelect={select}\n onRemove={remove}\n />\n </div>\n );\n };\n\n createIsland({ root, component: App as any });\n flushRuntimeScheduler();\n\n return {\n setRows(rows: RowData[]) {\n dataState.set(rows);\n // Ensure work is flushed so external harnesses (like JFB) that check the DOM\n // immediately after calling `setRows` observe the committed DOM.\n flushRuntimeScheduler();\n },\n setSelected(id: number | null) {\n selectedState.set(id);\n flushRuntimeScheduler();\n },\n cleanup() {\n // nothing to do; outer test may clean the container\n },\n };\n}\n\nexport default { mountBenchmark };\n"],"mappings":";;;;;;;;;AASA,sBAAsB;AAmBtB,MAAa,oBAAuC;CAClD;CACA;CACA,YAAA;AAEF;AAEA,SAAgB,uBAA0C;CACxD,OAAO,EAAE,GAAG,kBAAkB;AAChC;AAEA,SAAgB,eAAe,MAAe,aAAyB;CACrE,MAAM,mBAA8B,MAAM,QAAQ,WAAW,IACzD,cACA,CAAC;CACL,IAAI;CACJ,IAAI;CAEJ,MAAM,YAAY;EAChB,YAAY,MAAiB,gBAAgB;EAC7C,gBAAgB,MAAqB,IAAI;EACzC,UAAU,eAAe;EACzB,MAAM,aAAa,SAAS,aAAa;EAEzC,MAAM,UAAU,OAAe,cAAc,IAAI,EAAE;EACnD,MAAM,UAAU,OAAe;GAC7B,UAAU,KAAK,SAAS,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,CAAC;GAC7D,cAAc,KAAK,aAAc,aAAa,KAAK,OAAO,QAAS;EACrE;EAEA,OACE,oBAAC,OAAD;GAAK,OAAM;aACT,oBAAC,gBAAD;IACE,MAAM;IACM;IACZ,UAAU;IACV,UAAU;GACX,CAAA;EACE,CAAA;CAET;CAEA,aAAa;EAAE;EAAM,WAAW;CAAW,CAAC;CAC5C,sBAAsB;CAEtB,OAAO;EACL,QAAQ,MAAiB;GACvB,UAAU,IAAI,IAAI;GAGlB,sBAAsB;EACxB;EACA,YAAY,IAAmB;GAC7B,cAAc,IAAI,EAAE;GACpB,sBAAsB;EACxB;EACA,UAAU,CAEV;CACF;AACF;AAEA,IAAA,0BAAe,EAAE,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"askr-ssg.d.ts","names":[],"sources":["../../src/bin/askr-ssg.ts"],"mappings":";;UAuBiB,aAAA;EACf,UAAA;EACA,SAAA;EACA,OAAA;EACA,WAAA;EACA,WAAA;EACA,aAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,UAGQ,KAAA;EACR,GAAA,MAAS,IAAA;EACT,KAAA,MAAW,IAAA;AAAA;AAAA,UAGH,OAAA;EACR,GAAA;EACA,GAAA;EACA,UAAA,GAAa,IAAA;EACb,YAAA,GAAe,IAAA,aAAiB,OAAA,CAAQ,MAAA;EACxC,eAAA,SAAwB,eAAA;AAAA;AAAA,iBA2CV,YAAA,CAAa,IAAA,aAAiB,aAAa;AAAA,iBAqErC,MAAA,CACpB,IAAA,YACA,IAAA,GAAM,OAAA,CAAQ,OAAA,GACd,EAAA,GAAI,KAAA,GACH,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"askr-ssg.js","names":[],"sources":["../../src/bin/askr-ssg.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * askr-ssg CLI\n *\n * Usage: askr-ssg --config path/to/config.ts --output dist/static\n */\n\nimport * as pathModule from 'path';\nimport * as fsModule from 'fs';\nimport { createStaticGen } from '../ssg/index';\nimport type { RouteConfig } from '../ssg/types';\nimport type { SSGGenerateOptions, SSGResult } from '../ssg/types';\n\nconst { resolve } = pathModule;\nconst { existsSync } = fsModule;\n\nfunction toFileUrl(filePath: string): string {\n const normalized = resolve(filePath).replace(/\\\\/g, '/');\n const leadingSlash = normalized.startsWith('/') ? '' : '/';\n return `file://${leadingSlash}${encodeURI(normalized)}`;\n}\n\nexport interface ParsedCliArgs {\n configPath: string;\n outputDir: string;\n workers: number | 'auto';\n incremental: boolean;\n changedKeys: string[];\n changedRoutes: string[];\n forceFull: boolean;\n help: boolean;\n}\n\ninterface CliIo {\n log: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\ninterface CliDeps {\n cwd: () => string;\n now: () => number;\n existsSync: (path: string) => boolean;\n importConfig: (path: string) => Promise<Record<string, unknown>>;\n createStaticGen: typeof createStaticGen;\n}\n\ninterface CliConfig {\n routes: RouteConfig[];\n seed?: number;\n dataOverrides?: Record<string, unknown>;\n concurrency?: number;\n}\n\nconst defaultCliDeps: CliDeps = {\n cwd: () => process.cwd(),\n now: () => performance.now(),\n existsSync,\n importConfig: async (path: string) =>\n (await import(toFileUrl(path))) as Record<string, unknown>,\n createStaticGen,\n};\n\nconst helpText = `\naskr-ssg - Static Site Generation for Askr\n\nUsage:\n askr-ssg --config <path> --output <dir> [--incremental]\n\nOptions:\n --config <path> Path to SSG config file (TypeScript module)\n --output <dir> Output directory for generated HTML\n --workers <n|auto> Preferred render worker count for SSG throughput\n --incremental Use incremental generation if a manifest exists\n --changed-key <key> Mark an invalidation key as changed (repeatable)\n --changed-route <path> Mark a concrete route path as changed (repeatable)\n --force-full Force a full rebuild even with incremental flags\n --help Show this help message\n\nExample:\n askr-ssg --config ./ssg.config.ts --output ./dist/static --incremental --changed-key blog/post-123\n\nTypeScript config execution:\n Use tsx to run the CLI with TS config loading:\n tsx node_modules/@askrjs/askr/dist/bin/askr-ssg.js --config ./ssg.config.ts --output ./dist/static\n`;\n\nexport function parseCliArgs(args: string[]): ParsedCliArgs {\n const parsed: ParsedCliArgs = {\n configPath: '',\n outputDir: '',\n workers: 1,\n incremental: false,\n changedKeys: [],\n changedRoutes: [],\n forceFull: false,\n help: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === '--config' && i + 1 < args.length) {\n parsed.configPath = args[i + 1];\n i++;\n } else if (args[i] === '--output' && i + 1 < args.length) {\n parsed.outputDir = args[i + 1];\n i++;\n } else if (args[i] === '--workers' && i + 1 < args.length) {\n parsed.workers = args[i + 1] === 'auto' ? 'auto' : Number(args[i + 1]);\n i++;\n } else if (args[i] === '--changed-key' && i + 1 < args.length) {\n parsed.changedKeys.push(args[i + 1]);\n i++;\n } else if (args[i] === '--changed-route' && i + 1 < args.length) {\n parsed.changedRoutes.push(args[i + 1]);\n i++;\n } else if (args[i] === '--incremental') {\n parsed.incremental = true;\n } else if (args[i] === '--force-full') {\n parsed.forceFull = true;\n } else if (args[i] === '--help' || args[i] === '-h') {\n parsed.help = true;\n }\n }\n\n return parsed;\n}\n\nfunction toGenerateOptions(args: ParsedCliArgs): SSGGenerateOptions {\n return {\n mode: args.incremental ? 'incremental' : 'full',\n changedKeys: args.changedKeys,\n changedRoutes: args.changedRoutes,\n forceFull: args.forceFull,\n };\n}\n\nfunction printSummary(\n io: CliIo,\n outputDir: string,\n durationSeconds: string,\n result: SSGResult\n) {\n io.log('');\n io.log(`Generation complete in ${durationSeconds}s`);\n io.log(` Mode: ${result.mode}`);\n io.log(` Generated: ${result.successful}/${result.totalRoutes} routes`);\n io.log(` Failed: ${result.failed} routes`);\n io.log(` Rebuilt: ${result.rebuilt} routes`);\n io.log(` Skipped: ${result.skipped} routes`);\n io.log(` Removed: ${result.removed} routes`);\n io.log(` CacheHit: ${result.cacheHits} routes`);\n io.log(` Output: ${outputDir}`);\n io.log(` Metadata: ${outputDir}/metadata.json`);\n io.log('');\n}\n\nexport async function runCli(\n args: string[],\n deps: Partial<CliDeps> = {},\n io: CliIo = console\n): Promise<number> {\n const parsed = parseCliArgs(args);\n if (parsed.help) {\n io.log(helpText);\n return 0;\n }\n\n if (!parsed.configPath) {\n io.error('Error: --config argument is required');\n return 1;\n }\n\n if (!parsed.configPath.endsWith('.ts')) {\n io.error('Error: --config must point to a TypeScript file (.ts)');\n return 1;\n }\n\n if (!parsed.outputDir) {\n io.error('Error: --output argument is required');\n return 1;\n }\n\n const resolvedDeps = { ...defaultCliDeps, ...deps };\n const resolvedConfigPath = resolve(resolvedDeps.cwd(), parsed.configPath);\n const resolvedOutputDir = resolve(resolvedDeps.cwd(), parsed.outputDir);\n\n if (!resolvedDeps.existsSync(resolvedConfigPath)) {\n io.error(`Error: Config file not found: ${resolvedConfigPath}`);\n return 1;\n }\n\n try {\n io.log(`Loading config: ${resolvedConfigPath}`);\n\n const configModule = await resolvedDeps.importConfig(resolvedConfigPath);\n const config = (configModule.default || configModule) as Partial<CliConfig>;\n\n if (!Array.isArray(config.routes)) {\n io.error('Error: Config must export routes array');\n return 1;\n }\n\n io.log(`Generating ${config.routes.length} routes...`);\n\n const ssg = resolvedDeps.createStaticGen({\n routes: config.routes,\n outputDir: resolvedOutputDir,\n seed: config.seed,\n dataOverrides: config.dataOverrides,\n concurrency: config.concurrency,\n parallelism: parsed.workers,\n });\n\n const startTime = resolvedDeps.now();\n const result = await ssg.generate(toGenerateOptions(parsed));\n const duration = ((resolvedDeps.now() - startTime) / 1000).toFixed(2);\n\n printSummary(io, resolvedOutputDir, duration, result);\n\n if (result.failed > 0) {\n io.log('Errors encountered:');\n for (const route of result.routes) {\n if (route.status === 'error') {\n io.log(` ${route.path}: ${route.error}`);\n }\n }\n io.log('');\n return 1;\n }\n\n return 0;\n } catch (error) {\n io.error('Generation failed:');\n io.error(error instanceof Error ? error.message : String(error));\n if (error instanceof Error && error.stack) {\n io.error(error.stack);\n }\n return 1;\n }\n}\n\nasync function main() {\n const exitCode = await runCli(process.argv.slice(2));\n process.exit(exitCode);\n}\n\nif (process.argv[1] && import.meta.url === toFileUrl(process.argv[1])) {\n void main();\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydration.js","names":[],"sources":["../../src/boot/hydration.ts"],"sourcesContent":["import { isProductionEnvironment } from '../common/env';\nimport { SSR_RENDER_DATA_ATTR, type SSRData } from '../common/ssr';\nimport type { ResolvedRoute } from '../common/router';\nimport type { ComponentFunction } from '../runtime/component';\nimport { setStaticChildSlotsCacheEnabled } from '../renderer/dom';\nimport type { BootAppRouteSource, HydrateSPAConfig } from './types';\n\ntype MountOrUpdateRoot = (\n rootElement: Element,\n componentFn: ComponentFunction,\n options?: { cleanupStrict?: boolean }\n) => void;\n\nexport type HydrationRuntimeHooks = {\n mountOrUpdate: MountOrUpdateRoot;\n registerAppNavigation: (\n rootElement: Element,\n path: string,\n source?: BootAppRouteSource\n ) => Promise<void>;\n registerRootCleanupCallback: (\n rootElement: Element,\n callback: () => void\n ) => () => void;\n flushHydrationActivation: (rootElement: Element) => void;\n};\n\nexport function takeHydrationRenderData(rootElement: Element): SSRData | null {\n for (const child of Array.from(rootElement.children)) {\n if (\n child instanceof HTMLScriptElement &&\n child.getAttribute(SSR_RENDER_DATA_ATTR) === 'true'\n ) {\n const raw = child.textContent ?? '';\n child.remove();\n if (!raw) {\n return {};\n }\n\n try {\n return JSON.parse(raw) as SSRData;\n } catch (err) {\n const error = new Error(\n '[Askr] Failed to parse embedded SSR render data during hydration.'\n );\n (error as Error & { cause?: unknown }).cause = err;\n throw error;\n }\n }\n }\n\n return null;\n}\n\nexport function markSkippedElements(\n root: Element,\n skipSelectors: string[]\n): void {\n if (skipSelectors.length === 0) {\n return;\n }\n\n const uniqueSelectors = Array.from(new Set(skipSelectors));\n const selectorList = uniqueSelectors.join(', ');\n const elements = root.querySelectorAll(selectorList);\n elements.forEach((el) => el.setAttribute('data-skip-hydrate', 'true'));\n}\n\nfunction collectDeferredBelowFoldBoundaries(\n root: Element,\n foldY: number\n): Element[] {\n const boundaries: Element[] = [];\n const stack: Element[] = [];\n\n for (let index = root.children.length - 1; index >= 0; index -= 1) {\n stack.push(root.children[index]);\n }\n\n while (stack.length > 0) {\n const element = stack.pop()!;\n\n if (element.hasAttribute('data-skip-hydrate')) {\n continue;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.top >= foldY) {\n element.setAttribute('data-skip-hydrate', 'true');\n boundaries.push(element);\n continue;\n }\n\n for (let index = element.children.length - 1; index >= 0; index -= 1) {\n stack.push(element.children[index]);\n }\n }\n\n return boundaries;\n}\n\nfunction activateVisibleDeferredBoundaries(\n boundaries: Element[],\n foldY: number\n): { activated: boolean; remaining: number } {\n let activated = false;\n let remaining = 0;\n\n for (const element of boundaries) {\n if (!element.hasAttribute('data-skip-hydrate')) {\n continue;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.top < foldY) {\n element.removeAttribute('data-skip-hydrate');\n activated = true;\n } else {\n remaining += 1;\n }\n }\n\n return { activated, remaining };\n}\n\nfunction queueIdleWork(work: () => void): Promise<void> {\n return new Promise((resolve) => {\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(\n () => {\n work();\n resolve();\n },\n { timeout: 2000 }\n );\n return;\n }\n\n setTimeout(() => {\n work();\n resolve();\n }, 0);\n });\n}\n\nexport function shouldVerifyHydrationMarkup(config: HydrateSPAConfig): boolean {\n const explicit = config.hydrate?.verifyMarkup;\n if (typeof explicit === 'boolean') {\n return explicit;\n }\n\n return !isProductionEnvironment();\n}\n\nexport async function applySelectiveHydration(\n rootElement: Element,\n resolved: ResolvedRoute,\n path: string,\n cleanupStrict: boolean | undefined,\n hydrateOptions: NonNullable<HydrateSPAConfig['hydrate']>,\n source: BootAppRouteSource | undefined,\n hooks: HydrationRuntimeHooks\n): Promise<void> {\n const hasPermanentSkips = (hydrateOptions.skipSelectors?.length ?? 0) > 0;\n const hasBelowFoldDeferral = !!hydrateOptions.deferBelowFold;\n const hasSelectiveBoundaries = hasPermanentSkips || hasBelowFoldDeferral;\n let staticChildSlotsCacheSuspended = false;\n let releaseSelectiveHydrationResources = () => {};\n\n const restoreStaticChildSlotsCache = () => {\n if (!staticChildSlotsCacheSuspended) {\n return;\n }\n\n setStaticChildSlotsCacheEnabled(true);\n staticChildSlotsCacheSuspended = false;\n };\n\n if (hydrateOptions.skipSelectors?.length) {\n markSkippedElements(rootElement, hydrateOptions.skipSelectors);\n }\n\n let deferredBoundaries: Element[] = [];\n if (hydrateOptions.deferBelowFold) {\n setStaticChildSlotsCacheEnabled(false);\n staticChildSlotsCacheSuspended = true;\n const foldY = hydrateOptions.foldThreshold ?? window.innerHeight;\n deferredBoundaries = collectDeferredBelowFoldBoundaries(rootElement, foldY);\n\n let selectiveHydrationResourcesReleased = false;\n let unregisterRootCleanupCallback = () => {};\n\n function handleScroll() {\n const { activated, remaining } = activateVisibleDeferredBoundaries(\n deferredBoundaries,\n foldY\n );\n\n if (!activated) {\n return;\n }\n\n hooks.flushHydrationActivation(rootElement);\n\n if (remaining === 0) {\n releaseSelectiveHydrationResources();\n }\n }\n\n releaseSelectiveHydrationResources = () => {\n if (selectiveHydrationResourcesReleased) {\n return;\n }\n\n selectiveHydrationResourcesReleased = true;\n unregisterRootCleanupCallback();\n window.removeEventListener('scroll', handleScroll);\n restoreStaticChildSlotsCache();\n };\n\n unregisterRootCleanupCallback = hooks.registerRootCleanupCallback(\n rootElement,\n releaseSelectiveHydrationResources\n );\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n }\n\n if (hydrateOptions.deferUntilIdle && !hasSelectiveBoundaries) {\n await queueIdleWork(() => {\n hooks.mountOrUpdate(\n rootElement,\n (() => resolved.handler(resolved.params)) as ComponentFunction,\n {\n cleanupStrict,\n }\n );\n });\n await hooks.registerAppNavigation(rootElement, path, source);\n return;\n }\n\n try {\n hooks.mountOrUpdate(\n rootElement,\n (() => resolved.handler(resolved.params)) as ComponentFunction,\n {\n cleanupStrict,\n }\n );\n await hooks.registerAppNavigation(rootElement, path, source);\n } catch (error) {\n releaseSelectiveHydrationResources();\n throw error;\n }\n\n if (hydrateOptions.deferUntilIdle && deferredBoundaries.length > 0) {\n await queueIdleWork(() => {\n try {\n const { activated } = activateVisibleDeferredBoundaries(\n deferredBoundaries,\n Number.POSITIVE_INFINITY\n );\n if (activated) {\n hooks.flushHydrationActivation(rootElement);\n }\n } finally {\n releaseSelectiveHydrationResources();\n }\n });\n }\n\n if (deferredBoundaries.length === 0) {\n releaseSelectiveHydrationResources();\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/boot/index.ts"],"mappings":";;;;;;AA4DiD;iBAAjC,YAAA,CAAa,MAAoB,EAAZ,YAAY;;;;AAwCE;iBAAnC,aAAA,CAAc,MAAqB,EAAb,aAAa;;;;;;;;AA2BQ;AA0G3D;;;;;;iBA1GsB,SAAA,CAAU,MAAA,EAAQ,SAAA,GAAY,OAAO;;AA0GQ;;;iBAA7C,UAAA,CAAW,MAAA,EAAQ,gBAAA,GAAmB,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/boot/index.ts"],"sourcesContent":["/**\n * App bootstrap and mount\n */\n\nimport { isProductionEnvironment } from '../common/env';\nimport type { ResolvedRoute } from '../common/router';\nimport { configureScrollRestoration } from '../router/navigate';\nimport {\n _applyManifest,\n _drainLazy,\n _setActiveRouteAuthOptions,\n _snapshotRouteSourceLazy,\n _snapshotLazy,\n clearRoutes,\n hasRegisteredRoutes,\n lockRouteRegistration,\n route as registerRoute,\n setServerLocation,\n} from '../router/route';\nimport { assertExecutionModel } from '../runtime/execution-model';\nimport {\n startHydrationRenderPhase,\n stopHydrationRenderPhase,\n} from '../common/render-context';\nimport {\n applySelectiveHydration,\n markSkippedElements,\n shouldVerifyHydrationMarkup,\n takeHydrationRenderData,\n} from './hydration';\nimport {\n flushHydrationActivation,\n mountOrUpdate,\n registerAppNavigation,\n registerRootCleanupCallback,\n} from './root-lifecycle';\nimport {\n bindDeniedRouteHandler,\n bindDeniedStatus,\n bindResolvedRouteHandler,\n resolveInitialRoute,\n} from './route-startup';\nimport type {\n HydrateSPAConfig,\n IslandConfig,\n IslandsConfig,\n SPAConfig,\n} from './types';\n\nexport { cleanupApp, hasApp } from './root-lifecycle';\nexport type {\n HydrateSPAConfig,\n IslandConfig,\n IslandsConfig,\n SPAConfig,\n} from './types';\n\n/**\n * createIsland: Enhances existing DOM (no router, mounts once)\n */\nexport function createIsland(config: IslandConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIsland requires a config object');\n }\n if (typeof config.component !== 'function') {\n throw new Error('createIsland: component must be a function');\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Islands must not initialize router or routes\n if ('routes' in config) {\n throw new Error(\n 'createIsland does not accept routes; use createSPA for routed apps'\n );\n }\n\n // Routes are never supported with islands.\n // If routes were registered (even at module load time), fail fast to avoid\n // surprising partial router behavior.\n if (hasRegisteredRoutes()) {\n throw new Error(\n 'Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.'\n );\n }\n\n mountOrUpdate(rootElement, config.component, {\n cleanupStrict: config.cleanupStrict,\n });\n}\n\n/**\n * createIslands: Enhances one or more existing DOM roots (no router).\n * The only public islands constructor.\n */\nexport function createIslands(config: IslandsConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIslands requires a config object');\n }\n if (!Array.isArray(config.islands) || config.islands.length === 0) {\n throw new Error('createIslands requires a non-empty islands array');\n }\n for (const island of config.islands) {\n createIsland(island);\n }\n}\n\n/**\n * createSPA: Initializes router and mounts the app with the provided route manifest or route table.\n *\n * Preferred usage with manifest:\n * ```ts\n * import { getManifest } from '@askrjs/askr/router';\n * await createSPA({ root: '#app', manifest: getManifest() });\n * ```\n *\n * Legacy usage with plain routes array (still supported):\n * ```ts\n * await createSPA({ root: '#app', routes: getRoutes() });\n * ```\n */\nexport async function createSPA(config: SPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('createSPA requires a config object');\n }\n\n const manifest = config.manifest ?? config.registry?.manifest;\n const routeTable = config.routes ?? config.registry?.routes;\n const hasManifest = manifest != null && manifest.records.length > 0;\n const hasRoutes = Array.isArray(routeTable) && routeTable.length > 0;\n\n if (!hasManifest && !hasRoutes) {\n throw new Error(\n 'createSPA requires a route manifest or route table. ' +\n 'Pass `manifest: getManifest()` or `routes: getRoutes()`. ' +\n 'If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n const pendingLazyAtBoot = [\n ..._snapshotLazy(),\n ..._snapshotRouteSourceLazy({ registry: config.registry, manifest }),\n ];\n\n configureScrollRestoration(config.scrollRestoration);\n\n clearRoutes();\n\n if (hasManifest) {\n // Preferred path: apply pre-built manifest records directly\n _applyManifest(manifest!);\n } else {\n // Legacy path: register plain Route objects (no layout metadata)\n for (const r of routeTable!) {\n registerRoute(r.path, r.handler as Parameters<typeof registerRoute>[1]);\n }\n }\n\n const routeAuth = config.auth ?? manifest?.auth;\n const activeManifest = hasManifest ? manifest : undefined;\n const appRouteSource = {\n manifest: activeManifest,\n routes: hasManifest ? undefined : routeTable,\n auth: routeAuth,\n };\n _setActiveRouteAuthOptions(routeAuth);\n\n // Drain any lazy() imports so all split chunks are ready before mounting\n await _drainLazy(pendingLazyAtBoot);\n\n // Lock registration in production to prevent late registration surprises\n if (isProductionEnvironment()) lockRouteRegistration();\n\n // Mount the currently-resolved route handler (if any)\n const { path, resolved } = await resolveInitialRoute(routeAuth);\n\n if (!resolved) {\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: config.cleanupStrict,\n });\n\n await registerAppNavigation(rootElement, path, {\n ...appRouteSource,\n });\n return;\n }\n\n if (resolved.kind === 'redirect') {\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: config.cleanupStrict,\n });\n\n await registerAppNavigation(rootElement, path, {\n ...appRouteSource,\n });\n return;\n }\n\n mountOrUpdate(\n rootElement,\n resolved.kind === 'deny'\n ? bindDeniedStatus(resolved.status)\n : bindResolvedRouteHandler({\n handler: resolved.handler,\n params: resolved.params,\n }),\n {\n cleanupStrict: config.cleanupStrict,\n }\n );\n\n await registerAppNavigation(rootElement, path, {\n ...appRouteSource,\n });\n}\n\n/**\n * hydrateSPA: Hydrate server-rendered HTML.\n * Accepts either a `manifest` (preferred) or a legacy `routes` array.\n */\nexport async function hydrateSPA(config: HydrateSPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('hydrateSPA requires a config object');\n }\n\n const manifest = config.manifest ?? config.registry?.manifest;\n const routeTable = config.routes ?? config.registry?.routes;\n const hasManifest = manifest != null && manifest.records.length > 0;\n const hasRoutes = Array.isArray(routeTable) && routeTable.length > 0;\n\n if (!hasManifest && !hasRoutes) {\n throw new Error(\n 'hydrateSPA requires a route manifest or route table. ' +\n 'Pass `manifest: getManifest()` or `routes: getRoutes()`. ' +\n 'If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n const hydrationRenderData = takeHydrationRenderData(rootElement);\n\n const pendingLazyAtHydrationBoot = [\n ..._snapshotLazy(),\n ..._snapshotRouteSourceLazy({ registry: config.registry, manifest }),\n ];\n\n configureScrollRestoration(config.scrollRestoration);\n\n clearRoutes();\n\n if (hasManifest) {\n _applyManifest(manifest!);\n } else {\n for (const r of routeTable!) {\n registerRoute(r.path, r.handler as Parameters<typeof registerRoute>[1]);\n }\n }\n\n const routeAuth = config.auth ?? manifest?.auth;\n const activeManifest = hasManifest ? manifest : undefined;\n const appRouteSource = {\n manifest: activeManifest,\n routes: hasManifest ? undefined : routeTable,\n auth: routeAuth,\n };\n _setActiveRouteAuthOptions(routeAuth);\n\n // Drain any lazy() imports so all split chunks are ready before mounting\n await _drainLazy(pendingLazyAtHydrationBoot);\n\n const {\n path,\n href: currentUrl,\n resolved,\n } = await resolveInitialRoute(routeAuth);\n setServerLocation(currentUrl);\n if (isProductionEnvironment()) lockRouteRegistration();\n\n if (!resolved) {\n throw new Error(`hydrateSPA: no route found for current path (${path}).`);\n }\n\n if (resolved.kind === 'redirect') {\n throw new Error(\n `hydrateSPA: unresolved redirect for current path (${path}).`\n );\n }\n\n const hydrationResolved: ResolvedRoute =\n resolved.kind === 'deny'\n ? { handler: bindDeniedRouteHandler(resolved.status), params: {} }\n : { handler: resolved.handler, params: resolved.params };\n\n if (shouldVerifyHydrationMarkup(config)) {\n const legacyRouteTable = hasManifest\n ? manifest!.records.map((r) => ({\n ...r,\n path: r.path,\n handler: r.handler,\n namespace: r.options.namespace,\n }))\n : routeTable!;\n\n const { verifyHydrationSyncForUrl } =\n await import('../ssr/verify-hydration');\n if (\n !verifyHydrationSyncForUrl({\n root: rootElement,\n url: currentUrl,\n routes: legacyRouteTable,\n resolved: hydrationResolved,\n options: {\n data: hydrationRenderData ?? undefined,\n },\n })\n ) {\n throw new Error(\n '[Askr] Hydration mismatch detected. Server HTML does not match expected server-render output.'\n );\n }\n }\n\n const hydrateOptions = config.hydrate;\n if (hydrateOptions) {\n if (hydrateOptions.deferUntilIdle || hydrateOptions.deferBelowFold) {\n if (hydrationRenderData) {\n startHydrationRenderPhase(hydrationRenderData);\n }\n try {\n await applySelectiveHydration(\n rootElement,\n hydrationResolved,\n path,\n config.cleanupStrict,\n hydrateOptions,\n appRouteSource,\n {\n mountOrUpdate,\n registerAppNavigation,\n registerRootCleanupCallback,\n flushHydrationActivation,\n }\n );\n } finally {\n if (hydrationRenderData) {\n stopHydrationRenderPhase();\n }\n }\n return;\n }\n\n if (hydrateOptions.skipSelectors?.length) {\n markSkippedElements(rootElement, hydrateOptions.skipSelectors);\n }\n }\n\n if (hydrationRenderData) {\n startHydrationRenderPhase(hydrationRenderData);\n }\n try {\n mountOrUpdate(\n rootElement,\n resolved.kind === 'deny'\n ? bindDeniedStatus(resolved.status)\n : bindResolvedRouteHandler(hydrationResolved),\n {\n cleanupStrict: config.cleanupStrict,\n }\n );\n } finally {\n if (hydrationRenderData) {\n stopHydrationRenderPhase();\n }\n }\n await registerAppNavigation(rootElement, path, {\n ...appRouteSource,\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"root-lifecycle.d.ts","names":[],"sources":["../../src/boot/root-lifecycle.ts"],"mappings":";;;;iBA0DgB,2BAAA,CACd,WAAA,EAAa,OAAO,EACpB,QAAA;AAAA,iBAsHc,aAAA,CACd,WAAA,EAAa,OAAA,EACb,WAAA,EAAa,iBAAiB,EAC9B,OAAA;EAAY,aAAA;AAAA;AAAA,iBAoGE,wBAAA,CAAyB,WAAoB,EAAP,OAAO;AAAA,iBAOvC,qBAAA,CACpB,WAAA,EAAa,OAAA,EACb,IAAA,UACA,MAAA,GAAS,kBAAA,GAAkB,OAAA;AAAA,iBASb,UAAA,CAAW,IAAsB,EAAhB,OAAO;AAAA,iBA0BxB,MAAA,CAAO,IAAsB,EAAhB,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"root-lifecycle.js","names":[],"sources":["../../src/boot/root-lifecycle.ts"],"sourcesContent":["import { isDevelopmentEnvironment } from '../common/env';\nimport { isPromiseLike } from '../common/promise';\nimport { logger } from '../dev/logger';\nimport {\n DefaultPortal,\n disposeDefaultPortalScope,\n} from '../foundations/structures/portal';\nimport { ELEMENT_TYPE, Fragment } from '../jsx';\nimport {\n initializeNavigation,\n registerAppInstance,\n unregisterAppInstance,\n} from '../router/navigate';\nimport { clearRoutes } from '../router/route';\nimport { flushRuntimeScheduler } from '../runtime/access';\nimport {\n cleanupComponent,\n createComponentInstance,\n mountComponent,\n type ComponentFunction,\n type ComponentInstance,\n} from '../runtime/component';\nimport {\n installRendererBridge,\n removeAllListeners,\n teardownNodeSubtree,\n} from '../renderer';\nimport type { BootAppRouteSource } from './types';\n\ninstallRendererBridge();\n\nlet componentIdCounter = 0;\n\nconst instancesByRoot = new WeakMap<Element, ComponentInstance>();\nconst routedRoots = new Set<Element>();\n\nconst CLEANUP_SYMBOL = Symbol.for('__askrCleanup__');\nconst ROOT_CLEANUP_CALLBACKS_SYMBOL = Symbol.for(\n '__askrRootCleanupCallbacks__'\n);\n\ntype RootCleanupOptions = {\n preserveInstance?: boolean;\n};\n\ninterface ElementWithCleanup extends Element {\n [CLEANUP_SYMBOL]?: (options?: RootCleanupOptions) => void;\n [ROOT_CLEANUP_CALLBACKS_SYMBOL]?: Set<() => void>;\n}\n\nfunction clearRootCleanupCallbacks(rootElement: Element): void {\n try {\n delete (rootElement as ElementWithCleanup)[ROOT_CLEANUP_CALLBACKS_SYMBOL];\n } catch {\n (rootElement as ElementWithCleanup)[ROOT_CLEANUP_CALLBACKS_SYMBOL]?.clear();\n }\n}\n\nexport function registerRootCleanupCallback(\n rootElement: Element,\n callback: () => void\n): () => void {\n const elementWithCleanup = rootElement as ElementWithCleanup;\n const callbacks =\n elementWithCleanup[ROOT_CLEANUP_CALLBACKS_SYMBOL] ?? new Set();\n callbacks.add(callback);\n elementWithCleanup[ROOT_CLEANUP_CALLBACKS_SYMBOL] = callbacks;\n\n return () => {\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n clearRootCleanupCallbacks(rootElement);\n }\n };\n}\n\nfunction runRootCleanupCallbacks(\n rootElement: Element,\n errors: unknown[]\n): void {\n const callbacks = (rootElement as ElementWithCleanup)[\n ROOT_CLEANUP_CALLBACKS_SYMBOL\n ];\n if (!callbacks || callbacks.size === 0) {\n clearRootCleanupCallbacks(rootElement);\n return;\n }\n\n clearRootCleanupCallbacks(rootElement);\n for (const callback of callbacks) {\n try {\n callback();\n } catch (e) {\n errors.push(e);\n }\n }\n}\n\nfunction cleanupRootInstance(\n rootElement: Element,\n instance: ComponentInstance,\n options?: RootCleanupOptions\n) {\n const errors: unknown[] = [];\n try {\n teardownNodeSubtree(rootElement);\n } catch (e) {\n errors.push(e);\n }\n\n try {\n cleanupComponent(instance);\n } catch (e) {\n errors.push(e);\n }\n\n runRootCleanupCallbacks(rootElement, errors);\n\n if (!options?.preserveInstance) {\n unregisterAppInstance(instance);\n instancesByRoot.delete(rootElement);\n clearRootCleanupCallbacks(rootElement);\n try {\n delete (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n } catch {\n // Ignore cleanup marker removal failures.\n }\n }\n\n if (errors.length > 0) {\n if (instance.cleanupStrict) {\n throw new AggregateError(errors, `cleanup failed for app root`);\n } else if (isDevelopmentEnvironment()) {\n for (const err of errors) logger.warn('[Askr] cleanup error:', err);\n }\n }\n}\n\nfunction attachCleanupForRoot(\n rootElement: Element,\n instance: ComponentInstance\n) {\n (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL] = (options) => {\n cleanupRootInstance(rootElement, instance, options);\n };\n\n try {\n const descriptor =\n Object.getOwnPropertyDescriptor(rootElement, 'innerHTML') ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(rootElement),\n 'innerHTML'\n ) ||\n Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n\n if (descriptor && (descriptor.get || descriptor.set)) {\n Object.defineProperty(rootElement, 'innerHTML', {\n get: descriptor.get\n ? function (this: Element) {\n return descriptor.get!.call(this);\n }\n : undefined,\n set: function (this: Element, value: string) {\n if (value === '' && instancesByRoot.get(this) === instance) {\n cleanupRootInstance(rootElement, instance);\n }\n if (descriptor.set) {\n return descriptor.set.call(this, value);\n }\n },\n configurable: true,\n });\n }\n } catch {\n // If Object.defineProperty fails, ignore\n }\n}\n\nexport function mountOrUpdate(\n rootElement: Element,\n componentFn: ComponentFunction,\n options?: { cleanupStrict?: boolean }\n) {\n const wrappedFn: ComponentFunction = (props, ctx) => {\n const out = componentFn(props, ctx);\n if (isPromiseLike(out)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n const portalVNode = {\n $$typeof: ELEMENT_TYPE,\n type: DefaultPortal,\n props: {},\n key: '__default_portal',\n } as unknown;\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: {\n children:\n out === undefined || out === null\n ? [portalVNode]\n : [out, portalVNode],\n },\n } as unknown as ReturnType<ComponentFunction>;\n };\n Object.defineProperty(wrappedFn, 'name', {\n value: componentFn.name || 'Component',\n });\n\n const existingCleanup = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n const reusedExistingInstance = typeof existingCleanup === 'function';\n if (reusedExistingInstance) {\n existingCleanup({ preserveInstance: true });\n }\n\n let instance = instancesByRoot.get(rootElement);\n\n if (instance) {\n const shouldResetHookState = instance.fn.name !== wrappedFn.name;\n\n if (!reusedExistingInstance) {\n removeAllListeners(rootElement);\n try {\n cleanupComponent(instance);\n } catch (e) {\n if (isDevelopmentEnvironment()) {\n logger.warn('[Askr] prior cleanup threw:', e);\n }\n }\n }\n\n instance.fn = wrappedFn;\n instance.evaluationGeneration++;\n instance.mounted = false;\n instance.expectedStateIndices = [];\n instance.firstRenderComplete = false;\n instance.isRoot = true;\n instance.portalScope = instance;\n\n if (shouldResetHookState) {\n instance.stateValues = [];\n instance.hasPendingUpdate = false;\n instance.notifyUpdate = null;\n instance.stateIndexCheck = -1;\n instance.mountOperations = [];\n instance.commitOperations = [];\n instance.lifecycleSlots = [];\n instance.cleanupFns = [];\n instance._currentRenderToken = undefined;\n instance.lastRenderToken = 0;\n instance._pendingReadSources = undefined;\n instance._lastReadSources = undefined;\n instance._placeholder = undefined;\n instance.errorBoundaryState = undefined;\n instance.devWarningsEmitted = undefined;\n }\n\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n } else {\n const componentId = String(++componentIdCounter);\n instance = createComponentInstance(componentId, wrappedFn, {}, rootElement);\n instancesByRoot.set(rootElement, instance);\n instance.isRoot = true;\n instance.portalScope = instance;\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n }\n\n attachCleanupForRoot(rootElement, instance);\n registerRootCleanupCallback(rootElement, () => {\n disposeDefaultPortalScope(instance.portalScope ?? instance);\n });\n mountComponent(instance);\n flushRuntimeScheduler();\n}\n\nexport function flushHydrationActivation(rootElement: Element): void {\n const instance = instancesByRoot.get(rootElement);\n if (!instance) return;\n instance._enqueueRun?.();\n flushRuntimeScheduler();\n}\n\nexport async function registerAppNavigation(\n rootElement: Element,\n path: string,\n source?: BootAppRouteSource\n) {\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n routedRoots.add(rootElement);\n registerAppInstance(instance, path, source);\n initializeNavigation();\n}\n\nexport function cleanupApp(root: Element | string): void {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return;\n\n const cleanupFn = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n try {\n if (typeof cleanupFn === 'function') {\n cleanupFn();\n }\n } finally {\n const wasRoutedRoot = routedRoots.delete(rootElement);\n instancesByRoot.delete(rootElement);\n clearRootCleanupCallbacks(rootElement);\n if (wasRoutedRoot && routedRoots.size === 0) {\n clearRoutes();\n }\n try {\n delete (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n } catch {\n // Ignore cleanup marker removal failures.\n }\n }\n}\n\nexport function hasApp(root: Element | string): boolean {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return false;\n return instancesByRoot.has(rootElement);\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-startup.js","names":[],"sources":["../../src/boot/route-startup.ts"],"sourcesContent":["import type {\n ResolvedRoute,\n RouteAuthOptions,\n RouteHandler,\n RouteRequestResult,\n} from '../common/router';\nimport { resolveRouteRequest } from '../router/route';\nimport type { ComponentFunction } from '../runtime/component';\n\nconst MAX_INITIAL_ROUTE_REDIRECTS = 20;\n\nexport function bindResolvedRouteHandler(\n resolved: ResolvedRoute\n): ComponentFunction {\n return () =>\n resolved.handler(resolved.params) as ReturnType<ComponentFunction>;\n}\n\nfunction createDeniedStatusNode(status: number) {\n return {\n type: 'div',\n props: {\n 'data-route-denied': String(status),\n },\n children: [String(status)],\n };\n}\n\nexport function bindDeniedStatus(status: number): ComponentFunction {\n return () => createDeniedStatusNode(status);\n}\n\nexport function bindDeniedRouteHandler(status: number): RouteHandler {\n return () => createDeniedStatusNode(status);\n}\n\nexport async function resolveInitialRoute(\n auth?: RouteAuthOptions\n): Promise<{ path: string; href: string; resolved: RouteRequestResult }> {\n let path = typeof window !== 'undefined' ? window.location.pathname : '/';\n let href =\n typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : path;\n const visited = new Set<string>();\n\n for (\n let redirects = 0;\n redirects <= MAX_INITIAL_ROUTE_REDIRECTS;\n redirects++\n ) {\n if (visited.has(href)) {\n throw new Error(`[Askr] Route redirect cycle detected at ${href}.`);\n }\n visited.add(href);\n\n const resolved = await resolveRouteRequest(href, { auth });\n if (\n typeof window === 'undefined' ||\n !resolved ||\n resolved.kind !== 'redirect'\n ) {\n return { path, href, resolved };\n }\n\n const redirectTarget = new URL(resolved.to, window.location.href);\n const redirectHref = `${redirectTarget.pathname}${redirectTarget.search}${redirectTarget.hash}`;\n window.history.replaceState({ path: redirectHref }, '', redirectHref);\n path = redirectTarget.pathname;\n href = redirectHref;\n }\n\n throw new Error(\n `[Askr] Route redirect limit exceeded (${MAX_INITIAL_ROUTE_REDIRECTS}).`\n );\n}\n"],"mappings":";;;AASA,MAAM,8BAA8B;AAEpC,SAAgB,yBACd,UACmB;CACnB,aACE,SAAS,QAAQ,SAAS,MAAM;AACpC;AAEA,SAAS,uBAAuB,QAAgB;CAC9C,OAAO;EACL,MAAM;EACN,OAAO,EACL,qBAAqB,OAAO,MAAM,EACpC;EACA,UAAU,CAAC,OAAO,MAAM,CAAC;CAC3B;AACF;AAEA,SAAgB,iBAAiB,QAAmC;CAClE,aAAa,uBAAuB,MAAM;AAC5C;AAEA,SAAgB,uBAAuB,QAA8B;CACnE,aAAa,uBAAuB,MAAM;AAC5C;AAEA,eAAsB,oBACpB,MACuE;CACvE,IAAI,OAAO,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;CACtE,IAAI,OACF,OAAO,WAAW,cACd,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,SAAS,SACvE;CACN,MAAM,0BAAU,IAAI,IAAY;CAEhC,KACE,IAAI,YAAY,GAChB,aAAa,6BACb,aACA;EACA,IAAI,QAAQ,IAAI,IAAI,GAClB,MAAM,IAAI,MAAM,2CAA2C,KAAK,EAAE;EAEpE,QAAQ,IAAI,IAAI;EAEhB,MAAM,WAAW,MAAM,oBAAoB,MAAM,EAAE,KAAK,CAAC;EACzD,IACE,OAAO,WAAW,eAClB,CAAC,YACD,SAAS,SAAS,YAElB,OAAO;GAAE;GAAM;GAAM;EAAS;EAGhC,MAAM,iBAAiB,IAAI,IAAI,SAAS,IAAI,OAAO,SAAS,IAAI;EAChE,MAAM,eAAe,GAAG,eAAe,WAAW,eAAe,SAAS,eAAe;EACzF,OAAO,QAAQ,aAAa,EAAE,MAAM,aAAa,GAAG,IAAI,YAAY;EACpE,OAAO,eAAe;EACtB,OAAO;CACT;CAEA,MAAM,IAAI,MACR,yCAAyC,4BAA4B,GACvE;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/boot/types.ts"],"mappings":";;;;KASY,YAAA;EACV,IAAA,EAAM,OAAA;EACN,SAAA,EAAW,iBAAiB;EAE5B,aAAA;EAEA,MAAA;AAAA;AAAA,KAGU,aAAA;EACV,OAAA,EAAS,YAAY;AAAA;AAAA,KAGlB,eAAA;EAEC,QAAA,EAAU,aAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA,GAAS,KAAA;AAAA;EAGT,QAAA,EAAU,aAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA,GAAS,KAAA;AAAA;EAGT,QAAA,GAAW,aAAA;EACX,QAAA,GAAW,aAAA;EACX,MAAA,EAAQ,KAAA;AAAA;AAAA,KAGF,SAAA,GAAY,eAAA;EACtB,IAAA,EAAM,OAAA;EAhBQ;;;;;;;;EAyBd,IAAA,GAAO,gBAAA;EACP,iBAAA,aAA8B,wBAAA;EAC9B,aAAA;EACA,SAAA;AAAA;AAAA,KAGU,gBAAA,GAAmB,eAAA;EAC7B,IAAA,EAAM,OAAA,WA9BF;EAgCJ,IAAA,GAAO,gBAAA;EACP,iBAAA,aAA8B,wBAAA;EAC9B,aAAA;EACA,OAAA;IACE,YAAA;IACA,cAAA;IACA,cAAA;IACA,aAAA;IACA,aAAA;EAAA;AAAA;AAAA,KAIQ,kBAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA,YAAkB,KAAA;EAClB,IAAA,GAAO,gBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attr-names.js","names":[],"sources":["../../src/common/attr-names.ts"],"sourcesContent":["const PUBLIC_ATTRIBUTE_NAME_MAP: Record<string, string> = {\n className: 'class',\n htmlFor: 'for',\n strokeWidth: 'stroke-width',\n strokeLinecap: 'stroke-linecap',\n strokeLinejoin: 'stroke-linejoin',\n fillRule: 'fill-rule',\n clipRule: 'clip-rule',\n};\n\nexport function getPublicAttributeName(propName: string): string {\n return PUBLIC_ATTRIBUTE_NAME_MAP[propName] ?? propName;\n}\n"],"mappings":";AAAA,MAAM,4BAAoD;CACxD,WAAW;CACX,SAAS;CACT,aAAa;CACb,eAAe;CACf,gBAAgB;CAChB,UAAU;CACV,UAAU;AACZ;AAEA,SAAgB,uBAAuB,UAA0B;CAC/D,OAAO,0BAA0B,aAAa;AAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.d.ts","names":[],"sources":["../../src/common/component.ts"],"mappings":";;;;;;KASY,gBAAA;EACV,MAAA,EAAQ,WAAA;EACR,GAAA,GAAM,UAAU;AAAA;AAAA,KAMN,cAAA;EACV,IAAA;EACA,KAAA,GAAQ,KAAA;EACR,QAAA,aAAqB,cAAc;AAAA;AAAA,KAGzB,iBAAA,IACV,KAAA,EAAO,KAAA,EACP,OAAA,GAAU,gBAAA,KACP,UAAA,GAAa,KAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"control.d.ts","names":[],"sources":["../../src/common/control.ts"],"mappings":";;;cAEa,oBAAA;AAAA,cAEP,uBAAA;AAAA,KAEM,qBAAA,WAAgC,KAAA,GAAQ,KAAA,MAClD,KAAA,EAAO,CAAA;EAAA,CAEN,uBAAA;AAAA;AAAA,iBAGa,yBAAA,eACA,IAAA,uBACd,SAAA,EAAW,CAAA,GAAI,CAAC;AAAA,iBASF,uBAAA,CACd,KAAA,YACC,KAAA,IAAS,qBAAqB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"control.js","names":[],"sources":["../../src/common/control.ts"],"sourcesContent":["import type { Props } from './props';\n\nexport const __CONTROL_BOUNDARY__ = Symbol('__CONTROL_BOUNDARY__');\n\nconst EAGER_CONTROL_PRIMITIVE = Symbol('__ASKR_EAGER_CONTROL_PRIMITIVE__');\n\nexport type EagerControlPrimitive<P extends Props = Props> = ((\n props: P\n) => unknown) & {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n};\n\nexport function markEagerControlPrimitive<\n T extends (...args: never[]) => unknown,\n>(primitive: T): T {\n (\n primitive as T & {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n }\n )[EAGER_CONTROL_PRIMITIVE] = true;\n return primitive;\n}\n\nexport function isEagerControlPrimitive(\n value: unknown\n): value is EagerControlPrimitive {\n return (\n typeof value === 'function' &&\n Boolean(\n (\n value as {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n }\n )[EAGER_CONTROL_PRIMITIVE]\n )\n );\n}\n"],"mappings":";AAEA,MAAa,uBAAuB,OAAO,sBAAsB;AAEjE,MAAM,0BAA0B,OAAO,kCAAkC;AAQzE,SAAgB,0BAEd,WAAiB;CACjB,UAIE,2BAA2B;CAC7B,OAAO;AACT;AAEA,SAAgB,wBACd,OACgC;CAChC,OACE,OAAO,UAAU,cACjB,QAEI,MAGA,wBACJ;AAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","names":[],"sources":["../../src/common/env.ts"],"sourcesContent":["export type RuntimeEnv = Record<string, string | undefined>;\n\ntype RuntimeEnvGlobal = typeof globalThis & {\n process?: {\n env?: RuntimeEnv;\n };\n};\n\ntype BuildTimeEnv = Record<string, unknown> & {\n NODE_ENV?: unknown;\n MODE?: unknown;\n PROD?: unknown;\n DEV?: unknown;\n};\n\nfunction normalizeEnv(source?: Record<string, unknown>): RuntimeEnv {\n if (!source) {\n return {};\n }\n\n const normalized: RuntimeEnv = {};\n for (const [key, value] of Object.entries(source)) {\n if (typeof value === 'string') {\n normalized[key] = value;\n } else if (typeof value === 'boolean' || typeof value === 'number') {\n normalized[key] = String(value);\n }\n }\n\n return normalized;\n}\n\nfunction getBuildTimeEnv(): RuntimeEnv {\n const metaEnv = (import.meta as ImportMeta & { env?: BuildTimeEnv }).env;\n const normalized = normalizeEnv(metaEnv);\n\n if (normalized.NODE_ENV == null && metaEnv) {\n if (typeof metaEnv.MODE === 'string' && metaEnv.MODE.length > 0) {\n normalized.NODE_ENV = metaEnv.MODE;\n } else if (metaEnv.PROD === true || metaEnv.PROD === 'true') {\n normalized.NODE_ENV = 'production';\n } else if (metaEnv.DEV === true || metaEnv.DEV === 'true') {\n normalized.NODE_ENV = 'development';\n }\n }\n\n return normalized;\n}\n\nfunction resolveNodeEnv(\n processNodeEnv: string | undefined,\n buildNodeEnv: string | undefined\n): string | undefined {\n if (buildNodeEnv === 'production') {\n return 'production';\n }\n\n if (processNodeEnv != null) {\n return processNodeEnv;\n }\n\n if (buildNodeEnv === 'development') {\n return 'development';\n }\n\n return buildNodeEnv === 'test' ? undefined : buildNodeEnv;\n}\n\nexport function getRuntimeEnv(): RuntimeEnv {\n const processEnv = (globalThis as RuntimeEnvGlobal).process?.env ?? {};\n const buildTimeEnv = getBuildTimeEnv();\n\n return {\n ...processEnv,\n ...buildTimeEnv,\n NODE_ENV: resolveNodeEnv(processEnv.NODE_ENV, buildTimeEnv.NODE_ENV),\n };\n}\n\nexport function isProductionEnvironment(): boolean {\n return getRuntimeEnv().NODE_ENV === 'production';\n}\n\nexport function isDevelopmentEnvironment(): boolean {\n return !isProductionEnvironment();\n}\n\nexport function isRuntimeEnvFlagEnabled(name: string): boolean {\n const value = getRuntimeEnv()[name];\n return value === '1' || value === 'true';\n}\n"],"mappings":";AAeA,SAAS,aAAa,QAA8C;CAClE,IAAI,CAAC,QACH,OAAO,CAAC;CAGV,MAAM,aAAyB,CAAC;CAChC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAC9C,IAAI,OAAO,UAAU,UACnB,WAAW,OAAO;MACb,IAAI,OAAO,UAAU,aAAa,OAAO,UAAU,UACxD,WAAW,OAAO,OAAO,KAAK;CAIlC,OAAO;AACT;AAEA,SAAS,kBAA8B;CACrC,MAAM,UAAW,OAAO,KAA6C;CACrE,MAAM,aAAa,aAAa,OAAO;CAEvC,IAAI,WAAW,YAAY,QAAQ,SACjC;MAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,KAAK,SAAS,GAC5D,WAAW,WAAW,QAAQ;OACzB,IAAI,QAAQ,SAAS,QAAQ,QAAQ,SAAS,QACnD,WAAW,WAAW;OACjB,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QACjD,WAAW,WAAW;CACxB;CAGF,OAAO;AACT;AAEA,SAAS,eACP,gBACA,cACoB;CACpB,IAAI,iBAAiB,cACnB,OAAO;CAGT,IAAI,kBAAkB,MACpB,OAAO;CAGT,IAAI,iBAAiB,eACnB,OAAO;CAGT,OAAO,iBAAiB,SAAS,SAAY;AAC/C;AAEA,SAAgB,gBAA4B;CAC1C,MAAM,aAAc,WAAgC,SAAS,OAAO,CAAC;CACrE,MAAM,eAAe,gBAAgB;CAErC,OAAO;EACL,GAAG;EACH,GAAG;EACH,UAAU,eAAe,WAAW,UAAU,aAAa,QAAQ;CACrE;AACF;AAEA,SAAgB,0BAAmC;CACjD,OAAO,cAAc,CAAC,CAAC,aAAa;AACtC;AAEA,SAAgB,2BAAoC;CAClD,OAAO,CAAC,wBAAwB;AAClC;AAEA,SAAgB,wBAAwB,MAAuB;CAC7D,MAAM,QAAQ,cAAc,CAAC,CAAC;CAC9B,OAAO,UAAU,OAAO,UAAU;AACpC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx.d.ts","names":[],"sources":["../../src/common/jsx.ts"],"mappings":";;;cAMa,YAAA;AAAA,cACA,QAAA;AAAA,cACA,eAAA;AAAA,KAED,YAAA,yBAAqC,KAAA;EAC/C,cAAA,CAAe,KAAA,EAAO,MAAM;AAAA;AAAA,KAGlB,cAAA,YAA0B,YAAY;AAAA,UAEjC,UAAA;EATkC;EAWjD,QAAA;EAV+D;EAa/D,IAAA,EAAM,cAAA;EAbyD;EAgB/D,KAAA,EAAO,KAAK;EAdF;EAiBV,GAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx.js","names":[],"sources":["../../src/common/jsx.ts"],"sourcesContent":["/**\n * Common call contracts: JSX element shape\n */\n\nimport type { Props } from './props';\n\nexport const ELEMENT_TYPE = Symbol.for('askr.element');\nexport const Fragment = Symbol.for('askr.fragment');\nexport const STATIC_CHILDREN = Symbol.for('askr.static-children');\n\nexport type JSXComponent<TProps extends object = Props> = {\n bivarianceHack(props: TProps): unknown;\n}['bivarianceHack'];\n\nexport type JSXElementType = string | JSXComponent | symbol;\n\nexport interface JSXElement {\n /** Internal element marker */\n $$typeof: symbol;\n\n /** Element type: string, component, Fragment, etc */\n type: JSXElementType;\n\n /** Props bag */\n props: Props;\n\n /** Optional key (normalized by runtime) */\n key?: string | number | null;\n}\n"],"mappings":";AAMA,MAAa,eAAe,OAAO,IAAI,cAAc;AACrD,MAAa,WAAW,OAAO,IAAI,eAAe;AAClD,MAAa,kBAAkB,OAAO,IAAI,sBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"promise.js","names":[],"sources":["../../src/common/promise.ts"],"sourcesContent":["export function isPromiseLike<T = unknown>(\n value: unknown\n): value is PromiseLike<T> {\n return (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n"],"mappings":";AAAA,SAAgB,cACd,OACyB;CACzB,OACE,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,OAAQ,MAA6B,SAAS;AAElD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"props.d.ts","names":[],"sources":["../../src/common/props.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-context.js","names":[],"sources":["../../src/common/render-context.ts"],"sourcesContent":["import type { SSRData } from './ssr';\nimport type { Route, RouteAuthOptions } from './router';\nimport { SSRDataMissingError } from './ssr-errors';\n\nexport interface ActiveRenderContext {\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 queryCache?: Map<string, unknown>;\n keyCounter: number;\n renderData: Record<string, unknown> | null;\n}\n\nexport interface RenderContextProvider {\n getRenderContext(): ActiveRenderContext | null;\n}\n\nlet provider: RenderContextProvider = {\n getRenderContext() {\n return null;\n },\n};\nlet hydrationRenderData: Record<string, unknown> | null = null;\nlet hydrationKeyCounter = 0;\n\nexport function configureRenderContextProvider(\n nextProvider: RenderContextProvider\n): void {\n provider = nextProvider;\n}\n\nexport function getActiveRenderContext(): ActiveRenderContext | null {\n return provider.getRenderContext();\n}\n\nexport function getCurrentRenderData(): Record<string, unknown> | null {\n const ctx = getActiveRenderContext();\n return ctx?.renderData ?? hydrationRenderData;\n}\n\nexport function resetRenderKeyCounter(): void {\n const ctx = getActiveRenderContext();\n if (ctx) {\n ctx.keyCounter = 0;\n }\n}\n\nexport function getNextRenderKey(): string {\n const ctx = getActiveRenderContext();\n if (ctx) {\n return `r:${ctx.keyCounter++}`;\n }\n\n if (hydrationRenderData) {\n return `r:${hydrationKeyCounter++}`;\n }\n\n return 'r:0';\n}\n\nexport function startHydrationRenderPhase(data: Record<string, unknown>): void {\n hydrationRenderData = data;\n hydrationKeyCounter = 0;\n}\n\nexport function stopHydrationRenderPhase(): void {\n hydrationRenderData = null;\n hydrationKeyCounter = 0;\n}\n\nexport function startRenderPhase(data: Record<string, unknown> | null): void {\n const ctx = getActiveRenderContext();\n if (ctx) {\n ctx.renderData = data ?? null;\n ctx.keyCounter = 0;\n }\n}\n\nexport function stopRenderPhase(): void {\n const ctx = getActiveRenderContext();\n if (ctx) {\n ctx.renderData = null;\n ctx.keyCounter = 0;\n }\n}\n\nexport function throwSSRDataMissing(): never {\n throw new SSRDataMissingError();\n}\n"],"mappings":";;AAqBA,IAAI,WAAkC,EACpC,mBAAmB;CACjB,OAAO;AACT,EACF;AACA,IAAI,sBAAsD;AAC1D,IAAI,sBAAsB;AAE1B,SAAgB,+BACd,cACM;CACN,WAAW;AACb;AAEA,SAAgB,yBAAqD;CACnE,OAAO,SAAS,iBAAiB;AACnC;AAEA,SAAgB,uBAAuD;CAErE,OADY,uBACL,CAAA,EAAK,cAAc;AAC5B;AAEA,SAAgB,wBAA8B;CAC5C,MAAM,MAAM,uBAAuB;CACnC,IAAI,KACF,IAAI,aAAa;AAErB;AAEA,SAAgB,mBAA2B;CACzC,MAAM,MAAM,uBAAuB;CACnC,IAAI,KACF,OAAO,KAAK,IAAI;CAGlB,IAAI,qBACF,OAAO,KAAK;CAGd,OAAO;AACT;AAEA,SAAgB,0BAA0B,MAAqC;CAC7E,sBAAsB;CACtB,sBAAsB;AACxB;AAEA,SAAgB,2BAAiC;CAC/C,sBAAsB;CACtB,sBAAsB;AACxB;AAEA,SAAgB,iBAAiB,MAA4C;CAC3E,MAAM,MAAM,uBAAuB;CACnC,IAAI,KAAK;EACP,IAAI,aAAa,QAAQ;EACzB,IAAI,aAAa;CACnB;AACF;AAEA,SAAgB,kBAAwB;CACtC,MAAM,MAAM,uBAAuB;CACnC,IAAI,KAAK;EACP,IAAI,aAAa;EACjB,IAAI,aAAa;CACnB;AACF;AAEA,SAAgB,sBAA6B;CAC3C,MAAM,IAAI,oBAAoB;AAChC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-activity.js","names":[],"sources":["../../src/common/route-activity.ts"],"sourcesContent":["import type { RouteMatch } from './router';\n\nexport type RouteActivityMatch = Pick<RouteMatch, 'path'>;\n\ntype RouteActivitySnapshot = {\n path: string;\n matches: readonly RouteActivityMatch[];\n};\n\nlet currentRouteActivity: RouteActivitySnapshot = {\n path: '/',\n matches: [],\n};\n\nfunction normalizeRouteActivityPath(path: string): string {\n const withoutHash = path.split('#', 1)[0] ?? '';\n const withoutSearch = withoutHash.split('?', 1)[0] ?? '';\n const pathname = withoutSearch || '/';\n const absolutePathname = pathname.startsWith('/') ? pathname : `/${pathname}`;\n\n return absolutePathname.endsWith('/') && absolutePathname !== '/'\n ? absolutePathname.slice(0, -1)\n : absolutePathname;\n}\n\nfunction readActivePathname(): string {\n if (typeof window !== 'undefined' && window.location) {\n return window.location.pathname || '/';\n }\n\n return currentRouteActivity.path;\n}\n\nexport function syncRouteActivitySnapshot(\n pathname: string,\n matches: readonly RouteActivityMatch[] = []\n): void {\n currentRouteActivity = {\n path: normalizeRouteActivityPath(pathname),\n matches: Object.freeze([...matches]),\n };\n}\n\nexport function isRouteActivityActive(\n pathOrPaths: string | readonly string[]\n): boolean {\n const candidates = new Set(\n (Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]).map(\n normalizeRouteActivityPath\n )\n );\n\n const activePath = normalizeRouteActivityPath(readActivePathname());\n if (candidates.has(activePath)) {\n return true;\n }\n\n return currentRouteActivity.matches.some((match) =>\n candidates.has(normalizeRouteActivityPath(match.path))\n );\n}\n"],"mappings":";AASA,IAAI,uBAA8C;CAChD,MAAM;CACN,SAAS,CAAC;AACZ;AAEA,SAAS,2BAA2B,MAAsB;CAGxD,MAAM,aAFc,KAAK,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,GACvB,CAAY,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,OACpB;CAClC,MAAM,mBAAmB,SAAS,WAAW,GAAG,IAAI,WAAW,IAAI;CAEnE,OAAO,iBAAiB,SAAS,GAAG,KAAK,qBAAqB,MAC1D,iBAAiB,MAAM,GAAG,EAAE,IAC5B;AACN;AAEA,SAAS,qBAA6B;CACpC,IAAI,OAAO,WAAW,eAAe,OAAO,UAC1C,OAAO,OAAO,SAAS,YAAY;CAGrC,OAAO,qBAAqB;AAC9B;AAEA,SAAgB,0BACd,UACA,UAAyC,CAAC,GACpC;CACN,uBAAuB;EACrB,MAAM,2BAA2B,QAAQ;EACzC,SAAS,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;CACrC;AACF;AAEA,SAAgB,sBACd,aACS;CACT,MAAM,aAAa,IAAI,KACpB,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW,EAAA,CAAG,IACzD,0BACF,CACF;CAEA,MAAM,aAAa,2BAA2B,mBAAmB,CAAC;CAClE,IAAI,WAAW,IAAI,UAAU,GAC3B,OAAO;CAGT,OAAO,qBAAqB,QAAQ,MAAM,UACxC,WAAW,IAAI,2BAA2B,MAAM,IAAI,CAAC,CACvD;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"router-internal.js","names":[],"sources":["../../src/common/router-internal.ts"],"sourcesContent":["export const ROUTE_ROOT_COMPONENT = Symbol.for('askr.route-root-component');\n"],"mappings":";AAAA,MAAa,uBAAuB,OAAO,IAAI,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.d.ts","names":[],"sources":["../../src/common/router.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssr-errors.d.ts","names":[],"sources":["../../src/common/ssr-errors.ts"],"mappings":";;AAIA;;cAAa,mBAAA,SAA4B,KAAK;EAAA,SACnC,IAAA;cAEP,OAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssr-errors.js","names":[],"sources":["../../src/common/ssr-errors.ts"],"sourcesContent":["/**\n * Common call contracts: SSR error types\n */\n\nexport class SSRDataMissingError extends Error {\n readonly code = 'SSR_DATA_MISSING';\n constructor(\n message = 'Server-side rendering requires all data to be available synchronously. This component attempted to use async data during SSR.'\n ) {\n super(message);\n this.name = 'SSRDataMissingError';\n Object.setPrototypeOf(this, SSRDataMissingError.prototype);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,sBAAb,MAAa,4BAA4B,MAAM;CAE7C,YACE,UAAU,iIACV;EACA,MAAM,OAAO;cAJC;EAKd,KAAK,OAAO;EACZ,OAAO,eAAe,MAAM,oBAAoB,SAAS;CAC3D;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssr.d.ts","names":[],"sources":["../../src/common/ssr.ts"],"mappings":";;AAIA;;KAAY,OAAA,GAAU,MAAM;AAAA,UAEX,mBAAA;EACf,IAAA;EACA,SAAS;AAAA;AAAA,UAGM,qBAAA;EACf,IAAA;EACA,GAAA;EACA,QAAA;EACA,MAAA;EACA,IAAA;EACA,MAAA,EAAQ,MAAA;EACR,IAAA,GAAO,OAAA;EACP,IAAA;EACA,KAAA,EAAO,mBAAA;AAAA;AAAA,UAGQ,kBAAA;EACf,OAAA;EACA,OAAA,EAAS,qBAAqB;AAAA;AAAA,KAGpB,gBAAA,IAAoB,IAAwB,EAAlB,kBAAkB;AAAA,iBAExC,cAAA,CACd,QAAA,EAAU,gBAAA,EACV,IAAA,EAAM,kBAAkB,EACxB,OAAA;AAAA,cA0BW,oBAAA;;KAGD,UAAA;EACV,GAAA;EACA,IAAA;EACA,IAAA,GAAO,OAAA;EACP,MAAA,GAAS,MAAA;EACT,MAAA,GAAS,WAAA;AAAA;;KAIC,aAAA;EACV,IAAI;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssr.js","names":[],"sources":["../../src/common/ssr.ts"],"sourcesContent":["/**\n * Common call contracts: SSR types\n */\n\nexport type SSRData = Record<string, unknown>;\n\nexport interface DocumentRenderRoute {\n path: string;\n namespace?: string;\n}\n\nexport interface DocumentRenderContext {\n mode: 'ssr' | 'ssg';\n url: string;\n pathname: string;\n search: string;\n hash: string;\n params: Record<string, string>;\n data?: SSRData;\n seed: number;\n route: DocumentRenderRoute;\n}\n\nexport interface DocumentRenderArgs {\n appHtml: string;\n context: DocumentRenderContext;\n}\n\nexport type DocumentRenderer = (args: DocumentRenderArgs) => string;\n\nexport function renderDocument(\n document: DocumentRenderer,\n args: DocumentRenderArgs,\n apiName: string\n): string {\n const html: unknown = document(args);\n\n if (typeof html !== 'string') {\n const isPromiseLike =\n typeof html === 'object' &&\n html !== null &&\n 'then' in html &&\n typeof html.then === 'function';\n const received = isPromiseLike\n ? 'a Promise-like value'\n : html === null\n ? 'null'\n : Array.isArray(html)\n ? 'an array'\n : typeof html;\n\n throw new Error(\n `${apiName} document() must synchronously return a string; received ${received}.`\n );\n }\n\n return html;\n}\n\nexport const SSR_RENDER_DATA_ATTR = 'data-askr-render-data';\n\n/** Full context for sink-based streaming SSR */\nexport type SSRContext = {\n url: string;\n seed: number;\n data?: SSRData;\n params?: Record<string, string>;\n signal?: AbortSignal;\n};\n\n/** Lightweight context for synchronous render passes */\nexport type RenderContext = {\n seed: number;\n};\n"],"mappings":";AA8BA,SAAgB,eACd,UACA,MACA,SACQ;CACR,MAAM,OAAgB,SAAS,IAAI;CAEnC,IAAI,OAAO,SAAS,UAAU;EAM5B,MAAM,WAJJ,OAAO,SAAS,YAChB,SAAS,QACT,UAAU,QACV,OAAO,KAAK,SAAS,aAEnB,yBACA,SAAS,OACP,SACA,MAAM,QAAQ,IAAI,IAChB,aACA,OAAO;EAEf,MAAM,IAAI,MACR,GAAG,QAAQ,2DAA2D,SAAS,EACjF;CACF;CAEA,OAAO;AACT;AAEA,MAAa,uBAAuB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vnode.d.ts","names":[],"sources":["../../src/common/vnode.ts"],"mappings":";;;;;cAWa,kBAAA;AAAA,UAEI,UAAA;EAIf,IAAA,EAAM,cAAA;EACN,KAAA,GAAQ,KAAA;EACR,QAAA,GAAW,KAAA;EACX,GAAA;EAAA,CACC,MAAA,CAAO,QAAA;EACR,aAAA,GAAgB,oBAAA;EAChB,SAAA,GAAY,QAAA;AAAA;AAAA,KAIF,KAAA,GAAQ,UAAU;AAAA,KAClB,eAAA,GAAkB,KAAA,GAAQ,UAAA,YAAsB,eAAA;AAAA,cAI/C,gBAAA;AAAA,iBAEG,aAAA,CAAc,IAAA,YAAgB,IAAA,IAAQ,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vnode.js","names":[],"sources":["../../src/common/vnode.ts"],"sourcesContent":["/**\n * Common call contracts: VNode / virtual DOM shapes\n */\n\nimport type { Props } from './props';\nimport type { JSXElement, JSXElementType } from './jsx';\nimport type { ControlBoundaryState } from '../runtime/control';\nimport type { ForState } from '../runtime/for';\nexport { __CONTROL_BOUNDARY__ } from './control';\nimport { __CONTROL_BOUNDARY__ } from './control';\n\nexport const __ERROR_BOUNDARY__ = Symbol.for('askr.error-boundary');\n\nexport interface DOMElement {\n // Element `type` can be an intrinsic tag name, a component function, or\n // a special symbol (e.g. `Fragment`). Include `symbol` in the type union\n // so runtime comparisons against `Fragment` are type-safe.\n type: JSXElementType;\n props?: Props;\n children?: VNode[];\n key?: string | number | null;\n [Symbol.iterator]?: never;\n _controlState?: ControlBoundaryState; // Internal: control boundary state\n _forState?: ForState<unknown>; // Deprecated internal alias during migration\n}\n\n// Type for virtual DOM nodes\nexport type VNode = DOMElement | string | number | boolean | null | undefined;\nexport type RenderableChild = VNode | JSXElement | readonly RenderableChild[];\n\n// Backward-compatible internal alias while renderer/runtime migrates away from\n// the old For-only boundary naming.\nexport const __FOR_BOUNDARY__ = __CONTROL_BOUNDARY__;\n\nexport function _isDOMElement(node: unknown): node is DOMElement {\n return typeof node === 'object' && node !== null && 'type' in node;\n}\n"],"mappings":";;AAWA,MAAa,qBAAqB,OAAO,IAAI,qBAAqB;AAqBlE,MAAa,mBAAmB;AAEhC,SAAgB,cAAc,MAAmC;CAC/D,OAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU;AAChE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-boundary.d.ts","names":[],"sources":["../../src/components/error-boundary.tsx"],"mappings":";;;;;;KAWK,oBAAA,GAAuB,KAAA,YAAiB,KAAK;AAAA,KAC7C,0BAAA,GAA6B,oBAAA,GAAuB,IAAI;AAAA,KAEjD,2BAAA,IACV,KAAA,WACA,KAAA,iBACG,0BAA0B;AAAA,UAEd,kBAAA,SAA2B,KAAA;EAC1C,QAAA,GAAW,oBAAA;EACX,QAAA,GAAW,0BAAA,GAA6B,2BAAA;EACxC,OAAA,IAAW,KAAA;EACX,QAAA;AAAA;AAAA,KAGG,kBAAA,GAAqB,WAAW,CAAC,iBAAA;AAAA,KAEjC,kBAAA,GAAqB,UAAA;EACxB,UAAA,GAAa,iBAAiB;AAAA;AAAA,iBA+DhB,aAAA,CAAc,KAAA,EAAO,kBAAA,GAAqB,UAAU;AAAA,iBAYpD,oBAAA,CACd,KAAA,YACC,KAAA,IAAS,kBAAkB;AAAA,iBAQd,yBAAA,CACd,KAAA,EAAO,kBAAA,GACN,kBAAkB;AAAA,iBAIL,4BAAA,CACd,QAAA,EAAU,kBAAA,cACV,KAAA,WACA,KAAA,eACC,0BAA0B;AAAA,iBAmDb,mBAAA,CAAoB,QAA2B,EAAjB,iBAAiB;AAAA,iBAc/C,mBAAA,CACd,QAAA,EAAU,iBAAiB,EAC3B,KAAA,WACA,OAAA,IAAW,KAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-boundary.js","names":[],"sources":["../../src/components/error-boundary.tsx"],"sourcesContent":["import type { Props } from '../common/props';\nimport { ELEMENT_TYPE, type JSXElement } from '../common/jsx';\nimport type { VNode } from '../common/vnode';\nimport { __ERROR_BOUNDARY__ } from '../common/vnode';\nimport {\n getCurrentComponentInstance,\n type ComponentInstance,\n} from '../runtime/component';\nimport { logger } from '../dev/logger';\nimport { isDevelopmentEnvironment } from '../common/env';\n\ntype ErrorBoundaryContent = VNode | readonly VNode[];\ntype ErrorBoundaryFallbackValue = ErrorBoundaryContent | Node;\n\nexport type ErrorBoundaryFallbackRender = (\n error: unknown,\n reset: () => void\n) => ErrorBoundaryFallbackValue;\n\nexport interface ErrorBoundaryProps extends Props {\n children?: ErrorBoundaryContent;\n fallback?: ErrorBoundaryFallbackValue | ErrorBoundaryFallbackRender;\n onError?: (error: unknown) => void;\n resetKey?: unknown;\n}\n\ntype ErrorBoundaryState = NonNullable<ComponentInstance['errorBoundaryState']>;\n\ntype ErrorBoundaryVNode = JSXElement & {\n __instance?: ComponentInstance;\n};\n\nfunction getBoundaryMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message || error.name || 'Unknown error';\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n}\n\nfunction ensureBoundaryState(\n instance: ComponentInstance,\n resetKey: unknown\n): ErrorBoundaryState {\n const boundaryState =\n instance.errorBoundaryState ??\n (instance.errorBoundaryState = {\n error: null,\n resetKey,\n notified: false,\n });\n\n if (!Object.is(boundaryState.resetKey, resetKey)) {\n boundaryState.error = null;\n boundaryState.resetKey = resetKey;\n boundaryState.notified = false;\n }\n\n return boundaryState;\n}\n\nfunction createBoundaryVNode(\n instance: ComponentInstance,\n props: ErrorBoundaryProps\n): ErrorBoundaryVNode {\n const key =\n typeof props.key === 'symbol'\n ? null\n : ((props.key ?? null) as string | number | null);\n\n return {\n $$typeof: ELEMENT_TYPE,\n type: __ERROR_BOUNDARY__,\n props: {\n children: props.children,\n fallback: props.fallback,\n onError: props.onError,\n resetKey: props.resetKey,\n },\n key,\n __instance: instance,\n };\n}\n\nexport function ErrorBoundary(props: ErrorBoundaryProps): JSXElement {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n throw new Error(\n '[Askr] ErrorBoundary() can only be used during component render execution.'\n );\n }\n\n ensureBoundaryState(instance, props.resetKey);\n return createBoundaryVNode(instance, props);\n}\n\nexport function isErrorBoundaryVNode(\n value: unknown\n): value is ErrorBoundaryVNode {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as ErrorBoundaryVNode).type === __ERROR_BOUNDARY__\n );\n}\n\nexport function resolveErrorBoundaryState(\n vnode: ErrorBoundaryVNode\n): ErrorBoundaryState | null {\n return vnode.__instance?.errorBoundaryState ?? null;\n}\n\nexport function resolveErrorBoundaryFallback(\n fallback: ErrorBoundaryProps['fallback'],\n error: unknown,\n reset: () => void\n): ErrorBoundaryFallbackValue {\n if (typeof fallback === 'function') {\n return fallback(error, reset);\n }\n\n if (fallback !== undefined) {\n return fallback;\n }\n\n const message = getBoundaryMessage(error);\n const wrapper = document.createElement('div');\n wrapper.setAttribute('role', 'alert');\n wrapper.setAttribute('data-askr-error-boundary', 'true');\n wrapper.style.boxSizing = 'border-box';\n wrapper.style.padding = '1rem';\n wrapper.style.border = '1px solid currentColor';\n wrapper.style.borderRadius = '0.75rem';\n wrapper.style.display = 'grid';\n wrapper.style.gap = '0.75rem';\n wrapper.style.maxWidth = '100%';\n\n const title = document.createElement('strong');\n title.textContent = 'Something went wrong while rendering this view.';\n\n const summary = document.createElement('p');\n summary.textContent =\n 'The app recovered into a visible fallback so the error is not hidden in the console.';\n summary.style.margin = '0';\n\n const details = document.createElement('details');\n details.open = isDevelopmentEnvironment();\n\n const detailsSummary = document.createElement('summary');\n detailsSummary.textContent = 'Error details';\n\n const pre = document.createElement('pre');\n pre.textContent = message;\n pre.style.margin = '0';\n pre.style.whiteSpace = 'pre-wrap';\n pre.style.wordBreak = 'break-word';\n\n const button = document.createElement('button');\n button.type = 'button';\n button.textContent = 'Try again';\n button.addEventListener('click', () => reset());\n\n details.append(detailsSummary, pre);\n wrapper.append(title, summary, details, button);\n return wrapper;\n}\n\nexport function createBoundaryReset(instance: ComponentInstance): () => void {\n return () => {\n const boundaryState = instance.errorBoundaryState;\n if (!boundaryState) {\n return;\n }\n boundaryState.error = null;\n boundaryState.notified = false;\n queueMicrotask(() => {\n instance._enqueueRun?.();\n });\n };\n}\n\nexport function reportBoundaryError(\n instance: ComponentInstance,\n error: unknown,\n onError?: (error: unknown) => void\n): void {\n const boundaryState = instance.errorBoundaryState;\n if (\n boundaryState &&\n Object.is(boundaryState.error, error) &&\n boundaryState.notified\n ) {\n return;\n }\n\n if (boundaryState) {\n boundaryState.error = error;\n boundaryState.notified = true;\n }\n\n try {\n onError?.(error);\n } catch (hookError) {\n logger.error('[Askr] ErrorBoundary onError handler threw:', hookError);\n }\n\n logger.error('[Askr] ErrorBoundary caught render error:', error);\n}\n"],"mappings":";;;;;;;AAgCA,SAAS,mBAAmB,OAAwB;CAClD,IAAI,iBAAiB,OACnB,OAAO,MAAM,WAAW,MAAM,QAAQ;CAGxC,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,UAAU,KAAK;CAC7B,QAAQ;EACN,OAAO,OAAO,KAAK;CACrB;AACF;AAEA,SAAS,oBACP,UACA,UACoB;CACpB,MAAM,gBACJ,SAAS,uBACR,SAAS,qBAAqB;EAC7B,OAAO;EACP;EACA,UAAU;CACZ;CAEF,IAAI,CAAC,OAAO,GAAG,cAAc,UAAU,QAAQ,GAAG;EAChD,cAAc,QAAQ;EACtB,cAAc,WAAW;EACzB,cAAc,WAAW;CAC3B;CAEA,OAAO;AACT;AAEA,SAAS,oBACP,UACA,OACoB;CACpB,MAAM,MACJ,OAAO,MAAM,QAAQ,WACjB,OACE,MAAM,OAAO;CAErB,OAAO;EACL,UAAU;EACV,MAAM;EACN,OAAO;GACL,UAAU,MAAM;GAChB,UAAU,MAAM;GAChB,SAAS,MAAM;GACf,UAAU,MAAM;EAClB;EACA;EACA,YAAY;CACd;AACF;AAEA,SAAgB,cAAc,OAAuC;CACnE,MAAM,WAAW,4BAA4B;CAC7C,IAAI,CAAC,UACH,MAAM,IAAI,MACR,4EACF;CAGF,oBAAoB,UAAU,MAAM,QAAQ;CAC5C,OAAO,oBAAoB,UAAU,KAAK;AAC5C;AAkBA,SAAgB,6BACd,UACA,OACA,OAC4B;CAC5B,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS,OAAO,KAAK;CAG9B,IAAI,aAAa,QACf,OAAO;CAGT,MAAM,UAAU,mBAAmB,KAAK;CACxC,MAAM,UAAU,SAAS,cAAc,KAAK;CAC5C,QAAQ,aAAa,QAAQ,OAAO;CACpC,QAAQ,aAAa,4BAA4B,MAAM;CACvD,QAAQ,MAAM,YAAY;CAC1B,QAAQ,MAAM,UAAU;CACxB,QAAQ,MAAM,SAAS;CACvB,QAAQ,MAAM,eAAe;CAC7B,QAAQ,MAAM,UAAU;CACxB,QAAQ,MAAM,MAAM;CACpB,QAAQ,MAAM,WAAW;CAEzB,MAAM,QAAQ,SAAS,cAAc,QAAQ;CAC7C,MAAM,cAAc;CAEpB,MAAM,UAAU,SAAS,cAAc,GAAG;CAC1C,QAAQ,cACN;CACF,QAAQ,MAAM,SAAS;CAEvB,MAAM,UAAU,SAAS,cAAc,SAAS;CAChD,QAAQ,OAAO,yBAAyB;CAExC,MAAM,iBAAiB,SAAS,cAAc,SAAS;CACvD,eAAe,cAAc;CAE7B,MAAM,MAAM,SAAS,cAAc,KAAK;CACxC,IAAI,cAAc;CAClB,IAAI,MAAM,SAAS;CACnB,IAAI,MAAM,aAAa;CACvB,IAAI,MAAM,YAAY;CAEtB,MAAM,SAAS,SAAS,cAAc,QAAQ;CAC9C,OAAO,OAAO;CACd,OAAO,cAAc;CACrB,OAAO,iBAAiB,eAAe,MAAM,CAAC;CAE9C,QAAQ,OAAO,gBAAgB,GAAG;CAClC,QAAQ,OAAO,OAAO,SAAS,SAAS,MAAM;CAC9C,OAAO;AACT;AAEA,SAAgB,oBAAoB,UAAyC;CAC3E,aAAa;EACX,MAAM,gBAAgB,SAAS;EAC/B,IAAI,CAAC,eACH;EAEF,cAAc,QAAQ;EACtB,cAAc,WAAW;EACzB,qBAAqB;GACnB,SAAS,cAAc;EACzB,CAAC;CACH;AACF;AAEA,SAAgB,oBACd,UACA,OACA,SACM;CACN,MAAM,gBAAgB,SAAS;CAC/B,IACE,iBACA,OAAO,GAAG,cAAc,OAAO,KAAK,KACpC,cAAc,UAEd;CAGF,IAAI,eAAe;EACjB,cAAc,QAAQ;EACtB,cAAc,WAAW;CAC3B;CAEA,IAAI;EACF,UAAU,KAAK;CACjB,SAAS,WAAW;EAClB,OAAO,MAAM,+CAA+C,SAAS;CACvE;CAEA,OAAO,MAAM,6CAA6C,KAAK;AACjE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.d.ts","names":[],"sources":["../../src/components/link.tsx"],"mappings":";;;;KAYY,SAAA,GAAY,IAAA,CACtB,KAAA;EASA,IAAA;EACA,KAAA;EACA,QAAA,GAAW,eAAA;EAAA;;;;EAKX,GAAA;EAPA;;;;EAYA,MAAA;EAAA;;;;EAKA,cAAA;EAyDc;;;EA9Cd,YAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDuB;;iBATT,IAAA;EACd,IAAA;EACA,KAAA,EAAO,SAAA;EACP,QAAA;EACA,GAAA;EACA,MAAA;EAAA,gBACgB,WAAA;EAAA,cACF,SAAA;EAAA,GACX;AAAA,GACF,SAAA,GAAY,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.js","names":[],"sources":["../../src/components/link.tsx"],"sourcesContent":["/**\n * Link component for client-side navigation\n */\n\nimport '../jsx/types';\nimport type { JSXElement } from '../common/jsx';\nimport type { AnchorIntrinsicProps, Props } from '../common/props';\nimport type { RenderableChild } from '../common/vnode';\nimport { navigate } from '../router/navigate';\nimport { applyInteractionPolicy } from '../foundations/interactions/interaction-policy';\nimport { mergeProps } from '../foundations/utilities/merge-props';\n\nexport type LinkProps = Omit<\n Props,\n | 'children'\n | 'href'\n | 'class'\n | 'rel'\n | 'target'\n | 'aria-current'\n | 'aria-label'\n> & {\n href: string;\n class?: string;\n children?: RenderableChild;\n /**\n * Optional rel attribute for link relationships.\n * Common values: \"noopener\", \"noreferrer\", \"nofollow\"\n */\n rel?: string;\n /**\n * Optional target attribute.\n * Use \"_blank\" for new tab/window.\n */\n target?: string;\n /**\n * Optional aria-current attribute for indicating current page/location.\n * Use \"page\" for the current page in navigation.\n */\n 'aria-current'?:\n | 'page'\n | 'step'\n | 'location'\n | 'date'\n | 'time'\n | 'true'\n | 'false';\n /**\n * Optional aria-label for accessibility when link text isn't descriptive enough.\n */\n 'aria-label'?: string;\n};\n\nfunction isSameOriginNavigableHref(href: string): boolean {\n if (typeof window === 'undefined') {\n return true;\n }\n\n try {\n const target = new URL(href, window.location.href);\n return (\n target.origin === window.location.origin &&\n (target.protocol === 'http:' || target.protocol === 'https:')\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Link component that prevents default navigation and uses navigate()\n * Provides declarative way to navigate between routes\n *\n * Accessibility features:\n * - Proper semantic <a> element (not a button)\n * - Supports aria-current for indicating active page\n * - Supports aria-label for descriptive labels\n * - Keyboard accessible (Enter key handled by native <a> element)\n *\n * Respects native browser behaviors:\n * - Middle-click (opens in new tab)\n * - Ctrl/Cmd+click (opens in new tab)\n * - Shift+click (opens in new window)\n * - Alt+click (downloads link)\n * - Right-click context menu\n *\n * Best practices:\n * - Use target=\"_blank\" with rel=\"noopener noreferrer\" for external links\n * - Use aria-current=\"page\" for the current page in navigation\n * - Provide descriptive link text or aria-label\n *\n * Uses applyInteractionPolicy to enforce pit-of-success principles:\n * - Interaction behavior centralized in foundations\n * - Keyboard handling automatic\n * - Composable via mergeProps\n */\nexport function Link({\n href,\n class: className,\n children,\n rel,\n target,\n 'aria-current': ariaCurrent,\n 'aria-label': ariaLabel,\n ...rest\n}: LinkProps): JSXElement {\n const interaction = applyInteractionPolicy({\n isNative: true,\n disabled: false,\n onPress: (e: Event) => {\n const event = e as MouseEvent;\n\n // Only intercept left-click without modifiers\n // Default button to 0 if undefined (for mock events in tests)\n const button = event.button ?? 0;\n if (\n button !== 0 || // not left-click\n event.ctrlKey || // Ctrl/Cmd+click\n event.metaKey || // Cmd on Mac\n event.shiftKey || // Shift+click\n event.altKey // Alt+click\n ) {\n return; // Let browser handle it (new tab, etc.)\n }\n\n // Don't intercept external links or explicit target.\n if (target || !isSameOriginNavigableHref(href)) {\n return; // Let browser handle it\n }\n\n event.preventDefault();\n navigate(href);\n },\n });\n\n const props = mergeProps(rest, {\n ...interaction,\n href,\n class: className,\n rel,\n target,\n 'aria-current': ariaCurrent,\n 'aria-label': ariaLabel,\n });\n\n return <a {...(props as AnchorIntrinsicProps)}>{children}</a>;\n}\n"],"mappings":";;;;;;;;;;AAqDA,SAAS,0BAA0B,MAAuB;CACxD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,IAAI;EACF,MAAM,SAAS,IAAI,IAAI,MAAM,OAAO,SAAS,IAAI;EACjD,OACE,OAAO,WAAW,OAAO,SAAS,WACjC,OAAO,aAAa,WAAW,OAAO,aAAa;CAExD,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,KAAK,EACnB,MACA,OAAO,WACP,UACA,KACA,QACA,gBAAgB,aAChB,cAAc,WACd,GAAG,QACqB;CAwCxB,OAAO,oBAAC,KAAD;EAAG,GAVI,WAAW,MAAM;GAC7B,GA9BkB,uBAAuB;IACzC,UAAU;IACV,UAAU;IACV,UAAU,MAAa;KACrB,MAAM,QAAQ;KAKd,KADe,MAAM,UAAU,OAElB,KACX,MAAM,WACN,MAAM,WACN,MAAM,YACN,MAAM,QAEN;KAIF,IAAI,UAAU,CAAC,0BAA0B,IAAI,GAC3C;KAGF,MAAM,eAAe;KACrB,SAAS,IAAI;IACf;GACF,CAGK;GACH;GACA,OAAO;GACP;GACA;GACA,gBAAgB;GAChB,cAAc;EAChB,CAEe;EAAiC;CAAY,CAAA;AAC9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"case.d.ts","names":[],"sources":["../../src/control/case.ts"],"mappings":";;;;KAeK,UAAA,GAAa,aAAA,UAAuB,aAAa;AAAA,KAE1C,UAAA;EACV,GAAA;EACA,IAAA;EACA,QAAA,EAAU,UAAU;AAAA;AAAA,KAGV,SAAA;EACV,QAAA,GAAW,aAAa;EACxB,QAAA;AAAA;AAAA,iBAmBc,KAAA,CAAM,MAAkB,EAAV,UAAU;AAAA,cAyF3B,IAAA,GAEP,KAAA,EAAO,SAAA,KAAc,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"case.js","names":[],"sources":["../../src/control/case.ts"],"sourcesContent":["import {\n __CONTROL_BOUNDARY__,\n markEagerControlPrimitive,\n} from '../common/control';\nimport type { JSXElement } from '../common/jsx';\nimport type { VNode } from '../common/vnode';\nimport { isDevelopmentEnvironment } from '../common/env';\nimport {\n createCaseState,\n type CaseState,\n type MatchBranch,\n} from '../runtime/control';\nimport { state } from '../runtime/state';\nimport { type BoundaryChild, normalizeBoundaryChild } from './shared';\n\ntype MatchChild = BoundaryChild | (() => BoundaryChild);\n\nexport type MatchProps = {\n key?: string | number | null;\n when: unknown;\n children: MatchChild;\n};\n\nexport type CaseProps = {\n fallback?: BoundaryChild;\n children?: unknown;\n};\n\nfunction flattenChildren(children: unknown): unknown[] {\n if (!Array.isArray(children)) {\n return children == null || children === false ? [] : [children];\n }\n\n const result: unknown[] = [];\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...flattenChildren(child));\n continue;\n }\n result.push(child);\n }\n return result;\n}\n\nexport function Match(_props: MatchProps): null {\n if (isDevelopmentEnvironment()) {\n throw new Error(\n '[askr] <Match> may only be used as a direct child of <Case>.'\n );\n }\n return null;\n}\n\nfunction createCaseFallbackRenderer(\n fallback: BoundaryChild | undefined\n): (() => VNode) | null {\n const normalizedFallback = normalizeBoundaryChild(fallback);\n if (normalizedFallback == null || normalizedFallback === false) {\n return null;\n }\n return () => normalizedFallback;\n}\n\nfunction createMatchBranchKey(\n key: string | number | null | undefined,\n index: number\n): string | number {\n if (key == null) {\n return index;\n }\n return `match:${index}:${typeof key}:${String(key)}`;\n}\n\nfunction readMatchBranches(children: unknown): MatchBranch[] {\n const branches: MatchBranch[] = [];\n const flatChildren = flattenChildren(children);\n\n for (let index = 0; index < flatChildren.length; index += 1) {\n const child = flatChildren[index];\n if (child == null || child === false) {\n continue;\n }\n\n if (\n typeof child === 'object' &&\n child !== null &&\n 'type' in child &&\n (child as JSXElement).type === Match\n ) {\n const element = child as JSXElement;\n const props = (element.props ?? {}) as MatchProps;\n const key = createMatchBranchKey(element.key, index);\n const render =\n typeof props.children === 'function'\n ? () =>\n normalizeBoundaryChild(\n (props.children as () => BoundaryChild)()\n ) as VNode\n : () => normalizeBoundaryChild(props.children) as VNode;\n branches.push({\n key,\n render,\n when: props.when,\n });\n continue;\n }\n\n if (isDevelopmentEnvironment()) {\n throw new Error('[askr] <Case> only accepts <Match> children.');\n }\n }\n\n return branches;\n}\n\nfunction CasePrimitive(props: CaseProps): JSXElement {\n const matches = readMatchBranches(props.children);\n const fallback = createCaseFallbackRenderer(props.fallback);\n\n const caseStateContainer = state<CaseState>(\n createCaseState(matches, fallback)\n );\n const caseState = caseStateContainer();\n\n caseState.matches = matches;\n caseState.fallback = fallback;\n\n return {\n type: __CONTROL_BOUNDARY__,\n _controlState: caseState,\n } as unknown as JSXElement;\n}\n\nexport const Case = markEagerControlPrimitive(\n CasePrimitive as (props: CaseProps) => JSXElement\n) as (props: CaseProps) => JSXElement;\n"],"mappings":";;;;;;AA4BA,SAAS,gBAAgB,UAA8B;CACrD,IAAI,CAAC,MAAM,QAAQ,QAAQ,GACzB,OAAO,YAAY,QAAQ,aAAa,QAAQ,CAAC,IAAI,CAAC,QAAQ;CAGhE,MAAM,SAAoB,CAAC;CAC3B,KAAK,MAAM,SAAS,UAAU;EAC5B,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxB,OAAO,KAAK,GAAG,gBAAgB,KAAK,CAAC;GACrC;EACF;EACA,OAAO,KAAK,KAAK;CACnB;CACA,OAAO;AACT;AAEA,SAAgB,MAAM,QAA0B;CAC9C,IAAI,yBAAyB,GAC3B,MAAM,IAAI,MACR,8DACF;CAEF,OAAO;AACT;AAEA,SAAS,2BACP,UACsB;CACtB,MAAM,qBAAqB,uBAAuB,QAAQ;CAC1D,IAAI,sBAAsB,QAAQ,uBAAuB,OACvD,OAAO;CAET,aAAa;AACf;AAEA,SAAS,qBACP,KACA,OACiB;CACjB,IAAI,OAAO,MACT,OAAO;CAET,OAAO,SAAS,MAAM,GAAG,OAAO,IAAI,GAAG,OAAO,GAAG;AACnD;AAEA,SAAS,kBAAkB,UAAkC;CAC3D,MAAM,WAA0B,CAAC;CACjC,MAAM,eAAe,gBAAgB,QAAQ;CAE7C,KAAK,IAAI,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS,GAAG;EAC3D,MAAM,QAAQ,aAAa;EAC3B,IAAI,SAAS,QAAQ,UAAU,OAC7B;EAGF,IACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAqB,SAAS,OAC/B;GACA,MAAM,UAAU;GAChB,MAAM,QAAS,QAAQ,SAAS,CAAC;GACjC,MAAM,MAAM,qBAAqB,QAAQ,KAAK,KAAK;GACnD,MAAM,SACJ,OAAO,MAAM,aAAa,mBAEpB,uBACG,MAAM,SAAiC,CAC1C,UACI,uBAAuB,MAAM,QAAQ;GACjD,SAAS,KAAK;IACZ;IACA;IACA,MAAM,MAAM;GACd,CAAC;GACD;EACF;EAEA,IAAI,yBAAyB,GAC3B,MAAM,IAAI,MAAM,8CAA8C;CAElE;CAEA,OAAO;AACT;AAEA,SAAS,cAAc,OAA8B;CACnD,MAAM,UAAU,kBAAkB,MAAM,QAAQ;CAChD,MAAM,WAAW,2BAA2B,MAAM,QAAQ;CAK1D,MAAM,YAHqB,MACzB,gBAAgB,SAAS,QAAQ,CAEjB,CAAA,CAAmB;CAErC,UAAU,UAAU;CACpB,UAAU,WAAW;CAErB,OAAO;EACL,MAAM;EACN,eAAe;CACjB;AACF;AAEA,MAAa,OAAO,0BAClB,aACF"}