@@ -88,6 +88,7 @@ import type { ResolvedSSROptions, SSROptions } from './ssr'
88
88
import { resolveSSROptions } from './ssr'
89
89
import { PartialEnvironment } from './baseEnvironment'
90
90
import { createIdResolver } from './idResolver'
91
+ import { type OxcOptions , convertEsbuildConfigToOxcConfig } from './plugins/oxc'
91
92
92
93
const debug = createDebugger ( 'vite:config' )
93
94
const promisifiedRealpath = promisify ( fs . realpath )
@@ -339,6 +340,11 @@ export interface UserConfig extends DefaultEnvironmentOptions {
339
340
* Or set to `false` to disable esbuild.
340
341
*/
341
342
esbuild ?: ESBuildOptions | false
343
+ /**
344
+ * Transform options to pass to esbuild.
345
+ * Or set to `false` to disable esbuild.
346
+ */
347
+ oxc ?: OxcOptions | false
342
348
/**
343
349
* Specify additional picomatch patterns to be treated as static assets.
344
350
*/
@@ -569,7 +575,8 @@ export type ResolvedConfig = Readonly<
569
575
}
570
576
plugins : readonly Plugin [ ]
571
577
css : ResolvedCSSOptions
572
- esbuild : ESBuildOptions | false
578
+ // esbuild: ESBuildOptions | false
579
+ oxc : OxcOptions | false
573
580
server : ResolvedServerOptions
574
581
dev : ResolvedDevEnvironmentOptions
575
582
builder : ResolvedBuilderOptions
@@ -1305,6 +1312,18 @@ export async function resolveConfig(
1305
1312
1306
1313
const base = withTrailingSlash ( resolvedBase )
1307
1314
1315
+ let oxc : OxcOptions | false | undefined = config . oxc
1316
+
1317
+ if ( config . esbuild ) {
1318
+ if ( config . oxc ) {
1319
+ logger . warn (
1320
+ `Found esbuild and oxc options, will use oxc and ignore esbuild at transformer.` ,
1321
+ )
1322
+ } else {
1323
+ oxc = convertEsbuildConfigToOxcConfig ( config . esbuild , logger )
1324
+ }
1325
+ }
1326
+
1308
1327
resolved = {
1309
1328
configFile : configFile ? normalizePath ( configFile ) : undefined ,
1310
1329
configFileDependencies : configFileDependencies . map ( ( name ) =>
@@ -1325,13 +1344,18 @@ export async function resolveConfig(
1325
1344
isProduction,
1326
1345
plugins : userPlugins , // placeholder to be replaced
1327
1346
css : resolveCSSOptions ( config . css ) ,
1328
- esbuild :
1329
- config . esbuild === false
1347
+ oxc :
1348
+ oxc === false
1330
1349
? false
1331
1350
: {
1332
- jsxDev : ! isProduction ,
1333
- ...config . esbuild ,
1351
+ ...oxc ,
1352
+ jsx : {
1353
+ development : ! isProduction ,
1354
+ ...oxc ?. jsx ,
1355
+ } ,
1334
1356
} ,
1357
+ // preserve esbuild for buildEsbuildPlugin
1358
+ esbuild : config . esbuild ,
1335
1359
server,
1336
1360
builder,
1337
1361
preview : resolvePreviewOptions ( config . preview , server ) ,
0 commit comments