@vue/server-renderer 3.6.0-beta.9 → 3.6.0-rc.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.
- 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 +251 -102
- 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.1
|
|
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
|
|
@@ -173,280 +179,18 @@ function ssrInterpolate(value) {
|
|
|
173
179
|
return (0, _vue_shared.escapeHtml)((0, _vue_shared.toDisplayString)(value));
|
|
174
180
|
}
|
|
175
181
|
//#endregion
|
|
176
|
-
//#region packages/reactivity/src/system.ts
|
|
177
|
-
let activeSub = void 0;
|
|
178
|
-
function setActiveSub(sub) {
|
|
179
|
-
try {
|
|
180
|
-
return activeSub;
|
|
181
|
-
} finally {
|
|
182
|
-
activeSub = sub;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
//#endregion
|
|
186
|
-
//#region packages/reactivity/src/reactive.ts
|
|
187
|
-
/**
|
|
188
|
-
* Returns the raw, original object of a Vue-created proxy.
|
|
189
|
-
*
|
|
190
|
-
* `toRaw()` can return the original object from proxies created by
|
|
191
|
-
* {@link reactive}, {@link readonly}, {@link shallowReactive} or
|
|
192
|
-
* {@link shallowReadonly}.
|
|
193
|
-
*
|
|
194
|
-
* This is an escape hatch that can be used to temporarily read without
|
|
195
|
-
* incurring proxy access / tracking overhead or write without triggering
|
|
196
|
-
* changes. It is **not** recommended to hold a persistent reference to the
|
|
197
|
-
* original object. Use with caution.
|
|
198
|
-
*
|
|
199
|
-
* @example
|
|
200
|
-
* ```js
|
|
201
|
-
* const foo = {}
|
|
202
|
-
* const reactiveFoo = reactive(foo)
|
|
203
|
-
*
|
|
204
|
-
* console.log(toRaw(reactiveFoo) === foo) // true
|
|
205
|
-
* ```
|
|
206
|
-
*
|
|
207
|
-
* @param observed - The object for which the "raw" value is requested.
|
|
208
|
-
* @see {@link https://vuejs.org/api/reactivity-advanced.html#toraw}
|
|
209
|
-
*/
|
|
210
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
211
|
-
function toRaw(observed) {
|
|
212
|
-
const raw = observed && observed["__v_raw"];
|
|
213
|
-
return raw ? /* @__PURE__ */ toRaw(raw) : observed;
|
|
214
|
-
}
|
|
215
|
-
//#endregion
|
|
216
|
-
//#region packages/reactivity/src/ref.ts
|
|
217
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
218
|
-
function isRef(r) {
|
|
219
|
-
return r ? r["__v_isRef"] === true : false;
|
|
220
|
-
}
|
|
221
|
-
//#endregion
|
|
222
|
-
//#region packages/runtime-core/src/warning.ts
|
|
223
|
-
const stack = [];
|
|
224
|
-
/**
|
|
225
|
-
* @internal
|
|
226
|
-
*/
|
|
227
|
-
function pushWarningContext$1(ctx) {
|
|
228
|
-
stack.push(ctx);
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* @internal
|
|
232
|
-
*/
|
|
233
|
-
function popWarningContext$1() {
|
|
234
|
-
stack.pop();
|
|
235
|
-
}
|
|
236
|
-
let isWarning = false;
|
|
237
|
-
function warn$3(msg, ...args) {
|
|
238
|
-
if (isWarning) return;
|
|
239
|
-
isWarning = true;
|
|
240
|
-
const prevSub = setActiveSub();
|
|
241
|
-
const entry = stack.length ? stack[stack.length - 1] : null;
|
|
242
|
-
const instance = isVNode$2(entry) ? entry.component : entry;
|
|
243
|
-
const appWarnHandler = instance && instance.appContext.config.warnHandler;
|
|
244
|
-
const trace = getComponentTrace();
|
|
245
|
-
if (appWarnHandler) callWithErrorHandling(appWarnHandler, instance, 11, [
|
|
246
|
-
msg + args.map((a) => {
|
|
247
|
-
const toString = a.toString;
|
|
248
|
-
return toString == null ? JSON.stringify(a) : toString.call(a);
|
|
249
|
-
}).join(""),
|
|
250
|
-
instance && instance.proxy || instance,
|
|
251
|
-
trace.map(({ ctx }) => `at <${formatComponentName(instance, ctx.type)}>`).join("\n"),
|
|
252
|
-
trace
|
|
253
|
-
]);
|
|
254
|
-
else {
|
|
255
|
-
const warnArgs = [`[Vue warn]: ${msg}`, ...args];
|
|
256
|
-
if (trace.length && true)
|
|
257
|
-
/* v8 ignore next 2 */
|
|
258
|
-
warnArgs.push(`\n`, ...formatTrace(trace));
|
|
259
|
-
console.warn(...warnArgs);
|
|
260
|
-
}
|
|
261
|
-
setActiveSub(prevSub);
|
|
262
|
-
isWarning = false;
|
|
263
|
-
}
|
|
264
|
-
function getComponentTrace() {
|
|
265
|
-
let currentCtx = stack[stack.length - 1];
|
|
266
|
-
if (!currentCtx) return [];
|
|
267
|
-
const normalizedStack = [];
|
|
268
|
-
while (currentCtx) {
|
|
269
|
-
const last = normalizedStack[0];
|
|
270
|
-
if (last && last.ctx === currentCtx) last.recurseCount++;
|
|
271
|
-
else normalizedStack.push({
|
|
272
|
-
ctx: currentCtx,
|
|
273
|
-
recurseCount: 0
|
|
274
|
-
});
|
|
275
|
-
if (isVNode$2(currentCtx)) {
|
|
276
|
-
const parent = currentCtx.component && currentCtx.component.parent;
|
|
277
|
-
currentCtx = parent && parent.vnode || parent;
|
|
278
|
-
} else currentCtx = currentCtx.parent;
|
|
279
|
-
}
|
|
280
|
-
return normalizedStack;
|
|
281
|
-
}
|
|
282
|
-
/* v8 ignore start */
|
|
283
|
-
function formatTrace(trace) {
|
|
284
|
-
const logs = [];
|
|
285
|
-
trace.forEach((entry, i) => {
|
|
286
|
-
logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));
|
|
287
|
-
});
|
|
288
|
-
return logs;
|
|
289
|
-
}
|
|
290
|
-
function formatTraceEntry({ ctx, recurseCount }) {
|
|
291
|
-
const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
|
|
292
|
-
const instance = isVNode$2(ctx) ? ctx.component : ctx;
|
|
293
|
-
const isRoot = instance ? instance.parent == null : false;
|
|
294
|
-
const open = ` at <${formatComponentName(instance, ctx.type, isRoot)}`;
|
|
295
|
-
const close = `>` + postfix;
|
|
296
|
-
return ctx.props ? [
|
|
297
|
-
open,
|
|
298
|
-
...formatProps(ctx.props),
|
|
299
|
-
close
|
|
300
|
-
] : [open + close];
|
|
301
|
-
}
|
|
302
|
-
function formatProps(props) {
|
|
303
|
-
const res = [];
|
|
304
|
-
const keys = Object.keys(props);
|
|
305
|
-
keys.slice(0, 3).forEach((key) => {
|
|
306
|
-
res.push(...formatProp(key, props[key]));
|
|
307
|
-
});
|
|
308
|
-
if (keys.length > 3) res.push(` ...`);
|
|
309
|
-
return res;
|
|
310
|
-
}
|
|
311
|
-
function formatProp(key, value, raw) {
|
|
312
|
-
if ((0, _vue_shared.isString)(value)) {
|
|
313
|
-
value = JSON.stringify(value);
|
|
314
|
-
return raw ? value : [`${key}=${value}`];
|
|
315
|
-
} else if (typeof value === "number" || typeof value === "boolean" || value == null) return raw ? value : [`${key}=${value}`];
|
|
316
|
-
else if (/* @__PURE__ */ isRef(value)) {
|
|
317
|
-
value = formatProp(key, /* @__PURE__ */ toRaw(value.value), true);
|
|
318
|
-
return raw ? value : [
|
|
319
|
-
`${key}=Ref<`,
|
|
320
|
-
value,
|
|
321
|
-
`>`
|
|
322
|
-
];
|
|
323
|
-
} else if ((0, _vue_shared.isFunction)(value)) return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
|
|
324
|
-
else {
|
|
325
|
-
value = /* @__PURE__ */ toRaw(value);
|
|
326
|
-
return raw ? value : [`${key}=`, value];
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
/* v8 ignore stop */
|
|
330
|
-
//#endregion
|
|
331
|
-
//#region packages/runtime-core/src/errorHandling.ts
|
|
332
|
-
const ErrorTypeStrings = {
|
|
333
|
-
["sp"]: "serverPrefetch hook",
|
|
334
|
-
["bc"]: "beforeCreate hook",
|
|
335
|
-
["c"]: "created hook",
|
|
336
|
-
["bm"]: "beforeMount hook",
|
|
337
|
-
["m"]: "mounted hook",
|
|
338
|
-
["bu"]: "beforeUpdate hook",
|
|
339
|
-
["u"]: "updated",
|
|
340
|
-
["bum"]: "beforeUnmount hook",
|
|
341
|
-
["um"]: "unmounted hook",
|
|
342
|
-
["a"]: "activated hook",
|
|
343
|
-
["da"]: "deactivated hook",
|
|
344
|
-
["ec"]: "errorCaptured hook",
|
|
345
|
-
["rtc"]: "renderTracked hook",
|
|
346
|
-
["rtg"]: "renderTriggered hook",
|
|
347
|
-
[0]: "setup function",
|
|
348
|
-
[1]: "render function",
|
|
349
|
-
[2]: "watcher getter",
|
|
350
|
-
[3]: "watcher callback",
|
|
351
|
-
[4]: "watcher cleanup function",
|
|
352
|
-
[5]: "native event handler",
|
|
353
|
-
[6]: "component event handler",
|
|
354
|
-
[7]: "vnode hook",
|
|
355
|
-
[8]: "directive hook",
|
|
356
|
-
[9]: "transition hook",
|
|
357
|
-
[10]: "app errorHandler",
|
|
358
|
-
[11]: "app warnHandler",
|
|
359
|
-
[12]: "ref function",
|
|
360
|
-
[13]: "async component loader",
|
|
361
|
-
[14]: "scheduler flush",
|
|
362
|
-
[15]: "component update",
|
|
363
|
-
[16]: "app unmount cleanup function"
|
|
364
|
-
};
|
|
365
|
-
function callWithErrorHandling(fn, instance, type, args) {
|
|
366
|
-
try {
|
|
367
|
-
return args ? fn(...args) : fn();
|
|
368
|
-
} catch (err) {
|
|
369
|
-
handleError(err, instance, type);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
function handleError(err, instance, type, throwInDev = true) {
|
|
373
|
-
const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || _vue_shared.EMPTY_OBJ;
|
|
374
|
-
if (instance) {
|
|
375
|
-
let cur = instance.parent;
|
|
376
|
-
const exposedInstance = instance.proxy || instance;
|
|
377
|
-
const errorInfo = ErrorTypeStrings[type];
|
|
378
|
-
while (cur) {
|
|
379
|
-
const errorCapturedHooks = cur.ec;
|
|
380
|
-
if (errorCapturedHooks) {
|
|
381
|
-
for (let i = 0; i < errorCapturedHooks.length; i++) if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) return;
|
|
382
|
-
}
|
|
383
|
-
cur = cur.parent;
|
|
384
|
-
}
|
|
385
|
-
if (errorHandler) {
|
|
386
|
-
const prevSub = setActiveSub();
|
|
387
|
-
callWithErrorHandling(errorHandler, null, 10, [
|
|
388
|
-
err,
|
|
389
|
-
exposedInstance,
|
|
390
|
-
errorInfo
|
|
391
|
-
]);
|
|
392
|
-
setActiveSub(prevSub);
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
logError(err, type, instance, throwInDev, throwUnhandledErrorInProduction);
|
|
397
|
-
}
|
|
398
|
-
function logError(err, type, instance, throwInDev = true, throwInProd = false) {
|
|
399
|
-
{
|
|
400
|
-
const info = ErrorTypeStrings[type];
|
|
401
|
-
if (instance) pushWarningContext$1(instance);
|
|
402
|
-
warn$3(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
|
|
403
|
-
if (instance) popWarningContext$1();
|
|
404
|
-
if (throwInDev) throw err;
|
|
405
|
-
else console.error(err);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
//#endregion
|
|
409
|
-
//#region packages/runtime-core/src/vnode.ts
|
|
410
|
-
function isVNode$2(value) {
|
|
411
|
-
return value ? value.__v_isVNode === true : false;
|
|
412
|
-
}
|
|
413
|
-
//#endregion
|
|
414
|
-
//#region packages/runtime-core/src/component.ts
|
|
415
|
-
const classifyRE = /(?:^|[-_])\w/g;
|
|
416
|
-
const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, "");
|
|
417
|
-
function getComponentName(Component, includeInferred = true) {
|
|
418
|
-
return (0, _vue_shared.isFunction)(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;
|
|
419
|
-
}
|
|
420
|
-
function formatComponentName(instance, Component, isRoot = false) {
|
|
421
|
-
let name = getComponentName(Component);
|
|
422
|
-
if (!name && Component.__file) {
|
|
423
|
-
const match = Component.__file.match(/([^/\\]+)\.\w+$/);
|
|
424
|
-
if (match) name = match[1];
|
|
425
|
-
}
|
|
426
|
-
if (!name && instance) {
|
|
427
|
-
const inferFromRegistry = (registry) => {
|
|
428
|
-
for (const key in registry) if (registry[key] === Component) return key;
|
|
429
|
-
};
|
|
430
|
-
name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(instance.parent.type.components) || inferFromRegistry(instance.appContext.components);
|
|
431
|
-
}
|
|
432
|
-
return name ? classify(name) : isRoot ? `App` : `Anonymous`;
|
|
433
|
-
}
|
|
434
|
-
//#endregion
|
|
435
|
-
//#region packages/runtime-core/src/index.ts
|
|
436
|
-
const warn$2 = warn$3;
|
|
437
|
-
//#endregion
|
|
438
182
|
//#region packages/server-renderer/src/helpers/ssrRenderList.ts
|
|
439
183
|
function ssrRenderList(source, renderItem) {
|
|
440
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);
|
|
441
185
|
else if (typeof source === "number") {
|
|
442
186
|
if (!Number.isInteger(source) || source < 0) {
|
|
443
|
-
warn
|
|
187
|
+
(0, _vue_runtime_dom.warn)(`The v-for range expects a positive integer value but got ${source}.`);
|
|
444
188
|
return;
|
|
445
189
|
}
|
|
446
190
|
for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
447
191
|
} else if ((0, _vue_shared.isObject)(source)) if (source[Symbol.iterator]) {
|
|
448
|
-
|
|
449
|
-
for (
|
|
192
|
+
let i = 0;
|
|
193
|
+
for (const item of source) renderItem(item, i++);
|
|
450
194
|
} else {
|
|
451
195
|
const keys = Object.keys(source);
|
|
452
196
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -457,7 +201,7 @@ function ssrRenderList(source, renderItem) {
|
|
|
457
201
|
}
|
|
458
202
|
//#endregion
|
|
459
203
|
//#region packages/server-renderer/src/helpers/ssrRenderSuspense.ts
|
|
460
|
-
|
|
204
|
+
function ssrRenderSuspense(push, { default: renderContent }) {
|
|
461
205
|
if (renderContent) renderContent();
|
|
462
206
|
else push(`<!---->`);
|
|
463
207
|
}
|
|
@@ -466,7 +210,7 @@ async function ssrRenderSuspense(push, { default: renderContent }) {
|
|
|
466
210
|
function ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {
|
|
467
211
|
if (typeof dir !== "function" && dir.getSSRProps) return dir.getSSRProps({
|
|
468
212
|
dir,
|
|
469
|
-
instance:
|
|
213
|
+
instance: _vue_runtime_dom.ssrUtils.getComponentPublicInstance(instance.$),
|
|
470
214
|
value,
|
|
471
215
|
oldValue: void 0,
|
|
472
216
|
arg,
|
|
@@ -543,12 +287,12 @@ function ssrCompile(template, instance) {
|
|
|
543
287
|
{
|
|
544
288
|
const message = `[@vue/server-renderer] Template compilation error: ${err.message}`;
|
|
545
289
|
const codeFrame = err.loc && (0, _vue_shared.generateCodeFrame)(template, err.loc.start.offset, err.loc.end.offset);
|
|
546
|
-
(0,
|
|
290
|
+
(0, _vue_runtime_dom.warn)(codeFrame ? `${message}\n${codeFrame}` : message);
|
|
547
291
|
}
|
|
548
292
|
};
|
|
549
293
|
const { code } = (0, _vue_compiler_ssr.compile)(template, finalCompilerOptions);
|
|
550
294
|
const requireMap = {
|
|
551
|
-
vue,
|
|
295
|
+
vue: _vue_runtime_dom,
|
|
552
296
|
"vue/server-renderer": internal_exports
|
|
553
297
|
};
|
|
554
298
|
const fakeRequire = (id) => requireMap[id];
|
|
@@ -556,7 +300,7 @@ function ssrCompile(template, instance) {
|
|
|
556
300
|
}
|
|
557
301
|
//#endregion
|
|
558
302
|
//#region packages/server-renderer/src/render.ts
|
|
559
|
-
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } =
|
|
303
|
+
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } = _vue_runtime_dom.ssrUtils;
|
|
560
304
|
function cleanupContext(context) {
|
|
561
305
|
let firstError;
|
|
562
306
|
if (context.__watcherHandles) {
|
|
@@ -598,7 +342,7 @@ function createBuffer() {
|
|
|
598
342
|
}
|
|
599
343
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
600
344
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
601
|
-
const context = instance.appContext.provides[
|
|
345
|
+
const context = instance.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
602
346
|
if (context) (context.__instanceScopes || (context.__instanceScopes = [])).push(instance.scope);
|
|
603
347
|
pushWarningContext(vnode);
|
|
604
348
|
const res = setupComponent(instance, true);
|
|
@@ -609,7 +353,11 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
609
353
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
610
354
|
if (prefetches) return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy)));
|
|
611
355
|
}).catch(_vue_shared.NOOP).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
612
|
-
else
|
|
356
|
+
else try {
|
|
357
|
+
return renderComponentSubTree(instance, slotScopeId);
|
|
358
|
+
} catch (err) {
|
|
359
|
+
return Promise.reject(err);
|
|
360
|
+
}
|
|
613
361
|
}
|
|
614
362
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
615
363
|
pushWarningContext(instance.vnode);
|
|
@@ -649,12 +397,14 @@ function renderComponentSubTree(instance, slotScopeId) {
|
|
|
649
397
|
const prev = setCurrentRenderingInstance(instance);
|
|
650
398
|
try {
|
|
651
399
|
ssrRender(instance.proxy, push, instance, attrs, instance.props, instance.setupState, instance.data, instance.ctx);
|
|
400
|
+
} catch (err) {
|
|
401
|
+
(0, _vue_runtime_dom.handleError)(err, instance, 1);
|
|
652
402
|
} finally {
|
|
653
403
|
setCurrentRenderingInstance(prev);
|
|
654
404
|
}
|
|
655
405
|
} else if (instance.render && instance.render !== _vue_shared.NOOP) renderVNode(push, instance.subTree = renderComponentRoot(instance), instance, slotScopeId);
|
|
656
406
|
else {
|
|
657
|
-
(0,
|
|
407
|
+
(0, _vue_runtime_dom.warn)(`Component ${comp.name || comp.__file || `<Anonymous>`} is missing template or render function.`);
|
|
658
408
|
push(`<!---->`);
|
|
659
409
|
}
|
|
660
410
|
}
|
|
@@ -665,16 +415,16 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
665
415
|
const { type, shapeFlag, children, dirs, props } = vnode;
|
|
666
416
|
if (dirs) vnode.props = applySSRDirectives(vnode, props, dirs);
|
|
667
417
|
switch (type) {
|
|
668
|
-
case
|
|
418
|
+
case _vue_runtime_dom.Text:
|
|
669
419
|
push((0, _vue_shared.escapeHtml)(children));
|
|
670
420
|
break;
|
|
671
|
-
case
|
|
421
|
+
case _vue_runtime_dom.Comment:
|
|
672
422
|
push(children ? `<!--${(0, _vue_shared.escapeHtmlComment)(children)}-->` : `<!---->`);
|
|
673
423
|
break;
|
|
674
|
-
case
|
|
424
|
+
case _vue_runtime_dom.Static:
|
|
675
425
|
push(children);
|
|
676
426
|
break;
|
|
677
|
-
case
|
|
427
|
+
case _vue_runtime_dom.Fragment:
|
|
678
428
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
679
429
|
push(`<!--[-->`);
|
|
680
430
|
renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
@@ -684,7 +434,7 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
684
434
|
else if (shapeFlag & 6) push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
685
435
|
else if (shapeFlag & 64) renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
686
436
|
else if (shapeFlag & 128) renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
687
|
-
else (0,
|
|
437
|
+
else (0, _vue_runtime_dom.warn)("[@vue/server-renderer] Invalid VNode type:", type, `(${typeof type})`);
|
|
688
438
|
}
|
|
689
439
|
}
|
|
690
440
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
@@ -695,15 +445,25 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
695
445
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
696
446
|
let openTag = `<${tag}`;
|
|
697
447
|
if (props) openTag += ssrRenderAttrs(props, tag);
|
|
698
|
-
|
|
448
|
+
const renderedScopeIds = [];
|
|
449
|
+
const appendScopeId = (id) => {
|
|
450
|
+
if (id && (!props || !(0, _vue_shared.hasOwn)(props, id)) && !renderedScopeIds.includes(id)) {
|
|
451
|
+
openTag += ` ${id}`;
|
|
452
|
+
renderedScopeIds.push(id);
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
if (scopeId) appendScopeId(scopeId);
|
|
699
456
|
let curParent = parentComponent;
|
|
700
457
|
let curVnode = vnode;
|
|
701
458
|
while (curParent && curVnode === curParent.subTree) {
|
|
702
459
|
curVnode = curParent.vnode;
|
|
703
|
-
if (curVnode.scopeId)
|
|
460
|
+
if (curVnode.scopeId) appendScopeId(curVnode.scopeId);
|
|
704
461
|
curParent = curParent.parent;
|
|
705
462
|
}
|
|
706
|
-
if (slotScopeId)
|
|
463
|
+
if (slotScopeId) {
|
|
464
|
+
const slotScopeIdList = slotScopeId.trim().split(" ");
|
|
465
|
+
for (let i = 0; i < slotScopeIdList.length; i++) appendScopeId(slotScopeIdList[i]);
|
|
466
|
+
}
|
|
707
467
|
push(openTag + `>`);
|
|
708
468
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
709
469
|
let hasChildrenOverride = false;
|
|
@@ -736,17 +496,17 @@ function applySSRDirectives(vnode, rawProps, dirs) {
|
|
|
736
496
|
if (props) toMerge.push(props);
|
|
737
497
|
}
|
|
738
498
|
}
|
|
739
|
-
return (0,
|
|
499
|
+
return (0, _vue_runtime_dom.mergeProps)(rawProps || {}, ...toMerge);
|
|
740
500
|
}
|
|
741
501
|
function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
742
502
|
const target = vnode.props && vnode.props.to;
|
|
743
503
|
const disabled = vnode.props && vnode.props.disabled;
|
|
744
504
|
if (!target) {
|
|
745
|
-
if (!disabled) (0,
|
|
505
|
+
if (!disabled) (0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport is missing target prop.`);
|
|
746
506
|
return [];
|
|
747
507
|
}
|
|
748
508
|
if (!(0, _vue_shared.isString)(target)) {
|
|
749
|
-
(0,
|
|
509
|
+
(0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport target must be a query selector string.`);
|
|
750
510
|
return [];
|
|
751
511
|
}
|
|
752
512
|
ssrRenderTeleport(push, (push) => {
|
|
@@ -755,7 +515,7 @@ function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
755
515
|
}
|
|
756
516
|
//#endregion
|
|
757
517
|
//#region packages/server-renderer/src/renderToString.ts
|
|
758
|
-
const { isVNode: isVNode$1 } =
|
|
518
|
+
const { isVNode: isVNode$1 } = _vue_runtime_dom.ssrUtils;
|
|
759
519
|
function nestedUnrollBuffer(buffer, parentRet, startIndex) {
|
|
760
520
|
if (!buffer.hasAsync) return parentRet + unrollBufferSync$1(buffer);
|
|
761
521
|
let ret = parentRet;
|
|
@@ -791,10 +551,10 @@ function unrollBufferSync$1(buffer) {
|
|
|
791
551
|
return ret;
|
|
792
552
|
}
|
|
793
553
|
async function renderToString(input, context = {}) {
|
|
794
|
-
if (isVNode$1(input)) return renderToString((0,
|
|
795
|
-
const vnode = (0,
|
|
554
|
+
if (isVNode$1(input)) return renderToString((0, _vue_runtime_dom.createApp)({ render: () => input }), context);
|
|
555
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
796
556
|
vnode.appContext = input._context;
|
|
797
|
-
input.provide(
|
|
557
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
798
558
|
try {
|
|
799
559
|
const result = await unrollBuffer$1(await renderComponentVNode(vnode));
|
|
800
560
|
await resolveTeleports(context);
|
|
@@ -806,12 +566,12 @@ async function renderToString(input, context = {}) {
|
|
|
806
566
|
async function resolveTeleports(context) {
|
|
807
567
|
if (context.__teleportBuffers) {
|
|
808
568
|
context.teleports = context.teleports || {};
|
|
809
|
-
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(
|
|
569
|
+
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(context.__teleportBuffers[key]);
|
|
810
570
|
}
|
|
811
571
|
}
|
|
812
572
|
//#endregion
|
|
813
573
|
//#region packages/server-renderer/src/renderToStream.ts
|
|
814
|
-
const { isVNode } =
|
|
574
|
+
const { isVNode } = _vue_runtime_dom.ssrUtils;
|
|
815
575
|
async function unrollBuffer(buffer, stream) {
|
|
816
576
|
if (buffer.hasAsync) for (let i = 0; i < buffer.length; i++) {
|
|
817
577
|
let item = buffer[i];
|
|
@@ -829,10 +589,10 @@ function unrollBufferSync(buffer, stream) {
|
|
|
829
589
|
}
|
|
830
590
|
}
|
|
831
591
|
function renderToSimpleStream(input, context, stream) {
|
|
832
|
-
if (isVNode(input)) return renderToSimpleStream((0,
|
|
833
|
-
const vnode = (0,
|
|
592
|
+
if (isVNode(input)) return renderToSimpleStream((0, _vue_runtime_dom.createApp)({ render: () => input }), context, stream);
|
|
593
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
834
594
|
vnode.appContext = input._context;
|
|
835
|
-
input.provide(
|
|
595
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
836
596
|
let cleaned = false;
|
|
837
597
|
const finalize = () => {
|
|
838
598
|
if (cleaned) return;
|
|
@@ -916,7 +676,7 @@ function pipeToWebWritable(input, context = {}, writable) {
|
|
|
916
676
|
}
|
|
917
677
|
//#endregion
|
|
918
678
|
//#region packages/server-renderer/src/index.ts
|
|
919
|
-
(0,
|
|
679
|
+
(0, _vue_runtime_dom.initDirectivesForSSR)();
|
|
920
680
|
//#endregion
|
|
921
681
|
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
922
682
|
exports.pipeToWebWritable = pipeToWebWritable;
|