vue 3.2.11 → 3.2.12

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.
@@ -1689,335 +1689,6 @@ var Vue = (function (exports) {
1689
1689
  exports.devtools.emit("component:emit" /* COMPONENT_EMIT */, component.appContext.app, component, event, params);
1690
1690
  }
1691
1691
 
1692
- const deprecationData = {
1693
- ["GLOBAL_MOUNT" /* GLOBAL_MOUNT */]: {
1694
- message: `The global app bootstrapping API has changed: vm.$mount() and the "el" ` +
1695
- `option have been removed. Use createApp(RootComponent).mount() instead.`,
1696
- link: `https://v3.vuejs.org/guide/migration/global-api.html#mounting-app-instance`
1697
- },
1698
- ["GLOBAL_MOUNT_CONTAINER" /* GLOBAL_MOUNT_CONTAINER */]: {
1699
- message: `Vue detected directives on the mount container. ` +
1700
- `In Vue 3, the container is no longer considered part of the template ` +
1701
- `and will not be processed/replaced.`,
1702
- link: `https://v3.vuejs.org/guide/migration/mount-changes.html`
1703
- },
1704
- ["GLOBAL_EXTEND" /* GLOBAL_EXTEND */]: {
1705
- message: `Vue.extend() has been removed in Vue 3. ` +
1706
- `Use defineComponent() instead.`,
1707
- link: `https://v3.vuejs.org/api/global-api.html#definecomponent`
1708
- },
1709
- ["GLOBAL_PROTOTYPE" /* GLOBAL_PROTOTYPE */]: {
1710
- message: `Vue.prototype is no longer available in Vue 3. ` +
1711
- `Use app.config.globalProperties instead.`,
1712
- link: `https://v3.vuejs.org/guide/migration/global-api.html#vue-prototype-replaced-by-config-globalproperties`
1713
- },
1714
- ["GLOBAL_SET" /* GLOBAL_SET */]: {
1715
- message: `Vue.set() has been removed as it is no longer needed in Vue 3. ` +
1716
- `Simply use native JavaScript mutations.`
1717
- },
1718
- ["GLOBAL_DELETE" /* GLOBAL_DELETE */]: {
1719
- message: `Vue.delete() has been removed as it is no longer needed in Vue 3. ` +
1720
- `Simply use native JavaScript mutations.`
1721
- },
1722
- ["GLOBAL_OBSERVABLE" /* GLOBAL_OBSERVABLE */]: {
1723
- message: `Vue.observable() has been removed. ` +
1724
- `Use \`import { reactive } from "vue"\` from Composition API instead.`,
1725
- link: `https://v3.vuejs.org/api/basic-reactivity.html`
1726
- },
1727
- ["GLOBAL_PRIVATE_UTIL" /* GLOBAL_PRIVATE_UTIL */]: {
1728
- message: `Vue.util has been removed. Please refactor to avoid its usage ` +
1729
- `since it was an internal API even in Vue 2.`
1730
- },
1731
- ["CONFIG_SILENT" /* CONFIG_SILENT */]: {
1732
- message: `config.silent has been removed because it is not good practice to ` +
1733
- `intentionally suppress warnings. You can use your browser console's ` +
1734
- `filter features to focus on relevant messages.`
1735
- },
1736
- ["CONFIG_DEVTOOLS" /* CONFIG_DEVTOOLS */]: {
1737
- message: `config.devtools has been removed. To enable devtools for ` +
1738
- `production, configure the __VUE_PROD_DEVTOOLS__ compile-time flag.`,
1739
- link: `https://github.com/vuejs/vue-next/tree/master/packages/vue#bundler-build-feature-flags`
1740
- },
1741
- ["CONFIG_KEY_CODES" /* CONFIG_KEY_CODES */]: {
1742
- message: `config.keyCodes has been removed. ` +
1743
- `In Vue 3, you can directly use the kebab-case key names as v-on modifiers.`,
1744
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
1745
- },
1746
- ["CONFIG_PRODUCTION_TIP" /* CONFIG_PRODUCTION_TIP */]: {
1747
- message: `config.productionTip has been removed.`,
1748
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-productiontip-removed`
1749
- },
1750
- ["CONFIG_IGNORED_ELEMENTS" /* CONFIG_IGNORED_ELEMENTS */]: {
1751
- message: () => {
1752
- let msg = `config.ignoredElements has been removed.`;
1753
- if (isRuntimeOnly()) {
1754
- msg += ` Pass the "isCustomElement" option to @vue/compiler-dom instead.`;
1755
- }
1756
- else {
1757
- msg += ` Use config.isCustomElement instead.`;
1758
- }
1759
- return msg;
1760
- },
1761
- link: `https://v3.vuejs.org/guide/migration/global-api.html#config-ignoredelements-is-now-config-iscustomelement`
1762
- },
1763
- ["CONFIG_WHITESPACE" /* CONFIG_WHITESPACE */]: {
1764
- // this warning is only relevant in the full build when using runtime
1765
- // compilation, so it's put in the runtime compatConfig list.
1766
- message: `Vue 3 compiler's whitespace option will default to "condense" instead of ` +
1767
- `"preserve". To suppress this warning, provide an explicit value for ` +
1768
- `\`config.compilerOptions.whitespace\`.`
1769
- },
1770
- ["CONFIG_OPTION_MERGE_STRATS" /* CONFIG_OPTION_MERGE_STRATS */]: {
1771
- message: `config.optionMergeStrategies no longer exposes internal strategies. ` +
1772
- `Use custom merge functions instead.`
1773
- },
1774
- ["INSTANCE_SET" /* INSTANCE_SET */]: {
1775
- message: `vm.$set() has been removed as it is no longer needed in Vue 3. ` +
1776
- `Simply use native JavaScript mutations.`
1777
- },
1778
- ["INSTANCE_DELETE" /* INSTANCE_DELETE */]: {
1779
- message: `vm.$delete() has been removed as it is no longer needed in Vue 3. ` +
1780
- `Simply use native JavaScript mutations.`
1781
- },
1782
- ["INSTANCE_DESTROY" /* INSTANCE_DESTROY */]: {
1783
- message: `vm.$destroy() has been removed. Use app.unmount() instead.`,
1784
- link: `https://v3.vuejs.org/api/application-api.html#unmount`
1785
- },
1786
- ["INSTANCE_EVENT_EMITTER" /* INSTANCE_EVENT_EMITTER */]: {
1787
- message: `vm.$on/$once/$off() have been removed. ` +
1788
- `Use an external event emitter library instead.`,
1789
- link: `https://v3.vuejs.org/guide/migration/events-api.html`
1790
- },
1791
- ["INSTANCE_EVENT_HOOKS" /* INSTANCE_EVENT_HOOKS */]: {
1792
- message: event => `"${event}" lifecycle events are no longer supported. From templates, ` +
1793
- `use the "vnode" prefix instead of "hook:". For example, @${event} ` +
1794
- `should be changed to @vnode-${event.slice(5)}. ` +
1795
- `From JavaScript, use Composition API to dynamically register lifecycle ` +
1796
- `hooks.`,
1797
- link: `https://v3.vuejs.org/guide/migration/vnode-lifecycle-events.html`
1798
- },
1799
- ["INSTANCE_CHILDREN" /* INSTANCE_CHILDREN */]: {
1800
- message: `vm.$children has been removed. Consider refactoring your logic ` +
1801
- `to avoid relying on direct access to child components.`,
1802
- link: `https://v3.vuejs.org/guide/migration/children.html`
1803
- },
1804
- ["INSTANCE_LISTENERS" /* INSTANCE_LISTENERS */]: {
1805
- message: `vm.$listeners has been removed. In Vue 3, parent v-on listeners are ` +
1806
- `included in vm.$attrs and it is no longer necessary to separately use ` +
1807
- `v-on="$listeners" if you are already using v-bind="$attrs". ` +
1808
- `(Note: the Vue 3 behavior only applies if this compat config is disabled)`,
1809
- link: `https://v3.vuejs.org/guide/migration/listeners-removed.html`
1810
- },
1811
- ["INSTANCE_SCOPED_SLOTS" /* INSTANCE_SCOPED_SLOTS */]: {
1812
- message: `vm.$scopedSlots has been removed. Use vm.$slots instead.`,
1813
- link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
1814
- },
1815
- ["INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */]: {
1816
- message: componentName => `Component <${componentName || 'Anonymous'}> has \`inheritAttrs: false\` but is ` +
1817
- `relying on class/style fallthrough from parent. In Vue 3, class/style ` +
1818
- `are now included in $attrs and will no longer fallthrough when ` +
1819
- `inheritAttrs is false. If you are already using v-bind="$attrs" on ` +
1820
- `component root it should render the same end result. ` +
1821
- `If you are binding $attrs to a non-root element and expecting ` +
1822
- `class/style to fallthrough on root, you will need to now manually bind ` +
1823
- `them on root via :class="$attrs.class".`,
1824
- link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`
1825
- },
1826
- ["OPTIONS_DATA_FN" /* OPTIONS_DATA_FN */]: {
1827
- message: `The "data" option can no longer be a plain object. ` +
1828
- `Always use a function.`,
1829
- link: `https://v3.vuejs.org/guide/migration/data-option.html`
1830
- },
1831
- ["OPTIONS_DATA_MERGE" /* OPTIONS_DATA_MERGE */]: {
1832
- message: (key) => `Detected conflicting key "${key}" when merging data option values. ` +
1833
- `In Vue 3, data keys are merged shallowly and will override one another.`,
1834
- link: `https://v3.vuejs.org/guide/migration/data-option.html#mixin-merge-behavior-change`
1835
- },
1836
- ["OPTIONS_BEFORE_DESTROY" /* OPTIONS_BEFORE_DESTROY */]: {
1837
- message: `\`beforeDestroy\` has been renamed to \`beforeUnmount\`.`
1838
- },
1839
- ["OPTIONS_DESTROYED" /* OPTIONS_DESTROYED */]: {
1840
- message: `\`destroyed\` has been renamed to \`unmounted\`.`
1841
- },
1842
- ["WATCH_ARRAY" /* WATCH_ARRAY */]: {
1843
- message: `"watch" option or vm.$watch on an array value will no longer ` +
1844
- `trigger on array mutation unless the "deep" option is specified. ` +
1845
- `If current usage is intended, you can disable the compat behavior and ` +
1846
- `suppress this warning with:` +
1847
- `\n\n configureCompat({ ${"WATCH_ARRAY" /* WATCH_ARRAY */}: false })\n`,
1848
- link: `https://v3.vuejs.org/guide/migration/watch.html`
1849
- },
1850
- ["PROPS_DEFAULT_THIS" /* PROPS_DEFAULT_THIS */]: {
1851
- message: (key) => `props default value function no longer has access to "this". The compat ` +
1852
- `build only offers access to this.$options.` +
1853
- `(found in prop "${key}")`,
1854
- link: `https://v3.vuejs.org/guide/migration/props-default-this.html`
1855
- },
1856
- ["CUSTOM_DIR" /* CUSTOM_DIR */]: {
1857
- message: (legacyHook, newHook) => `Custom directive hook "${legacyHook}" has been removed. ` +
1858
- `Use "${newHook}" instead.`,
1859
- link: `https://v3.vuejs.org/guide/migration/custom-directives.html`
1860
- },
1861
- ["V_FOR_REF" /* V_FOR_REF */]: {
1862
- message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +
1863
- `Consider using function refs or refactor to avoid ref usage altogether.`,
1864
- link: `https://v3.vuejs.org/guide/migration/array-refs.html`
1865
- },
1866
- ["V_ON_KEYCODE_MODIFIER" /* V_ON_KEYCODE_MODIFIER */]: {
1867
- message: `Using keyCode as v-on modifier is no longer supported. ` +
1868
- `Use kebab-case key name modifiers instead.`,
1869
- link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`
1870
- },
1871
- ["ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */]: {
1872
- message: (name) => `Attribute "${name}" with v-bind value \`false\` will render ` +
1873
- `${name}="false" instead of removing it in Vue 3. To remove the attribute, ` +
1874
- `use \`null\` or \`undefined\` instead. If the usage is intended, ` +
1875
- `you can disable the compat behavior and suppress this warning with:` +
1876
- `\n\n configureCompat({ ${"ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */}: false })\n`,
1877
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
1878
- },
1879
- ["ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */]: {
1880
- message: (name, value, coerced) => `Enumerated attribute "${name}" with v-bind value \`${value}\` will ` +
1881
- `${value === null ? `be removed` : `render the value as-is`} instead of coercing the value to "${coerced}" in Vue 3. ` +
1882
- `Always use explicit "true" or "false" values for enumerated attributes. ` +
1883
- `If the usage is intended, ` +
1884
- `you can disable the compat behavior and suppress this warning with:` +
1885
- `\n\n configureCompat({ ${"ATTR_ENUMERATED_COERCION" /* ATTR_ENUMERATED_COERCION */}: false })\n`,
1886
- link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`
1887
- },
1888
- ["TRANSITION_CLASSES" /* TRANSITION_CLASSES */]: {
1889
- message: `` // this feature cannot be runtime-detected
1890
- },
1891
- ["TRANSITION_GROUP_ROOT" /* TRANSITION_GROUP_ROOT */]: {
1892
- message: `<TransitionGroup> no longer renders a root <span> element by ` +
1893
- `default if no "tag" prop is specified. If you do not rely on the span ` +
1894
- `for styling, you can disable the compat behavior and suppress this ` +
1895
- `warning with:` +
1896
- `\n\n configureCompat({ ${"TRANSITION_GROUP_ROOT" /* TRANSITION_GROUP_ROOT */}: false })\n`,
1897
- link: `https://v3.vuejs.org/guide/migration/transition-group.html`
1898
- },
1899
- ["COMPONENT_ASYNC" /* COMPONENT_ASYNC */]: {
1900
- message: (comp) => {
1901
- const name = getComponentName(comp);
1902
- return (`Async component${name ? ` <${name}>` : `s`} should be explicitly created via \`defineAsyncComponent()\` ` +
1903
- `in Vue 3. Plain functions will be treated as functional components in ` +
1904
- `non-compat build. If you have already migrated all async component ` +
1905
- `usage and intend to use plain functions for functional components, ` +
1906
- `you can disable the compat behavior and suppress this ` +
1907
- `warning with:` +
1908
- `\n\n configureCompat({ ${"COMPONENT_ASYNC" /* COMPONENT_ASYNC */}: false })\n`);
1909
- },
1910
- link: `https://v3.vuejs.org/guide/migration/async-components.html`
1911
- },
1912
- ["COMPONENT_FUNCTIONAL" /* COMPONENT_FUNCTIONAL */]: {
1913
- message: (comp) => {
1914
- const name = getComponentName(comp);
1915
- return (`Functional component${name ? ` <${name}>` : `s`} should be defined as a plain function in Vue 3. The "functional" ` +
1916
- `option has been removed. NOTE: Before migrating to use plain ` +
1917
- `functions for functional components, first make sure that all async ` +
1918
- `components usage have been migrated and its compat behavior has ` +
1919
- `been disabled.`);
1920
- },
1921
- link: `https://v3.vuejs.org/guide/migration/functional-components.html`
1922
- },
1923
- ["COMPONENT_V_MODEL" /* COMPONENT_V_MODEL */]: {
1924
- message: (comp) => {
1925
- const configMsg = `opt-in to ` +
1926
- `Vue 3 behavior on a per-component basis with \`compatConfig: { ${"COMPONENT_V_MODEL" /* COMPONENT_V_MODEL */}: false }\`.`;
1927
- if (comp.props &&
1928
- (isArray(comp.props)
1929
- ? comp.props.includes('modelValue')
1930
- : hasOwn(comp.props, 'modelValue'))) {
1931
- return (`Component delcares "modelValue" prop, which is Vue 3 usage, but ` +
1932
- `is running under Vue 2 compat v-model behavior. You can ${configMsg}`);
1933
- }
1934
- return (`v-model usage on component has changed in Vue 3. Component that expects ` +
1935
- `to work with v-model should now use the "modelValue" prop and emit the ` +
1936
- `"update:modelValue" event. You can update the usage and then ${configMsg}`);
1937
- },
1938
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
1939
- },
1940
- ["RENDER_FUNCTION" /* RENDER_FUNCTION */]: {
1941
- message: `Vue 3's render function API has changed. ` +
1942
- `You can opt-in to the new API with:` +
1943
- `\n\n configureCompat({ ${"RENDER_FUNCTION" /* RENDER_FUNCTION */}: false })\n` +
1944
- `\n (This can also be done per-component via the "compatConfig" option.)`,
1945
- link: `https://v3.vuejs.org/guide/migration/render-function-api.html`
1946
- },
1947
- ["FILTERS" /* FILTERS */]: {
1948
- message: `filters have been removed in Vue 3. ` +
1949
- `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
1950
- `Use method calls or computed properties instead.`,
1951
- link: `https://v3.vuejs.org/guide/migration/filters.html`
1952
- },
1953
- ["PRIVATE_APIS" /* PRIVATE_APIS */]: {
1954
- message: name => `"${name}" is a Vue 2 private API that no longer exists in Vue 3. ` +
1955
- `If you are seeing this warning only due to a dependency, you can ` +
1956
- `suppress this warning via { PRIVATE_APIS: 'supress-warning' }.`
1957
- }
1958
- };
1959
- const instanceWarned = Object.create(null);
1960
- const warnCount = Object.create(null);
1961
- function warnDeprecation(key, instance, ...args) {
1962
- instance = instance || getCurrentInstance();
1963
- // check user config
1964
- const config = getCompatConfigForKey(key, instance);
1965
- if (config === 'suppress-warning') {
1966
- return;
1967
- }
1968
- const dupKey = key + args.join('');
1969
- let compId = instance && formatComponentName(instance, instance.type);
1970
- if (compId === 'Anonymous' && instance) {
1971
- compId = instance.uid;
1972
- }
1973
- // skip if the same warning is emitted for the same component type
1974
- const componentDupKey = dupKey + compId;
1975
- if (componentDupKey in instanceWarned) {
1976
- return;
1977
- }
1978
- instanceWarned[componentDupKey] = true;
1979
- // same warning, but different component. skip the long message and just
1980
- // log the key and count.
1981
- if (dupKey in warnCount) {
1982
- warn$1(`(deprecation ${key}) (${++warnCount[dupKey] + 1})`);
1983
- return;
1984
- }
1985
- warnCount[dupKey] = 0;
1986
- const { message, link } = deprecationData[key];
1987
- warn$1(`(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`);
1988
- if (!isCompatEnabled(key, instance, true)) {
1989
- console.error(`^ The above deprecation's compat behavior is disabled and will likely ` +
1990
- `lead to runtime errors.`);
1991
- }
1992
- }
1993
- const globalCompatConfig = {
1994
- MODE: 2
1995
- };
1996
- function getCompatConfigForKey(key, instance) {
1997
- const instanceConfig = instance && instance.type.compatConfig;
1998
- if (instanceConfig && key in instanceConfig) {
1999
- return instanceConfig[key];
2000
- }
2001
- return globalCompatConfig[key];
2002
- }
2003
- function isCompatEnabled(key, instance, enableForBuiltIn = false) {
2004
- // skip compat for built-in components
2005
- if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) {
2006
- return false;
2007
- }
2008
- const rawMode = getCompatConfigForKey('MODE', instance) || 2;
2009
- const val = getCompatConfigForKey(key, instance);
2010
- const mode = isFunction(rawMode)
2011
- ? rawMode(instance && instance.type)
2012
- : rawMode;
2013
- if (mode === 2) {
2014
- return val !== false;
2015
- }
2016
- else {
2017
- return val === true || val === 'suppress-warning';
2018
- }
2019
- }
2020
-
2021
1692
  function emit(instance, event, ...rawArgs) {
2022
1693
  const props = instance.vnode.props || EMPTY_OBJ;
2023
1694
  {
@@ -2243,12 +1914,12 @@ var Vue = (function (exports) {
2243
1914
  function renderComponentRoot(instance) {
2244
1915
  const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;
2245
1916
  let result;
1917
+ let fallthroughAttrs;
2246
1918
  const prev = setCurrentRenderingInstance(instance);
2247
1919
  {
2248
1920
  accessedAttrs = false;
2249
1921
  }
2250
1922
  try {
2251
- let fallthroughAttrs;
2252
1923
  if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) {
2253
1924
  // withProxy is a proxy with a different `has` trap only for
2254
1925
  // runtime-compiled render functions using `with` block.
@@ -2279,97 +1950,91 @@ var Vue = (function (exports) {
2279
1950
  ? attrs
2280
1951
  : getFunctionalFallthrough(attrs);
2281
1952
  }
2282
- // attr merging
2283
- // in dev mode, comments are preserved, and it's possible for a template
2284
- // to have comments along side the root element which makes it a fragment
2285
- let root = result;
2286
- let setRoot = undefined;
2287
- if (true &&
2288
- result.patchFlag > 0 &&
2289
- result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) {
2290
- ;
2291
- [root, setRoot] = getChildRoot(result);
2292
- }
2293
- if (fallthroughAttrs && inheritAttrs !== false) {
2294
- const keys = Object.keys(fallthroughAttrs);
2295
- const { shapeFlag } = root;
2296
- if (keys.length) {
2297
- if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {
2298
- if (propsOptions && keys.some(isModelListener)) {
2299
- // If a v-model listener (onUpdate:xxx) has a corresponding declared
2300
- // prop, it indicates this component expects to handle v-model and
2301
- // it should not fallthrough.
2302
- // related: #1543, #1643, #1989
2303
- fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);
2304
- }
2305
- root = cloneVNode(root, fallthroughAttrs);
2306
- }
2307
- else if (true && !accessedAttrs && root.type !== Comment) {
2308
- const allAttrs = Object.keys(attrs);
2309
- const eventAttrs = [];
2310
- const extraAttrs = [];
2311
- for (let i = 0, l = allAttrs.length; i < l; i++) {
2312
- const key = allAttrs[i];
2313
- if (isOn(key)) {
2314
- // ignore v-model handlers when they fail to fallthrough
2315
- if (!isModelListener(key)) {
2316
- // remove `on`, lowercase first letter to reflect event casing
2317
- // accurately
2318
- eventAttrs.push(key[2].toLowerCase() + key.slice(3));
2319
- }
2320
- }
2321
- else {
2322
- extraAttrs.push(key);
1953
+ }
1954
+ catch (err) {
1955
+ blockStack.length = 0;
1956
+ handleError(err, instance, 1 /* RENDER_FUNCTION */);
1957
+ result = createVNode(Comment);
1958
+ }
1959
+ // attr merging
1960
+ // in dev mode, comments are preserved, and it's possible for a template
1961
+ // to have comments along side the root element which makes it a fragment
1962
+ let root = result;
1963
+ let setRoot = undefined;
1964
+ if (result.patchFlag > 0 &&
1965
+ result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) {
1966
+ [root, setRoot] = getChildRoot(result);
1967
+ }
1968
+ if (fallthroughAttrs && inheritAttrs !== false) {
1969
+ const keys = Object.keys(fallthroughAttrs);
1970
+ const { shapeFlag } = root;
1971
+ if (keys.length) {
1972
+ if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {
1973
+ if (propsOptions && keys.some(isModelListener)) {
1974
+ // If a v-model listener (onUpdate:xxx) has a corresponding declared
1975
+ // prop, it indicates this component expects to handle v-model and
1976
+ // it should not fallthrough.
1977
+ // related: #1543, #1643, #1989
1978
+ fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);
1979
+ }
1980
+ root = cloneVNode(root, fallthroughAttrs);
1981
+ }
1982
+ else if (!accessedAttrs && root.type !== Comment) {
1983
+ const allAttrs = Object.keys(attrs);
1984
+ const eventAttrs = [];
1985
+ const extraAttrs = [];
1986
+ for (let i = 0, l = allAttrs.length; i < l; i++) {
1987
+ const key = allAttrs[i];
1988
+ if (isOn(key)) {
1989
+ // ignore v-model handlers when they fail to fallthrough
1990
+ if (!isModelListener(key)) {
1991
+ // remove `on`, lowercase first letter to reflect event casing
1992
+ // accurately
1993
+ eventAttrs.push(key[2].toLowerCase() + key.slice(3));
2323
1994
  }
2324
1995
  }
2325
- if (extraAttrs.length) {
2326
- warn$1(`Extraneous non-props attributes (` +
2327
- `${extraAttrs.join(', ')}) ` +
2328
- `were passed to component but could not be automatically inherited ` +
2329
- `because component renders fragment or text root nodes.`);
2330
- }
2331
- if (eventAttrs.length) {
2332
- warn$1(`Extraneous non-emits event listeners (` +
2333
- `${eventAttrs.join(', ')}) ` +
2334
- `were passed to component but could not be automatically inherited ` +
2335
- `because component renders fragment or text root nodes. ` +
2336
- `If the listener is intended to be a component custom event listener only, ` +
2337
- `declare it using the "emits" option.`);
1996
+ else {
1997
+ extraAttrs.push(key);
2338
1998
  }
2339
1999
  }
2000
+ if (extraAttrs.length) {
2001
+ warn$1(`Extraneous non-props attributes (` +
2002
+ `${extraAttrs.join(', ')}) ` +
2003
+ `were passed to component but could not be automatically inherited ` +
2004
+ `because component renders fragment or text root nodes.`);
2005
+ }
2006
+ if (eventAttrs.length) {
2007
+ warn$1(`Extraneous non-emits event listeners (` +
2008
+ `${eventAttrs.join(', ')}) ` +
2009
+ `were passed to component but could not be automatically inherited ` +
2010
+ `because component renders fragment or text root nodes. ` +
2011
+ `If the listener is intended to be a component custom event listener only, ` +
2012
+ `declare it using the "emits" option.`);
2013
+ }
2340
2014
  }
2341
2015
  }
2342
- if (false &&
2343
- isCompatEnabled("INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */, instance) &&
2344
- vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ &&
2345
- root.shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) ;
2346
- // inherit directives
2347
- if (vnode.dirs) {
2348
- if (true && !isElementRoot(root)) {
2349
- warn$1(`Runtime directive used on component with non-element root node. ` +
2350
- `The directives will not function as intended.`);
2351
- }
2352
- root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
2353
- }
2354
- // inherit transition data
2355
- if (vnode.transition) {
2356
- if (true && !isElementRoot(root)) {
2357
- warn$1(`Component inside <Transition> renders non-element root node ` +
2358
- `that cannot be animated.`);
2359
- }
2360
- root.transition = vnode.transition;
2361
- }
2362
- if (true && setRoot) {
2363
- setRoot(root);
2016
+ }
2017
+ // inherit directives
2018
+ if (vnode.dirs) {
2019
+ if (!isElementRoot(root)) {
2020
+ warn$1(`Runtime directive used on component with non-element root node. ` +
2021
+ `The directives will not function as intended.`);
2364
2022
  }
2365
- else {
2366
- result = root;
2023
+ root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
2024
+ }
2025
+ // inherit transition data
2026
+ if (vnode.transition) {
2027
+ if (!isElementRoot(root)) {
2028
+ warn$1(`Component inside <Transition> renders non-element root node ` +
2029
+ `that cannot be animated.`);
2367
2030
  }
2031
+ root.transition = vnode.transition;
2368
2032
  }
2369
- catch (err) {
2370
- blockStack.length = 0;
2371
- handleError(err, instance, 1 /* RENDER_FUNCTION */);
2372
- result = createVNode(Comment);
2033
+ if (setRoot) {
2034
+ setRoot(root);
2035
+ }
2036
+ else {
2037
+ result = root;
2373
2038
  }
2374
2039
  setCurrentRenderingInstance(prev);
2375
2040
  return result;
@@ -2904,8 +2569,8 @@ var Vue = (function (exports) {
2904
2569
  function normalizeSuspenseSlot(s) {
2905
2570
  let block;
2906
2571
  if (isFunction(s)) {
2907
- const isCompiledSlot = s._c;
2908
- if (isCompiledSlot) {
2572
+ const trackBlock = isBlockTreeEnabled && s._c;
2573
+ if (trackBlock) {
2909
2574
  // disableTracking: false
2910
2575
  // allow block tracking for compiled slots
2911
2576
  // (see ./componentRenderContext.ts)
@@ -2913,7 +2578,7 @@ var Vue = (function (exports) {
2913
2578
  openBlock();
2914
2579
  }
2915
2580
  s = s();
2916
- if (isCompiledSlot) {
2581
+ if (trackBlock) {
2917
2582
  s._d = true;
2918
2583
  block = currentBlock;
2919
2584
  closeBlock();
@@ -7009,7 +6674,11 @@ var Vue = (function (exports) {
7009
6674
  return Component;
7010
6675
  }
7011
6676
  if (warnMissing && !res) {
7012
- warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}`);
6677
+ const extra = type === COMPONENTS
6678
+ ? `\nIf this is a native custom element, make sure to exclude it from ` +
6679
+ `component resolution via compilerOptions.isCustomElement.`
6680
+ : ``;
6681
+ warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
7013
6682
  }
7014
6683
  return res;
7015
6684
  }
@@ -7864,17 +7533,19 @@ var Vue = (function (exports) {
7864
7533
  function exposeSetupStateOnRenderContext(instance) {
7865
7534
  const { ctx, setupState } = instance;
7866
7535
  Object.keys(toRaw(setupState)).forEach(key => {
7867
- if (!setupState.__isScriptSetup && (key[0] === '$' || key[0] === '_')) {
7868
- warn$1(`setup() return property ${JSON.stringify(key)} should not start with "$" or "_" ` +
7869
- `which are reserved prefixes for Vue internals.`);
7870
- return;
7536
+ if (!setupState.__isScriptSetup) {
7537
+ if (key[0] === '$' || key[0] === '_') {
7538
+ warn$1(`setup() return property ${JSON.stringify(key)} should not start with "$" or "_" ` +
7539
+ `which are reserved prefixes for Vue internals.`);
7540
+ return;
7541
+ }
7542
+ Object.defineProperty(ctx, key, {
7543
+ enumerable: true,
7544
+ configurable: true,
7545
+ get: () => setupState[key],
7546
+ set: NOOP
7547
+ });
7871
7548
  }
7872
- Object.defineProperty(ctx, key, {
7873
- enumerable: true,
7874
- configurable: true,
7875
- get: () => setupState[key],
7876
- set: NOOP
7877
- });
7878
7549
  });
7879
7550
  }
7880
7551
 
@@ -8618,11 +8289,18 @@ var Vue = (function (exports) {
8618
8289
  // 2. If a component is unmounted during a parent component's update,
8619
8290
  // its update can be skipped.
8620
8291
  queue.sort((a, b) => getId(a) - getId(b));
8292
+ // conditional usage of checkRecursiveUpdate must be determined out of
8293
+ // try ... catch block since Rollup by default de-optimizes treeshaking
8294
+ // inside try-catch. This can leave all warning code unshaked. Although
8295
+ // they would get eventually shaken by a minifier like terser, some minifiers
8296
+ // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)
8297
+ const check = (job) => checkRecursiveUpdates(seen, job)
8298
+ ;
8621
8299
  try {
8622
8300
  for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
8623
8301
  const job = queue[flushIndex];
8624
8302
  if (job && job.active !== false) {
8625
- if (true && checkRecursiveUpdates(seen, job)) {
8303
+ if (true && check(job)) {
8626
8304
  continue;
8627
8305
  }
8628
8306
  // console.log(`running:`, job.id)
@@ -9297,7 +8975,7 @@ var Vue = (function (exports) {
9297
8975
  }
9298
8976
 
9299
8977
  // Core API ------------------------------------------------------------------
9300
- const version = "3.2.11";
8978
+ const version = "3.2.12";
9301
8979
  /**
9302
8980
  * SSR utils for \@vue/server-renderer. Only exposed in cjs builds.
9303
8981
  * @internal
@@ -9779,6 +9457,7 @@ var Vue = (function (exports) {
9779
9457
  this._instance = null;
9780
9458
  this._connected = false;
9781
9459
  this._resolved = false;
9460
+ this._numberProps = null;
9782
9461
  if (this.shadowRoot && hydrate) {
9783
9462
  hydrate(this._createVNode(), this.shadowRoot);
9784
9463
  }
@@ -9794,18 +9473,17 @@ var Vue = (function (exports) {
9794
9473
  this._setAttr(this.attributes[i].name);
9795
9474
  }
9796
9475
  // watch future attr changes
9797
- const observer = new MutationObserver(mutations => {
9476
+ new MutationObserver(mutations => {
9798
9477
  for (const m of mutations) {
9799
9478
  this._setAttr(m.attributeName);
9800
9479
  }
9801
- });
9802
- observer.observe(this, { attributes: true });
9480
+ }).observe(this, { attributes: true });
9803
9481
  }
9804
9482
  connectedCallback() {
9805
9483
  this._connected = true;
9806
9484
  if (!this._instance) {
9807
9485
  this._resolveDef();
9808
- render(this._createVNode(), this.shadowRoot);
9486
+ this._update();
9809
9487
  }
9810
9488
  }
9811
9489
  disconnectedCallback() {
@@ -9826,15 +9504,31 @@ var Vue = (function (exports) {
9826
9504
  }
9827
9505
  const resolve = (def) => {
9828
9506
  this._resolved = true;
9507
+ const { props, styles } = def;
9508
+ const hasOptions = !isArray(props);
9509
+ const rawKeys = props ? (hasOptions ? Object.keys(props) : props) : [];
9510
+ // cast Number-type props set before resolve
9511
+ let numberProps;
9512
+ if (hasOptions) {
9513
+ for (const key in this._props) {
9514
+ const opt = props[key];
9515
+ if (opt === Number || (opt && opt.type === Number)) {
9516
+ this._props[key] = toNumber(this._props[key]);
9517
+ (numberProps || (numberProps = Object.create(null)))[key] = true;
9518
+ }
9519
+ }
9520
+ }
9521
+ if (numberProps) {
9522
+ this._numberProps = numberProps;
9523
+ this._update();
9524
+ }
9829
9525
  // check if there are props set pre-upgrade or connect
9830
9526
  for (const key of Object.keys(this)) {
9831
9527
  if (key[0] !== '_') {
9832
9528
  this._setProp(key, this[key]);
9833
9529
  }
9834
9530
  }
9835
- const { props, styles } = def;
9836
9531
  // defining getter/setters on prototype
9837
- const rawKeys = props ? (isArray(props) ? props : Object.keys(props)) : [];
9838
9532
  for (const key of rawKeys.map(camelize)) {
9839
9533
  Object.defineProperty(this, key, {
9840
9534
  get() {
@@ -9856,7 +9550,11 @@ var Vue = (function (exports) {
9856
9550
  }
9857
9551
  }
9858
9552
  _setAttr(key) {
9859
- this._setProp(camelize(key), toNumber(this.getAttribute(key)), false);
9553
+ let value = this.getAttribute(key);
9554
+ if (this._numberProps && this._numberProps[key]) {
9555
+ value = toNumber(value);
9556
+ }
9557
+ this._setProp(camelize(key), value, false);
9860
9558
  }
9861
9559
  /**
9862
9560
  * @internal
@@ -9871,7 +9569,7 @@ var Vue = (function (exports) {
9871
9569
  if (val !== this._props[key]) {
9872
9570
  this._props[key] = val;
9873
9571
  if (this._instance) {
9874
- render(this._createVNode(), this.shadowRoot);
9572
+ this._update();
9875
9573
  }
9876
9574
  // reflect
9877
9575
  if (shouldReflect) {
@@ -9887,6 +9585,9 @@ var Vue = (function (exports) {
9887
9585
  }
9888
9586
  }
9889
9587
  }
9588
+ _update() {
9589
+ render(this._createVNode(), this.shadowRoot);
9590
+ }
9890
9591
  _createVNode() {
9891
9592
  const vnode = createVNode(this._def, extend({}, this._props));
9892
9593
  if (!this._instance) {
@@ -9907,7 +9608,7 @@ var Vue = (function (exports) {
9907
9608
  if (!this._def.__asyncLoader) {
9908
9609
  // reload
9909
9610
  this._instance = null;
9910
- render(this._createVNode(), this.shadowRoot);
9611
+ this._update();
9911
9612
  }
9912
9613
  };
9913
9614
  }
@@ -11514,7 +11215,7 @@ var Vue = (function (exports) {
11514
11215
  }
11515
11216
  }
11516
11217
 
11517
- const deprecationData$1 = {
11218
+ const deprecationData = {
11518
11219
  ["COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */]: {
11519
11220
  message: `Platform-native elements with "is" prop will no longer be ` +
11520
11221
  `treated as components in Vue 3 unless the "is" value is explicitly ` +
@@ -11583,7 +11284,7 @@ var Vue = (function (exports) {
11583
11284
  return value;
11584
11285
  }
11585
11286
  }
11586
- function isCompatEnabled$1(key, context) {
11287
+ function isCompatEnabled(key, context) {
11587
11288
  const mode = getCompatValue('MODE', context);
11588
11289
  const value = getCompatValue(key, context);
11589
11290
  // in v3 mode, only enable if explicitly set to true
@@ -11591,18 +11292,18 @@ var Vue = (function (exports) {
11591
11292
  return mode === 3 ? value === true : value !== false;
11592
11293
  }
11593
11294
  function checkCompatEnabled(key, context, loc, ...args) {
11594
- const enabled = isCompatEnabled$1(key, context);
11295
+ const enabled = isCompatEnabled(key, context);
11595
11296
  if (enabled) {
11596
- warnDeprecation$1(key, context, loc, ...args);
11297
+ warnDeprecation(key, context, loc, ...args);
11597
11298
  }
11598
11299
  return enabled;
11599
11300
  }
11600
- function warnDeprecation$1(key, context, loc, ...args) {
11301
+ function warnDeprecation(key, context, loc, ...args) {
11601
11302
  const val = getCompatValue(key, context);
11602
11303
  if (val === 'suppress-warning') {
11603
11304
  return;
11604
11305
  }
11605
- const { message, link } = deprecationData$1[key];
11306
+ const { message, link } = deprecationData[key];
11606
11307
  const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`;
11607
11308
  const err = new SyntaxError(msg);
11608
11309
  err.code = key;
@@ -14834,7 +14535,7 @@ var Vue = (function (exports) {
14834
14535
  };
14835
14536
  }
14836
14537
 
14837
- const fnExpRE = /^\s*([\w$_]+|\([^)]*?\))\s*=>|^\s*function(?:\s+[\w$]+)?\s*\(/;
14538
+ const fnExpRE = /^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/;
14838
14539
  const transformOn = (dir, node, context, augmentor) => {
14839
14540
  const { loc, modifiers, arg } = dir;
14840
14541
  if (!dir.exp && !modifiers.length) {