@vue/server-renderer 3.6.0-beta.8 → 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 +102 -305
- package/dist/server-renderer.cjs.prod.js +100 -43
- package/dist/server-renderer.d.ts +3 -3
- package/dist/server-renderer.esm-browser.js +327 -119
- package/dist/server-renderer.esm-browser.prod.js +2 -2
- package/dist/server-renderer.esm-bundler.js +77 -796
- 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,278 +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
|
-
function isVNode$2(value) {
|
|
409
|
-
return value ? value.__v_isVNode === true : false;
|
|
410
|
-
}
|
|
411
|
-
//#endregion
|
|
412
|
-
//#region packages/runtime-core/src/component.ts
|
|
413
|
-
const classifyRE = /(?:^|[-_])\w/g;
|
|
414
|
-
const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, "");
|
|
415
|
-
function getComponentName(Component, includeInferred = true) {
|
|
416
|
-
return (0, _vue_shared.isFunction)(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;
|
|
417
|
-
}
|
|
418
|
-
function formatComponentName(instance, Component, isRoot = false) {
|
|
419
|
-
let name = getComponentName(Component);
|
|
420
|
-
if (!name && Component.__file) {
|
|
421
|
-
const match = Component.__file.match(/([^/\\]+)\.\w+$/);
|
|
422
|
-
if (match) name = match[1];
|
|
423
|
-
}
|
|
424
|
-
if (!name && instance) {
|
|
425
|
-
const inferFromRegistry = (registry) => {
|
|
426
|
-
for (const key in registry) if (registry[key] === Component) return key;
|
|
427
|
-
};
|
|
428
|
-
name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(instance.parent.type.components) || inferFromRegistry(instance.appContext.components);
|
|
429
|
-
}
|
|
430
|
-
return name ? classify(name) : isRoot ? `App` : `Anonymous`;
|
|
431
|
-
}
|
|
432
|
-
//#endregion
|
|
433
|
-
//#region packages/runtime-core/src/index.ts
|
|
434
|
-
const warn$2 = warn$3;
|
|
435
|
-
//#endregion
|
|
436
182
|
//#region packages/server-renderer/src/helpers/ssrRenderList.ts
|
|
437
183
|
function ssrRenderList(source, renderItem) {
|
|
438
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);
|
|
439
185
|
else if (typeof source === "number") {
|
|
440
186
|
if (!Number.isInteger(source) || source < 0) {
|
|
441
|
-
warn
|
|
187
|
+
(0, _vue_runtime_dom.warn)(`The v-for range expects a positive integer value but got ${source}.`);
|
|
442
188
|
return;
|
|
443
189
|
}
|
|
444
190
|
for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
445
191
|
} else if ((0, _vue_shared.isObject)(source)) if (source[Symbol.iterator]) {
|
|
446
|
-
|
|
447
|
-
for (
|
|
192
|
+
let i = 0;
|
|
193
|
+
for (const item of source) renderItem(item, i++);
|
|
448
194
|
} else {
|
|
449
195
|
const keys = Object.keys(source);
|
|
450
196
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -455,7 +201,7 @@ function ssrRenderList(source, renderItem) {
|
|
|
455
201
|
}
|
|
456
202
|
//#endregion
|
|
457
203
|
//#region packages/server-renderer/src/helpers/ssrRenderSuspense.ts
|
|
458
|
-
|
|
204
|
+
function ssrRenderSuspense(push, { default: renderContent }) {
|
|
459
205
|
if (renderContent) renderContent();
|
|
460
206
|
else push(`<!---->`);
|
|
461
207
|
}
|
|
@@ -464,7 +210,7 @@ async function ssrRenderSuspense(push, { default: renderContent }) {
|
|
|
464
210
|
function ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {
|
|
465
211
|
if (typeof dir !== "function" && dir.getSSRProps) return dir.getSSRProps({
|
|
466
212
|
dir,
|
|
467
|
-
instance:
|
|
213
|
+
instance: _vue_runtime_dom.ssrUtils.getComponentPublicInstance(instance.$),
|
|
468
214
|
value,
|
|
469
215
|
oldValue: void 0,
|
|
470
216
|
arg,
|
|
@@ -541,12 +287,12 @@ function ssrCompile(template, instance) {
|
|
|
541
287
|
{
|
|
542
288
|
const message = `[@vue/server-renderer] Template compilation error: ${err.message}`;
|
|
543
289
|
const codeFrame = err.loc && (0, _vue_shared.generateCodeFrame)(template, err.loc.start.offset, err.loc.end.offset);
|
|
544
|
-
(0,
|
|
290
|
+
(0, _vue_runtime_dom.warn)(codeFrame ? `${message}\n${codeFrame}` : message);
|
|
545
291
|
}
|
|
546
292
|
};
|
|
547
293
|
const { code } = (0, _vue_compiler_ssr.compile)(template, finalCompilerOptions);
|
|
548
294
|
const requireMap = {
|
|
549
|
-
vue,
|
|
295
|
+
vue: _vue_runtime_dom,
|
|
550
296
|
"vue/server-renderer": internal_exports
|
|
551
297
|
};
|
|
552
298
|
const fakeRequire = (id) => requireMap[id];
|
|
@@ -554,7 +300,27 @@ function ssrCompile(template, instance) {
|
|
|
554
300
|
}
|
|
555
301
|
//#endregion
|
|
556
302
|
//#region packages/server-renderer/src/render.ts
|
|
557
|
-
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } =
|
|
303
|
+
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } = _vue_runtime_dom.ssrUtils;
|
|
304
|
+
function cleanupContext(context) {
|
|
305
|
+
let firstError;
|
|
306
|
+
if (context.__watcherHandles) {
|
|
307
|
+
for (const unwatch of context.__watcherHandles) try {
|
|
308
|
+
unwatch();
|
|
309
|
+
} catch (err) {
|
|
310
|
+
if (firstError === void 0) firstError = err;
|
|
311
|
+
}
|
|
312
|
+
context.__watcherHandles.length = 0;
|
|
313
|
+
}
|
|
314
|
+
if (context.__instanceScopes) {
|
|
315
|
+
for (const scope of context.__instanceScopes) try {
|
|
316
|
+
scope.stop();
|
|
317
|
+
} catch (err) {
|
|
318
|
+
if (firstError === void 0) firstError = err;
|
|
319
|
+
}
|
|
320
|
+
context.__instanceScopes.length = 0;
|
|
321
|
+
}
|
|
322
|
+
if (firstError !== void 0) throw firstError;
|
|
323
|
+
}
|
|
558
324
|
function createBuffer() {
|
|
559
325
|
let appendable = false;
|
|
560
326
|
const buffer = [];
|
|
@@ -576,6 +342,8 @@ function createBuffer() {
|
|
|
576
342
|
}
|
|
577
343
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
578
344
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
345
|
+
const context = instance.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
346
|
+
if (context) (context.__instanceScopes || (context.__instanceScopes = [])).push(instance.scope);
|
|
579
347
|
pushWarningContext(vnode);
|
|
580
348
|
const res = setupComponent(instance, true);
|
|
581
349
|
popWarningContext();
|
|
@@ -585,7 +353,11 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
585
353
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
586
354
|
if (prefetches) return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy)));
|
|
587
355
|
}).catch(_vue_shared.NOOP).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
588
|
-
else
|
|
356
|
+
else try {
|
|
357
|
+
return renderComponentSubTree(instance, slotScopeId);
|
|
358
|
+
} catch (err) {
|
|
359
|
+
return Promise.reject(err);
|
|
360
|
+
}
|
|
589
361
|
}
|
|
590
362
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
591
363
|
pushWarningContext(instance.vnode);
|
|
@@ -625,12 +397,14 @@ function renderComponentSubTree(instance, slotScopeId) {
|
|
|
625
397
|
const prev = setCurrentRenderingInstance(instance);
|
|
626
398
|
try {
|
|
627
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);
|
|
628
402
|
} finally {
|
|
629
403
|
setCurrentRenderingInstance(prev);
|
|
630
404
|
}
|
|
631
405
|
} else if (instance.render && instance.render !== _vue_shared.NOOP) renderVNode(push, instance.subTree = renderComponentRoot(instance), instance, slotScopeId);
|
|
632
406
|
else {
|
|
633
|
-
(0,
|
|
407
|
+
(0, _vue_runtime_dom.warn)(`Component ${comp.name || comp.__file || `<Anonymous>`} is missing template or render function.`);
|
|
634
408
|
push(`<!---->`);
|
|
635
409
|
}
|
|
636
410
|
}
|
|
@@ -641,16 +415,16 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
641
415
|
const { type, shapeFlag, children, dirs, props } = vnode;
|
|
642
416
|
if (dirs) vnode.props = applySSRDirectives(vnode, props, dirs);
|
|
643
417
|
switch (type) {
|
|
644
|
-
case
|
|
418
|
+
case _vue_runtime_dom.Text:
|
|
645
419
|
push((0, _vue_shared.escapeHtml)(children));
|
|
646
420
|
break;
|
|
647
|
-
case
|
|
421
|
+
case _vue_runtime_dom.Comment:
|
|
648
422
|
push(children ? `<!--${(0, _vue_shared.escapeHtmlComment)(children)}-->` : `<!---->`);
|
|
649
423
|
break;
|
|
650
|
-
case
|
|
424
|
+
case _vue_runtime_dom.Static:
|
|
651
425
|
push(children);
|
|
652
426
|
break;
|
|
653
|
-
case
|
|
427
|
+
case _vue_runtime_dom.Fragment:
|
|
654
428
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
655
429
|
push(`<!--[-->`);
|
|
656
430
|
renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
@@ -660,7 +434,7 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
660
434
|
else if (shapeFlag & 6) push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
661
435
|
else if (shapeFlag & 64) renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
662
436
|
else if (shapeFlag & 128) renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
663
|
-
else (0,
|
|
437
|
+
else (0, _vue_runtime_dom.warn)("[@vue/server-renderer] Invalid VNode type:", type, `(${typeof type})`);
|
|
664
438
|
}
|
|
665
439
|
}
|
|
666
440
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
@@ -671,15 +445,25 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
671
445
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
672
446
|
let openTag = `<${tag}`;
|
|
673
447
|
if (props) openTag += ssrRenderAttrs(props, tag);
|
|
674
|
-
|
|
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);
|
|
675
456
|
let curParent = parentComponent;
|
|
676
457
|
let curVnode = vnode;
|
|
677
458
|
while (curParent && curVnode === curParent.subTree) {
|
|
678
459
|
curVnode = curParent.vnode;
|
|
679
|
-
if (curVnode.scopeId)
|
|
460
|
+
if (curVnode.scopeId) appendScopeId(curVnode.scopeId);
|
|
680
461
|
curParent = curParent.parent;
|
|
681
462
|
}
|
|
682
|
-
if (slotScopeId)
|
|
463
|
+
if (slotScopeId) {
|
|
464
|
+
const slotScopeIdList = slotScopeId.trim().split(" ");
|
|
465
|
+
for (let i = 0; i < slotScopeIdList.length; i++) appendScopeId(slotScopeIdList[i]);
|
|
466
|
+
}
|
|
683
467
|
push(openTag + `>`);
|
|
684
468
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
685
469
|
let hasChildrenOverride = false;
|
|
@@ -712,17 +496,17 @@ function applySSRDirectives(vnode, rawProps, dirs) {
|
|
|
712
496
|
if (props) toMerge.push(props);
|
|
713
497
|
}
|
|
714
498
|
}
|
|
715
|
-
return (0,
|
|
499
|
+
return (0, _vue_runtime_dom.mergeProps)(rawProps || {}, ...toMerge);
|
|
716
500
|
}
|
|
717
501
|
function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
718
502
|
const target = vnode.props && vnode.props.to;
|
|
719
503
|
const disabled = vnode.props && vnode.props.disabled;
|
|
720
504
|
if (!target) {
|
|
721
|
-
if (!disabled) (0,
|
|
505
|
+
if (!disabled) (0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport is missing target prop.`);
|
|
722
506
|
return [];
|
|
723
507
|
}
|
|
724
508
|
if (!(0, _vue_shared.isString)(target)) {
|
|
725
|
-
(0,
|
|
509
|
+
(0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport target must be a query selector string.`);
|
|
726
510
|
return [];
|
|
727
511
|
}
|
|
728
512
|
ssrRenderTeleport(push, (push) => {
|
|
@@ -731,7 +515,7 @@ function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
731
515
|
}
|
|
732
516
|
//#endregion
|
|
733
517
|
//#region packages/server-renderer/src/renderToString.ts
|
|
734
|
-
const { isVNode: isVNode$1 } =
|
|
518
|
+
const { isVNode: isVNode$1 } = _vue_runtime_dom.ssrUtils;
|
|
735
519
|
function nestedUnrollBuffer(buffer, parentRet, startIndex) {
|
|
736
520
|
if (!buffer.hasAsync) return parentRet + unrollBufferSync$1(buffer);
|
|
737
521
|
let ret = parentRet;
|
|
@@ -767,24 +551,27 @@ function unrollBufferSync$1(buffer) {
|
|
|
767
551
|
return ret;
|
|
768
552
|
}
|
|
769
553
|
async function renderToString(input, context = {}) {
|
|
770
|
-
if (isVNode$1(input)) return renderToString((0,
|
|
771
|
-
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);
|
|
772
556
|
vnode.appContext = input._context;
|
|
773
|
-
input.provide(
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
557
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
558
|
+
try {
|
|
559
|
+
const result = await unrollBuffer$1(await renderComponentVNode(vnode));
|
|
560
|
+
await resolveTeleports(context);
|
|
561
|
+
return result;
|
|
562
|
+
} finally {
|
|
563
|
+
cleanupContext(context);
|
|
564
|
+
}
|
|
778
565
|
}
|
|
779
566
|
async function resolveTeleports(context) {
|
|
780
567
|
if (context.__teleportBuffers) {
|
|
781
568
|
context.teleports = context.teleports || {};
|
|
782
|
-
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]);
|
|
783
570
|
}
|
|
784
571
|
}
|
|
785
572
|
//#endregion
|
|
786
573
|
//#region packages/server-renderer/src/renderToStream.ts
|
|
787
|
-
const { isVNode } =
|
|
574
|
+
const { isVNode } = _vue_runtime_dom.ssrUtils;
|
|
788
575
|
async function unrollBuffer(buffer, stream) {
|
|
789
576
|
if (buffer.hasAsync) for (let i = 0; i < buffer.length; i++) {
|
|
790
577
|
let item = buffer[i];
|
|
@@ -796,19 +583,29 @@ async function unrollBuffer(buffer, stream) {
|
|
|
796
583
|
}
|
|
797
584
|
function unrollBufferSync(buffer, stream) {
|
|
798
585
|
for (let i = 0; i < buffer.length; i++) {
|
|
799
|
-
|
|
586
|
+
const item = buffer[i];
|
|
800
587
|
if ((0, _vue_shared.isString)(item)) stream.push(item);
|
|
801
588
|
else unrollBufferSync(item, stream);
|
|
802
589
|
}
|
|
803
590
|
}
|
|
804
591
|
function renderToSimpleStream(input, context, stream) {
|
|
805
|
-
if (isVNode(input)) return renderToSimpleStream((0,
|
|
806
|
-
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);
|
|
807
594
|
vnode.appContext = input._context;
|
|
808
|
-
input.provide(
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
595
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
596
|
+
let cleaned = false;
|
|
597
|
+
const finalize = () => {
|
|
598
|
+
if (cleaned) return;
|
|
599
|
+
cleaned = true;
|
|
600
|
+
cleanupContext(context);
|
|
601
|
+
};
|
|
602
|
+
Promise.resolve().then(() => renderComponentVNode(vnode)).then((buffer) => unrollBuffer(buffer, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
603
|
+
finalize();
|
|
604
|
+
return stream.push(null);
|
|
605
|
+
}).catch((error) => {
|
|
606
|
+
try {
|
|
607
|
+
finalize();
|
|
608
|
+
} catch {}
|
|
812
609
|
stream.destroy(error);
|
|
813
610
|
});
|
|
814
611
|
return stream;
|
|
@@ -879,7 +676,7 @@ function pipeToWebWritable(input, context = {}, writable) {
|
|
|
879
676
|
}
|
|
880
677
|
//#endregion
|
|
881
678
|
//#region packages/server-renderer/src/index.ts
|
|
882
|
-
(0,
|
|
679
|
+
(0, _vue_runtime_dom.initDirectivesForSSR)();
|
|
883
680
|
//#endregion
|
|
884
681
|
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
885
682
|
exports.pipeToWebWritable = pipeToWebWritable;
|