@wavelengthusaf/client-router 0.0.2 → 0.0.3

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 (131) hide show
  1. package/dist/elements/RouteElement.d.ts +11 -0
  2. package/dist/elements/RouteElement.d.ts.map +1 -0
  3. package/dist/elements/RouteElement.js +44 -0
  4. package/dist/elements/RouteElement.js.map +1 -0
  5. package/dist/elements/RouterElement.d.ts +12 -0
  6. package/dist/elements/RouterElement.d.ts.map +1 -0
  7. package/dist/elements/RouterElement.js +70 -0
  8. package/dist/elements/RouterElement.js.map +1 -0
  9. package/dist/index.d.ts +6 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +5 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/models/CompiledRoute.d.ts +7 -0
  14. package/dist/models/CompiledRoute.d.ts.map +1 -0
  15. package/dist/models/CompiledRoute.js +2 -0
  16. package/dist/models/CompiledRoute.js.map +1 -0
  17. package/dist/models/MatchedRoute.d.ts +7 -0
  18. package/dist/models/MatchedRoute.d.ts.map +1 -0
  19. package/dist/models/MatchedRoute.js +2 -0
  20. package/dist/models/MatchedRoute.js.map +1 -0
  21. package/dist/models/RouteComponent.d.ts +6 -0
  22. package/dist/models/RouteComponent.d.ts.map +1 -0
  23. package/dist/models/RouteComponent.js +2 -0
  24. package/dist/models/RouteComponent.js.map +1 -0
  25. package/dist/models/RouteContext.d.ts +7 -0
  26. package/dist/models/RouteContext.d.ts.map +1 -0
  27. package/dist/models/RouteContext.js +2 -0
  28. package/dist/models/RouteContext.js.map +1 -0
  29. package/dist/models/RouteDefinition.d.ts +6 -0
  30. package/dist/models/RouteDefinition.d.ts.map +1 -0
  31. package/dist/models/RouteDefinition.js +2 -0
  32. package/dist/models/RouteDefinition.js.map +1 -0
  33. package/dist/models/RouteGuard.d.ts +3 -0
  34. package/dist/models/RouteGuard.d.ts.map +1 -0
  35. package/dist/models/RouteGuard.js +2 -0
  36. package/dist/models/RouteGuard.js.map +1 -0
  37. package/dist/models/RouteParams.d.ts +4 -0
  38. package/dist/models/RouteParams.d.ts.map +1 -0
  39. package/dist/models/RouteParams.js +2 -0
  40. package/dist/models/RouteParams.js.map +1 -0
  41. package/dist/models/index.d.ts +9 -0
  42. package/dist/models/index.d.ts.map +1 -0
  43. package/dist/models/index.js +2 -0
  44. package/dist/models/index.js.map +1 -0
  45. package/dist/router/Router.d.ts +20 -0
  46. package/dist/router/Router.d.ts.map +1 -0
  47. package/dist/router/Router.js +158 -0
  48. package/dist/router/Router.js.map +1 -0
  49. package/dist/utils/compileRoute.d.ts +3 -0
  50. package/dist/utils/compileRoute.d.ts.map +1 -0
  51. package/dist/utils/compileRoute.js +30 -0
  52. package/dist/utils/compileRoute.js.map +1 -0
  53. package/dist/utils/index.d.ts +4 -0
  54. package/dist/utils/index.d.ts.map +1 -0
  55. package/dist/utils/index.js +4 -0
  56. package/dist/utils/index.js.map +1 -0
  57. package/dist/utils/matchRoute.d.ts +3 -0
  58. package/dist/utils/matchRoute.d.ts.map +1 -0
  59. package/dist/utils/matchRoute.js +25 -0
  60. package/dist/utils/matchRoute.js.map +1 -0
  61. package/package.json +1 -1
  62. package/dist/elements/__tests__/RouteElement.test.d.ts +0 -0
  63. package/dist/elements/__tests__/RouteElement.test.d.ts.map +0 -0
  64. package/dist/elements/__tests__/RouteElement.test.js +0 -77
  65. package/dist/elements/__tests__/RouteElement.test.js.map +0 -0
  66. package/dist/elements/__tests__/RouterElement.test.d.ts +0 -0
  67. package/dist/elements/__tests__/RouterElement.test.d.ts.map +0 -0
  68. package/dist/elements/__tests__/RouterElement.test.js +0 -0
  69. package/dist/elements/__tests__/RouterElement.test.js.map +0 -0
  70. package/dist/prettier.config.d.ts +0 -0
  71. package/dist/prettier.config.d.ts.map +0 -0
  72. package/dist/router/__tests__/Router.test.d.ts +0 -0
  73. package/dist/router/__tests__/Router.test.d.ts.map +0 -0
  74. package/dist/router/__tests__/Router.test.js +0 -0
  75. package/dist/router/__tests__/Router.test.js.map +0 -0
  76. package/dist/src/elements/RouteElement.d.ts +0 -11
  77. package/dist/src/elements/RouteElement.d.ts.map +0 -1
  78. package/dist/src/elements/RouterElement.d.ts +0 -12
  79. package/dist/src/elements/RouterElement.d.ts.map +0 -1
  80. package/dist/src/elements/__tests__/RouteElement.test.d.ts +0 -0
  81. package/dist/src/elements/__tests__/RouteElement.test.d.ts.map +0 -0
  82. package/dist/src/elements/__tests__/RouterElement.test.d.ts +0 -0
  83. package/dist/src/elements/__tests__/RouterElement.test.d.ts.map +0 -0
  84. package/dist/src/index.d.ts +0 -6
  85. package/dist/src/index.d.ts.map +0 -1
  86. package/dist/src/models/CompiledRoute.d.ts +0 -7
  87. package/dist/src/models/CompiledRoute.d.ts.map +0 -1
  88. package/dist/src/models/MatchedRoute.d.ts +0 -7
  89. package/dist/src/models/MatchedRoute.d.ts.map +0 -1
  90. package/dist/src/models/RouteComponent.d.ts +0 -6
  91. package/dist/src/models/RouteComponent.d.ts.map +0 -1
  92. package/dist/src/models/RouteContext.d.ts +0 -7
  93. package/dist/src/models/RouteContext.d.ts.map +0 -1
  94. package/dist/src/models/RouteDefinition.d.ts +0 -6
  95. package/dist/src/models/RouteDefinition.d.ts.map +0 -1
  96. package/dist/src/models/RouteGuard.d.ts +0 -3
  97. package/dist/src/models/RouteGuard.d.ts.map +0 -1
  98. package/dist/src/models/RouteParams.d.ts +0 -4
  99. package/dist/src/models/RouteParams.d.ts.map +0 -1
  100. package/dist/src/models/index.d.ts +0 -9
  101. package/dist/src/models/index.d.ts.map +0 -1
  102. package/dist/src/router/Router.d.ts +0 -20
  103. package/dist/src/router/Router.d.ts.map +0 -1
  104. package/dist/src/router/__tests__/Router.test.d.ts +0 -0
  105. package/dist/src/router/__tests__/Router.test.d.ts.map +0 -0
  106. package/dist/src/stories/RouterElement.stories.d.ts +0 -0
  107. package/dist/src/stories/RouterElement.stories.d.ts.map +0 -0
  108. package/dist/src/stories/RouterElement.stories.test.d.ts +0 -0
  109. package/dist/src/stories/RouterElement.stories.test.d.ts.map +0 -0
  110. package/dist/src/utils/__tests__/compileRoute.test.d.ts +0 -0
  111. package/dist/src/utils/__tests__/compileRoute.test.d.ts.map +0 -0
  112. package/dist/src/utils/__tests__/matchRoute.test.d.ts +0 -0
  113. package/dist/src/utils/__tests__/matchRoute.test.d.ts.map +0 -0
  114. package/dist/src/utils/compileRoute.d.ts +0 -3
  115. package/dist/src/utils/compileRoute.d.ts.map +0 -1
  116. package/dist/src/utils/index.d.ts +0 -4
  117. package/dist/src/utils/index.d.ts.map +0 -1
  118. package/dist/src/utils/matchRoute.d.ts +0 -3
  119. package/dist/src/utils/matchRoute.d.ts.map +0 -1
  120. package/dist/stories/RouterElement.stories.d.ts +0 -0
  121. package/dist/stories/RouterElement.stories.d.ts.map +0 -0
  122. package/dist/stories/RouterElement.stories.js +0 -0
  123. package/dist/stories/RouterElement.stories.js.map +0 -0
  124. package/dist/utils/__tests__/compileRoute.test.d.ts +0 -0
  125. package/dist/utils/__tests__/compileRoute.test.d.ts.map +0 -0
  126. package/dist/utils/__tests__/compileRoute.test.js +0 -0
  127. package/dist/utils/__tests__/compileRoute.test.js.map +0 -0
  128. package/dist/utils/__tests__/matchRoute.test.d.ts +0 -0
  129. package/dist/utils/__tests__/matchRoute.test.d.ts.map +0 -0
  130. package/dist/utils/__tests__/matchRoute.test.js +0 -0
  131. package/dist/utils/__tests__/matchRoute.test.js.map +0 -0
@@ -0,0 +1,11 @@
1
+ import type { RouteDefinition } from '../models/index.js';
2
+ export interface RouteElementEnv {
3
+ document?: Document;
4
+ }
5
+ export declare class RouteElement extends HTMLElement {
6
+ static readonly tag = "wavelength-route";
7
+ get path(): string;
8
+ get componentTag(): string;
9
+ toDefinition(env?: RouteElementEnv): RouteDefinition | null;
10
+ }
11
+ //# sourceMappingURL=RouteElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteElement.d.ts","sourceRoot":"","sources":["../../src/elements/RouteElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,YAAa,SAAQ,WAAW;IAC3C,gBAAuB,GAAG,sBAAsB;IAEhD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,YAAY,CAAC,GAAG,GAAE,eAAoB,GAAG,eAAe,GAAG,IAAI;CAyCvE"}
@@ -0,0 +1,44 @@
1
+ export class RouteElement extends HTMLElement {
2
+ static tag = 'wavelength-route';
3
+ get path() {
4
+ return this.getAttribute('path') ?? '*';
5
+ }
6
+ get componentTag() {
7
+ return this.getAttribute('component') ?? '';
8
+ }
9
+ toDefinition(env = {}) {
10
+ const tag = this.componentTag;
11
+ const doc = env.document;
12
+ if (!tag) {
13
+ console.warn(`[route] Missing 'component' attribute on path="${this.path}"`);
14
+ return null;
15
+ }
16
+ if (!doc) {
17
+ return {
18
+ path: this.path,
19
+ routeComponent: {
20
+ mount() { },
21
+ unmount() { },
22
+ },
23
+ };
24
+ }
25
+ const routeComponent = {
26
+ mount: (container, routeContext) => {
27
+ const element = doc.createElement(tag);
28
+ element.routeContext = routeContext;
29
+ container.appendChild(element);
30
+ },
31
+ unmount: () => {
32
+ // optional: future cleanup hook
33
+ },
34
+ };
35
+ return {
36
+ path: this.path,
37
+ routeComponent,
38
+ };
39
+ }
40
+ }
41
+ if (!customElements.get(RouteElement.tag)) {
42
+ customElements.define(RouteElement.tag, RouteElement);
43
+ }
44
+ //# sourceMappingURL=RouteElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteElement.js","sourceRoot":"","sources":["../../src/elements/RouteElement.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,YAAa,SAAQ,WAAW;IACpC,MAAM,CAAU,GAAG,GAAG,kBAAkB,CAAC;IAEhD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAC1C,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAEM,YAAY,CAAC,MAAuB,EAAE;QAC3C,MAAM,GAAG,GAAW,IAAI,CAAC,YAAY,CAAC;QACtC,MAAM,GAAG,GAAyB,GAAG,CAAC,QAAQ,CAAC;QAE/C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CACR,kDAAkD,IAAI,CAAC,IAAI,GAAG,CACjE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE;oBACd,KAAK,KAAI,CAAC;oBACV,OAAO,KAAI,CAAC;iBACb;aACF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAmB;YACrC,KAAK,EAAE,CAAC,SAAsB,EAAE,YAA0B,EAAE,EAAE;gBAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAEpC,CAAC;gBAEF,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;gBAEpC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,gCAAgC;YAClC,CAAC;SACF,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,cAAc;SACf,CAAC;IACJ,CAAC;;AAGH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare class RouterElement extends HTMLElement {
2
+ #private;
3
+ static readonly tag = "wavelength-router";
4
+ static get observedAttributes(): string[];
5
+ connectedCallback(): void;
6
+ disconnectedCallback(): void;
7
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
8
+ navigate(path: string): void;
9
+ replace(path: string): void;
10
+ back(): void;
11
+ }
12
+ //# sourceMappingURL=RouterElement.d.ts.map
@@ -0,0 +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;IAIjD,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IAEM,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B,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;CA0DpB"}
@@ -0,0 +1,70 @@
1
+ import { Router } from '../router/Router.js';
2
+ export class RouterElement extends HTMLElement {
3
+ static tag = 'wavelength-router';
4
+ #router;
5
+ static get observedAttributes() {
6
+ return ['hash-mode', 'guard'];
7
+ }
8
+ connectedCallback() {
9
+ this.#bootstrap();
10
+ }
11
+ disconnectedCallback() {
12
+ this.#teardown();
13
+ }
14
+ attributeChangedCallback(name, oldValue, newValue) {
15
+ if (!this.isConnected || oldValue === newValue)
16
+ return;
17
+ this.#bootstrap();
18
+ }
19
+ navigate(path) {
20
+ this.#router?.navigate(path);
21
+ }
22
+ replace(path) {
23
+ this.#router?.replace(path);
24
+ }
25
+ back() {
26
+ this.#router?.back();
27
+ }
28
+ #bootstrap() {
29
+ this.#teardown();
30
+ const routes = this.#collectRoutes();
31
+ if (routes.length === 0) {
32
+ console.warn('[wavelength-router] No <wavelength-route> children found.');
33
+ return;
34
+ }
35
+ const guard = this.#resolveGuard();
36
+ this.#router = new Router(routes, {
37
+ outlet: this,
38
+ hashMode: this.hasAttribute('hash-mode'),
39
+ ...(guard ? { beforeEach: guard } : {}),
40
+ }, {
41
+ window: window,
42
+ document: document,
43
+ });
44
+ this.#router.start();
45
+ }
46
+ #teardown() {
47
+ this.#router?.destroy();
48
+ }
49
+ #collectRoutes() {
50
+ const routeElements = Array.from(this.querySelectorAll('wavelength-route'));
51
+ return routeElements
52
+ .map((routeElement) => routeElement.toDefinition({ document }))
53
+ .filter((routeDefinition) => routeDefinition !== null);
54
+ }
55
+ #resolveGuard() {
56
+ const guardName = this.getAttribute('guard');
57
+ if (!guardName)
58
+ return undefined;
59
+ const fn = window[guardName];
60
+ if (typeof fn !== 'function') {
61
+ console.warn(`[wavelength-router] Guard "${guardName}" not found on window.`);
62
+ return undefined;
63
+ }
64
+ return fn;
65
+ }
66
+ }
67
+ if (!customElements.get(RouterElement.tag)) {
68
+ customElements.define(RouterElement.tag, RouterElement);
69
+ }
70
+ //# sourceMappingURL=RouterElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouterElement.js","sourceRoot":"","sources":["../../src/elements/RouterElement.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -0,0 +1,6 @@
1
+ export { Router } from './router/Router.js';
2
+ export { RouterElement } from './elements/RouterElement.js';
3
+ export { RouteElement } from './elements/RouteElement.js';
4
+ export type { RouteComponent, RouteContext, RouteDefinition, RouteGuard, RouteParams, CompiledRoute, MatchedRoute, } from './models/index.ts';
5
+ export { compileRoute, matchRoute } from './utils/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,YAAY,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -0,0 +1,5 @@
1
+ export { Router } from './router/Router.js';
2
+ export { RouterElement } from './elements/RouterElement.js';
3
+ export { RouteElement } from './elements/RouteElement.js';
4
+ export { compileRoute, matchRoute } from './utils/index.js';
5
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAY1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { RouteDefinition } from './RouteDefinition.js';
2
+ export interface CompiledRoute {
3
+ routeDefinition: RouteDefinition;
4
+ pattern: RegExp;
5
+ paramNames: string[];
6
+ }
7
+ //# sourceMappingURL=CompiledRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompiledRoute.d.ts","sourceRoot":"","sources":["../../src/models/CompiledRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CompiledRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompiledRoute.js","sourceRoot":"","sources":["../../src/models/CompiledRoute.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { RouteDefinition } from './RouteDefinition.js';
2
+ import type { RouteParams } from './RouteParams.js';
3
+ export interface MatchedRoute {
4
+ routeDefinition: RouteDefinition;
5
+ routeParams: RouteParams;
6
+ }
7
+ //# sourceMappingURL=MatchedRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatchedRoute.d.ts","sourceRoot":"","sources":["../../src/models/MatchedRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MatchedRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatchedRoute.js","sourceRoot":"","sources":["../../src/models/MatchedRoute.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { RouteContext } from './RouteContext.js';
2
+ export interface RouteComponent {
3
+ mount(container: HTMLElement, context: RouteContext): void;
4
+ unmount?(): void;
5
+ }
6
+ //# sourceMappingURL=RouteComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteComponent.d.ts","sourceRoot":"","sources":["../../src/models/RouteComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3D,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RouteComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteComponent.js","sourceRoot":"","sources":["../../src/models/RouteComponent.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { RouteParams } from './RouteParams.js';
2
+ export interface RouteContext {
3
+ path: string;
4
+ routeParams: RouteParams;
5
+ query: URLSearchParams;
6
+ }
7
+ //# sourceMappingURL=RouteContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteContext.d.ts","sourceRoot":"","sources":["../../src/models/RouteContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RouteContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteContext.js","sourceRoot":"","sources":["../../src/models/RouteContext.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { RouteComponent } from './RouteComponent.js';
2
+ export interface RouteDefinition {
3
+ path: string;
4
+ routeComponent: RouteComponent;
5
+ }
6
+ //# sourceMappingURL=RouteDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteDefinition.d.ts","sourceRoot":"","sources":["../../src/models/RouteDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RouteDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteDefinition.js","sourceRoot":"","sources":["../../src/models/RouteDefinition.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { RouteContext } from './RouteContext.js';
2
+ export type RouteGuard = (to: RouteContext, next: (redirect?: string) => void) => void;
3
+ //# sourceMappingURL=RouteGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteGuard.d.ts","sourceRoot":"","sources":["../../src/models/RouteGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,KAC9B,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RouteGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteGuard.js","sourceRoot":"","sources":["../../src/models/RouteGuard.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface RouteParams {
2
+ [key: string]: string;
3
+ }
4
+ //# sourceMappingURL=RouteParams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteParams.d.ts","sourceRoot":"","sources":["../../src/models/RouteParams.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RouteParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteParams.js","sourceRoot":"","sources":["../../src/models/RouteParams.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { CompiledRoute } from './CompiledRoute.js';
2
+ import type { MatchedRoute } from './MatchedRoute.js';
3
+ import type { RouteComponent } from './RouteComponent.js';
4
+ import type { RouteContext } from './RouteContext.js';
5
+ import type { RouteDefinition } from './RouteDefinition.js';
6
+ import type { RouteGuard } from './RouteGuard.js';
7
+ import type { RouteParams } from './RouteParams.js';
8
+ export type { CompiledRoute, MatchedRoute, RouteComponent, RouteContext, RouteDefinition, RouteGuard, RouteParams, };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,WAAW,GACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { RouteDefinition, RouteGuard } from '../models/index.js';
2
+ export interface RouterEnv {
3
+ window?: Window;
4
+ document?: Document;
5
+ }
6
+ export interface RouterOptions {
7
+ outlet?: HTMLElement;
8
+ hashMode?: boolean;
9
+ beforeEach?: RouteGuard;
10
+ }
11
+ export declare class Router {
12
+ #private;
13
+ constructor(routeDefinitions: RouteDefinition[], routerOptions?: RouterOptions, env?: RouterEnv);
14
+ start(): void;
15
+ destroy(): void;
16
+ navigate(path: string): void;
17
+ replace(path: string): void;
18
+ back(): void;
19
+ }
20
+ //# sourceMappingURL=Router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/router/Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,eAAe,EACf,UAAU,EACX,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,MAAM;;gBAYf,gBAAgB,EAAE,eAAe,EAAE,EACnC,aAAa,GAAE,aAAkB,EACjC,GAAG,GAAE,SAAc;IAoBd,KAAK,IAAI,IAAI;IAab,OAAO,IAAI,IAAI;IAUf,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY3B,IAAI,IAAI,IAAI;CA0HpB"}
@@ -0,0 +1,158 @@
1
+ import { compileRoute, matchRoute } from '../utils/index.js';
2
+ export class Router {
3
+ #compiledRoutes;
4
+ #hashMode;
5
+ #outlet;
6
+ #beforeEach;
7
+ #currentComponent;
8
+ #window;
9
+ #document;
10
+ #isStarted = false;
11
+ constructor(routeDefinitions, routerOptions = {}, env = {}) {
12
+ this.#compiledRoutes = routeDefinitions.map(compileRoute);
13
+ this.#hashMode = routerOptions.hashMode ?? false;
14
+ if (routerOptions.beforeEach !== undefined) {
15
+ this.#beforeEach = routerOptions.beforeEach;
16
+ }
17
+ if (env.window !== undefined) {
18
+ this.#window = env.window;
19
+ }
20
+ if (env.document !== undefined) {
21
+ this.#document = env.document;
22
+ }
23
+ this.#outlet = routerOptions.outlet ?? this.#document?.body ?? undefined;
24
+ }
25
+ start() {
26
+ if (!this.#window?.addEventListener || !this.#document?.addEventListener) {
27
+ throw new Error('[Router] Invalid environment: missing DOM APIs');
28
+ }
29
+ if (this.#isStarted)
30
+ return;
31
+ this.#bindEvents();
32
+ this.#resolve();
33
+ this.#isStarted = true;
34
+ }
35
+ destroy() {
36
+ if (!this.#window || !this.#document)
37
+ return;
38
+ this.#window.removeEventListener('popstate', this.#handlePopState);
39
+ this.#document.removeEventListener('click', this.#handleClick);
40
+ this.#currentComponent?.unmount?.();
41
+ this.#isStarted = false;
42
+ }
43
+ navigate(path) {
44
+ if (!this.#window)
45
+ return;
46
+ if (this.#hashMode) {
47
+ this.#window.location.hash = path;
48
+ }
49
+ else {
50
+ this.#window.history.pushState(null, '', path);
51
+ }
52
+ this.#resolve();
53
+ }
54
+ replace(path) {
55
+ if (!this.#window)
56
+ return;
57
+ if (this.#hashMode) {
58
+ this.#window.location.replace('#' + path);
59
+ }
60
+ else {
61
+ this.#window.history.replaceState(null, '', path);
62
+ }
63
+ this.#resolve();
64
+ }
65
+ back() {
66
+ this.#window?.history.back();
67
+ }
68
+ #bindEvents() {
69
+ this.#window.addEventListener('popstate', this.#handlePopState);
70
+ this.#document.addEventListener('click', this.#handleClick);
71
+ }
72
+ #handlePopState = () => {
73
+ this.#resolve();
74
+ };
75
+ #handleClick = (event) => {
76
+ const target = event.target;
77
+ const anchor = target?.closest?.('a');
78
+ if (!anchor)
79
+ return;
80
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
81
+ return;
82
+ if (anchor.target === '_blank')
83
+ return;
84
+ const href = anchor.getAttribute('href');
85
+ if (!href)
86
+ return;
87
+ if (href.startsWith('http') ||
88
+ href.startsWith('//') ||
89
+ href.startsWith('mailto:') ||
90
+ href.startsWith('tel:')) {
91
+ return;
92
+ }
93
+ event.preventDefault();
94
+ this.navigate(href);
95
+ };
96
+ #currentPath() {
97
+ if (!this.#window)
98
+ return '/';
99
+ if (this.#hashMode) {
100
+ const hash = this.#window.location.hash.slice(1);
101
+ return hash || '/';
102
+ }
103
+ return this.#window.location.pathname || '/';
104
+ }
105
+ #currentQuery() {
106
+ if (!this.#window)
107
+ return new URLSearchParams();
108
+ if (this.#hashMode) {
109
+ const hash = this.#window.location.hash;
110
+ const queryIndex = hash.indexOf('?');
111
+ if (queryIndex >= 0) {
112
+ return new URLSearchParams(hash.slice(queryIndex));
113
+ }
114
+ return new URLSearchParams();
115
+ }
116
+ return new URLSearchParams(this.#window.location.search);
117
+ }
118
+ #mount(routeComponent, routeContext) {
119
+ if (!this.#outlet)
120
+ return;
121
+ this.#currentComponent?.unmount?.();
122
+ this.#outlet.replaceChildren();
123
+ routeComponent.mount(this.#outlet, routeContext);
124
+ this.#currentComponent = routeComponent;
125
+ }
126
+ #resolve() {
127
+ const pathname = this.#currentPath();
128
+ const query = this.#currentQuery();
129
+ const match = matchRoute(this.#compiledRoutes, pathname);
130
+ if (!match) {
131
+ console.warn(`[Router] No route matched: ${pathname}`);
132
+ return;
133
+ }
134
+ const context = {
135
+ path: pathname,
136
+ routeParams: match.routeParams,
137
+ query,
138
+ };
139
+ if (!this.#beforeEach) {
140
+ this.#mount(match.routeDefinition.routeComponent, context);
141
+ return;
142
+ }
143
+ let redirected = false;
144
+ const next = (redirect) => {
145
+ if (redirected)
146
+ return;
147
+ redirected = true;
148
+ if (redirect && redirect !== context.path) {
149
+ this.navigate(redirect);
150
+ }
151
+ else {
152
+ this.#mount(match.routeDefinition.routeComponent, context);
153
+ }
154
+ };
155
+ this.#beforeEach(context, next);
156
+ }
157
+ }
158
+ //# sourceMappingURL=Router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/router/Router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CompiledRoute, RouteDefinition } from '../models/index.ts';
2
+ export declare function compileRoute(routeDefinition: RouteDefinition): CompiledRoute;
3
+ //# sourceMappingURL=compileRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileRoute.d.ts","sourceRoot":"","sources":["../../src/utils/compileRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMzE,wBAAgB,YAAY,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CA8B5E"}
@@ -0,0 +1,30 @@
1
+ function escapeRegex(str) {
2
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
3
+ }
4
+ export function compileRoute(routeDefinition) {
5
+ const paramNames = [];
6
+ if (routeDefinition.path === '*') {
7
+ return {
8
+ routeDefinition,
9
+ pattern: /^.*$/,
10
+ paramNames,
11
+ };
12
+ }
13
+ const pattern = routeDefinition.path
14
+ .split('/')
15
+ .map((segment) => {
16
+ const match = /^:([a-zA-Z_]\w*)$/.exec(segment);
17
+ if (match) {
18
+ paramNames.push(match[1]);
19
+ return '([^/]+)';
20
+ }
21
+ return escapeRegex(segment);
22
+ })
23
+ .join('\\/');
24
+ return {
25
+ routeDefinition,
26
+ pattern: new RegExp(`^${pattern}$`),
27
+ paramNames,
28
+ };
29
+ }
30
+ //# sourceMappingURL=compileRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileRoute.js","sourceRoot":"","sources":["../../src/utils/compileRoute.ts"],"names":[],"mappings":"AAEA,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,eAAgC;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,eAAe,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACjC,OAAO;YACL,eAAe;YACf,OAAO,EAAE,MAAM;YACf,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI;SAC/B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO;QACL,eAAe;QACf,OAAO,EAAE,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC;QACnC,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { compileRoute } from './compileRoute.js';
2
+ import { matchRoute } from './matchRoute.js';
3
+ export { compileRoute, matchRoute };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { compileRoute } from './compileRoute.js';
2
+ import { matchRoute } from './matchRoute.js';
3
+ export { compileRoute, matchRoute };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CompiledRoute, MatchedRoute } from '../models/index.ts';
2
+ export declare function matchRoute(compiledRoutes: CompiledRoute[], pathname: string): MatchedRoute | null;
3
+ //# sourceMappingURL=matchRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchRoute.d.ts","sourceRoot":"","sources":["../../src/utils/matchRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,UAAU,CACtB,cAAc,EAAE,aAAa,EAAE,EAC/B,QAAQ,EAAE,MAAM,GACjB,YAAY,GAAG,IAAI,CA2BrB"}
@@ -0,0 +1,25 @@
1
+ export function matchRoute(compiledRoutes, pathname) {
2
+ for (const compiledRoute of compiledRoutes) {
3
+ const match = compiledRoute.pattern.exec(pathname);
4
+ if (!match)
5
+ continue;
6
+ const routeParams = {};
7
+ compiledRoute.paramNames.forEach((name, i) => {
8
+ const value = match[i + 1];
9
+ if (value === undefined)
10
+ return;
11
+ try {
12
+ routeParams[name] = decodeURIComponent(value);
13
+ }
14
+ catch {
15
+ routeParams[name] = value;
16
+ }
17
+ });
18
+ return {
19
+ routeDefinition: compiledRoute.routeDefinition,
20
+ routeParams,
21
+ };
22
+ }
23
+ return null;
24
+ }
25
+ //# sourceMappingURL=matchRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchRoute.js","sourceRoot":"","sources":["../../src/utils/matchRoute.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,UAAU,CACtB,cAA+B,EAC/B,QAAgB;IAElB,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,KAAK,GAA4B,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5E,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,WAAW,GAAgB,EAAE,CAAC;QAEpC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAuB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/C,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAEhC,IAAI,CAAC;gBACH,WAAW,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavelengthusaf/client-router",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Native TypeScript Router",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
File without changes
@@ -1,77 +0,0 @@
1
- import { describe, expect, it, vi, beforeEach } from 'vitest';
2
- import { RouteElement } from '../RouteElement.ts';
3
- /* eslint-disable @typescript-eslint/no-explicit-any */
4
- describe('RouteElement', () => {
5
- beforeEach(() => {
6
- if (!customElements.get(RouteElement.tag)) {
7
- customElements.define(RouteElement.tag, RouteElement);
8
- }
9
- document.body.innerHTML = '';
10
- });
11
- describe('Attribute Accessors & toDefinition Logic', () => {
12
- it.each([
13
- {
14
- it: 'returns default path "*" if attribute is missing',
15
- html: `<wavelength-route component="my-view"></wavelength-route>`,
16
- expectedPath: '*',
17
- expectedTag: 'my-view'
18
- },
19
- {
20
- it: 'extracts specified path and component tag',
21
- html: `<wavelength-route path="/home" component="home-view"></wavelength-route>`,
22
- expectedPath: '/home',
23
- expectedTag: 'home-view'
24
- },
25
- {
26
- it: 'returns null and warns if component attribute is missing',
27
- html: `<wavelength-route path="/error"></wavelength-route>`,
28
- expectedPath: '/error',
29
- expectedTag: '',
30
- shouldBeNull: true
31
- }
32
- ])('$it', ({ html, expectedPath, expectedTag, shouldBeNull }) => {
33
- document.body.innerHTML = html;
34
- const el = document.querySelector('wavelength-route');
35
- const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
36
- expect(el.path).toBe(expectedPath);
37
- expect(el.componentTag).toBe(expectedTag);
38
- const def = el.toDefinition({ document });
39
- if (shouldBeNull) {
40
- expect(def).toBeNull();
41
- expect(warnSpy).toHaveBeenCalled();
42
- }
43
- else {
44
- expect(def?.path).toBe(expectedPath);
45
- expect(def?.routeComponent).toBeDefined();
46
- }
47
- warnSpy.mockRestore();
48
- });
49
- });
50
- describe('SSR / Environment Resilience', () => {
51
- it('returns a no-op component if document is missing', () => {
52
- const el = document.createElement('wavelength-route');
53
- el.setAttribute('component', 'test-view');
54
- const def = el.toDefinition({});
55
- expect(def?.path).toBe('*');
56
- expect(def?.routeComponent.mount).toBeInstanceOf(Function);
57
- expect(() => def?.routeComponent.mount({}, {})).not.toThrow();
58
- expect(() => def?.routeComponent.unmount?.()).not.toThrow();
59
- });
60
- });
61
- describe('RouteComponent Mounting Logic', () => {
62
- it('properly creates element and injects context on mount', () => {
63
- const el = document.createElement('wavelength-route');
64
- el.setAttribute('component', 'user-profile');
65
- const def = el.toDefinition({ document });
66
- const container = document.createElement('div');
67
- const mockContext = { path: '/user/1', routeParams: { id: '1' }, query: new URLSearchParams() };
68
- def?.routeComponent.mount(container, mockContext);
69
- const renderedElement = container.querySelector('user-profile');
70
- expect(renderedElement).toBeDefined();
71
- expect(renderedElement.routeContext).toEqual(mockContext);
72
- expect(def?.routeComponent.unmount).toBeDefined();
73
- def?.routeComponent.unmount?.();
74
- });
75
- });
76
- });
77
- //# sourceMappingURL=RouteElement.test.js.map
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,11 +0,0 @@
1
- import type { RouteDefinition } from '../models/index.ts';
2
- export interface RouteElementEnv {
3
- document?: Document;
4
- }
5
- export declare class RouteElement extends HTMLElement {
6
- static readonly tag = "wavelength-route";
7
- get path(): string;
8
- get componentTag(): string;
9
- toDefinition(env?: RouteElementEnv): RouteDefinition | null;
10
- }
11
- //# sourceMappingURL=RouteElement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteElement.d.ts","sourceRoot":"","sources":["../../../src/elements/RouteElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,YAAa,SAAQ,WAAW;IAC3C,gBAAuB,GAAG,sBAAsB;IAEhD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,YAAY,CAAC,GAAG,GAAE,eAAoB,GAAG,eAAe,GAAG,IAAI;CAyCvE"}
@@ -1,12 +0,0 @@
1
- export declare class RouterElement extends HTMLElement {
2
- #private;
3
- static readonly tag = "wavelength-router";
4
- static get observedAttributes(): string[];
5
- connectedCallback(): void;
6
- disconnectedCallback(): void;
7
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
8
- navigate(path: string): void;
9
- replace(path: string): void;
10
- back(): void;
11
- }
12
- //# sourceMappingURL=RouterElement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouterElement.d.ts","sourceRoot":"","sources":["../../../src/elements/RouterElement.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAc,SAAQ,WAAW;;IAC5C,gBAAuB,GAAG,uBAAuB;IAIjD,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IAEM,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B,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;CA0DpB"}
@@ -1,6 +0,0 @@
1
- export { Router } from './router/Router.ts';
2
- export { RouterElement } from './elements/RouterElement.ts';
3
- export { RouteElement } from './elements/RouteElement.ts';
4
- export type { RouteComponent, RouteContext, RouteDefinition, RouteGuard, RouteParams, CompiledRoute, MatchedRoute, } from './models/index.ts';
5
- export { compileRoute, matchRoute } from './utils/index.ts';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,YAAY,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { RouteDefinition } from './RouteDefinition.js';
2
- export interface CompiledRoute {
3
- routeDefinition: RouteDefinition;
4
- pattern: RegExp;
5
- paramNames: string[];
6
- }
7
- //# sourceMappingURL=CompiledRoute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompiledRoute.d.ts","sourceRoot":"","sources":["../../../src/models/CompiledRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB"}
@@ -1,7 +0,0 @@
1
- import type { RouteDefinition } from './RouteDefinition.ts';
2
- import type { RouteParams } from './RouteParams.ts';
3
- export interface MatchedRoute {
4
- routeDefinition: RouteDefinition;
5
- routeParams: RouteParams;
6
- }
7
- //# sourceMappingURL=MatchedRoute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MatchedRoute.d.ts","sourceRoot":"","sources":["../../../src/models/MatchedRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B"}
@@ -1,6 +0,0 @@
1
- import type { RouteContext } from './RouteContext.ts';
2
- export interface RouteComponent {
3
- mount(container: HTMLElement, context: RouteContext): void;
4
- unmount?(): void;
5
- }
6
- //# sourceMappingURL=RouteComponent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteComponent.d.ts","sourceRoot":"","sources":["../../../src/models/RouteComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3D,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB"}
@@ -1,7 +0,0 @@
1
- import type { RouteParams } from './RouteParams.ts';
2
- export interface RouteContext {
3
- path: string;
4
- routeParams: RouteParams;
5
- query: URLSearchParams;
6
- }
7
- //# sourceMappingURL=RouteContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteContext.d.ts","sourceRoot":"","sources":["../../../src/models/RouteContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB"}
@@ -1,6 +0,0 @@
1
- import type { RouteComponent } from './RouteComponent.ts';
2
- export interface RouteDefinition {
3
- path: string;
4
- routeComponent: RouteComponent;
5
- }
6
- //# sourceMappingURL=RouteDefinition.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteDefinition.d.ts","sourceRoot":"","sources":["../../../src/models/RouteDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;CAChC"}
@@ -1,3 +0,0 @@
1
- import type { RouteContext } from './RouteContext.ts';
2
- export type RouteGuard = (to: RouteContext, next: (redirect?: string) => void) => void;
3
- //# sourceMappingURL=RouteGuard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteGuard.d.ts","sourceRoot":"","sources":["../../../src/models/RouteGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,KAC9B,IAAI,CAAC"}
@@ -1,4 +0,0 @@
1
- export interface RouteParams {
2
- [key: string]: string;
3
- }
4
- //# sourceMappingURL=RouteParams.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteParams.d.ts","sourceRoot":"","sources":["../../../src/models/RouteParams.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB"}
@@ -1,9 +0,0 @@
1
- import type { CompiledRoute } from './CompiledRoute.ts';
2
- import type { MatchedRoute } from './MatchedRoute.ts';
3
- import type { RouteComponent } from './RouteComponent.ts';
4
- import type { RouteContext } from './RouteContext.ts';
5
- import type { RouteDefinition } from './RouteDefinition.ts';
6
- import type { RouteGuard } from './RouteGuard.ts';
7
- import type { RouteParams } from './RouteParams.ts';
8
- export type { CompiledRoute, MatchedRoute, RouteComponent, RouteContext, RouteDefinition, RouteGuard, RouteParams, };
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,WAAW,GACZ,CAAC"}
@@ -1,20 +0,0 @@
1
- import type { RouteDefinition, RouteGuard } from '../models/index.ts';
2
- export interface RouterEnv {
3
- window?: Window;
4
- document?: Document;
5
- }
6
- export interface RouterOptions {
7
- outlet?: HTMLElement;
8
- hashMode?: boolean;
9
- beforeEach?: RouteGuard;
10
- }
11
- export declare class Router {
12
- #private;
13
- constructor(routeDefinitions: RouteDefinition[], routerOptions?: RouterOptions, env?: RouterEnv);
14
- start(): void;
15
- destroy(): void;
16
- navigate(path: string): void;
17
- replace(path: string): void;
18
- back(): void;
19
- }
20
- //# sourceMappingURL=Router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../src/router/Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,eAAe,EACf,UAAU,EACX,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,MAAM;;gBAYf,gBAAgB,EAAE,eAAe,EAAE,EACnC,aAAa,GAAE,aAAkB,EACjC,GAAG,GAAE,SAAc;IAoBd,KAAK,IAAI,IAAI;IAab,OAAO,IAAI,IAAI;IAUf,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY3B,IAAI,IAAI,IAAI;CA0HpB"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,3 +0,0 @@
1
- import type { CompiledRoute, RouteDefinition } from '../models/index.ts';
2
- export declare function compileRoute(routeDefinition: RouteDefinition): CompiledRoute;
3
- //# sourceMappingURL=compileRoute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compileRoute.d.ts","sourceRoot":"","sources":["../../../src/utils/compileRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMzE,wBAAgB,YAAY,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CA8B5E"}
@@ -1,4 +0,0 @@
1
- import { compileRoute } from './compileRoute.ts';
2
- import { matchRoute } from './matchRoute.ts';
3
- export { compileRoute, matchRoute };
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { CompiledRoute, MatchedRoute } from '../models/index.ts';
2
- export declare function matchRoute(compiledRoutes: CompiledRoute[], pathname: string): MatchedRoute | null;
3
- //# sourceMappingURL=matchRoute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matchRoute.d.ts","sourceRoot":"","sources":["../../../src/utils/matchRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,UAAU,CACtB,cAAc,EAAE,aAAa,EAAE,EAC/B,QAAQ,EAAE,MAAM,GACjB,YAAY,GAAG,IAAI,CA2BrB"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes