@askrjs/askr 0.0.28 → 0.0.30

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 (457) hide show
  1. package/README.md +44 -172
  2. package/dist/_virtual/_rolldown/runtime.js +7 -0
  3. package/dist/bench/components/benchmark-row.d.ts +20 -0
  4. package/dist/bench/components/benchmark-row.d.ts.map +1 -0
  5. package/dist/bench/components/benchmark-row.js +42 -0
  6. package/dist/bench/components/benchmark-row.js.map +1 -0
  7. package/dist/bench/components/benchmark-table.js +25 -0
  8. package/dist/bench/components/benchmark-table.js.map +1 -0
  9. package/dist/benchmark.d.ts +22 -0
  10. package/dist/benchmark.d.ts.map +1 -0
  11. package/dist/benchmark.js +64 -1
  12. package/dist/benchmark.js.map +1 -0
  13. package/dist/bin/askr-ssg.d.ts +22 -26
  14. package/dist/bin/askr-ssg.d.ts.map +1 -1
  15. package/dist/bin/askr-ssg.js +149 -2
  16. package/dist/bin/askr-ssg.js.map +1 -0
  17. package/dist/boot/index.d.ts +64 -42
  18. package/dist/boot/index.d.ts.map +1 -1
  19. package/dist/boot/index.js +416 -2
  20. package/dist/boot/index.js.map +1 -0
  21. package/dist/common/component.d.ts +14 -13
  22. package/dist/common/component.d.ts.map +1 -1
  23. package/dist/common/control.d.ts +13 -0
  24. package/dist/common/control.d.ts.map +1 -0
  25. package/dist/common/control.js +14 -0
  26. package/dist/common/control.js.map +1 -0
  27. package/dist/common/env.js +47 -0
  28. package/dist/common/env.js.map +1 -0
  29. package/dist/common/jsx.d.ts +17 -15
  30. package/dist/common/jsx.d.ts.map +1 -1
  31. package/dist/common/jsx.js +8 -1
  32. package/dist/common/jsx.js.map +1 -0
  33. package/dist/common/props.d.ts +14 -11
  34. package/dist/common/props.d.ts.map +1 -1
  35. package/dist/common/router.d.ts +190 -32
  36. package/dist/common/router.d.ts.map +1 -1
  37. package/dist/common/ssr-errors.d.ts +6 -3
  38. package/dist/common/ssr-errors.d.ts.map +1 -1
  39. package/dist/common/ssr-errors.js +16 -1
  40. package/dist/common/ssr-errors.js.map +1 -0
  41. package/dist/common/ssr.d.ts +12 -9
  42. package/dist/common/ssr.d.ts.map +1 -1
  43. package/dist/common/vnode.d.ts +17 -15
  44. package/dist/common/vnode.d.ts.map +1 -1
  45. package/dist/common/vnode.js +10 -1
  46. package/dist/common/vnode.js.map +1 -0
  47. package/dist/components/link.d.ts +37 -25
  48. package/dist/components/link.d.ts.map +1 -1
  49. package/dist/components/link.js +64 -1
  50. package/dist/components/link.js.map +1 -0
  51. package/dist/control/case.d.ts +17 -0
  52. package/dist/control/case.d.ts.map +1 -0
  53. package/dist/control/case.js +69 -0
  54. package/dist/control/case.js.map +1 -0
  55. package/dist/control/for.d.ts +23 -0
  56. package/dist/control/for.d.ts.map +1 -0
  57. package/dist/control/for.js +62 -0
  58. package/dist/control/for.js.map +1 -0
  59. package/dist/control/index.d.ts +4 -0
  60. package/dist/control/index.js +4 -0
  61. package/dist/control/shared.js +20 -0
  62. package/dist/control/shared.js.map +1 -0
  63. package/dist/control/show.d.ts +14 -0
  64. package/dist/control/show.d.ts.map +1 -0
  65. package/dist/control/show.js +33 -0
  66. package/dist/control/show.js.map +1 -0
  67. package/dist/dev/invariant.js +29 -2
  68. package/dist/dev/invariant.js.map +1 -0
  69. package/dist/dev/logger.js +37 -1
  70. package/dist/dev/logger.js.map +1 -0
  71. package/dist/foundations/core.d.ts +15 -23
  72. package/dist/foundations/core.js +13 -1
  73. package/dist/foundations/icon/icon.d.ts +53 -0
  74. package/dist/foundations/icon/icon.d.ts.map +1 -0
  75. package/dist/foundations/icon/icon.js +88 -0
  76. package/dist/foundations/icon/icon.js.map +1 -0
  77. package/dist/foundations/icon/icon.types.d.ts +21 -0
  78. package/dist/foundations/icon/icon.types.d.ts.map +1 -0
  79. package/dist/foundations/index.d.ts +23 -3
  80. package/dist/foundations/index.js +22 -1
  81. package/dist/foundations/interactions/dismissable.d.ts +25 -17
  82. package/dist/foundations/interactions/dismissable.d.ts.map +1 -1
  83. package/dist/foundations/interactions/dismissable.js +26 -1
  84. package/dist/foundations/interactions/dismissable.js.map +1 -0
  85. package/dist/foundations/interactions/focusable.d.ts +13 -7
  86. package/dist/foundations/interactions/focusable.d.ts.map +1 -1
  87. package/dist/foundations/interactions/focusable.js +18 -1
  88. package/dist/foundations/interactions/focusable.js.map +1 -0
  89. package/dist/foundations/interactions/hoverable.d.ts +17 -10
  90. package/dist/foundations/interactions/hoverable.d.ts.map +1 -1
  91. package/dist/foundations/interactions/hoverable.js +15 -1
  92. package/dist/foundations/interactions/hoverable.js.map +1 -0
  93. package/dist/foundations/interactions/interaction-policy.d.ts +32 -78
  94. package/dist/foundations/interactions/interaction-policy.d.ts.map +1 -1
  95. package/dist/foundations/interactions/interaction-policy.js +122 -1
  96. package/dist/foundations/interactions/interaction-policy.js.map +1 -0
  97. package/dist/foundations/interactions/pressable.d.ts +25 -18
  98. package/dist/foundations/interactions/pressable.d.ts.map +1 -1
  99. package/dist/foundations/interactions/pressable.js +51 -1
  100. package/dist/foundations/interactions/pressable.js.map +1 -0
  101. package/dist/foundations/interactions/roving-focus.d.ts +49 -114
  102. package/dist/foundations/interactions/roving-focus.d.ts.map +1 -1
  103. package/dist/foundations/interactions/roving-focus.js +71 -1
  104. package/dist/foundations/interactions/roving-focus.js.map +1 -0
  105. package/dist/foundations/state/controllable.d.ts +22 -41
  106. package/dist/foundations/state/controllable.d.ts.map +1 -1
  107. package/dist/foundations/state/controllable.js +81 -1
  108. package/dist/foundations/state/controllable.js.map +1 -0
  109. package/dist/foundations/structures/collection.d.ts +25 -40
  110. package/dist/foundations/structures/collection.d.ts.map +1 -1
  111. package/dist/foundations/structures/collection.js +51 -1
  112. package/dist/foundations/structures/collection.js.map +1 -0
  113. package/dist/foundations/structures/layer.d.ts +47 -68
  114. package/dist/foundations/structures/layer.d.ts.map +1 -1
  115. package/dist/foundations/structures/layer.js +81 -1
  116. package/dist/foundations/structures/layer.js.map +1 -0
  117. package/dist/foundations/structures/layout.d.ts +6 -3
  118. package/dist/foundations/structures/layout.d.ts.map +1 -1
  119. package/dist/foundations/structures/layout.js +13 -1
  120. package/dist/foundations/structures/layout.js.map +1 -0
  121. package/dist/foundations/structures/portal.d.ts +17 -10
  122. package/dist/foundations/structures/portal.d.ts.map +1 -1
  123. package/dist/foundations/structures/portal.js +105 -1
  124. package/dist/foundations/structures/portal.js.map +1 -0
  125. package/dist/foundations/structures/presence.d.ts +11 -5
  126. package/dist/foundations/structures/presence.d.ts.map +1 -1
  127. package/dist/foundations/structures/presence.js +39 -1
  128. package/dist/foundations/structures/presence.js.map +1 -0
  129. package/dist/foundations/structures/slot.d.ts +11 -8
  130. package/dist/foundations/structures/slot.d.ts.map +1 -1
  131. package/dist/foundations/structures/slot.js +41 -1
  132. package/dist/foundations/structures/slot.js.map +1 -0
  133. package/dist/foundations/structures.d.ts +7 -14
  134. package/dist/foundations/structures.js +6 -1
  135. package/dist/foundations/utilities/aria.d.ts +9 -6
  136. package/dist/foundations/utilities/aria.d.ts.map +1 -1
  137. package/dist/foundations/utilities/aria.js +17 -1
  138. package/dist/foundations/utilities/aria.js.map +1 -0
  139. package/dist/foundations/utilities/compose-handlers.d.ts +10 -7
  140. package/dist/foundations/utilities/compose-handlers.d.ts.map +1 -1
  141. package/dist/foundations/utilities/compose-handlers.js +20 -1
  142. package/dist/foundations/utilities/compose-handlers.js.map +1 -0
  143. package/dist/foundations/utilities/compose-ref.d.ts +7 -4
  144. package/dist/foundations/utilities/compose-ref.d.ts.map +1 -1
  145. package/dist/foundations/utilities/compose-ref.js +18 -1
  146. package/dist/foundations/utilities/compose-ref.js.map +1 -0
  147. package/dist/foundations/utilities/event-types.d.ts +14 -11
  148. package/dist/foundations/utilities/event-types.d.ts.map +1 -1
  149. package/dist/foundations/utilities/merge-props.d.ts +4 -1
  150. package/dist/foundations/utilities/merge-props.d.ts.map +1 -1
  151. package/dist/foundations/utilities/merge-props.js +49 -1
  152. package/dist/foundations/utilities/merge-props.js.map +1 -0
  153. package/dist/foundations/utilities/use-id.d.ts +9 -6
  154. package/dist/foundations/utilities/use-id.d.ts.map +1 -1
  155. package/dist/foundations/utilities/use-id.js +29 -1
  156. package/dist/foundations/utilities/use-id.js.map +1 -0
  157. package/dist/fx/fx.d.ts +24 -21
  158. package/dist/fx/fx.d.ts.map +1 -1
  159. package/dist/fx/fx.js +212 -1
  160. package/dist/fx/fx.js.map +1 -0
  161. package/dist/fx/index.d.ts +4 -7
  162. package/dist/fx/index.js +4 -1
  163. package/dist/fx/noop.js +9 -1
  164. package/dist/fx/noop.js.map +1 -0
  165. package/dist/fx/timing.d.ts +24 -21
  166. package/dist/fx/timing.d.ts.map +1 -1
  167. package/dist/fx/timing.js +236 -1
  168. package/dist/fx/timing.js.map +1 -0
  169. package/dist/index.d.ts +21 -23
  170. package/dist/index.js +34 -1
  171. package/dist/index.js.map +1 -0
  172. package/dist/jsx/index.d.ts +1 -4
  173. package/dist/jsx/index.js +3 -1
  174. package/dist/jsx/types.d.ts +18 -25
  175. package/dist/jsx/types.d.ts.map +1 -1
  176. package/dist/jsx/types.js +1 -1
  177. package/dist/jsx/utils.d.ts +4 -3
  178. package/dist/jsx/utils.d.ts.map +1 -1
  179. package/dist/jsx/utils.js +19 -1
  180. package/dist/jsx/utils.js.map +1 -0
  181. package/dist/jsx-dev-runtime.d.ts +8 -0
  182. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  183. package/dist/jsx-dev-runtime.js +32 -1
  184. package/dist/jsx-dev-runtime.js.map +1 -0
  185. package/dist/jsx-runtime.d.ts +12 -0
  186. package/dist/jsx-runtime.d.ts.map +1 -0
  187. package/dist/jsx-runtime.js +45 -1
  188. package/dist/jsx-runtime.js.map +1 -0
  189. package/dist/jsx-runtime2.d.ts +2 -0
  190. package/dist/jsx-runtime2.js +3 -0
  191. package/dist/renderer/children.js +293 -0
  192. package/dist/renderer/children.js.map +1 -0
  193. package/dist/renderer/cleanup.js +150 -1
  194. package/dist/renderer/cleanup.js.map +1 -0
  195. package/dist/renderer/dom.js +2439 -1
  196. package/dist/renderer/dom.js.map +1 -0
  197. package/dist/renderer/env.js +1 -0
  198. package/dist/renderer/evaluate.js +450 -1
  199. package/dist/renderer/evaluate.js.map +1 -0
  200. package/dist/renderer/fastpath.js +145 -1
  201. package/dist/renderer/fastpath.js.map +1 -0
  202. package/dist/renderer/index.js +24 -1
  203. package/dist/renderer/index.js.map +1 -0
  204. package/dist/renderer/keyed.js +119 -1
  205. package/dist/renderer/keyed.js.map +1 -0
  206. package/dist/renderer/reconcile.js +359 -1
  207. package/dist/renderer/reconcile.js.map +1 -0
  208. package/dist/renderer/types.js +1 -1
  209. package/dist/renderer/utils.js +220 -1
  210. package/dist/renderer/utils.js.map +1 -0
  211. package/dist/resources/index.d.ts +3 -9
  212. package/dist/resources/index.js +3 -1
  213. package/dist/router/index.d.ts +6 -10
  214. package/dist/router/index.js +5 -1
  215. package/dist/router/match.js +83 -1
  216. package/dist/router/match.js.map +1 -0
  217. package/dist/router/navigate.d.ts +20 -8
  218. package/dist/router/navigate.d.ts.map +1 -1
  219. package/dist/router/navigate.js +288 -1
  220. package/dist/router/navigate.js.map +1 -0
  221. package/dist/router/policy.d.ts +22 -0
  222. package/dist/router/policy.d.ts.map +1 -0
  223. package/dist/router/policy.js +116 -0
  224. package/dist/router/policy.js.map +1 -0
  225. package/dist/router/route-context.js +79 -0
  226. package/dist/router/route-context.js.map +1 -0
  227. package/dist/router/route.d.ts +101 -34
  228. package/dist/router/route.d.ts.map +1 -1
  229. package/dist/router/route.js +599 -1
  230. package/dist/router/route.js.map +1 -0
  231. package/dist/runtime/child-scope.d.ts +21 -0
  232. package/dist/runtime/child-scope.d.ts.map +1 -0
  233. package/dist/runtime/child-scope.js +77 -0
  234. package/dist/runtime/child-scope.js.map +1 -0
  235. package/dist/runtime/component.d.ts +67 -56
  236. package/dist/runtime/component.d.ts.map +1 -1
  237. package/dist/runtime/component.js +462 -1
  238. package/dist/runtime/component.js.map +1 -0
  239. package/dist/runtime/context.d.ts +28 -42
  240. package/dist/runtime/context.d.ts.map +1 -1
  241. package/dist/runtime/context.js +205 -1
  242. package/dist/runtime/context.js.map +1 -0
  243. package/dist/runtime/control.d.ts +43 -0
  244. package/dist/runtime/control.d.ts.map +1 -0
  245. package/dist/runtime/control.js +125 -0
  246. package/dist/runtime/control.js.map +1 -0
  247. package/dist/runtime/derive.d.ts +12 -9
  248. package/dist/runtime/derive.d.ts.map +1 -1
  249. package/dist/runtime/derive.js +134 -1
  250. package/dist/runtime/derive.js.map +1 -0
  251. package/dist/runtime/dev-namespace.js +57 -1
  252. package/dist/runtime/dev-namespace.js.map +1 -0
  253. package/dist/runtime/effect.d.ts +32 -0
  254. package/dist/runtime/effect.d.ts.map +1 -0
  255. package/dist/runtime/effect.js +146 -0
  256. package/dist/runtime/effect.js.map +1 -0
  257. package/dist/runtime/events.js +162 -1
  258. package/dist/runtime/events.js.map +1 -0
  259. package/dist/runtime/execution-model.js +15 -1
  260. package/dist/runtime/execution-model.js.map +1 -0
  261. package/dist/runtime/fastlane.js +204 -1
  262. package/dist/runtime/fastlane.js.map +1 -0
  263. package/dist/runtime/for-bench.d.ts +41 -0
  264. package/dist/runtime/for-bench.d.ts.map +1 -0
  265. package/dist/runtime/for-bench.js +173 -0
  266. package/dist/runtime/for-bench.js.map +1 -0
  267. package/dist/runtime/for.d.ts +62 -49
  268. package/dist/runtime/for.d.ts.map +1 -1
  269. package/dist/runtime/for.js +668 -1
  270. package/dist/runtime/for.js.map +1 -0
  271. package/dist/runtime/operations.d.ts +18 -15
  272. package/dist/runtime/operations.d.ts.map +1 -1
  273. package/dist/runtime/operations.js +209 -1
  274. package/dist/runtime/operations.js.map +1 -0
  275. package/dist/runtime/perf-metrics.js +64 -1
  276. package/dist/runtime/perf-metrics.js.map +1 -0
  277. package/dist/runtime/readable.d.ts +24 -18
  278. package/dist/runtime/readable.d.ts.map +1 -1
  279. package/dist/runtime/readable.js +118 -1
  280. package/dist/runtime/readable.js.map +1 -0
  281. package/dist/runtime/resource-cell.js +102 -1
  282. package/dist/runtime/resource-cell.js.map +1 -0
  283. package/dist/runtime/scheduler.d.ts +51 -50
  284. package/dist/runtime/scheduler.d.ts.map +1 -1
  285. package/dist/runtime/scheduler.js +328 -1
  286. package/dist/runtime/scheduler.js.map +1 -0
  287. package/dist/runtime/selector.d.ts +7 -5
  288. package/dist/runtime/selector.d.ts.map +1 -1
  289. package/dist/runtime/selector.js +188 -1
  290. package/dist/runtime/selector.js.map +1 -0
  291. package/dist/runtime/ssr-bridge.js +24 -1
  292. package/dist/runtime/ssr-bridge.js.map +1 -0
  293. package/dist/runtime/state.d.ts +11 -19
  294. package/dist/runtime/state.d.ts.map +1 -1
  295. package/dist/runtime/state.js +99 -1
  296. package/dist/runtime/state.js.map +1 -0
  297. package/dist/ssg/batch-render.d.ts +10 -10
  298. package/dist/ssg/batch-render.d.ts.map +1 -1
  299. package/dist/ssg/batch-render.js +84 -1
  300. package/dist/ssg/batch-render.js.map +1 -0
  301. package/dist/ssg/create-static-gen.d.ts +28 -29
  302. package/dist/ssg/create-static-gen.d.ts.map +1 -1
  303. package/dist/ssg/create-static-gen.js +282 -1
  304. package/dist/ssg/create-static-gen.js.map +1 -0
  305. package/dist/ssg/generate-metadata.d.ts +12 -15
  306. package/dist/ssg/generate-metadata.d.ts.map +1 -1
  307. package/dist/ssg/generate-metadata.js +94 -1
  308. package/dist/ssg/generate-metadata.js.map +1 -0
  309. package/dist/ssg/incremental-manifest.js +56 -1
  310. package/dist/ssg/incremental-manifest.js.map +1 -0
  311. package/dist/ssg/index.d.ts +8 -28
  312. package/dist/ssg/index.js +7 -1
  313. package/dist/ssg/resolve-ssg-data.d.ts +10 -13
  314. package/dist/ssg/resolve-ssg-data.d.ts.map +1 -1
  315. package/dist/ssg/resolve-ssg-data.js +46 -1
  316. package/dist/ssg/resolve-ssg-data.js.map +1 -0
  317. package/dist/ssg/route-utils.d.ts +14 -10
  318. package/dist/ssg/route-utils.d.ts.map +1 -1
  319. package/dist/ssg/route-utils.js +24 -1
  320. package/dist/ssg/route-utils.js.map +1 -0
  321. package/dist/ssg/types.d.ts +157 -144
  322. package/dist/ssg/types.d.ts.map +1 -1
  323. package/dist/ssg/write-static-files.d.ts +8 -14
  324. package/dist/ssg/write-static-files.d.ts.map +1 -1
  325. package/dist/ssg/write-static-files.js +73 -1
  326. package/dist/ssg/write-static-files.js.map +1 -0
  327. package/dist/ssr/attrs.js +93 -1
  328. package/dist/ssr/attrs.js.map +1 -0
  329. package/dist/ssr/context.d.ts +31 -35
  330. package/dist/ssr/context.d.ts.map +1 -1
  331. package/dist/ssr/context.js +63 -1
  332. package/dist/ssr/context.js.map +1 -0
  333. package/dist/ssr/errors.d.ts +6 -4
  334. package/dist/ssr/errors.d.ts.map +1 -1
  335. package/dist/ssr/errors.js +4 -1
  336. package/dist/ssr/errors.js.map +1 -0
  337. package/dist/ssr/escape.js +153 -1
  338. package/dist/ssr/escape.js.map +1 -0
  339. package/dist/ssr/index.d.ts +74 -72
  340. package/dist/ssr/index.d.ts.map +1 -1
  341. package/dist/ssr/index.js +543 -1
  342. package/dist/ssr/index.js.map +1 -0
  343. package/dist/ssr/render-keys.d.ts +27 -29
  344. package/dist/ssr/render-keys.d.ts.map +1 -1
  345. package/dist/ssr/render-keys.js +39 -1
  346. package/dist/ssr/render-keys.js.map +1 -0
  347. package/dist/ssr/sink.js +86 -1
  348. package/dist/ssr/sink.js.map +1 -0
  349. package/dist/ssr/stream-render.js +76 -1
  350. package/dist/ssr/stream-render.js.map +1 -0
  351. package/dist/ssr/types.d.ts +14 -13
  352. package/dist/ssr/types.d.ts.map +1 -1
  353. package/package.json +49 -69
  354. package/dist/_virtual/___vite-browser-external.js +0 -1
  355. package/dist/_virtual/__vite-browser-external.js +0 -1
  356. package/dist/_virtual/_commonjsHelpers.js +0 -1
  357. package/dist/_virtual/_fs.js +0 -1
  358. package/dist/_virtual/_path.js +0 -1
  359. package/dist/_virtual/main.js +0 -1
  360. package/dist/_virtual/preload-helper.js +0 -1
  361. package/dist/bench/benchmark-entry.d.ts +0 -14
  362. package/dist/bench/benchmark-entry.d.ts.map +0 -1
  363. package/dist/common/errors.d.ts +0 -53
  364. package/dist/common/errors.d.ts.map +0 -1
  365. package/dist/common/index.d.ts +0 -14
  366. package/dist/common/index.d.ts.map +0 -1
  367. package/dist/dev/invariant.d.ts +0 -83
  368. package/dist/dev/invariant.d.ts.map +0 -1
  369. package/dist/dev/logger.d.ts +0 -13
  370. package/dist/dev/logger.d.ts.map +0 -1
  371. package/dist/dev/vite-plugin-askr.d.ts +0 -25
  372. package/dist/dev/vite-plugin-askr.d.ts.map +0 -1
  373. package/dist/dev/warnings.d.ts +0 -5
  374. package/dist/dev/warnings.d.ts.map +0 -1
  375. package/dist/for/for.d.ts +0 -16
  376. package/dist/for/for.d.ts.map +0 -1
  377. package/dist/for/for.js +0 -1
  378. package/dist/for/index.d.ts +0 -2
  379. package/dist/for/index.d.ts.map +0 -1
  380. package/dist/for/index.js +0 -1
  381. package/dist/foundations/core.d.ts.map +0 -1
  382. package/dist/foundations/index.d.ts.map +0 -1
  383. package/dist/foundations/interactions/index.d.ts +0 -5
  384. package/dist/foundations/interactions/index.d.ts.map +0 -1
  385. package/dist/foundations/state/index.d.ts +0 -2
  386. package/dist/foundations/state/index.d.ts.map +0 -1
  387. package/dist/foundations/structures/index.d.ts +0 -5
  388. package/dist/foundations/structures/index.d.ts.map +0 -1
  389. package/dist/foundations/structures.d.ts.map +0 -1
  390. package/dist/foundations/utilities/index.d.ts +0 -7
  391. package/dist/foundations/utilities/index.d.ts.map +0 -1
  392. package/dist/fx/index.d.ts.map +0 -1
  393. package/dist/fx/noop.d.ts +0 -12
  394. package/dist/fx/noop.d.ts.map +0 -1
  395. package/dist/index.d.ts.map +0 -1
  396. package/dist/jsx/index.d.ts.map +0 -1
  397. package/dist/jsx/jsx-dev-runtime.d.ts +0 -4
  398. package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
  399. package/dist/jsx/jsx-runtime.d.ts +0 -10
  400. package/dist/jsx/jsx-runtime.d.ts.map +0 -1
  401. package/dist/node_modules/esbuild/lib/main.js +0 -65
  402. package/dist/renderer/cleanup.d.ts +0 -28
  403. package/dist/renderer/cleanup.d.ts.map +0 -1
  404. package/dist/renderer/dom.d.ts +0 -64
  405. package/dist/renderer/dom.d.ts.map +0 -1
  406. package/dist/renderer/evaluate.d.ts +0 -4
  407. package/dist/renderer/evaluate.d.ts.map +0 -1
  408. package/dist/renderer/fastpath.d.ts +0 -7
  409. package/dist/renderer/fastpath.d.ts.map +0 -1
  410. package/dist/renderer/index.d.ts +0 -6
  411. package/dist/renderer/index.d.ts.map +0 -1
  412. package/dist/renderer/keyed.d.ts +0 -23
  413. package/dist/renderer/keyed.d.ts.map +0 -1
  414. package/dist/renderer/reconcile.d.ts +0 -88
  415. package/dist/renderer/reconcile.d.ts.map +0 -1
  416. package/dist/renderer/types.d.ts +0 -3
  417. package/dist/renderer/types.d.ts.map +0 -1
  418. package/dist/renderer/utils.d.ts +0 -63
  419. package/dist/renderer/utils.d.ts.map +0 -1
  420. package/dist/resources/index.d.ts.map +0 -1
  421. package/dist/router/index.d.ts.map +0 -1
  422. package/dist/router/match.d.ts +0 -22
  423. package/dist/router/match.d.ts.map +0 -1
  424. package/dist/runtime/dev-namespace.d.ts +0 -31
  425. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  426. package/dist/runtime/events.d.ts +0 -53
  427. package/dist/runtime/events.d.ts.map +0 -1
  428. package/dist/runtime/execution-model.d.ts +0 -4
  429. package/dist/runtime/execution-model.d.ts.map +0 -1
  430. package/dist/runtime/fastlane.d.ts +0 -27
  431. package/dist/runtime/fastlane.d.ts.map +0 -1
  432. package/dist/runtime/hydration.d.ts +0 -25
  433. package/dist/runtime/hydration.d.ts.map +0 -1
  434. package/dist/runtime/perf-metrics.d.ts +0 -25
  435. package/dist/runtime/perf-metrics.d.ts.map +0 -1
  436. package/dist/runtime/resource-cell.d.ts +0 -35
  437. package/dist/runtime/resource-cell.d.ts.map +0 -1
  438. package/dist/runtime/snapshot.d.ts +0 -25
  439. package/dist/runtime/snapshot.d.ts.map +0 -1
  440. package/dist/runtime/ssr-bridge.d.ts +0 -10
  441. package/dist/runtime/ssr-bridge.d.ts.map +0 -1
  442. package/dist/ssg/discover-resources.d.ts +0 -15
  443. package/dist/ssg/discover-resources.d.ts.map +0 -1
  444. package/dist/ssg/incremental-manifest.d.ts +0 -23
  445. package/dist/ssg/incremental-manifest.d.ts.map +0 -1
  446. package/dist/ssg/index.d.ts.map +0 -1
  447. package/dist/ssr/attrs.d.ts +0 -26
  448. package/dist/ssr/attrs.d.ts.map +0 -1
  449. package/dist/ssr/create-ssr.d.ts +0 -19
  450. package/dist/ssr/create-ssr.d.ts.map +0 -1
  451. package/dist/ssr/escape.d.ts +0 -38
  452. package/dist/ssr/escape.d.ts.map +0 -1
  453. package/dist/ssr/sink.d.ts +0 -23
  454. package/dist/ssr/sink.d.ts.map +0 -1
  455. package/dist/ssr/stream-render.d.ts +0 -7
  456. package/dist/ssr/stream-render.d.ts.map +0 -1
  457. package/dist/vite/index.js +0 -4
@@ -0,0 +1,116 @@
1
+ //#region src/router/policy.ts
2
+ const ROUTE_AUTH_OPTIONS = Symbol.for("__ASKR_ROUTE_AUTH_OPTIONS__");
3
+ function isPromise(value) {
4
+ return value instanceof Promise;
5
+ }
6
+ function allow() {
7
+ return { kind: "allow" };
8
+ }
9
+ function redirect(to, init = {}) {
10
+ return {
11
+ kind: "redirect",
12
+ to,
13
+ ...init.status ? { status: init.status } : {},
14
+ ...init.replace !== void 0 ? { replace: init.replace } : {}
15
+ };
16
+ }
17
+ function deny(status) {
18
+ return {
19
+ kind: "deny",
20
+ status
21
+ };
22
+ }
23
+ function unauthorized() {
24
+ return deny(401);
25
+ }
26
+ function forbidden() {
27
+ return deny(403);
28
+ }
29
+ function notFound() {
30
+ return deny(404);
31
+ }
32
+ function withRouteAuthOptions(context, auth) {
33
+ const internal = context;
34
+ if (!auth) {
35
+ delete internal[ROUTE_AUTH_OPTIONS];
36
+ return context;
37
+ }
38
+ internal[ROUTE_AUTH_OPTIONS] = auth;
39
+ return context;
40
+ }
41
+ function getRouteAuthOptions(context) {
42
+ return context[ROUTE_AUTH_OPTIONS];
43
+ }
44
+ function assertRouteAuthOptions(context) {
45
+ const auth = getRouteAuthOptions(context);
46
+ if (!auth?.resolve) throw new Error("Built-in auth policies require router auth configuration. Provide `auth` to registerRoutes(...), createSPA(...), hydrateSPA(...), or SSR route resolution.");
47
+ return auth;
48
+ }
49
+ function resolvePathSetting(value, fallback, context) {
50
+ if (!value) return fallback;
51
+ if (typeof value === "function") return value(context);
52
+ return value;
53
+ }
54
+ function appendNextTarget(path, href) {
55
+ const resolved = new URL(path, "http://localhost");
56
+ resolved.searchParams.set("next", href);
57
+ return `${resolved.pathname}${resolved.search}${resolved.hash}`;
58
+ }
59
+ function collectStringValues(value) {
60
+ if (typeof value === "string") return [value];
61
+ if (Array.isArray(value)) return value.filter((entry) => typeof entry === "string");
62
+ if (value instanceof Set) return Array.from(value).filter((entry) => typeof entry === "string");
63
+ return [];
64
+ }
65
+ function defaultHasRole(user, role) {
66
+ if (!user || typeof user !== "object") return false;
67
+ return collectStringValues(user.roles).includes(role);
68
+ }
69
+ function defaultHasPermission(user, permission) {
70
+ if (!user || typeof user !== "object") return false;
71
+ return collectStringValues(user.permissions).includes(permission);
72
+ }
73
+ function resolveUnauthenticatedRedirect(context) {
74
+ const loginPath = resolvePathSetting(assertRouteAuthOptions(context).loginPath, "/login", context);
75
+ if (isPromise(loginPath)) return loginPath.then((nextPath) => redirect(appendNextTarget(nextPath, context.href), { replace: context.mode === "spa" }));
76
+ return redirect(appendNextTarget(loginPath, context.href), { replace: context.mode === "spa" });
77
+ }
78
+ function resolveAuthenticatedRedirect(context) {
79
+ const target = resolvePathSetting(assertRouteAuthOptions(context).guestRedirectTo, "/", context);
80
+ if (isPromise(target)) return target.then((nextTarget) => redirect(nextTarget, { replace: true }));
81
+ return redirect(target, { replace: true });
82
+ }
83
+ function requireAuth() {
84
+ return (context) => {
85
+ if (context.session) return allow();
86
+ return resolveUnauthenticatedRedirect(context);
87
+ };
88
+ }
89
+ function requireGuest() {
90
+ return (context) => {
91
+ if (!context.session) return allow();
92
+ return resolveAuthenticatedRedirect(context);
93
+ };
94
+ }
95
+ function requireRole(role) {
96
+ return (context) => {
97
+ if (!context.user) return resolveUnauthenticatedRedirect(context);
98
+ const auth = assertRouteAuthOptions(context);
99
+ const hasRole = auth.hasRole ? auth.hasRole(context.user, role, context) : defaultHasRole(context.user, role);
100
+ if (isPromise(hasRole)) return hasRole.then((next) => next ? allow() : forbidden());
101
+ return hasRole ? allow() : forbidden();
102
+ };
103
+ }
104
+ function requirePermission(permission) {
105
+ return (context) => {
106
+ if (!context.user) return resolveUnauthenticatedRedirect(context);
107
+ const auth = assertRouteAuthOptions(context);
108
+ const hasPermission = auth.hasPermission ? auth.hasPermission(context.user, permission, context) : defaultHasPermission(context.user, permission);
109
+ if (isPromise(hasPermission)) return hasPermission.then((next) => next ? allow() : forbidden());
110
+ return hasPermission ? allow() : forbidden();
111
+ };
112
+ }
113
+ //#endregion
114
+ export { allow, deny, forbidden, notFound, redirect, requireAuth, requireGuest, requirePermission, requireRole, unauthorized, withRouteAuthOptions };
115
+
116
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","names":[],"sources":["../../src/router/policy.ts"],"sourcesContent":["import type {\n AccessDecision,\n AccessDenyStatus,\n AccessRedirectStatus,\n RouteAuthOptions,\n RouteContext,\n RoutePolicy,\n} from '../common/router';\n\nconst ROUTE_AUTH_OPTIONS = Symbol.for('__ASKR_ROUTE_AUTH_OPTIONS__');\n\ntype InternalRouteContext = RouteContext & {\n [ROUTE_AUTH_OPTIONS]?: RouteAuthOptions;\n};\n\ntype RoutePathResolver =\n | string\n | ((context: RouteContext) => string | Promise<string>);\n\nfunction isPromise<T>(value: T | Promise<T>): value is Promise<T> {\n return value instanceof Promise;\n}\n\nexport function allow(): AccessDecision {\n return { kind: 'allow' };\n}\n\nexport function redirect(\n to: string,\n init: {\n status?: AccessRedirectStatus;\n replace?: boolean;\n } = {}\n): AccessDecision {\n return {\n kind: 'redirect',\n to,\n ...(init.status ? { status: init.status } : {}),\n ...(init.replace !== undefined ? { replace: init.replace } : {}),\n };\n}\n\nexport function deny(status: AccessDenyStatus): AccessDecision {\n return { kind: 'deny', status };\n}\n\nexport function unauthorized(): AccessDecision {\n return deny(401);\n}\n\nexport function forbidden(): AccessDecision {\n return deny(403);\n}\n\nexport function notFound(): AccessDecision {\n return deny(404);\n}\n\nexport function normalizeAccessDecision(\n result: AccessDecision\n): AccessDecision {\n return result;\n}\n\nexport function withRouteAuthOptions(\n context: RouteContext,\n auth: RouteAuthOptions | undefined\n): RouteContext {\n const internal = context as InternalRouteContext;\n\n if (!auth) {\n delete internal[ROUTE_AUTH_OPTIONS];\n return context;\n }\n\n internal[ROUTE_AUTH_OPTIONS] = auth;\n return context;\n}\n\nfunction getRouteAuthOptions(\n context: RouteContext\n): RouteAuthOptions | undefined {\n return (context as InternalRouteContext)[ROUTE_AUTH_OPTIONS];\n}\n\nfunction assertRouteAuthOptions(context: RouteContext): RouteAuthOptions {\n const auth = getRouteAuthOptions(context);\n if (!auth?.resolve) {\n throw new Error(\n 'Built-in auth policies require router auth configuration. ' +\n 'Provide `auth` to registerRoutes(...), createSPA(...), hydrateSPA(...), or SSR route resolution.'\n );\n }\n\n return auth;\n}\n\nfunction resolvePathSetting(\n value: RoutePathResolver | undefined,\n fallback: string,\n context: RouteContext\n): string | Promise<string> {\n if (!value) {\n return fallback;\n }\n\n if (typeof value === 'function') {\n return value(context);\n }\n\n return value;\n}\n\nfunction appendNextTarget(path: string, href: string): string {\n const resolved = new URL(path, 'http://localhost');\n resolved.searchParams.set('next', href);\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction collectStringValues(value: unknown): string[] {\n if (typeof value === 'string') {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string');\n }\n\n if (value instanceof Set) {\n return Array.from(value).filter(\n (entry): entry is string => typeof entry === 'string'\n );\n }\n\n return [];\n}\n\nfunction defaultHasRole(user: unknown, role: string): boolean {\n if (!user || typeof user !== 'object') {\n return false;\n }\n\n return collectStringValues((user as { roles?: unknown }).roles).includes(\n role\n );\n}\n\nfunction defaultHasPermission(user: unknown, permission: string): boolean {\n if (!user || typeof user !== 'object') {\n return false;\n }\n\n return collectStringValues(\n (user as { permissions?: unknown }).permissions\n ).includes(permission);\n}\n\nfunction resolveUnauthenticatedRedirect(\n context: RouteContext\n): AccessDecision | Promise<AccessDecision> {\n const auth = assertRouteAuthOptions(context);\n const loginPath = resolvePathSetting(auth.loginPath, '/login', context);\n if (isPromise(loginPath)) {\n return loginPath.then((nextPath) =>\n redirect(appendNextTarget(nextPath, context.href), {\n replace: context.mode === 'spa',\n })\n );\n }\n\n return redirect(appendNextTarget(loginPath, context.href), {\n replace: context.mode === 'spa',\n });\n}\n\nfunction resolveAuthenticatedRedirect(\n context: RouteContext\n): AccessDecision | Promise<AccessDecision> {\n const auth = assertRouteAuthOptions(context);\n const target = resolvePathSetting(auth.guestRedirectTo, '/', context);\n if (isPromise(target)) {\n return target.then((nextTarget) =>\n redirect(nextTarget, {\n replace: true,\n })\n );\n }\n\n return redirect(target, {\n replace: true,\n });\n}\n\nexport function requireAuth(): RoutePolicy {\n return (context) => {\n if (context.session) {\n return allow();\n }\n\n return resolveUnauthenticatedRedirect(context);\n };\n}\n\nexport function requireGuest(): RoutePolicy {\n return (context) => {\n if (!context.session) {\n return allow();\n }\n\n return resolveAuthenticatedRedirect(context);\n };\n}\n\nexport function requireRole(role: string): RoutePolicy {\n return (context) => {\n if (!context.user) {\n return resolveUnauthenticatedRedirect(context);\n }\n\n const auth = assertRouteAuthOptions(context);\n const hasRole = auth.hasRole\n ? auth.hasRole(context.user, role, context)\n : defaultHasRole(context.user, role);\n\n if (isPromise(hasRole)) {\n return hasRole.then((next) => (next ? allow() : forbidden()));\n }\n\n return hasRole ? allow() : forbidden();\n };\n}\n\nexport function requirePermission(permission: string): RoutePolicy {\n return (context) => {\n if (!context.user) {\n return resolveUnauthenticatedRedirect(context);\n }\n\n const auth = assertRouteAuthOptions(context);\n const hasPermission = auth.hasPermission\n ? auth.hasPermission(context.user, permission, context)\n : defaultHasPermission(context.user, permission);\n\n if (isPromise(hasPermission)) {\n return hasPermission.then((next) => (next ? allow() : forbidden()));\n }\n\n return hasPermission ? allow() : forbidden();\n };\n}\n\nexport async function evaluateRoutePolicy(\n policy: RoutePolicy,\n context: RouteContext\n): Promise<AccessDecision> {\n const result = await policy(context);\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { withRouteAuthOptions } from "./policy.js";
2
+ //#region src/router/route-context.ts
3
+ function parseLocation(url) {
4
+ try {
5
+ const parsedUrl = new URL(url, "http://localhost");
6
+ return {
7
+ pathname: parsedUrl.pathname,
8
+ search: parsedUrl.search,
9
+ hash: parsedUrl.hash
10
+ };
11
+ } catch {
12
+ return {
13
+ pathname: "/",
14
+ search: "",
15
+ hash: ""
16
+ };
17
+ }
18
+ }
19
+ function deepFreeze(obj) {
20
+ if (obj && typeof obj === "object" && !Object.isFrozen(obj)) {
21
+ Object.freeze(obj);
22
+ for (const key of Object.keys(obj)) {
23
+ const value = obj[key];
24
+ if (value && typeof value === "object") deepFreeze(value);
25
+ }
26
+ }
27
+ return obj;
28
+ }
29
+ function makeQuery(search) {
30
+ const searchParams = new URLSearchParams(search || "");
31
+ const mapping = /* @__PURE__ */ new Map();
32
+ for (const [key, value] of searchParams.entries()) {
33
+ const existing = mapping.get(key);
34
+ if (existing) existing.push(value);
35
+ else mapping.set(key, [value]);
36
+ }
37
+ return deepFreeze({
38
+ get(key) {
39
+ const values = mapping.get(key);
40
+ return values ? values[0] : null;
41
+ },
42
+ getAll(key) {
43
+ const values = mapping.get(key);
44
+ return values ? [...values] : [];
45
+ },
46
+ has(key) {
47
+ return mapping.has(key);
48
+ },
49
+ toJSON() {
50
+ const output = {};
51
+ for (const [key, values] of mapping.entries()) output[key] = values.length > 1 ? [...values] : values[0];
52
+ return output;
53
+ }
54
+ });
55
+ }
56
+ function buildRouteContextBase(target, params, options) {
57
+ const parsed = parseLocation(target);
58
+ const href = `${parsed.pathname}${parsed.search}${parsed.hash}`;
59
+ return {
60
+ mode: options.mode,
61
+ params,
62
+ pathname: parsed.pathname,
63
+ search: parsed.search,
64
+ hash: parsed.hash,
65
+ href,
66
+ signal: options.signal
67
+ };
68
+ }
69
+ function buildRouteContext(target, params, options) {
70
+ return withRouteAuthOptions({
71
+ ...buildRouteContextBase(target, params, options),
72
+ session: options.session ?? null,
73
+ user: options.user ?? null
74
+ }, options.auth);
75
+ }
76
+ //#endregion
77
+ export { buildRouteContext, buildRouteContextBase, deepFreeze, makeQuery, parseLocation };
78
+
79
+ //# sourceMappingURL=route-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-context.js","names":[],"sources":["../../src/router/route-context.ts"],"sourcesContent":["import { withRouteAuthOptions } from './policy';\n\nimport type {\n RouteAuthOptions,\n RouteContext,\n RouteQuery,\n} from '../common/router';\n\nexport function parseLocation(url: string): {\n pathname: string;\n search: string;\n hash: string;\n} {\n try {\n const parsedUrl = new URL(url, 'http://localhost');\n return {\n pathname: parsedUrl.pathname,\n search: parsedUrl.search,\n hash: parsedUrl.hash,\n };\n } catch {\n return { pathname: '/', search: '', hash: '' };\n }\n}\n\nexport function deepFreeze<T>(obj: T): T {\n if (obj && typeof obj === 'object' && !Object.isFrozen(obj)) {\n Object.freeze(obj as Record<string, unknown>);\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n const value = (obj as Record<string, unknown>)[key];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n }\n\n return obj;\n}\n\nexport function makeQuery(search: string): RouteQuery {\n const searchParams = new URLSearchParams(search || '');\n const mapping = new Map<string, string[]>();\n\n for (const [key, value] of searchParams.entries()) {\n const existing = mapping.get(key);\n if (existing) {\n existing.push(value);\n } else {\n mapping.set(key, [value]);\n }\n }\n\n const query: RouteQuery = {\n get(key: string) {\n const values = mapping.get(key);\n return values ? values[0] : null;\n },\n getAll(key: string) {\n const values = mapping.get(key);\n return values ? [...values] : [];\n },\n has(key: string) {\n return mapping.has(key);\n },\n toJSON() {\n const output: Record<string, string | string[]> = {};\n for (const [key, values] of mapping.entries()) {\n output[key] = values.length > 1 ? [...values] : values[0];\n }\n return output;\n },\n };\n\n return deepFreeze(query);\n}\n\nexport function buildRouteContextBase(\n target: string,\n params: Record<string, string>,\n options: {\n mode: RouteContext['mode'];\n signal: AbortSignal;\n }\n): Omit<RouteContext, 'session' | 'user'> {\n const parsed = parseLocation(target);\n const href = `${parsed.pathname}${parsed.search}${parsed.hash}`;\n\n return {\n mode: options.mode,\n params,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n href,\n signal: options.signal,\n };\n}\n\nexport function buildRouteContext(\n target: string,\n params: Record<string, string>,\n options: {\n mode: RouteContext['mode'];\n signal: AbortSignal;\n auth?: RouteAuthOptions;\n session?: unknown;\n user?: unknown;\n }\n): RouteContext {\n const context: RouteContext = {\n ...buildRouteContextBase(target, params, options),\n session: options.session ?? null,\n user: options.user ?? null,\n };\n\n return withRouteAuthOptions(context, options.auth);\n}\n"],"mappings":";;AAQA,SAAgB,cAAc,KAI5B;AACA,KAAI;EACF,MAAM,YAAY,IAAI,IAAI,KAAK,mBAAmB;AAClD,SAAO;GACL,UAAU,UAAU;GACpB,QAAQ,UAAU;GAClB,MAAM,UAAU;GACjB;SACK;AACN,SAAO;GAAE,UAAU;GAAK,QAAQ;GAAI,MAAM;GAAI;;;AAIlD,SAAgB,WAAc,KAAW;AACvC,KAAI,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,IAAI,EAAE;AAC3D,SAAO,OAAO,IAA+B;AAC7C,OAAK,MAAM,OAAO,OAAO,KAAK,IAA+B,EAAE;GAC7D,MAAM,QAAS,IAAgC;AAC/C,OAAI,SAAS,OAAO,UAAU,SAC5B,YAAW,MAAM;;;AAKvB,QAAO;;AAGT,SAAgB,UAAU,QAA4B;CACpD,MAAM,eAAe,IAAI,gBAAgB,UAAU,GAAG;CACtD,MAAM,0BAAU,IAAI,KAAuB;AAE3C,MAAK,MAAM,CAAC,KAAK,UAAU,aAAa,SAAS,EAAE;EACjD,MAAM,WAAW,QAAQ,IAAI,IAAI;AACjC,MAAI,SACF,UAAS,KAAK,MAAM;MAEpB,SAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;;AAyB7B,QAAO,WAAW;EApBhB,IAAI,KAAa;GACf,MAAM,SAAS,QAAQ,IAAI,IAAI;AAC/B,UAAO,SAAS,OAAO,KAAK;;EAE9B,OAAO,KAAa;GAClB,MAAM,SAAS,QAAQ,IAAI,IAAI;AAC/B,UAAO,SAAS,CAAC,GAAG,OAAO,GAAG,EAAE;;EAElC,IAAI,KAAa;AACf,UAAO,QAAQ,IAAI,IAAI;;EAEzB,SAAS;GACP,MAAM,SAA4C,EAAE;AACpD,QAAK,MAAM,CAAC,KAAK,WAAW,QAAQ,SAAS,CAC3C,QAAO,OAAO,OAAO,SAAS,IAAI,CAAC,GAAG,OAAO,GAAG,OAAO;AAEzD,UAAO;;EAIO,CAAM;;AAG1B,SAAgB,sBACd,QACA,QACA,SAIwC;CACxC,MAAM,SAAS,cAAc,OAAO;CACpC,MAAM,OAAO,GAAG,OAAO,WAAW,OAAO,SAAS,OAAO;AAEzD,QAAO;EACL,MAAM,QAAQ;EACd;EACA,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,MAAM,OAAO;EACb;EACA,QAAQ,QAAQ;EACjB;;AAGH,SAAgB,kBACd,QACA,QACA,SAOc;AAOd,QAAO,qBAAqB;EAL1B,GAAG,sBAAsB,QAAQ,QAAQ,QAAQ;EACjD,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ;EAGI,EAAS,QAAQ,KAAK"}
@@ -1,53 +1,120 @@
1
+ import { AccessDecision, AccessDenyDecision, AccessRedirectDecision, GroupHelperOptions, LayoutScopeRecord, ParsedSegment, RegisterRoutesOptions, ResolvedRoute, Route, RouteAuthOptions, RouteComponent, RouteContext, RouteDefinition, RouteHandler, RouteManifest, RouteMatch, RouteOptions, RoutePolicy, RouteQuery, RouteRecord, RouteRenderResult, RouteRequestOptions, RouteRequestResult, RouteSnapshot } from "../common/router.js";
2
+
3
+ //#region src/router/route.d.ts
4
+ declare function setServerLocation(url: string | null): void;
5
+ declare function _setActiveRouteAuthOptions(auth: RouteAuthOptions | undefined): void;
6
+ declare function lockRouteRegistration(): void;
7
+ declare function _lockRouteRegistrationForTests(): void;
8
+ declare function _unlockRouteRegistrationForTests(): void;
1
9
  /**
2
- * Route definition and matching
3
- * Supports dynamic route registration for micro frontends
10
+ * Snapshot the current in-flight lazy() imports.
11
+ * Boot uses this before clearing route state so manifest-based startup can
12
+ * still await chunks that were kicked off during route module evaluation.
13
+ */
14
+ declare function _snapshotLazy(): Promise<unknown>[];
15
+ /**
16
+ * Declare a code-split route component. The `import()` fires immediately at
17
+ * module evaluation time (creating a bundler split point), and the resolved
18
+ * chunk is guaranteed to be available before the app mounts — so the renderer
19
+ * always receives a plain synchronous function.
20
+ *
21
+ * ```ts
22
+ * registerRoutes(() => {
23
+ * group({ layout: AppLayout }, () => {
24
+ * route('/', lazy(() => import('./pages/landing')));
25
+ * route('/dashboard', lazy(() => import('./pages/dashboard')));
26
+ * });
27
+ * });
28
+ * ```
4
29
  *
5
- * Optimization: Index by depth but maintain insertion order within each depth
30
+ * The module must export the component as its **default** export:
31
+ * ```ts
32
+ * // pages/dashboard.tsx
33
+ * export default function DashboardPage() { … }
34
+ * ```
6
35
  */
7
- export type { RouteHandler, Route, ResolvedRoute, RouteMatch, RouteQuery, RouteSnapshot, } from '../common/router';
8
- import type { RouteHandler, Route, ResolvedRoute, RouteSnapshot } from '../common/router';
9
- export declare function setServerLocation(url: string | null): void;
10
- export declare function lockRouteRegistration(): void;
11
- export declare function _lockRouteRegistrationForTests(): void;
12
- export declare function _unlockRouteRegistrationForTests(): void;
13
- export declare function route(): RouteSnapshot;
14
- export declare function route(path: string, handler?: RouteHandler, namespace?: string): void;
36
+ declare function lazy(factory: () => Promise<{
37
+ default: RouteComponent;
38
+ } | RouteComponent>): RouteComponent;
15
39
  /**
16
- * Get all registered routes
40
+ * Wait for all pending `lazy()` imports to settle.
41
+ * Called automatically by `createSPA` / `hydrateSPA` before mounting.
17
42
  */
18
- export declare function getRoutes(): Route[];
43
+ declare function _drainLazy(additionalPending?: Iterable<Promise<unknown>>): Promise<void>;
44
+ declare function group(options: GroupHelperOptions, fn: RouteDefinition): void;
45
+ declare function fallback(Component: RouteComponent): void;
46
+ declare function registerRoutes(definition: RouteDefinition, options?: RegisterRoutesOptions): void;
47
+ declare function currentRoute(): RouteSnapshot;
19
48
  /**
20
- * Get routes for a specific namespace
49
+ * Register a route.
50
+ *
51
+ * ```ts
52
+ * route('/posts/{slug}', PostPage, {
53
+ * loader: ({ params }) => getPost(params.slug),
54
+ * entries: async () => getPosts().map(p => ({ slug: p.slug })),
55
+ * title: 'Post',
56
+ * policies:[requireAuth()],
57
+ * });
58
+ * ```
21
59
  */
22
- export declare function getNamespaceRoutes(namespace: string): Route[];
60
+ declare function route(path: string, Component: RouteComponent, options?: RouteOptions): void;
23
61
  /**
24
- * Unload all routes from a namespace (for MFE unmounting)
62
+ * Return the normalized route manifest built from registered route definitions.
63
+ *
64
+ * Pass this to `createSPA`, `hydrateSPA`, or `renderToString` as the
65
+ * authoritative routing input:
66
+ *
67
+ * ```ts
68
+ * import { getManifest } from '@askrjs/askr/router';
69
+ * await createSPA({ root: '#app', manifest: getManifest() });
70
+ * ```
25
71
  */
26
- export declare function unloadNamespace(namespace: string): number;
72
+ declare function getManifest(): RouteManifest;
27
73
  /**
28
- * Clear all registered routes (mainly for testing)
74
+ * Internal: apply a pre-built manifest to the runtime stores without running
75
+ * route() again. Called by createSPA / hydrateSPA when a manifest is passed.
29
76
  */
30
- export declare function clearRoutes(): void;
77
+ declare function _applyManifest(manifest: RouteManifest): void;
31
78
  /**
32
- * RouteDescriptor type used by `registerRoute` for nested descriptors.
33
- *
34
- * Note: `registerRouteTree` helper was removed; prefer explicit `route()` registrations.
79
+ * Get all registered routes (flat list, insertion order).
80
+ * Prefer `getManifest()` when metadata (loader, policies, entries) is needed.
35
81
  */
36
- export type RouteDescriptor = {
37
- path: string;
38
- handler?: RouteHandler | unknown;
39
- children?: RouteDescriptor[];
40
- _isDescriptor?: true;
41
- };
42
- export declare function registerRoute(path: string, handler?: unknown, ...children: Array<RouteDescriptor | undefined>): RouteDescriptor;
82
+ declare function getRoutes(): Route[];
83
+ /** Get routes for a specific namespace. */
84
+ declare function getNamespaceRoutes(namespace: string): Route[];
85
+ /** Unload all routes from a namespace (for MFE unmounting). */
86
+ declare function unloadNamespace(namespace: string): number;
87
+ /** Clear all registered routes and records (testing / boot reset). */
88
+ declare function clearRoutes(): void;
43
89
  /**
44
90
  * Get all loaded namespaces (MFE identifiers)
45
91
  */
46
- export declare function getLoadedNamespaces(): string[];
92
+ declare function getLoadedNamespaces(): string[];
47
93
  /**
48
- * Resolve a path to a route handler with optimized lookup
49
- * Routes are matched by specificity: literals > parameters > wildcards > catch-all
94
+ * Resolve a path to a route handler.
95
+ *
96
+ * Hot path: walks the module-level `records[]` array which is kept sorted by
97
+ * rank descending at registration time — so the first `matchSegments` hit is
98
+ * always the most specific match. No per-call allocations for the common
99
+ * case of purely-static routes.
100
+ */
101
+ declare function resolveRoute(pathname: string): ResolvedRoute | null;
102
+ declare function resolveRouteRequest(target: string, options?: RouteRequestOptions): RouteRequestResult | Promise<RouteRequestResult>;
103
+ /**
104
+ * Resolve a path against an explicit route list (e.g. an SSR per-render
105
+ * context). When called with the global `routes` array this delegates to
106
+ * the faster `resolveRoute` which uses pre-sorted `records[]`.
107
+ *
108
+ * For externally supplied lists the function:
109
+ * 1. Builds a rank-sorted copy of the list on first call and caches it
110
+ * in a WeakMap so subsequent resolutions against the same list pay
111
+ * zero sort cost.
112
+ * 2. Uses pre-parsed `ParsedSegment[]` from a WeakMap cache so no string
113
+ * splitting or segment parsing occurs on the hot path.
114
+ * 3. Uses a running-best with an early-exit once the sorted list reaches
115
+ * a rank that cannot beat the current best match.
50
116
  */
51
- export declare function resolveRoute(pathname: string): ResolvedRoute | null;
52
- export declare function resolveRouteFromRoutes(pathname: string, routeList: readonly Route[]): ResolvedRoute | null;
117
+ declare function resolveRouteFromRoutes(pathname: string, routeList: readonly Route[]): ResolvedRoute | null;
118
+ //#endregion
119
+ export { _applyManifest, _drainLazy, clearRoutes, currentRoute, fallback, getLoadedNamespaces, getManifest, getNamespaceRoutes, getRoutes, group, lazy, registerRoutes, resolveRouteRequest, route, setServerLocation, unloadNamespace };
53
120
  //# sourceMappingURL=route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,YAAY,EACV,YAAY,EACZ,KAAK,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,YAAY,EACZ,KAAK,EACL,aAAa,EAGb,aAAa,EACd,MAAM,kBAAkB,CAAC;AAqE1B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE1D;AA0HD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAGD,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,wBAAgB,KAAK,IAAI,aAAa,CAAC;AACvC,wBAAgB,KAAK,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAAC;AA2GR;;GAEG;AACH,wBAAgB,SAAS,IAAI,KAAK,EAAE,CAEnC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuBzD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAMlC;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB,CAAC;AAiCF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,EACjB,GAAG,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,GAC9C,eAAe,CAuDjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAEnE;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,KAAK,EAAE,GAC1B,aAAa,GAAG,IAAI,CAyDtB"}
1
+ {"version":3,"file":"route.d.ts","names":[],"sources":["../../src/router/route.ts"],"mappings":";;;iBAiMgB,iBAAA,CAAkB,GAAA;AAAA,iBAuElB,0BAAA,CACd,IAAA,EAAM,gBAAA;AAAA,iBAwDQ,qBAAA,CAAA;AAAA,iBAIA,8BAAA,CAAA;AAAA,iBAIA,gCAAA,CAAA;AAJhB;;;;;AAAA,iBA6EgB,aAAA,CAAA,GAAiB,OAAA;;;;;AAAjC;;;;;AAyBA;;;;;;;;;;;;iBAAgB,IAAA,CACd,OAAA,QAAe,OAAA;EAAU,OAAA,EAAS,cAAA;AAAA,IAAmB,cAAA,IACpD,cAAA;;;AAmCH;;iBAAgB,UAAA,CACd,iBAAA,GAAmB,QAAA,CAAS,OAAA,aAC3B,OAAA;AAAA,iBASa,KAAA,CAAM,OAAA,EAAS,kBAAA,EAAoB,EAAA,EAAI,eAAA;AAAA,iBAKvC,QAAA,CAAS,SAAA,EAAW,cAAA;AAAA,iBAmLpB,cAAA,CACd,UAAA,EAAY,eAAA,EACZ,OAAA,GAAS,qBAAA;AAAA,iBAoEK,YAAA,CAAA,GAAgB,aAAA;;;;;;;;AA9PhC;;;;;iBA8QgB,KAAA,CACd,IAAA,UACA,SAAA,EAAW,cAAA,EACX,OAAA,GAAU,YAAA;;;;;AA5QZ;;;;;AAmLA;;iBAyMgB,WAAA,CAAA,GAAe,aAAA;;;;;iBAWf,cAAA,CAAe,QAAA,EAAU,aAAA;;;AA9IzC;;iBAoKgB,SAAA,CAAA,GAAa,KAAA;;iBAKb,kBAAA,CAAmB,SAAA,WAAoB,KAAA;AAzJvD;AAAA,iBA8JgB,eAAA,CAAgB,SAAA;;iBA6BhB,WAAA,CAAA;;;;iBAiBA,mBAAA,CAAA;;;;AAzFhB;;;;;iBAqGgB,YAAA,CAAa,QAAA,WAAmB,aAAA;AAAA,iBA0GhC,mBAAA,CACd,MAAA,UACA,OAAA,GAAS,mBAAA,GACR,kBAAA,GAAqB,OAAA,CAAQ,kBAAA;;;;AAjLhC;;;;;AAKA;;;;;AAKA;iBA2OgB,sBAAA,CACd,QAAA,UACA,SAAA,WAAoB,KAAA,KACnB,aAAA"}