From 7114255546c549997156d8fa42148e6a4bf58478 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 19 Dec 2025 04:08:40 +0000 Subject: [PATCH 1/4] Initial plan From b117a61e0e4a18c786d45ce4560adac15162b18e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 19 Dec 2025 04:15:34 +0000 Subject: [PATCH 2/4] Fix import.meta.resolve detection for multi-line formatting Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- packages/vite/src/node/__tests__/config.spec.ts | 15 +++++++++++++++ .../config/import-meta-multiline/package.json | 3 +++ .../config/import-meta-multiline/vite.config.ts | 8 ++++++++ packages/vite/src/node/config.ts | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json create mode 100644 packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts index d886a35053ff33..5427a653c4d459 100644 --- a/packages/vite/src/node/__tests__/config.spec.ts +++ b/packages/vite/src/node/__tests__/config.spec.ts @@ -1175,6 +1175,21 @@ describe('loadConfigFromFile', () => { expect(c.resolved).toBe(c.url) }) + test('import.meta.resolve works when formatted across multiple lines', async () => { + const { config } = (await loadConfigFromFile( + {} as any, + path.resolve(fixtures, './import-meta-multiline/vite.config.ts'), + path.resolve(fixtures, './import-meta-multiline'), + ))! + + const c = config as any + expect(c.isMain).toBe(false) + expect(c.url).toContain('file://') + expect(c.dirname).toContain('import-meta-multiline') + expect(c.filename).toContain('vite.config.ts') + expect(c.resolved).toBe(c.url) + }) + test('shebang is preserved at the top of the file', async () => { const { config } = (await loadConfigFromFile( {} as any, diff --git a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json new file mode 100644 index 00000000000000..3dbc1ca591c055 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts new file mode 100644 index 00000000000000..c018536d86cdb6 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts @@ -0,0 +1,8 @@ +export default { + isMain: import.meta.main, + url: import.meta.url, + dirname: import.meta.dirname, + filename: import.meta.filename, + // Test multi-line formatted import.meta.resolve (as Prettier might format it) + resolved: import.meta.resolve('../import-meta-multiline/vite.config.ts'), +} diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 67c906f9c32343..60cd96da0de508 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -2392,7 +2392,7 @@ async function bundleConfigFile( `const ${importMetaUrlVarName} = ${JSON.stringify( pathToFileURL(id).href, )};` - if (code.includes('import.meta.resolve')) { + if (/import\.meta\s*\.\s*resolve/.test(code)) { if (isESM) { if (!importMetaResolverRegistered) { importMetaResolverRegistered = true From 226911fd059d270c4a7c61d3a0fd75aa7d3a5fc4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 19 Dec 2025 04:27:45 +0000 Subject: [PATCH 3/4] Address PR feedback: hoist regex and reuse existing test fixture - Hoist importMetaResolveRegex constant after importMetaResolveVarName - Reuse import-meta/vite.config.ts instead of creating new fixture - Add prettier-ignore comment to maintain multi-line formatting Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- packages/vite/src/node/__tests__/config.spec.ts | 16 +--------------- .../config/import-meta-multiline/package.json | 3 --- .../config/import-meta-multiline/vite.config.ts | 8 -------- .../fixtures/config/import-meta/vite.config.ts | 3 +++ packages/vite/src/node/config.ts | 3 ++- pnpm-lock.yaml | 2 ++ 6 files changed, 8 insertions(+), 27 deletions(-) delete mode 100644 packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json delete mode 100644 packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts index 5427a653c4d459..a36714a83134ba 100644 --- a/packages/vite/src/node/__tests__/config.spec.ts +++ b/packages/vite/src/node/__tests__/config.spec.ts @@ -1173,21 +1173,7 @@ describe('loadConfigFromFile', () => { expect(c.dirname).toContain('import-meta') expect(c.filename).toContain('vite.config.ts') expect(c.resolved).toBe(c.url) - }) - - test('import.meta.resolve works when formatted across multiple lines', async () => { - const { config } = (await loadConfigFromFile( - {} as any, - path.resolve(fixtures, './import-meta-multiline/vite.config.ts'), - path.resolve(fixtures, './import-meta-multiline'), - ))! - - const c = config as any - expect(c.isMain).toBe(false) - expect(c.url).toContain('file://') - expect(c.dirname).toContain('import-meta-multiline') - expect(c.filename).toContain('vite.config.ts') - expect(c.resolved).toBe(c.url) + expect(c.resolvedMultiline).toBe(c.url) }) test('shebang is preserved at the top of the file', async () => { diff --git a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json deleted file mode 100644 index 3dbc1ca591c055..00000000000000 --- a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts b/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts deleted file mode 100644 index c018536d86cdb6..00000000000000 --- a/packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default { - isMain: import.meta.main, - url: import.meta.url, - dirname: import.meta.dirname, - filename: import.meta.filename, - // Test multi-line formatted import.meta.resolve (as Prettier might format it) - resolved: import.meta.resolve('../import-meta-multiline/vite.config.ts'), -} diff --git a/packages/vite/src/node/__tests__/fixtures/config/import-meta/vite.config.ts b/packages/vite/src/node/__tests__/fixtures/config/import-meta/vite.config.ts index 60ef3da4e3e29f..36a6cdaf6c0804 100644 --- a/packages/vite/src/node/__tests__/fixtures/config/import-meta/vite.config.ts +++ b/packages/vite/src/node/__tests__/fixtures/config/import-meta/vite.config.ts @@ -4,4 +4,7 @@ export default { dirname: import.meta.dirname, filename: import.meta.filename, resolved: import.meta.resolve('../import-meta/vite.config.ts'), + // prettier-ignore + resolvedMultiline: import.meta + .resolve('../import-meta/vite.config.ts'), } diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 60cd96da0de508..ca9cf09039738c 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -2305,6 +2305,7 @@ async function bundleConfigFile( const importMetaUrlVarName = '__vite_injected_original_import_meta_url' const importMetaResolveVarName = '__vite_injected_original_import_meta_resolve' + const importMetaResolveRegex = /import\.meta\s*\.\s*resolve/ const bundle = await rolldown({ input: fileName, @@ -2392,7 +2393,7 @@ async function bundleConfigFile( `const ${importMetaUrlVarName} = ${JSON.stringify( pathToFileURL(id).href, )};` - if (/import\.meta\s*\.\s*resolve/.test(code)) { + if (importMetaResolveRegex.test(code)) { if (isESM) { if (!importMetaResolverRegistered) { importMetaResolverRegistered = true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ca7ad09ac60b2..23b9b72d8af752 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -457,6 +457,8 @@ importers: packages/vite/src/node/__tests__/fixtures/config/import-meta: {} + packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline: {} + packages/vite/src/node/__tests__/fixtures/config/plugin-module-condition: {} packages/vite/src/node/__tests__/fixtures/config/siblings: From c61c74c07ea2a6e0b718d270aebdec9251f9f68d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 19 Dec 2025 04:58:29 +0000 Subject: [PATCH 4/4] Remove unintended pnpm-lock.yaml changes Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- pnpm-lock.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23b9b72d8af752..3ca7ad09ac60b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -457,8 +457,6 @@ importers: packages/vite/src/node/__tests__/fixtures/config/import-meta: {} - packages/vite/src/node/__tests__/fixtures/config/import-meta-multiline: {} - packages/vite/src/node/__tests__/fixtures/config/plugin-module-condition: {} packages/vite/src/node/__tests__/fixtures/config/siblings: