From 95ef3e04fd0fdf61b6464ad66dcebb955abe6971 Mon Sep 17 00:00:00 2001
From: Emma <1285641941@qq.com>
Date: Sat, 24 Sep 2022 09:28:46 +0800
Subject: [PATCH 1/4] fix: return the correct name when stubbing a `script
setup` component
---
src/utils/componentName.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/utils/componentName.ts b/src/utils/componentName.ts
index 15dad03d0..26b453279 100644
--- a/src/utils/componentName.ts
+++ b/src/utils/componentName.ts
@@ -38,7 +38,9 @@ export const getComponentName = (
type: VNodeTypes
): string => {
if (isObjectComponent(type)) {
- return getComponentNameInSetup(instance, type) || type.name || ''
+ return (
+ getComponentNameInSetup(instance, type) || type.name || type.__name || ''
+ )
}
if (isLegacyExtendedComponent(type)) {
From 878b0e8dd0122afd97480af3f632240b2ea17a6c Mon Sep 17 00:00:00 2001
From: Emma <1285641941@qq.com>
Date: Sun, 25 Sep 2022 19:29:44 +0800
Subject: [PATCH 2/4] test: stub a script setup component imported by
unplugin-vue-components
---
package.json | 1 +
pnpm-lock.yaml | 117 ++++++++++++++++++++-
tests/components/AutoImportScriptSetup.vue | 3 +
tests/mountingOptions/global.stubs.spec.ts | 12 +++
vitest.config.ts | 11 +-
5 files changed, 140 insertions(+), 4 deletions(-)
create mode 100644 tests/components/AutoImportScriptSetup.vue
diff --git a/package.json b/package.json
index 7c0b0f84b..037cbb1cb 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
"rollup-plugin-typescript2": "0.34.0",
"tslib": "2.4.0",
"typescript": "4.8.3",
+ "unplugin-vue-components": "^0.22.7",
"vite": "3.1.3",
"vitepress": "0.22.4",
"vitest": "0.22.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b216981a7..e80edb900 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -31,6 +31,7 @@ specifiers:
rollup-plugin-typescript2: 0.34.0
tslib: 2.4.0
typescript: 4.8.3
+ unplugin-vue-components: ^0.22.7
vite: 3.1.3
vitepress: 0.22.4
vitest: 0.22.1
@@ -71,6 +72,7 @@ devDependencies:
rollup-plugin-typescript2: 0.34.0_ihkqvyh37tzxtjmovjyy2yrv7m
tslib: 2.4.0
typescript: 4.8.3
+ unplugin-vue-components: 0.22.7_vue@3.2.39
vite: 3.1.3
vitepress: 0.22.4
vitest: 0.22.1_jsdom@20.0.0
@@ -203,6 +205,10 @@ packages:
'@jridgewell/trace-mapping': 0.3.14
dev: true
+ /@antfu/utils/0.5.2:
+ resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==}
+ dev: true
+
/@babel/code-frame/7.18.6:
resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
engines: {node: '>=6.9.0'}
@@ -1263,6 +1269,14 @@ packages:
engines: {node: '>=12'}
dev: true
+ /anymatch/3.1.2:
+ resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
/argparse/2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
dev: true
@@ -1289,6 +1303,11 @@ packages:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
+ /binary-extensions/2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ engines: {node: '>=8'}
+ dev: true
+
/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@@ -1296,6 +1315,12 @@ packages:
concat-map: 0.0.1
dev: true
+ /brace-expansion/2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
/braces/3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
@@ -1390,6 +1415,21 @@ packages:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true
+ /chokidar/3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.2
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
/clean-stack/2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
@@ -2260,8 +2300,8 @@ packages:
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
dev: true
- /fast-glob/3.2.11:
- resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
+ /fast-glob/3.2.12:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -2440,7 +2480,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.2.11
+ fast-glob: 3.2.12
ignore: 5.2.0
merge2: 1.4.1
slash: 3.0.0
@@ -2564,6 +2604,13 @@ packages:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: true
+ /is-binary-path/2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+
/is-buffer/1.1.6:
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
dev: true
@@ -2896,6 +2943,13 @@ packages:
sourcemap-codec: 1.4.8
dev: true
+ /magic-string/0.26.4:
+ resolution: {integrity: sha512-e5uXtVJ22aEpK9u1+eQf0fSxHeqwyV19K+uGnlROCxUhzwRip9tBsaMViK/0vC3viyPd5Gtucp3UmEp/Q2cPTQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: true
+
/make-dir/3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -2948,6 +3002,13 @@ packages:
brace-expansion: 1.1.11
dev: true
+ /minimatch/5.1.0:
+ resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
/ms/2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
@@ -3217,6 +3278,13 @@ packages:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
+ /readdirp/3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
/reflect-metadata/0.1.13:
resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
dev: true
@@ -3612,6 +3680,40 @@ packages:
engines: {node: '>= 10.0.0'}
dev: true
+ /unplugin-vue-components/0.22.7_vue@3.2.39:
+ resolution: {integrity: sha512-MJEAKJF9bRykTRvJ4WXF0FNMAyt1PX3iwpu2NN+li35sAKjQv6sC1col5aZDLiwDZDo2AGwxNkzLJFKaun9qHw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ dependencies:
+ '@antfu/utils': 0.5.2
+ '@rollup/pluginutils': 4.2.1
+ chokidar: 3.5.3
+ debug: 4.3.4
+ fast-glob: 3.2.12
+ local-pkg: 0.4.2
+ magic-string: 0.26.4
+ minimatch: 5.1.0
+ resolve: 1.22.1
+ unplugin: 0.9.6
+ vue: 3.2.39
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /unplugin/0.9.6:
+ resolution: {integrity: sha512-YYLtfoNiie/lxswy1GOsKXgnLJTE27la/PeCGznSItk+8METYZErO+zzV9KQ/hXhPwzIJsfJ4s0m1Rl7ZCWZ4Q==}
+ dependencies:
+ acorn: 8.8.0
+ chokidar: 3.5.3
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.4.5
+ dev: true
+
/update-browserslist-db/1.0.4_browserslist@4.21.1:
resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==}
hasBin: true
@@ -3857,6 +3959,15 @@ packages:
engines: {node: '>=12'}
dev: true
+ /webpack-sources/3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /webpack-virtual-modules/0.4.5:
+ resolution: {integrity: sha512-8bWq0Iluiv9lVf9YaqWQ9+liNgXSHICm+rg544yRgGYaR8yXZTVBaHZkINZSB2yZSWo4b0F6MIxqJezVfOEAlg==}
+ dev: true
+
/whatwg-encoding/2.0.0:
resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
engines: {node: '>=12'}
diff --git a/tests/components/AutoImportScriptSetup.vue b/tests/components/AutoImportScriptSetup.vue
new file mode 100644
index 000000000..e01a208e4
--- /dev/null
+++ b/tests/components/AutoImportScriptSetup.vue
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/tests/mountingOptions/global.stubs.spec.ts b/tests/mountingOptions/global.stubs.spec.ts
index 403911eab..f7534b0f6 100644
--- a/tests/mountingOptions/global.stubs.spec.ts
+++ b/tests/mountingOptions/global.stubs.spec.ts
@@ -6,6 +6,7 @@ import Hello from '../components/Hello.vue'
import ComponentWithoutName from '../components/ComponentWithoutName.vue'
import ComponentWithSlots from '../components/ComponentWithSlots.vue'
import ScriptSetupWithChildren from '../components/ScriptSetupWithChildren.vue'
+import AutoImportScriptSetup from '../components/AutoImportScriptSetup.vue'
describe('mounting options: stubs', () => {
let configStubsSave = config.global.stubs
@@ -393,6 +394,17 @@ describe('mounting options: stubs', () => {
)
})
+ it('stubs a script setup component imported by unplugin-vue-components', () => {
+ const wrapper = mount(AutoImportScriptSetup, {
+ global: {
+ stubs: {
+ ScriptSetup: true
+ }
+ }
+ })
+ expect(wrapper.html()).toBe(``)
+ })
+
describe('transition', () => {
it('stubs transition by default', () => {
const CompStubbedByDefault = {
diff --git a/vitest.config.ts b/vitest.config.ts
index d02490881..5417160f9 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -2,9 +2,18 @@ import path from 'path'
import { defineConfig } from 'vitest/config'
import vue from '@vitejs/plugin-vue'
import jsx from '@vitejs/plugin-vue-jsx'
+import Components from 'unplugin-vue-components/vite'
export default defineConfig({
- plugins: [vue(), jsx()],
+ plugins: [
+ vue(),
+ jsx(),
+ Components({
+ dts: false,
+ include: /AutoImportScriptSetup\.vue$/,
+ dirs: ['tests/components']
+ })
+ ],
define: {
__USE_BUILD__: process.env.NODE_ENV !== 'test-build',
__BROWSER__: true,
From 8d32c4d0ec38acb9a4e134f94b3c02ca0a89b978 Mon Sep 17 00:00:00 2001
From: Emma <1285641941@qq.com>
Date: Sun, 25 Sep 2022 20:20:55 +0800
Subject: [PATCH 3/4] fix: add necessary comments
---
package.json | 2 +-
src/utils/componentName.ts | 3 +++
vitest.config.ts | 3 +++
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 037cbb1cb..a321a493e 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,7 @@
"rollup-plugin-typescript2": "0.34.0",
"tslib": "2.4.0",
"typescript": "4.8.3",
- "unplugin-vue-components": "^0.22.7",
+ "unplugin-vue-components": "0.22.7",
"vite": "3.1.3",
"vitepress": "0.22.4",
"vitest": "0.22.1",
diff --git a/src/utils/componentName.ts b/src/utils/componentName.ts
index 26b453279..318e0ed81 100644
--- a/src/utils/componentName.ts
+++ b/src/utils/componentName.ts
@@ -39,6 +39,9 @@ export const getComponentName = (
): string => {
if (isObjectComponent(type)) {
return (
+ // If the component we stub is a script setup component and is automatically
+ // imported by unplugin-vue-components we can only get its name through
+ // the `__name` property.
getComponentNameInSetup(instance, type) || type.name || type.__name || ''
)
}
diff --git a/vitest.config.ts b/vitest.config.ts
index 5417160f9..7aa625d69 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -8,6 +8,9 @@ export default defineConfig({
plugins: [
vue(),
jsx(),
+ // We need this plugin to test for stubbing a script setup component
+ // imported by it.
+ // https://github.com/antfu/unplugin-vue-components/issues/429
Components({
dts: false,
include: /AutoImportScriptSetup\.vue$/,
From 14bb306367178f7a105ce4c28af01989ebb2d847 Mon Sep 17 00:00:00 2001
From: Emma <1285641941@qq.com>
Date: Sun, 25 Sep 2022 22:54:52 +0800
Subject: [PATCH 4/4] chore: update lockfile
---
pnpm-lock.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e80edb900..b41509431 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -31,7 +31,7 @@ specifiers:
rollup-plugin-typescript2: 0.34.0
tslib: 2.4.0
typescript: 4.8.3
- unplugin-vue-components: ^0.22.7
+ unplugin-vue-components: 0.22.7
vite: 3.1.3
vitepress: 0.22.4
vitest: 0.22.1