@vue/compat 3.2.41 → 3.2.42

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.
@@ -19,27 +19,6 @@ const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,p
19
19
  'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
20
20
  const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);
21
21
 
22
- /**
23
- * On the client we only need to offer special cases for boolean attributes that
24
- * have different names from their corresponding dom properties:
25
- * - itemscope -> N/A
26
- * - allowfullscreen -> allowFullscreen
27
- * - formnovalidate -> formNoValidate
28
- * - ismap -> isMap
29
- * - nomodule -> noModule
30
- * - novalidate -> noValidate
31
- * - readonly -> readOnly
32
- */
33
- const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
34
- const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
35
- /**
36
- * Boolean attributes should be included if the value is truthy or ''.
37
- * e.g. `<select multiple>` compiles to `{ multiple: '' }`
38
- */
39
- function includeBooleanAttr(value) {
40
- return !!value || value === '';
41
- }
42
-
43
22
  function normalizeStyle(value) {
44
23
  if (isArray(value)) {
45
24
  const res = {};
@@ -64,10 +43,14 @@ function normalizeStyle(value) {
64
43
  }
65
44
  }
66
45
  const listDelimiterRE = /;(?![^(]*\))/g;
67
- const propertyDelimiterRE = /:(.+)/;
46
+ const propertyDelimiterRE = /:([^]+)/;
47
+ const styleCommentRE = /\/\*.*?\*\//gs;
68
48
  function parseStringStyle(cssText) {
69
49
  const ret = {};
70
- cssText.split(listDelimiterRE).forEach(item => {
50
+ cssText
51
+ .replace(styleCommentRE, '')
52
+ .split(listDelimiterRE)
53
+ .forEach(item => {
71
54
  if (item) {
72
55
  const tmp = item.split(propertyDelimiterRE);
73
56
  tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
@@ -143,6 +126,27 @@ const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);
143
126
  */
144
127
  const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
145
128
 
129
+ /**
130
+ * On the client we only need to offer special cases for boolean attributes that
131
+ * have different names from their corresponding dom properties:
132
+ * - itemscope -> N/A
133
+ * - allowfullscreen -> allowFullscreen
134
+ * - formnovalidate -> formNoValidate
135
+ * - ismap -> isMap
136
+ * - nomodule -> noModule
137
+ * - novalidate -> noValidate
138
+ * - readonly -> readOnly
139
+ */
140
+ const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
141
+ const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
142
+ /**
143
+ * Boolean attributes should be included if the value is truthy or ''.
144
+ * e.g. `<select multiple>` compiles to `{ multiple: '' }`
145
+ */
146
+ function includeBooleanAttr(value) {
147
+ return !!value || value === '';
148
+ }
149
+
146
150
  function looseCompareArrays(a, b) {
147
151
  if (a.length !== b.length)
148
152
  return false;
@@ -648,8 +652,9 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) {
648
652
  deps = [...depsMap.values()];
649
653
  }
650
654
  else if (key === 'length' && isArray(target)) {
655
+ const newLength = toNumber(newValue);
651
656
  depsMap.forEach((dep, key) => {
652
- if (key === 'length' || key >= newValue) {
657
+ if (key === 'length' || key >= newLength) {
653
658
  deps.push(dep);
654
659
  }
655
660
  });
@@ -2727,7 +2732,7 @@ function emit$2(instance, event, ...rawArgs) {
2727
2732
  const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;
2728
2733
  const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
2729
2734
  if (trim) {
2730
- args = rawArgs.map(a => a.trim());
2735
+ args = rawArgs.map(a => (isString(a) ? a.trim() : a));
2731
2736
  }
2732
2737
  if (number) {
2733
2738
  args = rawArgs.map(toNumber);
@@ -3834,7 +3839,8 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM
3834
3839
  };
3835
3840
  };
3836
3841
  // in SSR there is no need to setup an actual effect, and it should be noop
3837
- // unless it's eager
3842
+ // unless it's eager or sync flush
3843
+ let ssrCleanup;
3838
3844
  if (isInSSRComponentSetup) {
3839
3845
  // we will also not call the invalidate callback (+ runner is not set up)
3840
3846
  onCleanup = NOOP;
@@ -3848,9 +3854,17 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM
3848
3854
  onCleanup
3849
3855
  ]);
3850
3856
  }
3851
- return NOOP;
3857
+ if (flush === 'sync') {
3858
+ const ctx = useSSRContext();
3859
+ ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);
3860
+ }
3861
+ else {
3862
+ return NOOP;
3863
+ }
3852
3864
  }
3853
- let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
3865
+ let oldValue = isMultiSource
3866
+ ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)
3867
+ : INITIAL_WATCHER_VALUE;
3854
3868
  const job = () => {
3855
3869
  if (!effect.active) {
3856
3870
  return;
@@ -3872,7 +3886,10 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM
3872
3886
  callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [
3873
3887
  newValue,
3874
3888
  // pass undefined as the old value when it's changed for the first time
3875
- oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
3889
+ oldValue === INITIAL_WATCHER_VALUE ||
3890
+ (isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE)
3891
+ ? undefined
3892
+ : oldValue,
3876
3893
  onCleanup
3877
3894
  ]);
3878
3895
  oldValue = newValue;
@@ -3920,12 +3937,15 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM
3920
3937
  else {
3921
3938
  effect.run();
3922
3939
  }
3923
- return () => {
3940
+ const unwatch = () => {
3924
3941
  effect.stop();
3925
3942
  if (instance && instance.scope) {
3926
3943
  remove(instance.scope.effects, effect);
3927
3944
  }
3928
3945
  };
3946
+ if (ssrCleanup)
3947
+ ssrCleanup.push(unwatch);
3948
+ return unwatch;
3929
3949
  }
3930
3950
  // this.$watch
3931
3951
  function instanceWatch(source, value, options) {
@@ -4110,7 +4130,11 @@ const BaseTransitionImpl = {
4110
4130
  // return placeholder node and queue update when leave finishes
4111
4131
  leavingHooks.afterLeave = () => {
4112
4132
  state.isLeaving = false;
4113
- instance.update();
4133
+ // #6835
4134
+ // it also needs to be updated when active is undefined
4135
+ if (instance.update.active !== false) {
4136
+ instance.update();
4137
+ }
4114
4138
  };
4115
4139
  return emptyPlaceholder(child);
4116
4140
  }
@@ -4639,7 +4663,8 @@ const KeepAliveImpl = {
4639
4663
  : comp);
4640
4664
  const { include, exclude, max } = props;
4641
4665
  if ((include && (!name || !matches(include, name))) ||
4642
- (exclude && name && matches(exclude, name))) {
4666
+ (exclude && name && matches(exclude, name)) ||
4667
+ ((process.env.NODE_ENV !== 'production') && hmrDirtyComponents.has(comp))) {
4643
4668
  current = vnode;
4644
4669
  return rawVNode;
4645
4670
  }
@@ -4919,23 +4944,25 @@ function withDirectives(vnode, directives) {
4919
4944
  const bindings = vnode.dirs || (vnode.dirs = []);
4920
4945
  for (let i = 0; i < directives.length; i++) {
4921
4946
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
4922
- if (isFunction(dir)) {
4923
- dir = {
4924
- mounted: dir,
4925
- updated: dir
4926
- };
4927
- }
4928
- if (dir.deep) {
4929
- traverse(value);
4947
+ if (dir) {
4948
+ if (isFunction(dir)) {
4949
+ dir = {
4950
+ mounted: dir,
4951
+ updated: dir
4952
+ };
4953
+ }
4954
+ if (dir.deep) {
4955
+ traverse(value);
4956
+ }
4957
+ bindings.push({
4958
+ dir,
4959
+ instance,
4960
+ value,
4961
+ oldValue: void 0,
4962
+ arg,
4963
+ modifiers
4964
+ });
4930
4965
  }
4931
- bindings.push({
4932
- dir,
4933
- instance,
4934
- value,
4935
- oldValue: void 0,
4936
- arg,
4937
- modifiers
4938
- });
4939
4966
  }
4940
4967
  return vnode;
4941
4968
  }
@@ -6772,7 +6799,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
6772
6799
  if (validatePropName(normalizedKey)) {
6773
6800
  const opt = raw[key];
6774
6801
  const prop = (normalized[normalizedKey] =
6775
- isArray(opt) || isFunction(opt) ? { type: opt } : opt);
6802
+ isArray(opt) || isFunction(opt) ? { type: opt } : Object.assign({}, opt));
6776
6803
  if (prop) {
6777
6804
  const booleanIndex = getTypeIndex(Boolean, prop.type);
6778
6805
  const stringIndex = getTypeIndex(String, prop.type);
@@ -7144,7 +7171,7 @@ function createCompatVue(createApp, createSingletonApp) {
7144
7171
  return vm;
7145
7172
  }
7146
7173
  }
7147
- Vue.version = `2.6.14-compat:${"3.2.41"}`;
7174
+ Vue.version = `2.6.14-compat:${"3.2.42"}`;
7148
7175
  Vue.config = singletonApp.config;
7149
7176
  Vue.use = (p, ...options) => {
7150
7177
  if (p && isFunction(p.install)) {
@@ -10772,6 +10799,9 @@ function getExposeProxy(instance) {
10772
10799
  else if (key in publicPropertiesMap) {
10773
10800
  return publicPropertiesMap[key](instance);
10774
10801
  }
10802
+ },
10803
+ has(target, key) {
10804
+ return key in target || key in publicPropertiesMap;
10775
10805
  }
10776
10806
  })));
10777
10807
  }
@@ -11225,7 +11255,7 @@ function isMemoSame(cached, memo) {
11225
11255
  }
11226
11256
 
11227
11257
  // Core API ------------------------------------------------------------------
11228
- const version = "3.2.41";
11258
+ const version = "3.2.42";
11229
11259
  const _ssrUtils = {
11230
11260
  createComponentInstance,
11231
11261
  setupComponent,
@@ -11798,7 +11828,7 @@ class VueElement extends BaseClass {
11798
11828
  }
11799
11829
  }).observe(this, { attributes: true });
11800
11830
  const resolve = (def) => {
11801
- const { props, styles } = def;
11831
+ const { props = {}, styles } = def;
11802
11832
  const hasOptions = !isArray(props);
11803
11833
  const rawKeys = props ? (hasOptions ? Object.keys(props) : props) : [];
11804
11834
  // cast Number-type props set before resolve
@@ -11845,10 +11875,11 @@ class VueElement extends BaseClass {
11845
11875
  }
11846
11876
  _setAttr(key) {
11847
11877
  let value = this.getAttribute(key);
11848
- if (this._numberProps && this._numberProps[key]) {
11878
+ const camelKey = camelize(key);
11879
+ if (this._numberProps && this._numberProps[camelKey]) {
11849
11880
  value = toNumber(value);
11850
11881
  }
11851
- this._setProp(camelize(key), value, false);
11882
+ this._setProp(camelKey, value, false);
11852
11883
  }
11853
11884
  /**
11854
11885
  * @internal
@@ -12279,11 +12310,11 @@ function getTransitionInfo(el, expectedType) {
12279
12310
  const styles = window.getComputedStyle(el);
12280
12311
  // JSDOM may return undefined for transition properties
12281
12312
  const getStyleProperties = (key) => (styles[key] || '').split(', ');
12282
- const transitionDelays = getStyleProperties(TRANSITION + 'Delay');
12283
- const transitionDurations = getStyleProperties(TRANSITION + 'Duration');
12313
+ const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);
12314
+ const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);
12284
12315
  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
12285
- const animationDelays = getStyleProperties(ANIMATION + 'Delay');
12286
- const animationDurations = getStyleProperties(ANIMATION + 'Duration');
12316
+ const animationDelays = getStyleProperties(`${ANIMATION}Delay`);
12317
+ const animationDurations = getStyleProperties(`${ANIMATION}Duration`);
12287
12318
  const animationTimeout = getTimeout(animationDelays, animationDurations);
12288
12319
  let type = null;
12289
12320
  let timeout = 0;
@@ -12318,7 +12349,7 @@ function getTransitionInfo(el, expectedType) {
12318
12349
  : 0;
12319
12350
  }
12320
12351
  const hasTransform = type === TRANSITION &&
12321
- /\b(transform|all)(,|$)/.test(styles[TRANSITION + 'Property']);
12352
+ /\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());
12322
12353
  return {
12323
12354
  type,
12324
12355
  timeout,
@@ -22,27 +22,6 @@ var Vue = (function () {
22
22
  'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
23
23
  const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);
24
24
 
25
- /**
26
- * On the client we only need to offer special cases for boolean attributes that
27
- * have different names from their corresponding dom properties:
28
- * - itemscope -> N/A
29
- * - allowfullscreen -> allowFullscreen
30
- * - formnovalidate -> formNoValidate
31
- * - ismap -> isMap
32
- * - nomodule -> noModule
33
- * - novalidate -> noValidate
34
- * - readonly -> readOnly
35
- */
36
- const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
37
- const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
38
- /**
39
- * Boolean attributes should be included if the value is truthy or ''.
40
- * e.g. `<select multiple>` compiles to `{ multiple: '' }`
41
- */
42
- function includeBooleanAttr(value) {
43
- return !!value || value === '';
44
- }
45
-
46
25
  function normalizeStyle(value) {
47
26
  if (isArray(value)) {
48
27
  const res = {};
@@ -67,10 +46,14 @@ var Vue = (function () {
67
46
  }
68
47
  }
69
48
  const listDelimiterRE = /;(?![^(]*\))/g;
70
- const propertyDelimiterRE = /:(.+)/;
49
+ const propertyDelimiterRE = /:([^]+)/;
50
+ const styleCommentRE = /\/\*.*?\*\//gs;
71
51
  function parseStringStyle(cssText) {
72
52
  const ret = {};
73
- cssText.split(listDelimiterRE).forEach(item => {
53
+ cssText
54
+ .replace(styleCommentRE, '')
55
+ .split(listDelimiterRE)
56
+ .forEach(item => {
74
57
  if (item) {
75
58
  const tmp = item.split(propertyDelimiterRE);
76
59
  tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
@@ -146,6 +129,27 @@ var Vue = (function () {
146
129
  */
147
130
  const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
148
131
 
132
+ /**
133
+ * On the client we only need to offer special cases for boolean attributes that
134
+ * have different names from their corresponding dom properties:
135
+ * - itemscope -> N/A
136
+ * - allowfullscreen -> allowFullscreen
137
+ * - formnovalidate -> formNoValidate
138
+ * - ismap -> isMap
139
+ * - nomodule -> noModule
140
+ * - novalidate -> noValidate
141
+ * - readonly -> readOnly
142
+ */
143
+ const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
144
+ const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
145
+ /**
146
+ * Boolean attributes should be included if the value is truthy or ''.
147
+ * e.g. `<select multiple>` compiles to `{ multiple: '' }`
148
+ */
149
+ function includeBooleanAttr(value) {
150
+ return !!value || value === '';
151
+ }
152
+
149
153
  function looseCompareArrays(a, b) {
150
154
  if (a.length !== b.length)
151
155
  return false;
@@ -649,8 +653,9 @@ var Vue = (function () {
649
653
  deps = [...depsMap.values()];
650
654
  }
651
655
  else if (key === 'length' && isArray(target)) {
656
+ const newLength = toNumber(newValue);
652
657
  depsMap.forEach((dep, key) => {
653
- if (key === 'length' || key >= newValue) {
658
+ if (key === 'length' || key >= newLength) {
654
659
  deps.push(dep);
655
660
  }
656
661
  });
@@ -2704,7 +2709,7 @@ var Vue = (function () {
2704
2709
  const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;
2705
2710
  const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
2706
2711
  if (trim) {
2707
- args = rawArgs.map(a => a.trim());
2712
+ args = rawArgs.map(a => (isString(a) ? a.trim() : a));
2708
2713
  }
2709
2714
  if (number) {
2710
2715
  args = rawArgs.map(toNumber);
@@ -3807,7 +3812,9 @@ var Vue = (function () {
3807
3812
  callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);
3808
3813
  };
3809
3814
  };
3810
- let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
3815
+ let oldValue = isMultiSource
3816
+ ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)
3817
+ : INITIAL_WATCHER_VALUE;
3811
3818
  const job = () => {
3812
3819
  if (!effect.active) {
3813
3820
  return;
@@ -3829,7 +3836,10 @@ var Vue = (function () {
3829
3836
  callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [
3830
3837
  newValue,
3831
3838
  // pass undefined as the old value when it's changed for the first time
3832
- oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
3839
+ oldValue === INITIAL_WATCHER_VALUE ||
3840
+ (isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE)
3841
+ ? undefined
3842
+ : oldValue,
3833
3843
  onCleanup
3834
3844
  ]);
3835
3845
  oldValue = newValue;
@@ -3877,12 +3887,13 @@ var Vue = (function () {
3877
3887
  else {
3878
3888
  effect.run();
3879
3889
  }
3880
- return () => {
3890
+ const unwatch = () => {
3881
3891
  effect.stop();
3882
3892
  if (instance && instance.scope) {
3883
3893
  remove(instance.scope.effects, effect);
3884
3894
  }
3885
3895
  };
3896
+ return unwatch;
3886
3897
  }
3887
3898
  // this.$watch
3888
3899
  function instanceWatch(source, value, options) {
@@ -4064,7 +4075,11 @@ var Vue = (function () {
4064
4075
  // return placeholder node and queue update when leave finishes
4065
4076
  leavingHooks.afterLeave = () => {
4066
4077
  state.isLeaving = false;
4067
- instance.update();
4078
+ // #6835
4079
+ // it also needs to be updated when active is undefined
4080
+ if (instance.update.active !== false) {
4081
+ instance.update();
4082
+ }
4068
4083
  };
4069
4084
  return emptyPlaceholder(child);
4070
4085
  }
@@ -4585,7 +4600,8 @@ var Vue = (function () {
4585
4600
  : comp);
4586
4601
  const { include, exclude, max } = props;
4587
4602
  if ((include && (!name || !matches(include, name))) ||
4588
- (exclude && name && matches(exclude, name))) {
4603
+ (exclude && name && matches(exclude, name)) ||
4604
+ (hmrDirtyComponents.has(comp))) {
4589
4605
  current = vnode;
4590
4606
  return rawVNode;
4591
4607
  }
@@ -4865,23 +4881,25 @@ var Vue = (function () {
4865
4881
  const bindings = vnode.dirs || (vnode.dirs = []);
4866
4882
  for (let i = 0; i < directives.length; i++) {
4867
4883
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
4868
- if (isFunction(dir)) {
4869
- dir = {
4870
- mounted: dir,
4871
- updated: dir
4872
- };
4873
- }
4874
- if (dir.deep) {
4875
- traverse(value);
4884
+ if (dir) {
4885
+ if (isFunction(dir)) {
4886
+ dir = {
4887
+ mounted: dir,
4888
+ updated: dir
4889
+ };
4890
+ }
4891
+ if (dir.deep) {
4892
+ traverse(value);
4893
+ }
4894
+ bindings.push({
4895
+ dir,
4896
+ instance,
4897
+ value,
4898
+ oldValue: void 0,
4899
+ arg,
4900
+ modifiers
4901
+ });
4876
4902
  }
4877
- bindings.push({
4878
- dir,
4879
- instance,
4880
- value,
4881
- oldValue: void 0,
4882
- arg,
4883
- modifiers
4884
- });
4885
4903
  }
4886
4904
  return vnode;
4887
4905
  }
@@ -6708,7 +6726,7 @@ var Vue = (function () {
6708
6726
  if (validatePropName(normalizedKey)) {
6709
6727
  const opt = raw[key];
6710
6728
  const prop = (normalized[normalizedKey] =
6711
- isArray(opt) || isFunction(opt) ? { type: opt } : opt);
6729
+ isArray(opt) || isFunction(opt) ? { type: opt } : Object.assign({}, opt));
6712
6730
  if (prop) {
6713
6731
  const booleanIndex = getTypeIndex(Boolean, prop.type);
6714
6732
  const stringIndex = getTypeIndex(String, prop.type);
@@ -7078,7 +7096,7 @@ var Vue = (function () {
7078
7096
  return vm;
7079
7097
  }
7080
7098
  }
7081
- Vue.version = `2.6.14-compat:${"3.2.41"}`;
7099
+ Vue.version = `2.6.14-compat:${"3.2.42"}`;
7082
7100
  Vue.config = singletonApp.config;
7083
7101
  Vue.use = (p, ...options) => {
7084
7102
  if (p && isFunction(p.install)) {
@@ -10634,6 +10652,9 @@ var Vue = (function () {
10634
10652
  else if (key in publicPropertiesMap) {
10635
10653
  return publicPropertiesMap[key](instance);
10636
10654
  }
10655
+ },
10656
+ has(target, key) {
10657
+ return key in target || key in publicPropertiesMap;
10637
10658
  }
10638
10659
  })));
10639
10660
  }
@@ -11082,7 +11103,7 @@ var Vue = (function () {
11082
11103
  }
11083
11104
 
11084
11105
  // Core API ------------------------------------------------------------------
11085
- const version = "3.2.41";
11106
+ const version = "3.2.42";
11086
11107
  /**
11087
11108
  * SSR utils for \@vue/server-renderer. Only exposed in ssr-possible builds.
11088
11109
  * @internal
@@ -11646,7 +11667,7 @@ var Vue = (function () {
11646
11667
  }
11647
11668
  }).observe(this, { attributes: true });
11648
11669
  const resolve = (def) => {
11649
- const { props, styles } = def;
11670
+ const { props = {}, styles } = def;
11650
11671
  const hasOptions = !isArray(props);
11651
11672
  const rawKeys = props ? (hasOptions ? Object.keys(props) : props) : [];
11652
11673
  // cast Number-type props set before resolve
@@ -11693,10 +11714,11 @@ var Vue = (function () {
11693
11714
  }
11694
11715
  _setAttr(key) {
11695
11716
  let value = this.getAttribute(key);
11696
- if (this._numberProps && this._numberProps[key]) {
11717
+ const camelKey = camelize(key);
11718
+ if (this._numberProps && this._numberProps[camelKey]) {
11697
11719
  value = toNumber(value);
11698
11720
  }
11699
- this._setProp(camelize(key), value, false);
11721
+ this._setProp(camelKey, value, false);
11700
11722
  }
11701
11723
  /**
11702
11724
  * @internal
@@ -12112,11 +12134,11 @@ var Vue = (function () {
12112
12134
  const styles = window.getComputedStyle(el);
12113
12135
  // JSDOM may return undefined for transition properties
12114
12136
  const getStyleProperties = (key) => (styles[key] || '').split(', ');
12115
- const transitionDelays = getStyleProperties(TRANSITION + 'Delay');
12116
- const transitionDurations = getStyleProperties(TRANSITION + 'Duration');
12137
+ const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);
12138
+ const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);
12117
12139
  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
12118
- const animationDelays = getStyleProperties(ANIMATION + 'Delay');
12119
- const animationDurations = getStyleProperties(ANIMATION + 'Duration');
12140
+ const animationDelays = getStyleProperties(`${ANIMATION}Delay`);
12141
+ const animationDurations = getStyleProperties(`${ANIMATION}Duration`);
12120
12142
  const animationTimeout = getTimeout(animationDelays, animationDurations);
12121
12143
  let type = null;
12122
12144
  let timeout = 0;
@@ -12151,7 +12173,7 @@ var Vue = (function () {
12151
12173
  : 0;
12152
12174
  }
12153
12175
  const hasTransform = type === TRANSITION &&
12154
- /\b(transform|all)(,|$)/.test(styles[TRANSITION + 'Property']);
12176
+ /\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());
12155
12177
  return {
12156
12178
  type,
12157
12179
  timeout,