@next-core/runtime 1.25.7 → 1.26.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.
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +1 -1
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +1 -1
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +4 -5
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/data/DataStore.js +27 -4
- package/dist/cjs/internal/data/DataStore.js.map +1 -1
- package/dist/cjs/internal/data/realTimeDataInspect.js +42 -0
- package/dist/cjs/internal/data/realTimeDataInspect.js.map +1 -0
- package/dist/cjs/internal/secret_internals.js +13 -0
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +1 -1
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js +1 -1
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/esm/internal/Renderer.js +4 -5
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/data/DataStore.js +27 -4
- package/dist/esm/internal/data/DataStore.js.map +1 -1
- package/dist/esm/internal/data/realTimeDataInspect.js +32 -0
- package/dist/esm/internal/data/realTimeDataInspect.js.map +1 -0
- package/dist/esm/internal/secret_internals.js +1 -0
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/types/internal/data/DataStore.d.ts +4 -1
- package/dist/types/internal/data/realTimeDataInspect.d.ts +25 -0
- package/dist/types/internal/mediaQuery.d.ts +1 -0
- package/dist/types/internal/secret_internals.d.ts +1 -0
- package/dist/types/tsdoc-metadata.json +1 -1
- package/package.json +13 -13
|
@@ -23,7 +23,7 @@ function expandCustomTemplate(tplTagName, brickConf, hostBrick, asyncHostPropert
|
|
|
23
23
|
delete runtimeContext.forEachItem;
|
|
24
24
|
delete runtimeContext.forEachIndex;
|
|
25
25
|
delete runtimeContext.formStateStoreId;
|
|
26
|
-
const tplStateStore = new _DataStore.DataStore("STATE", hostBrick, rendererContext);
|
|
26
|
+
const tplStateStore = new _DataStore.DataStore("STATE", hostBrick, rendererContext, tplStateStoreId);
|
|
27
27
|
runtimeContext.tplStateStoreMap.set(tplStateStoreId, tplStateStore);
|
|
28
28
|
if (runtimeContext.tplStateStoreScope) {
|
|
29
29
|
runtimeContext.tplStateStoreScope.push(tplStateStore);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expandCustomTemplate.js","names":["_lodash","require","_CustomTemplates","_DataStore","_setupTemplateProxy","_setupUseBrickInTemplate","_Renderer","_Runtime","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_hooks$flowApi","tplStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","formStateStoreId","tplStateStore","DataStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","customTemplates","get","hooks","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","childrenToSlots","type","map","item","expandBrickInTemplate","brickConfInTemplate","if","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","transpiledSlots","fromEntries","slotName","slotConf","_slotConf$bricks","setupUseBrickInTemplate","setupTemplateProxy"],"sources":["../../../../src/internal/CustomTemplates/expandCustomTemplate.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n SlotsConfInTemplate,\n SlotsConfOfBricks,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./constants.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n TemplateHostBrick,\n TemplateHostContext,\n} from \"../interfaces.js\";\nimport { setupUseBrickInTemplate } from \"./setupUseBrickInTemplate.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { hooks } from \"../Runtime.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): T {\n const tplStateStoreId = uniqueId(\"tpl-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n tplStateStoreId,\n };\n\n // There is a boundary for `forEachItem` and `FORM_STATE` between template internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.formStateStoreId;\n\n const tplStateStore = new DataStore(\"STATE\"
|
|
1
|
+
{"version":3,"file":"expandCustomTemplate.js","names":["_lodash","require","_CustomTemplates","_DataStore","_setupTemplateProxy","_setupUseBrickInTemplate","_Renderer","_Runtime","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_hooks$flowApi","tplStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","formStateStoreId","tplStateStore","DataStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","customTemplates","get","hooks","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","childrenToSlots","type","map","item","expandBrickInTemplate","brickConfInTemplate","if","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","transpiledSlots","fromEntries","slotName","slotConf","_slotConf$bricks","setupUseBrickInTemplate","setupTemplateProxy"],"sources":["../../../../src/internal/CustomTemplates/expandCustomTemplate.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n SlotsConfInTemplate,\n SlotsConfOfBricks,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./constants.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n TemplateHostBrick,\n TemplateHostContext,\n} from \"../interfaces.js\";\nimport { setupUseBrickInTemplate } from \"./setupUseBrickInTemplate.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { hooks } from \"../Runtime.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): T {\n const tplStateStoreId = uniqueId(\"tpl-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n tplStateStoreId,\n };\n\n // There is a boundary for `forEachItem` and `FORM_STATE` between template internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.formStateStoreId;\n\n const tplStateStore = new DataStore(\n \"STATE\",\n hostBrick,\n rendererContext,\n tplStateStoreId\n );\n runtimeContext.tplStateStoreMap.set(tplStateStoreId, tplStateStore);\n if (runtimeContext.tplStateStoreScope) {\n runtimeContext.tplStateStoreScope.push(tplStateStore);\n }\n\n const { bricks, proxy, state, contracts } = customTemplates.get(tplTagName)!;\n hooks?.flowApi?.collectWidgetContract(contracts);\n tplStateStore.define(state, runtimeContext, asyncHostPropertyEntries);\n\n const {\n slots: originalExternalSlots,\n children: externalChildren,\n ...restBrickConf\n } = brickConf;\n\n const newBrickConf = {\n ...restBrickConf,\n brick: tplTagName,\n } as T;\n\n hostBrick.tplHostMetadata = {\n internalBricksByRef: new Map(),\n tplStateStoreId,\n proxy,\n };\n\n // Reversed proxies are used for expand storyboard before rendering page.\n const reversedProxies: TemplateHostContext[\"reversedProxies\"] = {\n properties: new Map(),\n slots: new Map(),\n // mergeBases: new Map(),\n };\n\n if (proxy?.properties) {\n for (const [from, to] of Object.entries(proxy.properties)) {\n let proxies = reversedProxies.properties.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.properties.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n if (proxy?.slots) {\n for (const [from, to] of Object.entries(proxy.slots)) {\n let proxies = reversedProxies.slots.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.slots.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n const hostContext: TemplateHostContext = {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots: childrenToSlots(externalChildren, originalExternalSlots) as\n | SlotsConfOfBricks\n | undefined,\n tplStateStoreId,\n hostBrick: hostBrick as TemplateHostBrick,\n };\n\n newBrickConf.slots = {\n \"\": {\n type: \"bricks\",\n bricks: bricks.map((item) => expandBrickInTemplate(item, hostContext)),\n },\n };\n\n return newBrickConf;\n}\n\nfunction expandBrickInTemplate(\n brickConfInTemplate: BrickConfInTemplate,\n hostContext: TemplateHostContext\n): RuntimeBrickConfWithTplSymbols {\n // Ignore `if: null` to make `looseCheckIf` working.\n if (brickConfInTemplate.if === null) {\n delete brickConfInTemplate.if;\n }\n const {\n properties,\n slots: slotsInTemplate,\n children: childrenInTemplate,\n ...restBrickConfInTemplate\n } = brickConfInTemplate;\n\n const transpiledSlots = childrenToSlots(\n childrenInTemplate,\n slotsInTemplate\n ) as SlotsConfInTemplate | undefined;\n\n const slots: SlotsConfOfBricks = Object.fromEntries(\n Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [\n slotName,\n {\n type: \"bricks\",\n bricks: (slotConf.bricks ?? []).map((item) =>\n expandBrickInTemplate(item, hostContext)\n ),\n },\n ])\n );\n\n return {\n ...restBrickConfInTemplate,\n properties: setupUseBrickInTemplate(properties, hostContext),\n slots,\n ...setupTemplateProxy(hostContext, restBrickConfInTemplate.ref, slots),\n };\n}\n"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ function expandFormRenderer(formData, hostBrickConf, hostBrick, asyncHostPropert
|
|
|
23
23
|
delete runtimeContext.forEachItem;
|
|
24
24
|
delete runtimeContext.forEachIndex;
|
|
25
25
|
delete runtimeContext.tplStateStoreId;
|
|
26
|
-
const formStateStore = new _DataStore.DataStore("FORM_STATE", undefined, rendererContext);
|
|
26
|
+
const formStateStore = new _DataStore.DataStore("FORM_STATE", undefined, rendererContext, formStateStoreId);
|
|
27
27
|
runtimeContext.formStateStoreMap.set(formStateStoreId, formStateStore);
|
|
28
28
|
if (runtimeContext.formStateStoreScope) {
|
|
29
29
|
runtimeContext.formStateStoreScope.push(formStateStore);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expandFormRenderer.js","names":["_general","require","_lodash","_DataStore","_getDefaultProperties","_constants","formContainers","expandFormRenderer","formData","hostBrickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_normalizedFormData$c","_hostBrickConf$proper","normalizedFormData","JSON","parse","formStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","tplStateStoreId","formStateStore","DataStore","undefined","formStateStoreMap","set","formStateStoreScope","push","context","some","ctx","name","define","formConf","formSchemaToBrick","formSchema","fields","includes","brick","events","mergeEvents","renderRoot","properties","slots","children","style","padding","schema","id","bricks","mountPoint","instanceId","iid","field","find","item","fieldId","defaults","getDefaultProperties","brickConf","slot","formSchemasToBricks","symbolForFormStateStoreId","hasOwnProperty","if","schemas","Array","isArray","map","targetEvents","sourceEvents","eventType","handlers","Object","entries","flat"],"sources":["../../../../src/internal/FormRenderer/expandFormRenderer.ts"],"sourcesContent":["import type { BrickConf, BrickEventsMap } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { uniqueId } from \"lodash\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport type { AsyncPropertyEntry, RuntimeBrick } from \"../interfaces.js\";\nimport type {\n FieldProperties,\n FormDataProperties,\n FormSchemaProperties,\n} from \"./interfaces.js\";\nimport { getDefaultProperties } from \"./getDefaultProperties.js\";\nimport { symbolForFormStateStoreId } from \"./constants.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\n\nconst formContainers = [\"forms.general-form\", \"form.general-form\", \"eo-form\"];\n\nexport function expandFormRenderer(\n formData: unknown,\n hostBrickConf: BrickConf,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): BrickConf {\n const normalizedFormData = (\n typeof formData === \"string\" ? JSON.parse(formData) : formData\n ) as FormDataProperties;\n\n const formStateStoreId = uniqueId(\"form-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n formStateStoreId,\n };\n\n // There is a boundary for `forEachItem` and `STATE` between form internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.tplStateStoreId;\n\n const formStateStore = new DataStore(\n \"FORM_STATE\",\n undefined,\n rendererContext\n );\n runtimeContext.formStateStoreMap.set(formStateStoreId, formStateStore);\n if (runtimeContext.formStateStoreScope) {\n runtimeContext.formStateStoreScope.push(formStateStore);\n }\n\n // Always add a state of `params`.\n const context = normalizedFormData.context ?? [];\n if (!context.some((ctx) => ctx.name === \"params\")) {\n context.push({ name: \"params\" });\n }\n\n formStateStore.define(context, runtimeContext, asyncHostPropertyEntries);\n\n const formConf = formSchemaToBrick(\n normalizedFormData.formSchema,\n normalizedFormData.fields,\n formStateStoreId\n );\n\n if (formContainers.includes(formConf.brick) && hostBrickConf.events) {\n formConf.events = mergeEvents(formConf.events, hostBrickConf.events);\n }\n\n const renderRoot =\n typeof hostBrickConf.properties?.renderRoot !== \"boolean\" ||\n hostBrickConf.properties.renderRoot;\n\n if (renderRoot) {\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [\n {\n brick: \"eo-micro-view\",\n properties: { style: { padding: \"12px\" } },\n children: [formConf],\n },\n ],\n };\n }\n\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [formConf],\n };\n}\n\nfunction formSchemaToBrick(\n schema: FormSchemaProperties,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf {\n const { id, bricks, events, context, mountPoint, instanceId: iid } = schema;\n let { brick, properties } = schema;\n\n // 根据字段类型获取默认配置\n const field = fields.find((item: FieldProperties) => item.fieldId === id);\n if (field) {\n const defaults = getDefaultProperties(field);\n if (!brick) {\n brick = defaults.brick;\n }\n properties = {\n ...defaults.properties,\n ...properties,\n };\n }\n\n const brickConf = {\n brick,\n properties,\n iid,\n slot: mountPoint,\n events,\n context,\n children: formSchemasToBricks(bricks, fields, formStateStoreId),\n [symbolForFormStateStoreId]: formStateStoreId,\n } as BrickConf;\n\n if (hasOwnProperty(schema, \"if\")) {\n brickConf.if = schema.if;\n }\n\n return brickConf;\n}\n\nfunction formSchemasToBricks(\n schemas: FormSchemaProperties[] | undefined,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf[] | undefined {\n if (Array.isArray(schemas)) {\n return schemas.map((schema) =>\n formSchemaToBrick(schema, fields, formStateStoreId)\n );\n }\n}\n\nfunction mergeEvents(\n targetEvents: BrickEventsMap | undefined,\n sourceEvents: BrickEventsMap\n): BrickEventsMap {\n const events = targetEvents ?? {};\n\n for (const [eventType, handlers] of Object.entries(sourceEvents)) {\n events[eventType] = hasOwnProperty(events, eventType)\n ? [events[eventType], handlers].flat()\n : handlers;\n }\n\n return events;\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAOA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAGA,MAAMK,cAAc,GAAG,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,SAAS,CAAC;AAEtE,SAASC,kBAAkBA,CAChCC,QAAiB,EACjBC,aAAwB,EACxBC,SAAuB,EACvBC,wBAA8C,EAC9CC,eAAgC,EACrB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACX,MAAMC,kBAAkB,GACtB,OAAOP,QAAQ,KAAK,QAAQ,GAAGQ,IAAI,CAACC,KAAK,CAACT,QAAQ,CAAC,GAAGA,QACjC;EAEvB,MAAMU,gBAAgB,GAAG,IAAAC,gBAAQ,EAAC,aAAa,CAAC;EAChD,MAAMC,cAAc,GAAG;IACrB,GAAGV,SAAS,CAACU,cAAc;IAC3BF;EACF,CAAC;;EAED;EACA,OAAOE,cAAc,CAACC,WAAW;EACjC,OAAOD,cAAc,CAACE,YAAY;EAClC,OAAOF,cAAc,CAACG,eAAe;EAErC,MAAMC,cAAc,GAAG,IAAIC,oBAAS,CAClC,YAAY,EACZC,SAAS,EACTd,
|
|
1
|
+
{"version":3,"file":"expandFormRenderer.js","names":["_general","require","_lodash","_DataStore","_getDefaultProperties","_constants","formContainers","expandFormRenderer","formData","hostBrickConf","hostBrick","asyncHostPropertyEntries","rendererContext","_normalizedFormData$c","_hostBrickConf$proper","normalizedFormData","JSON","parse","formStateStoreId","uniqueId","runtimeContext","forEachItem","forEachIndex","tplStateStoreId","formStateStore","DataStore","undefined","formStateStoreMap","set","formStateStoreScope","push","context","some","ctx","name","define","formConf","formSchemaToBrick","formSchema","fields","includes","brick","events","mergeEvents","renderRoot","properties","slots","children","style","padding","schema","id","bricks","mountPoint","instanceId","iid","field","find","item","fieldId","defaults","getDefaultProperties","brickConf","slot","formSchemasToBricks","symbolForFormStateStoreId","hasOwnProperty","if","schemas","Array","isArray","map","targetEvents","sourceEvents","eventType","handlers","Object","entries","flat"],"sources":["../../../../src/internal/FormRenderer/expandFormRenderer.ts"],"sourcesContent":["import type { BrickConf, BrickEventsMap } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { uniqueId } from \"lodash\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport type { AsyncPropertyEntry, RuntimeBrick } from \"../interfaces.js\";\nimport type {\n FieldProperties,\n FormDataProperties,\n FormSchemaProperties,\n} from \"./interfaces.js\";\nimport { getDefaultProperties } from \"./getDefaultProperties.js\";\nimport { symbolForFormStateStoreId } from \"./constants.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\n\nconst formContainers = [\"forms.general-form\", \"form.general-form\", \"eo-form\"];\n\nexport function expandFormRenderer(\n formData: unknown,\n hostBrickConf: BrickConf,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): BrickConf {\n const normalizedFormData = (\n typeof formData === \"string\" ? JSON.parse(formData) : formData\n ) as FormDataProperties;\n\n const formStateStoreId = uniqueId(\"form-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n formStateStoreId,\n };\n\n // There is a boundary for `forEachItem` and `STATE` between form internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.tplStateStoreId;\n\n const formStateStore = new DataStore(\n \"FORM_STATE\",\n undefined,\n rendererContext,\n formStateStoreId\n );\n runtimeContext.formStateStoreMap.set(formStateStoreId, formStateStore);\n if (runtimeContext.formStateStoreScope) {\n runtimeContext.formStateStoreScope.push(formStateStore);\n }\n\n // Always add a state of `params`.\n const context = normalizedFormData.context ?? [];\n if (!context.some((ctx) => ctx.name === \"params\")) {\n context.push({ name: \"params\" });\n }\n\n formStateStore.define(context, runtimeContext, asyncHostPropertyEntries);\n\n const formConf = formSchemaToBrick(\n normalizedFormData.formSchema,\n normalizedFormData.fields,\n formStateStoreId\n );\n\n if (formContainers.includes(formConf.brick) && hostBrickConf.events) {\n formConf.events = mergeEvents(formConf.events, hostBrickConf.events);\n }\n\n const renderRoot =\n typeof hostBrickConf.properties?.renderRoot !== \"boolean\" ||\n hostBrickConf.properties.renderRoot;\n\n if (renderRoot) {\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [\n {\n brick: \"eo-micro-view\",\n properties: { style: { padding: \"12px\" } },\n children: [formConf],\n },\n ],\n };\n }\n\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [formConf],\n };\n}\n\nfunction formSchemaToBrick(\n schema: FormSchemaProperties,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf {\n const { id, bricks, events, context, mountPoint, instanceId: iid } = schema;\n let { brick, properties } = schema;\n\n // 根据字段类型获取默认配置\n const field = fields.find((item: FieldProperties) => item.fieldId === id);\n if (field) {\n const defaults = getDefaultProperties(field);\n if (!brick) {\n brick = defaults.brick;\n }\n properties = {\n ...defaults.properties,\n ...properties,\n };\n }\n\n const brickConf = {\n brick,\n properties,\n iid,\n slot: mountPoint,\n events,\n context,\n children: formSchemasToBricks(bricks, fields, formStateStoreId),\n [symbolForFormStateStoreId]: formStateStoreId,\n } as BrickConf;\n\n if (hasOwnProperty(schema, \"if\")) {\n brickConf.if = schema.if;\n }\n\n return brickConf;\n}\n\nfunction formSchemasToBricks(\n schemas: FormSchemaProperties[] | undefined,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf[] | undefined {\n if (Array.isArray(schemas)) {\n return schemas.map((schema) =>\n formSchemaToBrick(schema, fields, formStateStoreId)\n );\n }\n}\n\nfunction mergeEvents(\n targetEvents: BrickEventsMap | undefined,\n sourceEvents: BrickEventsMap\n): BrickEventsMap {\n const events = targetEvents ?? {};\n\n for (const [eventType, handlers] of Object.entries(sourceEvents)) {\n events[eventType] = hasOwnProperty(events, eventType)\n ? [events[eventType], handlers].flat()\n : handlers;\n }\n\n return events;\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAOA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAGA,MAAMK,cAAc,GAAG,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,SAAS,CAAC;AAEtE,SAASC,kBAAkBA,CAChCC,QAAiB,EACjBC,aAAwB,EACxBC,SAAuB,EACvBC,wBAA8C,EAC9CC,eAAgC,EACrB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACX,MAAMC,kBAAkB,GACtB,OAAOP,QAAQ,KAAK,QAAQ,GAAGQ,IAAI,CAACC,KAAK,CAACT,QAAQ,CAAC,GAAGA,QACjC;EAEvB,MAAMU,gBAAgB,GAAG,IAAAC,gBAAQ,EAAC,aAAa,CAAC;EAChD,MAAMC,cAAc,GAAG;IACrB,GAAGV,SAAS,CAACU,cAAc;IAC3BF;EACF,CAAC;;EAED;EACA,OAAOE,cAAc,CAACC,WAAW;EACjC,OAAOD,cAAc,CAACE,YAAY;EAClC,OAAOF,cAAc,CAACG,eAAe;EAErC,MAAMC,cAAc,GAAG,IAAIC,oBAAS,CAClC,YAAY,EACZC,SAAS,EACTd,eAAe,EACfM,gBACF,CAAC;EACDE,cAAc,CAACO,iBAAiB,CAACC,GAAG,CAACV,gBAAgB,EAAEM,cAAc,CAAC;EACtE,IAAIJ,cAAc,CAACS,mBAAmB,EAAE;IACtCT,cAAc,CAACS,mBAAmB,CAACC,IAAI,CAACN,cAAc,CAAC;EACzD;;EAEA;EACA,MAAMO,OAAO,IAAAlB,qBAAA,GAAGE,kBAAkB,CAACgB,OAAO,cAAAlB,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAChD,IAAI,CAACkB,OAAO,CAACC,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,KAAK,QAAQ,CAAC,EAAE;IACjDH,OAAO,CAACD,IAAI,CAAC;MAAEI,IAAI,EAAE;IAAS,CAAC,CAAC;EAClC;EAEAV,cAAc,CAACW,MAAM,CAACJ,OAAO,EAAEX,cAAc,EAAET,wBAAwB,CAAC;EAExE,MAAMyB,QAAQ,GAAGC,iBAAiB,CAChCtB,kBAAkB,CAACuB,UAAU,EAC7BvB,kBAAkB,CAACwB,MAAM,EACzBrB,gBACF,CAAC;EAED,IAAIZ,cAAc,CAACkC,QAAQ,CAACJ,QAAQ,CAACK,KAAK,CAAC,IAAIhC,aAAa,CAACiC,MAAM,EAAE;IACnEN,QAAQ,CAACM,MAAM,GAAGC,WAAW,CAACP,QAAQ,CAACM,MAAM,EAAEjC,aAAa,CAACiC,MAAM,CAAC;EACtE;EAEA,MAAME,UAAU,GACd,SAAA9B,qBAAA,GAAOL,aAAa,CAACoC,UAAU,cAAA/B,qBAAA,uBAAxBA,qBAAA,CAA0B8B,UAAU,MAAK,SAAS,IACzDnC,aAAa,CAACoC,UAAU,CAACD,UAAU;EAErC,IAAIA,UAAU,EAAE;IACd,OAAO;MACL,GAAGnC,aAAa;MAChBqC,KAAK,EAAEpB,SAAS;MAChBqB,QAAQ,EAAE,CACR;QACEN,KAAK,EAAE,eAAe;QACtBI,UAAU,EAAE;UAAEG,KAAK,EAAE;YAAEC,OAAO,EAAE;UAAO;QAAE,CAAC;QAC1CF,QAAQ,EAAE,CAACX,QAAQ;MACrB,CAAC;IAEL,CAAC;EACH;EAEA,OAAO;IACL,GAAG3B,aAAa;IAChBqC,KAAK,EAAEpB,SAAS;IAChBqB,QAAQ,EAAE,CAACX,QAAQ;EACrB,CAAC;AACH;AAEA,SAASC,iBAAiBA,CACxBa,MAA4B,EAC5BX,MAAyB,EACzBrB,gBAAwB,EACb;EACX,MAAM;IAAEiC,EAAE;IAAEC,MAAM;IAAEV,MAAM;IAAEX,OAAO;IAAEsB,UAAU;IAAEC,UAAU,EAAEC;EAAI,CAAC,GAAGL,MAAM;EAC3E,IAAI;IAAET,KAAK;IAAEI;EAAW,CAAC,GAAGK,MAAM;;EAElC;EACA,MAAMM,KAAK,GAAGjB,MAAM,CAACkB,IAAI,CAAEC,IAAqB,IAAKA,IAAI,CAACC,OAAO,KAAKR,EAAE,CAAC;EACzE,IAAIK,KAAK,EAAE;IACT,MAAMI,QAAQ,GAAG,IAAAC,0CAAoB,EAACL,KAAK,CAAC;IAC5C,IAAI,CAACf,KAAK,EAAE;MACVA,KAAK,GAAGmB,QAAQ,CAACnB,KAAK;IACxB;IACAI,UAAU,GAAG;MACX,GAAGe,QAAQ,CAACf,UAAU;MACtB,GAAGA;IACL,CAAC;EACH;EAEA,MAAMiB,SAAS,GAAG;IAChBrB,KAAK;IACLI,UAAU;IACVU,GAAG;IACHQ,IAAI,EAAEV,UAAU;IAChBX,MAAM;IACNX,OAAO;IACPgB,QAAQ,EAAEiB,mBAAmB,CAACZ,MAAM,EAAEb,MAAM,EAAErB,gBAAgB,CAAC;IAC/D,CAAC+C,oCAAyB,GAAG/C;EAC/B,CAAc;EAEd,IAAI,IAAAgD,uBAAc,EAAChB,MAAM,EAAE,IAAI,CAAC,EAAE;IAChCY,SAAS,CAACK,EAAE,GAAGjB,MAAM,CAACiB,EAAE;EAC1B;EAEA,OAAOL,SAAS;AAClB;AAEA,SAASE,mBAAmBA,CAC1BI,OAA2C,EAC3C7B,MAAyB,EACzBrB,gBAAwB,EACC;EACzB,IAAImD,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,EAAE;IAC1B,OAAOA,OAAO,CAACG,GAAG,CAAErB,MAAM,IACxBb,iBAAiB,CAACa,MAAM,EAAEX,MAAM,EAAErB,gBAAgB,CACpD,CAAC;EACH;AACF;AAEA,SAASyB,WAAWA,CAClB6B,YAAwC,EACxCC,YAA4B,EACZ;EAChB,MAAM/B,MAAM,GAAG8B,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI,CAAC,CAAC;EAEjC,KAAK,MAAM,CAACE,SAAS,EAAEC,QAAQ,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,YAAY,CAAC,EAAE;IAChE/B,MAAM,CAACgC,SAAS,CAAC,GAAG,IAAAR,uBAAc,EAACxB,MAAM,EAAEgC,SAAS,CAAC,GACjD,CAAChC,MAAM,CAACgC,SAAS,CAAC,EAAEC,QAAQ,CAAC,CAACG,IAAI,CAAC,CAAC,GACpCH,QAAQ;EACd;EAEA,OAAOjC,MAAM;AACf"}
|
|
@@ -427,10 +427,11 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
427
427
|
}
|
|
428
428
|
const routeSlotIndexes = new Set();
|
|
429
429
|
const rendered = await Promise.all(Object.entries(slots).map(([childSlotId, slotConf], index) => {
|
|
430
|
+
var _parentRoutes;
|
|
430
431
|
if (slotConf.type !== "routes") {
|
|
431
432
|
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, childSlotId, tplStack);
|
|
432
433
|
}
|
|
433
|
-
if (
|
|
434
|
+
if ((_parentRoutes = parentRoutes[parentRoutes.length - 1]) !== null && _parentRoutes !== void 0 && _parentRoutes.incrementalSubRoutes) {
|
|
434
435
|
routeSlotIndexes.add(index);
|
|
435
436
|
rendererContext.performIncrementalRender(async location => {
|
|
436
437
|
const {
|
|
@@ -454,10 +455,8 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
454
455
|
try {
|
|
455
456
|
incrementalOutput = await renderRoutes(brick, slotConf.routes, scopedRuntimeContext, rendererContext, parentRoutes, childSlotId, true);
|
|
456
457
|
|
|
457
|
-
//
|
|
458
|
-
|
|
459
|
-
return false;
|
|
460
|
-
}
|
|
458
|
+
// Do not ignore incremental rendering even if all sub-routes are missed.
|
|
459
|
+
// Since parent route is matched.
|
|
461
460
|
|
|
462
461
|
// Bailout if redirect or unauthenticated is set
|
|
463
462
|
if (rendererContext.reBailout(incrementalOutput)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_matchStoryboard","_bindListeners","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","slotId","isIncremental","matched","matchRoutes","output","getEmptyRenderOutput","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","menuRequests","newOutput","mergeRenderOutput","renderBricks","bricks","tag","RenderTag","BRICK","memoizeMenuRequests","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","lowerLevelRenderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_rawOutput$node","rawOutput","PLACEHOLDER","return","controlledOutput","onMount","onUnmount","lifeCycle","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","FormRendererElement","HTMLElement","$$typeof","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","size","loadProcessorsImperatively","join","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotIndexes","Set","entries","childSlotId","slotConf","flags","add","performIncrementalRender","location","homepage","pathname","matchHomepage","every","matchRoute","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequests","result","reCatch","childrenOutput","has","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","rows","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","name","unknownPolicy","catch","e"],"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 flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} 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, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: Promise<StaticMenuConf>[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n isIncremental?: boolean\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"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 } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n output.menuRequests.push(menuRequest);\n }\n\n if (route.type === \"routes\") {\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n } else {\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n\n if (returnNode.tag === RenderTag.BRICK) {\n rendererContext.memoizeMenuRequests(route, output.menuRequests);\n }\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[]\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\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 // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: (brickConf as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n keyPath,\n tplStack\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem` and\n // `forEachIndex` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\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 hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\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 lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext\n ) => {\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 getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n tplStack,\n keyPath\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n tplStack,\n keyPath\n );\n }\n }\n };\n\n const renderControlNode = async (runtimeContext: RuntimeContext) => {\n const rawOutput = await lowerLevelRenderControlNode(runtimeContext);\n rawOutput.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext);\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\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 [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput =\n await renderControlNode(scopedRuntimeContext);\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(\n reControlledOutput,\n scopedRuntimeContext,\n scopedStores\n );\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of scopedStores) {\n store.mountAsyncData();\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 if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\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 } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n customElements.define(\n FORM_RENDERER,\n class FormRendererElement extends HTMLElement {\n get $$typeof(): string {\n return \"form-renderer\";\n }\n }\n );\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n } else {\n confProps = brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\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 // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\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 asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\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 delete childRuntimeContext.forEachIndex;\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 routeSlotIndexes = new Set<number>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId,\n tplStack\n );\n }\n\n if (runtimeContext.flags[\"incremental-sub-route-rendering\"]) {\n routeSlotIndexes.add(index);\n rendererContext.performIncrementalRender(async (location) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) =>\n matchRoute(route, homepage, pathname)\n )\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId,\n true\n );\n\n // If all sub-routes are missed, ignore incremental rendering\n if (!incrementalOutput.route) {\n return false;\n }\n\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(incrementalOutput, scopedRuntimeContext, [\n scopedRuntimeContext.ctxStore,\n ...scopedStores,\n ]);\n\n await rendererContext.reMergeMenuRequests(\n slotConf.routes,\n incrementalOutput.route,\n incrementalOutput.menuRequests\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequests(\n slotConf.routes,\n incrementalOutput.route,\n incrementalOutput.menuRequests\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n return true;\n });\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequests: [],\n };\n rendered.forEach((item, index) => {\n if (routeSlotIndexes.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(slotId, [], item.node, brick);\n }\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\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\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: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[]\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const rows = dataSource.length;\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 forEachIndex: i,\n },\n rendererContext,\n parentRoutes,\n slotId,\n keyPath.concat(i * rows + j),\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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\nfunction getEmptyRenderOutput(): RenderOutput {\n return {\n blockingList: [],\n menuRequests: [],\n };\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\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load ${type} \"${name}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_matchStoryboard","_bindListeners","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","slotId","isIncremental","matched","matchRoutes","output","getEmptyRenderOutput","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","menuRequests","newOutput","mergeRenderOutput","renderBricks","bricks","tag","RenderTag","BRICK","memoizeMenuRequests","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","lowerLevelRenderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_rawOutput$node","rawOutput","PLACEHOLDER","return","controlledOutput","onMount","onUnmount","lifeCycle","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","FormRendererElement","HTMLElement","$$typeof","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","size","loadProcessorsImperatively","join","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotIndexes","Set","entries","childSlotId","slotConf","_parentRoutes","incrementalSubRoutes","add","performIncrementalRender","location","homepage","pathname","matchHomepage","every","matchRoute","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequests","result","reCatch","childrenOutput","has","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","rows","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} 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, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: Promise<StaticMenuConf>[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n isIncremental?: boolean\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"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 } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n output.menuRequests.push(menuRequest);\n }\n\n if (route.type === \"routes\") {\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n } else {\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n\n if (returnNode.tag === RenderTag.BRICK) {\n rendererContext.memoizeMenuRequests(route, output.menuRequests);\n }\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[]\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\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 // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: (brickConf as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n keyPath,\n tplStack\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem` and\n // `forEachIndex` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\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 hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\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 lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext\n ) => {\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 getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n tplStack,\n keyPath\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n slotId,\n tplStack,\n keyPath\n );\n }\n }\n };\n\n const renderControlNode = async (runtimeContext: RuntimeContext) => {\n const rawOutput = await lowerLevelRenderControlNode(runtimeContext);\n rawOutput.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext);\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\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 [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput =\n await renderControlNode(scopedRuntimeContext);\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(\n reControlledOutput,\n scopedRuntimeContext,\n scopedStores\n );\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of scopedStores) {\n store.mountAsyncData();\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 if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\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 } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n customElements.define(\n FORM_RENDERER,\n class FormRendererElement extends HTMLElement {\n get $$typeof(): string {\n return \"form-renderer\";\n }\n }\n );\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n } else {\n confProps = brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\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 // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\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 asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\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 delete childRuntimeContext.forEachIndex;\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 routeSlotIndexes = new Set<number>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId,\n tplStack\n );\n }\n\n if (\n (parentRoutes[parentRoutes.length - 1] as RouteConfOfBricks)\n ?.incrementalSubRoutes\n ) {\n routeSlotIndexes.add(index);\n rendererContext.performIncrementalRender(async (location) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) =>\n matchRoute(route, homepage, pathname)\n )\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(incrementalOutput, scopedRuntimeContext, [\n scopedRuntimeContext.ctxStore,\n ...scopedStores,\n ]);\n\n await rendererContext.reMergeMenuRequests(\n slotConf.routes,\n incrementalOutput.route,\n incrementalOutput.menuRequests\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequests(\n slotConf.routes,\n incrementalOutput.route,\n incrementalOutput.menuRequests\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n return true;\n });\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n childSlotId\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequests: [],\n };\n rendered.forEach((item, index) => {\n if (routeSlotIndexes.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(slotId, [], item.node, brick);\n }\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\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\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: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[]\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const rows = dataSource.length;\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 forEachIndex: i,\n },\n rendererContext,\n parentRoutes,\n slotId,\n keyPath.concat(i * rows + j),\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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\nfunction getEmptyRenderOutput(): RenderOutput {\n return {\n blockingList: [],\n menuRequests: [],\n };\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\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load ${type} \"${name}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ var _resolveDataStore = require("./resolveDataStore.js");
|
|
|
16
16
|
var _handleHttpError = require("../../handleHttpError.js");
|
|
17
17
|
var _computeRealProperties = require("../compute/computeRealProperties.js");
|
|
18
18
|
var _Runtime = require("../Runtime.js");
|
|
19
|
+
var _realTimeDataInspect = require("./realTimeDataInspect.js");
|
|
19
20
|
const supportContextResolveTriggerBrickLifeCycle = ["onBeforePageLoad", "onPageLoad", "onBeforePageLeave", "onPageLeave", "onAnchorLoad", "onAnchorUnload"];
|
|
20
21
|
class DataStore {
|
|
21
22
|
type;
|
|
@@ -23,17 +24,19 @@ class DataStore {
|
|
|
23
24
|
changeEventType;
|
|
24
25
|
pendingStack = [];
|
|
25
26
|
hostBrick;
|
|
27
|
+
stateStoreId;
|
|
26
28
|
batchUpdate = false;
|
|
27
29
|
batchUpdateContextsNames = [];
|
|
28
30
|
rendererContext;
|
|
29
31
|
routeMap = new WeakMap();
|
|
30
32
|
|
|
31
33
|
// 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整
|
|
32
|
-
constructor(type, hostBrick, rendererContext) {
|
|
34
|
+
constructor(type, hostBrick, rendererContext, stateStoreId) {
|
|
33
35
|
this.type = type;
|
|
34
36
|
this.changeEventType = this.type === "FORM_STATE" ? "formstate.change" : this.type === "STATE" ? "state.change" : "context.change";
|
|
35
37
|
this.hostBrick = hostBrick;
|
|
36
38
|
this.rendererContext = rendererContext;
|
|
39
|
+
this.stateStoreId = stateStoreId;
|
|
37
40
|
}
|
|
38
41
|
getAllValues() {
|
|
39
42
|
return Object.fromEntries([...this.data.entries()].map(([name, {
|
|
@@ -44,6 +47,23 @@ class DataStore {
|
|
|
44
47
|
var _this$data$get;
|
|
45
48
|
return (_this$data$get = this.data.get(name)) === null || _this$data$get === void 0 ? void 0 : _this$data$get.value;
|
|
46
49
|
}
|
|
50
|
+
notifyRealTimeDataChange(name, value) {
|
|
51
|
+
if (_realTimeDataInspect.realTimeDataInspectRoot) {
|
|
52
|
+
const {
|
|
53
|
+
tplStateStoreId
|
|
54
|
+
} = _realTimeDataInspect.realTimeDataInspectRoot;
|
|
55
|
+
if (tplStateStoreId ? this.type === "STATE" && this.stateStoreId === tplStateStoreId : this.type === "CTX") {
|
|
56
|
+
(0, _realTimeDataInspect.callRealTimeDataInspectHooks)({
|
|
57
|
+
changeType: "update",
|
|
58
|
+
tplStateStoreId,
|
|
59
|
+
detail: {
|
|
60
|
+
name,
|
|
61
|
+
value
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
47
67
|
getAffectListByContext(name) {
|
|
48
68
|
const affectNames = [name];
|
|
49
69
|
this.data.forEach((value, key) => {
|
|
@@ -278,6 +298,9 @@ class DataStore {
|
|
|
278
298
|
value = await (0, _computeRealValue.asyncComputeRealValue)(dataConf.value, runtimeContext);
|
|
279
299
|
}
|
|
280
300
|
}
|
|
301
|
+
if (this.data.has(dataConf.name)) {
|
|
302
|
+
throw new Error(`${this.type} '${dataConf.name}' has already been declared`);
|
|
303
|
+
}
|
|
281
304
|
const newData = {
|
|
282
305
|
name: dataConf.name,
|
|
283
306
|
value,
|
|
@@ -319,9 +342,9 @@ class DataStore {
|
|
|
319
342
|
}, dataConf));
|
|
320
343
|
}
|
|
321
344
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
345
|
+
newData.eventTarget.addEventListener(this.changeEventType, e => {
|
|
346
|
+
this.notifyRealTimeDataChange(dataConf.name, e.detail);
|
|
347
|
+
});
|
|
325
348
|
this.data.set(dataConf.name, newData);
|
|
326
349
|
if (Array.isArray(routePath)) {
|
|
327
350
|
for (const route of routePath) {
|