From a5e98244625a670e69ba0d9440a3468c971e5edc Mon Sep 17 00:00:00 2001 From: Nicolas Dorseuil Date: Sun, 29 Mar 2026 16:32:00 +0200 Subject: [PATCH 1/2] Remove unnecessary cache interception options from configuration files --- .../e2e/app-pages-router/open-next.config.ts | 1 - .../e2e/app-router/open-next.config.ts | 1 - .../e2e/experimental/open-next.config.ts | 1 - .../e2e/pages-router/open-next.config.ts | 1 - examples/app-pages-router/open-next.config.ts | 4 -- examples/app-router/open-next.config.ts | 2 - examples/experimental/open-next.config.ts | 5 -- examples/pages-router/open-next.config.ts | 5 -- packages/cloudflare/src/api/config.ts | 20 +----- packages/cloudflare/src/cli/build/build.ts | 65 +------------------ .../cli/build/open-next/createServerBundle.ts | 21 ++---- packages/cloudflare/src/cli/commands/build.ts | 12 +--- packages/open-next/src/adapters/middleware.ts | 2 - packages/open-next/src/build.ts | 11 +--- packages/open-next/src/build/createAssets.ts | 4 +- .../open-next/src/build/createMiddleware.ts | 1 - .../open-next/src/build/createServerBundle.ts | 20 ++---- .../src/build/edge/createEdgeBundle.ts | 17 +---- .../build/middleware/buildNodeMiddleware.ts | 16 +---- packages/open-next/src/core/routingHandler.ts | 2 +- packages/open-next/src/types/open-next.ts | 15 ----- 21 files changed, 25 insertions(+), 201 deletions(-) diff --git a/examples-cloudflare/e2e/app-pages-router/open-next.config.ts b/examples-cloudflare/e2e/app-pages-router/open-next.config.ts index e2d3305a..b255c484 100644 --- a/examples-cloudflare/e2e/app-pages-router/open-next.config.ts +++ b/examples-cloudflare/e2e/app-pages-router/open-next.config.ts @@ -5,5 +5,4 @@ import memoryQueue from "@opennextjs/cloudflare/overrides/queue/memory-queue"; export default defineCloudflareConfig({ incrementalCache: r2IncrementalCache, queue: memoryQueue, - enableCacheInterception: true, }); diff --git a/examples-cloudflare/e2e/app-router/open-next.config.ts b/examples-cloudflare/e2e/app-router/open-next.config.ts index 6710edf4..ecd737e2 100644 --- a/examples-cloudflare/e2e/app-router/open-next.config.ts +++ b/examples-cloudflare/e2e/app-router/open-next.config.ts @@ -21,7 +21,6 @@ const baseConfig = defineCloudflareConfig({ }), // `CACHE_PURGE_ZONE_ID` and `CACHE_PURGE_API_TOKEN` are required to enable cache purge // cachePurge: purgeCache({ type: "durableObject" }), - enableCacheInterception: true, queue: queueCache(doQueue), }); diff --git a/examples-cloudflare/e2e/experimental/open-next.config.ts b/examples-cloudflare/e2e/experimental/open-next.config.ts index 703917a3..c656743b 100644 --- a/examples-cloudflare/e2e/experimental/open-next.config.ts +++ b/examples-cloudflare/e2e/experimental/open-next.config.ts @@ -14,5 +14,4 @@ export default defineCloudflareConfig({ }, }), queue: doQueue, - enableCacheInterception: true, }); diff --git a/examples-cloudflare/e2e/pages-router/open-next.config.ts b/examples-cloudflare/e2e/pages-router/open-next.config.ts index bed0b85e..b255c484 100644 --- a/examples-cloudflare/e2e/pages-router/open-next.config.ts +++ b/examples-cloudflare/e2e/pages-router/open-next.config.ts @@ -4,6 +4,5 @@ import memoryQueue from "@opennextjs/cloudflare/overrides/queue/memory-queue"; export default defineCloudflareConfig({ incrementalCache: r2IncrementalCache, - enableCacheInterception: true, queue: memoryQueue, }); diff --git a/examples/app-pages-router/open-next.config.ts b/examples/app-pages-router/open-next.config.ts index 647c4af8..f32adfba 100644 --- a/examples/app-pages-router/open-next.config.ts +++ b/examples/app-pages-router/open-next.config.ts @@ -26,10 +26,6 @@ export default { }, loader: "fs-dev", }, - dangerous: { - enableCacheInterception: true, - useAdapterOutputs: true, - }, // You can override the build command here so that you don't have to rebuild next every time you make a change // buildCommand: "echo 'No build command'", } satisfies OpenNextConfig; diff --git a/examples/app-router/open-next.config.ts b/examples/app-router/open-next.config.ts index 453d762b..311aa5bb 100644 --- a/examples/app-router/open-next.config.ts +++ b/examples/app-router/open-next.config.ts @@ -13,8 +13,6 @@ export default { dangerous: { middlewareHeadersOverrideNextConfigHeaders: true, - useAdapterOutputs: true, - enableCacheInterception: true, }, imageOptimization: { diff --git a/examples/experimental/open-next.config.ts b/examples/experimental/open-next.config.ts index 1184d582..63d82c31 100644 --- a/examples/experimental/open-next.config.ts +++ b/examples/experimental/open-next.config.ts @@ -19,11 +19,6 @@ export default { loader: "fs-dev", }, - dangerous: { - enableCacheInterception: true, - useAdapterOutputs: true, - }, - // You can override the build command here so that you don't have to rebuild next every time you make a change //buildCommand: "echo 'No build command'", } satisfies OpenNextConfig; diff --git a/examples/pages-router/open-next.config.ts b/examples/pages-router/open-next.config.ts index 3f32e2cf..e3fd064f 100644 --- a/examples/pages-router/open-next.config.ts +++ b/examples/pages-router/open-next.config.ts @@ -17,11 +17,6 @@ export default { loader: "fs-dev", }, - dangerous: { - enableCacheInterception: true, - useAdapterOutputs: true, - }, - // You can override the build command here so that you don't have to rebuild next every time you make a change //buildCommand: "echo 'No build command'", }; diff --git a/packages/cloudflare/src/api/config.ts b/packages/cloudflare/src/api/config.ts index 59d06a28..13d1ee6b 100644 --- a/packages/cloudflare/src/api/config.ts +++ b/packages/cloudflare/src/api/config.ts @@ -42,13 +42,6 @@ export type CloudflareOverrides = { */ cachePurge?: Override; - /** - * Enable cache interception - * Should be `false` when PPR is used - * @default false - */ - enableCacheInterception?: boolean; - /** * Route preloading behavior. * Using a value other than "none" can result in higher CPU usage on cold starts. @@ -64,14 +57,7 @@ export type CloudflareOverrides = { * @returns the OpenNext configuration object */ export function defineCloudflareConfig(config: CloudflareOverrides = {}): OpenNextConfig { - const { - incrementalCache, - tagCache, - queue, - cachePurge, - enableCacheInterception = true, - routePreloadingBehavior = "none", - } = config; + const { incrementalCache, tagCache, queue, cachePurge, routePreloadingBehavior = "none" } = config; return { default: { @@ -91,10 +77,6 @@ export function defineCloudflareConfig(config: CloudflareOverrides = {}): OpenNe cloudflare: { useWorkerdCondition: true, }, - dangerous: { - enableCacheInterception, - useAdapterOutputs: true, - }, middleware: { external: true, override: { diff --git a/packages/cloudflare/src/cli/build/build.ts b/packages/cloudflare/src/cli/build/build.ts index 505fadca..f006f429 100644 --- a/packages/cloudflare/src/cli/build/build.ts +++ b/packages/cloudflare/src/cli/build/build.ts @@ -1,25 +1,10 @@ import { buildNextjsApp, setStandaloneBuildMode } from "@opennextjs/aws/build/buildNextApp.js"; -import { compileCache } from "@opennextjs/aws/build/compileCache.js"; -import { createCacheAssets, createStaticAssets } from "@opennextjs/aws/build/createAssets.js"; -import { createMiddleware } from "@opennextjs/aws/build/createMiddleware.js"; import * as buildHelper from "@opennextjs/aws/build/helper.js"; -import { patchOriginalNextConfig } from "@opennextjs/aws/build/patch/patches/index.js"; import { printHeader } from "@opennextjs/aws/build/utils.js"; import logger from "@opennextjs/aws/logger.js"; -import type { Unstable_Config } from "wrangler"; -import { OpenNextConfig } from "../../api/config.js"; import type { ProjectOptions } from "../project-options.js"; -import { bundleServer } from "./bundle-server.js"; -import { compileCacheAssetsManifestSqlFile } from "./open-next/compile-cache-assets-manifest.js"; -import { compileEnvFiles } from "./open-next/compile-env-files.js"; -import { compileImages } from "./open-next/compile-images.js"; -import { compileInit } from "./open-next/compile-init.js"; -import { compileSkewProtection } from "./open-next/compile-skew-protection.js"; -import { compileDurableObjects } from "./open-next/compileDurableObjects.js"; -import { createServerBundle } from "./open-next/createServerBundle.js"; -import { useNodeMiddleware } from "./utils/middleware.js"; import { getVersion } from "./utils/version.js"; /** @@ -31,12 +16,7 @@ import { getVersion } from "./utils/version.js"; * @param config The OpenNext config * @param projectOpts The options for the project */ -export async function build( - options: buildHelper.BuildOptions, - config: OpenNextConfig, - projectOpts: ProjectOptions, - wranglerConfig: Unstable_Config -): Promise { +export async function build(options: buildHelper.BuildOptions, projectOpts: ProjectOptions): Promise { // Do not minify the code so that we can apply string replacement patch. options.minify = false; @@ -61,48 +41,7 @@ export async function build( buildNextjsApp(options); } - if (config.dangerous?.useAdapterOutputs) { - logger.info("Using adapter outputs for building OpenNext bundle."); - return; - } - - // Make sure no Node.js middleware is used - if (useNodeMiddleware(options)) { - logger.error("Node.js middleware is not currently supported. Consider switching to Edge Middleware."); - process.exit(1); - } - - // Generate deployable bundle - printHeader("Generating bundle"); - - await patchOriginalNextConfig(options); - - compileCache(options); - compileEnvFiles(options); - await compileInit(options, wranglerConfig); - await compileImages(options); - await compileSkewProtection(options, config); - - // Compile middleware - await createMiddleware(options, { forceOnlyBuildOnce: true }); - - createStaticAssets(options, { useBasePath: true }); - - if (config.dangerous?.disableIncrementalCache !== true) { - const { useTagCache, metaFiles } = createCacheAssets(options); - - if (useTagCache) { - compileCacheAssetsManifestSqlFile(options, metaFiles); - } - } - - await createServerBundle(options); - - await compileDurableObjects(options); - - await bundleServer(options, projectOpts); - - logger.info("OpenNext build complete."); + logger.info("Using adapter outputs for building OpenNext bundle."); } async function ensureNextjsVersionSupported({ nextVersion }: buildHelper.BuildOptions) { diff --git a/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts b/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts index 010526ab..4d990f52 100644 --- a/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts +++ b/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts @@ -7,7 +7,6 @@ import path from "node:path"; import { loadMiddlewareManifest } from "@opennextjs/aws/adapters/config/util.js"; import { compileCache } from "@opennextjs/aws/build/compileCache.js"; import { copyAdapterFiles } from "@opennextjs/aws/build/copyAdapterFiles.js"; -import { copyTracedFiles } from "@opennextjs/aws/build/copyTracedFiles.js"; import { copyMiddlewareResources, generateEdgeBundle } from "@opennextjs/aws/build/edge/createEdgeBundle.js"; import * as buildHelper from "@opennextjs/aws/build/helper.js"; import { installDependencies } from "@opennextjs/aws/build/installDeps.js"; @@ -187,23 +186,11 @@ async function generateBundle( let manifests: any = {}; // Copy all necessary traced files - if (config.dangerous?.useAdapterOutputs) { - if (!buildCtx) { - throw new Error("should not happen"); - } - tracedFiles = await copyAdapterFiles(options, name, packagePath, buildCtx.outputs); - //TODO: we should load manifests here - } else { - const oldTracedFileOutput = await copyTracedFiles({ - buildOutputPath: appBuildOutputPath, - packagePath, - outputDir: outputPath, - routes: fnOptions.routes ?? ["app/page.tsx"], - skipServerFiles: options.config.dangerous?.useAdapterOutputs === true, - }); - tracedFiles = oldTracedFileOutput.tracedFiles; - manifests = oldTracedFileOutput.manifests; + if (!buildCtx) { + throw new Error("should not happen"); } + tracedFiles = await copyAdapterFiles(options, name, packagePath, buildCtx.outputs); + //TODO: we should load manifests here // TODO(vicb): what should `nodePackages` be for the adapter // if (getOpenNextConfig(options).cloudflare?.useWorkerdCondition !== false) { diff --git a/packages/cloudflare/src/cli/commands/build.ts b/packages/cloudflare/src/cli/commands/build.ts index f1ef4e2a..0c1ca544 100644 --- a/packages/cloudflare/src/cli/commands/build.ts +++ b/packages/cloudflare/src/cli/commands/build.ts @@ -11,7 +11,6 @@ import { getNormalizedOptions, nextAppDir, printHeaders, - readWranglerConfig, withWranglerOptions, withWranglerPassthroughArgs, } from "./utils.js"; @@ -36,11 +35,8 @@ async function buildCommand( const projectOpts = { ...args, minify: !args.noMinify, sourceDir: nextAppDir }; - if (config.dangerous?.useAdapterOutputs) { - console.log("Using adapter outputs for building OpenNext bundle."); - const require = createRequire(import.meta.url); - process.env.NEXT_ADAPTER_PATH = require.resolve("../adapter.js"); - } + const require = createRequire(import.meta.url); + process.env.NEXT_ADAPTER_PATH = require.resolve("../adapter.js"); // Ask whether a `wrangler.jsonc` should be created when no config file exists. // Note: We don't ask when a custom config file is specified via `--config` @@ -49,9 +45,7 @@ async function buildCommand( await createWranglerConfigIfNotExistent(projectOpts); } - const wranglerConfig = await readWranglerConfig(args); - - await buildImpl(options, config, projectOpts, wranglerConfig); + await buildImpl(options, projectOpts); } /** diff --git a/packages/open-next/src/adapters/middleware.ts b/packages/open-next/src/adapters/middleware.ts index ae952870..295ec809 100644 --- a/packages/open-next/src/adapters/middleware.ts +++ b/packages/open-next/src/adapters/middleware.ts @@ -40,13 +40,11 @@ const defaultHandler = async ( const assetResolver = await resolveAssetResolver(middlewareConfig?.assetResolver); - //#override includeCacheInMiddleware globalThis.tagCache = await resolveTagCache(middlewareConfig?.override?.tagCache); globalThis.queue = await resolveQueue(middlewareConfig?.override?.queue); globalThis.incrementalCache = await resolveIncrementalCache(middlewareConfig?.override?.incrementalCache); - //#endOverride const requestId = Math.random().toString(36); diff --git a/packages/open-next/src/build.ts b/packages/open-next/src/build.ts index 5b23759d..5ec2c2be 100755 --- a/packages/open-next/src/build.ts +++ b/packages/open-next/src/build.ts @@ -47,17 +47,12 @@ export async function build(openNextConfigPath?: string, nodeExternals?: string) // Build Next.js app printHeader("Building Next.js app"); setStandaloneBuildMode(options); - if (config.dangerous?.useAdapterOutputs) { - logger.info("Using adapter outputs for building OpenNext bundle."); - process.env.NEXT_ADAPTER_PATH = require.resolve("./adapter.js"); - } + logger.info("Using adapter outputs for building OpenNext bundle."); + process.env.NEXT_ADAPTER_PATH = require.resolve("./adapter.js"); buildHelper.initOutputDir(options); buildNextjsApp(options); - if (config.dangerous?.useAdapterOutputs) { - logger.info("Using adapter outputs for building OpenNext bundle."); - return; - } + return; // Generate deployable bundle printHeader("Generating bundle"); diff --git a/packages/open-next/src/build/createAssets.ts b/packages/open-next/src/build/createAssets.ts index 309800dc..4ad81bbd 100644 --- a/packages/open-next/src/build/createAssets.ts +++ b/packages/open-next/src/build/createAssets.ts @@ -88,9 +88,7 @@ export function createCacheAssets(options: buildHelper.BuildOptions) { const buildId = buildHelper.getBuildId(options); let useTagCache = false; - const dotNextPath = options.config.dangerous?.useAdapterOutputs - ? appBuildOutputPath - : path.join(appBuildOutputPath, ".next/standalone", packagePath); + const dotNextPath = appBuildOutputPath; const outputCachePath = path.join(outputDir, "cache", buildId); fs.mkdirSync(outputCachePath, { recursive: true }); diff --git a/packages/open-next/src/build/createMiddleware.ts b/packages/open-next/src/build/createMiddleware.ts index a5e6fb39..6c1de5e8 100644 --- a/packages/open-next/src/build/createMiddleware.ts +++ b/packages/open-next/src/build/createMiddleware.ts @@ -67,7 +67,6 @@ export async function createMiddleware( originResolver: config.middleware.originResolver, }, defaultConverter: "aws-cloudfront", - includeCache: config.dangerous?.enableCacheInterception, additionalExternals: config.edgeExternals, onlyBuildOnce: forceOnlyBuildOnce === true, name: "middleware", diff --git a/packages/open-next/src/build/createServerBundle.ts b/packages/open-next/src/build/createServerBundle.ts index 9f2106d8..ca4dd4e9 100644 --- a/packages/open-next/src/build/createServerBundle.ts +++ b/packages/open-next/src/build/createServerBundle.ts @@ -16,7 +16,7 @@ import { getCrossPlatformPathRegex } from "../utils/regex.js"; import { compileCache } from "./compileCache.js"; import { copyAdapterFiles } from "./copyAdapterFiles.js"; -import { copyTracedFiles, getManifests } from "./copyTracedFiles.js"; +import { getManifests } from "./copyTracedFiles.js"; import { copyMiddlewareResources, generateEdgeBundle } from "./edge/createEdgeBundle.js"; import * as buildHelper from "./helper.js"; import { installDependencies } from "./installDeps.js"; @@ -174,23 +174,11 @@ async function generateBundle( buildHelper.copyEnvFile(appBuildOutputPath, packagePath, outputPath); let tracedFiles: string[] = []; - let manifests: ReturnType | Record = {}; + let manifests: ReturnType = {} as ReturnType; // Copy all necessary traced files - if (config.dangerous?.useAdapterOutputs) { - tracedFiles = await copyAdapterFiles(options, name, packagePath, nextOutputs!); - //TODO: we should load manifests here - } else { - const oldTracedFileOutput = await copyTracedFiles({ - buildOutputPath: appBuildOutputPath, - packagePath, - outputDir: outputPath, - routes: fnOptions.routes ?? ["app/page.tsx"], - skipServerFiles: options.config.dangerous?.useAdapterOutputs === true, - }); - tracedFiles = oldTracedFileOutput.tracedFiles; - manifests = oldTracedFileOutput.manifests; - } + tracedFiles = await copyAdapterFiles(options, name, packagePath, nextOutputs!); + //TODO: we should load manifests here const additionalCodePatches = codeCustomization?.additionalCodePatches ?? []; diff --git a/packages/open-next/src/build/edge/createEdgeBundle.ts b/packages/open-next/src/build/edge/createEdgeBundle.ts index 22137f80..5d7370aa 100644 --- a/packages/open-next/src/build/edge/createEdgeBundle.ts +++ b/packages/open-next/src/build/edge/createEdgeBundle.ts @@ -35,7 +35,6 @@ interface BuildEdgeBundleOptions { overrides?: Override; defaultConverter?: IncludedConverter; additionalInject?: string; - includeCache?: boolean; additionalExternals?: string[]; onlyBuildOnce?: boolean; name: string; @@ -50,7 +49,6 @@ export async function buildEdgeBundle({ defaultConverter, overrides, additionalInject, - includeCache, additionalExternals, onlyBuildOnce, name, @@ -77,23 +75,14 @@ export async function buildEdgeBundle({ overrides: { wrapper: override("wrapper") ?? "aws-lambda", converter: override("converter") ?? defaultConverter, - ...(includeCache - ? { - tagCache: override("tagCache") ?? "dynamodb-lite", - incrementalCache: override("incrementalCache") ?? "s3-lite", - queue: override("queue") ?? "sqs-lite", - } - : {}), + tagCache: override("tagCache") ?? "dynamodb-lite", + incrementalCache: override("incrementalCache") ?? "s3-lite", + queue: override("queue") ?? "sqs-lite", originResolver: override("originResolver") ?? "pattern-env", proxyExternalRequest: override("proxyExternalRequest") ?? "node", }, fnName: name, }), - openNextReplacementPlugin({ - name: "externalMiddlewareOverrides", - target: getCrossPlatformPathRegex("adapters/middleware.js"), - deletes: includeCache ? [] : ["includeCacheInMiddleware"], - }), openNextExternalMiddlewarePlugin(path.join(options.openNextDistDir, "core/edgeFunctionHandler.js")), openNextEdgePlugins({ middlewareInfo, diff --git a/packages/open-next/src/build/middleware/buildNodeMiddleware.ts b/packages/open-next/src/build/middleware/buildNodeMiddleware.ts index ace00ee4..8b4a2c74 100644 --- a/packages/open-next/src/build/middleware/buildNodeMiddleware.ts +++ b/packages/open-next/src/build/middleware/buildNodeMiddleware.ts @@ -34,7 +34,6 @@ export async function buildExternalNodeMiddleware(options: buildHelper.BuildOpti ...config.middleware.override, originResolver: config.middleware.originResolver, }; - const includeCache = config.dangerous?.enableCacheInterception; const packagePath = buildHelper.getPackagePath(options); // TODO: change this so that we don't copy unnecessary files @@ -62,23 +61,14 @@ export async function buildExternalNodeMiddleware(options: buildHelper.BuildOpti overrides: { wrapper: override("wrapper") ?? "aws-lambda", converter: override("converter") ?? "aws-cloudfront", - ...(includeCache - ? { - tagCache: override("tagCache") ?? "dynamodb-lite", - incrementalCache: override("incrementalCache") ?? "s3-lite", - queue: override("queue") ?? "sqs-lite", - } - : {}), + tagCache: override("tagCache") ?? "dynamodb-lite", + incrementalCache: override("incrementalCache") ?? "s3-lite", + queue: override("queue") ?? "sqs-lite", originResolver: override("originResolver") ?? "pattern-env", proxyExternalRequest: override("proxyExternalRequest") ?? "node", }, fnName: "middleware", }), - openNextReplacementPlugin({ - name: "externalMiddlewareOverrides", - target: getCrossPlatformPathRegex("adapters/middleware.js"), - deletes: includeCache ? [] : ["includeCacheInMiddleware"], - }), openNextExternalMiddlewarePlugin( path.join(options.openNextDistDir, "core", "nodeMiddlewareHandler.js") ), diff --git a/packages/open-next/src/core/routingHandler.ts b/packages/open-next/src/core/routingHandler.ts index fa8e3159..9ea7c68d 100644 --- a/packages/open-next/src/core/routingHandler.ts +++ b/packages/open-next/src/core/routingHandler.ts @@ -212,7 +212,7 @@ export default async function routingHandler( const resolvedRoutes: ResolvedRoute[] = [...foundStaticRoute, ...foundDynamicRoute]; - if (globalThis.openNextConfig.dangerous?.enableCacheInterception && !isInternalResult(eventOrResult)) { + if (!isInternalResult(eventOrResult)) { debug("Cache interception enabled"); const cacheInterceptionResult = await cacheInterceptor(eventOrResult); if (isInternalResult(cacheInterceptionResult)) { diff --git a/packages/open-next/src/types/open-next.ts b/packages/open-next/src/types/open-next.ts index 6372a24c..8216e491 100644 --- a/packages/open-next/src/types/open-next.ts +++ b/packages/open-next/src/types/open-next.ts @@ -99,13 +99,6 @@ export interface DangerousOptions { * @default false */ disableIncrementalCache?: boolean; - /** - * Enable the cache interception. - * Every request will go through the cache interceptor, if it is found in the cache, it will be returned without going through NextServer. - * Not every feature is covered by the cache interceptor and it should fallback to the NextServer if the cache is not found. - * @default false - */ - enableCacheInterception?: boolean; /** * Function to determine which headers or cookies takes precedence. * By default, the middleware headers and cookies will override the handler headers and cookies. @@ -123,14 +116,6 @@ export interface DangerousOptions { * @default false */ middlewareHeadersOverrideNextConfigHeaders?: boolean; - - /** - * Whether to use the outputs from Next.js adapter API. - * This is a very experimental feature as it may not be stabilized in Next.js yet. - * This will be the default in the future once Next.js adapter API is stabilized. - * @default false - */ - useAdapterOutputs?: boolean; } export type BaseOverride = { From 9bcf6438502f9e54ef3563401ebc9810e46e6a96 Mon Sep 17 00:00:00 2001 From: Nicolas Dorseuil Date: Sun, 29 Mar 2026 17:54:39 +0200 Subject: [PATCH 2/2] review --- packages/open-next/src/build.ts | 28 ------------------- .../open-next/src/build/createServerBundle.ts | 8 +++++- packages/open-next/src/core/routingHandler.ts | 2 +- 3 files changed, 8 insertions(+), 30 deletions(-) diff --git a/packages/open-next/src/build.ts b/packages/open-next/src/build.ts index 5ec2c2be..315a1e2b 100755 --- a/packages/open-next/src/build.ts +++ b/packages/open-next/src/build.ts @@ -53,32 +53,4 @@ export async function build(openNextConfigPath?: string, nodeExternals?: string) buildNextjsApp(options); return; - - // Generate deployable bundle - printHeader("Generating bundle"); - - // Patch the original Next.js config - await patchOriginalNextConfig(options); - - // Compile cache.ts - compileCache(options); - - // Compile middleware - await createMiddleware(options); - - createStaticAssets(options); - - if (config.dangerous?.disableIncrementalCache !== true) { - const { useTagCache } = createCacheAssets(options); - if (useTagCache) { - await compileTagCacheProvider(options); - } - } - - await createServerBundle(options); - await createRevalidationBundle(options); - await createImageOptimizationBundle(options); - await createWarmerBundle(options); - await generateOutput(options); - logger.info("OpenNext build complete."); } diff --git a/packages/open-next/src/build/createServerBundle.ts b/packages/open-next/src/build/createServerBundle.ts index ca4dd4e9..694015d8 100644 --- a/packages/open-next/src/build/createServerBundle.ts +++ b/packages/open-next/src/build/createServerBundle.ts @@ -177,7 +177,13 @@ async function generateBundle( let manifests: ReturnType = {} as ReturnType; // Copy all necessary traced files - tracedFiles = await copyAdapterFiles(options, name, packagePath, nextOutputs!); + if (!nextOutputs) { + throw new Error( + "createServerBundle was called without adapter outputs. " + + "Please ensure NextAdapterOutputs is provided to createServerBundle." + ); + } + tracedFiles = await copyAdapterFiles(options, name, packagePath, nextOutputs); //TODO: we should load manifests here const additionalCodePatches = codeCustomization?.additionalCodePatches ?? []; diff --git a/packages/open-next/src/core/routingHandler.ts b/packages/open-next/src/core/routingHandler.ts index 9ea7c68d..232f1d67 100644 --- a/packages/open-next/src/core/routingHandler.ts +++ b/packages/open-next/src/core/routingHandler.ts @@ -213,7 +213,7 @@ export default async function routingHandler( const resolvedRoutes: ResolvedRoute[] = [...foundStaticRoute, ...foundDynamicRoute]; if (!isInternalResult(eventOrResult)) { - debug("Cache interception enabled"); + debug("Attempting cache interception"); const cacheInterceptionResult = await cacheInterceptor(eventOrResult); if (isInternalResult(cacheInterceptionResult)) { applyMiddlewareHeaders(cacheInterceptionResult, headers);