soseki 0.0.5 → 0.0.7

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 (352) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/components/browser-router.d.ts +19 -0
  3. package/dist/src/components/browser-router.d.ts.map +1 -0
  4. package/dist/src/components/browser-router.jsx +15 -0
  5. package/dist/src/components/outlet.d.ts +8 -0
  6. package/dist/src/components/outlet.d.ts.map +1 -0
  7. package/dist/src/components/outlet.jsx +15 -0
  8. package/dist/src/components/router.d.ts +21 -0
  9. package/dist/src/components/router.d.ts.map +1 -0
  10. package/dist/src/components/router.jsx +138 -0
  11. package/dist/src/contexts/route-context.d.ts +19 -0
  12. package/dist/src/contexts/route-context.d.ts.map +1 -0
  13. package/dist/src/contexts/route-context.js +6 -0
  14. package/dist/src/contexts/router-context.d.ts +55 -0
  15. package/dist/src/contexts/router-context.d.ts.map +1 -0
  16. package/dist/src/contexts/router-context.js +8 -0
  17. package/dist/src/core/_compare-route-paths.d.ts +11 -0
  18. package/dist/src/core/_compare-route-paths.d.ts.map +1 -0
  19. package/dist/src/core/_compare-route-paths.js +92 -0
  20. package/dist/src/core/_match-route-path.d.ts +22 -0
  21. package/dist/src/core/_match-route-path.d.ts.map +1 -0
  22. package/dist/src/core/_match-route-path.js +26 -0
  23. package/dist/src/core/_process-routes.d.ts +14 -0
  24. package/dist/src/core/_process-routes.d.ts.map +1 -0
  25. package/dist/src/core/_process-routes.js +45 -0
  26. package/dist/src/core/_singleton.d.ts +12 -0
  27. package/dist/src/core/_singleton.d.ts.map +1 -0
  28. package/dist/src/core/_singleton.js +18 -0
  29. package/dist/src/core/_unreachable.d.ts +16 -0
  30. package/dist/src/core/_unreachable.d.ts.map +1 -0
  31. package/dist/src/core/_unreachable.js +8 -0
  32. package/dist/src/core/_valibot.d.ts +25 -0
  33. package/dist/src/core/_valibot.d.ts.map +1 -0
  34. package/dist/src/core/_valibot.js +30 -0
  35. package/dist/src/core/errors.d.ts +182 -0
  36. package/dist/src/core/errors.d.ts.map +1 -0
  37. package/dist/src/core/errors.js +166 -0
  38. package/dist/src/core/expect-history-entry.d.ts +59 -0
  39. package/dist/src/core/expect-history-entry.d.ts.map +1 -0
  40. package/dist/src/core/expect-history-entry.js +42 -0
  41. package/dist/src/core/form-data-to-html-form-element.d.ts +11 -0
  42. package/dist/src/core/form-data-to-html-form-element.d.ts.map +1 -0
  43. package/dist/src/core/form-data-to-html-form-element.js +31 -0
  44. package/dist/src/core/history-entry-id-schema.d.ts +17 -0
  45. package/dist/src/core/history-entry-id-schema.d.ts.map +1 -0
  46. package/dist/src/core/history-entry-id-schema.js +9 -0
  47. package/dist/src/core/history-entry-url-schema.d.ts +18 -0
  48. package/dist/src/core/history-entry-url-schema.d.ts.map +1 -0
  49. package/dist/src/core/history-entry-url-schema.js +20 -0
  50. package/dist/src/core/init-loaders.d.ts +28 -0
  51. package/dist/src/core/init-loaders.d.ts.map +1 -0
  52. package/dist/src/core/init-loaders.js +30 -0
  53. package/dist/src/core/match-routes.d.ts +28 -0
  54. package/dist/src/core/match-routes.d.ts.map +1 -0
  55. package/dist/src/core/match-routes.js +31 -0
  56. package/dist/src/core/readonly-form-data.types.d.ts +74 -0
  57. package/dist/src/core/readonly-form-data.types.d.ts.map +1 -0
  58. package/dist/src/core/readonly-url.types.d.ts +164 -0
  59. package/dist/src/core/readonly-url.types.d.ts.map +1 -0
  60. package/dist/src/core/redirect-response.d.ts +37 -0
  61. package/dist/src/core/redirect-response.d.ts.map +1 -0
  62. package/dist/src/core/redirect-response.js +19 -0
  63. package/dist/src/core/route-path.d.ts +57 -0
  64. package/dist/src/core/route-path.d.ts.map +1 -0
  65. package/dist/src/core/route-path.js +93 -0
  66. package/dist/src/core/route-request.d.ts +149 -0
  67. package/dist/src/core/route-request.d.ts.map +1 -0
  68. package/dist/src/core/route-request.js +41 -0
  69. package/dist/src/core/route.types.d.ts +296 -0
  70. package/dist/src/core/route.types.d.ts.map +1 -0
  71. package/dist/src/core/start-action.d.ts +53 -0
  72. package/dist/src/core/start-action.d.ts.map +1 -0
  73. package/dist/src/core/start-action.js +95 -0
  74. package/dist/src/core/start-loaders.d.ts +63 -0
  75. package/dist/src/core/start-loaders.d.ts.map +1 -0
  76. package/dist/src/core/start-loaders.js +138 -0
  77. package/dist/{core.d.ts → src/core.d.ts} +7 -11
  78. package/dist/src/core.d.ts.map +1 -0
  79. package/dist/{core.js → src/core.js} +2 -4
  80. package/dist/src/engines/engine.types.d.ts +216 -0
  81. package/dist/src/engines/engine.types.d.ts.map +1 -0
  82. package/dist/src/engines/navigation-api-engine.d.ts +50 -0
  83. package/dist/src/engines/navigation-api-engine.d.ts.map +1 -0
  84. package/dist/src/engines/navigation-api-engine.js +411 -0
  85. package/dist/src/engines.d.ts +4 -0
  86. package/dist/src/engines.d.ts.map +1 -0
  87. package/dist/src/engines.js +1 -0
  88. package/dist/src/hooks/_use-singleton.d.ts +11 -0
  89. package/dist/src/hooks/_use-singleton.d.ts.map +1 -0
  90. package/dist/src/hooks/_use-singleton.js +26 -0
  91. package/dist/src/hooks/use-action-data.d.ts +17 -0
  92. package/dist/src/hooks/use-action-data.d.ts.map +1 -0
  93. package/dist/src/hooks/use-action-data.js +16 -0
  94. package/dist/src/hooks/use-form-action.d.ts +7 -0
  95. package/dist/src/hooks/use-form-action.d.ts.map +1 -0
  96. package/dist/src/hooks/use-form-action.js +9 -0
  97. package/dist/src/hooks/use-loader-data.d.ts +9 -0
  98. package/dist/src/hooks/use-loader-data.d.ts.map +1 -0
  99. package/dist/src/hooks/use-loader-data.js +20 -0
  100. package/dist/src/hooks/use-navigate.d.ts +53 -0
  101. package/dist/src/hooks/use-navigate.d.ts.map +1 -0
  102. package/dist/src/hooks/use-navigate.js +43 -0
  103. package/dist/{hooks → src/hooks}/use-params.d.ts +2 -2
  104. package/dist/src/hooks/use-params.d.ts.map +1 -0
  105. package/dist/{hooks → src/hooks}/use-params.js +1 -1
  106. package/dist/src/hooks/use-route-context.d.ts +10 -0
  107. package/dist/src/hooks/use-route-context.d.ts.map +1 -0
  108. package/dist/src/hooks/use-route-context.js +17 -0
  109. package/dist/src/hooks/use-router-context.d.ts +12 -0
  110. package/dist/src/hooks/use-router-context.d.ts.map +1 -0
  111. package/dist/src/hooks/use-router-context.js +20 -0
  112. package/dist/src/hooks/use-submit.d.ts +59 -0
  113. package/dist/src/hooks/use-submit.d.ts.map +1 -0
  114. package/dist/src/hooks/use-submit.js +38 -0
  115. package/dist/src/soseki.d.ts +31 -0
  116. package/dist/src/soseki.d.ts.map +1 -0
  117. package/dist/src/soseki.js +12 -0
  118. package/dist/src/utils/redirect.d.ts +11 -0
  119. package/dist/src/utils/redirect.d.ts.map +1 -0
  120. package/dist/src/utils/redirect.js +12 -0
  121. package/package.json +47 -40
  122. package/src/components/browser-router.tsx +8 -11
  123. package/src/components/outlet.tsx +3 -2
  124. package/src/components/router.tsx +139 -145
  125. package/src/contexts/route-context.ts +6 -5
  126. package/src/contexts/router-context.ts +36 -19
  127. package/src/core/_compare-route-paths.ts +48 -34
  128. package/src/core/_match-route-path.ts +21 -15
  129. package/src/core/_process-routes.ts +44 -46
  130. package/src/core/_singleton.ts +13 -38
  131. package/src/core/_unreachable.ts +12 -7
  132. package/src/core/_valibot.ts +19 -116
  133. package/src/core/errors.ts +150 -495
  134. package/src/core/expect-history-entry.ts +40 -41
  135. package/src/core/form-data-to-html-form-element.ts +37 -0
  136. package/src/core/history-entry-id-schema.ts +6 -11
  137. package/src/core/history-entry-url-schema.ts +25 -18
  138. package/src/core/init-loaders.ts +35 -57
  139. package/src/core/match-routes.ts +33 -65
  140. package/src/core/readonly-form-data.types.ts +48 -28
  141. package/src/core/readonly-url.types.ts +57 -28
  142. package/src/core/redirect-response.ts +26 -15
  143. package/src/core/route-path.ts +114 -0
  144. package/src/core/route-request.ts +144 -32
  145. package/src/core/route.types.ts +250 -226
  146. package/src/core/start-action.ts +164 -0
  147. package/src/core/start-loaders.ts +190 -212
  148. package/src/core.ts +8 -15
  149. package/src/engines/engine.types.ts +204 -166
  150. package/src/engines/navigation-api-engine.ts +332 -233
  151. package/src/engines.ts +4 -0
  152. package/src/hooks/_use-singleton.ts +30 -0
  153. package/src/hooks/use-action-data.ts +21 -26
  154. package/src/hooks/use-form-action.ts +4 -5
  155. package/src/hooks/use-loader-data.ts +16 -18
  156. package/src/hooks/use-navigate.ts +69 -28
  157. package/src/hooks/use-params.ts +4 -4
  158. package/src/hooks/use-route-context.ts +20 -0
  159. package/src/hooks/use-router-context.ts +25 -0
  160. package/src/hooks/use-submit.ts +48 -53
  161. package/src/soseki.ts +27 -34
  162. package/src/utils/redirect.ts +5 -5
  163. package/dist/components/action-id.d.ts +0 -19
  164. package/dist/components/action-id.d.ts.map +0 -1
  165. package/dist/components/action-id.jsx +0 -14
  166. package/dist/components/browser-router.d.ts +0 -17
  167. package/dist/components/browser-router.d.ts.map +0 -1
  168. package/dist/components/browser-router.jsx +0 -13
  169. package/dist/components/hidden-input.d.ts +0 -20
  170. package/dist/components/hidden-input.d.ts.map +0 -1
  171. package/dist/components/hidden-input.jsx +0 -8
  172. package/dist/components/outlet.d.ts +0 -8
  173. package/dist/components/outlet.d.ts.map +0 -1
  174. package/dist/components/outlet.jsx +0 -15
  175. package/dist/components/router.d.ts +0 -23
  176. package/dist/components/router.d.ts.map +0 -1
  177. package/dist/components/router.jsx +0 -128
  178. package/dist/contexts/route-context.d.ts +0 -19
  179. package/dist/contexts/route-context.d.ts.map +0 -1
  180. package/dist/contexts/route-context.js +0 -6
  181. package/dist/contexts/router-context.d.ts +0 -46
  182. package/dist/contexts/router-context.d.ts.map +0 -1
  183. package/dist/contexts/router-context.js +0 -8
  184. package/dist/core/_action-id-registry.d.ts +0 -10
  185. package/dist/core/_action-id-registry.d.ts.map +0 -1
  186. package/dist/core/_action-id-registry.js +0 -8
  187. package/dist/core/_capture-stack-trace.d.ts +0 -8
  188. package/dist/core/_capture-stack-trace.d.ts.map +0 -1
  189. package/dist/core/_capture-stack-trace.js +0 -12
  190. package/dist/core/_compare-route-paths.d.ts +0 -11
  191. package/dist/core/_compare-route-paths.d.ts.map +0 -1
  192. package/dist/core/_compare-route-paths.js +0 -80
  193. package/dist/core/_create-html-form-element-form-form-data.d.ts +0 -9
  194. package/dist/core/_create-html-form-element-form-form-data.d.ts.map +0 -1
  195. package/dist/core/_create-html-form-element-form-form-data.js +0 -27
  196. package/dist/core/_encode-pathname.d.ts +0 -10
  197. package/dist/core/_encode-pathname.d.ts.map +0 -1
  198. package/dist/core/_encode-pathname.js +0 -16
  199. package/dist/core/_is-error.d.ts +0 -3
  200. package/dist/core/_is-error.d.ts.map +0 -1
  201. package/dist/core/_is-error.js +0 -13
  202. package/dist/core/_is-promise-like.d.ts +0 -8
  203. package/dist/core/_is-promise-like.d.ts.map +0 -1
  204. package/dist/core/_is-promise-like.js +0 -12
  205. package/dist/core/_match-route-path.d.ts +0 -19
  206. package/dist/core/_match-route-path.d.ts.map +0 -1
  207. package/dist/core/_match-route-path.js +0 -22
  208. package/dist/core/_process-routes.d.ts +0 -9
  209. package/dist/core/_process-routes.d.ts.map +0 -1
  210. package/dist/core/_process-routes.js +0 -47
  211. package/dist/core/_singleton.d.ts +0 -18
  212. package/dist/core/_singleton.d.ts.map +0 -1
  213. package/dist/core/_singleton.js +0 -37
  214. package/dist/core/_unreachable.d.ts +0 -12
  215. package/dist/core/_unreachable.d.ts.map +0 -1
  216. package/dist/core/_unreachable.js +0 -8
  217. package/dist/core/_use-singleton.d.ts +0 -11
  218. package/dist/core/_use-singleton.d.ts.map +0 -1
  219. package/dist/core/_use-singleton.js +0 -21
  220. package/dist/core/_valibot.d.ts +0 -52
  221. package/dist/core/_valibot.d.ts.map +0 -1
  222. package/dist/core/_valibot.js +0 -107
  223. package/dist/core/_weak-id-registry.d.ts +0 -76
  224. package/dist/core/_weak-id-registry.d.ts.map +0 -1
  225. package/dist/core/_weak-id-registry.js +0 -67
  226. package/dist/core/constants.d.ts +0 -5
  227. package/dist/core/constants.d.ts.map +0 -1
  228. package/dist/core/constants.js +0 -4
  229. package/dist/core/data-map.types.d.ts +0 -23
  230. package/dist/core/data-map.types.d.ts.map +0 -1
  231. package/dist/core/data-map.types.js +0 -1
  232. package/dist/core/data-store.types.d.ts +0 -22
  233. package/dist/core/data-store.types.d.ts.map +0 -1
  234. package/dist/core/data-store.types.js +0 -1
  235. package/dist/core/deferred-promise.d.ts +0 -203
  236. package/dist/core/deferred-promise.d.ts.map +0 -1
  237. package/dist/core/deferred-promise.js +0 -200
  238. package/dist/core/errors.d.ts +0 -303
  239. package/dist/core/errors.d.ts.map +0 -1
  240. package/dist/core/errors.js +0 -400
  241. package/dist/core/expect-history-entry.d.ts +0 -52
  242. package/dist/core/expect-history-entry.d.ts.map +0 -1
  243. package/dist/core/expect-history-entry.js +0 -38
  244. package/dist/core/history-entry-id-schema.d.ts +0 -17
  245. package/dist/core/history-entry-id-schema.d.ts.map +0 -1
  246. package/dist/core/history-entry-id-schema.js +0 -9
  247. package/dist/core/history-entry-url-schema.d.ts +0 -20
  248. package/dist/core/history-entry-url-schema.d.ts.map +0 -1
  249. package/dist/core/history-entry-url-schema.js +0 -16
  250. package/dist/core/init-loaders.d.ts +0 -37
  251. package/dist/core/init-loaders.d.ts.map +0 -1
  252. package/dist/core/init-loaders.js +0 -38
  253. package/dist/core/match-routes.d.ts +0 -31
  254. package/dist/core/match-routes.d.ts.map +0 -1
  255. package/dist/core/match-routes.js +0 -54
  256. package/dist/core/readonly-form-data.types.d.ts +0 -32
  257. package/dist/core/readonly-form-data.types.d.ts.map +0 -1
  258. package/dist/core/readonly-url.types.d.ts +0 -135
  259. package/dist/core/readonly-url.types.d.ts.map +0 -1
  260. package/dist/core/redirect-response.d.ts +0 -29
  261. package/dist/core/redirect-response.d.ts.map +0 -1
  262. package/dist/core/redirect-response.js +0 -17
  263. package/dist/core/route-request.d.ts +0 -52
  264. package/dist/core/route-request.d.ts.map +0 -1
  265. package/dist/core/route-request.js +0 -26
  266. package/dist/core/route.types.d.ts +0 -309
  267. package/dist/core/route.types.d.ts.map +0 -1
  268. package/dist/core/start-actions.d.ts +0 -60
  269. package/dist/core/start-actions.d.ts.map +0 -1
  270. package/dist/core/start-actions.js +0 -186
  271. package/dist/core/start-loaders.d.ts +0 -69
  272. package/dist/core/start-loaders.d.ts.map +0 -1
  273. package/dist/core/start-loaders.js +0 -154
  274. package/dist/core.d.ts.map +0 -1
  275. package/dist/engines/engine.types.d.ts +0 -190
  276. package/dist/engines/engine.types.d.ts.map +0 -1
  277. package/dist/engines/navigation-api-engine.d.ts +0 -48
  278. package/dist/engines/navigation-api-engine.d.ts.map +0 -1
  279. package/dist/engines/navigation-api-engine.js +0 -332
  280. package/dist/hooks/_use-route-context.d.ts +0 -10
  281. package/dist/hooks/_use-route-context.d.ts.map +0 -1
  282. package/dist/hooks/_use-route-context.js +0 -17
  283. package/dist/hooks/_use-router-context.d.ts +0 -10
  284. package/dist/hooks/_use-router-context.d.ts.map +0 -1
  285. package/dist/hooks/_use-router-context.js +0 -18
  286. package/dist/hooks/use-action-data.d.ts +0 -23
  287. package/dist/hooks/use-action-data.d.ts.map +0 -1
  288. package/dist/hooks/use-action-data.js +0 -16
  289. package/dist/hooks/use-form-action.d.ts +0 -7
  290. package/dist/hooks/use-form-action.d.ts.map +0 -1
  291. package/dist/hooks/use-form-action.js +0 -10
  292. package/dist/hooks/use-loader-data.d.ts +0 -11
  293. package/dist/hooks/use-loader-data.d.ts.map +0 -1
  294. package/dist/hooks/use-loader-data.js +0 -19
  295. package/dist/hooks/use-navigate.d.ts +0 -39
  296. package/dist/hooks/use-navigate.d.ts.map +0 -1
  297. package/dist/hooks/use-navigate.js +0 -26
  298. package/dist/hooks/use-params.d.ts.map +0 -1
  299. package/dist/hooks/use-pathname.d.ts +0 -7
  300. package/dist/hooks/use-pathname.d.ts.map +0 -1
  301. package/dist/hooks/use-pathname.js +0 -9
  302. package/dist/hooks/use-submit.d.ts +0 -66
  303. package/dist/hooks/use-submit.d.ts.map +0 -1
  304. package/dist/hooks/use-submit.js +0 -35
  305. package/dist/soseki.d.ts +0 -42
  306. package/dist/soseki.d.ts.map +0 -1
  307. package/dist/soseki.js +0 -19
  308. package/dist/utils/get-action-id.d.ts +0 -8
  309. package/dist/utils/get-action-id.d.ts.map +0 -1
  310. package/dist/utils/get-action-id.js +0 -11
  311. package/dist/utils/href.d.ts +0 -11
  312. package/dist/utils/href.d.ts.map +0 -1
  313. package/dist/utils/href.js +0 -12
  314. package/dist/utils/redirect.d.ts +0 -11
  315. package/dist/utils/redirect.d.ts.map +0 -1
  316. package/dist/utils/redirect.js +0 -12
  317. package/dist/utils/route-index.d.ts +0 -41
  318. package/dist/utils/route-index.d.ts.map +0 -1
  319. package/dist/utils/route-index.js +0 -12
  320. package/dist/utils/route-route.d.ts +0 -62
  321. package/dist/utils/route-route.d.ts.map +0 -1
  322. package/dist/utils/route-route.js +0 -25
  323. package/dist/utils/set-action-id.d.ts +0 -9
  324. package/dist/utils/set-action-id.d.ts.map +0 -1
  325. package/dist/utils/set-action-id.js +0 -12
  326. package/src/components/action-id.tsx +0 -35
  327. package/src/components/hidden-input.tsx +0 -39
  328. package/src/core/_action-id-registry.ts +0 -11
  329. package/src/core/_capture-stack-trace.ts +0 -12
  330. package/src/core/_create-html-form-element-form-form-data.ts +0 -32
  331. package/src/core/_encode-pathname.ts +0 -17
  332. package/src/core/_is-error.ts +0 -16
  333. package/src/core/_is-promise-like.ts +0 -14
  334. package/src/core/_use-singleton.ts +0 -24
  335. package/src/core/_weak-id-registry.ts +0 -125
  336. package/src/core/constants.ts +0 -4
  337. package/src/core/data-map.types.ts +0 -28
  338. package/src/core/data-store.types.ts +0 -25
  339. package/src/core/deferred-promise.ts +0 -408
  340. package/src/core/start-actions.ts +0 -274
  341. package/src/hooks/_use-route-context.ts +0 -19
  342. package/src/hooks/_use-router-context.ts +0 -25
  343. package/src/hooks/use-pathname.ts +0 -10
  344. package/src/utils/get-action-id.ts +0 -12
  345. package/src/utils/href.ts +0 -17
  346. package/src/utils/route-index.ts +0 -70
  347. package/src/utils/route-route.ts +0 -111
  348. package/src/utils/set-action-id.ts +0 -14
  349. /package/dist/{core → src/core}/readonly-form-data.types.js +0 -0
  350. /package/dist/{core → src/core}/readonly-url.types.js +0 -0
  351. /package/dist/{core → src/core}/route.types.js +0 -0
  352. /package/dist/{engines → src/engines}/engine.types.js +0 -0
@@ -0,0 +1,164 @@
1
+ import { NinjaPromise } from "ninja-promise";
2
+
3
+ import unreachable from "./_unreachable.js";
4
+ import type { HistoryEntryUrl } from "./history-entry-url-schema.js";
5
+ import type { MatchedRoute } from "./match-routes.js";
6
+ import type { ReadonlyFormData } from "./readonly-form-data.types.js";
7
+ import RedirectResponse from "./redirect-response.js";
8
+ import RouteRequest from "./route-request.js";
9
+ import type { ActionFunction, RoutePathParams } from "./route.types.js";
10
+
11
+ /**
12
+ * アクション処理の実行開始時に必要となる、起点リクエスト情報の型定義です。
13
+ */
14
+ export type ActionStartRequest = {
15
+ /**
16
+ * アクションの送信先(トリガーされた現在)の正規化済み URL オブジェクトです。
17
+ */
18
+ readonly url: HistoryEntryUrl;
19
+
20
+ /**
21
+ * クライアントから送信された、書き換え用の不変なフォームデータです。
22
+ */
23
+ readonly formData: ReadonlyFormData;
24
+
25
+ /**
26
+ * 実行中の非同期アクションを外部から中断するための中断シグナルです。
27
+ */
28
+ readonly signal: AbortSignal;
29
+ };
30
+
31
+ /**
32
+ * 起動されたアクションの実行コンテキストおよび非同期状態を追跡・制御するためのインターフェースです。
33
+ */
34
+ export interface StartedAction {
35
+ /**
36
+ * アクションの実行結果、または現在進行中の非同期状態を表す `NinjaPromise` です。
37
+ */
38
+ data: NinjaPromise<unknown>;
39
+
40
+ /**
41
+ * 実際に実行対象として選出されたアクション関数の参照です。
42
+ */
43
+ func: ActionFunction;
44
+
45
+ /**
46
+ * アクションの非同期処理が完了してアイドル状態に移行するのを待機し、処理結果に伴うリダイレクト要求の有無を回収します。
47
+ *
48
+ * @returns 処理結果に伴うリダイレクト要求を含むオブジェクトです。
49
+ */
50
+ idle: () => Promise<{
51
+ redirectTo: RedirectResponse | undefined;
52
+ }>;
53
+ }
54
+
55
+ /**
56
+ * マッチしたルート配列から、アクションの送信先に近い親ルートのアクション関数を 1 つだけ選出して実行し、リダイレクトの傍受や応答データの型正規化などを行う、POST 処理の開始関数です。
57
+ *
58
+ * @param routes 現在の URL にマッチしたルート情報の配列です。
59
+ * @param request アクションを起動するための URL、フォームデータ、および中断シグナルを含むオブジェクトです。
60
+ * @returns 実行対象のアクション関数が検出された場合は `StartedAction` オブジェクトを返し、1つも定義されていなかった場合は `null` を返します。
61
+ */
62
+ export default function startAction(
63
+ routes: readonly Pick<MatchedRoute, "params" | "action" | "urlPath">[],
64
+ request: ActionStartRequest,
65
+ ): StartedAction | null {
66
+ let action: ActionFunction | undefined;
67
+ let params: RoutePathParams;
68
+ let urlPath: string;
69
+
70
+ for ({ action, params, urlPath } of routes) {
71
+ if (
72
+ // アクションを実行するために、関数が定義されている必要があります。
73
+ typeof action === "function" &&
74
+ // アクションの送信先に近い親ルートを選出します。
75
+ request.url.pathname.startsWith(urlPath)
76
+ ) {
77
+ break;
78
+ }
79
+ }
80
+
81
+ if (typeof action !== "function") {
82
+ return null;
83
+ }
84
+
85
+ let actionData: NinjaPromise<unknown> | undefined;
86
+ let redirectTo: RedirectResponse | undefined;
87
+
88
+ const actionReturn = NinjaPromise.try(function executeAction() {
89
+ return action({
90
+ params,
91
+ request: RouteRequest.new("POST", request.url, request.signal, request.formData),
92
+ });
93
+ });
94
+
95
+ switch (actionReturn.status) {
96
+ case "pending": {
97
+ // アクションの戻り値が非同期(Promise)である場合、中継用のプロミスを作成して状態変化をコントロールします。
98
+ const proxy = NinjaPromise.withResolvers();
99
+ actionData = proxy.promise;
100
+
101
+ // 非同期の完了を追跡します。
102
+ void (async () => {
103
+ const value = await actionReturn;
104
+ switch (true) {
105
+ // アクションの非同期結果がリダイレクト応答(RedirectResponse)であった場合、
106
+ // 内部状態にリダイレクト先を記録し、画面側のコンポーネントが参照するデータとしては undefined を返してデータ露出を抑制します。
107
+ case value instanceof RedirectResponse:
108
+ redirectTo = value;
109
+ return undefined;
110
+
111
+ default:
112
+ return value;
113
+ }
114
+ })()
115
+ .then((value) => proxy.resolve(value))
116
+ .catch((reason) => proxy.reject(reason)); // 例外が発生した場合はそのまま下流へ伝播させます。
117
+
118
+ break;
119
+ }
120
+
121
+ case "rejected":
122
+ // 同期的な実行の段階で既に例外が発生している場合は、特別な加工をせずそのままエラー状態を引き継ぎます。
123
+ // エラーハンドリングの責務は、このアクションデータを参照・購読するコンポーネント側に一任されます。
124
+ actionData = actionReturn;
125
+
126
+ break;
127
+
128
+ case "fulfilled": {
129
+ // 同期的に実行が完了し、すでに値が確定している場合の処理です。
130
+ const { value } = actionReturn;
131
+ switch (true) {
132
+ case value instanceof RedirectResponse:
133
+ // 返り値がリダイレクト指示である場合は、リダイレクト先を記録し、データを undefined に置き換えた解決済みのプロミスを作成します。
134
+ redirectTo = value;
135
+ actionData = NinjaPromise.resolve(undefined);
136
+ break;
137
+
138
+ default:
139
+ // 通常のデータであれば、そのままの完了状態をアクションデータとして引き継ぎます。
140
+ actionData = actionReturn;
141
+ }
142
+
143
+ break;
144
+ }
145
+
146
+ default:
147
+ unreachable(actionReturn);
148
+ }
149
+
150
+ return {
151
+ data: actionData,
152
+ func: action,
153
+ async idle() {
154
+ try {
155
+ // アクションデータのエラーハンドリングはコンポーネント側に一任されます。
156
+ await actionData;
157
+ } catch {}
158
+
159
+ return {
160
+ redirectTo,
161
+ };
162
+ },
163
+ };
164
+ }
@@ -1,254 +1,232 @@
1
+ import { NinjaPromise } from "ninja-promise";
2
+
1
3
  import unreachable from "./_unreachable.js";
2
- import type { IDataMap, IReadonlyDataMap } from "./data-map.types.js";
3
- import type { IDataStore } from "./data-store.types.js";
4
- import DeferredPromise from "./deferred-promise.js";
5
4
  import { LoaderConditionError } from "./errors.js";
6
5
  import type { HistoryEntry } from "./expect-history-entry.js";
6
+ import type { HistoryEntryId } from "./history-entry-id-schema.js";
7
7
  import type { MatchedRoute } from "./match-routes.js";
8
8
  import RouteRequest from "./route-request.js";
9
- import type { IAction, ILoader, ShouldReloadArgs } from "./route.types.js";
9
+ import type { LoaderFunction } from "./route.types.js";
10
10
 
11
11
  /**
12
- * `startLoaders` 関数に渡すパラメーターの型定義です。
12
+ * `startLoaders` 関数を実行する際に必要となる引数オブジェクトの型定義です。
13
13
  */
14
- export type StartLoadersParams =
15
- & {
16
- /**
17
- * 直前のルート情報の配列です。初回遷移時は `null` になります。
18
- */
19
- readonly prevRoutes: readonly Pick<MatchedRoute, "path" | "params">[] | null;
20
-
21
- /**
22
- * 現在の遷移先ルート情報の配列です。
23
- */
24
- readonly currentRoutes: readonly Pick<MatchedRoute, "path" | "params" | "dataFuncs">[];
25
-
26
- /**
27
- * 直前の履歴エントリー情報です。
28
- */
29
- readonly prevEntry: Pick<HistoryEntry, "id" | "url">;
30
-
31
- /**
32
- * 現在の履歴エントリー情報です。
33
- */
34
- readonly currentEntry: Pick<HistoryEntry, "id" | "url">;
35
-
36
- /**
37
- * アクションの実行結果を保持するデータストアーです。
38
- */
39
- readonly actionDataStore: IDataStore<IAction>;
40
-
41
- /**
42
- * ローダーの実行結果を保持するデータストアーです。
43
- */
44
- readonly loaderDataStore: IDataStore<ILoader>;
45
-
46
- /**
47
- * 非同期処理を中断するためのシグナルです。
48
- */
49
- readonly signal: AbortSignal;
50
- }
51
- & ({
52
- /**
53
- * 送信されたフォームデータです。
54
- */
55
- readonly formData: FormData;
56
-
57
- /**
58
- * アクションの実行結果を格納したマップです。
59
- */
60
- readonly actionResultMap: IReadonlyDataMap<IAction, unknown>;
61
- } | {
62
- /**
63
- * フォームデータが存在しないことを示します。
64
- */
65
- readonly formData?: undefined;
66
-
67
- /**
68
- * アクション結果マップが存在しないことを示します。
69
- */
70
- readonly actionResultMap?: undefined;
71
- });
14
+ export type StartLoadersArgs = {
15
+ /**
16
+ * 遷移前にマッチしていたルート情報の配列です。
17
+ */
18
+ readonly prevRoutes: readonly Pick<MatchedRoute, "path" | "params">[] | null;
19
+
20
+ /**
21
+ * 遷移先の URL にマッチしている全ルート情報の配列です。
22
+ */
23
+ readonly currentRoutes: readonly Pick<
24
+ MatchedRoute,
25
+ "path" | "params" | "action" | "loader" | "shouldReload"
26
+ >[];
27
+
28
+ /**
29
+ * 遷移前の履歴エントリー情報です。
30
+ */
31
+ readonly prevEntry: Pick<HistoryEntry, "id" | "url">;
32
+
33
+ /**
34
+ * 遷移先(現在)の履歴エントリー情報です。
35
+ */
36
+ readonly currentEntry: Pick<HistoryEntry, "id" | "url">;
37
+
38
+ /**
39
+ * 履歴エントリー ID ごとに、各ローダーの実行結果を多重管理しているグローバルなデータストアです。
40
+ */
41
+ readonly loaderDataStore: Map<HistoryEntryId, Map<LoaderFunction, NinjaPromise<unknown>>>;
42
+
43
+ /** 進行中のローダーの非同期処理を外部から中断するためのシグナルオブジェクトです。 */
44
+ readonly signal: AbortSignal;
45
+ };
72
46
 
73
47
  /**
74
- * ルートに紐付くローダーの実行を開始し、データの同期や再読み込みの判定を行います。
75
- *
76
- * @param params ローダーの開始に必要なパラメーターオブジェクトです。
77
- * @returns すべてのローダーの完了を待機する非同期関数を返します。ローダーが不要な場合は `undefined` を返します。
48
+ * 直前にアクションが実行されていた場合に、追加の文脈として渡されるオプションオブジェクトの型定義です。
78
49
  */
79
- export default function startLoaders(params: StartLoadersParams): undefined | {
50
+ export type StartLoadersOptions = {
51
+ /**
52
+ * アクション実行時に送信された標準のフォームデータです。
53
+ */
54
+ readonly formData: FormData;
55
+
80
56
  /**
81
- * 実行中のすべてのローダーが完了するまで待機します。
57
+ * 直前のアクション関数が返した実行結果データです。
82
58
  */
83
- (): Promise<void>;
84
- } {
85
- const {
86
- signal,
87
- prevEntry,
88
- prevRoutes,
89
- currentEntry,
90
- currentRoutes,
91
- actionDataStore,
92
- loaderDataStore,
93
- ...options
94
- } = params;
95
- // ローダーの実行前にアクションが実行された場合、その情報を使ってローダーの処理を分岐させます。
96
- const actionContext = options.formData && {
59
+ readonly actionData: unknown;
60
+ };
61
+
62
+ /**
63
+ * 起動されたローダー群のライフサイクルおよび完了待機を制御するインターフェースです。
64
+ */
65
+ export interface StartedLoaders {
66
+ /**
67
+ * 現在のフェーズでスケジュールされたすべてのローダーの処理が完了するまで待機します。
68
+ */
69
+ idle: () => Promise<void>;
70
+ }
71
+
72
+ /**
73
+ * 画面遷移やデータ更新の発生に伴い、現在マッチしているルートのローダー関数群を精査し、キャッシュの再利用または読み込みを動的に判定・実行する関数です。
74
+ *
75
+ * @param args ローダーの評価に必要な現旧のルートおよび履歴コンテキストです。
76
+ * @param options 直前のアクション実行コンテキストを含むオプションです。
77
+ * @returns スケジュールされたローダー全体の処理完了を待機するための `StartedLoaders` オブジェクトを返します。
78
+ */
79
+ export default function startLoaders(
80
+ args: StartLoadersArgs,
81
+ options?: StartLoadersOptions,
82
+ ): StartedLoaders {
83
+ const { signal, prevEntry, prevRoutes, currentEntry, currentRoutes, loaderDataStore } = args;
84
+
85
+ // アクション契機でのデータリロードであるか、通常の GET 遷移であるかを識別するためのコンテキストを構築します。
86
+ const actionContext = options && {
97
87
  formData: options.formData,
98
- resultMap: options.actionResultMap,
88
+ actionData: options.actionData,
99
89
  };
100
- // prevRoutes は「子ルート」->「親ルート」の順で並んでいるので、最初の要素がすべてのルートのパラメーターを保持しています。
90
+
91
+ // マッチした配列は「子ルート(詳細度高)」から「親ルート(詳細度低)」の順にソートされているため、先頭の要素から、ルート全体の動的パスパラメーターを一括して回収できます。
101
92
  const prevParams = prevRoutes?.[0]?.params || {};
102
- const prevRoutePathSet: ReadonlySet<string> = new Set(prevRoutes?.map(r => r.path));
103
- const prevActionDataMap: IReadonlyDataMap<IAction> | undefined = actionDataStore
104
- .get(prevEntry.id);
105
- const prevLoaderDataMap: IReadonlyDataMap<ILoader> | undefined = loaderDataStore
106
- .get(prevEntry.id);
107
- const currentActionDataIncMap: IDataMap<IAction> = new Map();
108
- const currentLoaderDataIncMap: IDataMap<ILoader> = new Map();
109
- const request = new RouteRequest("GET", currentEntry.url, signal);
110
-
111
- // 各ルートおよびルートに定義されたデータ関数(action/loader)を走査します。
93
+ const prevRoutePathSet: ReadonlySet<string> = new Set(prevRoutes?.map((r) => r.path));
94
+
95
+ // 遷移前の履歴 ID に紐づくローダーデータのキャッシュマップをストアから取得します。
96
+ const prevLoaderDataMap: ReadonlyMap<LoaderFunction, NinjaPromise<unknown>> | undefined =
97
+ loaderDataStore.get(prevEntry.id);
98
+
99
+ // 今回の実行フェーズで収集・確定させる新しいローダーデータマップを初期化します。
100
+ const currentLoaderDataMap = new Map<LoaderFunction, NinjaPromise<unknown>>();
101
+ const request = RouteRequest.new("GET", currentEntry.url, signal);
102
+
103
+ // 現在マッチしているすべてのルートセグメントを個別に精査します。
112
104
  for (const currentRoute of currentRoutes) {
113
- for (const { action, loader, shouldReload } of currentRoute.dataFuncs) {
114
- if (actionContext && action) {
115
- const prevActionData = prevActionDataMap?.get(action);
116
- if (prevActionData) {
117
- // 遷移前のアクションデータを引き継ぐことで、アクションの結果に応じて変更された描画内容を表示させ続けることができます。
118
- currentActionDataIncMap.set(action, prevActionData);
119
- }
120
- }
105
+ const { loader: currentLoader, params: currentParams, shouldReload } = currentRoute;
121
106
 
122
- if (!loader) {
123
- continue;
124
- }
107
+ // ローダー関数が定義されていないルートセグメントはスキップします。
108
+ if (typeof currentLoader !== "function") {
109
+ continue;
110
+ }
125
111
 
126
- const prevLoaderData = prevLoaderDataMap?.get(loader);
127
- if (!prevLoaderData) {
128
- // 遷移前のローダーデータがない場合、新規ルートの描画と判定して、強制ロードします。
129
- // ローダーの実行を遅延評価としてラップします。
130
- const data = DeferredPromise.try(function executeLoader() {
131
- return loader({
132
- params: currentRoute.params,
133
- request,
134
- });
112
+ // 過去に同じローダー関数が実行され、かつそのキャッシュデータが存在するかをチェックします。
113
+ const prevLoaderData = prevLoaderDataMap?.get(currentLoader);
114
+ if (!prevLoaderData) {
115
+ // 過去のキャッシュが存在しない=今回新しくマッチした未知のルート階層であると判定し、判定の余地なく新規にローダーを起動します。
116
+ const data = NinjaPromise.try(function executeLoader() {
117
+ return currentLoader({
118
+ params: currentParams,
119
+ request,
135
120
  });
136
- // ローダーの結果を待機、エラーハンドリングする処理は、この結果を参照するコンポーネントに任せます。
137
- currentLoaderDataIncMap.set(loader, data);
138
- continue;
139
- }
121
+ });
122
+ // ローダーの結果を待機、エラーハンドリングする処理は、この結果を参照するコンポーネントに任せます。
123
+ currentLoaderDataMap.set(currentLoader, data);
140
124
 
141
- // リロードすべきかどうかを判定します。
142
- const should = DeferredPromise.try(function executeShouldReload() {
143
- if (!actionContext) {
144
- // 通常の GET 遷移時の再読み込み判定引数を構築します。
145
- return shouldReload({
146
- prevUrl: prevEntry.url,
147
- currentUrl: currentEntry.url,
148
- prevParams,
149
- currentParams: currentRoute.params,
150
- triggerMethod: "GET",
151
- defaultShouldReload: !prevRoutePathSet.has(currentRoute.path),
152
- });
153
- }
125
+ continue;
126
+ }
154
127
 
155
- // 特定のアクションが実行された後の再読み込み判定引数を構築します。
156
- const {
157
- formData,
158
- resultMap,
159
- } = actionContext;
160
- let shouldArgs: ShouldReloadArgs = {
128
+ // キャッシュが存在する場合、ユーザー定義の `shouldReload` に照らし合わせて再読み込みが必要かを安全に検証します。
129
+ const should = NinjaPromise.try(function executeShouldReload() {
130
+ if (!actionContext) {
131
+ // 通常の GET 遷移時における再読み込み判定用引数を組み立てて実行します。
132
+ return shouldReload({
133
+ prevUrl: prevEntry.url,
134
+ currentUrl: currentEntry.url,
135
+ prevParams,
136
+ currentParams,
137
+ triggerMethod: "GET",
138
+ // 遷移前のルート群に今回精査しているパスが含まれていなければ、新規表示扱いとして、既定値を true とします。
139
+ defaultShouldReload: !prevRoutePathSet.has(currentRoute.path),
140
+ });
141
+ } else {
142
+ // フォームデータの送信を伴う更新契機の場合の判定引数です。
143
+ return shouldReload({
144
+ ...actionContext,
161
145
  prevUrl: prevEntry.url,
162
- formData,
163
146
  currentUrl: prevEntry.url,
164
147
  prevParams,
165
- currentParams: currentRoute.params,
148
+ currentParams,
166
149
  triggerMethod: "POST",
167
- defaultShouldReload: resultMap.size > 0,
168
- };
169
- if (action && resultMap.has(action)) {
170
- // アクションの結果があるときのみプロパティーを設定します。
171
- shouldArgs.actionResult = resultMap.get(action);
172
- }
150
+ // データ更新後は原則として全再取得が安全なため、既定値を true とします。
151
+ defaultShouldReload: true,
152
+ });
153
+ }
154
+ });
155
+
156
+ let data: NinjaPromise<unknown>;
157
+ // `shouldReload` の同期的な実行結果に基づいて処理を分岐します。
158
+ switch (should.status) {
159
+ case "pending": {
160
+ // shouldReload は仕様上「同期的」に真偽値を返す必要があります(Promise を返してはならない)。
161
+ // もし pending であれば LoaderConditionError を生成して拒否状態のプロミスとしてラップします。
162
+ const error = new LoaderConditionError({
163
+ url: request.url.href,
164
+ returnValue: should,
165
+ shouldReload,
166
+ });
167
+ data = NinjaPromise.reject(error);
168
+ break;
169
+ }
173
170
 
174
- return shouldReload(shouldArgs);
175
- });
171
+ case "rejected":
172
+ // shouldReload の実行中に同期的な例外が発生した場合は、そのエラー状態をそのまま引き継ぎ、ハンドリングを画面側に委ねます。
173
+ data = should;
174
+ break;
175
+
176
+ case "fulfilled": {
177
+ const { value } = should;
178
+ switch (value) {
179
+ case true:
180
+ // 明示的にリロードの指示が出た場合のみ、ローダーを新規に再実行します。
181
+ data = NinjaPromise.try(function executeLoader() {
182
+ return currentLoader({
183
+ params: currentParams,
184
+ request,
185
+ });
186
+ });
176
187
 
177
- let data: DeferredPromise<unknown>;
178
- switch (should.status) {
179
- case "pending": {
180
- // shouldReload は同期的に真偽値を返す必要があるので、pending 状態(つまり非同期)であってはいけません。
181
- const error = new LoaderConditionError(request.url.href, shouldReload, should);
182
- // エラーハンドリングは、このローダーデータを参照するコンポーネントに任せます。
183
- data = DeferredPromise.reject(error);
184
- break;
185
- }
188
+ break;
186
189
 
187
- case "rejected":
188
- // エラーハンドリングは、このアクションデータを参照するコンポーネントに任せます。
189
- data = should;
190
- break;
191
-
192
- case "fulfilled": {
193
- const { value } = should;
194
- switch (value) {
195
- case true:
196
- // 条件を満たす場合のみ、ローダーの実行をスケジュールします。
197
- data = DeferredPromise.try(function executeLoader() {
198
- return loader({
199
- params: currentRoute.params,
200
- request,
201
- });
202
- });
203
- break;
204
-
205
- case false:
206
- // 再読み込みが不要な場合は、前回のデータを引き継ぎま
207
- data = prevLoaderData;
208
- break;
209
-
210
- default: {
211
- // shouldReload が真偽値を返さなかった場合、エラーとします。
212
- const error = new LoaderConditionError(request.url.href, shouldReload, value);
213
- // エラーハンドリングは、このローダーデータを参照するコンポーネントに任せます。
214
- data = DeferredPromise.reject(error);
215
- }
216
- }
190
+ case false:
191
+ // 再読み込みが不要(現状維持)と判定された場合は、前回のキャッシュプロミスをそのまま無加工で引き継ぎます。
192
+ data = prevLoaderData;
193
+
194
+ break;
217
195
 
218
- break;
196
+ default: {
197
+ // 戻り値が boolean 型(true / false)ではなかった場合、仕様不適合としてエラーを割り当てます。
198
+ const error = new LoaderConditionError({
199
+ url: request.url.href,
200
+ returnValue: value,
201
+ shouldReload,
202
+ });
203
+ // エラーハンドリングは、このローダーデータを参照するコンポーネントに任せます。
204
+ data = NinjaPromise.reject(error);
205
+ }
219
206
  }
220
207
 
221
- default:
222
- unreachable(should);
208
+ break;
223
209
  }
224
210
 
225
- currentLoaderDataIncMap.set(loader, data);
211
+ default:
212
+ unreachable(should);
226
213
  }
227
- }
228
214
 
229
- // アクションデータの更新処理です。
230
- if (actionContext) {
231
- const dataMap = actionDataStore.get(currentEntry.id);
232
- if (dataMap) {
233
- for (const [action, data] of currentActionDataIncMap) {
234
- dataMap.set(action, data);
235
- }
236
- } else {
237
- actionDataStore.set(currentEntry.id, currentActionDataIncMap);
238
- }
215
+ // 確定したプロミスを今回のマップに登録します。
216
+ currentLoaderDataMap.set(currentLoader, data);
239
217
  }
240
218
 
241
- // ローダーデータの更新処理です。
242
- const dataMap = loaderDataStore.get(currentEntry.id);
243
- if (dataMap) {
244
- for (const [loader, data] of currentLoaderDataIncMap) {
245
- dataMap.set(loader, data);
246
- }
247
- } else {
248
- loaderDataStore.set(currentEntry.id, currentLoaderDataIncMap);
219
+ // 今回の実行フェーズで収集・更新されたローダーデータが存在する場合、グローバルなキャッシュストアへマージして永続化します。
220
+ if (currentLoaderDataMap.size > 0) {
221
+ loaderDataStore.set(
222
+ currentEntry.id,
223
+ new Map([...(loaderDataStore.get(currentEntry.id) || []), ...currentLoaderDataMap]),
224
+ );
249
225
  }
250
226
 
251
- return async function waitForLoadersComplete() {
252
- await Promise.allSettled(currentLoaderDataIncMap.values());
227
+ return {
228
+ async idle() {
229
+ await Promise.allSettled(currentLoaderDataMap.values());
230
+ },
253
231
  };
254
232
  }
package/src/core.ts CHANGED
@@ -1,5 +1,7 @@
1
- export { default as Router } from "./components/router.jsx";
2
1
  export type * from "./components/router.jsx";
2
+ export { default as Router } from "./components/router.jsx";
3
+
4
+ /**************************************************************************************************/
3
5
 
4
6
  export type * from "./contexts/route-context.js";
5
7
  export { default as RouteContext } from "./contexts/route-context.js";
@@ -7,11 +9,7 @@ export { default as RouteContext } from "./contexts/route-context.js";
7
9
  export type * from "./contexts/router-context.js";
8
10
  export { default as RouterContext } from "./contexts/router-context.js";
9
11
 
10
- export { ACTION_ID_FORM_DATA_NAME } from "./core/constants.js";
11
-
12
- export type * from "./core/data-map.types.js";
13
-
14
- export type * from "./core/data-store.types.js";
12
+ /**************************************************************************************************/
15
13
 
16
14
  export type * from "./core/expect-history-entry.js";
17
15
  export { default as expectHistoryEntry } from "./core/expect-history-entry.js";
@@ -28,16 +26,11 @@ export { default as initLoaders } from "./core/init-loaders.js";
28
26
  export type * from "./core/match-routes.js";
29
27
  export { default as matchRoutes } from "./core/match-routes.js";
30
28
 
31
- export type * from "./core/redirect-response.js";
32
- export { default as RedirectResponse } from "./core/redirect-response.js";
29
+ export type * from "./core/route-path.js";
30
+ export { default as RoutePath } from "./core/route-path.js";
33
31
 
34
- export type * from "./core/start-actions.js";
35
- export { default as startActions } from "./core/start-actions.js";
32
+ export type * from "./core/start-action.js";
33
+ export { default as startAction } from "./core/start-action.js";
36
34
 
37
35
  export type * from "./core/start-loaders.js";
38
36
  export { default as startLoaders } from "./core/start-loaders.js";
39
-
40
- export type * from "./engines/engine.types.js";
41
-
42
- export type * from "./engines/navigation-api-engine.js";
43
- export { default as NavigationApiEngine } from "./engines/navigation-api-engine.js";