@wcstack/router 1.31.0 → 1.32.0
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.
- package/README.ja.md +155 -11
- package/README.md +161 -11
- package/dist/auto.min.js +1 -1
- package/dist/auto.min.js.map +1 -1
- package/dist/index.d.ts +172 -2
- package/dist/index.esm.js +1411 -124
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -121,6 +121,8 @@ interface IRoute extends IRouteChildContainer {
|
|
|
121
121
|
readonly absoluteSegmentCount: number;
|
|
122
122
|
readonly segmentInfos: ISegmentInfo[];
|
|
123
123
|
readonly absoluteSegmentInfos: ISegmentInfo[];
|
|
124
|
+
/** guard 属性の有無。SSR の guard バリア判定に使う(docs/ssr-router-design.md §2-4) */
|
|
125
|
+
readonly hasGuard: boolean;
|
|
124
126
|
guardHandler: GuardHandler;
|
|
125
127
|
shouldChange(newParams: Record<string, string>): boolean;
|
|
126
128
|
guardCheck(matchResult: IRouteMatchResult): Promise<void>;
|
|
@@ -129,6 +131,23 @@ interface IRoute extends IRouteChildContainer {
|
|
|
129
131
|
setParams(params: Record<string, string>, typedParams: Record<string, any>): void;
|
|
130
132
|
clearParams(): void;
|
|
131
133
|
notifyGuardHandlerLoadFailed(): void;
|
|
134
|
+
/**
|
|
135
|
+
* SSR ハイドレーションの採用: サーバー描画済みノード列を内容として引き取る
|
|
136
|
+
* (docs/ssr-router-design.md §4)
|
|
137
|
+
*/
|
|
138
|
+
adoptChildNodes(nodes: Node[]): void;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Router 観測面のコミット 1 回分(docs/router-state-contract-design.md §3.4)。
|
|
142
|
+
*/
|
|
143
|
+
interface IRouterCommit {
|
|
144
|
+
params: Record<string, string>;
|
|
145
|
+
typedParams: Record<string, any>;
|
|
146
|
+
routeName: string;
|
|
147
|
+
/** "?k=v" 形式または ""。パースは commit 側(Router)が行う */
|
|
148
|
+
search: string;
|
|
149
|
+
/** basename スライス後の path */
|
|
150
|
+
path: string;
|
|
132
151
|
}
|
|
133
152
|
interface IRouter extends IRouteChildContainer {
|
|
134
153
|
readonly basename: string;
|
|
@@ -136,7 +155,33 @@ interface IRouter extends IRouteChildContainer {
|
|
|
136
155
|
readonly template: HTMLTemplateElement;
|
|
137
156
|
fallbackRoute: IRoute | null;
|
|
138
157
|
path: string;
|
|
158
|
+
/** 現在マッチのマージ済み param(文字列・frozen)。fallback・初期化前は {} */
|
|
159
|
+
readonly params: Record<string, string>;
|
|
160
|
+
/** 同上の型変換済み値(frozen) */
|
|
161
|
+
readonly typedParams: Record<string, any>;
|
|
162
|
+
/** 現在 URL のクエリ(Record・last-wins・frozen)。クエリ無しは {} */
|
|
163
|
+
readonly searchParams: Record<string, string>;
|
|
164
|
+
/** 最深マッチルートの name 属性値。fallback 時は fallback ルートの name */
|
|
165
|
+
readonly routeName: string;
|
|
139
166
|
navigate(path: string): Promise<void>;
|
|
167
|
+
/** navigateUrl(push)の対になる replace 遷移(§4.2) */
|
|
168
|
+
replace(path: string): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* same-match 判定(§4.4)。比較は basename スライス後の path 同士。
|
|
171
|
+
* 最初の成功 commit より前は常に false(初回ガード)。
|
|
172
|
+
*/
|
|
173
|
+
isSameMatch(path: string): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* 観測面のコミットと発火(§3.4)。全内部値を先にコミットし、その後で
|
|
176
|
+
* params → route-name → search → path の順に変化したものだけ発火する。
|
|
177
|
+
*/
|
|
178
|
+
commitNavigation(commit: IRouterCommit): void;
|
|
179
|
+
/** `announce=` 用 live region。未生成なら null(docs/a11y-design.md §3-4) */
|
|
180
|
+
readonly a11yRegion: HTMLElement | null;
|
|
181
|
+
/** `<wcs-router focus=...>` の属性値(無ければ null) */
|
|
182
|
+
readonly focusPolicy: string | null;
|
|
183
|
+
/** `<wcs-router announce=...>` の属性値(無ければ null) */
|
|
184
|
+
readonly announcePolicy: string | null;
|
|
140
185
|
}
|
|
141
186
|
interface IOutlet {
|
|
142
187
|
routesNode: IRouter;
|
|
@@ -150,6 +195,12 @@ interface IOutlet {
|
|
|
150
195
|
* Container element that manages route definitions and navigation.
|
|
151
196
|
*/
|
|
152
197
|
declare class Router extends HTMLElement implements IRouter {
|
|
198
|
+
/**
|
|
199
|
+
* @wcstack/server の待機プロトコル(docs/ssr-router-design.md §3.2)。
|
|
200
|
+
* renderToString はこのフラグを持つ要素の connectedCallbackPromise を待って
|
|
201
|
+
* からシリアライズする — 初期ルート適用の完了がサーバー出力に反映される。
|
|
202
|
+
*/
|
|
203
|
+
static hasConnectedCallbackPromise: boolean;
|
|
153
204
|
static wcBindable: IWcBindable;
|
|
154
205
|
private _outlet;
|
|
155
206
|
private _template;
|
|
@@ -161,9 +212,35 @@ declare class Router extends HTMLElement implements IRouter {
|
|
|
161
212
|
private _listeningPopState;
|
|
162
213
|
private _listeningNavigate;
|
|
163
214
|
private _navigateUrl;
|
|
215
|
+
private _replaceUrl;
|
|
164
216
|
private _disconnectedDuringInit;
|
|
165
217
|
private _initializing;
|
|
218
|
+
private _a11yRegion;
|
|
219
|
+
private _params;
|
|
220
|
+
private _typedParams;
|
|
221
|
+
private _searchParams;
|
|
222
|
+
private _routeName;
|
|
223
|
+
/** 最初の成功 commit を通過したか(§4.4 の初回ガード) */
|
|
224
|
+
private _hasCommitted;
|
|
225
|
+
private _connectedCallbackPromise;
|
|
226
|
+
private _resolveConnectedCallback;
|
|
227
|
+
private _rejectConnectedCallback;
|
|
166
228
|
constructor();
|
|
229
|
+
get connectedCallbackPromise(): Promise<void>;
|
|
230
|
+
get a11yRegion(): HTMLElement | null;
|
|
231
|
+
get focusPolicy(): string | null;
|
|
232
|
+
get announcePolicy(): string | null;
|
|
233
|
+
/**
|
|
234
|
+
* `announce=` 用 live region を <wcs-router> 直下に空のまま用意する
|
|
235
|
+
* (docs/a11y-design.md §3-4)。
|
|
236
|
+
* - 告知より**前**から DOM に居ないと SR に読まれないため、announce 時の
|
|
237
|
+
* 遅延生成はできない。
|
|
238
|
+
* - outlet 配下はナビゲーションごとに破棄され、オプトインで shadow root にも
|
|
239
|
+
* なる。document.body 直下は router の寿命を超えて漏れ、マルチ router で
|
|
240
|
+
* 競合する。よって配置は <wcs-router> 直下の一択。
|
|
241
|
+
* - display:none は live region を殺すため、sr-only クリップで隠す。
|
|
242
|
+
*/
|
|
243
|
+
private _ensureA11yRegion;
|
|
167
244
|
/**
|
|
168
245
|
* Normalize a URL pathname to a route path.
|
|
169
246
|
* 共通実装は normalizePathname.ts を参照(Link との挙動整合のため)。
|
|
@@ -188,6 +265,32 @@ declare class Router extends HTMLElement implements IRouter {
|
|
|
188
265
|
* applyRoute 内で設定される値です。
|
|
189
266
|
*/
|
|
190
267
|
set path(value: string);
|
|
268
|
+
get params(): Record<string, string>;
|
|
269
|
+
get typedParams(): Record<string, any>;
|
|
270
|
+
get searchParams(): Record<string, string>;
|
|
271
|
+
get routeName(): string;
|
|
272
|
+
/**
|
|
273
|
+
* same-match 判定(docs/router-state-contract-design.md §4.4)。
|
|
274
|
+
*
|
|
275
|
+
* 比較は **basename スライス後の path 同士**(`_path` はスライス後で保存済み)。
|
|
276
|
+
* 判定が必要な地点は 2 箇所 — `_onNavigateFunc` の intercept オプション決定時と
|
|
277
|
+
* `applyRoute` の入口分岐 — で、両方がこの単一実装を呼ぶ。
|
|
278
|
+
*
|
|
279
|
+
* 初回ガード: 最初の成功 commit より前には適用しない。初期 `_path = ""` が
|
|
280
|
+
* 正規化後パス(常に `/` 始まり)と一致しないため偶然安全だが、
|
|
281
|
+
* normalizePathname の実装詳細に依存させず規範として明示する。
|
|
282
|
+
*/
|
|
283
|
+
isSameMatch(path: string): boolean;
|
|
284
|
+
/**
|
|
285
|
+
* 観測面のコミットと発火(docs/router-state-contract-design.md §3.4)。
|
|
286
|
+
*
|
|
287
|
+
* 全内部値を先にコミットし、その後で初めてイベントを発火する — どのイベントの
|
|
288
|
+
* リスナーから要素プロパティを読んでも、遷移後スナップショットの一貫した値が
|
|
289
|
+
* 見える。発火順序は params → route-name → search → path。`path` を最後に
|
|
290
|
+
* 置くのは、既存例で `path` が「ナビゲーション完了」の信号として使われている
|
|
291
|
+
* ため。各イベントは変化した commit のみ発火する。
|
|
292
|
+
*/
|
|
293
|
+
commitNavigation(commit: IRouterCommit): void;
|
|
191
294
|
get fallbackRoute(): IRoute | null;
|
|
192
295
|
/**
|
|
193
296
|
* Routeのfallback属性がある場合にそのルートを設定します。
|
|
@@ -195,7 +298,21 @@ declare class Router extends HTMLElement implements IRouter {
|
|
|
195
298
|
set fallbackRoute(value: IRoute | null);
|
|
196
299
|
get navigateUrl(): string | null;
|
|
197
300
|
set navigateUrl(value: string | null);
|
|
301
|
+
get replaceUrl(): string | null;
|
|
302
|
+
/**
|
|
303
|
+
* navigateUrl と完全同型の null-idle transient(docs/router-state-contract-design.md §4.2)。
|
|
304
|
+
* null は待機・書き込みで replace() を起動・完了で自己リセットして
|
|
305
|
+
* `wcs-router:replace-url-changed`(detail: null)を発火する。
|
|
306
|
+
*/
|
|
307
|
+
set replaceUrl(value: string | null);
|
|
198
308
|
navigate(path: string): Promise<void>;
|
|
309
|
+
/**
|
|
310
|
+
* navigateUrl(push)の対になる replace 遷移(docs/router-state-contract-design.md §4.2)。
|
|
311
|
+
* Navigation API では `navigation.navigate(url, { history: "replace" })`、
|
|
312
|
+
* フォールバックでは `history.replaceState` + applyRoute + 通知。
|
|
313
|
+
*/
|
|
314
|
+
replace(path: string): Promise<void>;
|
|
315
|
+
private _performNavigation;
|
|
199
316
|
/**
|
|
200
317
|
* basename 配下の URL かどうかを判定する。
|
|
201
318
|
* basename が空の場合はすべての URL にマッチする。
|
|
@@ -205,12 +322,38 @@ declare class Router extends HTMLElement implements IRouter {
|
|
|
205
322
|
private _onNavigate;
|
|
206
323
|
private _onPopState;
|
|
207
324
|
private _initialize;
|
|
325
|
+
/**
|
|
326
|
+
* サーバー描画済み outlet の採用(docs/ssr-router-design.md §4)。
|
|
327
|
+
*
|
|
328
|
+
* 検証(一意な absolutePath・マーカーの整合・現在 URL のマッチとの一致)を
|
|
329
|
+
* **すべて DOM 変更の前に**行い、途中で断念しても半採用状態を残さない。
|
|
330
|
+
* 成立すれば DOM 変更ゼロで「すでにナビゲート済み」の状態を確立する —
|
|
331
|
+
* state がハイドレートしたバインディングは採用ノード上で生きたままになる。
|
|
332
|
+
*
|
|
333
|
+
* @returns 採用が成立した場合 true。false は呼び出し側(_initialize)が
|
|
334
|
+
* サーバー DOM を破棄して従来描画にフォールバックする。
|
|
335
|
+
*/
|
|
336
|
+
private _hydrateFromSsr;
|
|
337
|
+
/**
|
|
338
|
+
* SSR モードの初期ルート描画(docs/ssr-router-design.md §3.2)。
|
|
339
|
+
* 初回描画は transition arbiter に渡らない既存規則(showRouteContent)により
|
|
340
|
+
* 常に同期適用される。navigate / popstate リスナ・a11y region・
|
|
341
|
+
* `wcs:navigate` 通知はサーバーでは不要(connectedCallback 側で登録しない)。
|
|
342
|
+
*/
|
|
343
|
+
private _renderForSsr;
|
|
344
|
+
/**
|
|
345
|
+
* 初期表示ルートの内容を binder プロトコルへ差し出す。SSR 描画(_renderForSsr)と
|
|
346
|
+
* ハイドレーション不能時の描き直し(state が先にハイドレートを終えている可能性が
|
|
347
|
+
* ある)の両方から呼ぶ。bind() は冪等なので余分に差し出しても壊れない。
|
|
348
|
+
*/
|
|
349
|
+
private _offerInitialContentToBinder;
|
|
350
|
+
/** ルートツリー全体(ネスト含む)への走査 */
|
|
351
|
+
private _forEachRoute;
|
|
208
352
|
connectedCallback(): Promise<void>;
|
|
209
353
|
disconnectedCallback(): void;
|
|
210
354
|
}
|
|
211
355
|
|
|
212
356
|
declare class Route extends HTMLElement implements IRoute {
|
|
213
|
-
static wcBindable: IWcBindable;
|
|
214
357
|
private _core;
|
|
215
358
|
private _routeParentNode;
|
|
216
359
|
private _routeChildNodes;
|
|
@@ -228,6 +371,13 @@ declare class Route extends HTMLElement implements IRoute {
|
|
|
228
371
|
get uuid(): string;
|
|
229
372
|
get placeHolder(): Comment;
|
|
230
373
|
get childNodeArray(): Node[];
|
|
374
|
+
/**
|
|
375
|
+
* SSR ハイドレーションの採用(docs/ssr-router-design.md §4)。
|
|
376
|
+
* サーバー描画済みの DOM ノード列をこのルートの内容として引き取る。
|
|
377
|
+
* 以後の hideRoute / showRoute は採用ノードに対して従来どおり動く。
|
|
378
|
+
* template 由来の fresh クローン(自身の childNodes)は不要になるため破棄する。
|
|
379
|
+
*/
|
|
380
|
+
adoptChildNodes(nodes: Node[]): void;
|
|
231
381
|
get routes(): IRoute[];
|
|
232
382
|
get childIndex(): number;
|
|
233
383
|
get path(): string;
|
|
@@ -245,6 +395,7 @@ declare class Route extends HTMLElement implements IRoute {
|
|
|
245
395
|
get segmentCount(): number;
|
|
246
396
|
get absoluteSegmentCount(): number;
|
|
247
397
|
get fullpath(): string;
|
|
398
|
+
get hasGuard(): boolean;
|
|
248
399
|
get guardHandler(): GuardHandler;
|
|
249
400
|
set guardHandler(value: GuardHandler);
|
|
250
401
|
setParams(params: Record<string, string>, typedParams: Record<string, any>): void;
|
|
@@ -271,8 +422,21 @@ interface RouteParseOptions {
|
|
|
271
422
|
guardFallback?: string | null;
|
|
272
423
|
name?: string;
|
|
273
424
|
}
|
|
425
|
+
/**
|
|
426
|
+
* NOTE: RouteCore / Route は `static wcBindable` を**宣言しない**
|
|
427
|
+
* (docs/router-state-contract-design.md §5.1 / D2)。
|
|
428
|
+
*
|
|
429
|
+
* `<wcs-route>` は parse 時に clone された detached コントローラであり、live DOM に
|
|
430
|
+
* 入るのは placeholder コメントとスタンプされた子ノードだけ。data-wcs は live DOM
|
|
431
|
+
* 上の属性走査で結線する仕組みなので、宣言しても構造的に到達不能な「果たせない
|
|
432
|
+
* 約束」になる。params / typedParams / routeName の観測面は live DOM に居る
|
|
433
|
+
* `<wcs-router>` に集約した(Router.wcBindable)。
|
|
434
|
+
*
|
|
435
|
+
* `wcs-route:params-changed` / `wcs-route:active-changed` の dispatch は存置する —
|
|
436
|
+
* RouteCore は EventTarget であり、Core 直接消費(signals の正式推奨形)と
|
|
437
|
+
* ユニットテストの観測面として生きている。
|
|
438
|
+
*/
|
|
274
439
|
declare class RouteCore extends EventTarget {
|
|
275
|
-
static wcBindable: IWcBindable;
|
|
276
440
|
private _target;
|
|
277
441
|
private _parentCore;
|
|
278
442
|
private _path;
|
|
@@ -318,6 +482,12 @@ declare class RouteCore extends EventTarget {
|
|
|
318
482
|
setParams(params: Record<string, string>, typedParams: Record<string, any>): void;
|
|
319
483
|
clearParams(): void;
|
|
320
484
|
shouldChange(newParams: Record<string, string>): boolean;
|
|
485
|
+
/**
|
|
486
|
+
* guard 属性の有無(parsePath の options.hasGuard)。SSR の guard バリア
|
|
487
|
+
* — guard 付きルートはサーバーで描かない(docs/ssr-router-design.md §2-4)—
|
|
488
|
+
* がハンドラのロードを待たずに判定するために使う。
|
|
489
|
+
*/
|
|
490
|
+
get hasGuard(): boolean;
|
|
321
491
|
get guardHandler(): GuardHandler;
|
|
322
492
|
set guardHandler(value: GuardHandler);
|
|
323
493
|
/**
|