@next-core/runtime 1.4.3 → 1.5.1

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.
Files changed (102) hide show
  1. package/dist/cjs/Dialog.js +2 -3
  2. package/dist/cjs/Dialog.js.map +1 -1
  3. package/dist/cjs/Notification.js +2 -3
  4. package/dist/cjs/Notification.js.map +1 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +2 -1
  7. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  8. package/dist/cjs/internal/CustomTemplates/utils.js.map +1 -1
  9. package/dist/cjs/internal/FormRenderer/constants.js +11 -0
  10. package/dist/cjs/internal/FormRenderer/constants.js.map +1 -0
  11. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +122 -0
  12. package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -0
  13. package/dist/cjs/internal/FormRenderer/getDefaultProperties.js +165 -0
  14. package/dist/cjs/internal/FormRenderer/getDefaultProperties.js.map +1 -0
  15. package/dist/cjs/internal/FormRenderer/interfaces.js +6 -0
  16. package/dist/cjs/internal/FormRenderer/interfaces.js.map +1 -0
  17. package/dist/cjs/internal/FormRenderer/utils.js +20 -0
  18. package/dist/cjs/internal/FormRenderer/utils.js.map +1 -0
  19. package/dist/cjs/internal/Renderer.js +38 -9
  20. package/dist/cjs/internal/Renderer.js.map +1 -1
  21. package/dist/cjs/internal/Router.js +5 -4
  22. package/dist/cjs/internal/Router.js.map +1 -1
  23. package/dist/cjs/internal/Runtime.js +72 -32
  24. package/dist/cjs/internal/Runtime.js.map +1 -1
  25. package/dist/cjs/internal/bindListeners.js +9 -2
  26. package/dist/cjs/internal/bindListeners.js.map +1 -1
  27. package/dist/cjs/internal/bootstrapData.js.map +1 -1
  28. package/dist/cjs/internal/compute/evaluate.js +21 -6
  29. package/dist/cjs/internal/compute/evaluate.js.map +1 -1
  30. package/dist/cjs/internal/compute/listenOnTrackingContext.js +7 -9
  31. package/dist/cjs/internal/compute/listenOnTrackingContext.js.map +1 -1
  32. package/dist/cjs/internal/data/DataStore.js +2 -2
  33. package/dist/cjs/internal/data/DataStore.js.map +1 -1
  34. package/dist/cjs/internal/fulfilStoryboard.js +27 -0
  35. package/dist/cjs/internal/fulfilStoryboard.js.map +1 -0
  36. package/dist/cjs/internal/interfaces.js.map +1 -1
  37. package/dist/cjs/internal/secret_internals.js +6 -15
  38. package/dist/cjs/internal/secret_internals.js.map +1 -1
  39. package/dist/esm/Dialog.js +2 -3
  40. package/dist/esm/Dialog.js.map +1 -1
  41. package/dist/esm/Notification.js +2 -3
  42. package/dist/esm/Notification.js.map +1 -1
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +2 -1
  45. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  46. package/dist/esm/internal/CustomTemplates/utils.js.map +1 -1
  47. package/dist/esm/internal/FormRenderer/constants.js +3 -0
  48. package/dist/esm/internal/FormRenderer/constants.js.map +1 -0
  49. package/dist/esm/internal/FormRenderer/expandFormRenderer.js +111 -0
  50. package/dist/esm/internal/FormRenderer/expandFormRenderer.js.map +1 -0
  51. package/dist/esm/internal/FormRenderer/getDefaultProperties.js +136 -0
  52. package/dist/esm/internal/FormRenderer/getDefaultProperties.js.map +1 -0
  53. package/dist/esm/internal/FormRenderer/interfaces.js +2 -0
  54. package/dist/esm/internal/FormRenderer/interfaces.js.map +1 -0
  55. package/dist/esm/internal/FormRenderer/utils.js +15 -0
  56. package/dist/esm/internal/FormRenderer/utils.js.map +1 -0
  57. package/dist/esm/internal/Renderer.js +48 -16
  58. package/dist/esm/internal/Renderer.js.map +1 -1
  59. package/dist/esm/internal/Router.js +4 -3
  60. package/dist/esm/internal/Router.js.map +1 -1
  61. package/dist/esm/internal/Runtime.js +70 -29
  62. package/dist/esm/internal/Runtime.js.map +1 -1
  63. package/dist/esm/internal/bindListeners.js +9 -2
  64. package/dist/esm/internal/bindListeners.js.map +1 -1
  65. package/dist/esm/internal/bootstrapData.js.map +1 -1
  66. package/dist/esm/internal/compute/evaluate.js +22 -9
  67. package/dist/esm/internal/compute/evaluate.js.map +1 -1
  68. package/dist/esm/internal/compute/listenOnTrackingContext.js +7 -9
  69. package/dist/esm/internal/compute/listenOnTrackingContext.js.map +1 -1
  70. package/dist/esm/internal/data/DataStore.js +2 -2
  71. package/dist/esm/internal/data/DataStore.js.map +1 -1
  72. package/dist/esm/internal/fulfilStoryboard.js +34 -0
  73. package/dist/esm/internal/fulfilStoryboard.js.map +1 -0
  74. package/dist/esm/internal/interfaces.js.map +1 -1
  75. package/dist/esm/internal/secret_internals.js +7 -13
  76. package/dist/esm/internal/secret_internals.js.map +1 -1
  77. package/dist/types/Dialog.d.ts +1 -1
  78. package/dist/types/Notification.d.ts +1 -1
  79. package/dist/types/index.d.ts +1 -1
  80. package/dist/types/internal/CustomTemplates/expandCustomTemplate.d.ts +1 -1
  81. package/dist/types/internal/FormRenderer/constants.d.ts +7 -0
  82. package/dist/types/internal/FormRenderer/expandFormRenderer.d.ts +3 -0
  83. package/dist/types/internal/FormRenderer/getDefaultProperties.d.ts +2 -0
  84. package/dist/types/internal/FormRenderer/interfaces.d.ts +30 -0
  85. package/dist/types/internal/FormRenderer/utils.d.ts +5 -0
  86. package/dist/types/internal/Renderer.d.ts +2 -3
  87. package/dist/types/internal/Runtime.d.ts +11 -2
  88. package/dist/types/internal/bootstrapData.d.ts +1 -1
  89. package/dist/types/internal/fulfilStoryboard.d.ts +2 -0
  90. package/dist/types/internal/interfaces.d.ts +6 -0
  91. package/dist/types/internal/secret_internals.d.ts +1 -4
  92. package/package.json +6 -6
  93. package/dist/cjs/internal/loadBootstrapData.js +0 -227
  94. package/dist/cjs/internal/loadBootstrapData.js.map +0 -1
  95. package/dist/cjs/internal/loadCheckLogin.js +0 -17
  96. package/dist/cjs/internal/loadCheckLogin.js.map +0 -1
  97. package/dist/esm/internal/loadBootstrapData.js +0 -244
  98. package/dist/esm/internal/loadBootstrapData.js.map +0 -1
  99. package/dist/esm/internal/loadCheckLogin.js +0 -18
  100. package/dist/esm/internal/loadCheckLogin.js.map +0 -1
  101. package/dist/types/internal/loadBootstrapData.d.ts +0 -10
  102. package/dist/types/internal/loadCheckLogin.d.ts +0 -1
@@ -25,6 +25,8 @@ var _Runtime = require("./Runtime.js");
25
25
  var _enums = require("./enums.js");
26
26
  var _getTracks = require("./compute/getTracks.js");
27
27
  var _isStrictMode = require("../isStrictMode.js");
28
+ var _constants2 = require("./FormRenderer/constants.js");
29
+ var _expandFormRenderer = require("./FormRenderer/expandFormRenderer.js");
28
30
  async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext, slotId) {
29
31
  const matched = await (0, _matchRoutes.matchRoutes)(routes, _runtimeContext);
30
32
  const output = {
@@ -120,9 +122,11 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
120
122
  return output;
121
123
  }
122
124
  const tplStateStoreId = brickConf[_constants.symbolForTplStateStoreId];
125
+ const formStateStoreId = brickConf[_constants2.symbolForFormStateStoreId];
123
126
  const runtimeContext = {
124
127
  ..._runtimeContext,
125
- tplStateStoreId
128
+ tplStateStoreId,
129
+ formStateStoreId
126
130
  };
127
131
  if ((0, _general.hasOwnProperty)(brickConf, _constants.symbolForTPlExternalForEachItem)) {
128
132
  // The external bricks of a template should restore their `forEachItem`
@@ -192,7 +196,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
192
196
  const listener = async () => {
193
197
  const currentRenderId = ++renderId;
194
198
  const output = await renderControlNode();
195
- output.blockingList.push(...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck);
199
+ output.blockingList.push(...[...runtimeContext.tplStateStoreMap.values(), ...runtimeContext.formStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck);
196
200
  await Promise.all(output.blockingList);
197
201
  // Ignore stale renders
198
202
  if (renderId === currentRenderId) {
@@ -217,7 +221,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
217
221
 
218
222
  // Widgets need to be defined before rendering.
219
223
  if (/\.tpl-/.test(brickName) && !_CustomTemplates.customTemplates.get(brickName)) {
220
- await (0, _loader.loadBricksImperatively)([brickName], (0, _Runtime.getBrickPackages)());
224
+ await catchLoadBrick((0, _loader.loadBricksImperatively)([brickName], (0, _Runtime.getBrickPackages)()), brickName, rendererContext.unknownBricks);
221
225
  }
222
226
  const tplTagName = (0, _utils.getTagNameOfCustomTemplate)(brickName, (_runtimeContext$app = runtimeContext.app) === null || _runtimeContext$app === void 0 ? void 0 : _runtimeContext$app.id);
223
227
  if (tplTagName) {
@@ -228,11 +232,15 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
228
232
  }
229
233
  tplStack.set(tplTagName, tplCount + 1);
230
234
  } else if (brickName.includes("-") && !customElements.get(brickName)) {
231
- const promise = (0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)());
232
- output.blockingList.push(rendererContext.unknownBricks === "silent" ? promise.catch(e => {
233
- // eslint-disable-next-line no-console
234
- console.error(`Load brick "${brickName}" failed:`, e);
235
- }) : promise);
235
+ if (brickName === _constants2.FORM_RENDERER) {
236
+ customElements.define(_constants2.FORM_RENDERER, class FormRendererElement extends HTMLElement {
237
+ get $$typeof() {
238
+ return "form-renderer";
239
+ }
240
+ });
241
+ } else {
242
+ output.blockingList.push(catchLoadBrick((0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)()), brickName, rendererContext.unknownBricks));
243
+ }
236
244
  }
237
245
  const brick = {
238
246
  tag: _enums.RenderTag.BRICK,
@@ -247,11 +255,24 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
247
255
  };
248
256
  output.node = brick;
249
257
 
258
+ // const confProps = brickConf.properties;
259
+ let formData;
260
+ let confProps;
261
+ if (brickName === _constants2.FORM_RENDERER) {
262
+ var _brickConf$properties;
263
+ ({
264
+ formData,
265
+ ...confProps
266
+ } = (_brickConf$properties = brickConf.properties) !== null && _brickConf$properties !== void 0 ? _brickConf$properties : {});
267
+ } else {
268
+ confProps = brickConf.properties;
269
+ }
270
+
250
271
  // 加载构件属性和加载子构件等任务,可以并行。
251
272
  const blockingList = [];
252
273
  const trackingContextList = [];
253
274
  const loadProperties = async () => {
254
- brick.properties = await (0, _computeRealProperties.asyncComputeRealProperties)(brickConf.properties, runtimeContext, trackingContextList);
275
+ brick.properties = await (0, _computeRealProperties.asyncComputeRealProperties)(confProps, runtimeContext, trackingContextList);
255
276
  const computedPropsFromHost = brickConf[_constants.symbolForAsyncComputedPropsFromHost];
256
277
  if (computedPropsFromHost) {
257
278
  var _brick$properties;
@@ -270,6 +291,8 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
270
291
  let expandedBrickConf = brickConf;
271
292
  if (tplTagName) {
272
293
  expandedBrickConf = (0, _expandCustomTemplate.expandCustomTemplate)(tplTagName, brickConf, brick, asyncProperties);
294
+ } else if (brickName === _constants2.FORM_RENDERER) {
295
+ expandedBrickConf = (0, _expandFormRenderer.expandFormRenderer)(formData, brickConf, brick, asyncProperties);
273
296
  }
274
297
  if (expandedBrickConf.portal) {
275
298
  // A portal brick has no slotId.
@@ -398,4 +421,10 @@ function childrenToSlots(children, originalSlots) {
398
421
  }
399
422
  return newSlots;
400
423
  }
424
+ function catchLoadBrick(promise, brickName, unknownBricks) {
425
+ return unknownBricks === "silent" ? promise.catch(e => {
426
+ // eslint-disable-next-line no-console
427
+ console.error(`Load brick "${brickName}" failed:`, e);
428
+ }) : promise;
429
+ }
401
430
  //# sourceMappingURL=Renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.js","names":["_loader","require","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_checkPermissions","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","preCheckPermissionsForBrickOrRoute","type","redirectTo","redirect","asyncComputeRealValue","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","_runtimeContext$app","brick","template","tplStateStoreId","symbolForTplStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","Array","isArray","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","loadBricksImperatively","getBrickPackages","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","promise","enqueueStableLoadBricks","unknownBricks","catch","e","tag","RenderTag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","properties","asyncComputeRealProperties","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","listenOnTrackingContext","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","expandCustomTemplate","undefined","childRuntimeContext","loadChildren","childSlotId","slotConf","childrenOutput","child","i","j","flat","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } 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 } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\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: RuntimeBrickConfWithTplSymbols,\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 const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\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 preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\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 const promise = enqueueStableLoadBricks([brickName], getBrickPackages());\n output.blockingList.push(\n rendererContext.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 }\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 // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\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\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.js","names":["_loader","require","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_checkPermissions","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","preCheckPermissionsForBrickOrRoute","type","redirectTo","redirect","asyncComputeRealValue","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","_runtimeContext$app","brick","template","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","Array","isArray","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","tplStateStoreMap","values","formStateStoreMap","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","catchLoadBrick","loadBricksImperatively","getBrickPackages","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","FormRendererElement","HTMLElement","$$typeof","enqueueStableLoadBricks","tag","RenderTag","BRICK","return","events","portal","iid","ref","formData","confProps","_brickConf$properties","properties","trackingContextList","loadProperties","asyncComputeRealProperties","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","listenOnTrackingContext","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","undefined","childRuntimeContext","loadChildren","childSlotId","slotConf","childrenOutput","child","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} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.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 } 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 symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\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 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 preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoadBrick(\n loadBricksImperatively([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n customElements.define(\n FORM_RENDERER,\n class FormRendererElement extends HTMLElement {\n get $$typeof(): string {\n return \"form-renderer\";\n }\n }\n );\n } else {\n output.blockingList.push(\n catchLoadBrick(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // const confProps = brickConf.properties;\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n } else {\n confProps = brickConf.properties;\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n confProps,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoadBrick(\n promise: Promise<unknown>,\n brickName: string,\n unknownBricks: RendererContext[\"unknownBricks\"]\n) {\n return unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise;\n}\n"],"mappings":"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"}
@@ -32,7 +32,7 @@ var _handleHttpError = require("../handleHttpError.js");
32
32
  var _abortController = require("./abortController.js");
33
33
  var _registerCustomTemplates = require("./registerCustomTemplates.js");
34
34
  var _CollectContracts = require("./data/CollectContracts.js");
35
- var _loadBootstrapData = require("./loadBootstrapData.js");
35
+ var _fulfilStoryboard = require("./fulfilStoryboard.js");
36
36
  var _enums = require("./enums.js");
37
37
  var _checkInstalledApps = require("./checkInstalledApps.js");
38
38
  var _insertPreviewRoutes = require("./insertPreviewRoutes.js");
@@ -257,7 +257,7 @@ async function _render2(location) {
257
257
  const storyboard = (0, _matchStoryboard.matchStoryboard)((0, _classPrivateFieldGet6.default)(this, _storyboards), location.pathname);
258
258
  const previousApp = (_classPrivateFieldGet5 = (0, _classPrivateFieldGet6.default)(this, _runtimeContext)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.app;
259
259
  if (storyboard !== null && storyboard !== void 0 && storyboard.app) {
260
- await (0, _loadBootstrapData.fulfilStoryboard)(storyboard);
260
+ await (0, _fulfilStoryboard.fulfilStoryboard)(storyboard);
261
261
  }
262
262
  const currentApp = (0, _classPrivateFieldSet2.default)(this, _currentApp, storyboard === null || storyboard === void 0 ? void 0 : storyboard.app);
263
263
 
@@ -325,7 +325,8 @@ async function _render2(location) {
325
325
  },
326
326
  ctxStore: new _DataStore.DataStore("CTX"),
327
327
  pendingPermissionsPreCheck: [(0, _checkPermissions.preCheckPermissions)(storyboard)],
328
- tplStateStoreMap: new Map()
328
+ tplStateStoreMap: new Map(),
329
+ formStateStoreMap: new Map()
329
330
  });
330
331
  const rendererContext = (0, _classPrivateFieldSet2.default)(this, _rendererContext, new _RendererContext.RendererContext("page"));
331
332
  (0, _classPrivateFieldSet2.default)(this, _navConfig, undefined);
@@ -347,7 +348,7 @@ async function _render2(location) {
347
348
  // Reset redirect count if no redirect is set.
348
349
  (0, _classPrivateFieldSet2.default)(this, _redirectCount, 0);
349
350
  (0, _loader.flushStableLoadBricks)();
350
- await Promise.all([...output.blockingList, runtimeContext.ctxStore.waitForAll(), ...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()),
351
+ await Promise.all([...output.blockingList, ...[runtimeContext.ctxStore, ...runtimeContext.tplStateStoreMap.values(), ...runtimeContext.formStateStoreMap.values()].map(store => store.waitForAll()),
351
352
  // Todo: load processors only when they would used in current rendering.
352
353
  // loadProcessorsImperatively(
353
354
  // strictCollectMemberUsage(
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","names":["_history2","require","_loader","_http","_lodash","_history3","_Renderer","_DataStore","_resolveData","_mount","_matchStoryboard","_StoryboardFunctions","_checkPermissions","_RendererContext","_themeAndMode","_Runtime","_auth","_getPageInfo","_markAsComputed","_handleHttpError","_abortController","_registerCustomTemplates","_CollectContracts","_loadBootstrapData","_enums","_checkInstalledApps","_insertPreviewRoutes","_storyboards","WeakMap","_rendering","_prevLocation","_nextLocation","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_getBlockMessageBeforePageLave","WeakSet","_safeRedirect","_queuedRender","_render","Router","constructor","storyboards","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","writable","value","Set","_classPrivateFieldSet2","history","getHistory","window","addEventListener","event","message","_classPrivateMethodGet2","_getBlockMessageBeforePageLave2","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet6","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","initAbortController","listen","_classPrivateFieldGet2","_location$state","_classPrivateFieldGet3","ignoreRendering","omittedLocationProps","hash","undefined","state","key","notify","locationsAreEqual","abortPendingRequest","dispatchPageLeave","storyboard","matchStoryboard","pathname","isOutsideApp","reload","_queuedRender2","catch","handleHttpError","exports","detail","_classPrivateFieldGet4","previousMessage","getBlockMessage","dispatchBeforePageLeave","unblock","_safeRedirect2","to","from","_this$redirectCount","_this$redirectCount2","search","process","env","NODE_ENV","console","error","Error","replace","_render2","nextLocation","_classPrivateFieldGet5","uniqueId","resetAllComputedMarks","clearResolveCache","clearCollectWidgetContract","app","fulfilStoryboard","appChanged","id","flags","getRuntime","getFeatureFlags","prevRendererContext","redirectTo","add","redirectToLogin","main","document","querySelector","portal","renderRoot","tag","RenderTag","ROOT","container","createPortal","cleanUpPreviousRender","unmountTree","item","dispatchOnUnmount","dispose","clear","setTheme","getLocalAppsTheme","theme","setMode","dispatchEvent","CustomEvent","_storyboard$meta","_storyboard$meta2","preCheckInstalledApps","runtimeContext","query","URLSearchParams","sys","getAuth","getPageInfo","ctxStore","DataStore","pendingPermissionsPreCheck","preCheckPermissions","tplStateStoreMap","Map","rendererContext","RendererContext","registerCustomTemplates","registerStoryboardFunctions","meta","functions","collectContract","contracts","failed","output","renderRoutes","insertPreviewRoutes","routes","unauthenticated","redirect","path","flushStableLoadBricks","Promise","all","blockingList","waitForAll","values","map","store","menuConfs","menuRequests","mergeMenuConfs","isUnauthenticatedError","NO_AUTH_GUARD","HttpAbortError","node","BRICK","type","properties","textContent","httpErrorToString","return","child","route","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","isLoggedIn","navConfig","breadcrumb","menuConf","overwrite","items","push"],"sources":["../../../src/internal/Router.ts"],"sourcesContent":["import { Action, locationsAreEqual } from \"history\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport type {\n BreadcrumbItemConf,\n MicroApp,\n StaticMenuConf,\n Storyboard,\n} from \"@next-core/types\";\nimport { HttpAbortError } from \"@next-core/http\";\nimport { uniqueId } from \"lodash\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport { RenderOutput, renderRoutes } from \"./Renderer.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { clearResolveCache } from \"./data/resolveData.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { isOutsideApp, matchStoryboard } from \"./matchStoryboard.js\";\nimport { registerStoryboardFunctions } from \"./compute/StoryboardFunctions.js\";\nimport { preCheckPermissions } from \"./checkPermissions.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport {\n applyMode,\n applyTheme,\n getLocalAppsTheme,\n setMode,\n setTheme,\n} from \"../themeAndMode.js\";\nimport { getRuntime } from \"./Runtime.js\";\nimport { getAuth, isLoggedIn } from \"../auth.js\";\nimport { getPageInfo } from \"../getPageInfo.js\";\nimport type { RenderBrick, RenderRoot, RuntimeContext } from \"./interfaces.js\";\nimport { resetAllComputedMarks } from \"./compute/markAsComputed.js\";\nimport {\n handleHttpError,\n httpErrorToString,\n isUnauthenticatedError,\n} from \"../handleHttpError.js\";\nimport { abortPendingRequest, initAbortController } from \"./abortController.js\";\nimport { registerCustomTemplates } from \"./registerCustomTemplates.js\";\nimport {\n clearCollectWidgetContract,\n collectContract,\n} from \"./data/CollectContracts.js\";\nimport { fulfilStoryboard } from \"./loadBootstrapData.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { preCheckInstalledApps } from \"./checkInstalledApps.js\";\nimport { insertPreviewRoutes } from \"./insertPreviewRoutes.js\";\n\nexport class Router {\n readonly #storyboards: Storyboard[];\n #rendering = false;\n #prevLocation!: NextLocation;\n #nextLocation?: NextLocation;\n #runtimeContext?: RuntimeContext;\n #rendererContext?: RendererContext;\n #rendererContextTrashCan = new Set<RendererContext | undefined>();\n #redirectCount = 0;\n #renderId?: string;\n #currentApp?: MicroApp;\n #previousApp?: MicroApp;\n #navConfig?: {\n breadcrumb?: BreadcrumbItemConf[];\n };\n\n constructor(storyboards: Storyboard[]) {\n this.#storyboards = storyboards;\n\n const history = getHistory();\n window.addEventListener(\"beforeunload\", (event) => {\n const message = this.#getBlockMessageBeforePageLave({});\n // See examples in https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload\n if (message) {\n // Cancel the event\n // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n event.preventDefault();\n // Chrome requires returnValue to be set\n event.returnValue = \"\";\n } else {\n // the absence of a returnValue property on the event will guarantee the browser unload happens\n delete event.returnValue;\n }\n });\n\n history.block((location, action) =>\n this.#getBlockMessageBeforePageLave({ location, action })\n );\n }\n\n getRenderId() {\n return this.#renderId;\n }\n\n getRuntimeContext() {\n return this.#runtimeContext;\n }\n\n getRecentApps() {\n return {\n currentApp: this.#currentApp,\n previousApp: this.#previousApp,\n };\n }\n\n getNavConfig() {\n return this.#navConfig;\n }\n\n #getBlockMessageBeforePageLave(detail: {\n location?: NextLocation;\n action?: Action;\n }): string | undefined {\n const history = getHistory();\n const previousMessage = history.getBlockMessage();\n this.#rendererContext?.dispatchBeforePageLeave(detail);\n const message = history.getBlockMessage();\n if (!previousMessage && message) {\n // Auto unblock only if new block was introduced by `onBeforePageLeave`.\n history.unblock();\n }\n return message;\n }\n\n #safeRedirect(\n to: string,\n state: NextHistoryState | undefined,\n from: NextLocation\n ): void {\n if (this.#redirectCount++ > 10) {\n const message = `Infinite redirect detected: from \"${from.pathname}${from.search}${from.hash}\" to \"${to}\"`;\n // istanbul ignore else: error cannot be caught in test\n if (process.env.NODE_ENV === \"test\") {\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n } else {\n throw new Error(message);\n }\n }\n getHistory().replace(to, state);\n }\n\n bootstrap() {\n initAbortController();\n const history = getHistory();\n this.#prevLocation = history.location;\n history.listen((location, action) => {\n let ignoreRendering = false;\n const omittedLocationProps: Partial<NextLocation> = {\n hash: undefined,\n state: undefined,\n };\n // Omit the \"key\" when checking whether locations are equal in certain situations.\n if (\n // When current location is triggered by browser action of hash link.\n location.key === undefined ||\n // When current location is triggered by browser action of non-push-or-replace,\n // such as goBack or goForward,\n (action === \"POP\" &&\n // and the previous location was triggered by hash link,\n (this.#prevLocation.key === undefined ||\n // or the previous location specified notify false.\n this.#prevLocation.state?.notify === false))\n ) {\n omittedLocationProps.key = undefined;\n }\n if (\n locationsAreEqual(\n { ...this.#prevLocation, ...omittedLocationProps },\n { ...location, ...omittedLocationProps }\n ) ||\n (action !== \"POP\" && location.state?.notify === false)\n ) {\n // Ignore rendering if location not changed except hash, state and optional key.\n // Ignore rendering if notify is `false`.\n ignoreRendering = true;\n }\n if (ignoreRendering) {\n this.#prevLocation = location;\n return;\n }\n abortPendingRequest();\n this.#prevLocation = location;\n this.#rendererContext?.dispatchPageLeave();\n // this.locationContext.messageDispatcher.reset();\n\n if (action === \"POP\") {\n const storyboard = matchStoryboard(\n this.#storyboards,\n location.pathname\n );\n // When a browser action of goBack or goForward is performing,\n // force reload when the target page is a page of an outside app.\n if (isOutsideApp(storyboard)) {\n window.location.reload();\n return;\n }\n }\n\n if (this.#rendering) {\n this.#nextLocation = location;\n } else {\n // devtoolsHookEmit(\"locationChange\");\n this.#queuedRender(location).catch(handleHttpError);\n }\n });\n return this.#queuedRender(history.location);\n }\n\n async #queuedRender(location: NextLocation): Promise<void> {\n this.#rendering = true;\n try {\n await this.#render(location);\n } finally {\n this.#rendering = false;\n if (this.#nextLocation) {\n const nextLocation = this.#nextLocation;\n this.#nextLocation = undefined;\n await this.#queuedRender(nextLocation);\n }\n }\n }\n\n async #render(location: NextLocation): Promise<void> {\n this.#renderId = uniqueId(\"render-id-1\");\n\n resetAllComputedMarks();\n clearResolveCache();\n clearCollectWidgetContract();\n\n const history = getHistory();\n history.unblock();\n\n const storyboard = matchStoryboard(this.#storyboards, location.pathname);\n\n const previousApp = this.#runtimeContext?.app;\n if (storyboard?.app) {\n await fulfilStoryboard(storyboard);\n }\n const currentApp = (this.#currentApp = storyboard?.app);\n\n // Storyboard maybe re-assigned, e.g. when open launchpad.\n const appChanged =\n previousApp && currentApp\n ? previousApp.id !== currentApp.id\n : previousApp !== currentApp;\n\n // TODO: handle favicon\n\n // Set `Router::#currentApp` before calling `getFeatureFlags()`\n const flags = getRuntime().getFeatureFlags();\n const prevRendererContext = this.#rendererContext;\n\n const redirectTo = (to: string, state?: NextHistoryState): void => {\n this.#rendererContextTrashCan.add(prevRendererContext);\n this.#safeRedirect(to, state, location);\n };\n\n const redirectToLogin = (): void => {\n const to = flags[\"sso-enabled\"] ? \"/sso-auth/login\" : \"/auth/login\";\n redirectTo(to, { from: location });\n };\n\n const main = document.querySelector(\"#main-mount-point\") as HTMLElement;\n const portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: main,\n createPortal: portal,\n };\n\n const cleanUpPreviousRender = (): void => {\n unmountTree(main);\n unmountTree(portal);\n\n // Note: redirects can lead to multiple trash renderer contexts.\n this.#rendererContextTrashCan.add(prevRendererContext);\n for (const item of this.#rendererContextTrashCan) {\n if (item) {\n item.dispatchOnUnmount();\n item.dispose();\n }\n }\n this.#rendererContextTrashCan.clear();\n\n setTheme(\n (currentApp &&\n (getLocalAppsTheme()[currentApp.id] || currentApp.theme)) ||\n \"light\"\n );\n setMode(\"default\");\n\n if (appChanged) {\n this.#previousApp = previousApp;\n window.dispatchEvent(\n new CustomEvent(\"app.change\", {\n detail: {\n previousApp,\n currentApp,\n },\n })\n );\n }\n };\n\n if (currentApp) {\n preCheckInstalledApps(storyboard);\n\n const runtimeContext: RuntimeContext = (this.#runtimeContext = {\n app: currentApp,\n location,\n query: new URLSearchParams(location.search),\n flags,\n sys: {\n ...getAuth(),\n ...getPageInfo(),\n },\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [preCheckPermissions(storyboard)],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n });\n\n const rendererContext = (this.#rendererContext = new RendererContext(\n \"page\"\n ));\n this.#navConfig = undefined;\n\n registerCustomTemplates(storyboard);\n registerStoryboardFunctions(storyboard.meta?.functions, currentApp);\n collectContract(storyboard.meta?.contracts);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderRoutes(\n renderRoot,\n insertPreviewRoutes(storyboard.routes),\n runtimeContext,\n rendererContext\n );\n if (output.unauthenticated) {\n redirectToLogin();\n return;\n }\n if (output.redirect) {\n redirectTo(output.redirect.path, output.redirect.state);\n return;\n }\n // Reset redirect count if no redirect is set.\n this.#redirectCount = 0;\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n // Todo: load processors only when they would used in current rendering.\n // loadProcessorsImperatively(\n // strictCollectMemberUsage(\n // [storyboard.routes, storyboard.meta?.customTemplates],\n // \"PROCESSORS\",\n // 2\n // ),\n // getBrickPackages()\n // ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n\n const menuConfs = await Promise.all(output.menuRequests);\n this.#navConfig = mergeMenuConfs(menuConfs);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Router failed:\", error);\n\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n redirectToLogin();\n return;\n } else if (error instanceof HttpAbortError) {\n this.#rendererContextTrashCan.add(prevRendererContext);\n return;\n } else {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n runtimeContext: null!,\n return: renderRoot,\n },\n blockingList: [],\n menuRequests: [],\n };\n }\n }\n renderRoot.child = output.node;\n\n cleanUpPreviousRender();\n\n if ((output.route && output.route.type !== \"routes\") || failed) {\n if (!failed) {\n // There is a window to set theme and mode by `lifeCycle.onBeforePageLoad`.\n rendererContext.dispatchBeforePageLoad();\n }\n applyTheme();\n applyMode();\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\n window.scrollTo(0, 0);\n\n if (!failed) {\n rendererContext.dispatchPageLoad();\n rendererContext.dispatchAnchorLoad();\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n }\n\n return;\n }\n } else if (!window.NO_AUTH_GUARD && !isLoggedIn()) {\n // Todo(steve): refine after api-gateway supports fetching storyboards before logged in.\n // Redirect to login if no storyboard is matched.\n redirectToLogin();\n return;\n } else {\n cleanUpPreviousRender();\n }\n\n applyTheme();\n applyMode();\n\n const node: RenderBrick = {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: \"Page not found\",\n },\n runtimeContext: null!,\n return: renderRoot,\n };\n renderRoot.child = node;\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n window.scrollTo(0, 0);\n }\n}\n\nfunction mergeMenuConfs(menuConfs: (StaticMenuConf | undefined)[]) {\n const navConfig = {\n breadcrumb: [] as BreadcrumbItemConf[],\n };\n for (const menuConf of menuConfs) {\n if (menuConf) {\n const { breadcrumb } = menuConf;\n if (breadcrumb) {\n if (breadcrumb.overwrite) {\n navConfig.breadcrumb = breadcrumb.items;\n } else {\n navConfig.breadcrumb.push(...breadcrumb.items);\n }\n }\n }\n }\n return navConfig;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Router.js","names":["_history2","require","_loader","_http","_lodash","_history3","_Renderer","_DataStore","_resolveData","_mount","_matchStoryboard","_StoryboardFunctions","_checkPermissions","_RendererContext","_themeAndMode","_Runtime","_auth","_getPageInfo","_markAsComputed","_handleHttpError","_abortController","_registerCustomTemplates","_CollectContracts","_fulfilStoryboard","_enums","_checkInstalledApps","_insertPreviewRoutes","_storyboards","WeakMap","_rendering","_prevLocation","_nextLocation","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_getBlockMessageBeforePageLave","WeakSet","_safeRedirect","_queuedRender","_render","Router","constructor","storyboards","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","writable","value","Set","_classPrivateFieldSet2","history","getHistory","window","addEventListener","event","message","_classPrivateMethodGet2","_getBlockMessageBeforePageLave2","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet6","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","initAbortController","listen","_classPrivateFieldGet2","_location$state","_classPrivateFieldGet3","ignoreRendering","omittedLocationProps","hash","undefined","state","key","notify","locationsAreEqual","abortPendingRequest","dispatchPageLeave","storyboard","matchStoryboard","pathname","isOutsideApp","reload","_queuedRender2","catch","handleHttpError","exports","detail","_classPrivateFieldGet4","previousMessage","getBlockMessage","dispatchBeforePageLeave","unblock","_safeRedirect2","to","from","_this$redirectCount","_this$redirectCount2","search","process","env","NODE_ENV","console","error","Error","replace","_render2","nextLocation","_classPrivateFieldGet5","uniqueId","resetAllComputedMarks","clearResolveCache","clearCollectWidgetContract","app","fulfilStoryboard","appChanged","id","flags","getRuntime","getFeatureFlags","prevRendererContext","redirectTo","add","redirectToLogin","main","document","querySelector","portal","renderRoot","tag","RenderTag","ROOT","container","createPortal","cleanUpPreviousRender","unmountTree","item","dispatchOnUnmount","dispose","clear","setTheme","getLocalAppsTheme","theme","setMode","dispatchEvent","CustomEvent","_storyboard$meta","_storyboard$meta2","preCheckInstalledApps","runtimeContext","query","URLSearchParams","sys","getAuth","getPageInfo","ctxStore","DataStore","pendingPermissionsPreCheck","preCheckPermissions","tplStateStoreMap","Map","formStateStoreMap","rendererContext","RendererContext","registerCustomTemplates","registerStoryboardFunctions","meta","functions","collectContract","contracts","failed","output","renderRoutes","insertPreviewRoutes","routes","unauthenticated","redirect","path","flushStableLoadBricks","Promise","all","blockingList","values","map","store","waitForAll","menuConfs","menuRequests","mergeMenuConfs","isUnauthenticatedError","NO_AUTH_GUARD","HttpAbortError","node","BRICK","type","properties","textContent","httpErrorToString","return","child","route","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","isLoggedIn","navConfig","breadcrumb","menuConf","overwrite","items","push"],"sources":["../../../src/internal/Router.ts"],"sourcesContent":["import { Action, locationsAreEqual } from \"history\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport type {\n BreadcrumbItemConf,\n MicroApp,\n StaticMenuConf,\n Storyboard,\n} from \"@next-core/types\";\nimport { HttpAbortError } from \"@next-core/http\";\nimport { uniqueId } from \"lodash\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport { RenderOutput, renderRoutes } from \"./Renderer.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { clearResolveCache } from \"./data/resolveData.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { isOutsideApp, matchStoryboard } from \"./matchStoryboard.js\";\nimport { registerStoryboardFunctions } from \"./compute/StoryboardFunctions.js\";\nimport { preCheckPermissions } from \"./checkPermissions.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport {\n applyMode,\n applyTheme,\n getLocalAppsTheme,\n setMode,\n setTheme,\n} from \"../themeAndMode.js\";\nimport { getRuntime } from \"./Runtime.js\";\nimport { getAuth, isLoggedIn } from \"../auth.js\";\nimport { getPageInfo } from \"../getPageInfo.js\";\nimport type { RenderBrick, RenderRoot, RuntimeContext } from \"./interfaces.js\";\nimport { resetAllComputedMarks } from \"./compute/markAsComputed.js\";\nimport {\n handleHttpError,\n httpErrorToString,\n isUnauthenticatedError,\n} from \"../handleHttpError.js\";\nimport { abortPendingRequest, initAbortController } from \"./abortController.js\";\nimport { registerCustomTemplates } from \"./registerCustomTemplates.js\";\nimport {\n clearCollectWidgetContract,\n collectContract,\n} from \"./data/CollectContracts.js\";\nimport { fulfilStoryboard } from \"./fulfilStoryboard.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { preCheckInstalledApps } from \"./checkInstalledApps.js\";\nimport { insertPreviewRoutes } from \"./insertPreviewRoutes.js\";\n\nexport class Router {\n readonly #storyboards: Storyboard[];\n #rendering = false;\n #prevLocation!: NextLocation;\n #nextLocation?: NextLocation;\n #runtimeContext?: RuntimeContext;\n #rendererContext?: RendererContext;\n #rendererContextTrashCan = new Set<RendererContext | undefined>();\n #redirectCount = 0;\n #renderId?: string;\n #currentApp?: MicroApp;\n #previousApp?: MicroApp;\n #navConfig?: {\n breadcrumb?: BreadcrumbItemConf[];\n };\n\n constructor(storyboards: Storyboard[]) {\n this.#storyboards = storyboards;\n\n const history = getHistory();\n window.addEventListener(\"beforeunload\", (event) => {\n const message = this.#getBlockMessageBeforePageLave({});\n // See examples in https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload\n if (message) {\n // Cancel the event\n // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n event.preventDefault();\n // Chrome requires returnValue to be set\n event.returnValue = \"\";\n } else {\n // the absence of a returnValue property on the event will guarantee the browser unload happens\n delete event.returnValue;\n }\n });\n\n history.block((location, action) =>\n this.#getBlockMessageBeforePageLave({ location, action })\n );\n }\n\n getRenderId() {\n return this.#renderId;\n }\n\n getRuntimeContext() {\n return this.#runtimeContext;\n }\n\n getRecentApps() {\n return {\n currentApp: this.#currentApp,\n previousApp: this.#previousApp,\n };\n }\n\n getNavConfig() {\n return this.#navConfig;\n }\n\n #getBlockMessageBeforePageLave(detail: {\n location?: NextLocation;\n action?: Action;\n }): string | undefined {\n const history = getHistory();\n const previousMessage = history.getBlockMessage();\n this.#rendererContext?.dispatchBeforePageLeave(detail);\n const message = history.getBlockMessage();\n if (!previousMessage && message) {\n // Auto unblock only if new block was introduced by `onBeforePageLeave`.\n history.unblock();\n }\n return message;\n }\n\n #safeRedirect(\n to: string,\n state: NextHistoryState | undefined,\n from: NextLocation\n ): void {\n if (this.#redirectCount++ > 10) {\n const message = `Infinite redirect detected: from \"${from.pathname}${from.search}${from.hash}\" to \"${to}\"`;\n // istanbul ignore else: error cannot be caught in test\n if (process.env.NODE_ENV === \"test\") {\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n } else {\n throw new Error(message);\n }\n }\n getHistory().replace(to, state);\n }\n\n bootstrap() {\n initAbortController();\n const history = getHistory();\n this.#prevLocation = history.location;\n history.listen((location, action) => {\n let ignoreRendering = false;\n const omittedLocationProps: Partial<NextLocation> = {\n hash: undefined,\n state: undefined,\n };\n // Omit the \"key\" when checking whether locations are equal in certain situations.\n if (\n // When current location is triggered by browser action of hash link.\n location.key === undefined ||\n // When current location is triggered by browser action of non-push-or-replace,\n // such as goBack or goForward,\n (action === \"POP\" &&\n // and the previous location was triggered by hash link,\n (this.#prevLocation.key === undefined ||\n // or the previous location specified notify false.\n this.#prevLocation.state?.notify === false))\n ) {\n omittedLocationProps.key = undefined;\n }\n if (\n locationsAreEqual(\n { ...this.#prevLocation, ...omittedLocationProps },\n { ...location, ...omittedLocationProps }\n ) ||\n (action !== \"POP\" && location.state?.notify === false)\n ) {\n // Ignore rendering if location not changed except hash, state and optional key.\n // Ignore rendering if notify is `false`.\n ignoreRendering = true;\n }\n if (ignoreRendering) {\n this.#prevLocation = location;\n return;\n }\n abortPendingRequest();\n this.#prevLocation = location;\n this.#rendererContext?.dispatchPageLeave();\n // this.locationContext.messageDispatcher.reset();\n\n if (action === \"POP\") {\n const storyboard = matchStoryboard(\n this.#storyboards,\n location.pathname\n );\n // When a browser action of goBack or goForward is performing,\n // force reload when the target page is a page of an outside app.\n if (isOutsideApp(storyboard)) {\n window.location.reload();\n return;\n }\n }\n\n if (this.#rendering) {\n this.#nextLocation = location;\n } else {\n // devtoolsHookEmit(\"locationChange\");\n this.#queuedRender(location).catch(handleHttpError);\n }\n });\n return this.#queuedRender(history.location);\n }\n\n async #queuedRender(location: NextLocation): Promise<void> {\n this.#rendering = true;\n try {\n await this.#render(location);\n } finally {\n this.#rendering = false;\n if (this.#nextLocation) {\n const nextLocation = this.#nextLocation;\n this.#nextLocation = undefined;\n await this.#queuedRender(nextLocation);\n }\n }\n }\n\n async #render(location: NextLocation): Promise<void> {\n this.#renderId = uniqueId(\"render-id-1\");\n\n resetAllComputedMarks();\n clearResolveCache();\n clearCollectWidgetContract();\n\n const history = getHistory();\n history.unblock();\n\n const storyboard = matchStoryboard(this.#storyboards, location.pathname);\n\n const previousApp = this.#runtimeContext?.app;\n if (storyboard?.app) {\n await fulfilStoryboard(storyboard);\n }\n const currentApp = (this.#currentApp = storyboard?.app);\n\n // Storyboard maybe re-assigned, e.g. when open launchpad.\n const appChanged =\n previousApp && currentApp\n ? previousApp.id !== currentApp.id\n : previousApp !== currentApp;\n\n // TODO: handle favicon\n\n // Set `Router::#currentApp` before calling `getFeatureFlags()`\n const flags = getRuntime().getFeatureFlags();\n const prevRendererContext = this.#rendererContext;\n\n const redirectTo = (to: string, state?: NextHistoryState): void => {\n this.#rendererContextTrashCan.add(prevRendererContext);\n this.#safeRedirect(to, state, location);\n };\n\n const redirectToLogin = (): void => {\n const to = flags[\"sso-enabled\"] ? \"/sso-auth/login\" : \"/auth/login\";\n redirectTo(to, { from: location });\n };\n\n const main = document.querySelector(\"#main-mount-point\") as HTMLElement;\n const portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: main,\n createPortal: portal,\n };\n\n const cleanUpPreviousRender = (): void => {\n unmountTree(main);\n unmountTree(portal);\n\n // Note: redirects can lead to multiple trash renderer contexts.\n this.#rendererContextTrashCan.add(prevRendererContext);\n for (const item of this.#rendererContextTrashCan) {\n if (item) {\n item.dispatchOnUnmount();\n item.dispose();\n }\n }\n this.#rendererContextTrashCan.clear();\n\n setTheme(\n (currentApp &&\n (getLocalAppsTheme()[currentApp.id] || currentApp.theme)) ||\n \"light\"\n );\n setMode(\"default\");\n\n if (appChanged) {\n this.#previousApp = previousApp;\n window.dispatchEvent(\n new CustomEvent(\"app.change\", {\n detail: {\n previousApp,\n currentApp,\n },\n })\n );\n }\n };\n\n if (currentApp) {\n preCheckInstalledApps(storyboard);\n\n const runtimeContext: RuntimeContext = (this.#runtimeContext = {\n app: currentApp,\n location,\n query: new URLSearchParams(location.search),\n flags,\n sys: {\n ...getAuth(),\n ...getPageInfo(),\n },\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [preCheckPermissions(storyboard)],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n });\n\n const rendererContext = (this.#rendererContext = new RendererContext(\n \"page\"\n ));\n this.#navConfig = undefined;\n\n registerCustomTemplates(storyboard);\n registerStoryboardFunctions(storyboard.meta?.functions, currentApp);\n collectContract(storyboard.meta?.contracts);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderRoutes(\n renderRoot,\n insertPreviewRoutes(storyboard.routes),\n runtimeContext,\n rendererContext\n );\n if (output.unauthenticated) {\n redirectToLogin();\n return;\n }\n if (output.redirect) {\n redirectTo(output.redirect.path, output.redirect.state);\n return;\n }\n // Reset redirect count if no redirect is set.\n this.#redirectCount = 0;\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n ...[\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ].map((store) => store.waitForAll()),\n // Todo: load processors only when they would used in current rendering.\n // loadProcessorsImperatively(\n // strictCollectMemberUsage(\n // [storyboard.routes, storyboard.meta?.customTemplates],\n // \"PROCESSORS\",\n // 2\n // ),\n // getBrickPackages()\n // ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n\n const menuConfs = await Promise.all(output.menuRequests);\n this.#navConfig = mergeMenuConfs(menuConfs);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Router failed:\", error);\n\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n redirectToLogin();\n return;\n } else if (error instanceof HttpAbortError) {\n this.#rendererContextTrashCan.add(prevRendererContext);\n return;\n } else {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n runtimeContext: null!,\n return: renderRoot,\n },\n blockingList: [],\n menuRequests: [],\n };\n }\n }\n renderRoot.child = output.node;\n\n cleanUpPreviousRender();\n\n if ((output.route && output.route.type !== \"routes\") || failed) {\n if (!failed) {\n // There is a window to set theme and mode by `lifeCycle.onBeforePageLoad`.\n rendererContext.dispatchBeforePageLoad();\n }\n applyTheme();\n applyMode();\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\n window.scrollTo(0, 0);\n\n if (!failed) {\n rendererContext.dispatchPageLoad();\n rendererContext.dispatchAnchorLoad();\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n }\n\n return;\n }\n } else if (!window.NO_AUTH_GUARD && !isLoggedIn()) {\n // Todo(steve): refine after api-gateway supports fetching storyboards before logged in.\n // Redirect to login if no storyboard is matched.\n redirectToLogin();\n return;\n } else {\n cleanUpPreviousRender();\n }\n\n applyTheme();\n applyMode();\n\n const node: RenderBrick = {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: \"Page not found\",\n },\n runtimeContext: null!,\n return: renderRoot,\n };\n renderRoot.child = node;\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n window.scrollTo(0, 0);\n }\n}\n\nfunction mergeMenuConfs(menuConfs: (StaticMenuConf | undefined)[]) {\n const navConfig = {\n breadcrumb: [] as BreadcrumbItemConf[],\n };\n for (const menuConf of menuConfs) {\n if (menuConf) {\n const { breadcrumb } = menuConf;\n if (breadcrumb) {\n if (breadcrumb.overwrite) {\n navConfig.breadcrumb = breadcrumb.items;\n } else {\n navConfig.breadcrumb.push(...breadcrumb.items);\n }\n }\n }\n }\n return navConfig;\n}\n"],"mappings":"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"}