@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,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
1
|
import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateFieldInitSpec";
|
|
3
2
|
import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet2";
|
|
4
3
|
import { uniq } from "lodash";
|
|
@@ -6,35 +5,35 @@ import { isStrictMode, warnAboutStrictMode } from "./isStrictMode.js";
|
|
|
6
5
|
import { getV2RuntimeFromDll } from "./getV2RuntimeFromDll.js";
|
|
7
6
|
|
|
8
7
|
// Note: `prefix` is a native prop on Element, but it's only used in XML documents.
|
|
9
|
-
|
|
8
|
+
const allowedNativeProps = new Set(["prefix"]);
|
|
10
9
|
var _registry = /*#__PURE__*/new WeakMap();
|
|
11
10
|
class CustomTemplateRegistry {
|
|
12
11
|
constructor() {
|
|
13
12
|
_classPrivateFieldInitSpec(this, _registry, new Map());
|
|
14
13
|
}
|
|
15
14
|
define(tagName, constructor) {
|
|
16
|
-
var _constructor$proxy
|
|
17
|
-
|
|
15
|
+
var _constructor$proxy, _compatibleConstructo;
|
|
16
|
+
let registered = _classPrivateFieldGet(_registry, this).has(tagName);
|
|
18
17
|
if (registered) {
|
|
19
18
|
// When open launchpad, the storyboard will be updated.
|
|
20
19
|
// However, we can't *undefine* a custom element.
|
|
21
20
|
// Just ignore re-registering custom templates.
|
|
22
21
|
// eslint-disable-next-line no-console
|
|
23
|
-
console.warn(
|
|
22
|
+
console.warn(`Custom template of "${tagName}" already registered.`);
|
|
24
23
|
} else {
|
|
25
24
|
registered = !!customElements.get(tagName);
|
|
26
25
|
if (registered) {
|
|
27
26
|
// eslint-disable-next-line no-console
|
|
28
|
-
console.warn(
|
|
27
|
+
console.warn(`Custom template of "${tagName}" already defined by customElements.`);
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
// Transform legacy `proxy.properties[].asVariable` as states.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
for (
|
|
32
|
+
const strict = isStrictMode();
|
|
33
|
+
const proxyProperties = ((_constructor$proxy = constructor.proxy) === null || _constructor$proxy === void 0 ? void 0 : _constructor$proxy.properties) ?? {};
|
|
34
|
+
const validProxyProps = [];
|
|
35
|
+
const legacyTplVariables = [];
|
|
36
|
+
for (const [key, value] of Object.entries(proxyProperties)) {
|
|
38
37
|
if (value.asVariable) {
|
|
39
38
|
warnAboutStrictMode(strict, "Template `asVariable`", tagName, key);
|
|
40
39
|
// istanbul ignore next
|
|
@@ -50,33 +49,37 @@ class CustomTemplateRegistry {
|
|
|
50
49
|
}
|
|
51
50
|
// Else: documentation only, for exposed states.
|
|
52
51
|
}
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const compatibleConstructor = {
|
|
53
|
+
...constructor,
|
|
54
|
+
proxy: {
|
|
55
|
+
...constructor.proxy,
|
|
55
56
|
properties: Object.fromEntries(validProxyProps)
|
|
56
|
-
}
|
|
57
|
-
state: (constructor.state ? strict ? constructor.state : constructor.state.map(item =>
|
|
57
|
+
},
|
|
58
|
+
state: (constructor.state ? strict ? constructor.state : constructor.state.map(item => ({
|
|
58
59
|
// Make `expose` defaults to true in non-strict mode.
|
|
59
|
-
expose: true
|
|
60
|
-
|
|
60
|
+
expose: true,
|
|
61
|
+
...item
|
|
62
|
+
})) : []).concat(legacyTplVariables.map(tpl => ({
|
|
61
63
|
name: tpl,
|
|
62
64
|
expose: true
|
|
63
65
|
})))
|
|
64
|
-
}
|
|
66
|
+
};
|
|
65
67
|
|
|
66
68
|
// Now we allow re-register custom template
|
|
67
|
-
_classPrivateFieldGet(_registry, this).set(tagName,
|
|
69
|
+
_classPrivateFieldGet(_registry, this).set(tagName, {
|
|
70
|
+
...compatibleConstructor,
|
|
68
71
|
name: tagName
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
});
|
|
73
|
+
const exposedStates = getExposedStates(compatibleConstructor.state);
|
|
74
|
+
const proxyMethods = Object.entries(((_compatibleConstructo = compatibleConstructor.proxy) === null || _compatibleConstructo === void 0 ? void 0 : _compatibleConstructo.methods) ?? {});
|
|
75
|
+
const props = exposedStates.concat(validProxyProps.map(entry => entry[0]));
|
|
76
|
+
const methods = proxyMethods.map(entry => entry[0]);
|
|
77
|
+
const nativeProps = props.concat(methods).filter(prop => prop in HTMLElement.prototype && !allowedNativeProps.has(prop));
|
|
75
78
|
if (nativeProps.length > 0) {
|
|
76
79
|
warnAboutStrictMode(strict, "Using native HTMLElement properties as template properties or methods", tagName, ...nativeProps);
|
|
77
80
|
// istanbul ignore next
|
|
78
81
|
if (strict) {
|
|
79
|
-
throw new Error(
|
|
82
|
+
throw new Error(`In custom template "${tagName}", ${nativeProps.map(p => `"${p}"`).join(", ")} are native HTMLElement properties, and should be avoid to be used as brick properties or methods.`);
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
if (registered) {
|
|
@@ -97,16 +100,16 @@ class CustomTemplateRegistry {
|
|
|
97
100
|
return (_this$$$tplStateStore = this.$$tplStateStore) === null || _this$$$tplStateStore === void 0 || (_this$$$tplStateStore = _this$$$tplStateStore.hostBrick) === null || _this$$$tplStateStore === void 0 || (_this$$$tplStateStore = _this$$$tplStateStore.tplHostMetadata) === null || _this$$$tplStateStore === void 0 || (_this$$$tplStateStore = _this$$$tplStateStore.internalBricksByRef.get(ref)) === null || _this$$$tplStateStore === void 0 ? void 0 : _this$$$tplStateStore.element;
|
|
98
101
|
}
|
|
99
102
|
connectedCallback() {
|
|
100
|
-
|
|
103
|
+
let shadowRoot = this.shadowRoot;
|
|
101
104
|
if (!shadowRoot) {
|
|
102
105
|
shadowRoot = this.attachShadow({
|
|
103
106
|
mode: "open"
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
|
-
|
|
107
|
-
|
|
109
|
+
const fragment = document.createDocumentFragment();
|
|
110
|
+
const style = document.createElement("style");
|
|
108
111
|
style.textContent = ":host{display:block}:host([hidden]){display:none}";
|
|
109
|
-
|
|
112
|
+
const slot = document.createElement("slot");
|
|
110
113
|
fragment.appendChild(style);
|
|
111
114
|
fragment.appendChild(slot);
|
|
112
115
|
shadowRoot.appendChild(fragment);
|
|
@@ -117,11 +120,11 @@ class CustomTemplateRegistry {
|
|
|
117
120
|
}
|
|
118
121
|
}
|
|
119
122
|
}
|
|
120
|
-
|
|
123
|
+
for (const propName of exposedStates) {
|
|
121
124
|
if (validProxyProps.some(entry => entry[0] === propName)) {
|
|
122
125
|
// eslint-disable-next-line no-console
|
|
123
|
-
console.error(
|
|
124
|
-
|
|
126
|
+
console.error(`Cannot define an exposed state that is also a proxy property: "${propName}" in ${tagName}`);
|
|
127
|
+
continue;
|
|
125
128
|
}
|
|
126
129
|
Object.defineProperty(TplElement.prototype, propName, {
|
|
127
130
|
get() {
|
|
@@ -136,46 +139,34 @@ class CustomTemplateRegistry {
|
|
|
136
139
|
},
|
|
137
140
|
enumerable: true
|
|
138
141
|
});
|
|
139
|
-
};
|
|
140
|
-
for (var propName of exposedStates) {
|
|
141
|
-
if (_loop(propName)) continue;
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
for (const [from, to] of validProxyProps) {
|
|
144
144
|
Object.defineProperty(TplElement.prototype, from, {
|
|
145
145
|
get() {
|
|
146
|
-
var _to$refProperty;
|
|
147
146
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
148
|
-
|
|
149
|
-
return element[
|
|
147
|
+
const element = this.$$getElementByRef(to.ref);
|
|
148
|
+
return element[to.refProperty ?? from];
|
|
150
149
|
},
|
|
151
150
|
set(value) {
|
|
152
151
|
var _this$$$getElementByR;
|
|
153
152
|
// 同上 exposedState.set
|
|
154
|
-
|
|
153
|
+
const element = (_this$$$getElementByR = this.$$getElementByRef) === null || _this$$$getElementByR === void 0 ? void 0 : _this$$$getElementByR.call(this, to.ref);
|
|
155
154
|
if (element) {
|
|
156
|
-
|
|
157
|
-
element[(_to$refProperty2 = to.refProperty) !== null && _to$refProperty2 !== void 0 ? _to$refProperty2 : from] = value;
|
|
155
|
+
element[to.refProperty ?? from] = value;
|
|
158
156
|
}
|
|
159
157
|
},
|
|
160
158
|
enumerable: true
|
|
161
159
|
});
|
|
162
|
-
};
|
|
163
|
-
for (var [from, to] of validProxyProps) {
|
|
164
|
-
_loop2(from, to);
|
|
165
160
|
}
|
|
166
|
-
|
|
167
|
-
Object.defineProperty(TplElement.prototype,
|
|
161
|
+
for (const [from, to] of proxyMethods) {
|
|
162
|
+
Object.defineProperty(TplElement.prototype, from, {
|
|
168
163
|
value() {
|
|
169
|
-
var _to$refMethod;
|
|
170
164
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
171
|
-
|
|
172
|
-
element[
|
|
165
|
+
const element = this.$$getElementByRef(to.ref);
|
|
166
|
+
element[to.refMethod ?? from](...arguments);
|
|
173
167
|
},
|
|
174
168
|
enumerable: true
|
|
175
169
|
});
|
|
176
|
-
};
|
|
177
|
-
for (var [_from, _to] of proxyMethods) {
|
|
178
|
-
_loop3(_from, _to);
|
|
179
170
|
}
|
|
180
171
|
customElements.define(tagName, TplElement);
|
|
181
172
|
}
|
|
@@ -184,14 +175,13 @@ class CustomTemplateRegistry {
|
|
|
184
175
|
}
|
|
185
176
|
}
|
|
186
177
|
function getExposedStates(state) {
|
|
187
|
-
var _state$filter$map;
|
|
188
178
|
// Allow duplicated state names which maybe mutually exclusive.
|
|
189
|
-
return uniq((
|
|
179
|
+
return uniq((state === null || state === void 0 ? void 0 : state.filter(item => item.expose).map(item => item.name)) ?? []);
|
|
190
180
|
}
|
|
191
181
|
|
|
192
182
|
// istanbul ignore next
|
|
193
183
|
function getCustomTemplatesV2() {
|
|
194
|
-
|
|
184
|
+
const v2Kit = getV2RuntimeFromDll();
|
|
195
185
|
if (v2Kit) {
|
|
196
186
|
return Object.freeze({
|
|
197
187
|
define(tagName, constructor) {
|
|
@@ -202,5 +192,5 @@ function getCustomTemplatesV2() {
|
|
|
202
192
|
}
|
|
203
193
|
|
|
204
194
|
// istanbul ignore next
|
|
205
|
-
export
|
|
195
|
+
export const customTemplates = getCustomTemplatesV2() || new CustomTemplateRegistry();
|
|
206
196
|
//# sourceMappingURL=CustomTemplates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomTemplates.js","names":["uniq","isStrictMode","warnAboutStrictMode","getV2RuntimeFromDll","allowedNativeProps","Set","_registry","WeakMap","CustomTemplateRegistry","constructor","_classPrivateFieldInitSpec","Map","define","tagName","_constructor$proxy$pr","_constructor$proxy","_compatibleConstructo","_compatibleConstructo2","registered","_classPrivateFieldGet","has","console","warn","concat","customElements","get","strict","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","value","Object","entries","asVariable","push","mergeProperty","refTransform","error","ref","compatibleConstructor","_objectSpread","fromEntries","state","map","item","expose","tpl","name","set","exposedStates","getExposedStates","proxyMethods","methods","props","entry","nativeProps","filter","prop","HTMLElement","prototype","length","Error","p","join","TplElement","$$typeof","_dev_only_definedProperties","_dev_only_definedMethods","$$getElementByRef","_this$$$tplStateStore","$$tplStateStore","hostBrick","tplHostMetadata","internalBricksByRef","element","connectedCallback","shadowRoot","attachShadow","mode","fragment","document","createDocumentFragment","style","createElement","textContent","slot","appendChild","disconnectedCallback","_loop","propName","some","defineProperty","getValue","_this$$$tplStateStore2","updateValue","enumerable","_loop2","from","to","_to$refProperty","refProperty","_this$$$getElementByR","call","_to$refProperty2","_loop3","_from","_to","_to$refMethod","refMethod","arguments","_state$filter$map","getCustomTemplatesV2","v2Kit","freeze","getRuntime","registerCustomTemplate","customTemplates"],"sources":["../../src/CustomTemplates.ts"],"sourcesContent":["import type {\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateProxyBasicProperty,\n} from \"@next-core/types\";\nimport { uniq } from \"lodash\";\nimport type { RuntimeBrickElement } from \"./internal/interfaces.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"./isStrictMode.js\";\nimport { getV2RuntimeFromDll } from \"./getV2RuntimeFromDll.js\";\n\n// Note: `prefix` is a native prop on Element, but it's only used in XML documents.\nconst allowedNativeProps = new Set([\"prefix\"]);\n\ninterface LegacyTplPropProxy extends CustomTemplateProxyBasicProperty {\n asVariable?: boolean;\n mergeProperty?: unknown;\n refTransform?: unknown;\n}\n\nclass CustomTemplateRegistry {\n readonly #registry = new Map<string, CustomTemplate>();\n\n define(tagName: string, constructor: CustomTemplateConstructor): void {\n let registered = this.#registry.has(tagName);\n if (registered) {\n // When open launchpad, the storyboard will be updated.\n // However, we can't *undefine* a custom element.\n // Just ignore re-registering custom templates.\n // eslint-disable-next-line no-console\n console.warn(`Custom template of \"${tagName}\" already registered.`);\n } else {\n registered = !!customElements.get(tagName);\n if (registered) {\n // eslint-disable-next-line no-console\n console.warn(\n `Custom template of \"${tagName}\" already defined by customElements.`\n );\n }\n }\n\n // Transform legacy `proxy.properties[].asVariable` as states.\n const strict = isStrictMode();\n const proxyProperties = (constructor.proxy?.properties ?? {}) as {\n [name: string]: LegacyTplPropProxy;\n };\n const validProxyProps: [string, CustomTemplateProxyBasicProperty][] = [];\n const legacyTplVariables: string[] = [];\n for (const [key, value] of Object.entries(proxyProperties)) {\n if (value.asVariable) {\n warnAboutStrictMode(strict, \"Template `asVariable`\", tagName, key);\n // istanbul ignore next\n if (!strict) {\n // For existed TPL usage, treat it as a STATE.\n legacyTplVariables.push(key);\n }\n } else if (value.mergeProperty || value.refTransform) {\n // eslint-disable-next-line no-console\n console.error(\n \"Template `mergeProperty` and `refTransform` are dropped in v3:\",\n tagName,\n key\n );\n } else if (value.ref) {\n validProxyProps.push([key, value]);\n }\n // Else: documentation only, for exposed states.\n }\n\n const compatibleConstructor = {\n ...constructor,\n proxy: {\n ...constructor.proxy,\n properties: Object.fromEntries(validProxyProps),\n },\n state: (constructor.state\n ? strict\n ? constructor.state\n : constructor.state.map((item) => ({\n // Make `expose` defaults to true in non-strict mode.\n expose: true,\n ...item,\n }))\n : []\n ).concat(legacyTplVariables.map((tpl) => ({ name: tpl, expose: true }))),\n };\n\n // Now we allow re-register custom template\n this.#registry.set(tagName, {\n ...compatibleConstructor,\n name: tagName,\n });\n\n const exposedStates = getExposedStates(compatibleConstructor.state);\n const proxyMethods = Object.entries(\n compatibleConstructor.proxy?.methods ?? {}\n );\n\n const props = exposedStates.concat(\n validProxyProps.map((entry) => entry[0])\n );\n const methods = proxyMethods.map((entry) => entry[0]);\n\n const nativeProps = props\n .concat(methods)\n .filter(\n (prop) => prop in HTMLElement.prototype && !allowedNativeProps.has(prop)\n );\n if (nativeProps.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Using native HTMLElement properties as template properties or methods\",\n tagName,\n ...nativeProps\n );\n // istanbul ignore next\n if (strict) {\n throw new Error(\n `In custom template \"${tagName}\", ${nativeProps\n .map((p) => `\"${p}\"`)\n .join(\n \", \"\n )} are native HTMLElement properties, and should be avoid to be used as brick properties or methods.`\n );\n }\n }\n\n if (registered) {\n return;\n }\n\n class TplElement extends HTMLElement {\n get $$typeof() {\n return \"custom-template\" as const;\n }\n\n static get _dev_only_definedProperties(): string[] {\n return props;\n }\n\n static get _dev_only_definedMethods(): string[] {\n return methods;\n }\n\n $$getElementByRef(this: RuntimeBrickElement, ref: string) {\n return this.$$tplStateStore?.hostBrick?.tplHostMetadata?.internalBricksByRef.get(\n ref\n )?.element;\n }\n\n connectedCallback() {\n let shadowRoot = this.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n const fragment = document.createDocumentFragment();\n const style = document.createElement(\"style\");\n style.textContent = \":host{display:block}:host([hidden]){display:none}\";\n const slot = document.createElement(\"slot\");\n fragment.appendChild(style);\n fragment.appendChild(slot);\n shadowRoot.appendChild(fragment);\n }\n\n disconnectedCallback() {\n if (this.shadowRoot) {\n this.shadowRoot.textContent = \"\";\n }\n }\n }\n\n for (const propName of exposedStates) {\n if (validProxyProps.some((entry) => entry[0] === propName)) {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot define an exposed state that is also a proxy property: \"${propName}\" in ${tagName}`\n );\n continue;\n }\n Object.defineProperty(TplElement.prototype, propName, {\n get(this: RuntimeBrickElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$$tplStateStore!.getValue(propName);\n },\n set(this: RuntimeBrickElement, value: unknown) {\n // 在 mount 过程中,先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n this.$$tplStateStore?.updateValue(propName, value, \"replace\");\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of validProxyProps) {\n Object.defineProperty(TplElement.prototype, from, {\n get(this: TplElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n unknown\n >;\n return element[to.refProperty ?? from];\n },\n set(this: TplElement, value: unknown) {\n // 同上 exposedState.set\n const element = this.$$getElementByRef?.(to.ref) as unknown as Record<\n string,\n unknown\n >;\n if (element) {\n element[to.refProperty ?? from] = value;\n }\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of proxyMethods) {\n Object.defineProperty(TplElement.prototype, from, {\n value(this: TplElement, ...args: unknown[]) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n Function\n >;\n element[to.refMethod ?? from](...args);\n },\n enumerable: true,\n });\n }\n\n customElements.define(tagName, TplElement);\n }\n\n get(tagName: string) {\n return this.#registry.get(tagName);\n }\n}\n\nfunction getExposedStates(state: ContextConf[] | undefined): string[] {\n // Allow duplicated state names which maybe mutually exclusive.\n return uniq(\n state?.filter((item) => item.expose).map((item) => item.name) ?? []\n );\n}\n\n// istanbul ignore next\nfunction getCustomTemplatesV2() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze({\n define(tagName: string, constructor: CustomTemplateConstructor) {\n return v2Kit.getRuntime().registerCustomTemplate(tagName, constructor);\n },\n }) as CustomTemplateRegistry;\n }\n}\n\n// istanbul ignore next\nexport const customTemplates =\n getCustomTemplatesV2() || new CustomTemplateRegistry();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CustomTemplates.js","names":["uniq","isStrictMode","warnAboutStrictMode","getV2RuntimeFromDll","allowedNativeProps","Set","_registry","WeakMap","CustomTemplateRegistry","constructor","_classPrivateFieldInitSpec","Map","define","tagName","_constructor$proxy","_compatibleConstructo","registered","_classPrivateFieldGet","has","console","warn","customElements","get","strict","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","value","Object","entries","asVariable","push","mergeProperty","refTransform","error","ref","compatibleConstructor","fromEntries","state","map","item","expose","concat","tpl","name","set","exposedStates","getExposedStates","proxyMethods","methods","props","entry","nativeProps","filter","prop","HTMLElement","prototype","length","Error","p","join","TplElement","$$typeof","_dev_only_definedProperties","_dev_only_definedMethods","$$getElementByRef","_this$$$tplStateStore","$$tplStateStore","hostBrick","tplHostMetadata","internalBricksByRef","element","connectedCallback","shadowRoot","attachShadow","mode","fragment","document","createDocumentFragment","style","createElement","textContent","slot","appendChild","disconnectedCallback","propName","some","defineProperty","getValue","_this$$$tplStateStore2","updateValue","enumerable","from","to","refProperty","_this$$$getElementByR","call","refMethod","arguments","getCustomTemplatesV2","v2Kit","freeze","getRuntime","registerCustomTemplate","customTemplates"],"sources":["../../src/CustomTemplates.ts"],"sourcesContent":["import type {\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateProxyBasicProperty,\n} from \"@next-core/types\";\nimport { uniq } from \"lodash\";\nimport type { RuntimeBrickElement } from \"./internal/interfaces.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"./isStrictMode.js\";\nimport { getV2RuntimeFromDll } from \"./getV2RuntimeFromDll.js\";\n\n// Note: `prefix` is a native prop on Element, but it's only used in XML documents.\nconst allowedNativeProps = new Set([\"prefix\"]);\n\ninterface LegacyTplPropProxy extends CustomTemplateProxyBasicProperty {\n asVariable?: boolean;\n mergeProperty?: unknown;\n refTransform?: unknown;\n}\n\nclass CustomTemplateRegistry {\n readonly #registry = new Map<string, CustomTemplate>();\n\n define(tagName: string, constructor: CustomTemplateConstructor): void {\n let registered = this.#registry.has(tagName);\n if (registered) {\n // When open launchpad, the storyboard will be updated.\n // However, we can't *undefine* a custom element.\n // Just ignore re-registering custom templates.\n // eslint-disable-next-line no-console\n console.warn(`Custom template of \"${tagName}\" already registered.`);\n } else {\n registered = !!customElements.get(tagName);\n if (registered) {\n // eslint-disable-next-line no-console\n console.warn(\n `Custom template of \"${tagName}\" already defined by customElements.`\n );\n }\n }\n\n // Transform legacy `proxy.properties[].asVariable` as states.\n const strict = isStrictMode();\n const proxyProperties = (constructor.proxy?.properties ?? {}) as {\n [name: string]: LegacyTplPropProxy;\n };\n const validProxyProps: [string, CustomTemplateProxyBasicProperty][] = [];\n const legacyTplVariables: string[] = [];\n for (const [key, value] of Object.entries(proxyProperties)) {\n if (value.asVariable) {\n warnAboutStrictMode(strict, \"Template `asVariable`\", tagName, key);\n // istanbul ignore next\n if (!strict) {\n // For existed TPL usage, treat it as a STATE.\n legacyTplVariables.push(key);\n }\n } else if (value.mergeProperty || value.refTransform) {\n // eslint-disable-next-line no-console\n console.error(\n \"Template `mergeProperty` and `refTransform` are dropped in v3:\",\n tagName,\n key\n );\n } else if (value.ref) {\n validProxyProps.push([key, value]);\n }\n // Else: documentation only, for exposed states.\n }\n\n const compatibleConstructor = {\n ...constructor,\n proxy: {\n ...constructor.proxy,\n properties: Object.fromEntries(validProxyProps),\n },\n state: (constructor.state\n ? strict\n ? constructor.state\n : constructor.state.map((item) => ({\n // Make `expose` defaults to true in non-strict mode.\n expose: true,\n ...item,\n }))\n : []\n ).concat(legacyTplVariables.map((tpl) => ({ name: tpl, expose: true }))),\n };\n\n // Now we allow re-register custom template\n this.#registry.set(tagName, {\n ...compatibleConstructor,\n name: tagName,\n });\n\n const exposedStates = getExposedStates(compatibleConstructor.state);\n const proxyMethods = Object.entries(\n compatibleConstructor.proxy?.methods ?? {}\n );\n\n const props = exposedStates.concat(\n validProxyProps.map((entry) => entry[0])\n );\n const methods = proxyMethods.map((entry) => entry[0]);\n\n const nativeProps = props\n .concat(methods)\n .filter(\n (prop) => prop in HTMLElement.prototype && !allowedNativeProps.has(prop)\n );\n if (nativeProps.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Using native HTMLElement properties as template properties or methods\",\n tagName,\n ...nativeProps\n );\n // istanbul ignore next\n if (strict) {\n throw new Error(\n `In custom template \"${tagName}\", ${nativeProps\n .map((p) => `\"${p}\"`)\n .join(\n \", \"\n )} are native HTMLElement properties, and should be avoid to be used as brick properties or methods.`\n );\n }\n }\n\n if (registered) {\n return;\n }\n\n class TplElement extends HTMLElement {\n get $$typeof() {\n return \"custom-template\" as const;\n }\n\n static get _dev_only_definedProperties(): string[] {\n return props;\n }\n\n static get _dev_only_definedMethods(): string[] {\n return methods;\n }\n\n $$getElementByRef(this: RuntimeBrickElement, ref: string) {\n return this.$$tplStateStore?.hostBrick?.tplHostMetadata?.internalBricksByRef.get(\n ref\n )?.element;\n }\n\n connectedCallback() {\n let shadowRoot = this.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n const fragment = document.createDocumentFragment();\n const style = document.createElement(\"style\");\n style.textContent = \":host{display:block}:host([hidden]){display:none}\";\n const slot = document.createElement(\"slot\");\n fragment.appendChild(style);\n fragment.appendChild(slot);\n shadowRoot.appendChild(fragment);\n }\n\n disconnectedCallback() {\n if (this.shadowRoot) {\n this.shadowRoot.textContent = \"\";\n }\n }\n }\n\n for (const propName of exposedStates) {\n if (validProxyProps.some((entry) => entry[0] === propName)) {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot define an exposed state that is also a proxy property: \"${propName}\" in ${tagName}`\n );\n continue;\n }\n Object.defineProperty(TplElement.prototype, propName, {\n get(this: RuntimeBrickElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$$tplStateStore!.getValue(propName);\n },\n set(this: RuntimeBrickElement, value: unknown) {\n // 在 mount 过程中,先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n this.$$tplStateStore?.updateValue(propName, value, \"replace\");\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of validProxyProps) {\n Object.defineProperty(TplElement.prototype, from, {\n get(this: TplElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n unknown\n >;\n return element[to.refProperty ?? from];\n },\n set(this: TplElement, value: unknown) {\n // 同上 exposedState.set\n const element = this.$$getElementByRef?.(to.ref) as unknown as Record<\n string,\n unknown\n >;\n if (element) {\n element[to.refProperty ?? from] = value;\n }\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of proxyMethods) {\n Object.defineProperty(TplElement.prototype, from, {\n value(this: TplElement, ...args: unknown[]) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n Function\n >;\n element[to.refMethod ?? from](...args);\n },\n enumerable: true,\n });\n }\n\n customElements.define(tagName, TplElement);\n }\n\n get(tagName: string) {\n return this.#registry.get(tagName);\n }\n}\n\nfunction getExposedStates(state: ContextConf[] | undefined): string[] {\n // Allow duplicated state names which maybe mutually exclusive.\n return uniq(\n state?.filter((item) => item.expose).map((item) => item.name) ?? []\n );\n}\n\n// istanbul ignore next\nfunction getCustomTemplatesV2() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze({\n define(tagName: string, constructor: CustomTemplateConstructor) {\n return v2Kit.getRuntime().registerCustomTemplate(tagName, constructor);\n },\n }) as CustomTemplateRegistry;\n }\n}\n\n// istanbul ignore next\nexport const customTemplates =\n getCustomTemplatesV2() || new CustomTemplateRegistry();\n"],"mappings":"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","ignoreList":[]}
|
package/dist/esm/Dialog.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
let brick;
|
|
2
2
|
function show(options) {
|
|
3
3
|
if (brick) {
|
|
4
4
|
return brick.resolve(options);
|
|
5
5
|
} else {
|
|
6
6
|
if (options.type === "confirm") {
|
|
7
|
-
|
|
7
|
+
const confirmed = confirm(options.content);
|
|
8
8
|
return new Promise((resolve, reject) => setTimeout(() => {
|
|
9
9
|
(confirmed ? resolve : reject)();
|
|
10
10
|
}, 1));
|
|
@@ -24,7 +24,7 @@ export function loadDialogService(tagName, loader) {
|
|
|
24
24
|
console.error("Load dialog service failed:", error);
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
export
|
|
27
|
+
export const Dialog = Object.freeze({
|
|
28
28
|
show
|
|
29
29
|
});
|
|
30
30
|
//# sourceMappingURL=Dialog.js.map
|
package/dist/esm/Dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","names":["brick","show","options","resolve","type","confirmed","confirm","content","Promise","reject","setTimeout","alert","loadDialogService","tagName","loader","then","document","createElement","error","console","Dialog","Object","freeze"],"sources":["../../src/Dialog.ts"],"sourcesContent":["let brick: {\n resolve(options: DialogOptions): Promise<void>;\n};\n\nfunction show(options: DialogOptions): Promise<void> {\n if (brick) {\n return brick.resolve(options);\n } else {\n if (options.type === \"confirm\") {\n const confirmed = confirm(options.content);\n return new Promise((resolve, reject) =>\n setTimeout(() => {\n (confirmed ? resolve : reject)();\n }, 1)\n );\n } else {\n alert(options.content);\n return new Promise((resolve) =>\n setTimeout(() => {\n resolve();\n }, 1)\n );\n }\n }\n}\n\nexport function loadDialogService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load dialog service failed:\", error);\n }\n );\n}\n\nexport interface DialogOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\" | \"confirm\";\n title?: string | null;\n content: string;\n contentStyle?: object;\n}\n\nexport const Dialog = Object.freeze({\n show,\n});\n"],"mappings":"AAAA,IAAIA,KAEH;AAED,SAASC,IAAIA,CAACC,OAAsB,EAAiB;EACnD,IAAIF,KAAK,EAAE;IACT,OAAOA,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;EAC/B,CAAC,MAAM;IACL,IAAIA,OAAO,CAACE,IAAI,KAAK,SAAS,EAAE;MAC9B,
|
|
1
|
+
{"version":3,"file":"Dialog.js","names":["brick","show","options","resolve","type","confirmed","confirm","content","Promise","reject","setTimeout","alert","loadDialogService","tagName","loader","then","document","createElement","error","console","Dialog","Object","freeze"],"sources":["../../src/Dialog.ts"],"sourcesContent":["let brick: {\n resolve(options: DialogOptions): Promise<void>;\n};\n\nfunction show(options: DialogOptions): Promise<void> {\n if (brick) {\n return brick.resolve(options);\n } else {\n if (options.type === \"confirm\") {\n const confirmed = confirm(options.content);\n return new Promise((resolve, reject) =>\n setTimeout(() => {\n (confirmed ? resolve : reject)();\n }, 1)\n );\n } else {\n alert(options.content);\n return new Promise((resolve) =>\n setTimeout(() => {\n resolve();\n }, 1)\n );\n }\n }\n}\n\nexport function loadDialogService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load dialog service failed:\", error);\n }\n );\n}\n\nexport interface DialogOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\" | \"confirm\";\n title?: string | null;\n content: string;\n contentStyle?: object;\n}\n\nexport const Dialog = Object.freeze({\n show,\n});\n"],"mappings":"AAAA,IAAIA,KAEH;AAED,SAASC,IAAIA,CAACC,OAAsB,EAAiB;EACnD,IAAIF,KAAK,EAAE;IACT,OAAOA,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;EAC/B,CAAC,MAAM;IACL,IAAIA,OAAO,CAACE,IAAI,KAAK,SAAS,EAAE;MAC9B,MAAMC,SAAS,GAAGC,OAAO,CAACJ,OAAO,CAACK,OAAO,CAAC;MAC1C,OAAO,IAAIC,OAAO,CAAC,CAACL,OAAO,EAAEM,MAAM,KACjCC,UAAU,CAAC,MAAM;QACf,CAACL,SAAS,GAAGF,OAAO,GAAGM,MAAM,EAAE,CAAC;MAClC,CAAC,EAAE,CAAC,CACN,CAAC;IACH,CAAC,MAAM;MACLE,KAAK,CAACT,OAAO,CAACK,OAAO,CAAC;MACtB,OAAO,IAAIC,OAAO,CAAEL,OAAO,IACzBO,UAAU,CAAC,MAAM;QACfP,OAAO,CAAC,CAAC;MACX,CAAC,EAAE,CAAC,CACN,CAAC;IACH;EACF;AACF;AAEA,OAAO,SAASS,iBAAiBA,CAC/BC,OAAe,EACfC,MAA2C,EAC3C;EACAA,MAAM,CAAC,CAACD,OAAO,CAAC,CAAC,CAACE,IAAI,CACpB,MAAM;IACJf,KAAK,GAAGgB,QAAQ,CAACC,aAAa,CAACJ,OAAO,CAAQ;EAChD,CAAC,EACAK,KAAc,IAAK;IAClB;IACAC,OAAO,CAACD,KAAK,CAAC,6BAA6B,EAAEA,KAAK,CAAC;EACrD,CACF,CAAC;AACH;AASA,OAAO,MAAME,MAAM,GAAGC,MAAM,CAACC,MAAM,CAAC;EAClCrB;AACF,CAAC,CAAC","ignoreList":[]}
|
package/dist/esm/Notification.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
let brick;
|
|
2
2
|
function show(options) {
|
|
3
3
|
if (brick) {
|
|
4
4
|
brick.resolve(options);
|
|
@@ -14,7 +14,7 @@ export function loadNotificationService(tagName, loader) {
|
|
|
14
14
|
console.error("Load notification service failed:", error);
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
export
|
|
17
|
+
export const Notification = Object.freeze({
|
|
18
18
|
show
|
|
19
19
|
});
|
|
20
20
|
//# sourceMappingURL=Notification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notification.js","names":["brick","show","options","resolve","alert","message","loadNotificationService","tagName","loader","then","document","createElement","error","console","Notification","Object","freeze"],"sources":["../../src/Notification.ts"],"sourcesContent":["let brick: {\n resolve(options: NotificationOptions): void;\n};\n\nfunction show(options: NotificationOptions) {\n if (brick) {\n brick.resolve(options);\n } else {\n alert(options.message);\n }\n}\n\nexport function loadNotificationService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load notification service failed:\", error);\n }\n );\n}\n\nexport interface NotificationOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\";\n message: string;\n}\n\nexport const Notification = Object.freeze({\n show,\n});\n"],"mappings":"AAAA,IAAIA,KAEH;AAED,SAASC,IAAIA,CAACC,OAA4B,EAAE;EAC1C,IAAIF,KAAK,EAAE;IACTA,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;EACxB,CAAC,MAAM;IACLE,KAAK,CAACF,OAAO,CAACG,OAAO,CAAC;EACxB;AACF;AAEA,OAAO,SAASC,uBAAuBA,CACrCC,OAAe,EACfC,MAA2C,EAC3C;EACAA,MAAM,CAAC,CAACD,OAAO,CAAC,CAAC,CAACE,IAAI,CACpB,MAAM;IACJT,KAAK,GAAGU,QAAQ,CAACC,aAAa,CAACJ,OAAO,CAAQ;EAChD,CAAC,EACAK,KAAc,IAAK;IAClB;IACAC,OAAO,CAACD,KAAK,CAAC,mCAAmC,EAAEA,KAAK,CAAC;EAC3D,CACF,CAAC;AACH;AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"Notification.js","names":["brick","show","options","resolve","alert","message","loadNotificationService","tagName","loader","then","document","createElement","error","console","Notification","Object","freeze"],"sources":["../../src/Notification.ts"],"sourcesContent":["let brick: {\n resolve(options: NotificationOptions): void;\n};\n\nfunction show(options: NotificationOptions) {\n if (brick) {\n brick.resolve(options);\n } else {\n alert(options.message);\n }\n}\n\nexport function loadNotificationService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load notification service failed:\", error);\n }\n );\n}\n\nexport interface NotificationOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\";\n message: string;\n}\n\nexport const Notification = Object.freeze({\n show,\n});\n"],"mappings":"AAAA,IAAIA,KAEH;AAED,SAASC,IAAIA,CAACC,OAA4B,EAAE;EAC1C,IAAIF,KAAK,EAAE;IACTA,KAAK,CAACG,OAAO,CAACD,OAAO,CAAC;EACxB,CAAC,MAAM;IACLE,KAAK,CAACF,OAAO,CAACG,OAAO,CAAC;EACxB;AACF;AAEA,OAAO,SAASC,uBAAuBA,CACrCC,OAAe,EACfC,MAA2C,EAC3C;EACAA,MAAM,CAAC,CAACD,OAAO,CAAC,CAAC,CAACE,IAAI,CACpB,MAAM;IACJT,KAAK,GAAGU,QAAQ,CAACC,aAAa,CAACJ,OAAO,CAAQ;EAChD,CAAC,EACAK,KAAc,IAAK;IAClB;IACAC,OAAO,CAACD,KAAK,CAAC,mCAAmC,EAAEA,KAAK,CAAC;EAC3D,CACF,CAAC;AACH;AAOA,OAAO,MAAME,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC;EACxCf;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
1
|
import { cook, precookFunction } from "@next-core/cook";
|
|
3
2
|
import { supply } from "@next-core/supply";
|
|
4
3
|
import { collectMemberUsageInFunction } from "@next-core/utils/storyboard";
|
|
@@ -20,29 +19,29 @@ import { getGeneralGlobals } from "./internal/compute/getGeneralGlobals.js";
|
|
|
20
19
|
|
|
21
20
|
/** @internal */
|
|
22
21
|
export function StoryboardFunctionRegistryFactory() {
|
|
23
|
-
|
|
22
|
+
let {
|
|
24
23
|
widgetId,
|
|
25
24
|
widgetVersion,
|
|
26
25
|
collectCoverage
|
|
27
26
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
28
|
-
|
|
27
|
+
const registeredFunctions = new Map();
|
|
29
28
|
|
|
30
29
|
// Use `Proxy` with a frozen target, to make a readonly function registry.
|
|
31
|
-
|
|
30
|
+
const storyboardFunctions = new Proxy(Object.freeze({}), {
|
|
32
31
|
get(target, key) {
|
|
33
32
|
return getStoryboardFunction(key);
|
|
34
33
|
}
|
|
35
34
|
});
|
|
36
|
-
|
|
35
|
+
let currentApp;
|
|
37
36
|
function registerStoryboardFunctions(functions, app) {
|
|
38
37
|
if (app) {
|
|
39
38
|
currentApp = app;
|
|
40
39
|
}
|
|
41
40
|
registeredFunctions.clear();
|
|
42
41
|
if (Array.isArray(functions)) {
|
|
43
|
-
for (
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
for (const fn of functions) {
|
|
43
|
+
const deps = collectMemberUsageInFunction(fn, "FN", !!collectCoverage);
|
|
44
|
+
const hasPermissionsCheck = collectMemberUsageInFunction(fn, "PERMISSIONS", !!collectCoverage).has("check");
|
|
46
45
|
registeredFunctions.set(fn.name, {
|
|
47
46
|
source: fn.source,
|
|
48
47
|
typescript: fn.typescript,
|
|
@@ -53,18 +52,18 @@ export function StoryboardFunctionRegistryFactory() {
|
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
function getStoryboardFunction(name) {
|
|
56
|
-
|
|
55
|
+
const fn = registeredFunctions.get(name);
|
|
57
56
|
if (!fn) {
|
|
58
57
|
return undefined;
|
|
59
58
|
}
|
|
60
59
|
if (fn.processed) {
|
|
61
60
|
return fn.cooked;
|
|
62
61
|
}
|
|
63
|
-
|
|
62
|
+
let collector;
|
|
64
63
|
if (collectCoverage) {
|
|
65
64
|
collector = collectCoverage.createCollector(name);
|
|
66
65
|
}
|
|
67
|
-
|
|
66
|
+
const precooked = precookFunction(fn.source, {
|
|
68
67
|
typescript: fn.typescript,
|
|
69
68
|
hooks: collector && {
|
|
70
69
|
beforeVisit: collector.beforeVisit
|
|
@@ -95,11 +94,12 @@ export function StoryboardFunctionRegistryFactory() {
|
|
|
95
94
|
storyboardFunctions,
|
|
96
95
|
registerStoryboardFunctions,
|
|
97
96
|
updateStoryboardFunction(name, data) {
|
|
98
|
-
|
|
97
|
+
const newFn = {
|
|
98
|
+
...data,
|
|
99
99
|
name
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
};
|
|
101
|
+
const deps = collectMemberUsageInFunction(newFn, "FN", true);
|
|
102
|
+
const hasPermissionsCheck = collectMemberUsageInFunction(newFn, "PERMISSIONS", true).has("check");
|
|
103
103
|
registeredFunctions.set(name, {
|
|
104
104
|
source: data.source,
|
|
105
105
|
typescript: data.typescript,
|
|
@@ -112,11 +112,11 @@ export function StoryboardFunctionRegistryFactory() {
|
|
|
112
112
|
* includes in nested `FN.*()` calls.
|
|
113
113
|
*/
|
|
114
114
|
checkPermissionsUsage(functionNames) {
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
const checkedFunctions = new Set();
|
|
116
|
+
const hasPermissionsCheck = name => {
|
|
117
117
|
if (!checkedFunctions.has(name)) {
|
|
118
118
|
checkedFunctions.add(name);
|
|
119
|
-
|
|
119
|
+
const fn = registeredFunctions.get(name);
|
|
120
120
|
return !!fn && (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck));
|
|
121
121
|
}
|
|
122
122
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["cook","precookFunction","supply","collectMemberUsageInFunction","getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","arguments","length","undefined","registeredFunctions","Map","storyboardFunctions","Proxy","Object","freeze","get","target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","hasPermissionsCheck","has","set","name","source","typescript","processed","cooked","collector","createCollector","precooked","hooks","beforeVisit","function","rules","noVar","globalVariables","attemptToVisitGlobals","isStoryboardFunction","beforeEvaluate","beforeCall","beforeBranch","updateStoryboardFunction","data","newFn","
|
|
1
|
+
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["cook","precookFunction","supply","collectMemberUsageInFunction","getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","arguments","length","undefined","registeredFunctions","Map","storyboardFunctions","Proxy","Object","freeze","get","target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","hasPermissionsCheck","has","set","name","source","typescript","processed","cooked","collector","createCollector","precooked","hooks","beforeVisit","function","rules","noVar","globalVariables","attemptToVisitGlobals","isStoryboardFunction","beforeEvaluate","beforeCall","beforeBranch","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type { MicroApp, StoryboardFunction } from \"@next-core/types\";\nimport { cook, precookFunction, EstreeNode } from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string>;\n hasPermissionsCheck: boolean;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[],\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n const deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n });\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: supply(\n precooked.attemptToVisitGlobals,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n ),\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n }) as Function;\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|