From dfd935bee6a597739d8a33a1d737d11afdb448ea Mon Sep 17 00:00:00 2001 From: julien huang Date: Tue, 19 Mar 2024 20:59:08 +0100 Subject: [PATCH] fix(nuxt): make pageMeta ast undefineable in transformation --- packages/nuxt/src/pages/plugins/page-meta.ts | 45 ++++++++++---------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/packages/nuxt/src/pages/plugins/page-meta.ts b/packages/nuxt/src/pages/plugins/page-meta.ts index 07c64ebdf0..23a1988212 100644 --- a/packages/nuxt/src/pages/plugins/page-meta.ts +++ b/packages/nuxt/src/pages/plugins/page-meta.ts @@ -122,33 +122,34 @@ export const PageMetaPlugin = createUnplugin((options: PageMetaPluginOptions) => const name = 'name' in node.callee && node.callee.name if (name !== 'definePageMeta') { return } - const meta = node.arguments[0] as Expression & { start: number, end: number } + const meta = node.arguments[0] as (Expression & { start: number, end: number }) | undefined + let contents = `const __nuxt_page_meta = ${meta ? code!.slice(meta.start, meta.end) || 'null' : 'null'}\nexport default __nuxt_page_meta` + (options.dev ? CODE_HMR : '') - let contents = `const __nuxt_page_meta = ${code!.slice(meta.start, meta.end) || 'null'}\nexport default __nuxt_page_meta` + (options.dev ? CODE_HMR : '') - - function addImport (name: string | false) { - if (name && importMap.has(name)) { - const importValue = importMap.get(name)!.code - if (!addedImports.has(importValue)) { - contents = importMap.get(name)!.code + '\n' + contents - addedImports.add(importValue) + if(meta) { + function addImport (name: string | false) { + if (name && importMap.has(name)) { + const importValue = importMap.get(name)!.code + if (!addedImports.has(importValue)) { + contents = importMap.get(name)!.code + '\n' + contents + addedImports.add(importValue) + } } } + + walk(meta, { + enter (_node) { + if (_node.type === 'CallExpression') { + const node = _node as CallExpression & { start: number, end: number } + addImport('name' in node.callee && node.callee.name) + } + if (_node.type === 'Identifier') { + const node = _node as Identifier & { start: number, end: number } + addImport(node.name) + } + } + }) } - walk(meta, { - enter (_node) { - if (_node.type === 'CallExpression') { - const node = _node as CallExpression & { start: number, end: number } - addImport('name' in node.callee && node.callee.name) - } - if (_node.type === 'Identifier') { - const node = _node as Identifier & { start: number, end: number } - addImport(node.name) - } - } - }) - s.overwrite(0, code.length, contents) } })