@next-core/runtime 1.62.1 → 1.62.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/internal/Renderer.js +69 -50
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +99 -117
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/cjs/internal/enums.js +1 -1
- package/dist/cjs/internal/enums.js.map +1 -1
- package/dist/cjs/internal/interfaces.js.map +1 -1
- package/dist/cjs/internal/mount.js +12 -5
- package/dist/cjs/internal/mount.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +10 -7
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/Renderer.js +71 -53
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +99 -117
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/esm/internal/enums.js +1 -1
- package/dist/esm/internal/enums.js.map +1 -1
- package/dist/esm/internal/interfaces.js.map +1 -1
- package/dist/esm/internal/mount.js +12 -5
- package/dist/esm/internal/mount.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +10 -7
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/types/internal/Renderer.d.ts +2 -3
- package/dist/types/internal/RendererContext.d.ts +1 -2
- package/dist/types/internal/enums.d.ts +1 -1
- package/dist/types/internal/interfaces.d.ts +5 -7
- package/package.json +2 -2
|
@@ -112,7 +112,7 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
|
|
|
112
112
|
if (route.type === "routes") {
|
|
113
113
|
newOutput = await renderRoutes(returnNode, route.routes, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
114
114
|
} else {
|
|
115
|
-
newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined,
|
|
115
|
+
newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
116
116
|
}
|
|
117
117
|
mergeRenderOutput(output, newOutput);
|
|
118
118
|
appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);
|
|
@@ -121,24 +121,19 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
|
|
|
121
121
|
}
|
|
122
122
|
return output;
|
|
123
123
|
}
|
|
124
|
-
async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack,
|
|
124
|
+
async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
125
125
|
(0, _setupRootRuntimeContext.setupRootRuntimeContext)(bricks, runtimeContext, true);
|
|
126
126
|
const output = getEmptyRenderOutput();
|
|
127
|
-
const kPath = keyPath ?? [];
|
|
128
127
|
// 多个构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
129
|
-
const rendered = await Promise.all(bricks.map(
|
|
130
|
-
rendered.forEach(
|
|
131
|
-
if (item.hasTrackingControls) {
|
|
132
|
-
// Memoize a render node before it's been merged.
|
|
133
|
-
rendererContext.memoize(slotId, kPath.concat(index), item.node, returnNode);
|
|
134
|
-
}
|
|
128
|
+
const rendered = await Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)));
|
|
129
|
+
rendered.forEach(item => {
|
|
135
130
|
mergeRenderOutput(output, item);
|
|
136
131
|
});
|
|
137
132
|
return output;
|
|
138
133
|
}
|
|
139
|
-
async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
134
|
+
async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack = new Map(), initialTracker) {
|
|
140
135
|
try {
|
|
141
|
-
return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
136
|
+
return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
|
|
142
137
|
} catch (error) {
|
|
143
138
|
if (brickConf.errorBoundary) {
|
|
144
139
|
// eslint-disable-next-line no-console
|
|
@@ -152,7 +147,7 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
152
147
|
}
|
|
153
148
|
}
|
|
154
149
|
}
|
|
155
|
-
async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
150
|
+
async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
156
151
|
var _hooks$checkPermissio2, _runtimeContext$app;
|
|
157
152
|
const output = getEmptyRenderOutput();
|
|
158
153
|
if (!brickConf.brick) {
|
|
@@ -190,7 +185,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
190
185
|
...acc,
|
|
191
186
|
[symbol]: brickConf[symbol]
|
|
192
187
|
}), {})
|
|
193
|
-
}, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
188
|
+
}, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
|
|
194
189
|
}
|
|
195
190
|
const tplStateStoreId = brickConf[_constants.symbolForTplStateStoreId];
|
|
196
191
|
const formStateStoreId = brickConf[_constants2.symbolForFormStateStoreId];
|
|
@@ -251,23 +246,39 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
251
246
|
|
|
252
247
|
// Then, get the bricks in that matched slot.
|
|
253
248
|
const bricks = slots && (0, _general.hasOwnProperty)(slots, slot) && ((_slots$slot = slots[slot]) === null || _slots$slot === void 0 ? void 0 : _slots$slot.bricks);
|
|
249
|
+
const output = getEmptyRenderOutput();
|
|
250
|
+
const controlNode = {
|
|
251
|
+
tag: _enums.RenderTag.ABSTRACT,
|
|
252
|
+
return: returnNode
|
|
253
|
+
};
|
|
254
|
+
output.node = controlNode;
|
|
254
255
|
if (!Array.isArray(bricks)) {
|
|
255
|
-
return
|
|
256
|
+
return output;
|
|
256
257
|
}
|
|
258
|
+
let childrenOutput;
|
|
257
259
|
switch (brickName) {
|
|
258
260
|
case ":forEach":
|
|
259
261
|
{
|
|
260
262
|
if (!Array.isArray(computedDataSource)) {
|
|
261
|
-
|
|
263
|
+
break;
|
|
262
264
|
}
|
|
263
|
-
|
|
265
|
+
childrenOutput = await renderForEach(controlNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
|
|
266
|
+
break;
|
|
264
267
|
}
|
|
265
268
|
case ":if":
|
|
266
269
|
case ":switch":
|
|
267
270
|
{
|
|
268
|
-
|
|
271
|
+
childrenOutput = await renderBricks(controlNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
|
|
269
272
|
}
|
|
270
273
|
}
|
|
274
|
+
if (childrenOutput) {
|
|
275
|
+
controlNode.child = childrenOutput.node;
|
|
276
|
+
mergeRenderOutput(output, {
|
|
277
|
+
...childrenOutput,
|
|
278
|
+
node: undefined
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
return output;
|
|
271
282
|
};
|
|
272
283
|
const renderControlNode = async ({
|
|
273
284
|
type,
|
|
@@ -275,7 +286,6 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
275
286
|
tplStateStoreScope,
|
|
276
287
|
formStateStoreScope
|
|
277
288
|
}) => {
|
|
278
|
-
var _ref;
|
|
279
289
|
let changedAfterInitial = false;
|
|
280
290
|
const tracker = {
|
|
281
291
|
disposes: [],
|
|
@@ -310,14 +320,9 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
310
320
|
throw new Error(`Maximum rerender stack overflowed (iid: ${brickConf.iid})`);
|
|
311
321
|
}
|
|
312
322
|
}
|
|
313
|
-
(_ref = rawOutput).node ?? (_ref.node = {
|
|
314
|
-
tag: _enums.RenderTag.PLACEHOLDER,
|
|
315
|
-
return: returnNode,
|
|
316
|
-
tracking
|
|
317
|
-
});
|
|
318
323
|
return rawOutput;
|
|
319
324
|
};
|
|
320
|
-
|
|
325
|
+
let controlledOutput = await renderControlNode({
|
|
321
326
|
type: "initial",
|
|
322
327
|
runtimeContext
|
|
323
328
|
});
|
|
@@ -326,7 +331,6 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
326
331
|
onUnmount
|
|
327
332
|
} = brickConf.lifeCycle ?? {};
|
|
328
333
|
if (tracking) {
|
|
329
|
-
controlledOutput.hasTrackingControls = true;
|
|
330
334
|
let renderId = 0;
|
|
331
335
|
const listener = async () => {
|
|
332
336
|
const currentRenderId = ++renderId;
|
|
@@ -347,7 +351,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
347
351
|
}
|
|
348
352
|
}));
|
|
349
353
|
}
|
|
350
|
-
rendererContext.reRender(
|
|
354
|
+
rendererContext.reRender(returnNode, reControlledOutput.node, controlledOutput.node);
|
|
355
|
+
controlledOutput = reControlledOutput;
|
|
351
356
|
if (onMount) {
|
|
352
357
|
(0, _bindListeners.listenerFactory)(onMount, scopedRuntimeContext)(new CustomEvent("mount", {
|
|
353
358
|
detail: {
|
|
@@ -530,10 +535,16 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
530
535
|
return;
|
|
531
536
|
}
|
|
532
537
|
const routeSlotFromIndexToSlotId = new Map();
|
|
533
|
-
const rendered = await Promise.all(Object.entries(slots).map(([childSlotId, slotConf], index) => {
|
|
538
|
+
const rendered = await Promise.all(Object.entries(slots).map(async ([childSlotId, slotConf], index) => {
|
|
534
539
|
if (slotConf.type !== "routes") {
|
|
535
|
-
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack,
|
|
540
|
+
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, initialTracker);
|
|
536
541
|
}
|
|
542
|
+
let lastOutput = getEmptyRenderOutput();
|
|
543
|
+
const controlNode = {
|
|
544
|
+
tag: _enums.RenderTag.ABSTRACT,
|
|
545
|
+
return: brick
|
|
546
|
+
};
|
|
547
|
+
lastOutput.node = controlNode;
|
|
537
548
|
const parentRoute = parentRoutes[parentRoutes.length - 1];
|
|
538
549
|
if (parentRoute !== null && parentRoute !== void 0 && parentRoute.incrementalSubRoutes) {
|
|
539
550
|
routeSlotFromIndexToSlotId.set(index, childSlotId);
|
|
@@ -560,8 +571,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
560
571
|
let failed = false;
|
|
561
572
|
let incrementalOutput;
|
|
562
573
|
let scopedStores = [];
|
|
574
|
+
const newOutput = getEmptyRenderOutput();
|
|
575
|
+
const newControlNode = {
|
|
576
|
+
tag: _enums.RenderTag.ABSTRACT,
|
|
577
|
+
return: brick
|
|
578
|
+
};
|
|
579
|
+
newOutput.node = newControlNode;
|
|
563
580
|
try {
|
|
564
|
-
incrementalOutput = await renderRoutes(
|
|
581
|
+
incrementalOutput = await renderRoutes(newControlNode, slotConf.routes, scopedRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, true);
|
|
565
582
|
|
|
566
583
|
// Do not ignore incremental rendering even if all sub-routes are missed.
|
|
567
584
|
// Since parent route is matched.
|
|
@@ -573,11 +590,10 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
573
590
|
scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
|
|
574
591
|
await postAsyncRender(incrementalOutput, scopedRuntimeContext, [scopedRuntimeContext.ctxStore, ...scopedStores]);
|
|
575
592
|
}
|
|
576
|
-
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
577
593
|
} catch (error) {
|
|
578
594
|
// eslint-disable-next-line no-console
|
|
579
595
|
console.error("Incremental sub-router failed:", error);
|
|
580
|
-
const result = await rendererContext.reCatch(error,
|
|
596
|
+
const result = await rendererContext.reCatch(error, newControlNode);
|
|
581
597
|
if (!result) {
|
|
582
598
|
return true;
|
|
583
599
|
}
|
|
@@ -585,11 +601,16 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
585
601
|
failed,
|
|
586
602
|
output: incrementalOutput
|
|
587
603
|
} = result);
|
|
588
|
-
|
|
589
|
-
// Assert: no errors will be throw
|
|
590
|
-
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
591
604
|
}
|
|
592
|
-
|
|
605
|
+
newControlNode.child = incrementalOutput.node;
|
|
606
|
+
mergeRenderOutput(newOutput, {
|
|
607
|
+
...incrementalOutput,
|
|
608
|
+
node: undefined
|
|
609
|
+
});
|
|
610
|
+
// Assert: no errors will be throw
|
|
611
|
+
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
612
|
+
rendererContext.reRender(brick, newControlNode, lastOutput.node);
|
|
613
|
+
lastOutput = newOutput;
|
|
593
614
|
if (!failed) {
|
|
594
615
|
scopedRuntimeContext.ctxStore.mountAsyncData(incrementalOutput.route);
|
|
595
616
|
for (const store of scopedStores) {
|
|
@@ -601,7 +622,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
601
622
|
return true;
|
|
602
623
|
});
|
|
603
624
|
}
|
|
604
|
-
|
|
625
|
+
const routesOutput = await renderRoutes(controlNode, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
|
|
626
|
+
controlNode.child = routesOutput.node;
|
|
627
|
+
mergeRenderOutput(output, {
|
|
628
|
+
...routesOutput,
|
|
629
|
+
node: undefined
|
|
630
|
+
});
|
|
631
|
+
appendMenuRequestNode(menuRequestReturnNode, output.menuRequestNode = routesOutput.menuRequestNode);
|
|
632
|
+
return lastOutput;
|
|
605
633
|
}));
|
|
606
634
|
const childrenOutput = {
|
|
607
635
|
...output,
|
|
@@ -609,11 +637,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
609
637
|
blockingList: [],
|
|
610
638
|
menuRequestNode: undefined
|
|
611
639
|
};
|
|
612
|
-
rendered.forEach(
|
|
613
|
-
if (routeSlotFromIndexToSlotId.has(index)) {
|
|
614
|
-
// Memoize a render node before it's been merged.
|
|
615
|
-
rendererContext.memoize(routeSlotFromIndexToSlotId.get(index), [], item.node, brick);
|
|
616
|
-
}
|
|
640
|
+
rendered.forEach(item => {
|
|
617
641
|
mergeRenderOutput(childrenOutput, item);
|
|
618
642
|
mergeSiblingRenderMenuRequest(childrenOutput, item);
|
|
619
643
|
});
|
|
@@ -640,22 +664,18 @@ function ensureValidControlBrick(brick) {
|
|
|
640
664
|
throw new Error(`Unknown storyboard control node: "${brick}"`);
|
|
641
665
|
}
|
|
642
666
|
}
|
|
643
|
-
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack,
|
|
667
|
+
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
644
668
|
const output = getEmptyRenderOutput();
|
|
645
669
|
const size = dataSource.length;
|
|
646
|
-
const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map(
|
|
670
|
+
const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, {
|
|
647
671
|
...runtimeContext,
|
|
648
672
|
forEachItem: item,
|
|
649
673
|
forEachIndex: i,
|
|
650
674
|
forEachSize: size
|
|
651
|
-
}, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
675
|
+
}, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)))));
|
|
652
676
|
|
|
653
677
|
// 多层构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
654
|
-
rendered.flat().forEach(
|
|
655
|
-
if (item.hasTrackingControls) {
|
|
656
|
-
// Memoize a render node before it's been merged.
|
|
657
|
-
rendererContext.memoize(slotId, keyPath.concat(index), item.node, returnNode);
|
|
658
|
-
}
|
|
678
|
+
rendered.flat().forEach(item => {
|
|
659
679
|
mergeRenderOutput(output, item);
|
|
660
680
|
});
|
|
661
681
|
return output;
|
|
@@ -702,7 +722,6 @@ function mergeRenderOutput(output, newOutput) {
|
|
|
702
722
|
blockingList,
|
|
703
723
|
node,
|
|
704
724
|
menuRequestNode,
|
|
705
|
-
hasTrackingControls,
|
|
706
725
|
...rest
|
|
707
726
|
} = newOutput;
|
|
708
727
|
output.blockingList.push(...blockingList);
|