From 4fa494a0913c5c7f3de1a8af977356b4ed6c5b41 Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 18 Oct 2024 17:56:28 +0800 Subject: [PATCH 1/6] feat: add oxc jsxInclude and jsxExclude --- packages/vite/src/node/plugins/oxc.ts | 33 ++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index 70faac72a90134..a6c4a161e7e138 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -25,6 +25,8 @@ export interface OxcOptions extends OxcTransformOptions { include?: string | RegExp | string[] | RegExp[] exclude?: string | RegExp | string[] | RegExp[] jsxInject?: string + jsxInclude?: string | RegExp | string[] | RegExp[] + jsxExclude?: string | RegExp | string[] | RegExp[] } export async function transformWithOxc( @@ -159,9 +161,23 @@ export async function transformWithOxc( export function oxcPlugin(config: ResolvedConfig): Plugin { const options = config.oxc as OxcOptions - const { jsxInject, include, exclude, ...oxcTransformOptions } = options + const { + jsxInject, + include, + exclude, + jsxInclude, + jsxExclude, + ...oxcTransformOptions + } = options - const filter = createFilter(include || /\.(m?ts|[jt]sx)$/, exclude || /\.js$/) + const defaultInclude = Array.isArray(include) + ? include + : [include || /\.(m?ts|[jt]sx)$/] + const filter = createFilter( + defaultInclude.concat(jsxInclude || []), + exclude || /\.js$/, + ) + const jsxFilter = createFilter(jsxInclude, jsxExclude) return { name: 'vite:oxc', @@ -176,8 +192,19 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { // recycle serve to avoid preventing Node self-exit (#6815) setServer(null) }, - async transform(code, id) { + async transform(code, id, options) { if (filter(id) || filter(cleanUrl(id))) { + // disable refresh at ssr + if (options?.ssr && oxcTransformOptions.jsx?.refresh) { + oxcTransformOptions.jsx.refresh = false + } + if ( + (jsxFilter(id) || jsxFilter(cleanUrl(id))) && + !oxcTransformOptions.lang + ) { + oxcTransformOptions.lang = 'jsx' + } + const result = await transformWithOxc( this, code, From ae3c11781e214b26a5efd708f142c04befd52624 Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 18 Oct 2024 18:18:51 +0800 Subject: [PATCH 2/6] fix: ci --- packages/vite/src/node/plugins/oxc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index a6c4a161e7e138..7005a45ff1e1fa 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -177,7 +177,7 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { defaultInclude.concat(jsxInclude || []), exclude || /\.js$/, ) - const jsxFilter = createFilter(jsxInclude, jsxExclude) + const jsxFilter = createFilter(jsxInclude, jsxExclude || /\.m?tsx?$/) return { name: 'vite:oxc', From e2b3bb050db4d3820b9f20b3f639af60f0eb836d Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 18 Oct 2024 18:35:24 +0800 Subject: [PATCH 3/6] fix: ci --- packages/vite/src/node/plugins/oxc.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index 7005a45ff1e1fa..7bb662735845ce 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -177,7 +177,10 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { defaultInclude.concat(jsxInclude || []), exclude || /\.js$/, ) - const jsxFilter = createFilter(jsxInclude, jsxExclude || /\.m?tsx?$/) + const jsxFilter = createFilter( + jsxInclude || /\.jsx$/, + jsxExclude || /\.m?tsx?$/, + ) return { name: 'vite:oxc', From 235186f3e64aa79c853cc4b49fbf42a34db80fa3 Mon Sep 17 00:00:00 2001 From: underfin <2218301630@qq.com> Date: Fri, 18 Oct 2024 19:46:42 +0800 Subject: [PATCH 4/6] Update packages/vite/src/node/plugins/oxc.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 翠 / green --- packages/vite/src/node/plugins/oxc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index 7bb662735845ce..c8a872e756699b 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -195,10 +195,10 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { // recycle serve to avoid preventing Node self-exit (#6815) setServer(null) }, - async transform(code, id, options) { + async transform(code, id) { if (filter(id) || filter(cleanUrl(id))) { // disable refresh at ssr - if (options?.ssr && oxcTransformOptions.jsx?.refresh) { + if (this.environment.config.consumer === 'server' && oxcTransformOptions.jsx?.refresh) { oxcTransformOptions.jsx.refresh = false } if ( From 5e7d5c58f0efff23cf02a6c038cdcd589fa01646 Mon Sep 17 00:00:00 2001 From: underfin <2218301630@qq.com> Date: Fri, 18 Oct 2024 19:47:21 +0800 Subject: [PATCH 5/6] Update packages/vite/src/node/plugins/oxc.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 翠 / green --- packages/vite/src/node/plugins/oxc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index c8a872e756699b..4c849341ebe718 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -179,7 +179,7 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { ) const jsxFilter = createFilter( jsxInclude || /\.jsx$/, - jsxExclude || /\.m?tsx?$/, + jsxExclude || /\.(m?[jt]s|tsx)$/, ) return { From 1d115b241ac1e4fc9b7e22bec4e1da987555699b Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 18 Oct 2024 19:54:55 +0800 Subject: [PATCH 6/6] fix: format --- packages/vite/src/node/plugins/oxc.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/oxc.ts b/packages/vite/src/node/plugins/oxc.ts index 4c849341ebe718..4f36ec9fc2dccf 100644 --- a/packages/vite/src/node/plugins/oxc.ts +++ b/packages/vite/src/node/plugins/oxc.ts @@ -198,7 +198,10 @@ export function oxcPlugin(config: ResolvedConfig): Plugin { async transform(code, id) { if (filter(id) || filter(cleanUrl(id))) { // disable refresh at ssr - if (this.environment.config.consumer === 'server' && oxcTransformOptions.jsx?.refresh) { + if ( + this.environment.config.consumer === 'server' && + oxcTransformOptions.jsx?.refresh + ) { oxcTransformOptions.jsx.refresh = false } if (