@next-core/runtime 1.44.2 → 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.
Files changed (218) hide show
  1. package/dist/cjs/CustomProcessors.js.map +1 -1
  2. package/dist/cjs/CustomTemplates.js +7 -11
  3. package/dist/cjs/CustomTemplates.js.map +1 -1
  4. package/dist/cjs/createRoot.js +4 -4
  5. package/dist/cjs/createRoot.js.map +1 -1
  6. package/dist/cjs/getPageInfo.js.map +1 -1
  7. package/dist/cjs/handleHttpError.js.map +1 -1
  8. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +4 -5
  9. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  10. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +4 -7
  11. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  12. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +21 -24
  13. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
  14. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js +4 -7
  15. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
  16. package/dist/cjs/internal/CustomTemplates/utils.js +3 -3
  17. package/dist/cjs/internal/CustomTemplates/utils.js.map +1 -1
  18. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +3 -3
  19. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
  20. package/dist/cjs/internal/FormRenderer/utils.js +2 -2
  21. package/dist/cjs/internal/FormRenderer/utils.js.map +1 -1
  22. package/dist/cjs/internal/Renderer.js +8 -14
  23. package/dist/cjs/internal/Renderer.js.map +1 -1
  24. package/dist/cjs/internal/RendererContext.js +8 -10
  25. package/dist/cjs/internal/RendererContext.js.map +1 -1
  26. package/dist/cjs/internal/Router.js.map +1 -1
  27. package/dist/cjs/internal/Runtime.js +14 -14
  28. package/dist/cjs/internal/Runtime.js.map +1 -1
  29. package/dist/cjs/internal/bindListeners.js +2 -3
  30. package/dist/cjs/internal/bindListeners.js.map +1 -1
  31. package/dist/cjs/internal/compute/WidgetFunctions.js.map +1 -1
  32. package/dist/cjs/internal/compute/evaluate.js +4 -4
  33. package/dist/cjs/internal/compute/evaluate.js.map +1 -1
  34. package/dist/cjs/internal/compute/getGeneralGlobals.js.map +1 -1
  35. package/dist/cjs/internal/compute/getStorageItem.js +1 -2
  36. package/dist/cjs/internal/compute/getStorageItem.js.map +1 -1
  37. package/dist/cjs/internal/compute/listenOnTrackingContext.js.map +1 -1
  38. package/dist/cjs/internal/compute/setRealProperties.js.map +1 -1
  39. package/dist/cjs/internal/data/DataStore.js.map +1 -1
  40. package/dist/cjs/internal/data/getProviderBrick.js.map +1 -1
  41. package/dist/cjs/internal/data/realTimeDataInspect.js.map +1 -1
  42. package/dist/cjs/internal/data/resolveData.js.map +1 -1
  43. package/dist/cjs/internal/data/resolveDataStore.js +2 -4
  44. package/dist/cjs/internal/data/resolveDataStore.js.map +1 -1
  45. package/dist/cjs/internal/hasInstalledApp.js.map +1 -1
  46. package/dist/cjs/internal/historyExtended.js.map +1 -1
  47. package/dist/cjs/internal/matchPath.js.map +1 -1
  48. package/dist/cjs/internal/matchRoutes.js.map +1 -1
  49. package/dist/cjs/internal/matchStoryboard.js +2 -2
  50. package/dist/cjs/internal/matchStoryboard.js.map +1 -1
  51. package/dist/cjs/internal/mediaQuery.js.map +1 -1
  52. package/dist/cjs/internal/mount.js.map +1 -1
  53. package/dist/cjs/internal/poll.js +3 -3
  54. package/dist/cjs/internal/poll.js.map +1 -1
  55. package/dist/cjs/internal/registerAppI18n.js.map +1 -1
  56. package/dist/cjs/internal/registerCustomTemplates.js.map +1 -1
  57. package/dist/cjs/internal/secret_internals.js +4 -4
  58. package/dist/cjs/internal/secret_internals.js.map +1 -1
  59. package/dist/cjs/internal/setupRootRuntimeContext.js +2 -3
  60. package/dist/cjs/internal/setupRootRuntimeContext.js.map +1 -1
  61. package/dist/cjs/isStrictMode.js.map +1 -1
  62. package/dist/cjs/setLoginStateCookie.js.map +1 -1
  63. package/dist/cjs/setWatermark.js +4 -4
  64. package/dist/cjs/setWatermark.js.map +1 -1
  65. package/dist/cjs/themeAndMode.js +1 -2
  66. package/dist/cjs/themeAndMode.js.map +1 -1
  67. package/dist/esm/CustomProcessors.js +5 -5
  68. package/dist/esm/CustomProcessors.js.map +1 -1
  69. package/dist/esm/CustomTemplates.js +48 -58
  70. package/dist/esm/CustomTemplates.js.map +1 -1
  71. package/dist/esm/Dialog.js +3 -3
  72. package/dist/esm/Dialog.js.map +1 -1
  73. package/dist/esm/Notification.js +2 -2
  74. package/dist/esm/Notification.js.map +1 -1
  75. package/dist/esm/StoryboardFunctionRegistry.js +18 -18
  76. package/dist/esm/StoryboardFunctionRegistry.js.map +1 -1
  77. package/dist/esm/createRoot.js +125 -129
  78. package/dist/esm/createRoot.js.map +1 -1
  79. package/dist/esm/fetchByProvider.js +3 -10
  80. package/dist/esm/fetchByProvider.js.map +1 -1
  81. package/dist/esm/getBasePath.js +2 -2
  82. package/dist/esm/getBasePath.js.map +1 -1
  83. package/dist/esm/getPageInfo.js +5 -5
  84. package/dist/esm/getPageInfo.js.map +1 -1
  85. package/dist/esm/getRealValue.js +7 -6
  86. package/dist/esm/getRealValue.js.map +1 -1
  87. package/dist/esm/getV2RuntimeFromDll.js +1 -1
  88. package/dist/esm/getV2RuntimeFromDll.js.map +1 -1
  89. package/dist/esm/handleHttpError.js +11 -11
  90. package/dist/esm/handleHttpError.js.map +1 -1
  91. package/dist/esm/history.js +4 -4
  92. package/dist/esm/history.js.map +1 -1
  93. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js +13 -17
  94. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  95. package/dist/esm/internal/CustomTemplates/constants.js +5 -5
  96. package/dist/esm/internal/CustomTemplates/constants.js.map +1 -1
  97. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +41 -42
  98. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  99. package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js +43 -46
  100. package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
  101. package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js +16 -18
  102. package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
  103. package/dist/esm/internal/CustomTemplates/utils.js +8 -8
  104. package/dist/esm/internal/CustomTemplates/utils.js.map +1 -1
  105. package/dist/esm/internal/FormRenderer/constants.js +2 -2
  106. package/dist/esm/internal/FormRenderer/constants.js.map +1 -1
  107. package/dist/esm/internal/FormRenderer/expandFormRenderer.js +28 -23
  108. package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -1
  109. package/dist/esm/internal/FormRenderer/getDefaultProperties.js +45 -22
  110. package/dist/esm/internal/FormRenderer/getDefaultProperties.js.map +1 -1
  111. package/dist/esm/internal/FormRenderer/utils.js +4 -4
  112. package/dist/esm/internal/FormRenderer/utils.js.map +1 -1
  113. package/dist/esm/internal/Renderer.js +517 -580
  114. package/dist/esm/internal/Renderer.js.map +1 -1
  115. package/dist/esm/internal/RendererContext.js +132 -148
  116. package/dist/esm/internal/RendererContext.js.map +1 -1
  117. package/dist/esm/internal/Router.js +325 -346
  118. package/dist/esm/internal/Router.js.map +1 -1
  119. package/dist/esm/internal/Runtime.js +53 -51
  120. package/dist/esm/internal/Runtime.js.map +1 -1
  121. package/dist/esm/internal/abortController.js +7 -6
  122. package/dist/esm/internal/abortController.js.map +1 -1
  123. package/dist/esm/internal/bindListeners.js +136 -156
  124. package/dist/esm/internal/bindListeners.js.map +1 -1
  125. package/dist/esm/internal/compute/StoryboardFunctions.js +1 -1
  126. package/dist/esm/internal/compute/StoryboardFunctions.js.map +1 -1
  127. package/dist/esm/internal/compute/WidgetFunctions.js +6 -6
  128. package/dist/esm/internal/compute/WidgetFunctions.js.map +1 -1
  129. package/dist/esm/internal/compute/WidgetI18n.js +4 -4
  130. package/dist/esm/internal/compute/WidgetI18n.js.map +1 -1
  131. package/dist/esm/internal/compute/checkIf.js +10 -23
  132. package/dist/esm/internal/compute/checkIf.js.map +1 -1
  133. package/dist/esm/internal/compute/computeRealProperties.js +22 -35
  134. package/dist/esm/internal/compute/computeRealProperties.js.map +1 -1
  135. package/dist/esm/internal/compute/computeRealValue.js +42 -49
  136. package/dist/esm/internal/compute/computeRealValue.js.map +1 -1
  137. package/dist/esm/internal/compute/evaluate.js +71 -75
  138. package/dist/esm/internal/compute/evaluate.js.map +1 -1
  139. package/dist/esm/internal/compute/getGeneralGlobals.js +5 -5
  140. package/dist/esm/internal/compute/getGeneralGlobals.js.map +1 -1
  141. package/dist/esm/internal/compute/getNextStateOfUseBrick.js +1 -1
  142. package/dist/esm/internal/compute/getStorageItem.js +2 -3
  143. package/dist/esm/internal/compute/getStorageItem.js.map +1 -1
  144. package/dist/esm/internal/compute/getTracks.js +5 -5
  145. package/dist/esm/internal/compute/getTracks.js.map +1 -1
  146. package/dist/esm/internal/compute/listenOnTrackingContext.js +8 -11
  147. package/dist/esm/internal/compute/listenOnTrackingContext.js.map +1 -1
  148. package/dist/esm/internal/compute/markAsComputed.js +2 -2
  149. package/dist/esm/internal/compute/markAsComputed.js.map +1 -1
  150. package/dist/esm/internal/compute/setProperties.js +1 -1
  151. package/dist/esm/internal/compute/setProperties.js.map +1 -1
  152. package/dist/esm/internal/compute/setRealProperties.js +3 -3
  153. package/dist/esm/internal/compute/setRealProperties.js.map +1 -1
  154. package/dist/esm/internal/customizeColorTheme.js +15 -13
  155. package/dist/esm/internal/customizeColorTheme.js.map +1 -1
  156. package/dist/esm/internal/data/DataStore.js +161 -177
  157. package/dist/esm/internal/data/DataStore.js.map +1 -1
  158. package/dist/esm/internal/data/getProviderBrick.js +21 -28
  159. package/dist/esm/internal/data/getProviderBrick.js.map +1 -1
  160. package/dist/esm/internal/data/realTimeDataInspect.js +5 -5
  161. package/dist/esm/internal/data/realTimeDataInspect.js.map +1 -1
  162. package/dist/esm/internal/data/resolveData.js +89 -103
  163. package/dist/esm/internal/data/resolveData.js.map +1 -1
  164. package/dist/esm/internal/data/resolveDataStore.js +53 -67
  165. package/dist/esm/internal/data/resolveDataStore.js.map +1 -1
  166. package/dist/esm/internal/devtools.js +9 -9
  167. package/dist/esm/internal/devtools.js.map +1 -1
  168. package/dist/esm/internal/enums.js +1 -1
  169. package/dist/esm/internal/fulfilStoryboard.js +15 -28
  170. package/dist/esm/internal/fulfilStoryboard.js.map +1 -1
  171. package/dist/esm/internal/hasInstalledApp.js +3 -3
  172. package/dist/esm/internal/hasInstalledApp.js.map +1 -1
  173. package/dist/esm/internal/historyExtended.js +40 -37
  174. package/dist/esm/internal/historyExtended.js.map +1 -1
  175. package/dist/esm/internal/i18n.js +5 -5
  176. package/dist/esm/internal/i18n.js.map +1 -1
  177. package/dist/esm/internal/injected.js +1 -1
  178. package/dist/esm/internal/injected.js.map +1 -1
  179. package/dist/esm/internal/insertPreviewRoutes.js +3 -3
  180. package/dist/esm/internal/insertPreviewRoutes.js.map +1 -1
  181. package/dist/esm/internal/matchPath.js +17 -17
  182. package/dist/esm/internal/matchPath.js.map +1 -1
  183. package/dist/esm/internal/matchRoutes.js +18 -25
  184. package/dist/esm/internal/matchRoutes.js.map +1 -1
  185. package/dist/esm/internal/matchStoryboard.js +6 -6
  186. package/dist/esm/internal/matchStoryboard.js.map +1 -1
  187. package/dist/esm/internal/mediaQuery.js +11 -11
  188. package/dist/esm/internal/mediaQuery.js.map +1 -1
  189. package/dist/esm/internal/mount.js +7 -7
  190. package/dist/esm/internal/mount.js.map +1 -1
  191. package/dist/esm/internal/poll.js +53 -60
  192. package/dist/esm/internal/poll.js.map +1 -1
  193. package/dist/esm/internal/proxyFactories.js +4 -4
  194. package/dist/esm/internal/proxyFactories.js.map +1 -1
  195. package/dist/esm/internal/registerAppI18n.js +6 -6
  196. package/dist/esm/internal/registerAppI18n.js.map +1 -1
  197. package/dist/esm/internal/registerCustomTemplates.js +3 -3
  198. package/dist/esm/internal/registerCustomTemplates.js.map +1 -1
  199. package/dist/esm/internal/secret_internals.js +140 -146
  200. package/dist/esm/internal/secret_internals.js.map +1 -1
  201. package/dist/esm/internal/setupRootRuntimeContext.js +6 -7
  202. package/dist/esm/internal/setupRootRuntimeContext.js.map +1 -1
  203. package/dist/esm/internal/sse.js +24 -53
  204. package/dist/esm/internal/sse.js.map +1 -1
  205. package/dist/esm/internal/test_only.js +1 -1
  206. package/dist/esm/isStrictMode.js +3 -3
  207. package/dist/esm/isStrictMode.js.map +1 -1
  208. package/dist/esm/setAppVariable.js +1 -1
  209. package/dist/esm/setAppVariable.js.map +1 -1
  210. package/dist/esm/setLoginStateCookie.js +5 -5
  211. package/dist/esm/setLoginStateCookie.js.map +1 -1
  212. package/dist/esm/setUIVersion.js +1 -1
  213. package/dist/esm/setWatermark.js +13 -13
  214. package/dist/esm/setWatermark.js.map +1 -1
  215. package/dist/esm/themeAndMode.js +14 -13
  216. package/dist/esm/themeAndMode.js.map +1 -1
  217. package/dist/types/tsdoc-metadata.json +1 -1
  218. 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
- var allowedNativeProps = new Set(["prefix"]);
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$pr, _constructor$proxy, _compatibleConstructo, _compatibleConstructo2;
17
- var registered = _classPrivateFieldGet(_registry, this).has(tagName);
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("Custom template of \"".concat(tagName, "\" already registered."));
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("Custom template of \"".concat(tagName, "\" already defined by customElements."));
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
- var strict = isStrictMode();
34
- var proxyProperties = (_constructor$proxy$pr = (_constructor$proxy = constructor.proxy) === null || _constructor$proxy === void 0 ? void 0 : _constructor$proxy.properties) !== null && _constructor$proxy$pr !== void 0 ? _constructor$proxy$pr : {};
35
- var validProxyProps = [];
36
- var legacyTplVariables = [];
37
- for (var [key, value] of Object.entries(proxyProperties)) {
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
- var compatibleConstructor = _objectSpread(_objectSpread({}, constructor), {}, {
54
- proxy: _objectSpread(_objectSpread({}, constructor.proxy), {}, {
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 => _objectSpread({
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
- }, item)) : []).concat(legacyTplVariables.map(tpl => ({
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, _objectSpread(_objectSpread({}, compatibleConstructor), {}, {
69
+ _classPrivateFieldGet(_registry, this).set(tagName, {
70
+ ...compatibleConstructor,
68
71
  name: tagName
69
- }));
70
- var exposedStates = getExposedStates(compatibleConstructor.state);
71
- var proxyMethods = Object.entries((_compatibleConstructo = (_compatibleConstructo2 = compatibleConstructor.proxy) === null || _compatibleConstructo2 === void 0 ? void 0 : _compatibleConstructo2.methods) !== null && _compatibleConstructo !== void 0 ? _compatibleConstructo : {});
72
- var props = exposedStates.concat(validProxyProps.map(entry => entry[0]));
73
- var methods = proxyMethods.map(entry => entry[0]);
74
- var nativeProps = props.concat(methods).filter(prop => prop in HTMLElement.prototype && !allowedNativeProps.has(prop));
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("In custom template \"".concat(tagName, "\", ").concat(nativeProps.map(p => "\"".concat(p, "\"")).join(", "), " are native HTMLElement properties, and should be avoid to be used as brick properties or methods."));
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
- var shadowRoot = this.shadowRoot;
103
+ let shadowRoot = this.shadowRoot;
101
104
  if (!shadowRoot) {
102
105
  shadowRoot = this.attachShadow({
103
106
  mode: "open"
104
107
  });
105
108
  }
106
- var fragment = document.createDocumentFragment();
107
- var style = document.createElement("style");
109
+ const fragment = document.createDocumentFragment();
110
+ const style = document.createElement("style");
108
111
  style.textContent = ":host{display:block}:host([hidden]){display:none}";
109
- var slot = document.createElement("slot");
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
- var _loop = function (propName) {
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("Cannot define an exposed state that is also a proxy property: \"".concat(propName, "\" in ").concat(tagName));
124
- return 1; // continue
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
- var _loop2 = function (from, to) {
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
- var element = this.$$getElementByRef(to.ref);
149
- return element[(_to$refProperty = to.refProperty) !== null && _to$refProperty !== void 0 ? _to$refProperty : from];
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
- var element = (_this$$$getElementByR = this.$$getElementByRef) === null || _this$$$getElementByR === void 0 ? void 0 : _this$$$getElementByR.call(this, to.ref);
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
- var _to$refProperty2;
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
- var _loop3 = function (_from, _to) {
167
- Object.defineProperty(TplElement.prototype, _from, {
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
- var element = this.$$getElementByRef(_to.ref);
172
- element[(_to$refMethod = _to.refMethod) !== null && _to$refMethod !== void 0 ? _to$refMethod : _from](...arguments);
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((_state$filter$map = state === null || state === void 0 ? void 0 : state.filter(item => item.expose).map(item => item.name)) !== null && _state$filter$map !== void 0 ? _state$filter$map : []);
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
- var v2Kit = getV2RuntimeFromDll();
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 var customTemplates = getCustomTemplatesV2() || new CustomTemplateRegistry();
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":[]}
@@ -1,10 +1,10 @@
1
- var brick;
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
- var confirmed = confirm(options.content);
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 var Dialog = Object.freeze({
27
+ export const Dialog = Object.freeze({
28
28
  show
29
29
  });
30
30
  //# sourceMappingURL=Dialog.js.map
@@ -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,IAAMC,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,IAAME,MAAM,GAAGC,MAAM,CAACC,MAAM,CAAC;EAClCrB;AACF,CAAC,CAAC","ignoreList":[]}
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":[]}
@@ -1,4 +1,4 @@
1
- var brick;
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 var Notification = Object.freeze({
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,IAAME,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC;EACxCf;AACF,CAAC,CAAC","ignoreList":[]}
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
- var {
22
+ let {
24
23
  widgetId,
25
24
  widgetVersion,
26
25
  collectCoverage
27
26
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28
- var registeredFunctions = new Map();
27
+ const registeredFunctions = new Map();
29
28
 
30
29
  // Use `Proxy` with a frozen target, to make a readonly function registry.
31
- var storyboardFunctions = new Proxy(Object.freeze({}), {
30
+ const storyboardFunctions = new Proxy(Object.freeze({}), {
32
31
  get(target, key) {
33
32
  return getStoryboardFunction(key);
34
33
  }
35
34
  });
36
- var currentApp;
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 (var fn of functions) {
44
- var deps = collectMemberUsageInFunction(fn, "FN", !!collectCoverage);
45
- var hasPermissionsCheck = collectMemberUsageInFunction(fn, "PERMISSIONS", !!collectCoverage).has("check");
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
- var fn = registeredFunctions.get(name);
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
- var collector;
62
+ let collector;
64
63
  if (collectCoverage) {
65
64
  collector = collectCoverage.createCollector(name);
66
65
  }
67
- var precooked = precookFunction(fn.source, {
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
- var newFn = _objectSpread(_objectSpread({}, data), {}, {
97
+ const newFn = {
98
+ ...data,
99
99
  name
100
- });
101
- var deps = collectMemberUsageInFunction(newFn, "FN", true);
102
- var hasPermissionsCheck = collectMemberUsageInFunction(newFn, "PERMISSIONS", true).has("check");
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
- var checkedFunctions = new Set();
116
- var hasPermissionsCheck = name => {
115
+ const checkedFunctions = new Set();
116
+ const hasPermissionsCheck = name => {
117
117
  if (!checkedFunctions.has(name)) {
118
118
  checkedFunctions.add(name);
119
- var fn = registeredFunctions.get(name);
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","_objectSpread","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":";AACA,SAASA,IAAI,EAAEC,eAAe,QAAoB,iBAAiB;AACnE,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,4BAA4B,QAAQ,6BAA6B;AAC1E,SAASC,iBAAiB,QAAQ,yCAAyC;;AAE3E;;AAGA;;AAMA;;AAiBA;;AAUA;;AAQA;;AAKA;;AAGA;AACA,OAAO,SAASC,iCAAiCA,CAAA,EAQb;EAAA,IARc;IAChDC,QAAQ;IACRC,aAAa;IACbC;EAKF,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACJ,IAAMG,mBAAmB,GAAG,IAAIC,GAAG,CAAoC,CAAC;;EAExE;EACA,IAAMC,mBAAmB,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;IACvDC,GAAGA,CAACC,MAAM,EAAEC,GAAG,EAAE;MACf,OAAOC,qBAAqB,CAACD,GAAa,CAAC;IAC7C;EACF,CAAC,CAAgC;EAEjC,IAAIE,UAAuC;EAE3C,SAASC,2BAA2BA,CAClCC,SAA+B,EAC/BC,GAAqB,EACf;IACN,IAAIA,GAAG,EAAE;MACPH,UAAU,GAAGG,GAAG;IAClB;IACAb,mBAAmB,CAACc,KAAK,CAAC,CAAC;IAC3B,IAAIC,KAAK,CAACC,OAAO,CAACJ,SAAS,CAAC,EAAE;MAC5B,KAAK,IAAMK,EAAE,IAAIL,SAAS,EAAE;QAC1B,IAAMM,IAAI,GAAG3B,4BAA4B,CAAC0B,EAAE,EAAE,IAAI,EAAE,CAAC,CAACrB,eAAe,CAAC;QACtE,IAAMuB,mBAAmB,GAAG5B,4BAA4B,CACtD0B,EAAE,EACF,aAAa,EACb,CAAC,CAACrB,eACJ,CAAC,CAACwB,GAAG,CAAC,OAAO,CAAC;QACdpB,mBAAmB,CAACqB,GAAG,CAACJ,EAAE,CAACK,IAAI,EAAE;UAC/BC,MAAM,EAAEN,EAAE,CAACM,MAAM;UACjBC,UAAU,EAAEP,EAAE,CAACO,UAAU;UACzBN,IAAI;UACJC;QACF,CAAC,CAAC;MACJ;IACF;EACF;EAEA,SAASV,qBAAqBA,CAACa,IAAY,EAAwB;IACjE,IAAML,EAAE,GAAGjB,mBAAmB,CAACM,GAAG,CAACgB,IAAI,CAAC;IACxC,IAAI,CAACL,EAAE,EAAE;MACP,OAAOlB,SAAS;IAClB;IACA,IAAIkB,EAAE,CAACQ,SAAS,EAAE;MAChB,OAAOR,EAAE,CAACS,MAAM;IAClB;IACA,IAAIC,SAAgD;IACpD,IAAI/B,eAAe,EAAE;MACnB+B,SAAS,GAAG/B,eAAe,CAACgC,eAAe,CAACN,IAAI,CAAC;IACnD;IACA,IAAMO,SAAS,GAAGxC,eAAe,CAAC4B,EAAE,CAACM,MAAM,EAAE;MAC3CC,UAAU,EAAEP,EAAE,CAACO,UAAU;MACzBM,KAAK,EAAEH,SAAS,IAAI;QAClBI,WAAW,EAAEJ,SAAS,CAACI;MACzB;IACF,CAAC,CAAC;IACFd,EAAE,CAACS,MAAM,GAAGtC,IAAI,CAACyC,SAAS,CAACG,QAAQ,EAAEf,EAAE,CAACM,MAAM,EAAE;MAC9CU,KAAK,EAAE;QACLC,KAAK,EAAE;MACT,CAAC;MACDC,eAAe,EAAE7C,MAAM,CACrBuC,SAAS,CAACO,qBAAqB,EAC/B5C,iBAAiB,CAACqC,SAAS,CAACO,qBAAqB,EAAE;QACjDxC,eAAe;QACfF,QAAQ;QACRC,aAAa;QACbkB,GAAG,EAAEH,UAAU;QACfR,mBAAmB;QACnBmC,oBAAoB,EAAE;MACxB,CAAC,CAAC,EACF,CAAC,CAACzC,eACJ,CAAC;MACDkC,KAAK,EAAEH,SAAS,IAAI;QAClBW,cAAc,EAAEX,SAAS,CAACW,cAAc;QACxCC,UAAU,EAAEZ,SAAS,CAACY,UAAU;QAChCC,YAAY,EAAEb,SAAS,CAACa;MAC1B;IACF,CAAC,CAAa;IACdvB,EAAE,CAACQ,SAAS,GAAG,IAAI;IACnB,OAAOR,EAAE,CAACS,MAAM;EAClB;EAEA,OAAO;IACLxB,mBAAmB;IACnBS,2BAA2B;IAC3B8B,wBAAwBA,CACtBnB,IAAY,EACZoB,IAA6B,EACvB;MACN,IAAMC,KAAK,GAAAC,aAAA,CAAAA,aAAA,KACNF,IAAI;QACPpB;MAAI,EACL;MACD,IAAMJ,IAAI,GAAG3B,4BAA4B,CAACoD,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;MAC5D,IAAMxB,mBAAmB,GAAG5B,4BAA4B,CACtDoD,KAAK,EACL,aAAa,EACb,IACF,CAAC,CAACvB,GAAG,CAAC,OAAO,CAAC;MACdpB,mBAAmB,CAACqB,GAAG,CAACC,IAAI,EAAE;QAC5BC,MAAM,EAAEmB,IAAI,CAACnB,MAAM;QACnBC,UAAU,EAAEkB,IAAI,CAAClB,UAAU;QAC3BN,IAAI;QACJC;MACF,CAAC,CAAC;IACJ,CAAC;IACD;AACJ;AACA;AACA;IACI0B,qBAAqBA,CAACC,aAAa,EAAE;MACnC,IAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAAS,CAAC;MAC1C,IAAM7B,mBAAmB,GAAIG,IAAY,IAAc;QACrD,IAAI,CAACyB,gBAAgB,CAAC3B,GAAG,CAACE,IAAI,CAAC,EAAE;UAC/ByB,gBAAgB,CAACE,GAAG,CAAC3B,IAAI,CAAC;UAC1B,IAAML,EAAE,GAAGjB,mBAAmB,CAACM,GAAG,CAACgB,IAAI,CAAC;UACxC,OACE,CAAC,CAACL,EAAE,KACHA,EAAE,CAACE,mBAAmB,IAAI,CAAC,GAAGF,EAAE,CAACC,IAAI,CAAC,CAACgC,IAAI,CAAC/B,mBAAmB,CAAC,CAAC;QAEtE;QACA,OAAO,KAAK;MACd,CAAC;MACD,OAAO2B,aAAa,CAACI,IAAI,CAAC/B,mBAAmB,CAAC;IAChD;EACF,CAAC;AACH","ignoreList":[]}
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":[]}