@@ -1003,6 +1003,13 @@ module.exports = {
1003
1003
} ,
1004
1004
1005
1005
getVueObjectType,
1006
+ /**
1007
+ * Get the Vue component definition type from given node
1008
+ * Vue.component('xxx', {}) || component('xxx', {})
1009
+ * @param {ObjectExpression } node Node to check
1010
+ * @returns {'component' | 'mixin' | 'extend' | 'createApp' | 'defineComponent' | null }
1011
+ */
1012
+ getVueComponentDefinitionType,
1006
1013
compositingVisitors,
1007
1014
1008
1015
/**
@@ -1876,14 +1883,15 @@ function isVueComponentFile(node, path) {
1876
1883
}
1877
1884
1878
1885
/**
1879
- * Check whether given node is Vue component
1886
+ * Get the Vue component definition type from given node
1880
1887
* Vue.component('xxx', {}) || component('xxx', {})
1881
- * @param {ESNode } node Node to check
1882
- * @returns {boolean }
1888
+ * @param {ObjectExpression } node Node to check
1889
+ * @returns {'component' | 'mixin' | 'extend' | 'createApp' | 'defineComponent' | null }
1883
1890
*/
1884
- function isVueComponent ( node ) {
1885
- if ( node . type === 'CallExpression' ) {
1886
- const callee = node . callee
1891
+ function getVueComponentDefinitionType ( node ) {
1892
+ const parent = getParent ( node )
1893
+ if ( parent . type === 'CallExpression' ) {
1894
+ const callee = parent . callee
1887
1895
1888
1896
if ( callee . type === 'MemberExpression' ) {
1889
1897
const calleeObject = skipTSAsExpression ( callee . object )
@@ -1893,48 +1901,51 @@ function isVueComponent(node) {
1893
1901
if ( calleeObject . name === 'Vue' ) {
1894
1902
// for Vue.js 2.x
1895
1903
// Vue.component('xxx', {}) || Vue.mixin({}) || Vue.extend('xxx', {})
1896
- const isFullVueComponentForVue2 =
1897
- propName &&
1898
- [ 'component' , 'mixin' , 'extend' ] . includes ( propName ) &&
1899
- isObjectArgument ( node )
1900
-
1901
- return Boolean ( isFullVueComponentForVue2 )
1904
+ const maybeFullVueComponentForVue2 =
1905
+ propName && isObjectArgument ( parent )
1906
+
1907
+ return maybeFullVueComponentForVue2 &&
1908
+ ( propName === 'component' ||
1909
+ propName === 'mixin' ||
1910
+ propName === 'extend' )
1911
+ ? propName
1912
+ : null
1902
1913
}
1903
1914
1904
1915
// for Vue.js 3.x
1905
1916
// app.component('xxx', {}) || app.mixin({})
1906
- const isFullVueComponent =
1907
- propName &&
1908
- [ 'component' , 'mixin' ] . includes ( propName ) &&
1909
- isObjectArgument ( node )
1917
+ const maybeFullVueComponent = propName && isObjectArgument ( parent )
1910
1918
1911
- return Boolean ( isFullVueComponent )
1919
+ return maybeFullVueComponent &&
1920
+ ( propName === 'component' || propName === 'mixin' )
1921
+ ? propName
1922
+ : null
1912
1923
}
1913
1924
}
1914
1925
1915
1926
if ( callee . type === 'Identifier' ) {
1916
1927
if ( callee . name === 'component' ) {
1917
1928
// for Vue.js 2.x
1918
1929
// component('xxx', {})
1919
- const isDestructedVueComponent = isObjectArgument ( node )
1920
- return isDestructedVueComponent
1930
+ const isDestructedVueComponent = isObjectArgument ( parent )
1931
+ return isDestructedVueComponent ? 'component' : null
1921
1932
}
1922
1933
if ( callee . name === 'createApp' ) {
1923
1934
// for Vue.js 3.x
1924
1935
// createApp({})
1925
- const isAppVueComponent = isObjectArgument ( node )
1926
- return isAppVueComponent
1936
+ const isAppVueComponent = isObjectArgument ( parent )
1937
+ return isAppVueComponent ? 'createApp' : null
1927
1938
}
1928
1939
if ( callee . name === 'defineComponent' ) {
1929
1940
// for Vue.js 3.x
1930
1941
// defineComponent({})
1931
- const isDestructedVueComponent = isObjectArgument ( node )
1932
- return isDestructedVueComponent
1942
+ const isDestructedVueComponent = isObjectArgument ( parent )
1943
+ return isDestructedVueComponent ? 'defineComponent' : null
1933
1944
}
1934
1945
}
1935
1946
}
1936
1947
1937
- return false
1948
+ return null
1938
1949
1939
1950
/** @param {CallExpression } node */
1940
1951
function isObjectArgument ( node ) {
@@ -1986,7 +1997,7 @@ function getVueObjectType(context, node) {
1986
1997
} else if ( parent . type === 'CallExpression' ) {
1987
1998
// Vue.component('xxx', {}) || component('xxx', {})
1988
1999
if (
1989
- isVueComponent ( parent ) &&
2000
+ getVueComponentDefinitionType ( node ) != null &&
1990
2001
skipTSAsExpression ( parent . arguments . slice ( - 1 ) [ 0 ] ) === node
1991
2002
) {
1992
2003
return 'definition'
0 commit comments