diff --git a/.changeset/twenty-tools-stare.md b/.changeset/twenty-tools-stare.md new file mode 100644 index 000000000..fd6cf51c6 --- /dev/null +++ b/.changeset/twenty-tools-stare.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +add(patches): Drop babel from getting pulled in by node-environment diff --git a/packages/open-next/src/build/createServerBundle.ts b/packages/open-next/src/build/createServerBundle.ts index ec71501c7..743383c29 100644 --- a/packages/open-next/src/build/createServerBundle.ts +++ b/packages/open-next/src/build/createServerBundle.ts @@ -206,6 +206,7 @@ async function generateBundle( patches.patchEnvVars, patches.patchBackgroundRevalidation, patches.patchUseCacheForISR, + patches.patchNodeEnvironment, ...additionalCodePatches, ]); diff --git a/packages/open-next/src/build/patch/patches/index.ts b/packages/open-next/src/build/patch/patches/index.ts index bd46d6532..64edf33ee 100644 --- a/packages/open-next/src/build/patch/patches/index.ts +++ b/packages/open-next/src/build/patch/patches/index.ts @@ -7,3 +7,4 @@ export { } from "./patchFetchCacheISR.js"; export { patchFetchCacheSetMissingWaitUntil } from "./patchFetchCacheWaitUntil.js"; export { patchBackgroundRevalidation } from "./patchBackgroundRevalidation.js"; +export { patchNodeEnvironment } from "./patchNodeEnvironment.js"; diff --git a/packages/open-next/src/build/patch/patches/patchNextServer.ts b/packages/open-next/src/build/patch/patches/patchNextServer.ts index 109ebe4d6..932531761 100644 --- a/packages/open-next/src/build/patch/patches/patchNextServer.ts +++ b/packages/open-next/src/build/patch/patches/patchNextServer.ts @@ -53,17 +53,6 @@ fix: |- `; } -/** - * Drops `require("./node-environment-extensions/error-inspect");` - */ -export const errorInspectRule = ` -rule: - pattern: require("./node-environment-extensions/error-inspect"); -fix: |- - // Removed by OpenNext - // require("./node-environment-extensions/error-inspect"); -`; - const pathFilter = getCrossPlatformPathRegex( String.raw`/next/dist/server/next-server\.js$`, { @@ -91,12 +80,6 @@ const babelPatches = [ contentFilter: /runEdgeFunction\(/, patchCode: createPatchCode(createEmptyBodyRule("runEdgeFunction")), }, - // Drop `error-inspect` that pulls babel - { - pathFilter, - contentFilter: /error-inspect/, - patchCode: createPatchCode(errorInspectRule), - }, ]; export const patchNextServer: CodePatcher = { diff --git a/packages/open-next/src/build/patch/patches/patchNodeEnvironment.ts b/packages/open-next/src/build/patch/patches/patchNodeEnvironment.ts new file mode 100644 index 000000000..f286e3fb7 --- /dev/null +++ b/packages/open-next/src/build/patch/patches/patchNodeEnvironment.ts @@ -0,0 +1,33 @@ +import { getCrossPlatformPathRegex } from "utils/regex.js"; +import { createPatchCode } from "../astCodePatcher.js"; +import type { CodePatcher } from "../codePatcher.js"; + +/** + * Drops `require("./node-environment-extensions/error-inspect");` + * + * This is to avoid pulling babel (~4MB) + */ +export const rule = ` +rule: + pattern: require("./node-environment-extensions/error-inspect"); +fix: |- + // Removed by OpenNext + // require("./node-environment-extensions/error-inspect"); +`; + +export const patchNodeEnvironment: CodePatcher = { + name: "patch-node-environment-error-inspect", + patches: [ + { + pathFilter: getCrossPlatformPathRegex( + String.raw`/next/dist/server/node-environment\.js$`, + { + escape: false, + }, + ), + contentFilter: /error-inspect/, + patchCode: createPatchCode(rule), + versions: ">=15.0.0", + }, + ], +}; diff --git a/packages/tests-unit/tests/build/patch/patches/patchNextServer.test.ts b/packages/tests-unit/tests/build/patch/patches/patchNextServer.test.ts index d6f4dd362..73fdd5d52 100644 --- a/packages/tests-unit/tests/build/patch/patches/patchNextServer.test.ts +++ b/packages/tests-unit/tests/build/patch/patches/patchNextServer.test.ts @@ -2,7 +2,6 @@ import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js"; import { createEmptyBodyRule, disablePreloadingRule, - errorInspectRule, removeMiddlewareManifestRule, } from "@opennextjs/aws/build/patch/patches/patchNextServer.js"; import { describe, it } from "vitest"; @@ -943,41 +942,5 @@ class NextNodeServer extends _baseserver.default { " `); }); - - test("Error Inspect", () => { - const code = ` -// This file should be imported before any others. It sets up the environment -// for later imports to work properly. -"use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -require("./node-environment-baseline"); -require("./node-environment-extensions/error-inspect"); -require("./node-environment-extensions/random"); -require("./node-environment-extensions/date"); -require("./node-environment-extensions/web-crypto"); -require("./node-environment-extensions/node-crypto"); -//# sourceMappingURL=node-environment.js.map -}`; - - expect(patchCode(code, errorInspectRule)).toMatchInlineSnapshot(` - "// This file should be imported before any others. It sets up the environment - // for later imports to work properly. - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - require("./node-environment-baseline"); - // Removed by OpenNext - // require("./node-environment-extensions/error-inspect"); - require("./node-environment-extensions/random"); - require("./node-environment-extensions/date"); - require("./node-environment-extensions/web-crypto"); - require("./node-environment-extensions/node-crypto"); - //# sourceMappingURL=node-environment.js.map - }" - `); - }); }); }); diff --git a/packages/tests-unit/tests/build/patch/patches/patchNodeEnvironment.test.ts b/packages/tests-unit/tests/build/patch/patches/patchNodeEnvironment.test.ts new file mode 100644 index 000000000..cce0cba9c --- /dev/null +++ b/packages/tests-unit/tests/build/patch/patches/patchNodeEnvironment.test.ts @@ -0,0 +1,48 @@ +import { rule } from "@opennextjs/aws/build/patch/patches/patchNodeEnvironment.js"; +import { computePatchDiff } from "./util.js"; + +test("nodeEnvironment", () => { + const code = ` +// This file should be imported before any others. It sets up the environment +// for later imports to work properly. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +require("./node-environment-baseline"); +require("./node-environment-extensions/error-inspect"); +require("./node-environment-extensions/random"); +require("./node-environment-extensions/date"); +require("./node-environment-extensions/web-crypto"); +require("./node-environment-extensions/node-crypto"); +if (process.env.NODE_ENV === 'development') { + require('./node-environment-extensions/console-dev'); +} + +//# sourceMappingURL=node-environment.js.map`; + expect( + computePatchDiff("node-environment.js", code, rule), + ).toMatchInlineSnapshot(` + "Index: node-environment.js + =================================================================== + --- node-environment.js + +++ node-environment.js + @@ -1,13 +1,13 @@ + - + // This file should be imported before any others. It sets up the environment + // for later imports to work properly. + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + require("./node-environment-baseline"); + -require("./node-environment-extensions/error-inspect"); + +// Removed by OpenNext + +// require("./node-environment-extensions/error-inspect"); + require("./node-environment-extensions/random"); + require("./node-environment-extensions/date"); + require("./node-environment-extensions/web-crypto"); + require("./node-environment-extensions/node-crypto"); + " + `); +});