@next-core/runtime 1.57.0 → 1.57.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +1 -1
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +38 -8
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/interfaces.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +2 -9
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/CustomTemplates.js +11 -7
- package/dist/esm/CustomTemplates.js.map +1 -1
- package/dist/esm/ModalStack.js +2 -1
- package/dist/esm/ModalStack.js.map +1 -1
- package/dist/esm/StoryboardFunctionRegistry.js +2 -1
- package/dist/esm/StoryboardFunctionRegistry.js.map +1 -1
- package/dist/esm/createRoot.js +4 -4
- package/dist/esm/createRoot.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js +5 -4
- package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +3 -2
- package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/replaceSlotWithSlottedBricks.js +5 -4
- package/dist/esm/internal/CustomTemplates/replaceSlotWithSlottedBricks.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js +7 -6
- package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js +3 -2
- package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/utils.js +3 -3
- package/dist/esm/internal/CustomTemplates/utils.js.map +1 -1
- package/dist/esm/internal/ErrorNode.js +2 -1
- package/dist/esm/internal/ErrorNode.js.map +1 -1
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js +3 -3
- package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/esm/internal/FormRenderer/utils.js +2 -2
- package/dist/esm/internal/FormRenderer/utils.js.map +1 -1
- package/dist/esm/internal/Renderer.js +58 -22
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +10 -8
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/esm/internal/Runtime.js +15 -16
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/bindListeners.js +3 -2
- package/dist/esm/internal/bindListeners.js.map +1 -1
- package/dist/esm/internal/compute/evaluate.js +4 -4
- package/dist/esm/internal/compute/evaluate.js.map +1 -1
- package/dist/esm/internal/compute/getStorageItem.js +2 -1
- package/dist/esm/internal/compute/getStorageItem.js.map +1 -1
- package/dist/esm/internal/compute/listenOnTrackingContext.js +2 -1
- package/dist/esm/internal/compute/listenOnTrackingContext.js.map +1 -1
- package/dist/esm/internal/data/resolveDataStore.js +4 -2
- package/dist/esm/internal/data/resolveDataStore.js.map +1 -1
- package/dist/esm/internal/interfaces.js.map +1 -1
- package/dist/esm/internal/matchStoryboard.js +2 -2
- package/dist/esm/internal/matchStoryboard.js.map +1 -1
- package/dist/esm/internal/poll.js +3 -3
- package/dist/esm/internal/poll.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +10 -16
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/setupRootRuntimeContext.js +3 -2
- package/dist/esm/internal/setupRootRuntimeContext.js.map +1 -1
- package/dist/esm/setWatermark.js +4 -4
- package/dist/esm/setWatermark.js.map +1 -1
- package/dist/esm/themeAndMode.js +2 -1
- package/dist/esm/themeAndMode.js.map +1 -1
- package/dist/types/internal/interfaces.d.ts +1 -0
- package/package.json +2 -2
|
@@ -109,7 +109,7 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
|
|
|
109
109
|
export async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, initialTracker) {
|
|
110
110
|
setupRootRuntimeContext(bricks, runtimeContext, true);
|
|
111
111
|
const output = getEmptyRenderOutput();
|
|
112
|
-
const kPath = keyPath
|
|
112
|
+
const kPath = keyPath !== null && keyPath !== void 0 ? keyPath : [];
|
|
113
113
|
// 多个构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
114
114
|
const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, kPath.concat(index), tplStack && new Map(tplStack), initialTracker)));
|
|
115
115
|
rendered.forEach((item, index) => {
|
|
@@ -193,12 +193,12 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
193
193
|
runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];
|
|
194
194
|
runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];
|
|
195
195
|
}
|
|
196
|
+
const strict = isStrictMode(runtimeContext);
|
|
196
197
|
const {
|
|
197
198
|
context
|
|
198
199
|
} = brickConf;
|
|
199
200
|
// istanbul ignore next
|
|
200
201
|
if (Array.isArray(context) && context.length > 0) {
|
|
201
|
-
const strict = isStrictMode(runtimeContext);
|
|
202
202
|
warnAboutStrictMode(strict, "Defining context on bricks", "check your brick:", brickConf);
|
|
203
203
|
if (!strict) {
|
|
204
204
|
runtimeContext.ctxStore.define(context, runtimeContext);
|
|
@@ -210,6 +210,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
210
210
|
}
|
|
211
211
|
const brickName = brickConf.brick;
|
|
212
212
|
if (brickName.startsWith(":")) {
|
|
213
|
+
var _brickConf$lifeCycle;
|
|
213
214
|
ensureValidControlBrick(brickName);
|
|
214
215
|
const {
|
|
215
216
|
dataSource
|
|
@@ -256,8 +257,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
256
257
|
}
|
|
257
258
|
}
|
|
258
259
|
};
|
|
259
|
-
const renderControlNode = async
|
|
260
|
-
var
|
|
260
|
+
const renderControlNode = async _ref => {
|
|
261
|
+
var _ref2, _ref2$node;
|
|
262
|
+
let {
|
|
263
|
+
type,
|
|
264
|
+
runtimeContext,
|
|
265
|
+
tplStateStoreScope,
|
|
266
|
+
formStateStoreScope
|
|
267
|
+
} = _ref;
|
|
261
268
|
let changedAfterInitial = false;
|
|
262
269
|
const tracker = {
|
|
263
270
|
disposes: [],
|
|
@@ -278,6 +285,12 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
278
285
|
while (uninitialized || changedAfterInitial) {
|
|
279
286
|
changedAfterInitial = false;
|
|
280
287
|
rawOutput = await lowerLevelRenderControlNode(runtimeContext, tracker, uninitialized && type === "initial");
|
|
288
|
+
|
|
289
|
+
// Changes may happen during `postAsyncRender`.
|
|
290
|
+
if (!changedAfterInitial && type === "rerender") {
|
|
291
|
+
const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
|
|
292
|
+
await postAsyncRender(rawOutput, runtimeContext, [runtimeContext.ctxStore, ...scopedStores]);
|
|
293
|
+
}
|
|
281
294
|
tracker.disposes.forEach(dispose => dispose());
|
|
282
295
|
tracker.disposes.length = 0;
|
|
283
296
|
uninitialized = false;
|
|
@@ -286,26 +299,33 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
286
299
|
throw new Error(`Maximum rerender stack overflowed (iid: ${brickConf.iid})`);
|
|
287
300
|
}
|
|
288
301
|
}
|
|
289
|
-
(
|
|
302
|
+
(_ref2$node = (_ref2 = rawOutput).node) !== null && _ref2$node !== void 0 ? _ref2$node : _ref2.node = {
|
|
290
303
|
tag: RenderTag.PLACEHOLDER,
|
|
291
304
|
return: returnNode
|
|
292
|
-
}
|
|
305
|
+
};
|
|
293
306
|
return rawOutput;
|
|
294
307
|
};
|
|
295
|
-
const controlledOutput = await renderControlNode(
|
|
308
|
+
const controlledOutput = await renderControlNode({
|
|
309
|
+
type: "initial",
|
|
310
|
+
runtimeContext
|
|
311
|
+
});
|
|
296
312
|
const {
|
|
297
313
|
onMount,
|
|
298
314
|
onUnmount
|
|
299
|
-
} = brickConf.lifeCycle
|
|
315
|
+
} = (_brickConf$lifeCycle = brickConf.lifeCycle) !== null && _brickConf$lifeCycle !== void 0 ? _brickConf$lifeCycle : {};
|
|
300
316
|
if (contextNames || stateNames) {
|
|
317
|
+
var _runtimeBrick$dispose;
|
|
301
318
|
controlledOutput.hasTrackingControls = true;
|
|
302
319
|
let renderId = 0;
|
|
303
320
|
const listener = async () => {
|
|
304
321
|
const currentRenderId = ++renderId;
|
|
305
322
|
const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] = createScopedRuntimeContext(runtimeContext);
|
|
306
|
-
const reControlledOutput = await renderControlNode(
|
|
307
|
-
|
|
308
|
-
|
|
323
|
+
const reControlledOutput = await renderControlNode({
|
|
324
|
+
type: "rerender",
|
|
325
|
+
runtimeContext: scopedRuntimeContext,
|
|
326
|
+
tplStateStoreScope,
|
|
327
|
+
formStateStoreScope
|
|
328
|
+
});
|
|
309
329
|
|
|
310
330
|
// Ignore stale renders
|
|
311
331
|
if (renderId === currentRenderId) {
|
|
@@ -324,7 +344,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
324
344
|
}
|
|
325
345
|
}));
|
|
326
346
|
}
|
|
327
|
-
for (const store of
|
|
347
|
+
for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {
|
|
328
348
|
store.mountAsyncData();
|
|
329
349
|
}
|
|
330
350
|
}
|
|
@@ -335,7 +355,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
335
355
|
trailing: true
|
|
336
356
|
});
|
|
337
357
|
const runtimeBrick = returnNode.tag === RenderTag.BRICK ? returnNode : null;
|
|
338
|
-
const disposes = runtimeBrick ? runtimeBrick.disposes
|
|
358
|
+
const disposes = runtimeBrick ? (_runtimeBrick$dispose = runtimeBrick.disposes) !== null && _runtimeBrick$dispose !== void 0 ? _runtimeBrick$dispose : runtimeBrick.disposes = [] : [];
|
|
339
359
|
if (contextNames) {
|
|
340
360
|
for (const contextName of contextNames) {
|
|
341
361
|
disposes.push(runtimeContext.ctxStore.onChange(contextName, debouncedListener));
|
|
@@ -375,7 +395,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
375
395
|
}
|
|
376
396
|
const tplTagName = getTagNameOfCustomTemplate(brickName, (_runtimeContext$app = runtimeContext.app) === null || _runtimeContext$app === void 0 ? void 0 : _runtimeContext$app.id);
|
|
377
397
|
if (tplTagName) {
|
|
378
|
-
|
|
398
|
+
var _tplStack$get;
|
|
399
|
+
const tplCount = (_tplStack$get = tplStack.get(tplTagName)) !== null && _tplStack$get !== void 0 ? _tplStack$get : 0;
|
|
379
400
|
if (tplCount >= 10) {
|
|
380
401
|
throw new Error(`Maximum custom template stack overflowed: "${tplTagName}"`);
|
|
381
402
|
}
|
|
@@ -390,16 +411,30 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
390
411
|
let formData;
|
|
391
412
|
let confProps;
|
|
392
413
|
if (brickName === FORM_RENDERER) {
|
|
393
|
-
var _brickConf$properties;
|
|
414
|
+
var _brickConf$properties, _brickConf$properties2;
|
|
394
415
|
({
|
|
395
416
|
formData,
|
|
396
417
|
...confProps
|
|
397
|
-
} = brickConf.properties
|
|
398
|
-
if ((_brickConf$
|
|
418
|
+
} = (_brickConf$properties = brickConf.properties) !== null && _brickConf$properties !== void 0 ? _brickConf$properties : {});
|
|
419
|
+
if ((_brickConf$properties2 = brickConf.properties) !== null && _brickConf$properties2 !== void 0 && _brickConf$properties2.compute) {
|
|
399
420
|
formData = await asyncComputeRealValue(formData, runtimeContext);
|
|
400
421
|
}
|
|
401
422
|
} else {
|
|
402
|
-
|
|
423
|
+
var _confProps;
|
|
424
|
+
if (runtimeContext.inUseBrick) {
|
|
425
|
+
// Keep v2 behavior for `useBrick`: treat `transform` as `properties`.
|
|
426
|
+
const transform = brickConf.transform;
|
|
427
|
+
if (transform) {
|
|
428
|
+
warnAboutStrictMode(strict, "`useBrick.transform`", 'please use "properties" instead, check your useBrick:', brickConf);
|
|
429
|
+
if (!strict) {
|
|
430
|
+
confProps = {
|
|
431
|
+
...brickConf.properties,
|
|
432
|
+
...transform
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
(_confProps = confProps) !== null && _confProps !== void 0 ? _confProps : confProps = brickConf.properties;
|
|
403
438
|
}
|
|
404
439
|
const trackingContextList = [];
|
|
405
440
|
const asyncPropertyEntries = asyncComputeRealPropertyEntries(confProps, runtimeContext, trackingContextList);
|
|
@@ -411,7 +446,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
411
446
|
if (isScript || brickName === "link") {
|
|
412
447
|
const props = await constructAsyncProperties(asyncPropertyEntries);
|
|
413
448
|
if (isScript ? props.src : props.rel === "stylesheet" && props.href) {
|
|
414
|
-
|
|
449
|
+
var _window$PUBLIC_ROOT;
|
|
450
|
+
const prefix = (_window$PUBLIC_ROOT = window.PUBLIC_ROOT) !== null && _window$PUBLIC_ROOT !== void 0 ? _window$PUBLIC_ROOT : "";
|
|
415
451
|
if (isScript) {
|
|
416
452
|
const {
|
|
417
453
|
src,
|
|
@@ -486,8 +522,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
486
522
|
return;
|
|
487
523
|
}
|
|
488
524
|
const routeSlotFromIndexToSlotId = new Map();
|
|
489
|
-
const rendered = await Promise.all(Object.entries(slots).map((
|
|
490
|
-
let [childSlotId, slotConf] =
|
|
525
|
+
const rendered = await Promise.all(Object.entries(slots).map((_ref3, index) => {
|
|
526
|
+
let [childSlotId, slotConf] = _ref3;
|
|
491
527
|
if (slotConf.type !== "routes") {
|
|
492
528
|
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, undefined, initialTracker);
|
|
493
529
|
}
|
|
@@ -723,7 +759,7 @@ export function childrenToSlots(children, originalSlots) {
|
|
|
723
759
|
slot: sl,
|
|
724
760
|
...child
|
|
725
761
|
} of children) {
|
|
726
|
-
const slot = sl
|
|
762
|
+
const slot = sl !== null && sl !== void 0 ? sl : "";
|
|
727
763
|
if (!hasOwnProperty(newSlots, slot)) {
|
|
728
764
|
newSlots[slot] = {
|
|
729
765
|
type: "bricks",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","catchLoad","unknownBricks","tplTagName","app","id","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","properties","compute","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","usedProcessors","size","join","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref2","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } 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 trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\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 `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\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 const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n const renderControlNode = async (\n runtimeContext: RuntimeContext,\n type: \"initial\" | \"rerender\"\n ) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext, \"initial\");\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode(\n scopedRuntimeContext,\n \"rerender\"\n );\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(\n reControlledOutput,\n scopedRuntimeContext,\n scopedStores\n );\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\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\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\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 // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\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 routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\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 { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\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 %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"AAWA,SACEA,uBAAuB,EACvBC,qBAAqB,EACrBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,UAAU,EACVC,SAAS,QACJ,mBAAmB;AAC1B,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,wBAAwB,QAAQ,6BAA6B;AACtE,SAASC,QAAQ,EAAEC,OAAO,QAAQ,QAAQ;AAC1C,SAASC,iBAAiB,QAAQ,sBAAsB;AACxD,SACEC,+BAA+B,EAC/BC,wBAAwB,QACnB,oCAAoC;AAC3C,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,qBAAqB,QAAQ,+BAA+B;AACrE,SAEEC,uBAAuB,EACvBC,iBAAiB,QAEZ,sCAAsC;AAE7C,SAASC,UAAU,EAAEC,WAAW,QAAQ,kBAAkB;AAC1D,SACEC,mCAAmC,EACnCC,gCAAgC,EAChCC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,wBAAwB,QACnB,gCAAgC;AACvC,SAASC,oBAAoB,QAAQ,2CAA2C;AAShF,SACEC,0BAA0B,EAC1BC,gBAAgB,QACX,4BAA4B;AACnC,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,gBAAgB,EAAEC,KAAK,QAAQ,cAAc;AACtD,SAASC,SAAS,QAAQ,YAAY;AACtC,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,YAAY,EAAEC,mBAAmB,QAAQ,oBAAoB;AACtE,SACEC,aAAa,EAEbC,yBAAyB,QACpB,6BAA6B;AACpC,SAASC,kBAAkB,QAAQ,sCAAsC;AACzE,SAASC,oBAAoB,QAAQ,wCAAwC;AAC7E,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,kBAAkB,QAAQ,uBAAuB;AAE1D,SAASC,aAAa,QAAQ,sBAAsB;AAEpD,SAASC,eAAe,QAAQ,oBAAoB;AAEpD,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,SAAS,QAAQ,gBAAgB;AAgB1C,OAAO,eAAeC,YAAYA,CAChCC,UAA4B,EAC5BC,MAAmB,EACnBC,eAA+B,EAC/BC,eAAgC,EAChCC,YAAyB,EACzBC,qBAAsC,EACtCC,MAAe,EACfC,aAAuB,EACvBC,cAA+B,EACR;EACvB,MAAMC,OAAO,GAAG,MAAMrC,WAAW,CAAC6B,MAAM,EAAEC,eAAe,CAAC;EAC1D,MAAMQ,MAAM,GAAGC,oBAAoB,CAAC,CAAC;EACrC,MAAMC,eAAgC,GAAIF,MAAM,CAACE,eAAe,GAAG;IACjEC,MAAM,EAAER;EACV,CAAE;EACF,QAAQI,OAAO;IACb,KAAK,QAAQ;MACX;IACF,KAAK,iBAAiB;MACpBC,MAAM,CAACI,eAAe,GAAG,IAAI;MAC7B;IACF;MAAS;QAAA,IAAAC,qBAAA;QACP,MAAMC,KAAK,GAAIN,MAAM,CAACM,KAAK,GAAGP,OAAO,CAACO,KAAM;QAC5CN,MAAM,CAACO,IAAI,GAAGR,OAAO,CAACS,KAAK,CAACD,IAAI;QAChC,MAAME,cAAc,GAAG;UACrB,GAAGjB,eAAe;UAClBgB,KAAK,EAAET,OAAO,CAACS;QACjB,CAAC;QAED,IAAIF,KAAK,CAACI,GAAG,EAAE;UACbvB,eAAe,CAACmB,KAAK,CAACI,GAAG,EAAEX,OAAO,CAACS,KAAK,CAAC;QAC3C;QAEA,IAAIX,aAAa,EAAE;UACjBY,cAAc,CAACE,QAAQ,CAACC,mBAAmB,CAACrB,MAAM,CAAC;QACrD;QACA,MAAMsB,SAAS,GAAGnB,YAAY,CAACoB,MAAM,CAACR,KAAK,CAAC;QAC5CG,cAAc,CAACE,QAAQ,CAACI,MAAM,CAC5BT,KAAK,CAACU,OAAO,EACbP,cAAc,EACdQ,SAAS,EACTJ,SACF,CAAC;QACDJ,cAAc,CAACS,0BAA0B,CAACC,IAAI,CAC5C9C,KAAK,aAALA,KAAK,gBAAAgC,qBAAA,GAALhC,KAAK,CAAE+C,gBAAgB,cAAAf,qBAAA,uBAAvBA,qBAAA,CAAyBgB,kCAAkC,CACzDf,KAAK,EACJgB,KAAK,IAAKhE,qBAAqB,CAACgE,KAAK,EAAEb,cAAc,CACxD,CACF,CAAC;;QAED;QACA;QACA,MAAM;UAAEc;QAAc,CAAC,GAAGjB,KAAqC;QAC/D,IAAIkB,KAAK,CAACC,OAAO,CAACF,aAAa,CAAC,EAAE;UAChCvB,MAAM,CAAC0B,YAAY,CAACP,IAAI,CACtB1E,sBAAsB,CAAC8E,aAAa,EAAEnD,gBAAgB,CAAC,CAAC,CAC1D,CAAC;QACH;QAEA,IAAIkC,KAAK,CAACqB,IAAI,KAAK,UAAU,EAAE;UAC7B,IAAIC,UAAmB;UACvB,IAAI,OAAOtB,KAAK,CAACuB,QAAQ,KAAK,QAAQ,EAAE;YACtCD,UAAU,GAAG,MAAMtE,qBAAqB,CACtCgD,KAAK,CAACuB,QAAQ,EACdpB,cACF,CAAC;UACH,CAAC,MAAM;YACL,MAAMqB,QAAQ,GAAI,MAAMzE,WAAW,CACjC;cACE0E,SAAS,EAAE,UAAU;cACrB,GAAGzB,KAAK,CAACuB;YACX,CAAC,EACDpB,cACF,CAA4B;YAC5BmB,UAAU,GAAGE,QAAQ,CAACD,QAAQ;UAChC;UACA,IAAI,OAAOD,UAAU,KAAK,QAAQ,EAAE;YAClC;YACAI,OAAO,CAACC,KAAK,CAAC,6BAA6B,EAAEL,UAAU,CAAC;YACxD,MAAM,IAAIM,KAAK,CACb,uCAAuC,OAAON,UAAU,EAC1D,CAAC;UACH;UACA5B,MAAM,CAAC6B,QAAQ,GAAG;YAAEtB,IAAI,EAAEqB;UAAW,CAAC;QACxC,CAAC,MAAM;UACL,MAAMO,WAAW,GAAGC,QAAQ,CAAC9B,KAAK,CAAC+B,IAAI,EAAE5B,cAAc,CAAC;UACxD,IAAI0B,WAAW,EAAE;YACfjC,eAAe,CAACoC,OAAO,GAAGH,WAAW;UACvC;UAEA,IAAI,CAACtC,aAAa,EAAE;YAClBJ,eAAe,CAAC8C,sBAAsB,CAAChD,MAAM,EAAEW,eAAe,CAAC;UACjE;UAEA,IAAIsC,SAAuB;UAC3B,IAAIlC,KAAK,CAACqB,IAAI,KAAK,QAAQ,EAAE;YAC3Ba,SAAS,GAAG,MAAMnD,YAAY,CAC5BC,UAAU,EACVgB,KAAK,CAACf,MAAM,EACZkB,cAAc,EACdhB,eAAe,EACfoB,SAAS,EACTX,eAAe,EACfN,MAAM,EACNqB,SAAS,EACTnB,cACF,CAAC;UACH,CAAC,MAAM;YACL0C,SAAS,GAAG,MAAMC,YAAY,CAC5BnD,UAAU,EACVgB,KAAK,CAACoC,MAAM,EACZjC,cAAc,EACdhB,eAAe,EACfoB,SAAS,EACTX,eAAe,EACfN,MAAM,EACNqB,SAAS,EACTA,SAAS,EACTnB,cACF,CAAC;UACH;UAEA6C,iBAAiB,CAAC3C,MAAM,EAAEwC,SAAS,CAAC;UACpCI,qBAAqB,CAAC1C,eAAe,EAAEsC,SAAS,CAACtC,eAAe,CAAC;QACnE;MACF;EACF;EAEA,OAAOF,MAAM;AACf;AAEA,OAAO,eAAeyC,YAAYA,CAChCnD,UAA4B,EAC5BoD,MAAmB,EACnBjC,cAA8B,EAC9BhB,eAAgC,EAChCC,YAAyB,EACzBC,qBAAsC,EACtCC,MAAe,EACfiD,QAA8B,EAC9BC,OAAkB,EAClBhD,cAA+B,EACR;EACvBZ,uBAAuB,CAACwD,MAAM,EAAEjC,cAAc,EAAE,IAAI,CAAC;EACrD,MAAMT,MAAM,GAAGC,oBAAoB,CAAC,CAAC;EACrC,MAAM8C,KAAK,GAAGD,OAAO,IAAI,EAAE;EAC3B;EACA,MAAME,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCR,MAAM,CAACS,GAAG,CAAC,CAACC,SAAS,EAAEC,KAAK,KAC1BC,WAAW,CACThE,UAAU,EACV8D,SAAS,EACT3C,cAAc,EACdhB,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNmD,KAAK,CAACjC,MAAM,CAACuC,KAAK,CAAC,EACnBR,QAAQ,IAAI,IAAIU,GAAG,CAACV,QAAQ,CAAC,EAC7B/C,cACF,CACF,CACF,CAAC;EAEDkD,QAAQ,CAACQ,OAAO,CAAC,CAACC,IAAI,EAAEJ,KAAK,KAAK;IAChC,IAAII,IAAI,CAACC,mBAAmB,EAAE;MAC5B;MACAjE,eAAe,CAACkE,OAAO,CACrB/D,MAAM,EACNmD,KAAK,CAACjC,MAAM,CAACuC,KAAK,CAAC,EACnBI,IAAI,CAACG,IAAI,EACTtE,UACF,CAAC;IACH;IACAqD,iBAAiB,CAAC3C,MAAM,EAAEyD,IAAI,CAAC;EACjC,CAAC,CAAC;EAEF,OAAOzD,MAAM;AACf;AAEA,OAAO,eAAesD,WAAWA,CAC/BhE,UAA4B,EAC5B8D,SAAsC,EACtC5D,eAA+B,EAC/BC,eAAgC,EAChCC,YAAyB,EACzBC,qBAAsC,EACtCC,MAAe,EAIQ;EAAA,IAHvBkD,OAAiB,GAAAe,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA5C,SAAA,GAAA4C,SAAA,MAAG,EAAE;EAAA,IACtBhB,QAAQ,GAAAgB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA5C,SAAA,GAAA4C,SAAA,MAAG,IAAIN,GAAG,CAAiB,CAAC;EAAA,IACpCzD,cAA+B,GAAA+D,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA5C,SAAA;EAE/B,IAAI;IACF,OAAO,MAAM8C,iBAAiB,CAC5BzE,UAAU,EACV8D,SAAS,EACT5D,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNkD,OAAO,EACPD,QAAQ,EACR/C,cACF,CAAC;EACH,CAAC,CAAC,OAAOmC,KAAK,EAAE;IACd,IAAImB,SAAS,CAACY,aAAa,EAAE;MAC3B;MACAhC,OAAO,CAACC,KAAK,CAAC,iCAAiC,EAAEA,KAAK,CAAC;MACvD,OAAO;QACL2B,IAAI,EAAE,MAAMxE,SAAS,CAAC6C,KAAK,EAAE3C,UAAU,CAAC;QACxCoC,YAAY,EAAE;MAChB,CAAC;IACH,CAAC,MAAM;MACL,MAAMO,KAAK;IACb;EACF;AACF;AAEA,eAAe8B,iBAAiBA,CAC9BzE,UAA4B,EAC5B8D,SAAsC,EACtC5D,eAA+B,EAC/BC,eAAgC,EAChCC,YAAyB,EACzBC,qBAAsC,EACtCC,MAA0B,EAC1BkD,OAAiB,EACjBD,QAA6B,EAC7B/C,cAA+B,EACR;EAAA,IAAAmE,sBAAA,EAAAC,mBAAA;EACvB,MAAMlE,MAAM,GAAGC,oBAAoB,CAAC,CAAC;EAErC,IAAI,CAACmD,SAAS,CAACe,KAAK,EAAE;IACpB,IAAKf,SAAS,CAA2BgB,QAAQ,EAAE;MACjD;MACApC,OAAO,CAACC,KAAK,CAAC,qCAAqC,EAAEmB,SAAS,CAAC;IACjE,CAAC,MAAM;MACL;MACApB,OAAO,CAACC,KAAK,CAAC,gBAAgB,EAAEmB,SAAS,CAAC;IAC5C;IACA,OAAOpD,MAAM;EACf;;EAEA;EACA;EACA,MAAM;IAAEqE,EAAE,EAAEC,OAAO;IAAEC,mBAAmB;IAAE,GAAGC;EAAc,CAAC,GAAGpB,SAAS;EACxE,IAAIqB,qBAAqB,CAACH,OAAO,CAAC,EAAE;IAClC,OAAOhB,WAAW,CAChBhE,UAAU,EACV;MACE6E,KAAK,EAAE,KAAK;MACZO,UAAU,EAAEJ,OAAO;MACnB;MACAC,mBAAmB;MACnBI,KAAK,EAAE;QACL,EAAE,EAAE;UACFhD,IAAI,EAAE,QAAQ;UACde,MAAM,EAAE,CAAC8B,aAAa;QACxB;MACF,CAAC;MACD;MACA,GAAGI,MAAM,CAACC,qBAAqB,CAACzB,SAAS,CAAC,CAAC0B,MAAM,CAC/C,CAACC,GAAG,EAAEC,MAAM,MAAM;QAChB,GAAGD,GAAG;QACN,CAACC,MAAM,GAAG5B,SAAS,CAAC4B,MAAM;MAC5B,CAAC,CAAC,EACF,CAAC,CACH;IACF,CAAC,EACDxF,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNkD,OAAO,EACPD,QAAQ,EACR/C,cACF,CAAC;EACH;EAEA,MAAMmF,eAAe,GAAG7B,SAAS,CAACrF,wBAAwB,CAAC;EAC3D,MAAMmH,gBAAgB,GAAG9B,SAAS,CAACzE,yBAAyB,CAAC;EAC7D,MAAM8B,cAAc,GAAG;IACrB,GAAGjB,eAAe;IAClByF,eAAe;IACfC;EACF,CAAC;EAED,IAAIpI,cAAc,CAACsG,SAAS,EAAEvF,+BAA+B,CAAC,EAAE;IAC9D;IACA4C,cAAc,CAAC0E,WAAW,GAAG/B,SAAS,CAACvF,+BAA+B,CAAC;IACvE4C,cAAc,CAAC2E,YAAY,GAAGhC,SAAS,CAACxF,gCAAgC,CAAC;IACzE6C,cAAc,CAAC4E,WAAW,GAAGjC,SAAS,CAACtF,+BAA+B,CAAC;EACzE;EAEA,MAAM;IAAEkD;EAAQ,CAAC,GAAGoC,SAAwC;EAC5D;EACA,IAAI5B,KAAK,CAACC,OAAO,CAACT,OAAO,CAAC,IAAIA,OAAO,CAAC8C,MAAM,GAAG,CAAC,EAAE;IAChD,MAAMwB,MAAM,GAAG9G,YAAY,CAACiC,cAAc,CAAC;IAC3ChC,mBAAmB,CACjB6G,MAAM,EACN,4BAA4B,EAC5B,mBAAmB,EACnBlC,SACF,CAAC;IACD,IAAI,CAACkC,MAAM,EAAE;MACX7E,cAAc,CAACE,QAAQ,CAACI,MAAM,CAACC,OAAO,EAAEP,cAAc,CAAC;IACzD;EACF;EAEAA,cAAc,CAACS,0BAA0B,CAACC,IAAI,CAC5C9C,KAAK,aAALA,KAAK,gBAAA4F,sBAAA,GAAL5F,KAAK,CAAE+C,gBAAgB,cAAA6C,sBAAA,uBAAvBA,sBAAA,CAAyB5C,kCAAkC,CACzD+B,SAAS,EACR9B,KAAK,IAAKhE,qBAAqB,CAACgE,KAAK,EAAEb,cAAc,CACxD,CACF,CAAC;EAED,IAAI,EAAE,MAAMvD,iBAAiB,CAACkG,SAAS,EAAE3C,cAAc,CAAC,CAAC,EAAE;IACzD,OAAOT,MAAM;EACf;EAEA,MAAMuF,SAAS,GAAGnC,SAAS,CAACe,KAAK;EACjC,IAAIoB,SAAS,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;IAC7BC,uBAAuB,CAACF,SAAS,CAAC;IAElC,MAAM;MAAEb;IAAW,CAAC,GAAGtB,SAAS;IAChC,MAAM;MAAEsC,YAAY;MAAEC;IAAW,CAAC,GAAGpH,SAAS,CAACmG,UAAU,CAAC;IAE1D,MAAMkB,2BAA2B,GAAG,MAAAA,CAClCnF,cAA8B,EAC9BoF,OAAuB,EACvBC,eAAwB,KACrB;MAAA,IAAAC,WAAA;MACH;MACA,MAAMC,kBAAkB,GAAG,MAAM1I,qBAAqB,CACpDoH,UAAU,EACVjE,cACF,CAAC;MAED,IAAIqF,eAAe,EAAE;QACnBtI,iBAAiB,CACfiD,cAAc,EACd,CAAC;UAAEiF,YAAY;UAAEC,UAAU;UAAEM,SAAS,EAAEvB;QAAW,CAAC,CAAC,EACrDmB,OACF,CAAC;MACH;;MAEA;MACA,MAAMK,IAAI,GACRX,SAAS,KAAK,UAAU,GACpB,EAAE,GACFA,SAAS,KAAK,SAAS,GACrBY,MAAM,CAACH,kBAAkB,CAAC,GAC1BA,kBAAkB,GAChB,EAAE,GACF,MAAM;;MAEhB;MACA,MAAMrB,KAAK,GAAGyB,eAAe,CAAChD,SAAS,CAACiD,QAAQ,EAAEjD,SAAS,CAACuB,KAAK,CAAC;;MAElE;MACA,MAAMjC,MAAM,GACViC,KAAK,IACL7H,cAAc,CAAC6H,KAAK,EAAEuB,IAAI,CAAC,MAAAH,WAAA,GAC1BpB,KAAK,CAACuB,IAAI,CAAC,cAAAH,WAAA,uBAAZA,WAAA,CAAmCrD,MAAM;MAE3C,IAAI,CAAClB,KAAK,CAACC,OAAO,CAACiB,MAAM,CAAC,EAAE;QAC1B,OAAOzC,oBAAoB,CAAC,CAAC;MAC/B;MAEA,QAAQsF,SAAS;QACf,KAAK,UAAU;UAAE;YACf,IAAI,CAAC/D,KAAK,CAACC,OAAO,CAACuE,kBAAkB,CAAC,EAAE;cACtC,OAAO/F,oBAAoB,CAAC,CAAC;YAC/B;YACA,OAAOqG,aAAa,CAClBhH,UAAU,EACV0G,kBAAkB,EAClBtD,MAAM,EACNjC,cAAc,EACdhB,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNiD,QAAQ,EACRC,OAAO,EACP+C,OACF,CAAC;UACH;QACA,KAAK,KAAK;QACV,KAAK,SAAS;UAAE;YACd,OAAOpD,YAAY,CACjBnD,UAAU,EACVoD,MAAM,EACNjC,cAAc,EACdhB,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNiD,QAAQ,EACRC,OAAO,EACP+C,OACF,CAAC;UACH;MACF;IACF,CAAC;IAED,MAAMU,iBAAiB,GAAG,MAAAA,CACxB9F,cAA8B,EAC9BkB,IAA4B,KACzB;MAAA,IAAA6E,IAAA;MACH,IAAIC,mBAAmB,GAAG,KAAK;MAC/B,MAAMZ,OAAuB,GAAG;QAC9Ba,QAAQ,EAAE,EAAE;QACZC,QAAQ,EAAEA,CAAA,KAAM;UACdF,mBAAmB,GAAG,IAAI;QAC5B;MACF,CAAC;MACD,IAAIG,aAAa,GAAG,CAAC;MACrB,IAAIC,SAAuB;MAC3B,IAAIC,aAAa,GAAG,IAAI;;MAExB;MACA;MACA;MACA;MACA;MACA;MACA,OAAOA,aAAa,IAAIL,mBAAmB,EAAE;QAC3CA,mBAAmB,GAAG,KAAK;QAC3BI,SAAS,GAAG,MAAMjB,2BAA2B,CAC3CnF,cAAc,EACdoF,OAAO,EACPiB,aAAa,IAAInF,IAAI,KAAK,SAC5B,CAAC;QACDkE,OAAO,CAACa,QAAQ,CAAClD,OAAO,CAAEuD,OAAO,IAAKA,OAAO,CAAC,CAAC,CAAC;QAChDlB,OAAO,CAACa,QAAQ,CAAC5C,MAAM,GAAG,CAAC;QAC3BgD,aAAa,GAAG,KAAK;QACrB;QACA,IAAI,EAAEF,aAAa,GAAG,EAAE,EAAE;UACxB,MAAM,IAAI1E,KAAK,CACb,2CAA2CkB,SAAS,CAAC1C,GAAG,GAC1D,CAAC;QACH;MACF;MAEA,CAAA8F,IAAA,GAAAK,SAAS,EAAEjD,IAAI,KAAf4C,IAAA,CAAW5C,IAAI,GAAK;QAClBoD,GAAG,EAAE1I,SAAS,CAAC2I,WAAW;QAC1B9G,MAAM,EAAEb;MACV,CAAC;MACD,OAAOuH,SAAS;IAClB,CAAC;IAED,MAAMK,gBAAgB,GAAG,MAAMX,iBAAiB,CAAC9F,cAAc,EAAE,SAAS,CAAC;IAE3E,MAAM;MAAE0G,OAAO;MAAEC;IAAU,CAAC,GAAGhE,SAAS,CAACiE,SAAS,IAAI,CAAC,CAAC;IAExD,IAAI3B,YAAY,IAAIC,UAAU,EAAE;MAC9BuB,gBAAgB,CAACxD,mBAAmB,GAAG,IAAI;MAC3C,IAAI4D,QAAQ,GAAG,CAAC;MAChB,MAAMX,QAAQ,GAAG,MAAAA,CAAA,KAAY;QAC3B,MAAMY,eAAe,GAAG,EAAED,QAAQ;QAClC,MAAM,CAACE,oBAAoB,EAAEC,kBAAkB,EAAEC,mBAAmB,CAAC,GACnEC,0BAA0B,CAAClH,cAAc,CAAC;QAE5C,MAAMmH,kBAAkB,GAAG,MAAMrB,iBAAiB,CAChDiB,oBAAoB,EACpB,UACF,CAAC;QAED,MAAMK,YAAY,GAAG,CAAC,GAAGJ,kBAAkB,EAAE,GAAGC,mBAAmB,CAAC;QACpE,MAAMI,eAAe,CACnBF,kBAAkB,EAClBJ,oBAAoB,EACpBK,YACF,CAAC;;QAED;QACA,IAAIP,QAAQ,KAAKC,eAAe,EAAE;UAChC,IAAIH,SAAS,EAAE;YACbnI,eAAe,CACbmI,SAAS,EACT3G,cACF,CAAC,CAAC,IAAIsH,WAAW,CAAC,SAAS,EAAE;cAAEC,MAAM,EAAE;gBAAEC,QAAQ,EAAE;cAAK;YAAE,CAAC,CAAC,CAAC;UAC/D;UAEAxI,eAAe,CAACyI,QAAQ,CACtBtI,MAAM,EACNkD,OAAO,EACP8E,kBAAkB,CAAChE,IAAI,EACvBtE,UACF,CAAC;UAED,IAAI6H,OAAO,EAAE;YACXlI,eAAe,CACbkI,OAAO,EACPK,oBACF,CAAC,CAAC,IAAIO,WAAW,CAAC,OAAO,EAAE;cAAEC,MAAM,EAAE;gBAAEC,QAAQ,EAAE;cAAK;YAAE,CAAC,CAAC,CAAC;UAC7D;UAEA,KAAK,MAAME,KAAK,IAAIN,YAAY,EAAE;YAChCM,KAAK,CAACC,cAAc,CAAC,CAAC;UACxB;QACF;MACF,CAAC;MACD;MACA,MAAMC,iBAAiB,GAAGrL,QAAQ,CAAC2J,QAAQ,EAAE,CAAC,EAAE;QAC9C2B,OAAO,EAAE,IAAI;QACbC,QAAQ,EAAE;MACZ,CAAC,CAAC;MACF,MAAMC,YAAY,GAChBlJ,UAAU,CAAC0H,GAAG,KAAK1I,SAAS,CAACmK,KAAK,GAAGnJ,UAAU,GAAG,IAAI;MACxD,MAAMoH,QAAQ,GAAG8B,YAAY,GAAIA,YAAY,CAAC9B,QAAQ,KAArB8B,YAAY,CAAC9B,QAAQ,GAAK,EAAE,IAAI,EAAE;MACnE,IAAIhB,YAAY,EAAE;QAChB,KAAK,MAAMgD,WAAW,IAAIhD,YAAY,EAAE;UACtCgB,QAAQ,CAACvF,IAAI,CACXV,cAAc,CAACE,QAAQ,CAACgI,QAAQ,CAACD,WAAW,EAAEL,iBAAiB,CACjE,CAAC;QACH;MACF;MACA,IAAI1C,UAAU,EAAE;QACd,KAAK,MAAM+C,WAAW,IAAI/C,UAAU,EAAE;UACpC,MAAMiD,aAAa,GAAG1K,gBAAgB,CACpCuC,cAAc,EACd,OAAO,EACP,MAAMiE,UAAU,GAClB,CAAC;UACDgC,QAAQ,CAACvF,IAAI,CAACyH,aAAa,CAACD,QAAQ,CAACD,WAAW,EAAEL,iBAAiB,CAAC,CAAC;QACvE;MACF;IACF;IAEA,IAAIlB,OAAO,EAAE;MACX1H,eAAe,CAACoJ,0BAA0B,CAAC,SAAS,EAAE,MAAM;QAC1D5J,eAAe,CACbkI,OAAO,EACP1G,cACF,CAAC,CAAC,IAAIsH,WAAW,CAAC,OAAO,EAAE;UAAEC,MAAM,EAAE;YAAEC,QAAQ,EAAE;UAAM;QAAE,CAAC,CAAC,CAAC;MAC9D,CAAC,CAAC;IACJ;IAEA,IAAIb,SAAS,EAAE;MACb3H,eAAe,CAACoJ,0BAA0B,CAAC,WAAW,EAAE,MAAM;QAC5D5J,eAAe,CACbmI,SAAS,EACT3G,cACF,CAAC,CAAC,IAAIsH,WAAW,CAAC,SAAS,EAAE;UAAEC,MAAM,EAAE;YAAEC,QAAQ,EAAE;UAAM;QAAE,CAAC,CAAC,CAAC;MAChE,CAAC,CAAC;IACJ;IAEA,OAAOf,gBAAgB;EACzB;;EAEA;EACA,IAAI,QAAQ,CAAC4B,IAAI,CAACvD,SAAS,CAAC,IAAI,CAACpH,eAAe,CAAC4K,GAAG,CAACxD,SAAS,CAAC,EAAE;IAC/D,MAAMyD,SAAS,CACbvM,sBAAsB,CAAC,CAAC8I,SAAS,CAAC,EAAEnH,gBAAgB,CAAC,CAAC,CAAC,EACvD,OAAO,EACPmH,SAAS,EACT9F,eAAe,CAACwJ,aAClB,CAAC;EACH;EAEA,MAAMC,UAAU,GAAGjL,0BAA0B,CAC3CsH,SAAS,GAAArB,mBAAA,GACTzD,cAAc,CAAC0I,GAAG,cAAAjF,mBAAA,uBAAlBA,mBAAA,CAAoBkF,EACtB,CAAC;EAED,IAAIF,UAAU,EAAE;IACd,MAAMG,QAAQ,GAAGxG,QAAQ,CAACkG,GAAG,CAACG,UAAU,CAAC,IAAI,CAAC;IAC9C,IAAIG,QAAQ,IAAI,EAAE,EAAE;MAClB,MAAM,IAAInH,KAAK,CACb,8CAA8CgH,UAAU,GAC1D,CAAC;IACH;IACArG,QAAQ,CAACyG,GAAG,CAACJ,UAAU,EAAEG,QAAQ,GAAG,CAAC,CAAC;EACxC,CAAC,MAAM,IAAI9D,SAAS,CAACgE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACC,cAAc,CAACT,GAAG,CAACxD,SAAS,CAAC,EAAE;IACpE,IAAIA,SAAS,KAAK7G,aAAa,EAAE;MAC/BG,oBAAoB,CAAC,CAAC;IACxB,CAAC,MAAM;MACLmB,MAAM,CAAC0B,YAAY,CAACP,IAAI,CACtB6H,SAAS,CACPzM,uBAAuB,CAAC,CAACgJ,SAAS,CAAC,EAAEnH,gBAAgB,CAAC,CAAC,CAAC,EACxD,OAAO,EACPmH,SAAS,EACT9F,eAAe,CAACwJ,aAClB,CACF,CAAC;IACH;EACF;EAEA,IAAIQ,QAAiB;EACrB,IAAIC,SAA8C;EAClD,IAAInE,SAAS,KAAK7G,aAAa,EAAE;IAAA,IAAAiL,qBAAA;IAC/B,CAAC;MAAEF,QAAQ;MAAE,GAAGC;IAAU,CAAC,GAAGtG,SAAS,CAACwG,UAAU,IAAI,CAAC,CAAC;IAExD,KAAAD,qBAAA,GAAIvG,SAAS,CAACwG,UAAU,cAAAD,qBAAA,eAApBA,qBAAA,CAAsBE,OAAO,EAAE;MACjCJ,QAAQ,GAAG,MAAMnM,qBAAqB,CAACmM,QAAQ,EAAEhJ,cAAc,CAAC;IAClE;EACF,CAAC,MAAM;IACLiJ,SAAS,GAAGtG,SAAS,CAACwG,UAAU;EAClC;EAEA,MAAME,mBAA0C,GAAG,EAAE;EACrD,MAAMC,oBAAoB,GAAG5M,+BAA+B,CAC1DuM,SAAS,EACTjJ,cAAc,EACdqJ,mBACF,CAAC;EAED,MAAME,qBAAqB,GAAG5G,SAAS,CAACzF,mCAAmC,CAAC;EAC5E,IAAIqM,qBAAqB,EAAE;IACzBD,oBAAoB,CAAC5I,IAAI,CAAC,GAAG6I,qBAAqB,CAAC;EACrD;EAEA,MAAMC,QAAQ,GAAG1E,SAAS,KAAK,QAAQ;EACvC,IAAI0E,QAAQ,IAAI1E,SAAS,KAAK,MAAM,EAAE;IACpC,MAAM2E,KAAK,GAAG,MAAM9M,wBAAwB,CAAC2M,oBAAoB,CAAC;IAClE,IAAIE,QAAQ,GAAGC,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,GAAG,KAAK,YAAY,IAAIF,KAAK,CAACG,IAAI,EAAE;MACnE,MAAMC,MAAM,GAAGC,MAAM,CAACC,WAAW,IAAI,EAAE;MACvC,IAAIP,QAAQ,EAAE;QACZ,MAAM;UAAEE,GAAG;UAAE,GAAGM;QAAM,CAAC,GAAGP,KAAK;QAC/B,MAAMlB,SAAS,CACbrM,UAAU,CAACwN,GAAG,EAAYG,MAAM,EAAEG,KAAK,CAAC,EACxC,QAAQ,EACRN,GAAG,EACH,QACF,CAAC;MACH,CAAC,MAAM;QACL,MAAM;UAAEE,IAAI;UAAE,GAAGI;QAAM,CAAC,GAAGP,KAAK;QAChC,MAAMlB,SAAS,CACbpM,SAAS,CAACyN,IAAI,EAAYC,MAAM,EAAEG,KAAK,CAAC,EACxC,YAAY,EACZJ,IAAI,EACJ,QACF,CAAC;MACH;MACA,OAAOrK,MAAM;IACf;EACF;EAEA,MAAMmE,KAAkB,GAAG;IACzB6C,GAAG,EAAE1I,SAAS,CAACmK,KAAK;IACpB9G,IAAI,EAAEuH,UAAU,IAAI3D,SAAS;IAC7BpF,MAAM,EAAEb,UAAU;IAClBM,MAAM;IACN8K,MAAM,EAAEtH,SAAS,CAACsH,MAAM;IACxBjK,cAAc;IACdkK,MAAM,EAAEvH,SAAS,CAACuH,MAAM;IACxBjK,GAAG,EAAE0C,SAAS,CAAC1C,GAAG;IAClBkK,GAAG,EAAGxH,SAAS,CAAyBwH;EAC1C,CAAC;EAED5K,MAAM,CAAC4D,IAAI,GAAGO,KAAK;;EAEnB;EACA,MAAM0G,cAAc,GAAG9N,wBAAwB,CAC7C,CAACqG,SAAS,CAACsH,MAAM,EAAEtH,SAAS,CAACiE,SAAS,CAAC,EACvC,YAAY,EACZ,CACF,CAAC;EACD,IAAIwD,cAAc,CAACC,IAAI,GAAG,CAAC,EAAE;IAC3B9K,MAAM,CAAC0B,YAAY,CAACP,IAAI,CACtB6H,SAAS,CACPtM,0BAA0B,CAACmO,cAAc,EAAEzM,gBAAgB,CAAC,CAAC,CAAC,EAC9D,YAAY,EACZ,CAAC,GAAGyM,cAAc,CAAC,CAACE,IAAI,CAAC,IAAI,CAAC,EAC9BtL,eAAe,CAACwJ,aAClB,CACF,CAAC;EACH;;EAEA;EACA,MAAMvH,YAAgC,GAAG,EAAE;;EAE3C;EACAlE,iBAAiB,CAACiD,cAAc,EAAEqJ,mBAAmB,EAAEhK,cAAc,CAAC;EAEtE,MAAMkL,cAAc,GAAG,MAAAA,CAAA,KAAY;IACjC7G,KAAK,CAACyF,UAAU,GAAG,MAAMxM,wBAAwB,CAAC2M,oBAAoB,CAAC;IACvExM,uBAAuB,CAAC4G,KAAK,EAAE2F,mBAAmB,CAAC;EACrD,CAAC;EACDpI,YAAY,CAACP,IAAI,CAAC6J,cAAc,CAAC,CAAC,CAAC;EAEnCvL,eAAe,CAACwL,sBAAsB,CAAC9G,KAAK,EAAEf,SAAS,CAACiE,SAAS,CAAC;EAElE,IAAI6D,iBAAiB,GAAG9H,SAAS;EACjC,IAAI8F,UAAU,EAAE;IACdgC,iBAAiB,GAAGlN,oBAAoB,CACtCkL,UAAU,EACV9F,SAAS,EACTe,KAAK,EACL4F,oBAAoB,EACpBtK,eACF,CAAC;EACH,CAAC,MAAM,IAAI8F,SAAS,KAAK7G,aAAa,EAAE;IACtCwM,iBAAiB,GAAGtM,kBAAkB,CACpC6K,QAAQ,EACRrG,SAAS,EACTe,KAAK,EACL4F,oBAAoB,EACpBtK,eACF,CAAC;EACH;EAEA,IAAIyL,iBAAiB,CAACP,MAAM,EAAE;IAC5B;IACAxG,KAAK,CAACvE,MAAM,GAAGqB,SAAS;EAC1B;EAEA,IAAIkK,mBAAmC;EACvC,IAAIjC,UAAU,EAAE;IACd;IACAiC,mBAAmB,GAAG;MACpB,GAAG1K;IACL,CAAC;IACD,OAAO0K,mBAAmB,CAAChG,WAAW;IACtC,OAAOgG,mBAAmB,CAAC/F,YAAY;IACvC,OAAO+F,mBAAmB,CAAC9F,WAAW;EACxC,CAAC,MAAM;IACL8F,mBAAmB,GAAG1K,cAAc;EACtC;EAEA,MAAM2K,YAAY,GAAG,MAAAA,CAAA,KAAY;IAC/B,MAAMzG,KAAK,GAAGyB,eAAe,CAC3B8E,iBAAiB,CAAC7E,QAAQ,EAC1B6E,iBAAiB,CAACvG,KACpB,CAAC;IACD,IAAI,CAACA,KAAK,EAAE;MACV;IACF;IACA,MAAM0G,0BAA0B,GAAG,IAAI9H,GAAG,CAAiB,CAAC;IAC5D,MAAMP,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChC0B,MAAM,CAAC0G,OAAO,CAAC3G,KAAK,CAAC,CAACxB,GAAG,CAAC,CAAAoI,KAAA,EAA0BlI,KAAK,KAAK;MAAA,IAAnC,CAACmI,WAAW,EAAEC,QAAQ,CAAC,GAAAF,KAAA;MAChD,IAAIE,QAAQ,CAAC9J,IAAI,KAAK,QAAQ,EAAE;QAC9B,OAAOc,YAAY,CACjB0B,KAAK,EACJsH,QAAQ,CAAsB/I,MAAM,EACrCyI,mBAAmB,EACnB1L,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrB6L,WAAW,EACX3I,QAAQ,EACR5B,SAAS,EACTnB,cACF,CAAC;MACH;MAEA,MAAM4L,WAAW,GAAGhM,YAAY,CAACA,YAAY,CAACoE,MAAM,GAAG,CAAC,CAE3C;MACb,IAAI4H,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEC,oBAAoB,EAAE;QACrCN,0BAA0B,CAAC/B,GAAG,CAACjG,KAAK,EAAEmI,WAAW,CAAC;QAClD/L,eAAe,CAACmM,wBAAwB,CACtCH,QAAQ,EACR/L,YAAY,EACZ,OAAOmM,QAAQ,EAAEC,YAAY,KAAK;UAChC,MAAM;YAAEC;UAAS,CAAC,GAAGZ,mBAAmB,CAAChC,GAAG;UAC5C,MAAM;YAAE6C;UAAS,CAAC,GAAGH,QAAQ;UAC7B;UACA,IACE,CAAC7M,aAAa,CAAC+M,QAAQ,EAAEC,QAAQ,CAAC,IAClC,CAACtM,YAAY,CAACuM,KAAK,CAAE3L,KAAK,IAAK;YAC7B,IAAI4L,SAA6B;YACjC,IAAIC,QAA4B;YAChC,OACE,CAACD,SAAS,GAAGzO,UAAU,CACrB6C,KAAK,EACLyL,QAAQ,EACRD,YAAY,CAACE,QACf,CAAC,MACAG,QAAQ,GAAG1O,UAAU,CAAC6C,KAAK,EAAEyL,QAAQ,EAAEC,QAAQ,CAAC,CAAC,KACjD1L,KAAK,KAAKoL,WAAW,IACpBzO,OAAO,CAACiP,SAAS,CAACE,MAAM,EAAED,QAAQ,CAACC,MAAM,CAAC,CAAC;UAEjD,CAAC,CAAC,EACF;YACA,OAAO,KAAK;UACd;UAEA,MAAM,CACJ5E,oBAAoB,EACpBC,kBAAkB,EAClBC,mBAAmB,CACpB,GAAGC,0BAA0B,CAAC;YAC7B,GAAGwD,mBAAmB;YACtBU,QAAQ;YACRQ,KAAK,EAAE,IAAIC,eAAe,CAACT,QAAQ,CAACU,MAAM;UAC5C,CAAC,CAAC;UAEF,IAAIC,MAAM,GAAG,KAAK;UAClB,IAAIC,iBAA+B;UACnC,IAAI5E,YAAiD,GAAG,EAAE;UAE1D,IAAI;YACF4E,iBAAiB,GAAG,MAAMpN,YAAY,CACpC8E,KAAK,EACLsH,QAAQ,CAAClM,MAAM,EACfiI,oBAAoB,EACpB/H,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrB6L,WAAW,EACX,IACF,CAAC;;YAED;YACA;YACA,IAAIiB,iBAAiB,CAACnM,KAAK,EAAE;cAC3B;cACA,IAAIb,eAAe,CAACiN,SAAS,CAACD,iBAAiB,CAAC,EAAE;gBAChD,OAAO,IAAI;cACb;cAEA5E,YAAY,GAAG,CACb,GAAGJ,kBAAkB,EACrB,GAAGC,mBAAmB,CACvB;cACD,MAAMI,eAAe,CACnB2E,iBAAiB,EACjBjF,oBAAoB,EACpB,CAACA,oBAAoB,CAAC7G,QAAQ,EAAE,GAAGkH,YAAY,CACjD,CAAC;YACH;YAEA,MAAMpI,eAAe,CAACkN,uBAAuB,CAC3ChN,qBAAqB,EACrB8L,QAAQ,CAAClM,MAAM,EACfkN,iBAAiB,CAACvM,eACpB,CAAC;UACH,CAAC,CAAC,OAAO+B,KAAK,EAAE;YACd;YACAD,OAAO,CAACC,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;YAEtD,MAAM2K,MAAM,GAAG,MAAMnN,eAAe,CAACoN,OAAO,CAAC5K,KAAK,EAAEkC,KAAK,CAAC;YAC1D,IAAI,CAACyI,MAAM,EAAE;cACX,OAAO,IAAI;YACb;YACA,CAAC;cAAEJ,MAAM;cAAExM,MAAM,EAAEyM;YAAkB,CAAC,GAAGG,MAAM;;YAE/C;YACA,MAAMnN,eAAe,CAACkN,uBAAuB,CAC3ChN,qBAAqB,EACrB8L,QAAQ,CAAClM,MAAM,EACfkN,iBAAiB,CAACvM,eACpB,CAAC;UACH;UAEAT,eAAe,CAACyI,QAAQ,CACtBsD,WAAW,EACX,EAAE,EACFiB,iBAAiB,CAAC7I,IAAI,EACtBO,KACF,CAAC;UAED,IAAI,CAACqI,MAAM,EAAE;YACXhF,oBAAoB,CAAC7G,QAAQ,CAACyH,cAAc,CAC1CqE,iBAAiB,CAACnM,KACpB,CAAC;YACD,KAAK,MAAM6H,KAAK,IAAIN,YAAY,EAAE;cAChCM,KAAK,CAACC,cAAc,CAAC,CAAC;YACxB;UACF;;UAEA;UACA,OAAO,IAAI;QACb,CACF,CAAC;MACH;MAEA,OAAO/I,YAAY,CACjB8E,KAAK,EACLsH,QAAQ,CAAClM,MAAM,EACf4L,mBAAmB,EACnB1L,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrB6L,WAAW,EACXvK,SAAS,EACTnB,cACF,CAAC;IACH,CAAC,CACH,CAAC;IAED,MAAMgN,cAA4B,GAAG;MACnC,GAAG9M,MAAM;MACT4D,IAAI,EAAE3C,SAAS;MACfS,YAAY,EAAE,EAAE;MAChBxB,eAAe,EAAEe;IACnB,CAAC;IACD+B,QAAQ,CAACQ,OAAO,CAAC,CAACC,IAAI,EAAEJ,KAAK,KAAK;MAChC,IAAIgI,0BAA0B,CAAC0B,GAAG,CAAC1J,KAAK,CAAC,EAAE;QACzC;QACA5D,eAAe,CAACkE,OAAO,CACrB0H,0BAA0B,CAACtC,GAAG,CAAC1F,KAAK,CAAC,EACrC,EAAE,EACFI,IAAI,CAACG,IAAI,EACTO,KACF,CAAC;MACH;MACAxB,iBAAiB,CAACmK,cAAc,EAAErJ,IAAI,CAAC;MACvCuJ,6BAA6B,CAACF,cAAc,EAAErJ,IAAI,CAAC;IACrD,CAAC,CAAC;IACF,IAAIqJ,cAAc,CAAClJ,IAAI,EAAE;MACvBO,KAAK,CAAC8I,KAAK,GAAGH,cAAc,CAAClJ,IAAI;IACnC;IACAjB,iBAAiB,CAAC3C,MAAM,EAAE;MACxB,GAAG8M,cAAc;MACjBlJ,IAAI,EAAE3C;IACR,CAAC,CAAC;IAEF2B,qBAAqB,CACnBjD,qBAAqB,EACpBK,MAAM,CAACE,eAAe,GAAG4M,cAAc,CAAC5M,eAC3C,CAAC;EACH,CAAC;EACDwB,YAAY,CAACP,IAAI,CAACiK,YAAY,CAAC,CAAC,CAAC;EAEjC,MAAMnI,OAAO,CAACC,GAAG,CAACxB,YAAY,CAAC;EAE/B,OAAO1B,MAAM;AACf;AAEA,SAASyE,qBAAqBA,CAACH,OAAgB,EAAW;EACxD,OAAO,OAAOA,OAAO,KAAK,QAAQ,GAC9BzH,UAAU,CAACyH,OAAO,CAAC,GACnBxF,cAAc,CAACwF,OAAO,CAAC;EACrB;EACAzH,UAAU,CAACkC,kBAAkB,CAACuF,OAAO,CAAC,CAAC;AAC/C;AAIA,SAASmB,uBAAuBA,CAC9BtB,KAAa,EACuB;EACpC,IAAIA,KAAK,KAAK,UAAU,IAAIA,KAAK,KAAK,KAAK,IAAIA,KAAK,KAAK,SAAS,EAAE;IAClE,MAAM,IAAIjC,KAAK,CAAC,qCAAqCiC,KAAK,GAAG,CAAC;EAChE;AACF;AAEA,eAAemC,aAAaA,CAC1BhH,UAA4B,EAC5BoF,UAAqB,EACrBhC,MAAmB,EACnBjC,cAA8B,EAC9BhB,eAAgC,EAChCC,YAAyB,EACzBC,qBAAsC,EACtCC,MAA0B,EAC1BiD,QAA6B,EAC7BC,OAAiB,EACjBhD,cAA+B,EACR;EACvB,MAAME,MAAM,GAAGC,oBAAoB,CAAC,CAAC;EAErC,MAAM6K,IAAI,GAAGpG,UAAU,CAACZ,MAAM;EAC9B,MAAMd,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCwB,UAAU,CAACvB,GAAG,CAAC,CAACM,IAAI,EAAEyJ,CAAC,KACrBjK,OAAO,CAACC,GAAG,CACTR,MAAM,CAACS,GAAG,CAAC,CAACC,SAAS,EAAE+J,CAAC,KACtB7J,WAAW,CACThE,UAAU,EACV8D,SAAS,EACT;IACE,GAAG3C,cAAc;IACjB0E,WAAW,EAAE1B,IAAI;IACjB2B,YAAY,EAAE8H,CAAC;IACf7H,WAAW,EAAEyF;EACf,CAAC,EACDrL,eAAe,EACfC,YAAY,EACZC,qBAAqB,EACrBC,MAAM,EACNkD,OAAO,CAAChC,MAAM,CAACoM,CAAC,GAAGpC,IAAI,GAAGqC,CAAC,CAAC,EAC5BtK,QAAQ,IAAI,IAAIU,GAAG,CAACV,QAAQ,CAAC,EAC7B/C,cACF,CACF,CACF,CACF,CACF,CAAC;;EAED;EACAkD,QAAQ,CAACoK,IAAI,CAAC,CAAC,CAAC5J,OAAO,CAAC,CAACC,IAAI,EAAEJ,KAAK,KAAK;IACvC,IAAII,IAAI,CAACC,mBAAmB,EAAE;MAC5B;MACAjE,eAAe,CAACkE,OAAO,CACrB/D,MAAM,EACNkD,OAAO,CAAChC,MAAM,CAACuC,KAAK,CAAC,EACrBI,IAAI,CAACG,IAAI,EACTtE,UACF,CAAC;IACH;IACAqD,iBAAiB,CAAC3C,MAAM,EAAEyD,IAAI,CAAC;EACjC,CAAC,CAAC;EAEF,OAAOzD,MAAM;AACf;AAEA,OAAO,SAASqN,aAAaA,CAAC5M,cAA8B,EAAE;EAC5D,OAAO,CACLA,cAAc,CAACE,QAAQ,EACvB,GAAGF,cAAc,CAAC6M,gBAAgB,CAACC,MAAM,CAAC,CAAC,EAC3C,GAAG9M,cAAc,CAAC+M,iBAAiB,CAACD,MAAM,CAAC,CAAC,CAC7C;AACH;AAEA,OAAO,SAASzF,eAAeA,CAC7B9H,MAAoB,EACpBS,cAA8B,EAC9BgN,MAAkC,EAClC;EACAjR,qBAAqB,CAAC,CAAC;EAEvB,OAAOyG,OAAO,CAACC,GAAG,CAAC,CACjB,GAAGlD,MAAM,CAAC0B,YAAY,EACtB,GAAG+L,MAAM,CAACtK,GAAG,CAAEgF,KAAK,IAAKA,KAAK,CAACuF,UAAU,CAAC,CAAC,CAAC,EAC5C,GAAGjN,cAAc,CAACS,0BAA0B,CAC7C,CAAC;AACJ;AAEA,OAAO,SAASyG,0BAA0BA,CACxClH,cAA8B,EAK9B;EACA,MAAMgH,kBAAwC,GAAG,EAAE;EACnD,MAAMC,mBAA8C,GAAG,EAAE;EACzD,MAAMF,oBAAoC,GAAG;IAC3C,GAAG/G,cAAc;IACjBgH,kBAAkB;IAClBC;EACF,CAAC;EACD,OAAO,CAACF,oBAAoB,EAAEC,kBAAkB,EAAEC,mBAAmB,CAAC;AACxE;AAEA,SAAStF,QAAQA,CACfuL,QAA8B,EAC9BlN,cAA8B,EAC9B;EACA,IAAI,CAACkN,QAAQ,EAAE;IACb;EACF;;EAEA;EACA,IAAKA,QAAQ,CAAwBhM,IAAI,KAAK,OAAO,EAAE;IACrD;IACAK,OAAO,CAACC,KAAK,CAAC,uCAAuC,EAAE0L,QAAQ,CAAC;IAChE,MAAM,IAAIzL,KAAK,CAAC,sCAAsC,CAAC;EACzD;;EAEA;EACA,IAAIyL,QAAQ,CAAChM,IAAI,KAAK,SAAS,EAAE;IAC/B;IACAK,OAAO,CAAC4L,IAAI,CAAC,mDAAmD,EAAED,QAAQ,CAAC;IAC3E;EACF;EAEA,OAAOrQ,qBAAqB,CAC1BqQ,QAAQ,EACRlN,cACF,CAAC;AACH;AAEA,SAASkC,iBAAiBA,CACxB3C,MAAoB,EACpBwC,SAAuB,EACjB;EACN;EACA,MAAM;IAAEd,YAAY;IAAEkC,IAAI;IAAE1D,eAAe;IAAEwD,mBAAmB;IAAE,GAAGmK;EAAK,CAAC,GACzErL,SAAS;EACXxC,MAAM,CAAC0B,YAAY,CAACP,IAAI,CAAC,GAAGO,YAAY,CAAC;EAEzC,IAAIkC,IAAI,EAAE;IACR,IAAI5D,MAAM,CAAC4D,IAAI,EAAE;MACf,IAAIkK,IAAI,GAAG9N,MAAM,CAAC4D,IAAI;MACtB,OAAOkK,IAAI,CAACC,OAAO,EAAE;QACnBD,IAAI,GAAGA,IAAI,CAACC,OAAO;MACrB;MACAD,IAAI,CAACC,OAAO,GAAGnK,IAAI;IACrB,CAAC,MAAM;MACL5D,MAAM,CAAC4D,IAAI,GAAGA,IAAI;IACpB;EACF;EAEAgB,MAAM,CAACoJ,MAAM,CAAChO,MAAM,EAAE6N,IAAI,CAAC;AAC7B;AAEA,SAASb,6BAA6BA,CACpChN,MAAoB,EACpBwC,SAAuB,EACvB;EACA,MAAMtC,eAAe,GAAGsC,SAAS,CAACtC,eAAe;EACjD,IAAIA,eAAe,EAAE;IACnB,IAAIF,MAAM,CAACE,eAAe,EAAE;MAC1B,IAAI4N,IAAI,GAAG9N,MAAM,CAACE,eAAe;MACjC,OAAO4N,IAAI,CAACC,OAAO,EAAE;QACnBD,IAAI,GAAGA,IAAI,CAACC,OAAO;MACrB;MACAD,IAAI,CAACC,OAAO,GAAG7N,eAAe;IAChC,CAAC,MAAM;MACLF,MAAM,CAACE,eAAe,GAAGA,eAAe;IAC1C;EACF;AACF;AAEA,SAAS0C,qBAAqBA,CAC5BjD,qBAAsC,EACtCO,eAA4C,EAC5C;EACA,IAAI,CAACA,eAAe,EAAE;IACpB;EACF;EACA,IAAIP,qBAAqB,CAACsN,KAAK,EAAE;IAC/B,IAAIa,IAAI,GAAGnO,qBAAqB,CAACsN,KAAK;IACtC,OAAOa,IAAI,CAACC,OAAO,EAAE;MACnBD,IAAI,GAAGA,IAAI,CAACC,OAAO;IACrB;IACAD,IAAI,CAACC,OAAO,GAAG7N,eAAe;EAChC,CAAC,MAAM;IACLP,qBAAqB,CAACsN,KAAK,GAAG/M,eAAe;EAC/C;AACF;AAEA,SAASD,oBAAoBA,CAAA,EAAiB;EAC5C,OAAO;IAAEyB,YAAY,EAAE;EAAG,CAAC;AAC7B;AAEA,OAAO,SAAS0E,eAAeA,CAC7BC,QAAiC,EACjC4H,aAAoC,EACpC;EACA,IAAIC,QAAQ,GAAGD,aAAa;EAC5B;EACA,IACEE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IACtChI,QAAQ,IACR,CAAC7E,KAAK,CAACC,OAAO,CAAC4E,QAAQ,CAAC,EACxB;IACA;IACArE,OAAO,CAAC4L,IAAI,CACV,yCAAyC,EACzC,IAAI,OAAOvH,QAAQ,GAAG,EACtBA,QACF,CAAC;EACH;EACA,IAAI7E,KAAK,CAACC,OAAO,CAAC4E,QAAQ,CAAC,IAAI,CAAC6H,QAAQ,EAAE;IACxCA,QAAQ,GAAG,CAAC,CAAC;IACb,KAAK,MAAM;MAAEhI,IAAI,EAAEoI,EAAE;MAAE,GAAGrB;IAAM,CAAC,IAAI5G,QAAQ,EAAE;MAC7C,MAAMH,IAAI,GAAGoI,EAAE,IAAI,EAAE;MACrB,IAAI,CAACxR,cAAc,CAACoR,QAAQ,EAAEhI,IAAI,CAAC,EAAE;QACnCgI,QAAQ,CAAChI,IAAI,CAAC,GAAG;UACfvE,IAAI,EAAE,QAAQ;UACde,MAAM,EAAE;QACV,CAAC;MACH;MACCwL,QAAQ,CAAChI,IAAI,CAAC,CAAsBxD,MAAM,CAACvB,IAAI,CAAC8L,KAAK,CAAC;IACzD;EACF;EACA,OAAOiB,QAAQ;AACjB;AAEA,SAASlF,SAASA,CAChBuF,OAAyB,EACzB5M,IAAsD,EACtD6M,IAAY,EACZC,aAA+C,EAC/C;EACA,OAAOA,aAAa,KAAK,QAAQ,GAC7BF,OAAO,CAACG,KAAK,CAAEC,CAAC,IAAK;IACnB;IACA3M,OAAO,CAACC,KAAK,CAAC,sBAAsB,EAAEN,IAAI,EAAE6M,IAAI,EAAEG,CAAC,CAAC;EACtD,CAAC,CAAC,GACFJ,OAAO;AACb","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","_ref2","_ref2$node","tplStateStoreScope","formStateStoreScope","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","catchLoad","unknownBricks","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","_confProps","inUseBrick","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","usedProcessors","size","join","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref3","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } 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 trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\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 `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\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 const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\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\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\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 // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\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 routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\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 { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\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 %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,6 +27,7 @@ var _incrementalRenderStates = /*#__PURE__*/new WeakMap();
|
|
|
27
27
|
var _RendererContext_brand = /*#__PURE__*/new WeakSet();
|
|
28
28
|
export class RendererContext {
|
|
29
29
|
constructor(scope, options) {
|
|
30
|
+
var _options$unknownBrick;
|
|
30
31
|
_classPrivateMethodInitSpec(this, _RendererContext_brand);
|
|
31
32
|
/**
|
|
32
33
|
* - page: render as whole page, triggering page life cycles.
|
|
@@ -58,7 +59,7 @@ export class RendererContext {
|
|
|
58
59
|
_classPrivateFieldInitSpec(this, _memoizedMenuRequestNodeMap, new WeakMap());
|
|
59
60
|
_classPrivateFieldInitSpec(this, _incrementalRenderStates, new Map());
|
|
60
61
|
this.scope = scope;
|
|
61
|
-
this.unknownBricks = (options === null || options === void 0 ? void 0 : options.unknownBricks)
|
|
62
|
+
this.unknownBricks = (_options$unknownBrick = options === null || options === void 0 ? void 0 : options.unknownBricks) !== null && _options$unknownBrick !== void 0 ? _options$unknownBrick : "throw";
|
|
62
63
|
_classPrivateFieldSet(_routeHelper, this, options === null || options === void 0 ? void 0 : options.routeHelper);
|
|
63
64
|
this.renderId = options === null || options === void 0 ? void 0 : options.renderId;
|
|
64
65
|
}
|
|
@@ -192,7 +193,7 @@ export class RendererContext {
|
|
|
192
193
|
if (!_classPrivateFieldGet(_memoized, this)) {
|
|
193
194
|
_classPrivateFieldSet(_memoized, this, new WeakMap());
|
|
194
195
|
}
|
|
195
|
-
const memKey = [slotId
|
|
196
|
+
const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
|
|
196
197
|
let mem = _classPrivateFieldGet(_memoized, this).get(returnNode);
|
|
197
198
|
if (!mem) {
|
|
198
199
|
mem = new Map();
|
|
@@ -206,7 +207,7 @@ export class RendererContext {
|
|
|
206
207
|
});
|
|
207
208
|
}
|
|
208
209
|
reRender(slotId, keyPath, node, returnNode) {
|
|
209
|
-
const memKey = [slotId
|
|
210
|
+
const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
|
|
210
211
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
211
212
|
const memoized = _classPrivateFieldGet(_memoized, this).get(returnNode).get(memKey);
|
|
212
213
|
const {
|
|
@@ -218,16 +219,16 @@ export class RendererContext {
|
|
|
218
219
|
let insertBeforeChild;
|
|
219
220
|
const insertPortalBeforeChildCandidates = [];
|
|
220
221
|
if ((prevNode === null || prevNode === void 0 ? void 0 : prevNode.tag) === RenderTag.PLACEHOLDER) {
|
|
221
|
-
var _getNextNormalNode, _getNextPortalNode;
|
|
222
|
-
insertBeforeChild = ((_getNextNormalNode = getNextNormalNode(prevNode)) === null || _getNextNormalNode === void 0 ? void 0 : _getNextNormalNode.element)
|
|
222
|
+
var _getNextNormalNode$el, _getNextNormalNode, _getNextPortalNode;
|
|
223
|
+
insertBeforeChild = (_getNextNormalNode$el = (_getNextNormalNode = getNextNormalNode(prevNode)) === null || _getNextNormalNode === void 0 ? void 0 : _getNextNormalNode.element) !== null && _getNextNormalNode$el !== void 0 ? _getNextNormalNode$el : null;
|
|
223
224
|
// Todo(steve): handle portal bricks from useBrick.
|
|
224
225
|
const nextSibling = (_getNextPortalNode = getNextPortalNode(prevNode)) === null || _getNextPortalNode === void 0 ? void 0 : _getNextPortalNode.element;
|
|
225
226
|
if (nextSibling) {
|
|
226
227
|
insertPortalBeforeChildCandidates.push(nextSibling);
|
|
227
228
|
}
|
|
228
229
|
} else {
|
|
229
|
-
var _prevLastNormal$eleme, _prevLastPortal$eleme;
|
|
230
|
-
insertBeforeChild = (prevLastNormal === null || prevLastNormal === void 0 || (_prevLastNormal$
|
|
230
|
+
var _prevLastNormal$eleme, _prevLastNormal$eleme2, _prevLastPortal$eleme;
|
|
231
|
+
insertBeforeChild = (_prevLastNormal$eleme = prevLastNormal === null || prevLastNormal === void 0 || (_prevLastNormal$eleme2 = prevLastNormal.element) === null || _prevLastNormal$eleme2 === void 0 ? void 0 : _prevLastNormal$eleme2.nextSibling) !== null && _prevLastNormal$eleme !== void 0 ? _prevLastNormal$eleme : null;
|
|
231
232
|
let nextSibling = prevLastPortal === null || prevLastPortal === void 0 || (_prevLastPortal$eleme = prevLastPortal.element) === null || _prevLastPortal$eleme === void 0 ? void 0 : _prevLastPortal$eleme.nextSibling;
|
|
232
233
|
while (nextSibling) {
|
|
233
234
|
insertPortalBeforeChildCandidates.push(nextSibling);
|
|
@@ -503,7 +504,8 @@ function _dispatchGeneralLifeCycle(type, event) {
|
|
|
503
504
|
}
|
|
504
505
|
}
|
|
505
506
|
function _addObserver(brick, conf) {
|
|
506
|
-
|
|
507
|
+
var _conf$threshold;
|
|
508
|
+
const threshold = (_conf$threshold = conf.threshold) !== null && _conf$threshold !== void 0 ? _conf$threshold : 0.1;
|
|
507
509
|
const observer = new IntersectionObserver((entries, observer) => {
|
|
508
510
|
entries.forEach(entry => {
|
|
509
511
|
if (entry.isIntersecting) {
|