From 5e40c92f264f678cbbc2f1ce4cec28bc2835bba7 Mon Sep 17 00:00:00 2001 From: Anthony Aslangul Date: Wed, 13 Mar 2024 15:58:58 +0100 Subject: [PATCH 1/5] feat(nuxt): allow plugins with .jsx or .tsx extensions --- packages/nuxt/src/core/app.ts | 4 ++-- packages/nuxt/src/core/plugins/plugin-metadata.ts | 2 +- packages/nuxt/test/plugin-metadata.test.ts | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/src/core/app.ts b/packages/nuxt/src/core/app.ts index 24aa1e493375..b7056fa2152a 100644 --- a/packages/nuxt/src/core/app.ts +++ b/packages/nuxt/src/core/app.ts @@ -150,8 +150,8 @@ export async function resolveApp (nuxt: Nuxt, app: NuxtApp) { ...(config.plugins || []), ...config.srcDir ? await resolveFiles(config.srcDir, [ - `${pluginDir}/*.{ts,js,mjs,cjs,mts,cts}`, - `${pluginDir}/*/index.*{ts,js,mjs,cjs,mts,cts}` // TODO: remove, only scan top-level plugins #18418 + `${pluginDir}/*.{ts,js,mjs,cjs,mts,cts,jsx,tsx}`, + `${pluginDir}/*/index.*{ts,js,mjs,cjs,mts,cts,jsx,tsx}` // TODO: remove, only scan top-level plugins #18418 ]) : [] ].map(plugin => normalizePlugin(plugin as NuxtPlugin))) diff --git a/packages/nuxt/src/core/plugins/plugin-metadata.ts b/packages/nuxt/src/core/plugins/plugin-metadata.ts index b77678caa36c..bd29f61a38a9 100644 --- a/packages/nuxt/src/core/plugins/plugin-metadata.ts +++ b/packages/nuxt/src/core/plugins/plugin-metadata.ts @@ -47,7 +47,7 @@ export async function extractMetadata (code: string) { if (metaCache[code]) { return metaCache[code] } - const js = await transform(code, { loader: 'ts' }) + const js = await transform(code, { loader: 'tsx' }) walk(parse(js.code, { sourceType: 'module', ecmaVersion: 'latest' diff --git a/packages/nuxt/test/plugin-metadata.test.ts b/packages/nuxt/test/plugin-metadata.test.ts index 2d12a2f403dc..05adab439585 100644 --- a/packages/nuxt/test/plugin-metadata.test.ts +++ b/packages/nuxt/test/plugin-metadata.test.ts @@ -9,8 +9,8 @@ describe('plugin-metadata', () => { const properties = Object.entries({ name: 'test', enforce: 'post', - hooks: { 'app:mounted': () => {} }, - setup: () => {}, + hooks: { 'app:mounted': () => { } }, + setup: () => { return { provide: { jsx: '[JSX]' } } }, order: 1 }) @@ -19,7 +19,7 @@ describe('plugin-metadata', () => { const meta = await extractMetadata([ 'export default defineNuxtPlugin({', - ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString() : JSON.stringify(value)},`), + ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString().replace('"[JSX]"', '() => JSX') : JSON.stringify(value)},`), '})' ].join('\n')) From f98c14f20adb497699d6017a949b2d56a4c22680 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 13 Mar 2024 15:15:34 -0700 Subject: [PATCH 2/5] test: remove workaround and rename to .tsx --- .../{plugin-metadata.test.ts => plugin-metadata.test.tsx} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename packages/nuxt/test/{plugin-metadata.test.ts => plugin-metadata.test.tsx} (94%) diff --git a/packages/nuxt/test/plugin-metadata.test.ts b/packages/nuxt/test/plugin-metadata.test.tsx similarity index 94% rename from packages/nuxt/test/plugin-metadata.test.ts rename to packages/nuxt/test/plugin-metadata.test.tsx index 05adab439585..49fcbf19b8f0 100644 --- a/packages/nuxt/test/plugin-metadata.test.ts +++ b/packages/nuxt/test/plugin-metadata.test.tsx @@ -10,7 +10,8 @@ describe('plugin-metadata', () => { name: 'test', enforce: 'post', hooks: { 'app:mounted': () => { } }, - setup: () => { return { provide: { jsx: '[JSX]' } } }, + // @ts-expect-error JSX not configured in workspace + setup: () => { return { provide: { jsx: () => JSX } } }, order: 1 }) @@ -19,7 +20,7 @@ describe('plugin-metadata', () => { const meta = await extractMetadata([ 'export default defineNuxtPlugin({', - ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString().replace('"[JSX]"', '() => JSX') : JSON.stringify(value)},`), + ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString() : JSON.stringify(value)},`), '})' ].join('\n')) From 118e721c0b42ebd2df96bd529e86343d9d8ebe0d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 13 Mar 2024 15:15:54 -0700 Subject: [PATCH 3/5] fix: use nuxt extensions to resolve plugins --- packages/nuxt/src/core/app.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/core/app.ts b/packages/nuxt/src/core/app.ts index b7056fa2152a..67cc4d54c6e9 100644 --- a/packages/nuxt/src/core/app.ts +++ b/packages/nuxt/src/core/app.ts @@ -150,8 +150,8 @@ export async function resolveApp (nuxt: Nuxt, app: NuxtApp) { ...(config.plugins || []), ...config.srcDir ? await resolveFiles(config.srcDir, [ - `${pluginDir}/*.{ts,js,mjs,cjs,mts,cts,jsx,tsx}`, - `${pluginDir}/*/index.*{ts,js,mjs,cjs,mts,cts,jsx,tsx}` // TODO: remove, only scan top-level plugins #18418 + `${pluginDir}/*{${nuxt.options.extensions.join(',')}}`, + `${pluginDir}/*/index{${nuxt.options.extensions.join(',')}}` // TODO: remove, only scan top-level plugins #18418 ]) : [] ].map(plugin => normalizePlugin(plugin as NuxtPlugin))) From 153b40210bd727ea04648eaad83c0162e49048e4 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 13 Mar 2024 15:16:59 -0700 Subject: [PATCH 4/5] style: remove space --- packages/nuxt/test/plugin-metadata.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/test/plugin-metadata.test.tsx b/packages/nuxt/test/plugin-metadata.test.tsx index 49fcbf19b8f0..0a46a59be5b4 100644 --- a/packages/nuxt/test/plugin-metadata.test.tsx +++ b/packages/nuxt/test/plugin-metadata.test.tsx @@ -9,7 +9,7 @@ describe('plugin-metadata', () => { const properties = Object.entries({ name: 'test', enforce: 'post', - hooks: { 'app:mounted': () => { } }, + hooks: { 'app:mounted': () => {} }, // @ts-expect-error JSX not configured in workspace setup: () => { return { provide: { jsx: () => JSX } } }, order: 1 From 23f83ccfd2937c40bcc2d5e4a2589c63dd192e3e Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 13 Mar 2024 15:18:32 -0700 Subject: [PATCH 5/5] =?UTF-8?q?test:=20fix=20revert=20jsx=20fixture=20chan?= =?UTF-8?q?ge=20=F0=9F=99=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{plugin-metadata.test.tsx => plugin-metadata.test.ts} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename packages/nuxt/test/{plugin-metadata.test.tsx => plugin-metadata.test.ts} (94%) diff --git a/packages/nuxt/test/plugin-metadata.test.tsx b/packages/nuxt/test/plugin-metadata.test.ts similarity index 94% rename from packages/nuxt/test/plugin-metadata.test.tsx rename to packages/nuxt/test/plugin-metadata.test.ts index 0a46a59be5b4..09a88f0827ca 100644 --- a/packages/nuxt/test/plugin-metadata.test.tsx +++ b/packages/nuxt/test/plugin-metadata.test.ts @@ -10,8 +10,7 @@ describe('plugin-metadata', () => { name: 'test', enforce: 'post', hooks: { 'app:mounted': () => {} }, - // @ts-expect-error JSX not configured in workspace - setup: () => { return { provide: { jsx: () => JSX } } }, + setup: () => { return { provide: { jsx: '[JSX]' } } }, order: 1 }) @@ -20,7 +19,7 @@ describe('plugin-metadata', () => { const meta = await extractMetadata([ 'export default defineNuxtPlugin({', - ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString() : JSON.stringify(value)},`), + ...obj.map(([key, value]) => `${key}: ${typeof value === 'function' ? value.toString().replace('"[JSX]"', '() => JSX') : JSON.stringify(value)},`), '})' ].join('\n'))