From a832aa4271711e77f4cb1ad5615eeb45e5d4df8e Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Apr 2024 11:27:32 +0200 Subject: [PATCH 1/9] Ensure configuration is checked for Turbopack build --- packages/next/src/build/index.ts | 27 +++- packages/next/src/lib/turbopack-warning.ts | 8 +- .../src/server/dev/hot-reloader-turbopack.ts | 7 +- .../next/src/server/dev/turbopack-utils.ts | 115 +++++++++++++++--- packages/next/src/server/lib/start-server.ts | 2 +- 5 files changed, 129 insertions(+), 30 deletions(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 56bfda1e3971d..5c32b5a47de04 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -45,6 +45,7 @@ import type { import { nonNullable } from '../lib/non-nullable' import { recursiveDelete } from '../lib/recursive-delete' import { verifyPartytownSetup } from '../lib/verify-partytown-setup' +import { validateTurboNextConfig } from '../lib/turbopack-warning' import { BUILD_ID_FILE, BUILD_MANIFEST, @@ -177,6 +178,7 @@ import { handlePagesErrorRoute, formatIssue, printNonFatalIssue, + formatNonFatalIssue, } from '../server/dev/turbopack-utils' import { TurbopackManifestLoader } from '../server/dev/turbopack/manifest-loader' import type { Entrypoints } from '../server/dev/turbopack/types' @@ -1345,6 +1347,11 @@ export default async function build( throw new Error("next build doesn't support turbopack yet") } + await validateTurboNextConfig({ + dir, + isDev: false, + }) + const startTime = process.hrtime() const bindings = await loadBindings(config?.experimental?.useWasmBinary) const dev = false @@ -1447,6 +1454,7 @@ export default async function build( manifestLoader, nextConfig: config, rewrites: emptyRewritesObjToBeImplemented, + logWellKnownErrors: false, }) const progress = createProgress( @@ -1481,6 +1489,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, + logWellKnownErrors: false, }) ) } @@ -1496,6 +1505,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, + logWellKnownErrors: false, }) ) } @@ -1506,6 +1516,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, + logWellKnownErrors: false, }) ) await Promise.all(promises) @@ -1515,26 +1526,32 @@ export default async function build( pageEntrypoints: currentEntrypoints.page, }) - const errors: { + const issues: { page: string message: string }[] = [] for (const [page, entryIssues] of currentEntryIssues) { for (const issue of entryIssues.values()) { if (issue.severity !== 'warning') { - errors.push({ + issues.push({ page, message: formatIssue(issue), }) } else { - printNonFatalIssue(issue) + const warningIssue = formatNonFatalIssue(issue) + if (warningIssue) { + issues.push({ + page, + message: formatIssue(issue), + }) + } } } } - if (errors.length > 0) { + if (issues.length > 0) { throw new Error( - `Turbopack build failed with ${errors.length} issues:\n${errors + `Turbopack build failed with ${issues.length} issues:\n${issues .map((e) => { return 'Page: ' + e.page + '\n' + e.message }) diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 2d990316e4a33..106fa2c614ef9 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -72,10 +72,7 @@ export async function validateTurboNextConfig({ dir, isDev, }: { - allowRetry?: boolean dir: string - port: number - hostname?: string isDev?: boolean }) { const { getPkgManager } = @@ -150,7 +147,10 @@ export async function validateTurboNextConfig({ let unsupportedKeys = isDev ? unsupportedTurbopackNextConfigOptions - : prodSpecificTurboNextConfigOptions + : [ + ...unsupportedTurbopackNextConfigOptions, + ...prodSpecificTurboNextConfigOptions, + ] for (const key of customKeys) { if (key.startsWith('webpack') && rawNextConfig.webpack) { diff --git a/packages/next/src/server/dev/hot-reloader-turbopack.ts b/packages/next/src/server/dev/hot-reloader-turbopack.ts index 79d90d33b1b7f..d6f206aeff6ec 100644 --- a/packages/next/src/server/dev/hot-reloader-turbopack.ts +++ b/packages/next/src/server/dev/hot-reloader-turbopack.ts @@ -363,7 +363,7 @@ export async function createHotReloaderTurbopack( const changed = await changedPromise for await (const change of changed) { - processIssues(currentEntryIssues, key, change) + processIssues(currentEntryIssues, key, change, false, true) const payload = await makePayload(change) if (payload) { sendHmr(key, payload) @@ -401,7 +401,7 @@ export async function createHotReloaderTurbopack( await subscription.next() for await (const data of subscription) { - processIssues(state.clientIssues, key, data) + processIssues(state.clientIssues, key, data, false, true) if (data.type !== 'issues') { sendTurbopackMessage(data) } @@ -453,6 +453,7 @@ export async function createHotReloaderTurbopack( manifestLoader, nextConfig: opts.nextConfig, rewrites: opts.fsChecker.rewrites, + logWellKnownErrors: true, dev: { assetMapper, @@ -778,6 +779,7 @@ export async function createHotReloaderTurbopack( entrypoints: currentEntrypoints, manifestLoader, rewrites: opts.fsChecker.rewrites, + logWellKnownErrors: true, hooks: { subscribeToChanges, @@ -830,6 +832,7 @@ export async function createHotReloaderTurbopack( manifestLoader, readyIds, rewrites: opts.fsChecker.rewrites, + logWellKnownErrors: true, hooks: { subscribeToChanges, diff --git a/packages/next/src/server/dev/turbopack-utils.ts b/packages/next/src/server/dev/turbopack-utils.ts index 3ea283ca6a685..04827ea93d38b 100644 --- a/packages/next/src/server/dev/turbopack-utils.ts +++ b/packages/next/src/server/dev/turbopack-utils.ts @@ -64,13 +64,20 @@ export function isWellKnownError(issue: Issue): boolean { /// Print out an issue to the console which should not block /// the build by throwing out or blocking error overlay. export function printNonFatalIssue(issue: Issue) { - // Currently only warnings will be printed, excluding if the error source - // is coming from foreign (node_modules) codes. + const nonFatalissue = formatNonFatalIssue(issue) + if (nonFatalissue) { + Log.warn(formatIssue(issue)) + } +} + +export function formatNonFatalIssue(issue: Issue): string | null { if (issue.severity === 'warning') { if (!issue.filePath.match(/^(?:.*[\\/])?node_modules(?:[\\/].*)?$/)) { - Log.warn(formatIssue(issue)) + return formatIssue(issue) } } + + return null } export function formatIssue(issue: Issue) { @@ -94,7 +101,7 @@ export function formatIssue(issue: Issue) { .replaceAll('/./', '/') .replace('\\\\?\\', '') - let message + let message = '' if (source && source.range) { const { start } = source.range @@ -174,7 +181,8 @@ export function processIssues( currentEntryIssues: EntryIssuesMap, key: EntryKey, result: TurbopackResult, - throwIssue = false + throwIssue: boolean, + logWellKnownErrors: boolean ) { const newIssues = new Map() currentEntryIssues.set(key, newIssues) @@ -195,7 +203,7 @@ export function processIssues( if (issue.severity !== 'warning') { relevantIssues.add(formatted) - if (isWellKnownError(issue)) { + if (logWellKnownErrors && isWellKnownError(issue)) { Log.error(formatted) } } @@ -296,6 +304,7 @@ export async function handleRouteType({ readyIds, rewrites, hooks, + logWellKnownErrors, }: { dev: boolean page: string @@ -306,6 +315,7 @@ export async function handleRouteType({ entrypoints: Entrypoints manifestLoader: TurbopackManifestLoader rewrites: SetupOpts['fsChecker']['rewrites'] + logWellKnownErrors: boolean readyIds?: ReadyIds // dev @@ -322,7 +332,13 @@ export async function handleRouteType({ const writtenEndpoint = await entrypoints.global.app.writeToDisk() hooks?.handleWrittenEndpoint(key, writtenEndpoint) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await manifestLoader.loadBuildManifest('_app') await manifestLoader.loadPagesManifest('_app') @@ -333,7 +349,13 @@ export async function handleRouteType({ const writtenEndpoint = await entrypoints.global.document.writeToDisk() hooks?.handleWrittenEndpoint(key, writtenEndpoint) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await manifestLoader.loadPagesManifest('_document') @@ -358,7 +380,13 @@ export async function handleRouteType({ pageEntrypoints: entrypoints.page, }) - processIssues(currentEntryIssues, serverKey, writtenEndpoint) + processIssues( + currentEntryIssues, + serverKey, + writtenEndpoint, + false, + logWellKnownErrors + ) } finally { // TODO subscriptions should only be caused by the WebSocket connections // otherwise we don't known when to unsubscribe and this leaking @@ -410,7 +438,13 @@ export async function handleRouteType({ pageEntrypoints: entrypoints.page, }) - processIssues(currentEntryIssues, key, writtenEndpoint, true) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + true, + logWellKnownErrors + ) break } @@ -454,7 +488,13 @@ export async function handleRouteType({ pageEntrypoints: entrypoints.page, }) - processIssues(currentEntryIssues, key, writtenEndpoint, dev) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + dev, + logWellKnownErrors + ) break } @@ -477,7 +517,13 @@ export async function handleRouteType({ rewrites, pageEntrypoints: entrypoints.page, }) - processIssues(currentEntryIssues, key, writtenEndpoint, true) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + true, + logWellKnownErrors + ) break } @@ -631,7 +677,7 @@ export async function handleEntrypoints({ manifestLoader, nextConfig, rewrites, - + logWellKnownErrors, dev, }: { entrypoints: TurbopackResult @@ -642,6 +688,7 @@ export async function handleEntrypoints({ manifestLoader: TurbopackManifestLoader nextConfig: NextConfigComplete rewrites: SetupOpts['fsChecker']['rewrites'] + logWellKnownErrors: boolean dev?: HandleEntrypointsDevOpts }) { @@ -719,7 +766,13 @@ export async function handleEntrypoints({ const writtenEndpoint = await instrumentation[prop].writeToDisk() dev?.hooks.handleWrittenEndpoint(key, writtenEndpoint) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await processInstrumentation('instrumentation.nodeJs', 'nodeJs') await processInstrumentation('instrumentation.edge', 'edge') @@ -757,7 +810,13 @@ export async function handleEntrypoints({ async function processMiddleware() { const writtenEndpoint = await endpoint.writeToDisk() dev?.hooks.handleWrittenEndpoint(key, writtenEndpoint) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) await manifestLoader.loadMiddlewareManifest('middleware', 'middleware') if (dev) { dev.serverFields.middleware = { @@ -880,6 +939,7 @@ export async function handlePagesErrorRoute({ entrypoints, manifestLoader, rewrites, + logWellKnownErrors, hooks, }: { @@ -887,6 +947,7 @@ export async function handlePagesErrorRoute({ entrypoints: Entrypoints manifestLoader: TurbopackManifestLoader rewrites: SetupOpts['fsChecker']['rewrites'] + logWellKnownErrors: boolean hooks?: HandleRouteTypeHooks // dev }) { @@ -900,7 +961,13 @@ export async function handlePagesErrorRoute({ // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 return { event: HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES } }) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await manifestLoader.loadBuildManifest('_app') await manifestLoader.loadPagesManifest('_app') @@ -914,7 +981,13 @@ export async function handlePagesErrorRoute({ hooks?.subscribeToChanges(key, false, entrypoints.global.document, () => { return { action: HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE } }) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await manifestLoader.loadPagesManifest('_document') @@ -928,7 +1001,13 @@ export async function handlePagesErrorRoute({ // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 return { event: HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES } }) - processIssues(currentEntryIssues, key, writtenEndpoint) + processIssues( + currentEntryIssues, + key, + writtenEndpoint, + false, + logWellKnownErrors + ) } await manifestLoader.loadBuildManifest('_error') await manifestLoader.loadPagesManifest('_error') diff --git a/packages/next/src/server/lib/start-server.ts b/packages/next/src/server/lib/start-server.ts index 48620758f0ef4..13f20677acce0 100644 --- a/packages/next/src/server/lib/start-server.ts +++ b/packages/next/src/server/lib/start-server.ts @@ -322,7 +322,7 @@ export async function startServer( if (process.env.TURBOPACK) { await validateTurboNextConfig({ - ...serverOptions, + dir: serverOptions.dir, isDev: true, }) } From 6d85d652f247398d9e0e935ea89df53bb052b56b Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Apr 2024 11:40:46 +0200 Subject: [PATCH 2/9] Update list of unsupported options --- packages/next/src/lib/turbopack-warning.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 106fa2c614ef9..41823aae260d0 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -48,18 +48,10 @@ const unsupportedTurbopackNextConfigOptions = [ ] // The following will need to be supported by `next build --turbo` -const prodSpecificTurboNextConfigOptions = [ - 'eslint', - 'typescript', +const unsupportedProductionSpecificTurbopackNextConfigOptions = [ 'outputFileTracing', - 'generateBuildId', - 'compress', 'productionBrowserSourceMaps', - 'optimizeFonts', - 'poweredByHeader', - 'staticPageGenerationTimeout', 'reactProductionProfiling', - 'cleanDistDir', 'experimental.turbotrace', 'experimental.outputFileTracingRoot', 'experimental.outputFileTracingExcludes', @@ -149,7 +141,7 @@ export async function validateTurboNextConfig({ ? unsupportedTurbopackNextConfigOptions : [ ...unsupportedTurbopackNextConfigOptions, - ...prodSpecificTurboNextConfigOptions, + ...unsupportedProductionSpecificTurbopackNextConfigOptions, ] for (const key of customKeys) { From 1d15620807b915046dc12b19c366f55fda2c85fe Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Apr 2024 11:50:57 +0200 Subject: [PATCH 3/9] Remove unused import --- packages/next/src/build/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 5c32b5a47de04..907b66d72ada8 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -177,7 +177,6 @@ import { handleRouteType, handlePagesErrorRoute, formatIssue, - printNonFatalIssue, formatNonFatalIssue, } from '../server/dev/turbopack-utils' import { TurbopackManifestLoader } from '../server/dev/turbopack/manifest-loader' From 3a8f1ae98102d50d9d9fc0887f0941fd28020c47 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Apr 2024 11:52:44 +0200 Subject: [PATCH 4/9] Ensure warnings don't break the build --- packages/next/src/build/index.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 907b66d72ada8..ff50276e82692 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -1525,21 +1525,25 @@ export default async function build( pageEntrypoints: currentEntrypoints.page, }) - const issues: { + const errors: { + page: string + message: string + }[] = [] + const warnings: { page: string message: string }[] = [] for (const [page, entryIssues] of currentEntryIssues) { for (const issue of entryIssues.values()) { if (issue.severity !== 'warning') { - issues.push({ + errors.push({ page, message: formatIssue(issue), }) } else { const warningIssue = formatNonFatalIssue(issue) if (warningIssue) { - issues.push({ + warnings.push({ page, message: formatIssue(issue), }) @@ -1548,9 +1552,19 @@ export default async function build( } } - if (issues.length > 0) { + if (warnings.length > 0) { + Log.warn( + `Turbopack build collected ${warnings.length} warnings:\n${warnings + .map((e) => { + return 'Page: ' + e.page + '\n' + e.message + }) + .join('\n')}` + ) + } + + if (errors.length > 0) { throw new Error( - `Turbopack build failed with ${issues.length} issues:\n${issues + `Turbopack build failed with ${errors.length} errors:\n${errors .map((e) => { return 'Page: ' + e.page + '\n' + e.message }) From 1d4fa502c8005d33023d8020710c244566301d55 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Apr 2024 18:22:27 +0200 Subject: [PATCH 5/9] Sourcemaps are always enabled currently --- packages/next/src/lib/turbopack-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 41823aae260d0..4da0d04cee685 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -50,7 +50,7 @@ const unsupportedTurbopackNextConfigOptions = [ // The following will need to be supported by `next build --turbo` const unsupportedProductionSpecificTurbopackNextConfigOptions = [ 'outputFileTracing', - 'productionBrowserSourceMaps', + // 'productionBrowserSourceMaps', 'reactProductionProfiling', 'experimental.turbotrace', 'experimental.outputFileTracingRoot', From 3cb7eb07089003a01d15c6e713a80355322ffd79 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 10 Apr 2024 07:44:26 +0200 Subject: [PATCH 6/9] Use correct phase when loading config --- packages/next/src/lib/turbopack-warning.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 4da0d04cee685..86a635da0eb88 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -2,7 +2,10 @@ import type { NextConfig } from '../server/config-shared' import path from 'path' import loadConfig from '../server/config' import * as Log from '../build/output/log' -import { PHASE_DEVELOPMENT_SERVER } from '../shared/lib/constants' +import { + PHASE_DEVELOPMENT_SERVER, + PHASE_PRODUCTION_BUILD, +} from '../shared/lib/constants' const unsupportedTurbopackNextConfigOptions = [ // is this supported? @@ -88,15 +91,16 @@ export async function validateTurboNextConfig({ let unsupportedConfig: string[] = [] let rawNextConfig: NextConfig = {} + const phase = isDev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_BUILD try { rawNextConfig = interopDefault( - await loadConfig(PHASE_DEVELOPMENT_SERVER, dir, { + await loadConfig(phase, dir, { rawConfig: true, }) ) as NextConfig if (typeof rawNextConfig === 'function') { - rawNextConfig = (rawNextConfig as any)(PHASE_DEVELOPMENT_SERVER, { + rawNextConfig = (rawNextConfig as any)(phase, { defaultConfig, }) } From 28077eecbc90c9474452e4e03aed7673ffb3cfba Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 10 Apr 2024 08:07:53 +0200 Subject: [PATCH 7/9] Fix test --- packages/next/src/lib/turbopack-warning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 86a635da0eb88..c8a6d3b565cac 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -53,11 +53,11 @@ const unsupportedTurbopackNextConfigOptions = [ // The following will need to be supported by `next build --turbo` const unsupportedProductionSpecificTurbopackNextConfigOptions = [ 'outputFileTracing', + // TODO: Support disabling sourcemaps, currently they're always enabled. // 'productionBrowserSourceMaps', 'reactProductionProfiling', 'experimental.turbotrace', 'experimental.outputFileTracingRoot', - 'experimental.outputFileTracingExcludes', 'experimental.outputFileTracingIgnores', 'experimental.outputFileTracingIncludes', ] From bb6fe192e01a2e67bf33f358edc9ad2162ec326b Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 10 Apr 2024 08:40:05 +0200 Subject: [PATCH 8/9] Update based on feedback --- packages/next/src/build/index.ts | 5 ++--- .../next/src/server/dev/turbopack-utils.ts | 18 +++++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index dc462cb73dbf5..c3d1cd5784679 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -177,7 +177,7 @@ import { handleRouteType, handlePagesErrorRoute, formatIssue, - formatNonFatalIssue, + isRelevantWarning, } from '../server/dev/turbopack-utils' import { TurbopackManifestLoader } from '../server/dev/turbopack/manifest-loader' import type { Entrypoints } from '../server/dev/turbopack/types' @@ -1542,8 +1542,7 @@ export default async function build( message: formatIssue(issue), }) } else { - const warningIssue = formatNonFatalIssue(issue) - if (warningIssue) { + if (isRelevantWarning(issue)) { warnings.push({ page, message: formatIssue(issue), diff --git a/packages/next/src/server/dev/turbopack-utils.ts b/packages/next/src/server/dev/turbopack-utils.ts index 04827ea93d38b..ff11e2f840db6 100644 --- a/packages/next/src/server/dev/turbopack-utils.ts +++ b/packages/next/src/server/dev/turbopack-utils.ts @@ -64,20 +64,20 @@ export function isWellKnownError(issue: Issue): boolean { /// Print out an issue to the console which should not block /// the build by throwing out or blocking error overlay. export function printNonFatalIssue(issue: Issue) { - const nonFatalissue = formatNonFatalIssue(issue) - if (nonFatalissue) { + if (isRelevantWarning(issue)) { Log.warn(formatIssue(issue)) } } -export function formatNonFatalIssue(issue: Issue): string | null { - if (issue.severity === 'warning') { - if (!issue.filePath.match(/^(?:.*[\\/])?node_modules(?:[\\/].*)?$/)) { - return formatIssue(issue) - } - } +function isNodeModulesIssue(issue: Issue): boolean { + return ( + issue.severity === 'warning' && + issue.filePath.match(/^(?:.*[\\/])?node_modules(?:[\\/].*)?$/) !== null + ) +} - return null +export function isRelevantWarning(issue: Issue): boolean { + return issue.severity === 'warning' && !isNodeModulesIssue(issue) } export function formatIssue(issue: Issue) { From 87a5bec6da23fff02c86ecf3014e8044d22777b6 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 10 Apr 2024 08:47:53 +0200 Subject: [PATCH 9/9] Rename logWellKnownErrors to logErrors --- packages/next/src/build/index.ts | 8 +- .../src/server/dev/hot-reloader-turbopack.ts | 6 +- .../next/src/server/dev/turbopack-utils.ts | 86 ++++--------------- 3 files changed, 26 insertions(+), 74 deletions(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index c3d1cd5784679..4ded891f673e3 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -1454,7 +1454,7 @@ export default async function build( manifestLoader, nextConfig: config, rewrites: emptyRewritesObjToBeImplemented, - logWellKnownErrors: false, + logErrors: false, }) const progress = createProgress( @@ -1489,7 +1489,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, - logWellKnownErrors: false, + logErrors: false, }) ) } @@ -1505,7 +1505,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, - logWellKnownErrors: false, + logErrors: false, }) ) } @@ -1516,7 +1516,7 @@ export default async function build( entrypoints: currentEntrypoints, manifestLoader, rewrites: emptyRewritesObjToBeImplemented, - logWellKnownErrors: false, + logErrors: false, }) ) await Promise.all(promises) diff --git a/packages/next/src/server/dev/hot-reloader-turbopack.ts b/packages/next/src/server/dev/hot-reloader-turbopack.ts index d6f206aeff6ec..3220403c2a1cb 100644 --- a/packages/next/src/server/dev/hot-reloader-turbopack.ts +++ b/packages/next/src/server/dev/hot-reloader-turbopack.ts @@ -453,7 +453,7 @@ export async function createHotReloaderTurbopack( manifestLoader, nextConfig: opts.nextConfig, rewrites: opts.fsChecker.rewrites, - logWellKnownErrors: true, + logErrors: true, dev: { assetMapper, @@ -779,7 +779,7 @@ export async function createHotReloaderTurbopack( entrypoints: currentEntrypoints, manifestLoader, rewrites: opts.fsChecker.rewrites, - logWellKnownErrors: true, + logErrors: true, hooks: { subscribeToChanges, @@ -832,7 +832,7 @@ export async function createHotReloaderTurbopack( manifestLoader, readyIds, rewrites: opts.fsChecker.rewrites, - logWellKnownErrors: true, + logErrors: true, hooks: { subscribeToChanges, diff --git a/packages/next/src/server/dev/turbopack-utils.ts b/packages/next/src/server/dev/turbopack-utils.ts index ff11e2f840db6..75d6d9a98460e 100644 --- a/packages/next/src/server/dev/turbopack-utils.ts +++ b/packages/next/src/server/dev/turbopack-utils.ts @@ -182,7 +182,7 @@ export function processIssues( key: EntryKey, result: TurbopackResult, throwIssue: boolean, - logWellKnownErrors: boolean + logErrors: boolean ) { const newIssues = new Map() currentEntryIssues.set(key, newIssues) @@ -203,7 +203,7 @@ export function processIssues( if (issue.severity !== 'warning') { relevantIssues.add(formatted) - if (logWellKnownErrors && isWellKnownError(issue)) { + if (logErrors && isWellKnownError(issue)) { Log.error(formatted) } } @@ -304,7 +304,7 @@ export async function handleRouteType({ readyIds, rewrites, hooks, - logWellKnownErrors, + logErrors, }: { dev: boolean page: string @@ -315,7 +315,7 @@ export async function handleRouteType({ entrypoints: Entrypoints manifestLoader: TurbopackManifestLoader rewrites: SetupOpts['fsChecker']['rewrites'] - logWellKnownErrors: boolean + logErrors: boolean readyIds?: ReadyIds // dev @@ -337,7 +337,7 @@ export async function handleRouteType({ key, writtenEndpoint, false, - logWellKnownErrors + logErrors ) } await manifestLoader.loadBuildManifest('_app') @@ -354,7 +354,7 @@ export async function handleRouteType({ key, writtenEndpoint, false, - logWellKnownErrors + logErrors ) } await manifestLoader.loadPagesManifest('_document') @@ -385,7 +385,7 @@ export async function handleRouteType({ serverKey, writtenEndpoint, false, - logWellKnownErrors + logErrors ) } finally { // TODO subscriptions should only be caused by the WebSocket connections @@ -438,13 +438,7 @@ export async function handleRouteType({ pageEntrypoints: entrypoints.page, }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - true, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, true, logErrors) break } @@ -488,13 +482,7 @@ export async function handleRouteType({ pageEntrypoints: entrypoints.page, }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - dev, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, dev, logErrors) break } @@ -517,13 +505,7 @@ export async function handleRouteType({ rewrites, pageEntrypoints: entrypoints.page, }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - true, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, true, logErrors) break } @@ -677,7 +659,7 @@ export async function handleEntrypoints({ manifestLoader, nextConfig, rewrites, - logWellKnownErrors, + logErrors, dev, }: { entrypoints: TurbopackResult @@ -688,7 +670,7 @@ export async function handleEntrypoints({ manifestLoader: TurbopackManifestLoader nextConfig: NextConfigComplete rewrites: SetupOpts['fsChecker']['rewrites'] - logWellKnownErrors: boolean + logErrors: boolean dev?: HandleEntrypointsDevOpts }) { @@ -766,13 +748,7 @@ export async function handleEntrypoints({ const writtenEndpoint = await instrumentation[prop].writeToDisk() dev?.hooks.handleWrittenEndpoint(key, writtenEndpoint) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - false, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, false, logErrors) } await processInstrumentation('instrumentation.nodeJs', 'nodeJs') await processInstrumentation('instrumentation.edge', 'edge') @@ -810,13 +786,7 @@ export async function handleEntrypoints({ async function processMiddleware() { const writtenEndpoint = await endpoint.writeToDisk() dev?.hooks.handleWrittenEndpoint(key, writtenEndpoint) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - false, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, false, logErrors) await manifestLoader.loadMiddlewareManifest('middleware', 'middleware') if (dev) { dev.serverFields.middleware = { @@ -939,7 +909,7 @@ export async function handlePagesErrorRoute({ entrypoints, manifestLoader, rewrites, - logWellKnownErrors, + logErrors, hooks, }: { @@ -947,7 +917,7 @@ export async function handlePagesErrorRoute({ entrypoints: Entrypoints manifestLoader: TurbopackManifestLoader rewrites: SetupOpts['fsChecker']['rewrites'] - logWellKnownErrors: boolean + logErrors: boolean hooks?: HandleRouteTypeHooks // dev }) { @@ -961,13 +931,7 @@ export async function handlePagesErrorRoute({ // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 return { event: HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES } }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - false, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, false, logErrors) } await manifestLoader.loadBuildManifest('_app') await manifestLoader.loadPagesManifest('_app') @@ -981,13 +945,7 @@ export async function handlePagesErrorRoute({ hooks?.subscribeToChanges(key, false, entrypoints.global.document, () => { return { action: HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE } }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - false, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, false, logErrors) } await manifestLoader.loadPagesManifest('_document') @@ -1001,13 +959,7 @@ export async function handlePagesErrorRoute({ // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 return { event: HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES } }) - processIssues( - currentEntryIssues, - key, - writtenEndpoint, - false, - logWellKnownErrors - ) + processIssues(currentEntryIssues, key, writtenEndpoint, false, logErrors) } await manifestLoader.loadBuildManifest('_error') await manifestLoader.loadPagesManifest('_error')