From 801b823a86299229f0c916243b20a8f388a1d41d Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Wed, 2 Jul 2025 17:40:52 +0900 Subject: [PATCH] fix(define): replace optional values --- packages/vite/src/node/plugins/define.ts | 8 +++++++- playground/define/__tests__/define.spec.ts | 6 ++++++ playground/define/index.html | 9 +++++++++ playground/define/optional-env.js | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 playground/define/optional-env.js diff --git a/packages/vite/src/node/plugins/define.ts b/packages/vite/src/node/plugins/define.ts index 5be259c26ff27b..ef4c8af77a6084 100644 --- a/packages/vite/src/node/plugins/define.ts +++ b/packages/vite/src/node/plugins/define.ts @@ -10,6 +10,7 @@ const nonJsRe = /\.json(?:$|\?)/ const isNonJsRequest = (request: string): boolean => nonJsRe.test(request) const importMetaEnvMarker = '__vite_import_meta_env__' const importMetaEnvKeyReCache = new Map() +const escapedDotRE = /(? escapeRegex(key).replaceAll(escapedDotRE, '\\??\\.')) + .join('|'), + ) : null return [define, pattern, importMetaEnvVal] as const diff --git a/playground/define/__tests__/define.spec.ts b/playground/define/__tests__/define.spec.ts index 71fa61035a8f31..4457a88c4ad073 100644 --- a/playground/define/__tests__/define.spec.ts +++ b/playground/define/__tests__/define.spec.ts @@ -109,3 +109,9 @@ test('replace constants on import.meta.env when it is a invalid json', async () ), ).toBe('true') }) + +test('optional values are detected by pattern properly', async () => { + expect(await page.textContent('.optional-env')).toBe( + JSON.parse(defines['process.env.SOMEVAR']), + ) +}) diff --git a/playground/define/index.html b/playground/define/index.html index 7c8fc55ba302cf..9d48f81f303d80 100644 --- a/playground/define/index.html +++ b/playground/define/index.html @@ -72,6 +72,12 @@

Define undefined constants on import.meta.env when it's a invalid json

+

Optional values are detected by pattern properly

+

+ process?.env?.SOMEVAR + +

+