@next-core/runtime 1.58.2 → 1.58.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 (55) hide show
  1. package/dist/cjs/CustomTemplates.js +11 -7
  2. package/dist/cjs/CustomTemplates.js.map +1 -1
  3. package/dist/cjs/ModalStack.js +2 -1
  4. package/dist/cjs/ModalStack.js.map +1 -1
  5. package/dist/cjs/StoryboardFunctionRegistry.js +2 -1
  6. package/dist/cjs/StoryboardFunctionRegistry.js.map +1 -1
  7. package/dist/cjs/createRoot.js +4 -4
  8. package/dist/cjs/createRoot.js.map +1 -1
  9. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +5 -4
  10. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  11. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +7 -4
  12. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  13. package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js +5 -4
  14. package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js.map +1 -1
  15. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +21 -18
  16. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
  17. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js +7 -4
  18. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
  19. package/dist/cjs/internal/CustomTemplates/utils.js +3 -3
  20. package/dist/cjs/internal/CustomTemplates/utils.js.map +1 -1
  21. package/dist/cjs/internal/ErrorNode.js +2 -1
  22. package/dist/cjs/internal/ErrorNode.js.map +1 -1
  23. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +3 -3
  24. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
  25. package/dist/cjs/internal/FormRenderer/utils.js +2 -2
  26. package/dist/cjs/internal/FormRenderer/utils.js.map +1 -1
  27. package/dist/cjs/internal/Renderer.js +18 -13
  28. package/dist/cjs/internal/Renderer.js.map +1 -1
  29. package/dist/cjs/internal/RendererContext.js +10 -8
  30. package/dist/cjs/internal/RendererContext.js.map +1 -1
  31. package/dist/cjs/internal/Runtime.js +15 -16
  32. package/dist/cjs/internal/Runtime.js.map +1 -1
  33. package/dist/cjs/internal/bindListeners.js +3 -2
  34. package/dist/cjs/internal/bindListeners.js.map +1 -1
  35. package/dist/cjs/internal/compute/evaluate.js +4 -4
  36. package/dist/cjs/internal/compute/evaluate.js.map +1 -1
  37. package/dist/cjs/internal/compute/getStorageItem.js +2 -1
  38. package/dist/cjs/internal/compute/getStorageItem.js.map +1 -1
  39. package/dist/cjs/internal/compute/listenOnTrackingContext.js +2 -1
  40. package/dist/cjs/internal/compute/listenOnTrackingContext.js.map +1 -1
  41. package/dist/cjs/internal/data/resolveDataStore.js +4 -2
  42. package/dist/cjs/internal/data/resolveDataStore.js.map +1 -1
  43. package/dist/cjs/internal/matchStoryboard.js +2 -2
  44. package/dist/cjs/internal/matchStoryboard.js.map +1 -1
  45. package/dist/cjs/internal/poll.js +3 -3
  46. package/dist/cjs/internal/poll.js.map +1 -1
  47. package/dist/cjs/internal/secret_internals.js +7 -6
  48. package/dist/cjs/internal/secret_internals.js.map +1 -1
  49. package/dist/cjs/internal/setupRootRuntimeContext.js +3 -2
  50. package/dist/cjs/internal/setupRootRuntimeContext.js.map +1 -1
  51. package/dist/cjs/setWatermark.js +4 -4
  52. package/dist/cjs/setWatermark.js.map +1 -1
  53. package/dist/cjs/themeAndMode.js +2 -1
  54. package/dist/cjs/themeAndMode.js.map +1 -1
  55. package/package.json +9 -9
@@ -12,7 +12,7 @@ const allowedNativeProps = new Set(["prefix"]);
12
12
  class CustomTemplateRegistry {
13
13
  #registry = new Map();
14
14
  define(tagName, constructor) {
15
- var _constructor$proxy, _compatibleConstructo;
15
+ var _constructor$proxy$pr, _constructor$proxy, _compatibleConstructo, _compatibleConstructo2;
16
16
  let registered = this.#registry.has(tagName);
17
17
  if (registered) {
18
18
  // When open launchpad, the storyboard will be updated.
@@ -30,7 +30,7 @@ class CustomTemplateRegistry {
30
30
 
31
31
  // Transform legacy `proxy.properties[].asVariable` as states.
32
32
  const strict = (0, _isStrictMode.isStrictMode)();
33
- const proxyProperties = ((_constructor$proxy = constructor.proxy) === null || _constructor$proxy === void 0 ? void 0 : _constructor$proxy.properties) ?? {};
33
+ const 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 : {};
34
34
  const validProxyProps = [];
35
35
  const legacyTplVariables = [];
36
36
  for (const [key, value] of Object.entries(proxyProperties)) {
@@ -71,7 +71,7 @@ class CustomTemplateRegistry {
71
71
  name: tagName
72
72
  });
73
73
  const exposedStates = getExposedStates(compatibleConstructor.state);
74
- const proxyMethods = Object.entries(((_compatibleConstructo = compatibleConstructor.proxy) === null || _compatibleConstructo === void 0 ? void 0 : _compatibleConstructo.methods) ?? {});
74
+ const proxyMethods = Object.entries((_compatibleConstructo = (_compatibleConstructo2 = compatibleConstructor.proxy) === null || _compatibleConstructo2 === void 0 ? void 0 : _compatibleConstructo2.methods) !== null && _compatibleConstructo !== void 0 ? _compatibleConstructo : {});
75
75
  const props = exposedStates.concat(validProxyProps.map(entry => entry[0]));
76
76
  const methods = proxyMethods.map(entry => entry[0]);
77
77
  const nativeProps = props.concat(methods).filter(prop => prop in HTMLElement.prototype && !allowedNativeProps.has(prop));
@@ -143,16 +143,18 @@ class CustomTemplateRegistry {
143
143
  for (const [from, to] of validProxyProps) {
144
144
  Object.defineProperty(TplElement.prototype, from, {
145
145
  get() {
146
+ var _to$refProperty;
146
147
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
147
148
  const element = this.$$getElementByRef(to.ref);
148
- return element[to.refProperty ?? from];
149
+ return element[(_to$refProperty = to.refProperty) !== null && _to$refProperty !== void 0 ? _to$refProperty : from];
149
150
  },
150
151
  set(value) {
151
152
  var _this$$$getElementByR;
152
153
  // 同上 exposedState.set
153
154
  const element = (_this$$$getElementByR = this.$$getElementByRef) === null || _this$$$getElementByR === void 0 ? void 0 : _this$$$getElementByR.call(this, to.ref);
154
155
  if (element) {
155
- element[to.refProperty ?? from] = value;
156
+ var _to$refProperty2;
157
+ element[(_to$refProperty2 = to.refProperty) !== null && _to$refProperty2 !== void 0 ? _to$refProperty2 : from] = value;
156
158
  }
157
159
  },
158
160
  enumerable: true
@@ -161,9 +163,10 @@ class CustomTemplateRegistry {
161
163
  for (const [from, to] of proxyMethods) {
162
164
  Object.defineProperty(TplElement.prototype, from, {
163
165
  value(...args) {
166
+ var _to$refMethod;
164
167
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
165
168
  const element = this.$$getElementByRef(to.ref);
166
- return element[to.refMethod ?? from](...args);
169
+ return element[(_to$refMethod = to.refMethod) !== null && _to$refMethod !== void 0 ? _to$refMethod : from](...args);
167
170
  },
168
171
  enumerable: true
169
172
  });
@@ -175,8 +178,9 @@ class CustomTemplateRegistry {
175
178
  }
176
179
  }
177
180
  function getExposedStates(state) {
181
+ var _state$filter$map;
178
182
  // Allow duplicated state names which maybe mutually exclusive.
179
- return (0, _lodash.uniq)((state === null || state === void 0 ? void 0 : state.filter(item => item.expose).map(item => item.name)) ?? []);
183
+ return (0, _lodash.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 : []);
180
184
  }
181
185
 
182
186
  // istanbul ignore next
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTemplates.js","names":["_lodash","require","_isStrictMode","_getV2RuntimeFromDll","allowedNativeProps","Set","CustomTemplateRegistry","registry","Map","define","tagName","constructor","_constructor$proxy","_compatibleConstructo","registered","has","console","warn","customElements","get","strict","isStrictMode","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","value","Object","entries","asVariable","warnAboutStrictMode","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","args","refMethod","uniq","getCustomTemplatesV2","v2Kit","getV2RuntimeFromDll","freeze","getRuntime","registerCustomTemplate","customTemplates","exports"],"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 return 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":["_lodash","require","_isStrictMode","_getV2RuntimeFromDll","allowedNativeProps","Set","CustomTemplateRegistry","registry","Map","define","tagName","constructor","_constructor$proxy$pr","_constructor$proxy","_compatibleConstructo","_compatibleConstructo2","registered","has","console","warn","customElements","get","strict","isStrictMode","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","value","Object","entries","asVariable","warnAboutStrictMode","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","_to$refProperty","refProperty","_this$$$getElementByR","call","_to$refProperty2","args","_to$refMethod","refMethod","_state$filter$map","uniq","getCustomTemplatesV2","v2Kit","getV2RuntimeFromDll","freeze","getRuntime","registerCustomTemplate","customTemplates","exports"],"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 return 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":";;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,oBAAA,GAAAF,OAAA;AAEA;AACA,MAAMG,kBAAkB,GAAG,IAAIC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAQ9C,MAAMC,sBAAsB,CAAC;EAClB,CAACC,QAAQ,GAAG,IAAIC,GAAG,CAAyB,CAAC;EAEtDC,MAAMA,CAACC,OAAe,EAAEC,WAAsC,EAAQ;IAAA,IAAAC,qBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,sBAAA;IACpE,IAAIC,UAAU,GAAG,IAAI,CAAC,CAACT,QAAQ,CAACU,GAAG,CAACP,OAAO,CAAC;IAC5C,IAAIM,UAAU,EAAE;MACd;MACA;MACA;MACA;MACAE,OAAO,CAACC,IAAI,CAAC,uBAAuBT,OAAO,uBAAuB,CAAC;IACrE,CAAC,MAAM;MACLM,UAAU,GAAG,CAAC,CAACI,cAAc,CAACC,GAAG,CAACX,OAAO,CAAC;MAC1C,IAAIM,UAAU,EAAE;QACd;QACAE,OAAO,CAACC,IAAI,CACV,uBAAuBT,OAAO,sCAChC,CAAC;MACH;IACF;;IAEA;IACA,MAAMY,MAAM,GAAG,IAAAC,0BAAY,EAAC,CAAC;IAC7B,MAAMC,eAAe,IAAAZ,qBAAA,IAAAC,kBAAA,GAAIF,WAAW,CAACc,KAAK,cAAAZ,kBAAA,uBAAjBA,kBAAA,CAAmBa,UAAU,cAAAd,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAE1D;IACD,MAAMe,eAA6D,GAAG,EAAE;IACxE,MAAMC,kBAA4B,GAAG,EAAE;IACvC,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACR,eAAe,CAAC,EAAE;MAC1D,IAAIM,KAAK,CAACG,UAAU,EAAE;QACpB,IAAAC,iCAAmB,EAACZ,MAAM,EAAE,uBAAuB,EAAEZ,OAAO,EAAEmB,GAAG,CAAC;QAClE;QACA,IAAI,CAACP,MAAM,EAAE;UACX;UACAM,kBAAkB,CAACO,IAAI,CAACN,GAAG,CAAC;QAC9B;MACF,CAAC,MAAM,IAAIC,KAAK,CAACM,aAAa,IAAIN,KAAK,CAACO,YAAY,EAAE;QACpD;QACAnB,OAAO,CAACoB,KAAK,CACX,gEAAgE,EAChE5B,OAAO,EACPmB,GACF,CAAC;MACH,CAAC,MAAM,IAAIC,KAAK,CAACS,GAAG,EAAE;QACpBZ,eAAe,CAACQ,IAAI,CAAC,CAACN,GAAG,EAAEC,KAAK,CAAC,CAAC;MACpC;MACA;IACF;IAEA,MAAMU,qBAAqB,GAAG;MAC5B,GAAG7B,WAAW;MACdc,KAAK,EAAE;QACL,GAAGd,WAAW,CAACc,KAAK;QACpBC,UAAU,EAAEK,MAAM,CAACU,WAAW,CAACd,eAAe;MAChD,CAAC;MACDe,KAAK,EAAE,CAAC/B,WAAW,CAAC+B,KAAK,GACrBpB,MAAM,GACJX,WAAW,CAAC+B,KAAK,GACjB/B,WAAW,CAAC+B,KAAK,CAACC,GAAG,CAAEC,IAAI,KAAM;QAC/B;QACAC,MAAM,EAAE,IAAI;QACZ,GAAGD;MACL,CAAC,CAAC,CAAC,GACL,EAAE,EACJE,MAAM,CAAClB,kBAAkB,CAACe,GAAG,CAAEI,GAAG,KAAM;QAAEC,IAAI,EAAED,GAAG;QAAEF,MAAM,EAAE;MAAK,CAAC,CAAC,CAAC;IACzE,CAAC;;IAED;IACA,IAAI,CAAC,CAACtC,QAAQ,CAAC0C,GAAG,CAACvC,OAAO,EAAE;MAC1B,GAAG8B,qBAAqB;MACxBQ,IAAI,EAAEtC;IACR,CAAC,CAAC;IAEF,MAAMwC,aAAa,GAAGC,gBAAgB,CAACX,qBAAqB,CAACE,KAAK,CAAC;IACnE,MAAMU,YAAY,GAAGrB,MAAM,CAACC,OAAO,EAAAlB,qBAAA,IAAAC,sBAAA,GACjCyB,qBAAqB,CAACf,KAAK,cAAAV,sBAAA,uBAA3BA,sBAAA,CAA6BsC,OAAO,cAAAvC,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAC3C,CAAC;IAED,MAAMwC,KAAK,GAAGJ,aAAa,CAACJ,MAAM,CAChCnB,eAAe,CAACgB,GAAG,CAAEY,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CACzC,CAAC;IACD,MAAMF,OAAO,GAAGD,YAAY,CAACT,GAAG,CAAEY,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CAAC;IAErD,MAAMC,WAAW,GAAGF,KAAK,CACtBR,MAAM,CAACO,OAAO,CAAC,CACfI,MAAM,CACJC,IAAI,IAAKA,IAAI,IAAIC,WAAW,CAACC,SAAS,IAAI,CAACxD,kBAAkB,CAACa,GAAG,CAACyC,IAAI,CACzE,CAAC;IACH,IAAIF,WAAW,CAACK,MAAM,GAAG,CAAC,EAAE;MAC1B,IAAA3B,iCAAmB,EACjBZ,MAAM,EACN,uEAAuE,EACvEZ,OAAO,EACP,GAAG8C,WACL,CAAC;MACD;MACA,IAAIlC,MAAM,EAAE;QACV,MAAM,IAAIwC,KAAK,CACb,uBAAuBpD,OAAO,MAAM8C,WAAW,CAC5Cb,GAAG,CAAEoB,CAAC,IAAK,IAAIA,CAAC,GAAG,CAAC,CACpBC,IAAI,CACH,IACF,CAAC,oGACL,CAAC;MACH;IACF;IAEA,IAAIhD,UAAU,EAAE;MACd;IACF;IAEA,MAAMiD,UAAU,SAASN,WAAW,CAAC;MACnC,IAAIO,QAAQA,CAAA,EAAG;QACb,OAAO,iBAAiB;MAC1B;MAEA,WAAWC,2BAA2BA,CAAA,EAAa;QACjD,OAAOb,KAAK;MACd;MAEA,WAAWc,wBAAwBA,CAAA,EAAa;QAC9C,OAAOf,OAAO;MAChB;MAEAgB,iBAAiBA,CAA4B9B,GAAW,EAAE;QAAA,IAAA+B,qBAAA;QACxD,QAAAA,qBAAA,GAAO,IAAI,CAACC,eAAe,cAAAD,qBAAA,gBAAAA,qBAAA,GAApBA,qBAAA,CAAsBE,SAAS,cAAAF,qBAAA,gBAAAA,qBAAA,GAA/BA,qBAAA,CAAiCG,eAAe,cAAAH,qBAAA,gBAAAA,qBAAA,GAAhDA,qBAAA,CAAkDI,mBAAmB,CAACrD,GAAG,CAC9EkB,GACF,CAAC,cAAA+B,qBAAA,uBAFMA,qBAAA,CAEJK,OAAO;MACZ;MAEAC,iBAAiBA,CAAA,EAAG;QAClB,IAAIC,UAAU,GAAG,IAAI,CAACA,UAAU;QAChC,IAAI,CAACA,UAAU,EAAE;UACfA,UAAU,GAAG,IAAI,CAACC,YAAY,CAAC;YAAEC,IAAI,EAAE;UAAO,CAAC,CAAC;QAClD;QACA,MAAMC,QAAQ,GAAGC,QAAQ,CAACC,sBAAsB,CAAC,CAAC;QAClD,MAAMC,KAAK,GAAGF,QAAQ,CAACG,aAAa,CAAC,OAAO,CAAC;QAC7CD,KAAK,CAACE,WAAW,GAAG,mDAAmD;QACvE,MAAMC,IAAI,GAAGL,QAAQ,CAACG,aAAa,CAAC,MAAM,CAAC;QAC3CJ,QAAQ,CAACO,WAAW,CAACJ,KAAK,CAAC;QAC3BH,QAAQ,CAACO,WAAW,CAACD,IAAI,CAAC;QAC1BT,UAAU,CAACU,WAAW,CAACP,QAAQ,CAAC;MAClC;MAEAQ,oBAAoBA,CAAA,EAAG;QACrB,IAAI,IAAI,CAACX,UAAU,EAAE;UACnB,IAAI,CAACA,UAAU,CAACQ,WAAW,GAAG,EAAE;QAClC;MACF;IACF;IAEA,KAAK,MAAMI,QAAQ,IAAIvC,aAAa,EAAE;MACpC,IAAIvB,eAAe,CAAC+D,IAAI,CAAEnC,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAKkC,QAAQ,CAAC,EAAE;QAC1D;QACAvE,OAAO,CAACoB,KAAK,CACX,kEAAkEmD,QAAQ,QAAQ/E,OAAO,EAC3F,CAAC;QACD;MACF;MACAqB,MAAM,CAAC4D,cAAc,CAAC1B,UAAU,CAACL,SAAS,EAAE6B,QAAQ,EAAE;QACpDpE,GAAGA,CAAA,EAA4B;UAC7B;UACA,OAAO,IAAI,CAACkD,eAAe,CAAEqB,QAAQ,CAACH,QAAQ,CAAC;QACjD,CAAC;QACDxC,GAAGA,CAA4BnB,KAAc,EAAE;UAAA,IAAA+D,sBAAA;UAC7C;UACA;UACA,CAAAA,sBAAA,OAAI,CAACtB,eAAe,cAAAsB,sBAAA,eAApBA,sBAAA,CAAsBC,WAAW,CAACL,QAAQ,EAAE3D,KAAK,EAAE,SAAS,CAAC;QAC/D,CAAC;QACDiE,UAAU,EAAE;MACd,CAAC,CAAC;IACJ;IAEA,KAAK,MAAM,CAACC,IAAI,EAAEC,EAAE,CAAC,IAAItE,eAAe,EAAE;MACxCI,MAAM,CAAC4D,cAAc,CAAC1B,UAAU,CAACL,SAAS,EAAEoC,IAAI,EAAE;QAChD3E,GAAGA,CAAA,EAAmB;UAAA,IAAA6E,eAAA;UACpB;UACA,MAAMvB,OAAO,GAAG,IAAI,CAACN,iBAAiB,CAAE4B,EAAE,CAAC1D,GAAG,CAG7C;UACD,OAAOoC,OAAO,EAAAuB,eAAA,GAACD,EAAE,CAACE,WAAW,cAAAD,eAAA,cAAAA,eAAA,GAAIF,IAAI,CAAC;QACxC,CAAC;QACD/C,GAAGA,CAAmBnB,KAAc,EAAE;UAAA,IAAAsE,qBAAA;UACpC;UACA,MAAMzB,OAAO,IAAAyB,qBAAA,GAAG,IAAI,CAAC/B,iBAAiB,cAAA+B,qBAAA,uBAAtBA,qBAAA,CAAAC,IAAA,KAAI,EAAqBJ,EAAE,CAAC1D,GAAG,CAG9C;UACD,IAAIoC,OAAO,EAAE;YAAA,IAAA2B,gBAAA;YACX3B,OAAO,EAAA2B,gBAAA,GAACL,EAAE,CAACE,WAAW,cAAAG,gBAAA,cAAAA,gBAAA,GAAIN,IAAI,CAAC,GAAGlE,KAAK;UACzC;QACF,CAAC;QACDiE,UAAU,EAAE;MACd,CAAC,CAAC;IACJ;IAEA,KAAK,MAAM,CAACC,IAAI,EAAEC,EAAE,CAAC,IAAI7C,YAAY,EAAE;MACrCrB,MAAM,CAAC4D,cAAc,CAAC1B,UAAU,CAACL,SAAS,EAAEoC,IAAI,EAAE;QAChDlE,KAAKA,CAAmB,GAAGyE,IAAe,EAAE;UAAA,IAAAC,aAAA;UAC1C;UACA,MAAM7B,OAAO,GAAG,IAAI,CAACN,iBAAiB,CAAE4B,EAAE,CAAC1D,GAAG,CAG7C;UACD,OAAOoC,OAAO,EAAA6B,aAAA,GAACP,EAAE,CAACQ,SAAS,cAAAD,aAAA,cAAAA,aAAA,GAAIR,IAAI,CAAC,CAAC,GAAGO,IAAI,CAAC;QAC/C,CAAC;QACDR,UAAU,EAAE;MACd,CAAC,CAAC;IACJ;IAEA3E,cAAc,CAACX,MAAM,CAACC,OAAO,EAAEuD,UAAU,CAAC;EAC5C;EAEA5C,GAAGA,CAACX,OAAe,EAAE;IACnB,OAAO,IAAI,CAAC,CAACH,QAAQ,CAACc,GAAG,CAACX,OAAO,CAAC;EACpC;AACF;AAEA,SAASyC,gBAAgBA,CAACT,KAAgC,EAAY;EAAA,IAAAgE,iBAAA;EACpE;EACA,OAAO,IAAAC,YAAI,GAAAD,iBAAA,GACThE,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEe,MAAM,CAAEb,IAAI,IAAKA,IAAI,CAACC,MAAM,CAAC,CAACF,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACI,IAAI,CAAC,cAAA0D,iBAAA,cAAAA,iBAAA,GAAI,EACnE,CAAC;AACH;;AAEA;AACA,SAASE,oBAAoBA,CAAA,EAAG;EAC9B,MAAMC,KAAK,GAAG,IAAAC,wCAAmB,EAAC,CAAC;EACnC,IAAID,KAAK,EAAE;IACT,OAAO9E,MAAM,CAACgF,MAAM,CAAC;MACnBtG,MAAMA,CAACC,OAAe,EAAEC,WAAsC,EAAE;QAC9D,OAAOkG,KAAK,CAACG,UAAU,CAAC,CAAC,CAACC,sBAAsB,CAACvG,OAAO,EAAEC,WAAW,CAAC;MACxE;IACF,CAAC,CAAC;EACJ;AACF;;AAEA;AACO,MAAMuG,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAC1BN,oBAAoB,CAAC,CAAC,IAAI,IAAItG,sBAAsB,CAAC,CAAC","ignoreList":[]}
@@ -18,10 +18,11 @@ function instantiateModalStack(initialIndex = 1000) {
18
18
  }
19
19
  };
20
20
  const push = () => {
21
+ var _stack;
21
22
  // Handle pushes without pull
22
23
  pull();
23
24
  // Find the next available index
24
- index = (stack[stack.length - 1] ?? -1) + 1;
25
+ index = ((_stack = stack[stack.length - 1]) !== null && _stack !== void 0 ? _stack : -1) + 1;
25
26
  stack.push(index);
26
27
  return index + initialIndex;
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ModalStack.js","names":["stack","instantiateModalStack","initialIndex","index","pull","found","indexOf","splice","push","length"],"sources":["../../src/ModalStack.ts"],"sourcesContent":["const stack: number[] = [];\n\nexport interface ModalStack {\n push: () => number;\n pull: () => void;\n}\n\nexport function instantiateModalStack(initialIndex = 1000): ModalStack {\n let index = -1;\n const pull = (): void => {\n if (index > -1) {\n const found = stack.indexOf(index);\n // Assert: found should always be greater than -1\n // istanbul ignore else\n if (found > -1) {\n stack.splice(found, 1);\n }\n }\n };\n const push = (): number => {\n // Handle pushes without pull\n pull();\n // Find the next available index\n index = (stack[stack.length - 1] ?? -1) + 1;\n stack.push(index);\n return index + initialIndex;\n };\n return { push, pull };\n}\n"],"mappings":";;;;;;AAAA,MAAMA,KAAe,GAAG,EAAE;AAOnB,SAASC,qBAAqBA,CAACC,YAAY,GAAG,IAAI,EAAc;EACrE,IAAIC,KAAK,GAAG,CAAC,CAAC;EACd,MAAMC,IAAI,GAAGA,CAAA,KAAY;IACvB,IAAID,KAAK,GAAG,CAAC,CAAC,EAAE;MACd,MAAME,KAAK,GAAGL,KAAK,CAACM,OAAO,CAACH,KAAK,CAAC;MAClC;MACA;MACA,IAAIE,KAAK,GAAG,CAAC,CAAC,EAAE;QACdL,KAAK,CAACO,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;MACxB;IACF;EACF,CAAC;EACD,MAAMG,IAAI,GAAGA,CAAA,KAAc;IACzB;IACAJ,IAAI,CAAC,CAAC;IACN;IACAD,KAAK,GAAG,CAACH,KAAK,CAACA,KAAK,CAACS,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC3CT,KAAK,CAACQ,IAAI,CAACL,KAAK,CAAC;IACjB,OAAOA,KAAK,GAAGD,YAAY;EAC7B,CAAC;EACD,OAAO;IAAEM,IAAI;IAAEJ;EAAK,CAAC;AACvB","ignoreList":[]}
1
+ {"version":3,"file":"ModalStack.js","names":["stack","instantiateModalStack","initialIndex","index","pull","found","indexOf","splice","push","_stack","length"],"sources":["../../src/ModalStack.ts"],"sourcesContent":["const stack: number[] = [];\n\nexport interface ModalStack {\n push: () => number;\n pull: () => void;\n}\n\nexport function instantiateModalStack(initialIndex = 1000): ModalStack {\n let index = -1;\n const pull = (): void => {\n if (index > -1) {\n const found = stack.indexOf(index);\n // Assert: found should always be greater than -1\n // istanbul ignore else\n if (found > -1) {\n stack.splice(found, 1);\n }\n }\n };\n const push = (): number => {\n // Handle pushes without pull\n pull();\n // Find the next available index\n index = (stack[stack.length - 1] ?? -1) + 1;\n stack.push(index);\n return index + initialIndex;\n };\n return { push, pull };\n}\n"],"mappings":";;;;;;AAAA,MAAMA,KAAe,GAAG,EAAE;AAOnB,SAASC,qBAAqBA,CAACC,YAAY,GAAG,IAAI,EAAc;EACrE,IAAIC,KAAK,GAAG,CAAC,CAAC;EACd,MAAMC,IAAI,GAAGA,CAAA,KAAY;IACvB,IAAID,KAAK,GAAG,CAAC,CAAC,EAAE;MACd,MAAME,KAAK,GAAGL,KAAK,CAACM,OAAO,CAACH,KAAK,CAAC;MAClC;MACA;MACA,IAAIE,KAAK,GAAG,CAAC,CAAC,EAAE;QACdL,KAAK,CAACO,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;MACxB;IACF;EACF,CAAC;EACD,MAAMG,IAAI,GAAGA,CAAA,KAAc;IAAA,IAAAC,MAAA;IACzB;IACAL,IAAI,CAAC,CAAC;IACN;IACAD,KAAK,GAAG,EAAAM,MAAA,GAACT,KAAK,CAACA,KAAK,CAACU,MAAM,GAAG,CAAC,CAAC,cAAAD,MAAA,cAAAA,MAAA,GAAI,CAAC,CAAC,IAAI,CAAC;IAC3CT,KAAK,CAACQ,IAAI,CAACL,KAAK,CAAC;IACjB,OAAOA,KAAK,GAAGD,YAAY;EAC7B,CAAC;EACD,OAAO;IAAEM,IAAI;IAAEJ;EAAK,CAAC;AACvB","ignoreList":[]}
@@ -51,12 +51,13 @@ function StoryboardFunctionRegistryFactory({
51
51
  registeredFunctions.clear();
52
52
  if (Array.isArray(functions)) {
53
53
  for (const fn of functions) {
54
+ var _fn$perm;
54
55
  let deps = fn.deps;
55
56
  if (deps == null) {
56
57
  deps = (0, _storyboard.collectMemberUsageInFunction)(fn, "FN", !!collectCoverage);
57
58
  deps.delete(fn.name);
58
59
  }
59
- const hasPermissionsCheck = fn.perm ?? (0, _storyboard.collectMemberUsageInFunction)(fn, "PERMISSIONS", !!collectCoverage).has("check");
60
+ const hasPermissionsCheck = (_fn$perm = fn.perm) !== null && _fn$perm !== void 0 ? _fn$perm : (0, _storyboard.collectMemberUsageInFunction)(fn, "PERMISSIONS", !!collectCoverage).has("check");
60
61
  registeredFunctions.set(fn.name, {
61
62
  source: fn.source,
62
63
  typescript: fn.typescript,
@@ -1 +1 @@
1
- {"version":3,"file":"StoryboardFunctionRegistry.js","names":["_cook","require","_supply","_storyboard","_general","_getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","debuggerOverrides","registeredFunctions","Map","overrides","precookFunction","cook","supply","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","collectMemberUsageInFunction","delete","name","hasPermissionsCheck","perm","has","set","source","typescript","transformed","getGlobalVariables","globals","getGeneralGlobals","isStoryboardFunction","undefined","processed","cooked","collector","createCollector","globalVariables","Function","map","hasOwnProperty","precooked","hooks","beforeVisit","cacheKey","attemptToVisitGlobals","function","rules","noVar","LodashWithStaticFields","_","ArrayConstructor","ObjectWithStaticFields","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some","clearGlobalExecutionContextStack","__dev_only_clearGlobalExecutionContextStack","getGlobalExecutionContextStack","__dev_only_getGlobalExecutionContextStack"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type {\n MicroApp,\n StoryboardFunction,\n TransformedFunction,\n} from \"@next-core/types\";\nimport {\n cook,\n precookFunction,\n EstreeNode,\n __dev_only_clearGlobalExecutionContextStack,\n __dev_only_getGlobalExecutionContextStack,\n} from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport type _ from \"lodash\";\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\" | \"transformed\"\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 clearGlobalExecutionContextStack(): void;\n getGlobalExecutionContextStack(): ReturnType<\n typeof __dev_only_getGlobalExecutionContextStack\n >;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string> | string[];\n hasPermissionsCheck: boolean;\n transformed?: TransformedFunction;\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\" | \"config\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n debuggerOverrides,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n debuggerOverrides?: (ctx: {\n precookFunction: typeof precookFunction;\n cook: typeof cook;\n supply: typeof supply;\n }) => {\n LodashWithStaticFields?: Partial<typeof _>;\n ArrayConstructor?: typeof Array;\n ObjectWithStaticFields?: Partial<typeof Object>;\n };\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n const overrides = debuggerOverrides?.({\n precookFunction,\n cook,\n supply,\n });\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 let deps: Set<string> | string[] | undefined = fn.deps;\n if (deps == null) {\n deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n (deps as Set<string>).delete(fn.name);\n }\n const hasPermissionsCheck =\n fn.perm ??\n collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n transformed: fn.transformed,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getGlobalVariables(globals: Set<string> | string[]) {\n return supply(\n globals,\n getGeneralGlobals(globals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\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\n // Do not use transformed functions when debugging.\n const transformed = !overrides && !collector && fn.transformed;\n if (transformed) {\n const globalVariables = getGlobalVariables(transformed.globals);\n // Spread globals as params to prevent accessing forbidden globals.\n // NOTE: in native mode, forbidden globals are declared as `undefined`,\n // thus accessing them will not throw a ReferenceError.\n fn.cooked = new Function(\n ...transformed.globals,\n `\"use strict\";return (${transformed.source})`\n )(\n ...transformed.globals.map((key) =>\n hasOwnProperty(globalVariables, key)\n ? globalVariables[key]\n : undefined\n )\n );\n } else {\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n cacheKey: fn,\n });\n const globalVariables = getGlobalVariables(\n precooked.attemptToVisitGlobals\n );\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: overrides\n ? {\n ...globalVariables,\n ...(overrides?.LodashWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"_\")\n ? {\n _: {\n ...(globalVariables._ as typeof _),\n ...overrides.LodashWithStaticFields,\n },\n }\n : null),\n ...(overrides?.ArrayConstructor &&\n precooked.attemptToVisitGlobals.has(\"Array\")\n ? {\n Array: overrides.ArrayConstructor,\n }\n : null),\n ...(overrides?.ObjectWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"Object\")\n ? {\n Object: {\n ...(globalVariables.Object as typeof Object),\n ...overrides.ObjectWithStaticFields,\n },\n }\n : null),\n }\n : globalVariables,\n ArrayConstructor: overrides?.ArrayConstructor,\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: !!debuggerOverrides,\n }) as Function;\n }\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 transformed: data.transformed,\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 clearGlobalExecutionContextStack() {\n __dev_only_clearGlobalExecutionContextStack();\n },\n getGlobalExecutionContextStack() {\n return __dev_only_getGlobalExecutionContextStack();\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"StoryboardFunctionRegistry.js","names":["_cook","require","_supply","_storyboard","_general","_getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","debuggerOverrides","registeredFunctions","Map","overrides","precookFunction","cook","supply","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","_fn$perm","deps","collectMemberUsageInFunction","delete","name","hasPermissionsCheck","perm","has","set","source","typescript","transformed","getGlobalVariables","globals","getGeneralGlobals","isStoryboardFunction","undefined","processed","cooked","collector","createCollector","globalVariables","Function","map","hasOwnProperty","precooked","hooks","beforeVisit","cacheKey","attemptToVisitGlobals","function","rules","noVar","LodashWithStaticFields","_","ArrayConstructor","ObjectWithStaticFields","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some","clearGlobalExecutionContextStack","__dev_only_clearGlobalExecutionContextStack","getGlobalExecutionContextStack","__dev_only_getGlobalExecutionContextStack"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type {\n MicroApp,\n StoryboardFunction,\n TransformedFunction,\n} from \"@next-core/types\";\nimport {\n cook,\n precookFunction,\n EstreeNode,\n __dev_only_clearGlobalExecutionContextStack,\n __dev_only_getGlobalExecutionContextStack,\n} from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport type _ from \"lodash\";\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\" | \"transformed\"\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 clearGlobalExecutionContextStack(): void;\n getGlobalExecutionContextStack(): ReturnType<\n typeof __dev_only_getGlobalExecutionContextStack\n >;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string> | string[];\n hasPermissionsCheck: boolean;\n transformed?: TransformedFunction;\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\" | \"config\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n debuggerOverrides,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n debuggerOverrides?: (ctx: {\n precookFunction: typeof precookFunction;\n cook: typeof cook;\n supply: typeof supply;\n }) => {\n LodashWithStaticFields?: Partial<typeof _>;\n ArrayConstructor?: typeof Array;\n ObjectWithStaticFields?: Partial<typeof Object>;\n };\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n const overrides = debuggerOverrides?.({\n precookFunction,\n cook,\n supply,\n });\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 let deps: Set<string> | string[] | undefined = fn.deps;\n if (deps == null) {\n deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n (deps as Set<string>).delete(fn.name);\n }\n const hasPermissionsCheck =\n fn.perm ??\n collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n transformed: fn.transformed,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getGlobalVariables(globals: Set<string> | string[]) {\n return supply(\n globals,\n getGeneralGlobals(globals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\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\n // Do not use transformed functions when debugging.\n const transformed = !overrides && !collector && fn.transformed;\n if (transformed) {\n const globalVariables = getGlobalVariables(transformed.globals);\n // Spread globals as params to prevent accessing forbidden globals.\n // NOTE: in native mode, forbidden globals are declared as `undefined`,\n // thus accessing them will not throw a ReferenceError.\n fn.cooked = new Function(\n ...transformed.globals,\n `\"use strict\";return (${transformed.source})`\n )(\n ...transformed.globals.map((key) =>\n hasOwnProperty(globalVariables, key)\n ? globalVariables[key]\n : undefined\n )\n );\n } else {\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n cacheKey: fn,\n });\n const globalVariables = getGlobalVariables(\n precooked.attemptToVisitGlobals\n );\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: overrides\n ? {\n ...globalVariables,\n ...(overrides?.LodashWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"_\")\n ? {\n _: {\n ...(globalVariables._ as typeof _),\n ...overrides.LodashWithStaticFields,\n },\n }\n : null),\n ...(overrides?.ArrayConstructor &&\n precooked.attemptToVisitGlobals.has(\"Array\")\n ? {\n Array: overrides.ArrayConstructor,\n }\n : null),\n ...(overrides?.ObjectWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"Object\")\n ? {\n Object: {\n ...(globalVariables.Object as typeof Object),\n ...overrides.ObjectWithStaticFields,\n },\n }\n : null),\n }\n : globalVariables,\n ArrayConstructor: overrides?.ArrayConstructor,\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: !!debuggerOverrides,\n }) as Function;\n }\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 transformed: data.transformed,\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 clearGlobalExecutionContextStack() {\n __dev_only_clearGlobalExecutionContextStack();\n },\n getGlobalExecutionContextStack() {\n return __dev_only_getGlobalExecutionContextStack();\n },\n };\n}\n"],"mappings":";;;;;;AAKA,IAAAA,KAAA,GAAAC,OAAA;AAOA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAEA,IAAAI,kBAAA,GAAAJ,OAAA;AAEA;;AAGA;;AAMA;;AAsBA;;AAWA;;AAQA;;AAKA;;AAGA;AACO,SAASK,iCAAiCA,CAAC;EAChDC,QAAQ;EACRC,aAAa;EACbC,eAAe;EACfC;AAcF,CAAC,GAAG,CAAC,CAAC,EAA8B;EAClC,MAAMC,mBAAmB,GAAG,IAAIC,GAAG,CAAoC,CAAC;EAExE,MAAMC,SAAS,GAAGH,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG;IACpCI,eAAe,EAAfA,qBAAe;IACfC,IAAI,EAAJA,UAAI;IACJC,MAAM,EAANA;EACF,CAAC,CAAC;;EAEF;EACA,MAAMC,mBAAmB,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;IACvDC,GAAGA,CAACC,OAAO,EAAEC,GAAG,EAAE;MAChB,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;IACAjB,mBAAmB,CAACkB,KAAK,CAAC,CAAC;IAC3B,IAAIC,KAAK,CAACC,OAAO,CAACJ,SAAS,CAAC,EAAE;MAC5B,KAAK,MAAMK,EAAE,IAAIL,SAAS,EAAE;QAAA,IAAAM,QAAA;QAC1B,IAAIC,IAAwC,GAAGF,EAAE,CAACE,IAAI;QACtD,IAAIA,IAAI,IAAI,IAAI,EAAE;UAChBA,IAAI,GAAG,IAAAC,wCAA4B,EAACH,EAAE,EAAE,IAAI,EAAE,CAAC,CAACvB,eAAe,CAAC;UAC/DyB,IAAI,CAAiBE,MAAM,CAACJ,EAAE,CAACK,IAAI,CAAC;QACvC;QACA,MAAMC,mBAAmB,IAAAL,QAAA,GACvBD,EAAE,CAACO,IAAI,cAAAN,QAAA,cAAAA,QAAA,GACP,IAAAE,wCAA4B,EAC1BH,EAAE,EACF,aAAa,EACb,CAAC,CAACvB,eACJ,CAAC,CAAC+B,GAAG,CAAC,OAAO,CAAC;QAChB7B,mBAAmB,CAAC8B,GAAG,CAACT,EAAE,CAACK,IAAI,EAAE;UAC/BK,MAAM,EAAEV,EAAE,CAACU,MAAM;UACjBC,UAAU,EAAEX,EAAE,CAACW,UAAU;UACzBC,WAAW,EAAEZ,EAAE,CAACY,WAAW;UAC3BV,IAAI;UACJI;QACF,CAAC,CAAC;MACJ;IACF;EACF;EAEA,SAASO,kBAAkBA,CAACC,OAA+B,EAAE;IAC3D,OAAO,IAAA9B,cAAM,EACX8B,OAAO,EACP,IAAAC,oCAAiB,EAACD,OAAO,EAAE;MACzBrC,eAAe;MACfF,QAAQ;MACRC,aAAa;MACboB,GAAG,EAAEH,UAAU;MACfR,mBAAmB;MACnB+B,oBAAoB,EAAE;IACxB,CAAC,CAAC,EACF,CAAC,CAACvC,eACJ,CAAC;EACH;EAEA,SAASe,qBAAqBA,CAACa,IAAY,EAAwB;IACjE,MAAML,EAAE,GAAGrB,mBAAmB,CAACU,GAAG,CAACgB,IAAI,CAAC;IACxC,IAAI,CAACL,EAAE,EAAE;MACP,OAAOiB,SAAS;IAClB;IACA,IAAIjB,EAAE,CAACkB,SAAS,EAAE;MAChB,OAAOlB,EAAE,CAACmB,MAAM;IAClB;IACA,IAAIC,SAAgD;IACpD,IAAI3C,eAAe,EAAE;MACnB2C,SAAS,GAAG3C,eAAe,CAAC4C,eAAe,CAAChB,IAAI,CAAC;IACnD;;IAEA;IACA,MAAMO,WAAW,GAAG,CAAC/B,SAAS,IAAI,CAACuC,SAAS,IAAIpB,EAAE,CAACY,WAAW;IAC9D,IAAIA,WAAW,EAAE;MACf,MAAMU,eAAe,GAAGT,kBAAkB,CAACD,WAAW,CAACE,OAAO,CAAC;MAC/D;MACA;MACA;MACAd,EAAE,CAACmB,MAAM,GAAG,IAAII,QAAQ,CACtB,GAAGX,WAAW,CAACE,OAAO,EACtB,wBAAwBF,WAAW,CAACF,MAAM,GAC5C,CAAC,CACC,GAAGE,WAAW,CAACE,OAAO,CAACU,GAAG,CAAEjC,GAAG,IAC7B,IAAAkC,uBAAc,EAACH,eAAe,EAAE/B,GAAG,CAAC,GAChC+B,eAAe,CAAC/B,GAAG,CAAC,GACpB0B,SACN,CACF,CAAC;IACH,CAAC,MAAM;MACL,MAAMS,SAAS,GAAG,IAAA5C,qBAAe,EAACkB,EAAE,CAACU,MAAM,EAAE;QAC3CC,UAAU,EAAEX,EAAE,CAACW,UAAU;QACzBgB,KAAK,EAAEP,SAAS,IAAI;UAClBQ,WAAW,EAAER,SAAS,CAACQ;QACzB,CAAC;QACDC,QAAQ,EAAE7B;MACZ,CAAC,CAAC;MACF,MAAMsB,eAAe,GAAGT,kBAAkB,CACxCa,SAAS,CAACI,qBACZ,CAAC;MACD9B,EAAE,CAACmB,MAAM,GAAG,IAAApC,UAAI,EAAC2C,SAAS,CAACK,QAAQ,EAAE/B,EAAE,CAACU,MAAM,EAAE;QAC9CsB,KAAK,EAAE;UACLC,KAAK,EAAE;QACT,CAAC;QACDX,eAAe,EAAEzC,SAAS,GACtB;UACE,GAAGyC,eAAe;UAClB,IAAIzC,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEqD,sBAAsB,IACrCR,SAAS,CAACI,qBAAqB,CAACtB,GAAG,CAAC,GAAG,CAAC,GACpC;YACE2B,CAAC,EAAE;cACD,GAAIb,eAAe,CAACa,CAAc;cAClC,GAAGtD,SAAS,CAACqD;YACf;UACF,CAAC,GACD,IAAI,CAAC;UACT,IAAIrD,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEuD,gBAAgB,IAC/BV,SAAS,CAACI,qBAAqB,CAACtB,GAAG,CAAC,OAAO,CAAC,GACxC;YACEV,KAAK,EAAEjB,SAAS,CAACuD;UACnB,CAAC,GACD,IAAI,CAAC;UACT,IAAIvD,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEwD,sBAAsB,IACrCX,SAAS,CAACI,qBAAqB,CAACtB,GAAG,CAAC,QAAQ,CAAC,GACzC;YACErB,MAAM,EAAE;cACN,GAAImC,eAAe,CAACnC,MAAwB;cAC5C,GAAGN,SAAS,CAACwD;YACf;UACF,CAAC,GACD,IAAI;QACV,CAAC,GACDf,eAAe;QACnBc,gBAAgB,EAAEvD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEuD,gBAAgB;QAC7CT,KAAK,EAAEP,SAAS,IAAI;UAClBkB,cAAc,EAAElB,SAAS,CAACkB,cAAc;UACxCC,UAAU,EAAEnB,SAAS,CAACmB,UAAU;UAChCC,YAAY,EAAEpB,SAAS,CAACoB;QAC1B,CAAC;QACDC,KAAK,EAAE,CAAC,CAAC/D;MACX,CAAC,CAAa;IAChB;IACAsB,EAAE,CAACkB,SAAS,GAAG,IAAI;IACnB,OAAOlB,EAAE,CAACmB,MAAM;EAClB;EAEA,OAAO;IACLlC,mBAAmB;IACnBS,2BAA2B;IAC3BgD,wBAAwBA,CACtBrC,IAAY,EACZsC,IAA6B,EACvB;MACN,MAAMC,KAAK,GAAG;QACZ,GAAGD,IAAI;QACPtC;MACF,CAAC;MACD,MAAMH,IAAI,GAAG,IAAAC,wCAA4B,EAACyC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;MAC5D,MAAMtC,mBAAmB,GAAG,IAAAH,wCAA4B,EACtDyC,KAAK,EACL,aAAa,EACb,IACF,CAAC,CAACpC,GAAG,CAAC,OAAO,CAAC;MACd7B,mBAAmB,CAAC8B,GAAG,CAACJ,IAAI,EAAE;QAC5BK,MAAM,EAAEiC,IAAI,CAACjC,MAAM;QACnBC,UAAU,EAAEgC,IAAI,CAAChC,UAAU;QAC3BC,WAAW,EAAE+B,IAAI,CAAC/B,WAAW;QAC7BV,IAAI;QACJI;MACF,CAAC,CAAC;IACJ,CAAC;IACD;AACJ;AACA;AACA;IACIuC,qBAAqBA,CAACC,aAAa,EAAE;MACnC,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAAS,CAAC;MAC1C,MAAM1C,mBAAmB,GAAID,IAAY,IAAc;QACrD,IAAI,CAAC0C,gBAAgB,CAACvC,GAAG,CAACH,IAAI,CAAC,EAAE;UAC/B0C,gBAAgB,CAACE,GAAG,CAAC5C,IAAI,CAAC;UAC1B,MAAML,EAAE,GAAGrB,mBAAmB,CAACU,GAAG,CAACgB,IAAI,CAAC;UACxC,OACE,CAAC,CAACL,EAAE,KACHA,EAAE,CAACM,mBAAmB,IAAI,CAAC,GAAGN,EAAE,CAACE,IAAI,CAAC,CAACgD,IAAI,CAAC5C,mBAAmB,CAAC,CAAC;QAEtE;QACA,OAAO,KAAK;MACd,CAAC;MACD,OAAOwC,aAAa,CAACI,IAAI,CAAC5C,mBAAmB,CAAC;IAChD,CAAC;IACD6C,gCAAgCA,CAAA,EAAG;MACjC,IAAAC,iDAA2C,EAAC,CAAC;IAC/C,CAAC;IACDC,8BAA8BA,CAAA,EAAG;MAC/B,OAAO,IAAAC,+CAAyC,EAAC,CAAC;IACpD;EACF,CAAC;AACH","ignoreList":[]}
@@ -83,17 +83,17 @@ function unstable_createRoot(container, {
83
83
  createPortal
84
84
  };
85
85
  if (scope === "page") {
86
- var _clearI18nBundles;
87
- (0, _themeAndMode.setTheme)(theme ?? "light");
86
+ var _app, _clearI18nBundles;
87
+ (0, _themeAndMode.setTheme)(theme !== null && theme !== void 0 ? theme : "light");
88
88
  (0, _themeAndMode.setMode)("default");
89
89
  (0, _setUIVersion.setUIVersion)(uiVersion);
90
90
  if (language) {
91
91
  await _i18n.i18n.changeLanguage(language);
92
92
  }
93
- app ?? (app = {
93
+ (_app = app) !== null && _app !== void 0 ? _app : app = {
94
94
  id: "demo",
95
95
  homepage: "/demo"
96
- });
96
+ };
97
97
  runtimeContext.app = app;
98
98
  const demoStoryboard = {
99
99
  app,
@@ -1 +1 @@
1
- {"version":3,"file":"createRoot.js","names":["_i18n","require","_lodash","_Renderer","_RendererContext","_DataStore","_mount","_themeAndMode","_enums","_StoryboardFunctions","_registerAppI18n","_registerCustomTemplates","_setUIVersion","_ErrorNode","unstable_createRoot","container","portal","_portal","scope","unknownBricks","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","uiVersion","language","context","functions","templates","i18n","i18nData","url","app","Error","bricks","concat","previousRendererContext","renderId","uniqueId","RendererContext","runtimeContext","ctxStore","DataStore","undefined","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","RenderTag","ROOT","_clearI18nBundles","setTheme","setMode","setUIVersion","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","registerAppI18n","registerCustomTemplates","registerStoryboardFunctions","define","failed","output","stores","renderBricks","getDataStores","postAsyncRender","error","node","ErrorNode","blockingList","child","dispatchOnUnmount","dispose","unmountTree","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n { portal: _portal, scope = \"fragment\", unknownBricks }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createRoot.js","names":["_i18n","require","_lodash","_Renderer","_RendererContext","_DataStore","_mount","_themeAndMode","_enums","_StoryboardFunctions","_registerAppI18n","_registerCustomTemplates","_setUIVersion","_ErrorNode","unstable_createRoot","container","portal","_portal","scope","unknownBricks","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","uiVersion","language","context","functions","templates","i18n","i18nData","url","app","Error","bricks","concat","previousRendererContext","renderId","uniqueId","RendererContext","runtimeContext","ctxStore","DataStore","undefined","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","RenderTag","ROOT","_app","_clearI18nBundles","setTheme","setMode","setUIVersion","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","registerAppI18n","registerCustomTemplates","registerStoryboardFunctions","define","failed","output","stores","renderBricks","getDataStores","postAsyncRender","error","node","ErrorNode","blockingList","child","dispatchOnUnmount","dispose","unmountTree","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n { portal: _portal, scope = \"fragment\", unknownBricks }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -28,7 +28,7 @@ function bindTemplateProxy(brick) {
28
28
  if (events) {
29
29
  for (const [from, to] of Object.entries(events)) {
30
30
  if (to.ref === ref) {
31
- var _ref;
31
+ var _to$refEvent, _ref, _ref$$$proxyListeners;
32
32
  const listener = e => {
33
33
  if (e.bubbles) {
34
34
  e.stopPropagation();
@@ -40,9 +40,9 @@ function bindTemplateProxy(brick) {
40
40
  composed: e.composed
41
41
  }));
42
42
  };
43
- const eventType = to.refEvent ?? from;
43
+ const eventType = (_to$refEvent = to.refEvent) !== null && _to$refEvent !== void 0 ? _to$refEvent : from;
44
44
  element.addEventListener(eventType, listener);
45
- (_ref = element).$$proxyListeners ?? (_ref.$$proxyListeners = []);
45
+ (_ref$$$proxyListeners = (_ref = element).$$proxyListeners) !== null && _ref$$$proxyListeners !== void 0 ? _ref$$$proxyListeners : _ref.$$proxyListeners = [];
46
46
  element.$$proxyListeners.push([eventType, listener]);
47
47
  }
48
48
  }
@@ -63,7 +63,8 @@ function unbindTemplateProxy(brick) {
63
63
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
64
64
  const tplHostMetadata = hostBrick.tplHostMetadata;
65
65
  tplHostMetadata.internalBricksByRef.delete(ref);
66
- for (const [type, fn] of element.$$proxyListeners ?? []) {
66
+ for (const [type, fn] of (_$$proxyListeners = element.$$proxyListeners) !== null && _$$proxyListeners !== void 0 ? _$$proxyListeners : []) {
67
+ var _$$proxyListeners;
67
68
  element.removeEventListener(type, fn);
68
69
  }
69
70
  delete element.$$proxyListeners;
@@ -1 +1 @@
1
- {"version":3,"file":"bindTemplateProxy.js","names":["_utils","require","bindTemplateProxy","brick","_tplHostMetadata$prox","ref","runtimeContext","element","tplStateStoreId","hostBrick","getTplStateStore","tplHostMetadata","internalBricksByRef","set","events","proxy","from","to","Object","entries","_ref","listener","e","bubbles","stopPropagation","dispatchEvent","CustomEvent","detail","cancelable","composed","eventType","refEvent","addEventListener","$$proxyListeners","push","unbindTemplateProxy","delete","type","fn","removeEventListener"],"sources":["../../../../src/internal/CustomTemplates/bindTemplateProxy.ts"],"sourcesContent":["import type { RuntimeBrick } from \"../interfaces.js\";\nimport { getTplStateStore } from \"./utils.js\";\n\nexport function bindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n // Error recovering brick may have no runtimeContext.\n if (!ref || !runtimeContext.tplStateStoreId) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"bindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.set(ref, brick);\n\n const events = tplHostMetadata.proxy?.events;\n if (events) {\n for (const [from, to] of Object.entries(events)) {\n if (to.ref === ref) {\n const listener = (e: Event) => {\n if (e.bubbles) {\n e.stopPropagation();\n }\n hostBrick!.element!.dispatchEvent(\n new CustomEvent(from, {\n detail: (e as CustomEvent).detail,\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n composed: e.composed,\n })\n );\n };\n const eventType = to.refEvent ?? from;\n element!.addEventListener(eventType, listener);\n element!.$$proxyListeners ??= [];\n element!.$$proxyListeners.push([eventType, listener]);\n }\n }\n }\n}\n\nexport function unbindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n if (!runtimeContext?.tplStateStoreId || !ref) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"unbindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.delete(ref);\n\n for (const [type, fn] of element!.$$proxyListeners ?? []) {\n element!.removeEventListener(type, fn);\n }\n delete element!.$$proxyListeners;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,iBAAiBA,CAACC,KAAmB,EAAE;EAAA,IAAAC,qBAAA;EACrD,MAAM;IAAEC,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;;EAE9C;EACA,IAAI,CAACE,GAAG,IAAI,CAACC,cAAc,CAACE,eAAe,EAAE;IAC3C;EACF;EAEA,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,uBAAgB,EAACJ,cAAc,EAAE,mBAAmB,CAAC;EAC3E;EACA,MAAMK,eAAe,GAAGF,SAAS,CAAEE,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAACC,GAAG,CAACR,GAAG,EAAEF,KAAK,CAAC;EAEnD,MAAMW,MAAM,IAAAV,qBAAA,GAAGO,eAAe,CAACI,KAAK,cAAAX,qBAAA,uBAArBA,qBAAA,CAAuBU,MAAM;EAC5C,IAAIA,MAAM,EAAE;IACV,KAAK,MAAM,CAACE,IAAI,EAAEC,EAAE,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,MAAM,CAAC,EAAE;MAC/C,IAAIG,EAAE,CAACZ,GAAG,KAAKA,GAAG,EAAE;QAAA,IAAAe,IAAA;QAClB,MAAMC,QAAQ,GAAIC,CAAQ,IAAK;UAC7B,IAAIA,CAAC,CAACC,OAAO,EAAE;YACbD,CAAC,CAACE,eAAe,CAAC,CAAC;UACrB;UACAf,SAAS,CAAEF,OAAO,CAAEkB,aAAa,CAC/B,IAAIC,WAAW,CAACV,IAAI,EAAE;YACpBW,MAAM,EAAGL,CAAC,CAAiBK,MAAM;YACjCJ,OAAO,EAAED,CAAC,CAACC,OAAO;YAClBK,UAAU,EAAEN,CAAC,CAACM,UAAU;YACxBC,QAAQ,EAAEP,CAAC,CAACO;UACd,CAAC,CACH,CAAC;QACH,CAAC;QACD,MAAMC,SAAS,GAAGb,EAAE,CAACc,QAAQ,IAAIf,IAAI;QACrCT,OAAO,CAAEyB,gBAAgB,CAACF,SAAS,EAAET,QAAQ,CAAC;QAC9C,CAAAD,IAAA,GAAAb,OAAO,EAAE0B,gBAAgB,KAAzBb,IAAA,CAASa,gBAAgB,GAAK,EAAE;QAChC1B,OAAO,CAAE0B,gBAAgB,CAACC,IAAI,CAAC,CAACJ,SAAS,EAAET,QAAQ,CAAC,CAAC;MACvD;IACF;EACF;AACF;AAEO,SAASc,mBAAmBA,CAAChC,KAAmB,EAAE;EACvD,MAAM;IAAEE,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;EAE9C,IAAI,EAACG,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAEE,eAAe,KAAI,CAACH,GAAG,EAAE;IAC5C;EACF;EAEA,MAAM;IAAEI;EAAU,CAAC,GAAG,IAAAC,uBAAgB,EAACJ,cAAc,EAAE,qBAAqB,CAAC;EAC7E;EACA,MAAMK,eAAe,GAAGF,SAAS,CAAEE,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAACwB,MAAM,CAAC/B,GAAG,CAAC;EAE/C,KAAK,MAAM,CAACgC,IAAI,EAAEC,EAAE,CAAC,IAAI/B,OAAO,CAAE0B,gBAAgB,IAAI,EAAE,EAAE;IACxD1B,OAAO,CAAEgC,mBAAmB,CAACF,IAAI,EAAEC,EAAE,CAAC;EACxC;EACA,OAAO/B,OAAO,CAAE0B,gBAAgB;AAClC","ignoreList":[]}
1
+ {"version":3,"file":"bindTemplateProxy.js","names":["_utils","require","bindTemplateProxy","brick","_tplHostMetadata$prox","ref","runtimeContext","element","tplStateStoreId","hostBrick","getTplStateStore","tplHostMetadata","internalBricksByRef","set","events","proxy","from","to","Object","entries","_to$refEvent","_ref","_ref$$$proxyListeners","listener","e","bubbles","stopPropagation","dispatchEvent","CustomEvent","detail","cancelable","composed","eventType","refEvent","addEventListener","$$proxyListeners","push","unbindTemplateProxy","delete","type","fn","_$$proxyListeners","removeEventListener"],"sources":["../../../../src/internal/CustomTemplates/bindTemplateProxy.ts"],"sourcesContent":["import type { RuntimeBrick } from \"../interfaces.js\";\nimport { getTplStateStore } from \"./utils.js\";\n\nexport function bindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n // Error recovering brick may have no runtimeContext.\n if (!ref || !runtimeContext.tplStateStoreId) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"bindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.set(ref, brick);\n\n const events = tplHostMetadata.proxy?.events;\n if (events) {\n for (const [from, to] of Object.entries(events)) {\n if (to.ref === ref) {\n const listener = (e: Event) => {\n if (e.bubbles) {\n e.stopPropagation();\n }\n hostBrick!.element!.dispatchEvent(\n new CustomEvent(from, {\n detail: (e as CustomEvent).detail,\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n composed: e.composed,\n })\n );\n };\n const eventType = to.refEvent ?? from;\n element!.addEventListener(eventType, listener);\n element!.$$proxyListeners ??= [];\n element!.$$proxyListeners.push([eventType, listener]);\n }\n }\n }\n}\n\nexport function unbindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n if (!runtimeContext?.tplStateStoreId || !ref) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"unbindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.delete(ref);\n\n for (const [type, fn] of element!.$$proxyListeners ?? []) {\n element!.removeEventListener(type, fn);\n }\n delete element!.$$proxyListeners;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,iBAAiBA,CAACC,KAAmB,EAAE;EAAA,IAAAC,qBAAA;EACrD,MAAM;IAAEC,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;;EAE9C;EACA,IAAI,CAACE,GAAG,IAAI,CAACC,cAAc,CAACE,eAAe,EAAE;IAC3C;EACF;EAEA,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,uBAAgB,EAACJ,cAAc,EAAE,mBAAmB,CAAC;EAC3E;EACA,MAAMK,eAAe,GAAGF,SAAS,CAAEE,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAACC,GAAG,CAACR,GAAG,EAAEF,KAAK,CAAC;EAEnD,MAAMW,MAAM,IAAAV,qBAAA,GAAGO,eAAe,CAACI,KAAK,cAAAX,qBAAA,uBAArBA,qBAAA,CAAuBU,MAAM;EAC5C,IAAIA,MAAM,EAAE;IACV,KAAK,MAAM,CAACE,IAAI,EAAEC,EAAE,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,MAAM,CAAC,EAAE;MAC/C,IAAIG,EAAE,CAACZ,GAAG,KAAKA,GAAG,EAAE;QAAA,IAAAe,YAAA,EAAAC,IAAA,EAAAC,qBAAA;QAClB,MAAMC,QAAQ,GAAIC,CAAQ,IAAK;UAC7B,IAAIA,CAAC,CAACC,OAAO,EAAE;YACbD,CAAC,CAACE,eAAe,CAAC,CAAC;UACrB;UACAjB,SAAS,CAAEF,OAAO,CAAEoB,aAAa,CAC/B,IAAIC,WAAW,CAACZ,IAAI,EAAE;YACpBa,MAAM,EAAGL,CAAC,CAAiBK,MAAM;YACjCJ,OAAO,EAAED,CAAC,CAACC,OAAO;YAClBK,UAAU,EAAEN,CAAC,CAACM,UAAU;YACxBC,QAAQ,EAAEP,CAAC,CAACO;UACd,CAAC,CACH,CAAC;QACH,CAAC;QACD,MAAMC,SAAS,IAAAZ,YAAA,GAAGH,EAAE,CAACgB,QAAQ,cAAAb,YAAA,cAAAA,YAAA,GAAIJ,IAAI;QACrCT,OAAO,CAAE2B,gBAAgB,CAACF,SAAS,EAAET,QAAQ,CAAC;QAC9C,CAAAD,qBAAA,IAAAD,IAAA,GAAAd,OAAO,EAAE4B,gBAAgB,cAAAb,qBAAA,cAAAA,qBAAA,GAAzBD,IAAA,CAASc,gBAAgB,GAAK,EAAE;QAChC5B,OAAO,CAAE4B,gBAAgB,CAACC,IAAI,CAAC,CAACJ,SAAS,EAAET,QAAQ,CAAC,CAAC;MACvD;IACF;EACF;AACF;AAEO,SAASc,mBAAmBA,CAAClC,KAAmB,EAAE;EACvD,MAAM;IAAEE,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;EAE9C,IAAI,EAACG,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAEE,eAAe,KAAI,CAACH,GAAG,EAAE;IAC5C;EACF;EAEA,MAAM;IAAEI;EAAU,CAAC,GAAG,IAAAC,uBAAgB,EAACJ,cAAc,EAAE,qBAAqB,CAAC;EAC7E;EACA,MAAMK,eAAe,GAAGF,SAAS,CAAEE,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAAC0B,MAAM,CAACjC,GAAG,CAAC;EAE/C,KAAK,MAAM,CAACkC,IAAI,EAAEC,EAAE,CAAC,KAAAC,iBAAA,GAAIlC,OAAO,CAAE4B,gBAAgB,cAAAM,iBAAA,cAAAA,iBAAA,GAAI,EAAE,EAAE;IAAA,IAAAA,iBAAA;IACxDlC,OAAO,CAAEmC,mBAAmB,CAACH,IAAI,EAAEC,EAAE,CAAC;EACxC;EACA,OAAOjC,OAAO,CAAE4B,gBAAgB;AAClC","ignoreList":[]}
@@ -121,10 +121,13 @@ function expandBrickInTemplate(brickConfInTemplate, hostContext, markSlotted) {
121
121
  const markChild = () => {
122
122
  slotted = true;
123
123
  };
124
- const slots = Object.fromEntries(Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [slotName, {
125
- type: "bricks",
126
- bricks: (slotConf.bricks ?? []).flatMap(item => expandBrickInTemplate(item, hostContext, markChild))
127
- }]));
124
+ const slots = Object.fromEntries(Object.entries(transpiledSlots !== null && transpiledSlots !== void 0 ? transpiledSlots : {}).map(([slotName, slotConf]) => {
125
+ var _slotConf$bricks;
126
+ return [slotName, {
127
+ type: "bricks",
128
+ bricks: ((_slotConf$bricks = slotConf.bricks) !== null && _slotConf$bricks !== void 0 ? _slotConf$bricks : []).flatMap(item => expandBrickInTemplate(item, hostContext, markChild))
129
+ }];
130
+ }));
128
131
  return {
129
132
  ...restBrickConfInTemplate,
130
133
  properties: (0, _setupUseBrickInTemplate.setupUseBrickInTemplate)(properties, hostContext),
@@ -1 +1 @@
1
- {"version":3,"file":"expandCustomTemplate.js","names":["_lodash","require","_CustomTemplates","_DataStore","_setupTemplateProxy","_setupUseBrickInTemplate","_Renderer","_Runtime","_replaceSlotWithSlottedBricks","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_hooks$flowApi","tplStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","forEachSize","formStateStoreId","tplStateStore","DataStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","customTemplates","get","hooks","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","childrenToSlots","usedSlots","Set","type","flatMap","item","expandBrickInTemplate","brickConfInTemplate","markSlotted","if","replaceSlotWithSlottedBricks","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","transpiledSlots","slotted","markChild","fromEntries","map","slotName","slotConf","setupUseBrickInTemplate","setupTemplateProxy"],"sources":["../../../../src/internal/CustomTemplates/expandCustomTemplate.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n SlotConfOfBricks,\n SlotsConfInTemplate,\n SlotsConfOfBricks,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n TemplateHostBrick,\n TemplateHostContext,\n} from \"../interfaces.js\";\nimport { setupUseBrickInTemplate } from \"./setupUseBrickInTemplate.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { hooks } from \"../Runtime.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { replaceSlotWithSlottedBricks } from \"./replaceSlotWithSlottedBricks.js\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): T {\n const tplStateStoreId = uniqueId(\"tpl-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n tplStateStoreId,\n };\n\n // There is a boundary for `forEach*` and `FORM_STATE` between template internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.forEachSize;\n delete runtimeContext.formStateStoreId;\n\n const tplStateStore = new DataStore(\n \"STATE\",\n hostBrick,\n rendererContext,\n tplStateStoreId\n );\n runtimeContext.tplStateStoreMap.set(tplStateStoreId, tplStateStore);\n if (runtimeContext.tplStateStoreScope) {\n runtimeContext.tplStateStoreScope.push(tplStateStore);\n }\n\n const { bricks, proxy, state, contracts } = customTemplates.get(tplTagName)!;\n hooks?.flowApi?.collectWidgetContract(contracts);\n tplStateStore.define(state, runtimeContext, asyncHostPropertyEntries);\n\n const {\n slots: originalExternalSlots,\n children: externalChildren,\n ...restBrickConf\n } = brickConf;\n\n const newBrickConf = {\n ...restBrickConf,\n brick: tplTagName,\n } as T;\n\n hostBrick.tplHostMetadata = {\n internalBricksByRef: new Map(),\n tplStateStoreId,\n proxy,\n };\n\n // Reversed proxies are used for expand storyboard before rendering page.\n const reversedProxies: TemplateHostContext[\"reversedProxies\"] = {\n properties: new Map(),\n slots: new Map(),\n // mergeBases: new Map(),\n };\n\n if (proxy?.properties) {\n for (const [from, to] of Object.entries(proxy.properties)) {\n let proxies = reversedProxies.properties.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.properties.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n if (proxy?.slots) {\n for (const [from, to] of Object.entries(proxy.slots)) {\n let proxies = reversedProxies.slots.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.slots.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n const hostContext: TemplateHostContext = {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots: childrenToSlots(externalChildren, originalExternalSlots) as\n | SlotsConfOfBricks\n | undefined,\n tplStateStoreId,\n hostBrick: hostBrick as TemplateHostBrick,\n usedSlots: new Set(),\n };\n\n newBrickConf.slots = {\n \"\": {\n type: \"bricks\",\n bricks: bricks.flatMap((item) =>\n expandBrickInTemplate(item, hostContext)\n ),\n },\n };\n\n return newBrickConf;\n}\n\nfunction expandBrickInTemplate(\n brickConfInTemplate: BrickConf,\n hostContext: TemplateHostContext,\n markSlotted?: () => void\n): BrickConf | BrickConf[] {\n // Ignore `if: null` to make `looseCheckIf` working.\n if (brickConfInTemplate.if === null) {\n delete brickConfInTemplate.if;\n }\n\n if (brickConfInTemplate.brick === \"slot\") {\n markSlotted?.();\n return replaceSlotWithSlottedBricks(\n brickConfInTemplate,\n hostContext,\n expandBrickInTemplate\n );\n }\n\n const {\n properties,\n slots: slotsInTemplate,\n children: childrenInTemplate,\n ...restBrickConfInTemplate\n } = brickConfInTemplate as BrickConfInTemplate;\n\n const transpiledSlots = childrenToSlots(\n childrenInTemplate,\n slotsInTemplate\n ) as SlotsConfInTemplate | undefined;\n\n let slotted = false;\n const markChild = () => {\n slotted = true;\n };\n const slots = Object.fromEntries<SlotConfOfBricks>(\n Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [\n slotName,\n {\n type: \"bricks\",\n bricks: (slotConf.bricks ?? []).flatMap((item) =>\n expandBrickInTemplate(item, hostContext, markChild)\n ),\n },\n ])\n );\n\n return {\n ...restBrickConfInTemplate,\n properties: setupUseBrickInTemplate(properties, hostContext),\n slots,\n ...setupTemplateProxy(\n hostContext,\n restBrickConfInTemplate.ref,\n slots,\n slotted\n ),\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"expandCustomTemplate.js","names":["_lodash","require","_CustomTemplates","_DataStore","_setupTemplateProxy","_setupUseBrickInTemplate","_Renderer","_Runtime","_replaceSlotWithSlottedBricks","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_hooks$flowApi","tplStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","forEachSize","formStateStoreId","tplStateStore","DataStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","customTemplates","get","hooks","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","childrenToSlots","usedSlots","Set","type","flatMap","item","expandBrickInTemplate","brickConfInTemplate","markSlotted","if","replaceSlotWithSlottedBricks","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","transpiledSlots","slotted","markChild","fromEntries","map","slotName","slotConf","_slotConf$bricks","setupUseBrickInTemplate","setupTemplateProxy"],"sources":["../../../../src/internal/CustomTemplates/expandCustomTemplate.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n SlotConfOfBricks,\n SlotsConfInTemplate,\n SlotsConfOfBricks,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n TemplateHostBrick,\n TemplateHostContext,\n} from \"../interfaces.js\";\nimport { setupUseBrickInTemplate } from \"./setupUseBrickInTemplate.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { hooks } from \"../Runtime.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { replaceSlotWithSlottedBricks } from \"./replaceSlotWithSlottedBricks.js\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): T {\n const tplStateStoreId = uniqueId(\"tpl-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n tplStateStoreId,\n };\n\n // There is a boundary for `forEach*` and `FORM_STATE` between template internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.forEachSize;\n delete runtimeContext.formStateStoreId;\n\n const tplStateStore = new DataStore(\n \"STATE\",\n hostBrick,\n rendererContext,\n tplStateStoreId\n );\n runtimeContext.tplStateStoreMap.set(tplStateStoreId, tplStateStore);\n if (runtimeContext.tplStateStoreScope) {\n runtimeContext.tplStateStoreScope.push(tplStateStore);\n }\n\n const { bricks, proxy, state, contracts } = customTemplates.get(tplTagName)!;\n hooks?.flowApi?.collectWidgetContract(contracts);\n tplStateStore.define(state, runtimeContext, asyncHostPropertyEntries);\n\n const {\n slots: originalExternalSlots,\n children: externalChildren,\n ...restBrickConf\n } = brickConf;\n\n const newBrickConf = {\n ...restBrickConf,\n brick: tplTagName,\n } as T;\n\n hostBrick.tplHostMetadata = {\n internalBricksByRef: new Map(),\n tplStateStoreId,\n proxy,\n };\n\n // Reversed proxies are used for expand storyboard before rendering page.\n const reversedProxies: TemplateHostContext[\"reversedProxies\"] = {\n properties: new Map(),\n slots: new Map(),\n // mergeBases: new Map(),\n };\n\n if (proxy?.properties) {\n for (const [from, to] of Object.entries(proxy.properties)) {\n let proxies = reversedProxies.properties.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.properties.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n if (proxy?.slots) {\n for (const [from, to] of Object.entries(proxy.slots)) {\n let proxies = reversedProxies.slots.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.slots.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n const hostContext: TemplateHostContext = {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots: childrenToSlots(externalChildren, originalExternalSlots) as\n | SlotsConfOfBricks\n | undefined,\n tplStateStoreId,\n hostBrick: hostBrick as TemplateHostBrick,\n usedSlots: new Set(),\n };\n\n newBrickConf.slots = {\n \"\": {\n type: \"bricks\",\n bricks: bricks.flatMap((item) =>\n expandBrickInTemplate(item, hostContext)\n ),\n },\n };\n\n return newBrickConf;\n}\n\nfunction expandBrickInTemplate(\n brickConfInTemplate: BrickConf,\n hostContext: TemplateHostContext,\n markSlotted?: () => void\n): BrickConf | BrickConf[] {\n // Ignore `if: null` to make `looseCheckIf` working.\n if (brickConfInTemplate.if === null) {\n delete brickConfInTemplate.if;\n }\n\n if (brickConfInTemplate.brick === \"slot\") {\n markSlotted?.();\n return replaceSlotWithSlottedBricks(\n brickConfInTemplate,\n hostContext,\n expandBrickInTemplate\n );\n }\n\n const {\n properties,\n slots: slotsInTemplate,\n children: childrenInTemplate,\n ...restBrickConfInTemplate\n } = brickConfInTemplate as BrickConfInTemplate;\n\n const transpiledSlots = childrenToSlots(\n childrenInTemplate,\n slotsInTemplate\n ) as SlotsConfInTemplate | undefined;\n\n let slotted = false;\n const markChild = () => {\n slotted = true;\n };\n const slots = Object.fromEntries<SlotConfOfBricks>(\n Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [\n slotName,\n {\n type: \"bricks\",\n bricks: (slotConf.bricks ?? []).flatMap((item) =>\n expandBrickInTemplate(item, hostContext, markChild)\n ),\n },\n ])\n );\n\n return {\n ...restBrickConfInTemplate,\n properties: setupUseBrickInTemplate(properties, hostContext),\n slots,\n ...setupTemplateProxy(\n hostContext,\n restBrickConfInTemplate.ref,\n slots,\n slotted\n ),\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,12 +9,12 @@ var _cook = require("@next-core/cook");
9
9
  var _setupTemplateProxy = require("./setupTemplateProxy.js");
10
10
  var _Renderer = require("../Renderer.js");
11
11
  function replaceSlotWithSlottedBricks(brickConf, hostContext, expand) {
12
- var _brickConf$properties, _defaultSlots$;
12
+ var _brickConf$properties, _brickConf$properties2, _defaultSlots$$bricks, _defaultSlots$;
13
13
  // Currently, no support for `if` in a slot.
14
14
  if (brickConf.if != null && !brickConf.if || typeof brickConf.if === "string") {
15
15
  throw new Error(`Can not use "if" in a slot currently, check your template "${hostContext.hostBrick.type}"`);
16
16
  }
17
- const slot = String(((_brickConf$properties = brickConf.properties) === null || _brickConf$properties === void 0 ? void 0 : _brickConf$properties.name) ?? "");
17
+ const slot = String((_brickConf$properties = (_brickConf$properties2 = brickConf.properties) === null || _brickConf$properties2 === void 0 ? void 0 : _brickConf$properties2.name) !== null && _brickConf$properties !== void 0 ? _brickConf$properties : "");
18
18
 
19
19
  // Currently, no support for expression as slot name.
20
20
  if ((0, _cook.isEvaluable)(slot)) {
@@ -27,7 +27,8 @@ function replaceSlotWithSlottedBricks(brickConf, hostContext, expand) {
27
27
  }
28
28
  hostContext.usedSlots.add(slot);
29
29
  if (hostContext.externalSlots && (0, _general.hasOwnProperty)(hostContext.externalSlots, slot)) {
30
- const insertBricks = hostContext.externalSlots[slot].bricks ?? [];
30
+ var _hostContext$external;
31
+ const insertBricks = (_hostContext$external = hostContext.externalSlots[slot].bricks) !== null && _hostContext$external !== void 0 ? _hostContext$external : [];
31
32
  if (insertBricks.length > 0) {
32
33
  const hostCtx = hostContext.hostBrick.runtimeContext;
33
34
  // External bricks of a template, should not access the template internal forEach `ITEM`.
@@ -37,6 +38,6 @@ function replaceSlotWithSlottedBricks(brickConf, hostContext, expand) {
37
38
  }
38
39
  }
39
40
  const defaultSlots = (0, _Renderer.childrenToSlots)(brickConf.children, brickConf.slots);
40
- return ((defaultSlots === null || defaultSlots === void 0 || (_defaultSlots$ = defaultSlots[""]) === null || _defaultSlots$ === void 0 ? void 0 : _defaultSlots$.bricks) ?? []).flatMap(item => expand(item, hostContext));
41
+ return ((_defaultSlots$$bricks = defaultSlots === null || defaultSlots === void 0 || (_defaultSlots$ = defaultSlots[""]) === null || _defaultSlots$ === void 0 ? void 0 : _defaultSlots$.bricks) !== null && _defaultSlots$$bricks !== void 0 ? _defaultSlots$$bricks : []).flatMap(item => expand(item, hostContext));
41
42
  }
42
43
  //# sourceMappingURL=replaceSlotWithSlottedBricks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"replaceSlotWithSlottedBricks.js","names":["_general","require","_cook","_setupTemplateProxy","_Renderer","replaceSlotWithSlottedBricks","brickConf","hostContext","expand","_brickConf$properties","_defaultSlots$","if","Error","hostBrick","type","slot","String","properties","name","isEvaluable","usedSlots","has","add","externalSlots","hasOwnProperty","insertBricks","bricks","length","hostCtx","runtimeContext","hostHasForEach","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","defaultSlots","childrenToSlots","children","slots","flatMap","item"],"sources":["../../../../src/internal/CustomTemplates/replaceSlotWithSlottedBricks.ts"],"sourcesContent":["import type {\n BrickConf,\n SlotsConfInTemplate,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { isEvaluable } from \"@next-core/cook\";\nimport type { TemplateHostContext } from \"../interfaces.js\";\nimport { setupTemplateExternalBricksWithForEach } from \"./setupTemplateProxy.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function replaceSlotWithSlottedBricks<\n T extends BrickConf | UseSingleBrickConf,\n>(\n brickConf: T,\n hostContext: TemplateHostContext,\n expand: (item: T, hostContext: TemplateHostContext) => T | T[]\n): T[] {\n // Currently, no support for `if` in a slot.\n if (\n (brickConf.if != null && !brickConf.if) ||\n typeof brickConf.if === \"string\"\n ) {\n throw new Error(\n `Can not use \"if\" in a slot currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n const slot = String(brickConf.properties?.name ?? \"\");\n\n // Currently, no support for expression as slot name.\n if (isEvaluable(slot)) {\n throw new Error(\n `Can not use an expression as slot name \"${slot}\" currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n // Do not repeat the same slot name in a template.\n if (hostContext.usedSlots.has(slot)) {\n throw new Error(\n `Can not have multiple slots with the same name \"${slot}\", check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n hostContext.usedSlots.add(slot);\n\n if (\n hostContext.externalSlots &&\n hasOwnProperty(hostContext.externalSlots, slot)\n ) {\n const insertBricks = hostContext.externalSlots[slot].bricks ?? [];\n if (insertBricks.length > 0) {\n const hostCtx = hostContext.hostBrick.runtimeContext;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(hostCtx, \"forEachItem\");\n return (\n hostHasForEach\n ? setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostCtx.forEachItem,\n hostCtx.forEachIndex!,\n hostCtx.forEachSize!\n )\n : insertBricks\n ) as T[];\n }\n }\n\n const defaultSlots = childrenToSlots(brickConf.children, brickConf.slots) as\n | SlotsConfInTemplate\n | undefined;\n return (defaultSlots?.[\"\"]?.bricks ?? []).flatMap((item) =>\n expand(item as T, hostContext)\n );\n}\n"],"mappings":";;;;;;AAKA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEO,SAASI,4BAA4BA,CAG1CC,SAAY,EACZC,WAAgC,EAChCC,MAA8D,EACzD;EAAA,IAAAC,qBAAA,EAAAC,cAAA;EACL;EACA,IACGJ,SAAS,CAACK,EAAE,IAAI,IAAI,IAAI,CAACL,SAAS,CAACK,EAAE,IACtC,OAAOL,SAAS,CAACK,EAAE,KAAK,QAAQ,EAChC;IACA,MAAM,IAAIC,KAAK,CACb,8DAA8DL,WAAW,CAACM,SAAS,CAACC,IAAI,GAC1F,CAAC;EACH;EAEA,MAAMC,IAAI,GAAGC,MAAM,CAAC,EAAAP,qBAAA,GAAAH,SAAS,CAACW,UAAU,cAAAR,qBAAA,uBAApBA,qBAAA,CAAsBS,IAAI,KAAI,EAAE,CAAC;;EAErD;EACA,IAAI,IAAAC,iBAAW,EAACJ,IAAI,CAAC,EAAE;IACrB,MAAM,IAAIH,KAAK,CACb,2CAA2CG,IAAI,qCAAqCR,WAAW,CAACM,SAAS,CAACC,IAAI,GAChH,CAAC;EACH;;EAEA;EACA,IAAIP,WAAW,CAACa,SAAS,CAACC,GAAG,CAACN,IAAI,CAAC,EAAE;IACnC,MAAM,IAAIH,KAAK,CACb,mDAAmDG,IAAI,2BAA2BR,WAAW,CAACM,SAAS,CAACC,IAAI,GAC9G,CAAC;EACH;EACAP,WAAW,CAACa,SAAS,CAACE,GAAG,CAACP,IAAI,CAAC;EAE/B,IACER,WAAW,CAACgB,aAAa,IACzB,IAAAC,uBAAc,EAACjB,WAAW,CAACgB,aAAa,EAAER,IAAI,CAAC,EAC/C;IACA,MAAMU,YAAY,GAAGlB,WAAW,CAACgB,aAAa,CAACR,IAAI,CAAC,CAACW,MAAM,IAAI,EAAE;IACjE,IAAID,YAAY,CAACE,MAAM,GAAG,CAAC,EAAE;MAC3B,MAAMC,OAAO,GAAGrB,WAAW,CAACM,SAAS,CAACgB,cAAc;MACpD;MACA;MACA,MAAMC,cAAc,GAAG,IAAAN,uBAAc,EAACI,OAAO,EAAE,aAAa,CAAC;MAC7D,OACEE,cAAc,GACV,IAAAC,0DAAsC,EACpCN,YAAY,EACZG,OAAO,CAACI,WAAW,EACnBJ,OAAO,CAACK,YAAY,EACpBL,OAAO,CAACM,WACV,CAAC,GACDT,YAAY;IAEpB;EACF;EAEA,MAAMU,YAAY,GAAG,IAAAC,yBAAe,EAAC9B,SAAS,CAAC+B,QAAQ,EAAE/B,SAAS,CAACgC,KAAK,CAE3D;EACb,OAAO,CAAC,CAAAH,YAAY,aAAZA,YAAY,gBAAAzB,cAAA,GAAZyB,YAAY,CAAG,EAAE,CAAC,cAAAzB,cAAA,uBAAlBA,cAAA,CAAoBgB,MAAM,KAAI,EAAE,EAAEa,OAAO,CAAEC,IAAI,IACrDhC,MAAM,CAACgC,IAAI,EAAOjC,WAAW,CAC/B,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"replaceSlotWithSlottedBricks.js","names":["_general","require","_cook","_setupTemplateProxy","_Renderer","replaceSlotWithSlottedBricks","brickConf","hostContext","expand","_brickConf$properties","_brickConf$properties2","_defaultSlots$$bricks","_defaultSlots$","if","Error","hostBrick","type","slot","String","properties","name","isEvaluable","usedSlots","has","add","externalSlots","hasOwnProperty","_hostContext$external","insertBricks","bricks","length","hostCtx","runtimeContext","hostHasForEach","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","defaultSlots","childrenToSlots","children","slots","flatMap","item"],"sources":["../../../../src/internal/CustomTemplates/replaceSlotWithSlottedBricks.ts"],"sourcesContent":["import type {\n BrickConf,\n SlotsConfInTemplate,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { isEvaluable } from \"@next-core/cook\";\nimport type { TemplateHostContext } from \"../interfaces.js\";\nimport { setupTemplateExternalBricksWithForEach } from \"./setupTemplateProxy.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function replaceSlotWithSlottedBricks<\n T extends BrickConf | UseSingleBrickConf,\n>(\n brickConf: T,\n hostContext: TemplateHostContext,\n expand: (item: T, hostContext: TemplateHostContext) => T | T[]\n): T[] {\n // Currently, no support for `if` in a slot.\n if (\n (brickConf.if != null && !brickConf.if) ||\n typeof brickConf.if === \"string\"\n ) {\n throw new Error(\n `Can not use \"if\" in a slot currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n const slot = String(brickConf.properties?.name ?? \"\");\n\n // Currently, no support for expression as slot name.\n if (isEvaluable(slot)) {\n throw new Error(\n `Can not use an expression as slot name \"${slot}\" currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n // Do not repeat the same slot name in a template.\n if (hostContext.usedSlots.has(slot)) {\n throw new Error(\n `Can not have multiple slots with the same name \"${slot}\", check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n hostContext.usedSlots.add(slot);\n\n if (\n hostContext.externalSlots &&\n hasOwnProperty(hostContext.externalSlots, slot)\n ) {\n const insertBricks = hostContext.externalSlots[slot].bricks ?? [];\n if (insertBricks.length > 0) {\n const hostCtx = hostContext.hostBrick.runtimeContext;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(hostCtx, \"forEachItem\");\n return (\n hostHasForEach\n ? setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostCtx.forEachItem,\n hostCtx.forEachIndex!,\n hostCtx.forEachSize!\n )\n : insertBricks\n ) as T[];\n }\n }\n\n const defaultSlots = childrenToSlots(brickConf.children, brickConf.slots) as\n | SlotsConfInTemplate\n | undefined;\n return (defaultSlots?.[\"\"]?.bricks ?? []).flatMap((item) =>\n expand(item as T, hostContext)\n );\n}\n"],"mappings":";;;;;;AAKA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEO,SAASI,4BAA4BA,CAG1CC,SAAY,EACZC,WAAgC,EAChCC,MAA8D,EACzD;EAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,cAAA;EACL;EACA,IACGN,SAAS,CAACO,EAAE,IAAI,IAAI,IAAI,CAACP,SAAS,CAACO,EAAE,IACtC,OAAOP,SAAS,CAACO,EAAE,KAAK,QAAQ,EAChC;IACA,MAAM,IAAIC,KAAK,CACb,8DAA8DP,WAAW,CAACQ,SAAS,CAACC,IAAI,GAC1F,CAAC;EACH;EAEA,MAAMC,IAAI,GAAGC,MAAM,EAAAT,qBAAA,IAAAC,sBAAA,GAACJ,SAAS,CAACa,UAAU,cAAAT,sBAAA,uBAApBA,sBAAA,CAAsBU,IAAI,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC;;EAErD;EACA,IAAI,IAAAY,iBAAW,EAACJ,IAAI,CAAC,EAAE;IACrB,MAAM,IAAIH,KAAK,CACb,2CAA2CG,IAAI,qCAAqCV,WAAW,CAACQ,SAAS,CAACC,IAAI,GAChH,CAAC;EACH;;EAEA;EACA,IAAIT,WAAW,CAACe,SAAS,CAACC,GAAG,CAACN,IAAI,CAAC,EAAE;IACnC,MAAM,IAAIH,KAAK,CACb,mDAAmDG,IAAI,2BAA2BV,WAAW,CAACQ,SAAS,CAACC,IAAI,GAC9G,CAAC;EACH;EACAT,WAAW,CAACe,SAAS,CAACE,GAAG,CAACP,IAAI,CAAC;EAE/B,IACEV,WAAW,CAACkB,aAAa,IACzB,IAAAC,uBAAc,EAACnB,WAAW,CAACkB,aAAa,EAAER,IAAI,CAAC,EAC/C;IAAA,IAAAU,qBAAA;IACA,MAAMC,YAAY,IAAAD,qBAAA,GAAGpB,WAAW,CAACkB,aAAa,CAACR,IAAI,CAAC,CAACY,MAAM,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,EAAE;IACjE,IAAIC,YAAY,CAACE,MAAM,GAAG,CAAC,EAAE;MAC3B,MAAMC,OAAO,GAAGxB,WAAW,CAACQ,SAAS,CAACiB,cAAc;MACpD;MACA;MACA,MAAMC,cAAc,GAAG,IAAAP,uBAAc,EAACK,OAAO,EAAE,aAAa,CAAC;MAC7D,OACEE,cAAc,GACV,IAAAC,0DAAsC,EACpCN,YAAY,EACZG,OAAO,CAACI,WAAW,EACnBJ,OAAO,CAACK,YAAY,EACpBL,OAAO,CAACM,WACV,CAAC,GACDT,YAAY;IAEpB;EACF;EAEA,MAAMU,YAAY,GAAG,IAAAC,yBAAe,EAACjC,SAAS,CAACkC,QAAQ,EAAElC,SAAS,CAACmC,KAAK,CAE3D;EACb,OAAO,EAAA9B,qBAAA,GAAC2B,YAAY,aAAZA,YAAY,gBAAA1B,cAAA,GAAZ0B,YAAY,CAAG,EAAE,CAAC,cAAA1B,cAAA,uBAAlBA,cAAA,CAAoBiB,MAAM,cAAAlB,qBAAA,cAAAA,qBAAA,GAAI,EAAE,EAAE+B,OAAO,CAAEC,IAAI,IACrDnC,MAAM,CAACmC,IAAI,EAAOpC,WAAW,CAC/B,CAAC;AACH","ignoreList":[]}