diff --git a/packages/vite/src/node/__tests__/scan.spec.ts b/packages/vite/src/node/__tests__/scan.spec.ts index 3df1634fa52fe2..28d2c3b96a03ec 100644 --- a/packages/vite/src/node/__tests__/scan.spec.ts +++ b/packages/vite/src/node/__tests__/scan.spec.ts @@ -85,28 +85,35 @@ describe('optimizer-scan:script-test', () => { }) test('imports regex should work', () => { - const shouldMatchArray = [ - `import 'vue'`, - `import { foo } from 'vue'`, - `import foo from 'vue'`, - `;import foo from 'vue'`, - ` import foo from 'vue'`, - `import { foo + const shouldMatchArray: Array<[string, string]> = [ + [`import 'vue'`, `'vue'`], + [`import { foo } from 'vue'`, `'vue'`], + [`import foo from 'vue'`, `'vue'`], + [`;import foo from 'vue'`, `'vue'`], + [` import foo from 'vue'`, `'vue'`], + [ + `import { foo } from 'vue'`, - `import bar, { foo } from 'vue'`, - `import foo from 'vue';`, - `*/ import foo from 'vue';`, - `import foo from 'vue';//comment`, - `import foo from 'vue';/*comment + `'vue'`, + ], + [`import bar, { foo } from 'vue'`, `'vue'`], + [`import foo from 'vue';`, `'vue'`], + [`*/ import foo from 'vue';`, `'vue'`], + [`import foo from 'vue';//comment`, `'vue'`], + [ + `import foo from 'vue';/*comment */`, - // Skipped, false negatives with current regex - // `import typescript from 'typescript'`, - // import type, {foo} from 'vue' + `'vue'`, + ], + // #23471: bindings starting with `type` are not `import type` statements + [`import typescript from 'typescript'`, `'typescript'`], + [`import typeorm from 'typeorm'`, `'typeorm'`], + [`import types from 'types'`, `'types'`], ] - shouldMatchArray.forEach((str) => { + shouldMatchArray.forEach(([str, expected]) => { importsRE.lastIndex = 0 - expect(importsRE.exec(str)![1]).toEqual("'vue'") + expect(importsRE.exec(str)![1]).toEqual(expected) }) const shouldFailArray = [ diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index f0075125c5b490..ca3f5fe58eb8bb 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -111,7 +111,7 @@ const htmlTypesRE = /\.(?:html|vue|svelte|astro|imba)$/ // since even missed imports can be caught at runtime, and false positives will // simply be ignored. export const importsRE: RegExp = - /(? Promise