Skip to content

Commit 368b825

Browse files
authoredJun 15, 2023
fix: automatically remove define related configuration (#3552)
1 parent dff19bc commit 368b825

File tree

5 files changed

+50
-67
lines changed

5 files changed

+50
-67
lines changed
 

‎packages/vitest/src/node/plugins/index.ts

+3-35
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { GlobalSetupPlugin } from './globalSetup'
1212
import { CSSEnablerPlugin } from './cssEnabler'
1313
import { CoverageTransform } from './coverageTransform'
1414
import { MocksPlugin } from './mocks'
15-
import { resolveOptimizerConfig } from './utils'
15+
import { deleteDefineConfig, resolveOptimizerConfig } from './utils'
1616
import { VitestResolver } from './vitestResolver'
1717

1818
export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest('test')): Promise<VitePlugin[]> {
@@ -50,43 +50,11 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest('t
5050
)
5151
testConfig.api = resolveApiServerConfig(testConfig)
5252

53-
if (viteConfig.define) {
54-
delete viteConfig.define['import.meta.vitest']
55-
delete viteConfig.define['process.env']
56-
}
57-
5853
// store defines for globalThis to make them
5954
// reassignable when running in worker in src/runtime/setup.ts
60-
const defines: Record<string, any> = {}
61-
62-
for (const key in viteConfig.define) {
63-
const val = viteConfig.define[key]
64-
let replacement: any
65-
try {
66-
replacement = typeof val === 'string' ? JSON.parse(val) : val
67-
}
68-
catch {
69-
// probably means it contains reference to some variable,
70-
// like this: "__VAR__": "process.env.VAR"
71-
continue
72-
}
73-
if (key.startsWith('import.meta.env.')) {
74-
const envKey = key.slice('import.meta.env.'.length)
75-
process.env[envKey] = replacement
76-
delete viteConfig.define[key]
77-
}
78-
else if (key.startsWith('process.env.')) {
79-
const envKey = key.slice('process.env.'.length)
80-
process.env[envKey] = replacement
81-
delete viteConfig.define[key]
82-
}
83-
else if (!key.includes('.')) {
84-
defines[key] = replacement
85-
delete viteConfig.define[key]
86-
}
87-
}
55+
const defines: Record<string, any> = deleteDefineConfig(viteConfig)
8856

89-
(options as ResolvedConfig).defines = defines
57+
;(options as ResolvedConfig).defines = defines
9058

9159
let open: string | boolean | undefined
9260

‎packages/vitest/src/node/plugins/utils.ts

+38-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { builtinModules } from 'node:module'
22
import { version as viteVersion } from 'vite'
3-
import type { DepOptimizationOptions } from 'vite'
3+
import type { DepOptimizationOptions, UserConfig as ViteConfig } from 'vite'
44
import type { DepsOptimizationOptions, InlineConfig } from '../../types'
55

66
export function resolveOptimizerConfig(testOptionc: DepsOptimizationOptions | undefined, viteOptions: DepOptimizationOptions | undefined, testConfig: InlineConfig) {
@@ -32,3 +32,40 @@ export function resolveOptimizerConfig(testOptionc: DepsOptimizationOptions | un
3232
}
3333
return newConfig
3434
}
35+
36+
export function deleteDefineConfig(viteConfig: ViteConfig) {
37+
const defines: Record<string, any> = {}
38+
if (viteConfig.define) {
39+
delete viteConfig.define['import.meta.vitest']
40+
delete viteConfig.define['process.env']
41+
delete viteConfig.define.process
42+
delete viteConfig.define.global
43+
}
44+
for (const key in viteConfig.define) {
45+
const val = viteConfig.define[key]
46+
let replacement: any
47+
try {
48+
replacement = typeof val === 'string' ? JSON.parse(val) : val
49+
}
50+
catch {
51+
// probably means it contains reference to some variable,
52+
// like this: "__VAR__": "process.env.VAR"
53+
continue
54+
}
55+
if (key.startsWith('import.meta.env.')) {
56+
const envKey = key.slice('import.meta.env.'.length)
57+
process.env[envKey] = replacement
58+
delete viteConfig.define[key]
59+
}
60+
else if (key.startsWith('process.env.')) {
61+
const envKey = key.slice('process.env.'.length)
62+
process.env[envKey] = replacement
63+
delete viteConfig.define[key]
64+
}
65+
else if (!key.includes('.')) {
66+
defines[key] = replacement
67+
delete viteConfig.define[key]
68+
}
69+
}
70+
return defines
71+
}

‎packages/vitest/src/node/plugins/workspace.ts

+2-31
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { CSSEnablerPlugin } from './cssEnabler'
1010
import { EnvReplacerPlugin } from './envReplacer'
1111
import { GlobalSetupPlugin } from './globalSetup'
1212
import { MocksPlugin } from './mocks'
13-
import { resolveOptimizerConfig } from './utils'
13+
import { deleteDefineConfig, resolveOptimizerConfig } from './utils'
1414
import { VitestResolver } from './vitestResolver'
1515

1616
interface WorkspaceOptions extends UserWorkspaceConfig {
@@ -26,37 +26,8 @@ export function WorkspaceVitestPlugin(project: WorkspaceProject, options: Worksp
2626
options() {
2727
this.meta.watchMode = false
2828
},
29-
// TODO: refactor so we don't have the same code here and in plugins/index.ts
3029
config(viteConfig) {
31-
if (viteConfig.define) {
32-
delete viteConfig.define['import.meta.vitest']
33-
delete viteConfig.define['process.env']
34-
}
35-
36-
const env: Record<string, any> = {}
37-
38-
for (const key in viteConfig.define) {
39-
const val = viteConfig.define[key]
40-
let replacement: any
41-
try {
42-
replacement = typeof val === 'string' ? JSON.parse(val) : val
43-
}
44-
catch {
45-
// probably means it contains reference to some variable,
46-
// like this: "__VAR__": "process.env.VAR"
47-
continue
48-
}
49-
if (key.startsWith('import.meta.env.')) {
50-
const envKey = key.slice('import.meta.env.'.length)
51-
env[envKey] = replacement
52-
delete viteConfig.define[key]
53-
}
54-
else if (key.startsWith('process.env.')) {
55-
const envKey = key.slice('process.env.'.length)
56-
env[envKey] = replacement
57-
delete viteConfig.define[key]
58-
}
59-
}
30+
const env: Record<string, any> = deleteDefineConfig(viteConfig)
6031

6132
const testConfig = viteConfig.test || {}
6233

‎test/core/test/define.test.ts

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ afterAll(() => {
2727
process.env.MODE = MODE
2828
})
2929

30+
test('automatically remove process and global', () => {
31+
expect(Object.keys(process).length > 1).toBe(true)
32+
expect(Object.keys(global).length > 1).toBe(true)
33+
})
34+
3035
test('process.env.HELLO_PROCESS is defined on "defined" but exists on process.env', () => {
3136
expect('HELLO_PROCESS' in process.env).toBe(true)
3237
expect(process.env.HELLO_PROCESS).toBe('hello process')

‎test/core/vitest.config.ts

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export default defineConfig({
1919
},
2020
],
2121
define: {
22+
'process': {},
23+
'global': {},
2224
'import.meta.env.TEST_NAME': '"hello world"',
2325
'process.env.HELLO_PROCESS': '"hello process"',
2426
// can reassign

0 commit comments

Comments
 (0)
Please sign in to comment.