diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index c9e6b1326473f8..f7ab899724e54a 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -4263,6 +4263,7 @@ export default async function build( pageExtensions: config.pageExtensions, buildManifest, middlewareManifest, + functionsConfigManifest, hasGSPAndRevalidateZero, }) ) diff --git a/packages/next/src/build/utils.ts b/packages/next/src/build/utils.ts index 01454bb2ffb614..78517025cff373 100644 --- a/packages/next/src/build/utils.ts +++ b/packages/next/src/build/utils.ts @@ -75,6 +75,7 @@ import { formatExpire, formatRevalidate } from './output/format' import type { AppRouteRouteModule } from '../server/route-modules/app-route/module' import { formatIssue, isRelevantWarning } from '../shared/lib/turbopack/utils' import type { TurbopackResult } from './swc/types' +import type { FunctionsConfigManifest } from './index' export type ROUTER_TYPE = 'pages' | 'app' @@ -274,6 +275,7 @@ export async function printTreeView( pagesDir, pageExtensions, middlewareManifest, + functionsConfigManifest, useStaticPages404, hasGSPAndRevalidateZero, }: { @@ -281,6 +283,7 @@ export async function printTreeView( pageExtensions: PageExtensions buildManifest: BuildManifest middlewareManifest: MiddlewareManifest + functionsConfigManifest: FunctionsConfigManifest useStaticPages404: boolean hasGSPAndRevalidateZero: Set } @@ -533,8 +536,12 @@ export async function printTreeView( list: lists.pages, }) - const middlewareInfo = middlewareManifest.middleware?.['/'] - if (middlewareInfo?.files.length > 0) { + if ( + middlewareManifest.middleware?.['/']?.files.length > 0 || + // 'nodejs' runtime middleware or proxy is set to + // functions-config-manifest instead of middleware-manifest. + functionsConfigManifest.functions?.['/_middleware'] + ) { messages.push([]) messages.push(['ƒ Proxy (Middleware)']) } diff --git a/test/production/app-dir/proxy-build-cli-output/app/layout.tsx b/test/production/app-dir/proxy-build-cli-output/app/layout.tsx new file mode 100644 index 00000000000000..888614deda3ba5 --- /dev/null +++ b/test/production/app-dir/proxy-build-cli-output/app/layout.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from 'react' +export default function Root({ children }: { children: ReactNode }) { + return ( + + {children} + + ) +} diff --git a/test/production/app-dir/proxy-build-cli-output/app/page.tsx b/test/production/app-dir/proxy-build-cli-output/app/page.tsx new file mode 100644 index 00000000000000..ff7159d9149fee --- /dev/null +++ b/test/production/app-dir/proxy-build-cli-output/app/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return

hello world

+} diff --git a/test/production/app-dir/proxy-build-cli-output/next.config.js b/test/production/app-dir/proxy-build-cli-output/next.config.js new file mode 100644 index 00000000000000..807126e4cf0bf5 --- /dev/null +++ b/test/production/app-dir/proxy-build-cli-output/next.config.js @@ -0,0 +1,6 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = {} + +module.exports = nextConfig diff --git a/test/production/app-dir/proxy-build-cli-output/proxy-build-cli-output.test.ts b/test/production/app-dir/proxy-build-cli-output/proxy-build-cli-output.test.ts new file mode 100644 index 00000000000000..4d063aa94ae299 --- /dev/null +++ b/test/production/app-dir/proxy-build-cli-output/proxy-build-cli-output.test.ts @@ -0,0 +1,14 @@ +import { nextTestSetup } from 'e2e-utils' + +describe('proxy-build-cli-output', () => { + const { next } = nextTestSetup({ + files: __dirname, + }) + + it('should print proxy in the build CLI output', async () => { + expect(next.cliOutput).toContain('ƒ Proxy (Middleware)') + + const browser = await next.browser('/foo') + expect(await browser.elementByCss('p').text()).toBe('hello world') + }) +}) diff --git a/test/production/app-dir/proxy-build-cli-output/proxy.ts b/test/production/app-dir/proxy-build-cli-output/proxy.ts new file mode 100644 index 00000000000000..32050b6eb4aee7 --- /dev/null +++ b/test/production/app-dir/proxy-build-cli-output/proxy.ts @@ -0,0 +1,8 @@ +import { NextRequest, NextResponse } from 'next/server' + +export default function proxy(request: NextRequest) { + if (request.nextUrl.pathname === '/foo') { + return NextResponse.redirect(new URL('/', request.url)) + } + return NextResponse.next() +}