@next-core/runtime 1.44.1 → 1.44.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/CustomProcessors.js.map +1 -1
- package/dist/cjs/CustomTemplates.js +7 -11
- package/dist/cjs/CustomTemplates.js.map +1 -1
- package/dist/cjs/createRoot.js +11 -5
- package/dist/cjs/createRoot.js.map +1 -1
- package/dist/cjs/getPageInfo.js.map +1 -1
- package/dist/cjs/handleHttpError.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +4 -5
- package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +4 -7
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +21 -24
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js +4 -7
- package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/utils.js +3 -3
- package/dist/cjs/internal/CustomTemplates/utils.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +3 -3
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/utils.js +2 -2
- package/dist/cjs/internal/FormRenderer/utils.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +11 -14
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +8 -10
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/cjs/internal/Router.js +3 -0
- package/dist/cjs/internal/Router.js.map +1 -1
- package/dist/cjs/internal/Runtime.js +14 -14
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/cjs/internal/bindListeners.js +2 -3
- package/dist/cjs/internal/bindListeners.js.map +1 -1
- package/dist/cjs/internal/compute/WidgetFunctions.js.map +1 -1
- package/dist/cjs/internal/compute/evaluate.js +4 -4
- package/dist/cjs/internal/compute/evaluate.js.map +1 -1
- package/dist/cjs/internal/compute/getGeneralGlobals.js.map +1 -1
- package/dist/cjs/internal/compute/getStorageItem.js +1 -2
- package/dist/cjs/internal/compute/getStorageItem.js.map +1 -1
- package/dist/cjs/internal/compute/listenOnTrackingContext.js.map +1 -1
- package/dist/cjs/internal/compute/setRealProperties.js.map +1 -1
- package/dist/cjs/internal/data/DataStore.js.map +1 -1
- package/dist/cjs/internal/data/getProviderBrick.js.map +1 -1
- package/dist/cjs/internal/data/realTimeDataInspect.js.map +1 -1
- package/dist/cjs/internal/data/resolveData.js.map +1 -1
- package/dist/cjs/internal/data/resolveDataStore.js +2 -4
- package/dist/cjs/internal/data/resolveDataStore.js.map +1 -1
- package/dist/cjs/internal/hasInstalledApp.js.map +1 -1
- package/dist/cjs/internal/historyExtended.js.map +1 -1
- package/dist/cjs/internal/matchPath.js.map +1 -1
- package/dist/cjs/internal/matchRoutes.js.map +1 -1
- package/dist/cjs/internal/matchStoryboard.js +2 -2
- package/dist/cjs/internal/matchStoryboard.js.map +1 -1
- package/dist/cjs/internal/mediaQuery.js.map +1 -1
- package/dist/cjs/internal/mount.js.map +1 -1
- package/dist/cjs/internal/poll.js +3 -3
- package/dist/cjs/internal/poll.js.map +1 -1
- package/dist/cjs/internal/registerAppI18n.js.map +1 -1
- package/dist/cjs/internal/registerCustomTemplates.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +4 -4
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/cjs/internal/setupRootRuntimeContext.js +2 -3
- package/dist/cjs/internal/setupRootRuntimeContext.js.map +1 -1
- package/dist/cjs/isStrictMode.js.map +1 -1
- package/dist/cjs/setLoginStateCookie.js.map +1 -1
- package/dist/cjs/setWatermark.js +4 -4
- package/dist/cjs/setWatermark.js.map +1 -1
- package/dist/cjs/themeAndMode.js +1 -2
- package/dist/cjs/themeAndMode.js.map +1 -1
- package/dist/esm/CustomProcessors.js +5 -5
- package/dist/esm/CustomProcessors.js.map +1 -1
- package/dist/esm/CustomTemplates.js +48 -58
- package/dist/esm/CustomTemplates.js.map +1 -1
- package/dist/esm/Dialog.js +3 -3
- package/dist/esm/Dialog.js.map +1 -1
- package/dist/esm/Notification.js +2 -2
- package/dist/esm/Notification.js.map +1 -1
- package/dist/esm/StoryboardFunctionRegistry.js +18 -18
- package/dist/esm/StoryboardFunctionRegistry.js.map +1 -1
- package/dist/esm/createRoot.js +125 -123
- package/dist/esm/createRoot.js.map +1 -1
- package/dist/esm/fetchByProvider.js +3 -10
- package/dist/esm/fetchByProvider.js.map +1 -1
- package/dist/esm/getBasePath.js +2 -2
- package/dist/esm/getBasePath.js.map +1 -1
- package/dist/esm/getPageInfo.js +5 -5
- package/dist/esm/getPageInfo.js.map +1 -1
- package/dist/esm/getRealValue.js +7 -6
- package/dist/esm/getRealValue.js.map +1 -1
- package/dist/esm/getV2RuntimeFromDll.js +1 -1
- package/dist/esm/getV2RuntimeFromDll.js.map +1 -1
- package/dist/esm/handleHttpError.js +11 -11
- package/dist/esm/handleHttpError.js.map +1 -1
- package/dist/esm/history.js +4 -4
- package/dist/esm/history.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js +13 -17
- package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/constants.js +5 -5
- package/dist/esm/internal/CustomTemplates/constants.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +41 -42
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js +43 -46
- package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js +16 -18
- package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/utils.js +8 -8
- package/dist/esm/internal/CustomTemplates/utils.js.map +1 -1
- package/dist/esm/internal/FormRenderer/constants.js +2 -2
- package/dist/esm/internal/FormRenderer/constants.js.map +1 -1
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js +28 -23
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/esm/internal/FormRenderer/getDefaultProperties.js +45 -22
- package/dist/esm/internal/FormRenderer/getDefaultProperties.js.map +1 -1
- package/dist/esm/internal/FormRenderer/utils.js +4 -4
- package/dist/esm/internal/FormRenderer/utils.js.map +1 -1
- package/dist/esm/internal/Renderer.js +517 -577
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +132 -148
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/esm/internal/Router.js +325 -343
- package/dist/esm/internal/Router.js.map +1 -1
- package/dist/esm/internal/Runtime.js +53 -51
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/abortController.js +7 -6
- package/dist/esm/internal/abortController.js.map +1 -1
- package/dist/esm/internal/bindListeners.js +136 -156
- package/dist/esm/internal/bindListeners.js.map +1 -1
- package/dist/esm/internal/compute/StoryboardFunctions.js +1 -1
- package/dist/esm/internal/compute/StoryboardFunctions.js.map +1 -1
- package/dist/esm/internal/compute/WidgetFunctions.js +6 -6
- package/dist/esm/internal/compute/WidgetFunctions.js.map +1 -1
- package/dist/esm/internal/compute/WidgetI18n.js +4 -4
- package/dist/esm/internal/compute/WidgetI18n.js.map +1 -1
- package/dist/esm/internal/compute/checkIf.js +10 -23
- package/dist/esm/internal/compute/checkIf.js.map +1 -1
- package/dist/esm/internal/compute/computeRealProperties.js +22 -35
- package/dist/esm/internal/compute/computeRealProperties.js.map +1 -1
- package/dist/esm/internal/compute/computeRealValue.js +42 -49
- package/dist/esm/internal/compute/computeRealValue.js.map +1 -1
- package/dist/esm/internal/compute/evaluate.js +71 -75
- package/dist/esm/internal/compute/evaluate.js.map +1 -1
- package/dist/esm/internal/compute/getGeneralGlobals.js +5 -5
- package/dist/esm/internal/compute/getGeneralGlobals.js.map +1 -1
- package/dist/esm/internal/compute/getNextStateOfUseBrick.js +1 -1
- package/dist/esm/internal/compute/getStorageItem.js +2 -3
- package/dist/esm/internal/compute/getStorageItem.js.map +1 -1
- package/dist/esm/internal/compute/getTracks.js +5 -5
- package/dist/esm/internal/compute/getTracks.js.map +1 -1
- package/dist/esm/internal/compute/listenOnTrackingContext.js +8 -11
- package/dist/esm/internal/compute/listenOnTrackingContext.js.map +1 -1
- package/dist/esm/internal/compute/markAsComputed.js +2 -2
- package/dist/esm/internal/compute/markAsComputed.js.map +1 -1
- package/dist/esm/internal/compute/setProperties.js +1 -1
- package/dist/esm/internal/compute/setProperties.js.map +1 -1
- package/dist/esm/internal/compute/setRealProperties.js +3 -3
- package/dist/esm/internal/compute/setRealProperties.js.map +1 -1
- package/dist/esm/internal/customizeColorTheme.js +15 -13
- package/dist/esm/internal/customizeColorTheme.js.map +1 -1
- package/dist/esm/internal/data/DataStore.js +161 -177
- package/dist/esm/internal/data/DataStore.js.map +1 -1
- package/dist/esm/internal/data/getProviderBrick.js +21 -28
- package/dist/esm/internal/data/getProviderBrick.js.map +1 -1
- package/dist/esm/internal/data/realTimeDataInspect.js +5 -5
- package/dist/esm/internal/data/realTimeDataInspect.js.map +1 -1
- package/dist/esm/internal/data/resolveData.js +89 -103
- package/dist/esm/internal/data/resolveData.js.map +1 -1
- package/dist/esm/internal/data/resolveDataStore.js +53 -67
- package/dist/esm/internal/data/resolveDataStore.js.map +1 -1
- package/dist/esm/internal/devtools.js +9 -9
- package/dist/esm/internal/devtools.js.map +1 -1
- package/dist/esm/internal/enums.js +1 -1
- package/dist/esm/internal/fulfilStoryboard.js +15 -28
- package/dist/esm/internal/fulfilStoryboard.js.map +1 -1
- package/dist/esm/internal/hasInstalledApp.js +3 -3
- package/dist/esm/internal/hasInstalledApp.js.map +1 -1
- package/dist/esm/internal/historyExtended.js +40 -37
- package/dist/esm/internal/historyExtended.js.map +1 -1
- package/dist/esm/internal/i18n.js +5 -5
- package/dist/esm/internal/i18n.js.map +1 -1
- package/dist/esm/internal/injected.js +1 -1
- package/dist/esm/internal/injected.js.map +1 -1
- package/dist/esm/internal/insertPreviewRoutes.js +3 -3
- package/dist/esm/internal/insertPreviewRoutes.js.map +1 -1
- package/dist/esm/internal/matchPath.js +17 -17
- package/dist/esm/internal/matchPath.js.map +1 -1
- package/dist/esm/internal/matchRoutes.js +18 -25
- package/dist/esm/internal/matchRoutes.js.map +1 -1
- package/dist/esm/internal/matchStoryboard.js +6 -6
- package/dist/esm/internal/matchStoryboard.js.map +1 -1
- package/dist/esm/internal/mediaQuery.js +11 -11
- package/dist/esm/internal/mediaQuery.js.map +1 -1
- package/dist/esm/internal/mount.js +7 -7
- package/dist/esm/internal/mount.js.map +1 -1
- package/dist/esm/internal/poll.js +53 -60
- package/dist/esm/internal/poll.js.map +1 -1
- package/dist/esm/internal/proxyFactories.js +4 -4
- package/dist/esm/internal/proxyFactories.js.map +1 -1
- package/dist/esm/internal/registerAppI18n.js +6 -6
- package/dist/esm/internal/registerAppI18n.js.map +1 -1
- package/dist/esm/internal/registerCustomTemplates.js +3 -3
- package/dist/esm/internal/registerCustomTemplates.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +140 -146
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/setupRootRuntimeContext.js +6 -7
- package/dist/esm/internal/setupRootRuntimeContext.js.map +1 -1
- package/dist/esm/internal/sse.js +24 -53
- package/dist/esm/internal/sse.js.map +1 -1
- package/dist/esm/internal/test_only.js +1 -1
- package/dist/esm/isStrictMode.js +3 -3
- package/dist/esm/isStrictMode.js.map +1 -1
- package/dist/esm/setAppVariable.js +1 -1
- package/dist/esm/setAppVariable.js.map +1 -1
- package/dist/esm/setLoginStateCookie.js +5 -5
- package/dist/esm/setLoginStateCookie.js.map +1 -1
- package/dist/esm/setUIVersion.js +1 -1
- package/dist/esm/setWatermark.js +13 -13
- package/dist/esm/setWatermark.js.map +1 -1
- package/dist/esm/themeAndMode.js +14 -13
- package/dist/esm/themeAndMode.js.map +1 -1
- package/dist/types/tsdoc-metadata.json +1 -1
- package/package.json +12 -12
|
@@ -1,69 +1,55 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
1
|
import { collectMemberUsage } from "@next-core/utils/storyboard";
|
|
3
2
|
export function resolveDataStore(contextConfs, resolveContext) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
let keyword = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "CTX";
|
|
4
|
+
let strict = arguments.length > 3 ? arguments[3] : undefined;
|
|
5
|
+
const dependencyMap = getDependencyMapOfContext(contextConfs, keyword, strict);
|
|
7
6
|
// There maybe multiple context confs for a specific name, since there are conditional contexts.
|
|
8
7
|
// This is a map of how many pending context confs for each context name.
|
|
9
|
-
|
|
10
|
-
for (
|
|
11
|
-
|
|
12
|
-
pendingDeps.set(contextName, ((_pendingDeps$get = pendingDeps.get(contextName)) !== null && _pendingDeps$get !== void 0 ? _pendingDeps$get : 0) + 1);
|
|
8
|
+
const pendingDeps = new Map();
|
|
9
|
+
for (const contextName of Array.from(dependencyMap.keys()).map(contextConf => contextConf.name)) {
|
|
10
|
+
pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
const hasNonStaticUsage = Array.from(dependencyMap.values()).some(stats => stats.hasNonStaticUsage);
|
|
13
|
+
const processed = new WeakSet();
|
|
14
|
+
const deferredContexts = new Map();
|
|
15
|
+
const pendingContexts = new Map([...new Set(contextConfs.map(contextConf => contextConf.name))].map(contextName => [contextName, new Promise((resolve, reject) => {
|
|
18
16
|
deferredContexts.set(contextName, {
|
|
19
17
|
resolve,
|
|
20
18
|
reject
|
|
21
19
|
});
|
|
22
20
|
})]));
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
const wrapResolve = async contextConf => {
|
|
22
|
+
processed.add(contextConf);
|
|
23
|
+
const resolved = await resolveContext(contextConf);
|
|
24
|
+
dependencyMap.delete(contextConf);
|
|
25
|
+
const left = pendingDeps.get(contextConf.name) ?? 0;
|
|
26
|
+
if (resolved) {
|
|
27
|
+
// Assert: contextConf.name exists in deferredContexts
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
29
|
+
deferredContexts.get(contextConf.name).resolve();
|
|
30
|
+
pendingDeps.delete(contextConf.name);
|
|
31
|
+
if (left === 0) {
|
|
32
|
+
throw new Error(`Duplicated context defined: ${contextConf.name}`);
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
// Assert: left >= 1
|
|
36
|
+
if (left === 1) {
|
|
31
37
|
// Assert: contextConf.name exists in deferredContexts
|
|
32
38
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
33
39
|
deferredContexts.get(contextConf.name).resolve();
|
|
34
40
|
pendingDeps.delete(contextConf.name);
|
|
35
|
-
if (left === 0) {
|
|
36
|
-
throw new Error("Duplicated context defined: ".concat(contextConf.name));
|
|
37
|
-
}
|
|
38
41
|
} else {
|
|
39
|
-
|
|
40
|
-
if (left === 1) {
|
|
41
|
-
// Assert: contextConf.name exists in deferredContexts
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
43
|
-
deferredContexts.get(contextConf.name).resolve();
|
|
44
|
-
pendingDeps.delete(contextConf.name);
|
|
45
|
-
} else {
|
|
46
|
-
pendingDeps.set(contextConf.name, left - 1);
|
|
47
|
-
}
|
|
42
|
+
pendingDeps.set(contextConf.name, left - 1);
|
|
48
43
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
function scheduleNext() {
|
|
57
|
-
return _scheduleNext.apply(this, arguments);
|
|
58
|
-
}
|
|
59
|
-
function _scheduleNext() {
|
|
60
|
-
_scheduleNext = _asyncToGenerator(function* () {
|
|
61
|
-
var readyContexts = Array.from(dependencyMap.entries()).filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial)).map(entry => entry[0]).filter(contextConf => !processed.has(contextConf));
|
|
62
|
-
yield Promise.all(readyContexts.map(wrapResolve));
|
|
63
|
-
});
|
|
64
|
-
return _scheduleNext.apply(this, arguments);
|
|
44
|
+
}
|
|
45
|
+
await scheduleNext();
|
|
46
|
+
};
|
|
47
|
+
let scheduleAsSerial = hasNonStaticUsage;
|
|
48
|
+
async function scheduleNext() {
|
|
49
|
+
const readyContexts = Array.from(dependencyMap.entries()).filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial)).map(entry => entry[0]).filter(contextConf => !processed.has(contextConf));
|
|
50
|
+
await Promise.all(readyContexts.map(wrapResolve));
|
|
65
51
|
}
|
|
66
|
-
|
|
52
|
+
const pendingResult = scheduleNext().then(async () => {
|
|
67
53
|
// If there are still contexts left, it implies one of these situations:
|
|
68
54
|
// - Circular contexts.
|
|
69
55
|
// Such as: a depends on b, while b depends on a.
|
|
@@ -74,17 +60,17 @@ export function resolveDataStore(contextConfs, resolveContext) {
|
|
|
74
60
|
// This will throw if circular contexts detected.
|
|
75
61
|
detectCircularContexts(dependencyMap, keyword);
|
|
76
62
|
scheduleAsSerial = true;
|
|
77
|
-
|
|
63
|
+
await scheduleNext();
|
|
78
64
|
}
|
|
79
65
|
// There maybe ignored contexts which are still not fulfilled.
|
|
80
66
|
// We treat them as RESOLVED.
|
|
81
|
-
for (
|
|
67
|
+
for (const deferred of deferredContexts.values()) {
|
|
82
68
|
deferred.resolve();
|
|
83
69
|
}
|
|
84
|
-
})
|
|
70
|
+
}).catch(error => {
|
|
85
71
|
// There maybe contexts left not fulfilled, when an error occurred.
|
|
86
72
|
// We treat them as REJECTED.
|
|
87
|
-
for (
|
|
73
|
+
for (const deferred of deferredContexts.values()) {
|
|
88
74
|
deferred.reject(error);
|
|
89
75
|
}
|
|
90
76
|
throw error;
|
|
@@ -103,16 +89,16 @@ function predicateNextResolveFactory(pendingDeps, scheduleAsSerial) {
|
|
|
103
89
|
![...entry[1].usedProperties].some(dep => pendingDeps.has(dep));
|
|
104
90
|
}
|
|
105
91
|
export function getDependencyMapOfContext(contextConfs) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
for (
|
|
110
|
-
|
|
111
|
-
|
|
92
|
+
let keyword = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "CTX";
|
|
93
|
+
let strict = arguments.length > 2 ? arguments[2] : undefined;
|
|
94
|
+
const depsMap = new Map();
|
|
95
|
+
for (const contextConf of contextConfs) {
|
|
96
|
+
const data = [contextConf.if, contextConf.value, contextConf.resolve];
|
|
97
|
+
const stats = collectMemberUsage(data, keyword);
|
|
112
98
|
if (!strict && keyword === "STATE") {
|
|
113
|
-
|
|
99
|
+
const legacyTplStats = collectMemberUsage(data, "TPL");
|
|
114
100
|
// Merge stats with legacyTplStats
|
|
115
|
-
for (
|
|
101
|
+
for (const prop of legacyTplStats.usedProperties) {
|
|
116
102
|
stats.usedProperties.add(prop);
|
|
117
103
|
}
|
|
118
104
|
if (legacyTplStats.hasNonStaticUsage) {
|
|
@@ -124,11 +110,11 @@ export function getDependencyMapOfContext(contextConfs) {
|
|
|
124
110
|
return depsMap;
|
|
125
111
|
}
|
|
126
112
|
function detectCircularContexts(dependencyMap, keyword) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
for (
|
|
113
|
+
const duplicatedMap = new Map(dependencyMap);
|
|
114
|
+
const pendingDeps = new Set(Array.from(duplicatedMap.keys()).map(contextConf => contextConf.name));
|
|
115
|
+
const next = () => {
|
|
116
|
+
let processedAtLeastOne = false;
|
|
117
|
+
for (const [contextConf, stats] of duplicatedMap.entries()) {
|
|
132
118
|
if (![...stats.usedProperties].some(dep => pendingDeps.has(dep))) {
|
|
133
119
|
duplicatedMap.delete(contextConf);
|
|
134
120
|
pendingDeps.delete(contextConf.name);
|
|
@@ -141,7 +127,7 @@ function detectCircularContexts(dependencyMap, keyword) {
|
|
|
141
127
|
};
|
|
142
128
|
next();
|
|
143
129
|
if (duplicatedMap.size > 0) {
|
|
144
|
-
throw new ReferenceError(
|
|
130
|
+
throw new ReferenceError(`Circular ${keyword} detected: ${Array.from(duplicatedMap.keys()).map(contextConf => contextConf.name).join(", ")}`);
|
|
145
131
|
}
|
|
146
132
|
}
|
|
147
133
|
//# sourceMappingURL=resolveDataStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDataStore.js","names":["collectMemberUsage","resolveDataStore","contextConfs","resolveContext","keyword","arguments","length","undefined","strict","dependencyMap","getDependencyMapOfContext","pendingDeps","Map","contextName","Array","from","keys","map","contextConf","name","_pendingDeps$get","set","get","hasNonStaticUsage","values","some","stats","processed","WeakSet","deferredContexts","pendingContexts","Set","Promise","resolve","reject","wrapResolve","_ref","_asyncToGenerator","_pendingDeps$get2","add","resolved","delete","left","Error","concat","scheduleNext","_x","apply","scheduleAsSerial","_scheduleNext","readyContexts","entries","filter","predicateNextResolveFactory","entry","has","all","pendingResult","then","size","detectCircularContexts","deferred","catch","error","index","usedProperties","dep","depsMap","data","if","value","legacyTplStats","prop","duplicatedMap","next","processedAtLeastOne","ReferenceError","join"],"sources":["../../../../src/internal/data/resolveDataStore.ts"],"sourcesContent":["import { ContextConf } from \"@next-core/types\";\nimport { collectMemberUsage, MemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface DeferredContext {\n resolve(): void;\n reject(e: unknown): void;\n}\n\nexport function resolveDataStore(\n contextConfs: ContextConf[],\n resolveContext: (contextConf: ContextConf) => Promise<boolean>,\n keyword = \"CTX\",\n strict?: boolean\n): {\n pendingResult: Promise<void>;\n pendingContexts: Map<string, Promise<void>>;\n} {\n const dependencyMap = getDependencyMapOfContext(\n contextConfs,\n keyword,\n strict\n );\n // There maybe multiple context confs for a specific name, since there are conditional contexts.\n // This is a map of how many pending context confs for each context name.\n const pendingDeps = new Map<string, number>();\n for (const contextName of Array.from(dependencyMap.keys()).map(\n (contextConf) => contextConf.name\n )) {\n pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);\n }\n const hasNonStaticUsage = Array.from(dependencyMap.values()).some(\n (stats) => stats.hasNonStaticUsage\n );\n const processed = new WeakSet<ContextConf>();\n\n const deferredContexts = new Map<string, DeferredContext>();\n const pendingContexts = new Map(\n [...new Set(contextConfs.map((contextConf) => contextConf.name))].map(\n (contextName) => [\n contextName,\n new Promise<void>((resolve, reject) => {\n deferredContexts.set(contextName, { resolve, reject });\n }),\n ]\n )\n );\n\n const wrapResolve = async (contextConf: ContextConf): Promise<void> => {\n processed.add(contextConf);\n const resolved = await resolveContext(contextConf);\n dependencyMap.delete(contextConf);\n const left = pendingDeps.get(contextConf.name) ?? 0;\n if (resolved) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n if (left === 0) {\n throw new Error(`Duplicated context defined: ${contextConf.name}`);\n }\n } else {\n // Assert: left >= 1\n if (left === 1) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n } else {\n pendingDeps.set(contextConf.name, left - 1);\n }\n }\n await scheduleNext();\n };\n\n let scheduleAsSerial = hasNonStaticUsage;\n\n async function scheduleNext(): Promise<void> {\n const readyContexts = Array.from(dependencyMap.entries())\n .filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial))\n .map((entry) => entry[0])\n .filter((contextConf) => !processed.has(contextConf));\n await Promise.all(readyContexts.map(wrapResolve));\n }\n\n const pendingResult = scheduleNext()\n .then(async () => {\n // If there are still contexts left, it implies one of these situations:\n // - Circular contexts.\n // Such as: a depends on b, while b depends on a.\n // - Related contexts are all ignored.\n // Such as: a depends on b,\n // while both them are ignore by a falsy result of `if`.\n if (dependencyMap.size > 0) {\n // This will throw if circular contexts detected.\n detectCircularContexts(dependencyMap, keyword);\n scheduleAsSerial = true;\n await scheduleNext();\n }\n // There maybe ignored contexts which are still not fulfilled.\n // We treat them as RESOLVED.\n for (const deferred of deferredContexts.values()) {\n deferred.resolve();\n }\n })\n .catch((error) => {\n // There maybe contexts left not fulfilled, when an error occurred.\n // We treat them as REJECTED.\n for (const deferred of deferredContexts.values()) {\n deferred.reject(error);\n }\n throw error;\n });\n return { pendingResult, pendingContexts };\n}\n\nfunction predicateNextResolveFactory(\n pendingDeps: Map<string, number>,\n scheduleAsSerial: boolean\n): (entry: [ContextConf, MemberUsage], index: number) => boolean {\n return (entry, index) =>\n // When contexts contain computed CTX accesses, it implies a dynamic dependency map.\n // So make them process sequentially, keep the same behavior as before.\n scheduleAsSerial\n ? index === 0\n : // A context is ready when it has no pending dependencies.\n ![...entry[1].usedProperties].some((dep) => pendingDeps.has(dep));\n}\n\nexport function getDependencyMapOfContext(\n contextConfs: ContextConf[],\n keyword = \"CTX\",\n strict?: boolean\n): Map<ContextConf, MemberUsage> {\n const depsMap = new Map<ContextConf, MemberUsage>();\n for (const contextConf of contextConfs) {\n const data = [contextConf.if, contextConf.value, contextConf.resolve];\n const stats = collectMemberUsage(data, keyword);\n if (!strict && keyword === \"STATE\") {\n const legacyTplStats = collectMemberUsage(data, \"TPL\");\n // Merge stats with legacyTplStats\n for (const prop of legacyTplStats.usedProperties) {\n stats.usedProperties.add(prop);\n }\n if (legacyTplStats.hasNonStaticUsage) {\n stats.hasNonStaticUsage = true;\n }\n }\n depsMap.set(contextConf, stats);\n }\n return depsMap;\n}\n\nfunction detectCircularContexts(\n dependencyMap: Map<ContextConf, MemberUsage>,\n keyword: string\n): void {\n const duplicatedMap = new Map(dependencyMap);\n const pendingDeps = new Set<string>(\n Array.from(duplicatedMap.keys()).map((contextConf) => contextConf.name)\n );\n const next = (): void => {\n let processedAtLeastOne = false;\n for (const [contextConf, stats] of duplicatedMap.entries()) {\n if (![...stats.usedProperties].some((dep) => pendingDeps.has(dep))) {\n duplicatedMap.delete(contextConf);\n pendingDeps.delete(contextConf.name);\n processedAtLeastOne = true;\n }\n }\n if (processedAtLeastOne) {\n next();\n }\n };\n next();\n\n if (duplicatedMap.size > 0) {\n throw new ReferenceError(\n `Circular ${keyword} detected: ${Array.from(duplicatedMap.keys())\n .map((contextConf) => contextConf.name)\n .join(\", \")}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"resolveDataStore.js","names":["collectMemberUsage","resolveDataStore","contextConfs","resolveContext","keyword","arguments","length","undefined","strict","dependencyMap","getDependencyMapOfContext","pendingDeps","Map","contextName","Array","from","keys","map","contextConf","name","set","get","hasNonStaticUsage","values","some","stats","processed","WeakSet","deferredContexts","pendingContexts","Set","Promise","resolve","reject","wrapResolve","add","resolved","delete","left","Error","scheduleNext","scheduleAsSerial","readyContexts","entries","filter","predicateNextResolveFactory","entry","has","all","pendingResult","then","size","detectCircularContexts","deferred","catch","error","index","usedProperties","dep","depsMap","data","if","value","legacyTplStats","prop","duplicatedMap","next","processedAtLeastOne","ReferenceError","join"],"sources":["../../../../src/internal/data/resolveDataStore.ts"],"sourcesContent":["import { ContextConf } from \"@next-core/types\";\nimport { collectMemberUsage, MemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface DeferredContext {\n resolve(): void;\n reject(e: unknown): void;\n}\n\nexport function resolveDataStore(\n contextConfs: ContextConf[],\n resolveContext: (contextConf: ContextConf) => Promise<boolean>,\n keyword = \"CTX\",\n strict?: boolean\n): {\n pendingResult: Promise<void>;\n pendingContexts: Map<string, Promise<void>>;\n} {\n const dependencyMap = getDependencyMapOfContext(\n contextConfs,\n keyword,\n strict\n );\n // There maybe multiple context confs for a specific name, since there are conditional contexts.\n // This is a map of how many pending context confs for each context name.\n const pendingDeps = new Map<string, number>();\n for (const contextName of Array.from(dependencyMap.keys()).map(\n (contextConf) => contextConf.name\n )) {\n pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);\n }\n const hasNonStaticUsage = Array.from(dependencyMap.values()).some(\n (stats) => stats.hasNonStaticUsage\n );\n const processed = new WeakSet<ContextConf>();\n\n const deferredContexts = new Map<string, DeferredContext>();\n const pendingContexts = new Map(\n [...new Set(contextConfs.map((contextConf) => contextConf.name))].map(\n (contextName) => [\n contextName,\n new Promise<void>((resolve, reject) => {\n deferredContexts.set(contextName, { resolve, reject });\n }),\n ]\n )\n );\n\n const wrapResolve = async (contextConf: ContextConf): Promise<void> => {\n processed.add(contextConf);\n const resolved = await resolveContext(contextConf);\n dependencyMap.delete(contextConf);\n const left = pendingDeps.get(contextConf.name) ?? 0;\n if (resolved) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n if (left === 0) {\n throw new Error(`Duplicated context defined: ${contextConf.name}`);\n }\n } else {\n // Assert: left >= 1\n if (left === 1) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n } else {\n pendingDeps.set(contextConf.name, left - 1);\n }\n }\n await scheduleNext();\n };\n\n let scheduleAsSerial = hasNonStaticUsage;\n\n async function scheduleNext(): Promise<void> {\n const readyContexts = Array.from(dependencyMap.entries())\n .filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial))\n .map((entry) => entry[0])\n .filter((contextConf) => !processed.has(contextConf));\n await Promise.all(readyContexts.map(wrapResolve));\n }\n\n const pendingResult = scheduleNext()\n .then(async () => {\n // If there are still contexts left, it implies one of these situations:\n // - Circular contexts.\n // Such as: a depends on b, while b depends on a.\n // - Related contexts are all ignored.\n // Such as: a depends on b,\n // while both them are ignore by a falsy result of `if`.\n if (dependencyMap.size > 0) {\n // This will throw if circular contexts detected.\n detectCircularContexts(dependencyMap, keyword);\n scheduleAsSerial = true;\n await scheduleNext();\n }\n // There maybe ignored contexts which are still not fulfilled.\n // We treat them as RESOLVED.\n for (const deferred of deferredContexts.values()) {\n deferred.resolve();\n }\n })\n .catch((error) => {\n // There maybe contexts left not fulfilled, when an error occurred.\n // We treat them as REJECTED.\n for (const deferred of deferredContexts.values()) {\n deferred.reject(error);\n }\n throw error;\n });\n return { pendingResult, pendingContexts };\n}\n\nfunction predicateNextResolveFactory(\n pendingDeps: Map<string, number>,\n scheduleAsSerial: boolean\n): (entry: [ContextConf, MemberUsage], index: number) => boolean {\n return (entry, index) =>\n // When contexts contain computed CTX accesses, it implies a dynamic dependency map.\n // So make them process sequentially, keep the same behavior as before.\n scheduleAsSerial\n ? index === 0\n : // A context is ready when it has no pending dependencies.\n ![...entry[1].usedProperties].some((dep) => pendingDeps.has(dep));\n}\n\nexport function getDependencyMapOfContext(\n contextConfs: ContextConf[],\n keyword = \"CTX\",\n strict?: boolean\n): Map<ContextConf, MemberUsage> {\n const depsMap = new Map<ContextConf, MemberUsage>();\n for (const contextConf of contextConfs) {\n const data = [contextConf.if, contextConf.value, contextConf.resolve];\n const stats = collectMemberUsage(data, keyword);\n if (!strict && keyword === \"STATE\") {\n const legacyTplStats = collectMemberUsage(data, \"TPL\");\n // Merge stats with legacyTplStats\n for (const prop of legacyTplStats.usedProperties) {\n stats.usedProperties.add(prop);\n }\n if (legacyTplStats.hasNonStaticUsage) {\n stats.hasNonStaticUsage = true;\n }\n }\n depsMap.set(contextConf, stats);\n }\n return depsMap;\n}\n\nfunction detectCircularContexts(\n dependencyMap: Map<ContextConf, MemberUsage>,\n keyword: string\n): void {\n const duplicatedMap = new Map(dependencyMap);\n const pendingDeps = new Set<string>(\n Array.from(duplicatedMap.keys()).map((contextConf) => contextConf.name)\n );\n const next = (): void => {\n let processedAtLeastOne = false;\n for (const [contextConf, stats] of duplicatedMap.entries()) {\n if (![...stats.usedProperties].some((dep) => pendingDeps.has(dep))) {\n duplicatedMap.delete(contextConf);\n pendingDeps.delete(contextConf.name);\n processedAtLeastOne = true;\n }\n }\n if (processedAtLeastOne) {\n next();\n }\n };\n next();\n\n if (duplicatedMap.size > 0) {\n throw new ReferenceError(\n `Circular ${keyword} detected: ${Array.from(duplicatedMap.keys())\n .map((contextConf) => contextConf.name)\n .join(\", \")}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export const MESSAGE_SOURCE_PANEL = "brick-next-devtools-panel";
|
|
2
|
+
export const FRAME_ACTIVE_CHANGE = "devtools-frame-active-change";
|
|
3
|
+
export const PANEL_CHANGE = "devtools-panel-change";
|
|
4
|
+
let frameIsActive = true;
|
|
5
|
+
let selectedPanel;
|
|
6
6
|
export function devtoolsHookEmit(type, payload) {
|
|
7
|
-
|
|
7
|
+
const devtools = getDevHook();
|
|
8
8
|
if (!devtools || type === "evaluation" && !(frameIsActive && (!selectedPanel || selectedPanel === "Evaluations"))) {
|
|
9
9
|
// Ignore messages if current devtools panel is not relevant.
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
const emit = () => {
|
|
13
13
|
var _devtools$emit;
|
|
14
14
|
(_devtools$emit = devtools.emit) === null || _devtools$emit === void 0 || _devtools$emit.call(devtools, {
|
|
15
15
|
type,
|
|
@@ -27,13 +27,13 @@ export function devtoolsHookEmit(type, payload) {
|
|
|
27
27
|
}
|
|
28
28
|
export function listenDevtoolsEagerly() {
|
|
29
29
|
window.addEventListener("message", _ref => {
|
|
30
|
-
|
|
30
|
+
let {
|
|
31
31
|
data
|
|
32
32
|
} = _ref;
|
|
33
33
|
if ((data === null || data === void 0 ? void 0 : data.source) !== MESSAGE_SOURCE_PANEL) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
const payload = data.payload;
|
|
37
37
|
switch (payload === null || payload === void 0 ? void 0 : payload.type) {
|
|
38
38
|
case FRAME_ACTIVE_CHANGE:
|
|
39
39
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","names":["MESSAGE_SOURCE_PANEL","FRAME_ACTIVE_CHANGE","PANEL_CHANGE","frameIsActive","selectedPanel","devtoolsHookEmit","type","payload","devtools","getDevHook","emit","_devtools$emit","call","window","requestIdleCallback","setTimeout","listenDevtoolsEagerly","addEventListener","_ref","data","source","active","panel","__BRICK_NEXT_DEVTOOLS_HOOK__"],"sources":["../../../src/internal/devtools.ts"],"sourcesContent":["export const MESSAGE_SOURCE_PANEL = \"brick-next-devtools-panel\";\nexport const FRAME_ACTIVE_CHANGE = \"devtools-frame-active-change\";\nexport const PANEL_CHANGE = \"devtools-panel-change\";\n\ninterface DevtoolsHookContainer {\n __BRICK_NEXT_DEVTOOLS_HOOK__?: DevtoolsHook;\n}\n\ninterface DevtoolsHook {\n emit: (message: unknown) => void;\n}\n\ntype DevtoolsMessagePayload = FrameActiveChangePayload | PanelChangePayload;\n\ninterface FrameActiveChangePayload {\n type: typeof FRAME_ACTIVE_CHANGE;\n active: boolean;\n panel: PanelType;\n}\n\ntype PanelType = \"Bricks\" | \"Evaluations\" | \"Transformations\";\n\ninterface PanelChangePayload {\n type: typeof PANEL_CHANGE;\n panel: PanelType;\n}\n\nlet frameIsActive = true;\nlet selectedPanel: PanelType;\n\nexport function devtoolsHookEmit(type: string, payload?: unknown): void {\n const devtools = getDevHook();\n if (\n !devtools ||\n (type === \"evaluation\" &&\n !(frameIsActive && (!selectedPanel || selectedPanel === \"Evaluations\")))\n ) {\n // Ignore messages if current devtools panel is not relevant.\n return;\n }\n\n const emit = (): void => {\n devtools.emit?.({\n type,\n payload,\n });\n };\n\n // Try to emit only in idle time.\n // istanbul ignore next\n if (typeof window.requestIdleCallback === \"function\") {\n window.requestIdleCallback(emit);\n } else {\n setTimeout(emit, 0);\n }\n}\n\nexport function listenDevtoolsEagerly(): void {\n window.addEventListener(\"message\", ({ data }: MessageEvent): void => {\n if (data?.source !== MESSAGE_SOURCE_PANEL) {\n return;\n }\n const payload: DevtoolsMessagePayload = data.payload;\n switch (payload?.type) {\n case FRAME_ACTIVE_CHANGE: {\n frameIsActive = payload.active;\n break;\n }\n case PANEL_CHANGE: {\n selectedPanel = payload.panel;\n break;\n }\n }\n });\n}\n\nexport function getDevHook(): DevtoolsHook | undefined {\n return (window as DevtoolsHookContainer).__BRICK_NEXT_DEVTOOLS_HOOK__;\n}\n"],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"devtools.js","names":["MESSAGE_SOURCE_PANEL","FRAME_ACTIVE_CHANGE","PANEL_CHANGE","frameIsActive","selectedPanel","devtoolsHookEmit","type","payload","devtools","getDevHook","emit","_devtools$emit","call","window","requestIdleCallback","setTimeout","listenDevtoolsEagerly","addEventListener","_ref","data","source","active","panel","__BRICK_NEXT_DEVTOOLS_HOOK__"],"sources":["../../../src/internal/devtools.ts"],"sourcesContent":["export const MESSAGE_SOURCE_PANEL = \"brick-next-devtools-panel\";\nexport const FRAME_ACTIVE_CHANGE = \"devtools-frame-active-change\";\nexport const PANEL_CHANGE = \"devtools-panel-change\";\n\ninterface DevtoolsHookContainer {\n __BRICK_NEXT_DEVTOOLS_HOOK__?: DevtoolsHook;\n}\n\ninterface DevtoolsHook {\n emit: (message: unknown) => void;\n}\n\ntype DevtoolsMessagePayload = FrameActiveChangePayload | PanelChangePayload;\n\ninterface FrameActiveChangePayload {\n type: typeof FRAME_ACTIVE_CHANGE;\n active: boolean;\n panel: PanelType;\n}\n\ntype PanelType = \"Bricks\" | \"Evaluations\" | \"Transformations\";\n\ninterface PanelChangePayload {\n type: typeof PANEL_CHANGE;\n panel: PanelType;\n}\n\nlet frameIsActive = true;\nlet selectedPanel: PanelType;\n\nexport function devtoolsHookEmit(type: string, payload?: unknown): void {\n const devtools = getDevHook();\n if (\n !devtools ||\n (type === \"evaluation\" &&\n !(frameIsActive && (!selectedPanel || selectedPanel === \"Evaluations\")))\n ) {\n // Ignore messages if current devtools panel is not relevant.\n return;\n }\n\n const emit = (): void => {\n devtools.emit?.({\n type,\n payload,\n });\n };\n\n // Try to emit only in idle time.\n // istanbul ignore next\n if (typeof window.requestIdleCallback === \"function\") {\n window.requestIdleCallback(emit);\n } else {\n setTimeout(emit, 0);\n }\n}\n\nexport function listenDevtoolsEagerly(): void {\n window.addEventListener(\"message\", ({ data }: MessageEvent): void => {\n if (data?.source !== MESSAGE_SOURCE_PANEL) {\n return;\n }\n const payload: DevtoolsMessagePayload = data.payload;\n switch (payload?.type) {\n case FRAME_ACTIVE_CHANGE: {\n frameIsActive = payload.active;\n break;\n }\n case PANEL_CHANGE: {\n selectedPanel = payload.panel;\n break;\n }\n }\n });\n}\n\nexport function getDevHook(): DevtoolsHook | undefined {\n return (window as DevtoolsHookContainer).__BRICK_NEXT_DEVTOOLS_HOOK__;\n}\n"],"mappings":"AAAA,OAAO,MAAMA,oBAAoB,GAAG,2BAA2B;AAC/D,OAAO,MAAMC,mBAAmB,GAAG,8BAA8B;AACjE,OAAO,MAAMC,YAAY,GAAG,uBAAuB;AAyBnD,IAAIC,aAAa,GAAG,IAAI;AACxB,IAAIC,aAAwB;AAE5B,OAAO,SAASC,gBAAgBA,CAACC,IAAY,EAAEC,OAAiB,EAAQ;EACtE,MAAMC,QAAQ,GAAGC,UAAU,CAAC,CAAC;EAC7B,IACE,CAACD,QAAQ,IACRF,IAAI,KAAK,YAAY,IACpB,EAAEH,aAAa,KAAK,CAACC,aAAa,IAAIA,aAAa,KAAK,aAAa,CAAC,CAAE,EAC1E;IACA;IACA;EACF;EAEA,MAAMM,IAAI,GAAGA,CAAA,KAAY;IAAA,IAAAC,cAAA;IACvB,CAAAA,cAAA,GAAAH,QAAQ,CAACE,IAAI,cAAAC,cAAA,eAAbA,cAAA,CAAAC,IAAA,CAAAJ,QAAQ,EAAQ;MACdF,IAAI;MACJC;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACA;EACA,IAAI,OAAOM,MAAM,CAACC,mBAAmB,KAAK,UAAU,EAAE;IACpDD,MAAM,CAACC,mBAAmB,CAACJ,IAAI,CAAC;EAClC,CAAC,MAAM;IACLK,UAAU,CAACL,IAAI,EAAE,CAAC,CAAC;EACrB;AACF;AAEA,OAAO,SAASM,qBAAqBA,CAAA,EAAS;EAC5CH,MAAM,CAACI,gBAAgB,CAAC,SAAS,EAAEC,IAAA,IAAkC;IAAA,IAAjC;MAAEC;IAAmB,CAAC,GAAAD,IAAA;IACxD,IAAI,CAAAC,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEC,MAAM,MAAKpB,oBAAoB,EAAE;MACzC;IACF;IACA,MAAMO,OAA+B,GAAGY,IAAI,CAACZ,OAAO;IACpD,QAAQA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAED,IAAI;MACnB,KAAKL,mBAAmB;QAAE;UACxBE,aAAa,GAAGI,OAAO,CAACc,MAAM;UAC9B;QACF;MACA,KAAKnB,YAAY;QAAE;UACjBE,aAAa,GAAGG,OAAO,CAACe,KAAK;UAC7B;QACF;IACF;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASb,UAAUA,CAAA,EAA6B;EACrD,OAAQI,MAAM,CAA2BU,4BAA4B;AACvE","ignoreList":[]}
|
|
@@ -1,34 +1,21 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
1
|
import { hooks } from "./Runtime.js";
|
|
3
2
|
import { registerAppI18n } from "./registerAppI18n.js";
|
|
4
|
-
export function fulfilStoryboard(
|
|
5
|
-
|
|
3
|
+
export async function fulfilStoryboard(storyboard) {
|
|
4
|
+
if (storyboard.$$fulfilled) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
if (!storyboard.$$fulfilling) {
|
|
8
|
+
storyboard.$$fulfilling = doFulfilStoryboard(storyboard);
|
|
9
|
+
}
|
|
10
|
+
return storyboard.$$fulfilling;
|
|
6
11
|
}
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
return storyboard.$$fulfilling;
|
|
12
|
+
async function doFulfilStoryboard(storyboard) {
|
|
13
|
+
var _hooks$fulfilStoryboa;
|
|
14
|
+
await (hooks === null || hooks === void 0 || (_hooks$fulfilStoryboa = hooks.fulfilStoryboard) === null || _hooks$fulfilStoryboa === void 0 ? void 0 : _hooks$fulfilStoryboa.call(hooks, storyboard));
|
|
15
|
+
registerAppI18n(storyboard);
|
|
16
|
+
Object.assign(storyboard, {
|
|
17
|
+
$$fulfilled: true,
|
|
18
|
+
$$fulfilling: null
|
|
16
19
|
});
|
|
17
|
-
return _fulfilStoryboard.apply(this, arguments);
|
|
18
|
-
}
|
|
19
|
-
function doFulfilStoryboard(_x2) {
|
|
20
|
-
return _doFulfilStoryboard.apply(this, arguments);
|
|
21
|
-
}
|
|
22
|
-
function _doFulfilStoryboard() {
|
|
23
|
-
_doFulfilStoryboard = _asyncToGenerator(function* (storyboard) {
|
|
24
|
-
var _hooks$fulfilStoryboa;
|
|
25
|
-
yield hooks === null || hooks === void 0 || (_hooks$fulfilStoryboa = hooks.fulfilStoryboard) === null || _hooks$fulfilStoryboa === void 0 ? void 0 : _hooks$fulfilStoryboa.call(hooks, storyboard);
|
|
26
|
-
registerAppI18n(storyboard);
|
|
27
|
-
Object.assign(storyboard, {
|
|
28
|
-
$$fulfilled: true,
|
|
29
|
-
$$fulfilling: null
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
return _doFulfilStoryboard.apply(this, arguments);
|
|
33
20
|
}
|
|
34
21
|
//# sourceMappingURL=fulfilStoryboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fulfilStoryboard.js","names":["hooks","registerAppI18n","fulfilStoryboard","
|
|
1
|
+
{"version":3,"file":"fulfilStoryboard.js","names":["hooks","registerAppI18n","fulfilStoryboard","storyboard","$$fulfilled","$$fulfilling","doFulfilStoryboard","_hooks$fulfilStoryboa","call","Object","assign"],"sources":["../../../src/internal/fulfilStoryboard.ts"],"sourcesContent":["import type { RuntimeStoryboard } from \"@next-core/types\";\nimport { hooks } from \"./Runtime.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\n\nexport async function fulfilStoryboard(storyboard: RuntimeStoryboard) {\n if (storyboard.$$fulfilled) {\n return;\n }\n if (!storyboard.$$fulfilling) {\n storyboard.$$fulfilling = doFulfilStoryboard(storyboard);\n }\n return storyboard.$$fulfilling;\n}\n\nasync function doFulfilStoryboard(storyboard: RuntimeStoryboard) {\n await hooks?.fulfilStoryboard?.(storyboard);\n registerAppI18n(storyboard);\n Object.assign(storyboard, {\n $$fulfilled: true,\n $$fulfilling: null,\n });\n}\n"],"mappings":"AACA,SAASA,KAAK,QAAQ,cAAc;AACpC,SAASC,eAAe,QAAQ,sBAAsB;AAEtD,OAAO,eAAeC,gBAAgBA,CAACC,UAA6B,EAAE;EACpE,IAAIA,UAAU,CAACC,WAAW,EAAE;IAC1B;EACF;EACA,IAAI,CAACD,UAAU,CAACE,YAAY,EAAE;IAC5BF,UAAU,CAACE,YAAY,GAAGC,kBAAkB,CAACH,UAAU,CAAC;EAC1D;EACA,OAAOA,UAAU,CAACE,YAAY;AAChC;AAEA,eAAeC,kBAAkBA,CAACH,UAA6B,EAAE;EAAA,IAAAI,qBAAA;EAC/D,OAAMP,KAAK,aAALA,KAAK,gBAAAO,qBAAA,GAALP,KAAK,CAAEE,gBAAgB,cAAAK,qBAAA,uBAAvBA,qBAAA,CAAAC,IAAA,CAAAR,KAAK,EAAqBG,UAAU,CAAC;EAC3CF,eAAe,CAACE,UAAU,CAAC;EAC3BM,MAAM,CAACC,MAAM,CAACP,UAAU,EAAE;IACxBC,WAAW,EAAE,IAAI;IACjBC,YAAY,EAAE;EAChB,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import { compare } from "compare-versions";
|
|
|
2
2
|
import { _internalApiGetAppInBootstrapData, hooks } from "./Runtime.js";
|
|
3
3
|
export function hasInstalledApp(appId, matchVersion) {
|
|
4
4
|
// First, check whether the app is in bootstrap already.
|
|
5
|
-
|
|
5
|
+
let app = _internalApiGetAppInBootstrapData(appId);
|
|
6
6
|
if (!app && hooks !== null && hooks !== void 0 && hooks.checkInstalledApps) {
|
|
7
7
|
app = hooks.checkInstalledApps.getCheckedApp(appId);
|
|
8
8
|
}
|
|
@@ -19,10 +19,10 @@ export function hasInstalledApp(appId, matchVersion) {
|
|
|
19
19
|
// =1.2.3
|
|
20
20
|
// <=1.2.3
|
|
21
21
|
// <1.2.3
|
|
22
|
-
|
|
22
|
+
const matches = matchVersion.match(/^([><]=?|=)(.*)$/);
|
|
23
23
|
try {
|
|
24
24
|
if (!matches) {
|
|
25
|
-
throw new TypeError(
|
|
25
|
+
throw new TypeError(`Invalid match version: ${matchVersion}`);
|
|
26
26
|
}
|
|
27
27
|
return compare(app.currentVersion, matches[2], matches[1]);
|
|
28
28
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasInstalledApp.js","names":["compare","_internalApiGetAppInBootstrapData","hooks","hasInstalledApp","appId","matchVersion","app","checkInstalledApps","getCheckedApp","installStatus","currentVersion","matches","match","TypeError","
|
|
1
|
+
{"version":3,"file":"hasInstalledApp.js","names":["compare","_internalApiGetAppInBootstrapData","hooks","hasInstalledApp","appId","matchVersion","app","checkInstalledApps","getCheckedApp","installStatus","currentVersion","matches","match","TypeError","error","console"],"sources":["../../../src/internal/hasInstalledApp.ts"],"sourcesContent":["import type { MicroApp } from \"@next-core/types\";\nimport { type CompareOperator, compare } from \"compare-versions\";\nimport { _internalApiGetAppInBootstrapData, hooks } from \"./Runtime.js\";\n\nexport type AppForCheck = Pick<\n MicroApp,\n \"id\" | \"currentVersion\" | \"installStatus\"\n>;\n\nexport function hasInstalledApp(appId: string, matchVersion?: string): boolean {\n // First, check whether the app is in bootstrap already.\n let app = _internalApiGetAppInBootstrapData(appId) as AppForCheck | undefined;\n if (!app && hooks?.checkInstalledApps) {\n app = hooks.checkInstalledApps.getCheckedApp(appId);\n }\n if (!app || app.installStatus === \"running\") {\n return false;\n }\n // Todo: `currentVersion` maybe `\"\"`\n if (!matchVersion || !app.currentVersion) {\n return true;\n }\n // Valid `matchVersion`:\n // >=1.2.3\n // >1.2.3\n // =1.2.3\n // <=1.2.3\n // <1.2.3\n const matches = matchVersion.match(/^([><]=?|=)(.*)$/);\n try {\n if (!matches) {\n throw new TypeError(`Invalid match version: ${matchVersion}`);\n }\n return compare(\n app.currentVersion,\n matches[2],\n matches[1] as CompareOperator\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n return false;\n}\n"],"mappings":"AACA,SAA+BA,OAAO,QAAQ,kBAAkB;AAChE,SAASC,iCAAiC,EAAEC,KAAK,QAAQ,cAAc;AAOvE,OAAO,SAASC,eAAeA,CAACC,KAAa,EAAEC,YAAqB,EAAW;EAC7E;EACA,IAAIC,GAAG,GAAGL,iCAAiC,CAACG,KAAK,CAA4B;EAC7E,IAAI,CAACE,GAAG,IAAIJ,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEK,kBAAkB,EAAE;IACrCD,GAAG,GAAGJ,KAAK,CAACK,kBAAkB,CAACC,aAAa,CAACJ,KAAK,CAAC;EACrD;EACA,IAAI,CAACE,GAAG,IAAIA,GAAG,CAACG,aAAa,KAAK,SAAS,EAAE;IAC3C,OAAO,KAAK;EACd;EACA;EACA,IAAI,CAACJ,YAAY,IAAI,CAACC,GAAG,CAACI,cAAc,EAAE;IACxC,OAAO,IAAI;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,OAAO,GAAGN,YAAY,CAACO,KAAK,CAAC,kBAAkB,CAAC;EACtD,IAAI;IACF,IAAI,CAACD,OAAO,EAAE;MACZ,MAAM,IAAIE,SAAS,CAAC,0BAA0BR,YAAY,EAAE,CAAC;IAC/D;IACA,OAAOL,OAAO,CACZM,GAAG,CAACI,cAAc,EAClBC,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CACX,CAAC;EACH,CAAC,CAAC,OAAOG,KAAK,EAAE;IACd;IACAC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;EACtB;EACA,OAAO,KAAK;AACd","ignoreList":[]}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["extraQuery", "clear", "keepHash"];
|
|
4
1
|
import { parsePath } from "history";
|
|
5
2
|
import { getBasePath } from "../getBasePath.js";
|
|
6
3
|
import { _internalApiMatchStoryboard } from "./Runtime.js";
|
|
7
4
|
import { isOutsideApp } from "./matchStoryboard.js";
|
|
8
|
-
|
|
5
|
+
let blocked = false;
|
|
9
6
|
export function getUserConfirmation(message, callback) {
|
|
10
7
|
blocked = !confirm(message);
|
|
11
8
|
callback(!blocked);
|
|
12
9
|
}
|
|
13
10
|
export function historyExtended(browserHistory) {
|
|
14
|
-
|
|
11
|
+
const {
|
|
15
12
|
push: originalPush,
|
|
16
13
|
replace: originalReplace
|
|
17
14
|
} = browserHistory;
|
|
@@ -27,21 +24,21 @@ export function historyExtended(browserHistory) {
|
|
|
27
24
|
}
|
|
28
25
|
function updateQueryFactory(method) {
|
|
29
26
|
return function updateQuery(query) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
28
|
+
let callback = arguments.length > 2 ? arguments[2] : undefined;
|
|
29
|
+
const {
|
|
30
|
+
extraQuery,
|
|
31
|
+
clear,
|
|
32
|
+
keepHash,
|
|
33
|
+
...state
|
|
34
|
+
} = options;
|
|
35
|
+
const urlSearchParams = new URLSearchParams(clear ? "" : browserHistory.location.search);
|
|
36
|
+
const params = {};
|
|
40
37
|
Object.assign(params, query, extraQuery);
|
|
41
|
-
for (
|
|
38
|
+
for (const [key, value] of Object.entries(params)) {
|
|
42
39
|
if (Array.isArray(value)) {
|
|
43
40
|
urlSearchParams.delete(key);
|
|
44
|
-
for (
|
|
41
|
+
for (const item of value) {
|
|
45
42
|
urlSearchParams.append(key, item);
|
|
46
43
|
}
|
|
47
44
|
} else if (value === undefined || value === null || value === "") {
|
|
@@ -50,30 +47,34 @@ export function historyExtended(browserHistory) {
|
|
|
50
47
|
urlSearchParams.set(key, value);
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
|
-
(method === "push" ? push : replace)(
|
|
50
|
+
(method === "push" ? push : replace)(`?${urlSearchParams.toString()}${keepHash ? browserHistory.location.hash : ""}`, state, callback);
|
|
54
51
|
};
|
|
55
52
|
}
|
|
56
53
|
function pushAnchor(hash, state, callback) {
|
|
57
|
-
push(
|
|
54
|
+
push({
|
|
55
|
+
...browserHistory.location,
|
|
58
56
|
key: undefined,
|
|
59
57
|
hash,
|
|
60
|
-
state:
|
|
58
|
+
state: {
|
|
61
59
|
// The default notify is false
|
|
62
|
-
notify: false
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
notify: false,
|
|
61
|
+
...state
|
|
62
|
+
}
|
|
63
|
+
}, undefined, callback);
|
|
65
64
|
}
|
|
66
65
|
function reload(callback) {
|
|
67
|
-
replace(
|
|
68
|
-
|
|
66
|
+
replace({
|
|
67
|
+
...browserHistory.location,
|
|
68
|
+
state: {
|
|
69
|
+
...browserHistory.location.state,
|
|
69
70
|
// Always notify
|
|
70
71
|
notify: true,
|
|
71
72
|
// Do not use incremental sub routes
|
|
72
73
|
noIncremental: true
|
|
73
|
-
}
|
|
74
|
-
}
|
|
74
|
+
}
|
|
75
|
+
}, undefined, callback);
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
let blockMessage;
|
|
77
78
|
function setBlockMessage(message) {
|
|
78
79
|
blockMessage = message;
|
|
79
80
|
}
|
|
@@ -83,18 +84,20 @@ export function historyExtended(browserHistory) {
|
|
|
83
84
|
function unblock() {
|
|
84
85
|
blockMessage = undefined;
|
|
85
86
|
}
|
|
86
|
-
return
|
|
87
|
+
return {
|
|
87
88
|
pushQuery: updateQueryFactory("push"),
|
|
88
89
|
replaceQuery: updateQueryFactory("replace"),
|
|
89
90
|
pushAnchor: pushAnchor,
|
|
90
91
|
reload,
|
|
91
92
|
setBlockMessage,
|
|
92
93
|
getBlockMessage,
|
|
93
|
-
unblock
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
unblock,
|
|
95
|
+
...historyOverridden({
|
|
96
|
+
...browserHistory,
|
|
97
|
+
push,
|
|
98
|
+
replace
|
|
99
|
+
})
|
|
100
|
+
};
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
/**
|
|
@@ -103,14 +106,14 @@ export function historyExtended(browserHistory) {
|
|
|
103
106
|
* when `push` or `replace` to other apps, force page refresh.
|
|
104
107
|
*/
|
|
105
108
|
function historyOverridden(browserHistory) {
|
|
106
|
-
|
|
109
|
+
const {
|
|
107
110
|
push: originalPush,
|
|
108
111
|
replace: originalReplace
|
|
109
112
|
} = browserHistory;
|
|
110
113
|
function updateFactory(method) {
|
|
111
114
|
return function update(path, state, callback) {
|
|
112
|
-
|
|
113
|
-
|
|
115
|
+
let pathname;
|
|
116
|
+
const pathIsString = typeof path === "string";
|
|
114
117
|
if (pathIsString) {
|
|
115
118
|
pathname = parsePath(path).pathname;
|
|
116
119
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"historyExtended.js","names":["parsePath","getBasePath","_internalApiMatchStoryboard","isOutsideApp","blocked","getUserConfirmation","message","callback","confirm","historyExtended","browserHistory","push","originalPush","replace","originalReplace","location","state","updateQueryFactory","method","updateQuery","query","options","arguments","length","undefined","extraQuery","clear","keepHash","_objectWithoutProperties","_excluded","urlSearchParams","URLSearchParams","search","params","Object","assign","key","value","entries","Array","isArray","delete","item","append","set","concat","toString","hash","pushAnchor","_objectSpread","notify","reload","noIncremental","blockMessage","setBlockMessage","getBlockMessage","unblock","pushQuery","replaceQuery","historyOverridden","updateFactory","update","path","pathname","pathIsString","startsWith","substring","createHref"],"sources":["../../../src/internal/historyExtended.ts"],"sourcesContent":["import {\n History,\n LocationDescriptor,\n LocationDescriptorObject,\n parsePath,\n} from \"history\";\nimport { getBasePath } from \"../getBasePath.js\";\nimport { _internalApiMatchStoryboard } from \"./Runtime.js\";\nimport { isOutsideApp } from \"./matchStoryboard.js\";\n\nlet blocked = false;\nexport function getUserConfirmation(\n message: string,\n callback: (result: boolean) => void\n): void {\n blocked = !confirm(message);\n callback(!blocked);\n}\n\nexport function historyExtended(\n browserHistory: History<NextHistoryState>\n): ExtendedHistory {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n\n function push(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalPush(location, state);\n callback?.(blocked);\n }\n\n function replace(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalReplace(location, state);\n callback?.(blocked);\n }\n\n function updateQueryFactory(method: \"push\" | \"replace\"): UpdateQueryFunction {\n return function updateQuery(query, options = {}, callback?): void {\n const { extraQuery, clear, keepHash, ...state } = options;\n const urlSearchParams = new URLSearchParams(\n clear ? \"\" : browserHistory.location.search\n );\n const params: Record<string, string | string[]> = {};\n Object.assign(params, query, extraQuery);\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n urlSearchParams.delete(key);\n for (const item of value) {\n urlSearchParams.append(key, item);\n }\n } else if (value === undefined || value === null || value === \"\") {\n urlSearchParams.delete(key);\n } else {\n urlSearchParams.set(key, value);\n }\n }\n (method === \"push\" ? push : replace)(\n `?${urlSearchParams.toString()}${\n keepHash ? browserHistory.location.hash : \"\"\n }`,\n state,\n callback\n );\n };\n }\n\n function pushAnchor(\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n push(\n {\n ...browserHistory.location,\n key: undefined,\n hash,\n state: {\n // The default notify is false\n notify: false,\n ...state,\n },\n },\n undefined,\n callback\n );\n }\n\n function reload(callback?: (blocked: boolean) => void): void {\n replace(\n {\n ...browserHistory.location,\n state: {\n ...browserHistory.location.state,\n // Always notify\n notify: true,\n // Do not use incremental sub routes\n noIncremental: true,\n },\n },\n undefined,\n callback\n );\n }\n\n let blockMessage: string | undefined;\n\n function setBlockMessage(message: string | undefined): void {\n blockMessage = message;\n }\n\n function getBlockMessage(): string | undefined {\n return blockMessage;\n }\n\n function unblock(): void {\n blockMessage = undefined;\n }\n\n return {\n pushQuery: updateQueryFactory(\"push\"),\n replaceQuery: updateQueryFactory(\"replace\"),\n pushAnchor: pushAnchor,\n reload,\n setBlockMessage,\n getBlockMessage,\n unblock,\n ...historyOverridden({ ...browserHistory, push, replace }),\n };\n}\n\n/**\n * Override history for standalone micro apps.\n *\n * when `push` or `replace` to other apps, force page refresh.\n */\nfunction historyOverridden(\n browserHistory: History<NextHistoryState> &\n Pick<ExtendedHistory, \"push\" | \"replace\">\n): Pick<ExtendedHistory, \"push\" | \"replace\"> {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n function updateFactory(method: \"push\" | \"replace\"): ExtendedHistory[\"push\"] {\n return function update(path, state?, callback?) {\n let pathname: string | undefined;\n const pathIsString = typeof path === \"string\";\n if (pathIsString) {\n pathname = parsePath(path).pathname;\n } else {\n pathname = path.pathname;\n }\n\n // When history.push or history.replace is performing with an absolute pathname,\n // force load the target page when it is a page of an outside app.\n if (\n typeof pathname === \"string\" &&\n pathname.startsWith(\"/\") &&\n isOutsideApp(_internalApiMatchStoryboard(pathname))\n ) {\n // Going to outside apps.\n return location[method === \"push\" ? \"assign\" : \"replace\"](\n pathIsString\n ? getBasePath() + path.substring(1)\n : browserHistory.createHref(\n path as LocationDescriptorObject<NextHistoryState>\n )\n );\n }\n\n return (method === \"push\" ? originalPush : originalReplace)(\n path as string,\n state,\n callback\n );\n };\n }\n return {\n push: updateFactory(\"push\"),\n replace: updateFactory(\"replace\"),\n };\n}\n\nexport interface NextHistoryState {\n notify?: boolean;\n from?: LocationDescriptor<NextHistoryState>;\n noIncremental?: boolean;\n}\n\n/**\n * 扩展的系统会话对象。\n */\nexport interface ExtendedHistory {\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,往浏览器会话历史栈中推入一条新记录。\n */\n pushQuery: UpdateQueryFunction;\n\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,替换浏览器会话历史栈中最新的一条记录。\n */\n replaceQuery: UpdateQueryFunction;\n\n /** {@inheritDoc UpdateAnchorFunction} */\n pushAnchor: UpdateAnchorFunction;\n\n /** 重载当前会话,即触发页面重新渲染。与 location.reload() 不同,它不会触发浏览器页面的重载。 */\n reload: (callback?: (blocked: boolean) => void) => void;\n\n /** @internal */\n setBlockMessage: (message: string | undefined) => void;\n\n /** @internal */\n getBlockMessage: () => string | undefined;\n\n /** 取消之前设置的阻止页面离开信息的设置。 */\n unblock: () => void;\n\n /** 推入一条记录。*/\n push: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n\n /** 替换一条记录。*/\n replace: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n}\n\n/**\n * 更新指定的 query 参数。\n *\n * @param query - 要更新的 query 参数。\n * @param options - 选项。\n */\nexport type UpdateQueryFunction = (\n query: Record<string, unknown>,\n options?: UpdateQueryOptions,\n callback?: (blocked: boolean) => void\n) => void;\n\n/** 更新 query 参数时的选项 */\nexport interface UpdateQueryOptions extends NextHistoryState {\n /** 额外要更新的 query 参数。 */\n extraQuery?: Record<string, unknown>;\n /** 是否同时清除当前的所有其它 query 参数。 */\n clear?: boolean;\n /** 是否保留当前 hash 参数。 */\n keepHash?: boolean;\n}\n\n/**\n * 设置指定的 anchor (URL hash)地址,此方法默认不会触发页面重新渲染。\n * 往浏览器会话历史栈中推入一条新记录。\n *\n * @param hash - Hash 地址。\n * @param state - 会话状态设置。\n */\nexport type UpdateAnchorFunction = (\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n) => void;\n"],"mappings":";;;AAAA,SAIEA,SAAS,QACJ,SAAS;AAChB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,2BAA2B,QAAQ,cAAc;AAC1D,SAASC,YAAY,QAAQ,sBAAsB;AAEnD,IAAIC,OAAO,GAAG,KAAK;AACnB,OAAO,SAASC,mBAAmBA,CACjCC,OAAe,EACfC,QAAmC,EAC7B;EACNH,OAAO,GAAG,CAACI,OAAO,CAACF,OAAO,CAAC;EAC3BC,QAAQ,CAAC,CAACH,OAAO,CAAC;AACpB;AAEA,OAAO,SAASK,eAAeA,CAC7BC,cAAyC,EACxB;EACjB,IAAM;IAAEC,IAAI,EAAEC,YAAY;IAAEC,OAAO,EAAEC;EAAgB,CAAC,GAAGJ,cAAc;EAEvE,SAASC,IAAIA,CACXI,QAA8C,EAC9CC,KAAwB,EACxBT,QAAqC,EAC/B;IACNH,OAAO,GAAG,KAAK;IACfQ,YAAY,CAACG,QAAQ,EAAEC,KAAK,CAAC;IAC7BT,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGH,OAAO,CAAC;EACrB;EAEA,SAASS,OAAOA,CACdE,QAA8C,EAC9CC,KAAwB,EACxBT,QAAqC,EAC/B;IACNH,OAAO,GAAG,KAAK;IACfU,eAAe,CAACC,QAAQ,EAAEC,KAAK,CAAC;IAChCT,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGH,OAAO,CAAC;EACrB;EAEA,SAASa,kBAAkBA,CAACC,MAA0B,EAAuB;IAC3E,OAAO,SAASC,WAAWA,CAACC,KAAK,EAAiC;MAAA,IAA/BC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;MAAA,IAAEf,QAAS,GAAAe,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;MACxD,IAAM;UAAEC,UAAU;UAAEC,KAAK;UAAEC;QAAmB,CAAC,GAAGN,OAAO;QAAjBL,KAAK,GAAAY,wBAAA,CAAKP,OAAO,EAAAQ,SAAA;MACzD,IAAMC,eAAe,GAAG,IAAIC,eAAe,CACzCL,KAAK,GAAG,EAAE,GAAGhB,cAAc,CAACK,QAAQ,CAACiB,MACvC,CAAC;MACD,IAAMC,MAAyC,GAAG,CAAC,CAAC;MACpDC,MAAM,CAACC,MAAM,CAACF,MAAM,EAAEb,KAAK,EAAEK,UAAU,CAAC;MACxC,KAAK,IAAM,CAACW,GAAG,EAAEC,KAAK,CAAC,IAAIH,MAAM,CAACI,OAAO,CAACL,MAAM,CAAC,EAAE;QACjD,IAAIM,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,EAAE;UACxBP,eAAe,CAACW,MAAM,CAACL,GAAG,CAAC;UAC3B,KAAK,IAAMM,IAAI,IAAIL,KAAK,EAAE;YACxBP,eAAe,CAACa,MAAM,CAACP,GAAG,EAAEM,IAAI,CAAC;UACnC;QACF,CAAC,MAAM,IAAIL,KAAK,KAAKb,SAAS,IAAIa,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAAE,EAAE;UAChEP,eAAe,CAACW,MAAM,CAACL,GAAG,CAAC;QAC7B,CAAC,MAAM;UACLN,eAAe,CAACc,GAAG,CAACR,GAAG,EAAEC,KAAK,CAAC;QACjC;MACF;MACA,CAACnB,MAAM,KAAK,MAAM,GAAGP,IAAI,GAAGE,OAAO,MAAAgC,MAAA,CAC7Bf,eAAe,CAACgB,QAAQ,CAAC,CAAC,EAAAD,MAAA,CAC5BlB,QAAQ,GAAGjB,cAAc,CAACK,QAAQ,CAACgC,IAAI,GAAG,EAAE,GAE9C/B,KAAK,EACLT,QACF,CAAC;IACH,CAAC;EACH;EAEA,SAASyC,UAAUA,CACjBD,IAAY,EACZ/B,KAAwB,EACxBT,QAAqC,EAC/B;IACNI,IAAI,CAAAsC,aAAA,CAAAA,aAAA,KAEGvC,cAAc,CAACK,QAAQ;MAC1BqB,GAAG,EAAEZ,SAAS;MACduB,IAAI;MACJ/B,KAAK,EAAAiC,aAAA;QACH;QACAC,MAAM,EAAE;MAAK,GACVlC,KAAK;IACT,IAEHQ,SAAS,EACTjB,QACF,CAAC;EACH;EAEA,SAAS4C,MAAMA,CAAC5C,QAAqC,EAAQ;IAC3DM,OAAO,CAAAoC,aAAA,CAAAA,aAAA,KAEAvC,cAAc,CAACK,QAAQ;MAC1BC,KAAK,EAAAiC,aAAA,CAAAA,aAAA,KACAvC,cAAc,CAACK,QAAQ,CAACC,KAAK;QAChC;QACAkC,MAAM,EAAE,IAAI;QACZ;QACAE,aAAa,EAAE;MAAI;IACpB,IAEH5B,SAAS,EACTjB,QACF,CAAC;EACH;EAEA,IAAI8C,YAAgC;EAEpC,SAASC,eAAeA,CAAChD,OAA2B,EAAQ;IAC1D+C,YAAY,GAAG/C,OAAO;EACxB;EAEA,SAASiD,eAAeA,CAAA,EAAuB;IAC7C,OAAOF,YAAY;EACrB;EAEA,SAASG,OAAOA,CAAA,EAAS;IACvBH,YAAY,GAAG7B,SAAS;EAC1B;EAEA,OAAAyB,aAAA;IACEQ,SAAS,EAAExC,kBAAkB,CAAC,MAAM,CAAC;IACrCyC,YAAY,EAAEzC,kBAAkB,CAAC,SAAS,CAAC;IAC3C+B,UAAU,EAAEA,UAAU;IACtBG,MAAM;IACNG,eAAe;IACfC,eAAe;IACfC;EAAO,GACJG,iBAAiB,CAAAV,aAAA,CAAAA,aAAA,KAAMvC,cAAc;IAAEC,IAAI;IAAEE;EAAO,EAAE,CAAC;AAE9D;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS8C,iBAAiBA,CACxBjD,cAC2C,EACA;EAC3C,IAAM;IAAEC,IAAI,EAAEC,YAAY;IAAEC,OAAO,EAAEC;EAAgB,CAAC,GAAGJ,cAAc;EACvE,SAASkD,aAAaA,CAAC1C,MAA0B,EAA2B;IAC1E,OAAO,SAAS2C,MAAMA,CAACC,IAAI,EAAE9C,KAAM,EAAET,QAAS,EAAE;MAC9C,IAAIwD,QAA4B;MAChC,IAAMC,YAAY,GAAG,OAAOF,IAAI,KAAK,QAAQ;MAC7C,IAAIE,YAAY,EAAE;QAChBD,QAAQ,GAAG/D,SAAS,CAAC8D,IAAI,CAAC,CAACC,QAAQ;MACrC,CAAC,MAAM;QACLA,QAAQ,GAAGD,IAAI,CAACC,QAAQ;MAC1B;;MAEA;MACA;MACA,IACE,OAAOA,QAAQ,KAAK,QAAQ,IAC5BA,QAAQ,CAACE,UAAU,CAAC,GAAG,CAAC,IACxB9D,YAAY,CAACD,2BAA2B,CAAC6D,QAAQ,CAAC,CAAC,EACnD;QACA;QACA,OAAOhD,QAAQ,CAACG,MAAM,KAAK,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CACvD8C,YAAY,GACR/D,WAAW,CAAC,CAAC,GAAG6D,IAAI,CAACI,SAAS,CAAC,CAAC,CAAC,GACjCxD,cAAc,CAACyD,UAAU,CACvBL,IACF,CACN,CAAC;MACH;MAEA,OAAO,CAAC5C,MAAM,KAAK,MAAM,GAAGN,YAAY,GAAGE,eAAe,EACxDgD,IAAI,EACJ9C,KAAK,EACLT,QACF,CAAC;IACH,CAAC;EACH;EACA,OAAO;IACLI,IAAI,EAAEiD,aAAa,CAAC,MAAM,CAAC;IAC3B/C,OAAO,EAAE+C,aAAa,CAAC,SAAS;EAClC,CAAC;AACH;;AAQA;AACA;AACA;;AA0CA;AACA;AACA;AACA;AACA;AACA;;AAOA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"historyExtended.js","names":["parsePath","getBasePath","_internalApiMatchStoryboard","isOutsideApp","blocked","getUserConfirmation","message","callback","confirm","historyExtended","browserHistory","push","originalPush","replace","originalReplace","location","state","updateQueryFactory","method","updateQuery","query","options","arguments","length","undefined","extraQuery","clear","keepHash","urlSearchParams","URLSearchParams","search","params","Object","assign","key","value","entries","Array","isArray","delete","item","append","set","toString","hash","pushAnchor","notify","reload","noIncremental","blockMessage","setBlockMessage","getBlockMessage","unblock","pushQuery","replaceQuery","historyOverridden","updateFactory","update","path","pathname","pathIsString","startsWith","substring","createHref"],"sources":["../../../src/internal/historyExtended.ts"],"sourcesContent":["import {\n History,\n LocationDescriptor,\n LocationDescriptorObject,\n parsePath,\n} from \"history\";\nimport { getBasePath } from \"../getBasePath.js\";\nimport { _internalApiMatchStoryboard } from \"./Runtime.js\";\nimport { isOutsideApp } from \"./matchStoryboard.js\";\n\nlet blocked = false;\nexport function getUserConfirmation(\n message: string,\n callback: (result: boolean) => void\n): void {\n blocked = !confirm(message);\n callback(!blocked);\n}\n\nexport function historyExtended(\n browserHistory: History<NextHistoryState>\n): ExtendedHistory {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n\n function push(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalPush(location, state);\n callback?.(blocked);\n }\n\n function replace(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalReplace(location, state);\n callback?.(blocked);\n }\n\n function updateQueryFactory(method: \"push\" | \"replace\"): UpdateQueryFunction {\n return function updateQuery(query, options = {}, callback?): void {\n const { extraQuery, clear, keepHash, ...state } = options;\n const urlSearchParams = new URLSearchParams(\n clear ? \"\" : browserHistory.location.search\n );\n const params: Record<string, string | string[]> = {};\n Object.assign(params, query, extraQuery);\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n urlSearchParams.delete(key);\n for (const item of value) {\n urlSearchParams.append(key, item);\n }\n } else if (value === undefined || value === null || value === \"\") {\n urlSearchParams.delete(key);\n } else {\n urlSearchParams.set(key, value);\n }\n }\n (method === \"push\" ? push : replace)(\n `?${urlSearchParams.toString()}${\n keepHash ? browserHistory.location.hash : \"\"\n }`,\n state,\n callback\n );\n };\n }\n\n function pushAnchor(\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n push(\n {\n ...browserHistory.location,\n key: undefined,\n hash,\n state: {\n // The default notify is false\n notify: false,\n ...state,\n },\n },\n undefined,\n callback\n );\n }\n\n function reload(callback?: (blocked: boolean) => void): void {\n replace(\n {\n ...browserHistory.location,\n state: {\n ...browserHistory.location.state,\n // Always notify\n notify: true,\n // Do not use incremental sub routes\n noIncremental: true,\n },\n },\n undefined,\n callback\n );\n }\n\n let blockMessage: string | undefined;\n\n function setBlockMessage(message: string | undefined): void {\n blockMessage = message;\n }\n\n function getBlockMessage(): string | undefined {\n return blockMessage;\n }\n\n function unblock(): void {\n blockMessage = undefined;\n }\n\n return {\n pushQuery: updateQueryFactory(\"push\"),\n replaceQuery: updateQueryFactory(\"replace\"),\n pushAnchor: pushAnchor,\n reload,\n setBlockMessage,\n getBlockMessage,\n unblock,\n ...historyOverridden({ ...browserHistory, push, replace }),\n };\n}\n\n/**\n * Override history for standalone micro apps.\n *\n * when `push` or `replace` to other apps, force page refresh.\n */\nfunction historyOverridden(\n browserHistory: History<NextHistoryState> &\n Pick<ExtendedHistory, \"push\" | \"replace\">\n): Pick<ExtendedHistory, \"push\" | \"replace\"> {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n function updateFactory(method: \"push\" | \"replace\"): ExtendedHistory[\"push\"] {\n return function update(path, state?, callback?) {\n let pathname: string | undefined;\n const pathIsString = typeof path === \"string\";\n if (pathIsString) {\n pathname = parsePath(path).pathname;\n } else {\n pathname = path.pathname;\n }\n\n // When history.push or history.replace is performing with an absolute pathname,\n // force load the target page when it is a page of an outside app.\n if (\n typeof pathname === \"string\" &&\n pathname.startsWith(\"/\") &&\n isOutsideApp(_internalApiMatchStoryboard(pathname))\n ) {\n // Going to outside apps.\n return location[method === \"push\" ? \"assign\" : \"replace\"](\n pathIsString\n ? getBasePath() + path.substring(1)\n : browserHistory.createHref(\n path as LocationDescriptorObject<NextHistoryState>\n )\n );\n }\n\n return (method === \"push\" ? originalPush : originalReplace)(\n path as string,\n state,\n callback\n );\n };\n }\n return {\n push: updateFactory(\"push\"),\n replace: updateFactory(\"replace\"),\n };\n}\n\nexport interface NextHistoryState {\n notify?: boolean;\n from?: LocationDescriptor<NextHistoryState>;\n noIncremental?: boolean;\n}\n\n/**\n * 扩展的系统会话对象。\n */\nexport interface ExtendedHistory {\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,往浏览器会话历史栈中推入一条新记录。\n */\n pushQuery: UpdateQueryFunction;\n\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,替换浏览器会话历史栈中最新的一条记录。\n */\n replaceQuery: UpdateQueryFunction;\n\n /** {@inheritDoc UpdateAnchorFunction} */\n pushAnchor: UpdateAnchorFunction;\n\n /** 重载当前会话,即触发页面重新渲染。与 location.reload() 不同,它不会触发浏览器页面的重载。 */\n reload: (callback?: (blocked: boolean) => void) => void;\n\n /** @internal */\n setBlockMessage: (message: string | undefined) => void;\n\n /** @internal */\n getBlockMessage: () => string | undefined;\n\n /** 取消之前设置的阻止页面离开信息的设置。 */\n unblock: () => void;\n\n /** 推入一条记录。*/\n push: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n\n /** 替换一条记录。*/\n replace: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n}\n\n/**\n * 更新指定的 query 参数。\n *\n * @param query - 要更新的 query 参数。\n * @param options - 选项。\n */\nexport type UpdateQueryFunction = (\n query: Record<string, unknown>,\n options?: UpdateQueryOptions,\n callback?: (blocked: boolean) => void\n) => void;\n\n/** 更新 query 参数时的选项 */\nexport interface UpdateQueryOptions extends NextHistoryState {\n /** 额外要更新的 query 参数。 */\n extraQuery?: Record<string, unknown>;\n /** 是否同时清除当前的所有其它 query 参数。 */\n clear?: boolean;\n /** 是否保留当前 hash 参数。 */\n keepHash?: boolean;\n}\n\n/**\n * 设置指定的 anchor (URL hash)地址,此方法默认不会触发页面重新渲染。\n * 往浏览器会话历史栈中推入一条新记录。\n *\n * @param hash - Hash 地址。\n * @param state - 会话状态设置。\n */\nexport type UpdateAnchorFunction = (\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n) => void;\n"],"mappings":"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","ignoreList":[]}
|