From 153d5ff2738fd29385fc3f555a8d085104db5f36 Mon Sep 17 00:00:00 2001 From: Michael Brevard Date: Fri, 15 Dec 2023 16:16:35 +0200 Subject: [PATCH] perf(schema): use parallel promises (#24771) Co-authored-by: Daniel Roe --- packages/schema/src/config/build.ts | 3 +-- packages/schema/src/config/common.ts | 27 +++++++++++++-------------- packages/schema/src/config/vite.ts | 21 ++++++++++++--------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/packages/schema/src/config/build.ts b/packages/schema/src/config/build.ts index ea2cf44e0f..ba3175f142 100644 --- a/packages/schema/src/config/build.ts +++ b/packages/schema/src/config/build.ts @@ -110,8 +110,7 @@ export default defineUntypedSchema({ */ analyze: { $resolve: async (val, get) => { - const rootDir = await get('rootDir') - const analyzeDir = await get('analyzeDir') + const [rootDir, analyzeDir] = await Promise.all([get('rootDir'), get('analyzeDir')]) return defu(typeof val === 'boolean' ? { enabled: val } : val, { template: 'treemap', projectRoot: rootDir, diff --git a/packages/schema/src/config/common.ts b/packages/schema/src/config/common.ts index 3f6d39a0c5..9795fa03d4 100644 --- a/packages/schema/src/config/common.ts +++ b/packages/schema/src/config/common.ts @@ -134,10 +134,13 @@ export default defineUntypedSchema({ */ modulesDir: { $default: ['node_modules'], - $resolve: async (val, get) => [ - ...await Promise.all(val.map(async (dir: string) => resolve(await get('rootDir'), dir))), - resolve(process.cwd(), 'node_modules') - ] + $resolve: async (val, get) => { + const rootDir = await get('rootDir') + return [ + ...await Promise.all(val.map(async (dir: string) => resolve(rootDir, dir))), + resolve(process.cwd(), 'node_modules') + ] + } }, /** @@ -309,17 +312,14 @@ export default defineUntypedSchema({ */ alias: { $resolve: async (val, get) => { - const srcDir = await get('srcDir') - const rootDir = await get('rootDir') - const dirAssets = await get('dir.assets') - const dirPublic = await get('dir.public') + const [srcDir, rootDir, assetsDir, publicDir] = await Promise.all([get('srcDir'), get('rootDir'), get('dir.assets'), get('dir.public')]) return { '~': srcDir, '@': srcDir, '~~': rootDir, '@@': rootDir, - [dirAssets]: join(srcDir, dirAssets), - [dirPublic]: join(srcDir, dirPublic), + [assetsDir]: join(srcDir, assetsDir), + [publicDir]: join(srcDir, publicDir), ...val } } @@ -352,15 +352,14 @@ export default defineUntypedSchema({ */ ignore: { $resolve: async (val, get) => { - const rootDir = await get('rootDir') - const ignorePrefix = await get('ignorePrefix') + const [rootDir, ignorePrefix, analyzeDir, buildDir] = await Promise.all([get('rootDir'), get('ignorePrefix'), get('analyzeDir'), get('buildDir')]) return [ '**/*.stories.{js,cts,mts,ts,jsx,tsx}', // ignore storybook files '**/*.{spec,test}.{js,cts,mts,ts,jsx,tsx}', // ignore tests '**/*.d.{cts,mts,ts}', // ignore type declarations '**/.{pnpm-store,vercel,netlify,output,git,cache,data}', - relative(rootDir, await get('analyzeDir')), - relative(rootDir, await get('buildDir')), + relative(rootDir, analyzeDir), + relative(rootDir, buildDir), ignorePrefix && `**/${ignorePrefix}*.*` ].concat(val).filter(Boolean) } diff --git a/packages/schema/src/config/vite.ts b/packages/schema/src/config/vite.ts index e42fdce755..b60b13bc5f 100644 --- a/packages/schema/src/config/vite.ts +++ b/packages/schema/src/config/vite.ts @@ -39,7 +39,7 @@ export default defineUntypedSchema({ if (val) { consola.warn('Directly configuring the `vite.publicDir` option is not supported. Instead, set `dir.public`. You can read more in `https://nuxt.com/docs/api/nuxt-config#public`.') } - return val ?? resolve((await get('srcDir')), (await get('dir')).public) + return val ?? await Promise.all([get('srcDir'), get('dir')]).then(([srcDir, dir]) => resolve(srcDir, dir.public)) } }, vue: { @@ -92,14 +92,17 @@ export default defineUntypedSchema({ server: { fs: { allow: { - $resolve: async (val, get) => [ - await get('buildDir'), - await get('srcDir'), - await get('rootDir'), - await get('workspaceDir'), - ...(await get('modulesDir')), - ...val ?? [] - ] + $resolve: async (val, get) => { + const [buildDir, srcDir, rootDir, workspaceDir, modulesDir] = await Promise.all([get('buildDir'), get('srcDir'), get('rootDir'), get('workspaceDir'), get('modulesDir')]) + return [ + buildDir, + srcDir, + rootDir, + workspaceDir, + ...(modulesDir), + ...val ?? [] + ] + } } } }