diff --git a/packages/nuxt/src/pages/utils.ts b/packages/nuxt/src/pages/utils.ts index e131d24c3c..bb5d516123 100644 --- a/packages/nuxt/src/pages/utils.ts +++ b/packages/nuxt/src/pages/utils.ts @@ -192,7 +192,7 @@ export function extractScriptContent (sfc: string) { for (const match of sfc.matchAll(SFC_SCRIPT_RE)) { if (match?.groups?.content) { contents.push({ - loader: match.groups.attrs?.includes('tsx') ? 'tsx' : 'ts', + loader: match.groups.attrs && /[tj]sx/.test(match.groups.attrs) ? 'tsx' : 'ts', code: match.groups.content.trim(), }) } diff --git a/packages/nuxt/test/page-metadata.test.ts b/packages/nuxt/test/page-metadata.test.ts index 669132a6e9..d1420593cd 100644 --- a/packages/nuxt/test/page-metadata.test.ts +++ b/packages/nuxt/test/page-metadata.test.ts @@ -42,6 +42,19 @@ export default { }) }) + it('should parse lang="jsx" from vue files', async () => { + const fileContents = ` + ` + + const meta = await getRouteMeta(fileContents, `/app/pages/index.vue`) + expect(meta).toStrictEqual({ + name: 'bar', + }) + }) + // TODO: https://github.com/nuxt/nuxt/pull/30066 it.todo('should handle experimental decorators', async () => { const fileContents = `