From da97b156dfd3c6188b3207174f9ee76aa3791769 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Mon, 25 Nov 2024 12:48:17 +0100 Subject: [PATCH 1/2] refactor(cloudflare): rename the "cloudflare" wrapper to "cloudflare-edge" --- .changeset/green-news-give.md | 5 +++++ .../open-next/src/build/createMiddleware.ts | 2 +- .../src/build/edge/createEdgeBundle.ts | 7 ++----- packages/open-next/src/build/helper.ts | 20 ++++++++++++++++++- .../open-next/src/build/validateConfig.ts | 3 ++- .../open-next/src/helpers/withCloudflare.ts | 4 ++-- .../{cloudflare.ts => cloudflare-edge.ts} | 2 +- ...dflare-streaming.ts => cloudflare-node.ts} | 2 +- packages/open-next/src/plugins/resolve.ts | 7 ++++++- packages/open-next/src/types/open-next.ts | 4 +++- 10 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 .changeset/green-news-give.md rename packages/open-next/src/overrides/wrappers/{cloudflare.ts => cloudflare-edge.ts} (98%) rename packages/open-next/src/overrides/wrappers/{cloudflare-streaming.ts => cloudflare-node.ts} (98%) diff --git a/.changeset/green-news-give.md b/.changeset/green-news-give.md new file mode 100644 index 000000000..ee8130df7 --- /dev/null +++ b/.changeset/green-news-give.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +refactor(cloudflare): rename the "cloudflare" wrapper to "cloudflare-edge" diff --git a/packages/open-next/src/build/createMiddleware.ts b/packages/open-next/src/build/createMiddleware.ts index 13a957ce0..b6e8cdcd2 100644 --- a/packages/open-next/src/build/createMiddleware.ts +++ b/packages/open-next/src/build/createMiddleware.ts @@ -44,7 +44,7 @@ export async function createMiddleware( buildHelper.copyOpenNextConfig( options.buildDir, outputPath, - config.middleware.override?.wrapper === "cloudflare", + await buildHelper.isEdgeRuntime(config.middleware.override), ); // Bundle middleware diff --git a/packages/open-next/src/build/edge/createEdgeBundle.ts b/packages/open-next/src/build/edge/createEdgeBundle.ts index 5b53ebfa5..daaa08194 100644 --- a/packages/open-next/src/build/edge/createEdgeBundle.ts +++ b/packages/open-next/src/build/edge/createEdgeBundle.ts @@ -18,7 +18,7 @@ import logger from "../../logger.js"; import { openNextEdgePlugins } from "../../plugins/edge.js"; import { openNextReplacementPlugin } from "../../plugins/replacement.js"; import { openNextResolvePlugin } from "../../plugins/resolve.js"; -import type { BuildOptions } from "../helper.js"; +import { type BuildOptions, isEdgeRuntime } from "../helper.js"; import { copyOpenNextConfig, esbuildAsync } from "../helper.js"; interface BuildEdgeBundleOptions { @@ -52,10 +52,7 @@ export async function buildEdgeBundle({ onlyBuildOnce, name, }: BuildEdgeBundleOptions) { - const isInCloudfare = - typeof overrides?.wrapper === "string" - ? overrides.wrapper === "cloudflare" - : (await overrides?.wrapper?.())?.edgeRuntime; + const isInCloudfare = await isEdgeRuntime(overrides); await esbuildAsync( { entryPoints: [entrypoint], diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index 2bb269ae5..c302ba6b5 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -5,7 +5,10 @@ import url from "node:url"; import type { BuildOptions as ESBuildOptions } from "esbuild"; import { build as buildAsync, buildSync } from "esbuild"; -import type { OpenNextConfig } from "types/open-next.js"; +import type { + DefaultOverrideOptions, + OpenNextConfig, +} from "types/open-next.js"; import logger from "../logger.js"; @@ -356,3 +359,18 @@ export function initOutputDir(options: BuildOptions) { fs.mkdirSync(buildDir, { recursive: true }); fs.cpSync(options.tempBuildDir, buildDir, { recursive: true }); } + +/** + * @returns Whether the edge runtime is used + */ +export async function isEdgeRuntime( + overrides: DefaultOverrideOptions | undefined, +) { + if (!overrides?.wrapper) { + return false; + } + if (typeof overrides.wrapper === "string") { + return overrides.wrapper.startsWith("cloudflare"); + } + return (await overrides?.wrapper?.())?.edgeRuntime; +} diff --git a/packages/open-next/src/build/validateConfig.ts b/packages/open-next/src/build/validateConfig.ts index b45178e58..250d02ccd 100644 --- a/packages/open-next/src/build/validateConfig.ts +++ b/packages/open-next/src/build/validateConfig.ts @@ -17,7 +17,8 @@ const compatibilityMatrix: Record = { ], "aws-lambda-streaming": ["aws-apigw-v2"], cloudflare: ["edge"], - "cloudflare-streaming": ["edge"], + "cloudflare-edge": ["edge"], + "cloudflare-node": ["edge"], node: ["node"], dummy: [], }; diff --git a/packages/open-next/src/helpers/withCloudflare.ts b/packages/open-next/src/helpers/withCloudflare.ts index db0096364..e75e98274 100644 --- a/packages/open-next/src/helpers/withCloudflare.ts +++ b/packages/open-next/src/helpers/withCloudflare.ts @@ -94,7 +94,7 @@ export function withCloudflare< routes: [fn.routes], patterns: [fn.patterns], override: { - wrapper: "cloudflare", + wrapper: "cloudflare-edge", converter: "edge", }, } @@ -110,7 +110,7 @@ export function withCloudflare< external: true, originResolver: "pattern-env", override: { - wrapper: "cloudflare", + wrapper: "cloudflare-edge", converter: "edge", }, }, diff --git a/packages/open-next/src/overrides/wrappers/cloudflare.ts b/packages/open-next/src/overrides/wrappers/cloudflare-edge.ts similarity index 98% rename from packages/open-next/src/overrides/wrappers/cloudflare.ts rename to packages/open-next/src/overrides/wrappers/cloudflare-edge.ts index 0c22f9964..b8f4ba514 100644 --- a/packages/open-next/src/overrides/wrappers/cloudflare.ts +++ b/packages/open-next/src/overrides/wrappers/cloudflare-edge.ts @@ -62,7 +62,7 @@ const handler: WrapperHandler< export default { wrapper: handler, - name: "cloudflare", + name: "cloudflare-edge", supportStreaming: true, edgeRuntime: true, } satisfies Wrapper; diff --git a/packages/open-next/src/overrides/wrappers/cloudflare-streaming.ts b/packages/open-next/src/overrides/wrappers/cloudflare-node.ts similarity index 98% rename from packages/open-next/src/overrides/wrappers/cloudflare-streaming.ts rename to packages/open-next/src/overrides/wrappers/cloudflare-node.ts index 79184c059..f48f81fd9 100644 --- a/packages/open-next/src/overrides/wrappers/cloudflare-streaming.ts +++ b/packages/open-next/src/overrides/wrappers/cloudflare-node.ts @@ -67,6 +67,6 @@ const handler: WrapperHandler = export default { wrapper: handler, - name: "cloudflare-streaming", + name: "cloudflare-node", supportStreaming: true, } satisfies Wrapper; diff --git a/packages/open-next/src/plugins/resolve.ts b/packages/open-next/src/plugins/resolve.ts index aa0b9d35b..5630f1cf3 100644 --- a/packages/open-next/src/plugins/resolve.ts +++ b/packages/open-next/src/plugins/resolve.ts @@ -84,14 +84,19 @@ export function openNextResolvePlugin({ build.onLoad({ filter: /core(\/|\\)resolve\.js/g }, async (args) => { let contents = readFileSync(args.path, "utf-8"); const overridesEntries = Object.entries(overrides ?? {}); - for (const [overrideName, overrideValue] of overridesEntries) { + for (let [overrideName, overrideValue] of overridesEntries) { if (!overrideValue) { continue; } + if (overrideName === "wrapper" && overrideValue === "cloudflare") { + // "cloudflare" is deprecated and replaced by "cloudflare-edge". + overrideValue = "cloudflare-edge"; + } const folder = nameToFolder[overrideName as keyof typeof nameToFolder]; const defaultOverride = defaultOverrides[overrideName as keyof typeof defaultOverrides]; + contents = contents.replace( `../overrides/${folder}/${defaultOverride}.js`, `../overrides/${folder}/${getOverrideOrDummy(overrideValue)}.js`, diff --git a/packages/open-next/src/types/open-next.ts b/packages/open-next/src/types/open-next.ts index 5d1599354..9d045958e 100644 --- a/packages/open-next/src/types/open-next.ts +++ b/packages/open-next/src/types/open-next.ts @@ -80,8 +80,10 @@ export type IncludedWrapper = | "aws-lambda" | "aws-lambda-streaming" | "node" + // @deprecated - use "cloudflare-edge" instead. | "cloudflare" - | "cloudflare-streaming" + | "cloudflare-edge" + | "cloudflare-node" | "dummy"; export type IncludedConverter = From e7ed235d26eae4cd1ac1baeeea3b4255b2486ffd Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Mon, 25 Nov 2024 14:46:17 +0100 Subject: [PATCH 2/2] fixup! cloudflare-node is not edge --- packages/open-next/src/build/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index c302ba6b5..45efcd8b1 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -370,7 +370,7 @@ export async function isEdgeRuntime( return false; } if (typeof overrides.wrapper === "string") { - return overrides.wrapper.startsWith("cloudflare"); + return ["cloudflare-edge", "cloudflare"].includes(overrides.wrapper); } return (await overrides?.wrapper?.())?.edgeRuntime; }