@next-core/runtime 1.20.4 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -101,23 +101,24 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
101
101
  }
102
102
  return output;
103
103
  }
104
- async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, noMemoize) {
104
+ async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath) {
105
105
  const output = {
106
106
  blockingList: [],
107
107
  menuRequests: []
108
108
  };
109
+ const kPath = keyPath !== null && keyPath !== void 0 ? keyPath : [];
109
110
  // 多个构件并行异步转换,但转换的结果按原顺序串行合并。
110
- const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, slotId, index, tplStack && new Map(tplStack))));
111
+ const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, slotId, kPath.concat(index), tplStack && new Map(tplStack))));
111
112
  rendered.forEach((item, index) => {
112
- if (!noMemoize && item.hasTrackingControls) {
113
+ if (item.hasTrackingControls) {
113
114
  // Memoize a render node before it's been merged.
114
- rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);
115
+ rendererContext.memoizeControlNode(slotId, kPath.concat(index), item.node, returnNode);
115
116
  }
116
117
  mergeRenderOutput(output, item);
117
118
  });
118
119
  return output;
119
120
  }
120
- async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, slotId, key, tplStack = new Map()) {
121
+ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, slotId, keyPath = [], tplStack = new Map()) {
121
122
  var _hooks$checkPermissio2, _runtimeContext$app;
122
123
  const output = {
123
124
  blockingList: [],
@@ -158,7 +159,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
158
159
  ...acc,
159
160
  [symbol]: brickConf[symbol]
160
161
  }), {})
161
- }, _runtimeContext, rendererContext, slotId, key, tplStack);
162
+ }, _runtimeContext, rendererContext, slotId, keyPath, tplStack);
162
163
  }
163
164
  const tplStateStoreId = brickConf[_constants.symbolForTplStateStoreId];
164
165
  const formStateStoreId = brickConf[_constants2.symbolForFormStateStoreId];
@@ -215,12 +216,12 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
215
216
  if (!Array.isArray(computedDataSource)) {
216
217
  return output;
217
218
  }
218
- return renderForEach(returnNode, computedDataSource, bricks, runtimeContext, rendererContext, slotId, tplStack);
219
+ return renderForEach(returnNode, computedDataSource, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath);
219
220
  }
220
221
  case ":if":
221
222
  case ":switch":
222
223
  {
223
- return renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, true);
224
+ return renderBricks(returnNode, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath);
224
225
  }
225
226
  }
226
227
  };
@@ -239,7 +240,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
239
240
  await Promise.all(controlOutput.blockingList);
240
241
  // Ignore stale renders
241
242
  if (renderId === currentRenderId) {
242
- rendererContext.rerenderControlNode(slotId, key, controlOutput.node, returnNode);
243
+ rendererContext.rerenderControlNode(slotId, keyPath, controlOutput.node, returnNode);
243
244
  }
244
245
  };
245
246
  const debouncedListener = (0, _lodash.debounce)(listener);
@@ -260,7 +261,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
260
261
 
261
262
  // Widgets need to be defined before rendering.
262
263
  if (/\.tpl-/.test(brickName) && !_CustomTemplates.customTemplates.get(brickName)) {
263
- await catchLoadBrick((0, _loader.loadBricksImperatively)([brickName], (0, _Runtime.getBrickPackages)()), brickName, rendererContext.unknownBricks);
264
+ await catchLoad((0, _loader.loadBricksImperatively)([brickName], (0, _Runtime.getBrickPackages)()), "brick", brickName, rendererContext.unknownBricks);
264
265
  }
265
266
  const tplTagName = (0, _utils.getTagNameOfCustomTemplate)(brickName, (_runtimeContext$app = runtimeContext.app) === null || _runtimeContext$app === void 0 ? void 0 : _runtimeContext$app.id);
266
267
  if (tplTagName) {
@@ -278,7 +279,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
278
279
  }
279
280
  });
280
281
  } else {
281
- output.blockingList.push(catchLoadBrick((0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)()), brickName, rendererContext.unknownBricks));
282
+ output.blockingList.push(catchLoad((0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)()), "brick", brickName, rendererContext.unknownBricks));
282
283
  }
283
284
  }
284
285
  let formData;
@@ -309,13 +310,13 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
309
310
  src,
310
311
  ...attrs
311
312
  } = props;
312
- await (0, _loader.loadScript)(src, prefix, attrs);
313
+ await catchLoad((0, _loader.loadScript)(src, prefix, attrs), "script", src, "silent");
313
314
  } else {
314
315
  const {
315
316
  href,
316
317
  ...attrs
317
318
  } = props;
318
- await (0, _loader.loadStyle)(href, prefix, attrs);
319
+ await catchLoad((0, _loader.loadStyle)(href, prefix, attrs), "stylesheet", href, "silent");
319
320
  }
320
321
  return output;
321
322
  }
@@ -336,7 +337,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
336
337
  // 在最终挂载前,先加载所有可能用到的 processors。
337
338
  const usedProcessors = (0, _storyboard.strictCollectMemberUsage)([brickConf.events, brickConf.lifeCycle], "PROCESSORS", 2);
338
339
  if (usedProcessors.size > 0) {
339
- output.blockingList.push((0, _loader.loadProcessorsImperatively)(usedProcessors, (0, _Runtime.getBrickPackages)()));
340
+ output.blockingList.push(catchLoad((0, _loader.loadProcessorsImperatively)(usedProcessors, (0, _Runtime.getBrickPackages)()), "processors", [...usedProcessors].join(", "), rendererContext.unknownBricks));
340
341
  }
341
342
 
342
343
  // 加载构件属性和加载子构件等任务,可以并行。
@@ -403,20 +404,25 @@ function ensureValidControlBrick(brick) {
403
404
  throw new Error(`Unknown storyboard control node: "${brick}"`);
404
405
  }
405
406
  }
406
- async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, slotId, tplStack) {
407
+ async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, slotId, tplStack, keyPath) {
407
408
  const output = {
408
409
  blockingList: [],
409
410
  menuRequests: []
410
411
  };
412
+ const rows = dataSource.length;
411
413
  const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map((brickConf, j) => renderBrick(returnNode, brickConf, {
412
414
  ...runtimeContext,
413
415
  forEachItem: item
414
- }, rendererContext, slotId, i * j, tplStack && new Map(tplStack))))));
416
+ }, rendererContext, slotId, keyPath.concat(i * rows + j), tplStack && new Map(tplStack))))));
415
417
 
416
418
  // 多层构件并行异步转换,但转换的结果按原顺序串行合并。
417
- for (const item of rendered.flat()) {
419
+ rendered.flat().forEach((item, index) => {
420
+ if (item.hasTrackingControls) {
421
+ // Memoize a render node before it's been merged.
422
+ rendererContext.memoizeControlNode(slotId, keyPath.concat(index), item.node, returnNode);
423
+ }
418
424
  mergeRenderOutput(output, item);
419
- }
425
+ });
420
426
  return output;
421
427
  }
422
428
  function loadMenu(menuConf, runtimeContext) {
@@ -486,10 +492,10 @@ function childrenToSlots(children, originalSlots) {
486
492
  }
487
493
  return newSlots;
488
494
  }
489
- function catchLoadBrick(promise, brickName, unknownBricks) {
490
- return unknownBricks === "silent" ? promise.catch(e => {
495
+ function catchLoad(promise, type, name, unknownPolicy) {
496
+ return unknownPolicy === "silent" ? promise.catch(e => {
491
497
  // eslint-disable-next-line no-console
492
- console.error(`Load brick "${brickName}" failed:`, e);
498
+ console.error(`Load ${type} "${name}" failed:`, e);
493
499
  }) : promise;
494
500
  }
495
501
  //# sourceMappingURL=Renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_storyboard","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","key","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","renderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","controlOutput","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","catchLoadBrick","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","FormRendererElement","HTMLElement","$$typeof","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","tag","RenderTag","BRICK","return","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","lifeCycle","size","loadProcessorsImperatively","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","undefined","childRuntimeContext","loadChildren","entries","childSlotId","slotConf","childrenOutput","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: (brickConf as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n slotId,\n key,\n tplStack\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const controlOutput = await renderControlNode();\n controlOutput.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(controlOutput.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n controlOutput.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoadBrick(\n loadBricksImperatively([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n customElements.define(\n FORM_RENDERER,\n class FormRendererElement extends HTMLElement {\n get $$typeof(): string {\n return \"form-renderer\";\n }\n }\n );\n } else {\n output.blockingList.push(\n catchLoadBrick(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n } else {\n confProps = brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await loadScript(src as string, prefix, attrs);\n } else {\n const { href, ...attrs } = props;\n await loadStyle(href as string, prefix, attrs);\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n loadProcessorsImperatively(usedProcessors, getBrickPackages())\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoadBrick(\n promise: Promise<unknown>,\n brickName: string,\n unknownBricks: RendererContext[\"unknownBricks\"]\n) {\n return unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_evaluate","_storyboard","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","_hooks$checkPermissio","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","concat","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","renderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","controlOutput","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","FormRendererElement","HTMLElement","$$typeof","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","tag","RenderTag","BRICK","return","events","portal","iid","ref","usedProcessors","strictCollectMemberUsage","lifeCycle","size","loadProcessorsImperatively","join","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","undefined","childRuntimeContext","loadChildren","entries","childSlotId","slotConf","childrenOutput","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","rows","i","j","flat","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n RenderBrick,\n RenderNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[]\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: (brickConf as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n slotId,\n keyPath,\n tplStack\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n keyPath\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n keyPath\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const controlOutput = await renderControlNode();\n controlOutput.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(controlOutput.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n keyPath,\n controlOutput.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n customElements.define(\n FORM_RENDERER,\n class FormRendererElement extends HTMLElement {\n get $$typeof(): string {\n return \"form-renderer\";\n }\n }\n );\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n } else {\n confProps = brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[]\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rows = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n keyPath.concat(i * rows + j),\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load ${type} \"${name}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":";;;;;;;;;AAUA,IAAAA,OAAA,GAAAC,OAAA;AAOA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AACA,IAAAK,sBAAA,GAAAL,OAAA;AAIA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAP,OAAA;AACA,IAAAQ,wBAAA,GAAAR,OAAA;AAKA,IAAAS,YAAA,GAAAT,OAAA;AACA,IAAAU,UAAA,GAAAV,OAAA;AAKA,IAAAW,qBAAA,GAAAX,OAAA;AAOA,IAAAY,MAAA,GAAAZ,OAAA;AAIA,IAAAa,gBAAA,GAAAb,OAAA;AAEA,IAAAc,QAAA,GAAAd,OAAA;AACA,IAAAe,MAAA,GAAAf,OAAA;AACA,IAAAgB,UAAA,GAAAhB,OAAA;AACA,IAAAiB,aAAA,GAAAjB,OAAA;AACA,IAAAkB,WAAA,GAAAlB,OAAA;AAKA,IAAAmB,mBAAA,GAAAnB,OAAA;AACA,IAAAoB,SAAA,GAAApB,OAAA;AAGA,IAAAqB,WAAA,GAAArB,OAAA;AAeO,eAAesB,YAAYA,CAChCC,UAAsB,EACtBC,MAAmB,EACnBC,eAA+B,EAC/BC,eAAgC,EAChCC,MAAe,EACQ;EACvB,MAAMC,OAAO,GAAG,MAAM,IAAAC,wBAAW,EAACL,MAAM,EAAEC,eAAe,CAAC;EAC1D,MAAMK,MAAoB,GAAG;IAC3BC,YAAY,EAAE,EAAE;IAChBC,YAAY,EAAE;EAChB,CAAC;EACD,QAAQJ,OAAO;IACb,KAAK,QAAQ;MACX;IACF,KAAK,iBAAiB;MACpBE,MAAM,CAACG,eAAe,GAAG,IAAI;MAC7B;IACF;MAAS;QAAA,IAAAC,qBAAA;QACP,MAAMC,KAAK,GAAIL,MAAM,CAACK,KAAK,GAAGP,OAAO,CAACO,KAAM;QAC5C,MAAMC,cAAc,GAAG;UACrB,GAAGX,eAAe;UAClBY,KAAK,EAAET,OAAO,CAACS;QACjB,CAAC;QACDD,cAAc,CAACE,QAAQ,CAACC,MAAM,CAACJ,KAAK,CAACK,OAAO,EAAEJ,cAAc,CAAC;QAC7DA,cAAc,CAACK,0BAA0B,CAACC,IAAI,CAC5CC,cAAK,aAALA,cAAK,gBAAAT,qBAAA,GAALS,cAAK,CAAEC,gBAAgB,cAAAV,qBAAA,uBAAvBA,qBAAA,CAAyBW,kCAAkC,CACzDV,KAAK,EACJW,KAAK,IAAK,IAAAC,uCAAqB,EAACD,KAAK,EAAEV,cAAc,CACxD,CACF,CAAC;;QAED;QACA;QACA,MAAM;UAAEY;QAAc,CAAC,GAAGb,KAAqC;QAC/D,IAAIc,KAAK,CAACC,OAAO,CAACF,aAAa,CAAC,EAAE;UAChClB,MAAM,CAACC,YAAY,CAACW,IAAI,CACtB,IAAAS,8BAAsB,EAACH,aAAa,EAAE,IAAAI,yBAAgB,EAAC,CAAC,CAC1D,CAAC;QACH;QAEA,QAAQjB,KAAK,CAACkB,IAAI;UAChB,KAAK,UAAU;YAAE;cACf,IAAIC,UAAmB;cACvB,IAAI,OAAOnB,KAAK,CAACoB,QAAQ,KAAK,QAAQ,EAAE;gBACtCD,UAAU,GAAG,MAAM,IAAAP,uCAAqB,EACtCZ,KAAK,CAACoB,QAAQ,EACdnB,cACF,CAAC;cACH,CAAC,MAAM;gBACL,MAAMoB,QAAQ,GAAI,MAAM,IAAAC,wBAAW,EACjC;kBACEC,SAAS,EAAE,UAAU;kBACrB,GAAGvB,KAAK,CAACoB;gBACX,CAAC,EACDnB,cACF,CAA4B;gBAC5BkB,UAAU,GAAGE,QAAQ,CAACD,QAAQ;cAChC;cACA,IAAI,OAAOD,UAAU,KAAK,QAAQ,EAAE;gBAClC;gBACAK,OAAO,CAACC,KAAK,CAAC,6BAA6B,EAAEN,UAAU,CAAC;gBACxD,MAAM,IAAIO,KAAK,CACZ,uCAAsC,OAAOP,UAAW,EAC3D,CAAC;cACH;cACAxB,MAAM,CAACyB,QAAQ,GAAG;gBAAEO,IAAI,EAAER;cAAW,CAAC;cACtC;YACF;UACA,KAAK,QAAQ;YAAE;cACbxB,MAAM,CAACE,YAAY,CAACU,IAAI,CAACqB,QAAQ,CAAC5B,KAAK,CAAC6B,IAAI,EAAE5B,cAAc,CAAC,CAAC;cAC9D,MAAM6B,SAAS,GAAG,MAAM3C,YAAY,CAClCC,UAAU,EACVY,KAAK,CAACX,MAAM,EACZY,cAAc,EACdV,eAAe,EACfC,MACF,CAAC;cACDuC,iBAAiB,CAACpC,MAAM,EAAEmC,SAAS,CAAC;cACpC;YACF;UACA;YAAS;cACPnC,MAAM,CAACE,YAAY,CAACU,IAAI,CAACqB,QAAQ,CAAC5B,KAAK,CAAC6B,IAAI,EAAE5B,cAAc,CAAC,CAAC;cAC9D,MAAM6B,SAAS,GAAG,MAAME,YAAY,CAClC5C,UAAU,EACVY,KAAK,CAACiC,MAAM,EACZhC,cAAc,EACdV,eAAe,EACfC,MACF,CAAC;cACDuC,iBAAiB,CAACpC,MAAM,EAAEmC,SAAS,CAAC;YACtC;QACF;MACF;EACF;EACA,OAAOnC,MAAM;AACf;AAEO,eAAeqC,YAAYA,CAChC5C,UAAsB,EACtB6C,MAAmB,EACnBhC,cAA8B,EAC9BV,eAAgC,EAChCC,MAAe,EACf0C,QAA8B,EAC9BC,OAAkB,EACK;EACvB,MAAMxC,MAAoB,GAAG;IAC3BC,YAAY,EAAE,EAAE;IAChBC,YAAY,EAAE;EAChB,CAAC;EACD,MAAMuC,KAAK,GAAGD,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE;EAC3B;EACA,MAAME,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCN,MAAM,CAACO,GAAG,CAAC,CAACC,SAAS,EAAEC,KAAK,KAC1BC,WAAW,CACTvD,UAAU,EACVqD,SAAS,EACTxC,cAAc,EACdV,eAAe,EACfC,MAAM,EACN4C,KAAK,CAACQ,MAAM,CAACF,KAAK,CAAC,EACnBR,QAAQ,IAAI,IAAIW,GAAG,CAACX,QAAQ,CAC9B,CACF,CACF,CAAC;EAEDG,QAAQ,CAACS,OAAO,CAAC,CAACC,IAAI,EAAEL,KAAK,KAAK;IAChC,IAAIK,IAAI,CAACC,mBAAmB,EAAE;MAC5B;MACAzD,eAAe,CAAC0D,kBAAkB,CAChCzD,MAAM,EACN4C,KAAK,CAACQ,MAAM,CAACF,KAAK,CAAC,EACnBK,IAAI,CAACG,IAAI,EACT9D,UACF,CAAC;IACH;IACA2C,iBAAiB,CAACpC,MAAM,EAAEoD,IAAI,CAAC;EACjC,CAAC,CAAC;EAEF,OAAOpD,MAAM;AACf;AAEO,eAAegD,WAAWA,CAC/BvD,UAAsB,EACtBqD,SAAsC,EACtCnD,eAA+B,EAC/BC,eAAgC,EAChCC,MAAe,EACf2C,OAAiB,GAAG,EAAE,EACtBD,QAAQ,GAAG,IAAIW,GAAG,CAAiB,CAAC,EACb;EAAA,IAAAM,sBAAA,EAAAC,mBAAA;EACvB,MAAMzD,MAAoB,GAAG;IAC3BC,YAAY,EAAE,EAAE;IAChBC,YAAY,EAAE;EAChB,CAAC;EAED,IAAI,CAAC4C,SAAS,CAACY,KAAK,EAAE;IACpB,IAAKZ,SAAS,CAA2Ba,QAAQ,EAAE;MACjD;MACA9B,OAAO,CAACC,KAAK,CAAC,qCAAqC,EAAEgB,SAAS,CAAC;IACjE,CAAC,MAAM;MACL;MACAjB,OAAO,CAACC,KAAK,CAAC,gBAAgB,EAAEgB,SAAS,CAAC;IAC5C;IACA,OAAO9C,MAAM;EACf;;EAEA;EACA;EACA,MAAM;IAAE4D,EAAE,EAAEC,OAAO;IAAEC,mBAAmB;IAAE,GAAGC;EAAc,CAAC,GAAGjB,SAAS;EACxE,IAAIkB,qBAAqB,CAACH,OAAO,CAAC,EAAE;IAClC,OAAOb,WAAW,CAChBvD,UAAU,EACV;MACEiE,KAAK,EAAE,KAAK;MACZO,UAAU,EAAEJ,OAAO;MACnB;MACAC,mBAAmB;MACnBI,KAAK,EAAE;QACL,EAAE,EAAE;UACF3C,IAAI,EAAE,QAAQ;UACde,MAAM,EAAE,CAACyB,aAAa;QACxB;MACF,CAAC;MACD;MACA,GAAGI,MAAM,CAACC,qBAAqB,CAACtB,SAAS,CAAC,CAACuB,MAAM,CAC/C,CAACC,GAAG,EAAEC,MAAM,MAAM;QAChB,GAAGD,GAAG;QACN,CAACC,MAAM,GAAIzB,SAAS,CAASyB,MAAM;MACrC,CAAC,CAAC,EACF,CAAC,CACH;IACF,CAAC,EACD5E,eAAe,EACfC,eAAe,EACfC,MAAM,EACN2C,OAAO,EACPD,QACF,CAAC;EACH;EAEA,MAAMiC,eAAe,GAAG1B,SAAS,CAAC2B,mCAAwB,CAAC;EAC3D,MAAMC,gBAAgB,GAAG5B,SAAS,CAAC6B,qCAAyB,CAAC;EAC7D,MAAMrE,cAAc,GAAG;IACrB,GAAGX,eAAe;IAClB6E,eAAe;IACfE;EACF,CAAC;EAED,IAAI,IAAAE,uBAAc,EAAC9B,SAAS,EAAE+B,0CAA+B,CAAC,EAAE;IAC9D;IACA;IACAvE,cAAc,CAACwE,WAAW,GAAGhC,SAAS,CAAC+B,0CAA+B,CAAC;EACzE;EAEA,MAAM;IAAEnE;EAAQ,CAAC,GAAGoC,SAAwC;EAC5D;EACA,IAAI3B,KAAK,CAACC,OAAO,CAACV,OAAO,CAAC,IAAIA,OAAO,CAACqE,MAAM,GAAG,CAAC,EAAE;IAChD,MAAMC,MAAM,GAAG,IAAAC,0BAAY,EAAC3E,cAAc,CAAC;IAC3C,IAAA4E,iCAAmB,EACjBF,MAAM,EACN,4BAA4B,EAC5B,mBAAmB,EACnBlC,SACF,CAAC;IACD,IAAI,CAACkC,MAAM,EAAE;MACX1E,cAAc,CAACE,QAAQ,CAACC,MAAM,CAACC,OAAO,EAAEJ,cAAc,CAAC;IACzD;EACF;EAEAA,cAAc,CAACK,0BAA0B,CAACC,IAAI,CAC5CC,cAAK,aAALA,cAAK,gBAAA2C,sBAAA,GAAL3C,cAAK,CAAEC,gBAAgB,cAAA0C,sBAAA,uBAAvBA,sBAAA,CAAyBzC,kCAAkC,CACzD+B,SAAS,EACR9B,KAAK,IAAK,IAAAC,uCAAqB,EAACD,KAAK,EAAEV,cAAc,CACxD,CACF,CAAC;EAED,IAAI,EAAE,MAAM,IAAA6E,0BAAiB,EAACrC,SAAS,EAAExC,cAAc,CAAC,CAAC,EAAE;IACzD,OAAON,MAAM;EACf;EAEA,MAAMoF,SAAS,GAAGtC,SAAS,CAACY,KAAK;EACjC,IAAI0B,SAAS,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;IAC7BC,uBAAuB,CAACF,SAAS,CAAC;IAElC,MAAM;MAAEnB;IAAW,CAAC,GAAGnB,SAAS;IAEhC,MAAMyC,iBAAiB,GAAG,MAAAA,CAAA,KAAY;MAAA,IAAAC,WAAA;MACpC;MACA,MAAMC,kBAAkB,GAAG,MAAM,IAAAxE,uCAAqB,EACpDgD,UAAU,EACV3D,cACF,CAAC;;MAED;MACA,MAAMoF,IAAI,GACRN,SAAS,KAAK,UAAU,GACpB,EAAE,GACFA,SAAS,KAAK,SAAS,GACvBO,MAAM,CAACF,kBAAkB,CAAC,GAC1BA,kBAAkB,GAClB,EAAE,GACF,MAAM;;MAEZ;MACA,MAAMvB,KAAK,GAAG0B,eAAe,CAAC9C,SAAS,CAAC+C,QAAQ,EAAE/C,SAAS,CAACoB,KAAK,CAAC;;MAElE;MACA,MAAM5B,MAAM,GACV4B,KAAK,IACL,IAAAU,uBAAc,EAACV,KAAK,EAAEwB,IAAI,CAAC,MAAAF,WAAA,GAC1BtB,KAAK,CAACwB,IAAI,CAAC,cAAAF,WAAA,uBAAZA,WAAA,CAAmClD,MAAM;MAE3C,IAAI,CAACnB,KAAK,CAACC,OAAO,CAACkB,MAAM,CAAC,EAAE;QAC1B,OAAOtC,MAAM;MACf;MAEA,QAAQoF,SAAS;QACf,KAAK,UAAU;UAAE;YACf,IAAI,CAACjE,KAAK,CAACC,OAAO,CAACqE,kBAAkB,CAAC,EAAE;cACtC,OAAOzF,MAAM;YACf;YACA,OAAO8F,aAAa,CAClBrG,UAAU,EACVgG,kBAAkB,EAClBnD,MAAM,EACNhC,cAAc,EACdV,eAAe,EACfC,MAAM,EACN0C,QAAQ,EACRC,OACF,CAAC;UACH;QACA,KAAK,KAAK;QACV,KAAK,SAAS;UAAE;YACd,OAAOH,YAAY,CACjB5C,UAAU,EACV6C,MAAM,EACNhC,cAAc,EACdV,eAAe,EACfC,MAAM,EACN0C,QAAQ,EACRC,OACF,CAAC;UACH;MACF;IACF,CAAC;IAED,MAAMuD,gBAAgB,GAAG,MAAMR,iBAAiB,CAAC,CAAC;IAElD,MAAM;MAAES,YAAY;MAAEC;IAAW,CAAC,GAAG,IAAAC,oBAAS,EAACjC,UAAU,CAAC;IAC1D,IAAI+B,YAAY,IAAIC,UAAU,EAAE;MAC9BF,gBAAgB,CAAC1C,mBAAmB,GAAG,IAAI;MAC3C,IAAI8C,QAAQ,GAAG,CAAC;MAChB,MAAMC,QAAQ,GAAG,MAAAA,CAAA,KAAY;QAC3B,MAAMC,eAAe,GAAG,EAAEF,QAAQ;QAClC,MAAMG,aAAa,GAAG,MAAMf,iBAAiB,CAAC,CAAC;QAC/Ce,aAAa,CAACrG,YAAY,CAACW,IAAI,CAC7B,GAAG,CACD,GAAGN,cAAc,CAACiG,gBAAgB,CAACC,MAAM,CAAC,CAAC,EAC3C,GAAGlG,cAAc,CAACmG,iBAAiB,CAACD,MAAM,CAAC,CAAC,CAC7C,CAAC3D,GAAG,CAAE6D,KAAK,IAAKA,KAAK,CAACC,UAAU,CAAC,CAAC,CAAC,EACpC,GAAGrG,cAAc,CAACK,0BACpB,CAAC;QACD,MAAMgC,OAAO,CAACC,GAAG,CAAC0D,aAAa,CAACrG,YAAY,CAAC;QAC7C;QACA,IAAIkG,QAAQ,KAAKE,eAAe,EAAE;UAChCzG,eAAe,CAACgH,mBAAmB,CACjC/G,MAAM,EACN2C,OAAO,EACP8D,aAAa,CAAC/C,IAAI,EAClB9D,UACF,CAAC;QACH;MACF,CAAC;MACD,MAAMoH,iBAAiB,GAAG,IAAAC,gBAAQ,EAACV,QAAQ,CAAC;MAC5C,IAAIJ,YAAY,EAAE;QAChB,KAAK,MAAMe,WAAW,IAAIf,YAAY,EAAE;UACtC1F,cAAc,CAACE,QAAQ,CAACwG,QAAQ,CAACD,WAAW,EAAEF,iBAAiB,CAAC;QAClE;MACF;MACA,IAAIZ,UAAU,EAAE;QACd,KAAK,MAAMc,WAAW,IAAId,UAAU,EAAE;UACpC,MAAMgB,aAAa,GAAG,IAAAC,uBAAgB,EACpC5G,cAAc,EACd,OAAO,EACN,MAAK2D,UAAW,GACnB,CAAC;UACDgD,aAAa,CAACD,QAAQ,CAACD,WAAW,EAAEF,iBAAiB,CAAC;QACxD;MACF;IACF;IAEA,OAAOd,gBAAgB;EACzB;;EAEA;EACA,IAAI,QAAQ,CAACoB,IAAI,CAAC/B,SAAS,CAAC,IAAI,CAACgC,gCAAe,CAACC,GAAG,CAACjC,SAAS,CAAC,EAAE;IAC/D,MAAMkC,SAAS,CACb,IAAAjG,8BAAsB,EAAC,CAAC+D,SAAS,CAAC,EAAE,IAAA9D,yBAAgB,EAAC,CAAC,CAAC,EACvD,OAAO,EACP8D,SAAS,EACTxF,eAAe,CAAC2H,aAClB,CAAC;EACH;EAEA,MAAMC,UAAU,GAAG,IAAAC,iCAA0B,EAC3CrC,SAAS,GAAA3B,mBAAA,GACTnD,cAAc,CAACoH,GAAG,cAAAjE,mBAAA,uBAAlBA,mBAAA,CAAoBkE,EACtB,CAAC;EAED,IAAIH,UAAU,EAAE;IAAA,IAAAI,aAAA;IACd,MAAMC,QAAQ,IAAAD,aAAA,GAAGrF,QAAQ,CAAC8E,GAAG,CAACG,UAAU,CAAC,cAAAI,aAAA,cAAAA,aAAA,GAAI,CAAC;IAC9C,IAAIC,QAAQ,IAAI,EAAE,EAAE;MAClB,MAAM,IAAI9F,KAAK,CACZ,8CAA6CyF,UAAW,GAC3D,CAAC;IACH;IACAjF,QAAQ,CAACuF,GAAG,CAACN,UAAU,EAAEK,QAAQ,GAAG,CAAC,CAAC;EACxC,CAAC,MAAM,IAAIzC,SAAS,CAAC2C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACC,cAAc,CAACX,GAAG,CAACjC,SAAS,CAAC,EAAE;IACpE,IAAIA,SAAS,KAAK6C,yBAAa,EAAE;MAC/BD,cAAc,CAACvH,MAAM,CACnBwH,yBAAa,EACb,MAAMC,mBAAmB,SAASC,WAAW,CAAC;QAC5C,IAAIC,QAAQA,CAAA,EAAW;UACrB,OAAO,eAAe;QACxB;MACF,CACF,CAAC;IACH,CAAC,MAAM;MACLpI,MAAM,CAACC,YAAY,CAACW,IAAI,CACtB0G,SAAS,CACP,IAAAe,+BAAuB,EAAC,CAACjD,SAAS,CAAC,EAAE,IAAA9D,yBAAgB,EAAC,CAAC,CAAC,EACxD,OAAO,EACP8D,SAAS,EACTxF,eAAe,CAAC2H,aAClB,CACF,CAAC;IACH;EACF;EAEA,IAAIe,QAAiB;EACrB,IAAIC,SAA8C;EAClD,IAAInD,SAAS,KAAK6C,yBAAa,EAAE;IAAA,IAAAO,qBAAA;IAC/B,CAAC;MAAEF,QAAQ;MAAE,GAAGC;IAAU,CAAC,IAAAC,qBAAA,GAAG1F,SAAS,CAAC2F,UAAU,cAAAD,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;EAC1D,CAAC,MAAM;IACLD,SAAS,GAAGzF,SAAS,CAAC2F,UAAU;EAClC;EAEA,MAAMC,mBAA0C,GAAG,EAAE;EACrD,MAAMC,oBAAoB,GAAG,IAAAC,sDAA+B,EAC1DL,SAAS,EACTjI,cAAc,EACdoI,mBACF,CAAC;EAED,MAAMG,qBAAqB,GAAG/F,SAAS,CAACgG,8CAAmC,CAAC;EAC5E,IAAID,qBAAqB,EAAE;IACzBF,oBAAoB,CAAC/H,IAAI,CAAC,GAAGiI,qBAAqB,CAAC;EACrD;EAEA,MAAME,QAAQ,GAAG3D,SAAS,KAAK,QAAQ;EACvC,IAAI2D,QAAQ,IAAI3D,SAAS,KAAK,MAAM,EAAE;IACpC,MAAM4D,KAAK,GAAG,MAAM,IAAAC,+CAAwB,EAACN,oBAAoB,CAAC;IAClE,IAAII,QAAQ,GAAGC,KAAK,CAACE,GAAG,GAAGF,KAAK,CAACG,GAAG,KAAK,YAAY,IAAIH,KAAK,CAACI,IAAI,EAAE;MAAA,IAAAC,mBAAA;MACnE,MAAMC,MAAM,IAAAD,mBAAA,GAAGE,MAAM,CAACC,WAAW,cAAAH,mBAAA,cAAAA,mBAAA,GAAI,EAAE;MACvC,IAAIN,QAAQ,EAAE;QACZ,MAAM;UAAEG,GAAG;UAAE,GAAGO;QAAM,CAAC,GAAGT,KAAK;QAC/B,MAAM1B,SAAS,CACb,IAAAoC,kBAAU,EAACR,GAAG,EAAYI,MAAM,EAAEG,KAAK,CAAC,EACxC,QAAQ,EACRP,GAAG,EACH,QACF,CAAC;MACH,CAAC,MAAM;QACL,MAAM;UAAEE,IAAI;UAAE,GAAGK;QAAM,CAAC,GAAGT,KAAK;QAChC,MAAM1B,SAAS,CACb,IAAAqC,iBAAS,EAACP,IAAI,EAAYE,MAAM,EAAEG,KAAK,CAAC,EACxC,YAAY,EACZL,IAAI,EACJ,QACF,CAAC;MACH;MACA,OAAOpJ,MAAM;IACf;EACF;EAEA,MAAM0D,KAAkB,GAAG;IACzBkG,GAAG,EAAEC,gBAAS,CAACC,KAAK;IACpBvI,IAAI,EAAEiG,UAAU,IAAIpC,SAAS;IAC7B2E,MAAM,EAAEtK,UAAU;IAClBI,MAAM;IACNmK,MAAM,EAAElH,SAAS,CAACkH,MAAM;IACxB1J,cAAc;IACd2J,MAAM,EAAEnH,SAAS,CAACmH,MAAM;IACxBC,GAAG,EAAEpH,SAAS,CAACoH,GAAG;IAClBC,GAAG,EAAGrH,SAAS,CAAyBqH;EAC1C,CAAC;EAEDnK,MAAM,CAACuD,IAAI,GAAGG,KAAK;;EAEnB;EACA,MAAM0G,cAAc,GAAG,IAAAC,oCAAwB,EAC7C,CAACvH,SAAS,CAACkH,MAAM,EAAElH,SAAS,CAACwH,SAAS,CAAC,EACvC,YAAY,EACZ,CACF,CAAC;EACD,IAAIF,cAAc,CAACG,IAAI,GAAG,CAAC,EAAE;IAC3BvK,MAAM,CAACC,YAAY,CAACW,IAAI,CACtB0G,SAAS,CACP,IAAAkD,kCAA0B,EAACJ,cAAc,EAAE,IAAA9I,yBAAgB,EAAC,CAAC,CAAC,EAC9D,YAAY,EACZ,CAAC,GAAG8I,cAAc,CAAC,CAACK,IAAI,CAAC,IAAI,CAAC,EAC9B7K,eAAe,CAAC2H,aAClB,CACF,CAAC;EACH;;EAEA;EACA,MAAMtH,YAAgC,GAAG,EAAE;EAE3C,MAAMyK,cAAc,GAAG,MAAAA,CAAA,KAAY;IACjChH,KAAK,CAAC+E,UAAU,GAAG,MAAM,IAAAQ,+CAAwB,EAACN,oBAAoB,CAAC;IACvE,IAAAgC,gDAAuB,EAACjH,KAAK,EAAEgF,mBAAmB,CAAC;EACrD,CAAC;EACDzI,YAAY,CAACW,IAAI,CAAC8J,cAAc,CAAC,CAAC,CAAC;EAEnC9K,eAAe,CAACgL,sBAAsB,CAAClH,KAAK,EAAEZ,SAAS,CAACwH,SAAS,CAAC;EAElE,IAAIO,iBAAiB,GAAG/H,SAAS;EACjC,IAAI0E,UAAU,EAAE;IACdqD,iBAAiB,GAAG,IAAAC,0CAAoB,EACtCtD,UAAU,EACV1E,SAAS,EACTY,KAAK,EACLiF,oBAAoB,EACpB/I,eACF,CAAC;EACH,CAAC,MAAM,IAAIwF,SAAS,KAAK6C,yBAAa,EAAE;IACtC4C,iBAAiB,GAAG,IAAAE,sCAAkB,EACpCzC,QAAQ,EACRxF,SAAS,EACTY,KAAK,EACLiF,oBAAoB,EACpB/I,eACF,CAAC;EACH;EAEA,IAAIiL,iBAAiB,CAACZ,MAAM,EAAE;IAC5B;IACAvG,KAAK,CAAC7D,MAAM,GAAGmL,SAAS;EAC1B;EAEA,IAAIC,mBAAmC;EACvC,IAAIzD,UAAU,EAAE;IACd;IACAyD,mBAAmB,GAAG;MACpB,GAAG3K;IACL,CAAC;IACD,OAAO2K,mBAAmB,CAACnG,WAAW;EACxC,CAAC,MAAM;IACLmG,mBAAmB,GAAG3K,cAAc;EACtC;EAEA,MAAM4K,YAAY,GAAG,MAAAA,CAAA,KAAY;IAC/B,MAAMhH,KAAK,GAAG0B,eAAe,CAC3BiF,iBAAiB,CAAChF,QAAQ,EAC1BgF,iBAAiB,CAAC3G,KACpB,CAAC;IACD,IAAI,CAACA,KAAK,EAAE;MACV;IACF;IACA,MAAMxB,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCuB,MAAM,CAACgH,OAAO,CAACjH,KAAK,CAAC,CAACrB,GAAG,CAAC,CAAC,CAACuI,WAAW,EAAEC,QAAQ,CAAC,KAChDA,QAAQ,CAAC9J,IAAI,KAAK,QAAQ,GACtBc,YAAY,CACVqB,KAAK,EACJ2H,QAAQ,CAAsB/I,MAAM,EACrC2I,mBAAmB,EACnBrL,eAAe,EACfwL,WAAW,EACX7I,QACF,CAAC,GACD/C,YAAY,CACVkE,KAAK,EACL2H,QAAQ,CAAC3L,MAAM,EACfuL,mBAAmB,EACnBrL,eAAe,EACfwL,WACF,CACN,CACF,CAAC;IAED,MAAME,cAA4B,GAAG;MACnC,GAAGtL,MAAM;MACTuD,IAAI,EAAEyH,SAAS;MACf/K,YAAY,EAAE;IAChB,CAAC;IACD,KAAK,MAAMmD,IAAI,IAAIV,QAAQ,EAAE;MAC3BN,iBAAiB,CAACkJ,cAAc,EAAElI,IAAI,CAAC;IACzC;IACA,IAAIkI,cAAc,CAAC/H,IAAI,EAAE;MACvBG,KAAK,CAAC6H,KAAK,GAAGD,cAAc,CAAC/H,IAAI;IACnC;IACAnB,iBAAiB,CAACpC,MAAM,EAAE;MACxB,GAAGsL,cAAc;MACjB/H,IAAI,EAAEyH;IACR,CAAC,CAAC;EACJ,CAAC;EACD/K,YAAY,CAACW,IAAI,CAACsK,YAAY,CAAC,CAAC,CAAC;EAEjC,MAAMvI,OAAO,CAACC,GAAG,CAAC3C,YAAY,CAAC;EAE/B,OAAOD,MAAM;AACf;AAEA,SAASgE,qBAAqBA,CAACH,OAAgB,EAAW;EACxD,OAAO,OAAOA,OAAO,KAAK,QAAQ,GAC9B,IAAA2H,gBAAU,EAAC3H,OAAO,CAAC,GACnB,IAAA4H,wBAAc,EAAC5H,OAAO,CAAC;EACrB;EACA,IAAA2H,gBAAU,EAAC,IAAAE,4BAAkB,EAAC7H,OAAO,CAAC,CAAC;AAC/C;AAIA,SAASyB,uBAAuBA,CAC9B5B,KAAa,EACuB;EACpC,IAAIA,KAAK,KAAK,UAAU,IAAIA,KAAK,KAAK,KAAK,IAAIA,KAAK,KAAK,SAAS,EAAE;IAClE,MAAM,IAAI3B,KAAK,CAAE,qCAAoC2B,KAAM,GAAE,CAAC;EAChE;AACF;AAEA,eAAeoC,aAAaA,CAC1BrG,UAAsB,EACtBwE,UAAqB,EACrB3B,MAAmB,EACnBhC,cAA8B,EAC9BV,eAAgC,EAChCC,MAA0B,EAC1B0C,QAA6B,EAC7BC,OAAiB,EACM;EACvB,MAAMxC,MAAoB,GAAG;IAC3BC,YAAY,EAAE,EAAE;IAChBC,YAAY,EAAE;EAChB,CAAC;EAED,MAAMyL,IAAI,GAAG1H,UAAU,CAACc,MAAM;EAC9B,MAAMrC,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCqB,UAAU,CAACpB,GAAG,CAAC,CAACO,IAAI,EAAEwI,CAAC,KACrBjJ,OAAO,CAACC,GAAG,CACTN,MAAM,CAACO,GAAG,CAAC,CAACC,SAAS,EAAE+I,CAAC,KACtB7I,WAAW,CACTvD,UAAU,EACVqD,SAAS,EACT;IACE,GAAGxC,cAAc;IACjBwE,WAAW,EAAE1B;EACf,CAAC,EACDxD,eAAe,EACfC,MAAM,EACN2C,OAAO,CAACS,MAAM,CAAC2I,CAAC,GAAGD,IAAI,GAAGE,CAAC,CAAC,EAC5BtJ,QAAQ,IAAI,IAAIW,GAAG,CAACX,QAAQ,CAC9B,CACF,CACF,CACF,CACF,CAAC;;EAED;EACAG,QAAQ,CAACoJ,IAAI,CAAC,CAAC,CAAC3I,OAAO,CAAC,CAACC,IAAI,EAAEL,KAAK,KAAK;IACvC,IAAIK,IAAI,CAACC,mBAAmB,EAAE;MAC5B;MACAzD,eAAe,CAAC0D,kBAAkB,CAChCzD,MAAM,EACN2C,OAAO,CAACS,MAAM,CAACF,KAAK,CAAC,EACrBK,IAAI,CAACG,IAAI,EACT9D,UACF,CAAC;IACH;IACA2C,iBAAiB,CAACpC,MAAM,EAAEoD,IAAI,CAAC;EACjC,CAAC,CAAC;EAEF,OAAOpD,MAAM;AACf;AAEA,SAASiC,QAAQA,CACf8J,QAA8B,EAC9BzL,cAA8B,EAC9B;EACA,IAAI,CAACyL,QAAQ,EAAE;IACb;EACF;;EAEA;EACA,IAAKA,QAAQ,CAAwBxK,IAAI,KAAK,OAAO,EAAE;IACrD;IACAM,OAAO,CAACC,KAAK,CAAC,uCAAuC,EAAEiK,QAAQ,CAAC;IAChE,MAAM,IAAIhK,KAAK,CAAC,sCAAsC,CAAC;EACzD;;EAEA;EACA,IAAIgK,QAAQ,CAACxK,IAAI,KAAK,SAAS,EAAE;IAC/B;IACAM,OAAO,CAACmK,IAAI,CAAC,mDAAmD,EAAED,QAAQ,CAAC;IAC3E;EACF;EAEA,OAAO,IAAA9K,uCAAqB,EAC1B8K,QAAQ,EACRzL,cACF,CAAC;AACH;AAEA,SAAS8B,iBAAiBA,CACxBpC,MAAoB,EACpBmC,SAAuB,EACjB;EACN;EACA,MAAM;IAAElC,YAAY;IAAEsD,IAAI;IAAErD,YAAY;IAAEmD,mBAAmB;IAAE,GAAG4I;EAAK,CAAC,GACtE9J,SAAS;EACXnC,MAAM,CAACC,YAAY,CAACW,IAAI,CAAC,GAAGX,YAAY,CAAC;EACzCD,MAAM,CAACE,YAAY,CAACU,IAAI,CAAC,GAAGV,YAAY,CAAC;EAEzC,IAAIqD,IAAI,EAAE;IACR,IAAIvD,MAAM,CAACuD,IAAI,EAAE;MACf,IAAI2I,IAAI,GAAGlM,MAAM,CAACuD,IAAI;MACtB,OAAO2I,IAAI,CAACC,OAAO,EAAE;QACnBD,IAAI,GAAGA,IAAI,CAACC,OAAO;MACrB;MACAD,IAAI,CAACC,OAAO,GAAG5I,IAAI;IACrB,CAAC,MAAM;MACLvD,MAAM,CAACuD,IAAI,GAAGA,IAAI;IACpB;EACF;EAEAY,MAAM,CAACiI,MAAM,CAACpM,MAAM,EAAEiM,IAAI,CAAC;AAC7B;AAEO,SAASrG,eAAeA,CAC7BC,QAAiC,EACjCwG,aAAoC,EACpC;EACA,IAAIC,QAAQ,GAAGD,aAAa;EAC5B;EACA,IACEE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IACtC5G,QAAQ,IACR,CAAC1E,KAAK,CAACC,OAAO,CAACyE,QAAQ,CAAC,EACxB;IACA;IACAhE,OAAO,CAACmK,IAAI,CACV,yCAAyC,EACxC,IAAG,OAAOnG,QAAS,GAAE,EACtBA,QACF,CAAC;EACH;EACA,IAAI1E,KAAK,CAACC,OAAO,CAACyE,QAAQ,CAAC,IAAI,CAACyG,QAAQ,EAAE;IACxCA,QAAQ,GAAG,CAAC,CAAC;IACb,KAAK,MAAMf,KAAK,IAAI1F,QAAQ,EAAE;MAAA,IAAA6G,WAAA;MAC5B,MAAMhH,IAAI,IAAAgH,WAAA,GAAGnB,KAAK,CAAC7F,IAAI,cAAAgH,WAAA,cAAAA,WAAA,GAAI,EAAE;MAC7B,IAAI,CAAC,IAAA9H,uBAAc,EAAC0H,QAAQ,EAAE5G,IAAI,CAAC,EAAE;QACnC4G,QAAQ,CAAC5G,IAAI,CAAC,GAAG;UACfnE,IAAI,EAAE,QAAQ;UACde,MAAM,EAAE;QACV,CAAC;MACH;MACCgK,QAAQ,CAAC5G,IAAI,CAAC,CAAsBpD,MAAM,CAAC1B,IAAI,CAAC2K,KAAK,CAAC;IACzD;EACF;EACA,OAAOe,QAAQ;AACjB;AAEA,SAAShF,SAASA,CAChBqF,OAAyB,EACzBpL,IAAsD,EACtDqL,IAAY,EACZC,aAA+C,EAC/C;EACA,OAAOA,aAAa,KAAK,QAAQ,GAC7BF,OAAO,CAACG,KAAK,CAAEC,CAAC,IAAK;IACnB;IACAlL,OAAO,CAACC,KAAK,CAAE,QAAOP,IAAK,KAAIqL,IAAK,WAAU,EAAEG,CAAC,CAAC;EACpD,CAAC,CAAC,GACFJ,OAAO;AACb"}
@@ -109,11 +109,11 @@ class RendererContext {
109
109
  (0, _classPrivateFieldGet2.default)(this, _arbitraryLifeCycle).set(lifeCycle, new Set([fn]));
110
110
  }
111
111
  }
112
- memoizeControlNode(slotId, key, node, returnNode) {
112
+ memoizeControlNode(slotId, keyPath, node, returnNode) {
113
113
  if (!(0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes)) {
114
114
  (0, _classPrivateFieldSet2.default)(this, _memoizedControlNodes, new WeakMap());
115
115
  }
116
- const memKey = `${slotId !== null && slotId !== void 0 ? slotId : ""}.${key}`;
116
+ const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
117
117
  let mem = (0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes).get(returnNode);
118
118
  if (!mem) {
119
119
  mem = new Map();
@@ -126,9 +126,9 @@ class RendererContext {
126
126
  lastPortal: getLastPortalNode(node)
127
127
  });
128
128
  }
129
- rerenderControlNode(slotId, key, node, returnNode) {
129
+ rerenderControlNode(slotId, keyPath, node, returnNode) {
130
130
  var _prevLastNormal$eleme, _prevLastNormal$eleme2, _prevLastPortal$eleme, _prevLastPortal$eleme2;
131
- const memKey = `${slotId !== null && slotId !== void 0 ? slotId : ""}.${key}`;
131
+ const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
132
132
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
133
133
  const memoized = (0, _classPrivateFieldGet2.default)(this, _memoizedControlNodes).get(returnNode).get(memKey);
134
134
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_arbitraryLifeCycle","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","registerArbitraryLifeCycle","fn","arbitraryCallbacks","get","add","set","Set","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet2","memKey","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n ScrollIntoViewConf,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n this.#arbitraryLifeCycle.clear();\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_arbitraryLifeCycle","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","registerArbitraryLifeCycle","fn","arbitraryCallbacks","get","add","set","Set","memoizeControlNode","slotId","keyPath","node","returnNode","_classPrivateFieldSet2","memKey","join","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n ScrollIntoViewConf,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n\n // Also remove the element\n brick.element?.remove();\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoizeControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n rerenderControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderBrick | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoizedControlNodes = undefined;\n this.#arbitraryLifeCycle.clear();\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":";;;;;;;;;;;;;AAOA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,kBAAA,GAAAP,OAAA;AACA,IAAAQ,QAAA,GAAAR,OAAA;AASA,MAAMS,gBAAgB,GAAG,CACvB,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,gBAAgB,CACR;AAEV,MAAMC,kBAAkB,GAAG,CACzB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,gBAAgB,CACR;AAAC,IAAAC,kBAAA,oBAAAC,OAAA;AAAA,IAAAC,UAAA,oBAAAD,OAAA;AAAA,IAAAE,cAAA,oBAAAF,OAAA;AAAA,IAAAG,mBAAA,oBAAAH,OAAA;AAAA,IAAAI,qBAAA,oBAAAJ,OAAA;AAAA,IAAAK,cAAA,oBAAAC,OAAA;AAAA,IAAAC,yBAAA,oBAAAD,OAAA;AAAA,IAAAE,yBAAA,oBAAAF,OAAA;AAAA,IAAAG,YAAA,oBAAAH,OAAA;AAMJ,MAAMI,eAAe,CAAC;EAS3BC,WAAWA,CAACC,KAA0B,EAAEC,OAAgC,EAAE;IAAA,IAAAC,qBAAA;IAAA,IAAAC,4BAAA,CAAAC,OAAA,QAAAP,YAAA;IAyS1E;IAAA,IAAAM,4BAAA,CAAAC,OAAA,QAAAR,yBAAA;IAAA,IAAAO,4BAAA,CAAAC,OAAA,QAAAT,yBAAA;IAAA,IAAAQ,4BAAA,CAAAC,OAAA,QAAAX,cAAA;IAjTA;AACF;AACA;AACA;IAHE,IAAAY,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAE,2BAAA,CAAAF,OAAA,QAAAjB,kBAAA;MAAAoB,QAAA;MAAAC,KAAA,EA+BI;QACFC,gBAAgB,EAAE,EAAE;QACpBC,UAAU,EAAE,EAAE;QACdC,WAAW,EAAE,EAAE;QACfC,iBAAiB,EAAE,EAAE;QACrBC,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE,EAAE;QAClBC,aAAa,EAAE,EAAE;QACjBC,gBAAgB,EAAE,EAAE;QACpBC,OAAO,EAAE,EAAE;QACXC,SAAS,EAAE,EAAE;QACbC,SAAS,EAAE,EAAE;QACbC,cAAc,EAAE;MAClB;IAAC;IAAA,IAAAd,2BAAA,CAAAF,OAAA,QAAAf,UAAA;MAAAkB,QAAA;MAAAC,KAAA,EACY,IAAIa,GAAG,CAAsC;IAAC;IAAA,IAAAf,2BAAA,CAAAF,OAAA,QAAAd,cAAA;MAAAiB,QAAA;MAAAC,KAAA;IAAA;IAAA,IAAAF,2BAAA,CAAAF,OAAA,QAAAb,mBAAA;MAAAgB,QAAA;MAAAC,KAAA,EAGrC,IAAIa,GAAG,CAA0B;IAAC;IAAA,IAAAf,2BAAA,CAAAF,OAAA,QAAAZ,qBAAA;MAAAe,QAAA;MAAAC,KAAA;IAAA;IAvCtD,IAAI,CAACR,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACsB,aAAa,IAAApB,qBAAA,GAAGD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEqB,aAAa,cAAApB,qBAAA,cAAAA,qBAAA,GAAI,OAAO;EACxD;EAoDAqB,sBAAsBA,CACpBC,KAAkB,EAClBC,SAAqC,EAC/B;IACN,IAAI,CAACA,SAAS,EAAE;MACd;IACF;IACA,MAAMC,cAAc,GAAG,CACrB,GAAGzC,gBAAgB,EACnB,IAAI,IAAI,CAACe,KAAK,KAAK,MAAM,GAAGd,kBAAkB,GAAG,EAAE,CAAC,CACrD;IACD,KAAK,MAAMyC,GAAG,IAAID,cAAc,EAAE;MAChC,MAAME,QAAQ,GAAIH,SAAS,CAAoBE,GAAG,CAAiB;MACnE,IAAIC,QAAQ,EAAE;QACZ,IAAAC,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EAAoBwC,GAAG,CAAiB,CAACG,IAAI,CAAC;UAChDN,KAAK;UACLI,QAAQ,EAAEA;QACZ,CAAC,CAAC;MACJ;IACF;IACA;IACA,IAAI,CAAC,IAAAG,eAAO,EAAEN,SAAS,CAA+BO,WAAW,CAAC,EAAE;MAClE;MACAC,OAAO,CAACC,KAAK,CAAC,2CAA2C,EAAET,SAAS,CAAC;IACvE;EACF;EAEAU,0BAA0BA,CAACV,SAAiB,EAAEW,EAAc,EAAQ;IAClE,MAAMC,kBAAkB,GAAG,IAAAR,sBAAA,CAAAzB,OAAA,MAAI,EAAAb,mBAAA,EAAqB+C,GAAG,CAACb,SAAS,CAAC;IAClE,IAAIY,kBAAkB,EAAE;MACtBA,kBAAkB,CAACE,GAAG,CAACH,EAAE,CAAC;IAC5B,CAAC,MAAM;MACL,IAAAP,sBAAA,CAAAzB,OAAA,MAAI,EAAAb,mBAAA,EAAqBiD,GAAG,CAACf,SAAS,EAAE,IAAIgB,GAAG,CAAC,CAACL,EAAE,CAAC,CAAC,CAAC;IACxD;EACF;EAgEAM,kBAAkBA,CAChBC,MAA0B,EAC1BC,OAAiB,EACjBC,IAA6B,EAC7BC,UAAsB,EACtB;IACA,IAAI,KAAAjB,sBAAA,CAAAzB,OAAA,EAAC,IAAI,EAAAZ,qBAAA,CAAsB,EAAE;MAC/B,IAAAuD,sBAAA,CAAA3C,OAAA,MAAI,EAAAZ,qBAAA,EAAyB,IAAIJ,OAAO,CAAC,CAAC;IAC5C;IACA,MAAM4D,MAAM,GAAG,CAACL,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,EAAE,GAAGC,OAAO,CAAC,CAACK,IAAI,CAAC,GAAG,CAAC;IACnD,IAAIC,GAAG,GAAG,IAAArB,sBAAA,CAAAzB,OAAA,MAAI,EAAAZ,qBAAA,EAAuB8C,GAAG,CAACQ,UAAU,CAAC;IACpD,IAAI,CAACI,GAAG,EAAE;MACRA,GAAG,GAAG,IAAI7B,GAAG,CAAC,CAAC;MACf,IAAAQ,sBAAA,CAAAzB,OAAA,MAAI,EAAAZ,qBAAA,EAAuBgD,GAAG,CAACM,UAAU,EAAEI,GAAG,CAAC;IACjD;IAEAA,GAAG,CAACV,GAAG,CAACQ,MAAM,EAAE;MACdH,IAAI;MACJM,IAAI,EAAEC,WAAW,CAACP,IAAI,CAAC;MACvBQ,UAAU,EAAEC,iBAAiB,CAACT,IAAI,CAAC;MACnCU,UAAU,EAAEC,iBAAiB,CAACX,IAAI;IACpC,CAAC,CAAC;EACJ;EAEAY,mBAAmBA,CACjBd,MAA0B,EAC1BC,OAAiB,EACjBC,IAA6B,EAC7BC,UAAsB,EACtB;IAAA,IAAAY,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;IACA,MAAMb,MAAM,GAAG,CAACL,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,EAAE,GAAGC,OAAO,CAAC,CAACK,IAAI,CAAC,GAAG,CAAC;IACnD;IACA,MAAMa,QAAQ,GAAG,IAAAjC,sBAAA,CAAAzB,OAAA,MAAI,EAAAZ,qBAAA,EAAwB8C,GAAG,CAACQ,UAAU,CAAC,CAAER,GAAG,CAACU,MAAM,CAAE;IAC1E,MAAM;MACJH,IAAI,EAAEkB,QAAQ;MACdZ,IAAI,EAAEa,QAAQ;MACdX,UAAU,EAAEY,cAAc;MAC1BV,UAAU,EAAEW;IACd,CAAC,GAAGJ,QAAQ;IAEZ,MAAMK,iBAAiB,IAAAT,qBAAA,GAAGO,cAAc,aAAdA,cAAc,gBAAAN,sBAAA,GAAdM,cAAc,CAAEG,OAAO,cAAAT,sBAAA,uBAAvBA,sBAAA,CAAyBU,WAAW,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IACtE,MAAMY,uBAAuB,IAAAV,qBAAA,GAC3BM,cAAc,aAAdA,cAAc,gBAAAL,sBAAA,GAAdK,cAAc,CAAEE,OAAO,cAAAP,sBAAA,uBAAvBA,sBAAA,CAAyBQ,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAE9C,MAAMT,IAAI,GAAGC,WAAW,CAACP,IAAI,CAAC;IAC9BiB,QAAQ,CAACjB,IAAI,GAAGA,IAAI;IACpBiB,QAAQ,CAACX,IAAI,GAAGA,IAAI;IACpBW,QAAQ,CAACT,UAAU,GAAGC,iBAAiB,CAACT,IAAI,CAAC;IAC7CiB,QAAQ,CAACP,UAAU,GAAGC,iBAAiB,CAACX,IAAI,CAAC;;IAE7C;IACA,IAAI0B,WAAoC;IACxC,IAAIC,OAAO,GAAG1B,UAAU,CAAC2B,KAAK;IAC9B,OAAOD,OAAO,IAAIA,OAAO,KAAKR,QAAQ,EAAE;MACtC,IAAIQ,OAAO,CAACE,OAAO,KAAKX,QAAQ,EAAE;QAChCQ,WAAW,GAAGC,OAAO;QACrB;MACF;MACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,MAAMC,QAAQ,GAAGC,QAAQ,CAACC,sBAAsB,CAAC,CAAC;IAClD,MAAMC,cAAc,GAAGF,QAAQ,CAACC,sBAAsB,CAAC,CAAC;IACxD,MAAME,UAAsB,GAAG;MAC7BC,GAAG,EAAEC,gBAAS,CAACC,IAAI;MACnBC,SAAS,EAAER,QAAQ;MACnBS,YAAY,EAAEN,cAAc;MAC5BL,KAAK,EAAE5B;IACT,CAAC;;IAED;IACA2B,OAAO,GAAG3B,IAAI;IACd,OAAO2B,OAAO,EAAE;MACdA,OAAO,CAACa,MAAM,GAAGN,UAAU;MAC3BP,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;;IAEA;IACA,MAAMY,YAAY,GAAGC,aAAa,CAACxB,QAAQ,EAAEC,QAAQ,CAAC;IACtD,IAAAwB,uBAAA,CAAApF,OAAA,MAAI,EAAAX,cAAA,EAAAgG,eAAA,EAAAC,IAAA,CAAJ,IAAI,EAAgBJ,YAAY;IAEhC,IAAAK,gBAAS,EAACZ,UAAU,CAAC;;IAErB;IACA,IAAIR,WAAW,EAAE;MACfA,WAAW,CAACG,OAAO,GAAG7B,IAAI;IAC5B,CAAC,MAAM;MACLC,UAAU,CAAC2B,KAAK,GAAG5B,IAAI;IACzB;IACA,IAAIM,IAAI,EAAE;MACRA,IAAI,CAACuB,OAAO,GAAGV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEU,OAAO;IAClC;;IAEA;IACAF,OAAO,GAAG3B,IAAI;IACd,OAAO2B,OAAO,EAAE;MACdA,OAAO,CAACa,MAAM,GAAGvC,UAAU;MAC3B0B,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,IAAI5B,UAAU,CAACkC,GAAG,KAAKC,gBAAS,CAACC,IAAI,EAAE;MAAA,IAAAU,qBAAA;MACrC,CAAAA,qBAAA,GAAA9C,UAAU,CAACqC,SAAS,cAAAS,qBAAA,uBAApBA,qBAAA,CAAsBC,YAAY,CAAClB,QAAQ,EAAER,iBAAiB,CAAC;IACjE,CAAC,MAAM;MAAA,IAAA2B,mBAAA;MACL,CAAAA,mBAAA,GAAAhD,UAAU,CAACsB,OAAO,cAAA0B,mBAAA,uBAAlBA,mBAAA,CAAoBD,YAAY,CAAClB,QAAQ,EAAER,iBAAiB,CAAC;IAC/D;IAEA,IAAIW,cAAc,CAACiB,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;MAAA,IAAAC,KAAA;MACxC,IAAIC,IAA4B,GAAGrD,IAAI;MACvC,OAAOqD,IAAI,IAAIA,IAAI,CAACb,MAAM,EAAE;QAC1Ba,IAAI,GAAGA,IAAI,CAACb,MAAM;MACpB;MACA,IAAI,EAAAY,KAAA,GAAAC,IAAI,cAAAD,KAAA,uBAAJA,KAAA,CAAMjB,GAAG,MAAKC,gBAAS,CAACC,IAAI,EAAE;QAChC,MAAM,IAAIiB,KAAK,CAAC,8BAA8B,CAAC;MACjD;MACA,MAAMC,MAAM,GACV,OAAOF,IAAI,CAACd,YAAY,KAAK,UAAU,GACnCc,IAAI,CAACd,YAAY,CAAC,CAAC,GACnBc,IAAI,CAACd,YAAY;MACvBgB,MAAM,CAACP,YAAY,CAACf,cAAc,EAAER,uBAAuB,CAAC;IAC9D;IAEA,MAAM+B,SAAS,GAAGd,aAAa,CAAC1C,IAAI,EAAEM,IAAI,CAAC;IAC3C,IAAAqC,uBAAA,CAAApF,OAAA,MAAI,EAAAT,yBAAA,EAAA2G,0BAAA,EAAAZ,IAAA,CAAJ,IAAI,EAA2BW,SAAS;EAC1C;EAEAE,OAAOA,CAAA,EAAS;IACd,KAAK,MAAMC,IAAI,IAAIC,MAAM,CAACC,MAAM,KAAA7E,sBAAA,CAAAzB,OAAA,EAAC,IAAI,EAAAjB,kBAAA,CAAmB,CAAC,EAAE;MACzDqH,IAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA,KAAK,MAAMQ,IAAI,IAAI,IAAA3E,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYqH,MAAM,CAAC,CAAC,EAAE;MAC3C,KAAK,MAAMC,QAAQ,IAAIH,IAAI,EAAE;QAC3BG,QAAQ,CAACC,UAAU,CAAC,CAAC;MACvB;MACAJ,IAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA,IAAAnE,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYwH,KAAK,CAAC,CAAC;IACvB,QAAAhF,sBAAA,CAAAzB,OAAA,EAAI,IAAI,EAAAd,cAAA,GAAiB;MACvBwH,4BAAgB,CAACC,mBAAmB,CAAC,QAAQ,MAAAlF,sBAAA,CAAAzB,OAAA,EAAE,IAAI,EAAAd,cAAA,CAAe,CAAC;MACnE,IAAAyD,sBAAA,CAAA3C,OAAA,MAAI,EAAAd,cAAA,EAAkB0H,SAAS;IACjC;IACA,IAAAjE,sBAAA,CAAA3C,OAAA,MAAI,EAAAZ,qBAAA,EAAyBwH,SAAS;IACtC,IAAAnF,sBAAA,CAAAzB,OAAA,MAAI,EAAAb,mBAAA,EAAqBsH,KAAK,CAAC,CAAC;EAClC;EAsCAI,sBAAsBA,CAAA,EAAS;IAC7B,IAAAzB,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,kBAAkB,EAClB,IAAIyB,WAAW,CAAC,iBAAiB,CAAC;EAEtC;EAEAC,gBAAgBA,CAAA,EAAS;IACvB,MAAMC,KAAK,GAAG,IAAIF,WAAW,CAAC,WAAW,CAAC;IAC1C,IAAA3B,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,YAAY,EAAE2B,KAAK;IAClD;IACAC,MAAM,CAACC,aAAa,CAACF,KAAK,CAAC;EAC7B;EAEAG,uBAAuBA,CAACC,MAGvB,EAAQ;IACP,IAAAjC,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,mBAAmB,EACnB,IAAIyB,WAAW,CAAC,kBAAkB,EAAE;MAAEM;IAAO,CAAC,CAAC;EAEnD;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAAlC,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,aAAa,EACb,IAAIyB,WAAW,CAAC,YAAY,CAAC;EAEjC;EAEAQ,kBAAkBA,CAAA,EAAS;IACzB,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAAC,mBAAU,EAAC,CAAC,CAACC,QAAQ;IACtC,IAAIF,IAAI,IAAIA,IAAI,KAAK,GAAG,EAAE;MACxB,IAAApC,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,cAAc,EACd,IAAIyB,WAAW,CAAC,aAAa,EAAE;QAC7BM,MAAM,EAAE;UACNG,IAAI;UACJG,MAAM,EAAEH,IAAI,CAACI,SAAS,CAAC,CAAC;QAC1B;MACF,CAAC,CAAC;IAEN,CAAC,MAAM;MACL,IAAAxC,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,gBAAgB,EAChB,IAAIyB,WAAW,CAAC,eAAe,CAAC;IAEpC;EACF;EAEAc,wBAAwBA,CAAA,EAAS;IAC/B,KAAK,MAAM;MAAEzG,KAAK;MAAEI,QAAQ,EAAEsG;IAAK,CAAC,IAAI,IAAArG,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EACzC6B,gBAAgB,EAAE;MACnB,IAAAwE,uBAAA,CAAApF,OAAA,MAAI,EAAAP,YAAA,EAAAsI,aAAA,EAAAzC,IAAA,CAAJ,IAAI,EAAclE,KAAK,EAAE0G,IAAI;IAC/B;EACF;EAgCAE,qBAAqBA,CAAA,EAAS;IAC5B,IAAArF,sBAAA,CAAA3C,OAAA,MAAI,EAAAd,cAAA,EAAmB+H,KAAK,IAAK;MAC/B,IAAA7B,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,eAAe,EACf,IAAIyB,WAAW,CAAC,cAAc,EAAE;QAC9BM,MAAM,EAAE,IAAAY,gCAAgB,EAAEhB,KAAK,CAAwBI,MAAM;MAC/D,CAAC,CAAC;IAEN,CAAC;IACDX,4BAAgB,CAACwB,gBAAgB,CAAC,QAAQ,MAAAzG,sBAAA,CAAAzB,OAAA,EAAE,IAAI,EAAAd,cAAA,CAAe,CAAC;EAClE;EAEAiJ,2BAA2BA,CAAA,EAAS;IAAA,IAAAC,sBAAA;IAClC,KAAK,MAAM;MAAEhH,KAAK;MAAEI,QAAQ,EAAE6G;IAAS,CAAC,IAAI,IAAA5G,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EAC7CgC,SAAS,EAAE;MACZ,KAAK,MAAM+G,IAAI,IAAK,EAAE,CAAmBQ,MAAM,CAACD,QAAQ,CAAC,EAAE;QAAA,IAAAE,qBAAA;QACzDC,cAAK,aAALA,cAAK,gBAAAD,qBAAA,GAALC,cAAK,CAAEC,iBAAiB,cAAAF,qBAAA,uBAAxBA,qBAAA,CAA0BxH,SAAS,CAAC+G,IAAI,CAACY,OAAO,EAAGrB,MAAM,IAAK;UAC5D,IAAAsB,8BAAe,EACbb,IAAI,CAACtG,QAAQ,EACbJ,KAAK,CAACwH,cAAc,EACpBxH,KACF,CAAC,CAAC,IAAI2F,WAAW,CAAC,cAAc,EAAE;YAAEM;UAAO,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC;MACJ;IACF;IAEAmB,cAAK,aAALA,cAAK,gBAAAJ,sBAAA,GAALI,cAAK,CAAEC,iBAAiB,cAAAL,sBAAA,uBAAxBA,sBAAA,CAA0BS,OAAO,CAAC,MAAM;MACtC,IAAAzD,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,gBAAgB,EAChB,IAAIyB,WAAW,CAAC,eAAe,CAAC;IAEpC,CAAC,CAAC;EACJ;EAEA+B,eAAeA,CAAA,EAAS;IACtB,IAAA1D,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,SAAS,EAAE,IAAIyB,WAAW,CAAC,OAAO,CAAC;EACpE;EAEAgC,iBAAiBA,CAAA,EAAS;IACxB,IAAA3D,uBAAA,CAAApF,OAAA,MAAI,EAAAR,yBAAA,EAAAsH,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,WAAW,EAAE,IAAIyB,WAAW,CAAC,SAAS,CAAC;EACxE;AACF;AAACiC,OAAA,CAAAtJ,eAAA,GAAAA,eAAA;AAAA,SAAA2F,gBAnXgB4D,MAAwB,EAAQ;EAC7C,MAAM3H,cAAc,GAAG,CACrB,GAAGzC,gBAAgB,EACnB,IAAI,IAAI,CAACe,KAAK,KAAK,MAAM,GAAGd,kBAAkB,GAAG,EAAE,CAAC,CACrD;EACD,MAAMoK,WAGH,GAAG,EAAE;;EAER;EACA,KAAK,MAAM3H,GAAG,IAAID,cAAc,EAAE;IAChC,MAAM6H,OAAO,GAAG,IAAAC,cAAM,EACpB,IAAA3H,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EAAoBwC,GAAG,CAAiB,EAC3C8H,IAAI,IAAKJ,MAAM,CAACK,GAAG,CAACD,IAAI,CAACjI,KAAK,CACjC,CAAC;IACD,IAAIG,GAAG,KAAK,WAAW,EAAE;MACvB2H,WAAW,CAACxH,IAAI,CAAC,GAAGyH,OAAO,CAAC;IAC9B;EACF;;EAEA;EACA,KAAK,MAAM/H,KAAK,IAAI6H,MAAM,EAAE;IAAA,IAAAM,cAAA,EAAAC,eAAA;IAC1B,MAAMC,SAAS,GAAG,IAAAhI,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYiD,GAAG,CAACd,KAAK,CAAC;IAC5C,IAAIqI,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE7D,MAAM,EAAE;MACrB,KAAK,MAAMW,QAAQ,IAAIkD,SAAS,EAAE;QAChClD,QAAQ,CAACC,UAAU,CAAC,CAAC;MACvB;MACAiD,SAAS,CAAC7D,MAAM,GAAG,CAAC;MACpB,IAAAnE,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYyK,MAAM,CAACtI,KAAK,CAAC;IAC/B;IAEA,IAAAuI,sCAAmB,EAACvI,KAAK,CAAC;IAC1B,CAAAmI,cAAA,GAAOnI,KAAK,CAAC4C,OAAO,cAAAuF,cAAA,eAApB,OAAOA,cAAA,CAAeK,eAAe;;IAErC;IACA,CAAAJ,eAAA,GAAApI,KAAK,CAAC4C,OAAO,cAAAwF,eAAA,uBAAbA,eAAA,CAAeJ,MAAM,CAAC,CAAC;EACzB;;EAEA;EACA,MAAMS,YAAY,GAAG,IAAI9C,WAAW,CAAC,SAAS,CAAC;EAC/C,KAAK,MAAM;IAAE3F,KAAK;IAAEI;EAAS,CAAC,IAAI0H,WAAW,EAAE;IAC7C,IAAAP,8BAAe,EAACnH,QAAQ,EAAEJ,KAAK,CAACwH,cAAc,EAAExH,KAAK,CAAC,CAACyI,YAAY,CAAC;EACtE;AACF;AAAC,SAAA3D,2BAEyB+C,MAAwB,EAAQ;EACxD,MAAMa,UAAU,GAAG,IAAI/C,WAAW,CAAC,OAAO,CAAC;EAC3C,KAAK,MAAM;IAAE3F,KAAK;IAAEI;EAAS,CAAC,IAAI,IAAAC,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EAAoB8B,OAAO,EAAE;IACjE,IAAIoI,MAAM,CAACK,GAAG,CAAClI,KAAK,CAAC,EAAE;MACrB,IAAAuH,8BAAe,EAACnH,QAAQ,EAAEJ,KAAK,CAACwH,cAAc,EAAExH,KAAK,CAAC,CAAC0I,UAAU,CAAC;IACpE;EACF;EAEA,KAAK,MAAM;IAAE1I,KAAK;IAAEI,QAAQ,EAAEsG;EAAK,CAAC,IAAI,IAAArG,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EACzC6B,gBAAgB,EAAE;IACnB,IAAIqI,MAAM,CAACK,GAAG,CAAClI,KAAK,CAAC,EAAE;MACrB,IAAAgE,uBAAA,CAAApF,OAAA,MAAI,EAAAP,YAAA,EAAAsI,aAAA,EAAAzC,IAAA,CAAJ,IAAI,EAAclE,KAAK,EAAE0G,IAAI;IAC/B;EACF;AACF;AAAC,SAAAhB,2BAoJCiD,IAUe,EACf9C,KAAY,EACN;EACN;EACA,IACE+C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IACtC,IAAI,CAACtK,KAAK,KAAK,UAAU,IACzBd,kBAAkB,CAACqL,QAAQ,CAACJ,IAAoB,CAAC,EACjD;IACA,MAAM,IAAIhE,KAAK,CACZ,eAAcgE,IAAK,wBAAuB,IAAI,CAACnK,KAAM,mDACxD,CAAC;EACH;EACA,KAAK,MAAM;IAAEwB,KAAK;IAAEI;EAAS,CAAC,IAAI,IAAAC,sBAAA,CAAAzB,OAAA,MAAI,EAAAjB,kBAAA,EAAoBgL,IAAI,CAAC,EAAE;IAC/D,IAAApB,8BAAe,EAACnH,QAAQ,EAAEJ,KAAK,CAACwH,cAAc,EAAExH,KAAK,CAAC,CAAC6F,KAAK,CAAC;EAC/D;EACA,MAAMhF,kBAAkB,GAAG,IAAAR,sBAAA,CAAAzB,OAAA,MAAI,EAAAb,mBAAA,EAAqB+C,GAAG,CAAC6H,IAAI,CAAC;EAC7D,IAAI9H,kBAAkB,EAAE;IACtB,KAAK,MAAMD,EAAE,IAAIC,kBAAkB,EAAE;MACnCD,EAAE,CAAC,CAAC;IACN;EACF;AACF;AAAC,SAAA+F,cA4DY3G,KAAkB,EAAE0G,IAAwB,EAAE;EAAA,IAAAsC,eAAA;EACzD,MAAMC,SAAS,IAAAD,eAAA,GAAGtC,IAAI,CAACuC,SAAS,cAAAD,eAAA,cAAAA,eAAA,GAAI,GAAG;EACvC,MAAM7D,QAAQ,GAAG,IAAI+D,oBAAoB,CACvC,CAACC,OAAO,EAAEhE,QAAQ,KAAK;IACrBgE,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;QACxB,IAAID,KAAK,CAACE,iBAAiB,IAAIN,SAAS,EAAE;UACxC,IAAA1B,8BAAe,EACbb,IAAI,CAACtG,QAAQ,EACbJ,KAAK,CAACwH,cAAc,EACpBxH,KACF,CAAC,CAAC,IAAI2F,WAAW,CAAC,kBAAkB,CAAC,CAAC;UACtCR,QAAQ,CAACC,UAAU,CAAC,CAAC;QACvB;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IACE6D;EACF,CACF,CAAC;EACD9D,QAAQ,CAACqE,OAAO,CAACxJ,KAAK,CAAC4C,OAAQ,CAAC;EAChC,IAAIoC,IAAI,GAAG,IAAA3E,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYiD,GAAG,CAACd,KAAK,CAAC;EACrC,IAAI,CAACgF,IAAI,EAAE;IACTA,IAAI,GAAG,EAAE;IACT,IAAA3E,sBAAA,CAAAzB,OAAA,MAAI,EAAAf,UAAA,EAAYmD,GAAG,CAAChB,KAAK,EAAEgF,IAAI,CAAC;EAClC;EACAA,IAAI,CAAC1E,IAAI,CAAC6E,QAAQ,CAAC;AACrB;AA6CF,SAASvD,WAAWA,CAACP,IAA6B,EAA2B;EAC3E,IAAIM,IAAI,GAAGN,IAAI;EACf,QAAAoI,KAAA,GAAO9H,IAAI,cAAA8H,KAAA,eAAJA,KAAA,CAAMvG,OAAO,EAAE;IAAA,IAAAuG,KAAA;IACpB9H,IAAI,GAAGA,IAAI,CAACuB,OAAO;EACrB;EACA,OAAOvB,IAAI;AACb;AAEA,SAASG,iBAAiBA,CACxBT,IAA6B,EACJ;EACzB,IAAIM,IAA6B;EACjC,IAAIqB,OAAO,GAAG3B,IAAI;EAClB,OAAO2B,OAAO,EAAE;IACd,IAAI,CAACA,OAAO,CAAC4B,MAAM,EAAE;MACnBjD,IAAI,GAAGqB,OAAO;IAChB;IACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;EAC3B;EACA,OAAOvB,IAAI;AACb;AAEA,SAASK,iBAAiBA,CACxBX,IAA6B,EACJ;EACzB,IAAIM,IAA6B;EACjC,IAAIqB,OAAO,GAAG3B,IAAI;EAClB,OAAO2B,OAAO,EAAE;IACd,IAAIA,OAAO,CAAC4B,MAAM,EAAE;MAClBjD,IAAI,GAAGqB,OAAO;IAChB;IACA,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAAwG,cAAA;MACL,IAAIC,aAA4C,GAAG3G,OAAO,CAACa,MAAM;MACjE,OAAO8F,aAAa,EAAE;QACpB,IAAIA,aAAa,CAACzG,OAAO,EAAE;UACzB;QACF;QACAyG,aAAa,GAAGA,aAAa,CAAC9F,MAAM;MACtC;MACAb,OAAO,IAAA0G,cAAA,GAAGC,aAAa,cAAAD,cAAA,uBAAbA,cAAA,CAAexG,OAAO;IAClC;EACF;EACA,OAAOvB,IAAI;AACb;AAEA,SAASoC,aAAaA,CACpB6F,IAA6B,EAC7BC,EAA2B,EACT;EAClB,MAAMC,KAAK,GAAG,IAAI7I,GAAG,CAAc,CAAC;EACpC,IAAI+B,OAAO,GAAG4G,IAAI;EAClB,OAAO5G,OAAO,EAAE;IACd8G,KAAK,CAAC/I,GAAG,CAACiC,OAAO,CAAC;IAClB,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,KAAK6G,EAAE,EAAE;MACzB;IACF,CAAC,MAAM,IAAI7G,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAA6G,eAAA;MACL,IAAIJ,aAA4C,GAAG3G,OAAO,CAACa,MAAM;MACjE,OAAO8F,aAAa,IAAIA,aAAa,KAAKE,EAAE,EAAE;QAC5C,IAAIF,aAAa,CAACzG,OAAO,EAAE;UACzB;QACF;QACAyG,aAAa,GAAGA,aAAa,CAAC9F,MAAM;MACtC;MACA,IAAI8F,aAAa,KAAKE,EAAE,EAAE;QACxB;MACF;MACA7G,OAAO,IAAA+G,eAAA,GAAGJ,aAAa,cAAAI,eAAA,uBAAbA,eAAA,CAAe7G,OAAO;IAClC;EACF;EACA,OAAO4G,KAAK;AACd"}
@@ -248,6 +248,7 @@ async function _render2(location) {
248
248
  _Runtime.hooks === null || _Runtime.hooks === void 0 || (_hooks$flowApi = _Runtime.hooks.flowApi) === null || _hooks$flowApi === void 0 ? void 0 : _hooks$flowApi.clearCollectWidgetContract();
249
249
  const history = (0, _history3.getHistory)();
250
250
  history.unblock();
251
+ const renderStartTime = performance.now();
251
252
  const storyboard = (0, _matchStoryboard.matchStoryboard)((0, _classPrivateFieldGet6.default)(this, _storyboards), location.pathname);
252
253
  const previousApp = (_classPrivateFieldGet5 = (0, _classPrivateFieldGet6.default)(this, _runtimeContext)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.app;
253
254
  if (storyboard !== null && storyboard !== void 0 && storyboard.app) {
@@ -403,6 +404,12 @@ async function _render2(location) {
403
404
  rendererContext.initializeMediaChange();
404
405
  rendererContext.initializeMessageDispatcher();
405
406
  }
407
+ const renderTime = performance.now() - renderStartTime;
408
+ window.dispatchEvent(new CustomEvent("route.render", {
409
+ detail: {
410
+ renderTime
411
+ }
412
+ }));
406
413
  return;
407
414
  }
408
415
  } else if (!window.NO_AUTH_GUARD && _Runtime.hooks !== null && _Runtime.hooks !== void 0 && _Runtime.hooks.auth && !_Runtime.hooks.auth.isLoggedIn()) {