@vue/server-renderer 3.6.0-beta.9 → 3.6.0-rc.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/server-renderer.cjs.js +60 -300
- package/dist/server-renderer.cjs.prod.js +58 -36
- package/dist/server-renderer.d.ts +3 -3
- package/dist/server-renderer.esm-browser.js +275 -117
- package/dist/server-renderer.esm-browser.prod.js +2 -2
- package/dist/server-renderer.esm-bundler.js +34 -789
- package/package.json +4 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/server-renderer v3.6.0-
|
|
2
|
+
* @vue/server-renderer v3.6.0-rc.2
|
|
3
3
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
@@ -38,8 +38,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
enumerable: true
|
|
39
39
|
}) : target, mod));
|
|
40
40
|
//#endregion
|
|
41
|
-
let
|
|
42
|
-
|
|
41
|
+
let _vue_runtime_dom = require("@vue/runtime-dom");
|
|
42
|
+
_vue_runtime_dom = __toESM(_vue_runtime_dom);
|
|
43
43
|
let _vue_shared = require("@vue/shared");
|
|
44
44
|
let _vue_compiler_ssr = require("@vue/compiler-ssr");
|
|
45
45
|
//#region packages/server-renderer/src/helpers/ssrRenderAttrs.ts
|
|
@@ -92,11 +92,16 @@ function ssrResetCssVars(raw) {
|
|
|
92
92
|
//#endregion
|
|
93
93
|
//#region packages/server-renderer/src/helpers/ssrRenderComponent.ts
|
|
94
94
|
function ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {
|
|
95
|
-
|
|
95
|
+
if ((0, _vue_shared.isString)(comp)) {
|
|
96
|
+
const { getBuffer, push } = createBuffer();
|
|
97
|
+
renderVNode(push, (0, _vue_runtime_dom.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
98
|
+
return getBuffer();
|
|
99
|
+
}
|
|
100
|
+
return renderComponentVNode((0, _vue_runtime_dom.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
96
101
|
}
|
|
97
102
|
//#endregion
|
|
98
103
|
//#region packages/server-renderer/src/helpers/ssrRenderSlot.ts
|
|
99
|
-
const { ensureValidVNode } =
|
|
104
|
+
const { ensureValidVNode } = _vue_runtime_dom.ssrUtils;
|
|
100
105
|
function ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {
|
|
101
106
|
push(`<!--[-->`);
|
|
102
107
|
ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);
|
|
@@ -149,7 +154,7 @@ function isComment(item) {
|
|
|
149
154
|
//#region packages/server-renderer/src/helpers/ssrRenderTeleport.ts
|
|
150
155
|
function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {
|
|
151
156
|
parentPush("<!--teleport start-->");
|
|
152
|
-
const context = parentComponent.appContext.provides[
|
|
157
|
+
const context = parentComponent.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
153
158
|
const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});
|
|
154
159
|
const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);
|
|
155
160
|
const bufferIndex = targetBuffer.length;
|
|
@@ -165,6 +170,7 @@ function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parent
|
|
|
165
170
|
teleportContent = getBuffer();
|
|
166
171
|
}
|
|
167
172
|
targetBuffer.splice(bufferIndex, 0, teleportContent);
|
|
173
|
+
if ((0, _vue_shared.isPromise)(teleportContent) || (0, _vue_shared.isArray)(teleportContent) && teleportContent.hasAsync) targetBuffer.hasAsync = true;
|
|
168
174
|
parentPush("<!--teleport end-->");
|
|
169
175
|
}
|
|
170
176
|
//#endregion
|
|
@@ -178,8 +184,8 @@ function ssrRenderList(source, renderItem) {
|
|
|
178
184
|
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);
|
|
179
185
|
else if (typeof source === "number") for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
180
186
|
else if ((0, _vue_shared.isObject)(source)) if (source[Symbol.iterator]) {
|
|
181
|
-
|
|
182
|
-
for (
|
|
187
|
+
let i = 0;
|
|
188
|
+
for (const item of source) renderItem(item, i++);
|
|
183
189
|
} else {
|
|
184
190
|
const keys = Object.keys(source);
|
|
185
191
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -190,7 +196,7 @@ function ssrRenderList(source, renderItem) {
|
|
|
190
196
|
}
|
|
191
197
|
//#endregion
|
|
192
198
|
//#region packages/server-renderer/src/helpers/ssrRenderSuspense.ts
|
|
193
|
-
|
|
199
|
+
function ssrRenderSuspense(push, { default: renderContent }) {
|
|
194
200
|
if (renderContent) renderContent();
|
|
195
201
|
else push(`<!---->`);
|
|
196
202
|
}
|
|
@@ -199,7 +205,7 @@ async function ssrRenderSuspense(push, { default: renderContent }) {
|
|
|
199
205
|
function ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {
|
|
200
206
|
if (typeof dir !== "function" && dir.getSSRProps) return dir.getSSRProps({
|
|
201
207
|
dir,
|
|
202
|
-
instance:
|
|
208
|
+
instance: _vue_runtime_dom.ssrUtils.getComponentPublicInstance(instance.$),
|
|
203
209
|
value,
|
|
204
210
|
oldValue: void 0,
|
|
205
211
|
arg,
|
|
@@ -277,7 +283,7 @@ function ssrCompile(template, instance) {
|
|
|
277
283
|
};
|
|
278
284
|
const { code } = (0, _vue_compiler_ssr.compile)(template, finalCompilerOptions);
|
|
279
285
|
const requireMap = {
|
|
280
|
-
vue,
|
|
286
|
+
vue: _vue_runtime_dom,
|
|
281
287
|
"vue/server-renderer": internal_exports
|
|
282
288
|
};
|
|
283
289
|
const fakeRequire = (id) => requireMap[id];
|
|
@@ -285,7 +291,7 @@ function ssrCompile(template, instance) {
|
|
|
285
291
|
}
|
|
286
292
|
//#endregion
|
|
287
293
|
//#region packages/server-renderer/src/render.ts
|
|
288
|
-
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } =
|
|
294
|
+
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } = _vue_runtime_dom.ssrUtils;
|
|
289
295
|
function cleanupContext(context) {
|
|
290
296
|
let firstError;
|
|
291
297
|
if (context.__watcherHandles) {
|
|
@@ -327,7 +333,7 @@ function createBuffer() {
|
|
|
327
333
|
}
|
|
328
334
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
329
335
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
330
|
-
const context = instance.appContext.provides[
|
|
336
|
+
const context = instance.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
331
337
|
if (context) (context.__instanceScopes || (context.__instanceScopes = [])).push(instance.scope);
|
|
332
338
|
const res = setupComponent(instance, true);
|
|
333
339
|
const hasAsyncSetup = (0, _vue_shared.isPromise)(res);
|
|
@@ -336,7 +342,11 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
336
342
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
337
343
|
if (prefetches) return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy)));
|
|
338
344
|
}).catch(_vue_shared.NOOP).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
339
|
-
else
|
|
345
|
+
else try {
|
|
346
|
+
return renderComponentSubTree(instance, slotScopeId);
|
|
347
|
+
} catch (err) {
|
|
348
|
+
return Promise.reject(err);
|
|
349
|
+
}
|
|
340
350
|
}
|
|
341
351
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
342
352
|
const comp = instance.type;
|
|
@@ -375,12 +385,14 @@ function renderComponentSubTree(instance, slotScopeId) {
|
|
|
375
385
|
const prev = setCurrentRenderingInstance(instance);
|
|
376
386
|
try {
|
|
377
387
|
ssrRender(instance.proxy, push, instance, attrs, instance.props, instance.setupState, instance.data, instance.ctx);
|
|
388
|
+
} catch (err) {
|
|
389
|
+
(0, _vue_runtime_dom.handleError)(err, instance, 1);
|
|
378
390
|
} finally {
|
|
379
391
|
setCurrentRenderingInstance(prev);
|
|
380
392
|
}
|
|
381
393
|
} else if (instance.render && instance.render !== _vue_shared.NOOP) renderVNode(push, instance.subTree = renderComponentRoot(instance), instance, slotScopeId);
|
|
382
394
|
else {
|
|
383
|
-
(0,
|
|
395
|
+
(0, _vue_runtime_dom.warn)(`Component ${comp.name || comp.__file || `<Anonymous>`} is missing template or render function.`);
|
|
384
396
|
push(`<!---->`);
|
|
385
397
|
}
|
|
386
398
|
}
|
|
@@ -390,16 +402,16 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
390
402
|
const { type, shapeFlag, children, dirs, props } = vnode;
|
|
391
403
|
if (dirs) vnode.props = applySSRDirectives(vnode, props, dirs);
|
|
392
404
|
switch (type) {
|
|
393
|
-
case
|
|
405
|
+
case _vue_runtime_dom.Text:
|
|
394
406
|
push((0, _vue_shared.escapeHtml)(children));
|
|
395
407
|
break;
|
|
396
|
-
case
|
|
408
|
+
case _vue_runtime_dom.Comment:
|
|
397
409
|
push(children ? `<!--${(0, _vue_shared.escapeHtmlComment)(children)}-->` : `<!---->`);
|
|
398
410
|
break;
|
|
399
|
-
case
|
|
411
|
+
case _vue_runtime_dom.Static:
|
|
400
412
|
push(children);
|
|
401
413
|
break;
|
|
402
|
-
case
|
|
414
|
+
case _vue_runtime_dom.Fragment:
|
|
403
415
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
404
416
|
push(`<!--[-->`);
|
|
405
417
|
renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
@@ -409,7 +421,7 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
409
421
|
else if (shapeFlag & 6) push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
410
422
|
else if (shapeFlag & 64) renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
411
423
|
else if (shapeFlag & 128) renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
412
|
-
else (0,
|
|
424
|
+
else (0, _vue_runtime_dom.warn)("[@vue/server-renderer] Invalid VNode type:", type, `(${typeof type})`);
|
|
413
425
|
}
|
|
414
426
|
}
|
|
415
427
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
@@ -420,15 +432,25 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
420
432
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
421
433
|
let openTag = `<${tag}`;
|
|
422
434
|
if (props) openTag += ssrRenderAttrs(props, tag);
|
|
423
|
-
|
|
435
|
+
const renderedScopeIds = [];
|
|
436
|
+
const appendScopeId = (id) => {
|
|
437
|
+
if (id && (!props || !(0, _vue_shared.hasOwn)(props, id)) && !renderedScopeIds.includes(id)) {
|
|
438
|
+
openTag += ` ${id}`;
|
|
439
|
+
renderedScopeIds.push(id);
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
if (scopeId) appendScopeId(scopeId);
|
|
424
443
|
let curParent = parentComponent;
|
|
425
444
|
let curVnode = vnode;
|
|
426
445
|
while (curParent && curVnode === curParent.subTree) {
|
|
427
446
|
curVnode = curParent.vnode;
|
|
428
|
-
if (curVnode.scopeId)
|
|
447
|
+
if (curVnode.scopeId) appendScopeId(curVnode.scopeId);
|
|
429
448
|
curParent = curParent.parent;
|
|
430
449
|
}
|
|
431
|
-
if (slotScopeId)
|
|
450
|
+
if (slotScopeId) {
|
|
451
|
+
const slotScopeIdList = slotScopeId.trim().split(" ");
|
|
452
|
+
for (let i = 0; i < slotScopeIdList.length; i++) appendScopeId(slotScopeIdList[i]);
|
|
453
|
+
}
|
|
432
454
|
push(openTag + `>`);
|
|
433
455
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
434
456
|
let hasChildrenOverride = false;
|
|
@@ -461,17 +483,17 @@ function applySSRDirectives(vnode, rawProps, dirs) {
|
|
|
461
483
|
if (props) toMerge.push(props);
|
|
462
484
|
}
|
|
463
485
|
}
|
|
464
|
-
return (0,
|
|
486
|
+
return (0, _vue_runtime_dom.mergeProps)(rawProps || {}, ...toMerge);
|
|
465
487
|
}
|
|
466
488
|
function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
467
489
|
const target = vnode.props && vnode.props.to;
|
|
468
490
|
const disabled = vnode.props && vnode.props.disabled;
|
|
469
491
|
if (!target) {
|
|
470
|
-
if (!disabled) (0,
|
|
492
|
+
if (!disabled) (0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport is missing target prop.`);
|
|
471
493
|
return [];
|
|
472
494
|
}
|
|
473
495
|
if (!(0, _vue_shared.isString)(target)) {
|
|
474
|
-
(0,
|
|
496
|
+
(0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport target must be a query selector string.`);
|
|
475
497
|
return [];
|
|
476
498
|
}
|
|
477
499
|
ssrRenderTeleport(push, (push) => {
|
|
@@ -480,7 +502,7 @@ function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
480
502
|
}
|
|
481
503
|
//#endregion
|
|
482
504
|
//#region packages/server-renderer/src/renderToString.ts
|
|
483
|
-
const { isVNode: isVNode$1 } =
|
|
505
|
+
const { isVNode: isVNode$1 } = _vue_runtime_dom.ssrUtils;
|
|
484
506
|
function nestedUnrollBuffer(buffer, parentRet, startIndex) {
|
|
485
507
|
if (!buffer.hasAsync) return parentRet + unrollBufferSync$1(buffer);
|
|
486
508
|
let ret = parentRet;
|
|
@@ -516,10 +538,10 @@ function unrollBufferSync$1(buffer) {
|
|
|
516
538
|
return ret;
|
|
517
539
|
}
|
|
518
540
|
async function renderToString(input, context = {}) {
|
|
519
|
-
if (isVNode$1(input)) return renderToString((0,
|
|
520
|
-
const vnode = (0,
|
|
541
|
+
if (isVNode$1(input)) return renderToString((0, _vue_runtime_dom.createApp)({ render: () => input }), context);
|
|
542
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
521
543
|
vnode.appContext = input._context;
|
|
522
|
-
input.provide(
|
|
544
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
523
545
|
try {
|
|
524
546
|
const result = await unrollBuffer$1(await renderComponentVNode(vnode));
|
|
525
547
|
await resolveTeleports(context);
|
|
@@ -531,12 +553,12 @@ async function renderToString(input, context = {}) {
|
|
|
531
553
|
async function resolveTeleports(context) {
|
|
532
554
|
if (context.__teleportBuffers) {
|
|
533
555
|
context.teleports = context.teleports || {};
|
|
534
|
-
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(
|
|
556
|
+
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(context.__teleportBuffers[key]);
|
|
535
557
|
}
|
|
536
558
|
}
|
|
537
559
|
//#endregion
|
|
538
560
|
//#region packages/server-renderer/src/renderToStream.ts
|
|
539
|
-
const { isVNode } =
|
|
561
|
+
const { isVNode } = _vue_runtime_dom.ssrUtils;
|
|
540
562
|
async function unrollBuffer(buffer, stream) {
|
|
541
563
|
if (buffer.hasAsync) for (let i = 0; i < buffer.length; i++) {
|
|
542
564
|
let item = buffer[i];
|
|
@@ -554,10 +576,10 @@ function unrollBufferSync(buffer, stream) {
|
|
|
554
576
|
}
|
|
555
577
|
}
|
|
556
578
|
function renderToSimpleStream(input, context, stream) {
|
|
557
|
-
if (isVNode(input)) return renderToSimpleStream((0,
|
|
558
|
-
const vnode = (0,
|
|
579
|
+
if (isVNode(input)) return renderToSimpleStream((0, _vue_runtime_dom.createApp)({ render: () => input }), context, stream);
|
|
580
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
559
581
|
vnode.appContext = input._context;
|
|
560
|
-
input.provide(
|
|
582
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
561
583
|
let cleaned = false;
|
|
562
584
|
const finalize = () => {
|
|
563
585
|
if (cleaned) return;
|
|
@@ -641,7 +663,7 @@ function pipeToWebWritable(input, context = {}, writable) {
|
|
|
641
663
|
}
|
|
642
664
|
//#endregion
|
|
643
665
|
//#region packages/server-renderer/src/index.ts
|
|
644
|
-
(0,
|
|
666
|
+
(0, _vue_runtime_dom.initDirectivesForSSR)();
|
|
645
667
|
//#endregion
|
|
646
668
|
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
647
669
|
exports.pipeToWebWritable = pipeToWebWritable;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { App, Component, ComponentInternalInstance, ComponentPublicInstance, Directive, Slots, VNode } from "vue";
|
|
1
|
+
import { App, Component, ComponentInternalInstance, ComponentPublicInstance, Directive, Slots, VNode } from "@vue/runtime-dom";
|
|
2
2
|
import { Readable, Writable } from "node:stream";
|
|
3
3
|
import { includeBooleanAttr as ssrIncludeBooleanAttr } from "@vue/shared";
|
|
4
4
|
|
|
@@ -40,7 +40,7 @@ export declare function ssrRenderSlot(slots: Slots | SSRSlots, slotName: string,
|
|
|
40
40
|
export declare function ssrRenderSlotInner(slots: Slots | SSRSlots, slotName: string, slotProps: Props, fallbackRenderFn: (() => void) | null, push: PushFn, parentComponent: ComponentInternalInstance, slotScopeId?: string, transition?: boolean): void;
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region temp/packages/server-renderer/src/helpers/ssrRenderComponent.d.ts
|
|
43
|
-
export declare function ssrRenderComponent(comp: Component, props?: Props | null, children?: Slots | SSRSlots | null, parentComponent?: ComponentInternalInstance | null, slotScopeId?: string): SSRBuffer | Promise<SSRBuffer>;
|
|
43
|
+
export declare function ssrRenderComponent(comp: Component | string, props?: Props | null, children?: Slots | SSRSlots | null, parentComponent?: ComponentInternalInstance | null, slotScopeId?: string): SSRBuffer | Promise<SSRBuffer>;
|
|
44
44
|
//#endregion
|
|
45
45
|
//#region temp/packages/server-renderer/src/helpers/ssrRenderTeleport.d.ts
|
|
46
46
|
export declare function ssrRenderTeleport(parentPush: PushFn, contentRenderFn: (push: PushFn) => void, target: string, disabled: boolean, parentComponent: ComponentInternalInstance): void;
|
|
@@ -61,7 +61,7 @@ export declare function ssrRenderList(source: unknown, renderItem: (value: unkno
|
|
|
61
61
|
//#region temp/packages/server-renderer/src/helpers/ssrRenderSuspense.d.ts
|
|
62
62
|
export declare function ssrRenderSuspense(push: PushFn, {
|
|
63
63
|
default: renderContent
|
|
64
|
-
}: Record<string, (() => void) | undefined>):
|
|
64
|
+
}: Record<string, (() => void) | undefined>): void;
|
|
65
65
|
//#endregion
|
|
66
66
|
//#region temp/packages/server-renderer/src/helpers/ssrGetDirectiveProps.d.ts
|
|
67
67
|
export declare function ssrGetDirectiveProps(instance: ComponentPublicInstance, dir: Directive, value?: any, arg?: string, modifiers?: Record<string, boolean>): Record<string, any>;
|