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,43 @@
1
+ import * as React from "react";
2
+ import useRouterContext from "./use-router-context.js";
3
+ /**
4
+ * リンクなどを介さない、ボタンのクリックハンドラーや非同期処理の完了時などから、プログラムによって命令的に画面遷移や履歴移動をトリガーするための関数を取得するカスタムフックです。
5
+ *
6
+ * @returns `NavigateFunction` 関数です。
7
+ */
8
+ export default function useNavigate() {
9
+ const routerNavigate = useRouterContext((router) => router.navigate);
10
+ // レンダリング毎に関数の参照が変わって子コンポーネントが不要に再描画されるのを防ぐため、useCallback でラップします。
11
+ return React.useCallback(function navigate(...args) {
12
+ if (typeof args[0] === "number") {
13
+ const [delta] = args;
14
+ return routerNavigate({
15
+ type: "MOVE",
16
+ delta,
17
+ });
18
+ }
19
+ const [to, options = {}] = args;
20
+ const { replace = false } = options;
21
+ const history = replace ? "replace" : "push";
22
+ if (typeof to === "string") {
23
+ return routerNavigate({
24
+ to: {
25
+ path: to,
26
+ type: "PATH",
27
+ },
28
+ type: "LINK",
29
+ history,
30
+ });
31
+ }
32
+ else {
33
+ return routerNavigate({
34
+ to: {
35
+ ...to,
36
+ type: "PARTIAL",
37
+ },
38
+ type: "LINK",
39
+ history,
40
+ });
41
+ }
42
+ }, [routerNavigate]);
43
+ }
@@ -1,8 +1,8 @@
1
- import type { PathParams } from "../core/route.types.js";
1
+ import type { RoutePathParams } from "../core/route.types.js";
2
2
  /**
3
3
  * 現在のルートにマッチしたパスパラメーターを取得するためのカスタムフックです。
4
4
  *
5
5
  * @returns 現在のパスパラメーターを含むオブジェクトを返します。
6
6
  */
7
- export default function useParams<TPath extends string = string>(): PathParams<TPath>;
7
+ export default function useParams<TPath extends string = string>(): RoutePathParams<TPath>;
8
8
  //# sourceMappingURL=use-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-params.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,CAEzF"}
@@ -1,4 +1,4 @@
1
- import useRouteContext from "./_use-route-context.js";
1
+ import useRouteContext from "./use-route-context.js";
2
2
  /**
3
3
  * 現在のルートにマッチしたパスパラメーターを取得するためのカスタムフックです。
4
4
  *
@@ -0,0 +1,10 @@
1
+ import { type RouteContextValue } from "../contexts/route-context.js";
2
+ /**
3
+ * React のコンポーネントツリーから、現在の階層に紐づいているルートの文脈情報を安全に取得するためのカスタムフックです。
4
+ *
5
+ * コンテキストが供給されていない状況を検知した場合はエラーを投げます。
6
+ *
7
+ * @returns 現在の階層で確定している型 `RouteContextValue` のルートコンテキストデータを返します。
8
+ */
9
+ export default function useRouteContext(): RouteContextValue;
10
+ //# sourceMappingURL=use-route-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-route-context.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-route-context.ts"],"names":[],"mappings":"AAEA,OAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGpF;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,IAAI,iBAAiB,CAO3D"}
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import RouteContext from "../contexts/route-context.js";
3
+ import { RouteContextMissingError } from "../core/errors.js";
4
+ /**
5
+ * React のコンポーネントツリーから、現在の階層に紐づいているルートの文脈情報を安全に取得するためのカスタムフックです。
6
+ *
7
+ * コンテキストが供給されていない状況を検知した場合はエラーを投げます。
8
+ *
9
+ * @returns 現在の階層で確定している型 `RouteContextValue` のルートコンテキストデータを返します。
10
+ */
11
+ export default function useRouteContext() {
12
+ const routeContext = React.use(RouteContext);
13
+ if (!routeContext) {
14
+ throw new RouteContextMissingError();
15
+ }
16
+ return routeContext;
17
+ }
@@ -0,0 +1,12 @@
1
+ import { type RouterRef } from "../contexts/router-context.js";
2
+ /**
3
+ * グローバルなルーターの状態)ら、必要なデータの一部(スライス)をセレクター関数を介して選択的・効率的に購読するためのカスタムフックです。
4
+ *
5
+ * ルーターコンポーネントの配下で実行されていない場合はエラーを投げます。
6
+ *
7
+ * @template TSlice セレクター関数によって抽出される、コンポーネントが必要とする部分データの型定義です。
8
+ * @param selector ルーターの内部実体を受け取り、必要なプロパティーや状態を抽出して返す純粋関数です。
9
+ * @returns 選択され、外部ストアと同期された最新のスライスデータを返します。
10
+ */
11
+ export default function useRouterContext<TSlice>(selector: (router: RouterRef["current"]) => TSlice): TSlice;
12
+ //# sourceMappingURL=use-router-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-router-context.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-router-context.ts"],"names":[],"mappings":"AAEA,OAAsB,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG9E;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAM,EAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,MAAM,GACjD,MAAM,CAQR"}
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import RouterContext from "../contexts/router-context.js";
3
+ import { RouterContextMissingError } from "../core/errors.js";
4
+ /**
5
+ * グローバルなルーターの状態)ら、必要なデータの一部(スライス)をセレクター関数を介して選択的・効率的に購読するためのカスタムフックです。
6
+ *
7
+ * ルーターコンポーネントの配下で実行されていない場合はエラーを投げます。
8
+ *
9
+ * @template TSlice セレクター関数によって抽出される、コンポーネントが必要とする部分データの型定義です。
10
+ * @param selector ルーターの内部実体を受け取り、必要なプロパティーや状態を抽出して返す純粋関数です。
11
+ * @returns 選択され、外部ストアと同期された最新のスライスデータを返します。
12
+ */
13
+ export default function useRouterContext(selector) {
14
+ const routerContext = React.use(RouterContext);
15
+ if (!routerContext) {
16
+ throw new RouterContextMissingError();
17
+ }
18
+ const { routerRef, subscribe } = routerContext;
19
+ return React.useSyncExternalStore(subscribe, () => selector(routerRef.current));
20
+ }
@@ -0,0 +1,59 @@
1
+ import type { ReadonlyFormData } from "../core/readonly-form-data.types.js";
2
+ import type { ReadonlyURLSearchParams } from "../core/readonly-url.types.js";
3
+ /**
4
+ * クエリーパラメーター送信(HTTP GET 相当)のサブミット処理をカスタマイズするためのオプション型です。
5
+ */
6
+ export type SubmitGetOptions = {
7
+ /**
8
+ * 送信先(遷移先)のベースとなる URL パスを明示的に上書き指定します。省略時は現在のフォームアクションパスが使用されます。
9
+ */
10
+ readonly action?: string | undefined;
11
+ /**
12
+ * 履歴スタックへの追加方法を制御します。`true` の場合は現在の履歴を上書きし、`false` または省略時は新規追加します。
13
+ */
14
+ readonly replace?: boolean | undefined;
15
+ };
16
+ /**
17
+ * フォームデータ送信(HTTP POST 相当)のサブミット処理をカスタマイズするためのオプション型です。
18
+ */
19
+ export type SubmitPostOptions = {
20
+ /**
21
+ * 送信先(アクション実行先)の URL パスを明示的に上書き指定します。省略時は現在のフォームアクションパスが使用されます。
22
+ */
23
+ readonly action?: string | undefined;
24
+ };
25
+ /**
26
+ * プログラムから命令的にデータ送信および画面遷移を実行する、`submit` 関数のオーバーロードインターフェース定義です。
27
+ */
28
+ export interface SubmitFunction {
29
+ /**
30
+ * 不変のフォームデータを引き渡して、HTTP POST 相当のアクション処理をトリガーします。
31
+ *
32
+ * @param target 送信するフォームデータです。
33
+ * @param options POST 送信用のオプションです。
34
+ */
35
+ (target: ReadonlyFormData, options?: SubmitPostOptions): void;
36
+ /**
37
+ * 不変のクエリーパラメーターを引き渡して、HTTP GET 相当の検索条件の更新をトリガーします。
38
+ *
39
+ * @param target 送信する検索クエリーです。
40
+ * @param options GET 送信用のオプションです。
41
+ */
42
+ (target: ReadonlyURLSearchParams, options?: SubmitGetOptions): void;
43
+ /**
44
+ * 内部実装および包括的なユースケースに対応する汎用シグニチャーです。
45
+ *
46
+ * @param target 送信愛用です。
47
+ * @param options オプションです。
48
+ */
49
+ (target: ReadonlyURLSearchParams | ReadonlyFormData, options?: SubmitGetOptions | SubmitPostOptions): void;
50
+ }
51
+ /**
52
+ * ユーザーのクリックイベントや、特定のロジックに基づくタイミングで、プログラムから宣言的・命令的にサブミット処理(データ送信および遷移)を実行するための関数を取得するカスタムフックです。
53
+ *
54
+ * 渡されたペイロードが `FormData` であるか `URLSearchParams` であるかをランタイムで自動判定し、適切なルーティングエンジンメソッドへと送信されます。
55
+ *
56
+ * @returns 依存関係が最適化され、同一参照が保証された `submit` 関数を返します。
57
+ */
58
+ export default function useSubmit(): SubmitFunction;
59
+ //# sourceMappingURL=use-submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-submit.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-submit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAI7E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEpE;;;;;OAKG;IACH,CACE,MAAM,EAAE,uBAAuB,GAAG,gBAAgB,EAClD,OAAO,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,GAC7C,IAAI,CAAC;CACT;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,IAAI,cAAc,CAkClD"}
@@ -0,0 +1,38 @@
1
+ import * as React from "react";
2
+ import useFormAction from "./use-form-action.js";
3
+ import useRouterContext from "./use-router-context.js";
4
+ /**
5
+ * ユーザーのクリックイベントや、特定のロジックに基づくタイミングで、プログラムから宣言的・命令的にサブミット処理(データ送信および遷移)を実行するための関数を取得するカスタムフックです。
6
+ *
7
+ * 渡されたペイロードが `FormData` であるか `URLSearchParams` であるかをランタイムで自動判定し、適切なルーティングエンジンメソッドへと送信されます。
8
+ *
9
+ * @returns 依存関係が最適化され、同一参照が保証された `submit` 関数を返します。
10
+ */
11
+ export default function useSubmit() {
12
+ const formAction = useFormAction();
13
+ const routerSubmit = useRouterContext((router) => router.submit);
14
+ // レンダリング毎に関数の参照が変わって子コンポーネントが不要に再描画されるのを防ぐため、useCallback でラップします。
15
+ return React.useCallback(function submit(target, options = {}) {
16
+ if (target instanceof FormData) {
17
+ // 分岐 1: データ実体がフォームデータである場合 = 副作用を伴うデータ変更処理(POST / Action 契機)
18
+ const { action = formAction } = options;
19
+ // エンジンに対して「FORM_DATA」タイプとしてのサブミットタスクを発行します。
20
+ return routerSubmit({
21
+ type: "FORM_DATA",
22
+ target,
23
+ action,
24
+ });
25
+ }
26
+ else {
27
+ // 分岐 2: データ実体がクエリーパラメーターである場合 = 読み取り専用の条件更新処理(GET / Loader 契機)
28
+ const { action = formAction, replace } = options;
29
+ return routerSubmit({
30
+ type: "URL_SEARCH_PARAMS",
31
+ target: target,
32
+ action,
33
+ // replace の真偽値に基づき、ブラウザー履歴の追加方法(push / replace)を明示的にマッピングします。
34
+ history: replace ? "replace" : "push",
35
+ });
36
+ }
37
+ }, [routerSubmit, formAction]);
38
+ }
@@ -0,0 +1,31 @@
1
+ export type * from "./components/browser-router.jsx";
2
+ export { default as BrowserRouter } from "./components/browser-router.jsx";
3
+ export type * from "./components/outlet.jsx";
4
+ export { default as Outlet } from "./components/outlet.jsx";
5
+ /**************************************************************************************************/
6
+ export type { Issue, UnreachableErrorArgs, UnreachableErrorMeta, LoaderConditionErrorArgs, LoaderConditionErrorMeta, LoaderDataNotFoundErrorArgs, LoaderDataNotFoundErrorMeta, UnexpectedValidationErrorArgs, UnexpectedValidationErrorMeta, } from "./core/errors.js";
7
+ export { ErrorBase, setErrorMessage, UnreachableError, ValidationErrorBase, LoaderConditionError, LoaderDataNotFoundError, RouteContextMissingError, RouterContextMissingError, UnexpectedValidationError, NavigationApiNotSupportedError, } from "./core/errors.js";
8
+ export type * from "./core/readonly-form-data.types.js";
9
+ export type * from "./core/readonly-url.types.js";
10
+ export type * from "./core/redirect-response.js";
11
+ export { default as RedirectResponse } from "./core/redirect-response.js";
12
+ export type * from "./core/route-request.js";
13
+ export { default as RouteRequest } from "./core/route-request.js";
14
+ export type * from "./core/route.types.js";
15
+ /**************************************************************************************************/
16
+ export type * from "./hooks/use-action-data.js";
17
+ export { default as useActionData } from "./hooks/use-action-data.js";
18
+ export type * from "./hooks/use-form-action.js";
19
+ export { default as useFormAction } from "./hooks/use-form-action.js";
20
+ export type * from "./hooks/use-loader-data.js";
21
+ export { default as useLoaderData } from "./hooks/use-loader-data.js";
22
+ export type * from "./hooks/use-navigate.js";
23
+ export { default as useNavigate } from "./hooks/use-navigate.js";
24
+ export type * from "./hooks/use-params.js";
25
+ export { default as useParams } from "./hooks/use-params.js";
26
+ export type * from "./hooks/use-submit.js";
27
+ export { default as useSubmit } from "./hooks/use-submit.js";
28
+ /**************************************************************************************************/
29
+ export type * from "./utils/redirect.js";
30
+ export { default as redirect } from "./utils/redirect.js";
31
+ //# sourceMappingURL=soseki.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soseki.d.ts","sourceRoot":"","sources":["../../src/soseki.ts"],"names":[],"mappings":"AAAA,mBAAmB,iCAAiC,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAE3E,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE5D,oGAAoG;AAEpG,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB,oCAAoC,CAAC;AAExD,mBAAmB,8BAA8B,CAAC;AAElD,mBAAmB,6BAA6B,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE1E,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAElE,mBAAmB,uBAAuB,CAAC;AAE3C,oGAAoG;AAEpG,mBAAmB,4BAA4B,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEtE,mBAAmB,4BAA4B,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEtE,mBAAmB,4BAA4B,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEtE,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEjE,mBAAmB,uBAAuB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE7D,mBAAmB,uBAAuB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE7D,oGAAoG;AAEpG,mBAAmB,qBAAqB,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { default as BrowserRouter } from "./components/browser-router.jsx";
2
+ export { default as Outlet } from "./components/outlet.jsx";
3
+ export { ErrorBase, setErrorMessage, UnreachableError, ValidationErrorBase, LoaderConditionError, LoaderDataNotFoundError, RouteContextMissingError, RouterContextMissingError, UnexpectedValidationError, NavigationApiNotSupportedError, } from "./core/errors.js";
4
+ export { default as RedirectResponse } from "./core/redirect-response.js";
5
+ export { default as RouteRequest } from "./core/route-request.js";
6
+ export { default as useActionData } from "./hooks/use-action-data.js";
7
+ export { default as useFormAction } from "./hooks/use-form-action.js";
8
+ export { default as useLoaderData } from "./hooks/use-loader-data.js";
9
+ export { default as useNavigate } from "./hooks/use-navigate.js";
10
+ export { default as useParams } from "./hooks/use-params.js";
11
+ export { default as useSubmit } from "./hooks/use-submit.js";
12
+ export { default as redirect } from "./utils/redirect.js";
@@ -0,0 +1,11 @@
1
+ import RedirectResponse from "../core/redirect-response.js";
2
+ /**
3
+ * 指定された URL パスへのリダイレクトを表すレスポンスオブジェクトを作成します。
4
+ *
5
+ * アクションの中で、別のページへ遷移させるために使用されます。
6
+ *
7
+ * @param destination リダイレクト先の URL パスです。
8
+ * @returns 作成された `RedirectResponse` オブジェクトです。
9
+ */
10
+ export default function redirect(destination: string): RedirectResponse;
11
+ //# sourceMappingURL=redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../../src/utils/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAEtE"}
@@ -0,0 +1,12 @@
1
+ import RedirectResponse from "../core/redirect-response.js";
2
+ /**
3
+ * 指定された URL パスへのリダイレクトを表すレスポンスオブジェクトを作成します。
4
+ *
5
+ * アクションの中で、別のページへ遷移させるために使用されます。
6
+ *
7
+ * @param destination リダイレクト先の URL パスです。
8
+ * @returns 作成された `RedirectResponse` オブジェクトです。
9
+ */
10
+ export default function redirect(destination) {
11
+ return new RedirectResponse(destination);
12
+ }
package/package.json CHANGED
@@ -1,18 +1,12 @@
1
1
  {
2
2
  "name": "soseki",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "",
5
- "sideEffects": false,
6
- "type": "module",
7
- "exports": {
8
- ".": {
9
- "types": "./dist/soseki.d.ts",
10
- "default": "./dist/soseki.js"
11
- },
12
- "./core": {
13
- "types": "./dist/core.d.ts",
14
- "default": "./dist/core.js"
15
- }
5
+ "homepage": "https://github.com/tai-kun/soseki.js",
6
+ "license": "MIT",
7
+ "author": "tai-kun",
8
+ "repository": {
9
+ "url": "https://github.com/tai-kun/soseki.js"
16
10
  },
17
11
  "files": [
18
12
  "dist",
@@ -20,44 +14,57 @@
20
14
  "package.json",
21
15
  "LICENSE"
22
16
  ],
23
- "homepage": "https://github.com/tai-kun/soseki.js",
24
- "repository": {
25
- "url": "https://github.com/tai-kun/soseki.js"
17
+ "type": "module",
18
+ "sideEffects": false,
19
+ "main": "./dist/src/soseki.js",
20
+ "types": "./dist/src/soseki.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/src/soseki.d.ts",
24
+ "default": "./dist/src/soseki.js"
25
+ },
26
+ "./core": {
27
+ "types": "./dist/src/core.d.ts",
28
+ "default": "./dist/src/core.js"
29
+ },
30
+ "./engines": {
31
+ "types": "./dist/src/engines.d.ts",
32
+ "default": "./dist/src/engines.js"
33
+ }
26
34
  },
27
35
  "dependencies": {
36
+ "@tai-kun/valibot-extra-lab": "^0.0.5",
37
+ "call-fn-once": "^0.0.6",
38
+ "i18n-error-base": "^0.0.4",
39
+ "inspect-lite": "^0.0.2",
40
+ "maypromise": "^0.0.4",
41
+ "ninja-promise": "^0.0.3",
28
42
  "regexparam": "^3.0.0",
43
+ "try-capture-stack-trace": "^0.0.3",
29
44
  "type-name": "^2.0.2"
30
45
  },
31
- "peerDependencies": {
32
- "react": "^19.0.0",
33
- "valibot": "^1.0.0"
34
- },
35
46
  "devDependencies": {
36
- "@tsconfig/node22": "^22.0.5",
47
+ "@tsconfig/node24": "^24.0.4",
37
48
  "@tsconfig/strictest": "^2.0.8",
38
- "@types/node": "^22.19.3",
39
- "@types/react": "^19.2.7",
49
+ "@types/node": "^24.12.4",
50
+ "@types/react": "^19.2.15",
40
51
  "@types/react-dom": "^19.2.3",
41
52
  "@types/type-name": "^1.0.32",
42
- "@vitest/browser": "^4.0.16",
43
- "@vitest/browser-playwright": "^4.0.16",
44
- "@vitejs/plugin-react": "^5.1.2",
45
- "dependency-cruiser": "^17.3.5",
46
- "navigation-api-types": "^0.6.1",
47
- "npm-check-updates": "^19.2.0",
48
- "playwright": "^1.57.0",
49
- "react": "^19.2.3",
50
- "react-dom": "^19.2.3",
51
- "valibot": "^1.2.0",
52
- "vitest": "^4.0.16",
53
- "vitest-browser-react": "^2.0.2"
53
+ "@vitest/browser": "^4.1.7",
54
+ "@vitest/browser-playwright": "^4.1.7",
55
+ "npm-check-updates": "^20.0.2",
56
+ "playwright": "^1.60.0",
57
+ "react": "^19.2.6",
58
+ "react-dom": "^19.2.6",
59
+ "vite": "^8.0.14",
60
+ "vitest": "^4.1.7"
61
+ },
62
+ "peerDependencies": {
63
+ "@logtape/logtape": "^2.0.0",
64
+ "react": "^19.0.0",
65
+ "valibot": "^1.0.0"
54
66
  },
55
67
  "scripts": {
56
68
  "build": "tsc --project ./.config/tsconfig.build.json"
57
- },
58
- "publishConfig": {
59
- "access": "public",
60
- "registry": "https://registry.npmjs.org/",
61
- "provenance": true
62
69
  }
63
- }
70
+ }
@@ -1,31 +1,28 @@
1
- import useSingleton from "../core/_use-singleton.js";
2
1
  import type { RouteDefinition } from "../core/route.types.js";
3
2
  import NavigationApiEngine from "../engines/navigation-api-engine.js";
3
+ import useSingleton from "../hooks/_use-singleton.js";
4
4
  import Router from "./router.jsx";
5
5
 
6
6
  /**
7
- * BrowserRouter コンポーネントに渡されるプロパティーの型定義です。
7
+ * `BrowserRouter` コンポーネントに引き渡すプロパティーの型定義です。
8
8
  */
9
9
  export type BrowserRouterProps = {
10
10
  /**
11
- * アプリケーション全体のルート定義を格納した配列です。
11
+ * アプリケーション全体の画面構造を定義したルート定義の配列です。
12
12
  */
13
13
  routes: readonly RouteDefinition[];
14
14
  };
15
15
 
16
16
  /**
17
- * ブラウザー標準の Navigation API を使用してルーティングを行うためのコンポーネントです。
17
+ * ブラウザー環境における SPA ルーティングを開始するための、最上位エントリーポイントコンポーネントです。
18
18
  *
19
- * `NavigationApiEngine` のインスタンスをシングルトンとして保持し、ルーターの基盤を提供します。
19
+ * モダンなブラウザー標準の `Navigation API` に依存しています。
20
+ *
21
+ * @param props アプリケーションに組み込むルート定義の配列です。
20
22
  */
21
23
  export default function BrowserRouter(props: BrowserRouterProps): React.ReactElement {
22
24
  const { routes } = props;
23
25
  const engine = useSingleton(() => new NavigationApiEngine());
24
26
 
25
- return (
26
- <Router
27
- engine={engine}
28
- routes={routes}
29
- />
30
- );
27
+ return <Router engine={engine} routes={routes} />;
31
28
  }
@@ -1,11 +1,12 @@
1
1
  import * as React from "react";
2
+
2
3
  import RouteContext from "../contexts/route-context.js";
3
4
  import { RouteContextMissingError } from "../core/errors.js";
4
5
 
5
6
  /**
6
- * 現在のルート階層における子ルート(アウトレット)を描画するためのコンポーネントです。
7
+ * ネストされたルーティング構造において、親ルートのレイアウト内にマッチした子ルートを適切な位置にはめ込んで描画するためのプレースホルダーコンポーネントです。
7
8
  *
8
- * ネストされたルーティングにおいて、親ルートのコンポーネント内で子ルートの挿入位置を指定するために使用します。
9
+ * @returns 描画すべき子ルートの React 要素を返します。これ以上下位のルートがない場合は `null` を返します。
9
10
  */
10
11
  export default function Outlet(): React.ReactElement | null {
11
12
  const routeContext = React.use(RouteContext);