@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.
package/dist/vue.cjs.js CHANGED
@@ -414,13 +414,15 @@ function looseIndexOf(arr, val) {
414
414
  * @private
415
415
  */
416
416
  const toDisplayString = (val) => {
417
- return val == null
418
- ? ''
419
- : isArray(val) ||
420
- (isObject(val) &&
421
- (val.toString === objectToString || !isFunction(val.toString)))
422
- ? JSON.stringify(val, replacer, 2)
423
- : String(val);
417
+ return isString(val)
418
+ ? val
419
+ : val == null
420
+ ? ''
421
+ : isArray(val) ||
422
+ (isObject(val) &&
423
+ (val.toString === objectToString || !isFunction(val.toString)))
424
+ ? JSON.stringify(val, replacer, 2)
425
+ : String(val);
424
426
  };
425
427
  const replacer = (_key, val) => {
426
428
  // can't use isRef here since @vue/shared has no deps
@@ -494,6 +496,7 @@ const isReservedProp = /*#__PURE__*/ makeMap(
494
496
  'onVnodeBeforeMount,onVnodeMounted,' +
495
497
  'onVnodeBeforeUpdate,onVnodeUpdated,' +
496
498
  'onVnodeBeforeUnmount,onVnodeUnmounted');
499
+ const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
497
500
  const cacheStringFunction = (fn) => {
498
501
  const cache = Object.create(null);
499
502
  return ((str) => {
@@ -559,11 +562,19 @@ function warn(msg, ...args) {
559
562
  }
560
563
 
561
564
  let activeEffectScope;
562
- const effectScopeStack = [];
563
565
  class EffectScope {
564
566
  constructor(detached = false) {
567
+ /**
568
+ * @internal
569
+ */
565
570
  this.active = true;
571
+ /**
572
+ * @internal
573
+ */
566
574
  this.effects = [];
575
+ /**
576
+ * @internal
577
+ */
567
578
  this.cleanups = [];
568
579
  if (!detached && activeEffectScope) {
569
580
  this.parent = activeEffectScope;
@@ -573,36 +584,46 @@ class EffectScope {
573
584
  }
574
585
  run(fn) {
575
586
  if (this.active) {
587
+ const currentEffectScope = activeEffectScope;
576
588
  try {
577
- this.on();
589
+ activeEffectScope = this;
578
590
  return fn();
579
591
  }
580
592
  finally {
581
- this.off();
593
+ activeEffectScope = currentEffectScope;
582
594
  }
583
595
  }
584
596
  else {
585
597
  warn(`cannot run an inactive effect scope.`);
586
598
  }
587
599
  }
600
+ /**
601
+ * This should only be called on non-detached scopes
602
+ * @internal
603
+ */
588
604
  on() {
589
- if (this.active) {
590
- effectScopeStack.push(this);
591
- activeEffectScope = this;
592
- }
605
+ activeEffectScope = this;
593
606
  }
607
+ /**
608
+ * This should only be called on non-detached scopes
609
+ * @internal
610
+ */
594
611
  off() {
595
- if (this.active) {
596
- effectScopeStack.pop();
597
- activeEffectScope = effectScopeStack[effectScopeStack.length - 1];
598
- }
612
+ activeEffectScope = this.parent;
599
613
  }
600
614
  stop(fromParent) {
601
615
  if (this.active) {
602
- this.effects.forEach(e => e.stop());
603
- this.cleanups.forEach(cleanup => cleanup());
616
+ let i, l;
617
+ for (i = 0, l = this.effects.length; i < l; i++) {
618
+ this.effects[i].stop();
619
+ }
620
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
621
+ this.cleanups[i]();
622
+ }
604
623
  if (this.scopes) {
605
- this.scopes.forEach(e => e.stop(true));
624
+ for (i = 0, l = this.scopes.length; i < l; i++) {
625
+ this.scopes[i].stop(true);
626
+ }
606
627
  }
607
628
  // nested scope, dereference from parent to avoid memory leaks
608
629
  if (this.parent && !fromParent) {
@@ -620,8 +641,7 @@ class EffectScope {
620
641
  function effectScope(detached) {
621
642
  return new EffectScope(detached);
622
643
  }
623
- function recordEffectScope(effect, scope) {
624
- scope = scope || activeEffectScope;
644
+ function recordEffectScope(effect, scope = activeEffectScope) {
625
645
  if (scope && scope.active) {
626
646
  scope.effects.push(effect);
627
647
  }
@@ -684,7 +704,6 @@ let trackOpBit = 1;
684
704
  * When recursion depth is greater, fall back to using a full cleanup.
685
705
  */
686
706
  const maxMarkerBits = 30;
687
- const effectStack = [];
688
707
  let activeEffect;
689
708
  const ITERATE_KEY = Symbol('iterate' );
690
709
  const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );
@@ -694,35 +713,42 @@ class ReactiveEffect {
694
713
  this.scheduler = scheduler;
695
714
  this.active = true;
696
715
  this.deps = [];
716
+ this.parent = undefined;
697
717
  recordEffectScope(this, scope);
698
718
  }
699
719
  run() {
700
720
  if (!this.active) {
701
721
  return this.fn();
702
722
  }
703
- if (!effectStack.length || !effectStack.includes(this)) {
704
- try {
705
- effectStack.push((activeEffect = this));
706
- enableTracking();
707
- trackOpBit = 1 << ++effectTrackDepth;
708
- if (effectTrackDepth <= maxMarkerBits) {
709
- initDepMarkers(this);
710
- }
711
- else {
712
- cleanupEffect(this);
713
- }
714
- return this.fn();
723
+ let parent = activeEffect;
724
+ let lastShouldTrack = shouldTrack;
725
+ while (parent) {
726
+ if (parent === this) {
727
+ return;
715
728
  }
716
- finally {
717
- if (effectTrackDepth <= maxMarkerBits) {
718
- finalizeDepMarkers(this);
719
- }
720
- trackOpBit = 1 << --effectTrackDepth;
721
- resetTracking();
722
- effectStack.pop();
723
- const n = effectStack.length;
724
- activeEffect = n > 0 ? effectStack[n - 1] : undefined;
729
+ parent = parent.parent;
730
+ }
731
+ try {
732
+ this.parent = activeEffect;
733
+ activeEffect = this;
734
+ shouldTrack = true;
735
+ trackOpBit = 1 << ++effectTrackDepth;
736
+ if (effectTrackDepth <= maxMarkerBits) {
737
+ initDepMarkers(this);
738
+ }
739
+ else {
740
+ cleanupEffect(this);
725
741
  }
742
+ return this.fn();
743
+ }
744
+ finally {
745
+ if (effectTrackDepth <= maxMarkerBits) {
746
+ finalizeDepMarkers(this);
747
+ }
748
+ trackOpBit = 1 << --effectTrackDepth;
749
+ activeEffect = this.parent;
750
+ shouldTrack = lastShouldTrack;
751
+ this.parent = undefined;
726
752
  }
727
753
  }
728
754
  stop() {
@@ -770,32 +796,24 @@ function pauseTracking() {
770
796
  trackStack.push(shouldTrack);
771
797
  shouldTrack = false;
772
798
  }
773
- function enableTracking() {
774
- trackStack.push(shouldTrack);
775
- shouldTrack = true;
776
- }
777
799
  function resetTracking() {
778
800
  const last = trackStack.pop();
779
801
  shouldTrack = last === undefined ? true : last;
780
802
  }
781
803
  function track(target, type, key) {
782
- if (!isTracking()) {
783
- return;
784
- }
785
- let depsMap = targetMap.get(target);
786
- if (!depsMap) {
787
- targetMap.set(target, (depsMap = new Map()));
788
- }
789
- let dep = depsMap.get(key);
790
- if (!dep) {
791
- depsMap.set(key, (dep = createDep()));
804
+ if (shouldTrack && activeEffect) {
805
+ let depsMap = targetMap.get(target);
806
+ if (!depsMap) {
807
+ targetMap.set(target, (depsMap = new Map()));
808
+ }
809
+ let dep = depsMap.get(key);
810
+ if (!dep) {
811
+ depsMap.set(key, (dep = createDep()));
812
+ }
813
+ const eventInfo = { effect: activeEffect, target, type, key }
814
+ ;
815
+ trackEffects(dep, eventInfo);
792
816
  }
793
- const eventInfo = { effect: activeEffect, target, type, key }
794
- ;
795
- trackEffects(dep, eventInfo);
796
- }
797
- function isTracking() {
798
- return shouldTrack && activeEffect !== undefined;
799
817
  }
800
818
  function trackEffects(dep, debuggerEventExtraInfo) {
801
819
  let shouldTrack = false;
@@ -813,9 +831,7 @@ function trackEffects(dep, debuggerEventExtraInfo) {
813
831
  dep.add(activeEffect);
814
832
  activeEffect.deps.push(dep);
815
833
  if (activeEffect.onTrack) {
816
- activeEffect.onTrack(Object.assign({
817
- effect: activeEffect
818
- }, debuggerEventExtraInfo));
834
+ activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
819
835
  }
820
836
  }
821
837
  }
@@ -1480,13 +1496,10 @@ const toReactive = (value) => isObject(value) ? reactive(value) : value;
1480
1496
  const toReadonly = (value) => isObject(value) ? readonly(value) : value;
1481
1497
 
1482
1498
  function trackRefValue(ref) {
1483
- if (isTracking()) {
1499
+ if (shouldTrack && activeEffect) {
1484
1500
  ref = toRaw(ref);
1485
- if (!ref.dep) {
1486
- ref.dep = createDep();
1487
- }
1488
1501
  {
1489
- trackEffects(ref.dep, {
1502
+ trackEffects(ref.dep || (ref.dep = createDep()), {
1490
1503
  target: ref,
1491
1504
  type: "get" /* GET */,
1492
1505
  key: 'value'
@@ -1508,7 +1521,7 @@ function triggerRefValue(ref, newVal) {
1508
1521
  }
1509
1522
  }
1510
1523
  function isRef(r) {
1511
- return Boolean(r && r.__v_isRef === true);
1524
+ return !!(r && r.__v_isRef === true);
1512
1525
  }
1513
1526
  function ref(value) {
1514
1527
  return createRef(value, false);
@@ -2319,23 +2332,23 @@ const deprecationData = {
2319
2332
  ["GLOBAL_MOUNT" /* GLOBAL_MOUNT */]: {
2320
2333
  message: `The global app bootstrapping API has changed: vm.$mount() and the "el" ` +
2321
2334
  `option have been removed. Use createApp(RootComponent).mount() instead.`,
2322
- link: `https://v3.vuejs.org/guide/migration/global-api.html#mounting-app-instance`
2335
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance`
2323
2336
  },
2324
2337
  ["GLOBAL_MOUNT_CONTAINER" /* GLOBAL_MOUNT_CONTAINER */]: {
2325
2338
  message: `Vue detected directives on the mount container. ` +
2326
2339
  `In Vue 3, the container is no longer considered part of the template ` +
2327
2340
  `and will not be processed/replaced.`,
2328
- link: `https://v3.vuejs.org/guide/migration/mount-changes.html`
2341
+ link: `https://v3-migration.vuejs.org/breaking-changes/mount-changes.html`
2329
2342
  },
2330
2343
  ["GLOBAL_EXTEND" /* GLOBAL_EXTEND */]: {
2331
2344
  message: `Vue.extend() has been removed in Vue 3. ` +
2332
2345
  `Use defineComponent() instead.`,
2333
- link: `https://v3.vuejs.org/api/global-api.html#definecomponent`
2346
+ link: `https://vuejs.org/api/general.html#definecomponent`
2334
2347
  },
2335
2348
  ["GLOBAL_PROTOTYPE" /* GLOBAL_PROTOTYPE */]: {
2336
2349
  message: `Vue.prototype is no longer available in Vue 3. ` +
2337
2350
  `Use app.config.globalProperties instead.`,
2338
- link: `https://v3.vuejs.org/guide/migration/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2351
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2339
2352
  },
2340
2353
  ["GLOBAL_SET" /* GLOBAL_SET */]: {
2341
2354
  message: `Vue.set() has been removed as it is no longer needed in Vue 3. ` +
@@ -2348,7 +2361,7 @@ const deprecationData = {
2348
2361
  ["GLOBAL_OBSERVABLE" /* GLOBAL_OBSERVABLE */]: {
2349
2362
  message: `Vue.observable() has been removed. ` +
2350
2363
  `Use \`import { reactive } from "vue"\` from Composition API instead.`,
2351
- link: `https://v3.vuejs.org/api/basic-reactivity.html`
2364
+ link: `https://vuejs.org/api/reactivity-core.html#reactive`
2352
2365
  },
2353
2366
  ["GLOBAL_PRIVATE_UTIL" /* GLOBAL_PRIVATE_UTIL */]: {
2354
2367
  message: `Vue.util has been removed. Please refactor to avoid its usage ` +
@@ -2367,11 +2380,11 @@ const deprecationData = {
2367
2380
  ["CONFIG_KEY_CODES" /* CONFIG_KEY_CODES */]: {
2368
2381
  message: `config.keyCodes has been removed. ` +
2369
2382
  `In Vue 3, you can directly use the kebab-case key names as v-on modifiers.`,
2370
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2383
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2371
2384
  },
2372
2385
  ["CONFIG_PRODUCTION_TIP" /* CONFIG_PRODUCTION_TIP */]: {
2373
2386
  message: `config.productionTip has been removed.`,
2374
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-productiontip-removed`
2387
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed`
2375
2388
  },
2376
2389
  ["CONFIG_IGNORED_ELEMENTS" /* CONFIG_IGNORED_ELEMENTS */]: {
2377
2390
  message: () => {
@@ -2384,7 +2397,7 @@ const deprecationData = {
2384
2397
  }
2385
2398
  return msg;
2386
2399
  },
2387
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2400
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2388
2401
  },
2389
2402
  ["CONFIG_WHITESPACE" /* CONFIG_WHITESPACE */]: {
2390
2403
  // this warning is only relevant in the full build when using runtime
@@ -2407,12 +2420,12 @@ const deprecationData = {
2407
2420
  },
2408
2421
  ["INSTANCE_DESTROY" /* INSTANCE_DESTROY */]: {
2409
2422
  message: `vm.$destroy() has been removed. Use app.unmount() instead.`,
2410
- link: `https://v3.vuejs.org/api/application-api.html#unmount`
2423
+ link: `https://vuejs.org/api/application.html#app-unmount`
2411
2424
  },
2412
2425
  ["INSTANCE_EVENT_EMITTER" /* INSTANCE_EVENT_EMITTER */]: {
2413
2426
  message: `vm.$on/$once/$off() have been removed. ` +
2414
2427
  `Use an external event emitter library instead.`,
2415
- link: `https://v3.vuejs.org/guide/migration/events-api.html`
2428
+ link: `https://v3-migration.vuejs.org/breaking-changes/events-api.html`
2416
2429
  },
2417
2430
  ["INSTANCE_EVENT_HOOKS" /* INSTANCE_EVENT_HOOKS */]: {
2418
2431
  message: event => `"${event}" lifecycle events are no longer supported. From templates, ` +
@@ -2420,23 +2433,23 @@ const deprecationData = {
2420
2433
  `should be changed to @vnode-${event.slice(5)}. ` +
2421
2434
  `From JavaScript, use Composition API to dynamically register lifecycle ` +
2422
2435
  `hooks.`,
2423
- link: `https://v3.vuejs.org/guide/migration/vnode-lifecycle-events.html`
2436
+ link: `https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html`
2424
2437
  },
2425
2438
  ["INSTANCE_CHILDREN" /* INSTANCE_CHILDREN */]: {
2426
2439
  message: `vm.$children has been removed. Consider refactoring your logic ` +
2427
2440
  `to avoid relying on direct access to child components.`,
2428
- link: `https://v3.vuejs.org/guide/migration/children.html`
2441
+ link: `https://v3-migration.vuejs.org/breaking-changes/children.html`
2429
2442
  },
2430
2443
  ["INSTANCE_LISTENERS" /* INSTANCE_LISTENERS */]: {
2431
2444
  message: `vm.$listeners has been removed. In Vue 3, parent v-on listeners are ` +
2432
2445
  `included in vm.$attrs and it is no longer necessary to separately use ` +
2433
2446
  `v-on="$listeners" if you are already using v-bind="$attrs". ` +
2434
2447
  `(Note: the Vue 3 behavior only applies if this compat config is disabled)`,
2435
- link: `https://v3.vuejs.org/guide/migration/listeners-removed.html`
2448
+ link: `https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html`
2436
2449
  },
2437
2450
  ["INSTANCE_SCOPED_SLOTS" /* INSTANCE_SCOPED_SLOTS */]: {
2438
2451
  message: `vm.$scopedSlots has been removed. Use vm.$slots instead.`,
2439
- link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
2452
+ link: `https://v3-migration.vuejs.org/breaking-changes/slots-unification.html`
2440
2453
  },
2441
2454
  ["INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */]: {
2442
2455
  message: componentName => `Component <${componentName || 'Anonymous'}> has \`inheritAttrs: false\` but is ` +
@@ -2447,17 +2460,17 @@ const deprecationData = {
2447
2460
  `If you are binding $attrs to a non-root element and expecting ` +
2448
2461
  `class/style to fallthrough on root, you will need to now manually bind ` +
2449
2462
  `them on root via :class="$attrs.class".`,
2450
- link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`
2463
+ link: `https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html`
2451
2464
  },
2452
2465
  ["OPTIONS_DATA_FN" /* OPTIONS_DATA_FN */]: {
2453
2466
  message: `The "data" option can no longer be a plain object. ` +
2454
2467
  `Always use a function.`,
2455
- link: `https://v3.vuejs.org/guide/migration/data-option.html`
2468
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html`
2456
2469
  },
2457
2470
  ["OPTIONS_DATA_MERGE" /* OPTIONS_DATA_MERGE */]: {
2458
2471
  message: (key) => `Detected conflicting key "${key}" when merging data option values. ` +
2459
2472
  `In Vue 3, data keys are merged shallowly and will override one another.`,
2460
- link: `https://v3.vuejs.org/guide/migration/data-option.html#mixin-merge-behavior-change`
2473
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html#mixin-merge-behavior-change`
2461
2474
  },
2462
2475
  ["OPTIONS_BEFORE_DESTROY" /* OPTIONS_BEFORE_DESTROY */]: {
2463
2476
  message: `\`beforeDestroy\` has been renamed to \`beforeUnmount\`.`
@@ -2471,23 +2484,23 @@ const deprecationData = {
2471
2484
  `If current usage is intended, you can disable the compat behavior and ` +
2472
2485
  `suppress this warning with:` +
2473
2486
  `\n\n configureCompat({ ${"WATCH_ARRAY" /* WATCH_ARRAY */}: false })\n`,
2474
- link: `https://v3.vuejs.org/guide/migration/watch.html`
2487
+ link: `https://v3-migration.vuejs.org/breaking-changes/watch.html`
2475
2488
  },
2476
2489
  ["PROPS_DEFAULT_THIS" /* PROPS_DEFAULT_THIS */]: {
2477
2490
  message: (key) => `props default value function no longer has access to "this". The compat ` +
2478
2491
  `build only offers access to this.$options.` +
2479
2492
  `(found in prop "${key}")`,
2480
- link: `https://v3.vuejs.org/guide/migration/props-default-this.html`
2493
+ link: `https://v3-migration.vuejs.org/breaking-changes/props-default-this.html`
2481
2494
  },
2482
2495
  ["CUSTOM_DIR" /* CUSTOM_DIR */]: {
2483
2496
  message: (legacyHook, newHook) => `Custom directive hook "${legacyHook}" has been removed. ` +
2484
2497
  `Use "${newHook}" instead.`,
2485
- link: `https://v3.vuejs.org/guide/migration/custom-directives.html`
2498
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-directives.html`
2486
2499
  },
2487
2500
  ["V_ON_KEYCODE_MODIFIER" /* V_ON_KEYCODE_MODIFIER */]: {
2488
2501
  message: `Using keyCode as v-on modifier is no longer supported. ` +
2489
2502
  `Use kebab-case key name modifiers instead.`,
2490
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2503
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2491
2504
  },
2492
2505
  ["ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */]: {
2493
2506
  message: (name) => `Attribute "${name}" with v-bind value \`false\` will render ` +
@@ -2495,7 +2508,7 @@ const deprecationData = {
2495
2508
  `use \`null\` or \`undefined\` instead. If the usage is intended, ` +
2496
2509
  `you can disable the compat behavior and suppress this warning with:` +
2497
2510
  `\n\n configureCompat({ ${"ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */}: false })\n`,
2498
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2511
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2499
2512
  },
2500
2513
  ["ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */]: {
2501
2514
  message: (name, value, coerced) => `Enumerated attribute "${name}" with v-bind value \`${value}\` will ` +
@@ -2504,7 +2517,7 @@ const deprecationData = {
2504
2517
  `If the usage is intended, ` +
2505
2518
  `you can disable the compat behavior and suppress this warning with:` +
2506
2519
  `\n\n configureCompat({ ${"ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */}: false })\n`,
2507
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2520
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2508
2521
  },
2509
2522
  ["TRANSITION_CLASSES" /* TRANSITION_CLASSES */]: {
2510
2523
  message: `` // this feature cannot be runtime-detected
@@ -2515,7 +2528,7 @@ const deprecationData = {
2515
2528
  `for styling, you can disable the compat behavior and suppress this ` +
2516
2529
  `warning with:` +
2517
2530
  `\n\n configureCompat({ ${"TRANSITION_GROUP_ROOT" /* TRANSITION_GROUP_ROOT */}: false })\n`,
2518
- link: `https://v3.vuejs.org/guide/migration/transition-group.html`
2531
+ link: `https://v3-migration.vuejs.org/breaking-changes/transition-group.html`
2519
2532
  },
2520
2533
  ["COMPONENT_ASYNC" /* COMPONENT_ASYNC */]: {
2521
2534
  message: (comp) => {
@@ -2528,7 +2541,7 @@ const deprecationData = {
2528
2541
  `warning with:` +
2529
2542
  `\n\n configureCompat({ ${"COMPONENT_ASYNC" /* COMPONENT_ASYNC */}: false })\n`);
2530
2543
  },
2531
- link: `https://v3.vuejs.org/guide/migration/async-components.html`
2544
+ link: `https://v3-migration.vuejs.org/breaking-changes/async-components.html`
2532
2545
  },
2533
2546
  ["COMPONENT_FUNCTIONAL" /* COMPONENT_FUNCTIONAL */]: {
2534
2547
  message: (comp) => {
@@ -2539,7 +2552,7 @@ const deprecationData = {
2539
2552
  `components usage have been migrated and its compat behavior has ` +
2540
2553
  `been disabled.`);
2541
2554
  },
2542
- link: `https://v3.vuejs.org/guide/migration/functional-components.html`
2555
+ link: `https://v3-migration.vuejs.org/breaking-changes/functional-components.html`
2543
2556
  },
2544
2557
  ["COMPONENT_V_MODEL" /* COMPONENT_V_MODEL */]: {
2545
2558
  message: (comp) => {
@@ -2556,20 +2569,20 @@ const deprecationData = {
2556
2569
  `to work with v-model should now use the "modelValue" prop and emit the ` +
2557
2570
  `"update:modelValue" event. You can update the usage and then ${configMsg}`);
2558
2571
  },
2559
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
2572
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
2560
2573
  },
2561
2574
  ["RENDER_FUNCTION" /* RENDER_FUNCTION */]: {
2562
2575
  message: `Vue 3's render function API has changed. ` +
2563
2576
  `You can opt-in to the new API with:` +
2564
2577
  `\n\n configureCompat({ ${"RENDER_FUNCTION" /* RENDER_FUNCTION */}: false })\n` +
2565
2578
  `\n (This can also be done per-component via the "compatConfig" option.)`,
2566
- link: `https://v3.vuejs.org/guide/migration/render-function-api.html`
2579
+ link: `https://v3-migration.vuejs.org/breaking-changes/render-function-api.html`
2567
2580
  },
2568
2581
  ["FILTERS" /* FILTERS */]: {
2569
2582
  message: `filters have been removed in Vue 3. ` +
2570
2583
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
2571
2584
  `Use method calls or computed properties instead.`,
2572
- link: `https://v3.vuejs.org/guide/migration/filters.html`
2585
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
2573
2586
  },
2574
2587
  ["PRIVATE_APIS" /* PRIVATE_APIS */]: {
2575
2588
  message: name => `"${name}" is a Vue 2 private API that no longer exists in Vue 3. ` +
@@ -2637,7 +2650,7 @@ function validateCompatConfig(config, instance) {
2637
2650
  warn$1(`Deprecation config "${key}" is compiler-specific and you are ` +
2638
2651
  `running a runtime-only build of Vue. This deprecation should be ` +
2639
2652
  `configured via compiler options in your build setup instead.\n` +
2640
- `Details: https://v3.vuejs.org/guide/migration/migration-build.html`);
2653
+ `Details: https://v3-migration.vuejs.org/breaking-changes/migration-build.html`);
2641
2654
  }
2642
2655
  }
2643
2656
  else {
@@ -3851,12 +3864,10 @@ function watchEffect(effect, options) {
3851
3864
  return doWatch(effect, null, options);
3852
3865
  }
3853
3866
  function watchPostEffect(effect, options) {
3854
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'post' })
3855
- ));
3867
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
3856
3868
  }
3857
3869
  function watchSyncEffect(effect, options) {
3858
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'sync' })
3859
- ));
3870
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
3860
3871
  }
3861
3872
  // initial value for watchers to trigger on undefined initial values
3862
3873
  const INITIAL_WATCHER_VALUE = {};
@@ -4183,7 +4194,9 @@ const BaseTransitionImpl = {
4183
4194
  const { mode } = rawProps;
4184
4195
  // check mode
4185
4196
  if (mode &&
4186
- mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') {
4197
+ mode !== 'in-out' &&
4198
+ mode !== 'out-in' &&
4199
+ mode !== 'default') {
4187
4200
  warn$1(`invalid <transition> mode: ${mode}`);
4188
4201
  }
4189
4202
  // at this point children has a guaranteed length of 1.
@@ -4413,20 +4426,24 @@ function setTransitionHooks(vnode, hooks) {
4413
4426
  vnode.transition = hooks;
4414
4427
  }
4415
4428
  }
4416
- function getTransitionRawChildren(children, keepComment = false) {
4429
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
4417
4430
  let ret = [];
4418
4431
  let keyedFragmentCount = 0;
4419
4432
  for (let i = 0; i < children.length; i++) {
4420
- const child = children[i];
4433
+ let child = children[i];
4434
+ // #5360 inherit parent key in case of <template v-for>
4435
+ const key = parentKey == null
4436
+ ? child.key
4437
+ : String(parentKey) + String(child.key != null ? child.key : i);
4421
4438
  // handle fragment children case, e.g. v-for
4422
4439
  if (child.type === Fragment) {
4423
4440
  if (child.patchFlag & 128 /* KEYED_FRAGMENT */)
4424
4441
  keyedFragmentCount++;
4425
- ret = ret.concat(getTransitionRawChildren(child.children, keepComment));
4442
+ ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));
4426
4443
  }
4427
4444
  // comment placeholders should be skipped, e.g. v-if
4428
4445
  else if (keepComment || child.type !== Comment) {
4429
- ret.push(child);
4446
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
4430
4447
  }
4431
4448
  }
4432
4449
  // #1126 if a transition children list contains multiple sub fragments, these
@@ -5484,6 +5501,10 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
5484
5501
  const propsToUpdate = instance.vnode.dynamicProps;
5485
5502
  for (let i = 0; i < propsToUpdate.length; i++) {
5486
5503
  let key = propsToUpdate[i];
5504
+ // skip if the prop key is a declared emit event listener
5505
+ if (isEmitListener(instance.emitsOptions, key)) {
5506
+ continue;
5507
+ }
5487
5508
  // PROPS flag guarantees rawProps to be non-null
5488
5509
  const value = rawProps[key];
5489
5510
  if (options) {
@@ -6055,7 +6076,6 @@ return withDirectives(h(comp), [
6055
6076
  [bar, this.y]
6056
6077
  ])
6057
6078
  */
6058
- const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
6059
6079
  function validateDirectiveName(name) {
6060
6080
  if (isBuiltInDirective(name)) {
6061
6081
  warn$1('Do not use built-in directive ids as custom directive id: ' + name);
@@ -6070,7 +6090,8 @@ function withDirectives(vnode, directives) {
6070
6090
  warn$1(`withDirectives can only be used inside render functions.`);
6071
6091
  return vnode;
6072
6092
  }
6073
- const instance = internalInstance.proxy;
6093
+ const instance = getExposeProxy(internalInstance) ||
6094
+ internalInstance.proxy;
6074
6095
  const bindings = vnode.dirs || (vnode.dirs = []);
6075
6096
  for (let i = 0; i < directives.length; i++) {
6076
6097
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -6190,7 +6211,7 @@ function createCompatVue(createApp, createSingletonApp) {
6190
6211
  return vm;
6191
6212
  }
6192
6213
  }
6193
- Vue.version = `2.6.14-compat:${"3.2.29"}`;
6214
+ Vue.version = `2.6.14-compat:${"3.2.32"}`;
6194
6215
  Vue.config = singletonApp.config;
6195
6216
  Vue.use = (p, ...options) => {
6196
6217
  if (p && isFunction(p.install)) {
@@ -6617,6 +6638,9 @@ function createAppContext() {
6617
6638
  let uid = 0;
6618
6639
  function createAppAPI(render, hydrate) {
6619
6640
  return function createApp(rootComponent, rootProps = null) {
6641
+ if (!isFunction(rootComponent)) {
6642
+ rootComponent = Object.assign({}, rootComponent);
6643
+ }
6620
6644
  if (rootProps != null && !isObject(rootProps)) {
6621
6645
  warn$1(`root props passed to app.mount() must be an object.`);
6622
6646
  rootProps = null;
@@ -6816,6 +6840,9 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
6816
6840
  if (!isArray(existing)) {
6817
6841
  if (_isString) {
6818
6842
  refs[ref] = [refValue];
6843
+ if (hasOwn(setupState, ref)) {
6844
+ setupState[ref] = refs[ref];
6845
+ }
6819
6846
  }
6820
6847
  else {
6821
6848
  ref.value = [refValue];
@@ -7014,7 +7041,8 @@ function createHydrationFunctions(rendererInternals) {
7014
7041
  // e.g. <option :value="obj">, <input type="checkbox" :true-value="1">
7015
7042
  const forcePatchValue = (type === 'input' && dirs) || type === 'option';
7016
7043
  // skip props & children if this is hoisted static nodes
7017
- if (forcePatchValue || patchFlag !== -1 /* HOISTED */) {
7044
+ // #5405 in dev, always hydrate children for HMR
7045
+ {
7018
7046
  if (dirs) {
7019
7047
  invokeDirectiveHook(vnode, null, parentComponent, 'created');
7020
7048
  }
@@ -7187,7 +7215,7 @@ function startMeasure(instance, type) {
7187
7215
  perf.mark(`vue-${type}-${instance.uid}`);
7188
7216
  }
7189
7217
  {
7190
- devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now());
7218
+ devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());
7191
7219
  }
7192
7220
  }
7193
7221
  function endMeasure(instance, type) {
@@ -7200,7 +7228,7 @@ function endMeasure(instance, type) {
7200
7228
  perf.clearMarks(endTag);
7201
7229
  }
7202
7230
  {
7203
- devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now());
7231
+ devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());
7204
7232
  }
7205
7233
  }
7206
7234
  function isSupported() {
@@ -10168,9 +10196,11 @@ const PublicInstanceProxyHandlers = {
10168
10196
  const { data, setupState, ctx } = instance;
10169
10197
  if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
10170
10198
  setupState[key] = value;
10199
+ return true;
10171
10200
  }
10172
10201
  else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
10173
10202
  data[key] = value;
10203
+ return true;
10174
10204
  }
10175
10205
  else if (hasOwn(instance.props, key)) {
10176
10206
  warn$1(`Attempting to mutate prop "${key}". Props are readonly.`, instance);
@@ -10204,6 +10234,16 @@ const PublicInstanceProxyHandlers = {
10204
10234
  hasOwn(ctx, key) ||
10205
10235
  hasOwn(publicPropertiesMap, key) ||
10206
10236
  hasOwn(appContext.config.globalProperties, key));
10237
+ },
10238
+ defineProperty(target, key, descriptor) {
10239
+ if (descriptor.get != null) {
10240
+ // invalidate key cache of a getter based property #5417
10241
+ target.$.accessCache[key] = 0;
10242
+ }
10243
+ else if (hasOwn(descriptor, 'value')) {
10244
+ this.set(target, key, descriptor.value, null);
10245
+ }
10246
+ return Reflect.defineProperty(target, key, descriptor);
10207
10247
  }
10208
10248
  };
10209
10249
  {
@@ -11098,7 +11138,7 @@ function isMemoSame(cached, memo) {
11098
11138
  }
11099
11139
 
11100
11140
  // Core API ------------------------------------------------------------------
11101
- const version = "3.2.29";
11141
+ const version = "3.2.32";
11102
11142
  const _ssrUtils = {
11103
11143
  createComponentInstance,
11104
11144
  setupComponent,
@@ -13648,13 +13688,13 @@ const deprecationData$1 = {
13648
13688
  message: `Platform-native elements with "is" prop will no longer be ` +
13649
13689
  `treated as components in Vue 3 unless the "is" value is explicitly ` +
13650
13690
  `prefixed with "vue:".`,
13651
- link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`
13691
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`
13652
13692
  },
13653
13693
  ["COMPILER_V_BIND_SYNC" /* COMPILER_V_BIND_SYNC */]: {
13654
13694
  message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +
13655
13695
  `argument instead. \`v-bind:${key}.sync\` should be changed to ` +
13656
13696
  `\`v-model:${key}\`.`,
13657
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
13697
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
13658
13698
  },
13659
13699
  ["COMPILER_V_BIND_PROP" /* COMPILER_V_BIND_PROP */]: {
13660
13700
  message: `.prop modifier for v-bind has been removed and no longer necessary. ` +
@@ -13666,11 +13706,11 @@ const deprecationData$1 = {
13666
13706
  `that appears before v-bind in the case of conflict. ` +
13667
13707
  `To retain 2.x behavior, move v-bind to make it the first attribute. ` +
13668
13708
  `You can also suppress this warning if the usage is intended.`,
13669
- link: `https://v3.vuejs.org/guide/migration/v-bind.html`
13709
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`
13670
13710
  },
13671
13711
  ["COMPILER_V_ON_NATIVE" /* COMPILER_V_ON_NATIVE */]: {
13672
13712
  message: `.native modifier for v-on has been removed as is no longer necessary.`,
13673
- link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`
13713
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`
13674
13714
  },
13675
13715
  ["COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {
13676
13716
  message: `v-if / v-for precedence when used on the same element has changed ` +
@@ -13678,7 +13718,7 @@ const deprecationData$1 = {
13678
13718
  `access to v-for scope variables. It is best to avoid the ambiguity ` +
13679
13719
  `with <template> tags or use a computed property that filters v-for ` +
13680
13720
  `data source.`,
13681
- link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`
13721
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`
13682
13722
  },
13683
13723
  ["COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */]: {
13684
13724
  message: `<template> with no special directives will render as a native template ` +
@@ -13686,13 +13726,13 @@ const deprecationData$1 = {
13686
13726
  },
13687
13727
  ["COMPILER_INLINE_TEMPLATE" /* COMPILER_INLINE_TEMPLATE */]: {
13688
13728
  message: `"inline-template" has been removed in Vue 3.`,
13689
- link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`
13729
+ link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`
13690
13730
  },
13691
13731
  ["COMPILER_FILTER" /* COMPILER_FILTERS */]: {
13692
13732
  message: `filters have been removed in Vue 3. ` +
13693
13733
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
13694
13734
  `Use method calls or computed properties instead.`,
13695
- link: `https://v3.vuejs.org/guide/migration/filters.html`
13735
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
13696
13736
  }
13697
13737
  };
13698
13738
  function getCompatValue(key, context) {
@@ -17659,7 +17699,7 @@ function buildProps(node, context, props = node.props, ssr = false) {
17659
17699
  }
17660
17700
  }
17661
17701
  }
17662
- else {
17702
+ else if (!isBuiltInDirective(name)) {
17663
17703
  // no built-in transform, this is a user custom directive.
17664
17704
  runtimeDirectives.push(prop);
17665
17705
  // custom dirs may use beforeUpdate so they need to force blocks