@vue/server-renderer 3.6.0-rc.10 → 3.6.0-rc.12
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/server-renderer.cjs.js +73 -30
- package/dist/server-renderer.cjs.prod.js +77 -32
- package/dist/server-renderer.d.ts +3 -2
- package/dist/server-renderer.esm-browser.js +315 -88
- package/dist/server-renderer.esm-browser.prod.js +2 -2
- package/dist/server-renderer.esm-bundler.js +75 -34
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/server-renderer v3.6.0-rc.
|
|
2
|
+
* @vue/server-renderer v3.6.0-rc.12
|
|
3
3
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
@@ -284,6 +284,7 @@ var internal_exports = /* @__PURE__ */ __exportAll({
|
|
|
284
284
|
ssrRenderClass: () => ssrRenderClass,
|
|
285
285
|
ssrRenderComponent: () => ssrRenderComponent,
|
|
286
286
|
ssrRenderDynamicAttr: () => ssrRenderDynamicAttr,
|
|
287
|
+
ssrRenderDynamicComponent: () => renderDynamicComponent,
|
|
287
288
|
ssrRenderDynamicModel: () => ssrRenderDynamicModel,
|
|
288
289
|
ssrRenderList: () => ssrRenderList,
|
|
289
290
|
ssrRenderSlot: () => ssrRenderSlot,
|
|
@@ -401,9 +402,17 @@ function findVaporSlot(children) {
|
|
|
401
402
|
}
|
|
402
403
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
403
404
|
const ctx = vnode.ctx;
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
for (const name in slots)
|
|
405
|
+
const slots = vnode.children;
|
|
406
|
+
if (vnode.shapeFlag & 32 && ctx && ctx.type.__vapor && slots._) {
|
|
407
|
+
for (const name in slots) {
|
|
408
|
+
const slot = slots[name];
|
|
409
|
+
if ((0, _vue_shared.isFunction)(slot) && !slot[rawVaporSlotKey]) {
|
|
410
|
+
const wrapped = (props, push, parent, scopeId) => push ? slot(props, push, parent, scopeId) : [(0, _vue_runtime_dom.renderSlot)({ [name]: slot }, name, props)];
|
|
411
|
+
slot[rawVaporSlotKey] = wrapped[rawVaporSlotKey] = slot;
|
|
412
|
+
wrapped._n = true;
|
|
413
|
+
slots[name] = wrapped;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
407
416
|
if (!ctx.appContext.vapor) ctx.appContext.vapor = vaporInterface;
|
|
408
417
|
}
|
|
409
418
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
@@ -414,15 +423,20 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
414
423
|
popWarningContext();
|
|
415
424
|
const hasAsyncSetup = (0, _vue_shared.isPromise)(res);
|
|
416
425
|
let prefetches = instance.sp;
|
|
417
|
-
|
|
426
|
+
let p;
|
|
427
|
+
if (hasAsyncSetup || prefetches) p = Promise.resolve(res).then(() => {
|
|
418
428
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
419
|
-
if (prefetches)
|
|
420
|
-
|
|
429
|
+
if (prefetches) try {
|
|
430
|
+
return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy))).catch(_vue_shared.NOOP);
|
|
431
|
+
} catch {}
|
|
432
|
+
}).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
421
433
|
else try {
|
|
422
434
|
return renderComponentSubTree(instance, slotScopeId);
|
|
423
435
|
} catch (err) {
|
|
424
|
-
|
|
436
|
+
p = Promise.reject(err);
|
|
425
437
|
}
|
|
438
|
+
p.catch(_vue_shared.NOOP);
|
|
439
|
+
return p;
|
|
426
440
|
}
|
|
427
441
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
428
442
|
pushWarningContext(instance.vnode);
|
|
@@ -505,8 +519,8 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
505
519
|
}
|
|
506
520
|
case VaporSlot: {
|
|
507
521
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
508
|
-
const { slot, outlets } = vnode.vs;
|
|
509
|
-
renderVaporOutlet(push, slot, vnode.props, outlets && outlets[0], parentComponent, slotScopeId);
|
|
522
|
+
const { slot, outlets, props } = vnode.vs;
|
|
523
|
+
renderVaporOutlet(push, slot, props || vnode.props, outlets && outlets[0], parentComponent, slotScopeId);
|
|
510
524
|
break;
|
|
511
525
|
}
|
|
512
526
|
default: if (shapeFlag & 1) renderElementVNode(push, vnode, parentComponent, slotScopeId);
|
|
@@ -524,7 +538,13 @@ function renderVaporOutlet(push, slot, props, outlet, parentComponent, slotScope
|
|
|
524
538
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
525
539
|
for (let i = 0; i < children.length; i++) renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);
|
|
526
540
|
}
|
|
527
|
-
function
|
|
541
|
+
function renderDynamicComponent(push, type, props, slots, parentComponent, slotScopeId) {
|
|
542
|
+
if ((0, _vue_shared.isString)(type) && type) {
|
|
543
|
+
const slot = slots && slots.default;
|
|
544
|
+
renderElementVNode(push, (0, _vue_runtime_dom.createVNode)(type, props), parentComponent, slotScopeId, slot && (() => slot(void 0, push, parentComponent, slotScopeId || "")));
|
|
545
|
+
} else renderVNode(push, (0, _vue_runtime_dom.createVNode)(type, props, slots), parentComponent, slotScopeId);
|
|
546
|
+
}
|
|
547
|
+
function renderElementVNode(push, vnode, parentComponent, slotScopeId, renderChildren) {
|
|
528
548
|
const tag = vnode.type;
|
|
529
549
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
530
550
|
let openTag = `<${tag}`;
|
|
@@ -552,19 +572,20 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
552
572
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
553
573
|
let hasChildrenOverride = false;
|
|
554
574
|
if (props) {
|
|
555
|
-
if (props.innerHTML) {
|
|
575
|
+
if (props.innerHTML != null) {
|
|
556
576
|
hasChildrenOverride = true;
|
|
557
|
-
push(props.innerHTML);
|
|
558
|
-
} else if (props.textContent) {
|
|
577
|
+
push(String(props.innerHTML));
|
|
578
|
+
} else if (props.textContent != null) {
|
|
559
579
|
hasChildrenOverride = true;
|
|
560
580
|
push((0, _vue_shared.escapeHtml)(props.textContent));
|
|
561
|
-
} else if (tag === "textarea" && props.value) {
|
|
581
|
+
} else if (tag === "textarea" && props.value != null) {
|
|
562
582
|
hasChildrenOverride = true;
|
|
563
583
|
push((0, _vue_shared.escapeHtml)(props.value));
|
|
564
584
|
}
|
|
565
585
|
}
|
|
566
586
|
if (!hasChildrenOverride) {
|
|
567
|
-
if (
|
|
587
|
+
if (renderChildren) renderChildren();
|
|
588
|
+
else if (shapeFlag & 8) push((0, _vue_shared.escapeHtml)(children));
|
|
568
589
|
else if (shapeFlag & 16) renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
569
590
|
}
|
|
570
591
|
push(`</${tag}>`);
|
|
@@ -639,13 +660,41 @@ async function renderToString(input, context = {}) {
|
|
|
639
660
|
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
640
661
|
vnode.appContext = input._context;
|
|
641
662
|
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
663
|
+
let buffer;
|
|
664
|
+
let result;
|
|
642
665
|
try {
|
|
643
|
-
|
|
666
|
+
buffer = await renderComponentVNode(vnode);
|
|
667
|
+
result = await unrollBuffer$1(buffer);
|
|
644
668
|
await resolveTeleports(context);
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
669
|
+
} catch (err) {
|
|
670
|
+
cleanupFailedRender(buffer, context);
|
|
671
|
+
throw err;
|
|
648
672
|
}
|
|
673
|
+
cleanupContext(context);
|
|
674
|
+
return result;
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Stops watchers without masking the render error. Components after the
|
|
678
|
+
* failure point are still in flight and can register watchers once the render
|
|
679
|
+
* has settled, so those are stopped when they finish.
|
|
680
|
+
* Cleanup errors here have already been reported by the watcher.
|
|
681
|
+
*/
|
|
682
|
+
function cleanupFailedRender(buffer, context) {
|
|
683
|
+
try {
|
|
684
|
+
cleanupContext(context);
|
|
685
|
+
} catch {}
|
|
686
|
+
(async () => {
|
|
687
|
+
if (buffer) await settleBuffer(buffer);
|
|
688
|
+
for (const key in context.__teleportBuffers) await settleBuffer(context.__teleportBuffers[key]);
|
|
689
|
+
cleanupContext(context);
|
|
690
|
+
})().catch(_vue_shared.NOOP);
|
|
691
|
+
}
|
|
692
|
+
async function settleBuffer(buffer) {
|
|
693
|
+
if (!buffer.hasAsync) return;
|
|
694
|
+
for (let item of buffer) try {
|
|
695
|
+
if ((0, _vue_shared.isPromise)(item)) item = await item;
|
|
696
|
+
if (!(0, _vue_shared.isString)(item)) await settleBuffer(item);
|
|
697
|
+
} catch {}
|
|
649
698
|
}
|
|
650
699
|
async function resolveTeleports(context) {
|
|
651
700
|
if (context.__teleportBuffers) {
|
|
@@ -677,19 +726,12 @@ function renderToSimpleStream(input, context, stream) {
|
|
|
677
726
|
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
678
727
|
vnode.appContext = input._context;
|
|
679
728
|
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
680
|
-
let
|
|
681
|
-
|
|
682
|
-
if (cleaned) return;
|
|
683
|
-
cleaned = true;
|
|
729
|
+
let buffer;
|
|
730
|
+
Promise.resolve().then(() => renderComponentVNode(vnode)).then((b) => unrollBuffer(buffer = b, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
684
731
|
cleanupContext(context);
|
|
685
|
-
};
|
|
686
|
-
Promise.resolve().then(() => renderComponentVNode(vnode)).then((buffer) => unrollBuffer(buffer, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
687
|
-
finalize();
|
|
688
732
|
return stream.push(null);
|
|
689
733
|
}).catch((error) => {
|
|
690
|
-
|
|
691
|
-
finalize();
|
|
692
|
-
} catch {}
|
|
734
|
+
cleanupFailedRender(buffer, context);
|
|
693
735
|
stream.destroy(error);
|
|
694
736
|
});
|
|
695
737
|
return stream;
|
|
@@ -780,6 +822,7 @@ exports.ssrRenderAttrs = ssrRenderAttrs;
|
|
|
780
822
|
exports.ssrRenderClass = ssrRenderClass;
|
|
781
823
|
exports.ssrRenderComponent = ssrRenderComponent;
|
|
782
824
|
exports.ssrRenderDynamicAttr = ssrRenderDynamicAttr;
|
|
825
|
+
exports.ssrRenderDynamicComponent = renderDynamicComponent;
|
|
783
826
|
exports.ssrRenderDynamicModel = ssrRenderDynamicModel;
|
|
784
827
|
exports.ssrRenderList = ssrRenderList;
|
|
785
828
|
exports.ssrRenderSlot = ssrRenderSlot;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/server-renderer v3.6.0-rc.
|
|
2
|
+
* @vue/server-renderer v3.6.0-rc.12
|
|
3
3
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
@@ -211,8 +211,10 @@ function ssrInterpolate(value) {
|
|
|
211
211
|
//#region packages/server-renderer/src/helpers/ssrRenderList.ts
|
|
212
212
|
function ssrRenderList(source, renderItem) {
|
|
213
213
|
if ((0, _vue_shared.isArray)(source) || (0, _vue_shared.isString)(source)) for (let i = 0, l = source.length; i < l; i++) renderItem(source[i], i);
|
|
214
|
-
else if (typeof source === "number")
|
|
215
|
-
|
|
214
|
+
else if (typeof source === "number") {
|
|
215
|
+
if (!Number.isInteger(source) || source < 0) return;
|
|
216
|
+
for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
217
|
+
} else if ((0, _vue_shared.isObject)(source)) {
|
|
216
218
|
if (source[Symbol.iterator]) {
|
|
217
219
|
let i = 0;
|
|
218
220
|
for (const item of source) renderItem(item, i++);
|
|
@@ -279,6 +281,7 @@ var internal_exports = /* @__PURE__ */ __exportAll({
|
|
|
279
281
|
ssrRenderClass: () => ssrRenderClass,
|
|
280
282
|
ssrRenderComponent: () => ssrRenderComponent,
|
|
281
283
|
ssrRenderDynamicAttr: () => ssrRenderDynamicAttr,
|
|
284
|
+
ssrRenderDynamicComponent: () => renderDynamicComponent,
|
|
282
285
|
ssrRenderDynamicModel: () => ssrRenderDynamicModel,
|
|
283
286
|
ssrRenderList: () => ssrRenderList,
|
|
284
287
|
ssrRenderSlot: () => ssrRenderSlot,
|
|
@@ -392,9 +395,17 @@ function findVaporSlot(children) {
|
|
|
392
395
|
}
|
|
393
396
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
394
397
|
const ctx = vnode.ctx;
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
for (const name in slots)
|
|
398
|
+
const slots = vnode.children;
|
|
399
|
+
if (vnode.shapeFlag & 32 && ctx && ctx.type.__vapor && slots._) {
|
|
400
|
+
for (const name in slots) {
|
|
401
|
+
const slot = slots[name];
|
|
402
|
+
if ((0, _vue_shared.isFunction)(slot) && !slot[rawVaporSlotKey]) {
|
|
403
|
+
const wrapped = (props, push, parent, scopeId) => push ? slot(props, push, parent, scopeId) : [(0, _vue_runtime_dom.renderSlot)({ [name]: slot }, name, props)];
|
|
404
|
+
slot[rawVaporSlotKey] = wrapped[rawVaporSlotKey] = slot;
|
|
405
|
+
wrapped._n = true;
|
|
406
|
+
slots[name] = wrapped;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
398
409
|
if (!ctx.appContext.vapor) ctx.appContext.vapor = vaporInterface;
|
|
399
410
|
}
|
|
400
411
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
@@ -403,15 +414,20 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
403
414
|
const res = setupComponent(instance, true);
|
|
404
415
|
const hasAsyncSetup = (0, _vue_shared.isPromise)(res);
|
|
405
416
|
let prefetches = instance.sp;
|
|
406
|
-
|
|
417
|
+
let p;
|
|
418
|
+
if (hasAsyncSetup || prefetches) p = Promise.resolve(res).then(() => {
|
|
407
419
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
408
|
-
if (prefetches)
|
|
409
|
-
|
|
420
|
+
if (prefetches) try {
|
|
421
|
+
return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy))).catch(_vue_shared.NOOP);
|
|
422
|
+
} catch {}
|
|
423
|
+
}).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
410
424
|
else try {
|
|
411
425
|
return renderComponentSubTree(instance, slotScopeId);
|
|
412
426
|
} catch (err) {
|
|
413
|
-
|
|
427
|
+
p = Promise.reject(err);
|
|
414
428
|
}
|
|
429
|
+
p.catch(_vue_shared.NOOP);
|
|
430
|
+
return p;
|
|
415
431
|
}
|
|
416
432
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
417
433
|
const comp = instance.type;
|
|
@@ -492,8 +508,8 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
492
508
|
}
|
|
493
509
|
case VaporSlot: {
|
|
494
510
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
495
|
-
const { slot, outlets } = vnode.vs;
|
|
496
|
-
renderVaporOutlet(push, slot, vnode.props, outlets && outlets[0], parentComponent, slotScopeId);
|
|
511
|
+
const { slot, outlets, props } = vnode.vs;
|
|
512
|
+
renderVaporOutlet(push, slot, props || vnode.props, outlets && outlets[0], parentComponent, slotScopeId);
|
|
497
513
|
break;
|
|
498
514
|
}
|
|
499
515
|
default: if (shapeFlag & 1) renderElementVNode(push, vnode, parentComponent, slotScopeId);
|
|
@@ -511,7 +527,13 @@ function renderVaporOutlet(push, slot, props, outlet, parentComponent, slotScope
|
|
|
511
527
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
512
528
|
for (let i = 0; i < children.length; i++) renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);
|
|
513
529
|
}
|
|
514
|
-
function
|
|
530
|
+
function renderDynamicComponent(push, type, props, slots, parentComponent, slotScopeId) {
|
|
531
|
+
if ((0, _vue_shared.isString)(type) && type) {
|
|
532
|
+
const slot = slots && slots.default;
|
|
533
|
+
renderElementVNode(push, (0, _vue_runtime_dom.createVNode)(type, props), parentComponent, slotScopeId, slot && (() => slot(void 0, push, parentComponent, slotScopeId || "")));
|
|
534
|
+
} else renderVNode(push, (0, _vue_runtime_dom.createVNode)(type, props, slots), parentComponent, slotScopeId);
|
|
535
|
+
}
|
|
536
|
+
function renderElementVNode(push, vnode, parentComponent, slotScopeId, renderChildren) {
|
|
515
537
|
const tag = vnode.type;
|
|
516
538
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
517
539
|
let openTag = `<${tag}`;
|
|
@@ -539,19 +561,20 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
539
561
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
540
562
|
let hasChildrenOverride = false;
|
|
541
563
|
if (props) {
|
|
542
|
-
if (props.innerHTML) {
|
|
564
|
+
if (props.innerHTML != null) {
|
|
543
565
|
hasChildrenOverride = true;
|
|
544
|
-
push(props.innerHTML);
|
|
545
|
-
} else if (props.textContent) {
|
|
566
|
+
push(String(props.innerHTML));
|
|
567
|
+
} else if (props.textContent != null) {
|
|
546
568
|
hasChildrenOverride = true;
|
|
547
569
|
push((0, _vue_shared.escapeHtml)(props.textContent));
|
|
548
|
-
} else if (tag === "textarea" && props.value) {
|
|
570
|
+
} else if (tag === "textarea" && props.value != null) {
|
|
549
571
|
hasChildrenOverride = true;
|
|
550
572
|
push((0, _vue_shared.escapeHtml)(props.value));
|
|
551
573
|
}
|
|
552
574
|
}
|
|
553
575
|
if (!hasChildrenOverride) {
|
|
554
|
-
if (
|
|
576
|
+
if (renderChildren) renderChildren();
|
|
577
|
+
else if (shapeFlag & 8) push((0, _vue_shared.escapeHtml)(children));
|
|
555
578
|
else if (shapeFlag & 16) renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
556
579
|
}
|
|
557
580
|
push(`</${tag}>`);
|
|
@@ -626,13 +649,41 @@ async function renderToString(input, context = {}) {
|
|
|
626
649
|
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
627
650
|
vnode.appContext = input._context;
|
|
628
651
|
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
652
|
+
let buffer;
|
|
653
|
+
let result;
|
|
629
654
|
try {
|
|
630
|
-
|
|
655
|
+
buffer = await renderComponentVNode(vnode);
|
|
656
|
+
result = await unrollBuffer$1(buffer);
|
|
631
657
|
await resolveTeleports(context);
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
658
|
+
} catch (err) {
|
|
659
|
+
cleanupFailedRender(buffer, context);
|
|
660
|
+
throw err;
|
|
635
661
|
}
|
|
662
|
+
cleanupContext(context);
|
|
663
|
+
return result;
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Stops watchers without masking the render error. Components after the
|
|
667
|
+
* failure point are still in flight and can register watchers once the render
|
|
668
|
+
* has settled, so those are stopped when they finish.
|
|
669
|
+
* Cleanup errors here have already been reported by the watcher.
|
|
670
|
+
*/
|
|
671
|
+
function cleanupFailedRender(buffer, context) {
|
|
672
|
+
try {
|
|
673
|
+
cleanupContext(context);
|
|
674
|
+
} catch {}
|
|
675
|
+
(async () => {
|
|
676
|
+
if (buffer) await settleBuffer(buffer);
|
|
677
|
+
for (const key in context.__teleportBuffers) await settleBuffer(context.__teleportBuffers[key]);
|
|
678
|
+
cleanupContext(context);
|
|
679
|
+
})().catch(_vue_shared.NOOP);
|
|
680
|
+
}
|
|
681
|
+
async function settleBuffer(buffer) {
|
|
682
|
+
if (!buffer.hasAsync) return;
|
|
683
|
+
for (let item of buffer) try {
|
|
684
|
+
if ((0, _vue_shared.isPromise)(item)) item = await item;
|
|
685
|
+
if (!(0, _vue_shared.isString)(item)) await settleBuffer(item);
|
|
686
|
+
} catch {}
|
|
636
687
|
}
|
|
637
688
|
async function resolveTeleports(context) {
|
|
638
689
|
if (context.__teleportBuffers) {
|
|
@@ -664,19 +715,12 @@ function renderToSimpleStream(input, context, stream) {
|
|
|
664
715
|
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
665
716
|
vnode.appContext = input._context;
|
|
666
717
|
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
667
|
-
let
|
|
668
|
-
|
|
669
|
-
if (cleaned) return;
|
|
670
|
-
cleaned = true;
|
|
718
|
+
let buffer;
|
|
719
|
+
Promise.resolve().then(() => renderComponentVNode(vnode)).then((b) => unrollBuffer(buffer = b, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
671
720
|
cleanupContext(context);
|
|
672
|
-
};
|
|
673
|
-
Promise.resolve().then(() => renderComponentVNode(vnode)).then((buffer) => unrollBuffer(buffer, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
674
|
-
finalize();
|
|
675
721
|
return stream.push(null);
|
|
676
722
|
}).catch((error) => {
|
|
677
|
-
|
|
678
|
-
finalize();
|
|
679
|
-
} catch {}
|
|
723
|
+
cleanupFailedRender(buffer, context);
|
|
680
724
|
stream.destroy(error);
|
|
681
725
|
});
|
|
682
726
|
return stream;
|
|
@@ -767,6 +811,7 @@ exports.ssrRenderAttrs = ssrRenderAttrs;
|
|
|
767
811
|
exports.ssrRenderClass = ssrRenderClass;
|
|
768
812
|
exports.ssrRenderComponent = ssrRenderComponent;
|
|
769
813
|
exports.ssrRenderDynamicAttr = ssrRenderDynamicAttr;
|
|
814
|
+
exports.ssrRenderDynamicComponent = renderDynamicComponent;
|
|
770
815
|
exports.ssrRenderDynamicModel = ssrRenderDynamicModel;
|
|
771
816
|
exports.ssrRenderList = ssrRenderList;
|
|
772
817
|
exports.ssrRenderSlot = ssrRenderSlot;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { App, Component, ComponentInternalInstance, ComponentPublicInstance, Directive, Slots, VNode } from "@vue/runtime-dom";
|
|
1
|
+
import { App, Component, ComponentInternalInstance, ComponentPublicInstance, Directive, Slots, VNode, VNodeTypes } from "@vue/runtime-dom";
|
|
2
2
|
import { Readable, Writable } from "node:stream";
|
|
3
3
|
import { includeBooleanAttr as ssrIncludeBooleanAttr } from "@vue/shared";
|
|
4
4
|
//#region temp/packages/server-renderer/src/render.d.ts
|
|
@@ -13,6 +13,7 @@ export type SSRContext = {
|
|
|
13
13
|
teleports?: Record<string, string>;
|
|
14
14
|
};
|
|
15
15
|
export declare function renderVNode(push: PushFn, vnode: VNode, parentComponent: ComponentInternalInstance, slotScopeId?: string): void;
|
|
16
|
+
export declare function renderDynamicComponent(push: PushFn, type: VNodeTypes, props: Props | null, slots: Record<string, any> | null, parentComponent: ComponentInternalInstance, slotScopeId?: string): void;
|
|
16
17
|
//#endregion
|
|
17
18
|
//#region temp/packages/server-renderer/src/renderToString.d.ts
|
|
18
19
|
export declare function renderToString(input: App | VNode, context?: SSRContext): Promise<string>;
|
|
@@ -73,4 +74,4 @@ export declare function ssrGetDynamicModelProps(existingProps: any | undefined,
|
|
|
73
74
|
value: any;
|
|
74
75
|
} | null;
|
|
75
76
|
//#endregion
|
|
76
|
-
export { ssrIncludeBooleanAttr, renderVNode as ssrRenderVNode };
|
|
77
|
+
export { ssrIncludeBooleanAttr, renderDynamicComponent as ssrRenderDynamicComponent, renderVNode as ssrRenderVNode };
|