@next-core/runtime 1.20.3 → 1.21.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/Renderer.js +27 -21
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +4 -4
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/cjs/internal/Router.js +7 -0
- package/dist/cjs/internal/Router.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +3 -2
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/Renderer.js +30 -23
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +4 -4
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/esm/internal/Router.js +7 -0
- package/dist/esm/internal/Router.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +3 -2
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/types/internal/Renderer.d.ts +2 -2
- package/dist/types/internal/RendererContext.d.ts +2 -2
- package/dist/types/internal/secret_internals.d.ts +2 -1
- package/package.json +2 -2
|
@@ -101,23 +101,24 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
|
|
|
101
101
|
}
|
|
102
102
|
return output;
|
|
103
103
|
}
|
|
104
|
-
async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack,
|
|
104
|
+
async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath) {
|
|
105
105
|
const output = {
|
|
106
106
|
blockingList: [],
|
|
107
107
|
menuRequests: []
|
|
108
108
|
};
|
|
109
|
+
const kPath = keyPath !== null && keyPath !== void 0 ? keyPath : [];
|
|
109
110
|
// 多个构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
110
|
-
const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, slotId, index, tplStack && new Map(tplStack))));
|
|
111
|
+
const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, slotId, kPath.concat(index), tplStack && new Map(tplStack))));
|
|
111
112
|
rendered.forEach((item, index) => {
|
|
112
|
-
if (
|
|
113
|
+
if (item.hasTrackingControls) {
|
|
113
114
|
// Memoize a render node before it's been merged.
|
|
114
|
-
rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);
|
|
115
|
+
rendererContext.memoizeControlNode(slotId, kPath.concat(index), item.node, returnNode);
|
|
115
116
|
}
|
|
116
117
|
mergeRenderOutput(output, item);
|
|
117
118
|
});
|
|
118
119
|
return output;
|
|
119
120
|
}
|
|
120
|
-
async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, slotId,
|
|
121
|
+
async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, slotId, keyPath = [], tplStack = new Map()) {
|
|
121
122
|
var _hooks$checkPermissio2, _runtimeContext$app;
|
|
122
123
|
const output = {
|
|
123
124
|
blockingList: [],
|
|
@@ -158,7 +159,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
158
159
|
...acc,
|
|
159
160
|
[symbol]: brickConf[symbol]
|
|
160
161
|
}), {})
|
|
161
|
-
}, _runtimeContext, rendererContext, slotId,
|
|
162
|
+
}, _runtimeContext, rendererContext, slotId, keyPath, tplStack);
|
|
162
163
|
}
|
|
163
164
|
const tplStateStoreId = brickConf[_constants.symbolForTplStateStoreId];
|
|
164
165
|
const formStateStoreId = brickConf[_constants2.symbolForFormStateStoreId];
|
|
@@ -215,12 +216,12 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
215
216
|
if (!Array.isArray(computedDataSource)) {
|
|
216
217
|
return output;
|
|
217
218
|
}
|
|
218
|
-
return renderForEach(returnNode, computedDataSource, bricks, runtimeContext, rendererContext, slotId, tplStack);
|
|
219
|
+
return renderForEach(returnNode, computedDataSource, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath);
|
|
219
220
|
}
|
|
220
221
|
case ":if":
|
|
221
222
|
case ":switch":
|
|
222
223
|
{
|
|
223
|
-
return renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack,
|
|
224
|
+
return renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath);
|
|
224
225
|
}
|
|
225
226
|
}
|
|
226
227
|
};
|
|
@@ -239,7 +240,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
239
240
|
await Promise.all(controlOutput.blockingList);
|
|
240
241
|
// Ignore stale renders
|
|
241
242
|
if (renderId === currentRenderId) {
|
|
242
|
-
rendererContext.rerenderControlNode(slotId,
|
|
243
|
+
rendererContext.rerenderControlNode(slotId, keyPath, controlOutput.node, returnNode);
|
|
243
244
|
}
|
|
244
245
|
};
|
|
245
246
|
const debouncedListener = (0, _lodash.debounce)(listener);
|
|
@@ -260,7 +261,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
260
261
|
|
|
261
262
|
// Widgets need to be defined before rendering.
|
|
262
263
|
if (/\.tpl-/.test(brickName) && !_CustomTemplates.customTemplates.get(brickName)) {
|
|
263
|
-
await
|
|
264
|
+
await catchLoad((0, _loader.loadBricksImperatively)([brickName], (0, _Runtime.getBrickPackages)()), "brick", brickName, rendererContext.unknownBricks);
|
|
264
265
|
}
|
|
265
266
|
const tplTagName = (0, _utils.getTagNameOfCustomTemplate)(brickName, (_runtimeContext$app = runtimeContext.app) === null || _runtimeContext$app === void 0 ? void 0 : _runtimeContext$app.id);
|
|
266
267
|
if (tplTagName) {
|
|
@@ -278,7 +279,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
278
279
|
}
|
|
279
280
|
});
|
|
280
281
|
} else {
|
|
281
|
-
output.blockingList.push(
|
|
282
|
+
output.blockingList.push(catchLoad((0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)()), "brick", brickName, rendererContext.unknownBricks));
|
|
282
283
|
}
|
|
283
284
|
}
|
|
284
285
|
let formData;
|
|
@@ -309,13 +310,13 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
309
310
|
src,
|
|
310
311
|
...attrs
|
|
311
312
|
} = props;
|
|
312
|
-
await (0, _loader.loadScript)(src, prefix, attrs);
|
|
313
|
+
await catchLoad((0, _loader.loadScript)(src, prefix, attrs), "script", src, "silent");
|
|
313
314
|
} else {
|
|
314
315
|
const {
|
|
315
316
|
href,
|
|
316
317
|
...attrs
|
|
317
318
|
} = props;
|
|
318
|
-
await (0, _loader.loadStyle)(href, prefix, attrs);
|
|
319
|
+
await catchLoad((0, _loader.loadStyle)(href, prefix, attrs), "stylesheet", href, "silent");
|
|
319
320
|
}
|
|
320
321
|
return output;
|
|
321
322
|
}
|
|
@@ -336,7 +337,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
336
337
|
// 在最终挂载前,先加载所有可能用到的 processors。
|
|
337
338
|
const usedProcessors = (0, _storyboard.strictCollectMemberUsage)([brickConf.events, brickConf.lifeCycle], "PROCESSORS", 2);
|
|
338
339
|
if (usedProcessors.size > 0) {
|
|
339
|
-
output.blockingList.push((0, _loader.loadProcessorsImperatively)(usedProcessors, (0, _Runtime.getBrickPackages)()));
|
|
340
|
+
output.blockingList.push(catchLoad((0, _loader.loadProcessorsImperatively)(usedProcessors, (0, _Runtime.getBrickPackages)()), "processors", [...usedProcessors].join(", "), rendererContext.unknownBricks));
|
|
340
341
|
}
|
|
341
342
|
|
|
342
343
|
// 加载构件属性和加载子构件等任务,可以并行。
|
|
@@ -403,20 +404,25 @@ function ensureValidControlBrick(brick) {
|
|
|
403
404
|
throw new Error(`Unknown storyboard control node: "${brick}"`);
|
|
404
405
|
}
|
|
405
406
|
}
|
|
406
|
-
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, slotId, tplStack) {
|
|
407
|
+
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath) {
|
|
407
408
|
const output = {
|
|
408
409
|
blockingList: [],
|
|
409
410
|
menuRequests: []
|
|
410
411
|
};
|
|
412
|
+
const rows = dataSource.length;
|
|
411
413
|
const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map((brickConf, j) => renderBrick(returnNode, brickConf, {
|
|
412
414
|
...runtimeContext,
|
|
413
415
|
forEachItem: item
|
|
414
|
-
}, rendererContext, slotId, i * j, tplStack && new Map(tplStack))))));
|
|
416
|
+
}, rendererContext, slotId, keyPath.concat(i * rows + j), tplStack && new Map(tplStack))))));
|
|
415
417
|
|
|
416
418
|
// 多层构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
417
|
-
|
|
419
|
+
rendered.flat().forEach((item, index) => {
|
|
420
|
+
if (item.hasTrackingControls) {
|
|
421
|
+
// Memoize a render node before it's been merged.
|
|
422
|
+
rendererContext.memoizeControlNode(slotId, keyPath.concat(index), item.node, returnNode);
|
|
423
|
+
}
|
|
418
424
|
mergeRenderOutput(output, item);
|
|
419
|
-
}
|
|
425
|
+
});
|
|
420
426
|
return output;
|
|
421
427
|
}
|
|
422
428
|
function loadMenu(menuConf, runtimeContext) {
|
|
@@ -486,10 +492,10 @@ function childrenToSlots(children, originalSlots) {
|
|
|
486
492
|
}
|
|
487
493
|
return newSlots;
|
|
488
494
|
}
|
|
489
|
-
function
|
|
490
|
-
return
|
|
495
|
+
function catchLoad(promise, type, name, unknownPolicy) {
|
|
496
|
+
return unknownPolicy === "silent" ? promise.catch(e => {
|
|
491
497
|
// eslint-disable-next-line no-console
|
|
492
|
-
console.error(`Load
|
|
498
|
+
console.error(`Load ${type} "${name}" failed:`, e);
|
|
493
499
|
}) : promise;
|
|
494
500
|
}
|
|
495
501
|
//# sourceMappingURL=Renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_storyboard","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","key","_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","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","renderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","controlOutput","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","catchLoadBrick","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","tag","RenderTag","BRICK","return","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","lifeCycle","size","loadProcessorsImperatively","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","undefined","childRuntimeContext","loadChildren","entries","childSlotId","slotConf","childrenOutput","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","menuConf","warn","rest","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 loadProcessorsImperatively,\n loadScript,\n loadStyle,\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 {\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 { 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\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\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 controlOutput = await renderControlNode();\n controlOutput.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(controlOutput.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n controlOutput.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 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 loadScript(src as string, prefix, attrs);\n } else {\n const { href, ...attrs } = props;\n await loadStyle(href as string, prefix, attrs);\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 loadProcessorsImperatively(usedProcessors, getBrickPackages())\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 } 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 // 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\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":["_loader","require","_cook","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_storyboard","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","concat","Map","forEach","item","hasTrackingControls","memoizeControlNode","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","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","renderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","controlOutput","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","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","tag","RenderTag","BRICK","return","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","lifeCycle","size","loadProcessorsImperatively","join","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","undefined","childRuntimeContext","loadChildren","entries","childSlotId","slotConf","childrenOutput","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","rows","i","j","flat","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 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 { 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 { 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\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\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 keyPath?: number[]\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\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 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.memoizeControlNode(\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: RenderNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n keyPath: 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 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`\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 keyPath\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n keyPath\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 controlOutput = await renderControlNode();\n controlOutput.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(controlOutput.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n keyPath,\n controlOutput.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 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 } 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 keyPath: number[]\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\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 },\n rendererContext,\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.memoizeControlNode(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\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 // 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\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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"}
|
|
@@ -109,11 +109,11 @@ class RendererContext {
|
|
|
109
109
|
(0, _classPrivateFieldGet2.default)(this, _arbitraryLifeCycle).set(lifeCycle, new Set([fn]));
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
memoizeControlNode(slotId,
|
|
112
|
+
memoizeControlNode(slotId, keyPath, node, returnNode) {
|
|
113
113
|
if (!(0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes)) {
|
|
114
114
|
(0, _classPrivateFieldSet2.default)(this, _memoizedControlNodes, new WeakMap());
|
|
115
115
|
}
|
|
116
|
-
const memKey =
|
|
116
|
+
const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
|
|
117
117
|
let mem = (0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes).get(returnNode);
|
|
118
118
|
if (!mem) {
|
|
119
119
|
mem = new Map();
|
|
@@ -126,9 +126,9 @@ class RendererContext {
|
|
|
126
126
|
lastPortal: getLastPortalNode(node)
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
rerenderControlNode(slotId,
|
|
129
|
+
rerenderControlNode(slotId, keyPath, node, returnNode) {
|
|
130
130
|
var _prevLastNormal$eleme, _prevLastNormal$eleme2, _prevLastPortal$eleme, _prevLastPortal$eleme2;
|
|
131
|
-
const memKey =
|
|
131
|
+
const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
|
|
132
132
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
133
133
|
const memoized = (0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes).get(returnNode).get(memKey);
|
|
134
134
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_arbitraryLifeCycle","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","registerArbitraryLifeCycle","fn","arbitraryCallbacks","get","add","set","Set","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet2","memKey","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n ScrollIntoViewConf,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n this.#arbitraryLifeCycle.clear();\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_arbitraryLifeCycle","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","registerArbitraryLifeCycle","fn","arbitraryCallbacks","get","add","set","Set","memoizeControlNode","slotId","keyPath","node","returnNode","_classPrivateFieldSet2","memKey","join","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n ScrollIntoViewConf,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n this.#arbitraryLifeCycle.clear();\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":"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"}
|
|
@@ -248,6 +248,7 @@ async function _render2(location) {
|
|
|
248
248
|
_Runtime.hooks === null || _Runtime.hooks === void 0 || (_hooks$flowApi = _Runtime.hooks.flowApi) === null || _hooks$flowApi === void 0 ? void 0 : _hooks$flowApi.clearCollectWidgetContract();
|
|
249
249
|
const history = (0, _history3.getHistory)();
|
|
250
250
|
history.unblock();
|
|
251
|
+
const renderStartTime = performance.now();
|
|
251
252
|
const storyboard = (0, _matchStoryboard.matchStoryboard)((0, _classPrivateFieldGet6.default)(this, _storyboards), location.pathname);
|
|
252
253
|
const previousApp = (_classPrivateFieldGet5 = (0, _classPrivateFieldGet6.default)(this, _runtimeContext)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.app;
|
|
253
254
|
if (storyboard !== null && storyboard !== void 0 && storyboard.app) {
|
|
@@ -403,6 +404,12 @@ async function _render2(location) {
|
|
|
403
404
|
rendererContext.initializeMediaChange();
|
|
404
405
|
rendererContext.initializeMessageDispatcher();
|
|
405
406
|
}
|
|
407
|
+
const renderTime = performance.now() - renderStartTime;
|
|
408
|
+
window.dispatchEvent(new CustomEvent("route.render", {
|
|
409
|
+
detail: {
|
|
410
|
+
renderTime
|
|
411
|
+
}
|
|
412
|
+
}));
|
|
406
413
|
return;
|
|
407
414
|
}
|
|
408
415
|
} else if (!window.NO_AUTH_GUARD && _Runtime.hooks !== null && _Runtime.hooks !== void 0 && _Runtime.hooks.auth && !_Runtime.hooks.auth.isLoggedIn()) {
|