soseki 0.0.10 → 0.0.12

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 (43) hide show
  1. package/dist/src/core/_process-routes.d.ts.map +1 -1
  2. package/dist/src/core/_process-routes.js +8 -10
  3. package/dist/src/core/_regexparam.d.ts +37 -0
  4. package/dist/src/core/_regexparam.d.ts.map +1 -0
  5. package/dist/src/core/_regexparam.js +1 -0
  6. package/dist/src/core/errors.d.ts +29 -0
  7. package/dist/src/core/errors.d.ts.map +1 -1
  8. package/dist/src/core/errors.js +20 -1
  9. package/dist/src/core/match-routes.d.ts +2 -2
  10. package/dist/src/core/match-routes.d.ts.map +1 -1
  11. package/dist/src/core/match-routes.js +4 -6
  12. package/dist/src/core/route-pattern-utils.d.ts +163 -0
  13. package/dist/src/core/route-pattern-utils.d.ts.map +1 -0
  14. package/dist/src/core/route-pattern-utils.js +222 -0
  15. package/dist/src/core/route.types.d.ts +27 -65
  16. package/dist/src/core/route.types.d.ts.map +1 -1
  17. package/dist/src/core/start-action.d.ts.map +1 -1
  18. package/dist/src/engines/navigation-api-engine.d.ts.map +1 -1
  19. package/dist/src/engines/navigation-api-engine.js +2 -1
  20. package/dist/src/hooks/use-params.d.ts +2 -2
  21. package/dist/src/hooks/use-params.d.ts.map +1 -1
  22. package/dist/src/soseki.d.ts +2 -2
  23. package/dist/src/soseki.d.ts.map +1 -1
  24. package/dist/src/soseki.js +1 -1
  25. package/package.json +1 -1
  26. package/src/core/_process-routes.ts +7 -12
  27. package/src/core/_regexparam.ts +67 -0
  28. package/src/core/errors.ts +52 -0
  29. package/src/core/match-routes.ts +6 -9
  30. package/src/core/route-pattern-utils.ts +327 -0
  31. package/src/core/route.types.ts +29 -98
  32. package/src/core/start-action.ts +2 -2
  33. package/src/engines/navigation-api-engine.ts +2 -1
  34. package/src/hooks/use-params.ts +3 -3
  35. package/src/soseki.ts +3 -3
  36. package/dist/src/core/_match-route-path.d.ts +0 -22
  37. package/dist/src/core/_match-route-path.d.ts.map +0 -1
  38. package/dist/src/core/_match-route-path.js +0 -26
  39. package/dist/src/core/match-route-path.d.ts +0 -46
  40. package/dist/src/core/match-route-path.d.ts.map +0 -1
  41. package/dist/src/core/match-route-path.js +0 -16
  42. package/src/core/_match-route-path.ts +0 -45
  43. package/src/core/match-route-path.ts +0 -78
@@ -1,59 +1,26 @@
1
1
  import type * as React from "react";
2
+ import type { RouteParams as $RouteParams } from "./_regexparam.js";
2
3
  import type { ReadonlyURL } from "./readonly-url.types.js";
4
+ import type RoutePatternUtils from "./route-pattern-utils.js";
3
5
  import type { RouteGetRequest, RoutePostRequest } from "./route-request.js";
4
- /**
5
- * 個別のパスパラメーターを解析し、適切なプロパティーの型オブジェクトへと変換する内部ユーティリティー型です。
6
- *
7
- * パラメーターの末尾の形状を条件付き型により詳細に選別します。
8
- *
9
- * @template Param 解析対象となる単一のパラメーター文字列です。
10
- */
11
- type ParamRecord<Param extends string> = Param extends `${infer Name}?` ? {
12
- [K in Name]?: string;
13
- } : Param extends `${infer Name}.${string}` ? {
14
- [K in Name]: string;
15
- } : {
16
- [K in Param]: string;
17
- };
18
- /**
19
- * パス文字列のセグメントから動的なパラメーターやワイルドカードを再帰的に抽出し、型安全なオブジェクト構造を構築するユーティリティー型です。
20
- *
21
- * 開発者が指定した文字列リテラル型の形状に基づいて、ルーティングに必要なパラメーターの型を静的に決定します。
22
- *
23
- * このユーティリティー型は、ライブラリー `regexparam` の改良版です。
24
- *
25
- * @template T 解析対象となる URL パス全体の文字列リテラル型です。
26
- * @see https://github.com/lukeed/regexparam
27
- * @see https://github.com/lukeed/regexparam/issues/31
28
- * @see https://github.com/lukeed/regexparam/pull/33
29
- */
30
- type RouteParams<T extends string> = string extends T ? {
31
- [K in string]?: string;
32
- } : T extends `${infer Prev}/*/${infer Rest}` ? RouteParams<Prev> & {
33
- wild: string;
34
- } & RouteParams<`/${Rest}`> : T extends `:${infer Rest}` ? RouteParams<`/:${Rest}`> : T extends `${string}:${infer Param}/${infer Rest}` ? ParamRecord<Param> & RouteParams<`/${Rest}`> : T extends `${string}/:${infer Param}` ? ParamRecord<Param> : T extends `${string}/*?` ? {
35
- "*"?: string;
36
- } : T extends `${string}/*` ? {
37
- "*": string;
38
- } : {};
39
6
  /**
40
7
  * 文字列リテラルとして定義されたパスの形状から、含まれるパスパラメーターを解析し、静的に型付けされたオブジェクトとして抽出する型定義です。
41
8
  *
42
- * @template TRoutePath パラメーター抽出の対象となるパス文字列リテラル型です。
9
+ * @template TRoutePattern パラメーター抽出の対象となるパス文字列リテラル型です。
43
10
  */
44
- export type RoutePathParams<TRoutePath extends string = string> = Readonly<RouteParams<TRoutePath>>;
11
+ export type RouteParams<TRoutePattern extends string = string> = Readonly<$RouteParams<TRoutePattern>>;
45
12
  /**
46
13
  * データ更新などのアクション処理を実行する際に、該当する関数へ渡される引数の型定義です。
47
14
  *
48
15
  * 解析済みのパスパラメーターと、HTTP の POST メソッドを抽象化したリクエストオブジェクトを含みます。
49
16
  *
50
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
17
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
51
18
  */
52
- export type ActionFunctionArgs<TRoutePath extends string = string> = {
19
+ export type ActionFunctionArgs<TRoutePattern extends string = string> = {
53
20
  /**
54
21
  * 現在の URL パスから抽出されたパラメーターオブジェクトです。
55
22
  */
56
- params: RoutePathParams<TRoutePath>;
23
+ params: RouteParams<TRoutePattern>;
57
24
  /**
58
25
  * フォームデータなどを内包する、HTTP の POST メソッドに特化したルーティングリクエストオブジェクトです。
59
26
  */
@@ -62,20 +29,20 @@ export type ActionFunctionArgs<TRoutePath extends string = string> = {
62
29
  /**
63
30
  * データの登録、更新、削除といった副作用を伴うアクション処理を定義するための関数インターフェースです。
64
31
  *
65
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
32
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
66
33
  * @template TData アクション関数が返す戻り値の型定義です。既定値は `unknown` です。
67
34
  */
68
- export interface ActionFunction<TRoutePath extends string = string, TData = unknown> {
69
- (args: ActionFunctionArgs<TRoutePath>): TData;
35
+ export interface ActionFunction<TRoutePattern extends string = string, TData = unknown> {
36
+ (args: ActionFunctionArgs<TRoutePattern>): TData;
70
37
  }
71
38
  /**
72
39
  * ページ遷移やデータ更新が発生した際、現在の画面データを再読み込みすべきかどうかを判定する関数へ渡される引数の型定義です。
73
40
  *
74
41
  * アクションを実行した契機となる HTTP メソッドの種類(GET / POST)に応じて、含まれるコンテキスト情報が分岐します。
75
42
  *
76
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
43
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
77
44
  */
78
- export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
45
+ export type ShouldReloadFunctionArgs<TRoutePattern extends string = string> = {
79
46
  /**
80
47
  * 再読み込みを引き起こした HTTP メソッドの種別です。
81
48
  */
@@ -87,7 +54,7 @@ export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
87
54
  /**
88
55
  * 現在の URL から抽出されたパスパラメーターです。
89
56
  */
90
- currentParams: RoutePathParams<TRoutePath>;
57
+ currentParams: RouteParams<TRoutePattern>;
91
58
  /**
92
59
  * POST リクエストが発生する直前の読み取り専用 URL オブジェクトです。
93
60
  */
@@ -95,7 +62,7 @@ export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
95
62
  /**
96
63
  * POST リクエストが発生する直前の URL から抽出されたパスパラメーターです。
97
64
  */
98
- prevParams: RoutePathParams;
65
+ prevParams: RouteParams;
99
66
  /**
100
67
  * システムが内部ロジックに基づいて判断した、再読み込み実行の既定の判定フラグです。
101
68
  */
@@ -112,7 +79,7 @@ export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
112
79
  /**
113
80
  * 現在の URL から抽出されたパスパラメーターです。
114
81
  */
115
- currentParams: RoutePathParams<TRoutePath>;
82
+ currentParams: RouteParams<TRoutePattern>;
116
83
  /**
117
84
  * POST リクエストが発生する直前の読み取り専用 URL オブジェクトです。
118
85
  */
@@ -120,7 +87,7 @@ export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
120
87
  /**
121
88
  * POST リクエストが発生する直前の URL から抽出されたパスパラメーターです。
122
89
  */
123
- prevParams: RoutePathParams;
90
+ prevParams: RouteParams;
124
91
  /**
125
92
  * POST リクエストと共に送信された標準のフォームデータオブジェクトです。
126
93
  */
@@ -137,24 +104,24 @@ export type ShouldReloadFunctionArgs<TRoutePath extends string = string> = {
137
104
  /**
138
105
  * ルートデータの再読み込みが不必要な場合に、余分な通信や再取得処理を抑制するための判定関数インターフェースです。
139
106
  *
140
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
107
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
141
108
  * @returns データを再読み込みする場合は `true`、スキップする場合は `false` を返します。
142
109
  */
143
- export interface ShouldReloadFunction<TRoutePath extends string = string> {
144
- (args: ShouldReloadFunctionArgs<TRoutePath>): boolean;
110
+ export interface ShouldReloadFunction<TRoutePattern extends string = string> {
111
+ (args: ShouldReloadFunctionArgs<TRoutePattern>): boolean;
145
112
  }
146
113
  /**
147
114
  * 画面の描画に必要なデータを取得(ロード)する際に、該当する関数へ渡される引数の型定義です。
148
115
  *
149
116
  * 解析済みのパスパラメーターと、HTTP の GET メソッドを抽象化したリクエストオブジェクトを含みます。
150
117
  *
151
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
118
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
152
119
  */
153
- export type LoaderFunctionArgs<TRoutePath extends string = string> = {
120
+ export type LoaderFunctionArgs<TRoutePattern extends string = string> = {
154
121
  /**
155
122
  * 現在の URL パスから抽出されたパラメーターオブジェクトです。
156
123
  */
157
- params: RoutePathParams<TRoutePath>;
124
+ params: RouteParams<TRoutePattern>;
158
125
  /**
159
126
  * HTTP の GET メソッドに特化したルーティングリクエストオブジェクトです。
160
127
  */
@@ -163,11 +130,11 @@ export type LoaderFunctionArgs<TRoutePath extends string = string> = {
163
130
  /**
164
131
  * 画面の初期描画時や遷移時にデータをオンデマンドで取得するための関数インターフェースです。
165
132
  *
166
- * @template TRoutePath 対象となるルートのパス文字列リテラル型です。
133
+ * @template TRoutePattern 対象となるルートのパス文字列リテラル型です。
167
134
  * @template TData ローダー関数が返す戻り値の型定義です。既定値は `unknown` です。
168
135
  */
169
- export interface LoaderFunction<TRoutePath extends string = string, TData = unknown> {
170
- (args: LoaderFunctionArgs<TRoutePath>): TData;
136
+ export interface LoaderFunction<TRoutePattern extends string = string, TData = unknown> {
137
+ (args: LoaderFunctionArgs<TRoutePattern>): TData;
171
138
  }
172
139
  /**
173
140
  * アプリケーションのルーティング設定を定義するためのオブジェクトの型定義です。
@@ -268,13 +235,9 @@ export type Route = {
268
235
  */
269
236
  readonly index: boolean;
270
237
  /**
271
- * 実際の URL パスがこのルートに合致するかを検証するために動的に生成された正規表現オブジェクトです。
272
- */
273
- readonly pathPattern: RegExp;
274
- /**
275
- * パスパターン内に含まれるパラメーターのキー名を、順番通りに格納した読み取り専用の配列です。
238
+ * ルートパターンの解析などを行うユーティリティーです。
276
239
  */
277
- readonly paramKeys: readonly string[];
240
+ readonly utils: RoutePatternUtils;
278
241
  /**
279
242
  * データ更新用のアクション関数です。未定義の場合は `undefined` となります。
280
243
  */
@@ -292,5 +255,4 @@ export type Route = {
292
255
  */
293
256
  readonly component: React.ComponentType<{}> | undefined;
294
257
  };
295
- export {};
296
258
  //# sourceMappingURL=route.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start-action.d.ts","sourceRoot":"","sources":["../../../src/core/start-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;QAClB,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,MAAM,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE,EACtE,OAAO,EAAE,kBAAkB,GAC1B,aAAa,GAAG,IAAI,CAmGtB"}
1
+ {"version":3,"file":"start-action.d.ts","sourceRoot":"","sources":["../../../src/core/start-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;QAClB,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,MAAM,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE,EACtE,OAAO,EAAE,kBAAkB,GAC1B,aAAa,GAAG,IAAI,CAmGtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-api-engine.d.ts","sourceRoot":"","sources":["../../../src/engines/navigation-api-engine.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,OAAO;IACzD;;OAEG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAsB;IAEhD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAyB;IAEnD;;;;OAIG;;IAwBH;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU;IA2BhD;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW;IA8RnD;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI;IAkCtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,GAAG,IAAI;CAgE3C"}
1
+ {"version":3,"file":"navigation-api-engine.d.ts","sourceRoot":"","sources":["../../../src/engines/navigation-api-engine.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,OAAO;IACzD;;OAEG;IACH,OAAO,CAAC,UAAU,CAAa;IAE/B;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAsB;IAEhD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAyB;IAEnD;;;;OAIG;;IAwBH;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU;IA2BhD;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW;IA+RnD;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI;IAkCtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,GAAG,IAAI;CAgE3C"}
@@ -83,7 +83,8 @@ export default class NavigationApiEngine {
83
83
  if (!event.isTrusted ||
84
84
  !event.canIntercept ||
85
85
  event.hashChange ||
86
- event.downloadRequest !== null) {
86
+ event.downloadRequest !== null ||
87
+ event.navigationType === "reload") {
87
88
  return;
88
89
  }
89
90
  const currentEntry = expectHistoryEntry(this.navigation.currentEntry);
@@ -1,8 +1,8 @@
1
- import type { RoutePathParams } from "../core/route.types.js";
1
+ import type { RouteParams } 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>(): RoutePathParams<TPath>;
7
+ export default function useParams<TPath extends string = string>(): RouteParams<TPath>;
8
8
  //# sourceMappingURL=use-params.d.ts.map
@@ -1 +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
+ {"version":3,"file":"use-params.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC,KAAK,CAAC,CAErF"}
@@ -5,12 +5,12 @@ export { default as Outlet } from "./components/outlet.jsx";
5
5
  /**************************************************************************************************/
6
6
  export type { Issue, UnreachableErrorArgs, UnreachableErrorMeta, LoaderConditionErrorArgs, LoaderConditionErrorMeta, LoaderDataNotFoundErrorArgs, LoaderDataNotFoundErrorMeta, UnexpectedValidationErrorArgs, UnexpectedValidationErrorMeta, } from "./core/errors.js";
7
7
  export { ErrorBase, setErrorMessage, UnreachableError, ValidationErrorBase, LoaderConditionError, LoaderDataNotFoundError, RouteContextMissingError, RouterContextMissingError, UnexpectedValidationError, NavigationApiNotSupportedError, } from "./core/errors.js";
8
- export type * from "./core/match-route-path.js";
9
- export { default as matchRoutePath } from "./core/match-route-path.js";
10
8
  export type * from "./core/readonly-form-data.types.js";
11
9
  export type * from "./core/readonly-url.types.js";
12
10
  export type * from "./core/redirect-response.js";
13
11
  export { default as RedirectResponse } from "./core/redirect-response.js";
12
+ export type * from "./core/route-pattern-utils.js";
13
+ export { default as RoutePatternUtils } from "./core/route-pattern-utils.js";
14
14
  export type * from "./core/route-request.js";
15
15
  export { default as RouteRequest } from "./core/route-request.js";
16
16
  export type * from "./core/route.types.js";
@@ -1 +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,4BAA4B,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEvE,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,2BAA2B,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpE,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"}
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,+BAA+B,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,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,2BAA2B,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpE,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"}
@@ -1,8 +1,8 @@
1
1
  export { default as BrowserRouter } from "./components/browser-router.jsx";
2
2
  export { default as Outlet } from "./components/outlet.jsx";
3
3
  export { ErrorBase, setErrorMessage, UnreachableError, ValidationErrorBase, LoaderConditionError, LoaderDataNotFoundError, RouteContextMissingError, RouterContextMissingError, UnexpectedValidationError, NavigationApiNotSupportedError, } from "./core/errors.js";
4
- export { default as matchRoutePath } from "./core/match-route-path.js";
5
4
  export { default as RedirectResponse } from "./core/redirect-response.js";
5
+ export { default as RoutePatternUtils } from "./core/route-pattern-utils.js";
6
6
  export { default as RouteRequest } from "./core/route-request.js";
7
7
  export { default as useActionData } from "./hooks/use-action-data.js";
8
8
  export { default as useFormAction } from "./hooks/use-form-action.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "soseki",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/tai-kun/soseki.js",
6
6
  "license": "MIT",
@@ -1,7 +1,5 @@
1
- import { parse } from "regexparam";
2
-
3
1
  import compareRoutePaths from "./_compare-route-paths.js";
4
- import RoutePath from "./route-path.js";
2
+ import RoutePatternUtils from "./route-pattern-utils.js";
5
3
  import type { Route, RouteDefinition } from "./route.types.js";
6
4
 
7
5
  /**
@@ -19,18 +17,17 @@ export default function processRoutes(routes: readonly RouteDefinition[]): reado
19
17
  return (
20
18
  routes
21
19
  .map((route) => {
22
- const path = RoutePath.encode(route.path);
23
20
  const index = route.index === true;
24
- const { keys: paramKeys, pattern: pathPattern } = parse(
25
- path,
26
- // インデックスルートでないとき loose オプションを `true` にして子ルートに対してもマッチするようにします。
21
+ const utils = new RoutePatternUtils(route.path, {
22
+ // インデックスルートでないとき allowChild オプションを `true` にして子ルートに対してもマッチするようにします。
27
23
  // これにより、前方一致による階層的なマッチングが有効になります。
28
- !index,
29
- );
24
+ allowChild: !index,
25
+ });
30
26
 
31
27
  return {
32
- path,
28
+ path: utils.route,
33
29
  index,
30
+ utils,
34
31
  action: route.action,
35
32
  loader: route.loader,
36
33
  // オブジェクト形式またはモジュール形式の双方を安全に評価し、描画対象となる React コンポーネントを確定します。
@@ -42,8 +39,6 @@ export default function processRoutes(routes: readonly RouteDefinition[]): reado
42
39
  typeof route.default === "function"
43
40
  ? route.default
44
41
  : undefined,
45
- paramKeys,
46
- pathPattern,
47
42
  shouldReload: route.shouldReload || ((args) => args.defaultShouldReload),
48
43
  };
49
44
  })
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 個別のパスパラメーターを解析し、適切なプロパティーの型オブジェクトへと変換する内部ユーティリティー型です。
3
+ *
4
+ * パラメーターの末尾の形状を条件付き型により詳細に選別します。
5
+ *
6
+ * @template Param 解析対象となる単一のパラメーター文字列です。
7
+ */
8
+ // oxfmt-ignore
9
+ type ParamRecord<Param extends string> =
10
+ // パラメーター末尾に「?」がある場合、オプショナルなプロパティー型に変換します
11
+ Param extends `${infer Name}?`
12
+ ? { [K in Name]?: string }
13
+
14
+ // パラメーターに拡張子が含まれている場合、拡張子を除いた名前を必須のプロパティー型に変換します。
15
+ : Param extends `${infer Name}.${string}`
16
+ ? { [K in Name]: string }
17
+
18
+ // 上記のいずれのパターンにも該当しない場合は、パラメーター名をそのまま必須のプロパティー型に変換します。
19
+ : { [K in Param]: string };
20
+
21
+ /**
22
+ * パス文字列のセグメントから動的なパラメーターやワイルドカードを再帰的に抽出し、型安全なオブジェクト構造を構築するユーティリティー型です。
23
+ *
24
+ * 開発者が指定した文字列リテラル型の形状に基づいて、ルーティングに必要なパラメーターの型を静的に決定します。
25
+ *
26
+ * このユーティリティー型は、ライブラリー `regexparam` の改良版です。
27
+ *
28
+ * @template T 解析対象となる URL パス全体の文字列リテラル型です。
29
+ * @see https://github.com/lukeed/regexparam
30
+ * @see https://github.com/lukeed/regexparam/issues/31
31
+ * @see https://github.com/lukeed/regexparam/pull/33
32
+ */
33
+ // oxfmt-ignore
34
+ export type RouteParams<T extends string> =
35
+ // 与えられた型が具体的なリテラルでなく文字列型である場合は、汎用的なレコード型へとフォールバックします。
36
+ string extends T
37
+ ? { [K in string]?: string }
38
+
39
+ // パスの中間にワイルドカードが存在する場合、前後のパラメーターに加えて、必須のワイルドカードプロパティーを結合します。
40
+ : T extends `${infer Prev}/*/${infer Rest}`
41
+ ? & RouteParams<Prev>
42
+ & { wild: string }
43
+ & RouteParams<`/${Rest}`>
44
+
45
+ // パスの先頭がコロンで開始されている場合、先頭にスラッシュ(/)を補正して再帰的に再評価します。
46
+ : T extends `:${infer Rest}`
47
+ ? RouteParams<`/:${Rest}`>
48
+
49
+ // パスの中間にコロンで始まるパラメーターが含まれている場合、そのセグメントの型情報を抽出し、スラッシュ以降の残りのパスの解析結果と交差型で結合します。
50
+ : T extends `${string}:${infer Param}/${infer Rest}`
51
+ ? & ParamRecord<Param>
52
+ & RouteParams<`/${Rest}`>
53
+
54
+ // パスの末尾がコロンで始まるパラメーターで終了している場合、そのセグメントの型情報を判定して抽出を完了します。
55
+ : T extends `${string}/:${infer Param}`
56
+ ? ParamRecord<Param>
57
+
58
+ // パスの末尾がオプショナルワイルドカードで終了している場合、キー名を「"*"」としたオプショナルなプロパティー型を返します。
59
+ : T extends `${string}/*?`
60
+ ? { "*"?: string }
61
+
62
+ // パスの末尾が通常のワイルドカードで終了している場合、キー名を「"*"」とした必須のプロパティー型を返します。
63
+ : T extends `${string}/*`
64
+ ? { "*": string }
65
+
66
+ // 抽出可能なパラメーターやワイルドカードが一切検出されなかった場合は、空のオブジェクト型を返します。
67
+ : {};
@@ -333,3 +333,55 @@ export class LoaderDataNotFoundError extends ErrorBase<LoaderDataNotFoundErrorMe
333
333
  : "ローダーが未定義です。",
334
334
  "ja",
335
335
  );
336
+
337
+ /**************************************************************************************************/
338
+
339
+ /**
340
+ * ローダーデータの紛失を通知する際に付与されるメタデータの型定義です。
341
+ */
342
+ export type RoutePatternMismatchErrorMeta = {
343
+ /**
344
+ * ルートパターン文字列です。
345
+ */
346
+ readonly route: string;
347
+
348
+ /**
349
+ * 検証対象のパス文字列です。
350
+ */
351
+ readonly target: string;
352
+ };
353
+
354
+ /**
355
+ * `RoutePatternMismatchError` のインスタンスを初期化する際に渡される引数オブジェクトの型定義です。
356
+ */
357
+ export type RoutePatternMismatchErrorArgs = ErrorOptions & RoutePatternMismatchErrorMeta;
358
+
359
+ /**
360
+ * 対象のパスまたは URL が、指定されたルートパターンに一致しない場合に投げるエラーです。
361
+ */
362
+ export class RoutePatternMismatchError extends ErrorBase<RoutePatternMismatchErrorMeta> {
363
+ static {
364
+ this.prototype.name = "SosekiRoutePatternMismatchError";
365
+ }
366
+
367
+ /**
368
+ * `RoutePatternMismatchError` クラスの新しいインスタンスを初期化します。
369
+ *
370
+ * @param args 引数オブジェクトです。
371
+ */
372
+ public constructor(args: RoutePatternMismatchErrorArgs) {
373
+ const { route, target, ...options } = args;
374
+ super(
375
+ { route, target },
376
+ ({ route, target }) =>
377
+ `The target path "${target}" does not match the route pattern "${route}"`,
378
+ options,
379
+ );
380
+ }
381
+ }
382
+
383
+ /*#__PURE__*/ setErrorMessage(
384
+ RoutePatternMismatchError,
385
+ ({ route, target }) => `対象パス "${target}" がパターン "${route}" と一致しません`,
386
+ "ja",
387
+ );
@@ -1,8 +1,5 @@
1
- import { inject } from "regexparam";
2
-
3
- import matchRoutePath from "./_match-route-path.js";
4
1
  import type { ReadonlyURL } from "./readonly-url.types.js";
5
- import type { Route, RoutePathParams } from "./route.types.js";
2
+ import type { Route, RouteParams } from "./route.types.js";
6
3
 
7
4
  /**
8
5
  * URL とのマッチングが確認されたルート情報を表す型定義です。
@@ -13,7 +10,7 @@ export type MatchedRoute = Route & {
13
10
  /**
14
11
  * 現在の URL パスから抽出された、このルート固有の動的パスパラメーターです。
15
12
  */
16
- readonly params: RoutePathParams;
13
+ readonly params: RouteParams;
17
14
 
18
15
  /**
19
16
  * ルートの定義パターン(例: `/users/:id`)に抽出したパラメーター(例: `{ id: "42" }`)を流し込み、具現化されたリクエストパス(例: `/users/42`)です。
@@ -39,15 +36,15 @@ export default function matchRoutes(
39
36
  // 登録されているすべてのルートを前方から順番に走査します。
40
37
  // routes 配列は詳細度が高い順に並んでいることが前提となります。
41
38
  for (const route of routes) {
42
- const result = matchRoutePath(route, url);
43
- if (!result) {
39
+ const params = route.utils.parseSafe(url);
40
+ if (params === null) {
44
41
  continue;
45
42
  }
46
43
 
47
44
  matched.push({
48
45
  ...route,
49
- params: result.params,
50
- urlPath: inject(route.path, result.params),
46
+ params,
47
+ urlPath: route.utils.inject(params),
51
48
  });
52
49
  }
53
50