@next-core/runtime 1.62.0 → 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/Runtime.js +2 -2
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/cjs/internal/compute/getNextStateOfUseBrick.js +1 -0
- package/dist/cjs/internal/compute/getNextStateOfUseBrick.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/Runtime.js +2 -2
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/compute/getNextStateOfUseBrick.js +1 -0
- package/dist/esm/internal/compute/getNextStateOfUseBrick.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/dist/types/tsdoc-metadata.json +1 -1
- package/package.json +12 -12
|
@@ -101,7 +101,7 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
|
|
|
101
101
|
if (route.type === "routes") {
|
|
102
102
|
newOutput = await renderRoutes(returnNode, route.routes, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
103
103
|
} else {
|
|
104
|
-
newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined,
|
|
104
|
+
newOutput = await renderBricks(returnNode, route.bricks, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
105
105
|
}
|
|
106
106
|
mergeRenderOutput(output, newOutput);
|
|
107
107
|
appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);
|
|
@@ -110,27 +110,21 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
|
|
|
110
110
|
}
|
|
111
111
|
return output;
|
|
112
112
|
}
|
|
113
|
-
export async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack,
|
|
113
|
+
export async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
114
114
|
setupRootRuntimeContext(bricks, runtimeContext, true);
|
|
115
115
|
const output = getEmptyRenderOutput();
|
|
116
|
-
const kPath = keyPath !== null && keyPath !== void 0 ? keyPath : [];
|
|
117
116
|
// 多个构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
118
|
-
const rendered = await Promise.all(bricks.map(
|
|
119
|
-
rendered.forEach(
|
|
120
|
-
if (item.hasTrackingControls) {
|
|
121
|
-
// Memoize a render node before it's been merged.
|
|
122
|
-
rendererContext.memoize(slotId, kPath.concat(index), item.node, returnNode);
|
|
123
|
-
}
|
|
117
|
+
const rendered = await Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)));
|
|
118
|
+
rendered.forEach(item => {
|
|
124
119
|
mergeRenderOutput(output, item);
|
|
125
120
|
});
|
|
126
121
|
return output;
|
|
127
122
|
}
|
|
128
123
|
export async function renderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId) {
|
|
129
|
-
let
|
|
130
|
-
let
|
|
131
|
-
let initialTracker = arguments.length > 9 ? arguments[9] : undefined;
|
|
124
|
+
let tplStack = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : new Map();
|
|
125
|
+
let initialTracker = arguments.length > 8 ? arguments[8] : undefined;
|
|
132
126
|
try {
|
|
133
|
-
return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
127
|
+
return await legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
|
|
134
128
|
} catch (error) {
|
|
135
129
|
if (brickConf.errorBoundary) {
|
|
136
130
|
// eslint-disable-next-line no-console
|
|
@@ -144,7 +138,7 @@ export async function renderBrick(returnNode, brickConf, _runtimeContext, render
|
|
|
144
138
|
}
|
|
145
139
|
}
|
|
146
140
|
}
|
|
147
|
-
async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
141
|
+
async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
148
142
|
var _hooks$checkPermissio2, _runtimeContext$app;
|
|
149
143
|
const output = getEmptyRenderOutput();
|
|
150
144
|
if (!brickConf.brick) {
|
|
@@ -182,7 +176,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
182
176
|
...acc,
|
|
183
177
|
[symbol]: brickConf[symbol]
|
|
184
178
|
}), {})
|
|
185
|
-
}, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
179
|
+
}, _runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker);
|
|
186
180
|
}
|
|
187
181
|
const tplStateStoreId = brickConf[symbolForTplStateStoreId];
|
|
188
182
|
const formStateStoreId = brickConf[symbolForFormStateStoreId];
|
|
@@ -244,26 +238,41 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
244
238
|
|
|
245
239
|
// Then, get the bricks in that matched slot.
|
|
246
240
|
const bricks = slots && hasOwnProperty(slots, slot) && ((_slots$slot = slots[slot]) === null || _slots$slot === void 0 ? void 0 : _slots$slot.bricks);
|
|
241
|
+
const output = getEmptyRenderOutput();
|
|
242
|
+
const controlNode = {
|
|
243
|
+
tag: RenderTag.ABSTRACT,
|
|
244
|
+
return: returnNode
|
|
245
|
+
};
|
|
246
|
+
output.node = controlNode;
|
|
247
247
|
if (!Array.isArray(bricks)) {
|
|
248
|
-
return
|
|
248
|
+
return output;
|
|
249
249
|
}
|
|
250
|
+
let childrenOutput;
|
|
250
251
|
switch (brickName) {
|
|
251
252
|
case ":forEach":
|
|
252
253
|
{
|
|
253
254
|
if (!Array.isArray(computedDataSource)) {
|
|
254
|
-
|
|
255
|
+
break;
|
|
255
256
|
}
|
|
256
|
-
|
|
257
|
+
childrenOutput = await renderForEach(controlNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
|
|
258
|
+
break;
|
|
257
259
|
}
|
|
258
260
|
case ":if":
|
|
259
261
|
case ":switch":
|
|
260
262
|
{
|
|
261
|
-
|
|
263
|
+
childrenOutput = await renderBricks(controlNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
|
|
262
264
|
}
|
|
263
265
|
}
|
|
266
|
+
if (childrenOutput) {
|
|
267
|
+
controlNode.child = childrenOutput.node;
|
|
268
|
+
mergeRenderOutput(output, {
|
|
269
|
+
...childrenOutput,
|
|
270
|
+
node: undefined
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return output;
|
|
264
274
|
};
|
|
265
275
|
const renderControlNode = async _ref => {
|
|
266
|
-
var _ref2, _ref2$node;
|
|
267
276
|
let {
|
|
268
277
|
type,
|
|
269
278
|
runtimeContext,
|
|
@@ -304,14 +313,9 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
304
313
|
throw new Error(`Maximum rerender stack overflowed (iid: ${brickConf.iid})`);
|
|
305
314
|
}
|
|
306
315
|
}
|
|
307
|
-
(_ref2$node = (_ref2 = rawOutput).node) !== null && _ref2$node !== void 0 ? _ref2$node : _ref2.node = {
|
|
308
|
-
tag: RenderTag.PLACEHOLDER,
|
|
309
|
-
return: returnNode,
|
|
310
|
-
tracking
|
|
311
|
-
};
|
|
312
316
|
return rawOutput;
|
|
313
317
|
};
|
|
314
|
-
|
|
318
|
+
let controlledOutput = await renderControlNode({
|
|
315
319
|
type: "initial",
|
|
316
320
|
runtimeContext
|
|
317
321
|
});
|
|
@@ -321,7 +325,6 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
321
325
|
} = (_brickConf$lifeCycle = brickConf.lifeCycle) !== null && _brickConf$lifeCycle !== void 0 ? _brickConf$lifeCycle : {};
|
|
322
326
|
if (tracking) {
|
|
323
327
|
var _runtimeBrick$dispose;
|
|
324
|
-
controlledOutput.hasTrackingControls = true;
|
|
325
328
|
let renderId = 0;
|
|
326
329
|
const listener = async () => {
|
|
327
330
|
const currentRenderId = ++renderId;
|
|
@@ -342,7 +345,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
342
345
|
}
|
|
343
346
|
}));
|
|
344
347
|
}
|
|
345
|
-
rendererContext.reRender(
|
|
348
|
+
rendererContext.reRender(returnNode, reControlledOutput.node, controlledOutput.node);
|
|
349
|
+
controlledOutput = reControlledOutput;
|
|
346
350
|
if (onMount) {
|
|
347
351
|
listenerFactory(onMount, scopedRuntimeContext)(new CustomEvent("mount", {
|
|
348
352
|
detail: {
|
|
@@ -527,11 +531,17 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
527
531
|
return;
|
|
528
532
|
}
|
|
529
533
|
const routeSlotFromIndexToSlotId = new Map();
|
|
530
|
-
const rendered = await Promise.all(Object.entries(slots).map((
|
|
531
|
-
let [childSlotId, slotConf] =
|
|
534
|
+
const rendered = await Promise.all(Object.entries(slots).map(async (_ref2, index) => {
|
|
535
|
+
let [childSlotId, slotConf] = _ref2;
|
|
532
536
|
if (slotConf.type !== "routes") {
|
|
533
|
-
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack,
|
|
537
|
+
return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, initialTracker);
|
|
534
538
|
}
|
|
539
|
+
let lastOutput = getEmptyRenderOutput();
|
|
540
|
+
const controlNode = {
|
|
541
|
+
tag: RenderTag.ABSTRACT,
|
|
542
|
+
return: brick
|
|
543
|
+
};
|
|
544
|
+
lastOutput.node = controlNode;
|
|
535
545
|
const parentRoute = parentRoutes[parentRoutes.length - 1];
|
|
536
546
|
if (parentRoute !== null && parentRoute !== void 0 && parentRoute.incrementalSubRoutes) {
|
|
537
547
|
routeSlotFromIndexToSlotId.set(index, childSlotId);
|
|
@@ -558,8 +568,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
558
568
|
let failed = false;
|
|
559
569
|
let incrementalOutput;
|
|
560
570
|
let scopedStores = [];
|
|
571
|
+
const newOutput = getEmptyRenderOutput();
|
|
572
|
+
const newControlNode = {
|
|
573
|
+
tag: RenderTag.ABSTRACT,
|
|
574
|
+
return: brick
|
|
575
|
+
};
|
|
576
|
+
newOutput.node = newControlNode;
|
|
561
577
|
try {
|
|
562
|
-
incrementalOutput = await renderRoutes(
|
|
578
|
+
incrementalOutput = await renderRoutes(newControlNode, slotConf.routes, scopedRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, true);
|
|
563
579
|
|
|
564
580
|
// Do not ignore incremental rendering even if all sub-routes are missed.
|
|
565
581
|
// Since parent route is matched.
|
|
@@ -571,11 +587,10 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
571
587
|
scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
|
|
572
588
|
await postAsyncRender(incrementalOutput, scopedRuntimeContext, [scopedRuntimeContext.ctxStore, ...scopedStores]);
|
|
573
589
|
}
|
|
574
|
-
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
575
590
|
} catch (error) {
|
|
576
591
|
// eslint-disable-next-line no-console
|
|
577
592
|
console.error("Incremental sub-router failed:", error);
|
|
578
|
-
const result = await rendererContext.reCatch(error,
|
|
593
|
+
const result = await rendererContext.reCatch(error, newControlNode);
|
|
579
594
|
if (!result) {
|
|
580
595
|
return true;
|
|
581
596
|
}
|
|
@@ -583,11 +598,16 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
583
598
|
failed,
|
|
584
599
|
output: incrementalOutput
|
|
585
600
|
} = result);
|
|
586
|
-
|
|
587
|
-
// Assert: no errors will be throw
|
|
588
|
-
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
589
601
|
}
|
|
590
|
-
|
|
602
|
+
newControlNode.child = incrementalOutput.node;
|
|
603
|
+
mergeRenderOutput(newOutput, {
|
|
604
|
+
...incrementalOutput,
|
|
605
|
+
node: undefined
|
|
606
|
+
});
|
|
607
|
+
// Assert: no errors will be throw
|
|
608
|
+
await rendererContext.reMergeMenuRequestNodes(menuRequestReturnNode, slotConf.routes, incrementalOutput.menuRequestNode);
|
|
609
|
+
rendererContext.reRender(brick, newControlNode, lastOutput.node);
|
|
610
|
+
lastOutput = newOutput;
|
|
591
611
|
if (!failed) {
|
|
592
612
|
scopedRuntimeContext.ctxStore.mountAsyncData(incrementalOutput.route);
|
|
593
613
|
for (const store of scopedStores) {
|
|
@@ -599,7 +619,14 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
599
619
|
return true;
|
|
600
620
|
});
|
|
601
621
|
}
|
|
602
|
-
|
|
622
|
+
const routesOutput = await renderRoutes(controlNode, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
|
|
623
|
+
controlNode.child = routesOutput.node;
|
|
624
|
+
mergeRenderOutput(output, {
|
|
625
|
+
...routesOutput,
|
|
626
|
+
node: undefined
|
|
627
|
+
});
|
|
628
|
+
appendMenuRequestNode(menuRequestReturnNode, output.menuRequestNode = routesOutput.menuRequestNode);
|
|
629
|
+
return lastOutput;
|
|
603
630
|
}));
|
|
604
631
|
const childrenOutput = {
|
|
605
632
|
...output,
|
|
@@ -607,11 +634,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
607
634
|
blockingList: [],
|
|
608
635
|
menuRequestNode: undefined
|
|
609
636
|
};
|
|
610
|
-
rendered.forEach(
|
|
611
|
-
if (routeSlotFromIndexToSlotId.has(index)) {
|
|
612
|
-
// Memoize a render node before it's been merged.
|
|
613
|
-
rendererContext.memoize(routeSlotFromIndexToSlotId.get(index), [], item.node, brick);
|
|
614
|
-
}
|
|
637
|
+
rendered.forEach(item => {
|
|
615
638
|
mergeRenderOutput(childrenOutput, item);
|
|
616
639
|
mergeSiblingRenderMenuRequest(childrenOutput, item);
|
|
617
640
|
});
|
|
@@ -638,22 +661,18 @@ function ensureValidControlBrick(brick) {
|
|
|
638
661
|
throw new Error(`Unknown storyboard control node: "${brick}"`);
|
|
639
662
|
}
|
|
640
663
|
}
|
|
641
|
-
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack,
|
|
664
|
+
async function renderForEach(returnNode, dataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, initialTracker) {
|
|
642
665
|
const output = getEmptyRenderOutput();
|
|
643
666
|
const size = dataSource.length;
|
|
644
|
-
const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map(
|
|
667
|
+
const rendered = await Promise.all(dataSource.map((item, i) => Promise.all(bricks.map(brickConf => renderBrick(returnNode, brickConf, {
|
|
645
668
|
...runtimeContext,
|
|
646
669
|
forEachItem: item,
|
|
647
670
|
forEachIndex: i,
|
|
648
671
|
forEachSize: size
|
|
649
|
-
}, rendererContext, parentRoutes, menuRequestReturnNode, slotId,
|
|
672
|
+
}, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack && new Map(tplStack), initialTracker)))));
|
|
650
673
|
|
|
651
674
|
// 多层构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
652
|
-
rendered.flat().forEach(
|
|
653
|
-
if (item.hasTrackingControls) {
|
|
654
|
-
// Memoize a render node before it's been merged.
|
|
655
|
-
rendererContext.memoize(slotId, keyPath.concat(index), item.node, returnNode);
|
|
656
|
-
}
|
|
675
|
+
rendered.flat().forEach(item => {
|
|
657
676
|
mergeRenderOutput(output, item);
|
|
658
677
|
});
|
|
659
678
|
return output;
|
|
@@ -700,7 +719,6 @@ function mergeRenderOutput(output, newOutput) {
|
|
|
700
719
|
blockingList,
|
|
701
720
|
node,
|
|
702
721
|
menuRequestNode,
|
|
703
|
-
hasTrackingControls,
|
|
704
722
|
...rest
|
|
705
723
|
} = newOutput;
|
|
706
724
|
output.blockingList.push(...blockingList);
|