@weapp-vite/web 1.5.6 → 2.0.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.md +22 -0
- package/dist/css/wxss.mjs +2 -1
- package/dist/css/wxss.mjs.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.mjs +2 -1
- package/dist/plugin/hostTypes.d.mts +74 -0
- package/dist/plugin/index.d.mts +2 -74
- package/dist/plugin/index.mjs +9 -2
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/sfcHmr.mjs +19 -0
- package/dist/plugin/sfcHmr.mjs.map +1 -0
- package/dist/plugin/vueSfc.mjs +12 -9
- package/dist/plugin/vueSfc.mjs.map +1 -1
- package/dist/runtime/appStyle.mjs +25 -0
- package/dist/runtime/appStyle.mjs.map +1 -0
- package/dist/runtime/component/element.mjs +39 -19
- package/dist/runtime/component/element.mjs.map +1 -1
- package/dist/runtime/component/events.mjs +34 -3
- package/dist/runtime/component/events.mjs.map +1 -1
- package/dist/runtime/component/publicInstance.mjs +7 -3
- package/dist/runtime/component/publicInstance.mjs.map +1 -1
- package/dist/runtime/component/state.mjs +7 -0
- package/dist/runtime/component/state.mjs.map +1 -1
- package/dist/runtime/component/types.d.mts +2 -0
- package/dist/runtime/component/utils.mjs +23 -3
- package/dist/runtime/component/utils.mjs.map +1 -1
- package/dist/runtime/componentEvents.mjs +37 -0
- package/dist/runtime/componentEvents.mjs.map +1 -0
- package/dist/runtime/eventBinding.mjs +5 -2
- package/dist/runtime/eventBinding.mjs.map +1 -1
- package/dist/runtime/index.d.mts +2 -1
- package/dist/runtime/index.mjs +2 -1
- package/dist/runtime/index.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/dom.mjs +2 -7
- package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
- package/dist/runtime/nativeComponents/canvas/index.mjs +12 -3
- package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -1
- package/dist/runtime/polyfill/index.d.mts +2 -1
- package/dist/runtime/polyfill/index.mjs +15 -1
- package/dist/runtime/polyfill/index.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/dom.mjs +5 -0
- package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/events.d.mts +29 -0
- package/dist/runtime/polyfill/routeRuntime/events.mjs +123 -0
- package/dist/runtime/polyfill/routeRuntime/events.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/history.d.mts +3 -1
- package/dist/runtime/polyfill/routeRuntime/history.mjs +4 -1
- package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +9 -0
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/scroll.mjs +20 -3
- package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/stack.mjs +60 -19
- package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime.d.mts +1 -1
- package/dist/runtime/polyfill/routeRuntime.mjs +32 -12
- package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill.d.mts +2 -1
- package/dist/runtime/renderContext.mjs +3 -2
- package/dist/runtime/renderContext.mjs.map +1 -1
- package/dist/runtime/wevu.mjs +2 -0
- package/dist/runtime/wevu.mjs.map +1 -1
- package/dist/shared/wxml.mjs +5 -1
- package/dist/shared/wxml.mjs.map +1 -1
- package/package.json +14 -12
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { captureEntryScrollPosition, restoreEntryScrollPosition } from "./scroll.mjs";
|
|
2
|
+
import { beginAppRoute, cancelEntryRoute, emitBeforePageUnload, finishAppRoute } from "./events.mjs";
|
|
2
3
|
import { hidePageInstance, showPageInstance } from "./lifecycle.mjs";
|
|
3
4
|
import { mountEntryToDom, setEntryActiveInDom, unmountEntryFromDom } from "./dom.mjs";
|
|
4
5
|
|
|
@@ -21,16 +22,36 @@ var PageStackRuntime = class {
|
|
|
21
22
|
this.#destroy(entry);
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
push(id, query) {
|
|
25
|
+
push(id, query, openType = "navigateTo") {
|
|
25
26
|
if (!this.pageRegistry.has(id)) return false;
|
|
26
|
-
this.#hide(this.entries[this.entries.length - 1]);
|
|
27
27
|
const entry = {
|
|
28
28
|
id,
|
|
29
29
|
query,
|
|
30
30
|
active: true
|
|
31
31
|
};
|
|
32
|
+
const event = beginAppRoute(entry, openType);
|
|
33
|
+
this.#hide(this.entries[this.entries.length - 1]);
|
|
32
34
|
this.entries.push(entry);
|
|
33
35
|
this.#mount(entry);
|
|
36
|
+
finishAppRoute(entry, event);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
/** 浏览器一次前进可恢复多个栈层,但只对应一个可观察路由操作。 */
|
|
40
|
+
forward(targets) {
|
|
41
|
+
if (!targets.length || targets.some((target) => !this.pageRegistry.has(target.id))) return false;
|
|
42
|
+
const restored = targets.map((target) => ({
|
|
43
|
+
id: target.id,
|
|
44
|
+
query: { ...target.query },
|
|
45
|
+
active: true
|
|
46
|
+
}));
|
|
47
|
+
const last = restored[restored.length - 1];
|
|
48
|
+
const event = beginAppRoute(last, "navigateTo");
|
|
49
|
+
for (const entry of restored) {
|
|
50
|
+
this.#hide(this.entries[this.entries.length - 1]);
|
|
51
|
+
this.entries.push(entry);
|
|
52
|
+
this.#mount(entry);
|
|
53
|
+
}
|
|
54
|
+
finishAppRoute(last, event);
|
|
34
55
|
return true;
|
|
35
56
|
}
|
|
36
57
|
replace(id, query) {
|
|
@@ -40,56 +61,74 @@ var PageStackRuntime = class {
|
|
|
40
61
|
query,
|
|
41
62
|
active: true
|
|
42
63
|
};
|
|
64
|
+
const event = beginAppRoute(entry, "redirectTo");
|
|
43
65
|
if (this.entries.length) {
|
|
44
66
|
const current = this.entries[this.entries.length - 1];
|
|
45
67
|
this.entries[this.entries.length - 1] = entry;
|
|
46
|
-
this.#destroy(current);
|
|
68
|
+
this.#destroy(current, event);
|
|
47
69
|
} else this.entries.push(entry);
|
|
48
70
|
this.#mount(entry);
|
|
71
|
+
finishAppRoute(entry, event);
|
|
49
72
|
return true;
|
|
50
73
|
}
|
|
51
74
|
relaunch(id, query) {
|
|
52
75
|
if (!this.pageRegistry.has(id)) return false;
|
|
76
|
+
const target = {
|
|
77
|
+
id,
|
|
78
|
+
query,
|
|
79
|
+
active: true
|
|
80
|
+
};
|
|
81
|
+
const event = beginAppRoute(target, "reLaunch");
|
|
53
82
|
const previousEntries = this.entries.splice(0);
|
|
54
|
-
for (const entry of previousEntries.reverse()) this.#destroy(entry);
|
|
55
|
-
for (const entry of this.#tabEntries.values()) this.#destroy(entry);
|
|
83
|
+
for (const entry of previousEntries.reverse()) this.#destroy(entry, event);
|
|
84
|
+
for (const entry of this.#tabEntries.values()) this.#destroy(entry, event);
|
|
56
85
|
this.#tabEntries.clear();
|
|
57
|
-
|
|
86
|
+
this.entries.push(target);
|
|
87
|
+
this.#mount(target);
|
|
88
|
+
finishAppRoute(target, event);
|
|
89
|
+
return true;
|
|
58
90
|
}
|
|
59
91
|
switchTab(id, query) {
|
|
60
92
|
if (!this.#tabPageIds.has(id) || !this.pageRegistry.has(id)) return false;
|
|
93
|
+
const retained = this.entries.find((entry) => entry.id === id) ?? this.#tabEntries.get(id);
|
|
94
|
+
if (retained?.active && this.entries.length === 1 && this.entries[0] === retained) return true;
|
|
95
|
+
const target = retained ?? {
|
|
96
|
+
id,
|
|
97
|
+
query,
|
|
98
|
+
active: true
|
|
99
|
+
};
|
|
100
|
+
target.query = query;
|
|
101
|
+
const event = beginAppRoute(target, "switchTab");
|
|
61
102
|
const previousEntries = this.entries.splice(0);
|
|
62
|
-
let target = previousEntries.find((entry) => entry.id === id) ?? this.#tabEntries.get(id);
|
|
63
103
|
for (const entry of previousEntries.reverse()) {
|
|
64
104
|
if (entry === target) continue;
|
|
65
105
|
if (this.#tabPageIds.has(entry.id)) {
|
|
66
106
|
this.#hide(entry);
|
|
67
107
|
this.#tabEntries.set(entry.id, entry);
|
|
68
|
-
} else this.#destroy(entry);
|
|
108
|
+
} else this.#destroy(entry, event);
|
|
69
109
|
}
|
|
70
|
-
if (
|
|
110
|
+
if (retained) {
|
|
71
111
|
this.#tabEntries.delete(id);
|
|
72
|
-
target.query = query;
|
|
73
112
|
this.entries.push(target);
|
|
74
113
|
this.#show(target);
|
|
114
|
+
finishAppRoute(target, event);
|
|
75
115
|
return true;
|
|
76
116
|
}
|
|
77
|
-
target = {
|
|
78
|
-
id,
|
|
79
|
-
query,
|
|
80
|
-
active: true
|
|
81
|
-
};
|
|
82
117
|
this.entries.push(target);
|
|
83
118
|
this.#mount(target);
|
|
119
|
+
finishAppRoute(target, event);
|
|
84
120
|
return true;
|
|
85
121
|
}
|
|
86
122
|
back(delta = 1) {
|
|
87
123
|
if (this.entries.length <= 1) return false;
|
|
88
124
|
const normalizedDelta = Math.max(1, delta);
|
|
89
125
|
const targetIndex = Math.max(0, this.entries.length - 1 - normalizedDelta);
|
|
126
|
+
const target = this.entries[targetIndex];
|
|
127
|
+
const event = beginAppRoute(target, "navigateBack");
|
|
90
128
|
const removed = this.entries.splice(targetIndex + 1);
|
|
91
|
-
for (const entry of removed.reverse()) this.#destroy(entry);
|
|
92
|
-
this.#show(
|
|
129
|
+
for (const entry of removed.reverse()) this.#destroy(entry, event);
|
|
130
|
+
this.#show(target);
|
|
131
|
+
finishAppRoute(target, event);
|
|
93
132
|
return true;
|
|
94
133
|
}
|
|
95
134
|
#mount(entry) {
|
|
@@ -100,6 +139,7 @@ var PageStackRuntime = class {
|
|
|
100
139
|
}
|
|
101
140
|
#hide(entry) {
|
|
102
141
|
if (!entry) return;
|
|
142
|
+
cancelEntryRoute(entry);
|
|
103
143
|
captureEntryScrollPosition(entry);
|
|
104
144
|
setEntryActiveInDom(entry, false);
|
|
105
145
|
const record = this.#record(entry);
|
|
@@ -107,11 +147,12 @@ var PageStackRuntime = class {
|
|
|
107
147
|
}
|
|
108
148
|
#show(entry) {
|
|
109
149
|
setEntryActiveInDom(entry, true);
|
|
110
|
-
restoreEntryScrollPosition(entry);
|
|
150
|
+
restoreEntryScrollPosition(entry, true);
|
|
111
151
|
const record = this.#record(entry);
|
|
112
152
|
if (entry.instance && record) showPageInstance(entry.instance, record);
|
|
113
153
|
}
|
|
114
|
-
#destroy(entry) {
|
|
154
|
+
#destroy(entry, event) {
|
|
155
|
+
if (event) emitBeforePageUnload(entry, event);
|
|
115
156
|
unmountEntryFromDom(entry);
|
|
116
157
|
entry.active = false;
|
|
117
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/stack.ts"],"sourcesContent":["import type { PageRecord, PageStackEntry } from './options'\nimport {\n mountEntryToDom,\n setEntryActiveInDom,\n unmountEntryFromDom,\n} from './dom'\nimport { hidePageInstance, showPageInstance } from './lifecycle'\nimport { captureEntryScrollPosition, restoreEntryScrollPosition } from './scroll'\n\nexport class PageStackRuntime {\n readonly entries: PageStackEntry[] = []\n readonly #tabEntries = new Map<string, PageStackEntry>()\n #tabPageIds = new Set<string>()\n\n constructor(\n private readonly pageRegistry: Map<string, PageRecord>,\n private readonly onBeforeMount: (entry: PageStackEntry) => void,\n ) {}\n\n configureTabPages(ids: Iterable<string>) {\n this.#tabPageIds = new Set(ids)\n for (const [id, entry] of this.#tabEntries) {\n if (this.#tabPageIds.has(id)) {\n continue\n }\n this.#tabEntries.delete(id)\n this.#destroy(entry)\n }\n }\n\n push(id: string, query: Record<string, string
|
|
1
|
+
{"version":3,"file":"stack.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/stack.ts"],"sourcesContent":["import type { AppRouteEvent, AppRouteOpenType } from './events'\nimport type { PageRecord, PageStackEntry } from './options'\nimport {\n mountEntryToDom,\n setEntryActiveInDom,\n unmountEntryFromDom,\n} from './dom'\nimport { beginAppRoute, cancelEntryRoute, emitBeforePageUnload, finishAppRoute } from './events'\nimport { hidePageInstance, showPageInstance } from './lifecycle'\nimport { captureEntryScrollPosition, restoreEntryScrollPosition } from './scroll'\n\nexport class PageStackRuntime {\n readonly entries: PageStackEntry[] = []\n readonly #tabEntries = new Map<string, PageStackEntry>()\n #tabPageIds = new Set<string>()\n\n constructor(\n private readonly pageRegistry: Map<string, PageRecord>,\n private readonly onBeforeMount: (entry: PageStackEntry) => void,\n ) {}\n\n configureTabPages(ids: Iterable<string>) {\n this.#tabPageIds = new Set(ids)\n for (const [id, entry] of this.#tabEntries) {\n if (this.#tabPageIds.has(id)) {\n continue\n }\n this.#tabEntries.delete(id)\n this.#destroy(entry)\n }\n }\n\n push(id: string, query: Record<string, string>, openType: AppRouteOpenType = 'navigateTo') {\n if (!this.pageRegistry.has(id)) {\n return false\n }\n const entry: PageStackEntry = { id, query, active: true }\n const event = beginAppRoute(entry, openType)\n this.#hide(this.entries[this.entries.length - 1])\n this.entries.push(entry)\n this.#mount(entry)\n finishAppRoute(entry, event)\n return true\n }\n\n /** 浏览器一次前进可恢复多个栈层,但只对应一个可观察路由操作。 */\n forward(targets: ReadonlyArray<Pick<PageStackEntry, 'id' | 'query'>>) {\n if (!targets.length || targets.some(target => !this.pageRegistry.has(target.id))) {\n return false\n }\n const restored = targets.map(target => ({ id: target.id, query: { ...target.query }, active: true }))\n const last = restored[restored.length - 1]!\n const event = beginAppRoute(last, 'navigateTo')\n for (const entry of restored) {\n this.#hide(this.entries[this.entries.length - 1])\n this.entries.push(entry)\n this.#mount(entry)\n }\n finishAppRoute(last, event)\n return true\n }\n\n replace(id: string, query: Record<string, string>) {\n if (!this.pageRegistry.has(id)) {\n return false\n }\n const entry: PageStackEntry = { id, query, active: true }\n const event = beginAppRoute(entry, 'redirectTo')\n if (this.entries.length) {\n const current = this.entries[this.entries.length - 1]!\n this.entries[this.entries.length - 1] = entry\n this.#destroy(current, event)\n }\n else {\n this.entries.push(entry)\n }\n this.#mount(entry)\n finishAppRoute(entry, event)\n return true\n }\n\n relaunch(id: string, query: Record<string, string>) {\n if (!this.pageRegistry.has(id)) {\n return false\n }\n const target: PageStackEntry = { id, query, active: true }\n const event = beginAppRoute(target, 'reLaunch')\n const previousEntries = this.entries.splice(0)\n for (const entry of previousEntries.reverse()) {\n this.#destroy(entry, event)\n }\n for (const entry of this.#tabEntries.values()) {\n this.#destroy(entry, event)\n }\n this.#tabEntries.clear()\n this.entries.push(target)\n this.#mount(target)\n finishAppRoute(target, event)\n return true\n }\n\n switchTab(id: string, query: Record<string, string>) {\n if (!this.#tabPageIds.has(id) || !this.pageRegistry.has(id)) {\n return false\n }\n\n const retained = this.entries.find(entry => entry.id === id) ?? this.#tabEntries.get(id)\n if (retained?.active && this.entries.length === 1 && this.entries[0] === retained) {\n return true\n }\n const target = retained ?? { id, query, active: true }\n target.query = query\n const event = beginAppRoute(target, 'switchTab')\n const previousEntries = this.entries.splice(0)\n for (const entry of previousEntries.reverse()) {\n if (entry === target) {\n continue\n }\n if (this.#tabPageIds.has(entry.id)) {\n this.#hide(entry)\n this.#tabEntries.set(entry.id, entry)\n }\n else {\n this.#destroy(entry, event)\n }\n }\n\n if (retained) {\n this.#tabEntries.delete(id)\n this.entries.push(target)\n this.#show(target)\n finishAppRoute(target, event)\n return true\n }\n\n this.entries.push(target)\n this.#mount(target)\n finishAppRoute(target, event)\n return true\n }\n\n back(delta = 1) {\n if (this.entries.length <= 1) {\n return false\n }\n const normalizedDelta = Math.max(1, delta)\n const targetIndex = Math.max(0, this.entries.length - 1 - normalizedDelta)\n const target = this.entries[targetIndex]!\n const event = beginAppRoute(target, 'navigateBack')\n const removed = this.entries.splice(targetIndex + 1)\n for (const entry of removed.reverse()) {\n this.#destroy(entry, event)\n }\n this.#show(target)\n finishAppRoute(target, event)\n return true\n }\n\n #mount(entry: PageStackEntry) {\n mountEntryToDom(entry, this.pageRegistry, this.onBeforeMount)\n }\n\n #record(entry: PageStackEntry) {\n return this.pageRegistry.get(entry.id)\n }\n\n #hide(entry: PageStackEntry | undefined) {\n if (!entry) {\n return\n }\n cancelEntryRoute(entry)\n captureEntryScrollPosition(entry)\n setEntryActiveInDom(entry, false)\n const record = this.#record(entry)\n if (entry.instance && record) {\n hidePageInstance(entry.instance, record)\n }\n }\n\n #show(entry: PageStackEntry) {\n setEntryActiveInDom(entry, true)\n restoreEntryScrollPosition(entry, true)\n const record = this.#record(entry)\n if (entry.instance && record) {\n showPageInstance(entry.instance, record)\n }\n }\n\n #destroy(entry: PageStackEntry, event?: AppRouteEvent) {\n if (event) {\n emitBeforePageUnload(entry, event)\n }\n unmountEntryFromDom(entry)\n entry.active = false\n }\n}\n"],"mappings":";;;;;;AAWA,IAAa,mBAAb,MAA8B;CAMT;CACA;CANnB,AAAS,UAA4B,CAAC;CACtC,AAAS,8BAAc,IAAI,IAA4B;CACvD,8BAAc,IAAI,IAAY;CAE9B,YACE,AAAiB,cACjB,AAAiB,eACjB;EAFiB;EACA;CAChB;CAEH,kBAAkB,KAAuB;EACvC,KAAK,cAAc,IAAI,IAAI,GAAG;EAC9B,KAAK,MAAM,CAAC,IAAI,UAAU,KAAK,aAAa;GAC1C,IAAI,KAAK,YAAY,IAAI,EAAE,GACzB;GAEF,KAAK,YAAY,OAAO,EAAE;GAC1B,KAAK,SAAS,KAAK;EACrB;CACF;CAEA,KAAK,IAAY,OAA+B,WAA6B,cAAc;EACzF,IAAI,CAAC,KAAK,aAAa,IAAI,EAAE,GAC3B,OAAO;EAET,MAAM,QAAwB;GAAE;GAAI;GAAO,QAAQ;EAAK;EACxD,MAAM,QAAQ,cAAc,OAAO,QAAQ;EAC3C,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,SAAS,EAAE;EAChD,KAAK,QAAQ,KAAK,KAAK;EACvB,KAAK,OAAO,KAAK;EACjB,eAAe,OAAO,KAAK;EAC3B,OAAO;CACT;;CAGA,QAAQ,SAA8D;EACpE,IAAI,CAAC,QAAQ,UAAU,QAAQ,MAAK,WAAU,CAAC,KAAK,aAAa,IAAI,OAAO,EAAE,CAAC,GAC7E,OAAO;EAET,MAAM,WAAW,QAAQ,KAAI,YAAW;GAAE,IAAI,OAAO;GAAI,OAAO,EAAE,GAAG,OAAO,MAAM;GAAG,QAAQ;EAAK,EAAE;EACpG,MAAM,OAAO,SAAS,SAAS,SAAS;EACxC,MAAM,QAAQ,cAAc,MAAM,YAAY;EAC9C,KAAK,MAAM,SAAS,UAAU;GAC5B,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,SAAS,EAAE;GAChD,KAAK,QAAQ,KAAK,KAAK;GACvB,KAAK,OAAO,KAAK;EACnB;EACA,eAAe,MAAM,KAAK;EAC1B,OAAO;CACT;CAEA,QAAQ,IAAY,OAA+B;EACjD,IAAI,CAAC,KAAK,aAAa,IAAI,EAAE,GAC3B,OAAO;EAET,MAAM,QAAwB;GAAE;GAAI;GAAO,QAAQ;EAAK;EACxD,MAAM,QAAQ,cAAc,OAAO,YAAY;EAC/C,IAAI,KAAK,QAAQ,QAAQ;GACvB,MAAM,UAAU,KAAK,QAAQ,KAAK,QAAQ,SAAS;GACnD,KAAK,QAAQ,KAAK,QAAQ,SAAS,KAAK;GACxC,KAAK,SAAS,SAAS,KAAK;EAC9B,OAEE,KAAK,QAAQ,KAAK,KAAK;EAEzB,KAAK,OAAO,KAAK;EACjB,eAAe,OAAO,KAAK;EAC3B,OAAO;CACT;CAEA,SAAS,IAAY,OAA+B;EAClD,IAAI,CAAC,KAAK,aAAa,IAAI,EAAE,GAC3B,OAAO;EAET,MAAM,SAAyB;GAAE;GAAI;GAAO,QAAQ;EAAK;EACzD,MAAM,QAAQ,cAAc,QAAQ,UAAU;EAC9C,MAAM,kBAAkB,KAAK,QAAQ,OAAO,CAAC;EAC7C,KAAK,MAAM,SAAS,gBAAgB,QAAQ,GAC1C,KAAK,SAAS,OAAO,KAAK;EAE5B,KAAK,MAAM,SAAS,KAAK,YAAY,OAAO,GAC1C,KAAK,SAAS,OAAO,KAAK;EAE5B,KAAK,YAAY,MAAM;EACvB,KAAK,QAAQ,KAAK,MAAM;EACxB,KAAK,OAAO,MAAM;EAClB,eAAe,QAAQ,KAAK;EAC5B,OAAO;CACT;CAEA,UAAU,IAAY,OAA+B;EACnD,IAAI,CAAC,KAAK,YAAY,IAAI,EAAE,KAAK,CAAC,KAAK,aAAa,IAAI,EAAE,GACxD,OAAO;EAGT,MAAM,WAAW,KAAK,QAAQ,MAAK,UAAS,MAAM,OAAO,EAAE,KAAK,KAAK,YAAY,IAAI,EAAE;EACvF,IAAI,UAAU,UAAU,KAAK,QAAQ,WAAW,KAAK,KAAK,QAAQ,OAAO,UACvE,OAAO;EAET,MAAM,SAAS,YAAY;GAAE;GAAI;GAAO,QAAQ;EAAK;EACrD,OAAO,QAAQ;EACf,MAAM,QAAQ,cAAc,QAAQ,WAAW;EAC/C,MAAM,kBAAkB,KAAK,QAAQ,OAAO,CAAC;EAC7C,KAAK,MAAM,SAAS,gBAAgB,QAAQ,GAAG;GAC7C,IAAI,UAAU,QACZ;GAEF,IAAI,KAAK,YAAY,IAAI,MAAM,EAAE,GAAG;IAClC,KAAK,MAAM,KAAK;IAChB,KAAK,YAAY,IAAI,MAAM,IAAI,KAAK;GACtC,OAEE,KAAK,SAAS,OAAO,KAAK;EAE9B;EAEA,IAAI,UAAU;GACZ,KAAK,YAAY,OAAO,EAAE;GAC1B,KAAK,QAAQ,KAAK,MAAM;GACxB,KAAK,MAAM,MAAM;GACjB,eAAe,QAAQ,KAAK;GAC5B,OAAO;EACT;EAEA,KAAK,QAAQ,KAAK,MAAM;EACxB,KAAK,OAAO,MAAM;EAClB,eAAe,QAAQ,KAAK;EAC5B,OAAO;CACT;CAEA,KAAK,QAAQ,GAAG;EACd,IAAI,KAAK,QAAQ,UAAU,GACzB,OAAO;EAET,MAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK;EACzC,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK,QAAQ,SAAS,IAAI,eAAe;EACzE,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,QAAQ,cAAc,QAAQ,cAAc;EAClD,MAAM,UAAU,KAAK,QAAQ,OAAO,cAAc,CAAC;EACnD,KAAK,MAAM,SAAS,QAAQ,QAAQ,GAClC,KAAK,SAAS,OAAO,KAAK;EAE5B,KAAK,MAAM,MAAM;EACjB,eAAe,QAAQ,KAAK;EAC5B,OAAO;CACT;CAEA,OAAO,OAAuB;EAC5B,gBAAgB,OAAO,KAAK,cAAc,KAAK,aAAa;CAC9D;CAEA,QAAQ,OAAuB;EAC7B,OAAO,KAAK,aAAa,IAAI,MAAM,EAAE;CACvC;CAEA,MAAM,OAAmC;EACvC,IAAI,CAAC,OACH;EAEF,iBAAiB,KAAK;EACtB,2BAA2B,KAAK;EAChC,oBAAoB,OAAO,KAAK;EAChC,MAAM,SAAS,KAAK,QAAQ,KAAK;EACjC,IAAI,MAAM,YAAY,QACpB,iBAAiB,MAAM,UAAU,MAAM;CAE3C;CAEA,MAAM,OAAuB;EAC3B,oBAAoB,OAAO,IAAI;EAC/B,2BAA2B,OAAO,IAAI;EACtC,MAAM,SAAS,KAAK,QAAQ,KAAK;EACjC,IAAI,MAAM,YAAY,QACpB,iBAAiB,MAAM,UAAU,MAAM;CAE3C;CAEA,SAAS,OAAuB,OAAuB;EACrD,IAAI,OACF,qBAAqB,OAAO,KAAK;EAEnC,oBAAoB,KAAK;EACzB,MAAM,SAAS;CACjB;AACF"}
|
|
@@ -30,7 +30,7 @@ export declare function initializePageRoutes(ids: string[], options?: {
|
|
|
30
30
|
}): void;
|
|
31
31
|
export declare function registerPage<T extends PageRawOptions | undefined>(options: T, meta: RegisterMeta): T;
|
|
32
32
|
export declare function registerComponent<T extends ComponentRawOptions | undefined>(options: T, meta: RegisterMeta): T;
|
|
33
|
-
export declare function registerApp<T extends AppRuntime | undefined>(options: T,
|
|
33
|
+
export declare function registerApp<T extends AppRuntime | undefined>(options: T, meta?: RegisterMeta): T;
|
|
34
34
|
export declare function offAppHide(callback?: AppHideCallback): void;
|
|
35
35
|
export declare function offAppShow(callback?: AppShowCallback): void;
|
|
36
36
|
export declare function onAppHide(callback: AppHideCallback): void;
|
|
@@ -2,6 +2,7 @@ import { slugify } from "../../shared/slugify.mjs";
|
|
|
2
2
|
import { setRuntimeWarningOptions } from "../warning.mjs";
|
|
3
3
|
import { configureTabBar, getTabBarPagePaths, syncTabBarRoute } from "../appShell/tabBar/index.mjs";
|
|
4
4
|
import { configureWebSeo, setupWebResourceHints, syncWebDocumentHead } from "../seo/index.mjs";
|
|
5
|
+
import { setAppStyle } from "../appStyle.mjs";
|
|
5
6
|
import { setButtonFormConfig } from "../button/index.mjs";
|
|
6
7
|
import { setRuntimeExecutionMode } from "../execution.mjs";
|
|
7
8
|
import { defineComponent } from "../component/index.mjs";
|
|
@@ -12,6 +13,7 @@ import { setupRpx } from "../rpx.mjs";
|
|
|
12
13
|
import { resolveCurrentPages } from "./appState.mjs";
|
|
13
14
|
import { normalizeComponentOptions, normalizePageOptions } from "./routeRuntime/options.mjs";
|
|
14
15
|
import { AppLifecycleRuntime } from "./routeRuntime/appLifecycle.mjs";
|
|
16
|
+
import { getEntryWebviewId } from "./routeRuntime/events.mjs";
|
|
15
17
|
import { configureWebRouting, getWebHistoryStack, readWebRouteTarget, syncWebRouting } from "./routeRuntime/history.mjs";
|
|
16
18
|
import { augmentPageComponentOptions, dispatchPageLifetimeToComponents } from "./routeRuntime/lifecycle.mjs";
|
|
17
19
|
import { resolveRouteAction } from "./routeRuntime/result.mjs";
|
|
@@ -38,32 +40,47 @@ function syncCurrentWebRoute(operation) {
|
|
|
38
40
|
syncCurrentWebDocument();
|
|
39
41
|
}
|
|
40
42
|
function reconcileWebRoute(target, state) {
|
|
41
|
-
const
|
|
43
|
+
const currentEntries = pageStack.entries;
|
|
42
44
|
const historyStack = getWebHistoryStack(state);
|
|
43
45
|
if (historyStack?.length) {
|
|
44
|
-
|
|
45
|
-
const sharedLength = Math.min(
|
|
46
|
-
const samePrefix =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
if (historyStack.some((entry) => !pageRegistry.has(entry.id))) return;
|
|
47
|
+
const sharedLength = Math.min(historyStack.length, currentEntries.length);
|
|
48
|
+
const samePrefix = historyStack.slice(0, sharedLength).every((entry, index) => {
|
|
49
|
+
const current = currentEntries[index];
|
|
50
|
+
return entry.id === current.id && (entry.webviewId === void 0 || entry.webviewId === getEntryWebviewId(current)) && Object.keys(entry.query).length === Object.keys(current.query).length && Object.entries(entry.query).every(([key, value]) => current.query[key] === value);
|
|
51
|
+
});
|
|
52
|
+
if (samePrefix && historyStack.length === currentEntries.length) return;
|
|
53
|
+
if (samePrefix && historyStack.length < currentEntries.length) pageStack.back(currentEntries.length - historyStack.length);
|
|
54
|
+
else if (samePrefix && historyStack.length > currentEntries.length) {
|
|
55
|
+
const added = historyStack.slice(currentEntries.length);
|
|
56
|
+
if (added.length === 1) pageStack.push(added[0].id, { ...added[0].query });
|
|
57
|
+
else pageStack.forward(added);
|
|
58
|
+
} else {
|
|
50
59
|
const last = historyStack[historyStack.length - 1];
|
|
51
|
-
pageStack.
|
|
60
|
+
if (getTabBarPagePaths().has(last.id)) pageStack.switchTab(last.id, { ...last.query });
|
|
61
|
+
else pageStack.relaunch(last.id, { ...last.query });
|
|
52
62
|
}
|
|
63
|
+
syncWebRouting(pageStack.entries, "replace");
|
|
53
64
|
syncTabBarRoute(pageStack.entries[pageStack.entries.length - 1]?.id ?? "");
|
|
54
65
|
syncCurrentWebDocument();
|
|
55
66
|
return;
|
|
56
67
|
}
|
|
57
68
|
if (target && pageRegistry.has(target.id)) {
|
|
58
|
-
|
|
69
|
+
const current = currentEntries[currentEntries.length - 1];
|
|
70
|
+
if (current?.id === target.id && Object.keys(current.query).length === Object.keys(target.query).length && Object.entries(target.query).every(([key, value]) => current.query[key] === value)) return;
|
|
71
|
+
if (getTabBarPagePaths().has(target.id)) pageStack.switchTab(target.id, { ...target.query });
|
|
72
|
+
else pageStack.relaunch(target.id, { ...target.query });
|
|
73
|
+
syncWebRouting(pageStack.entries, "replace");
|
|
59
74
|
syncTabBarRoute(target.id);
|
|
60
75
|
syncCurrentWebDocument();
|
|
61
76
|
}
|
|
62
77
|
}
|
|
63
78
|
function performSwitchTab(options) {
|
|
64
79
|
const { id, query } = parsePageUrl(options?.url ?? "");
|
|
80
|
+
const previousLength = pageStack.entries.length;
|
|
81
|
+
const previousEntry = pageStack.entries[previousLength - 1];
|
|
65
82
|
const succeeded = pageStack.switchTab(id, query);
|
|
66
|
-
if (succeeded) {
|
|
83
|
+
if (succeeded && (pageStack.entries.length !== previousLength || pageStack.entries.at(-1) !== previousEntry)) {
|
|
67
84
|
syncTabBarRoute(id);
|
|
68
85
|
syncCurrentWebRoute("push");
|
|
69
86
|
}
|
|
@@ -101,7 +118,7 @@ function initializePageRoutes(ids, options) {
|
|
|
101
118
|
const initialTarget = readWebRouteTarget(pageOrder);
|
|
102
119
|
const initialId = initialTarget?.id ?? pageOrder[0];
|
|
103
120
|
const initialQuery = initialTarget?.query ?? {};
|
|
104
|
-
if (pageStack.push(initialId, initialQuery)) {
|
|
121
|
+
if (pageStack.push(initialId, initialQuery, "appLaunch")) {
|
|
105
122
|
syncTabBarRoute(initialId);
|
|
106
123
|
syncCurrentWebRoute("replace");
|
|
107
124
|
}
|
|
@@ -120,6 +137,7 @@ function registerPage(options, meta) {
|
|
|
120
137
|
const component = augmentPageComponentOptions(normalized.component, existing);
|
|
121
138
|
defineComponent(tag, {
|
|
122
139
|
id: meta.id,
|
|
140
|
+
kind: "page",
|
|
123
141
|
template,
|
|
124
142
|
style: meta.style,
|
|
125
143
|
component
|
|
@@ -135,6 +153,7 @@ function registerPage(options, meta) {
|
|
|
135
153
|
const component = augmentPageComponentOptions(normalized.component, record);
|
|
136
154
|
defineComponent(tag, {
|
|
137
155
|
id: meta.id,
|
|
156
|
+
kind: "page",
|
|
138
157
|
template,
|
|
139
158
|
style: meta.style,
|
|
140
159
|
component
|
|
@@ -168,7 +187,8 @@ function registerComponent(options, meta) {
|
|
|
168
187
|
componentRegistry.set(meta.id, { tag });
|
|
169
188
|
return options;
|
|
170
189
|
}
|
|
171
|
-
function registerApp(options,
|
|
190
|
+
function registerApp(options, meta) {
|
|
191
|
+
setAppStyle(meta?.style ?? "");
|
|
172
192
|
return appLifecycle.register(options);
|
|
173
193
|
}
|
|
174
194
|
function offAppHide(callback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeRuntime.mjs","names":[],"sources":["../../../src/runtime/polyfill/routeRuntime.ts"],"sourcesContent":["import type { WebTabBarConfig } from '../../shared/tabBar'\nimport type { ButtonFormConfig } from '../button'\nimport type { ComponentPublicInstance } from '../component'\nimport type { NavigationBarMetrics } from '../navigationBar'\nimport type { WebResourceHintsConfig, WebSeoConfig } from '../seo'\nimport type { WebViewportConfig } from '../viewport'\nimport type { WebRouteHistoryState, WebRouteTarget, WebRoutingConfig } from './routeRuntime/history'\nimport type { AppHideCallback, AppRuntime, AppShowCallback, ComponentRawOptions, ComponentRecord, NavigateBackOptions, PageRawOptions, PageRecord, RegisterMeta, RouteOptions } from './routeRuntime/options'\nimport { slugify } from '../../shared/slugify'\nimport {\n configureTabBar,\n getTabBarPagePaths,\n syncTabBarRoute,\n} from '../appShell/tabBar'\nimport { setButtonFormConfig } from '../button'\nimport { defineComponent } from '../component'\nimport { setRuntimeExecutionMode } from '../execution'\nimport { ensureNativeComponentsDefined } from '../nativeComponents'\nimport { ensureNavigationBarDefined, setNavigationBarMetrics } from '../navigationBar'\nimport { setupRpx } from '../rpx'\nimport { configureWebSeo, setupWebResourceHints, syncWebDocumentHead } from '../seo'\nimport { setupWebViewport } from '../viewport'\nimport { setRuntimeWarningOptions } from '../warning'\nimport { resolveCurrentPages } from './appState'\nimport { AppLifecycleRuntime } from './routeRuntime/appLifecycle'\nimport {\n configureWebRouting,\n getWebHistoryStack,\n readWebRouteTarget,\n syncWebRouting,\n} from './routeRuntime/history'\nimport {\n augmentPageComponentOptions,\n dispatchPageLifetimeToComponents,\n} from './routeRuntime/lifecycle'\nimport {\n normalizeComponentOptions,\n normalizePageOptions,\n} from './routeRuntime/options'\nimport { resolveRouteAction } from './routeRuntime/result'\nimport { PageStackRuntime } from './routeRuntime/stack'\nimport { parsePageUrl } from './routeRuntime/url'\n\nconst pageRegistry = new Map<string, PageRecord>()\nconst componentRegistry = new Map<string, ComponentRecord>()\nlet pageOrder: string[] = []\nlet pageResizeBridgeBound = false\n\nlet pageStack: PageStackRuntime\nconst appLifecycle = new AppLifecycleRuntime(\n () => pageStack?.entries[pageStack.entries.length - 1],\n)\npageStack = new PageStackRuntime(pageRegistry, entry => appLifecycle.ensureLaunched(entry))\n\nfunction syncCurrentWebDocument() {\n const current = pageStack.entries[pageStack.entries.length - 1]\n syncWebDocumentHead({\n route: current?.id,\n title: current ? pageRegistry.get(current.id)?.navigationBar?.title : undefined,\n })\n}\n\nfunction syncCurrentWebRoute(operation: 'push' | 'replace') {\n syncWebRouting(pageStack.entries, operation)\n syncCurrentWebDocument()\n}\n\nfunction reconcileWebRoute(target: WebRouteTarget | undefined, state: WebRouteHistoryState | undefined) {\n const currentIds = pageStack.entries.map(entry => entry.id)\n const historyStack = getWebHistoryStack(state)\n if (historyStack?.length) {\n const desiredIds = historyStack.map(entry => entry.id)\n const sharedLength = Math.min(desiredIds.length, currentIds.length)\n const samePrefix = desiredIds\n .slice(0, sharedLength)\n .every((id, index) => currentIds[index] === id)\n if (samePrefix && desiredIds.length < currentIds.length) {\n pageStack.back(currentIds.length - desiredIds.length)\n }\n else if (samePrefix && desiredIds.length > currentIds.length) {\n for (const entry of historyStack.slice(currentIds.length)) {\n pageStack.push(entry.id, { ...entry.query })\n }\n }\n else {\n const last = historyStack[historyStack.length - 1]!\n pageStack.relaunch(last.id, { ...last.query })\n }\n syncTabBarRoute(pageStack.entries[pageStack.entries.length - 1]?.id ?? '')\n syncCurrentWebDocument()\n return\n }\n if (target && pageRegistry.has(target.id)) {\n pageStack.relaunch(target.id, { ...target.query })\n syncTabBarRoute(target.id)\n syncCurrentWebDocument()\n }\n}\n\nfunction performSwitchTab(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.switchTab(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('push')\n }\n return resolveRouteAction('switchTab', options, succeeded, 'not a tabBar page')\n}\n\nfunction bindPageResizeBridge() {\n if (pageResizeBridgeBound || typeof window === 'undefined') {\n return\n }\n if (typeof window.addEventListener !== 'function') {\n return\n }\n pageResizeBridgeBound = true\n window.addEventListener('resize', () => {\n const pages = resolveCurrentPages<ComponentPublicInstance>(pageStack.entries)\n const current = pages[pages.length - 1]\n if (!current) {\n return\n }\n dispatchPageLifetimeToComponents(current, 'resize')\n })\n}\n\nexport function initializePageRoutes(\n ids: string[],\n options?: {\n rpx?: { designWidth?: number, varName?: string }\n navigationBar?: NavigationBarMetrics\n form?: ButtonFormConfig\n tabBar?: WebTabBarConfig\n runtime?: {\n executionMode?: 'compat' | 'safe' | 'strict'\n warnings?: {\n level?: 'off' | 'warn' | 'error'\n dedupe?: boolean\n }\n viewport?: WebViewportConfig\n routing?: WebRoutingConfig\n seo?: WebSeoConfig\n resourceHints?: WebResourceHintsConfig\n }\n },\n) {\n setRuntimeExecutionMode(options?.runtime?.executionMode)\n setRuntimeWarningOptions(options?.runtime?.warnings)\n setupWebViewport(options?.runtime?.viewport)\n configureWebSeo(options?.runtime?.seo)\n setupWebResourceHints(options?.runtime?.resourceHints)\n configureWebRouting(options?.runtime?.routing, ids, reconcileWebRoute)\n appLifecycle.bindVisibility()\n ensureNativeComponentsDefined()\n pageOrder = Array.from(new Set(ids))\n configureTabBar(options?.tabBar, url => performSwitchTab({ url }))\n pageStack.configureTabPages(getTabBarPagePaths())\n if (!pageOrder.length) {\n return\n }\n bindPageResizeBridge()\n if (options?.rpx) {\n setupRpx(options.rpx)\n }\n if (options?.navigationBar) {\n setNavigationBarMetrics(options.navigationBar)\n }\n if (options?.form) {\n setButtonFormConfig(options.form)\n }\n if (!pageStack.entries.length) {\n const initialTarget = readWebRouteTarget(pageOrder)\n const initialId = initialTarget?.id ?? pageOrder[0]\n const initialQuery = initialTarget?.query ?? {}\n if (pageStack.push(initialId, initialQuery)) {\n syncTabBarRoute(initialId)\n syncCurrentWebRoute('replace')\n }\n }\n}\n\nexport function registerPage<T extends PageRawOptions | undefined>(options: T, meta: RegisterMeta): T {\n ensureNativeComponentsDefined()\n ensureNavigationBarDefined()\n const tag = slugify(meta.id, 'wv-page')\n const template = meta.template ?? (() => '')\n const normalized = normalizePageOptions(options)\n const existing = pageRegistry.get(meta.id)\n if (existing) {\n existing.hooks = normalized.hooks\n existing.navigationBar = meta.navigationBar\n const component = augmentPageComponentOptions(normalized.component, existing)\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n return options\n }\n const record: PageRecord = {\n tag,\n hooks: normalized.hooks,\n instances: new Set(),\n navigationBar: meta.navigationBar,\n }\n const component = augmentPageComponentOptions(normalized.component, record)\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n pageRegistry.set(meta.id, record)\n return options\n}\n\nexport function getCurrentPageInstance(): ComponentPublicInstance | undefined {\n return pageStack.entries[pageStack.entries.length - 1]?.instance\n}\n\nexport function registerComponent<T extends ComponentRawOptions | undefined>(options: T, meta: RegisterMeta): T {\n ensureNativeComponentsDefined()\n const tag = slugify(meta.id, 'wv-component')\n const template = meta.template ?? (() => '')\n const component = normalizeComponentOptions(options)\n if (componentRegistry.has(meta.id)) {\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n return options\n }\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n componentRegistry.set(meta.id, { tag })\n return options\n}\n\nexport function registerApp<T extends AppRuntime | undefined>(options: T, _meta?: RegisterMeta): T {\n return appLifecycle.register(options)\n}\n\nexport function offAppHide(callback?: AppHideCallback) {\n appLifecycle.offAppHide(callback)\n}\n\nexport function offAppShow(callback?: AppShowCallback) {\n appLifecycle.offAppShow(callback)\n}\n\nexport function onAppHide(callback: AppHideCallback) {\n appLifecycle.onAppHide(callback)\n}\n\nexport function onAppShow(callback: AppShowCallback) {\n appLifecycle.onAppShow(callback)\n}\n\nexport function navigateTo(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.push(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('push')\n }\n return resolveRouteAction('navigateTo', options, succeeded)\n}\n\nexport function redirectTo(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.replace(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('redirectTo', options, succeeded)\n}\n\nexport function reLaunch(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.relaunch(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('reLaunch', options, succeeded)\n}\n\nexport function switchTab(options: RouteOptions) {\n return performSwitchTab(options)\n}\n\nexport function navigateBack(options?: NavigateBackOptions) {\n const succeeded = pageStack.back(options?.delta)\n if (succeeded) {\n syncTabBarRoute(pageStack.entries[pageStack.entries.length - 1]?.id ?? '')\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('navigateBack', options, succeeded)\n}\n\nexport function getCurrentPagesInternal() {\n return resolveCurrentPages<ComponentPublicInstance>(pageStack.entries)\n}\n\nexport function getAppInstance() {\n return appLifecycle.instance\n}\n\nexport function getLaunchOptionsSync() {\n return appLifecycle.getLaunchOptions()\n}\n\nexport function getEnterOptionsSync() {\n return appLifecycle.getEnterOptions()\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routeRuntime.mjs","names":[],"sources":["../../../src/runtime/polyfill/routeRuntime.ts"],"sourcesContent":["import type { WebTabBarConfig } from '../../shared/tabBar'\nimport type { ButtonFormConfig } from '../button'\nimport type { ComponentPublicInstance } from '../component'\nimport type { NavigationBarMetrics } from '../navigationBar'\nimport type { WebResourceHintsConfig, WebSeoConfig } from '../seo'\nimport type { WebViewportConfig } from '../viewport'\nimport type { WebRouteHistoryState, WebRouteTarget, WebRoutingConfig } from './routeRuntime/history'\nimport type { AppHideCallback, AppRuntime, AppShowCallback, ComponentRawOptions, ComponentRecord, NavigateBackOptions, PageRawOptions, PageRecord, RegisterMeta, RouteOptions } from './routeRuntime/options'\nimport { slugify } from '../../shared/slugify'\nimport {\n configureTabBar,\n getTabBarPagePaths,\n syncTabBarRoute,\n} from '../appShell/tabBar'\nimport { setAppStyle } from '../appStyle'\nimport { setButtonFormConfig } from '../button'\nimport { defineComponent } from '../component'\nimport { setRuntimeExecutionMode } from '../execution'\nimport { ensureNativeComponentsDefined } from '../nativeComponents'\nimport { ensureNavigationBarDefined, setNavigationBarMetrics } from '../navigationBar'\nimport { setupRpx } from '../rpx'\nimport { configureWebSeo, setupWebResourceHints, syncWebDocumentHead } from '../seo'\nimport { setupWebViewport } from '../viewport'\nimport { setRuntimeWarningOptions } from '../warning'\nimport { resolveCurrentPages } from './appState'\nimport { AppLifecycleRuntime } from './routeRuntime/appLifecycle'\nimport { getEntryWebviewId } from './routeRuntime/events'\nimport {\n configureWebRouting,\n getWebHistoryStack,\n readWebRouteTarget,\n syncWebRouting,\n} from './routeRuntime/history'\nimport {\n augmentPageComponentOptions,\n dispatchPageLifetimeToComponents,\n} from './routeRuntime/lifecycle'\nimport {\n normalizeComponentOptions,\n normalizePageOptions,\n} from './routeRuntime/options'\nimport { resolveRouteAction } from './routeRuntime/result'\nimport { PageStackRuntime } from './routeRuntime/stack'\nimport { parsePageUrl } from './routeRuntime/url'\n\nconst pageRegistry = new Map<string, PageRecord>()\nconst componentRegistry = new Map<string, ComponentRecord>()\nlet pageOrder: string[] = []\nlet pageResizeBridgeBound = false\n\nlet pageStack: PageStackRuntime\nconst appLifecycle = new AppLifecycleRuntime(\n () => pageStack?.entries[pageStack.entries.length - 1],\n)\npageStack = new PageStackRuntime(pageRegistry, entry => appLifecycle.ensureLaunched(entry))\n\nfunction syncCurrentWebDocument() {\n const current = pageStack.entries[pageStack.entries.length - 1]\n syncWebDocumentHead({\n route: current?.id,\n title: current ? pageRegistry.get(current.id)?.navigationBar?.title : undefined,\n })\n}\n\nfunction syncCurrentWebRoute(operation: 'push' | 'replace') {\n syncWebRouting(pageStack.entries, operation)\n syncCurrentWebDocument()\n}\n\nfunction reconcileWebRoute(target: WebRouteTarget | undefined, state: WebRouteHistoryState | undefined) {\n const currentEntries = pageStack.entries\n const historyStack = getWebHistoryStack(state)\n if (historyStack?.length) {\n if (historyStack.some(entry => !pageRegistry.has(entry.id))) {\n return\n }\n const sharedLength = Math.min(historyStack.length, currentEntries.length)\n const samePrefix = historyStack.slice(0, sharedLength).every((entry, index) => {\n const current = currentEntries[index]!\n return entry.id === current.id\n && (entry.webviewId === undefined || entry.webviewId === getEntryWebviewId(current))\n && Object.keys(entry.query).length === Object.keys(current.query).length\n && Object.entries(entry.query).every(([key, value]) => current.query[key] === value)\n })\n if (samePrefix && historyStack.length === currentEntries.length) {\n return\n }\n if (samePrefix && historyStack.length < currentEntries.length) {\n pageStack.back(currentEntries.length - historyStack.length)\n }\n else if (samePrefix && historyStack.length > currentEntries.length) {\n const added = historyStack.slice(currentEntries.length)\n if (added.length === 1) {\n pageStack.push(added[0]!.id, { ...added[0]!.query })\n }\n else {\n pageStack.forward(added)\n }\n }\n else {\n const last = historyStack[historyStack.length - 1]!\n if (getTabBarPagePaths().has(last.id)) {\n pageStack.switchTab(last.id, { ...last.query })\n }\n else {\n pageStack.relaunch(last.id, { ...last.query })\n }\n }\n syncWebRouting(pageStack.entries, 'replace')\n syncTabBarRoute(pageStack.entries[pageStack.entries.length - 1]?.id ?? '')\n syncCurrentWebDocument()\n return\n }\n if (target && pageRegistry.has(target.id)) {\n const current = currentEntries[currentEntries.length - 1]\n if (current?.id === target.id\n && Object.keys(current.query).length === Object.keys(target.query).length\n && Object.entries(target.query).every(([key, value]) => current.query[key] === value)) {\n return\n }\n if (getTabBarPagePaths().has(target.id)) {\n pageStack.switchTab(target.id, { ...target.query })\n }\n else {\n pageStack.relaunch(target.id, { ...target.query })\n }\n syncWebRouting(pageStack.entries, 'replace')\n syncTabBarRoute(target.id)\n syncCurrentWebDocument()\n }\n}\n\nfunction performSwitchTab(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const previousLength = pageStack.entries.length\n const previousEntry = pageStack.entries[previousLength - 1]\n const succeeded = pageStack.switchTab(id, query)\n if (succeeded && (pageStack.entries.length !== previousLength || pageStack.entries.at(-1) !== previousEntry)) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('push')\n }\n return resolveRouteAction('switchTab', options, succeeded, 'not a tabBar page')\n}\n\nfunction bindPageResizeBridge() {\n if (pageResizeBridgeBound || typeof window === 'undefined') {\n return\n }\n if (typeof window.addEventListener !== 'function') {\n return\n }\n pageResizeBridgeBound = true\n window.addEventListener('resize', () => {\n const pages = resolveCurrentPages<ComponentPublicInstance>(pageStack.entries)\n const current = pages[pages.length - 1]\n if (!current) {\n return\n }\n dispatchPageLifetimeToComponents(current, 'resize')\n })\n}\n\nexport function initializePageRoutes(\n ids: string[],\n options?: {\n rpx?: { designWidth?: number, varName?: string }\n navigationBar?: NavigationBarMetrics\n form?: ButtonFormConfig\n tabBar?: WebTabBarConfig\n runtime?: {\n executionMode?: 'compat' | 'safe' | 'strict'\n warnings?: {\n level?: 'off' | 'warn' | 'error'\n dedupe?: boolean\n }\n viewport?: WebViewportConfig\n routing?: WebRoutingConfig\n seo?: WebSeoConfig\n resourceHints?: WebResourceHintsConfig\n }\n },\n) {\n setRuntimeExecutionMode(options?.runtime?.executionMode)\n setRuntimeWarningOptions(options?.runtime?.warnings)\n setupWebViewport(options?.runtime?.viewport)\n configureWebSeo(options?.runtime?.seo)\n setupWebResourceHints(options?.runtime?.resourceHints)\n configureWebRouting(options?.runtime?.routing, ids, reconcileWebRoute)\n appLifecycle.bindVisibility()\n ensureNativeComponentsDefined()\n pageOrder = Array.from(new Set(ids))\n configureTabBar(options?.tabBar, url => performSwitchTab({ url }))\n pageStack.configureTabPages(getTabBarPagePaths())\n if (!pageOrder.length) {\n return\n }\n bindPageResizeBridge()\n if (options?.rpx) {\n setupRpx(options.rpx)\n }\n if (options?.navigationBar) {\n setNavigationBarMetrics(options.navigationBar)\n }\n if (options?.form) {\n setButtonFormConfig(options.form)\n }\n if (!pageStack.entries.length) {\n const initialTarget = readWebRouteTarget(pageOrder)\n const initialId = initialTarget?.id ?? pageOrder[0]\n const initialQuery = initialTarget?.query ?? {}\n if (pageStack.push(initialId, initialQuery, 'appLaunch')) {\n syncTabBarRoute(initialId)\n syncCurrentWebRoute('replace')\n }\n }\n}\n\nexport function registerPage<T extends PageRawOptions | undefined>(options: T, meta: RegisterMeta): T {\n ensureNativeComponentsDefined()\n ensureNavigationBarDefined()\n const tag = slugify(meta.id, 'wv-page')\n const template = meta.template ?? (() => '')\n const normalized = normalizePageOptions(options)\n const existing = pageRegistry.get(meta.id)\n if (existing) {\n existing.hooks = normalized.hooks\n existing.navigationBar = meta.navigationBar\n const component = augmentPageComponentOptions(normalized.component, existing)\n defineComponent(tag, {\n id: meta.id,\n kind: 'page',\n template,\n style: meta.style,\n component,\n })\n return options\n }\n const record: PageRecord = {\n tag,\n hooks: normalized.hooks,\n instances: new Set(),\n navigationBar: meta.navigationBar,\n }\n const component = augmentPageComponentOptions(normalized.component, record)\n defineComponent(tag, {\n id: meta.id,\n kind: 'page',\n template,\n style: meta.style,\n component,\n })\n pageRegistry.set(meta.id, record)\n return options\n}\n\nexport function getCurrentPageInstance(): ComponentPublicInstance | undefined {\n return pageStack.entries[pageStack.entries.length - 1]?.instance\n}\n\nexport function registerComponent<T extends ComponentRawOptions | undefined>(options: T, meta: RegisterMeta): T {\n ensureNativeComponentsDefined()\n const tag = slugify(meta.id, 'wv-component')\n const template = meta.template ?? (() => '')\n const component = normalizeComponentOptions(options)\n if (componentRegistry.has(meta.id)) {\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n return options\n }\n defineComponent(tag, {\n id: meta.id,\n template,\n style: meta.style,\n component,\n })\n componentRegistry.set(meta.id, { tag })\n return options\n}\n\nexport function registerApp<T extends AppRuntime | undefined>(options: T, meta?: RegisterMeta): T {\n setAppStyle(meta?.style ?? '')\n return appLifecycle.register(options)\n}\n\nexport function offAppHide(callback?: AppHideCallback) {\n appLifecycle.offAppHide(callback)\n}\n\nexport function offAppShow(callback?: AppShowCallback) {\n appLifecycle.offAppShow(callback)\n}\n\nexport function onAppHide(callback: AppHideCallback) {\n appLifecycle.onAppHide(callback)\n}\n\nexport function onAppShow(callback: AppShowCallback) {\n appLifecycle.onAppShow(callback)\n}\n\nexport function navigateTo(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.push(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('push')\n }\n return resolveRouteAction('navigateTo', options, succeeded)\n}\n\nexport function redirectTo(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.replace(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('redirectTo', options, succeeded)\n}\n\nexport function reLaunch(options: RouteOptions) {\n const { id, query } = parsePageUrl(options?.url ?? '')\n const succeeded = pageStack.relaunch(id, query)\n if (succeeded) {\n syncTabBarRoute(id)\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('reLaunch', options, succeeded)\n}\n\nexport function switchTab(options: RouteOptions) {\n return performSwitchTab(options)\n}\n\nexport function navigateBack(options?: NavigateBackOptions) {\n const succeeded = pageStack.back(options?.delta)\n if (succeeded) {\n syncTabBarRoute(pageStack.entries[pageStack.entries.length - 1]?.id ?? '')\n syncCurrentWebRoute('replace')\n }\n return resolveRouteAction('navigateBack', options, succeeded)\n}\n\nexport function getCurrentPagesInternal() {\n return resolveCurrentPages<ComponentPublicInstance>(pageStack.entries)\n}\n\nexport function getAppInstance() {\n return appLifecycle.instance\n}\n\nexport function getLaunchOptionsSync() {\n return appLifecycle.getLaunchOptions()\n}\n\nexport function getEnterOptionsSync() {\n return appLifecycle.getEnterOptions()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAM,+BAAe,IAAI,IAAwB;AACjD,MAAM,oCAAoB,IAAI,IAA6B;AAC3D,IAAI,YAAsB,CAAC;AAC3B,IAAI,wBAAwB;AAE5B,IAAI;AACJ,MAAM,eAAe,IAAI,0BACjB,WAAW,QAAQ,UAAU,QAAQ,SAAS,EACtD;AACA,YAAY,IAAI,iBAAiB,eAAc,UAAS,aAAa,eAAe,KAAK,CAAC;AAE1F,SAAS,yBAAyB;CAChC,MAAM,UAAU,UAAU,QAAQ,UAAU,QAAQ,SAAS;CAC7D,oBAAoB;EAClB,OAAO,SAAS;EAChB,OAAO,UAAU,aAAa,IAAI,QAAQ,EAAE,CAAC,EAAE,eAAe,QAAQ;CACxE,CAAC;AACH;AAEA,SAAS,oBAAoB,WAA+B;CAC1D,eAAe,UAAU,SAAS,SAAS;CAC3C,uBAAuB;AACzB;AAEA,SAAS,kBAAkB,QAAoC,OAAyC;CACtG,MAAM,iBAAiB,UAAU;CACjC,MAAM,eAAe,mBAAmB,KAAK;CAC7C,IAAI,cAAc,QAAQ;EACxB,IAAI,aAAa,MAAK,UAAS,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC,GACxD;EAEF,MAAM,eAAe,KAAK,IAAI,aAAa,QAAQ,eAAe,MAAM;EACxE,MAAM,aAAa,aAAa,MAAM,GAAG,YAAY,CAAC,CAAC,OAAO,OAAO,UAAU;GAC7E,MAAM,UAAU,eAAe;GAC/B,OAAO,MAAM,OAAO,QAAQ,OACtB,MAAM,cAAc,UAAa,MAAM,cAAc,kBAAkB,OAAO,MAC/E,OAAO,KAAK,MAAM,KAAK,CAAC,CAAC,WAAW,OAAO,KAAK,QAAQ,KAAK,CAAC,CAAC,UAC/D,OAAO,QAAQ,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,WAAW,QAAQ,MAAM,SAAS,KAAK;EACvF,CAAC;EACD,IAAI,cAAc,aAAa,WAAW,eAAe,QACvD;EAEF,IAAI,cAAc,aAAa,SAAS,eAAe,QACrD,UAAU,KAAK,eAAe,SAAS,aAAa,MAAM;OAEvD,IAAI,cAAc,aAAa,SAAS,eAAe,QAAQ;GAClE,MAAM,QAAQ,aAAa,MAAM,eAAe,MAAM;GACtD,IAAI,MAAM,WAAW,GACnB,UAAU,KAAK,MAAM,EAAE,CAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAE,MAAM,CAAC;QAGnD,UAAU,QAAQ,KAAK;EAE3B,OACK;GACH,MAAM,OAAO,aAAa,aAAa,SAAS;GAChD,IAAI,mBAAmB,CAAC,CAAC,IAAI,KAAK,EAAE,GAClC,UAAU,UAAU,KAAK,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;QAG9C,UAAU,SAAS,KAAK,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;EAEjD;EACA,eAAe,UAAU,SAAS,SAAS;EAC3C,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,SAAS,EAAE,EAAE,MAAM,EAAE;EACzE,uBAAuB;EACvB;CACF;CACA,IAAI,UAAU,aAAa,IAAI,OAAO,EAAE,GAAG;EACzC,MAAM,UAAU,eAAe,eAAe,SAAS;EACvD,IAAI,SAAS,OAAO,OAAO,MACtB,OAAO,KAAK,QAAQ,KAAK,CAAC,CAAC,WAAW,OAAO,KAAK,OAAO,KAAK,CAAC,CAAC,UAChE,OAAO,QAAQ,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,WAAW,QAAQ,MAAM,SAAS,KAAK,GACpF;EAEF,IAAI,mBAAmB,CAAC,CAAC,IAAI,OAAO,EAAE,GACpC,UAAU,UAAU,OAAO,IAAI,EAAE,GAAG,OAAO,MAAM,CAAC;OAGlD,UAAU,SAAS,OAAO,IAAI,EAAE,GAAG,OAAO,MAAM,CAAC;EAEnD,eAAe,UAAU,SAAS,SAAS;EAC3C,gBAAgB,OAAO,EAAE;EACzB,uBAAuB;CACzB;AACF;AAEA,SAAS,iBAAiB,SAAuB;CAC/C,MAAM,EAAE,IAAI,UAAU,aAAa,SAAS,OAAO,EAAE;CACrD,MAAM,iBAAiB,UAAU,QAAQ;CACzC,MAAM,gBAAgB,UAAU,QAAQ,iBAAiB;CACzD,MAAM,YAAY,UAAU,UAAU,IAAI,KAAK;CAC/C,IAAI,cAAc,UAAU,QAAQ,WAAW,kBAAkB,UAAU,QAAQ,GAAG,EAAE,MAAM,gBAAgB;EAC5G,gBAAgB,EAAE;EAClB,oBAAoB,MAAM;CAC5B;CACA,OAAO,mBAAmB,aAAa,SAAS,WAAW,mBAAmB;AAChF;AAEA,SAAS,uBAAuB;CAC9B,IAAI,yBAAyB,OAAO,WAAW,aAC7C;CAEF,IAAI,OAAO,OAAO,qBAAqB,YACrC;CAEF,wBAAwB;CACxB,OAAO,iBAAiB,gBAAgB;EACtC,MAAM,QAAQ,oBAA6C,UAAU,OAAO;EAC5E,MAAM,UAAU,MAAM,MAAM,SAAS;EACrC,IAAI,CAAC,SACH;EAEF,iCAAiC,SAAS,QAAQ;CACpD,CAAC;AACH;AAEA,SAAgB,qBACd,KACA,SAiBA;CACA,wBAAwB,SAAS,SAAS,aAAa;CACvD,yBAAyB,SAAS,SAAS,QAAQ;CACnD,iBAAiB,SAAS,SAAS,QAAQ;CAC3C,gBAAgB,SAAS,SAAS,GAAG;CACrC,sBAAsB,SAAS,SAAS,aAAa;CACrD,oBAAoB,SAAS,SAAS,SAAS,KAAK,iBAAiB;CACrE,aAAa,eAAe;CAC5B,8BAA8B;CAC9B,YAAY,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC;CACnC,gBAAgB,SAAS,SAAQ,QAAO,iBAAiB,EAAE,IAAI,CAAC,CAAC;CACjE,UAAU,kBAAkB,mBAAmB,CAAC;CAChD,IAAI,CAAC,UAAU,QACb;CAEF,qBAAqB;CACrB,IAAI,SAAS,KACX,SAAS,QAAQ,GAAG;CAEtB,IAAI,SAAS,eACX,wBAAwB,QAAQ,aAAa;CAE/C,IAAI,SAAS,MACX,oBAAoB,QAAQ,IAAI;CAElC,IAAI,CAAC,UAAU,QAAQ,QAAQ;EAC7B,MAAM,gBAAgB,mBAAmB,SAAS;EAClD,MAAM,YAAY,eAAe,MAAM,UAAU;EACjD,MAAM,eAAe,eAAe,SAAS,CAAC;EAC9C,IAAI,UAAU,KAAK,WAAW,cAAc,WAAW,GAAG;GACxD,gBAAgB,SAAS;GACzB,oBAAoB,SAAS;EAC/B;CACF;AACF;AAEA,SAAgB,aAAmD,SAAY,MAAuB;CACpG,8BAA8B;CAC9B,2BAA2B;CAC3B,MAAM,MAAM,QAAQ,KAAK,IAAI,SAAS;CACtC,MAAM,WAAW,KAAK,mBAAmB;CACzC,MAAM,aAAa,qBAAqB,OAAO;CAC/C,MAAM,WAAW,aAAa,IAAI,KAAK,EAAE;CACzC,IAAI,UAAU;EACZ,SAAS,QAAQ,WAAW;EAC5B,SAAS,gBAAgB,KAAK;EAC9B,MAAM,YAAY,4BAA4B,WAAW,WAAW,QAAQ;EAC5E,gBAAgB,KAAK;GACnB,IAAI,KAAK;GACT,MAAM;GACN;GACA,OAAO,KAAK;GACZ;EACF,CAAC;EACD,OAAO;CACT;CACA,MAAM,SAAqB;EACzB;EACA,OAAO,WAAW;EAClB,2BAAW,IAAI,IAAI;EACnB,eAAe,KAAK;CACtB;CACA,MAAM,YAAY,4BAA4B,WAAW,WAAW,MAAM;CAC1E,gBAAgB,KAAK;EACnB,IAAI,KAAK;EACT,MAAM;EACN;EACA,OAAO,KAAK;EACZ;CACF,CAAC;CACD,aAAa,IAAI,KAAK,IAAI,MAAM;CAChC,OAAO;AACT;AAEA,SAAgB,yBAA8D;CAC5E,OAAO,UAAU,QAAQ,UAAU,QAAQ,SAAS,EAAE,EAAE;AAC1D;AAEA,SAAgB,kBAA6D,SAAY,MAAuB;CAC9G,8BAA8B;CAC9B,MAAM,MAAM,QAAQ,KAAK,IAAI,cAAc;CAC3C,MAAM,WAAW,KAAK,mBAAmB;CACzC,MAAM,YAAY,0BAA0B,OAAO;CACnD,IAAI,kBAAkB,IAAI,KAAK,EAAE,GAAG;EAClC,gBAAgB,KAAK;GACnB,IAAI,KAAK;GACT;GACA,OAAO,KAAK;GACZ;EACF,CAAC;EACD,OAAO;CACT;CACA,gBAAgB,KAAK;EACnB,IAAI,KAAK;EACT;EACA,OAAO,KAAK;EACZ;CACF,CAAC;CACD,kBAAkB,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC;CACtC,OAAO;AACT;AAEA,SAAgB,YAA8C,SAAY,MAAwB;CAChG,YAAY,MAAM,SAAS,EAAE;CAC7B,OAAO,aAAa,SAAS,OAAO;AACtC;AAEA,SAAgB,WAAW,UAA4B;CACrD,aAAa,WAAW,QAAQ;AAClC;AAEA,SAAgB,WAAW,UAA4B;CACrD,aAAa,WAAW,QAAQ;AAClC;AAEA,SAAgB,UAAU,UAA2B;CACnD,aAAa,UAAU,QAAQ;AACjC;AAEA,SAAgB,UAAU,UAA2B;CACnD,aAAa,UAAU,QAAQ;AACjC;AAEA,SAAgB,WAAW,SAAuB;CAChD,MAAM,EAAE,IAAI,UAAU,aAAa,SAAS,OAAO,EAAE;CACrD,MAAM,YAAY,UAAU,KAAK,IAAI,KAAK;CAC1C,IAAI,WAAW;EACb,gBAAgB,EAAE;EAClB,oBAAoB,MAAM;CAC5B;CACA,OAAO,mBAAmB,cAAc,SAAS,SAAS;AAC5D;AAEA,SAAgB,WAAW,SAAuB;CAChD,MAAM,EAAE,IAAI,UAAU,aAAa,SAAS,OAAO,EAAE;CACrD,MAAM,YAAY,UAAU,QAAQ,IAAI,KAAK;CAC7C,IAAI,WAAW;EACb,gBAAgB,EAAE;EAClB,oBAAoB,SAAS;CAC/B;CACA,OAAO,mBAAmB,cAAc,SAAS,SAAS;AAC5D;AAEA,SAAgB,SAAS,SAAuB;CAC9C,MAAM,EAAE,IAAI,UAAU,aAAa,SAAS,OAAO,EAAE;CACrD,MAAM,YAAY,UAAU,SAAS,IAAI,KAAK;CAC9C,IAAI,WAAW;EACb,gBAAgB,EAAE;EAClB,oBAAoB,SAAS;CAC/B;CACA,OAAO,mBAAmB,YAAY,SAAS,SAAS;AAC1D;AAEA,SAAgB,UAAU,SAAuB;CAC/C,OAAO,iBAAiB,OAAO;AACjC;AAEA,SAAgB,aAAa,SAA+B;CAC1D,MAAM,YAAY,UAAU,KAAK,SAAS,KAAK;CAC/C,IAAI,WAAW;EACb,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,SAAS,EAAE,EAAE,MAAM,EAAE;EACzE,oBAAoB,SAAS;CAC/B;CACA,OAAO,mBAAmB,gBAAgB,SAAS,SAAS;AAC9D;AAEA,SAAgB,0BAA0B;CACxC,OAAO,oBAA6C,UAAU,OAAO;AACvE;AAEA,SAAgB,iBAAiB;CAC/B,OAAO,aAAa;AACtB;AAEA,SAAgB,uBAAuB;CACrC,OAAO,aAAa,iBAAiB;AACvC;AAEA,SAAgB,sBAAsB;CACpC,OAAO,aAAa,gBAAgB;AACtC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AppHideCallback, AppHideOptions, AppLaunchOptions, AppShowCallback } from "./polyfill/routeRuntime/options.mjs";
|
|
2
2
|
import { authorize, checkSession, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getDeviceInfo, getFuzzyLocation, getLocation, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getSystemInfo, getSystemInfoSync, getSystemSetting, getUserInfo, getUserProfile, getWindowInfo, login, offNetworkStatusChange, offWindowResize, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openSetting, vibrateShort } from "./polyfill/deviceAuthSystemApi.mjs";
|
|
3
3
|
import { getEnterOptionsSync, getLaunchOptionsSync, initializePageRoutes, navigateBack, navigateTo, offAppHide, offAppShow, onAppHide, onAppShow, reLaunch, redirectTo, registerApp, registerComponent, registerPage, switchTab } from "./polyfill/routeRuntime.mjs";
|
|
4
|
+
import { AppRouteCallback, AppRouteEvent, AppRouteOpenType, BeforePageUnloadCallback, BeforePageUnloadEvent, offAppRoute, offAppRouteDone, offBeforeAppRoute, offBeforePageUnload, onAppRoute, onAppRouteDone, onBeforeAppRoute, onBeforePageUnload } from "./polyfill/routeRuntime/events.mjs";
|
|
4
5
|
import { clearStorage, clearStorageSync, createCanvasContext, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getFileSystemManager, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, hideKeyboard, loadSubPackage, navigateToMiniProgram, nextTick, pageScrollTo, preloadSubpackage, removeStorage, removeStorageSync, request, setStorage, setStorageSync, startPullDownRefresh, stopPullDownRefresh, uploadFile } from "./polyfill/runtimeDataApi.mjs";
|
|
5
6
|
import { chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, compressImage, compressVideo, getClipboardData, getImageInfo, getVideoInfo, hideLoading, hideTabBar, hideTabBarRedDot, makePhoneCall, openCustomerServiceChat, openDocument, openLocation, openVideoEditor, previewImage, previewMedia, removeTabBarBadge, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setClipboardData, setTabBarBadge, setTabBarItem, setTabBarStyle, showActionSheet, showLoading, showModal, showShareMenu, showTabBar, showTabBarRedDot, showToast, updateShareMenu } from "./polyfill/uiMediaApi.mjs";
|
|
6
7
|
import { canIUse, createInterstitialAd, createRewardedVideoAd, getExtConfig, getExtConfigSync, getLogManager, getUpdateManager, hideNavigationBarLoading, reportAnalytics, setBackgroundColor, setBackgroundTextStyle, setNavigationBarColor, setNavigationBarTitle, showNavigationBarLoading } from "./polyfill/index.mjs";
|
|
7
|
-
export { type AppHideCallback, type AppHideOptions, type AppLaunchOptions, type AppShowCallback, authorize, canIUse, checkSession, chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, clearStorage, clearStorageSync, compressImage, compressVideo, createCanvasContext, createInterstitialAd, createRewardedVideoAd, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getClipboardData, getDeviceInfo, getEnterOptionsSync, getExtConfig, getExtConfigSync, getFileSystemManager, getFuzzyLocation, getImageInfo, getLaunchOptionsSync, getLocation, getLogManager, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, getSystemInfo, getSystemInfoSync, getSystemSetting, getUpdateManager, getUserInfo, getUserProfile, getVideoInfo, getWindowInfo, hideKeyboard, hideLoading, hideNavigationBarLoading, hideTabBar, hideTabBarRedDot, initializePageRoutes, loadSubPackage, login, makePhoneCall, navigateBack, navigateTo, navigateToMiniProgram, nextTick, offAppHide, offAppShow, offNetworkStatusChange, offWindowResize, onAppHide, onAppShow, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openCustomerServiceChat, openDocument, openLocation, openSetting, openVideoEditor, pageScrollTo, preloadSubpackage, previewImage, previewMedia, reLaunch, redirectTo, registerApp, registerComponent, registerPage, removeStorage, removeStorageSync, removeTabBarBadge, reportAnalytics, request, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setBackgroundColor, setBackgroundTextStyle, setClipboardData, setNavigationBarColor, setNavigationBarTitle, setStorage, setStorageSync, setTabBarBadge, setTabBarItem, setTabBarStyle, showActionSheet, showLoading, showModal, showNavigationBarLoading, showShareMenu, showTabBar, showTabBarRedDot, showToast, startPullDownRefresh, stopPullDownRefresh, switchTab, updateShareMenu, uploadFile, vibrateShort };
|
|
8
|
+
export { type AppHideCallback, type AppHideOptions, type AppLaunchOptions, type AppRouteCallback, type AppRouteEvent, type AppRouteOpenType, type AppShowCallback, type BeforePageUnloadCallback, type BeforePageUnloadEvent, authorize, canIUse, checkSession, chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, clearStorage, clearStorageSync, compressImage, compressVideo, createCanvasContext, createInterstitialAd, createRewardedVideoAd, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getClipboardData, getDeviceInfo, getEnterOptionsSync, getExtConfig, getExtConfigSync, getFileSystemManager, getFuzzyLocation, getImageInfo, getLaunchOptionsSync, getLocation, getLogManager, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, getSystemInfo, getSystemInfoSync, getSystemSetting, getUpdateManager, getUserInfo, getUserProfile, getVideoInfo, getWindowInfo, hideKeyboard, hideLoading, hideNavigationBarLoading, hideTabBar, hideTabBarRedDot, initializePageRoutes, loadSubPackage, login, makePhoneCall, navigateBack, navigateTo, navigateToMiniProgram, nextTick, offAppHide, offAppRoute, offAppRouteDone, offAppShow, offBeforeAppRoute, offBeforePageUnload, offNetworkStatusChange, offWindowResize, onAppHide, onAppRoute, onAppRouteDone, onAppShow, onBeforeAppRoute, onBeforePageUnload, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openCustomerServiceChat, openDocument, openLocation, openSetting, openVideoEditor, pageScrollTo, preloadSubpackage, previewImage, previewMedia, reLaunch, redirectTo, registerApp, registerComponent, registerPage, removeStorage, removeStorageSync, removeTabBarBadge, reportAnalytics, request, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setBackgroundColor, setBackgroundTextStyle, setClipboardData, setNavigationBarColor, setNavigationBarTitle, setStorage, setStorageSync, setTabBarBadge, setTabBarItem, setTabBarStyle, showActionSheet, showLoading, showModal, showNavigationBarLoading, showShareMenu, showTabBar, showTabBarRedDot, showToast, startPullDownRefresh, stopPullDownRefresh, switchTab, updateShareMenu, uploadFile, vibrateShort };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { emitRuntimeWarning } from "./warning.mjs";
|
|
2
|
+
import { nameRuntimeEventHandler } from "./componentEvents.mjs";
|
|
2
3
|
import { getRuntimeExecutionMode, warnRuntimeExecutionOnce } from "./execution.mjs";
|
|
3
4
|
import { invokeMiniProgramEventHandler } from "./inputHandlerResult.mjs";
|
|
4
5
|
|
|
@@ -69,7 +70,7 @@ function normalizeKey(rawKey, item, index, scope) {
|
|
|
69
70
|
function createEventHandler(instance, methods, eventName, handlerRef, flags) {
|
|
70
71
|
const handler = typeof handlerRef === "function" ? handlerRef : methods[handlerRef] ?? instance[handlerRef];
|
|
71
72
|
if (typeof handler !== "function") return () => {};
|
|
72
|
-
return (nativeEvent) => {
|
|
73
|
+
return nameRuntimeEventHandler((nativeEvent) => {
|
|
73
74
|
if (flags?.catch) nativeEvent.stopPropagation();
|
|
74
75
|
const target = nativeEvent.target;
|
|
75
76
|
const dataset = nativeEvent.currentTarget?.dataset ?? {};
|
|
@@ -82,7 +83,7 @@ function createEventHandler(instance, methods, eventName, handlerRef, flags) {
|
|
|
82
83
|
originalEvent: nativeEvent
|
|
83
84
|
};
|
|
84
85
|
invokeMiniProgramEventHandler(handler, instance, syntheticEvent, nativeEvent);
|
|
85
|
-
};
|
|
86
|
+
}, eventName);
|
|
86
87
|
}
|
|
87
88
|
function createWxsModule(code, id, requireMap) {
|
|
88
89
|
const module = { exports: {} };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/runtime/renderContext.ts"],"sourcesContent":["import type { ComponentPublicInstance } from './component'\nimport type { TemplateScope } from './template'\nimport { getRuntimeExecutionMode, warnRuntimeExecutionOnce } from './execution'\nimport { invokeMiniProgramEventHandler } from './inputHandlerResult'\nimport { emitRuntimeWarning } from './warning'\n\nexport interface RenderContext {\n instance: ComponentPublicInstance\n eval: (expression: string, scope: TemplateScope, wxs?: Record<string, any>) => any\n createScope: (parent: TemplateScope, locals?: Record<string, any>) => TemplateScope\n mergeScope: (parent: TemplateScope, data?: any) => TemplateScope\n normalizeList: (value: any) => any[]\n key: (rawKey: string, item: any, index: number, scope: TemplateScope, wxs?: Record<string, any>) => any\n renderTemplate: (templates: Record<string, any>, name: any, scope: TemplateScope, ctx: RenderContext) => any\n event: (eventName: string, handlerName: any, scope: TemplateScope, wxs?: Record<string, any>, flags?: { catch?: boolean, capture?: boolean }) => (event: Event) => void\n createWxsModule: (code: string, id: string, requireMap?: Record<string, any>) => Record<string, any>\n}\n\nconst expressionCache = new Map<string, (scope: TemplateScope) => any>()\nconst MUSTACHE_PREFIX_RE = /^\\{\\{\\s*/\nconst MUSTACHE_SUFFIX_RE = /\\s*\\}\\}$/\nconst SIMPLE_KEY_PATH_RE = /[.[()]/\n\nfunction createScope(initial?: TemplateScope): TemplateScope {\n return Object.assign(Object.create(null), initial ?? {})\n}\n\nfunction createChildScope(parent: TemplateScope, locals?: Record<string, any>): TemplateScope {\n return Object.assign(Object.create(parent), locals ?? {})\n}\n\nfunction evaluateExpression(expression: string, scope: TemplateScope): any {\n if (!expression) {\n return undefined\n }\n const trimmed = expression.trim()\n if (!trimmed) {\n return undefined\n }\n let evaluator = expressionCache.get(trimmed)\n if (!evaluator) {\n try {\n // eslint-disable-next-line no-new-func -- dynamic expressions are required for template evaluation\n evaluator = new Function('scope', `with(scope){ return (${trimmed}); }`) as (scope: TemplateScope) => any\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-expression-parse:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式解析错误 \"${trimmed}\": ${reason}`,\n )\n evaluator = () => undefined\n }\n else {\n throw new SyntaxError(`[@weapp-vite/web] 无法解析表达式 \"${trimmed}\": ${reason}`)\n }\n }\n expressionCache.set(trimmed, evaluator)\n }\n try {\n return evaluator?.(scope)\n }\n catch (error) {\n const mode = getRuntimeExecutionMode()\n if (mode === 'strict') {\n const reason = error instanceof Error ? error.message : String(error)\n throw new Error(`[@weapp-vite/web] strict 模式下表达式执行失败 \"${trimmed}\": ${reason}`)\n }\n if (mode === 'safe') {\n const reason = error instanceof Error ? error.message : String(error)\n warnRuntimeExecutionOnce(\n `safe-expression-runtime:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式执行错误 \"${trimmed}\": ${reason}`,\n )\n }\n return undefined\n }\n}\n\nfunction normalizeList(value: any): any[] {\n if (Array.isArray(value)) {\n return value\n }\n if (value == null) {\n return []\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n const length = Math.max(0, Math.floor(value))\n return Array.from({ length }, (_, index) => index)\n }\n if (typeof value === 'object') {\n return Object.values(value)\n }\n return []\n}\n\nfunction normalizeKey(rawKey: string, item: any, index: number, scope: TemplateScope): any {\n const key = rawKey?.trim()\n if (!key) {\n if (item != null && (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean')) {\n return item\n }\n return index\n }\n if (key === '*this') {\n return item\n }\n if (key.includes('{{') && key.includes('}}')) {\n const expr = key.replace(MUSTACHE_PREFIX_RE, '').replace(MUSTACHE_SUFFIX_RE, '')\n return evaluateExpression(expr, scope)\n }\n if (!SIMPLE_KEY_PATH_RE.test(key) && item && typeof item === 'object' && key in item) {\n return (item as Record<string, any>)[key]\n }\n return evaluateExpression(key, scope)\n}\n\nfunction createEventHandler(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n eventName: string,\n handlerRef: string | ((event: any) => any),\n flags?: { catch?: boolean },\n) {\n const handler = typeof handlerRef === 'function'\n ? handlerRef\n : methods[handlerRef] ?? (instance as Record<string, any>)[handlerRef]\n if (typeof handler !== 'function') {\n return () => {}\n }\n return (nativeEvent: Event) => {\n if (flags?.catch) {\n nativeEvent.stopPropagation()\n }\n const target = nativeEvent.target as HTMLElement | null\n const currentTarget = nativeEvent.currentTarget as HTMLElement | null\n const dataset = currentTarget?.dataset ?? {}\n const syntheticEvent = {\n type: eventName,\n timeStamp: nativeEvent.timeStamp,\n detail: (nativeEvent as CustomEvent).detail ?? (nativeEvent as InputEvent).data ?? undefined,\n target: {\n dataset: target?.dataset ?? dataset,\n },\n currentTarget: {\n dataset,\n },\n originalEvent: nativeEvent,\n }\n invokeMiniProgramEventHandler(handler, instance, syntheticEvent, nativeEvent)\n }\n}\n\nfunction createWxsModule(code: string, id: string, requireMap?: Record<string, any>) {\n const module = { exports: {} as Record<string, any> }\n const exports = module.exports\n const getRegExp = (pattern: string, flags?: string) => new RegExp(pattern, flags)\n const getDate = (value?: string | number | Date) => (value == null ? new Date() : new Date(value))\n const require = (request: string) => requireMap?.[request]\n try {\n // eslint-disable-next-line no-new-func -- run in isolated module scope\n const runner = new Function('module', 'exports', 'require', 'getRegExp', 'getDate', code)\n runner(module, exports, require, getRegExp, getDate)\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-wxs-runtime:${id}`,\n `[@weapp-vite/web] safe 模式下忽略 WXS 执行错误: ${id} ${reason}`,\n )\n return {}\n }\n throw new Error(`[@weapp-vite/web] WXS 执行失败: ${id} ${reason}`)\n }\n return module.exports\n}\n\nexport function createRenderContext(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n): RenderContext {\n const warnMissingTemplate = (name: string) => {\n emitRuntimeWarning(`[@weapp-vite/web] 未找到模板: ${name}`, {\n key: `template-missing:${name}`,\n context: 'runtime:template',\n })\n }\n\n return {\n instance,\n eval: (expression, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return evaluateExpression(expression, renderScope)\n },\n createScope: (parent, locals) => createChildScope(parent, locals),\n mergeScope: (parent, data) => {\n const baseScope = parent ?? createScope()\n if (!data || typeof data !== 'object') {\n return baseScope\n }\n return createChildScope(baseScope, data as Record<string, any>)\n },\n normalizeList,\n key: (rawKey, item, index, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return normalizeKey(rawKey, item, index, renderScope)\n },\n renderTemplate: (templates, name, scope, ctx) => {\n const resolvedName = typeof name === 'string' ? name : String(name)\n const template = templates?.[resolvedName]\n if (typeof template !== 'function') {\n warnMissingTemplate(resolvedName)\n return ''\n }\n return template(scope, ctx)\n },\n event: (eventName, handlerName, _scope, _wxs, flags) => {\n if (typeof handlerName === 'function') {\n return createEventHandler(instance, methods, eventName, handlerName, flags)\n }\n const resolvedHandler = String(handlerName ?? '')\n return createEventHandler(instance, methods, eventName, resolvedHandler, flags)\n },\n createWxsModule,\n }\n}\n\nexport { createChildScope, createScope, evaluateExpression }\n"],"mappings":";;;;;AAkBA,MAAM,kCAAkB,IAAI,IAA2C;AACvE,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAE3B,SAAS,YAAY,SAAwC;CAC3D,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG,WAAW,CAAC,CAAC;AACzD;AAEA,SAAS,iBAAiB,QAAuB,QAA6C;CAC5F,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,GAAG,UAAU,CAAC,CAAC;AAC1D;AAEA,SAAS,mBAAmB,YAAoB,OAA2B;CACzE,IAAI,CAAC,YACH;CAEF,MAAM,UAAU,WAAW,KAAK;CAChC,IAAI,CAAC,SACH;CAEF,IAAI,YAAY,gBAAgB,IAAI,OAAO;CAC3C,IAAI,CAAC,WAAW;EACd,IAAI;GAEF,YAAY,IAAI,SAAS,SAAS,wBAAwB,QAAQ,KAAK;EACzE,SACO,OAAO;GACZ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAEpE,IADa,wBACN,MAAM,QAAQ;IACnB,yBACE,yBAAyB,WACzB,wCAAwC,QAAQ,KAAK,QACvD;IACA,kBAAkB;GACpB,OAEE,MAAM,IAAI,YAAY,8BAA8B,QAAQ,KAAK,QAAQ;EAE7E;EACA,gBAAgB,IAAI,SAAS,SAAS;CACxC;CACA,IAAI;EACF,OAAO,YAAY,KAAK;CAC1B,SACO,OAAO;EACZ,MAAM,OAAO,wBAAwB;EACrC,IAAI,SAAS,UAAU;GACrB,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GACpE,MAAM,IAAI,MAAM,wCAAwC,QAAQ,KAAK,QAAQ;EAC/E;EACA,IAAI,SAAS,QAAQ;GACnB,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GACpE,yBACE,2BAA2B,WAC3B,wCAAwC,QAAQ,KAAK,QACvD;EACF;EACA;CACF;AACF;AAEA,SAAS,cAAc,OAAmB;CACxC,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO;CAET,IAAI,SAAS,MACX,OAAO,CAAC;CAEV,IAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;EACvD,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;EAC5C,OAAO,MAAM,KAAK,EAAE,OAAO,IAAI,GAAG,UAAU,KAAK;CACnD;CACA,IAAI,OAAO,UAAU,UACnB,OAAO,OAAO,OAAO,KAAK;CAE5B,OAAO,CAAC;AACV;AAEA,SAAS,aAAa,QAAgB,MAAW,OAAe,OAA2B;CACzF,MAAM,MAAM,QAAQ,KAAK;CACzB,IAAI,CAAC,KAAK;EACR,IAAI,QAAQ,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,OAAO,SAAS,YAC3F,OAAO;EAET,OAAO;CACT;CACA,IAAI,QAAQ,SACV,OAAO;CAET,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,GAEzC,OAAO,mBADM,IAAI,QAAQ,oBAAoB,EAAE,CAAC,CAAC,QAAQ,oBAAoB,EAChD,GAAG,KAAK;CAEvC,IAAI,CAAC,mBAAmB,KAAK,GAAG,KAAK,QAAQ,OAAO,SAAS,YAAY,OAAO,MAC9E,OAAQ,KAA6B;CAEvC,OAAO,mBAAmB,KAAK,KAAK;AACtC;AAEA,SAAS,mBACP,UACA,SACA,WACA,YACA,OACA;CACA,MAAM,UAAU,OAAO,eAAe,aAClC,aACA,QAAQ,eAAgB,SAAiC;CAC7D,IAAI,OAAO,YAAY,YACrB,aAAa,CAAC;CAEhB,QAAQ,gBAAuB;EAC7B,IAAI,OAAO,OACT,YAAY,gBAAgB;EAE9B,MAAM,SAAS,YAAY;EAE3B,MAAM,UADgB,YAAY,eACH,WAAW,CAAC;EAC3C,MAAM,iBAAiB;GACrB,MAAM;GACN,WAAW,YAAY;GACvB,QAAS,YAA4B,UAAW,YAA2B,QAAQ;GACnF,QAAQ,EACN,SAAS,QAAQ,WAAW,QAC9B;GACA,eAAe,EACb,QACF;GACA,eAAe;EACjB;EACA,8BAA8B,SAAS,UAAU,gBAAgB,WAAW;CAC9E;AACF;AAEA,SAAS,gBAAgB,MAAc,IAAY,YAAkC;CACnF,MAAM,SAAS,EAAE,SAAS,CAAC,EAAyB;CACpD,MAAM,UAAU,OAAO;CACvB,MAAM,aAAa,SAAiB,UAAmB,IAAI,OAAO,SAAS,KAAK;CAChF,MAAM,WAAW,UAAoC,SAAS,uBAAO,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK;CAChG,MAAM,WAAW,YAAoB,aAAa;CAClD,IAAI;EAGF,IADmB,SAAS,UAAU,WAAW,WAAW,aAAa,WAAW,IAC/E,CAAC,CAAC,QAAQ,SAAS,SAAS,WAAW,OAAO;CACrD,SACO,OAAO;EACZ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EAEpE,IADa,wBACN,MAAM,QAAQ;GACnB,yBACE,oBAAoB,MACpB,0CAA0C,GAAG,GAAG,QAClD;GACA,OAAO,CAAC;EACV;EACA,MAAM,IAAI,MAAM,+BAA+B,GAAG,GAAG,QAAQ;CAC/D;CACA,OAAO,OAAO;AAChB;AAEA,SAAgB,oBACd,UACA,SACe;CACf,MAAM,uBAAuB,SAAiB;EAC5C,mBAAmB,4BAA4B,QAAQ;GACrD,KAAK,oBAAoB;GACzB,SAAS;EACX,CAAC;CACH;CAEA,OAAO;EACL;EACA,OAAO,YAAY,OAAO,QAAQ;GAChC,MAAM,YAAY,SAAS,YAAY;GAEvC,OAAO,mBAAmB,YADN,MAAM,iBAAiB,WAAW,GAAG,IAAI,SACZ;EACnD;EACA,cAAc,QAAQ,WAAW,iBAAiB,QAAQ,MAAM;EAChE,aAAa,QAAQ,SAAS;GAC5B,MAAM,YAAY,UAAU,YAAY;GACxC,IAAI,CAAC,QAAQ,OAAO,SAAS,UAC3B,OAAO;GAET,OAAO,iBAAiB,WAAW,IAA2B;EAChE;EACA;EACA,MAAM,QAAQ,MAAM,OAAO,OAAO,QAAQ;GACxC,MAAM,YAAY,SAAS,YAAY;GAEvC,OAAO,aAAa,QAAQ,MAAM,OADd,MAAM,iBAAiB,WAAW,GAAG,IAAI,SACT;EACtD;EACA,iBAAiB,WAAW,MAAM,OAAO,QAAQ;GAC/C,MAAM,eAAe,OAAO,SAAS,WAAW,OAAO,OAAO,IAAI;GAClE,MAAM,WAAW,YAAY;GAC7B,IAAI,OAAO,aAAa,YAAY;IAClC,oBAAoB,YAAY;IAChC,OAAO;GACT;GACA,OAAO,SAAS,OAAO,GAAG;EAC5B;EACA,QAAQ,WAAW,aAAa,QAAQ,MAAM,UAAU;GACtD,IAAI,OAAO,gBAAgB,YACzB,OAAO,mBAAmB,UAAU,SAAS,WAAW,aAAa,KAAK;GAG5E,OAAO,mBAAmB,UAAU,SAAS,WADrB,OAAO,eAAe,EACwB,GAAG,KAAK;EAChF;EACA;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/runtime/renderContext.ts"],"sourcesContent":["import type { ComponentPublicInstance } from './component'\nimport type { TemplateScope } from './template'\nimport { nameRuntimeEventHandler } from './componentEvents'\nimport { getRuntimeExecutionMode, warnRuntimeExecutionOnce } from './execution'\nimport { invokeMiniProgramEventHandler } from './inputHandlerResult'\nimport { emitRuntimeWarning } from './warning'\n\nexport interface RenderContext {\n instance: ComponentPublicInstance\n eval: (expression: string, scope: TemplateScope, wxs?: Record<string, any>) => any\n createScope: (parent: TemplateScope, locals?: Record<string, any>) => TemplateScope\n mergeScope: (parent: TemplateScope, data?: any) => TemplateScope\n normalizeList: (value: any) => any[]\n key: (rawKey: string, item: any, index: number, scope: TemplateScope, wxs?: Record<string, any>) => any\n renderTemplate: (templates: Record<string, any>, name: any, scope: TemplateScope, ctx: RenderContext) => any\n event: (eventName: string, handlerName: any, scope: TemplateScope, wxs?: Record<string, any>, flags?: { catch?: boolean, capture?: boolean }) => (event: Event) => void\n createWxsModule: (code: string, id: string, requireMap?: Record<string, any>) => Record<string, any>\n}\n\nconst expressionCache = new Map<string, (scope: TemplateScope) => any>()\nconst MUSTACHE_PREFIX_RE = /^\\{\\{\\s*/\nconst MUSTACHE_SUFFIX_RE = /\\s*\\}\\}$/\nconst SIMPLE_KEY_PATH_RE = /[.[()]/\n\nfunction createScope(initial?: TemplateScope): TemplateScope {\n return Object.assign(Object.create(null), initial ?? {})\n}\n\nfunction createChildScope(parent: TemplateScope, locals?: Record<string, any>): TemplateScope {\n return Object.assign(Object.create(parent), locals ?? {})\n}\n\nfunction evaluateExpression(expression: string, scope: TemplateScope): any {\n if (!expression) {\n return undefined\n }\n const trimmed = expression.trim()\n if (!trimmed) {\n return undefined\n }\n let evaluator = expressionCache.get(trimmed)\n if (!evaluator) {\n try {\n // eslint-disable-next-line no-new-func -- dynamic expressions are required for template evaluation\n evaluator = new Function('scope', `with(scope){ return (${trimmed}); }`) as (scope: TemplateScope) => any\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-expression-parse:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式解析错误 \"${trimmed}\": ${reason}`,\n )\n evaluator = () => undefined\n }\n else {\n throw new SyntaxError(`[@weapp-vite/web] 无法解析表达式 \"${trimmed}\": ${reason}`)\n }\n }\n expressionCache.set(trimmed, evaluator)\n }\n try {\n return evaluator?.(scope)\n }\n catch (error) {\n const mode = getRuntimeExecutionMode()\n if (mode === 'strict') {\n const reason = error instanceof Error ? error.message : String(error)\n throw new Error(`[@weapp-vite/web] strict 模式下表达式执行失败 \"${trimmed}\": ${reason}`)\n }\n if (mode === 'safe') {\n const reason = error instanceof Error ? error.message : String(error)\n warnRuntimeExecutionOnce(\n `safe-expression-runtime:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式执行错误 \"${trimmed}\": ${reason}`,\n )\n }\n return undefined\n }\n}\n\nfunction normalizeList(value: any): any[] {\n if (Array.isArray(value)) {\n return value\n }\n if (value == null) {\n return []\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n const length = Math.max(0, Math.floor(value))\n return Array.from({ length }, (_, index) => index)\n }\n if (typeof value === 'object') {\n return Object.values(value)\n }\n return []\n}\n\nfunction normalizeKey(rawKey: string, item: any, index: number, scope: TemplateScope): any {\n const key = rawKey?.trim()\n if (!key) {\n if (item != null && (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean')) {\n return item\n }\n return index\n }\n if (key === '*this') {\n return item\n }\n if (key.includes('{{') && key.includes('}}')) {\n const expr = key.replace(MUSTACHE_PREFIX_RE, '').replace(MUSTACHE_SUFFIX_RE, '')\n return evaluateExpression(expr, scope)\n }\n if (!SIMPLE_KEY_PATH_RE.test(key) && item && typeof item === 'object' && key in item) {\n return (item as Record<string, any>)[key]\n }\n return evaluateExpression(key, scope)\n}\n\nfunction createEventHandler(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n eventName: string,\n handlerRef: string | ((event: any) => any),\n flags?: { catch?: boolean },\n) {\n const handler = typeof handlerRef === 'function'\n ? handlerRef\n : methods[handlerRef] ?? (instance as Record<string, any>)[handlerRef]\n if (typeof handler !== 'function') {\n return () => {}\n }\n return nameRuntimeEventHandler((nativeEvent: Event) => {\n if (flags?.catch) {\n nativeEvent.stopPropagation()\n }\n const target = nativeEvent.target as HTMLElement | null\n const currentTarget = nativeEvent.currentTarget as HTMLElement | null\n const dataset = currentTarget?.dataset ?? {}\n const syntheticEvent = {\n type: eventName,\n timeStamp: nativeEvent.timeStamp,\n detail: (nativeEvent as CustomEvent).detail ?? (nativeEvent as InputEvent).data ?? undefined,\n target: {\n dataset: target?.dataset ?? dataset,\n },\n currentTarget: {\n dataset,\n },\n originalEvent: nativeEvent,\n }\n invokeMiniProgramEventHandler(handler, instance, syntheticEvent, nativeEvent)\n }, eventName)\n}\n\nfunction createWxsModule(code: string, id: string, requireMap?: Record<string, any>) {\n const module = { exports: {} as Record<string, any> }\n const exports = module.exports\n const getRegExp = (pattern: string, flags?: string) => new RegExp(pattern, flags)\n const getDate = (value?: string | number | Date) => (value == null ? new Date() : new Date(value))\n const require = (request: string) => requireMap?.[request]\n try {\n // eslint-disable-next-line no-new-func -- run in isolated module scope\n const runner = new Function('module', 'exports', 'require', 'getRegExp', 'getDate', code)\n runner(module, exports, require, getRegExp, getDate)\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-wxs-runtime:${id}`,\n `[@weapp-vite/web] safe 模式下忽略 WXS 执行错误: ${id} ${reason}`,\n )\n return {}\n }\n throw new Error(`[@weapp-vite/web] WXS 执行失败: ${id} ${reason}`)\n }\n return module.exports\n}\n\nexport function createRenderContext(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n): RenderContext {\n const warnMissingTemplate = (name: string) => {\n emitRuntimeWarning(`[@weapp-vite/web] 未找到模板: ${name}`, {\n key: `template-missing:${name}`,\n context: 'runtime:template',\n })\n }\n\n return {\n instance,\n eval: (expression, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return evaluateExpression(expression, renderScope)\n },\n createScope: (parent, locals) => createChildScope(parent, locals),\n mergeScope: (parent, data) => {\n const baseScope = parent ?? createScope()\n if (!data || typeof data !== 'object') {\n return baseScope\n }\n return createChildScope(baseScope, data as Record<string, any>)\n },\n normalizeList,\n key: (rawKey, item, index, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return normalizeKey(rawKey, item, index, renderScope)\n },\n renderTemplate: (templates, name, scope, ctx) => {\n const resolvedName = typeof name === 'string' ? name : String(name)\n const template = templates?.[resolvedName]\n if (typeof template !== 'function') {\n warnMissingTemplate(resolvedName)\n return ''\n }\n return template(scope, ctx)\n },\n event: (eventName, handlerName, _scope, _wxs, flags) => {\n if (typeof handlerName === 'function') {\n return createEventHandler(instance, methods, eventName, handlerName, flags)\n }\n const resolvedHandler = String(handlerName ?? '')\n return createEventHandler(instance, methods, eventName, resolvedHandler, flags)\n },\n createWxsModule,\n }\n}\n\nexport { createChildScope, createScope, evaluateExpression }\n"],"mappings":"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"}
|
package/dist/runtime/wevu.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { setAppStyle } from "./appStyle.mjs";
|
|
1
2
|
import { registerApp, registerComponent, registerPage } from "./polyfill/routeRuntime.mjs";
|
|
2
3
|
import { createApp, createWevuComponent, takePendingRuntimeAppRegistration } from "wevu/internal-runtime";
|
|
3
4
|
|
|
@@ -26,6 +27,7 @@ function withRuntimeConstructor(name, constructor, run) {
|
|
|
26
27
|
* 将 Wevu App 注册过程接入 Web 页面栈。
|
|
27
28
|
*/
|
|
28
29
|
function registerWebWevuApp(options, meta) {
|
|
30
|
+
setAppStyle(meta.style ?? "");
|
|
29
31
|
const pendingRegistration = takePendingRuntimeAppRegistration();
|
|
30
32
|
withRuntimeConstructor("App", (definition) => registerApp(definition, meta), () => {
|
|
31
33
|
if (pendingRegistration) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wevu.mjs","names":[],"sources":["../../src/runtime/wevu.ts"],"sourcesContent":["import type { RegisterMeta } from './polyfill/routeRuntime/options'\nimport { createApp, createWevuComponent, takePendingRuntimeAppRegistration } from 'wevu/internal-runtime'\nimport { registerApp, registerComponent, registerPage } from './polyfill/routeRuntime'\n\ninterface WevuRegisterMeta extends RegisterMeta {\n kind: 'app' | 'page' | 'component'\n}\n\ntype RuntimeConstructorName = 'App' | 'Page' | 'Component'\n\nfunction createRuntimeConstructor(meta: WevuRegisterMeta, name: RuntimeConstructorName) {\n return (definition: Record<string, any>) => {\n if (name === 'App') {\n registerApp(definition, meta)\n }\n else if (name === 'Page' || meta.kind === 'page') {\n registerPage(definition, meta)\n }\n else {\n registerComponent(definition, meta)\n }\n return definition\n }\n}\n\nfunction withRuntimeConstructor<T>(\n name: 'App' | 'Component',\n constructor: (options: Record<string, any>) => unknown,\n run: () => T,\n) {\n const target = globalThis as Record<string, any>\n const hadOwn = Object.prototype.hasOwnProperty.call(target, name)\n const previous = target[name]\n target[name] = constructor\n try {\n return run()\n }\n finally {\n if (hadOwn) {\n target[name] = previous\n }\n else {\n delete target[name]\n }\n }\n}\n\n/**\n * 将 Wevu App 注册过程接入 Web 页面栈。\n */\nexport function registerWebWevuApp(options: Record<string, any>, meta: WevuRegisterMeta): void {\n const pendingRegistration = takePendingRuntimeAppRegistration()\n withRuntimeConstructor('App', definition => registerApp(definition, meta), () => {\n if (pendingRegistration) {\n pendingRegistration.register()\n return pendingRegistration.app\n }\n return createApp(options)\n })\n}\n\n/**\n * 将 Wevu 页面或组件注册过程接入 Web 自定义元素。\n */\nexport function registerWebWevuComponent(options: Record<string, any>, meta: WevuRegisterMeta): void {\n // Web 依赖 prop 构造器解码 DOM 属性,不使用小程序宿主的 nullable transport 降级。\n withRuntimeConstructor('Component', (definition) => {\n return meta.kind === 'page'\n ? registerPage(definition, meta)\n : registerComponent(definition, meta)\n }, () => createWevuComponent({ ...options, allowNullPropInput: false }))\n}\n\n/**\n * 保留公开 Wevu 工厂行为,并使用当前模块元数据完成 Web 注册。\n */\nexport function registerWebWevuComponentFactory<TArgs extends unknown[], TResult>(\n factory: (...args: TArgs) => TResult,\n meta: WevuRegisterMeta,\n ...args: TArgs\n): TResult {\n return withRuntimeConstructor('Component', (definition) => {\n return meta.kind === 'page'\n ? registerPage(definition, meta)\n : registerComponent(definition, meta)\n }, () => factory(...args))\n}\n\n/**\n * 在原生模块同步求值期间安装带页面元数据的宿主注册函数。\n */\nexport function installWebModuleRegistration(\n meta: WevuRegisterMeta,\n target: Record<string, any> = globalThis,\n): () => void {\n const names: RuntimeConstructorName[] = meta.kind === 'app'\n ? ['App']\n : meta.kind === 'page'\n ? ['Page', 'Component']\n : ['Component']\n const previous = names.map(name => ({\n hadOwn: Object.prototype.hasOwnProperty.call(target, name),\n name,\n value: target[name],\n }))\n const installed = new Map<RuntimeConstructorName, (definition: Record<string, any>) => Record<string, any>>()\n\n for (const name of names) {\n const constructor = createRuntimeConstructor(meta, name)\n installed.set(name, constructor)\n target[name] = constructor\n }\n\n return () => {\n for (const entry of previous) {\n if (target[entry.name] !== installed.get(entry.name)) {\n continue\n }\n if (entry.hadOwn) {\n target[entry.name] = entry.value\n }\n else {\n delete target[entry.name]\n }\n }\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"wevu.mjs","names":[],"sources":["../../src/runtime/wevu.ts"],"sourcesContent":["import type { RegisterMeta } from './polyfill/routeRuntime/options'\nimport { createApp, createWevuComponent, takePendingRuntimeAppRegistration } from 'wevu/internal-runtime'\nimport { setAppStyle } from './appStyle'\nimport { registerApp, registerComponent, registerPage } from './polyfill/routeRuntime'\n\ninterface WevuRegisterMeta extends RegisterMeta {\n kind: 'app' | 'page' | 'component'\n}\n\ntype RuntimeConstructorName = 'App' | 'Page' | 'Component'\n\nfunction createRuntimeConstructor(meta: WevuRegisterMeta, name: RuntimeConstructorName) {\n return (definition: Record<string, any>) => {\n if (name === 'App') {\n registerApp(definition, meta)\n }\n else if (name === 'Page' || meta.kind === 'page') {\n registerPage(definition, meta)\n }\n else {\n registerComponent(definition, meta)\n }\n return definition\n }\n}\n\nfunction withRuntimeConstructor<T>(\n name: 'App' | 'Component',\n constructor: (options: Record<string, any>) => unknown,\n run: () => T,\n) {\n const target = globalThis as Record<string, any>\n const hadOwn = Object.prototype.hasOwnProperty.call(target, name)\n const previous = target[name]\n target[name] = constructor\n try {\n return run()\n }\n finally {\n if (hadOwn) {\n target[name] = previous\n }\n else {\n delete target[name]\n }\n }\n}\n\n/**\n * 将 Wevu App 注册过程接入 Web 页面栈。\n */\nexport function registerWebWevuApp(options: Record<string, any>, meta: WevuRegisterMeta): void {\n // App 生命周期只注册一次,但每次模块求值都应发布最新样式。\n setAppStyle(meta.style ?? '')\n const pendingRegistration = takePendingRuntimeAppRegistration()\n withRuntimeConstructor('App', definition => registerApp(definition, meta), () => {\n if (pendingRegistration) {\n pendingRegistration.register()\n return pendingRegistration.app\n }\n return createApp(options)\n })\n}\n\n/**\n * 将 Wevu 页面或组件注册过程接入 Web 自定义元素。\n */\nexport function registerWebWevuComponent(options: Record<string, any>, meta: WevuRegisterMeta): void {\n // Web 依赖 prop 构造器解码 DOM 属性,不使用小程序宿主的 nullable transport 降级。\n withRuntimeConstructor('Component', (definition) => {\n return meta.kind === 'page'\n ? registerPage(definition, meta)\n : registerComponent(definition, meta)\n }, () => createWevuComponent({ ...options, allowNullPropInput: false }))\n}\n\n/**\n * 保留公开 Wevu 工厂行为,并使用当前模块元数据完成 Web 注册。\n */\nexport function registerWebWevuComponentFactory<TArgs extends unknown[], TResult>(\n factory: (...args: TArgs) => TResult,\n meta: WevuRegisterMeta,\n ...args: TArgs\n): TResult {\n return withRuntimeConstructor('Component', (definition) => {\n return meta.kind === 'page'\n ? registerPage(definition, meta)\n : registerComponent(definition, meta)\n }, () => factory(...args))\n}\n\n/**\n * 在原生模块同步求值期间安装带页面元数据的宿主注册函数。\n */\nexport function installWebModuleRegistration(\n meta: WevuRegisterMeta,\n target: Record<string, any> = globalThis,\n): () => void {\n const names: RuntimeConstructorName[] = meta.kind === 'app'\n ? ['App']\n : meta.kind === 'page'\n ? ['Page', 'Component']\n : ['Component']\n const previous = names.map(name => ({\n hadOwn: Object.prototype.hasOwnProperty.call(target, name),\n name,\n value: target[name],\n }))\n const installed = new Map<RuntimeConstructorName, (definition: Record<string, any>) => Record<string, any>>()\n\n for (const name of names) {\n const constructor = createRuntimeConstructor(meta, name)\n installed.set(name, constructor)\n target[name] = constructor\n }\n\n return () => {\n for (const entry of previous) {\n if (target[entry.name] !== installed.get(entry.name)) {\n continue\n }\n if (entry.hadOwn) {\n target[entry.name] = entry.value\n }\n else {\n delete target[entry.name]\n }\n }\n }\n}\n"],"mappings":";;;;;AAWA,SAAS,yBAAyB,MAAwB,MAA8B;CACtF,QAAQ,eAAoC;EAC1C,IAAI,SAAS,OACX,YAAY,YAAY,IAAI;OAEzB,IAAI,SAAS,UAAU,KAAK,SAAS,QACxC,aAAa,YAAY,IAAI;OAG7B,kBAAkB,YAAY,IAAI;EAEpC,OAAO;CACT;AACF;AAEA,SAAS,uBACP,MACA,aACA,KACA;CACA,MAAM,SAAS;CACf,MAAM,SAAS,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI;CAChE,MAAM,WAAW,OAAO;CACxB,OAAO,QAAQ;CACf,IAAI;EACF,OAAO,IAAI;CACb,UACQ;EACN,IAAI,QACF,OAAO,QAAQ;OAGf,OAAO,OAAO;CAElB;AACF;;;;AAKA,SAAgB,mBAAmB,SAA8B,MAA8B;CAE7F,YAAY,KAAK,SAAS,EAAE;CAC5B,MAAM,sBAAsB,kCAAkC;CAC9D,uBAAuB,QAAO,eAAc,YAAY,YAAY,IAAI,SAAS;EAC/E,IAAI,qBAAqB;GACvB,oBAAoB,SAAS;GAC7B,OAAO,oBAAoB;EAC7B;EACA,OAAO,UAAU,OAAO;CAC1B,CAAC;AACH;;;;AAKA,SAAgB,yBAAyB,SAA8B,MAA8B;CAEnG,uBAAuB,cAAc,eAAe;EAClD,OAAO,KAAK,SAAS,SACjB,aAAa,YAAY,IAAI,IAC7B,kBAAkB,YAAY,IAAI;CACxC,SAAS,oBAAoB;EAAE,GAAG;EAAS,oBAAoB;CAAM,CAAC,CAAC;AACzE;;;;AAKA,SAAgB,gCACd,SACA,MACA,GAAG,MACM;CACT,OAAO,uBAAuB,cAAc,eAAe;EACzD,OAAO,KAAK,SAAS,SACjB,aAAa,YAAY,IAAI,IAC7B,kBAAkB,YAAY,IAAI;CACxC,SAAS,QAAQ,GAAG,IAAI,CAAC;AAC3B;;;;AAKA,SAAgB,6BACd,MACA,SAA8B,YAClB;CACZ,MAAM,QAAkC,KAAK,SAAS,QAClD,CAAC,KAAK,IACN,KAAK,SAAS,SACZ,CAAC,QAAQ,WAAW,IACpB,CAAC,WAAW;CAClB,MAAM,WAAW,MAAM,KAAI,UAAS;EAClC,QAAQ,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI;EACzD;EACA,OAAO,OAAO;CAChB,EAAE;CACF,MAAM,4BAAY,IAAI,IAAsF;CAE5G,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,cAAc,yBAAyB,MAAM,IAAI;EACvD,UAAU,IAAI,MAAM,WAAW;EAC/B,OAAO,QAAQ;CACjB;CAEA,aAAa;EACX,KAAK,MAAM,SAAS,UAAU;GAC5B,IAAI,OAAO,MAAM,UAAU,UAAU,IAAI,MAAM,IAAI,GACjD;GAEF,IAAI,MAAM,QACR,OAAO,MAAM,QAAQ,MAAM;QAG3B,OAAO,OAAO,MAAM;EAExB;CACF;AACF"}
|
package/dist/shared/wxml.mjs
CHANGED
|
@@ -16,7 +16,11 @@ const TEMPLATE_IMPORT_TAG_NAMES = Array.from(/* @__PURE__ */ new Set(["import",
|
|
|
16
16
|
const TEMPLATE_INCLUDE_TAG_NAMES = Array.from(/* @__PURE__ */ new Set(["include", ...CONTROL_ATTR_PREFIXES.map((prefix) => `${prefix}-include`)]));
|
|
17
17
|
const CONTROL_ATTRS = /* @__PURE__ */ new Set([...CONTROL_ATTR_PREFIXES.flatMap((prefix) => CONTROL_ATTR_SUFFIXES.map((suffix) => `${prefix}:${suffix}`))]);
|
|
18
18
|
const EVENT_PREFIX_RE = /^(?:bind|catch|mut-bind|capture-bind|capture-catch)([\w-]+)$/;
|
|
19
|
-
const EVENT_KIND_ALIAS = {
|
|
19
|
+
const EVENT_KIND_ALIAS = {
|
|
20
|
+
tap: "click",
|
|
21
|
+
longtap: "contextmenu",
|
|
22
|
+
longpress: "contextmenu"
|
|
23
|
+
};
|
|
20
24
|
const SELF_CLOSING_TAGS = /* @__PURE__ */ new Set([
|
|
21
25
|
"area",
|
|
22
26
|
"base",
|
package/dist/shared/wxml.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wxml.mjs","names":[],"sources":["../../src/shared/wxml.ts"],"sourcesContent":["import { getSupportedMiniProgramDirectivePrefixes } from '@weapp-core/shared/platforms/runtime'\nimport { resolveNativeComponentWebTag } from './nativeComponents'\n\nconst CONTROL_ATTR_SUFFIXES = [\n 'if',\n 'elif',\n 'else',\n 'for',\n 'for-item',\n 'for-index',\n 'key',\n] as const\n\nexport type ControlAttrSuffix = typeof CONTROL_ATTR_SUFFIXES[number]\n\nexport const CONTROL_ATTR_PREFIXES = [...getSupportedMiniProgramDirectivePrefixes()]\n\nexport const TEMPLATE_IMPORT_TAG_NAMES = Array.from(new Set([\n 'import',\n ...CONTROL_ATTR_PREFIXES.map(prefix => `${prefix}-import`),\n]))\n\nexport const TEMPLATE_INCLUDE_TAG_NAMES = Array.from(new Set([\n 'include',\n ...CONTROL_ATTR_PREFIXES.map(prefix => `${prefix}-include`),\n]))\n\nexport const CONTROL_ATTRS = new Set([\n ...CONTROL_ATTR_PREFIXES.flatMap(prefix => CONTROL_ATTR_SUFFIXES.map(suffix => `${prefix}:${suffix}`)),\n])\n\nexport const EVENT_PREFIX_RE = /^(?:bind|catch|mut-bind|capture-bind|capture-catch)([\\w-]+)$/\nexport const EVENT_KIND_ALIAS: Record<string, string> = {\n tap: 'click',\n}\n\nexport const SELF_CLOSING_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'image',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\nexport function resolveControlAttributeName(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): string | undefined {\n for (const prefix of CONTROL_ATTR_PREFIXES) {\n const name = `${prefix}:${suffix}`\n if (name in attribs) {\n return name\n }\n }\n return undefined\n}\n\nexport function resolveControlAttributeValue(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): string | undefined {\n const name = resolveControlAttributeName(attribs, suffix)\n return name ? attribs[name] : undefined\n}\n\nexport function hasControlAttribute(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): boolean {\n return resolveControlAttributeName(attribs, suffix) !== undefined\n}\n\nexport function normalizeTagName(name: string) {\n const nativeComponentTag = resolveNativeComponentWebTag(name)\n if (nativeComponentTag) {\n return nativeComponentTag\n }\n switch (name) {\n case 'block':\n return '#fragment'\n case 'slot':\n return 'slot'\n default:\n return name || 'div'\n }\n}\n\nexport function normalizeAttributeName(name: string) {\n if (name === 'class' || name === 'style' || name.startsWith('data-')) {\n return name\n }\n return name.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)\n}\n"],"mappings":";;;;AAGA,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,MAAa,wBAAwB,CAAC,GAAG,yCAAyC,CAAC;AAEnF,MAAa,4BAA4B,MAAM,qBAAK,IAAI,IAAI,CAC1D,UACA,GAAG,sBAAsB,KAAI,WAAU,GAAG,OAAO,QAAQ,CAC3D,CAAC,CAAC;AAEF,MAAa,6BAA6B,MAAM,qBAAK,IAAI,IAAI,CAC3D,WACA,GAAG,sBAAsB,KAAI,WAAU,GAAG,OAAO,SAAS,CAC5D,CAAC,CAAC;AAEF,MAAa,gCAAgB,IAAI,IAAI,CACnC,GAAG,sBAAsB,SAAQ,WAAU,sBAAsB,KAAI,WAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CACvG,CAAC;AAED,MAAa,kBAAkB;AAC/B,MAAa,mBAA2C,
|
|
1
|
+
{"version":3,"file":"wxml.mjs","names":[],"sources":["../../src/shared/wxml.ts"],"sourcesContent":["import { getSupportedMiniProgramDirectivePrefixes } from '@weapp-core/shared/platforms/runtime'\nimport { resolveNativeComponentWebTag } from './nativeComponents'\n\nconst CONTROL_ATTR_SUFFIXES = [\n 'if',\n 'elif',\n 'else',\n 'for',\n 'for-item',\n 'for-index',\n 'key',\n] as const\n\nexport type ControlAttrSuffix = typeof CONTROL_ATTR_SUFFIXES[number]\n\nexport const CONTROL_ATTR_PREFIXES = [...getSupportedMiniProgramDirectivePrefixes()]\n\nexport const TEMPLATE_IMPORT_TAG_NAMES = Array.from(new Set([\n 'import',\n ...CONTROL_ATTR_PREFIXES.map(prefix => `${prefix}-import`),\n]))\n\nexport const TEMPLATE_INCLUDE_TAG_NAMES = Array.from(new Set([\n 'include',\n ...CONTROL_ATTR_PREFIXES.map(prefix => `${prefix}-include`),\n]))\n\nexport const CONTROL_ATTRS = new Set([\n ...CONTROL_ATTR_PREFIXES.flatMap(prefix => CONTROL_ATTR_SUFFIXES.map(suffix => `${prefix}:${suffix}`)),\n])\n\nexport const EVENT_PREFIX_RE = /^(?:bind|catch|mut-bind|capture-bind|capture-catch)([\\w-]+)$/\nexport const EVENT_KIND_ALIAS: Record<string, string> = {\n tap: 'click',\n longtap: 'contextmenu',\n longpress: 'contextmenu',\n}\n\nexport const SELF_CLOSING_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'image',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\nexport function resolveControlAttributeName(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): string | undefined {\n for (const prefix of CONTROL_ATTR_PREFIXES) {\n const name = `${prefix}:${suffix}`\n if (name in attribs) {\n return name\n }\n }\n return undefined\n}\n\nexport function resolveControlAttributeValue(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): string | undefined {\n const name = resolveControlAttributeName(attribs, suffix)\n return name ? attribs[name] : undefined\n}\n\nexport function hasControlAttribute(\n attribs: Record<string, string>,\n suffix: ControlAttrSuffix,\n): boolean {\n return resolveControlAttributeName(attribs, suffix) !== undefined\n}\n\nexport function normalizeTagName(name: string) {\n const nativeComponentTag = resolveNativeComponentWebTag(name)\n if (nativeComponentTag) {\n return nativeComponentTag\n }\n switch (name) {\n case 'block':\n return '#fragment'\n case 'slot':\n return 'slot'\n default:\n return name || 'div'\n }\n}\n\nexport function normalizeAttributeName(name: string) {\n if (name === 'class' || name === 'style' || name.startsWith('data-')) {\n return name\n }\n return name.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)\n}\n"],"mappings":";;;;AAGA,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,MAAa,wBAAwB,CAAC,GAAG,yCAAyC,CAAC;AAEnF,MAAa,4BAA4B,MAAM,qBAAK,IAAI,IAAI,CAC1D,UACA,GAAG,sBAAsB,KAAI,WAAU,GAAG,OAAO,QAAQ,CAC3D,CAAC,CAAC;AAEF,MAAa,6BAA6B,MAAM,qBAAK,IAAI,IAAI,CAC3D,WACA,GAAG,sBAAsB,KAAI,WAAU,GAAG,OAAO,SAAS,CAC5D,CAAC,CAAC;AAEF,MAAa,gCAAgB,IAAI,IAAI,CACnC,GAAG,sBAAsB,SAAQ,WAAU,sBAAsB,KAAI,WAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CACvG,CAAC;AAED,MAAa,kBAAkB;AAC/B,MAAa,mBAA2C;CACtD,KAAK;CACL,SAAS;CACT,WAAW;AACb;AAEA,MAAa,oCAAoB,IAAI,IAAI;CACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAgB,4BACd,SACA,QACoB;CACpB,KAAK,MAAM,UAAU,uBAAuB;EAC1C,MAAM,OAAO,GAAG,OAAO,GAAG;EAC1B,IAAI,QAAQ,SACV,OAAO;CAEX;AAEF;AAEA,SAAgB,6BACd,SACA,QACoB;CACpB,MAAM,OAAO,4BAA4B,SAAS,MAAM;CACxD,OAAO,OAAO,QAAQ,QAAQ;AAChC;AAEA,SAAgB,oBACd,SACA,QACS;CACT,OAAO,4BAA4B,SAAS,MAAM,MAAM;AAC1D;AAEA,SAAgB,iBAAiB,MAAc;CAC7C,MAAM,qBAAqB,6BAA6B,IAAI;CAC5D,IAAI,oBACF,OAAO;CAET,QAAQ,MAAR;EACE,KAAK,SACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,SACE,OAAO,QAAQ;CACnB;AACF;AAEA,SAAgB,uBAAuB,MAAc;CACnD,IAAI,SAAS,WAAW,SAAS,WAAW,KAAK,WAAW,OAAO,GACjE,OAAO;CAET,OAAO,KAAK,QAAQ,WAAU,UAAS,IAAI,MAAM,YAAY,GAAG;AAClE"}
|