@@ -117,30 +117,39 @@ export async function transformWithEsbuild(
117117 }
118118 }
119119
120- tsconfigRaw = {
121- ...tsconfigRaw ,
122- compilerOptions : {
123- ...compilerOptionsForFile ,
124- ...tsconfigRaw ?. compilerOptions ,
125- } ,
120+ const compilerOptions = {
121+ ...compilerOptionsForFile ,
122+ ...tsconfigRaw ?. compilerOptions ,
126123 }
127124
128- const { compilerOptions } = tsconfigRaw
129- if ( compilerOptions ) {
130- // esbuild derives `useDefineForClassFields` from `target` instead of `tsconfig.compilerOptions.target`
131- // https://github.com/evanw/esbuild/issues/2584
132- // but we want `useDefineForClassFields` to be derived from `tsconfig.compilerOptions.target`
133- if ( compilerOptions . useDefineForClassFields === undefined ) {
134- const lowercaseTarget = compilerOptions . target ?. toLowerCase ( ) ?? 'es3'
135- if ( lowercaseTarget . startsWith ( 'es' ) ) {
136- const esVersion = lowercaseTarget . slice ( 2 )
137- compilerOptions . useDefineForClassFields =
138- esVersion === 'next' || + esVersion >= 2022
139- } else {
140- compilerOptions . useDefineForClassFields = false
141- }
125+ // esbuild derives `useDefineForClassFields` from `target` instead of `tsconfig.compilerOptions.target`
126+ // https://github.com/evanw/esbuild/issues/2584
127+ // but we want `useDefineForClassFields` to be derived from `tsconfig.compilerOptions.target`
128+ if ( compilerOptions . useDefineForClassFields === undefined ) {
129+ const lowercaseTarget = compilerOptions . target ?. toLowerCase ( ) ?? 'es3'
130+ if ( lowercaseTarget . startsWith ( 'es' ) ) {
131+ const esVersion = lowercaseTarget . slice ( 2 )
132+ compilerOptions . useDefineForClassFields =
133+ esVersion === 'next' || + esVersion >= 2022
134+ } else {
135+ compilerOptions . useDefineForClassFields = false
142136 }
143137 }
138+
139+ // esbuild uses tsconfig fields when both the normal options and tsconfig was set
140+ // but we want to prioritize the normal options
141+ if ( options ) {
142+ options . jsx && ( compilerOptions . jsx = undefined )
143+ options . jsxFactory && ( compilerOptions . jsxFactory = undefined )
144+ options . jsxFragment && ( compilerOptions . jsxFragmentFactory = undefined )
145+ options . jsxImportSource && ( compilerOptions . jsxImportSource = undefined )
146+ options . target && ( compilerOptions . target = undefined )
147+ }
148+
149+ tsconfigRaw = {
150+ ...tsconfigRaw ,
151+ compilerOptions,
152+ }
144153 }
145154
146155 const resolvedOptions = {
@@ -152,29 +161,6 @@ export async function transformWithEsbuild(
152161 tsconfigRaw,
153162 } as ESBuildOptions
154163
155- // esbuild uses tsconfig fields when both the normal options and tsconfig was set
156- // but we want to prioritize the normal options
157- if (
158- options &&
159- typeof resolvedOptions . tsconfigRaw === 'object' &&
160- resolvedOptions . tsconfigRaw . compilerOptions
161- ) {
162- options . jsx && ( resolvedOptions . tsconfigRaw . compilerOptions . jsx = undefined )
163- options . jsxFactory &&
164- ( resolvedOptions . tsconfigRaw . compilerOptions . jsxFactory = undefined )
165- options . jsxFragment &&
166- ( resolvedOptions . tsconfigRaw . compilerOptions . jsxFragmentFactory =
167- undefined )
168- options . jsxImportSource &&
169- ( resolvedOptions . tsconfigRaw . compilerOptions . jsxImportSource = undefined )
170- options . target &&
171- ( resolvedOptions . tsconfigRaw . compilerOptions . target = undefined )
172- }
173-
174- delete resolvedOptions . include
175- delete resolvedOptions . exclude
176- delete resolvedOptions . jsxInject
177-
178164 try {
179165 const result = await transform ( code , resolvedOptions )
180166 let map : SourceMap
@@ -210,17 +196,16 @@ export async function transformWithEsbuild(
210196}
211197
212198export function esbuildPlugin ( options : ESBuildOptions ) : Plugin {
213- const filter = createFilter (
214- options . include || / \. ( m ? t s | [ j t ] s x ) $ / ,
215- options . exclude || / \. j s $ / ,
216- )
199+ const { jsxInject, include, exclude, ...esbuildTransformOptions } = options
200+
201+ const filter = createFilter ( include || / \. ( m ? t s | [ j t ] s x ) $ / , exclude || / \. j s $ / )
217202
218203 // Remove optimization options for dev as we only need to transpile them,
219204 // and for build as the final optimization is in `buildEsbuildPlugin`
220205 const transformOptions : TransformOptions = {
221206 target : 'esnext' ,
222207 charset : 'utf8' ,
223- ...options ,
208+ ...esbuildTransformOptions ,
224209 minify : false ,
225210 minifyIdentifiers : false ,
226211 minifySyntax : false ,
@@ -256,8 +241,8 @@ export function esbuildPlugin(options: ESBuildOptions): Plugin {
256241 this . warn ( prettifyMessage ( m , code ) )
257242 } )
258243 }
259- if ( options . jsxInject && / \. (?: j | t ) s x \b / . test ( id ) ) {
260- result . code = options . jsxInject + ';' + result . code
244+ if ( jsxInject && / \. (?: j | t ) s x \b / . test ( id ) ) {
245+ result . code = jsxInject + ';' + result . code
261246 }
262247 return {
263248 code : result . code ,
0 commit comments