soseki 0.0.4 → 0.0.6

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 +48 -30
  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
@@ -1,332 +0,0 @@
1
- import actionIdRegistry from "../core/_action-id-registry.js";
2
- import createHtmlFormElementFormFormData from "../core/_create-html-form-element-form-form-data.js";
3
- import * as v from "../core/_valibot.js";
4
- import { ACTION_ID_FORM_DATA_NAME } from "../core/constants.js";
5
- import { NavigationApiNotSupportedError } from "../core/errors.js";
6
- import expectHistoryEntry from "../core/expect-history-entry.js";
7
- import HistoryEntryIdSchema from "../core/history-entry-id-schema.js";
8
- import HistoryEntryUrlSchema from "../core/history-entry-url-schema.js";
9
- import initLoaders from "../core/init-loaders.js";
10
- import matchRoutes from "../core/match-routes.js";
11
- import startActions from "../core/start-actions.js";
12
- import startLoaders from "../core/start-loaders.js";
13
- /**
14
- * Navigation API を利用してルーティングの基幹処理を行うエンジンクラスです。
15
- */
16
- export default class NavigationApiEngine {
17
- /**
18
- * NavigationApiEngine クラスの新しいインスタンスを初期化します。
19
- */
20
- constructor() {
21
- let nav;
22
- try {
23
- nav = navigation;
24
- }
25
- catch {
26
- try {
27
- nav = window.navigation;
28
- }
29
- catch { }
30
- }
31
- // オブジェクトの存在確認を行い、非対応環境なら例外を投げます。
32
- if (!(nav && typeof nav === "object")) {
33
- throw new NavigationApiNotSupportedError();
34
- }
35
- this.nav = nav;
36
- this.subscribedEntryIds = new Set();
37
- this.navAbortController = null;
38
- }
39
- /**
40
- * 現在のロケーションに基づいた初期のルーター状態を生成します。
41
- *
42
- * @param args 状態生成に必要なルート定義やデータ保持用のマップです。
43
- * @returns 生成されたルーター状態、またはマッチしなかった場合は `null` を返します。
44
- */
45
- init(args) {
46
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
47
- if (!currentEntry) {
48
- return null;
49
- }
50
- const { routes, getSignal, loaderDataStore, } = args;
51
- const currentRoutes = matchRoutes(routes, currentEntry.url.pathname);
52
- if (!currentRoutes) {
53
- return null;
54
- }
55
- // 非同期でローダーの初期化を開始します。
56
- initLoaders({
57
- entry: currentEntry,
58
- routes: currentRoutes,
59
- signal: getSignal(),
60
- dataStore: loaderDataStore,
61
- });
62
- return {
63
- entry: currentEntry,
64
- routes: currentRoutes,
65
- };
66
- }
67
- /**
68
- * エンジンの動作を開始し、ナビゲーションイベントの監視を行います。
69
- *
70
- * @param args エンジンの開始に必要な設定とデータ管理用のオブジェクトです。
71
- */
72
- start(args) {
73
- const { routes, update, getSignal, actionDataStore, loaderDataStore, } = args;
74
- /**
75
- * ナビゲーションが発生した際のハンドラーです。
76
- *
77
- * @param event ナビゲーションイベントです。
78
- */
79
- const handleNavigate = (event) => {
80
- // インターセプトできない場合や、ハッシュ変更、ダウンロードリクエストの場合は処理をスキップします。
81
- // 参照: https://developer.mozilla.org/docs/Web/API/Navigation_API#handling_a_navigation_using_intercept
82
- if (!event.isTrusted
83
- || !event.canIntercept
84
- || event.hashChange
85
- || event.downloadRequest !== null) {
86
- return;
87
- }
88
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
89
- if (!currentEntry) {
90
- event.intercept({
91
- async handler() {
92
- update(null);
93
- },
94
- });
95
- return;
96
- }
97
- const destUrl = v.expect(HistoryEntryUrlSchema(), event.destination.url);
98
- const destRoutes = matchRoutes(routes, destUrl.pathname);
99
- if (!destRoutes) {
100
- event.intercept({
101
- async handler() {
102
- update(null);
103
- },
104
- });
105
- return;
106
- }
107
- // 進行中の古い処理をキャンセルし、新しいコントローラーを生成します。
108
- this.navAbortController?.abort();
109
- const { signal } = this.navAbortController = new AbortController();
110
- const { formData } = event;
111
- const prevEntryInHandler = currentEntry;
112
- if (formData) {
113
- const { sourceElement } = event;
114
- if (sourceElement?.hasAttribute("data-sosekisubmit")) {
115
- document.body.removeChild(sourceElement);
116
- }
117
- let redirectUrl = new URL(currentEntry.url.href);
118
- let actionResultMap;
119
- event.intercept({
120
- precommitHandler: async (controller) => {
121
- const entry = {
122
- id: currentEntry.id,
123
- url: destUrl,
124
- };
125
- const waitForComplete = startActions({
126
- entry,
127
- routes: destRoutes,
128
- signal,
129
- formData,
130
- dataStore: actionDataStore,
131
- });
132
- if (!waitForComplete) {
133
- return;
134
- }
135
- update();
136
- const { redirect = currentEntry.url.pathname, resultMap, } = await waitForComplete();
137
- actionResultMap = resultMap;
138
- redirectUrl.pathname = redirect;
139
- controller.redirect(redirect);
140
- },
141
- handler: async () => {
142
- if (!actionResultMap) {
143
- return;
144
- }
145
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
146
- if (!currentEntry) {
147
- update(null);
148
- return;
149
- }
150
- if (currentEntry.url.href !== redirectUrl.href) {
151
- return;
152
- }
153
- const currentRoutes = matchRoutes(routes, currentEntry.url.pathname);
154
- if (!currentRoutes) {
155
- update(null);
156
- return;
157
- }
158
- const prevEntry = prevEntryInHandler;
159
- const prevRoutes = matchRoutes(routes, prevEntry.url.pathname);
160
- const waitForComplete = startLoaders({
161
- signal,
162
- formData,
163
- prevEntry,
164
- prevRoutes,
165
- currentEntry,
166
- currentRoutes,
167
- actionResultMap,
168
- actionDataStore,
169
- loaderDataStore,
170
- });
171
- update({
172
- entry: currentEntry,
173
- routes: currentRoutes,
174
- });
175
- if (!waitForComplete) {
176
- return;
177
- }
178
- await waitForComplete();
179
- },
180
- });
181
- }
182
- else {
183
- event.intercept({
184
- handler: async () => {
185
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
186
- if (!currentEntry) {
187
- update(null);
188
- return;
189
- }
190
- if (currentEntry.url.href !== destUrl.href) {
191
- return;
192
- }
193
- const prevEntry = prevEntryInHandler;
194
- const prevRoutes = matchRoutes(routes, prevEntry.url.pathname);
195
- const currentRoutes = destRoutes;
196
- const waitForComplete = startLoaders({
197
- signal,
198
- prevEntry,
199
- prevRoutes,
200
- currentEntry,
201
- currentRoutes,
202
- actionDataStore,
203
- loaderDataStore,
204
- });
205
- update({
206
- entry: currentEntry,
207
- routes: currentRoutes,
208
- });
209
- await waitForComplete?.();
210
- },
211
- });
212
- }
213
- };
214
- const signal = getSignal();
215
- const handleAbort = () => {
216
- this.navAbortController?.abort();
217
- this.navAbortController = null;
218
- };
219
- signal.addEventListener("abort", handleAbort, { once: true });
220
- this.nav.addEventListener("navigate", handleNavigate, { signal });
221
- // this.nav.addEventListener("navigateerror", console.error, { signal });
222
- // 既存のエントリーに対して dispose リスナーを登録し、メモリーを解放します。
223
- for (const entry of this.nav.entries()) {
224
- const entryId = v.expect(HistoryEntryIdSchema(), entry.id);
225
- if (this.subscribedEntryIds.has(entryId)) {
226
- continue;
227
- }
228
- const handleDispose = () => {
229
- this.subscribedEntryIds.delete(entryId);
230
- actionDataStore.delete(entryId);
231
- loaderDataStore.delete(entryId);
232
- };
233
- entry.addEventListener("dispose", handleDispose, { signal });
234
- this.subscribedEntryIds.add(entryId);
235
- }
236
- /**
237
- * 現在のエントリーが変更された際のハンドラーです。
238
- */
239
- const handleCurrentEntryChange = () => {
240
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
241
- if (!currentEntry) {
242
- return;
243
- }
244
- if (this.subscribedEntryIds.has(currentEntry.id)) {
245
- return;
246
- }
247
- const handleDispose = () => {
248
- this.subscribedEntryIds.delete(currentEntry.id);
249
- actionDataStore.delete(currentEntry.id);
250
- loaderDataStore.delete(currentEntry.id);
251
- };
252
- this.nav.currentEntry.addEventListener("dispose", handleDispose, { signal });
253
- this.subscribedEntryIds.add(currentEntry.id);
254
- };
255
- this.nav.addEventListener("currententrychange", handleCurrentEntryChange, { signal });
256
- }
257
- /**
258
- * フォームデータやクエリーパラメーターを送信します。
259
- *
260
- * @param args 送信内容と送信先を含む引数です。
261
- */
262
- submit(args) {
263
- if ("actionId" in args) {
264
- const { target, action, actionId: actionFunction, } = args;
265
- const form = createHtmlFormElementFormFormData(target);
266
- const actionId = actionFunction && actionIdRegistry.set(actionFunction);
267
- if (actionId !== undefined) {
268
- const input = document.createElement("input");
269
- input.type = "hidden";
270
- input.name = ACTION_ID_FORM_DATA_NAME;
271
- input.value = actionId;
272
- }
273
- form.method = "POST";
274
- form.action = action;
275
- form.enctype = "multipart/form-data";
276
- form.dataset["sosekisubmit"] = "";
277
- document.body.appendChild(form);
278
- form.submit();
279
- }
280
- else {
281
- const { target, action, history, } = args;
282
- const u = new URL("x://y" + action);
283
- u.search = target.toString();
284
- this.navigate({
285
- to: u.href.slice("x://y".length),
286
- history,
287
- });
288
- }
289
- }
290
- /**
291
- * 指定されたパスへナビゲートします。
292
- *
293
- * @param args 遷移先と遷移オプションを含む引数です。
294
- */
295
- navigate(args) {
296
- if ("delta" in args) {
297
- const currentEntry = expectHistoryEntry(this.nav.currentEntry);
298
- if (!currentEntry) {
299
- return;
300
- }
301
- const { delta } = args;
302
- const index = currentEntry.index + delta;
303
- const entry = this.nav.entries().find(e => e.index === index);
304
- if (!entry) {
305
- return;
306
- }
307
- this.nav.traverseTo(entry.key);
308
- }
309
- else {
310
- const { to, history, } = args;
311
- if (typeof to === "string") {
312
- this.nav.navigate(to, { history });
313
- }
314
- else {
315
- const { href } = location;
316
- const u = new URL(href);
317
- if (to.pathname !== undefined) {
318
- u.pathname = to.pathname;
319
- }
320
- if (to.search !== undefined) {
321
- u.search = to.search;
322
- }
323
- if (to.hash !== undefined) {
324
- u.hash = to.hash;
325
- }
326
- if (u.href !== href) {
327
- this.nav.navigate(u.href, { history });
328
- }
329
- }
330
- }
331
- }
332
- }
@@ -1,10 +0,0 @@
1
- import { type RouteContextValue } from "../contexts/route-context.js";
2
- /**
3
- * ルートに関するコンテキスト情報を取得するためのカスタムフックです。
4
- *
5
- * `RouteContext` から現在のコンテキスト値を抽出し、コンテキストが提供されていない場合にはエラーを投げます。
6
- *
7
- * @returns 現在のルートコンテキストの値を返します。
8
- */
9
- export default function useRouteContext(): RouteContextValue;
10
- //# sourceMappingURL=_use-route-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_use-route-context.d.ts","sourceRoot":"","sources":["../../src/hooks/_use-route-context.ts"],"names":[],"mappings":"AACA,OAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGpF;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,IAAI,iBAAiB,CAO3D"}
@@ -1,17 +0,0 @@
1
- import * as React from "react";
2
- import RouteContext from "../contexts/route-context.js";
3
- import { RouteContextMissingError } from "../core/errors.js";
4
- /**
5
- * ルートに関するコンテキスト情報を取得するためのカスタムフックです。
6
- *
7
- * `RouteContext` から現在のコンテキスト値を抽出し、コンテキストが提供されていない場合にはエラーを投げます。
8
- *
9
- * @returns 現在のルートコンテキストの値を返します。
10
- */
11
- export default function useRouteContext() {
12
- const routeContext = React.use(RouteContext);
13
- if (!routeContext) {
14
- throw new RouteContextMissingError();
15
- }
16
- return routeContext;
17
- }
@@ -1,10 +0,0 @@
1
- import { type RouterRef } from "../contexts/router-context.js";
2
- /**
3
- * ルーターのコンテキストから特定の状態を抽出して取得するためのカスタムフックです。
4
- *
5
- * @template TSlice 抽出される状態の型です。
6
- * @param selector ルーターの参照から必要なデータを抽出するためのセレクター関数です。
7
- * @returns セレクターによって抽出された状態を返します。
8
- */
9
- export default function useRouterContext<TSlice>(selector: (router: RouterRef["current"]) => TSlice): TSlice;
10
- //# sourceMappingURL=_use-router-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_use-router-context.d.ts","sourceRoot":"","sources":["../../src/hooks/_use-router-context.ts"],"names":[],"mappings":"AACA,OAAsB,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG9E;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAM,EAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,MAAM,GACjD,MAAM,CAWR"}
@@ -1,18 +0,0 @@
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
- * @template TSlice 抽出される状態の型です。
8
- * @param selector ルーターの参照から必要なデータを抽出するためのセレクター関数です。
9
- * @returns セレクターによって抽出された状態を返します。
10
- */
11
- export default function useRouterContext(selector) {
12
- const routerContext = React.use(RouterContext);
13
- if (!routerContext) {
14
- throw new RouterContextMissingError();
15
- }
16
- const { routerRef, subscribe, } = routerContext;
17
- return React.useSyncExternalStore(subscribe, () => selector(routerRef.current));
18
- }
@@ -1,23 +0,0 @@
1
- import type DeferredPromise from "../core/deferred-promise.js";
2
- import type RedirectResponse from "../core/redirect-response.js";
3
- import type { IAction } from "../core/route.types.js";
4
- /**
5
- * アクションの実行結果を推論するためのユーティリティー型です。
6
- *
7
- * 結果が `RedirectResponse` の場合は `undefined` を返し、それ以外の場合はそのままの型を返します。
8
- *
9
- * @template TResult 推論対象となる型です。
10
- */
11
- type $InferResult<TResult> = TResult extends RedirectResponse ? undefined : TResult;
12
- /**
13
- * 特定のアクションに関連付けられたデータ(実行結果)をルーターのストアから取得するカスタムフックです。
14
- *
15
- * 現在の履歴エントリーに対応するアクションデータを返します。
16
- *
17
- * @template TAction 対象となるアクションの型です。
18
- * @param action データを取得したいアクションの定義です。
19
- * @returns アクションの実行結果を含む `DeferredPromise` を返します。データが存在しない場合は `undefined` を返します。
20
- */
21
- export default function useActionData<TAction extends IAction>(action: TAction): DeferredPromise<$InferResult<Awaited<ReturnType<TAction>>>> | undefined;
22
- export {};
23
- //# sourceMappingURL=use-action-data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-action-data.d.ts","sourceRoot":"","sources":["../../src/hooks/use-action-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD;;;;;;GAMG;AAEH,KAAK,YAAY,CAAC,OAAO,IAAI,OAAO,SAAS,gBAAgB,GACzD,SAAS,GACT,OAAO,CAAC;AAEZ;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,SAAS,OAAO,EAC3D,MAAM,EAAE,OAAO,GACd,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAQzE"}
@@ -1,16 +0,0 @@
1
- import useRouterContext from "./_use-router-context.js";
2
- /**
3
- * 特定のアクションに関連付けられたデータ(実行結果)をルーターのストアから取得するカスタムフックです。
4
- *
5
- * 現在の履歴エントリーに対応するアクションデータを返します。
6
- *
7
- * @template TAction 対象となるアクションの型です。
8
- * @param action データを取得したいアクションの定義です。
9
- * @returns アクションの実行結果を含む `DeferredPromise` を返します。データが存在しない場合は `undefined` を返します。
10
- */
11
- export default function useActionData(action) {
12
- return useRouterContext((router) => {
13
- const { currentEntry, actionDataStore, } = router;
14
- return actionDataStore.get(currentEntry.id)?.get(action);
15
- });
16
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * フォームの送信先となるアクション URL を取得するためのカスタムフックです。
3
- *
4
- * @returns 現在のルートコンテキストから抽出された URL パスを返します。
5
- */
6
- export default function useFormAction(): string;
7
- //# sourceMappingURL=use-form-action.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-form-action.d.ts","sourceRoot":"","sources":["../../src/hooks/use-form-action.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,IAAI,MAAM,CAG9C"}
@@ -1,10 +0,0 @@
1
- import useRouteContext from "./_use-route-context.js";
2
- /**
3
- * フォームの送信先となるアクション URL を取得するためのカスタムフックです。
4
- *
5
- * @returns 現在のルートコンテキストから抽出された URL パスを返します。
6
- */
7
- export default function useFormAction() {
8
- const { urlPath } = useRouteContext();
9
- return urlPath;
10
- }
@@ -1,11 +0,0 @@
1
- import type DeferredPromise from "../core/deferred-promise.js";
2
- import type { ILoader } from "../core/route.types.js";
3
- /**
4
- * 指定されたローダーに関連付けられたデータを取得するためのカスタムフックです。
5
- *
6
- * @template TLoader 対象となるローダーの型です。
7
- * @param loader データを取得したいローダーの定義です。
8
- * @returns ローダーの実行結果を含む `DeferredPromise` を返します。
9
- */
10
- export default function useLoaderData<TLoader extends ILoader>(loader: TLoader): DeferredPromise<Awaited<ReturnType<TLoader>>>;
11
- //# sourceMappingURL=use-loader-data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-loader-data.d.ts","sourceRoot":"","sources":["../../src/hooks/use-loader-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,SAAS,OAAO,EAC3D,MAAM,EAAE,OAAO,GACd,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAa/C"}
@@ -1,19 +0,0 @@
1
- import { LoaderDataNotFoundError } from "../core/errors.js";
2
- import useRouterContext from "./_use-router-context.js";
3
- /**
4
- * 指定されたローダーに関連付けられたデータを取得するためのカスタムフックです。
5
- *
6
- * @template TLoader 対象となるローダーの型です。
7
- * @param loader データを取得したいローダーの定義です。
8
- * @returns ローダーの実行結果を含む `DeferredPromise` を返します。
9
- */
10
- export default function useLoaderData(loader) {
11
- const loaderData = useRouterContext((router) => {
12
- const { currentEntry, loaderDataStore, } = router;
13
- return loaderDataStore.get(currentEntry.id)?.get(loader);
14
- });
15
- if (!loaderData) {
16
- throw new LoaderDataNotFoundError(loader);
17
- }
18
- return loaderData;
19
- }
@@ -1,39 +0,0 @@
1
- import type { NavigateTo } from "../engines/engine.types.js";
2
- /**
3
- * 遷移(ナビゲート)を実行する際のオプション設定です。
4
- */
5
- export type NavigateOptions = {
6
- /**
7
- * 履歴を置き換えるかどうかを指定します。
8
- *
9
- * `true` の場合は現在のエントリーを置換し、`false` または未定義の場合は新しいエントリーを追加します。
10
- */
11
- readonly replace?: boolean | undefined;
12
- };
13
- /**
14
- * 指定されたパスへ遷移するための関数インターフェースです。
15
- */
16
- export interface INavigate {
17
- /**
18
- * ナビゲーションを実行します。
19
- *
20
- * @param to 遷移先です。
21
- * @param options 遷移時のオプション設定です。
22
- */
23
- (to: NavigateTo, options?: NavigateOptions | undefined): void;
24
- /**
25
- * ナビゲーションを実行します。
26
- *
27
- * @param delta 履歴スタックの相対位置です。
28
- */
29
- (delta: number): void;
30
- }
31
- /**
32
- * プログラムによる遷移(ナビゲート)を行うための関数を取得するカスタムフックです。
33
- *
34
- * コンポーネント内でこのフックを使用することで、ボタンのクリックイベントなどで任意のパスへ移動できるようになります。
35
- *
36
- * @returns 遷移を実行するための関数である `INavigate` を返します。
37
- */
38
- export default function useNavigate(): INavigate;
39
- //# sourceMappingURL=use-navigate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-navigate.d.ts","sourceRoot":"","sources":["../../src/hooks/use-navigate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAE9D;;;;OAIG;IACH,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,IAAI,SAAS,CAoB/C"}
@@ -1,26 +0,0 @@
1
- import * as React from "react";
2
- import useRouterContext from "./_use-router-context.js";
3
- /**
4
- * プログラムによる遷移(ナビゲート)を行うための関数を取得するカスタムフックです。
5
- *
6
- * コンポーネント内でこのフックを使用することで、ボタンのクリックイベントなどで任意のパスへ移動できるようになります。
7
- *
8
- * @returns 遷移を実行するための関数である `INavigate` を返します。
9
- */
10
- export default function useNavigate() {
11
- const call = useRouterContext(router => router.navigate);
12
- return React.useCallback(function navigate(...args) {
13
- if (typeof args[0] === "number") {
14
- const [delta] = args;
15
- return call({ delta });
16
- }
17
- const [to, options = {}] = args;
18
- const { replace = false } = options;
19
- return call({
20
- to,
21
- history: replace
22
- ? "replace"
23
- : "push",
24
- });
25
- }, [call]);
26
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-params.d.ts","sourceRoot":"","sources":["../../src/hooks/use-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,KAAK,UAAU,CAAC,KAAK,CAAC,CAEpF"}
@@ -1,7 +0,0 @@
1
- /**
2
- * 現在のルートにおける URL のパスネームを取得するためのカスタムフックです。
3
- *
4
- * @returns 現在のルートにおけるパスネームを表す文字列を返します。
5
- */
6
- export default function usePathname(): string;
7
- //# sourceMappingURL=use-pathname.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-pathname.d.ts","sourceRoot":"","sources":["../../src/hooks/use-pathname.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,IAAI,MAAM,CAE5C"}
@@ -1,9 +0,0 @@
1
- import useRouterContext from "./_use-router-context.js";
2
- /**
3
- * 現在のルートにおける URL のパスネームを取得するためのカスタムフックです。
4
- *
5
- * @returns 現在のルートにおけるパスネームを表す文字列を返します。
6
- */
7
- export default function usePathname() {
8
- return useRouterContext(router => router.currentEntry.url.pathname);
9
- }