diff --git a/packages/next/src/server/typescript/rules/metadata.ts b/packages/next/src/server/typescript/rules/metadata.ts index 5824fac72d..5fda52bfb5 100644 --- a/packages/next/src/server/typescript/rules/metadata.ts +++ b/packages/next/src/server/typescript/rules/metadata.ts @@ -158,7 +158,10 @@ function updateVirtualFileWithType( if (ts.isFunctionDeclaration(node)) { if (isGenerateMetadata) { nodeEnd = node.body!.getFullStart() - annotation = TYPE_ANOTATION_ASYNC + const isAsync = node.modifiers?.some( + (m) => m.kind === ts.SyntaxKind.AsyncKeyword + ) + annotation = isAsync ? TYPE_ANOTATION_ASYNC : TYPE_ANOTATION } else { return } diff --git a/test/e2e/app-dir/metadata/app/type-checking/generate-async/page.tsx b/test/e2e/app-dir/metadata/app/type-checking/generate-async/page.tsx new file mode 100644 index 0000000000..d17bc146fd --- /dev/null +++ b/test/e2e/app-dir/metadata/app/type-checking/generate-async/page.tsx @@ -0,0 +1,9 @@ +export default function Page() { + return null +} + +export async function generateMetadata() { + return { + title: 'foo', + } +} diff --git a/test/e2e/app-dir/metadata/app/type-checking/generate-sync/page.tsx b/test/e2e/app-dir/metadata/app/type-checking/generate-sync/page.tsx new file mode 100644 index 0000000000..99eb4f999c --- /dev/null +++ b/test/e2e/app-dir/metadata/app/type-checking/generate-sync/page.tsx @@ -0,0 +1,9 @@ +export default function Page() { + return null +} + +export function generateMetadata() { + return { + title: 'foo', + } +}