@askrjs/askr 0.0.52 → 0.0.53

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 (386) hide show
  1. package/README.md +5 -1
  2. package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +182 -9
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.js +103 -0
  5. package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -1
  6. package/dist/benchmark.d.ts +6 -2
  7. package/dist/benchmark.js +63 -11
  8. package/dist/boot/index.d.ts +61 -2
  9. package/dist/boot/index.js +1 -203
  10. package/dist/boot-j2KoN6ss.js +647 -0
  11. package/dist/cleanup-COv77su2.js +487 -0
  12. package/dist/component-internal-B3z7GXlD.js +614 -0
  13. package/dist/component-lifecycle-CO4hXlP4.js +357 -0
  14. package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +8 -1
  15. package/dist/component-scope-CvPba6O6.d.ts +12 -0
  16. package/dist/components/index.d.ts +17 -2
  17. package/dist/components/index.js +39 -1
  18. package/dist/compose-ref-Cc_YkUpM.js +92 -0
  19. package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -1
  20. package/dist/control/index.d.ts +1 -3
  21. package/dist/control/index.js +1 -3
  22. package/dist/control-BQvNVfAd.d.ts +436 -0
  23. package/dist/control-BYyLTFyw.js +165 -0
  24. package/dist/control-Bf4Wkdvv.d.ts +9 -0
  25. package/dist/{common/control.js → control-DhFRTIoE.js} +1 -1
  26. package/dist/data/index.d.ts +2 -6
  27. package/dist/data/index.js +4 -5
  28. package/dist/data-DnxnDxD-.js +559 -0
  29. package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +32 -31
  30. package/dist/deferred-lKE8uR0z.js +386 -0
  31. package/dist/{runtime/effect.js → effect-BwnIvLah.js} +4 -4
  32. package/dist/fastlane-Dw8SOBr9.js +343 -0
  33. package/dist/for-internal-BKf_Tnv1.js +1563 -0
  34. package/dist/foundations/icon/index.d.ts +68 -2
  35. package/dist/foundations/icon/index.js +85 -1
  36. package/dist/foundations/index.d.ts +2 -5
  37. package/dist/foundations/index.js +2 -5
  38. package/dist/foundations/interactions/index.d.ts +264 -6
  39. package/dist/foundations/interactions/index.js +1 -6
  40. package/dist/foundations/state/index.d.ts +32 -1
  41. package/dist/foundations/state/index.js +78 -1
  42. package/dist/foundations/structures/index.d.ts +2 -7
  43. package/dist/foundations/structures/index.js +2 -7
  44. package/dist/foundations/utilities/index.d.ts +2 -6
  45. package/dist/foundations/utilities/index.js +2 -5
  46. package/dist/fx/index.d.ts +190 -3
  47. package/dist/fx/index.js +454 -4
  48. package/dist/index-31Uoz_NS.d.ts +239 -0
  49. package/dist/index-Bki2rqcr.d.ts +233 -0
  50. package/dist/index-BnU0NPwM.d.ts +101 -0
  51. package/dist/index-D73jgYx1.d.ts +48 -0
  52. package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -8
  53. package/dist/index-SJXJkssx.d.ts +44 -0
  54. package/dist/index.d.ts +8 -13
  55. package/dist/index.js +150 -15
  56. package/dist/interactions-w7gQN4ha.js +280 -0
  57. package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -1
  58. package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -5
  59. package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -1
  60. package/dist/jsx-dev-runtime.d.ts +2 -4
  61. package/dist/jsx-dev-runtime.js +7 -5
  62. package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
  63. package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
  64. package/dist/jsx-runtime.d.ts +2 -35
  65. package/dist/jsx-runtime.js +11 -5
  66. package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +4 -5
  67. package/dist/navigate-BVDCzOuB.d.ts +34 -0
  68. package/dist/navigate-CmPLSXyw.js +1449 -0
  69. package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +33 -36
  70. package/dist/query-registry-CQIT4mXr.js +73 -0
  71. package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -6
  72. package/dist/renderer-DzPjeLby.js +6197 -0
  73. package/dist/{runtime/resource-operation.js → resource-operation-CEzfpnDk.js} +118 -15
  74. package/dist/resources/index.d.ts +42 -3
  75. package/dist/resources/index.js +3 -4
  76. package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -1
  77. package/dist/route-matching-vJpvLVbX.js +515 -0
  78. package/dist/router/index.d.ts +166 -14
  79. package/dist/router/index.js +150 -12
  80. package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -28
  81. package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -1
  82. package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -3
  83. package/dist/{runtime/selector.js → selector-DafVYzV4.js} +34 -11
  84. package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -1
  85. package/dist/ssg/index.d.ts +252 -4
  86. package/dist/ssg/index.js +857 -1
  87. package/dist/ssr/index.d.ts +225 -8
  88. package/dist/ssr/index.js +3 -6
  89. package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -1
  90. package/dist/ssr-D3t80Rc0.js +1413 -0
  91. package/dist/{runtime/state.js → state-DPl8lffD.js} +3 -5
  92. package/dist/structures-DUB3HchX.js +221 -0
  93. package/dist/testing/index.d.ts +3 -2
  94. package/dist/testing/index.js +2 -5
  95. package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -5
  96. package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -1
  97. package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -2
  98. package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -2
  99. package/package.json +12 -7
  100. package/dist/bench/components/benchmark-row.d.ts +0 -20
  101. package/dist/bench/components/benchmark-row.js +0 -40
  102. package/dist/bench/components/benchmark-table.js +0 -23
  103. package/dist/bin/askr-ssg.d.ts +0 -27
  104. package/dist/bin/askr-ssg.js +0 -186
  105. package/dist/boot/hydration.js +0 -139
  106. package/dist/boot/root-lifecycle.d.ts +0 -18
  107. package/dist/boot/root-lifecycle.js +0 -209
  108. package/dist/boot/route-startup.js +0 -54
  109. package/dist/boot/types.d.ts +0 -61
  110. package/dist/common/component.d.ts +0 -18
  111. package/dist/common/control.d.ts +0 -12
  112. package/dist/common/dom-range.d.ts +0 -13
  113. package/dist/common/env.js +0 -41
  114. package/dist/common/error-boundary.d.ts +0 -15
  115. package/dist/common/invariant.js +0 -15
  116. package/dist/common/jsx.d.ts +0 -22
  117. package/dist/common/logger.js +0 -34
  118. package/dist/common/promise.js +0 -6
  119. package/dist/common/ssr-errors.d.ts +0 -10
  120. package/dist/common/ssr-errors.js +0 -14
  121. package/dist/common/ssr.d.ts +0 -41
  122. package/dist/common/vnode.d.ts +0 -21
  123. package/dist/components/error-boundary.d.ts +0 -14
  124. package/dist/components/error-boundary.js +0 -41
  125. package/dist/components/link.d.ts +0 -68
  126. package/dist/components/link.js +0 -74
  127. package/dist/control/case.d.ts +0 -18
  128. package/dist/control/case.js +0 -68
  129. package/dist/control/for.d.ts +0 -23
  130. package/dist/control/for.js +0 -61
  131. package/dist/control/shared.d.ts +0 -8
  132. package/dist/control/shared.js +0 -18
  133. package/dist/control/show.d.ts +0 -14
  134. package/dist/control/show.js +0 -32
  135. package/dist/data/data-runtime.d.ts +0 -27
  136. package/dist/data/invalidation.d.ts +0 -8
  137. package/dist/data/invalidation.js +0 -25
  138. package/dist/data/mutation-cell.d.ts +0 -27
  139. package/dist/data/mutation-cell.js +0 -133
  140. package/dist/data/query-cell.d.ts +0 -47
  141. package/dist/data/query-cell.js +0 -324
  142. package/dist/data/query-key.js +0 -40
  143. package/dist/data/shared.js +0 -20
  144. package/dist/data/testing.js +0 -2
  145. package/dist/data/types.d.ts +0 -160
  146. package/dist/foundations/icon/icon.d.ts +0 -52
  147. package/dist/foundations/icon/icon.js +0 -86
  148. package/dist/foundations/icon/icon.types.d.ts +0 -21
  149. package/dist/foundations/interactions/dismissable.d.ts +0 -71
  150. package/dist/foundations/interactions/dismissable.js +0 -24
  151. package/dist/foundations/interactions/focusable.d.ts +0 -21
  152. package/dist/foundations/interactions/focusable.js +0 -16
  153. package/dist/foundations/interactions/hoverable.d.ts +0 -25
  154. package/dist/foundations/interactions/hoverable.js +0 -13
  155. package/dist/foundations/interactions/interaction-policy.d.ts +0 -49
  156. package/dist/foundations/interactions/interaction-policy.js +0 -120
  157. package/dist/foundations/interactions/pressable.d.ts +0 -60
  158. package/dist/foundations/interactions/pressable.js +0 -49
  159. package/dist/foundations/interactions/roving-focus.d.ts +0 -51
  160. package/dist/foundations/interactions/roving-focus.js +0 -69
  161. package/dist/foundations/state/controllable.d.ts +0 -32
  162. package/dist/foundations/state/controllable.js +0 -80
  163. package/dist/foundations/structures/collection.d.ts +0 -51
  164. package/dist/foundations/structures/collection.js +0 -49
  165. package/dist/foundations/structures/layer.d.ts +0 -80
  166. package/dist/foundations/structures/layer.js +0 -79
  167. package/dist/foundations/structures/layout.d.ts +0 -32
  168. package/dist/foundations/structures/layout.js +0 -11
  169. package/dist/foundations/structures/portal.d.ts +0 -2
  170. package/dist/foundations/structures/portal.js +0 -3
  171. package/dist/foundations/structures/presence.d.ts +0 -36
  172. package/dist/foundations/structures/presence.js +0 -37
  173. package/dist/foundations/structures/slot.d.ts +0 -34
  174. package/dist/foundations/structures/slot.js +0 -39
  175. package/dist/foundations/utilities/aria.d.ts +0 -15
  176. package/dist/foundations/utilities/aria.js +0 -15
  177. package/dist/foundations/utilities/compose-handlers.d.ts +0 -36
  178. package/dist/foundations/utilities/compose-handlers.js +0 -18
  179. package/dist/foundations/utilities/compose-ref.js +0 -16
  180. package/dist/foundations/utilities/event-types.d.ts +0 -19
  181. package/dist/foundations/utilities/merge-props.d.ts +0 -4
  182. package/dist/foundations/utilities/merge-props.js +0 -47
  183. package/dist/foundations/utilities/use-id.d.ts +0 -31
  184. package/dist/fx/fx.d.ts +0 -32
  185. package/dist/fx/fx.js +0 -211
  186. package/dist/fx/noop.js +0 -7
  187. package/dist/fx/timing.d.ts +0 -158
  188. package/dist/fx/timing.js +0 -241
  189. package/dist/jsx/index.d.ts +0 -2
  190. package/dist/jsx/index.js +0 -4
  191. package/dist/jsx/types.js +0 -2
  192. package/dist/jsx/utils.d.ts +0 -4
  193. package/dist/jsx/utils.js +0 -17
  194. package/dist/jsx-runtime2.d.ts +0 -3
  195. package/dist/jsx-runtime2.js +0 -4
  196. package/dist/renderer/attributes.js +0 -254
  197. package/dist/renderer/boundaries.js +0 -142
  198. package/dist/renderer/boundary-materialization.js +0 -72
  199. package/dist/renderer/boundary-range-adoption.js +0 -76
  200. package/dist/renderer/boundary-range-sync.js +0 -101
  201. package/dist/renderer/boundary-state.js +0 -50
  202. package/dist/renderer/child-shape.js +0 -83
  203. package/dist/renderer/children-fastpath.js +0 -149
  204. package/dist/renderer/children.js +0 -158
  205. package/dist/renderer/cleanup.js +0 -267
  206. package/dist/renderer/component-host-cleanup.js +0 -143
  207. package/dist/renderer/component-host-instances.js +0 -116
  208. package/dist/renderer/component-host-replacement.js +0 -105
  209. package/dist/renderer/component-host-results.js +0 -138
  210. package/dist/renderer/component-host.js +0 -172
  211. package/dist/renderer/dom-host.js +0 -11
  212. package/dist/renderer/dom-internal.js +0 -243
  213. package/dist/renderer/dom-range.js +0 -161
  214. package/dist/renderer/dom.js +0 -11
  215. package/dist/renderer/element-children.js +0 -359
  216. package/dist/renderer/env.js +0 -2
  217. package/dist/renderer/error-boundary-dom.js +0 -86
  218. package/dist/renderer/evaluate-dom-range.js +0 -84
  219. package/dist/renderer/evaluate-reconcile.js +0 -257
  220. package/dist/renderer/evaluate.js +0 -95
  221. package/dist/renderer/fastpath.js +0 -142
  222. package/dist/renderer/for-commit-dom-map.js +0 -71
  223. package/dist/renderer/for-commit-removal.js +0 -27
  224. package/dist/renderer/for-commit-reorder.js +0 -87
  225. package/dist/renderer/for-commit.js +0 -442
  226. package/dist/renderer/hydration-boundaries.js +0 -60
  227. package/dist/renderer/hydration-listener-transaction.js +0 -49
  228. package/dist/renderer/index.js +0 -39
  229. package/dist/renderer/intrinsic-blueprint-analysis.js +0 -202
  230. package/dist/renderer/intrinsic-blueprint-bindings.js +0 -152
  231. package/dist/renderer/intrinsic-blueprint-materialization.js +0 -100
  232. package/dist/renderer/intrinsic-blueprint.js +0 -30
  233. package/dist/renderer/intrinsic-hydration-adoption.js +0 -66
  234. package/dist/renderer/keyed-children.js +0 -26
  235. package/dist/renderer/keyed.js +0 -167
  236. package/dist/renderer/namespaces.js +0 -21
  237. package/dist/renderer/prop-bindings.js +0 -315
  238. package/dist/renderer/reactive-child-dom.js +0 -139
  239. package/dist/renderer/reactive-child-sources.js +0 -182
  240. package/dist/renderer/reactive-children.js +0 -303
  241. package/dist/renderer/reconcile-commit.js +0 -36
  242. package/dist/renderer/reconcile-fastpaths.js +0 -100
  243. package/dist/renderer/reconcile-resolution.js +0 -163
  244. package/dist/renderer/reconcile.js +0 -37
  245. package/dist/renderer/retained-element-rollback.js +0 -288
  246. package/dist/renderer/stable-patch.js +0 -80
  247. package/dist/renderer/static-reuse.js +0 -94
  248. package/dist/renderer/types.js +0 -2
  249. package/dist/renderer/utils.js +0 -265
  250. package/dist/router/access.js +0 -34
  251. package/dist/router/activity.d.ts +0 -9
  252. package/dist/router/activity.js +0 -85
  253. package/dist/router/authoring.d.ts +0 -21
  254. package/dist/router/authoring.js +0 -196
  255. package/dist/router/internal-types.d.ts +0 -30
  256. package/dist/router/lazy.d.ts +0 -18
  257. package/dist/router/lazy.js +0 -50
  258. package/dist/router/manifest.d.ts +0 -9
  259. package/dist/router/manifest.js +0 -47
  260. package/dist/router/match.js +0 -120
  261. package/dist/router/navigate.d.ts +0 -10
  262. package/dist/router/navigate.js +0 -73
  263. package/dist/router/navigation-registry.d.ts +0 -31
  264. package/dist/router/navigation-registry.js +0 -103
  265. package/dist/router/navigation-scroll.d.ts +0 -13
  266. package/dist/router/navigation-scroll.js +0 -91
  267. package/dist/router/navigation-targets.d.ts +0 -30
  268. package/dist/router/navigation-targets.js +0 -634
  269. package/dist/router/policy.d.ts +0 -27
  270. package/dist/router/policy.js +0 -130
  271. package/dist/router/rendering.d.ts +0 -9
  272. package/dist/router/rendering.js +0 -47
  273. package/dist/router/resolution.d.ts +0 -3
  274. package/dist/router/resolution.js +0 -84
  275. package/dist/router/route-context.js +0 -77
  276. package/dist/router/route-matching.d.ts +0 -19
  277. package/dist/router/route-matching.js +0 -173
  278. package/dist/router/route-query.d.ts +0 -16
  279. package/dist/router/route-query.js +0 -45
  280. package/dist/router/route.d.ts +0 -8
  281. package/dist/router/route.js +0 -10
  282. package/dist/router/store.d.ts +0 -49
  283. package/dist/router/store.js +0 -169
  284. package/dist/router/testing.js +0 -4
  285. package/dist/runtime/access.d.ts +0 -19
  286. package/dist/runtime/access.js +0 -43
  287. package/dist/runtime/child-scope.d.ts +0 -41
  288. package/dist/runtime/child-scope.js +0 -134
  289. package/dist/runtime/component-cleanup.d.ts +0 -15
  290. package/dist/runtime/component-cleanup.js +0 -68
  291. package/dist/runtime/component-commit.js +0 -167
  292. package/dist/runtime/component-facade.d.ts +0 -5
  293. package/dist/runtime/component-facade.js +0 -6
  294. package/dist/runtime/component-internal.d.ts +0 -105
  295. package/dist/runtime/component-internal.js +0 -237
  296. package/dist/runtime/component-lifecycle.d.ts +0 -10
  297. package/dist/runtime/component-lifecycle.js +0 -33
  298. package/dist/runtime/component-scope.d.ts +0 -54
  299. package/dist/runtime/component.d.ts +0 -5
  300. package/dist/runtime/component.js +0 -6
  301. package/dist/runtime/context.d.ts +0 -72
  302. package/dist/runtime/context.js +0 -236
  303. package/dist/runtime/control.d.ts +0 -62
  304. package/dist/runtime/control.js +0 -239
  305. package/dist/runtime/derive.d.ts +0 -16
  306. package/dist/runtime/derive.js +0 -140
  307. package/dist/runtime/dev-namespace.d.ts +0 -30
  308. package/dist/runtime/dev-namespace.js +0 -64
  309. package/dist/runtime/effect.d.ts +0 -35
  310. package/dist/runtime/error-boundary.d.ts +0 -4
  311. package/dist/runtime/error-boundary.js +0 -29
  312. package/dist/runtime/events.d.ts +0 -58
  313. package/dist/runtime/events.js +0 -201
  314. package/dist/runtime/execution-model.d.ts +0 -6
  315. package/dist/runtime/execution-model.js +0 -13
  316. package/dist/runtime/fastlane.d.ts +0 -33
  317. package/dist/runtime/fastlane.js +0 -173
  318. package/dist/runtime/for-bench.d.ts +0 -40
  319. package/dist/runtime/for-bench.js +0 -13
  320. package/dist/runtime/for-internal.d.ts +0 -106
  321. package/dist/runtime/for-internal.js +0 -285
  322. package/dist/runtime/for-reconcile.d.ts +0 -7
  323. package/dist/runtime/for-reconcile.js +0 -442
  324. package/dist/runtime/for-scopes.d.ts +0 -26
  325. package/dist/runtime/for-scopes.js +0 -280
  326. package/dist/runtime/for-signals.d.ts +0 -39
  327. package/dist/runtime/for-signals.js +0 -213
  328. package/dist/runtime/for-types.d.ts +0 -8
  329. package/dist/runtime/for.d.ts +0 -4
  330. package/dist/runtime/for.js +0 -5
  331. package/dist/runtime/index.d.ts +0 -24
  332. package/dist/runtime/index.js +0 -33
  333. package/dist/runtime/lifecycle-batch.d.ts +0 -59
  334. package/dist/runtime/lifecycle-batch.js +0 -178
  335. package/dist/runtime/lifecycle-operation-settlement.d.ts +0 -5
  336. package/dist/runtime/lifecycle-operation-settlement.js +0 -51
  337. package/dist/runtime/lifecycle-operations.d.ts +0 -30
  338. package/dist/runtime/operations.d.ts +0 -3
  339. package/dist/runtime/operations.js +0 -3
  340. package/dist/runtime/perf-metrics.d.ts +0 -27
  341. package/dist/runtime/perf-metrics.js +0 -6
  342. package/dist/runtime/portal.d.ts +0 -21
  343. package/dist/runtime/readable.d.ts +0 -34
  344. package/dist/runtime/readable.js +0 -183
  345. package/dist/runtime/resource-cell.js +0 -112
  346. package/dist/runtime/resource-operation.d.ts +0 -12
  347. package/dist/runtime/runtime.js +0 -57
  348. package/dist/runtime/selector-store.js +0 -22
  349. package/dist/runtime/selector.d.ts +0 -10
  350. package/dist/runtime/snapshot-source.d.ts +0 -9
  351. package/dist/runtime/state.d.ts +0 -54
  352. package/dist/ssg/batch-render.js +0 -101
  353. package/dist/ssg/create-static-gen.d.ts +0 -66
  354. package/dist/ssg/create-static-gen.js +0 -250
  355. package/dist/ssg/generate-metadata.js +0 -92
  356. package/dist/ssg/generation-plan.js +0 -68
  357. package/dist/ssg/incremental-manifest.js +0 -54
  358. package/dist/ssg/resolve-ssg-data.js +0 -103
  359. package/dist/ssg/route-utils.js +0 -22
  360. package/dist/ssg/static-routes.js +0 -100
  361. package/dist/ssg/types.d.ts +0 -188
  362. package/dist/ssg/write-static-files.js +0 -77
  363. package/dist/ssr/attrs.js +0 -92
  364. package/dist/ssr/boundaries.js +0 -124
  365. package/dist/ssr/component-runtime.js +0 -85
  366. package/dist/ssr/context.d.ts +0 -49
  367. package/dist/ssr/context.js +0 -89
  368. package/dist/ssr/errors.d.ts +0 -9
  369. package/dist/ssr/errors.js +0 -12
  370. package/dist/ssr/escape.js +0 -191
  371. package/dist/ssr/hydration-data.js +0 -8
  372. package/dist/ssr/hydration-verify.d.ts +0 -11
  373. package/dist/ssr/hydration-verify.js +0 -171
  374. package/dist/ssr/index-internal.d.ts +0 -14
  375. package/dist/ssr/index-internal.js +0 -17
  376. package/dist/ssr/render-keys.js +0 -14
  377. package/dist/ssr/render-resolved.d.ts +0 -19
  378. package/dist/ssr/render-resolved.js +0 -33
  379. package/dist/ssr/render-sync.d.ts +0 -20
  380. package/dist/ssr/render-sync.js +0 -283
  381. package/dist/ssr/route-policy-resolution.js +0 -76
  382. package/dist/ssr/route-render.d.ts +0 -76
  383. package/dist/ssr/route-render.js +0 -118
  384. package/dist/ssr/sink.d.ts +0 -25
  385. package/dist/ssr/sink.js +0 -84
  386. package/dist/ssr/types.d.ts +0 -22
@@ -1,265 +0,0 @@
1
- import { getRuntimeEnv } from "../common/env.js";
2
- import { logger } from "../common/logger.js";
3
- import { runRuntimeHandlerScope } from "../runtime/access.js";
4
- import { incDevCounter, setDevValue } from "../runtime/dev-namespace.js";
5
- import "../runtime/index.js";
6
- import { getPublicAttributeName } from "../common/attr-names.js";
7
- import "./env.js";
8
- //#region src/renderer/utils.ts
9
- /**
10
- * Shared utilities for the renderer module.
11
- * Consolidates common patterns to reduce code duplication.
12
- */
13
- const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
14
- const DIRECT_REPLACE_CHILDREN_SPREAD_LIMIT = 4096;
15
- function canUseDirectReplaceChildrenSpread(count) {
16
- return count <= DIRECT_REPLACE_CHILDREN_SPREAD_LIMIT;
17
- }
18
- const CLICK_EVENT_PROP = {
19
- eventName: "click",
20
- capture: false
21
- };
22
- const CLICK_CAPTURE_EVENT_PROP = {
23
- eventName: "click",
24
- capture: true
25
- };
26
- const handlerCache = /* @__PURE__ */ new WeakMap();
27
- let cacheSize = 0;
28
- const MAX_CACHE_SIZE = 1e3;
29
- /**
30
- * Parse an event prop name (e.g., 'onClick') to its DOM event name (e.g., 'click')
31
- */
32
- function parseEventName(propName) {
33
- return parseEventProp(propName)?.eventName ?? null;
34
- }
35
- function parseEventProp(propName) {
36
- if (propName === "onClick") return CLICK_EVENT_PROP;
37
- if (propName === "onClickCapture") return CLICK_CAPTURE_EVENT_PROP;
38
- if (!propName.startsWith("on") || propName.length <= 2) return null;
39
- const capture = propName.endsWith("Capture") && propName.length > 9;
40
- const normalizedPropName = capture ? propName.slice(0, -7) : propName;
41
- return normalizedPropName.length <= 2 ? null : {
42
- eventName: normalizedPropName.slice(2).charAt(0).toLowerCase() + normalizedPropName.slice(3).toLowerCase(),
43
- capture
44
- };
45
- }
46
- function getEventListenerKey(eventName, capture = false) {
47
- return capture ? `${eventName}:capture` : eventName;
48
- }
49
- function getEventListenerOptions(eventName, capture = false) {
50
- const passiveOptions = getPassiveOptions(eventName);
51
- if (!capture) return passiveOptions;
52
- return passiveOptions ? {
53
- ...passiveOptions,
54
- capture: true
55
- } : { capture: true };
56
- }
57
- /**
58
- * Get default event listener options for passive events
59
- */
60
- function getPassiveOptions(eventName) {
61
- if (eventName === "wheel" || eventName === "scroll" || eventName.startsWith("touch")) return { passive: true };
62
- }
63
- /**
64
- * Create a wrapped event handler that integrates with the scheduler
65
- * Uses caching to avoid recreating wrappers for the same handler
66
- */
67
- function createWrappedHandler(handler, flushAfter = false) {
68
- const cachedByFlush = handlerCache.get(handler);
69
- if (cachedByFlush) {
70
- const cached = cachedByFlush.get(flushAfter);
71
- if (cached) return cached;
72
- }
73
- const wrapped = (event) => {
74
- try {
75
- runRuntimeHandlerScope(() => {
76
- try {
77
- handler(event);
78
- } catch (error) {
79
- logger.error("[Askr] Event handler error:", error);
80
- }
81
- }, flushAfter ? "sync" : "defer");
82
- } catch (err) {
83
- if (flushAfter) queueMicrotask(() => {
84
- throw err;
85
- });
86
- else logger.error("[Askr] Event handler error:", err);
87
- }
88
- };
89
- try {
90
- if (!handlerCache.has(handler)) if (cacheSize >= MAX_CACHE_SIZE) {} else {
91
- cacheSize++;
92
- handlerCache.set(handler, /* @__PURE__ */ new Map());
93
- }
94
- handlerCache.get(handler)?.set(flushAfter, wrapped);
95
- } catch {}
96
- return wrapped;
97
- }
98
- function createMutableWrappedHandler(handler, flushAfter = false) {
99
- let currentHandler = handler;
100
- const wrapped = (event) => {
101
- try {
102
- runRuntimeHandlerScope(() => {
103
- try {
104
- currentHandler(event);
105
- } catch (error) {
106
- logger.error("[Askr] Event handler error:", error);
107
- }
108
- }, flushAfter ? "sync" : "defer");
109
- } catch (err) {
110
- if (flushAfter) queueMicrotask(() => {
111
- throw err;
112
- });
113
- else logger.error("[Askr] Event handler error:", err);
114
- }
115
- };
116
- return {
117
- handler: wrapped,
118
- updateHandler(nextHandler) {
119
- currentHandler = nextHandler;
120
- }
121
- };
122
- }
123
- /** Props that should be skipped during attribute processing */
124
- function isSkippedProp(key) {
125
- return key === "children" || key === "key" || key === "ref";
126
- }
127
- /** Check if prop should be ignored for prop-change detection */
128
- function isIgnoredForPropChanges(key) {
129
- if (key === "children" || key === "key") return true;
130
- if (key.startsWith("on") && key.length > 2) return true;
131
- if (key.startsWith("data-")) return true;
132
- return false;
133
- }
134
- /**
135
- * Check if an element's current attribute value differs from vnode value
136
- */
137
- function hasPropChanged(el, key, value) {
138
- try {
139
- if (key === "class" || key === "className") return readElementClassName(el) !== String(value);
140
- if (key === "value" || key === "checked") return el[key] !== value;
141
- const attr = el.getAttribute(getRenderedAttributeName(el, key));
142
- if (value === void 0 || value === null || value === false) return attr !== null;
143
- return String(value) !== attr;
144
- } catch {
145
- return true;
146
- }
147
- }
148
- function isSVGDomElement(el) {
149
- return typeof SVGElement !== "undefined" && el instanceof SVGElement;
150
- }
151
- function getRenderedAttributeName(el, propName) {
152
- const attributeName = getPublicAttributeName(propName);
153
- return el.namespaceURI === SVG_NAMESPACE ? attributeName : attributeName.toLowerCase();
154
- }
155
- function setRenderedAttribute(el, propName, value) {
156
- el.setAttribute(getRenderedAttributeName(el, propName), value);
157
- }
158
- function removeRenderedAttribute(el, propName) {
159
- el.removeAttribute(getRenderedAttributeName(el, propName));
160
- }
161
- function readElementClassName(el) {
162
- if (isSVGDomElement(el)) return el.getAttribute("class") ?? "";
163
- return el.className;
164
- }
165
- function writeElementClassName(el, value) {
166
- if (isSVGDomElement(el)) {
167
- if (value.length > 0) el.setAttribute("class", value);
168
- else el.removeAttribute("class");
169
- return;
170
- }
171
- el.className = value;
172
- }
173
- function tagNamesEqualIgnoreCase(a, b) {
174
- if (a === b) return true;
175
- if (a.length !== b.length) return false;
176
- for (let index = 0; index < a.length; index += 1) {
177
- const aCode = a.charCodeAt(index);
178
- const bCode = b.charCodeAt(index);
179
- if (aCode === bCode) continue;
180
- if ((aCode >= 65 && aCode <= 90 ? aCode + 32 : aCode) !== (bCode >= 65 && bCode <= 90 ? bCode + 32 : bCode)) return false;
181
- }
182
- return true;
183
- }
184
- /**
185
- * Check if a vnode has non-trivial props (excluding events and data-*)
186
- */
187
- function hasNonTrivialProps(props) {
188
- for (const k of Object.keys(props)) {
189
- if (isIgnoredForPropChanges(k)) continue;
190
- return true;
191
- }
192
- return false;
193
- }
194
- /**
195
- * Check for prop changes between vnode and existing element
196
- */
197
- function checkPropChanges(el, props) {
198
- for (const k of Object.keys(props)) {
199
- if (isIgnoredForPropChanges(k)) continue;
200
- if (hasPropChanged(el, k, props[k])) return true;
201
- }
202
- return false;
203
- }
204
- /**
205
- * Extract key from a vnode object
206
- */
207
- function extractKey(vnode) {
208
- if (typeof vnode !== "object" || vnode === null) return void 0;
209
- const obj = vnode;
210
- const rawKey = obj.key ?? obj.props?.key;
211
- if (rawKey === void 0 || rawKey === null) return void 0;
212
- return typeof rawKey === "symbol" ? String(rawKey) : rawKey;
213
- }
214
- /**
215
- * Build a key map from element's children
216
- */
217
- function buildKeyMapFromChildren(parent) {
218
- const map = /* @__PURE__ */ new Map();
219
- for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {
220
- const key = getMaterializedKey(ch);
221
- if (key !== void 0) map.set(key, ch);
222
- }
223
- return map;
224
- }
225
- function getMaterializedKey(element) {
226
- const value = element.getAttribute("data-key");
227
- if (value === null) return void 0;
228
- return element.getAttribute("data-askr-key-kind") === "number" ? Number(value) : value;
229
- }
230
- /**
231
- * Record DOM replace operation for diagnostics
232
- */
233
- function recordDOMReplace(source) {
234
- try {
235
- incDevCounter("__DOM_REPLACE_COUNT");
236
- setDevValue(`__LAST_DOM_REPLACE_STACK_${source}`, (/* @__PURE__ */ new Error()).stack);
237
- } catch {}
238
- }
239
- /**
240
- * Record fast-path stats for diagnostics
241
- */
242
- function recordFastPathStats(stats, counterName) {
243
- try {
244
- setDevValue("__LAST_FASTPATH_STATS", stats);
245
- setDevValue("__LAST_FASTPATH_COMMIT_COUNT", 1);
246
- if (counterName) incDevCounter(counterName);
247
- } catch {}
248
- }
249
- /**
250
- * Conditionally log debug info for fast-path operations
251
- */
252
- function logFastPathDebug(message, indexOrData, data) {
253
- const env = getRuntimeEnv();
254
- if (env.ASKR_FASTPATH_DEBUG === "1" || env.ASKR_FASTPATH_DEBUG === "true") if (data !== void 0) logger.warn(`[Askr][FASTPATH] ${message}`, indexOrData, data);
255
- else if (indexOrData !== void 0) logger.warn(`[Askr][FASTPATH] ${message}`, indexOrData);
256
- else logger.warn(`[Askr][FASTPATH] ${message}`);
257
- }
258
- /**
259
- * Get current high-resolution timestamp
260
- */
261
- function now() {
262
- return typeof performance !== "undefined" && performance.now ? performance.now() : Date.now();
263
- }
264
- //#endregion
265
- export { DIRECT_REPLACE_CHILDREN_SPREAD_LIMIT, buildKeyMapFromChildren, canUseDirectReplaceChildrenSpread, checkPropChanges, createMutableWrappedHandler, createWrappedHandler, extractKey, getEventListenerKey, getEventListenerOptions, getMaterializedKey, getPassiveOptions, getRenderedAttributeName, hasNonTrivialProps, hasPropChanged, isIgnoredForPropChanges, isSVGDomElement, isSkippedProp, logFastPathDebug, now, parseEventName, parseEventProp, readElementClassName, recordDOMReplace, recordFastPathStats, removeRenderedAttribute, setRenderedAttribute, tagNamesEqualIgnoreCase, writeElementClassName };
@@ -1,34 +0,0 @@
1
- import { requireAuth, requireGuest, requirePermission, requireRole } from "./policy.js";
2
- //#region src/router/access.ts
3
- function hasBuiltInAuthMetadata(node) {
4
- return node.auth !== void 0 || !!node.role || !!node.permission;
5
- }
6
- function validateSameNodeAccessMetadata(node) {
7
- if (node.auth === "guest" && (!!node.role || !!node.permission)) throw new Error("Guest-only routes cannot be combined with role or permission requirements.");
8
- }
9
- function validateAccessMetadata(node, context) {
10
- validateSameNodeAccessMetadata(node);
11
- const requiresAuthenticated = node.auth === true || !!node.role || !!node.permission;
12
- if (node.auth === "guest" && (context.state.authenticated || !!node.role || !!node.permission)) throw new Error("Guest-only routes cannot be combined with authenticated access requirements.");
13
- if (context.state.guestOnly && requiresAuthenticated) throw new Error("Child routes cannot weaken a guest-only access scope with authenticated requirements.");
14
- if (hasBuiltInAuthMetadata(node) && !context.authConfigured) throw new Error("Routes using `auth`, `role`, or `permission` require `auth.resolve` in registerRoutes(...).");
15
- }
16
- function nextAccessScopeState(node, state) {
17
- const requiresAuthenticated = node.auth === true || !!node.role || !!node.permission;
18
- return {
19
- guestOnly: state.guestOnly || node.auth === "guest",
20
- authenticated: state.authenticated || requiresAuthenticated
21
- };
22
- }
23
- function compileNodePolicies(node) {
24
- validateSameNodeAccessMetadata(node);
25
- const compiled = [];
26
- if (node.auth === true) compiled.push(requireAuth());
27
- else if (node.auth === "guest") compiled.push(requireGuest());
28
- if (node.role) compiled.push(requireRole(node.role));
29
- if (node.permission) compiled.push(requirePermission(node.permission));
30
- if (node.policies?.length) compiled.push(...node.policies);
31
- return compiled;
32
- }
33
- //#endregion
34
- export { compileNodePolicies, nextAccessScopeState, validateAccessMetadata };
@@ -1,9 +0,0 @@
1
- import { RouteMatch, RouteParams, RouteSnapshot } from "../common/router.js";
2
-
3
- //#region src/router/activity.d.ts
4
- declare function setServerLocation(url: string | null): void;
5
- declare function isRoutePathActive(pathOrPaths: string | readonly string[]): boolean;
6
- declare function currentRoute<TParams extends RouteParams = RouteParams>(): RouteSnapshot<TParams>;
7
- declare function syncCurrentRouteSnapshot(pathname: string, search: string, hash: string, activityMatches?: readonly RouteMatch[]): void;
8
- //#endregion
9
- export { currentRoute };
@@ -1,85 +0,0 @@
1
- import { markReactivePropsDirtySource, markReadableDerivedSubscribersDirty, notifyReadableReaders, recordReadableRead } from "../runtime/readable.js";
2
- import { getCurrentComponentInstance } from "../runtime/component-scope.js";
3
- import { getActiveRenderContext } from "../common/render-context.js";
4
- import { syncRouteActivitySnapshot } from "../common/route-activity.js";
5
- import "../runtime/index.js";
6
- import { getActiveRoutes } from "./store.js";
7
- import { deepFreeze, makeQuery, parseLocation } from "./route-context.js";
8
- import { computeMatchesFromRoutes } from "./route-matching.js";
9
- import "./resolution.js";
10
- //#region src/router/activity.ts
11
- let currentRouteSnapshot = buildRouteSnapshot("/", "", "");
12
- const currentRouteSource = (() => currentRouteSnapshot);
13
- currentRouteSource._readers = /* @__PURE__ */ new Map();
14
- let serverLocation = null;
15
- function setServerLocation(url) {
16
- serverLocation = url;
17
- if (url) {
18
- const parsed = parseLocation(url);
19
- syncRouteActivitySnapshot(parsed.pathname, computeMatchesFromRoutes(parsed.pathname, getActiveRoutes()));
20
- return;
21
- }
22
- syncRouteActivitySnapshot(currentRouteSnapshot.path, currentRouteSnapshot.matches);
23
- }
24
- function buildRouteSnapshot(pathname, search, hash) {
25
- const query = makeQuery(search);
26
- const matches = computeMatchesFromRoutes(pathname, getActiveRoutes());
27
- return Object.freeze({
28
- path: pathname,
29
- params: deepFreeze({ ...matches[0]?.params }),
30
- query,
31
- hash: hash || null,
32
- matches: Object.freeze(matches)
33
- });
34
- }
35
- function setCurrentRouteSnapshot(pathname, search, hash, activityMatches) {
36
- currentRouteSnapshot = buildRouteSnapshot(pathname, search, hash);
37
- syncRouteActivitySnapshot(pathname, activityMatches ?? currentRouteSnapshot.matches);
38
- const instance = getCurrentComponentInstance();
39
- markReadableDerivedSubscribersDirty(currentRouteSource);
40
- markReactivePropsDirtySource(currentRouteSource);
41
- notifyReadableReaders(currentRouteSource, instance);
42
- }
43
- function readCurrentRouteLocation() {
44
- const renderContext = getActiveRenderContext();
45
- if (renderContext?.url) return parseLocation(renderContext.url);
46
- if (typeof window !== "undefined" && window.location) return {
47
- pathname: window.location.pathname || "/",
48
- search: window.location.search || "",
49
- hash: window.location.hash || ""
50
- };
51
- if (serverLocation) return parseLocation(serverLocation);
52
- return {
53
- pathname: currentRouteSnapshot.path,
54
- search: "",
55
- hash: currentRouteSnapshot.hash ?? ""
56
- };
57
- }
58
- function readCurrentRouteSnapshot() {
59
- const instance = getCurrentComponentInstance();
60
- if (!instance) throw new Error("currentRoute() can only be called during component render execution. Call currentRoute() from inside your component function.");
61
- const { pathname, search, hash } = readCurrentRouteLocation();
62
- const query = makeQuery(search);
63
- const matches = computeMatchesFromRoutes(pathname, getActiveRoutes());
64
- const instanceParams = instance.props;
65
- const params = deepFreeze({ ...Object.keys(instanceParams).length > 0 ? instanceParams : matches[0]?.params ?? {} });
66
- return Object.freeze({
67
- path: pathname,
68
- params,
69
- query,
70
- hash: hash || null,
71
- matches: Object.freeze(matches)
72
- });
73
- }
74
- function currentRoute() {
75
- const instance = getCurrentComponentInstance();
76
- if (!instance) throw new Error("currentRoute() can only be called during component render execution. Call currentRoute() from inside your component function.");
77
- if (typeof window === "undefined" || instance.ssr) return readCurrentRouteSnapshot();
78
- recordReadableRead(currentRouteSource);
79
- return readCurrentRouteSnapshot();
80
- }
81
- function syncCurrentRouteSnapshot(pathname, search, hash, activityMatches) {
82
- setCurrentRouteSnapshot(pathname, search, hash, activityMatches);
83
- }
84
- //#endregion
85
- export { currentRoute, setServerLocation, syncCurrentRouteSnapshot };
@@ -1,21 +0,0 @@
1
- import { GroupHelperOptions, PageHelperOptions, RegisterRoutesOptions, RouteComponent, RouteDefinition, RouteOptions, RouteParams, RoutePathParams } from "../common/router.js";
2
- import { AnyRouteComponent } from "./internal-types.js";
3
-
4
- //#region src/router/authoring.d.ts
5
- type RouteComponentParam<TComponent extends AnyRouteComponent> = Parameters<TComponent> extends [] ? unknown : Parameters<TComponent>[0];
6
- type CompatibleAbsoluteRouteComponent<Path extends string, TComponent extends AnyRouteComponent> = Parameters<TComponent> extends [] ? TComponent : RoutePathParams<Path> extends RouteComponentParam<TComponent> ? TComponent : never;
7
- type CompatibleRelativeRouteComponent<Path extends string, TComponent extends AnyRouteComponent> = Parameters<TComponent> extends [] ? TComponent : RouteComponentParam<TComponent> extends Record<keyof RoutePathParams<Path>, string> ? TComponent : never;
8
- type CompatibleRouteComponent<Path extends string, TComponent extends AnyRouteComponent> = Path extends `/${string}` ? CompatibleAbsoluteRouteComponent<Path, TComponent> : CompatibleRelativeRouteComponent<Path, TComponent>;
9
- type RouteOptionsForComponent<Path extends string, TComponent extends AnyRouteComponent> = Parameters<TComponent> extends [] ? RouteOptions<RoutePathParams<Path>> : RouteComponentParam<TComponent> extends RouteParams ? RouteOptions<RouteComponentParam<TComponent>> : RouteOptions<RoutePathParams<Path>>;
10
- declare function group(options: GroupHelperOptions, fn: RouteDefinition): void;
11
- declare function page<const TPath extends string>(path: TPath, Component: RouteComponent<RoutePathParams<TPath>>, fn: RouteDefinition): void;
12
- declare function page<const TPath extends string, TComponent extends AnyRouteComponent>(path: TPath, Component: CompatibleRouteComponent<TPath, TComponent>, fn: RouteDefinition): void;
13
- declare function page<const TPath extends string>(path: TPath, Component: RouteComponent<RoutePathParams<TPath>>, options: PageHelperOptions, fn: RouteDefinition): void;
14
- declare function page<const TPath extends string, TComponent extends AnyRouteComponent>(path: TPath, Component: CompatibleRouteComponent<TPath, TComponent>, options: PageHelperOptions, fn: RouteDefinition): void;
15
- declare function index(Component: RouteComponent, options?: RouteOptions): void;
16
- declare function fallback(Component: RouteComponent): void;
17
- declare function registerRoutes(definition: RouteDefinition, options?: RegisterRoutesOptions): void;
18
- declare function route<const TPath extends string>(path: TPath, Component: RouteComponent<RoutePathParams<TPath>>, options?: RouteOptions<RoutePathParams<TPath>>): void;
19
- declare function route<const TPath extends string, TComponent extends AnyRouteComponent>(path: TPath, Component: CompatibleRouteComponent<TPath, TComponent>, options?: RouteOptionsForComponent<TPath, TComponent>): void;
20
- //#endregion
21
- export { fallback, group, index, page, registerRoutes, route };
@@ -1,196 +0,0 @@
1
- import { getCurrentComponentInstance } from "../runtime/component-scope.js";
2
- import { getExecutionModel } from "../runtime/execution-model.js";
3
- import "../runtime/index.js";
4
- import { computeRank, normalizeRouteSegmentName, parseSegments } from "./match.js";
5
- import { compileNodePolicies, nextAccessScopeState, validateAccessMetadata } from "./access.js";
6
- import { createRouteHandler } from "./rendering.js";
7
- import { addRouteToStores, assertRouteRegistrationUnlocked, getCurrentAccessScopeState, getCurrentInheritedPolicies, getCurrentLayoutChain, getCurrentPageChain, getCurrentPageScope, getCurrentPathPrefix, getCurrentRegistrationSession, getCurrentScopeKind, hasActivePageScope, insertRecordSorted, pushRegistrationScope, pushRegistrationSession, setDefaultRouteAuthOptions } from "./store.js";
8
- //#region src/router/authoring.ts
9
- function validateRoutePath(path) {
10
- if (!path.startsWith("/")) throw new Error(`Route path must begin with "/". Got: "${path}"`);
11
- if (/\/{2,}/.test(path)) throw new Error("Route path cannot contain consecutive slashes.");
12
- if (/:([^/{}]+)/.test(path)) {
13
- const suggested = path.replace(/:([^/{}]+)/g, "{$1}");
14
- throw new Error(`Route parameter syntax uses {name} interpolation, not :name. Use "${suggested}" instead of "${path}".`);
15
- }
16
- const segments = path.split("/").filter(Boolean);
17
- const seenParamNames = /* @__PURE__ */ new Set();
18
- for (let index = 0; index < segments.length; index++) {
19
- const segment = segments[index];
20
- if (segment === "*") continue;
21
- const hasOpenBrace = segment.includes("{");
22
- const hasCloseBrace = segment.includes("}");
23
- if (!hasOpenBrace && !hasCloseBrace) continue;
24
- if (!(segment.startsWith("{") && segment.endsWith("}"))) throw new Error("Route parameter segments must use complete {name} interpolation.");
25
- const rawParamName = normalizeRouteSegmentName(segment.slice(1, -1));
26
- const isSplat = rawParamName.startsWith("*");
27
- const paramName = isSplat ? normalizeRouteSegmentName(rawParamName.slice(1)) : rawParamName;
28
- if (!paramName) throw new Error(isSplat ? "Route splat parameter name cannot be empty." : "Route parameter name cannot be empty.");
29
- if (isSplat && paramName === "*") throw new Error("Route named splat parameter name cannot be \"*\".");
30
- if (isSplat && index !== segments.length - 1) throw new Error("Route named splat parameters must be the final segment.");
31
- if (seenParamNames.has(paramName)) throw new Error(`Route path cannot reuse duplicate parameter name "${paramName}".`);
32
- seenParamNames.add(paramName);
33
- }
34
- }
35
- function normalizeAbsoluteRoutePath(path) {
36
- if (!path || path === "/") return "/";
37
- return (path.endsWith("/") ? path.slice(0, -1) : path) || "/";
38
- }
39
- function joinRoutePaths(prefix, path) {
40
- const normalizedPrefix = normalizeAbsoluteRoutePath(prefix || "/");
41
- const normalizedPath = path.replace(/^\/+|\/+$/g, "");
42
- if (!normalizedPath) return normalizedPrefix;
43
- return normalizedPrefix === "/" ? `/${normalizedPath}` : `${normalizedPrefix}/${normalizedPath}`;
44
- }
45
- function resolvePageScopePath(path) {
46
- if (!path) throw new Error("page(path, Component, fn) requires a non-empty path.");
47
- if (path.startsWith("/")) {
48
- validateRoutePath(path);
49
- return normalizeAbsoluteRoutePath(path);
50
- }
51
- return joinRoutePaths(getCurrentPathPrefix(), path);
52
- }
53
- function resolveIndexPath() {
54
- return normalizeAbsoluteRoutePath(getCurrentPathPrefix() || "/");
55
- }
56
- function resolveRouteRegistrationPath(path) {
57
- if (path.startsWith("/")) {
58
- if (hasActivePageScope()) throw new Error(`Child route paths inside page() must be relative. Use "${path.slice(1)}" instead of "${path}".`);
59
- validateRoutePath(path);
60
- return normalizeAbsoluteRoutePath(path);
61
- }
62
- const prefix = getCurrentPathPrefix();
63
- if (!prefix) throw new Error(`Route path must begin with "/". Got: "${path}"`);
64
- return joinRoutePaths(prefix, path);
65
- }
66
- function pushGroupScope(options, fn) {
67
- validateAccessMetadata(options, {
68
- authConfigured: getCurrentRegistrationSession().authConfigured,
69
- state: getCurrentAccessScopeState()
70
- });
71
- const policies = compileNodePolicies(options);
72
- pushRegistrationScope({
73
- kind: "group",
74
- pathPrefix: getCurrentPathPrefix(),
75
- layout: options.layout,
76
- policies,
77
- state: nextAccessScopeState(options, getCurrentAccessScopeState())
78
- }, fn);
79
- }
80
- function pushPageScope(path, Component, options, fn) {
81
- if (hasActivePageScope()) throw new Error("page() cannot be nested inside another page(). Use route() for child leaves or group() for inherited behavior inside the existing page scope.");
82
- validateAccessMetadata(options, {
83
- authConfigured: getCurrentRegistrationSession().authConfigured,
84
- state: getCurrentAccessScopeState()
85
- });
86
- const policies = compileNodePolicies(options);
87
- pushRegistrationScope({
88
- kind: "page",
89
- pathPrefix: resolvePageScopePath(path),
90
- page: Component,
91
- hasIndex: false,
92
- policies,
93
- state: nextAccessScopeState(options, getCurrentAccessScopeState())
94
- }, fn);
95
- }
96
- function normalizeRouteOptions(options) {
97
- if (!options) return;
98
- const loader = options.loader;
99
- const policies = compileNodePolicies(options);
100
- if (!loader && !options.entries && policies.length === 0 && !options.title && !options.namespace && options.auth === void 0 && !options.role && !options.permission) return;
101
- return {
102
- ...loader ? { loader } : {},
103
- ...options.entries ? { entries: options.entries } : {},
104
- ...options.auth !== void 0 ? { auth: options.auth } : {},
105
- ...options.role ? { role: options.role } : {},
106
- ...options.permission ? { permission: options.permission } : {},
107
- ...policies.length > 0 ? { policies } : {},
108
- ...options.title ? { title: options.title } : {},
109
- ...options.namespace ? { namespace: options.namespace } : {}
110
- };
111
- }
112
- function registerRouteAtResolvedPath(path, Component, options, metadata) {
113
- validateRoutePath(path);
114
- validateAccessMetadata(options ?? {}, {
115
- authConfigured: getCurrentRegistrationSession().authConfigured,
116
- state: getCurrentAccessScopeState()
117
- });
118
- const chain = getCurrentLayoutChain();
119
- const pageChain = getCurrentPageChain();
120
- const segments = parseSegments(path);
121
- const rank = computeRank(segments);
122
- const isFallback = metadata?.isFallback ?? path === "/*";
123
- const comp = Component;
124
- const normalizedOptions = normalizeRouteOptions(options);
125
- const policies = [...getCurrentInheritedPolicies(), ...normalizedOptions?.policies ?? []];
126
- const handler = createRouteHandler(comp, pageChain, chain);
127
- const renderHandler = createRouteHandler(comp, pageChain, chain, true);
128
- insertRecordSorted({
129
- path,
130
- component: comp,
131
- segments,
132
- rank,
133
- layoutChain: chain,
134
- pageChain,
135
- options: normalizedOptions ? {
136
- ...normalizedOptions,
137
- ...policies.length > 0 ? { policies } : {}
138
- } : policies.length > 0 ? { policies } : {},
139
- isFallback,
140
- handler,
141
- renderHandler,
142
- ...metadata?.fallbackPrefix ? { fallbackPrefix: metadata.fallbackPrefix } : {}
143
- });
144
- addRouteToStores({
145
- path,
146
- handler,
147
- namespace: normalizedOptions?.namespace ?? options?.namespace,
148
- ...metadata?.fallbackPrefix ? { fallbackPrefix: metadata.fallbackPrefix } : {}
149
- });
150
- }
151
- function group(options, fn) {
152
- pushGroupScope(options, fn);
153
- }
154
- function page(path, Component, optionsOrFn, maybeFn) {
155
- const options = typeof optionsOrFn === "function" ? {} : optionsOrFn;
156
- const fn = typeof optionsOrFn === "function" ? optionsOrFn : maybeFn;
157
- if (typeof Component !== "function") throw new Error("page(path, Component, fn) requires a component function as the second argument.");
158
- if (typeof fn !== "function") throw new Error("page(path, Component, fn) requires a route definition callback as the final argument.");
159
- pushPageScope(path, Component, options, fn);
160
- }
161
- function index(Component, options) {
162
- const pageScope = getCurrentPageScope();
163
- if (pageScope?.hasIndex) throw new Error("page() cannot declare multiple index routes.");
164
- if (pageScope) pageScope.hasIndex = true;
165
- registerRouteAtResolvedPath(resolveIndexPath(), Component, options);
166
- }
167
- function fallback(Component) {
168
- if (hasActivePageScope()) {
169
- if (getCurrentScopeKind() !== "page") throw new Error("fallback() inside page() must be declared directly in the page scope, not inside nested group().");
170
- registerRouteAtResolvedPath(`${getCurrentPathPrefix()}/*`, Component, void 0, {
171
- isFallback: true,
172
- fallbackPrefix: getCurrentPathPrefix()
173
- });
174
- return;
175
- }
176
- if (!(getCurrentInheritedPolicies().length === 0 && !getCurrentAccessScopeState().guestOnly && !getCurrentAccessScopeState().authenticated)) throw new Error("fallback() can only be registered at the root scope. Use route(\"/*\", Component) if you need compatibility behavior.");
177
- registerRouteAtResolvedPath("/*", Component, void 0, {
178
- isFallback: true,
179
- fallbackPrefix: "/"
180
- });
181
- }
182
- function registerRoutes(definition, options = {}) {
183
- setDefaultRouteAuthOptions(options.auth);
184
- pushRegistrationSession({ authConfigured: !!options.auth?.resolve }, definition);
185
- }
186
- function route(path, Component, options) {
187
- if (typeof path === "undefined") throw new Error("route() is only for route registration. Use currentRoute() inside components.");
188
- if (getExecutionModel() === "islands") throw new Error("Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.");
189
- const currentInst = getCurrentComponentInstance();
190
- if (currentInst && currentInst.ssr) throw new Error("route() cannot be called during SSR rendering. Register routes at module load time instead.");
191
- assertRouteRegistrationUnlocked();
192
- if (typeof Component !== "function") throw new Error("route(path, Component) requires a component function as the second argument. Passing JSX elements or VNodes directly is not supported.");
193
- registerRouteAtResolvedPath(resolveRouteRegistrationPath(path), Component, options);
194
- }
195
- //#endregion
196
- export { fallback, group, index, page, registerRoutes, route };
@@ -1,30 +0,0 @@
1
- import { RenderableChild } from "../common/vnode.js";
2
- import { LayoutScopeRecord, PageScopeRecord, Route, RouteHandler, RoutePolicy, RouteRecord } from "../common/router.js";
3
-
4
- //#region src/router/internal-types.d.ts
5
- type AnyRouteComponent = (...args: any[]) => RenderableChild;
6
- type InternalRoute = Route & {
7
- fallbackPrefix?: string;
8
- };
9
- type InternalRouteRecord = RouteRecord & {
10
- fallbackPrefix?: string;
11
- renderHandler?: RouteHandler;
12
- };
13
- type AccessScopeState = {
14
- guestOnly: boolean;
15
- authenticated: boolean;
16
- };
17
- type RegistrationScope = {
18
- kind: 'group' | 'page';
19
- pathPrefix: string;
20
- layout?: LayoutScopeRecord['component'];
21
- page?: PageScopeRecord['component'];
22
- hasIndex?: boolean;
23
- policies: readonly RoutePolicy[];
24
- state: AccessScopeState;
25
- };
26
- type RegistrationSession = {
27
- authConfigured: boolean;
28
- };
29
- //#endregion
30
- export { AccessScopeState, AnyRouteComponent, InternalRoute, InternalRouteRecord, RegistrationScope, RegistrationSession };
@@ -1,18 +0,0 @@
1
- import { RouteManifest, RouteRegistry } from "../common/router.js";
2
- import { AnyRouteComponent } from "./internal-types.js";
3
-
4
- //#region src/router/lazy.d.ts
5
- declare function lazy<TComponent extends AnyRouteComponent>(factory: () => Promise<{
6
- default: TComponent;
7
- } | TComponent>): TComponent;
8
- declare function _snapshotLazy(): Promise<unknown>[];
9
- declare function _snapshotRouteSourceLazy(source: {
10
- registry?: RouteRegistry;
11
- manifest?: RouteManifest;
12
- }): Promise<unknown>[];
13
- declare function _drainLazy(additionalPending?: Iterable<Promise<unknown>>): Promise<void>;
14
- declare function associateRouteSourceLazy(registry: RouteRegistry, manifest: RouteManifest, lazyImports: Promise<unknown>[]): void;
15
- declare function clearPendingLazy(): void;
16
- declare function restorePendingLazy(lazyImports: readonly Promise<unknown>[]): void;
17
- //#endregion
18
- export { lazy };