@wcstack/router 1.3.14 → 1.3.16

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 (111) hide show
  1. package/README.ja.md +5 -1
  2. package/README.md +5 -1
  3. package/package.json +5 -4
  4. package/dist/GuardCancel.d.ts +0 -6
  5. package/dist/GuardCancel.d.ts.map +0 -1
  6. package/dist/GuardCancel.js +0 -8
  7. package/dist/GuardCancel.js.map +0 -1
  8. package/dist/Navigation.d.ts +0 -7
  9. package/dist/Navigation.d.ts.map +0 -1
  10. package/dist/Navigation.js +0 -11
  11. package/dist/Navigation.js.map +0 -1
  12. package/dist/applyRoute.d.ts +0 -3
  13. package/dist/applyRoute.d.ts.map +0 -1
  14. package/dist/applyRoute.js +0 -40
  15. package/dist/applyRoute.js.map +0 -1
  16. package/dist/assignParams.d.ts +0 -2
  17. package/dist/assignParams.d.ts.map +0 -1
  18. package/dist/assignParams.js +0 -52
  19. package/dist/assignParams.js.map +0 -1
  20. package/dist/bootstrapRouter.d.ts +0 -8
  21. package/dist/bootstrapRouter.d.ts.map +0 -1
  22. package/dist/bootstrapRouter.js +0 -14
  23. package/dist/bootstrapRouter.js.map +0 -1
  24. package/dist/builtinParamTypes.d.ts +0 -38
  25. package/dist/builtinParamTypes.d.ts.map +0 -1
  26. package/dist/builtinParamTypes.js +0 -79
  27. package/dist/builtinParamTypes.js.map +0 -1
  28. package/dist/components/Head.d.ts +0 -29
  29. package/dist/components/Head.d.ts.map +0 -1
  30. package/dist/components/Head.js +0 -173
  31. package/dist/components/Head.js.map +0 -1
  32. package/dist/components/Layout.d.ts +0 -15
  33. package/dist/components/Layout.d.ts.map +0 -1
  34. package/dist/components/Layout.js +0 -86
  35. package/dist/components/Layout.js.map +0 -1
  36. package/dist/components/LayoutOutlet.d.ts +0 -15
  37. package/dist/components/LayoutOutlet.d.ts.map +0 -1
  38. package/dist/components/LayoutOutlet.js +0 -101
  39. package/dist/components/LayoutOutlet.js.map +0 -1
  40. package/dist/components/Link.d.ts +0 -25
  41. package/dist/components/Link.d.ts.map +0 -1
  42. package/dist/components/Link.js +0 -155
  43. package/dist/components/Link.js.map +0 -1
  44. package/dist/components/Outlet.d.ts +0 -16
  45. package/dist/components/Outlet.d.ts.map +0 -1
  46. package/dist/components/Outlet.js +0 -46
  47. package/dist/components/Outlet.js.map +0 -1
  48. package/dist/components/Route.d.ts +0 -61
  49. package/dist/components/Route.d.ts.map +0 -1
  50. package/dist/components/Route.js +0 -348
  51. package/dist/components/Route.js.map +0 -1
  52. package/dist/components/Router.d.ts +0 -62
  53. package/dist/components/Router.d.ts.map +0 -1
  54. package/dist/components/Router.js +0 -237
  55. package/dist/components/Router.js.map +0 -1
  56. package/dist/components/types.d.ts +0 -86
  57. package/dist/components/types.d.ts.map +0 -1
  58. package/dist/components/types.js +0 -2
  59. package/dist/components/types.js.map +0 -1
  60. package/dist/config.d.ts +0 -5
  61. package/dist/config.d.ts.map +0 -1
  62. package/dist/config.js +0 -53
  63. package/dist/config.js.map +0 -1
  64. package/dist/exports.d.ts +0 -3
  65. package/dist/exports.d.ts.map +0 -1
  66. package/dist/exports.js +0 -2
  67. package/dist/exports.js.map +0 -1
  68. package/dist/getCustomTagName.d.ts +0 -2
  69. package/dist/getCustomTagName.d.ts.map +0 -1
  70. package/dist/getCustomTagName.js +0 -12
  71. package/dist/getCustomTagName.js.map +0 -1
  72. package/dist/getUUID.d.ts +0 -2
  73. package/dist/getUUID.d.ts.map +0 -1
  74. package/dist/getUUID.js +0 -11
  75. package/dist/getUUID.js.map +0 -1
  76. package/dist/hideRoute.d.ts +0 -3
  77. package/dist/hideRoute.d.ts.map +0 -1
  78. package/dist/hideRoute.js +0 -7
  79. package/dist/hideRoute.js.map +0 -1
  80. package/dist/matchRoutes.d.ts +0 -3
  81. package/dist/matchRoutes.d.ts.map +0 -1
  82. package/dist/matchRoutes.js +0 -52
  83. package/dist/matchRoutes.js.map +0 -1
  84. package/dist/parse.d.ts +0 -3
  85. package/dist/parse.d.ts.map +0 -1
  86. package/dist/parse.js +0 -77
  87. package/dist/parse.js.map +0 -1
  88. package/dist/raiseError.d.ts +0 -2
  89. package/dist/raiseError.d.ts.map +0 -1
  90. package/dist/raiseError.js +0 -4
  91. package/dist/raiseError.js.map +0 -1
  92. package/dist/registerComponents.d.ts +0 -2
  93. package/dist/registerComponents.d.ts.map +0 -1
  94. package/dist/registerComponents.js +0 -33
  95. package/dist/registerComponents.js.map +0 -1
  96. package/dist/showRoute.d.ts +0 -3
  97. package/dist/showRoute.d.ts.map +0 -1
  98. package/dist/showRoute.js +0 -38
  99. package/dist/showRoute.js.map +0 -1
  100. package/dist/showRouteContent.d.ts +0 -3
  101. package/dist/showRouteContent.d.ts.map +0 -1
  102. package/dist/showRouteContent.js +0 -38
  103. package/dist/showRouteContent.js.map +0 -1
  104. package/dist/testPath.d.ts +0 -3
  105. package/dist/testPath.d.ts.map +0 -1
  106. package/dist/testPath.js +0 -85
  107. package/dist/testPath.js.map +0 -1
  108. package/dist/types.d.ts +0 -38
  109. package/dist/types.d.ts.map +0 -1
  110. package/dist/types.js +0 -2
  111. package/dist/types.js.map +0 -1
@@ -1,348 +0,0 @@
1
- import { getUUID } from "../getUUID.js";
2
- import { config } from "../config.js";
3
- import { raiseError } from "../raiseError.js";
4
- import { GuardCancel } from "../GuardCancel.js";
5
- import { builtinParamTypes } from "../builtinParamTypes.js";
6
- const weights = {
7
- 'static': 2,
8
- 'param': 1,
9
- 'catch-all': 0
10
- };
11
- export class Route extends HTMLElement {
12
- _name = '';
13
- _path = '';
14
- _routeParentNode = null;
15
- _routeChildNodes = [];
16
- _routerNode = null;
17
- _uuid = getUUID();
18
- _placeHolder = document.createComment(`@@route:${this._uuid}`);
19
- _childNodeArray;
20
- _paramNames;
21
- _absoluteParamNames;
22
- _params = {};
23
- _typedParams = {};
24
- _weight;
25
- _absoluteWeight;
26
- _childIndex = 0;
27
- _hasGuard = false;
28
- _guardHandler = null;
29
- _waitForSetGuardHandler = null;
30
- _resolveSetGuardHandler = null;
31
- _guardFallbackPath = '';
32
- _initialized = false;
33
- _isFallbackRoute = false;
34
- _segmentCount;
35
- _segmentInfos = [];
36
- _absoluteSegmentInfos;
37
- constructor() {
38
- super();
39
- }
40
- get routeParentNode() {
41
- return this._routeParentNode;
42
- }
43
- get routeChildNodes() {
44
- return this._routeChildNodes;
45
- }
46
- get routerNode() {
47
- if (!this._routerNode) {
48
- raiseError(`${config.tagNames.route} has no routerNode.`);
49
- }
50
- return this._routerNode;
51
- }
52
- get path() {
53
- return this._path;
54
- }
55
- get isRelative() {
56
- return !this._path.startsWith('/');
57
- }
58
- _checkParentNode(hasParentCallback, noParentCallback) {
59
- // fallbackはルーター直下のみ許可されるため、相対パスチェックはスキップ
60
- if (!this._isFallbackRoute) {
61
- if (this.isRelative && !this._routeParentNode) {
62
- raiseError(`${config.tagNames.route} is relative but has no parent route.`);
63
- }
64
- if (!this.isRelative && this._routeParentNode) {
65
- raiseError(`${config.tagNames.route} is absolute but has a parent route.`);
66
- }
67
- }
68
- if (this.isRelative && this._routeParentNode) {
69
- return hasParentCallback(this._routeParentNode);
70
- }
71
- else {
72
- return noParentCallback();
73
- }
74
- }
75
- get absolutePath() {
76
- return this._checkParentNode((routeParentNode) => {
77
- const parentPath = routeParentNode.absolutePath;
78
- return parentPath.endsWith('/')
79
- ? parentPath + this._path
80
- : parentPath + '/' + this._path;
81
- }, () => {
82
- return this._path;
83
- });
84
- }
85
- get uuid() {
86
- return this._uuid;
87
- }
88
- get placeHolder() {
89
- return this._placeHolder;
90
- }
91
- get childNodeArray() {
92
- if (typeof this._childNodeArray === 'undefined') {
93
- this._childNodeArray = Array.from(this.childNodes);
94
- }
95
- return this._childNodeArray;
96
- }
97
- get routes() {
98
- if (this.routeParentNode) {
99
- return this.routeParentNode.routes.concat(this);
100
- }
101
- else {
102
- return [this];
103
- }
104
- }
105
- get segmentInfos() {
106
- return this._segmentInfos;
107
- }
108
- // indexの場合、{ type: 'static', segmentText: '' }となる、indexが複数連続する場合もある
109
- get absoluteSegmentInfos() {
110
- if (typeof this._absoluteSegmentInfos === 'undefined') {
111
- this._absoluteSegmentInfos = this._checkParentNode((routeParentNode) => {
112
- return [
113
- ...routeParentNode.absoluteSegmentInfos,
114
- ...this._segmentInfos
115
- ];
116
- }, () => {
117
- return [...this._segmentInfos];
118
- });
119
- }
120
- return this._absoluteSegmentInfos;
121
- }
122
- get params() {
123
- return this._params;
124
- }
125
- get typedParams() {
126
- return this._typedParams;
127
- }
128
- get paramNames() {
129
- if (typeof this._paramNames === 'undefined') {
130
- const names = [];
131
- for (const info of this._segmentInfos) {
132
- if (info.paramName) {
133
- names.push(info.paramName);
134
- }
135
- }
136
- this._paramNames = names;
137
- }
138
- return this._paramNames;
139
- }
140
- get absoluteParamNames() {
141
- if (typeof this._absoluteParamNames === 'undefined') {
142
- this._absoluteParamNames = this._checkParentNode((routeParentNode) => {
143
- return [
144
- ...routeParentNode.absoluteParamNames,
145
- ...this.paramNames
146
- ];
147
- }, () => {
148
- return [...this.paramNames];
149
- });
150
- }
151
- return this._absoluteParamNames;
152
- }
153
- get weight() {
154
- if (typeof this._weight === 'undefined') {
155
- let weight = 0;
156
- for (const info of this._segmentInfos) {
157
- weight += weights[info.type];
158
- }
159
- this._weight = weight;
160
- }
161
- return this._weight;
162
- }
163
- get absoluteWeight() {
164
- if (typeof this._absoluteWeight === 'undefined') {
165
- this._absoluteWeight = this._checkParentNode((routeParentNode) => {
166
- return routeParentNode.absoluteWeight + this.weight;
167
- }, () => {
168
- return this.weight;
169
- });
170
- }
171
- return this._absoluteWeight;
172
- }
173
- get childIndex() {
174
- return this._childIndex;
175
- }
176
- get name() {
177
- return this._name;
178
- }
179
- async guardCheck(matchResult) {
180
- if (this._hasGuard && this._waitForSetGuardHandler) {
181
- await this._waitForSetGuardHandler;
182
- }
183
- if (this._guardHandler) {
184
- const toPath = matchResult.path;
185
- const fromPath = matchResult.lastPath;
186
- const allowed = await this._guardHandler(toPath, fromPath);
187
- if (!allowed) {
188
- throw new GuardCancel('Navigation cancelled by guard.', this._guardFallbackPath);
189
- }
190
- }
191
- }
192
- shouldChange(newParams) {
193
- for (const key of this.paramNames) {
194
- if (this.params[key] !== newParams[key]) {
195
- return true;
196
- }
197
- }
198
- return false;
199
- }
200
- get guardHandler() {
201
- if (!this._guardHandler) {
202
- raiseError(`${config.tagNames.route} has no guardHandler.`);
203
- }
204
- return this._guardHandler;
205
- }
206
- set guardHandler(value) {
207
- this._resolveSetGuardHandler?.();
208
- this._guardHandler = value;
209
- }
210
- initialize(routerNode, routeParentNode) {
211
- if (this._initialized) {
212
- return;
213
- }
214
- this._initialized = true;
215
- // 単独で影響のないものから設定していく
216
- if (this.hasAttribute('path')) {
217
- this._path = this.getAttribute('path') || '';
218
- }
219
- else if (this.hasAttribute('index')) {
220
- this._path = '';
221
- }
222
- else if (this.hasAttribute('fallback')) {
223
- this._path = '';
224
- this._isFallbackRoute = true;
225
- }
226
- else {
227
- raiseError(`${config.tagNames.route} should have a "path" or "index" attribute.`);
228
- }
229
- this._name = this.getAttribute('name') || '';
230
- this._routerNode = routerNode;
231
- this._routeParentNode = routeParentNode;
232
- const routeChildContainer = routeParentNode || routerNode;
233
- routeChildContainer.routeChildNodes.push(this);
234
- this._childIndex = routeChildContainer.routeChildNodes.length - 1;
235
- if (this._isFallbackRoute) {
236
- if (routeParentNode) {
237
- raiseError(`${config.tagNames.route} with fallback attribute must be a direct child of ${config.tagNames.router}.`);
238
- }
239
- if (routerNode.fallbackRoute) {
240
- raiseError(`${config.tagNames.router} can have only one fallback route.`);
241
- }
242
- routerNode.fallbackRoute = this;
243
- }
244
- // index属性の場合は特別扱い(セグメントを消費しない)
245
- if (this.hasAttribute('index')) {
246
- this._segmentInfos.push({
247
- type: 'static',
248
- segmentText: '',
249
- paramName: null,
250
- pattern: /^$/,
251
- isIndex: true
252
- });
253
- }
254
- const segments = this._path.split('/');
255
- for (let idx = 0; idx < segments.length; idx++) {
256
- const segment = segments[idx];
257
- // 末尾の空セグメントはスキップ(/parent/ のような場合)
258
- if (segment === '' && idx === segments.length - 1 && idx > 0) {
259
- continue;
260
- }
261
- if (segment === '*') {
262
- this._segmentInfos.push({
263
- type: 'catch-all',
264
- segmentText: segment,
265
- paramName: '*',
266
- pattern: new RegExp('^(.*)$')
267
- });
268
- // Catch-all: matches remaining path segments
269
- break; // Ignore subsequent segments
270
- }
271
- else if (segment.startsWith(':')) {
272
- const matchType = segment.match(/^:([^()]+)(\(([^)]+)\))?$/);
273
- let paramName;
274
- let typeName = 'any';
275
- if (matchType) {
276
- paramName = matchType[1];
277
- if (matchType[3] && Object.keys(builtinParamTypes).includes(matchType[3])) {
278
- typeName = matchType[3];
279
- }
280
- }
281
- else {
282
- paramName = segment.substring(1);
283
- }
284
- this._segmentInfos.push({
285
- type: 'param',
286
- segmentText: segment,
287
- paramName: paramName,
288
- pattern: new RegExp('^([^\\/]+)$'),
289
- paramType: typeName
290
- });
291
- }
292
- else if (segment !== '' || !this.hasAttribute('index')) {
293
- // 空セグメントはindex以外の場合のみ追加(絶対パスの先頭 '' など)
294
- this._segmentInfos.push({
295
- type: 'static',
296
- segmentText: segment,
297
- paramName: null,
298
- pattern: new RegExp(`^${segment}$`)
299
- });
300
- }
301
- }
302
- this._hasGuard = this.hasAttribute('guard');
303
- if (this._hasGuard) {
304
- this._guardFallbackPath = this.getAttribute('guard') || '/';
305
- this._waitForSetGuardHandler = new Promise((resolve) => {
306
- this._resolveSetGuardHandler = resolve;
307
- });
308
- }
309
- this.setAttribute('fullpath', this.absolutePath);
310
- }
311
- get fullpath() {
312
- return this.absolutePath;
313
- }
314
- get segmentCount() {
315
- if (typeof this._segmentCount === 'undefined') {
316
- let count = 0;
317
- for (const info of this._segmentInfos) {
318
- if (info.type !== 'catch-all') {
319
- count++;
320
- }
321
- }
322
- this._segmentCount = this._path === "" ? 0 : count;
323
- }
324
- return this._segmentCount;
325
- }
326
- get absoluteSegmentCount() {
327
- return this._checkParentNode((routeParentNode) => {
328
- return routeParentNode.absoluteSegmentCount + this.segmentCount;
329
- }, () => {
330
- return this.segmentCount;
331
- });
332
- }
333
- testAncestorNode(ancestorNode) {
334
- let currentNode = this._routeParentNode;
335
- while (currentNode) {
336
- if (currentNode === ancestorNode) {
337
- return true;
338
- }
339
- currentNode = currentNode.routeParentNode;
340
- }
341
- return false;
342
- }
343
- clearParams() {
344
- this._params = {};
345
- this._typedParams = {};
346
- }
347
- }
348
- //# sourceMappingURL=Route.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Route.js","sourceRoot":"","sources":["../../src/components/Route.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- import { IOutlet, IRoute, IRouter } from "./types.js";
2
- /**
3
- * AppRoutes - Root component for @wcstack/router
4
- *
5
- * Container element that manages route definitions and navigation.
6
- */
7
- export declare class Router extends HTMLElement implements IRouter {
8
- private static _instance;
9
- private _outlet;
10
- private _template;
11
- private _routeChildNodes;
12
- private _basename;
13
- private _path;
14
- private _initialized;
15
- private _fallbackRoute;
16
- private _listeningPopState;
17
- constructor();
18
- /**
19
- * Normalize a URL pathname to a route path.
20
- * - ensure leading slash
21
- * - collapse multiple slashes
22
- * - treat trailing file extensions (e.g. .html) as directory root
23
- * - remove trailing slash except root "/"
24
- */
25
- private _normalizePathname;
26
- /**
27
- * Normalize basename.
28
- * - "" or "/" -> ""
29
- * - "/app/" -> "/app"
30
- * - "/app/index.html" -> "/app"
31
- */
32
- private _normalizeBasename;
33
- private _joinInternalPath;
34
- private _notifyLocationChange;
35
- private _getBasename;
36
- static get instance(): IRouter;
37
- static navigate(path: string): void;
38
- get basename(): string;
39
- private _getOutlet;
40
- private _getTemplate;
41
- get outlet(): IOutlet;
42
- get template(): HTMLTemplateElement;
43
- get routeChildNodes(): IRoute[];
44
- get path(): string;
45
- /**
46
- * applyRoute 内で設定される値です。
47
- */
48
- set path(value: string);
49
- get fallbackRoute(): IRoute | null;
50
- /**
51
- * Routeのfallback属性がある場合にそのルートを設定します。
52
- */
53
- set fallbackRoute(value: IRoute | null);
54
- navigate(path: string): Promise<void>;
55
- private _onNavigateFunc;
56
- private _onNavigate;
57
- private _onPopState;
58
- private _initialize;
59
- connectedCallback(): Promise<void>;
60
- disconnectedCallback(): void;
61
- }
62
- //# sourceMappingURL=Router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/components/Router.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAItD;;;;GAIG;AACH,qBAAa,MAAO,SAAQ,WAAY,YAAW,OAAO;IACxD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAwB;IAChD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAkB;;IAU5C;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,YAAY;IASpB,MAAM,KAAK,QAAQ,IAAI,OAAO,CAK7B;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAKpB,IAAI,MAAM,IAAI,OAAO,CAKpB;IAED,IAAI,QAAQ,IAAI,mBAAmB,CAKlC;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD;;OAEG;IACH,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IACD;;OAEG;IACH,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAErC;IAEK,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3C,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,WAAW,CAAmC;IAEtD,OAAO,CAAC,WAAW,CAKjB;YAEY,WAAW;IA6BnB,iBAAiB;IAYvB,oBAAoB;CAUrB"}
@@ -1,237 +0,0 @@
1
- import { parse } from "../parse.js";
2
- import { createOutlet } from "./Outlet.js";
3
- import { config } from "../config.js";
4
- import { raiseError } from "../raiseError.js";
5
- import { applyRoute } from "../applyRoute.js";
6
- import { getNavigation } from "../Navigation.js";
7
- /**
8
- * AppRoutes - Root component for @wcstack/router
9
- *
10
- * Container element that manages route definitions and navigation.
11
- */
12
- export class Router extends HTMLElement {
13
- static _instance = null;
14
- _outlet = null;
15
- _template = null;
16
- _routeChildNodes = [];
17
- _basename = '';
18
- _path = '';
19
- _initialized = false;
20
- _fallbackRoute = null;
21
- _listeningPopState = false;
22
- constructor() {
23
- super();
24
- if (Router._instance) {
25
- raiseError(`${config.tagNames.router} can only be instantiated once.`);
26
- }
27
- Router._instance = this;
28
- }
29
- /**
30
- * Normalize a URL pathname to a route path.
31
- * - ensure leading slash
32
- * - collapse multiple slashes
33
- * - treat trailing file extensions (e.g. .html) as directory root
34
- * - remove trailing slash except root "/"
35
- */
36
- _normalizePathname(_path) {
37
- let path = _path || "/";
38
- if (!path.startsWith("/"))
39
- path = "/" + path;
40
- path = path.replace(/\/{2,}/g, "/");
41
- // e.g. "/app/index.html" -> "/app"
42
- const exts = config.basenameFileExtensions;
43
- if (exts.length > 0) {
44
- const extPattern = new RegExp(`\\/[^/]+(?:${exts.map(e => e.replace(/\./g, '\\.')).join('|')})$`, 'i');
45
- path = path.replace(extPattern, "");
46
- }
47
- if (path === "")
48
- path = "/";
49
- if (path.length > 1 && path.endsWith("/"))
50
- path = path.slice(0, -1);
51
- return path;
52
- }
53
- /**
54
- * Normalize basename.
55
- * - "" or "/" -> ""
56
- * - "/app/" -> "/app"
57
- * - "/app/index.html" -> "/app"
58
- */
59
- _normalizeBasename(_path) {
60
- let path = _path || "";
61
- if (!path)
62
- return "";
63
- if (!path.startsWith("/"))
64
- path = "/" + path;
65
- path = path.replace(/\/{2,}/g, "/");
66
- const exts = config.basenameFileExtensions;
67
- if (exts.length > 0) {
68
- const extPattern = new RegExp(`\\/[^/]+(?:${exts.map(e => e.replace(/\./g, '\\.')).join('|')})$`, 'i');
69
- path = path.replace(extPattern, "");
70
- }
71
- if (path.length > 1 && path.endsWith("/"))
72
- path = path.slice(0, -1);
73
- if (path === "/")
74
- return "";
75
- return path;
76
- }
77
- _joinInternalPath(basename, to) {
78
- const base = this._normalizeBasename(basename);
79
- // accept "about" as "/about"
80
- let path = to.startsWith("/") ? to : "/" + to;
81
- path = this._normalizePathname(path);
82
- if (!base)
83
- return path;
84
- // keep "/app/" for root
85
- if (path === "/")
86
- return base + "/";
87
- return base + path;
88
- }
89
- _notifyLocationChange() {
90
- // For environments without Navigation API (and for Link active-state updates)
91
- window.dispatchEvent(new CustomEvent("wcs:navigate"));
92
- }
93
- _getBasename() {
94
- const base = new URL(document.baseURI);
95
- let path = base.pathname || "/";
96
- if (path === "/") {
97
- return "";
98
- }
99
- return this._normalizeBasename(path);
100
- }
101
- static get instance() {
102
- if (!Router._instance) {
103
- raiseError(`${config.tagNames.router} has not been instantiated.`);
104
- }
105
- return Router._instance;
106
- }
107
- static navigate(path) {
108
- Router.instance.navigate(path);
109
- }
110
- get basename() {
111
- return this._basename;
112
- }
113
- _getOutlet() {
114
- let outlet = document.querySelector(config.tagNames.outlet);
115
- if (!outlet) {
116
- outlet = createOutlet();
117
- document.body.appendChild(outlet);
118
- }
119
- return outlet;
120
- }
121
- _getTemplate() {
122
- const template = this.querySelector("template");
123
- return template;
124
- }
125
- get outlet() {
126
- if (!this._outlet) {
127
- raiseError(`${config.tagNames.router} has no outlet.`);
128
- }
129
- return this._outlet;
130
- }
131
- get template() {
132
- if (!this._template) {
133
- raiseError(`${config.tagNames.router} has no template.`);
134
- }
135
- return this._template;
136
- }
137
- get routeChildNodes() {
138
- return this._routeChildNodes;
139
- }
140
- get path() {
141
- return this._path;
142
- }
143
- /**
144
- * applyRoute 内で設定される値です。
145
- */
146
- set path(value) {
147
- this._path = value;
148
- }
149
- get fallbackRoute() {
150
- return this._fallbackRoute;
151
- }
152
- /**
153
- * Routeのfallback属性がある場合にそのルートを設定します。
154
- */
155
- set fallbackRoute(value) {
156
- this._fallbackRoute = value;
157
- }
158
- async navigate(path) {
159
- const fullPath = this._joinInternalPath(this._basename, path);
160
- const navigation = getNavigation();
161
- if (navigation?.navigate) {
162
- navigation.navigate(fullPath);
163
- }
164
- else {
165
- history.pushState(null, '', fullPath);
166
- await applyRoute(this, this.outlet, fullPath, this._path);
167
- this._notifyLocationChange();
168
- }
169
- }
170
- _onNavigateFunc(navEvent) {
171
- if (!navEvent.canIntercept ||
172
- navEvent.hashChange ||
173
- navEvent.downloadRequest !== null) {
174
- return;
175
- }
176
- const routesNode = this;
177
- navEvent.intercept({
178
- handler: async () => {
179
- const url = new URL(navEvent.destination.url);
180
- const fullPath = routesNode._normalizePathname(url.pathname);
181
- await applyRoute(routesNode, routesNode.outlet, fullPath, routesNode.path);
182
- },
183
- });
184
- }
185
- _onNavigate = this._onNavigateFunc.bind(this);
186
- _onPopState = async () => {
187
- // back/forward for environments without Navigation API
188
- const fullPath = this._normalizePathname(window.location.pathname);
189
- await applyRoute(this, this.outlet, fullPath, this._path);
190
- this._notifyLocationChange();
191
- };
192
- async _initialize() {
193
- this._initialized = true;
194
- this._basename = this._normalizeBasename(this.getAttribute("basename") || this._getBasename() || "");
195
- const hasBaseTag = document.querySelector('base[href]') !== null;
196
- const url = new URL(window.location.href);
197
- if (this._basename === "" && !hasBaseTag && url.pathname !== "/") {
198
- raiseError(`${config.tagNames.router} basename is empty, but current path is not "/".`);
199
- }
200
- this._outlet = this._getOutlet();
201
- this._outlet.routesNode = this;
202
- this._template = this._getTemplate();
203
- if (!this._template) {
204
- raiseError(`${config.tagNames.router} should have a <template> child element.`);
205
- }
206
- const fragment = await parse(this);
207
- this._outlet.rootNode.appendChild(fragment);
208
- if (this.routeChildNodes.length === 0) {
209
- raiseError(`${config.tagNames.router} has no route definitions.`);
210
- }
211
- const fullPath = this._normalizePathname(window.location.pathname);
212
- await applyRoute(this, this.outlet, fullPath, this._path);
213
- this._notifyLocationChange();
214
- }
215
- async connectedCallback() {
216
- if (!this._initialized) {
217
- await this._initialize();
218
- }
219
- getNavigation()?.addEventListener("navigate", this._onNavigate);
220
- // Fallback for browsers without Navigation API
221
- if (!getNavigation()?.addEventListener && !this._listeningPopState) {
222
- window.addEventListener("popstate", this._onPopState);
223
- this._listeningPopState = true;
224
- }
225
- }
226
- disconnectedCallback() {
227
- getNavigation()?.removeEventListener("navigate", this._onNavigate);
228
- if (this._listeningPopState) {
229
- window.removeEventListener("popstate", this._onPopState);
230
- this._listeningPopState = false;
231
- }
232
- if (Router._instance === this) {
233
- Router._instance = null;
234
- }
235
- }
236
- }
237
- //# sourceMappingURL=Router.js.map