@next-core/runtime 1.14.2 → 1.16.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/createRoot.js +6 -5
- package/dist/cjs/createRoot.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +2 -2
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +2 -2
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +2 -2
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +45 -4
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/cjs/internal/Router.js +5 -4
- package/dist/cjs/internal/Router.js.map +1 -1
- package/dist/cjs/internal/Runtime.js +2 -2
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/cjs/internal/bindListeners.js +24 -4
- package/dist/cjs/internal/bindListeners.js.map +1 -1
- package/dist/cjs/internal/data/DataStore.js +18 -1
- package/dist/cjs/internal/data/DataStore.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +1 -0
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/createRoot.js +6 -5
- package/dist/esm/createRoot.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +2 -2
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js +2 -2
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/esm/internal/Renderer.js +2 -2
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +51 -4
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/esm/internal/Router.js +5 -4
- package/dist/esm/internal/Router.js.map +1 -1
- package/dist/esm/internal/Runtime.js +2 -2
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/bindListeners.js +30 -4
- package/dist/esm/internal/bindListeners.js.map +1 -1
- package/dist/esm/internal/data/DataStore.js +17 -1
- package/dist/esm/internal/data/DataStore.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +1 -0
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/types/internal/CustomTemplates/expandCustomTemplate.d.ts +2 -1
- package/dist/types/internal/FormRenderer/expandFormRenderer.d.ts +2 -1
- package/dist/types/internal/RendererContext.d.ts +4 -2
- package/dist/types/internal/Runtime.d.ts +7 -0
- package/dist/types/internal/data/DataStore.d.ts +5 -3
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expandCustomTemplate.js","names":["uniqueId","customTemplates","DataStore","setupTemplateProxy","setupUseBrickInTemplate","childrenToSlots","hooks","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostProperties","_hooks$flowApi","tplStateStoreId","runtimeContext","_objectSpread","forEachItem","formStateStoreId","tplStateStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","get","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","_objectWithoutProperties","_excluded","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","type","map","item","expandBrickInTemplate","brickConfInTemplate","if","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","_excluded2","transpiledSlots","fromEntries","_ref","_slotConf$bricks","slotName","slotConf"],"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 AsyncProperties,\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\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostProperties: AsyncProperties\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.formStateStoreId;\n\n const tplStateStore = new DataStore(\"STATE\", hostBrick);\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, asyncHostProperties);\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 asyncHostProperties,\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":";;;;AAOA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,SAAS,QAAQ,sBAAsB;AAEhD,SAASC,kBAAkB,QAAQ,yBAAyB;AAO5D,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,eAAe,QAAQ,gBAAgB;AAChD,SAASC,KAAK,QAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"expandCustomTemplate.js","names":["uniqueId","customTemplates","DataStore","setupTemplateProxy","setupUseBrickInTemplate","childrenToSlots","hooks","expandCustomTemplate","tplTagName","brickConf","hostBrick","asyncHostProperties","rendererContext","_hooks$flowApi","tplStateStoreId","runtimeContext","_objectSpread","forEachItem","formStateStoreId","tplStateStore","tplStateStoreMap","set","tplStateStoreScope","push","bricks","proxy","state","contracts","get","flowApi","collectWidgetContract","define","slots","originalExternalSlots","children","externalChildren","restBrickConf","_objectWithoutProperties","_excluded","newBrickConf","brick","tplHostMetadata","internalBricksByRef","Map","reversedProxies","properties","from","to","Object","entries","proxies","ref","hostContext","externalSlots","type","map","item","expandBrickInTemplate","brickConfInTemplate","if","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","_excluded2","transpiledSlots","fromEntries","_ref","_slotConf$bricks","slotName","slotConf"],"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 AsyncProperties,\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 asyncHostProperties: AsyncProperties,\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.formStateStoreId;\n\n const tplStateStore = new DataStore(\"STATE\", hostBrick, rendererContext);\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, asyncHostProperties);\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 asyncHostProperties,\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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"}
|
|
@@ -4,7 +4,7 @@ import { uniqueId } from "lodash";
|
|
|
4
4
|
import { DataStore } from "../data/DataStore.js";
|
|
5
5
|
import { getDefaultProperties } from "./getDefaultProperties.js";
|
|
6
6
|
import { symbolForFormStateStoreId } from "./constants.js";
|
|
7
|
-
export function expandFormRenderer(formData, hostBrickConf, hostBrick, asyncHostProperties) {
|
|
7
|
+
export function expandFormRenderer(formData, hostBrickConf, hostBrick, asyncHostProperties, rendererContext) {
|
|
8
8
|
var _normalizedFormData$c, _hostBrickConf$proper;
|
|
9
9
|
var normalizedFormData = typeof formData === "string" ? JSON.parse(formData) : formData;
|
|
10
10
|
var formStateStoreId = uniqueId("form-state-");
|
|
@@ -15,7 +15,7 @@ export function expandFormRenderer(formData, hostBrickConf, hostBrick, asyncHost
|
|
|
15
15
|
// There is a boundary for `forEachItem` and `STATE` between form internals and externals.
|
|
16
16
|
delete runtimeContext.forEachItem;
|
|
17
17
|
delete runtimeContext.tplStateStoreId;
|
|
18
|
-
var formStateStore = new DataStore("FORM_STATE");
|
|
18
|
+
var formStateStore = new DataStore("FORM_STATE", undefined, rendererContext);
|
|
19
19
|
runtimeContext.formStateStoreMap.set(formStateStoreId, formStateStore);
|
|
20
20
|
if (runtimeContext.formStateStoreScope) {
|
|
21
21
|
runtimeContext.formStateStoreScope.push(formStateStore);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expandFormRenderer.js","names":["hasOwnProperty","uniqueId","DataStore","getDefaultProperties","symbolForFormStateStoreId","expandFormRenderer","formData","hostBrickConf","hostBrick","asyncHostProperties","_normalizedFormData$c","_hostBrickConf$proper","normalizedFormData","JSON","parse","formStateStoreId","runtimeContext","_objectSpread","forEachItem","tplStateStoreId","formStateStore","formStateStoreMap","set","formStateStoreScope","push","context","some","ctx","name","define","formConf","formSchemaToBrick","formSchema","fields","brick","events","mergeEvents","renderRoot","properties","slots","
|
|
1
|
+
{"version":3,"file":"expandFormRenderer.js","names":["hasOwnProperty","uniqueId","DataStore","getDefaultProperties","symbolForFormStateStoreId","expandFormRenderer","formData","hostBrickConf","hostBrick","asyncHostProperties","rendererContext","_normalizedFormData$c","_hostBrickConf$proper","normalizedFormData","JSON","parse","formStateStoreId","runtimeContext","_objectSpread","forEachItem","tplStateStoreId","formStateStore","undefined","formStateStoreMap","set","formStateStoreScope","push","context","some","ctx","name","define","formConf","formSchemaToBrick","formSchema","fields","brick","events","mergeEvents","renderRoot","properties","slots","children","style","padding","content","bricks","type","schema","id","mountPoint","instanceId","iid","field","find","item","fieldId","defaults","brickConf","slot","formSchemasToBricks","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 { AsyncProperties, 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\nexport function expandFormRenderer(\n formData: unknown,\n hostBrickConf: BrickConf,\n hostBrick: RuntimeBrick,\n asyncHostProperties: AsyncProperties,\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.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, asyncHostProperties);\n\n const formConf = formSchemaToBrick(\n normalizedFormData.formSchema,\n normalizedFormData.fields,\n formStateStoreId\n );\n\n if (formConf.brick === \"forms.general-form\" && 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: \"basic-bricks.micro-view\",\n properties: { style: { padding: \"12px\" } },\n slots: {\n content: { bricks: [formConf], type: \"bricks\" },\n },\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":"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"}
|
|
@@ -354,9 +354,9 @@ function _renderBrick() {
|
|
|
354
354
|
rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);
|
|
355
355
|
var expandedBrickConf = brickConf;
|
|
356
356
|
if (tplTagName) {
|
|
357
|
-
expandedBrickConf = expandCustomTemplate(tplTagName, brickConf, brick, asyncProperties);
|
|
357
|
+
expandedBrickConf = expandCustomTemplate(tplTagName, brickConf, brick, asyncProperties, rendererContext);
|
|
358
358
|
} else if (brickName === FORM_RENDERER) {
|
|
359
|
-
expandedBrickConf = expandFormRenderer(formData, brickConf, brick, asyncProperties);
|
|
359
|
+
expandedBrickConf = expandFormRenderer(formData, brickConf, brick, asyncProperties, rendererContext);
|
|
360
360
|
}
|
|
361
361
|
if (expandedBrickConf.portal) {
|
|
362
362
|
// A portal brick has no slotId.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","isTrackAll","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","isPreEvaluated","getPreEvaluatedRaw","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_hooks$checkPermissio2","_runtimeContext$app","length","undefined","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","_objectWithoutProperties","_excluded2","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","strict","brickName","startsWith","ensureValidControlBrick","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","catchLoadBrick","unknownBricks","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","FormRendererElement","HTMLElement","$$typeof","tag","BRICK","return","events","portal","iid","ref","formData","confProps","_brickConf$properties","_ref3","properties","_excluded3","trackingContextList","loadProperties","_ref4","computedPropsFromHost","_brick$properties","computed","propName","propValue","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref5","_ref6","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","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 loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderNode,\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\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n 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 switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // 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 slotId,\n key,\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`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n 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 renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoadBrick(\n loadBricksImperatively([brickName], getBrickPackages()),\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 catchLoadBrick(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n )\n );\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 // const confProps = brickConf.properties;\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 // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n confProps,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\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: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoadBrick(\n promise: Promise<unknown>,\n brickName: string,\n unknownBricks: RendererContext[\"unknownBricks\"]\n) {\n return unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","isTrackAll","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","isPreEvaluated","getPreEvaluatedRaw","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_hooks$checkPermissio2","_runtimeContext$app","length","undefined","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","_objectWithoutProperties","_excluded2","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","strict","brickName","startsWith","ensureValidControlBrick","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","catchLoadBrick","unknownBricks","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","FormRendererElement","HTMLElement","$$typeof","tag","BRICK","return","events","portal","iid","ref","formData","confProps","_brickConf$properties","_ref3","properties","_excluded3","trackingContextList","loadProperties","_ref4","computedPropsFromHost","_brick$properties","computed","propName","propValue","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref5","_ref6","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","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 loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderNode,\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\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n 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 switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // 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 slotId,\n key,\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`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n 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 renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoadBrick(\n loadBricksImperatively([brickName], getBrickPackages()),\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 catchLoadBrick(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n )\n );\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 // const confProps = brickConf.properties;\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 // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n confProps,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncProperties,\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 } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\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: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoadBrick(\n promise: Promise<unknown>,\n brickName: string,\n unknownBricks: RendererContext[\"unknownBricks\"]\n) {\n return unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
|
|
@@ -12,11 +12,13 @@ import { mediaEventTarget } from "./mediaQuery.js";
|
|
|
12
12
|
import { mountTree } from "./mount.js";
|
|
13
13
|
import { RenderTag } from "./enums.js";
|
|
14
14
|
import { unbindTemplateProxy } from "./CustomTemplates/bindTemplateProxy.js";
|
|
15
|
-
|
|
15
|
+
import { hooks } from "./Runtime.js";
|
|
16
|
+
var commonLifeCycles = ["onMount", "onUnmount", "onMediaChange", "onScrollIntoView", "onMessage", "onMessageClose"];
|
|
16
17
|
var pageOnlyLifeCycles = ["onBeforePageLoad", "onPageLoad", "onPageLeave", "onBeforePageLeave", "onAnchorLoad", "onAnchorUnload"];
|
|
17
18
|
var _memoizedLifeCycle = /*#__PURE__*/new WeakMap();
|
|
18
19
|
var _observers = /*#__PURE__*/new WeakMap();
|
|
19
20
|
var _mediaListener = /*#__PURE__*/new WeakMap();
|
|
21
|
+
var _arbitraryLifeCycle = /*#__PURE__*/new WeakMap();
|
|
20
22
|
var _memoizedControlNodes = /*#__PURE__*/new WeakMap();
|
|
21
23
|
var _unmountBricks = /*#__PURE__*/new WeakSet();
|
|
22
24
|
var _initializeRerenderBricks = /*#__PURE__*/new WeakSet();
|
|
@@ -31,7 +33,7 @@ export class RendererContext {
|
|
|
31
33
|
constructor(scope, options) {
|
|
32
34
|
var _options$unknownBrick;
|
|
33
35
|
_classPrivateMethodInitSpec(this, _addObserver);
|
|
34
|
-
// Note: no `onScrollIntoView`
|
|
36
|
+
// Note: no `onScrollIntoView` and `onMessage`
|
|
35
37
|
_classPrivateMethodInitSpec(this, _dispatchGeneralLifeCycle);
|
|
36
38
|
_classPrivateMethodInitSpec(this, _initializeRerenderBricks);
|
|
37
39
|
_classPrivateMethodInitSpec(this, _unmountBricks);
|
|
@@ -49,10 +51,11 @@ export class RendererContext {
|
|
|
49
51
|
onMediaChange: [],
|
|
50
52
|
onScrollIntoView: [],
|
|
51
53
|
onMount: [],
|
|
52
|
-
onUnmount: []
|
|
54
|
+
onUnmount: [],
|
|
55
|
+
onMessage: [],
|
|
56
|
+
onMessageClose: []
|
|
53
57
|
}
|
|
54
58
|
});
|
|
55
|
-
// #observers: IntersectionObserver[] = [];
|
|
56
59
|
_classPrivateFieldInitSpec(this, _observers, {
|
|
57
60
|
writable: true,
|
|
58
61
|
value: new Map()
|
|
@@ -61,6 +64,10 @@ export class RendererContext {
|
|
|
61
64
|
writable: true,
|
|
62
65
|
value: void 0
|
|
63
66
|
});
|
|
67
|
+
_classPrivateFieldInitSpec(this, _arbitraryLifeCycle, {
|
|
68
|
+
writable: true,
|
|
69
|
+
value: new Map()
|
|
70
|
+
});
|
|
64
71
|
_classPrivateFieldInitSpec(this, _memoizedControlNodes, {
|
|
65
72
|
writable: true,
|
|
66
73
|
value: void 0
|
|
@@ -88,6 +95,14 @@ export class RendererContext {
|
|
|
88
95
|
console.error("`lifeCycle.useResolves` is dropped in v3:", lifeCycle);
|
|
89
96
|
}
|
|
90
97
|
}
|
|
98
|
+
registerArbitraryLifeCycle(lifeCycle, fn) {
|
|
99
|
+
var arbitraryCallbacks = _classPrivateFieldGet(this, _arbitraryLifeCycle).get(lifeCycle);
|
|
100
|
+
if (arbitraryCallbacks) {
|
|
101
|
+
arbitraryCallbacks.add(fn);
|
|
102
|
+
} else {
|
|
103
|
+
_classPrivateFieldGet(this, _arbitraryLifeCycle).set(lifeCycle, new Set([fn]));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
91
106
|
memoizeControlNode(slotId, key, node, returnNode) {
|
|
92
107
|
if (!_classPrivateFieldGet(this, _memoizedControlNodes)) {
|
|
93
108
|
_classPrivateFieldSet(this, _memoizedControlNodes, new WeakMap());
|
|
@@ -209,6 +224,7 @@ export class RendererContext {
|
|
|
209
224
|
_classPrivateFieldSet(this, _mediaListener, undefined);
|
|
210
225
|
}
|
|
211
226
|
_classPrivateFieldSet(this, _memoizedControlNodes, undefined);
|
|
227
|
+
_classPrivateFieldGet(this, _arbitraryLifeCycle).clear();
|
|
212
228
|
}
|
|
213
229
|
dispatchBeforePageLoad() {
|
|
214
230
|
_classPrivateMethodGet(this, _dispatchGeneralLifeCycle, _dispatchGeneralLifeCycle2).call(this, "onBeforePageLoad", new CustomEvent("page.beforeLoad"));
|
|
@@ -258,6 +274,31 @@ export class RendererContext {
|
|
|
258
274
|
});
|
|
259
275
|
mediaEventTarget.addEventListener("change", _classPrivateFieldGet(this, _mediaListener));
|
|
260
276
|
}
|
|
277
|
+
initializeMessageDispatcher() {
|
|
278
|
+
var _hooks$messageDispatc;
|
|
279
|
+
var _loop = function (brick) {
|
|
280
|
+
var _loop2 = function (conf) {
|
|
281
|
+
var _hooks$messageDispatc2;
|
|
282
|
+
hooks === null || hooks === void 0 ? void 0 : (_hooks$messageDispatc2 = hooks.messageDispatcher) === null || _hooks$messageDispatc2 === void 0 ? void 0 : _hooks$messageDispatc2.onMessage(conf.channel, detail => {
|
|
283
|
+
listenerFactory(conf.handlers, brick.runtimeContext, brick)(new CustomEvent("message.push", {
|
|
284
|
+
detail
|
|
285
|
+
}));
|
|
286
|
+
});
|
|
287
|
+
};
|
|
288
|
+
for (var conf of [].concat(confList)) {
|
|
289
|
+
_loop2(conf);
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
for (var {
|
|
293
|
+
brick,
|
|
294
|
+
handlers: confList
|
|
295
|
+
} of _classPrivateFieldGet(this, _memoizedLifeCycle).onMessage) {
|
|
296
|
+
_loop(brick);
|
|
297
|
+
}
|
|
298
|
+
hooks === null || hooks === void 0 ? void 0 : (_hooks$messageDispatc = hooks.messageDispatcher) === null || _hooks$messageDispatc === void 0 ? void 0 : _hooks$messageDispatc.onClose(() => {
|
|
299
|
+
_classPrivateMethodGet(this, _dispatchGeneralLifeCycle, _dispatchGeneralLifeCycle2).call(this, "onMessageClose", new CustomEvent("message.close"));
|
|
300
|
+
});
|
|
301
|
+
}
|
|
261
302
|
dispatchOnMount() {
|
|
262
303
|
_classPrivateMethodGet(this, _dispatchGeneralLifeCycle, _dispatchGeneralLifeCycle2).call(this, "onMount", new CustomEvent("mount"));
|
|
263
304
|
}
|
|
@@ -334,6 +375,12 @@ function _dispatchGeneralLifeCycle2(type, event) {
|
|
|
334
375
|
} of _classPrivateFieldGet(this, _memoizedLifeCycle)[type]) {
|
|
335
376
|
listenerFactory(handlers, brick.runtimeContext, brick)(event);
|
|
336
377
|
}
|
|
378
|
+
var arbitraryCallbacks = _classPrivateFieldGet(this, _arbitraryLifeCycle).get(type);
|
|
379
|
+
if (arbitraryCallbacks) {
|
|
380
|
+
for (var fn of arbitraryCallbacks) {
|
|
381
|
+
fn();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
337
384
|
}
|
|
338
385
|
function _addObserver2(brick, conf) {
|
|
339
386
|
var _conf$threshold;
|