@next-core/runtime 1.0.7 → 1.1.0

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 (35) hide show
  1. package/dist/cjs/CustomTemplates.js +11 -7
  2. package/dist/cjs/CustomTemplates.js.map +1 -1
  3. package/dist/cjs/internal/Renderer.js +13 -5
  4. package/dist/cjs/internal/Renderer.js.map +1 -1
  5. package/dist/cjs/internal/RendererContext.js +1 -1
  6. package/dist/cjs/internal/RendererContext.js.map +1 -1
  7. package/dist/cjs/internal/compute/evaluate.js +19 -25
  8. package/dist/cjs/internal/compute/evaluate.js.map +1 -1
  9. package/dist/cjs/internal/data/FlowApi.js +1 -1
  10. package/dist/cjs/internal/data/FlowApi.js.map +1 -1
  11. package/dist/cjs/internal/data/resolveData.js +1 -1
  12. package/dist/cjs/internal/data/resolveData.js.map +1 -1
  13. package/dist/cjs/internal/secret_internals.js +26 -10
  14. package/dist/cjs/internal/secret_internals.js.map +1 -1
  15. package/dist/cjs/isStrictMode.js +23 -0
  16. package/dist/cjs/isStrictMode.js.map +1 -0
  17. package/dist/esm/CustomTemplates.js +12 -7
  18. package/dist/esm/CustomTemplates.js.map +1 -1
  19. package/dist/esm/internal/Renderer.js +13 -5
  20. package/dist/esm/internal/Renderer.js.map +1 -1
  21. package/dist/esm/internal/RendererContext.js +1 -1
  22. package/dist/esm/internal/RendererContext.js.map +1 -1
  23. package/dist/esm/internal/compute/evaluate.js +19 -25
  24. package/dist/esm/internal/compute/evaluate.js.map +1 -1
  25. package/dist/esm/internal/data/FlowApi.js +1 -1
  26. package/dist/esm/internal/data/FlowApi.js.map +1 -1
  27. package/dist/esm/internal/data/resolveData.js +1 -1
  28. package/dist/esm/internal/data/resolveData.js.map +1 -1
  29. package/dist/esm/internal/secret_internals.js +24 -11
  30. package/dist/esm/internal/secret_internals.js.map +1 -1
  31. package/dist/esm/isStrictMode.js +19 -0
  32. package/dist/esm/isStrictMode.js.map +1 -0
  33. package/dist/types/internal/secret_internals.d.ts +1 -0
  34. package/dist/types/isStrictMode.d.ts +3 -0
  35. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTemplates.js","names":["uniq","allowedNativeProps","Set","_registry","WeakMap","CustomTemplateRegistry","constructor","_classPrivateFieldInitSpec","writable","value","Map","define","tagName","_constructor$proxy$pr","_constructor$proxy","_compatibleConstructo","_compatibleConstructo2","registered","_classPrivateFieldGet","has","console","warn","concat","customElements","get","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","Object","entries","asVariable","push","mergeProperty","refTransform","error","ref","compatibleConstructor","_objectSpread","fromEntries","state","map","item","expose","tpl","name","set","exposedStates","getExposedStates","proxyMethods","methods","props","entry","nativeProp","find","prop","HTMLElement","prototype","undefined","Error","TplElement","$$typeof","_dev_only_definedProperties","_dev_only_definedMethods","$$getElementByRef","_this$$$tplStateStore","_this$$$tplStateStore2","_this$$$tplStateStore3","_this$$$tplStateStore4","$$tplStateStore","hostBrick","tplHostMetadata","internalBricksByRef","element","connectedCallback","shadowRoot","attachShadow","mode","fragment","document","createDocumentFragment","style","createElement","textContent","slot","appendChild","disconnectedCallback","_loop","propName","some","defineProperty","getValue","_this$$$tplStateStore5","updateValue","enumerable","_ret","_loop2","from","to","_to$refProperty","refProperty","_this$$$getElementByR","call","_to$refProperty2","_loop3","_to$refMethod","refMethod","arguments","customTemplates","_state$filter$map","filter"],"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\";\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 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 // For existed TPL usage, treat it as a STATE.\n legacyTplVariables.push(key);\n // eslint-disable-next-line no-console\n console.warn(\n \"Template `asVariable` with `TPL.*` is deprecated and will be dropped in v3:\",\n tagName,\n 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 not supported 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 ? constructor.state.map((item) => ({\n // For existed templates, make `expose` defaults to true.\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 nativeProp = props\n .concat(methods)\n .find(\n (prop) => prop in HTMLElement.prototype && !allowedNativeProps.has(prop)\n );\n if (nativeProp !== undefined) {\n throw new Error(\n `In custom template \"${tagName}\", \"${nativeProp}\" is a native HTMLElement property, and should be avoid to be used as a brick property or method.`\n );\n }\n\n if (registered) {\n return;\n }\n\n class TplElement extends HTMLElement {\n get $$typeof() {\n return \"custom-template\" as const;\n }\n\n static get _dev_only_definedProperties(): string[] {\n return props;\n }\n\n static get _dev_only_definedMethods(): string[] {\n return methods;\n }\n\n $$getElementByRef(this: RuntimeBrickElement, ref: string) {\n return this.$$tplStateStore?.hostBrick?.tplHostMetadata?.internalBricksByRef.get(\n ref\n )?.element;\n }\n\n connectedCallback() {\n let shadowRoot = this.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n const fragment = document.createDocumentFragment();\n const style = document.createElement(\"style\");\n style.textContent = \":host{display:block}:host([hidden]){display:none}\";\n const slot = document.createElement(\"slot\");\n fragment.appendChild(style);\n fragment.appendChild(slot);\n shadowRoot.appendChild(fragment);\n }\n\n disconnectedCallback() {\n if (this.shadowRoot) {\n this.shadowRoot.textContent = \"\";\n }\n }\n }\n\n for (const propName of exposedStates) {\n if (validProxyProps.some((entry) => entry[0] === propName)) {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot define an exposed state that is also a proxy property: \"${propName}\" in ${tagName}`\n );\n continue;\n }\n Object.defineProperty(TplElement.prototype, propName, {\n get(this: RuntimeBrickElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$$tplStateStore!.getValue(propName);\n },\n set(this: RuntimeBrickElement, value: unknown) {\n // 在 mount 过程中,先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n this.$$tplStateStore?.updateValue(propName, value, \"replace\");\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of validProxyProps) {\n Object.defineProperty(TplElement.prototype, from, {\n get(this: TplElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n unknown\n >;\n return element[to.refProperty ?? from];\n },\n set(this: TplElement, value: unknown) {\n // 同上 exposedState.set\n const element = this.$$getElementByRef?.(to.ref) as unknown as Record<\n string,\n unknown\n >;\n if (element) {\n element[to.refProperty ?? from] = value;\n }\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of proxyMethods) {\n Object.defineProperty(TplElement.prototype, from, {\n value(this: TplElement, ...args: unknown[]) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n Function\n >;\n element[to.refMethod ?? from](...args);\n },\n enumerable: true,\n });\n }\n\n customElements.define(tagName, TplElement);\n }\n\n get(tagName: string) {\n return this.#registry.get(tagName);\n }\n}\n\nexport const customTemplates = new CustomTemplateRegistry();\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"],"mappings":"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"}
1
+ {"version":3,"file":"CustomTemplates.js","names":["uniq","isStrictMode","warnAboutStrictMode","allowedNativeProps","Set","_registry","WeakMap","CustomTemplateRegistry","constructor","_classPrivateFieldInitSpec","writable","value","Map","define","tagName","_constructor$proxy$pr","_constructor$proxy","_compatibleConstructo","_compatibleConstructo2","registered","_classPrivateFieldGet","has","console","warn","concat","customElements","get","strict","proxyProperties","proxy","properties","validProxyProps","legacyTplVariables","key","Object","entries","asVariable","push","mergeProperty","refTransform","error","ref","compatibleConstructor","_objectSpread","fromEntries","state","map","item","expose","tpl","name","set","exposedStates","getExposedStates","proxyMethods","methods","props","entry","nativeProp","find","prop","HTMLElement","prototype","undefined","Error","TplElement","$$typeof","_dev_only_definedProperties","_dev_only_definedMethods","$$getElementByRef","_this$$$tplStateStore","_this$$$tplStateStore2","_this$$$tplStateStore3","_this$$$tplStateStore4","$$tplStateStore","hostBrick","tplHostMetadata","internalBricksByRef","element","connectedCallback","shadowRoot","attachShadow","mode","fragment","document","createDocumentFragment","style","createElement","textContent","slot","appendChild","disconnectedCallback","_loop","propName","some","defineProperty","getValue","_this$$$tplStateStore5","updateValue","enumerable","_ret","_loop2","from","to","_to$refProperty","refProperty","_this$$$getElementByR","call","_to$refProperty2","_loop3","_to$refMethod","refMethod","arguments","customTemplates","_state$filter$map","filter"],"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\";\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 nativeProp = props\n .concat(methods)\n .find(\n (prop) => prop in HTMLElement.prototype && !allowedNativeProps.has(prop)\n );\n if (nativeProp !== undefined) {\n throw new Error(\n `In custom template \"${tagName}\", \"${nativeProp}\" is a native HTMLElement property, and should be avoid to be used as a brick property or method.`\n );\n }\n\n if (registered) {\n return;\n }\n\n class TplElement extends HTMLElement {\n get $$typeof() {\n return \"custom-template\" as const;\n }\n\n static get _dev_only_definedProperties(): string[] {\n return props;\n }\n\n static get _dev_only_definedMethods(): string[] {\n return methods;\n }\n\n $$getElementByRef(this: RuntimeBrickElement, ref: string) {\n return this.$$tplStateStore?.hostBrick?.tplHostMetadata?.internalBricksByRef.get(\n ref\n )?.element;\n }\n\n connectedCallback() {\n let shadowRoot = this.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n const fragment = document.createDocumentFragment();\n const style = document.createElement(\"style\");\n style.textContent = \":host{display:block}:host([hidden]){display:none}\";\n const slot = document.createElement(\"slot\");\n fragment.appendChild(style);\n fragment.appendChild(slot);\n shadowRoot.appendChild(fragment);\n }\n\n disconnectedCallback() {\n if (this.shadowRoot) {\n this.shadowRoot.textContent = \"\";\n }\n }\n }\n\n for (const propName of exposedStates) {\n if (validProxyProps.some((entry) => entry[0] === propName)) {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot define an exposed state that is also a proxy property: \"${propName}\" in ${tagName}`\n );\n continue;\n }\n Object.defineProperty(TplElement.prototype, propName, {\n get(this: RuntimeBrickElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.$$tplStateStore!.getValue(propName);\n },\n set(this: RuntimeBrickElement, value: unknown) {\n // 在 mount 过程中,先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n this.$$tplStateStore?.updateValue(propName, value, \"replace\");\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of validProxyProps) {\n Object.defineProperty(TplElement.prototype, from, {\n get(this: TplElement) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n unknown\n >;\n return element[to.refProperty ?? from];\n },\n set(this: TplElement, value: unknown) {\n // 同上 exposedState.set\n const element = this.$$getElementByRef?.(to.ref) as unknown as Record<\n string,\n unknown\n >;\n if (element) {\n element[to.refProperty ?? from] = value;\n }\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of proxyMethods) {\n Object.defineProperty(TplElement.prototype, from, {\n value(this: TplElement, ...args: unknown[]) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n Function\n >;\n element[to.refMethod ?? from](...args);\n },\n enumerable: true,\n });\n }\n\n customElements.define(tagName, TplElement);\n }\n\n get(tagName: string) {\n return this.#registry.get(tagName);\n }\n}\n\nexport const customTemplates = new CustomTemplateRegistry();\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"],"mappings":"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"}
@@ -19,6 +19,7 @@ import { customTemplates } from "../CustomTemplates.js";
19
19
  import { getBrickPackages } from "./Runtime.js";
20
20
  import { RenderTag } from "./enums.js";
21
21
  import { getTracks } from "./compute/getTracks.js";
22
+ import { isStrictMode, warnAboutStrictMode } from "../isStrictMode.js";
22
23
  export function renderRoutes(_x, _x2, _x3, _x4, _x5) {
23
24
  return _renderRoutes.apply(this, arguments);
24
25
  }
@@ -119,8 +120,13 @@ function _renderBrick() {
119
120
  menuRequests: []
120
121
  };
121
122
  if (!brickConf.brick) {
122
- // eslint-disable-next-line no-console
123
- console.error("Legacy templates are not supported in v3:", brickConf);
123
+ if (brickConf.template) {
124
+ // eslint-disable-next-line no-console
125
+ console.error("Legacy templates are dropped in v3:", brickConf);
126
+ } else {
127
+ // eslint-disable-next-line no-console
128
+ console.error("Invalid brick:", brickConf);
129
+ }
124
130
  return output;
125
131
  }
126
132
  var tplStateStoreId = brickConf[symbolForTplStateStoreId];
@@ -137,9 +143,11 @@ function _renderBrick() {
137
143
  } = brickConf;
138
144
  // istanbul ignore next
139
145
  if (Array.isArray(context) && context.length > 0) {
140
- // eslint-disable-next-line no-console
141
- console.error("Defining context on bricks will be dropped in v3:", brickConf);
142
- runtimeContext.ctxStore.define(context, runtimeContext);
146
+ var strict = isStrictMode(runtimeContext);
147
+ warnAboutStrictMode(strict, "Defining context on bricks", "check your brick:", brickConf);
148
+ if (!strict) {
149
+ runtimeContext.ctxStore.define(context, runtimeContext);
150
+ }
143
151
  }
144
152
  runtimeContext.pendingPermissionsPreCheck.push(preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext));
145
153
  if (!(yield asyncCheckBrickIf(brickConf, runtimeContext))) {
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","tplStateStoreId","forEachItem","Array","isArray","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","then","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are not supported in v3:\", brickConf);\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n // eslint-disable-next-line no-console\n console.error(\n \"Defining context on bricks will be dropped in v3:\",\n brickConf\n );\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Custom templates need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n }\n\n if (brickName.includes(\".\")) {\n output.blockingList.push(\n enqueueStableLoadBricks([brickName], getBrickPackages())\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n asyncProperties.then(() => {\n listenOnTrackingContext(brick, trackingContextList);\n });\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","template","tplStateStoreId","forEachItem","Array","isArray","strict","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","then","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Custom templates need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n }\n\n if (brickName.includes(\".\")) {\n output.blockingList.push(\n enqueueStableLoadBricks([brickName], getBrickPackages())\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n asyncProperties.then(() => {\n listenOnTrackingContext(brick, trackingContextList);\n });\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
@@ -77,7 +77,7 @@ export class RendererContext {
77
77
  // istanbul ignore next
78
78
  if (!isEmpty(lifeCycle.useResolves)) {
79
79
  // eslint-disable-next-line no-console
80
- console.error("`lifeCycle.useResolves` is not supported in v3:", lifeCycle);
80
+ console.error("`lifeCycle.useResolves` is dropped in v3:", lifeCycle);
81
81
  }
82
82
  }
83
83
  memoizeControlNode(slotId, key, node, returnNode) {
@@ -1 +1 @@
1
- {"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","commonLifeCycles","routerOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","type","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","Map","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet","push","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet","memKey","concat","mem","get","set","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet","_unmountBricks2","call","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","addEventListener","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","delete","$$tplStateStore","unmountEvent","runtimeContext","mountEvent","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n] as const;\n\nconst routerOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport class RendererContext {\n public readonly type: \"router\" | \"useBrick\";\n\n constructor(type: \"router\" | \"useBrick\") {\n this.type = type;\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n // Omitted:\n // \"onMessage\"\n // \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | UseBrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.type === \"router\" ? routerOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\n \"`lifeCycle.useResolves` is not supported in v3:\",\n lifeCycle\n );\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.type === \"router\" ? routerOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.type === \"useBrick\" &&\n routerOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.type}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":";;;;;;AAOA,SAASA,OAAO,EAAEC,MAAM,QAAQ,QAAQ;AACxC,SAASC,eAAe,QAAQ,oBAAoB;AACpD,SAAuBC,UAAU,QAAQ,eAAe;AACxD,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAAgBC,gBAAgB,QAAQ,iBAAiB;AAEzD,SAASC,SAAS,QAAQ,YAAY;AACtC,SAASC,SAAS,QAAQ,YAAY;AACtC,SAASC,mBAAmB,QAAQ,wCAAwC;AAS5E,IAAMC,gBAAgB,GAAG,CACvB,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,CACV;AAEV,IAAMC,oBAAoB,GAAG,CAC3B,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,gBAAgB,CACR;AAAC,IAAAC,kBAAA,oBAAAC,OAAA;AAAA,IAAAC,UAAA,oBAAAD,OAAA;AAAA,IAAAE,cAAA,oBAAAF,OAAA;AAAA,IAAAG,qBAAA,oBAAAH,OAAA;AAAA,IAAAI,cAAA,oBAAAC,OAAA;AAAA,IAAAC,yBAAA,oBAAAD,OAAA;AAAA,IAAAE,yBAAA,oBAAAF,OAAA;AAAA,IAAAG,YAAA,oBAAAH,OAAA;AAEX,OAAO,MAAMI,eAAe,CAAC;EAG3BC,WAAWA,CAACC,KAA2B,EAAE;IAAAC,2BAAA,OAAAJ,YAAA;IA+RzC;IAAAI,2BAAA,OAAAL,yBAAA;IAAAK,2BAAA,OAAAN,yBAAA;IAAAM,2BAAA,OAAAR,cAAA;IAAAS,eAAA;IAAAC,0BAAA,OAAAf,kBAAA;MAAAgB,QAAA;MAAAC,KAAA,EAxQI;QACFC,gBAAgB,EAAE,EAAE;QACpBC,UAAU,EAAE,EAAE;QACdC,WAAW,EAAE,EAAE;QACfC,iBAAiB,EAAE,EAAE;QACrBC,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE,EAAE;QAClBC,aAAa,EAAE,EAAE;QACjBC,gBAAgB,EAAE,EAAE;QACpBC,OAAO,EAAE,EAAE;QACXC,SAAS,EAAE;MACb;IAAC;IACD;IAAAZ,0BAAA,OAAAb,UAAA;MAAAc,QAAA;MAAAC,KAAA,EACa,IAAIW,GAAG;IAAuC;IAAAb,0BAAA,OAAAZ,cAAA;MAAAa,QAAA;MAAAC,KAAA;IAAA;IAAAF,0BAAA,OAAAX,qBAAA;MAAAY,QAAA;MAAAC,KAAA;IAAA;IAnCzD,IAAI,CAACL,IAAI,GAAGA,KAAI;EAClB;EAkDAiB,sBAAsBA,CACpBC,KAAkB,EAClBC,SAAyD,EACnD;IACN,IAAI,CAACA,SAAS,EAAE;MACd;IACF;IACA,IAAMC,cAAc,GAAG,CACrB,GAAGlC,gBAAgB,EACnB,IAAI,IAAI,CAACc,IAAI,KAAK,QAAQ,GAAGb,oBAAoB,GAAG,EAAE,CAAC,CACxD;IACD,KAAK,IAAMkC,GAAG,IAAID,cAAc,EAAE;MAChC,IAAME,QAAQ,GAAIH,SAAS,CAAoBE,GAAG,CAAiB;MACnE,IAAIC,QAAQ,EAAE;QACZC,qBAAA,KAAI,EAAAnC,kBAAA,EAAoBiC,GAAG,CAAiB,CAACG,IAAI,CAAC;UAChDN,KAAK;UACLI,QAAQ,EAAEA;QACZ,CAAC,CAAC;MACJ;IACF;IACA;IACA,IAAI,CAAC7C,OAAO,CAAE0C,SAAS,CAA+BM,WAAW,CAAC,EAAE;MAClE;MACAC,OAAO,CAACC,KAAK,CACX,iDAAiD,EACjDR,SAAS,CACV;IACH;EACF;EAgEAS,kBAAkBA,CAChBC,MAA0B,EAC1BR,GAAW,EACXS,IAA6B,EAC7BC,UAAsB,EACtB;IACA,IAAI,CAAAR,qBAAA,CAAC,IAAI,EAAA/B,qBAAA,CAAsB,EAAE;MAC/BwC,qBAAA,KAAI,EAAAxC,qBAAA,EAAyB,IAAIH,OAAO,EAAE;IAC5C;IACA,IAAM4C,MAAM,MAAAC,MAAA,CAAML,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,OAAAK,MAAA,CAAIb,GAAG,CAAE;IACvC,IAAIc,GAAG,GAAGZ,qBAAA,KAAI,EAAA/B,qBAAA,EAAuB4C,GAAG,CAACL,UAAU,CAAC;IACpD,IAAI,CAACI,GAAG,EAAE;MACRA,GAAG,GAAG,IAAInB,GAAG,EAAE;MACfO,qBAAA,KAAI,EAAA/B,qBAAA,EAAuB6C,GAAG,CAACN,UAAU,EAAEI,GAAG,CAAC;IACjD;IAEAA,GAAG,CAACE,GAAG,CAACJ,MAAM,EAAE;MACdH,IAAI;MACJQ,IAAI,EAAEC,WAAW,CAACT,IAAI,CAAC;MACvBU,UAAU,EAAEC,iBAAiB,CAACX,IAAI,CAAC;MACnCY,UAAU,EAAEC,iBAAiB,CAACb,IAAI;IACpC,CAAC,CAAC;EACJ;EAEAc,mBAAmBA,CACjBf,MAA0B,EAC1BR,GAAW,EACXS,IAA6B,EAC7BC,UAAsB,EACtB;IAAA,IAAAc,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;IACA,IAAMf,MAAM,MAAAC,MAAA,CAAML,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,OAAAK,MAAA,CAAIb,GAAG,CAAE;IACvC;IACA,IAAM4B,QAAQ,GAAG1B,qBAAA,KAAI,EAAA/B,qBAAA,EAAwB4C,GAAG,CAACL,UAAU,CAAC,CAAEK,GAAG,CAACH,MAAM,CAAE;IAC1E,IAAM;MACJH,IAAI,EAAEoB,QAAQ;MACdZ,IAAI,EAAEa,QAAQ;MACdX,UAAU,EAAEY,cAAc;MAC1BV,UAAU,EAAEW;IACd,CAAC,GAAGJ,QAAQ;IAEZ,IAAMK,iBAAiB,IAAAT,qBAAA,GAAGO,cAAc,aAAdA,cAAc,wBAAAN,sBAAA,GAAdM,cAAc,CAAEG,OAAO,cAAAT,sBAAA,uBAAvBA,sBAAA,CAAyBU,WAAW,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IACtE,IAAMY,uBAAuB,IAAAV,qBAAA,GAC3BM,cAAc,aAAdA,cAAc,wBAAAL,sBAAA,GAAdK,cAAc,CAAEE,OAAO,cAAAP,sBAAA,uBAAvBA,sBAAA,CAAyBQ,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAE9C,IAAMT,IAAI,GAAGC,WAAW,CAACT,IAAI,CAAC;IAC9BmB,QAAQ,CAACnB,IAAI,GAAGA,IAAI;IACpBmB,QAAQ,CAACX,IAAI,GAAGA,IAAI;IACpBW,QAAQ,CAACT,UAAU,GAAGC,iBAAiB,CAACX,IAAI,CAAC;IAC7CmB,QAAQ,CAACP,UAAU,GAAGC,iBAAiB,CAACb,IAAI,CAAC;;IAE7C;IACA,IAAI4B,WAAoC;IACxC,IAAIC,OAAO,GAAG5B,UAAU,CAAC6B,KAAK;IAC9B,OAAOD,OAAO,IAAIA,OAAO,KAAKR,QAAQ,EAAE;MACtC,IAAIQ,OAAO,CAACE,OAAO,KAAKX,QAAQ,EAAE;QAChCQ,WAAW,GAAGC,OAAO;QACrB;MACF;MACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,IAAMC,QAAQ,GAAGC,QAAQ,CAACC,sBAAsB,EAAE;IAClD,IAAMC,cAAc,GAAGF,QAAQ,CAACC,sBAAsB,EAAE;IACxD,IAAME,UAAsB,GAAG;MAC7BC,GAAG,EAAEnF,SAAS,CAACoF,IAAI;MACnBC,SAAS,EAAEP,QAAQ;MACnBQ,YAAY,EAAEL,cAAc;MAC5BL,KAAK,EAAE9B;IACT,CAAC;;IAED;IACA6B,OAAO,GAAG7B,IAAI;IACd,OAAO6B,OAAO,EAAE;MACdA,OAAO,CAACY,MAAM,GAAGL,UAAU;MAC3BP,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;;IAEA;IACA,IAAMW,YAAY,GAAGC,aAAa,CAACvB,QAAQ,EAAEC,QAAQ,CAAC;IACtDuB,sBAAA,KAAI,EAAAjF,cAAA,EAAAkF,eAAA,EAAAC,IAAA,CAAJ,IAAI,EAAgBJ,YAAY;IAEhCzF,SAAS,CAACmF,UAAU,CAAC;;IAErB;IACA,IAAIR,WAAW,EAAE;MACfA,WAAW,CAACG,OAAO,GAAG/B,IAAI;IAC5B,CAAC,MAAM;MACLC,UAAU,CAAC6B,KAAK,GAAG9B,IAAI;IACzB;IACA,IAAIQ,IAAI,EAAE;MACRA,IAAI,CAACuB,OAAO,GAAGV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEU,OAAO;IAClC;;IAEA;IACAF,OAAO,GAAG7B,IAAI;IACd,OAAO6B,OAAO,EAAE;MACdA,OAAO,CAACY,MAAM,GAAGxC,UAAU;MAC3B4B,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,IAAI9B,UAAU,CAACoC,GAAG,KAAKnF,SAAS,CAACoF,IAAI,EAAE;MAAA,IAAAS,qBAAA;MACrC,CAAAA,qBAAA,GAAA9C,UAAU,CAACsC,SAAS,cAAAQ,qBAAA,uBAApBA,qBAAA,CAAsBC,YAAY,CAAChB,QAAQ,EAAER,iBAAiB,CAAC;IACjE,CAAC,MAAM;MAAA,IAAAyB,mBAAA;MACL,CAAAA,mBAAA,GAAAhD,UAAU,CAACwB,OAAO,cAAAwB,mBAAA,uBAAlBA,mBAAA,CAAoBD,YAAY,CAAChB,QAAQ,EAAER,iBAAiB,CAAC;IAC/D;IAEA,IAAIW,cAAc,CAACe,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;MAAA,IAAAC,KAAA;MACxC,IAAIC,IAA4B,GAAGrD,IAAI;MACvC,OAAOqD,IAAI,IAAIA,IAAI,CAACZ,MAAM,EAAE;QAC1BY,IAAI,GAAGA,IAAI,CAACZ,MAAM;MACpB;MACA,IAAI,EAAAW,KAAA,GAAAC,IAAI,cAAAD,KAAA,uBAAJA,KAAA,CAAMf,GAAG,MAAKnF,SAAS,CAACoF,IAAI,EAAE;QAChC,MAAM,IAAIgB,KAAK,CAAC,8BAA8B,CAAC;MACjD;MACA,IAAMC,MAAM,GACV,OAAOF,IAAI,CAACb,YAAY,KAAK,UAAU,GACnCa,IAAI,CAACb,YAAY,EAAE,GACnBa,IAAI,CAACb,YAAY;MACvBe,MAAM,CAACP,YAAY,CAACb,cAAc,EAAER,uBAAuB,CAAC;IAC9D;IAEA,IAAM6B,SAAS,GAAGb,aAAa,CAAC3C,IAAI,EAAEQ,IAAI,CAAC;IAC3CoC,sBAAA,KAAI,EAAA/E,yBAAA,EAAA4F,0BAAA,EAAAX,IAAA,CAAJ,IAAI,EAA2BU,SAAS;EAC1C;EAEAE,OAAOA,CAAA,EAAS;IACd,KAAK,IAAMC,IAAI,IAAIC,MAAM,CAACC,MAAM,CAAApE,qBAAA,CAAC,IAAI,EAAAnC,kBAAA,EAAoB,EAAE;MACzDqG,IAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA,KAAK,IAAMQ,KAAI,IAAIlE,qBAAA,KAAI,EAAAjC,UAAA,EAAYqG,MAAM,EAAE,EAAE;MAC3C,KAAK,IAAMC,QAAQ,IAAIH,KAAI,EAAE;QAC3BG,QAAQ,CAACC,UAAU,EAAE;MACvB;MACAJ,KAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA1D,qBAAA,KAAI,EAAAjC,UAAA,EAAYwG,KAAK,EAAE;IACvB,IAAAvE,qBAAA,CAAI,IAAI,EAAAhC,cAAA,GAAiB;MACvBT,gBAAgB,CAACiH,mBAAmB,CAAC,QAAQ,EAAAxE,qBAAA,CAAE,IAAI,EAAAhC,cAAA,EAAgB;MACnEyC,qBAAA,KAAI,EAAAzC,cAAA,EAAkByG,SAAS;IACjC;IACAhE,qBAAA,KAAI,EAAAxC,qBAAA,EAAyBwG,SAAS;EACxC;EA+BAC,sBAAsBA,CAAA,EAAS;IAC7BvB,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,kBAAkB,EAClB,IAAIuB,WAAW,CAAC,iBAAiB,CAAC;EAEtC;EAEAC,gBAAgBA,CAAA,EAAS;IACvB,IAAMC,KAAK,GAAG,IAAIF,WAAW,CAAC,WAAW,CAAC;IAC1CzB,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EAA2B,YAAY,EAAEyB,KAAK;IAClD;IACAC,MAAM,CAACC,aAAa,CAACF,KAAK,CAAC;EAC7B;EAEAG,uBAAuBA,CAACC,MAGvB,EAAQ;IACP/B,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,mBAAmB,EACnB,IAAIuB,WAAW,CAAC,kBAAkB,EAAE;MAAEM;IAAO,CAAC,CAAC;EAEnD;EAEAC,iBAAiBA,CAAA,EAAS;IACxBhC,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,aAAa,EACb,IAAIuB,WAAW,CAAC,YAAY,CAAC;EAEjC;EAEAQ,kBAAkBA,CAAA,EAAS;IACzB,IAAM;MAAEC;IAAK,CAAC,GAAGhI,UAAU,EAAE,CAACiI,QAAQ;IACtC,IAAID,IAAI,IAAIA,IAAI,KAAK,GAAG,EAAE;MACxBlC,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,cAAc,EACd,IAAIuB,WAAW,CAAC,aAAa,EAAE;QAC7BM,MAAM,EAAE;UACNG,IAAI;UACJE,MAAM,EAAEF,IAAI,CAACG,SAAS,CAAC,CAAC;QAC1B;MACF,CAAC,CAAC;IAEN,CAAC,MAAM;MACLrC,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,gBAAgB,EAChB,IAAIuB,WAAW,CAAC,eAAe,CAAC;IAEpC;EACF;EAEAa,wBAAwBA,CAAA,EAAS;IAC/B,KAAK,IAAM;MAAE9F,KAAK;MAAEI,QAAQ,EAAE2F;IAAK,CAAC,IAAI1F,qBAAA,KAAI,EAAAnC,kBAAA,EACzCyB,gBAAgB,EAAE;MACnB6D,sBAAA,KAAI,EAAA7E,YAAA,EAAAqH,aAAA,EAAAtC,IAAA,CAAJ,IAAI,EAAc1D,KAAK,EAAE+F,IAAI;IAC/B;EACF;EAgCAE,qBAAqBA,CAAA,EAAS;IAC5BnF,qBAAA,KAAI,EAAAzC,cAAA,EAAmB8G,KAAK,IAAK;MAC/B3B,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EACF,eAAe,EACf,IAAIuB,WAAW,CAAC,cAAc,EAAE;QAC9BM,MAAM,EAAE5H,gBAAgB,CAAEwH,KAAK,CAAwBI,MAAM;MAC/D,CAAC,CAAC;IAEN,CAAC;IACD3H,gBAAgB,CAACsI,gBAAgB,CAAC,QAAQ,EAAA7F,qBAAA,CAAE,IAAI,EAAAhC,cAAA,EAAgB;EAClE;EAEA8H,eAAeA,CAAA,EAAS;IACtB3C,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EAA2B,SAAS,EAAE,IAAIuB,WAAW,CAAC,OAAO,CAAC;EACpE;EAEAmB,iBAAiBA,CAAA,EAAS;IACxB5C,sBAAA,KAAI,EAAA9E,yBAAA,EAAAsG,0BAAA,EAAAtB,IAAA,CAAJ,IAAI,EAA2B,WAAW,EAAE,IAAIuB,WAAW,CAAC,SAAS,CAAC;EACxE;AACF;AAAC,SAAAxB,gBArVgB4C,MAAwB,EAAQ;EAC7C,IAAMnG,cAAc,GAAG,CACrB,GAAGlC,gBAAgB,EACnB,IAAI,IAAI,CAACc,IAAI,KAAK,QAAQ,GAAGb,oBAAoB,GAAG,EAAE,CAAC,CACxD;EACD,IAAMqI,WAGH,GAAG,EAAE;;EAER;EACA,KAAK,IAAMnG,GAAG,IAAID,cAAc,EAAE;IAChC,IAAMqG,OAAO,GAAG/I,MAAM,CACpB6C,qBAAA,KAAI,EAAAnC,kBAAA,EAAoBiC,GAAG,CAAiB,EAC3CqG,IAAI,IAAKH,MAAM,CAACI,GAAG,CAACD,IAAI,CAACxG,KAAK,CAAC,CACjC;IACD,IAAIG,GAAG,KAAK,WAAW,EAAE;MACvBmG,WAAW,CAAChG,IAAI,CAAC,GAAGiG,OAAO,CAAC;IAC9B;EACF;;EAEA;EACA,KAAK,IAAMvG,KAAK,IAAIqG,MAAM,EAAE;IAAA,IAAAK,cAAA,EAAAC,eAAA;IAC1B,IAAMC,SAAS,GAAGvG,qBAAA,KAAI,EAAAjC,UAAA,EAAY8C,GAAG,CAAClB,KAAK,CAAC;IAC5C,IAAI4G,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE7C,MAAM,EAAE;MACrB,KAAK,IAAMW,QAAQ,IAAIkC,SAAS,EAAE;QAChClC,QAAQ,CAACC,UAAU,EAAE;MACvB;MACAiC,SAAS,CAAC7C,MAAM,GAAG,CAAC;MACpB1D,qBAAA,KAAI,EAAAjC,UAAA,EAAYyI,MAAM,CAAC7G,KAAK,CAAC;IAC/B;IAEAjC,mBAAmB,CAACiC,KAAK,CAAC;IAC1B,CAAA0G,cAAA,GAAO1G,KAAK,CAACqC,OAAO,cAAAqE,cAAA,qBAApB,OAAOA,cAAA,CAAeI,eAAe;;IAErC;IACA,CAAAH,eAAA,GAAA3G,KAAK,CAACqC,OAAO,cAAAsE,eAAA,uBAAbA,eAAA,CAAenJ,MAAM,EAAE;EACzB;;EAEA;EACA,IAAMuJ,YAAY,GAAG,IAAI9B,WAAW,CAAC,SAAS,CAAC;EAC/C,KAAK,IAAM;IAAEjF,KAAK,EAALA,MAAK;IAAEI;EAAS,CAAC,IAAIkG,WAAW,EAAE;IAC7C7I,eAAe,CAAC2C,QAAQ,EAAEJ,MAAK,CAACgH,cAAc,EAAEhH,MAAK,CAAC,CAAC+G,YAAY,CAAC;EACtE;AACF;AAAC,SAAA1C,2BAEyBgC,MAAwB,EAAQ;EACxD,IAAMY,UAAU,GAAG,IAAIhC,WAAW,CAAC,OAAO,CAAC;EAC3C,KAAK,IAAM;IAAEjF,KAAK;IAAEI;EAAS,CAAC,IAAIC,qBAAA,KAAI,EAAAnC,kBAAA,EAAoB0B,OAAO,EAAE;IACjE,IAAIyG,MAAM,CAACI,GAAG,CAACzG,KAAK,CAAC,EAAE;MACrBvC,eAAe,CAAC2C,QAAQ,EAAEJ,KAAK,CAACgH,cAAc,EAAEhH,KAAK,CAAC,CAACiH,UAAU,CAAC;IACpE;EACF;EAEA,KAAK,IAAM;IAAEjH,KAAK,EAALA,OAAK;IAAEI,QAAQ,EAAE2F;EAAK,CAAC,IAAI1F,qBAAA,KAAI,EAAAnC,kBAAA,EACzCyB,gBAAgB,EAAE;IACnB,IAAI0G,MAAM,CAACI,GAAG,CAACzG,OAAK,CAAC,EAAE;MACrBwD,sBAAA,KAAI,EAAA7E,YAAA,EAAAqH,aAAA,EAAAtC,IAAA,CAAJ,IAAI,EAAc1D,OAAK,EAAE+F,IAAI;IAC/B;EACF;AACF;AAAC,SAAAf,2BAmJClG,IASe,EACfqG,KAAkB,EACZ;EACN;EACA,IACE+B,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IACtC,IAAI,CAACtI,IAAI,KAAK,UAAU,IACxBb,oBAAoB,CAACoJ,QAAQ,CAACvI,IAAI,CAAiB,EACnD;IACA,MAAM,IAAIoF,KAAK,eAAAlD,MAAA,CACElC,IAAI,0BAAAkC,MAAA,CAAwB,IAAI,CAAClC,IAAI,uDACrD;EACH;EACA,KAAK,IAAM;IAAEkB,KAAK;IAAEI;EAAS,CAAC,IAAIC,qBAAA,KAAI,EAAAnC,kBAAA,EAAoBY,IAAI,CAAC,EAAE;IAC/DrB,eAAe,CAAC2C,QAAQ,EAAEJ,KAAK,CAACgH,cAAc,EAAEhH,KAAK,CAAC,CAACmF,KAAK,CAAC;EAC/D;AACF;AAAC,SAAAa,cA4DYhG,KAAkB,EAAE+F,IAAwB,EAAE;EAAA,IAAAuB,eAAA;EACzD,IAAMC,SAAS,IAAAD,eAAA,GAAGvB,IAAI,CAACwB,SAAS,cAAAD,eAAA,cAAAA,eAAA,GAAI,GAAG;EACvC,IAAM5C,QAAQ,GAAG,IAAI8C,oBAAoB,CACvC,CAACC,OAAO,EAAE/C,QAAQ,KAAK;IACrB+C,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;QACxB,IAAID,KAAK,CAACE,iBAAiB,IAAIN,SAAS,EAAE;UACxC9J,eAAe,CACbsI,IAAI,CAAC3F,QAAQ,EACbJ,KAAK,CAACgH,cAAc,EACpBhH,KAAK,CACN,CAAC,IAAIiF,WAAW,CAAC,kBAAkB,CAAC,CAAC;UACtCP,QAAQ,CAACC,UAAU,EAAE;QACvB;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IACE4C;EACF,CAAC,CACF;EACD7C,QAAQ,CAACoD,OAAO,CAAC9H,KAAK,CAACqC,OAAO,CAAE;EAChC,IAAIkC,IAAI,GAAGlE,qBAAA,KAAI,EAAAjC,UAAA,EAAY8C,GAAG,CAAClB,KAAK,CAAC;EACrC,IAAI,CAACuE,IAAI,EAAE;IACTA,IAAI,GAAG,EAAE;IACTlE,qBAAA,KAAI,EAAAjC,UAAA,EAAY+C,GAAG,CAACnB,KAAK,EAAEuE,IAAI,CAAC;EAClC;EACAA,IAAI,CAACjE,IAAI,CAACoE,QAAQ,CAAC;AACrB;AAuBF,SAASrD,WAAWA,CAACT,IAA6B,EAA2B;EAC3E,IAAIQ,IAAI,GAAGR,IAAI;EACf,QAAAmH,KAAA,GAAO3G,IAAI,cAAA2G,KAAA,eAAJA,KAAA,CAAMpF,OAAO,EAAE;IAAA,IAAAoF,KAAA;IACpB3G,IAAI,GAAGA,IAAI,CAACuB,OAAO;EACrB;EACA,OAAOvB,IAAI;AACb;AAEA,SAASG,iBAAiBA,CACxBX,IAA6B,EACJ;EACzB,IAAIQ,IAA6B;EACjC,IAAIqB,OAAO,GAAG7B,IAAI;EAClB,OAAO6B,OAAO,EAAE;IACd,IAAI,CAACA,OAAO,CAAC0B,MAAM,EAAE;MACnB/C,IAAI,GAAGqB,OAAO;IAChB;IACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;EAC3B;EACA,OAAOvB,IAAI;AACb;AAEA,SAASK,iBAAiBA,CACxBb,IAA6B,EACJ;EACzB,IAAIQ,IAA6B;EACjC,IAAIqB,OAAO,GAAG7B,IAAI;EAClB,OAAO6B,OAAO,EAAE;IACd,IAAIA,OAAO,CAAC0B,MAAM,EAAE;MAClB/C,IAAI,GAAGqB,OAAO;IAChB;IACA,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAAqF,cAAA;MACL,IAAIC,aAA4C,GAAGxF,OAAO,CAACY,MAAM;MACjE,OAAO4E,aAAa,EAAE;QACpB,IAAIA,aAAa,CAACtF,OAAO,EAAE;UACzB;QACF;QACAsF,aAAa,GAAGA,aAAa,CAAC5E,MAAM;MACtC;MACAZ,OAAO,IAAAuF,cAAA,GAAGC,aAAa,cAAAD,cAAA,uBAAbA,cAAA,CAAerF,OAAO;IAClC;EACF;EACA,OAAOvB,IAAI;AACb;AAEA,SAASmC,aAAaA,CACpB2E,IAA6B,EAC7BC,EAA2B,EACT;EAClB,IAAMC,KAAK,GAAG,IAAIC,GAAG,EAAe;EACpC,IAAI5F,OAAO,GAAGyF,IAAI;EAClB,OAAOzF,OAAO,EAAE;IACd2F,KAAK,CAACE,GAAG,CAAC7F,OAAO,CAAC;IAClB,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,KAAK0F,EAAE,EAAE;MACzB;IACF,CAAC,MAAM,IAAI1F,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAA4F,eAAA;MACL,IAAIN,aAA4C,GAAGxF,OAAO,CAACY,MAAM;MACjE,OAAO4E,aAAa,IAAIA,aAAa,KAAKE,EAAE,EAAE;QAC5C,IAAIF,aAAa,CAACtF,OAAO,EAAE;UACzB;QACF;QACAsF,aAAa,GAAGA,aAAa,CAAC5E,MAAM;MACtC;MACA,IAAI4E,aAAa,KAAKE,EAAE,EAAE;QACxB;MACF;MACA1F,OAAO,IAAA8F,eAAA,GAAGN,aAAa,cAAAM,eAAA,uBAAbA,eAAA,CAAe5F,OAAO;IAClC;EACF;EACA,OAAOyF,KAAK;AACd"}
1
+ {"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","commonLifeCycles","routerOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","type","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","Map","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet","push","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet","memKey","concat","mem","get","set","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet","_unmountBricks2","call","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","addEventListener","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","delete","$$tplStateStore","unmountEvent","runtimeContext","mountEvent","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n] as const;\n\nconst routerOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport class RendererContext {\n public readonly type: \"router\" | \"useBrick\";\n\n constructor(type: \"router\" | \"useBrick\") {\n this.type = type;\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n // Omitted:\n // \"onMessage\"\n // \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | UseBrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.type === \"router\" ? routerOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.type === \"router\" ? routerOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.type === \"useBrick\" &&\n routerOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.type}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":"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"}
@@ -23,6 +23,7 @@ import { fetchMenuById, getMenuById } from "../menu/fetchMenuById.js";
23
23
  import { widgetI18nFactory } from "./WidgetI18n.js";
24
24
  import { widgetImagesFactory } from "./images.js";
25
25
  import { hasInstalledApp, waitForCheckingApps } from "../checkInstalledApps.js";
26
+ import { isStrictMode, warnAboutStrictMode } from "../../isStrictMode.js";
26
27
  var symbolForRaw = Symbol.for("pre.evaluated.raw");
27
28
  var symbolForContext = Symbol.for("pre.evaluated.context");
28
29
  export function isPreEvaluated(raw) {
@@ -120,10 +121,10 @@ runtimeContext) {
120
121
  }
121
122
 
122
123
  if (menuUsage.hasNonStaticUsage) {
123
- throw new Error("Non-static usage of \"APP.getMenu\" is not supported in v3, check your expression: \"".concat(raw, "\""));
124
+ throw new Error("Non-static usage of \"APP.getMenu\" is prohibited in v3, check your expression: \"".concat(raw, "\""));
124
125
  }
125
126
  if (hasAppUsage.hasNonStaticUsage) {
126
- throw new Error("Non-static usage of \"INSTALLED_APPS.has\" is not supported in v3, check your expression: \"".concat(raw, "\""));
127
+ throw new Error("Non-static usage of \"INSTALLED_APPS.has\" is prohibited in v3, check your expression: \"".concat(raw, "\""));
127
128
  }
128
129
  var globalVariables = {};
129
130
  var {
@@ -148,9 +149,10 @@ runtimeContext) {
148
149
  var usedProcessors;
149
150
  var usedStates;
150
151
  var tplStateStore;
152
+ var strict = isStrictMode(runtimeContext);
151
153
 
152
154
  // For existed TPL usage, treat it as a STATE.
153
- if (attemptToVisitGlobals.has("STATE") || attemptToVisitGlobals.has("TPL")) {
155
+ if (attemptToVisitGlobals.has("STATE") || !strict && attemptToVisitGlobals.has("TPL")) {
154
156
  tplStateStore = getTplStateStore(runtimeContext, "STATE", ": \"".concat(raw, "\""));
155
157
  }
156
158
  var devHook = getDevHook();
@@ -161,12 +163,12 @@ runtimeContext) {
161
163
  }
162
164
  if (tplStateStore) {
163
165
  usedStates = strictCollectMemberUsage(raw, "STATE");
164
- // Todo: remove compatibility support for `TPL`
165
- // istanbul ignore next
166
- var usedTpls = strictCollectMemberUsage(raw, "TPL");
167
- // istanbul ignore next
168
- for (var tpl of usedTpls) {
169
- usedStates.add(tpl);
166
+ // istanbul ignore if
167
+ if (!strict) {
168
+ var usedTpls = strictCollectMemberUsage(raw, "TPL");
169
+ for (var tpl of usedTpls) {
170
+ usedStates.add(tpl);
171
+ }
170
172
  }
171
173
  isAsync && blockingList.push(tplStateStore.waitFor(usedStates));
172
174
  }
@@ -198,7 +200,7 @@ runtimeContext) {
198
200
  return {
199
201
  blockingList,
200
202
  run() {
201
- var _runtimeContext$overr;
203
+ var _runtimeContext$overr, _match$params;
202
204
  var {
203
205
  app: currentApp,
204
206
  location,
@@ -225,9 +227,6 @@ runtimeContext) {
225
227
  case "CTX":
226
228
  globalVariables[variableName] = getDynamicReadOnlyProxy({
227
229
  get(target, key) {
228
- if (typeof key !== "string") {
229
- return;
230
- }
231
230
  return ctxStore.getValue(key);
232
231
  },
233
232
  ownKeys() {
@@ -275,7 +274,7 @@ runtimeContext) {
275
274
  globalVariables[variableName] = new URLSearchParams(query);
276
275
  break;
277
276
  case "PATH":
278
- globalVariables[variableName] = getReadOnlyProxy(match.params);
277
+ globalVariables[variableName] = getReadOnlyProxy((_match$params = match === null || match === void 0 ? void 0 : match.params) !== null && _match$params !== void 0 ? _match$params : {});
279
278
  break;
280
279
  case "PATH_NAME":
281
280
  globalVariables[variableName] = location.pathname;
@@ -283,18 +282,12 @@ runtimeContext) {
283
282
  case "PROCESSORS":
284
283
  globalVariables[variableName] = getDynamicReadOnlyProxy({
285
284
  get(target, key) {
286
- if (typeof key !== "string") {
287
- return;
288
- }
289
285
  var pkg = customProcessors.get(key);
290
286
  if (!pkg) {
291
287
  throw new Error("'PROCESSORS.".concat(key, "' is not registered! Have you installed the relevant brick package?"));
292
288
  }
293
289
  return getDynamicReadOnlyProxy({
294
290
  get(t, k) {
295
- if (typeof k !== "string") {
296
- return;
297
- }
298
291
  return pkg.get(k);
299
292
  },
300
293
  ownKeys() {
@@ -319,15 +312,16 @@ runtimeContext) {
319
312
  getItem: getStorageItem("session")
320
313
  });
321
314
  break;
322
- // Todo: remove compatibility support for `TPL`
323
315
  // istanbul ignore next
324
316
  case "TPL":
317
+ warnAboutStrictMode(strict, 'Using "TPL" in expression', "check your expression: \"".concat(raw, "\""));
318
+ if (strict) {
319
+ break;
320
+ }
321
+ // eslint-disable-next-line no-fallthrough
325
322
  case "STATE":
326
323
  globalVariables[variableName] = getDynamicReadOnlyProxy({
327
324
  get(target, key) {
328
- if (typeof key !== "string") {
329
- return;
330
- }
331
325
  return tplStateStore.getValue(key);
332
326
  },
333
327
  ownKeys() {
@@ -336,7 +330,7 @@ runtimeContext) {
336
330
  });
337
331
  break;
338
332
  case "SYS":
339
- globalVariables[variableName] = getReadOnlyProxy(sys);
333
+ globalVariables[variableName] = getReadOnlyProxy(sys !== null && sys !== void 0 ? sys : {});
340
334
  break;
341
335
  case "__WIDGET_FN__":
342
336
  globalVariables[variableName] = widgetFunctions;