@wavelengthusaf/client-router 0.0.3 → 0.0.5
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterElement.d.ts","sourceRoot":"","sources":["../../src/elements/RouterElement.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAc,SAAQ,WAAW;;IAC5C,gBAAuB,GAAG,uBAAuB;
|
|
1
|
+
{"version":3,"file":"RouterElement.d.ts","sourceRoot":"","sources":["../../src/elements/RouterElement.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAc,SAAQ,WAAW;;IAC5C,gBAAuB,GAAG,uBAAuB;IAQjD,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IAEM,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK9F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,IAAI,IAAI;CAoGpB"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { Router } from '../router/Router.js';
|
|
2
|
+
import { RouteElement } from './RouteElement.js';
|
|
2
3
|
export class RouterElement extends HTMLElement {
|
|
3
4
|
static tag = 'wavelength-router';
|
|
4
5
|
#router;
|
|
6
|
+
#routeObserver;
|
|
7
|
+
#waitingForRouteUpgrade = false;
|
|
5
8
|
static get observedAttributes() {
|
|
6
9
|
return ['hash-mode', 'guard'];
|
|
7
10
|
}
|
|
8
11
|
connectedCallback() {
|
|
12
|
+
this.#observeRoutes();
|
|
9
13
|
this.#bootstrap();
|
|
10
14
|
}
|
|
11
15
|
disconnectedCallback() {
|
|
16
|
+
this.#routeObserver?.disconnect();
|
|
12
17
|
this.#teardown();
|
|
13
18
|
}
|
|
14
19
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
@@ -26,8 +31,14 @@ export class RouterElement extends HTMLElement {
|
|
|
26
31
|
this.#router?.back();
|
|
27
32
|
}
|
|
28
33
|
#bootstrap() {
|
|
34
|
+
const routeCandidates = Array.from(this.querySelectorAll(RouteElement.tag));
|
|
35
|
+
const routeElements = routeCandidates.filter((routeElement) => routeElement instanceof RouteElement);
|
|
36
|
+
if (routeElements.length !== routeCandidates.length) {
|
|
37
|
+
this.#waitForRouteUpgrade();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
29
40
|
this.#teardown();
|
|
30
|
-
const routes = this.#collectRoutes();
|
|
41
|
+
const routes = this.#collectRoutes(routeElements);
|
|
31
42
|
if (routes.length === 0) {
|
|
32
43
|
console.warn('[wavelength-router] No <wavelength-route> children found.');
|
|
33
44
|
return;
|
|
@@ -45,13 +56,36 @@ export class RouterElement extends HTMLElement {
|
|
|
45
56
|
}
|
|
46
57
|
#teardown() {
|
|
47
58
|
this.#router?.destroy();
|
|
59
|
+
this.#router = undefined;
|
|
48
60
|
}
|
|
49
|
-
#collectRoutes() {
|
|
50
|
-
const routeElements = Array.from(this.querySelectorAll('wavelength-route'));
|
|
61
|
+
#collectRoutes(routeElements) {
|
|
51
62
|
return routeElements
|
|
52
63
|
.map((routeElement) => routeElement.toDefinition({ document }))
|
|
53
64
|
.filter((routeDefinition) => routeDefinition !== null);
|
|
54
65
|
}
|
|
66
|
+
#observeRoutes() {
|
|
67
|
+
this.#routeObserver = new MutationObserver((records) => {
|
|
68
|
+
const hasRouteChange = records.some((record) => [...record.addedNodes, ...record.removedNodes].some((node) => this.#containsRouteElement(node)));
|
|
69
|
+
if (hasRouteChange)
|
|
70
|
+
this.#bootstrap();
|
|
71
|
+
});
|
|
72
|
+
this.#routeObserver.observe(this, { childList: true, subtree: true });
|
|
73
|
+
}
|
|
74
|
+
#containsRouteElement(node) {
|
|
75
|
+
return (node instanceof Element &&
|
|
76
|
+
(node.localName === RouteElement.tag ||
|
|
77
|
+
node.querySelector(RouteElement.tag) !== null));
|
|
78
|
+
}
|
|
79
|
+
#waitForRouteUpgrade() {
|
|
80
|
+
if (this.#waitingForRouteUpgrade)
|
|
81
|
+
return;
|
|
82
|
+
this.#waitingForRouteUpgrade = true;
|
|
83
|
+
void customElements.whenDefined(RouteElement.tag).then(() => {
|
|
84
|
+
this.#waitingForRouteUpgrade = false;
|
|
85
|
+
if (this.isConnected)
|
|
86
|
+
this.#bootstrap();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
55
89
|
#resolveGuard() {
|
|
56
90
|
const guardName = this.getAttribute('guard');
|
|
57
91
|
if (!guardName)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterElement.js","sourceRoot":"","sources":["../../src/elements/RouterElement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"RouterElement.js","sourceRoot":"","sources":["../../src/elements/RouterElement.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wavelengthusaf/client-router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Native TypeScript Router",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -25,6 +25,13 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"browser": "./dist/index.js",
|
|
31
|
+
"import": "./dist/index.js",
|
|
32
|
+
"default": "./dist/index.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
28
35
|
"publishConfig": {
|
|
29
36
|
"access": "public"
|
|
30
37
|
},
|
|
@@ -49,7 +56,6 @@
|
|
|
49
56
|
"globals": "^17.5.0",
|
|
50
57
|
"husky": "^9.1.7",
|
|
51
58
|
"jsdom": "^29.0.2",
|
|
52
|
-
"opencode-ai": "^1.4.6",
|
|
53
59
|
"playwright": "^1.59.1",
|
|
54
60
|
"prettier": "^3.8.2",
|
|
55
61
|
"storybook": "^10.3.5",
|