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,18 @@
1
+ import * as v from "./_valibot.js";
2
+ import type { ReadonlyURL } from "./readonly-url.types.js";
3
+ /**
4
+ * 履歴エントリーで使用される URL 文字列を検証、正規化、およびブランド化するためのスキーマを作成する関数です。
5
+ *
6
+ * スキーマの構築処理は一度だけ実行され、以降はシングルトンインスタンスとしてキャッシュから再利用されます。
7
+ */
8
+ declare const HistoryEntryUrlSchema: () => import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").UrlAction<string, undefined>, import("@tai-kun/valibot-extra-lab").TransformAction<string, ReadonlyURL>, import("valibot").BrandAction<ReadonlyURL, "HistoryEntryUrl">]>;
9
+ /**
10
+ * `HistoryEntryUrlSchema` による検証と変換を行う前の、入力値に対応する型定義です。
11
+ */
12
+ export type HistoryEntryUrlLike = v.InferInput<ReturnType<typeof HistoryEntryUrlSchema>>;
13
+ /**
14
+ * `HistoryEntryUrlSchema` による検証、並び替え、および変換が正常に完了した、安全な出力値の型定義です。
15
+ */
16
+ export type HistoryEntryUrl = v.InferOutput<ReturnType<typeof HistoryEntryUrlSchema>>;
17
+ export default HistoryEntryUrlSchema;
18
+ //# sourceMappingURL=history-entry-url-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-entry-url-schema.d.ts","sourceRoot":"","sources":["../../../src/core/history-entry-url-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,wRAmBxB,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;AAEtF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import singleton from "./_singleton.js";
2
+ import * as v from "./_valibot.js";
3
+ import RoutePath from "./route-path.js";
4
+ /**
5
+ * 履歴エントリーで使用される URL 文字列を検証、正規化、およびブランド化するためのスキーマを作成する関数です。
6
+ *
7
+ * スキーマの構築処理は一度だけ実行され、以降はシングルトンインスタンスとしてキャッシュから再利用されます。
8
+ */
9
+ const HistoryEntryUrlSchema = () => singleton("HistoryEntryUrlSchema", () => v.pipe(v.string(), v.url(),
10
+ // 検証を通過した URL 文字列を、読み取り専用の ReadonlyURL オブジェクトへと構造変換および正規化します。
11
+ v.transform(function toNormalizedReadonlyURL(s) {
12
+ const u = new URL(s);
13
+ // 正規化します。
14
+ const { hash, search, pathname } = new RoutePath(u);
15
+ u.hash = hash;
16
+ u.search = search;
17
+ u.pathname = pathname;
18
+ return u;
19
+ }), v.brand("HistoryEntryUrl")));
20
+ export default HistoryEntryUrlSchema;
@@ -0,0 +1,28 @@
1
+ import { NinjaPromise } from "ninja-promise";
2
+ import type { HistoryEntryUrl } from "./history-entry-url-schema.js";
3
+ import type { MatchedRoute } from "./match-routes.js";
4
+ import type { LoaderFunction } from "./route.types.js";
5
+ /**
6
+ * 各ローダー関数を初期化する際に必要となるリクエスト情報の型定義です。
7
+ */
8
+ export type LoaderInitRequest = {
9
+ /**
10
+ * 読み込み対象となる現在の履歴エントリーの正規化済み URL オブジェクトです。
11
+ */
12
+ readonly url: HistoryEntryUrl;
13
+ /**
14
+ * 進行中の非同期データ取得処理を外部から中断するための中断シグナルです。
15
+ */
16
+ readonly signal: AbortSignal;
17
+ };
18
+ /**
19
+ * マッチしたすべてのルートに紐づくデータ取得用のローダー関数を一斉に起動し、その実行コンテキストと遅延非同期状態を管理するためのマップを作成して返す関数です。
20
+ *
21
+ * 階層的な並行データフェッチをサポートするために、各ローダーの実行結果を個別のプロミスとしてラップします。
22
+ *
23
+ * @param routes 現在の URL にマッチしたルート情報の配列です。各ルートから `loader` 関数と解析済みの `params` のみを抽出して利用します。
24
+ * @param request 各ローダー関数を初期化する際に必要となるリクエスト情報です。
25
+ * @returns 各ローダー関数をキーとし、その実行結果または進行状態を表す `NinjaPromise` を値としたマップです。
26
+ */
27
+ export default function initLoaders(routes: readonly Pick<MatchedRoute, "loader" | "params">[], request: LoaderInitRequest): Map<LoaderFunction, NinjaPromise<unknown>>;
28
+ //# sourceMappingURL=init-loaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-loaders.d.ts","sourceRoot":"","sources":["../../../src/core/init-loaders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,MAAM,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,EAAE,EAC1D,OAAO,EAAE,iBAAiB,GACzB,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAsB5C"}
@@ -0,0 +1,30 @@
1
+ import { NinjaPromise } from "ninja-promise";
2
+ import RouteRequest from "./route-request.js";
3
+ /**
4
+ * マッチしたすべてのルートに紐づくデータ取得用のローダー関数を一斉に起動し、その実行コンテキストと遅延非同期状態を管理するためのマップを作成して返す関数です。
5
+ *
6
+ * 階層的な並行データフェッチをサポートするために、各ローダーの実行結果を個別のプロミスとしてラップします。
7
+ *
8
+ * @param routes 現在の URL にマッチしたルート情報の配列です。各ルートから `loader` 関数と解析済みの `params` のみを抽出して利用します。
9
+ * @param request 各ローダー関数を初期化する際に必要となるリクエスト情報です。
10
+ * @returns 各ローダー関数をキーとし、その実行結果または進行状態を表す `NinjaPromise` を値としたマップです。
11
+ */
12
+ export default function initLoaders(routes, request) {
13
+ const dataMap = new Map();
14
+ // マッチしたすべてのローダーで共有可能なリクエストオブジェクトを 1 つだけ作成します。
15
+ // すべてのプロパティーが読み取り専用なので、ローダー間で共有できます。
16
+ const req = RouteRequest.new("GET", request.url, request.signal);
17
+ for (const { loader, params } of routes) {
18
+ if (typeof loader !== "function") {
19
+ continue;
20
+ }
21
+ const data = NinjaPromise.try(function executeLoader() {
22
+ return loader({
23
+ params,
24
+ request: req,
25
+ });
26
+ });
27
+ dataMap.set(loader, data);
28
+ }
29
+ return dataMap;
30
+ }
@@ -0,0 +1,28 @@
1
+ import type { ReadonlyURL } from "./readonly-url.types.js";
2
+ import type { Route, RoutePathParams } from "./route.types.js";
3
+ /**
4
+ * URL とのマッチングが確認されたルート情報を表す型定義です。
5
+ *
6
+ * 基本となる `Route` オブジェクトの構造を引き継ぎつつ、抽出された動的パラメーターと、それらを埋め戻して構築された具体的な URL パス文字列が追加されています。
7
+ */
8
+ export type MatchedRoute = Route & {
9
+ /**
10
+ * 現在の URL パスから抽出された、このルート固有の動的パスパラメーターです。
11
+ */
12
+ readonly params: RoutePathParams;
13
+ /**
14
+ * ルートの定義パターン(例: `/users/:id`)に抽出したパラメーター(例: `{ id: "42" }`)を流し込み、具現化されたリクエストパス(例: `/users/42`)です。
15
+ */
16
+ readonly urlPath: string;
17
+ };
18
+ /**
19
+ * 事前に詳細度順でソートされたルート定義の配列から、指定された URL に適合するすべてのルートを探索・抽出し、マッチした順に正規化して返す関数です。
20
+ *
21
+ * ネストされた階層的なルーティング構造において、親ルートから子ルートまで、現在の URL に部分一致または完全一致するルートの連鎖を構成する目的で使用します。
22
+ *
23
+ * @param routes あらかじめ正規化およびソートが完了しているルートオブジェクトの読み取り専用配列です。
24
+ * @param url マッチングの判定元となる、読み取り専用の URL オブジェクトです。
25
+ * @returns マッチしたルートが 1 つ以上存在する場合は、最低 1 つの要素を持つことが保証された `MatchedRoute` の読み取り専用タプル配列を返します。1 つもマッチしなかった場合は `null` を返します。
26
+ */
27
+ export default function matchRoutes(routes: readonly Route[], url: ReadonlyURL): readonly [MatchedRoute, ...MatchedRoute[]] | null;
28
+ //# sourceMappingURL=match-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-routes.d.ts","sourceRoot":"","sources":["../../../src/core/match-routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG;IACjC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,GAAG,EAAE,WAAW,GACf,SAAS,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC,GAAG,IAAI,CAuBnD"}
@@ -0,0 +1,31 @@
1
+ import { inject } from "regexparam";
2
+ import matchRoutePath from "./_match-route-path.js";
3
+ /**
4
+ * 事前に詳細度順でソートされたルート定義の配列から、指定された URL に適合するすべてのルートを探索・抽出し、マッチした順に正規化して返す関数です。
5
+ *
6
+ * ネストされた階層的なルーティング構造において、親ルートから子ルートまで、現在の URL に部分一致または完全一致するルートの連鎖を構成する目的で使用します。
7
+ *
8
+ * @param routes あらかじめ正規化およびソートが完了しているルートオブジェクトの読み取り専用配列です。
9
+ * @param url マッチングの判定元となる、読み取り専用の URL オブジェクトです。
10
+ * @returns マッチしたルートが 1 つ以上存在する場合は、最低 1 つの要素を持つことが保証された `MatchedRoute` の読み取り専用タプル配列を返します。1 つもマッチしなかった場合は `null` を返します。
11
+ */
12
+ export default function matchRoutes(routes, url) {
13
+ const matched = [];
14
+ // 登録されているすべてのルートを前方から順番に走査します。
15
+ // routes 配列は詳細度が高い順に並んでいることが前提となります。
16
+ for (const route of routes) {
17
+ const result = matchRoutePath(route, url);
18
+ if (!result) {
19
+ continue;
20
+ }
21
+ matched.push({
22
+ ...route,
23
+ params: result.params,
24
+ urlPath: inject(route.path, result.params),
25
+ });
26
+ }
27
+ if (matched.length > 0) {
28
+ return matched;
29
+ }
30
+ return null;
31
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * フォームデータを読み取り専用で操作するためのインターフェースです。
3
+ *
4
+ * データの追加、削除、更新といった変更処理を禁止し、データの参照や走査のみを許可する目的で使用します。
5
+ *
6
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData)
7
+ */
8
+ export interface ReadonlyFormData {
9
+ /**
10
+ * 指定された名前に一致する最初のフォームデータの値を取得します。
11
+ *
12
+ * @param name 検索するフォームコントロールのキー名です。
13
+ * @returns 一致したデータを返します。データは文字列または `File` オブジェクトのいずれかです。指定された名前のキーが存在しない場合は `null` を返します。
14
+ *
15
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/get)
16
+ */
17
+ get(name: string): FormDataEntryValue | null;
18
+ /**
19
+ * 指定された名前に一致するすべてのフォームデータの値を配列として取得します。
20
+ *
21
+ * @param name 検索するフォームコントロールのキー名です。
22
+ * @returns 一致したすべてのデータを含む配列です。キーが存在しない場合は空の配列を返します。
23
+ *
24
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/getAll)
25
+ */
26
+ getAll(name: string): FormDataEntryValue[];
27
+ /**
28
+ * 指定された名前を持つフォームデータが存在するかどうかを判定します。
29
+ *
30
+ * @param name 検証するフォームコントロールのキー名です。
31
+ * @returns 指定されたキーが存在する場合は `true` を、存在しない場合は `false` を返します。
32
+ *
33
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/has)
34
+ */
35
+ has(name: string): boolean;
36
+ /**
37
+ * コールバック関数を使用して、格納されているすべてのフォームデータに対して反復処理を実行します。
38
+ *
39
+ * @param callbackfn 各データに対して実行するコールバック関数です。
40
+ * @param thisArg コールバック関数を実行する際に `this` として使用する値です。
41
+ */
42
+ forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: ReadonlyFormData) => void, thisArg?: any): void;
43
+ /**
44
+ * 格納されているすべてのキーと値のペアを順に処理するための反復子(イテレーター)を返します。
45
+ *
46
+ * @returns キーと値のペアを要素とする `IterableIterator` オブジェクトです。
47
+ *
48
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/entries)
49
+ */
50
+ entries(): IterableIterator<[string, FormDataEntryValue]>;
51
+ /**
52
+ * 格納されているすべてのキー名を順に処理するための反復子を返します。
53
+ *
54
+ * @returns 各データのキー名を要素とする `IterableIterator` オブジェクトです。
55
+ *
56
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/keys)
57
+ */
58
+ keys(): IterableIterator<string>;
59
+ /**
60
+ * 格納されているすべての値のみを順に処理するための反復子を返します。
61
+ *
62
+ * @returns 各データの値(文字列または `File` オブジェクト)を要素とする `IterableIterator` オブジェクトです。
63
+ *
64
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/FormData/values)
65
+ */
66
+ values(): IterableIterator<FormDataEntryValue>;
67
+ /**
68
+ * オブジェクトの既定の反復子を定義します。 `for...of` 構文などで直接オブジェクトを走査することを可能にします。
69
+ *
70
+ * @returns `entries` メソッドと同様に、キーと値のペアを要素とする `IterableIterator` オブジェクトです。
71
+ */
72
+ [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
73
+ }
74
+ //# sourceMappingURL=readonly-form-data.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly-form-data.types.d.ts","sourceRoot":"","sources":["../../../src/core/readonly-form-data.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAE7C;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAAC;IAE3C;;;;;;;OAOG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B;;;;;OAKG;IACH,OAAO,CACL,UAAU,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,IAAI,EACtF,OAAO,CAAC,EAAE,GAAG,GACZ,IAAI,CAAC;IAER;;;;;;OAMG;IACH,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE1D;;;;;;OAMG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAE/C;;;;OAIG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CACrE"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * 読み取り専用の URL 操作を行うためのインターフェースです。
3
+ *
4
+ * 標準の `URL` オブジェクトから、プロパティーへの代入による破壊的な変更を禁止し、安全な参照を可能にします。
5
+ *
6
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL)
7
+ *
8
+ * [プロパティーの構成](https://nodejs.org/api/url.html#url-strings-and-url-objects)
9
+ */
10
+ export interface ReadonlyURL {
11
+ /**
12
+ * URL のハッシュ(シャープ記号 `#` を含むフラグメント識別子)を表します。
13
+ *
14
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/hash)
15
+ */
16
+ readonly hash: string;
17
+ /**
18
+ * URL のホスト情報(ホスト名とポート番号 `hostname:port`)を表します。
19
+ *
20
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/host)
21
+ */
22
+ readonly host: string;
23
+ /**
24
+ * URL のホスト名を表します。ポート番号は含みません。
25
+ *
26
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/hostname)
27
+ */
28
+ readonly hostname: string;
29
+ /**
30
+ * 完全にシリアライズされた URL 文字列全体を表します。
31
+ *
32
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/href)
33
+ */
34
+ readonly href: string;
35
+ /**
36
+ * URL のオリジン(プロトコル、ドメイン、およびポート番号)を表します。
37
+ *
38
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/origin)
39
+ */
40
+ readonly origin: string;
41
+ /**
42
+ * ドメインの前に指定されたパスワードを表します。
43
+ *
44
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/password)
45
+ */
46
+ readonly password: string;
47
+ /**
48
+ * 最初のスラッシュ `/` から始まる URL のパス部分を表します。
49
+ *
50
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/pathname)
51
+ */
52
+ readonly pathname: string;
53
+ /**
54
+ * URL のポート番号を表します。デフォルトのポート番号である場合は空文字列を返します。
55
+ *
56
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/port)
57
+ */
58
+ readonly port: string;
59
+ /**
60
+ * 末尾のコロン `:` を含む URL のプロトコルスキームを表します。
61
+ *
62
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/protocol)
63
+ */
64
+ readonly protocol: string;
65
+ /**
66
+ * 先頭のクエスチョンマーク `?` を含む URL のクエリー文字列を表します。
67
+ *
68
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/search)
69
+ */
70
+ readonly search: string;
71
+ /**
72
+ * クエリーパラメーターを操作するための読み取り専用オブジェクトを返します。
73
+ *
74
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/searchParams)
75
+ */
76
+ readonly searchParams: ReadonlyURLSearchParams;
77
+ /**
78
+ * ドメインの前に指定されたユーザー名を表します。
79
+ *
80
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/username)
81
+ */
82
+ readonly username: string;
83
+ /**
84
+ * `href` プロパティーと同じシリアライズされた URL 文字列を返します。
85
+ *
86
+ * @returns URL の文字列表現です。
87
+ *
88
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/toString)
89
+ */
90
+ toString(): string;
91
+ /**
92
+ * JSON シリアライズの際に呼び出され、`href` プロパティーと同じ文字列を返します。
93
+ *
94
+ * @returns URL の文字列表現です。
95
+ *
96
+ * [MDN リファレンス](https://developer.mozilla.org/docs/Web/API/URL/toJSON)
97
+ */
98
+ toJSON(): string;
99
+ }
100
+ /**
101
+ * 読み取り専用の URL 検索パラメーターを操作するためのインターフェースです。
102
+ *
103
+ * `URLSearchParams` から破壊的な変更を行うメソッドを排除し、参照専用として定義しています。
104
+ *
105
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams)
106
+ */
107
+ export interface ReadonlyURLSearchParams {
108
+ /**
109
+ * 検索パラメーターの総数です。
110
+ *
111
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/size)
112
+ */
113
+ readonly size: number;
114
+ /**
115
+ * 指定された名前に関連付けられた最初のパラメーターの値を返します。
116
+ *
117
+ * 該当する名前が存在しない場合は `null` を返します。
118
+ *
119
+ * @param name 検索するパラメーターの名前です。
120
+ * @returns パラメーターの値、または `null` です。
121
+ *
122
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get)
123
+ */
124
+ get(name: string): string | null;
125
+ /**
126
+ * 指定された名前に関連付けられたすべてのパラメーターの値を配列として返します。
127
+ *
128
+ * 該当する名前が存在しない場合は空の配列を返します。
129
+ *
130
+ * @param name 検索するパラメーターの名前です。
131
+ * @returns パラメーターの値を格納した文字列の配列です。
132
+ *
133
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/getAll)
134
+ */
135
+ getAll(name: string): string[];
136
+ /**
137
+ * 指定された名前(およびオプションで指定された値)に一致するパラメーターが存在するかどうかを判定します。
138
+ *
139
+ * @param name 判定するパラメーターの名前です。
140
+ * @param value 判定に含めるパラメーターの値です。
141
+ * @returns 一致するパラメーターが存在する場合は `true`、存在しない場合は `false` です。
142
+ *
143
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/has)
144
+ */
145
+ has(name: string, value?: string): boolean;
146
+ /**
147
+ * すべての検索パラメーターを URL エンコードされた文字列として返します。
148
+ *
149
+ * @returns URL エンコードされたパラメーター文字列です。
150
+ *
151
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/toString)
152
+ */
153
+ toString(): string;
154
+ /**
155
+ * 検索パラメーターに含まれるすべての要素に対して、指定されたコールバック関数を巡回して実行します。
156
+ *
157
+ * @param callbackfn 各要素に対して実行するコールバック関数です。
158
+ * @param thisArg コールバック関数の実行時に `this` として使用する値です。
159
+ *
160
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/forEach)
161
+ */
162
+ forEach(callbackfn: (value: string, key: string, parent: ReadonlyURLSearchParams) => void, thisArg?: any): void;
163
+ }
164
+ //# sourceMappingURL=readonly-url.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly-url.types.d.ts","sourceRoot":"","sources":["../../../src/core/readonly-url.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAE/C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM,CAAC;IAEnB;;;;;;OAMG;IACH,MAAM,IAAI,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE/B;;;;;;;;OAQG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3C;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,OAAO,CACL,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,KAAK,IAAI,EACjF,OAAO,CAAC,EAAE,GAAG,GACZ,IAAI,CAAC;CACT"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 他のクラスやオブジェクトとの混同を避けるための、このクラス固有の一意の識別シンボル(名目的型付け用)です。
3
+ */
4
+ declare const REDIRECT_RESPONSE_SYMBOL: unique symbol;
5
+ /**
6
+ * アプリケーション内におけるリダイレクト(画面遷移)の応答を表す不変のデータ構造クラスです。
7
+ *
8
+ * アクションやローダーの処理過程で遷移要求が発生した際、その移動先となるリダイレクトパスの各コンポーネント(パス名、クエリー、ハッシュフラグメント)を解析・保持します。
9
+ */
10
+ export default class RedirectResponse {
11
+ /**
12
+ * クラスの型としてのユニーク性を TypeScript 上で強制するためのダミーの読み取り専用プロパティーです。
13
+ *
14
+ * 構造が部分的に一致するだけの他のオブジェクトによる誤入力を防ぎます。
15
+ */
16
+ readonly [REDIRECT_RESPONSE_SYMBOL]: never;
17
+ /**
18
+ * 遷移先 URL のハッシュフラグメントです。
19
+ */
20
+ readonly hash: string;
21
+ /**
22
+ * 遷移先 URL のクエリー文字列です。
23
+ */
24
+ readonly search: string;
25
+ /**
26
+ * 遷移先 URL のドメイン部分を除いたパスです。
27
+ */
28
+ readonly pathname: string;
29
+ /**
30
+ * 指定された遷移先パス文字列を解析し、`RedirectResponse` クラスの新しいインスタンスを初期化します。
31
+ *
32
+ * @param destination リダイレクト先となる対象のパスです。
33
+ */
34
+ constructor(destination: string);
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=redirect-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-response.d.ts","sourceRoot":"","sources":["../../../src/core/redirect-response.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC;;;;OAIG;IACH,SAAgB,CAAC,wBAAwB,CAAC,EAAG,KAAK,CAAC;IAEnD;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;gBACgB,WAAW,EAAE,MAAM;CAMvC"}
@@ -0,0 +1,19 @@
1
+ import RoutePath from "./route-path.js";
2
+ /**
3
+ * アプリケーション内におけるリダイレクト(画面遷移)の応答を表す不変のデータ構造クラスです。
4
+ *
5
+ * アクションやローダーの処理過程で遷移要求が発生した際、その移動先となるリダイレクトパスの各コンポーネント(パス名、クエリー、ハッシュフラグメント)を解析・保持します。
6
+ */
7
+ export default class RedirectResponse {
8
+ /**
9
+ * 指定された遷移先パス文字列を解析し、`RedirectResponse` クラスの新しいインスタンスを初期化します。
10
+ *
11
+ * @param destination リダイレクト先となる対象のパスです。
12
+ */
13
+ constructor(destination) {
14
+ const { hash, search, pathname } = new RoutePath(destination);
15
+ this.hash = hash;
16
+ this.search = search;
17
+ this.pathname = pathname;
18
+ }
19
+ }
@@ -0,0 +1,57 @@
1
+ import type { ReadonlyURL } from "./readonly-url.types.js";
2
+ /**
3
+ * アプリケーション内のルーティングにおけるパスを安全に構築・解析・操作するためのクラスです。
4
+ *
5
+ * 内包するホストやプロトコルといった余分な情報を排除し、パス、クエリー、ハッシュのみを一貫した規則で管理します。
6
+ */
7
+ export default class RoutePath {
8
+ /**
9
+ * 与えられた文字列または URL オブジェクトから、正規化されたパス文字列を即座に生成する静的メソッドです。
10
+ *
11
+ * @param path 正規化の対象となるパス文字列、または `ReadonlyURL` の一部分を構成するオブジェクトです。
12
+ * @returns 冗長なスラッシュや末尾のスラッシュが取り除かれた、結合済みのパス文字列を返します。
13
+ */
14
+ static encode(path: string | Pick<ReadonlyURL, "pathname" | "search" | "hash">): string;
15
+ /**
16
+ * 内部でパスコンポーネントの解析と検証を委譲するために保持する、組み込みの `URL` インスタンスです。
17
+ *
18
+ * 基底となる仮想的なオリジンと結合して管理されます。
19
+ */
20
+ private url;
21
+ /**
22
+ * 新しい `RoutePath` インスタンスを初期化します。
23
+ *
24
+ * 引数として渡された入力値を解析し、スラッシュの重複排除および末尾のスラッシュ削除を自動的に行います。
25
+ *
26
+ * @param path 初期化に使用するパス文字列、または `ReadonlyURL` の一部のプロパティーを持つオブジェクトです。既定値は空文字列です。
27
+ */
28
+ constructor(path?: string | Pick<ReadonlyURL, "pathname" | "search" | "hash">);
29
+ /**
30
+ * 正規化されたパス部分の文字列です。
31
+ */
32
+ get pathname(): string;
33
+ set pathname(value: string);
34
+ /**
35
+ * 先頭に `?` を含むクエリー文字列です。
36
+ *
37
+ * 常にソートされます。
38
+ */
39
+ get search(): string;
40
+ set search(value: string);
41
+ /**
42
+ * 内部の `URL` インスタンスが保持する、クエリーパラメーターを操作するための `URLSearchParams` オブジェクトを取得します。
43
+ */
44
+ get searchParams(): URLSearchParams;
45
+ /**
46
+ * 先頭に `#` を含むハッシュ文字列を取得します。
47
+ */
48
+ get hash(): string;
49
+ set hash(value: string);
50
+ /**
51
+ * 現在保持しているすべてのコンポーネントを結合し、ルーティング用のパス文字列として出力します。
52
+ *
53
+ * @returns ソート済みのクエリーおよびハッシュを含んだ、正規化されたパス全体の文字列を返します。
54
+ */
55
+ toString(): string;
56
+ }
57
+ //# sourceMappingURL=route-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-path.d.ts","sourceRoot":"","sources":["../../../src/core/route-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B;;;;;OAKG;WACW,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,MAAM;IAI9F;;;;OAIG;IACH,OAAO,CAAC,GAAG,CAAM;IAEjB;;;;;;OAMG;gBACgB,IAAI,GAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAM;IAkBxF;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAQhC;IAED;;;;OAIG;IACH,IAAW,MAAM,IAAI,MAAM,CAG1B;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,MAAM,EAE9B;IAED;;OAEG;IACH,IAAW,YAAY,IAAI,eAAe,CAEzC;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAI1B"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 連続する複数のスラッシュを検出するための正規表現です。
3
+ */
4
+ const MULTI_SLASH = /\/\/+/gu;
5
+ /**
6
+ * アプリケーション内のルーティングにおけるパスを安全に構築・解析・操作するためのクラスです。
7
+ *
8
+ * 内包するホストやプロトコルといった余分な情報を排除し、パス、クエリー、ハッシュのみを一貫した規則で管理します。
9
+ */
10
+ export default class RoutePath {
11
+ /**
12
+ * 与えられた文字列または URL オブジェクトから、正規化されたパス文字列を即座に生成する静的メソッドです。
13
+ *
14
+ * @param path 正規化の対象となるパス文字列、または `ReadonlyURL` の一部分を構成するオブジェクトです。
15
+ * @returns 冗長なスラッシュや末尾のスラッシュが取り除かれた、結合済みのパス文字列を返します。
16
+ */
17
+ static encode(path) {
18
+ return new RoutePath(path).toString();
19
+ }
20
+ /**
21
+ * 新しい `RoutePath` インスタンスを初期化します。
22
+ *
23
+ * 引数として渡された入力値を解析し、スラッシュの重複排除および末尾のスラッシュ削除を自動的に行います。
24
+ *
25
+ * @param path 初期化に使用するパス文字列、または `ReadonlyURL` の一部のプロパティーを持つオブジェクトです。既定値は空文字列です。
26
+ */
27
+ constructor(path = "") {
28
+ if (typeof path === "string") {
29
+ path = ("/" + path).replace(MULTI_SLASH, "/");
30
+ }
31
+ else {
32
+ const { hash, search, pathname } = path;
33
+ path = ("/" + pathname).replace(MULTI_SLASH, "/") + search + hash;
34
+ }
35
+ // 組み込みの URL クラスによる厳密な解析機能を利用するため、仮想のプロトコルとホストを前置きして初期化します。
36
+ this.url = new URL("x://y" + path);
37
+ // ルートパス(/)単体である場合を除き、末尾に存在する不要なスラッシュを削除して一貫性を保ちます。
38
+ const { pathname } = this.url;
39
+ if (pathname !== "/" && pathname.endsWith("/")) {
40
+ this.url.pathname = pathname.substring(0, pathname.length - 1);
41
+ }
42
+ }
43
+ /**
44
+ * 正規化されたパス部分の文字列です。
45
+ */
46
+ get pathname() {
47
+ return this.url.pathname;
48
+ }
49
+ set pathname(value) {
50
+ this.url.pathname = value;
51
+ // ルートパス(/)単体である場合を除き、末尾に存在する不要なスラッシュを削除して一貫性を保ちます。
52
+ const pathname = ("/" + this.url.pathname).replace(MULTI_SLASH, "/");
53
+ if (pathname !== "/" && pathname.endsWith("/")) {
54
+ this.url.pathname = pathname.substring(0, pathname.length - 1);
55
+ }
56
+ }
57
+ /**
58
+ * 先頭に `?` を含むクエリー文字列です。
59
+ *
60
+ * 常にソートされます。
61
+ */
62
+ get search() {
63
+ this.url.searchParams.sort();
64
+ return this.url.search;
65
+ }
66
+ set search(value) {
67
+ this.url.search = value;
68
+ }
69
+ /**
70
+ * 内部の `URL` インスタンスが保持する、クエリーパラメーターを操作するための `URLSearchParams` オブジェクトを取得します。
71
+ */
72
+ get searchParams() {
73
+ return this.url.searchParams;
74
+ }
75
+ /**
76
+ * 先頭に `#` を含むハッシュ文字列を取得します。
77
+ */
78
+ get hash() {
79
+ return this.url.hash;
80
+ }
81
+ set hash(value) {
82
+ this.url.hash = value;
83
+ }
84
+ /**
85
+ * 現在保持しているすべてのコンポーネントを結合し、ルーティング用のパス文字列として出力します。
86
+ *
87
+ * @returns ソート済みのクエリーおよびハッシュを含んだ、正規化されたパス全体の文字列を返します。
88
+ */
89
+ toString() {
90
+ const { hash, search, pathname } = this;
91
+ return pathname + search + hash;
92
+ }
93
+ }