@vue/compat 3.2.29 → 3.2.32

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.
@@ -277,13 +277,15 @@ function looseIndexOf(arr, val) {
277
277
  * @private
278
278
  */
279
279
  const toDisplayString = (val) => {
280
- return val == null
281
- ? ''
282
- : isArray(val) ||
283
- (isObject(val) &&
284
- (val.toString === objectToString || !isFunction(val.toString)))
285
- ? JSON.stringify(val, replacer, 2)
286
- : String(val);
280
+ return isString(val)
281
+ ? val
282
+ : val == null
283
+ ? ''
284
+ : isArray(val) ||
285
+ (isObject(val) &&
286
+ (val.toString === objectToString || !isFunction(val.toString)))
287
+ ? JSON.stringify(val, replacer, 2)
288
+ : String(val);
287
289
  };
288
290
  const replacer = (_key, val) => {
289
291
  // can't use isRef here since @vue/shared has no deps
@@ -357,6 +359,7 @@ const isReservedProp = /*#__PURE__*/ makeMap(
357
359
  'onVnodeBeforeMount,onVnodeMounted,' +
358
360
  'onVnodeBeforeUpdate,onVnodeUpdated,' +
359
361
  'onVnodeBeforeUnmount,onVnodeUnmounted');
362
+ const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
360
363
  const cacheStringFunction = (fn) => {
361
364
  const cache = Object.create(null);
362
365
  return ((str) => {
@@ -422,11 +425,19 @@ function warn(msg, ...args) {
422
425
  }
423
426
 
424
427
  let activeEffectScope;
425
- const effectScopeStack = [];
426
428
  class EffectScope {
427
429
  constructor(detached = false) {
430
+ /**
431
+ * @internal
432
+ */
428
433
  this.active = true;
434
+ /**
435
+ * @internal
436
+ */
429
437
  this.effects = [];
438
+ /**
439
+ * @internal
440
+ */
430
441
  this.cleanups = [];
431
442
  if (!detached && activeEffectScope) {
432
443
  this.parent = activeEffectScope;
@@ -436,36 +447,46 @@ class EffectScope {
436
447
  }
437
448
  run(fn) {
438
449
  if (this.active) {
450
+ const currentEffectScope = activeEffectScope;
439
451
  try {
440
- this.on();
452
+ activeEffectScope = this;
441
453
  return fn();
442
454
  }
443
455
  finally {
444
- this.off();
456
+ activeEffectScope = currentEffectScope;
445
457
  }
446
458
  }
447
459
  else {
448
460
  warn(`cannot run an inactive effect scope.`);
449
461
  }
450
462
  }
463
+ /**
464
+ * This should only be called on non-detached scopes
465
+ * @internal
466
+ */
451
467
  on() {
452
- if (this.active) {
453
- effectScopeStack.push(this);
454
- activeEffectScope = this;
455
- }
468
+ activeEffectScope = this;
456
469
  }
470
+ /**
471
+ * This should only be called on non-detached scopes
472
+ * @internal
473
+ */
457
474
  off() {
458
- if (this.active) {
459
- effectScopeStack.pop();
460
- activeEffectScope = effectScopeStack[effectScopeStack.length - 1];
461
- }
475
+ activeEffectScope = this.parent;
462
476
  }
463
477
  stop(fromParent) {
464
478
  if (this.active) {
465
- this.effects.forEach(e => e.stop());
466
- this.cleanups.forEach(cleanup => cleanup());
479
+ let i, l;
480
+ for (i = 0, l = this.effects.length; i < l; i++) {
481
+ this.effects[i].stop();
482
+ }
483
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
484
+ this.cleanups[i]();
485
+ }
467
486
  if (this.scopes) {
468
- this.scopes.forEach(e => e.stop(true));
487
+ for (i = 0, l = this.scopes.length; i < l; i++) {
488
+ this.scopes[i].stop(true);
489
+ }
469
490
  }
470
491
  // nested scope, dereference from parent to avoid memory leaks
471
492
  if (this.parent && !fromParent) {
@@ -483,8 +504,7 @@ class EffectScope {
483
504
  function effectScope(detached) {
484
505
  return new EffectScope(detached);
485
506
  }
486
- function recordEffectScope(effect, scope) {
487
- scope = scope || activeEffectScope;
507
+ function recordEffectScope(effect, scope = activeEffectScope) {
488
508
  if (scope && scope.active) {
489
509
  scope.effects.push(effect);
490
510
  }
@@ -547,7 +567,6 @@ let trackOpBit = 1;
547
567
  * When recursion depth is greater, fall back to using a full cleanup.
548
568
  */
549
569
  const maxMarkerBits = 30;
550
- const effectStack = [];
551
570
  let activeEffect;
552
571
  const ITERATE_KEY = Symbol('iterate' );
553
572
  const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );
@@ -557,35 +576,42 @@ class ReactiveEffect {
557
576
  this.scheduler = scheduler;
558
577
  this.active = true;
559
578
  this.deps = [];
579
+ this.parent = undefined;
560
580
  recordEffectScope(this, scope);
561
581
  }
562
582
  run() {
563
583
  if (!this.active) {
564
584
  return this.fn();
565
585
  }
566
- if (!effectStack.length || !effectStack.includes(this)) {
567
- try {
568
- effectStack.push((activeEffect = this));
569
- enableTracking();
570
- trackOpBit = 1 << ++effectTrackDepth;
571
- if (effectTrackDepth <= maxMarkerBits) {
572
- initDepMarkers(this);
573
- }
574
- else {
575
- cleanupEffect(this);
576
- }
577
- return this.fn();
586
+ let parent = activeEffect;
587
+ let lastShouldTrack = shouldTrack;
588
+ while (parent) {
589
+ if (parent === this) {
590
+ return;
578
591
  }
579
- finally {
580
- if (effectTrackDepth <= maxMarkerBits) {
581
- finalizeDepMarkers(this);
582
- }
583
- trackOpBit = 1 << --effectTrackDepth;
584
- resetTracking();
585
- effectStack.pop();
586
- const n = effectStack.length;
587
- activeEffect = n > 0 ? effectStack[n - 1] : undefined;
592
+ parent = parent.parent;
593
+ }
594
+ try {
595
+ this.parent = activeEffect;
596
+ activeEffect = this;
597
+ shouldTrack = true;
598
+ trackOpBit = 1 << ++effectTrackDepth;
599
+ if (effectTrackDepth <= maxMarkerBits) {
600
+ initDepMarkers(this);
601
+ }
602
+ else {
603
+ cleanupEffect(this);
588
604
  }
605
+ return this.fn();
606
+ }
607
+ finally {
608
+ if (effectTrackDepth <= maxMarkerBits) {
609
+ finalizeDepMarkers(this);
610
+ }
611
+ trackOpBit = 1 << --effectTrackDepth;
612
+ activeEffect = this.parent;
613
+ shouldTrack = lastShouldTrack;
614
+ this.parent = undefined;
589
615
  }
590
616
  }
591
617
  stop() {
@@ -633,32 +659,24 @@ function pauseTracking() {
633
659
  trackStack.push(shouldTrack);
634
660
  shouldTrack = false;
635
661
  }
636
- function enableTracking() {
637
- trackStack.push(shouldTrack);
638
- shouldTrack = true;
639
- }
640
662
  function resetTracking() {
641
663
  const last = trackStack.pop();
642
664
  shouldTrack = last === undefined ? true : last;
643
665
  }
644
666
  function track(target, type, key) {
645
- if (!isTracking()) {
646
- return;
647
- }
648
- let depsMap = targetMap.get(target);
649
- if (!depsMap) {
650
- targetMap.set(target, (depsMap = new Map()));
651
- }
652
- let dep = depsMap.get(key);
653
- if (!dep) {
654
- depsMap.set(key, (dep = createDep()));
667
+ if (shouldTrack && activeEffect) {
668
+ let depsMap = targetMap.get(target);
669
+ if (!depsMap) {
670
+ targetMap.set(target, (depsMap = new Map()));
671
+ }
672
+ let dep = depsMap.get(key);
673
+ if (!dep) {
674
+ depsMap.set(key, (dep = createDep()));
675
+ }
676
+ const eventInfo = { effect: activeEffect, target, type, key }
677
+ ;
678
+ trackEffects(dep, eventInfo);
655
679
  }
656
- const eventInfo = { effect: activeEffect, target, type, key }
657
- ;
658
- trackEffects(dep, eventInfo);
659
- }
660
- function isTracking() {
661
- return shouldTrack && activeEffect !== undefined;
662
680
  }
663
681
  function trackEffects(dep, debuggerEventExtraInfo) {
664
682
  let shouldTrack = false;
@@ -676,9 +694,7 @@ function trackEffects(dep, debuggerEventExtraInfo) {
676
694
  dep.add(activeEffect);
677
695
  activeEffect.deps.push(dep);
678
696
  if (activeEffect.onTrack) {
679
- activeEffect.onTrack(Object.assign({
680
- effect: activeEffect
681
- }, debuggerEventExtraInfo));
697
+ activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
682
698
  }
683
699
  }
684
700
  }
@@ -1343,13 +1359,10 @@ const toReactive = (value) => isObject(value) ? reactive(value) : value;
1343
1359
  const toReadonly = (value) => isObject(value) ? readonly(value) : value;
1344
1360
 
1345
1361
  function trackRefValue(ref) {
1346
- if (isTracking()) {
1362
+ if (shouldTrack && activeEffect) {
1347
1363
  ref = toRaw(ref);
1348
- if (!ref.dep) {
1349
- ref.dep = createDep();
1350
- }
1351
1364
  {
1352
- trackEffects(ref.dep, {
1365
+ trackEffects(ref.dep || (ref.dep = createDep()), {
1353
1366
  target: ref,
1354
1367
  type: "get" /* GET */,
1355
1368
  key: 'value'
@@ -1371,7 +1384,7 @@ function triggerRefValue(ref, newVal) {
1371
1384
  }
1372
1385
  }
1373
1386
  function isRef(r) {
1374
- return Boolean(r && r.__v_isRef === true);
1387
+ return !!(r && r.__v_isRef === true);
1375
1388
  }
1376
1389
  function ref(value) {
1377
1390
  return createRef(value, false);
@@ -2182,23 +2195,23 @@ const deprecationData = {
2182
2195
  ["GLOBAL_MOUNT" /* GLOBAL_MOUNT */]: {
2183
2196
  message: `The global app bootstrapping API has changed: vm.$mount() and the "el" ` +
2184
2197
  `option have been removed. Use createApp(RootComponent).mount() instead.`,
2185
- link: `https://v3.vuejs.org/guide/migration/global-api.html#mounting-app-instance`
2198
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance`
2186
2199
  },
2187
2200
  ["GLOBAL_MOUNT_CONTAINER" /* GLOBAL_MOUNT_CONTAINER */]: {
2188
2201
  message: `Vue detected directives on the mount container. ` +
2189
2202
  `In Vue 3, the container is no longer considered part of the template ` +
2190
2203
  `and will not be processed/replaced.`,
2191
- link: `https://v3.vuejs.org/guide/migration/mount-changes.html`
2204
+ link: `https://v3-migration.vuejs.org/breaking-changes/mount-changes.html`
2192
2205
  },
2193
2206
  ["GLOBAL_EXTEND" /* GLOBAL_EXTEND */]: {
2194
2207
  message: `Vue.extend() has been removed in Vue 3. ` +
2195
2208
  `Use defineComponent() instead.`,
2196
- link: `https://v3.vuejs.org/api/global-api.html#definecomponent`
2209
+ link: `https://vuejs.org/api/general.html#definecomponent`
2197
2210
  },
2198
2211
  ["GLOBAL_PROTOTYPE" /* GLOBAL_PROTOTYPE */]: {
2199
2212
  message: `Vue.prototype is no longer available in Vue 3. ` +
2200
2213
  `Use app.config.globalProperties instead.`,
2201
- link: `https://v3.vuejs.org/guide/migration/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2214
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2202
2215
  },
2203
2216
  ["GLOBAL_SET" /* GLOBAL_SET */]: {
2204
2217
  message: `Vue.set() has been removed as it is no longer needed in Vue 3. ` +
@@ -2211,7 +2224,7 @@ const deprecationData = {
2211
2224
  ["GLOBAL_OBSERVABLE" /* GLOBAL_OBSERVABLE */]: {
2212
2225
  message: `Vue.observable() has been removed. ` +
2213
2226
  `Use \`import { reactive } from "vue"\` from Composition API instead.`,
2214
- link: `https://v3.vuejs.org/api/basic-reactivity.html`
2227
+ link: `https://vuejs.org/api/reactivity-core.html#reactive`
2215
2228
  },
2216
2229
  ["GLOBAL_PRIVATE_UTIL" /* GLOBAL_PRIVATE_UTIL */]: {
2217
2230
  message: `Vue.util has been removed. Please refactor to avoid its usage ` +
@@ -2230,11 +2243,11 @@ const deprecationData = {
2230
2243
  ["CONFIG_KEY_CODES" /* CONFIG_KEY_CODES */]: {
2231
2244
  message: `config.keyCodes has been removed. ` +
2232
2245
  `In Vue 3, you can directly use the kebab-case key names as v-on modifiers.`,
2233
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2246
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2234
2247
  },
2235
2248
  ["CONFIG_PRODUCTION_TIP" /* CONFIG_PRODUCTION_TIP */]: {
2236
2249
  message: `config.productionTip has been removed.`,
2237
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-productiontip-removed`
2250
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed`
2238
2251
  },
2239
2252
  ["CONFIG_IGNORED_ELEMENTS" /* CONFIG_IGNORED_ELEMENTS */]: {
2240
2253
  message: () => {
@@ -2247,7 +2260,7 @@ const deprecationData = {
2247
2260
  }
2248
2261
  return msg;
2249
2262
  },
2250
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2263
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2251
2264
  },
2252
2265
  ["CONFIG_WHITESPACE" /* CONFIG_WHITESPACE */]: {
2253
2266
  // this warning is only relevant in the full build when using runtime
@@ -2270,12 +2283,12 @@ const deprecationData = {
2270
2283
  },
2271
2284
  ["INSTANCE_DESTROY" /* INSTANCE_DESTROY */]: {
2272
2285
  message: `vm.$destroy() has been removed. Use app.unmount() instead.`,
2273
- link: `https://v3.vuejs.org/api/application-api.html#unmount`
2286
+ link: `https://vuejs.org/api/application.html#app-unmount`
2274
2287
  },
2275
2288
  ["INSTANCE_EVENT_EMITTER" /* INSTANCE_EVENT_EMITTER */]: {
2276
2289
  message: `vm.$on/$once/$off() have been removed. ` +
2277
2290
  `Use an external event emitter library instead.`,
2278
- link: `https://v3.vuejs.org/guide/migration/events-api.html`
2291
+ link: `https://v3-migration.vuejs.org/breaking-changes/events-api.html`
2279
2292
  },
2280
2293
  ["INSTANCE_EVENT_HOOKS" /* INSTANCE_EVENT_HOOKS */]: {
2281
2294
  message: event => `"${event}" lifecycle events are no longer supported. From templates, ` +
@@ -2283,23 +2296,23 @@ const deprecationData = {
2283
2296
  `should be changed to @vnode-${event.slice(5)}. ` +
2284
2297
  `From JavaScript, use Composition API to dynamically register lifecycle ` +
2285
2298
  `hooks.`,
2286
- link: `https://v3.vuejs.org/guide/migration/vnode-lifecycle-events.html`
2299
+ link: `https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html`
2287
2300
  },
2288
2301
  ["INSTANCE_CHILDREN" /* INSTANCE_CHILDREN */]: {
2289
2302
  message: `vm.$children has been removed. Consider refactoring your logic ` +
2290
2303
  `to avoid relying on direct access to child components.`,
2291
- link: `https://v3.vuejs.org/guide/migration/children.html`
2304
+ link: `https://v3-migration.vuejs.org/breaking-changes/children.html`
2292
2305
  },
2293
2306
  ["INSTANCE_LISTENERS" /* INSTANCE_LISTENERS */]: {
2294
2307
  message: `vm.$listeners has been removed. In Vue 3, parent v-on listeners are ` +
2295
2308
  `included in vm.$attrs and it is no longer necessary to separately use ` +
2296
2309
  `v-on="$listeners" if you are already using v-bind="$attrs". ` +
2297
2310
  `(Note: the Vue 3 behavior only applies if this compat config is disabled)`,
2298
- link: `https://v3.vuejs.org/guide/migration/listeners-removed.html`
2311
+ link: `https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html`
2299
2312
  },
2300
2313
  ["INSTANCE_SCOPED_SLOTS" /* INSTANCE_SCOPED_SLOTS */]: {
2301
2314
  message: `vm.$scopedSlots has been removed. Use vm.$slots instead.`,
2302
- link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
2315
+ link: `https://v3-migration.vuejs.org/breaking-changes/slots-unification.html`
2303
2316
  },
2304
2317
  ["INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */]: {
2305
2318
  message: componentName => `Component <${componentName || 'Anonymous'}> has \`inheritAttrs: false\` but is ` +
@@ -2310,17 +2323,17 @@ const deprecationData = {
2310
2323
  `If you are binding $attrs to a non-root element and expecting ` +
2311
2324
  `class/style to fallthrough on root, you will need to now manually bind ` +
2312
2325
  `them on root via :class="$attrs.class".`,
2313
- link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`
2326
+ link: `https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html`
2314
2327
  },
2315
2328
  ["OPTIONS_DATA_FN" /* OPTIONS_DATA_FN */]: {
2316
2329
  message: `The "data" option can no longer be a plain object. ` +
2317
2330
  `Always use a function.`,
2318
- link: `https://v3.vuejs.org/guide/migration/data-option.html`
2331
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html`
2319
2332
  },
2320
2333
  ["OPTIONS_DATA_MERGE" /* OPTIONS_DATA_MERGE */]: {
2321
2334
  message: (key) => `Detected conflicting key "${key}" when merging data option values. ` +
2322
2335
  `In Vue 3, data keys are merged shallowly and will override one another.`,
2323
- link: `https://v3.vuejs.org/guide/migration/data-option.html#mixin-merge-behavior-change`
2336
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html#mixin-merge-behavior-change`
2324
2337
  },
2325
2338
  ["OPTIONS_BEFORE_DESTROY" /* OPTIONS_BEFORE_DESTROY */]: {
2326
2339
  message: `\`beforeDestroy\` has been renamed to \`beforeUnmount\`.`
@@ -2334,23 +2347,23 @@ const deprecationData = {
2334
2347
  `If current usage is intended, you can disable the compat behavior and ` +
2335
2348
  `suppress this warning with:` +
2336
2349
  `\n\n configureCompat({ ${"WATCH_ARRAY" /* WATCH_ARRAY */}: false })\n`,
2337
- link: `https://v3.vuejs.org/guide/migration/watch.html`
2350
+ link: `https://v3-migration.vuejs.org/breaking-changes/watch.html`
2338
2351
  },
2339
2352
  ["PROPS_DEFAULT_THIS" /* PROPS_DEFAULT_THIS */]: {
2340
2353
  message: (key) => `props default value function no longer has access to "this". The compat ` +
2341
2354
  `build only offers access to this.$options.` +
2342
2355
  `(found in prop "${key}")`,
2343
- link: `https://v3.vuejs.org/guide/migration/props-default-this.html`
2356
+ link: `https://v3-migration.vuejs.org/breaking-changes/props-default-this.html`
2344
2357
  },
2345
2358
  ["CUSTOM_DIR" /* CUSTOM_DIR */]: {
2346
2359
  message: (legacyHook, newHook) => `Custom directive hook "${legacyHook}" has been removed. ` +
2347
2360
  `Use "${newHook}" instead.`,
2348
- link: `https://v3.vuejs.org/guide/migration/custom-directives.html`
2361
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-directives.html`
2349
2362
  },
2350
2363
  ["V_ON_KEYCODE_MODIFIER" /* V_ON_KEYCODE_MODIFIER */]: {
2351
2364
  message: `Using keyCode as v-on modifier is no longer supported. ` +
2352
2365
  `Use kebab-case key name modifiers instead.`,
2353
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2366
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2354
2367
  },
2355
2368
  ["ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */]: {
2356
2369
  message: (name) => `Attribute "${name}" with v-bind value \`false\` will render ` +
@@ -2358,7 +2371,7 @@ const deprecationData = {
2358
2371
  `use \`null\` or \`undefined\` instead. If the usage is intended, ` +
2359
2372
  `you can disable the compat behavior and suppress this warning with:` +
2360
2373
  `\n\n configureCompat({ ${"ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */}: false })\n`,
2361
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2374
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2362
2375
  },
2363
2376
  ["ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */]: {
2364
2377
  message: (name, value, coerced) => `Enumerated attribute "${name}" with v-bind value \`${value}\` will ` +
@@ -2367,7 +2380,7 @@ const deprecationData = {
2367
2380
  `If the usage is intended, ` +
2368
2381
  `you can disable the compat behavior and suppress this warning with:` +
2369
2382
  `\n\n configureCompat({ ${"ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */}: false })\n`,
2370
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2383
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2371
2384
  },
2372
2385
  ["TRANSITION_CLASSES" /* TRANSITION_CLASSES */]: {
2373
2386
  message: `` // this feature cannot be runtime-detected
@@ -2378,7 +2391,7 @@ const deprecationData = {
2378
2391
  `for styling, you can disable the compat behavior and suppress this ` +
2379
2392
  `warning with:` +
2380
2393
  `\n\n configureCompat({ ${"TRANSITION_GROUP_ROOT" /* TRANSITION_GROUP_ROOT */}: false })\n`,
2381
- link: `https://v3.vuejs.org/guide/migration/transition-group.html`
2394
+ link: `https://v3-migration.vuejs.org/breaking-changes/transition-group.html`
2382
2395
  },
2383
2396
  ["COMPONENT_ASYNC" /* COMPONENT_ASYNC */]: {
2384
2397
  message: (comp) => {
@@ -2391,7 +2404,7 @@ const deprecationData = {
2391
2404
  `warning with:` +
2392
2405
  `\n\n configureCompat({ ${"COMPONENT_ASYNC" /* COMPONENT_ASYNC */}: false })\n`);
2393
2406
  },
2394
- link: `https://v3.vuejs.org/guide/migration/async-components.html`
2407
+ link: `https://v3-migration.vuejs.org/breaking-changes/async-components.html`
2395
2408
  },
2396
2409
  ["COMPONENT_FUNCTIONAL" /* COMPONENT_FUNCTIONAL */]: {
2397
2410
  message: (comp) => {
@@ -2402,7 +2415,7 @@ const deprecationData = {
2402
2415
  `components usage have been migrated and its compat behavior has ` +
2403
2416
  `been disabled.`);
2404
2417
  },
2405
- link: `https://v3.vuejs.org/guide/migration/functional-components.html`
2418
+ link: `https://v3-migration.vuejs.org/breaking-changes/functional-components.html`
2406
2419
  },
2407
2420
  ["COMPONENT_V_MODEL" /* COMPONENT_V_MODEL */]: {
2408
2421
  message: (comp) => {
@@ -2419,20 +2432,20 @@ const deprecationData = {
2419
2432
  `to work with v-model should now use the "modelValue" prop and emit the ` +
2420
2433
  `"update:modelValue" event. You can update the usage and then ${configMsg}`);
2421
2434
  },
2422
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
2435
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
2423
2436
  },
2424
2437
  ["RENDER_FUNCTION" /* RENDER_FUNCTION */]: {
2425
2438
  message: `Vue 3's render function API has changed. ` +
2426
2439
  `You can opt-in to the new API with:` +
2427
2440
  `\n\n configureCompat({ ${"RENDER_FUNCTION" /* RENDER_FUNCTION */}: false })\n` +
2428
2441
  `\n (This can also be done per-component via the "compatConfig" option.)`,
2429
- link: `https://v3.vuejs.org/guide/migration/render-function-api.html`
2442
+ link: `https://v3-migration.vuejs.org/breaking-changes/render-function-api.html`
2430
2443
  },
2431
2444
  ["FILTERS" /* FILTERS */]: {
2432
2445
  message: `filters have been removed in Vue 3. ` +
2433
2446
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
2434
2447
  `Use method calls or computed properties instead.`,
2435
- link: `https://v3.vuejs.org/guide/migration/filters.html`
2448
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
2436
2449
  },
2437
2450
  ["PRIVATE_APIS" /* PRIVATE_APIS */]: {
2438
2451
  message: name => `"${name}" is a Vue 2 private API that no longer exists in Vue 3. ` +
@@ -2500,7 +2513,7 @@ function validateCompatConfig(config, instance) {
2500
2513
  warn$1(`Deprecation config "${key}" is compiler-specific and you are ` +
2501
2514
  `running a runtime-only build of Vue. This deprecation should be ` +
2502
2515
  `configured via compiler options in your build setup instead.\n` +
2503
- `Details: https://v3.vuejs.org/guide/migration/migration-build.html`);
2516
+ `Details: https://v3-migration.vuejs.org/breaking-changes/migration-build.html`);
2504
2517
  }
2505
2518
  }
2506
2519
  else {
@@ -3714,12 +3727,10 @@ function watchEffect(effect, options) {
3714
3727
  return doWatch(effect, null, options);
3715
3728
  }
3716
3729
  function watchPostEffect(effect, options) {
3717
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'post' })
3718
- ));
3730
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
3719
3731
  }
3720
3732
  function watchSyncEffect(effect, options) {
3721
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'sync' })
3722
- ));
3733
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
3723
3734
  }
3724
3735
  // initial value for watchers to trigger on undefined initial values
3725
3736
  const INITIAL_WATCHER_VALUE = {};
@@ -4029,7 +4040,9 @@ const BaseTransitionImpl = {
4029
4040
  const { mode } = rawProps;
4030
4041
  // check mode
4031
4042
  if (mode &&
4032
- mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') {
4043
+ mode !== 'in-out' &&
4044
+ mode !== 'out-in' &&
4045
+ mode !== 'default') {
4033
4046
  warn$1(`invalid <transition> mode: ${mode}`);
4034
4047
  }
4035
4048
  // at this point children has a guaranteed length of 1.
@@ -4259,20 +4272,24 @@ function setTransitionHooks(vnode, hooks) {
4259
4272
  vnode.transition = hooks;
4260
4273
  }
4261
4274
  }
4262
- function getTransitionRawChildren(children, keepComment = false) {
4275
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
4263
4276
  let ret = [];
4264
4277
  let keyedFragmentCount = 0;
4265
4278
  for (let i = 0; i < children.length; i++) {
4266
- const child = children[i];
4279
+ let child = children[i];
4280
+ // #5360 inherit parent key in case of <template v-for>
4281
+ const key = parentKey == null
4282
+ ? child.key
4283
+ : String(parentKey) + String(child.key != null ? child.key : i);
4267
4284
  // handle fragment children case, e.g. v-for
4268
4285
  if (child.type === Fragment) {
4269
4286
  if (child.patchFlag & 128 /* KEYED_FRAGMENT */)
4270
4287
  keyedFragmentCount++;
4271
- ret = ret.concat(getTransitionRawChildren(child.children, keepComment));
4288
+ ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));
4272
4289
  }
4273
4290
  // comment placeholders should be skipped, e.g. v-if
4274
4291
  else if (keepComment || child.type !== Comment) {
4275
- ret.push(child);
4292
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
4276
4293
  }
4277
4294
  }
4278
4295
  // #1126 if a transition children list contains multiple sub fragments, these
@@ -5330,6 +5347,10 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
5330
5347
  const propsToUpdate = instance.vnode.dynamicProps;
5331
5348
  for (let i = 0; i < propsToUpdate.length; i++) {
5332
5349
  let key = propsToUpdate[i];
5350
+ // skip if the prop key is a declared emit event listener
5351
+ if (isEmitListener(instance.emitsOptions, key)) {
5352
+ continue;
5353
+ }
5333
5354
  // PROPS flag guarantees rawProps to be non-null
5334
5355
  const value = rawProps[key];
5335
5356
  if (options) {
@@ -5901,7 +5922,6 @@ return withDirectives(h(comp), [
5901
5922
  [bar, this.y]
5902
5923
  ])
5903
5924
  */
5904
- const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
5905
5925
  function validateDirectiveName(name) {
5906
5926
  if (isBuiltInDirective(name)) {
5907
5927
  warn$1('Do not use built-in directive ids as custom directive id: ' + name);
@@ -5916,7 +5936,8 @@ function withDirectives(vnode, directives) {
5916
5936
  warn$1(`withDirectives can only be used inside render functions.`);
5917
5937
  return vnode;
5918
5938
  }
5919
- const instance = internalInstance.proxy;
5939
+ const instance = getExposeProxy(internalInstance) ||
5940
+ internalInstance.proxy;
5920
5941
  const bindings = vnode.dirs || (vnode.dirs = []);
5921
5942
  for (let i = 0; i < directives.length; i++) {
5922
5943
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -6036,7 +6057,7 @@ function createCompatVue(createApp, createSingletonApp) {
6036
6057
  return vm;
6037
6058
  }
6038
6059
  }
6039
- Vue.version = `2.6.14-compat:${"3.2.29"}`;
6060
+ Vue.version = `2.6.14-compat:${"3.2.32"}`;
6040
6061
  Vue.config = singletonApp.config;
6041
6062
  Vue.use = (p, ...options) => {
6042
6063
  if (p && isFunction(p.install)) {
@@ -6463,6 +6484,9 @@ function createAppContext() {
6463
6484
  let uid = 0;
6464
6485
  function createAppAPI(render, hydrate) {
6465
6486
  return function createApp(rootComponent, rootProps = null) {
6487
+ if (!isFunction(rootComponent)) {
6488
+ rootComponent = Object.assign({}, rootComponent);
6489
+ }
6466
6490
  if (rootProps != null && !isObject(rootProps)) {
6467
6491
  warn$1(`root props passed to app.mount() must be an object.`);
6468
6492
  rootProps = null;
@@ -6662,6 +6686,9 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
6662
6686
  if (!isArray(existing)) {
6663
6687
  if (_isString) {
6664
6688
  refs[ref] = [refValue];
6689
+ if (hasOwn(setupState, ref)) {
6690
+ setupState[ref] = refs[ref];
6691
+ }
6665
6692
  }
6666
6693
  else {
6667
6694
  ref.value = [refValue];
@@ -6860,7 +6887,8 @@ function createHydrationFunctions(rendererInternals) {
6860
6887
  // e.g. <option :value="obj">, <input type="checkbox" :true-value="1">
6861
6888
  const forcePatchValue = (type === 'input' && dirs) || type === 'option';
6862
6889
  // skip props & children if this is hoisted static nodes
6863
- if (forcePatchValue || patchFlag !== -1 /* HOISTED */) {
6890
+ // #5405 in dev, always hydrate children for HMR
6891
+ {
6864
6892
  if (dirs) {
6865
6893
  invokeDirectiveHook(vnode, null, parentComponent, 'created');
6866
6894
  }
@@ -7033,7 +7061,7 @@ function startMeasure(instance, type) {
7033
7061
  perf.mark(`vue-${type}-${instance.uid}`);
7034
7062
  }
7035
7063
  {
7036
- devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now());
7064
+ devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());
7037
7065
  }
7038
7066
  }
7039
7067
  function endMeasure(instance, type) {
@@ -7046,7 +7074,7 @@ function endMeasure(instance, type) {
7046
7074
  perf.clearMarks(endTag);
7047
7075
  }
7048
7076
  {
7049
- devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now());
7077
+ devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());
7050
7078
  }
7051
7079
  }
7052
7080
  function isSupported() {
@@ -10014,9 +10042,11 @@ const PublicInstanceProxyHandlers = {
10014
10042
  const { data, setupState, ctx } = instance;
10015
10043
  if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
10016
10044
  setupState[key] = value;
10045
+ return true;
10017
10046
  }
10018
10047
  else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
10019
10048
  data[key] = value;
10049
+ return true;
10020
10050
  }
10021
10051
  else if (hasOwn(instance.props, key)) {
10022
10052
  warn$1(`Attempting to mutate prop "${key}". Props are readonly.`, instance);
@@ -10050,6 +10080,16 @@ const PublicInstanceProxyHandlers = {
10050
10080
  hasOwn(ctx, key) ||
10051
10081
  hasOwn(publicPropertiesMap, key) ||
10052
10082
  hasOwn(appContext.config.globalProperties, key));
10083
+ },
10084
+ defineProperty(target, key, descriptor) {
10085
+ if (descriptor.get != null) {
10086
+ // invalidate key cache of a getter based property #5417
10087
+ target.$.accessCache[key] = 0;
10088
+ }
10089
+ else if (hasOwn(descriptor, 'value')) {
10090
+ this.set(target, key, descriptor.value, null);
10091
+ }
10092
+ return Reflect.defineProperty(target, key, descriptor);
10053
10093
  }
10054
10094
  };
10055
10095
  {
@@ -10940,7 +10980,7 @@ function isMemoSame(cached, memo) {
10940
10980
  }
10941
10981
 
10942
10982
  // Core API ------------------------------------------------------------------
10943
- const version = "3.2.29";
10983
+ const version = "3.2.32";
10944
10984
  /**
10945
10985
  * SSR utils for \@vue/server-renderer. Only exposed in cjs builds.
10946
10986
  * @internal
@@ -13524,13 +13564,13 @@ const deprecationData$1 = {
13524
13564
  message: `Platform-native elements with "is" prop will no longer be ` +
13525
13565
  `treated as components in Vue 3 unless the "is" value is explicitly ` +
13526
13566
  `prefixed with "vue:".`,
13527
- link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`
13567
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`
13528
13568
  },
13529
13569
  ["COMPILER_V_BIND_SYNC" /* COMPILER_V_BIND_SYNC */]: {
13530
13570
  message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +
13531
13571
  `argument instead. \`v-bind:${key}.sync\` should be changed to ` +
13532
13572
  `\`v-model:${key}\`.`,
13533
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
13573
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
13534
13574
  },
13535
13575
  ["COMPILER_V_BIND_PROP" /* COMPILER_V_BIND_PROP */]: {
13536
13576
  message: `.prop modifier for v-bind has been removed and no longer necessary. ` +
@@ -13542,11 +13582,11 @@ const deprecationData$1 = {
13542
13582
  `that appears before v-bind in the case of conflict. ` +
13543
13583
  `To retain 2.x behavior, move v-bind to make it the first attribute. ` +
13544
13584
  `You can also suppress this warning if the usage is intended.`,
13545
- link: `https://v3.vuejs.org/guide/migration/v-bind.html`
13585
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`
13546
13586
  },
13547
13587
  ["COMPILER_V_ON_NATIVE" /* COMPILER_V_ON_NATIVE */]: {
13548
13588
  message: `.native modifier for v-on has been removed as is no longer necessary.`,
13549
- link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`
13589
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`
13550
13590
  },
13551
13591
  ["COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {
13552
13592
  message: `v-if / v-for precedence when used on the same element has changed ` +
@@ -13554,7 +13594,7 @@ const deprecationData$1 = {
13554
13594
  `access to v-for scope variables. It is best to avoid the ambiguity ` +
13555
13595
  `with <template> tags or use a computed property that filters v-for ` +
13556
13596
  `data source.`,
13557
- link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`
13597
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`
13558
13598
  },
13559
13599
  ["COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */]: {
13560
13600
  message: `<template> with no special directives will render as a native template ` +
@@ -13562,13 +13602,13 @@ const deprecationData$1 = {
13562
13602
  },
13563
13603
  ["COMPILER_INLINE_TEMPLATE" /* COMPILER_INLINE_TEMPLATE */]: {
13564
13604
  message: `"inline-template" has been removed in Vue 3.`,
13565
- link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`
13605
+ link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`
13566
13606
  },
13567
13607
  ["COMPILER_FILTER" /* COMPILER_FILTERS */]: {
13568
13608
  message: `filters have been removed in Vue 3. ` +
13569
13609
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
13570
13610
  `Use method calls or computed properties instead.`,
13571
- link: `https://v3.vuejs.org/guide/migration/filters.html`
13611
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
13572
13612
  }
13573
13613
  };
13574
13614
  function getCompatValue(key, context) {
@@ -16676,7 +16716,7 @@ function buildProps(node, context, props = node.props, ssr = false) {
16676
16716
  }
16677
16717
  }
16678
16718
  }
16679
- else {
16719
+ else if (!isBuiltInDirective(name)) {
16680
16720
  // no built-in transform, this is a user custom directive.
16681
16721
  runtimeDirectives.push(prop);
16682
16722
  // custom dirs may use beforeUpdate so they need to force blocks