diff --git a/.changeset/selfish-suits-exercise.md b/.changeset/selfish-suits-exercise.md new file mode 100644 index 000000000..a152231fa --- /dev/null +++ b/.changeset/selfish-suits-exercise.md @@ -0,0 +1,5 @@ +--- +"open-next": patch +--- + +Fix Cache Support for Next@14.1.0 diff --git a/packages/open-next/src/adapters/plugins/14.1/util.ts b/packages/open-next/src/adapters/plugins/14.1/util.ts new file mode 100644 index 000000000..684c1aab8 --- /dev/null +++ b/packages/open-next/src/adapters/plugins/14.1/util.ts @@ -0,0 +1,31 @@ +import { NextConfig } from "../../config"; +import { debug } from "../../logger.js"; + +//#override requestHandler +// @ts-ignore +export const requestHandler = new NextServer.default({ + conf: { + ...NextConfig, + // Next.js compression should be disabled because of a bug in the bundled + // `compression` package — https://github.com/vercel/next.js/issues/11669 + compress: false, + // By default, Next.js uses local disk to store ISR cache. We will use + // our own cache handler to store the cache on S3. + cacheHandler: `${process.env.LAMBDA_TASK_ROOT}/cache.cjs`, + cacheMaxMemorySize: 0, + experimental: { + ...NextConfig.experimental, + // This uses the request.headers.host as the URL + // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/next-server.ts#L1749-L1754 + trustHostHeader: true, + }, + }, + customServer: false, + dev: false, + dir: __dirname, +}).getRequestHandler(); +//#endOverride + +//#override requireHooks +debug("No need to override require hooks with next 13.4.20+"); +//#endOverride diff --git a/packages/open-next/src/build.ts b/packages/open-next/src/build.ts index ccfbfe9d1..7a8bb164e 100755 --- a/packages/open-next/src/build.ts +++ b/packages/open-next/src/build.ts @@ -673,6 +673,8 @@ async function createServerBundle(monorepoRoot: string, streaming = false) { : undefined; if (compareSemver(options.nextVersion, "13.5.1") >= 0) { + const isAfter141 = compareSemver(options.nextVersion, "14.1.0") >= 0; + const utilReplacement = isAfter141 ? "./14.1/util.js" : "./13.5/util.js"; plugins = [ openNextPlugin({ name: "opennext-13.5-serverHandler", @@ -682,7 +684,10 @@ async function createServerBundle(monorepoRoot: string, streaming = false) { openNextPlugin({ name: "opennext-13.5-util", target: /plugins\/util\.js/g, - replacements: ["./13.5/util.js", "./util.replacement.js"], + replacements: [ + utilReplacement, + ...(isAfter141 ? [] : ["./util.replacement.js"]), + ], }), openNextPlugin({ name: "opennext-13.5-default",