From ca9761df9e22b54207321f1c9b3f997ad331e3c5 Mon Sep 17 00:00:00 2001 From: Yasser Lahbibi Date: Tue, 21 Dec 2021 15:28:45 +0100 Subject: [PATCH] feat(auto-import): allow explicit transform exclusion patterns (#2183) Co-authored-by: pooya parsa --- packages/nuxt3/src/auto-imports/context.ts | 10 ++++++++-- packages/nuxt3/src/auto-imports/module.ts | 7 +++++-- packages/nuxt3/src/auto-imports/transform.ts | 3 ++- packages/nuxt3/test/auto-imports.test.ts | 15 +++++++++++++-- packages/schema/src/types/imports.ts | 13 ++++++++++++- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/nuxt3/src/auto-imports/context.ts b/packages/nuxt3/src/auto-imports/context.ts index b3bd4716c5..880685c827 100644 --- a/packages/nuxt3/src/auto-imports/context.ts +++ b/packages/nuxt3/src/auto-imports/context.ts @@ -3,14 +3,20 @@ import type { AutoImport } from '@nuxt/schema' export interface AutoImportContext { autoImports: AutoImport[] matchRE: RegExp + transform: { + exclude: RegExp[] + } map: Map } -export function createAutoImportContext (): AutoImportContext { +export function createAutoImportContext (opts): AutoImportContext { return { autoImports: [], map: new Map(), - matchRE: /__never__/ + matchRE: /__never__/, + transform: { + exclude: opts.transform.exclude || [/node_modules/] + } } } diff --git a/packages/nuxt3/src/auto-imports/module.ts b/packages/nuxt3/src/auto-imports/module.ts index 9ad13fd8fe..9f0fd96469 100644 --- a/packages/nuxt3/src/auto-imports/module.ts +++ b/packages/nuxt3/src/auto-imports/module.ts @@ -13,7 +13,10 @@ export default defineNuxtModule({ defaults: { sources: Nuxt3AutoImports, global: false, - dirs: [] + dirs: [], + transform: { + exclude: undefined + } }, async setup (options, nuxt) { // Allow modules extending sources @@ -23,7 +26,7 @@ export default defineNuxtModule({ options.sources = options.sources.filter(source => source.disabled !== true) // Create a context to share state between module internals - const ctx = createAutoImportContext() + const ctx = createAutoImportContext(options) // Resolve autoimports from sources for (const source of options.sources) { diff --git a/packages/nuxt3/src/auto-imports/transform.ts b/packages/nuxt3/src/auto-imports/transform.ts index 42d78c3060..a0721d25c9 100644 --- a/packages/nuxt3/src/auto-imports/transform.ts +++ b/packages/nuxt3/src/auto-imports/transform.ts @@ -39,7 +39,8 @@ export const TransformPlugin = createUnplugin((ctx: AutoImportContext) => { const { pathname, search } = parseURL(id) const { type } = parseQuery(search) - if (id.includes('node_modules')) { + // Exclude node_modules by default + if (ctx.transform.exclude.some(pattern => id.match(pattern))) { return false } diff --git a/packages/nuxt3/test/auto-imports.test.ts b/packages/nuxt3/test/auto-imports.test.ts index 4c390cc051..49a04b049b 100644 --- a/packages/nuxt3/test/auto-imports.test.ts +++ b/packages/nuxt3/test/auto-imports.test.ts @@ -11,10 +11,17 @@ import { Nuxt3AutoImports } from '../src/auto-imports/imports' describe('auto-imports:transform', () => { const autoImports: AutoImport[] = [ { name: 'ref', as: 'ref', from: 'vue' }, - { name: 'computed', as: 'computed', from: 'bar' } + { name: 'computed', as: 'computed', from: 'bar' }, + { name: 'foo', as: 'foo', from: 'excluded' } ] - const ctx = { autoImports, map: new Map() } as AutoImportContext + const ctx = { + autoImports, + map: new Map(), + transform: { + exclude: [/excluded/] + } + } as AutoImportContext updateAutoImportContext(ctx) const transformPlugin = TransformPlugin.raw(ctx, { framework: 'rollup' }) @@ -38,6 +45,10 @@ describe('auto-imports:transform', () => { const result = await transform('// import { computed } from "foo"\n;const a = computed(0)') expect(result).to.equal('import { computed } from \'bar\';// import { computed } from "foo"\n;const a = computed(0)') }) + + it('should exclude files from transform', async () => { + expect(await transform('const a = foo()')).to.not.include('import { foo } from "excluded"') + }) }) const excludedNuxtHelpers = ['useHydration'] diff --git a/packages/schema/src/types/imports.ts b/packages/schema/src/types/imports.ts index e1161b3eef..ba098ca7b4 100644 --- a/packages/schema/src/types/imports.ts +++ b/packages/schema/src/types/imports.ts @@ -42,14 +42,25 @@ export interface AutoImportsOptions { * Auto import sources */ sources?: AutoImportSource[] + /** * [experimental] Use globalThis injection instead of transform for development */ global?: boolean + /** * Additional directories to scan composables from * * By default /composables is added */ - dirs?: string[] + dirs?: string[] + + transform: { + /** + * Exclusion patterns for transforming files + * + * By default [/node_modules/] will be used + */ + exclude?: RegExp[] + } }