@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
@@ -358,6 +360,7 @@ const isReservedProp = /*#__PURE__*/ makeMap(
358
360
  'onVnodeBeforeMount,onVnodeMounted,' +
359
361
  'onVnodeBeforeUpdate,onVnodeUpdated,' +
360
362
  'onVnodeBeforeUnmount,onVnodeUnmounted');
363
+ const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
361
364
  const cacheStringFunction = (fn) => {
362
365
  const cache = Object.create(null);
363
366
  return ((str) => {
@@ -423,11 +426,19 @@ function warn(msg, ...args) {
423
426
  }
424
427
 
425
428
  let activeEffectScope;
426
- const effectScopeStack = [];
427
429
  class EffectScope {
428
430
  constructor(detached = false) {
431
+ /**
432
+ * @internal
433
+ */
429
434
  this.active = true;
435
+ /**
436
+ * @internal
437
+ */
430
438
  this.effects = [];
439
+ /**
440
+ * @internal
441
+ */
431
442
  this.cleanups = [];
432
443
  if (!detached && activeEffectScope) {
433
444
  this.parent = activeEffectScope;
@@ -437,36 +448,46 @@ class EffectScope {
437
448
  }
438
449
  run(fn) {
439
450
  if (this.active) {
451
+ const currentEffectScope = activeEffectScope;
440
452
  try {
441
- this.on();
453
+ activeEffectScope = this;
442
454
  return fn();
443
455
  }
444
456
  finally {
445
- this.off();
457
+ activeEffectScope = currentEffectScope;
446
458
  }
447
459
  }
448
460
  else if ((process.env.NODE_ENV !== 'production')) {
449
461
  warn(`cannot run an inactive effect scope.`);
450
462
  }
451
463
  }
464
+ /**
465
+ * This should only be called on non-detached scopes
466
+ * @internal
467
+ */
452
468
  on() {
453
- if (this.active) {
454
- effectScopeStack.push(this);
455
- activeEffectScope = this;
456
- }
469
+ activeEffectScope = this;
457
470
  }
471
+ /**
472
+ * This should only be called on non-detached scopes
473
+ * @internal
474
+ */
458
475
  off() {
459
- if (this.active) {
460
- effectScopeStack.pop();
461
- activeEffectScope = effectScopeStack[effectScopeStack.length - 1];
462
- }
476
+ activeEffectScope = this.parent;
463
477
  }
464
478
  stop(fromParent) {
465
479
  if (this.active) {
466
- this.effects.forEach(e => e.stop());
467
- this.cleanups.forEach(cleanup => cleanup());
480
+ let i, l;
481
+ for (i = 0, l = this.effects.length; i < l; i++) {
482
+ this.effects[i].stop();
483
+ }
484
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
485
+ this.cleanups[i]();
486
+ }
468
487
  if (this.scopes) {
469
- this.scopes.forEach(e => e.stop(true));
488
+ for (i = 0, l = this.scopes.length; i < l; i++) {
489
+ this.scopes[i].stop(true);
490
+ }
470
491
  }
471
492
  // nested scope, dereference from parent to avoid memory leaks
472
493
  if (this.parent && !fromParent) {
@@ -484,8 +505,7 @@ class EffectScope {
484
505
  function effectScope(detached) {
485
506
  return new EffectScope(detached);
486
507
  }
487
- function recordEffectScope(effect, scope) {
488
- scope = scope || activeEffectScope;
508
+ function recordEffectScope(effect, scope = activeEffectScope) {
489
509
  if (scope && scope.active) {
490
510
  scope.effects.push(effect);
491
511
  }
@@ -548,7 +568,6 @@ let trackOpBit = 1;
548
568
  * When recursion depth is greater, fall back to using a full cleanup.
549
569
  */
550
570
  const maxMarkerBits = 30;
551
- const effectStack = [];
552
571
  let activeEffect;
553
572
  const ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');
554
573
  const MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');
@@ -558,35 +577,42 @@ class ReactiveEffect {
558
577
  this.scheduler = scheduler;
559
578
  this.active = true;
560
579
  this.deps = [];
580
+ this.parent = undefined;
561
581
  recordEffectScope(this, scope);
562
582
  }
563
583
  run() {
564
584
  if (!this.active) {
565
585
  return this.fn();
566
586
  }
567
- if (!effectStack.length || !effectStack.includes(this)) {
568
- try {
569
- effectStack.push((activeEffect = this));
570
- enableTracking();
571
- trackOpBit = 1 << ++effectTrackDepth;
572
- if (effectTrackDepth <= maxMarkerBits) {
573
- initDepMarkers(this);
574
- }
575
- else {
576
- cleanupEffect(this);
577
- }
578
- return this.fn();
587
+ let parent = activeEffect;
588
+ let lastShouldTrack = shouldTrack;
589
+ while (parent) {
590
+ if (parent === this) {
591
+ return;
579
592
  }
580
- finally {
581
- if (effectTrackDepth <= maxMarkerBits) {
582
- finalizeDepMarkers(this);
583
- }
584
- trackOpBit = 1 << --effectTrackDepth;
585
- resetTracking();
586
- effectStack.pop();
587
- const n = effectStack.length;
588
- activeEffect = n > 0 ? effectStack[n - 1] : undefined;
593
+ parent = parent.parent;
594
+ }
595
+ try {
596
+ this.parent = activeEffect;
597
+ activeEffect = this;
598
+ shouldTrack = true;
599
+ trackOpBit = 1 << ++effectTrackDepth;
600
+ if (effectTrackDepth <= maxMarkerBits) {
601
+ initDepMarkers(this);
602
+ }
603
+ else {
604
+ cleanupEffect(this);
589
605
  }
606
+ return this.fn();
607
+ }
608
+ finally {
609
+ if (effectTrackDepth <= maxMarkerBits) {
610
+ finalizeDepMarkers(this);
611
+ }
612
+ trackOpBit = 1 << --effectTrackDepth;
613
+ activeEffect = this.parent;
614
+ shouldTrack = lastShouldTrack;
615
+ this.parent = undefined;
590
616
  }
591
617
  }
592
618
  stop() {
@@ -634,33 +660,25 @@ function pauseTracking() {
634
660
  trackStack.push(shouldTrack);
635
661
  shouldTrack = false;
636
662
  }
637
- function enableTracking() {
638
- trackStack.push(shouldTrack);
639
- shouldTrack = true;
640
- }
641
663
  function resetTracking() {
642
664
  const last = trackStack.pop();
643
665
  shouldTrack = last === undefined ? true : last;
644
666
  }
645
667
  function track(target, type, key) {
646
- if (!isTracking()) {
647
- return;
648
- }
649
- let depsMap = targetMap.get(target);
650
- if (!depsMap) {
651
- targetMap.set(target, (depsMap = new Map()));
652
- }
653
- let dep = depsMap.get(key);
654
- if (!dep) {
655
- depsMap.set(key, (dep = createDep()));
668
+ if (shouldTrack && activeEffect) {
669
+ let depsMap = targetMap.get(target);
670
+ if (!depsMap) {
671
+ targetMap.set(target, (depsMap = new Map()));
672
+ }
673
+ let dep = depsMap.get(key);
674
+ if (!dep) {
675
+ depsMap.set(key, (dep = createDep()));
676
+ }
677
+ const eventInfo = (process.env.NODE_ENV !== 'production')
678
+ ? { effect: activeEffect, target, type, key }
679
+ : undefined;
680
+ trackEffects(dep, eventInfo);
656
681
  }
657
- const eventInfo = (process.env.NODE_ENV !== 'production')
658
- ? { effect: activeEffect, target, type, key }
659
- : undefined;
660
- trackEffects(dep, eventInfo);
661
- }
662
- function isTracking() {
663
- return shouldTrack && activeEffect !== undefined;
664
682
  }
665
683
  function trackEffects(dep, debuggerEventExtraInfo) {
666
684
  let shouldTrack = false;
@@ -678,9 +696,7 @@ function trackEffects(dep, debuggerEventExtraInfo) {
678
696
  dep.add(activeEffect);
679
697
  activeEffect.deps.push(dep);
680
698
  if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {
681
- activeEffect.onTrack(Object.assign({
682
- effect: activeEffect
683
- }, debuggerEventExtraInfo));
699
+ activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
684
700
  }
685
701
  }
686
702
  }
@@ -1353,20 +1369,17 @@ const toReactive = (value) => isObject(value) ? reactive(value) : value;
1353
1369
  const toReadonly = (value) => isObject(value) ? readonly(value) : value;
1354
1370
 
1355
1371
  function trackRefValue(ref) {
1356
- if (isTracking()) {
1372
+ if (shouldTrack && activeEffect) {
1357
1373
  ref = toRaw(ref);
1358
- if (!ref.dep) {
1359
- ref.dep = createDep();
1360
- }
1361
1374
  if ((process.env.NODE_ENV !== 'production')) {
1362
- trackEffects(ref.dep, {
1375
+ trackEffects(ref.dep || (ref.dep = createDep()), {
1363
1376
  target: ref,
1364
1377
  type: "get" /* GET */,
1365
1378
  key: 'value'
1366
1379
  });
1367
1380
  }
1368
1381
  else {
1369
- trackEffects(ref.dep);
1382
+ trackEffects(ref.dep || (ref.dep = createDep()));
1370
1383
  }
1371
1384
  }
1372
1385
  }
@@ -1387,7 +1400,7 @@ function triggerRefValue(ref, newVal) {
1387
1400
  }
1388
1401
  }
1389
1402
  function isRef(r) {
1390
- return Boolean(r && r.__v_isRef === true);
1403
+ return !!(r && r.__v_isRef === true);
1391
1404
  }
1392
1405
  function ref(value) {
1393
1406
  return createRef(value, false);
@@ -2206,23 +2219,23 @@ const deprecationData = {
2206
2219
  ["GLOBAL_MOUNT" /* GLOBAL_MOUNT */]: {
2207
2220
  message: `The global app bootstrapping API has changed: vm.$mount() and the "el" ` +
2208
2221
  `option have been removed. Use createApp(RootComponent).mount() instead.`,
2209
- link: `https://v3.vuejs.org/guide/migration/global-api.html#mounting-app-instance`
2222
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance`
2210
2223
  },
2211
2224
  ["GLOBAL_MOUNT_CONTAINER" /* GLOBAL_MOUNT_CONTAINER */]: {
2212
2225
  message: `Vue detected directives on the mount container. ` +
2213
2226
  `In Vue 3, the container is no longer considered part of the template ` +
2214
2227
  `and will not be processed/replaced.`,
2215
- link: `https://v3.vuejs.org/guide/migration/mount-changes.html`
2228
+ link: `https://v3-migration.vuejs.org/breaking-changes/mount-changes.html`
2216
2229
  },
2217
2230
  ["GLOBAL_EXTEND" /* GLOBAL_EXTEND */]: {
2218
2231
  message: `Vue.extend() has been removed in Vue 3. ` +
2219
2232
  `Use defineComponent() instead.`,
2220
- link: `https://v3.vuejs.org/api/global-api.html#definecomponent`
2233
+ link: `https://vuejs.org/api/general.html#definecomponent`
2221
2234
  },
2222
2235
  ["GLOBAL_PROTOTYPE" /* GLOBAL_PROTOTYPE */]: {
2223
2236
  message: `Vue.prototype is no longer available in Vue 3. ` +
2224
2237
  `Use app.config.globalProperties instead.`,
2225
- link: `https://v3.vuejs.org/guide/migration/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2238
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties`
2226
2239
  },
2227
2240
  ["GLOBAL_SET" /* GLOBAL_SET */]: {
2228
2241
  message: `Vue.set() has been removed as it is no longer needed in Vue 3. ` +
@@ -2235,7 +2248,7 @@ const deprecationData = {
2235
2248
  ["GLOBAL_OBSERVABLE" /* GLOBAL_OBSERVABLE */]: {
2236
2249
  message: `Vue.observable() has been removed. ` +
2237
2250
  `Use \`import { reactive } from "vue"\` from Composition API instead.`,
2238
- link: `https://v3.vuejs.org/api/basic-reactivity.html`
2251
+ link: `https://vuejs.org/api/reactivity-core.html#reactive`
2239
2252
  },
2240
2253
  ["GLOBAL_PRIVATE_UTIL" /* GLOBAL_PRIVATE_UTIL */]: {
2241
2254
  message: `Vue.util has been removed. Please refactor to avoid its usage ` +
@@ -2254,11 +2267,11 @@ const deprecationData = {
2254
2267
  ["CONFIG_KEY_CODES" /* CONFIG_KEY_CODES */]: {
2255
2268
  message: `config.keyCodes has been removed. ` +
2256
2269
  `In Vue 3, you can directly use the kebab-case key names as v-on modifiers.`,
2257
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2270
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2258
2271
  },
2259
2272
  ["CONFIG_PRODUCTION_TIP" /* CONFIG_PRODUCTION_TIP */]: {
2260
2273
  message: `config.productionTip has been removed.`,
2261
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-productiontip-removed`
2274
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed`
2262
2275
  },
2263
2276
  ["CONFIG_IGNORED_ELEMENTS" /* CONFIG_IGNORED_ELEMENTS */]: {
2264
2277
  message: () => {
@@ -2271,7 +2284,7 @@ const deprecationData = {
2271
2284
  }
2272
2285
  return msg;
2273
2286
  },
2274
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2287
+ link: `https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
2275
2288
  },
2276
2289
  ["CONFIG_WHITESPACE" /* CONFIG_WHITESPACE */]: {
2277
2290
  // this warning is only relevant in the full build when using runtime
@@ -2294,12 +2307,12 @@ const deprecationData = {
2294
2307
  },
2295
2308
  ["INSTANCE_DESTROY" /* INSTANCE_DESTROY */]: {
2296
2309
  message: `vm.$destroy() has been removed. Use app.unmount() instead.`,
2297
- link: `https://v3.vuejs.org/api/application-api.html#unmount`
2310
+ link: `https://vuejs.org/api/application.html#app-unmount`
2298
2311
  },
2299
2312
  ["INSTANCE_EVENT_EMITTER" /* INSTANCE_EVENT_EMITTER */]: {
2300
2313
  message: `vm.$on/$once/$off() have been removed. ` +
2301
2314
  `Use an external event emitter library instead.`,
2302
- link: `https://v3.vuejs.org/guide/migration/events-api.html`
2315
+ link: `https://v3-migration.vuejs.org/breaking-changes/events-api.html`
2303
2316
  },
2304
2317
  ["INSTANCE_EVENT_HOOKS" /* INSTANCE_EVENT_HOOKS */]: {
2305
2318
  message: event => `"${event}" lifecycle events are no longer supported. From templates, ` +
@@ -2307,23 +2320,23 @@ const deprecationData = {
2307
2320
  `should be changed to @vnode-${event.slice(5)}. ` +
2308
2321
  `From JavaScript, use Composition API to dynamically register lifecycle ` +
2309
2322
  `hooks.`,
2310
- link: `https://v3.vuejs.org/guide/migration/vnode-lifecycle-events.html`
2323
+ link: `https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html`
2311
2324
  },
2312
2325
  ["INSTANCE_CHILDREN" /* INSTANCE_CHILDREN */]: {
2313
2326
  message: `vm.$children has been removed. Consider refactoring your logic ` +
2314
2327
  `to avoid relying on direct access to child components.`,
2315
- link: `https://v3.vuejs.org/guide/migration/children.html`
2328
+ link: `https://v3-migration.vuejs.org/breaking-changes/children.html`
2316
2329
  },
2317
2330
  ["INSTANCE_LISTENERS" /* INSTANCE_LISTENERS */]: {
2318
2331
  message: `vm.$listeners has been removed. In Vue 3, parent v-on listeners are ` +
2319
2332
  `included in vm.$attrs and it is no longer necessary to separately use ` +
2320
2333
  `v-on="$listeners" if you are already using v-bind="$attrs". ` +
2321
2334
  `(Note: the Vue 3 behavior only applies if this compat config is disabled)`,
2322
- link: `https://v3.vuejs.org/guide/migration/listeners-removed.html`
2335
+ link: `https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html`
2323
2336
  },
2324
2337
  ["INSTANCE_SCOPED_SLOTS" /* INSTANCE_SCOPED_SLOTS */]: {
2325
2338
  message: `vm.$scopedSlots has been removed. Use vm.$slots instead.`,
2326
- link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
2339
+ link: `https://v3-migration.vuejs.org/breaking-changes/slots-unification.html`
2327
2340
  },
2328
2341
  ["INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */]: {
2329
2342
  message: componentName => `Component <${componentName || 'Anonymous'}> has \`inheritAttrs: false\` but is ` +
@@ -2334,17 +2347,17 @@ const deprecationData = {
2334
2347
  `If you are binding $attrs to a non-root element and expecting ` +
2335
2348
  `class/style to fallthrough on root, you will need to now manually bind ` +
2336
2349
  `them on root via :class="$attrs.class".`,
2337
- link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`
2350
+ link: `https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html`
2338
2351
  },
2339
2352
  ["OPTIONS_DATA_FN" /* OPTIONS_DATA_FN */]: {
2340
2353
  message: `The "data" option can no longer be a plain object. ` +
2341
2354
  `Always use a function.`,
2342
- link: `https://v3.vuejs.org/guide/migration/data-option.html`
2355
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html`
2343
2356
  },
2344
2357
  ["OPTIONS_DATA_MERGE" /* OPTIONS_DATA_MERGE */]: {
2345
2358
  message: (key) => `Detected conflicting key "${key}" when merging data option values. ` +
2346
2359
  `In Vue 3, data keys are merged shallowly and will override one another.`,
2347
- link: `https://v3.vuejs.org/guide/migration/data-option.html#mixin-merge-behavior-change`
2360
+ link: `https://v3-migration.vuejs.org/breaking-changes/data-option.html#mixin-merge-behavior-change`
2348
2361
  },
2349
2362
  ["OPTIONS_BEFORE_DESTROY" /* OPTIONS_BEFORE_DESTROY */]: {
2350
2363
  message: `\`beforeDestroy\` has been renamed to \`beforeUnmount\`.`
@@ -2358,23 +2371,23 @@ const deprecationData = {
2358
2371
  `If current usage is intended, you can disable the compat behavior and ` +
2359
2372
  `suppress this warning with:` +
2360
2373
  `\n\n configureCompat({ ${"WATCH_ARRAY" /* WATCH_ARRAY */}: false })\n`,
2361
- link: `https://v3.vuejs.org/guide/migration/watch.html`
2374
+ link: `https://v3-migration.vuejs.org/breaking-changes/watch.html`
2362
2375
  },
2363
2376
  ["PROPS_DEFAULT_THIS" /* PROPS_DEFAULT_THIS */]: {
2364
2377
  message: (key) => `props default value function no longer has access to "this". The compat ` +
2365
2378
  `build only offers access to this.$options.` +
2366
2379
  `(found in prop "${key}")`,
2367
- link: `https://v3.vuejs.org/guide/migration/props-default-this.html`
2380
+ link: `https://v3-migration.vuejs.org/breaking-changes/props-default-this.html`
2368
2381
  },
2369
2382
  ["CUSTOM_DIR" /* CUSTOM_DIR */]: {
2370
2383
  message: (legacyHook, newHook) => `Custom directive hook "${legacyHook}" has been removed. ` +
2371
2384
  `Use "${newHook}" instead.`,
2372
- link: `https://v3.vuejs.org/guide/migration/custom-directives.html`
2385
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-directives.html`
2373
2386
  },
2374
2387
  ["V_ON_KEYCODE_MODIFIER" /* V_ON_KEYCODE_MODIFIER */]: {
2375
2388
  message: `Using keyCode as v-on modifier is no longer supported. ` +
2376
2389
  `Use kebab-case key name modifiers instead.`,
2377
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
2390
+ link: `https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html`
2378
2391
  },
2379
2392
  ["ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */]: {
2380
2393
  message: (name) => `Attribute "${name}" with v-bind value \`false\` will render ` +
@@ -2382,7 +2395,7 @@ const deprecationData = {
2382
2395
  `use \`null\` or \`undefined\` instead. If the usage is intended, ` +
2383
2396
  `you can disable the compat behavior and suppress this warning with:` +
2384
2397
  `\n\n configureCompat({ ${"ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */}: false })\n`,
2385
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2398
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2386
2399
  },
2387
2400
  ["ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */]: {
2388
2401
  message: (name, value, coerced) => `Enumerated attribute "${name}" with v-bind value \`${value}\` will ` +
@@ -2391,7 +2404,7 @@ const deprecationData = {
2391
2404
  `If the usage is intended, ` +
2392
2405
  `you can disable the compat behavior and suppress this warning with:` +
2393
2406
  `\n\n configureCompat({ ${"ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */}: false })\n`,
2394
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
2407
+ link: `https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html`
2395
2408
  },
2396
2409
  ["TRANSITION_CLASSES" /* TRANSITION_CLASSES */]: {
2397
2410
  message: `` // this feature cannot be runtime-detected
@@ -2402,7 +2415,7 @@ const deprecationData = {
2402
2415
  `for styling, you can disable the compat behavior and suppress this ` +
2403
2416
  `warning with:` +
2404
2417
  `\n\n configureCompat({ ${"TRANSITION_GROUP_ROOT" /* TRANSITION_GROUP_ROOT */}: false })\n`,
2405
- link: `https://v3.vuejs.org/guide/migration/transition-group.html`
2418
+ link: `https://v3-migration.vuejs.org/breaking-changes/transition-group.html`
2406
2419
  },
2407
2420
  ["COMPONENT_ASYNC" /* COMPONENT_ASYNC */]: {
2408
2421
  message: (comp) => {
@@ -2415,7 +2428,7 @@ const deprecationData = {
2415
2428
  `warning with:` +
2416
2429
  `\n\n configureCompat({ ${"COMPONENT_ASYNC" /* COMPONENT_ASYNC */}: false })\n`);
2417
2430
  },
2418
- link: `https://v3.vuejs.org/guide/migration/async-components.html`
2431
+ link: `https://v3-migration.vuejs.org/breaking-changes/async-components.html`
2419
2432
  },
2420
2433
  ["COMPONENT_FUNCTIONAL" /* COMPONENT_FUNCTIONAL */]: {
2421
2434
  message: (comp) => {
@@ -2426,7 +2439,7 @@ const deprecationData = {
2426
2439
  `components usage have been migrated and its compat behavior has ` +
2427
2440
  `been disabled.`);
2428
2441
  },
2429
- link: `https://v3.vuejs.org/guide/migration/functional-components.html`
2442
+ link: `https://v3-migration.vuejs.org/breaking-changes/functional-components.html`
2430
2443
  },
2431
2444
  ["COMPONENT_V_MODEL" /* COMPONENT_V_MODEL */]: {
2432
2445
  message: (comp) => {
@@ -2443,20 +2456,20 @@ const deprecationData = {
2443
2456
  `to work with v-model should now use the "modelValue" prop and emit the ` +
2444
2457
  `"update:modelValue" event. You can update the usage and then ${configMsg}`);
2445
2458
  },
2446
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
2459
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
2447
2460
  },
2448
2461
  ["RENDER_FUNCTION" /* RENDER_FUNCTION */]: {
2449
2462
  message: `Vue 3's render function API has changed. ` +
2450
2463
  `You can opt-in to the new API with:` +
2451
2464
  `\n\n configureCompat({ ${"RENDER_FUNCTION" /* RENDER_FUNCTION */}: false })\n` +
2452
2465
  `\n (This can also be done per-component via the "compatConfig" option.)`,
2453
- link: `https://v3.vuejs.org/guide/migration/render-function-api.html`
2466
+ link: `https://v3-migration.vuejs.org/breaking-changes/render-function-api.html`
2454
2467
  },
2455
2468
  ["FILTERS" /* FILTERS */]: {
2456
2469
  message: `filters have been removed in Vue 3. ` +
2457
2470
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
2458
2471
  `Use method calls or computed properties instead.`,
2459
- link: `https://v3.vuejs.org/guide/migration/filters.html`
2472
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
2460
2473
  },
2461
2474
  ["PRIVATE_APIS" /* PRIVATE_APIS */]: {
2462
2475
  message: name => `"${name}" is a Vue 2 private API that no longer exists in Vue 3. ` +
@@ -2527,7 +2540,7 @@ function validateCompatConfig(config, instance) {
2527
2540
  warn$1(`Deprecation config "${key}" is compiler-specific and you are ` +
2528
2541
  `running a runtime-only build of Vue. This deprecation should be ` +
2529
2542
  `configured via compiler options in your build setup instead.\n` +
2530
- `Details: https://v3.vuejs.org/guide/migration/migration-build.html`);
2543
+ `Details: https://v3-migration.vuejs.org/breaking-changes/migration-build.html`);
2531
2544
  }
2532
2545
  }
2533
2546
  else {
@@ -3743,13 +3756,11 @@ function watchEffect(effect, options) {
3743
3756
  }
3744
3757
  function watchPostEffect(effect, options) {
3745
3758
  return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')
3746
- ? Object.assign(options || {}, { flush: 'post' })
3747
- : { flush: 'post' }));
3759
+ ? Object.assign(Object.assign({}, options), { flush: 'post' }) : { flush: 'post' }));
3748
3760
  }
3749
3761
  function watchSyncEffect(effect, options) {
3750
3762
  return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')
3751
- ? Object.assign(options || {}, { flush: 'sync' })
3752
- : { flush: 'sync' }));
3763
+ ? Object.assign(Object.assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));
3753
3764
  }
3754
3765
  // initial value for watchers to trigger on undefined initial values
3755
3766
  const INITIAL_WATCHER_VALUE = {};
@@ -4077,7 +4088,9 @@ const BaseTransitionImpl = {
4077
4088
  // check mode
4078
4089
  if ((process.env.NODE_ENV !== 'production') &&
4079
4090
  mode &&
4080
- mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') {
4091
+ mode !== 'in-out' &&
4092
+ mode !== 'out-in' &&
4093
+ mode !== 'default') {
4081
4094
  warn$1(`invalid <transition> mode: ${mode}`);
4082
4095
  }
4083
4096
  // at this point children has a guaranteed length of 1.
@@ -4307,20 +4320,24 @@ function setTransitionHooks(vnode, hooks) {
4307
4320
  vnode.transition = hooks;
4308
4321
  }
4309
4322
  }
4310
- function getTransitionRawChildren(children, keepComment = false) {
4323
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
4311
4324
  let ret = [];
4312
4325
  let keyedFragmentCount = 0;
4313
4326
  for (let i = 0; i < children.length; i++) {
4314
- const child = children[i];
4327
+ let child = children[i];
4328
+ // #5360 inherit parent key in case of <template v-for>
4329
+ const key = parentKey == null
4330
+ ? child.key
4331
+ : String(parentKey) + String(child.key != null ? child.key : i);
4315
4332
  // handle fragment children case, e.g. v-for
4316
4333
  if (child.type === Fragment) {
4317
4334
  if (child.patchFlag & 128 /* KEYED_FRAGMENT */)
4318
4335
  keyedFragmentCount++;
4319
- ret = ret.concat(getTransitionRawChildren(child.children, keepComment));
4336
+ ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));
4320
4337
  }
4321
4338
  // comment placeholders should be skipped, e.g. v-if
4322
4339
  else if (keepComment || child.type !== Comment) {
4323
- ret.push(child);
4340
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
4324
4341
  }
4325
4342
  }
4326
4343
  // #1126 if a transition children list contains multiple sub fragments, these
@@ -5385,6 +5402,10 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
5385
5402
  const propsToUpdate = instance.vnode.dynamicProps;
5386
5403
  for (let i = 0; i < propsToUpdate.length; i++) {
5387
5404
  let key = propsToUpdate[i];
5405
+ // skip if the prop key is a declared emit event listener
5406
+ if (isEmitListener(instance.emitsOptions, key)) {
5407
+ continue;
5408
+ }
5388
5409
  // PROPS flag guarantees rawProps to be non-null
5389
5410
  const value = rawProps[key];
5390
5411
  if (options) {
@@ -5958,7 +5979,6 @@ return withDirectives(h(comp), [
5958
5979
  [bar, this.y]
5959
5980
  ])
5960
5981
  */
5961
- const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
5962
5982
  function validateDirectiveName(name) {
5963
5983
  if (isBuiltInDirective(name)) {
5964
5984
  warn$1('Do not use built-in directive ids as custom directive id: ' + name);
@@ -5973,7 +5993,8 @@ function withDirectives(vnode, directives) {
5973
5993
  (process.env.NODE_ENV !== 'production') && warn$1(`withDirectives can only be used inside render functions.`);
5974
5994
  return vnode;
5975
5995
  }
5976
- const instance = internalInstance.proxy;
5996
+ const instance = getExposeProxy(internalInstance) ||
5997
+ internalInstance.proxy;
5977
5998
  const bindings = vnode.dirs || (vnode.dirs = []);
5978
5999
  for (let i = 0; i < directives.length; i++) {
5979
6000
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -6093,7 +6114,7 @@ function createCompatVue(createApp, createSingletonApp) {
6093
6114
  return vm;
6094
6115
  }
6095
6116
  }
6096
- Vue.version = `2.6.14-compat:${"3.2.29"}`;
6117
+ Vue.version = `2.6.14-compat:${"3.2.32"}`;
6097
6118
  Vue.config = singletonApp.config;
6098
6119
  Vue.use = (p, ...options) => {
6099
6120
  if (p && isFunction(p.install)) {
@@ -6522,6 +6543,9 @@ function createAppContext() {
6522
6543
  let uid = 0;
6523
6544
  function createAppAPI(render, hydrate) {
6524
6545
  return function createApp(rootComponent, rootProps = null) {
6546
+ if (!isFunction(rootComponent)) {
6547
+ rootComponent = Object.assign({}, rootComponent);
6548
+ }
6525
6549
  if (rootProps != null && !isObject(rootProps)) {
6526
6550
  (process.env.NODE_ENV !== 'production') && warn$1(`root props passed to app.mount() must be an object.`);
6527
6551
  rootProps = null;
@@ -6724,6 +6748,9 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
6724
6748
  if (!isArray(existing)) {
6725
6749
  if (_isString) {
6726
6750
  refs[ref] = [refValue];
6751
+ if (hasOwn(setupState, ref)) {
6752
+ setupState[ref] = refs[ref];
6753
+ }
6727
6754
  }
6728
6755
  else {
6729
6756
  ref.value = [refValue];
@@ -6924,7 +6951,8 @@ function createHydrationFunctions(rendererInternals) {
6924
6951
  // e.g. <option :value="obj">, <input type="checkbox" :true-value="1">
6925
6952
  const forcePatchValue = (type === 'input' && dirs) || type === 'option';
6926
6953
  // skip props & children if this is hoisted static nodes
6927
- if (forcePatchValue || patchFlag !== -1 /* HOISTED */) {
6954
+ // #5405 in dev, always hydrate children for HMR
6955
+ if ((process.env.NODE_ENV !== 'production') || forcePatchValue || patchFlag !== -1 /* HOISTED */) {
6928
6956
  if (dirs) {
6929
6957
  invokeDirectiveHook(vnode, null, parentComponent, 'created');
6930
6958
  }
@@ -7099,7 +7127,7 @@ function startMeasure(instance, type) {
7099
7127
  perf.mark(`vue-${type}-${instance.uid}`);
7100
7128
  }
7101
7129
  if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {
7102
- devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now());
7130
+ devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());
7103
7131
  }
7104
7132
  }
7105
7133
  function endMeasure(instance, type) {
@@ -7112,7 +7140,7 @@ function endMeasure(instance, type) {
7112
7140
  perf.clearMarks(endTag);
7113
7141
  }
7114
7142
  if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {
7115
- devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now());
7143
+ devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());
7116
7144
  }
7117
7145
  }
7118
7146
  function isSupported() {
@@ -10129,9 +10157,11 @@ const PublicInstanceProxyHandlers = {
10129
10157
  const { data, setupState, ctx } = instance;
10130
10158
  if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
10131
10159
  setupState[key] = value;
10160
+ return true;
10132
10161
  }
10133
10162
  else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
10134
10163
  data[key] = value;
10164
+ return true;
10135
10165
  }
10136
10166
  else if (hasOwn(instance.props, key)) {
10137
10167
  (process.env.NODE_ENV !== 'production') &&
@@ -10167,6 +10197,16 @@ const PublicInstanceProxyHandlers = {
10167
10197
  hasOwn(ctx, key) ||
10168
10198
  hasOwn(publicPropertiesMap, key) ||
10169
10199
  hasOwn(appContext.config.globalProperties, key));
10200
+ },
10201
+ defineProperty(target, key, descriptor) {
10202
+ if (descriptor.get != null) {
10203
+ // invalidate key cache of a getter based property #5417
10204
+ target.$.accessCache[key] = 0;
10205
+ }
10206
+ else if (hasOwn(descriptor, 'value')) {
10207
+ this.set(target, key, descriptor.value, null);
10208
+ }
10209
+ return Reflect.defineProperty(target, key, descriptor);
10170
10210
  }
10171
10211
  };
10172
10212
  if ((process.env.NODE_ENV !== 'production') && !false) {
@@ -11081,7 +11121,7 @@ function isMemoSame(cached, memo) {
11081
11121
  }
11082
11122
 
11083
11123
  // Core API ------------------------------------------------------------------
11084
- const version = "3.2.29";
11124
+ const version = "3.2.32";
11085
11125
  const _ssrUtils = {
11086
11126
  createComponentInstance,
11087
11127
  setupComponent,
@@ -13718,13 +13758,13 @@ const deprecationData$1 = {
13718
13758
  message: `Platform-native elements with "is" prop will no longer be ` +
13719
13759
  `treated as components in Vue 3 unless the "is" value is explicitly ` +
13720
13760
  `prefixed with "vue:".`,
13721
- link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`
13761
+ link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`
13722
13762
  },
13723
13763
  ["COMPILER_V_BIND_SYNC" /* COMPILER_V_BIND_SYNC */]: {
13724
13764
  message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +
13725
13765
  `argument instead. \`v-bind:${key}.sync\` should be changed to ` +
13726
13766
  `\`v-model:${key}\`.`,
13727
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
13767
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`
13728
13768
  },
13729
13769
  ["COMPILER_V_BIND_PROP" /* COMPILER_V_BIND_PROP */]: {
13730
13770
  message: `.prop modifier for v-bind has been removed and no longer necessary. ` +
@@ -13736,11 +13776,11 @@ const deprecationData$1 = {
13736
13776
  `that appears before v-bind in the case of conflict. ` +
13737
13777
  `To retain 2.x behavior, move v-bind to make it the first attribute. ` +
13738
13778
  `You can also suppress this warning if the usage is intended.`,
13739
- link: `https://v3.vuejs.org/guide/migration/v-bind.html`
13779
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`
13740
13780
  },
13741
13781
  ["COMPILER_V_ON_NATIVE" /* COMPILER_V_ON_NATIVE */]: {
13742
13782
  message: `.native modifier for v-on has been removed as is no longer necessary.`,
13743
- link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`
13783
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`
13744
13784
  },
13745
13785
  ["COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {
13746
13786
  message: `v-if / v-for precedence when used on the same element has changed ` +
@@ -13748,7 +13788,7 @@ const deprecationData$1 = {
13748
13788
  `access to v-for scope variables. It is best to avoid the ambiguity ` +
13749
13789
  `with <template> tags or use a computed property that filters v-for ` +
13750
13790
  `data source.`,
13751
- link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`
13791
+ link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`
13752
13792
  },
13753
13793
  ["COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */]: {
13754
13794
  message: `<template> with no special directives will render as a native template ` +
@@ -13756,13 +13796,13 @@ const deprecationData$1 = {
13756
13796
  },
13757
13797
  ["COMPILER_INLINE_TEMPLATE" /* COMPILER_INLINE_TEMPLATE */]: {
13758
13798
  message: `"inline-template" has been removed in Vue 3.`,
13759
- link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`
13799
+ link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`
13760
13800
  },
13761
13801
  ["COMPILER_FILTER" /* COMPILER_FILTERS */]: {
13762
13802
  message: `filters have been removed in Vue 3. ` +
13763
13803
  `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
13764
13804
  `Use method calls or computed properties instead.`,
13765
- link: `https://v3.vuejs.org/guide/migration/filters.html`
13805
+ link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`
13766
13806
  }
13767
13807
  };
13768
13808
  function getCompatValue(key, context) {
@@ -16882,7 +16922,7 @@ function buildProps(node, context, props = node.props, ssr = false) {
16882
16922
  }
16883
16923
  }
16884
16924
  }
16885
- else {
16925
+ else if (!isBuiltInDirective(name)) {
16886
16926
  // no built-in transform, this is a user custom directive.
16887
16927
  runtimeDirectives.push(prop);
16888
16928
  // custom dirs may use beforeUpdate so they need to force blocks