diff --git a/package.json b/package.json index eb84db69316..56905771d27 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,10 @@ "@vitest/ui": "^0.18.0", "@vue/compiler-sfc": "^3.2.37", "@vue/test-utils": "^2.0.2", + "@vueuse/core": "./packages/core", + "@vueuse/integrations": "./packages/integrations", + "@vueuse/math": "./packages/math", + "@vueuse/shared": "./packages/shared", "axios": "^0.27.2", "bumpp": "^8.2.1", "consola": "^2.15.3", diff --git a/packages/metadata/scripts/update.ts b/packages/metadata/scripts/update.ts index 4de66b95f40..a4483dade6a 100644 --- a/packages/metadata/scripts/update.ts +++ b/packages/metadata/scripts/update.ts @@ -113,6 +113,9 @@ export async function readMetadata() { if (related?.length) fn.related = related + if (pkg.submodules) + fn.importPath = `${pkg.name}/${fn.name}` + indexes.functions.push(fn) })) } diff --git a/packages/metadata/types.ts b/packages/metadata/types.ts index 66f525fc430..a508f6f075f 100644 --- a/packages/metadata/types.ts +++ b/packages/metadata/types.ts @@ -22,6 +22,7 @@ export interface PackageManifest { export interface VueUseFunction { name: string package: string + importPath?: string lastUpdated?: number category?: string description?: string diff --git a/packages/nuxt/index.ts b/packages/nuxt/index.ts index ce6c1f5c061..fa3ae09f88c 100644 --- a/packages/nuxt/index.ts +++ b/packages/nuxt/index.ts @@ -3,6 +3,7 @@ import { fileURLToPath } from 'url' import { isPackageExists } from 'local-pkg' import { defineNuxtModule } from '@nuxt/kit' import { metadata } from '@vueuse/metadata' +import type { Import } from 'unimport' const _dirname = dirname(fileURLToPath(import.meta.url)) @@ -23,6 +24,8 @@ const packages = [ 'firebase', 'rxjs', 'sound', + 'math', + 'integrations', ] const fullPackages = packages.map(p => `@vueuse/${p}`) @@ -100,24 +103,25 @@ export default defineNuxtModule({ if (!isPackageExists(`@vueuse/${pkg}`)) continue - const functions = metadata + const imports = metadata .functions - .filter(i => (i.package === 'core' || i.package === 'shared') && !i.internal) - - if (functions.length) { - const imports = metadata - .functions - .filter(i => i.package === pkg && !i.internal) - .flatMap(i => [i.name, ...i.alias || []]) - .filter(i => i.length >= 4 && !disabledFunctions.includes(i)) - - sources.push({ - from: `@vueuse/${pkg}`, - names: imports, - imports, - priority: -1, + .filter(i => i.package === pkg && !i.internal) + .flatMap((i): Import[] => { + const names = [i.name, ...i.alias || []] + return names.map(n => ({ + from: `@vueuse/${i.importPath || i.package}`, + name: n, + as: n, + priority: -1, + })) }) - } + .filter(i => i.name.length >= 4 && !disabledFunctions.includes(i.name)) + + sources.push({ + from: '@vueuse/core', + imports, + priority: -1, + }) } }) } diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index b76a6425a7d..e47bd24d408 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -41,6 +41,7 @@ "vue-demi": "*" }, "devDependencies": { - "@nuxt/schema": "^3.0.0-rc.4" + "@nuxt/schema": "^3.0.0-rc.4", + "unimport": "^0.4.5" } } diff --git a/playgrounds/nuxt3/.npmrc b/playgrounds/nuxt3/.npmrc new file mode 100644 index 00000000000..bf2e7648b07 --- /dev/null +++ b/playgrounds/nuxt3/.npmrc @@ -0,0 +1 @@ +shamefully-hoist=true diff --git a/playgrounds/nuxt3/app.vue b/playgrounds/nuxt3/app.vue index dc699d7672a..02b803e033a 100644 --- a/playgrounds/nuxt3/app.vue +++ b/playgrounds/nuxt3/app.vue @@ -6,6 +6,8 @@ const mounted = ref(false) const { width, height } = useWindowSize() const color = useColorMode() +const data = useAxios('/api/data') + onMounted(() => { mounted.value = true }) diff --git a/playgrounds/nuxt3/nuxt.config.mjs b/playgrounds/nuxt3/nuxt.config.mjs index 63ab2a396bb..ff0d7481404 100644 --- a/playgrounds/nuxt3/nuxt.config.mjs +++ b/playgrounds/nuxt3/nuxt.config.mjs @@ -11,6 +11,8 @@ export default defineNuxtConfig({ alias: { '@vueuse/core': resolve(__dirname, '../../packages/core/index.ts'), '@vueuse/shared': resolve(__dirname, '../../packages/shared/index.ts'), + '@vueuse/math': resolve(__dirname, '../../packages/math/index.ts'), + '@vueuse/integrations': resolve(__dirname, '../../packages/integrations/index.ts'), }, vueuse: { ssrHandlers: true, diff --git a/playgrounds/nuxt3/package.json b/playgrounds/nuxt3/package.json index 4050a0d35e0..a142f2f204e 100644 --- a/playgrounds/nuxt3/package.json +++ b/playgrounds/nuxt3/package.json @@ -1,11 +1,15 @@ { "private": true, + "packageManager": "pnpm@7.5.0", "scripts": { "dev": "nuxi dev", "build": "nuxi build", "start": "node .output/server/index.mjs" }, "devDependencies": { - "nuxt": "^3.0.0-rc.4" + "@vueuse/core": "../../packages/core", + "@vueuse/integrations": "../../packages/integrations", + "@vueuse/shared": "../../packages/shared", + "nuxt": "^3.0.0-rc.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b70313c5824..d558c46fe7c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,10 @@ importers: '@vitest/ui': ^0.18.0 '@vue/compiler-sfc': ^3.2.37 '@vue/test-utils': ^2.0.2 + '@vueuse/core': ./packages/core + '@vueuse/integrations': ./packages/integrations + '@vueuse/math': ./packages/math + '@vueuse/shared': ./packages/shared axios: ^0.27.2 bumpp: ^8.2.1 consola: ^2.15.3 @@ -89,6 +93,10 @@ importers: '@vitest/ui': 0.18.0 '@vue/compiler-sfc': 3.2.37 '@vue/test-utils': 2.0.2_vue@3.2.37 + '@vueuse/core': link:packages/core + '@vueuse/integrations': link:packages/integrations + '@vueuse/math': link:packages/math + '@vueuse/shared': link:packages/shared axios: 0.27.2 bumpp: 8.2.1 consola: 2.15.3 @@ -230,6 +238,7 @@ importers: '@vueuse/core': workspace:* '@vueuse/metadata': workspace:* local-pkg: ^0.4.1 + unimport: ^0.4.5 vue-demi: 0.13.2 dependencies: '@nuxt/kit': 3.0.0-rc.4 @@ -239,6 +248,7 @@ importers: vue-demi: 0.13.2 devDependencies: '@nuxt/schema': 3.0.0-rc.4 + unimport: 0.4.5 packages/router: specifiers: @@ -6267,6 +6277,11 @@ packages: resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} engines: {node: '>=14'} + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + /locate-path/2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -6561,6 +6576,13 @@ packages: pathe: 0.2.0 pkg-types: 0.3.2 + /mlly/0.5.4: + resolution: {integrity: sha512-gFlsLWCjVwu/LM/ZfYUkmnbBoz7eyBIMUwVQYDqhd8IvtNFDeZ95uwAyxHE2Xx7tQwePQaCo4fECZ9MWFEUTgQ==} + dependencies: + pathe: 0.3.2 + pkg-types: 0.3.3 + dev: true + /mrmime/1.0.0: resolution: {integrity: sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==} engines: {node: '>=10'} @@ -7073,6 +7095,10 @@ packages: /pathe/0.3.0: resolution: {integrity: sha512-3vUjp552BJzCw9vqKsO5sttHkbYqqsZtH0x1PNtItgqx8BXEXzoY1SYRKcL6BTyVh4lGJGLj0tM42elUDMvcYA==} + /pathe/0.3.2: + resolution: {integrity: sha512-qhnmX0TOqlCvdWWTkoM83wh5J8fZ2yhbDEc9MlsnAEtEc+JCwxUKEwmd6pkY9hRe6JR1Uecbc14VcAKX2yFSTA==} + dev: true + /pathval/1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true @@ -7115,6 +7141,14 @@ packages: mlly: 0.3.19 pathe: 0.2.0 + /pkg-types/0.3.3: + resolution: {integrity: sha512-6AJcCMnjUQPQv/Wk960w0TOmjhdjbeaQJoSKWRQv9N3rgkessCu6J0Ydsog/nw1MbpnxHuPzYbfOn2KmlZO1FA==} + dependencies: + jsonc-parser: 3.0.0 + mlly: 0.5.4 + pathe: 0.3.2 + dev: true + /pluralize/8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -8438,6 +8472,26 @@ packages: - vite - webpack + /unimport/0.4.5: + resolution: {integrity: sha512-DnmiSt/HQIfhdcxOy4CGqwZDBh3WHg33euX1ge4X8hvquKBmw2PFvhoAJaBKxscOz0oYosoPoPT4tkDZWHhV0Q==} + dependencies: + '@rollup/pluginutils': 4.2.1 + escape-string-regexp: 5.0.0 + fast-glob: 3.2.11 + local-pkg: 0.4.2 + magic-string: 0.26.2 + mlly: 0.5.4 + pathe: 0.3.2 + scule: 0.2.1 + strip-literal: 0.4.0 + unplugin: 0.7.2 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + dev: true + /unique-string/2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} @@ -8628,6 +8682,29 @@ packages: webpack-virtual-modules: 0.4.4 dev: true + /unplugin/0.7.2: + resolution: {integrity: sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ==} + peerDependencies: + esbuild: '>=0.13' + rollup: ^2.50.0 + vite: ^2.3.0 || ^3.0.0-0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + acorn: 8.7.1 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.4 + dev: true + /untyped/0.4.4: resolution: {integrity: sha512-sY6u8RedwfLfBis0copfU/fzROieyAndqPs8Kn2PfyzTjtA88vCk81J1b5z+8/VJc+cwfGy23/AqOCpvAbkNVw==} dependencies: