@esmx/router 3.0.0-rc.18 → 3.0.0-rc.19
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/LICENSE +1 -1
- package/README.md +70 -0
- package/README.zh-CN.md +70 -0
- package/dist/error.d.ts +23 -0
- package/dist/error.mjs +61 -0
- package/dist/increment-id.d.ts +7 -0
- package/dist/increment-id.mjs +11 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.mjs +14 -3
- package/dist/index.test.mjs +8 -0
- package/dist/location.d.ts +15 -0
- package/dist/location.mjs +53 -0
- package/dist/location.test.d.ts +8 -0
- package/dist/location.test.mjs +370 -0
- package/dist/matcher.d.ts +3 -0
- package/dist/matcher.mjs +44 -0
- package/dist/matcher.test.mjs +1492 -0
- package/dist/micro-app.d.ts +18 -0
- package/dist/micro-app.dom.test.d.ts +1 -0
- package/dist/micro-app.dom.test.mjs +532 -0
- package/dist/micro-app.mjs +80 -0
- package/dist/navigation.d.ts +43 -0
- package/dist/navigation.mjs +143 -0
- package/dist/navigation.test.d.ts +1 -0
- package/dist/navigation.test.mjs +681 -0
- package/dist/options.d.ts +4 -0
- package/dist/options.mjs +88 -0
- package/dist/route-task.d.ts +40 -0
- package/dist/route-task.mjs +75 -0
- package/dist/route-task.test.d.ts +1 -0
- package/dist/route-task.test.mjs +673 -0
- package/dist/route-transition.d.ts +53 -0
- package/dist/route-transition.mjs +307 -0
- package/dist/route-transition.test.d.ts +1 -0
- package/dist/route-transition.test.mjs +146 -0
- package/dist/route.d.ts +72 -0
- package/dist/route.mjs +194 -0
- package/dist/route.test.d.ts +1 -0
- package/dist/route.test.mjs +1664 -0
- package/dist/router-back.test.d.ts +1 -0
- package/dist/router-back.test.mjs +361 -0
- package/dist/router-forward.test.d.ts +1 -0
- package/dist/router-forward.test.mjs +376 -0
- package/dist/router-go.test.d.ts +1 -0
- package/dist/router-go.test.mjs +73 -0
- package/dist/router-guards-cleanup.test.d.ts +1 -0
- package/dist/router-guards-cleanup.test.mjs +437 -0
- package/dist/router-link.d.ts +10 -0
- package/dist/router-link.mjs +126 -0
- package/dist/router-push.test.d.ts +1 -0
- package/dist/router-push.test.mjs +115 -0
- package/dist/router-replace.test.d.ts +1 -0
- package/dist/router-replace.test.mjs +114 -0
- package/dist/router-resolve.test.d.ts +1 -0
- package/dist/router-resolve.test.mjs +393 -0
- package/dist/router-restart-app.dom.test.d.ts +1 -0
- package/dist/router-restart-app.dom.test.mjs +616 -0
- package/dist/router-window-navigation.test.d.ts +1 -0
- package/dist/router-window-navigation.test.mjs +359 -0
- package/dist/router.d.ts +109 -102
- package/dist/router.mjs +260 -361
- package/dist/types.d.ts +246 -0
- package/dist/types.mjs +18 -0
- package/dist/util.d.ts +26 -0
- package/dist/util.mjs +53 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.mjs +1020 -0
- package/package.json +10 -13
- package/src/error.ts +84 -0
- package/src/increment-id.ts +12 -0
- package/src/index.test.ts +9 -0
- package/src/index.ts +54 -3
- package/src/location.test.ts +406 -0
- package/src/location.ts +96 -0
- package/src/matcher.test.ts +1685 -0
- package/src/matcher.ts +59 -0
- package/src/micro-app.dom.test.ts +708 -0
- package/src/micro-app.ts +101 -0
- package/src/navigation.test.ts +858 -0
- package/src/navigation.ts +195 -0
- package/src/options.ts +131 -0
- package/src/route-task.test.ts +901 -0
- package/src/route-task.ts +105 -0
- package/src/route-transition.test.ts +178 -0
- package/src/route-transition.ts +425 -0
- package/src/route.test.ts +2014 -0
- package/src/route.ts +308 -0
- package/src/router-back.test.ts +487 -0
- package/src/router-forward.test.ts +506 -0
- package/src/router-go.test.ts +91 -0
- package/src/router-guards-cleanup.test.ts +595 -0
- package/src/router-link.ts +235 -0
- package/src/router-push.test.ts +140 -0
- package/src/router-replace.test.ts +139 -0
- package/src/router-resolve.test.ts +475 -0
- package/src/router-restart-app.dom.test.ts +783 -0
- package/src/router-window-navigation.test.ts +457 -0
- package/src/router.ts +289 -470
- package/src/types.ts +341 -0
- package/src/util.test.ts +1262 -0
- package/src/util.ts +116 -0
- package/dist/history/abstract.d.ts +0 -29
- package/dist/history/abstract.mjs +0 -107
- package/dist/history/base.d.ts +0 -79
- package/dist/history/base.mjs +0 -275
- package/dist/history/html.d.ts +0 -30
- package/dist/history/html.mjs +0 -183
- package/dist/history/index.d.ts +0 -7
- package/dist/history/index.mjs +0 -16
- package/dist/matcher/create-matcher.d.ts +0 -5
- package/dist/matcher/create-matcher.mjs +0 -218
- package/dist/matcher/create-matcher.spec.mjs +0 -0
- package/dist/matcher/index.d.ts +0 -1
- package/dist/matcher/index.mjs +0 -1
- package/dist/task-pipe/index.d.ts +0 -1
- package/dist/task-pipe/index.mjs +0 -1
- package/dist/task-pipe/task.d.ts +0 -30
- package/dist/task-pipe/task.mjs +0 -66
- package/dist/types/index.d.ts +0 -694
- package/dist/types/index.mjs +0 -6
- package/dist/utils/bom.d.ts +0 -5
- package/dist/utils/bom.mjs +0 -10
- package/dist/utils/encoding.d.ts +0 -48
- package/dist/utils/encoding.mjs +0 -44
- package/dist/utils/guards.d.ts +0 -9
- package/dist/utils/guards.mjs +0 -12
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.mjs +0 -27
- package/dist/utils/path.d.ts +0 -60
- package/dist/utils/path.mjs +0 -282
- package/dist/utils/path.spec.mjs +0 -27
- package/dist/utils/scroll.d.ts +0 -25
- package/dist/utils/scroll.mjs +0 -59
- package/dist/utils/utils.d.ts +0 -16
- package/dist/utils/utils.mjs +0 -11
- package/dist/utils/warn.d.ts +0 -2
- package/dist/utils/warn.mjs +0 -12
- package/src/history/abstract.ts +0 -149
- package/src/history/base.ts +0 -408
- package/src/history/html.ts +0 -228
- package/src/history/index.ts +0 -20
- package/src/matcher/create-matcher.spec.ts +0 -3
- package/src/matcher/create-matcher.ts +0 -292
- package/src/matcher/index.ts +0 -1
- package/src/task-pipe/index.ts +0 -1
- package/src/task-pipe/task.ts +0 -97
- package/src/types/index.ts +0 -858
- package/src/utils/bom.ts +0 -14
- package/src/utils/encoding.ts +0 -153
- package/src/utils/guards.ts +0 -25
- package/src/utils/index.ts +0 -27
- package/src/utils/path.spec.ts +0 -32
- package/src/utils/path.ts +0 -418
- package/src/utils/scroll.ts +0 -120
- package/src/utils/utils.ts +0 -30
- package/src/utils/warn.ts +0 -13
- /package/dist/{matcher/create-matcher.spec.d.ts → index.test.d.ts} +0 -0
- /package/dist/{utils/path.spec.d.ts → matcher.test.d.ts} +0 -0
package/src/micro-app.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Router } from './router';
|
|
2
|
+
import type { RouterMicroAppCallback, RouterMicroAppOptions } from './types';
|
|
3
|
+
import { isBrowser, isPlainObject } from './util';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the root container element.
|
|
7
|
+
* Supports a DOM selector string or a direct HTMLElement.
|
|
8
|
+
*
|
|
9
|
+
* @param rootConfig - The root container configuration, can be a selector string or an HTMLElement.
|
|
10
|
+
* @returns The resolved HTMLElement.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveRootElement(
|
|
13
|
+
rootConfig?: string | HTMLElement
|
|
14
|
+
): HTMLElement {
|
|
15
|
+
let el: HTMLElement | null = null;
|
|
16
|
+
// Direct HTMLElement provided
|
|
17
|
+
if (rootConfig instanceof HTMLElement) {
|
|
18
|
+
el = rootConfig;
|
|
19
|
+
}
|
|
20
|
+
if (typeof rootConfig === 'string' && rootConfig) {
|
|
21
|
+
try {
|
|
22
|
+
el = document.querySelector(rootConfig);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
console.warn(`Failed to resolve root element: ${rootConfig}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (el === null) {
|
|
28
|
+
el = document.createElement('div');
|
|
29
|
+
}
|
|
30
|
+
return el;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class MicroApp {
|
|
34
|
+
public app: RouterMicroAppOptions | null = null;
|
|
35
|
+
public root: HTMLElement | null = null;
|
|
36
|
+
private _factory: RouterMicroAppCallback | null = null;
|
|
37
|
+
|
|
38
|
+
public _update(router: Router, force = false) {
|
|
39
|
+
const factory = this._getNextFactory(router);
|
|
40
|
+
if (!force && factory === this._factory) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const oldApp = this.app;
|
|
44
|
+
// Create the new application
|
|
45
|
+
const app = factory ? factory(router) : null;
|
|
46
|
+
if (isBrowser && app) {
|
|
47
|
+
let root: HTMLElement | null = this.root;
|
|
48
|
+
if (root === null) {
|
|
49
|
+
root = resolveRootElement(router.root);
|
|
50
|
+
const { rootStyle } = router.parsedOptions;
|
|
51
|
+
if (root && isPlainObject(rootStyle)) {
|
|
52
|
+
Object.assign(root.style, router.parsedOptions.rootStyle);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (root) {
|
|
56
|
+
app.mount(root);
|
|
57
|
+
if (root.parentNode === null) {
|
|
58
|
+
document.body.appendChild(root);
|
|
59
|
+
}
|
|
60
|
+
this.root = root;
|
|
61
|
+
}
|
|
62
|
+
if (oldApp) {
|
|
63
|
+
oldApp.unmount();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
this.app = app;
|
|
67
|
+
this._factory = factory;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private _getNextFactory({
|
|
71
|
+
route,
|
|
72
|
+
options
|
|
73
|
+
}: Router): RouterMicroAppCallback | null {
|
|
74
|
+
if (!route.matched || route.matched.length === 0) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const name = route.matched[0].app;
|
|
78
|
+
if (
|
|
79
|
+
typeof name === 'string' &&
|
|
80
|
+
options.apps &&
|
|
81
|
+
typeof options.apps === 'object'
|
|
82
|
+
) {
|
|
83
|
+
return options.apps[name] || null;
|
|
84
|
+
}
|
|
85
|
+
if (typeof name === 'function') {
|
|
86
|
+
return name;
|
|
87
|
+
}
|
|
88
|
+
if (typeof options.apps === 'function') {
|
|
89
|
+
return options.apps;
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public destroy() {
|
|
95
|
+
this.app?.unmount();
|
|
96
|
+
this.app = null;
|
|
97
|
+
this.root?.remove();
|
|
98
|
+
this.root = null;
|
|
99
|
+
this._factory = null;
|
|
100
|
+
}
|
|
101
|
+
}
|