vue 3.2.30 → 3.2.33

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.
@@ -427,8 +427,17 @@ function warn(msg, ...args) {
427
427
  let activeEffectScope;
428
428
  class EffectScope {
429
429
  constructor(detached = false) {
430
+ /**
431
+ * @internal
432
+ */
430
433
  this.active = true;
434
+ /**
435
+ * @internal
436
+ */
431
437
  this.effects = [];
438
+ /**
439
+ * @internal
440
+ */
432
441
  this.cleanups = [];
433
442
  if (!detached && activeEffectScope) {
434
443
  this.parent = activeEffectScope;
@@ -438,21 +447,30 @@ class EffectScope {
438
447
  }
439
448
  run(fn) {
440
449
  if (this.active) {
450
+ const currentEffectScope = activeEffectScope;
441
451
  try {
442
452
  activeEffectScope = this;
443
453
  return fn();
444
454
  }
445
455
  finally {
446
- activeEffectScope = this.parent;
456
+ activeEffectScope = currentEffectScope;
447
457
  }
448
458
  }
449
459
  else {
450
460
  warn(`cannot run an inactive effect scope.`);
451
461
  }
452
462
  }
463
+ /**
464
+ * This should only be called on non-detached scopes
465
+ * @internal
466
+ */
453
467
  on() {
454
468
  activeEffectScope = this;
455
469
  }
470
+ /**
471
+ * This should only be called on non-detached scopes
472
+ * @internal
473
+ */
456
474
  off() {
457
475
  activeEffectScope = this.parent;
458
476
  }
@@ -594,10 +612,17 @@ class ReactiveEffect {
594
612
  activeEffect = this.parent;
595
613
  shouldTrack = lastShouldTrack;
596
614
  this.parent = undefined;
615
+ if (this.deferStop) {
616
+ this.stop();
617
+ }
597
618
  }
598
619
  }
599
620
  stop() {
600
- if (this.active) {
621
+ // stopped while running itself - defer the cleanup
622
+ if (activeEffect === this) {
623
+ this.deferStop = true;
624
+ }
625
+ else if (this.active) {
601
626
  cleanupEffect(this);
602
627
  if (this.onStop) {
603
628
  this.onStop();
@@ -676,9 +701,7 @@ function trackEffects(dep, debuggerEventExtraInfo) {
676
701
  dep.add(activeEffect);
677
702
  activeEffect.deps.push(dep);
678
703
  if (activeEffect.onTrack) {
679
- activeEffect.onTrack(Object.assign({
680
- effect: activeEffect
681
- }, debuggerEventExtraInfo));
704
+ activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
682
705
  }
683
706
  }
684
707
  }
@@ -774,7 +797,9 @@ function triggerEffects(dep, debuggerEventExtraInfo) {
774
797
  }
775
798
 
776
799
  const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);
777
- const builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol)
800
+ const builtInSymbols = new Set(
801
+ /*#__PURE__*/
802
+ Object.getOwnPropertyNames(Symbol)
778
803
  .map(key => Symbol[key])
779
804
  .filter(isSymbol));
780
805
  const get = /*#__PURE__*/ createGetter();
@@ -926,13 +951,13 @@ const readonlyHandlers = {
926
951
  get: readonlyGet,
927
952
  set(target, key) {
928
953
  {
929
- console.warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
954
+ warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
930
955
  }
931
956
  return true;
932
957
  },
933
958
  deleteProperty(target, key) {
934
959
  {
935
- console.warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
960
+ warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
936
961
  }
937
962
  return true;
938
963
  }
@@ -1760,7 +1785,7 @@ let preFlushIndex = 0;
1760
1785
  const pendingPostFlushCbs = [];
1761
1786
  let activePostFlushCbs = null;
1762
1787
  let postFlushIndex = 0;
1763
- const resolvedPromise = Promise.resolve();
1788
+ const resolvedPromise = /*#__PURE__*/ Promise.resolve();
1764
1789
  let currentFlushPromise = null;
1765
1790
  let currentPreFlushParentJob = null;
1766
1791
  const RECURSION_LIMIT = 100;
@@ -2176,6 +2201,8 @@ function devtoolsComponentEmit(component, event, params) {
2176
2201
  }
2177
2202
 
2178
2203
  function emit$1(instance, event, ...rawArgs) {
2204
+ if (instance.isUnmounted)
2205
+ return;
2179
2206
  const props = instance.vnode.props || EMPTY_OBJ;
2180
2207
  {
2181
2208
  const { emitsOptions, propsOptions: [propsOptions] } = instance;
@@ -3163,12 +3190,10 @@ function watchEffect(effect, options) {
3163
3190
  return doWatch(effect, null, options);
3164
3191
  }
3165
3192
  function watchPostEffect(effect, options) {
3166
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'post' })
3167
- ));
3193
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
3168
3194
  }
3169
3195
  function watchSyncEffect(effect, options) {
3170
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'sync' })
3171
- ));
3196
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
3172
3197
  }
3173
3198
  // initial value for watchers to trigger on undefined initial values
3174
3199
  const INITIAL_WATCHER_VALUE = {};
@@ -3454,10 +3479,22 @@ const BaseTransitionImpl = {
3454
3479
  if (!children || !children.length) {
3455
3480
  return;
3456
3481
  }
3457
- // warn multiple elements
3482
+ let child = children[0];
3458
3483
  if (children.length > 1) {
3459
- warn$1('<transition> can only be used on a single element or component. Use ' +
3460
- '<transition-group> for lists.');
3484
+ let hasFound = false;
3485
+ // locate first non-comment child
3486
+ for (const c of children) {
3487
+ if (c.type !== Comment) {
3488
+ if (hasFound) {
3489
+ // warn more than one non-comment child
3490
+ warn$1('<transition> can only be used on a single element or component. ' +
3491
+ 'Use <transition-group> for lists.');
3492
+ break;
3493
+ }
3494
+ child = c;
3495
+ hasFound = true;
3496
+ }
3497
+ }
3461
3498
  }
3462
3499
  // there's no need to track reactivity for these props so use the raw
3463
3500
  // props for a bit better perf
@@ -3465,11 +3502,11 @@ const BaseTransitionImpl = {
3465
3502
  const { mode } = rawProps;
3466
3503
  // check mode
3467
3504
  if (mode &&
3468
- mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') {
3505
+ mode !== 'in-out' &&
3506
+ mode !== 'out-in' &&
3507
+ mode !== 'default') {
3469
3508
  warn$1(`invalid <transition> mode: ${mode}`);
3470
3509
  }
3471
- // at this point children has a guaranteed length of 1.
3472
- const child = children[0];
3473
3510
  if (state.isLeaving) {
3474
3511
  return emptyPlaceholder(child);
3475
3512
  }
@@ -3692,20 +3729,24 @@ function setTransitionHooks(vnode, hooks) {
3692
3729
  vnode.transition = hooks;
3693
3730
  }
3694
3731
  }
3695
- function getTransitionRawChildren(children, keepComment = false) {
3732
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
3696
3733
  let ret = [];
3697
3734
  let keyedFragmentCount = 0;
3698
3735
  for (let i = 0; i < children.length; i++) {
3699
- const child = children[i];
3736
+ let child = children[i];
3737
+ // #5360 inherit parent key in case of <template v-for>
3738
+ const key = parentKey == null
3739
+ ? child.key
3740
+ : String(parentKey) + String(child.key != null ? child.key : i);
3700
3741
  // handle fragment children case, e.g. v-for
3701
3742
  if (child.type === Fragment) {
3702
3743
  if (child.patchFlag & 128 /* KEYED_FRAGMENT */)
3703
3744
  keyedFragmentCount++;
3704
- ret = ret.concat(getTransitionRawChildren(child.children, keepComment));
3745
+ ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));
3705
3746
  }
3706
3747
  // comment placeholders should be skipped, e.g. v-if
3707
3748
  else if (keepComment || child.type !== Comment) {
3708
- ret.push(child);
3749
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
3709
3750
  }
3710
3751
  }
3711
3752
  // #1126 if a transition children list contains multiple sub fragments, these
@@ -4671,6 +4712,10 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
4671
4712
  const propsToUpdate = instance.vnode.dynamicProps;
4672
4713
  for (let i = 0; i < propsToUpdate.length; i++) {
4673
4714
  let key = propsToUpdate[i];
4715
+ // skip if the prop key is a declared emit event listener
4716
+ if (isEmitListener(instance.emitsOptions, key)) {
4717
+ continue;
4718
+ }
4674
4719
  // PROPS flag guarantees rawProps to be non-null
4675
4720
  const value = rawProps[key];
4676
4721
  if (options) {
@@ -5195,7 +5240,8 @@ function withDirectives(vnode, directives) {
5195
5240
  warn$1(`withDirectives can only be used inside render functions.`);
5196
5241
  return vnode;
5197
5242
  }
5198
- const instance = internalInstance.proxy;
5243
+ const instance = getExposeProxy(internalInstance) ||
5244
+ internalInstance.proxy;
5199
5245
  const bindings = vnode.dirs || (vnode.dirs = []);
5200
5246
  for (let i = 0; i < directives.length; i++) {
5201
5247
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -5267,6 +5313,9 @@ function createAppContext() {
5267
5313
  let uid = 0;
5268
5314
  function createAppAPI(render, hydrate) {
5269
5315
  return function createApp(rootComponent, rootProps = null) {
5316
+ if (!isFunction(rootComponent)) {
5317
+ rootComponent = Object.assign({}, rootComponent);
5318
+ }
5270
5319
  if (rootProps != null && !isObject(rootProps)) {
5271
5320
  warn$1(`root props passed to app.mount() must be an object.`);
5272
5321
  rootProps = null;
@@ -5463,6 +5512,9 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
5463
5512
  if (!isArray(existing)) {
5464
5513
  if (_isString) {
5465
5514
  refs[ref] = [refValue];
5515
+ if (hasOwn(setupState, ref)) {
5516
+ setupState[ref] = refs[ref];
5517
+ }
5466
5518
  }
5467
5519
  else {
5468
5520
  ref.value = [refValue];
@@ -5661,7 +5713,8 @@ function createHydrationFunctions(rendererInternals) {
5661
5713
  // e.g. <option :value="obj">, <input type="checkbox" :true-value="1">
5662
5714
  const forcePatchValue = (type === 'input' && dirs) || type === 'option';
5663
5715
  // skip props & children if this is hoisted static nodes
5664
- if (forcePatchValue || patchFlag !== -1 /* HOISTED */) {
5716
+ // #5405 in dev, always hydrate children for HMR
5717
+ {
5665
5718
  if (dirs) {
5666
5719
  invokeDirectiveHook(vnode, null, parentComponent, 'created');
5667
5720
  }
@@ -5834,7 +5887,7 @@ function startMeasure(instance, type) {
5834
5887
  perf.mark(`vue-${type}-${instance.uid}`);
5835
5888
  }
5836
5889
  {
5837
- devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now());
5890
+ devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());
5838
5891
  }
5839
5892
  }
5840
5893
  function endMeasure(instance, type) {
@@ -5847,7 +5900,7 @@ function endMeasure(instance, type) {
5847
5900
  perf.clearMarks(endTag);
5848
5901
  }
5849
5902
  {
5850
- devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now());
5903
+ devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());
5851
5904
  }
5852
5905
  }
5853
5906
  function isSupported() {
@@ -6975,7 +7028,22 @@ function baseCreateRenderer(options, createHydrationFns) {
6975
7028
  const remove = vnode => {
6976
7029
  const { type, el, anchor, transition } = vnode;
6977
7030
  if (type === Fragment) {
6978
- removeFragment(el, anchor);
7031
+ if (vnode.patchFlag > 0 &&
7032
+ vnode.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */ &&
7033
+ transition &&
7034
+ !transition.persisted) {
7035
+ vnode.children.forEach(child => {
7036
+ if (child.type === Comment) {
7037
+ hostRemove(child.el);
7038
+ }
7039
+ else {
7040
+ remove(child);
7041
+ }
7042
+ });
7043
+ }
7044
+ else {
7045
+ removeFragment(el, anchor);
7046
+ }
6979
7047
  return;
6980
7048
  }
6981
7049
  if (type === Static) {
@@ -7994,7 +8062,10 @@ function renderSlot(slots, name, props = {},
7994
8062
  // this is not a user-facing function, so the fallback is always generated by
7995
8063
  // the compiler and guaranteed to be a function returning an array
7996
8064
  fallback, noSlotted) {
7997
- if (currentRenderingInstance.isCE) {
8065
+ if (currentRenderingInstance.isCE ||
8066
+ (currentRenderingInstance.parent &&
8067
+ isAsyncWrapper(currentRenderingInstance.parent) &&
8068
+ currentRenderingInstance.parent.isCE)) {
7998
8069
  return createVNode('slot', name === 'default' ? null : { name }, fallback && fallback());
7999
8070
  }
8000
8071
  let slot = slots[name];
@@ -8067,7 +8138,10 @@ const getPublicInstance = (i) => {
8067
8138
  return getExposeProxy(i) || i.proxy;
8068
8139
  return getPublicInstance(i.parent);
8069
8140
  };
8070
- const publicPropertiesMap = extend(Object.create(null), {
8141
+ const publicPropertiesMap =
8142
+ // Move PURE marker to new line to workaround compiler discarding it
8143
+ // due to type annotation
8144
+ /*#__PURE__*/ extend(Object.create(null), {
8071
8145
  $: i => i,
8072
8146
  $el: i => i.vnode.el,
8073
8147
  $data: i => i.data,
@@ -8195,9 +8269,11 @@ const PublicInstanceProxyHandlers = {
8195
8269
  const { data, setupState, ctx } = instance;
8196
8270
  if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
8197
8271
  setupState[key] = value;
8272
+ return true;
8198
8273
  }
8199
8274
  else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
8200
8275
  data[key] = value;
8276
+ return true;
8201
8277
  }
8202
8278
  else if (hasOwn(instance.props, key)) {
8203
8279
  warn$1(`Attempting to mutate prop "${key}". Props are readonly.`, instance);
@@ -8231,6 +8307,16 @@ const PublicInstanceProxyHandlers = {
8231
8307
  hasOwn(ctx, key) ||
8232
8308
  hasOwn(publicPropertiesMap, key) ||
8233
8309
  hasOwn(appContext.config.globalProperties, key));
8310
+ },
8311
+ defineProperty(target, key, descriptor) {
8312
+ if (descriptor.get != null) {
8313
+ // invalidate key cache of a getter based property #5417
8314
+ target._.accessCache[key] = 0;
8315
+ }
8316
+ else if (hasOwn(descriptor, 'value')) {
8317
+ this.set(target, key, descriptor.value, null);
8318
+ }
8319
+ return Reflect.defineProperty(target, key, descriptor);
8234
8320
  }
8235
8321
  };
8236
8322
  {
@@ -8433,6 +8519,7 @@ function setupComponent(instance, isSSR = false) {
8433
8519
  return setupResult;
8434
8520
  }
8435
8521
  function setupStatefulComponent(instance, isSSR) {
8522
+ var _a;
8436
8523
  const Component = instance.type;
8437
8524
  {
8438
8525
  if (Component.name) {
@@ -8490,6 +8577,13 @@ function setupStatefulComponent(instance, isSSR) {
8490
8577
  // async setup returned Promise.
8491
8578
  // bail here and wait for re-entry.
8492
8579
  instance.asyncDep = setupResult;
8580
+ if (!instance.suspense) {
8581
+ const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';
8582
+ warn$1(`Component <${name}>: setup function returned a promise, but no ` +
8583
+ `<Suspense> boundary was found in the parent component tree. ` +
8584
+ `A component with async setup() must be nested in a <Suspense> ` +
8585
+ `in order to be rendered.`);
8586
+ }
8493
8587
  }
8494
8588
  }
8495
8589
  else {
@@ -9106,7 +9200,7 @@ function isMemoSame(cached, memo) {
9106
9200
  }
9107
9201
 
9108
9202
  // Core API ------------------------------------------------------------------
9109
- const version = "3.2.30";
9203
+ const version = "3.2.33";
9110
9204
  /**
9111
9205
  * SSR utils for \@vue/server-renderer. Only exposed in cjs builds.
9112
9206
  * @internal
@@ -9123,7 +9217,7 @@ const compatUtils = (null);
9123
9217
 
9124
9218
  const svgNS = 'http://www.w3.org/2000/svg';
9125
9219
  const doc = (typeof document !== 'undefined' ? document : null);
9126
- const templateContainer = doc && doc.createElement('template');
9220
+ const templateContainer = doc && /*#__PURE__*/ doc.createElement('template');
9127
9221
  const nodeOps = {
9128
9222
  insert: (child, parent, anchor) => {
9129
9223
  parent.insertBefore(child, anchor || null);
@@ -9274,6 +9368,8 @@ function setStyle(style, name, val) {
9274
9368
  val.forEach(v => setStyle(style, name, v));
9275
9369
  }
9276
9370
  else {
9371
+ if (val == null)
9372
+ val = '';
9277
9373
  if (name.startsWith('--')) {
9278
9374
  // custom property definition
9279
9375
  style.setProperty(name, val);
@@ -9368,31 +9464,28 @@ prevChildren, parentComponent, parentSuspense, unmountChildren) {
9368
9464
  }
9369
9465
  return;
9370
9466
  }
9467
+ let needRemove = false;
9371
9468
  if (value === '' || value == null) {
9372
9469
  const type = typeof el[key];
9373
9470
  if (type === 'boolean') {
9374
9471
  // e.g. <select multiple> compiles to { multiple: '' }
9375
- el[key] = includeBooleanAttr(value);
9376
- return;
9472
+ value = includeBooleanAttr(value);
9377
9473
  }
9378
9474
  else if (value == null && type === 'string') {
9379
9475
  // e.g. <div :id="null">
9380
- el[key] = '';
9381
- el.removeAttribute(key);
9382
- return;
9476
+ value = '';
9477
+ needRemove = true;
9383
9478
  }
9384
9479
  else if (type === 'number') {
9385
9480
  // e.g. <img :width="null">
9386
9481
  // the value of some IDL attr must be greater than 0, e.g. input.size = 0 -> error
9387
- try {
9388
- el[key] = 0;
9389
- }
9390
- catch (_a) { }
9391
- el.removeAttribute(key);
9392
- return;
9482
+ value = 0;
9483
+ needRemove = true;
9393
9484
  }
9394
9485
  }
9395
- // some properties perform value validation and throw
9486
+ // some properties perform value validation and throw,
9487
+ // some properties has getter, no setter, will error in 'use strict'
9488
+ // eg. <select :type="null"></select> <select :willValidate="null"></select>
9396
9489
  try {
9397
9490
  el[key] = value;
9398
9491
  }
@@ -9402,31 +9495,35 @@ prevChildren, parentComponent, parentSuspense, unmountChildren) {
9402
9495
  `value ${value} is invalid.`, e);
9403
9496
  }
9404
9497
  }
9498
+ needRemove && el.removeAttribute(key);
9405
9499
  }
9406
9500
 
9407
9501
  // Async edge case fix requires storing an event listener's attach timestamp.
9408
- let _getNow = Date.now;
9409
- let skipTimestampCheck = false;
9410
- if (typeof window !== 'undefined') {
9411
- // Determine what event timestamp the browser is using. Annoyingly, the
9412
- // timestamp can either be hi-res (relative to page load) or low-res
9413
- // (relative to UNIX epoch), so in order to compare time we have to use the
9414
- // same timestamp type when saving the flush timestamp.
9415
- if (_getNow() > document.createEvent('Event').timeStamp) {
9416
- // if the low-res timestamp which is bigger than the event timestamp
9417
- // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
9418
- // and we need to use the hi-res version for event listeners as well.
9419
- _getNow = () => performance.now();
9420
- }
9421
- // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
9422
- // and does not fire microtasks in between event propagation, so safe to exclude.
9423
- const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);
9424
- skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);
9425
- }
9502
+ const [_getNow, skipTimestampCheck] = /*#__PURE__*/ (() => {
9503
+ let _getNow = Date.now;
9504
+ let skipTimestampCheck = false;
9505
+ if (typeof window !== 'undefined') {
9506
+ // Determine what event timestamp the browser is using. Annoyingly, the
9507
+ // timestamp can either be hi-res (relative to page load) or low-res
9508
+ // (relative to UNIX epoch), so in order to compare time we have to use the
9509
+ // same timestamp type when saving the flush timestamp.
9510
+ if (Date.now() > document.createEvent('Event').timeStamp) {
9511
+ // if the low-res timestamp which is bigger than the event timestamp
9512
+ // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
9513
+ // and we need to use the hi-res version for event listeners as well.
9514
+ _getNow = () => performance.now();
9515
+ }
9516
+ // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
9517
+ // and does not fire microtasks in between event propagation, so safe to exclude.
9518
+ const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);
9519
+ skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);
9520
+ }
9521
+ return [_getNow, skipTimestampCheck];
9522
+ })();
9426
9523
  // To avoid the overhead of repeatedly calling performance.now(), we cache
9427
9524
  // and use the same timestamp for all event listeners attached in the same tick.
9428
9525
  let cachedNow = 0;
9429
- const p = Promise.resolve();
9526
+ const p = /*#__PURE__*/ Promise.resolve();
9430
9527
  const reset = () => {
9431
9528
  cachedNow = 0;
9432
9529
  };
@@ -9551,13 +9648,13 @@ function shouldSetAsProp(el, key, value, isSVG) {
9551
9648
  }
9552
9649
  return false;
9553
9650
  }
9554
- // spellcheck and draggable are numerated attrs, however their
9555
- // corresponding DOM properties are actually booleans - this leads to
9556
- // setting it with a string "false" value leading it to be coerced to
9557
- // `true`, so we need to always treat them as attributes.
9651
+ // these are enumerated attrs, however their corresponding DOM properties
9652
+ // are actually booleans - this leads to setting it with a string "false"
9653
+ // value leading it to be coerced to `true`, so we need to always treat
9654
+ // them as attributes.
9558
9655
  // Note that `contentEditable` doesn't have this problem: its DOM
9559
9656
  // property is also enumerated string values.
9560
- if (key === 'spellcheck' || key === 'draggable') {
9657
+ if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {
9561
9658
  return false;
9562
9659
  }
9563
9660
  // #1787, #2840 form property on form elements is readonly and must be set as
@@ -10624,7 +10721,7 @@ function setDisplay(el, value) {
10624
10721
  el.style.display = value ? el._vod : 'none';
10625
10722
  }
10626
10723
 
10627
- const rendererOptions = extend({ patchProp }, nodeOps);
10724
+ const rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);
10628
10725
  // lazy create the renderer - this makes core renderer logic tree-shakable
10629
10726
  // in case the user only imports reactivity utilities from Vue.
10630
10727
  let renderer;