Skip to content

Commit

Permalink
perf(define): create simple regex for checks (#14788)
Browse files Browse the repository at this point in the history
  • Loading branch information
bluwy committed Oct 31, 2023
1 parent 2124264 commit bd15537
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
10 changes: 10 additions & 0 deletions packages/vite/src/node/__tests__/plugins/define.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@ describe('definePlugin', () => {
)
})

test('should not replace if not defined', async () => {
const transform = await createDefinePluginTransform({
__APP_VERSION__: JSON.stringify('1.0'),
})
expect(await transform('const version = "1.0";')).toBe(undefined)
expect(await transform('const version = import.meta.SOMETHING')).toBe(
undefined,
)
})

test('replaces import.meta.env.SSR with false', async () => {
const transform = await createDefinePluginTransform()
expect(await transform('const isSSR = import.meta.env.SSR;')).toBe(
Expand Down
22 changes: 10 additions & 12 deletions packages/vite/src/node/plugins/define.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,16 @@ export function definePlugin(config: ResolvedConfig): Plugin {
})
}

const defineKeys = Object.keys(define)
const pattern = defineKeys.length
? new RegExp(
// Mustn't be preceded by a char that can be part of an identifier
// or a '.' that isn't part of a spread operator
'(?<![\\p{L}\\p{N}_$]|(?<!\\.\\.)\\.)(' +
defineKeys.map(escapeRegex).join('|') +
// Mustn't be followed by a char that can be part of an identifier
// or an assignment (but allow equality operators)
')(?:(?<=\\.)|(?![\\p{L}\\p{N}_$]|\\s*?=[^=]))',
'gu',
)
// Create regex pattern as a fast check before running esbuild
const patternKeys = Object.keys(userDefine)
if (replaceProcessEnv && Object.keys(processEnv).length) {
patternKeys.push('process.env', '__vite_process_env_NODE_ENV')
}
if (Object.keys(importMetaKeys).length) {
patternKeys.push('import.meta.env', 'import.meta.hot')
}
const pattern = patternKeys.length
? new RegExp(patternKeys.map(escapeRegex).join('|'))
: null

return [define, pattern] as const
Expand Down

0 comments on commit bd15537

Please sign in to comment.