@next-core/runtime 1.62.1 → 1.62.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.
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n inUseBrick?: boolean;\n\n unsafe_penetrate?: boolean;\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n hasTrackingControls?: boolean;\n}\n\nexport interface RenderPlaceholder extends BaseRenderNode {\n tag: RenderTag.PLACEHOLDER;\n return: RenderReturnNode;\n tracking?: boolean;\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderPlaceholder;\n\nexport type RenderChildNode = RenderBrick | RenderPlaceholder;\nexport type RenderReturnNode = RenderRoot | RenderBrick;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n usedSlots: Set<string>;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n inUseBrick?: boolean;\n\n unsafe_penetrate?: boolean;\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n}\n\nexport interface RenderAbstract extends BaseRenderNode {\n tag: RenderTag.ABSTRACT;\n return: RenderReturnNode;\n iid?: string;\n disposes?: (() => void)[];\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderAbstract;\nexport type RenderChildNode = RenderBrick | RenderAbstract;\nexport type RenderReturnNode = RenderNode;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n usedSlots: Set<string>;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -56,10 +56,18 @@ function mountTree(root, initializedElement) {
56
56
  if (current.portal) {
57
57
  portalElements.push(element);
58
58
  } else if (current.return) {
59
- if (!current.return.childElements) {
60
- current.return.childElements = [];
59
+ let currentReturn = current.return;
60
+ while (currentReturn) {
61
+ if (currentReturn.tag === _enums.RenderTag.ABSTRACT) {
62
+ currentReturn = currentReturn.return;
63
+ } else {
64
+ if (!currentReturn.childElements) {
65
+ currentReturn.childElements = [];
66
+ }
67
+ currentReturn.childElements.push(element);
68
+ break;
69
+ }
61
70
  }
62
- current.return.childElements.push(element);
63
71
  }
64
72
  }
65
73
  if (current.child) {
@@ -71,12 +79,11 @@ function mountTree(root, initializedElement) {
71
79
  let currentReturn = current.return;
72
80
  while (currentReturn) {
73
81
  // Append elements inside out
74
- if (currentReturn.childElements) {
82
+ if (currentReturn.tag !== _enums.RenderTag.ABSTRACT && currentReturn.childElements) {
75
83
  if (currentReturn.tag === _enums.RenderTag.ROOT) {
76
84
  var _currentReturn$contai;
77
85
  (_currentReturn$contai = currentReturn.container) === null || _currentReturn$contai === void 0 || _currentReturn$contai.append(...currentReturn.childElements);
78
86
  } else {
79
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
80
87
  currentReturn.element.append(...currentReturn.childElements);
81
88
  }
82
89
  currentReturn.childElements = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"mount.js","names":["_bindTemplateProxy","require","_utils","_bindListeners","_setRealProperties","_enums","unmountTree","mountPoint","replaceChildren","mountTree","root","initializedElement","window","DISABLE_REACT_FLUSH_SYNC","current","child","portalElements","tag","RenderTag","BRICK","_current$tplHostMetad","tagName","type","includes","customElements","get","console","error","warn","element","document","createElement","slotId","setAttribute","iid","dataset","tplHostMetadata","tplStateStoreId","setRealProperties","properties","bindListeners","events","runtimeContext","$$tplStateStore","getTplStateStore","tplStateStoreMap","bindTemplateProxy","portal","push","return","childElements","sibling","_currentReturn","currentReturn","ROOT","_currentReturn$contai","container","append","undefined","length","createPortal","setTimeout"],"sources":["../../../src/internal/mount.ts"],"sourcesContent":["import { bindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport { bindListeners } from \"./bindListeners.js\";\nimport { setRealProperties } from \"./compute/setRealProperties.js\";\nimport { RenderTag } from \"./enums.js\";\nimport type {\n RenderReturnNode,\n RenderRoot,\n RuntimeBrickElement,\n} from \"./interfaces.js\";\n\nexport function unmountTree(mountPoint: HTMLElement | DocumentFragment) {\n mountPoint.replaceChildren();\n}\n\nexport function mountTree(\n root: RenderRoot,\n initializedElement?: RuntimeBrickElement\n): void {\n window.DISABLE_REACT_FLUSH_SYNC = false;\n let current = root.child;\n const portalElements: RuntimeBrickElement[] = [];\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n const tagName = current.type;\n\n if (tagName.includes(\"-\") && !customElements.get(tagName)) {\n // eslint-disable-next-line no-console\n console.error(`Undefined custom element: ${tagName}`);\n }\n\n // istanbul ignore if\n if (tagName === \"basic-bricks.script-brick\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"`basic-bricks.script-brick` is deprecated, please take caution when using it\"\n );\n }\n\n const element: RuntimeBrickElement =\n initializedElement && current === root.child\n ? initializedElement\n : document.createElement(tagName);\n current.element = element;\n\n if (current.slotId) {\n element.setAttribute(\"slot\", current.slotId);\n }\n if (current.iid) {\n element.dataset.iid = current.iid;\n }\n if (current.tplHostMetadata?.tplStateStoreId) {\n element.dataset.tplStateStoreId =\n current.tplHostMetadata.tplStateStoreId;\n }\n setRealProperties(element, current.properties);\n bindListeners(element, current.events, current.runtimeContext);\n if (current.tplHostMetadata) {\n // 先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n element.$$tplStateStore = getTplStateStore(\n {\n tplStateStoreId: current.tplHostMetadata.tplStateStoreId,\n tplStateStoreMap: current.runtimeContext.tplStateStoreMap,\n },\n \"mount\"\n );\n }\n bindTemplateProxy(current);\n\n if (current.portal) {\n portalElements.push(element);\n } else if (current.return) {\n if (!current.return.childElements) {\n current.return.childElements = [];\n }\n current.return.childElements.push(element);\n }\n }\n\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n // Append elements inside out\n if (currentReturn.childElements) {\n if (currentReturn.tag === RenderTag.ROOT) {\n currentReturn.container?.append(...currentReturn.childElements);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n currentReturn.element!.append(...currentReturn.childElements);\n }\n currentReturn.childElements = undefined;\n }\n\n if (currentReturn.tag === RenderTag.ROOT && portalElements.length > 0) {\n const portal =\n typeof currentReturn.createPortal === \"function\"\n ? currentReturn.createPortal()\n : currentReturn.createPortal;\n portal.append(...portalElements);\n }\n\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n setTimeout(() => {\n window.DISABLE_REACT_FLUSH_SYNC = true;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"mount.js","names":["_bindTemplateProxy","require","_utils","_bindListeners","_setRealProperties","_enums","unmountTree","mountPoint","replaceChildren","mountTree","root","initializedElement","window","DISABLE_REACT_FLUSH_SYNC","current","child","portalElements","tag","RenderTag","BRICK","_current$tplHostMetad","tagName","type","includes","customElements","get","console","error","warn","element","document","createElement","slotId","setAttribute","iid","dataset","tplHostMetadata","tplStateStoreId","setRealProperties","properties","bindListeners","events","runtimeContext","$$tplStateStore","getTplStateStore","tplStateStoreMap","bindTemplateProxy","portal","push","return","currentReturn","ABSTRACT","childElements","sibling","_currentReturn","ROOT","_currentReturn$contai","container","append","undefined","length","createPortal","setTimeout"],"sources":["../../../src/internal/mount.ts"],"sourcesContent":["import { bindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport { bindListeners } from \"./bindListeners.js\";\nimport { setRealProperties } from \"./compute/setRealProperties.js\";\nimport { RenderTag } from \"./enums.js\";\nimport type {\n RenderReturnNode,\n RenderRoot,\n RuntimeBrickElement,\n} from \"./interfaces.js\";\n\nexport function unmountTree(mountPoint: HTMLElement | DocumentFragment) {\n mountPoint.replaceChildren();\n}\n\nexport function mountTree(\n root: RenderRoot,\n initializedElement?: RuntimeBrickElement\n): void {\n window.DISABLE_REACT_FLUSH_SYNC = false;\n let current = root.child;\n const portalElements: RuntimeBrickElement[] = [];\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n const tagName = current.type;\n\n if (tagName.includes(\"-\") && !customElements.get(tagName)) {\n // eslint-disable-next-line no-console\n console.error(`Undefined custom element: ${tagName}`);\n }\n\n // istanbul ignore if\n if (tagName === \"basic-bricks.script-brick\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"`basic-bricks.script-brick` is deprecated, please take caution when using it\"\n );\n }\n\n const element: RuntimeBrickElement =\n initializedElement && current === root.child\n ? initializedElement\n : document.createElement(tagName);\n current.element = element;\n\n if (current.slotId) {\n element.setAttribute(\"slot\", current.slotId);\n }\n if (current.iid) {\n element.dataset.iid = current.iid;\n }\n if (current.tplHostMetadata?.tplStateStoreId) {\n element.dataset.tplStateStoreId =\n current.tplHostMetadata.tplStateStoreId;\n }\n setRealProperties(element, current.properties);\n bindListeners(element, current.events, current.runtimeContext);\n if (current.tplHostMetadata) {\n // 先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n element.$$tplStateStore = getTplStateStore(\n {\n tplStateStoreId: current.tplHostMetadata.tplStateStoreId,\n tplStateStoreMap: current.runtimeContext.tplStateStoreMap,\n },\n \"mount\"\n );\n }\n bindTemplateProxy(current);\n\n if (current.portal) {\n portalElements.push(element);\n } else if (current.return) {\n let currentReturn = current.return;\n while (currentReturn) {\n if (currentReturn.tag === RenderTag.ABSTRACT) {\n currentReturn = currentReturn.return;\n } else {\n if (!currentReturn.childElements) {\n currentReturn.childElements = [];\n }\n currentReturn.childElements.push(element);\n break;\n }\n }\n }\n }\n\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n // Append elements inside out\n if (\n currentReturn.tag !== RenderTag.ABSTRACT &&\n currentReturn.childElements\n ) {\n if (currentReturn.tag === RenderTag.ROOT) {\n currentReturn.container?.append(...currentReturn.childElements);\n } else {\n currentReturn.element!.append(...currentReturn.childElements);\n }\n currentReturn.childElements = undefined;\n }\n\n if (currentReturn.tag === RenderTag.ROOT && portalElements.length > 0) {\n const portal =\n typeof currentReturn.createPortal === \"function\"\n ? currentReturn.createPortal()\n : currentReturn.createPortal;\n portal.append(...portalElements);\n }\n\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n setTimeout(() => {\n window.DISABLE_REACT_FLUSH_SYNC = true;\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -70,7 +70,7 @@ var _realTimeDataInspect = require("./data/realTimeDataInspect.js");
70
70
  var _legacy_transform = require("./legacy_transform.js");
71
71
  const symbolForRootRuntimeContext = exports.symbolForRootRuntimeContext = Symbol.for("root.runtimeContext");
72
72
  async function renderUseBrick(useBrick, data, errorBoundary) {
73
- var _output$node, _output$node2;
73
+ var _brickNode;
74
74
  const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] = (0, _Renderer.createScopedRuntimeContext)({
75
75
  ...(useBrick[symbolForRootRuntimeContext] ?? (0, _Runtime._internalApiGetRuntimeContext)()),
76
76
  data,
@@ -92,17 +92,20 @@ async function renderUseBrick(useBrick, data, errorBoundary) {
92
92
  }, scopedRuntimeContext, rendererContext, [], {});
93
93
  const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
94
94
  await (0, _Renderer.postAsyncRender)(output, scopedRuntimeContext, scopedStores);
95
- if (((_output$node = output.node) === null || _output$node === void 0 ? void 0 : _output$node.tag) === _enums.RenderTag.PLACEHOLDER) {
96
- if (output.node.tracking) {
97
- throw new Error("The root brick of useBrick cannot be an ignored tracking control node");
95
+ let brickNode;
96
+ let currentNode = output.node;
97
+ while (currentNode) {
98
+ if (currentNode.tag === _enums.RenderTag.BRICK) {
99
+ brickNode = currentNode;
100
+ break;
98
101
  }
99
- output.node = undefined;
102
+ currentNode = currentNode.child;
100
103
  }
101
- if ((_output$node2 = output.node) !== null && _output$node2 !== void 0 && _output$node2.portal) {
104
+ if ((_brickNode = brickNode) !== null && _brickNode !== void 0 && _brickNode.portal) {
102
105
  throw new Error("The root brick of useBrick cannot be a portal brick");
103
106
  }
104
107
  renderRoot.child = output.node;
105
- const tagName = output.node ? output.node.type : null;
108
+ const tagName = brickNode ? brickNode.type : null;
106
109
  return {
107
110
  tagName,
108
111
  renderRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"secret_internals.js","names":["_lodash","require","_Runtime","_Renderer","_RendererContext","_resolveData","_computeRealValue","_mount","_enums","_isStrictMode","_CustomTemplates","_registerAppI18n","_utils","_loader","_routeMatchedMap","_realTimeDataInspect","_legacy_transform","symbolForRootRuntimeContext","exports","Symbol","for","renderUseBrick","useBrick","data","errorBoundary","_output$node","_output$node2","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","inUseBrick","tplStateStoreMap","Map","formStateStoreMap","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","strict","isStrictMode","output","renderBrick","scopedStores","postAsyncRender","node","PLACEHOLDER","tracking","Error","undefined","portal","child","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","meta","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","matched","matchRoute","route","path","exact","replaceRoutes","routes","forEach","index","Array","isArray","bricks","replaceBricks","brick","slots","slotConf","values","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","pick","getSnippetPreviewPath","snippetId","updateStoryboardBySnippet","snippetData","_snippetData$bricks","length","context","updateSnippetPreviewSettings","previewRouteIndex","findIndex","newPreviewRoute","menu","splice","getContextValue","tplStateStoreId","runtimeContext","tplStateStore","getTplStateStore","getValue","ctxStore","getAllContextValues","getAllValues","getBrickPackagesById","id","getBrickPackages","find","pkg","filePath","startsWith","loadBricks","loadBricksImperatively","loadEditors","editors","brickPackages","loadEditorsImperatively","getRenderId","_internalApiGetRenderId","getAddedContracts","updateStoryboardType","collectUsedContracts","updatedStoryboard","_storyboard$routes","snippetPreviewPath","currentRoute","addedContracts","contractApis","api","_storyboard$meta","_","namespaceId","match","contracts","some","contract","push","debugDataValue","debugData","routeId","getMatchedRoute","resolve","resolveData","cache","asyncComputeRealValue","value","getLegalRuntimeValue","options","app","overrideApp","location"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n RuntimeSnippet,\n ContextConf,\n BrickPackage,\n RouteConfOfBricks,\n} from \"@next-core/types\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRenderId,\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n getBrickPackages,\n} from \"./Runtime.js\";\nimport {\n createScopedRuntimeContext,\n postAsyncRender,\n renderBrick,\n} from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport type {\n DataValueOption,\n PreviewOption,\n PreviewStoryboardPatch,\n RenderRoot,\n RuntimeContext,\n DebugDataValue,\n RuntimeDataVale,\n RuntimeDataValueOption,\n} from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { isStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport {\n loadBricksImperatively,\n loadEditorsImperatively,\n} from \"@next-core/loader\";\nimport { getMatchedRoute } from \"./routeMatchedMap.js\";\n\nexport type { DataValueOption, RuntimeContext };\n\nexport const symbolForRootRuntimeContext = Symbol.for(\"root.runtimeContext\");\n\nexport interface RuntimeUseBrickConfWithRootSymbols extends UseSingleBrickConf {\n [symbolForRootRuntimeContext]?: RuntimeContext;\n}\n\nexport interface RenderUseBrickResult {\n tagName: string | null;\n renderRoot: RenderRoot;\n rendererContext: RendererContext;\n scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[];\n}\n\nexport async function renderUseBrick(\n useBrick: RuntimeUseBrickConfWithRootSymbols,\n data: unknown,\n errorBoundary?: boolean\n): Promise<RenderUseBrickResult> {\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext({\n ...(useBrick[symbolForRootRuntimeContext] ??\n _internalApiGetRuntimeContext()!),\n data,\n pendingPermissionsPreCheck: [],\n });\n\n scopedRuntimeContext.inUseBrick = true;\n scopedRuntimeContext.tplStateStoreMap ??= new Map();\n scopedRuntimeContext.formStateStoreMap ??= new Map();\n\n const rendererContext = new RendererContext(\"fragment\");\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n // Will set during `mountUseBrick`\n createPortal: null!,\n };\n\n const strict = isStrictMode();\n\n const output = await renderBrick(\n renderRoot,\n strict && !errorBoundary\n ? useBrick\n : {\n errorBoundary,\n ...useBrick,\n },\n scopedRuntimeContext,\n rendererContext,\n [],\n {}\n );\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n\n await postAsyncRender(output, scopedRuntimeContext, scopedStores);\n\n if (output.node?.tag === RenderTag.PLACEHOLDER) {\n if (output.node.tracking) {\n throw new Error(\n \"The root brick of useBrick cannot be an ignored tracking control node\"\n );\n }\n output.node = undefined;\n }\n\n if (output.node?.portal) {\n throw new Error(\"The root brick of useBrick cannot be a portal brick\");\n }\n\n renderRoot.child = output.node;\n\n const tagName = output.node ? output.node.type : null;\n\n return { tagName, renderRoot, rendererContext, scopedStores };\n}\n\nexport interface MountUseBrickResult {\n portal?: HTMLElement;\n}\n\nexport function mountUseBrick(\n { renderRoot, rendererContext, scopedStores }: RenderUseBrickResult,\n element: HTMLElement\n): MountUseBrickResult {\n let portal: HTMLElement | undefined;\n renderRoot.createPortal = () => {\n const portalRoot = document.querySelector(\n \"#portal-mount-point\"\n ) as HTMLElement;\n portal = document.createElement(\"div\");\n portalRoot.appendChild(portal);\n return portal;\n };\n\n mountTree(renderRoot, element);\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n\n return {\n portal,\n };\n}\n\nexport function unmountUseBrick(\n { rendererContext }: RenderUseBrickResult,\n mountResult: MountUseBrickResult\n): void {\n // if (mountResult.mainBrick) {\n // mountResult.mainBrick.unmount();\n // }\n if (mountResult.portal) {\n unmountTree(mountResult.portal);\n mountResult.portal.remove();\n }\n rendererContext.dispatchOnUnmount();\n rendererContext.dispose();\n}\n\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\n meta: {\n // Keep runtime fields such as `injectMenus`\n ...storyboard.meta,\n ...storyboardPatch.meta,\n },\n $$fulfilling: null,\n $$fulfilled: true,\n $$registerCustomTemplateProcessed: false,\n });\n registerAppI18n(storyboard);\n}\n\nexport function updateStoryboardByRoute(appId: string, newRoute: RouteConf) {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n let matched = false;\n\n function matchRoute(route: RouteConf) {\n return route.path === newRoute.path && !route.exact === !newRoute.exact;\n }\n\n function replaceRoutes(routes: RouteConf[]) {\n routes.forEach((route, index) => {\n if (route.type === \"routes\") {\n replaceRoutes(route.routes);\n } else {\n if (matchRoute(route)) {\n matched = true;\n routes[index] = newRoute;\n } else if (Array.isArray((route as RouteConfOfBricks).bricks)) {\n replaceBricks((route as RouteConfOfBricks).bricks);\n }\n }\n });\n }\n\n function replaceBricks(bricks: BrickConf[]) {\n bricks.forEach((brick) => {\n if (brick.slots) {\n for (const slotConf of Object.values(brick.slots)) {\n if (slotConf.type === \"routes\") {\n replaceRoutes(slotConf.routes);\n } else {\n replaceBricks(slotConf.bricks);\n }\n }\n }\n });\n }\n\n replaceRoutes(storyboard.routes);\n\n if (!matched) {\n storyboard.routes.unshift(newRoute);\n }\n}\n\nexport function updateStoryboardByTemplate(\n appId: string,\n newTemplate: CustomTemplate,\n settings: unknown\n): void {\n const tplName = `${appId}.${newTemplate.name}`;\n // customTemplateRegistry.delete(tplName);\n customTemplates.define(tplName, {\n bricks: newTemplate.bricks,\n proxy: newTemplate.proxy,\n state: newTemplate.state,\n });\n updateTemplatePreviewSettings(appId, newTemplate.name, settings);\n}\n\nexport function updateTemplatePreviewSettings(\n appId: string,\n templateId: string,\n settings?: unknown\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/template-preview/${templateId}`,\n [\n {\n brick: templateId,\n ...pick(\n settings,\n \"properties\",\n \"events\",\n \"lifeCycle\",\n \"context\",\n \"slots\",\n \"children\"\n ),\n },\n ]\n );\n}\n\nfunction getSnippetPreviewPath(snippetId: string): string {\n return `\\${APP.homepage}/_dev_only_/snippet-preview/${snippetId}`;\n}\n\nexport function updateStoryboardBySnippet(\n appId: string,\n snippetData: {\n snippetId: string;\n bricks?: BrickConf[];\n context?: ContextConf[];\n }\n): void {\n _updatePreviewSettings(\n appId,\n getSnippetPreviewPath(snippetData.snippetId),\n snippetData.bricks?.length ? snippetData.bricks : [{ brick: \"span\" }],\n snippetData.context\n );\n}\n\nexport const updateSnippetPreviewSettings = updateStoryboardBySnippet;\n\nfunction _updatePreviewSettings(\n appId: string,\n path: string,\n bricks: BrickConf[],\n context?: ContextConf[]\n) {\n const { routes } = _internalApiGetStoryboardInBootstrapData(appId)!;\n const previewRouteIndex = routes.findIndex((route) => route.path === path);\n const newPreviewRoute: RouteConf = {\n path,\n bricks,\n context,\n menu: false,\n exact: true,\n };\n if (previewRouteIndex === -1) {\n routes.unshift(newPreviewRoute);\n } else {\n routes.splice(previewRouteIndex, 1, newPreviewRoute);\n }\n}\n\nexport function getContextValue(\n name: string,\n { tplStateStoreId }: DataValueOption\n): unknown {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getValue(name);\n }\n\n return runtimeContext.ctxStore.getValue(name);\n}\n\nexport function getAllContextValues({\n tplStateStoreId,\n}: DataValueOption): Record<string, unknown> {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getAllValues();\n }\n\n return runtimeContext.ctxStore.getAllValues();\n}\n\nexport function getBrickPackagesById(id: string) {\n return getBrickPackages().find((pkg) =>\n pkg.id ? pkg.id === id : pkg.filePath.startsWith(`${id}/`)\n );\n}\n\n/**\n * Support loading v3 bricks only.\n */\nexport function loadBricks(bricks: string[]) {\n return loadBricksImperatively(bricks, getBrickPackages());\n}\n\n/**\n * Try the brick packages passed in, before using from bootstrap.\n */\nexport function loadEditors(\n editors: string[] | Set<string>,\n brickPackages?: BrickPackage[]\n) {\n return loadEditorsImperatively(editors, brickPackages ?? getBrickPackages());\n}\n\nexport function getRenderId() {\n return _internalApiGetRenderId();\n}\n\nexport async function getAddedContracts(\n storyboardPatch: PreviewStoryboardPatch,\n { appId, updateStoryboardType, collectUsedContracts }: PreviewOption\n): Promise<string[]> {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId);\n let updatedStoryboard;\n\n // 拿到更新部分的 storyboard 配置,然后扫描一遍,找到新增的 contracts\n if (updateStoryboardType === \"route\") {\n updatedStoryboard = {\n routes: [storyboardPatch as RouteConf],\n } as Storyboard;\n } else if (updateStoryboardType === \"template\") {\n updatedStoryboard = {\n meta: {\n customTemplates: [storyboardPatch as CustomTemplate],\n },\n } as Storyboard;\n } else if (updateStoryboardType === \"snippet\") {\n // snippet 是放在挂载 route 里预览,通过 previewPath 拿到当前修改 route\n const snippetPreviewPath = getSnippetPreviewPath(\n (storyboardPatch as RuntimeSnippet).snippetId\n );\n const currentRoute = storyboard?.routes?.find(\n (route) => route.path === snippetPreviewPath\n );\n\n updatedStoryboard = {\n routes: [currentRoute],\n } as Storyboard;\n }\n\n const addedContracts: string[] = [];\n\n if (updatedStoryboard && collectUsedContracts) {\n const contractApis = await collectUsedContracts(updatedStoryboard);\n\n contractApis.forEach((api: string) => {\n const [_, namespaceId, name] = api.match(\n /(.*)@(.*):\\d\\.\\d\\.\\d/\n ) as string[];\n\n if (\n !storyboard?.meta?.contracts?.some(\n (contract) =>\n contract.namespaceId === namespaceId && contract.name === name\n )\n ) {\n addedContracts.push(api);\n }\n });\n }\n\n return addedContracts;\n}\n\nexport async function debugDataValue(\n debugData: DebugDataValue,\n { tplStateStoreId, routeId }: DataValueOption\n): Promise<any> {\n const runtimeContext = {\n ..._internalApiGetRuntimeContext()!,\n tplStateStoreId,\n match: getMatchedRoute(routeId as string),\n };\n\n if (debugData.resolve) {\n return resolveData(debugData.resolve!, runtimeContext, { cache: \"reload\" });\n }\n\n return asyncComputeRealValue(debugData.value, runtimeContext);\n}\n\nexport function getLegalRuntimeValue(\n options?: RuntimeDataValueOption\n): RuntimeDataVale {\n const runtimeContext = _internalApiGetRuntimeContext();\n\n return {\n app: runtimeContext?.overrideApp ?? runtimeContext?.app,\n location: pick(location, [\"href\", \"origin\", \"hostname\", \"host\"]),\n ...pick(runtimeContext, [\"query\", \"sys\"]),\n match: getMatchedRoute(options?.routeId as string),\n } as RuntimeDataVale;\n}\n\nexport {\n setRealTimeDataInspectRoot,\n addRealTimeDataInspectHook,\n} from \"./data/realTimeDataInspect.js\";\n\nexport {\n legacyDoTransform,\n legacyTransformProperties,\n legacyTransformIntermediateData,\n} from \"./legacy_transform.js\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"secret_internals.js","names":["_lodash","require","_Runtime","_Renderer","_RendererContext","_resolveData","_computeRealValue","_mount","_enums","_isStrictMode","_CustomTemplates","_registerAppI18n","_utils","_loader","_routeMatchedMap","_realTimeDataInspect","_legacy_transform","symbolForRootRuntimeContext","exports","Symbol","for","renderUseBrick","useBrick","data","errorBoundary","_brickNode","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","inUseBrick","tplStateStoreMap","Map","formStateStoreMap","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","strict","isStrictMode","output","renderBrick","scopedStores","postAsyncRender","brickNode","currentNode","node","BRICK","child","portal","Error","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","meta","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","matched","matchRoute","route","path","exact","replaceRoutes","routes","forEach","index","Array","isArray","bricks","replaceBricks","brick","slots","slotConf","values","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","pick","getSnippetPreviewPath","snippetId","updateStoryboardBySnippet","snippetData","_snippetData$bricks","length","context","updateSnippetPreviewSettings","previewRouteIndex","findIndex","newPreviewRoute","menu","splice","getContextValue","tplStateStoreId","runtimeContext","tplStateStore","getTplStateStore","getValue","ctxStore","getAllContextValues","getAllValues","getBrickPackagesById","id","getBrickPackages","find","pkg","filePath","startsWith","loadBricks","loadBricksImperatively","loadEditors","editors","brickPackages","loadEditorsImperatively","getRenderId","_internalApiGetRenderId","getAddedContracts","updateStoryboardType","collectUsedContracts","updatedStoryboard","_storyboard$routes","snippetPreviewPath","currentRoute","addedContracts","contractApis","api","_storyboard$meta","_","namespaceId","match","contracts","some","contract","push","debugDataValue","debugData","routeId","getMatchedRoute","resolve","resolveData","cache","asyncComputeRealValue","value","getLegalRuntimeValue","options","app","overrideApp","location"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n RuntimeSnippet,\n ContextConf,\n BrickPackage,\n RouteConfOfBricks,\n} from \"@next-core/types\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRenderId,\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n getBrickPackages,\n} from \"./Runtime.js\";\nimport {\n createScopedRuntimeContext,\n postAsyncRender,\n renderBrick,\n} from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport type {\n DataValueOption,\n PreviewOption,\n PreviewStoryboardPatch,\n RenderRoot,\n RuntimeContext,\n DebugDataValue,\n RuntimeDataVale,\n RuntimeDataValueOption,\n RenderBrick,\n RenderChildNode,\n} from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { isStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport {\n loadBricksImperatively,\n loadEditorsImperatively,\n} from \"@next-core/loader\";\nimport { getMatchedRoute } from \"./routeMatchedMap.js\";\n\nexport type { DataValueOption, RuntimeContext };\n\nexport const symbolForRootRuntimeContext = Symbol.for(\"root.runtimeContext\");\n\nexport interface RuntimeUseBrickConfWithRootSymbols extends UseSingleBrickConf {\n [symbolForRootRuntimeContext]?: RuntimeContext;\n}\n\nexport interface RenderUseBrickResult {\n tagName: string | null;\n renderRoot: RenderRoot;\n rendererContext: RendererContext;\n scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[];\n}\n\nexport async function renderUseBrick(\n useBrick: RuntimeUseBrickConfWithRootSymbols,\n data: unknown,\n errorBoundary?: boolean\n): Promise<RenderUseBrickResult> {\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext({\n ...(useBrick[symbolForRootRuntimeContext] ??\n _internalApiGetRuntimeContext()!),\n data,\n pendingPermissionsPreCheck: [],\n });\n\n scopedRuntimeContext.inUseBrick = true;\n scopedRuntimeContext.tplStateStoreMap ??= new Map();\n scopedRuntimeContext.formStateStoreMap ??= new Map();\n\n const rendererContext = new RendererContext(\"fragment\");\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n // Will set during `mountUseBrick`\n createPortal: null!,\n };\n\n const strict = isStrictMode();\n\n const output = await renderBrick(\n renderRoot,\n strict && !errorBoundary\n ? useBrick\n : {\n errorBoundary,\n ...useBrick,\n },\n scopedRuntimeContext,\n rendererContext,\n [],\n {}\n );\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n\n await postAsyncRender(output, scopedRuntimeContext, scopedStores);\n\n let brickNode: RenderBrick | undefined;\n let currentNode: RenderChildNode | undefined = output.node;\n while (currentNode) {\n if (currentNode.tag === RenderTag.BRICK) {\n brickNode = currentNode;\n break;\n }\n currentNode = currentNode.child;\n }\n\n if (brickNode?.portal) {\n throw new Error(\"The root brick of useBrick cannot be a portal brick\");\n }\n\n renderRoot.child = output.node;\n\n const tagName = brickNode ? brickNode.type : null;\n\n return { tagName, renderRoot, rendererContext, scopedStores };\n}\n\nexport interface MountUseBrickResult {\n portal?: HTMLElement;\n}\n\nexport function mountUseBrick(\n { renderRoot, rendererContext, scopedStores }: RenderUseBrickResult,\n element: HTMLElement\n): MountUseBrickResult {\n let portal: HTMLElement | undefined;\n renderRoot.createPortal = () => {\n const portalRoot = document.querySelector(\n \"#portal-mount-point\"\n ) as HTMLElement;\n portal = document.createElement(\"div\");\n portalRoot.appendChild(portal);\n return portal;\n };\n\n mountTree(renderRoot, element);\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n\n return {\n portal,\n };\n}\n\nexport function unmountUseBrick(\n { rendererContext }: RenderUseBrickResult,\n mountResult: MountUseBrickResult\n): void {\n // if (mountResult.mainBrick) {\n // mountResult.mainBrick.unmount();\n // }\n if (mountResult.portal) {\n unmountTree(mountResult.portal);\n mountResult.portal.remove();\n }\n rendererContext.dispatchOnUnmount();\n rendererContext.dispose();\n}\n\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\n meta: {\n // Keep runtime fields such as `injectMenus`\n ...storyboard.meta,\n ...storyboardPatch.meta,\n },\n $$fulfilling: null,\n $$fulfilled: true,\n $$registerCustomTemplateProcessed: false,\n });\n registerAppI18n(storyboard);\n}\n\nexport function updateStoryboardByRoute(appId: string, newRoute: RouteConf) {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n let matched = false;\n\n function matchRoute(route: RouteConf) {\n return route.path === newRoute.path && !route.exact === !newRoute.exact;\n }\n\n function replaceRoutes(routes: RouteConf[]) {\n routes.forEach((route, index) => {\n if (route.type === \"routes\") {\n replaceRoutes(route.routes);\n } else {\n if (matchRoute(route)) {\n matched = true;\n routes[index] = newRoute;\n } else if (Array.isArray((route as RouteConfOfBricks).bricks)) {\n replaceBricks((route as RouteConfOfBricks).bricks);\n }\n }\n });\n }\n\n function replaceBricks(bricks: BrickConf[]) {\n bricks.forEach((brick) => {\n if (brick.slots) {\n for (const slotConf of Object.values(brick.slots)) {\n if (slotConf.type === \"routes\") {\n replaceRoutes(slotConf.routes);\n } else {\n replaceBricks(slotConf.bricks);\n }\n }\n }\n });\n }\n\n replaceRoutes(storyboard.routes);\n\n if (!matched) {\n storyboard.routes.unshift(newRoute);\n }\n}\n\nexport function updateStoryboardByTemplate(\n appId: string,\n newTemplate: CustomTemplate,\n settings: unknown\n): void {\n const tplName = `${appId}.${newTemplate.name}`;\n // customTemplateRegistry.delete(tplName);\n customTemplates.define(tplName, {\n bricks: newTemplate.bricks,\n proxy: newTemplate.proxy,\n state: newTemplate.state,\n });\n updateTemplatePreviewSettings(appId, newTemplate.name, settings);\n}\n\nexport function updateTemplatePreviewSettings(\n appId: string,\n templateId: string,\n settings?: unknown\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/template-preview/${templateId}`,\n [\n {\n brick: templateId,\n ...pick(\n settings,\n \"properties\",\n \"events\",\n \"lifeCycle\",\n \"context\",\n \"slots\",\n \"children\"\n ),\n },\n ]\n );\n}\n\nfunction getSnippetPreviewPath(snippetId: string): string {\n return `\\${APP.homepage}/_dev_only_/snippet-preview/${snippetId}`;\n}\n\nexport function updateStoryboardBySnippet(\n appId: string,\n snippetData: {\n snippetId: string;\n bricks?: BrickConf[];\n context?: ContextConf[];\n }\n): void {\n _updatePreviewSettings(\n appId,\n getSnippetPreviewPath(snippetData.snippetId),\n snippetData.bricks?.length ? snippetData.bricks : [{ brick: \"span\" }],\n snippetData.context\n );\n}\n\nexport const updateSnippetPreviewSettings = updateStoryboardBySnippet;\n\nfunction _updatePreviewSettings(\n appId: string,\n path: string,\n bricks: BrickConf[],\n context?: ContextConf[]\n) {\n const { routes } = _internalApiGetStoryboardInBootstrapData(appId)!;\n const previewRouteIndex = routes.findIndex((route) => route.path === path);\n const newPreviewRoute: RouteConf = {\n path,\n bricks,\n context,\n menu: false,\n exact: true,\n };\n if (previewRouteIndex === -1) {\n routes.unshift(newPreviewRoute);\n } else {\n routes.splice(previewRouteIndex, 1, newPreviewRoute);\n }\n}\n\nexport function getContextValue(\n name: string,\n { tplStateStoreId }: DataValueOption\n): unknown {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getValue(name);\n }\n\n return runtimeContext.ctxStore.getValue(name);\n}\n\nexport function getAllContextValues({\n tplStateStoreId,\n}: DataValueOption): Record<string, unknown> {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getAllValues();\n }\n\n return runtimeContext.ctxStore.getAllValues();\n}\n\nexport function getBrickPackagesById(id: string) {\n return getBrickPackages().find((pkg) =>\n pkg.id ? pkg.id === id : pkg.filePath.startsWith(`${id}/`)\n );\n}\n\n/**\n * Support loading v3 bricks only.\n */\nexport function loadBricks(bricks: string[]) {\n return loadBricksImperatively(bricks, getBrickPackages());\n}\n\n/**\n * Try the brick packages passed in, before using from bootstrap.\n */\nexport function loadEditors(\n editors: string[] | Set<string>,\n brickPackages?: BrickPackage[]\n) {\n return loadEditorsImperatively(editors, brickPackages ?? getBrickPackages());\n}\n\nexport function getRenderId() {\n return _internalApiGetRenderId();\n}\n\nexport async function getAddedContracts(\n storyboardPatch: PreviewStoryboardPatch,\n { appId, updateStoryboardType, collectUsedContracts }: PreviewOption\n): Promise<string[]> {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId);\n let updatedStoryboard;\n\n // 拿到更新部分的 storyboard 配置,然后扫描一遍,找到新增的 contracts\n if (updateStoryboardType === \"route\") {\n updatedStoryboard = {\n routes: [storyboardPatch as RouteConf],\n } as Storyboard;\n } else if (updateStoryboardType === \"template\") {\n updatedStoryboard = {\n meta: {\n customTemplates: [storyboardPatch as CustomTemplate],\n },\n } as Storyboard;\n } else if (updateStoryboardType === \"snippet\") {\n // snippet 是放在挂载 route 里预览,通过 previewPath 拿到当前修改 route\n const snippetPreviewPath = getSnippetPreviewPath(\n (storyboardPatch as RuntimeSnippet).snippetId\n );\n const currentRoute = storyboard?.routes?.find(\n (route) => route.path === snippetPreviewPath\n );\n\n updatedStoryboard = {\n routes: [currentRoute],\n } as Storyboard;\n }\n\n const addedContracts: string[] = [];\n\n if (updatedStoryboard && collectUsedContracts) {\n const contractApis = await collectUsedContracts(updatedStoryboard);\n\n contractApis.forEach((api: string) => {\n const [_, namespaceId, name] = api.match(\n /(.*)@(.*):\\d\\.\\d\\.\\d/\n ) as string[];\n\n if (\n !storyboard?.meta?.contracts?.some(\n (contract) =>\n contract.namespaceId === namespaceId && contract.name === name\n )\n ) {\n addedContracts.push(api);\n }\n });\n }\n\n return addedContracts;\n}\n\nexport async function debugDataValue(\n debugData: DebugDataValue,\n { tplStateStoreId, routeId }: DataValueOption\n): Promise<any> {\n const runtimeContext = {\n ..._internalApiGetRuntimeContext()!,\n tplStateStoreId,\n match: getMatchedRoute(routeId as string),\n };\n\n if (debugData.resolve) {\n return resolveData(debugData.resolve!, runtimeContext, { cache: \"reload\" });\n }\n\n return asyncComputeRealValue(debugData.value, runtimeContext);\n}\n\nexport function getLegalRuntimeValue(\n options?: RuntimeDataValueOption\n): RuntimeDataVale {\n const runtimeContext = _internalApiGetRuntimeContext();\n\n return {\n app: runtimeContext?.overrideApp ?? runtimeContext?.app,\n location: pick(location, [\"href\", \"origin\", \"hostname\", \"host\"]),\n ...pick(runtimeContext, [\"query\", \"sys\"]),\n match: getMatchedRoute(options?.routeId as string),\n } as RuntimeDataVale;\n}\n\nexport {\n setRealTimeDataInspectRoot,\n addRealTimeDataInspectHook,\n} from \"./data/realTimeDataInspect.js\";\n\nexport {\n legacyDoTransform,\n legacyTransformProperties,\n legacyTransformIntermediateData,\n} from \"./legacy_transform.js\";\n"],"mappings":"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","ignoreList":[]}
@@ -101,7 +101,7 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
101
101
  if (route.type === "routes") {
102
102
  newOutput = await renderRoutes(returnNode, route.routes, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
103
103
  } else {
104
- newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, undefined, initialTracker);
104
+ newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
105
105
  }
106
106
  mergeRenderOutput(output, newOutput);
107
107
  appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);
@@ -110,27 +110,21 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
110
110
  }
111
111
  return output;
112
112
  }
113
- export async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, initialTracker) {
113
+ export async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
114
114
  setupRootRuntimeContext(bricks, runtimeContext, true);
115
115
  const output = getEmptyRenderOutput();
116
- const kPath = keyPath !== null && keyPath !== void 0 ? keyPath : [];
117
116
  // 多个构件并行异步转换,但转换的结果按原顺序串行合并。
118
- const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, kPath.concat(index), tplStack && new Map(tplStack), initialTracker)));
119
- rendered.forEach((item, index) => {
120
- if (item.hasTrackingControls) {
121
- // Memoize a render node before it's been merged.
122
- rendererContext.memoize(slotId, kPath.concat(index), item.node, returnNode);
123
- }
117
+ const rendered = await Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)));
118
+ rendered.forEach(item => {
124
119
  mergeRenderOutput(output, item);
125
120
  });
126
121
  return output;
127
122
  }
128
123
  export async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId) {
129
- let keyPath = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : [];
130
- let tplStack = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : new Map();
131
- let initialTracker = arguments.length > 9 ? arguments[9] : undefined;
124
+ let tplStack = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : new Map();
125
+ let initialTracker = arguments.length > 8 ? arguments[8] : undefined;
132
126
  try {
133
- return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, keyPath, tplStack, initialTracker);
127
+ return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
134
128
  } catch (error) {
135
129
  if (brickConf.errorBoundary) {
136
130
  // eslint-disable-next-line no-console
@@ -144,7 +138,7 @@ export async function renderBrick(returnNode, brickConf, _runtimeContext, render
144
138
  }
145
139
  }
146
140
  }
147
- async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, keyPath, tplStack, initialTracker) {
141
+ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
148
142
  var _hooks$checkPermissio2, _runtimeContext$app;
149
143
  const output = getEmptyRenderOutput();
150
144
  if (!brickConf.brick) {
@@ -168,6 +162,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
168
162
  if (isGeneralizedTrackAll(brickIf)) {
169
163
  return renderBrick(returnNode, {
170
164
  brick: ":if",
165
+ iid: brickConf.iid,
171
166
  dataSource: brickIf,
172
167
  // `permissionsPreCheck` maybe required before computing `if`.
173
168
  permissionsPreCheck,
@@ -182,7 +177,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
182
177
  ...acc,
183
178
  [symbol]: brickConf[symbol]
184
179
  }), {})
185
- }, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, keyPath, tplStack, initialTracker);
180
+ }, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
186
181
  }
187
182
  const tplStateStoreId = brickConf[symbolForTplStateStoreId];
188
183
  const formStateStoreId = brickConf[symbolForFormStateStoreId];
@@ -244,26 +239,42 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
244
239
 
245
240
  // Then, get the bricks in that matched slot.
246
241
  const bricks = slots && hasOwnProperty(slots, slot) && ((_slots$slot = slots[slot]) === null || _slots$slot === void 0 ? void 0 : _slots$slot.bricks);
242
+ const output = getEmptyRenderOutput();
243
+ const abstractNode = {
244
+ tag: RenderTag.ABSTRACT,
245
+ return: returnNode,
246
+ iid: brickConf.iid
247
+ };
248
+ output.node = abstractNode;
247
249
  if (!Array.isArray(bricks)) {
248
- return getEmptyRenderOutput();
250
+ return output;
249
251
  }
252
+ let childrenOutput;
250
253
  switch (brickName) {
251
254
  case ":forEach":
252
255
  {
253
256
  if (!Array.isArray(computedDataSource)) {
254
- return getEmptyRenderOutput();
257
+ break;
255
258
  }
256
- return renderForEach(returnNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, tracker);
259
+ childrenOutput = await renderForEach(abstractNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
260
+ break;
257
261
  }
258
262
  case ":if":
259
263
  case ":switch":
260
264
  {
261
- return renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, tracker);
265
+ childrenOutput = await renderBricks(abstractNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
262
266
  }
263
267
  }
268
+ if (childrenOutput) {
269
+ abstractNode.child = childrenOutput.node;
270
+ mergeRenderOutput(output, {
271
+ ...childrenOutput,
272
+ node: undefined
273
+ });
274
+ }
275
+ return output;
264
276
  };
265
277
  const renderControlNode = async _ref => {
266
- var _ref2, _ref2$node;
267
278
  let {
268
279
  type,
269
280
  runtimeContext,
@@ -304,14 +315,9 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
304
315
  throw new Error(`Maximum rerender stack overflowed (iid: ${brickConf.iid})`);
305
316
  }
306
317
  }
307
- (_ref2$node = (_ref2 = rawOutput).node) !== null && _ref2$node !== void 0 ? _ref2$node : _ref2.node = {
308
- tag: RenderTag.PLACEHOLDER,
309
- return: returnNode,
310
- tracking
311
- };
312
318
  return rawOutput;
313
319
  };
314
- const controlledOutput = await renderControlNode({
320
+ let controlledOutput = await renderControlNode({
315
321
  type: "initial",
316
322
  runtimeContext
317
323
  });
@@ -321,7 +327,6 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
321
327
  } = (_brickConf$lifeCycle = brickConf.lifeCycle) !== null && _brickConf$lifeCycle !== void 0 ? _brickConf$lifeCycle : {};
322
328
  if (tracking) {
323
329
  var _runtimeBrick$dispose;
324
- controlledOutput.hasTrackingControls = true;
325
330
  let renderId = 0;
326
331
  const listener = async () => {
327
332
  const currentRenderId = ++renderId;
@@ -342,7 +347,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
342
347
  }
343
348
  }));
344
349
  }
345
- rendererContext.reRender(slotId, keyPath, reControlledOutput.node, returnNode);
350
+ rendererContext.reRender(returnNode, reControlledOutput.node, controlledOutput.node);
351
+ controlledOutput = reControlledOutput;
346
352
  if (onMount) {
347
353
  listenerFactory(onMount, scopedRuntimeContext)(new CustomEvent("mount", {
348
354
  detail: {
@@ -360,7 +366,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
360
366
  leading: true,
361
367
  trailing: true
362
368
  });
363
- const runtimeBrick = returnNode.tag === RenderTag.BRICK ? returnNode : null;
369
+ const runtimeBrick = returnNode.tag === RenderTag.ROOT ? null : returnNode;
364
370
  const disposes = runtimeBrick ? (_runtimeBrick$dispose = runtimeBrick.disposes) !== null && _runtimeBrick$dispose !== void 0 ? _runtimeBrick$dispose : runtimeBrick.disposes = [] : [];
365
371
  if (contextNames) {
366
372
  for (const contextName of contextNames) {
@@ -527,11 +533,17 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
527
533
  return;
528
534
  }
529
535
  const routeSlotFromIndexToSlotId = new Map();
530
- const rendered = await Promise.all(Object.entries(slots).map((_ref3, index) => {
531
- let [childSlotId, slotConf] = _ref3;
536
+ const rendered = await Promise.all(Object.entries(slots).map(async (_ref2, index) => {
537
+ let [childSlotId, slotConf] = _ref2;
532
538
  if (slotConf.type !== "routes") {
533
- return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, undefined, initialTracker);
539
+ return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, initialTracker);
534
540
  }
541
+ let lastOutput = getEmptyRenderOutput();
542
+ const abstractNode = {
543
+ tag: RenderTag.ABSTRACT,
544
+ return: brick
545
+ };
546
+ lastOutput.node = abstractNode;
535
547
  const parentRoute = parentRoutes[parentRoutes.length - 1];
536
548
  if (parentRoute !== null && parentRoute !== void 0 && parentRoute.incrementalSubRoutes) {
537
549
  routeSlotFromIndexToSlotId.set(index, childSlotId);
@@ -558,8 +570,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
558
570
  let failed = false;
559
571
  let incrementalOutput;
560
572
  let scopedStores = [];
573
+ const newOutput = getEmptyRenderOutput();
574
+ const newControlNode = {
575
+ tag: RenderTag.ABSTRACT,
576
+ return: brick
577
+ };
578
+ newOutput.node = newControlNode;
561
579
  try {
562
- incrementalOutput = await renderRoutes(brick, slotConf.routes, scopedRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, true);
580
+ incrementalOutput = await renderRoutes(newControlNode, slotConf.routes, scopedRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, true);
563
581
 
564
582
  // Do not ignore incremental rendering even if all sub-routes are missed.
565
583
  // Since parent route is matched.
@@ -571,11 +589,10 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
571
589
  scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
572
590
  await postAsyncRender(incrementalOutput, scopedRuntimeContext, [scopedRuntimeContext.ctxStore, ...scopedStores]);
573
591
  }
574
- await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
575
592
  } catch (error) {
576
593
  // eslint-disable-next-line no-console
577
594
  console.error("Incremental sub-router failed:", error);
578
- const result = await rendererContext.reCatch(error, brick);
595
+ const result = await rendererContext.reCatch(error, newControlNode);
579
596
  if (!result) {
580
597
  return true;
581
598
  }
@@ -583,11 +600,16 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
583
600
  failed,
584
601
  output: incrementalOutput
585
602
  } = result);
586
-
587
- // Assert: no errors will be throw
588
- await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
589
603
  }
590
- rendererContext.reRender(childSlotId, [], incrementalOutput.node, brick);
604
+ newControlNode.child = incrementalOutput.node;
605
+ mergeRenderOutput(newOutput, {
606
+ ...incrementalOutput,
607
+ node: undefined
608
+ });
609
+ // Assert: no errors will be throw
610
+ await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
611
+ rendererContext.reRender(brick, newControlNode, lastOutput.node);
612
+ lastOutput = newOutput;
591
613
  if (!failed) {
592
614
  scopedRuntimeContext.ctxStore.mountAsyncData(incrementalOutput.route);
593
615
  for (const store of scopedStores) {
@@ -599,7 +621,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
599
621
  return true;
600
622
  });
601
623
  }
602
- return renderRoutes(brick, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
624
+ const routesOutput = await renderRoutes(abstractNode, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
625
+ abstractNode.child = routesOutput.node;
626
+ mergeRenderOutput(output, {
627
+ ...routesOutput,
628
+ node: undefined
629
+ });
630
+ appendMenuRequestNode(menuRequestReturnNode, output.menuRequestNode = routesOutput.menuRequestNode);
631
+ return lastOutput;
603
632
  }));
604
633
  const childrenOutput = {
605
634
  ...output,
@@ -607,11 +636,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
607
636
  blockingList: [],
608
637
  menuRequestNode: undefined
609
638
  };
610
- rendered.forEach((item, index) => {
611
- if (routeSlotFromIndexToSlotId.has(index)) {
612
- // Memoize a render node before it's been merged.
613
- rendererContext.memoize(routeSlotFromIndexToSlotId.get(index), [], item.node, brick);
614
- }
639
+ rendered.forEach(item => {
615
640
  mergeRenderOutput(childrenOutput, item);
616
641
  mergeSiblingRenderMenuRequest(childrenOutput, item);
617
642
  });
@@ -638,22 +663,18 @@ function ensureValidControlBrick(brick) {
638
663
  throw new Error(`Unknown storyboard control node: "${brick}"`);
639
664
  }
640
665
  }
641
- async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, initialTracker) {
666
+ async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
642
667
  const output = getEmptyRenderOutput();
643
668
  const size = dataSource.length;
644
- const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map((brickConf, j) => renderBrick(returnNode, brickConf, {
669
+ const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, {
645
670
  ...runtimeContext,
646
671
  forEachItem: item,
647
672
  forEachIndex: i,
648
673
  forEachSize: size
649
- }, rendererContext, parentRoutes, menuRequestReturnNode, slotId, keyPath.concat(i * size + j), tplStack && new Map(tplStack), initialTracker)))));
674
+ }, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)))));
650
675
 
651
676
  // 多层构件并行异步转换,但转换的结果按原顺序串行合并。
652
- rendered.flat().forEach((item, index) => {
653
- if (item.hasTrackingControls) {
654
- // Memoize a render node before it's been merged.
655
- rendererContext.memoize(slotId, keyPath.concat(index), item.node, returnNode);
656
- }
677
+ rendered.flat().forEach(item => {
657
678
  mergeRenderOutput(output, item);
658
679
  });
659
680
  return output;
@@ -700,7 +721,6 @@ function mergeRenderOutput(output, newOutput) {
700
721
  blockingList,
701
722
  node,
702
723
  menuRequestNode,
703
- hasTrackingControls,
704
724
  ...rest
705
725
  } = newOutput;
706
726
  output.blockingList.push(...blockingList);