@vue/server-renderer 3.5.38 → 3.5.40

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.
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @vue/server-renderer v3.5.38
2
+ * @vue/server-renderer v3.5.40
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
6
- import { createVNode, ssrUtils, ssrContextKey, warn as warn$2, Fragment, Static, Comment, Text, mergeProps, createApp, initDirectivesForSSR } from 'vue';
7
- import { isOn, escapeHtml, isRenderableAttrValue, isSVGTag, propsToAttrMap, isBooleanAttr, includeBooleanAttr, isSSRSafeAttrName, normalizeClass, isString, normalizeStyle, stringifyStyle, isArray, isObject, normalizeCssVarValue, makeMap, toDisplayString, isFunction, EMPTY_OBJ, getGlobalThis, NOOP, looseEqual, looseIndexOf, escapeHtmlComment, isPromise, isVoidTag } from '@vue/shared';
6
+ import { createVNode, ssrUtils, ssrContextKey, warn, Fragment, Static, Comment, Text, mergeProps, handleError, createApp, initDirectivesForSSR } from '@vue/runtime-dom';
7
+ import { isOn, escapeHtml, isRenderableAttrValue, isSVGTag, propsToAttrMap, isBooleanAttr, includeBooleanAttr, isSSRSafeAttrName, normalizeClass, isString, normalizeStyle, stringifyStyle, isArray, isObject, normalizeCssVarValue, makeMap, isPromise, toDisplayString, looseEqual, looseIndexOf, escapeHtmlComment, NOOP, isVoidTag, isFunction, hasOwn } from '@vue/shared';
8
8
  export { includeBooleanAttr as ssrIncludeBooleanAttr } from '@vue/shared';
9
9
 
10
10
  const shouldIgnoreProp = /* @__PURE__ */ makeMap(
@@ -196,6 +196,9 @@ function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parent
196
196
  teleportContent = getBuffer();
197
197
  }
198
198
  targetBuffer.splice(bufferIndex, 0, teleportContent);
199
+ if (isPromise(teleportContent) || isArray(teleportContent) && teleportContent.hasAsync) {
200
+ targetBuffer.hasAsync = true;
201
+ }
199
202
  parentPush("<!--teleport end-->");
200
203
  }
201
204
 
@@ -203,314 +206,6 @@ function ssrInterpolate(value) {
203
206
  return escapeHtml(toDisplayString(value));
204
207
  }
205
208
 
206
- // @__NO_SIDE_EFFECTS__
207
- function isProxy(value) {
208
- return value ? !!value["__v_raw"] : false;
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
-
216
- // @__NO_SIDE_EFFECTS__
217
- function isRef(r) {
218
- return r ? r["__v_isRef"] === true : false;
219
- }
220
-
221
- const stack = [];
222
- function pushWarningContext$1(vnode) {
223
- stack.push(vnode);
224
- }
225
- function popWarningContext$1() {
226
- stack.pop();
227
- }
228
- let isWarning = false;
229
- function warn$1(msg, ...args) {
230
- if (isWarning) return;
231
- isWarning = true;
232
- const instance = stack.length ? stack[stack.length - 1].component : null;
233
- const appWarnHandler = instance && instance.appContext.config.warnHandler;
234
- const trace = getComponentTrace();
235
- if (appWarnHandler) {
236
- callWithErrorHandling(
237
- appWarnHandler,
238
- instance,
239
- 11,
240
- [
241
- // eslint-disable-next-line no-restricted-syntax
242
- msg + args.map((a) => {
243
- var _a, _b;
244
- return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
245
- }).join(""),
246
- instance && instance.proxy,
247
- trace.map(
248
- ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
249
- ).join("\n"),
250
- trace
251
- ]
252
- );
253
- } else {
254
- const warnArgs = [`[Vue warn]: ${msg}`, ...args];
255
- if (trace.length && // avoid spamming console during tests
256
- true) {
257
- warnArgs.push(`
258
- `, ...formatTrace(trace));
259
- }
260
- console.warn(...warnArgs);
261
- }
262
- isWarning = false;
263
- }
264
- function getComponentTrace() {
265
- let currentVNode = stack[stack.length - 1];
266
- if (!currentVNode) {
267
- return [];
268
- }
269
- const normalizedStack = [];
270
- while (currentVNode) {
271
- const last = normalizedStack[0];
272
- if (last && last.vnode === currentVNode) {
273
- last.recurseCount++;
274
- } else {
275
- normalizedStack.push({
276
- vnode: currentVNode,
277
- recurseCount: 0
278
- });
279
- }
280
- const parentInstance = currentVNode.component && currentVNode.component.parent;
281
- currentVNode = parentInstance && parentInstance.vnode;
282
- }
283
- return normalizedStack;
284
- }
285
- function formatTrace(trace) {
286
- const logs = [];
287
- trace.forEach((entry, i) => {
288
- logs.push(...i === 0 ? [] : [`
289
- `], ...formatTraceEntry(entry));
290
- });
291
- return logs;
292
- }
293
- function formatTraceEntry({ vnode, recurseCount }) {
294
- const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
295
- const isRoot = vnode.component ? vnode.component.parent == null : false;
296
- const open = ` at <${formatComponentName(
297
- vnode.component,
298
- vnode.type,
299
- isRoot
300
- )}`;
301
- const close = `>` + postfix;
302
- return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
303
- }
304
- function formatProps(props) {
305
- const res = [];
306
- const keys = Object.keys(props);
307
- keys.slice(0, 3).forEach((key) => {
308
- res.push(...formatProp(key, props[key]));
309
- });
310
- if (keys.length > 3) {
311
- res.push(` ...`);
312
- }
313
- return res;
314
- }
315
- function formatProp(key, value, raw) {
316
- if (isString(value)) {
317
- value = JSON.stringify(value);
318
- return raw ? value : [`${key}=${value}`];
319
- } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
320
- return raw ? value : [`${key}=${value}`];
321
- } else if (isRef(value)) {
322
- value = formatProp(key, toRaw(value.value), true);
323
- return raw ? value : [`${key}=Ref<`, value, `>`];
324
- } else if (isFunction(value)) {
325
- return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
326
- } else {
327
- value = toRaw(value);
328
- return raw ? value : [`${key}=`, value];
329
- }
330
- }
331
-
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 contextVNode = instance ? instance.vnode : null;
374
- const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;
375
- if (instance) {
376
- let cur = instance.parent;
377
- const exposedInstance = instance.proxy;
378
- const errorInfo = !!(process.env.NODE_ENV !== "production") ? ErrorTypeStrings[type] : `https://vuejs.org/error-reference/#runtime-${type}`;
379
- while (cur) {
380
- const errorCapturedHooks = cur.ec;
381
- if (errorCapturedHooks) {
382
- for (let i = 0; i < errorCapturedHooks.length; i++) {
383
- if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
384
- return;
385
- }
386
- }
387
- }
388
- cur = cur.parent;
389
- }
390
- if (errorHandler) {
391
- callWithErrorHandling(errorHandler, null, 10, [
392
- err,
393
- exposedInstance,
394
- errorInfo
395
- ]);
396
- return;
397
- }
398
- }
399
- logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);
400
- }
401
- function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {
402
- if (!!(process.env.NODE_ENV !== "production")) {
403
- const info = ErrorTypeStrings[type];
404
- if (contextVNode) {
405
- pushWarningContext$1(contextVNode);
406
- }
407
- warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
408
- if (contextVNode) {
409
- popWarningContext$1();
410
- }
411
- if (throwInDev) {
412
- throw err;
413
- } else {
414
- console.error(err);
415
- }
416
- } else if (throwInProd) {
417
- throw err;
418
- } else {
419
- console.error(err);
420
- }
421
- }
422
-
423
- let devtools;
424
- let buffer = [];
425
- function setDevtoolsHook(hook, target) {
426
- var _a, _b;
427
- devtools = hook;
428
- if (devtools) {
429
- devtools.enabled = true;
430
- buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
431
- buffer = [];
432
- } else if (
433
- // handle late devtools injection - only do this if we are in an actual
434
- // browser environment to avoid the timer handle stalling test runner exit
435
- // (#4815)
436
- typeof window !== "undefined" && // some envs mock window but not fully
437
- window.HTMLElement && // also exclude jsdom
438
- // eslint-disable-next-line no-restricted-syntax
439
- !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
440
- ) {
441
- const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
442
- replay.push((newHook) => {
443
- setDevtoolsHook(newHook, target);
444
- });
445
- setTimeout(() => {
446
- if (!devtools) {
447
- target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
448
- buffer = [];
449
- }
450
- }, 3e3);
451
- } else {
452
- buffer = [];
453
- }
454
- }
455
-
456
- {
457
- const g = getGlobalThis();
458
- const registerGlobalSetter = (key, setter) => {
459
- let setters;
460
- if (!(setters = g[key])) setters = g[key] = [];
461
- setters.push(setter);
462
- return (v) => {
463
- if (setters.length > 1) setters.forEach((set) => set(v));
464
- else setters[0](v);
465
- };
466
- };
467
- registerGlobalSetter(
468
- `__VUE_INSTANCE_SETTERS__`,
469
- (v) => v
470
- );
471
- registerGlobalSetter(
472
- `__VUE_SSR_SETTERS__`,
473
- (v) => v
474
- );
475
- }
476
- !!(process.env.NODE_ENV !== "production") ? {
477
- } : {
478
- };
479
- const classifyRE = /(?:^|[-_])\w/g;
480
- const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, "");
481
- function getComponentName(Component, includeInferred = true) {
482
- return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;
483
- }
484
- function formatComponentName(instance, Component, isRoot = false) {
485
- let name = getComponentName(Component);
486
- if (!name && Component.__file) {
487
- const match = Component.__file.match(/([^/\\]+)\.\w+$/);
488
- if (match) {
489
- name = match[1];
490
- }
491
- }
492
- if (!name && instance) {
493
- const inferFromRegistry = (registry) => {
494
- for (const key in registry) {
495
- if (registry[key] === Component) {
496
- return key;
497
- }
498
- }
499
- };
500
- name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(
501
- instance.parent.type.components
502
- ) || inferFromRegistry(instance.appContext.components);
503
- }
504
- return name ? classify(name) : isRoot ? `App` : `Anonymous`;
505
- }
506
- function isClassComponent(value) {
507
- return isFunction(value) && "__vccOpts" in value;
508
- }
509
-
510
- const warn = !!(process.env.NODE_ENV !== "production") ? warn$1 : NOOP;
511
- !!(process.env.NODE_ENV !== "production") || true ? devtools : void 0;
512
- !!(process.env.NODE_ENV !== "production") || true ? setDevtoolsHook : NOOP;
513
-
514
209
  function ssrRenderList(source, renderItem) {
515
210
  if (isArray(source) || isString(source)) {
516
211
  for (let i = 0, l = source.length; i < l; i++) {
@@ -657,7 +352,11 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
657
352
  }).catch(NOOP);
658
353
  return p.then(() => renderComponentSubTree(instance, slotScopeId));
659
354
  } else {
660
- return renderComponentSubTree(instance, slotScopeId);
355
+ try {
356
+ return renderComponentSubTree(instance, slotScopeId);
357
+ } catch (err) {
358
+ return Promise.reject(err);
359
+ }
661
360
  }
662
361
  }
663
362
  function renderComponentSubTree(instance, slotScopeId) {
@@ -719,6 +418,8 @@ function renderComponentSubTree(instance, slotScopeId) {
719
418
  instance.data,
720
419
  instance.ctx
721
420
  );
421
+ } catch (err) {
422
+ handleError(err, instance, 1);
722
423
  } finally {
723
424
  setCurrentRenderingInstance(prev);
724
425
  }
@@ -731,7 +432,7 @@ function renderComponentSubTree(instance, slotScopeId) {
731
432
  );
732
433
  } else {
733
434
  const componentName = comp.name || comp.__file || `<Anonymous>`;
734
- warn$2(`Component ${componentName} is missing template or render function.`);
435
+ warn(`Component ${componentName} is missing template or render function.`);
735
436
  push(`<!---->`);
736
437
  }
737
438
  }
@@ -778,7 +479,7 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
778
479
  } else if (shapeFlag & 128) {
779
480
  renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
780
481
  } else {
781
- warn$2(
482
+ warn(
782
483
  "[@vue/server-renderer] Invalid VNode type:",
783
484
  type,
784
485
  `(${typeof type})`
@@ -798,20 +499,30 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
798
499
  if (props) {
799
500
  openTag += ssrRenderAttrs(props, tag);
800
501
  }
502
+ const renderedScopeIds = [];
503
+ const appendScopeId = (id) => {
504
+ if (id && (!props || !hasOwn(props, id)) && !renderedScopeIds.includes(id)) {
505
+ openTag += ` ${id}`;
506
+ renderedScopeIds.push(id);
507
+ }
508
+ };
801
509
  if (scopeId) {
802
- openTag += ` ${scopeId}`;
510
+ appendScopeId(scopeId);
803
511
  }
804
512
  let curParent = parentComponent;
805
513
  let curVnode = vnode;
806
514
  while (curParent && curVnode === curParent.subTree) {
807
515
  curVnode = curParent.vnode;
808
516
  if (curVnode.scopeId) {
809
- openTag += ` ${curVnode.scopeId}`;
517
+ appendScopeId(curVnode.scopeId);
810
518
  }
811
519
  curParent = curParent.parent;
812
520
  }
813
521
  if (slotScopeId) {
814
- openTag += ` ${slotScopeId}`;
522
+ const slotScopeIdList = slotScopeId.trim().split(" ");
523
+ for (let i = 0; i < slotScopeIdList.length; i++) {
524
+ appendScopeId(slotScopeIdList[i]);
525
+ }
815
526
  }
816
527
  push(openTag + `>`);
817
528
  if (!isVoidTag(tag)) {
@@ -862,12 +573,12 @@ function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
862
573
  const disabled = vnode.props && vnode.props.disabled;
863
574
  if (!target) {
864
575
  if (!disabled) {
865
- warn$2(`[@vue/server-renderer] Teleport is missing target prop.`);
576
+ warn(`[@vue/server-renderer] Teleport is missing target prop.`);
866
577
  }
867
578
  return [];
868
579
  }
869
580
  if (!isString(target)) {
870
- warn$2(
581
+ warn(
871
582
  `[@vue/server-renderer] Teleport target must be a query selector string.`
872
583
  );
873
584
  return [];
@@ -954,7 +665,7 @@ async function resolveTeleports(context) {
954
665
  context.teleports = context.teleports || {};
955
666
  for (const key in context.__teleportBuffers) {
956
667
  context.teleports[key] = await unrollBuffer$1(
957
- await Promise.all([context.__teleportBuffers[key]])
668
+ context.__teleportBuffers[key]
958
669
  );
959
670
  }
960
671
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/server-renderer",
3
- "version": "3.5.38",
3
+ "version": "3.5.40",
4
4
  "description": "@vue/server-renderer",
5
5
  "main": "index.js",
6
6
  "module": "dist/server-renderer.esm-bundler.js",
@@ -45,11 +45,9 @@
45
45
  "url": "https://github.com/vuejs/core/issues"
46
46
  },
47
47
  "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme",
48
- "peerDependencies": {
49
- "vue": "3.5.38"
50
- },
51
48
  "dependencies": {
52
- "@vue/shared": "3.5.38",
53
- "@vue/compiler-ssr": "3.5.38"
49
+ "@vue/shared": "3.5.40",
50
+ "@vue/runtime-dom": "3.5.40",
51
+ "@vue/compiler-ssr": "3.5.40"
54
52
  }
55
53
  }