From a0a8008f055448a2b8d15b2f36b15d16055cb414 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Mon, 16 Dec 2024 11:04:02 +0000 Subject: [PATCH 1/3] fix: make sure that the `__import_unsupported` patch is applied in cloudflare as well --- .../src/build/edge/createEdgeBundle.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/open-next/src/build/edge/createEdgeBundle.ts b/packages/open-next/src/build/edge/createEdgeBundle.ts index b53177689..f5ab5a046 100644 --- a/packages/open-next/src/build/edge/createEdgeBundle.ts +++ b/packages/open-next/src/build/edge/createEdgeBundle.ts @@ -130,6 +130,15 @@ globalThis.Buffer = Buffer; import {AsyncLocalStorage} from "node:async_hooks"; globalThis.AsyncLocalStorage = AsyncLocalStorage; + +const defaultDefineProperty = Object.defineProperty; +Object.defineProperty = function(o, p, a) { + if(p=== '__import_unsupported' && Boolean(globalThis.__import_unsupported)) { + return; + } + return defaultDefineProperty(o, p, a); +}; + ${ isInCloudfare ? "" @@ -137,14 +146,6 @@ globalThis.AsyncLocalStorage = AsyncLocalStorage; const require = (await import("node:module")).createRequire(import.meta.url); const __filename = (await import("node:url")).fileURLToPath(import.meta.url); const __dirname = (await import("node:path")).dirname(__filename); - - const defaultDefineProperty = Object.defineProperty; - Object.defineProperty = function(o, p, a) { - if(p=== '__import_unsupported' && Boolean(globalThis.__import_unsupported)) { - return; - } - return defaultDefineProperty(o, p, a); - }; ` } ${additionalInject ?? ""} From 21b9b5e11fcb85251b223752613b059b2c885199 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Mon, 16 Dec 2024 11:34:41 +0000 Subject: [PATCH 2/3] add comment --- .../open-next/src/build/edge/createEdgeBundle.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/open-next/src/build/edge/createEdgeBundle.ts b/packages/open-next/src/build/edge/createEdgeBundle.ts index f5ab5a046..782b07599 100644 --- a/packages/open-next/src/build/edge/createEdgeBundle.ts +++ b/packages/open-next/src/build/edge/createEdgeBundle.ts @@ -131,6 +131,18 @@ globalThis.Buffer = Buffer; import {AsyncLocalStorage} from "node:async_hooks"; globalThis.AsyncLocalStorage = AsyncLocalStorage; +${ + '' + /** + * Next.js sets this `__import_unsupported` on `globalThis` (with `configurable: false`): + * https://github.com/vercel/next.js/blob/5b7833e3/packages/next/src/server/web/globals.ts#L94-L98 + * + * It does so in both the middleware and the main server, so if the middleware runs in the same place + * as the main handler this code gets run twice triggering a runtime error. + * + * For this reason we need to patch `Object.defineProperty` to avoid this issue. + */ +} const defaultDefineProperty = Object.defineProperty; Object.defineProperty = function(o, p, a) { if(p=== '__import_unsupported' && Boolean(globalThis.__import_unsupported)) { From ebc9c49043f58d64e9cf0acf1178bd1246aabe13 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Mon, 16 Dec 2024 11:52:55 +0000 Subject: [PATCH 3/3] fix lint issue --- packages/open-next/src/build/edge/createEdgeBundle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/open-next/src/build/edge/createEdgeBundle.ts b/packages/open-next/src/build/edge/createEdgeBundle.ts index 782b07599..5ba1fe502 100644 --- a/packages/open-next/src/build/edge/createEdgeBundle.ts +++ b/packages/open-next/src/build/edge/createEdgeBundle.ts @@ -132,7 +132,7 @@ import {AsyncLocalStorage} from "node:async_hooks"; globalThis.AsyncLocalStorage = AsyncLocalStorage; ${ - '' + "" /** * Next.js sets this `__import_unsupported` on `globalThis` (with `configurable: false`): * https://github.com/vercel/next.js/blob/5b7833e3/packages/next/src/server/web/globals.ts#L94-L98