Skip to content

Commit

Permalink
fix: automatically remove define related configuration (#3552)
Browse files Browse the repository at this point in the history
  • Loading branch information
btea committed Jun 15, 2023
1 parent dff19bc commit 368b825
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 67 deletions.
38 changes: 3 additions & 35 deletions packages/vitest/src/node/plugins/index.ts
Expand Up @@ -12,7 +12,7 @@ import { GlobalSetupPlugin } from './globalSetup'
import { CSSEnablerPlugin } from './cssEnabler'
import { CoverageTransform } from './coverageTransform'
import { MocksPlugin } from './mocks'
import { resolveOptimizerConfig } from './utils'
import { deleteDefineConfig, resolveOptimizerConfig } from './utils'
import { VitestResolver } from './vitestResolver'

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

if (viteConfig.define) {
delete viteConfig.define['import.meta.vitest']
delete viteConfig.define['process.env']
}

// store defines for globalThis to make them
// reassignable when running in worker in src/runtime/setup.ts
const defines: Record<string, any> = {}

for (const key in viteConfig.define) {
const val = viteConfig.define[key]
let replacement: any
try {
replacement = typeof val === 'string' ? JSON.parse(val) : val
}
catch {
// probably means it contains reference to some variable,
// like this: "__VAR__": "process.env.VAR"
continue
}
if (key.startsWith('import.meta.env.')) {
const envKey = key.slice('import.meta.env.'.length)
process.env[envKey] = replacement
delete viteConfig.define[key]
}
else if (key.startsWith('process.env.')) {
const envKey = key.slice('process.env.'.length)
process.env[envKey] = replacement
delete viteConfig.define[key]
}
else if (!key.includes('.')) {
defines[key] = replacement
delete viteConfig.define[key]
}
}
const defines: Record<string, any> = deleteDefineConfig(viteConfig)

(options as ResolvedConfig).defines = defines
;(options as ResolvedConfig).defines = defines

let open: string | boolean | undefined

Expand Down
39 changes: 38 additions & 1 deletion packages/vitest/src/node/plugins/utils.ts
@@ -1,6 +1,6 @@
import { builtinModules } from 'node:module'
import { version as viteVersion } from 'vite'
import type { DepOptimizationOptions } from 'vite'
import type { DepOptimizationOptions, UserConfig as ViteConfig } from 'vite'
import type { DepsOptimizationOptions, InlineConfig } from '../../types'

export function resolveOptimizerConfig(testOptionc: DepsOptimizationOptions | undefined, viteOptions: DepOptimizationOptions | undefined, testConfig: InlineConfig) {
Expand Down Expand Up @@ -32,3 +32,40 @@ export function resolveOptimizerConfig(testOptionc: DepsOptimizationOptions | un
}
return newConfig
}

export function deleteDefineConfig(viteConfig: ViteConfig) {
const defines: Record<string, any> = {}
if (viteConfig.define) {
delete viteConfig.define['import.meta.vitest']
delete viteConfig.define['process.env']
delete viteConfig.define.process
delete viteConfig.define.global
}
for (const key in viteConfig.define) {
const val = viteConfig.define[key]
let replacement: any
try {
replacement = typeof val === 'string' ? JSON.parse(val) : val
}
catch {
// probably means it contains reference to some variable,
// like this: "__VAR__": "process.env.VAR"
continue
}
if (key.startsWith('import.meta.env.')) {
const envKey = key.slice('import.meta.env.'.length)
process.env[envKey] = replacement
delete viteConfig.define[key]
}
else if (key.startsWith('process.env.')) {
const envKey = key.slice('process.env.'.length)
process.env[envKey] = replacement
delete viteConfig.define[key]
}
else if (!key.includes('.')) {
defines[key] = replacement
delete viteConfig.define[key]
}
}
return defines
}
33 changes: 2 additions & 31 deletions packages/vitest/src/node/plugins/workspace.ts
Expand Up @@ -10,7 +10,7 @@ import { CSSEnablerPlugin } from './cssEnabler'
import { EnvReplacerPlugin } from './envReplacer'
import { GlobalSetupPlugin } from './globalSetup'
import { MocksPlugin } from './mocks'
import { resolveOptimizerConfig } from './utils'
import { deleteDefineConfig, resolveOptimizerConfig } from './utils'
import { VitestResolver } from './vitestResolver'

interface WorkspaceOptions extends UserWorkspaceConfig {
Expand All @@ -26,37 +26,8 @@ export function WorkspaceVitestPlugin(project: WorkspaceProject, options: Worksp
options() {
this.meta.watchMode = false
},
// TODO: refactor so we don't have the same code here and in plugins/index.ts
config(viteConfig) {
if (viteConfig.define) {
delete viteConfig.define['import.meta.vitest']
delete viteConfig.define['process.env']
}

const env: Record<string, any> = {}

for (const key in viteConfig.define) {
const val = viteConfig.define[key]
let replacement: any
try {
replacement = typeof val === 'string' ? JSON.parse(val) : val
}
catch {
// probably means it contains reference to some variable,
// like this: "__VAR__": "process.env.VAR"
continue
}
if (key.startsWith('import.meta.env.')) {
const envKey = key.slice('import.meta.env.'.length)
env[envKey] = replacement
delete viteConfig.define[key]
}
else if (key.startsWith('process.env.')) {
const envKey = key.slice('process.env.'.length)
env[envKey] = replacement
delete viteConfig.define[key]
}
}
const env: Record<string, any> = deleteDefineConfig(viteConfig)

const testConfig = viteConfig.test || {}

Expand Down
5 changes: 5 additions & 0 deletions test/core/test/define.test.ts
Expand Up @@ -27,6 +27,11 @@ afterAll(() => {
process.env.MODE = MODE
})

test('automatically remove process and global', () => {
expect(Object.keys(process).length > 1).toBe(true)
expect(Object.keys(global).length > 1).toBe(true)
})

test('process.env.HELLO_PROCESS is defined on "defined" but exists on process.env', () => {
expect('HELLO_PROCESS' in process.env).toBe(true)
expect(process.env.HELLO_PROCESS).toBe('hello process')
Expand Down
2 changes: 2 additions & 0 deletions test/core/vitest.config.ts
Expand Up @@ -19,6 +19,8 @@ export default defineConfig({
},
],
define: {
'process': {},
'global': {},
'import.meta.env.TEST_NAME': '"hello world"',
'process.env.HELLO_PROCESS': '"hello process"',
// can reassign
Expand Down

0 comments on commit 368b825

Please sign in to comment.