diff --git a/packages/vite/src/module-runner/runner.ts b/packages/vite/src/module-runner/runner.ts index 51619243caf5ec..8a65a378bc7840 100644 --- a/packages/vite/src/module-runner/runner.ts +++ b/packages/vite/src/module-runner/runner.ts @@ -247,7 +247,18 @@ export class ModuleRunner { this.builtinsPromise ??= (async () => { try { this.debug?.('[module runner] fetching builtins from server') - const builtins = await this.transport.invoke('getBuiltins', []) + const serializedBuiltins = await this.transport.invoke( + 'getBuiltins', + [], + ) + const builtins = serializedBuiltins.map((builtin) => + typeof builtin === 'object' && builtin && 'type' in builtin + ? builtin.type === 'string' + ? builtin.value + : new RegExp(builtin.source, builtin.flags) + : // NOTE: Vitest returns raw values instead of serialized ones + builtin, + ) this.isBuiltin = createIsBuiltin(builtins) this.debug?.('[module runner] builtins loaded:', builtins) } finally { diff --git a/packages/vite/src/node/server/environment.ts b/packages/vite/src/node/server/environment.ts index 9f4b25c09531c0..81a7c6a94e7934 100644 --- a/packages/vite/src/node/server/environment.ts +++ b/packages/vite/src/node/server/environment.ts @@ -134,7 +134,11 @@ export class DevEnvironment extends BaseEnvironment { return this.fetchModule(id, importer, options) }, getBuiltins: async () => { - return this.config.resolve.builtins + return this.config.resolve.builtins.map((builtin) => + typeof builtin === 'string' + ? { type: 'string', value: builtin } + : { type: 'RegExp', source: builtin.source, flags: builtin.flags }, + ) }, }) diff --git a/packages/vite/src/shared/invokeMethods.ts b/packages/vite/src/shared/invokeMethods.ts index ffa45b7be6f773..32793798949520 100644 --- a/packages/vite/src/shared/invokeMethods.ts +++ b/packages/vite/src/shared/invokeMethods.ts @@ -83,5 +83,10 @@ export type InvokeMethods = { options?: FetchFunctionOptions, ) => Promise - getBuiltins: () => Promise<(string | RegExp)[]> + getBuiltins: () => Promise< + Array< + | { type: 'string'; value: string } + | { type: 'RegExp'; source: string; flags: string } + > + > }