From 310d2cd24fa3f0c0ff720d08e99ca5b2321c5d75 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Thu, 23 Jan 2025 16:57:18 +0100 Subject: [PATCH 1/6] fix #648 --- .../open-next/src/build/createServerBundle.ts | 2 +- .../tests-unit/tests/build/helper.test.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/tests-unit/tests/build/helper.test.ts diff --git a/packages/open-next/src/build/createServerBundle.ts b/packages/open-next/src/build/createServerBundle.ts index 67fcdc879..1d60b3673 100644 --- a/packages/open-next/src/build/createServerBundle.ts +++ b/packages/open-next/src/build/createServerBundle.ts @@ -179,7 +179,7 @@ async function generateBundle( const isBefore13413 = buildHelper.compareSemver(options.nextVersion, "13.4.13") <= 0; const isAfter141 = - buildHelper.compareSemver(options.nextVersion, "14.0.4") >= 0; + buildHelper.compareSemver(options.nextVersion, "14.1") >= 0; const disableRouting = isBefore13413 || config.middleware?.external; diff --git a/packages/tests-unit/tests/build/helper.test.ts b/packages/tests-unit/tests/build/helper.test.ts new file mode 100644 index 000000000..c98e2c102 --- /dev/null +++ b/packages/tests-unit/tests/build/helper.test.ts @@ -0,0 +1,20 @@ +import { compareSemver } from "@opennextjs/aws/build/helper.js"; + +// We don't need to test canary versions, they are stripped out +describe("compareSemver", () => { + it("should return 0 when versions are equal", () => { + expect(compareSemver("1.0.0", "1.0.0")).toBe(0); + }); + + it("should return 1 when first version is greater", () => { + expect(compareSemver("1.0.1", "1.0.0")).toBe(1); + }); + + it("should return -1 when first version is smaller", () => { + expect(compareSemver("1.0.0", "1.0.1")).toBe(-1); + }); + + it("should work with latest", () => { + expect(compareSemver("latest", "1.0.0")).toBe(1); + }); +}); From 1f5c532467f997ca2790b8bcff310003048ed6a6 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Thu, 23 Jan 2025 16:59:36 +0100 Subject: [PATCH 2/6] changeset --- .changeset/unlucky-olives-try.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/unlucky-olives-try.md diff --git a/.changeset/unlucky-olives-try.md b/.changeset/unlucky-olives-try.md new file mode 100644 index 000000000..f0c3040e4 --- /dev/null +++ b/.changeset/unlucky-olives-try.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +use correct version for applying stableIncrementalCache (It failed for next 14.0.4) From acafafb09761e40dd08ba041097f0efc13c21db4 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Thu, 23 Jan 2025 18:27:11 +0100 Subject: [PATCH 3/6] fix incomplete version --- packages/open-next/src/build/helper.ts | 2 +- packages/tests-unit/tests/build/helper.test.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index f6a9ad44e..c56ce2173 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -290,7 +290,7 @@ export function compareSemver(v1: string, v2: string): number { if (major1 !== major2) return major1 - major2; if (minor1 !== minor2) return minor1 - minor2; - return patch1 - patch2; + return (patch1 ?? 0) - (patch2 ?? 0); } export function copyOpenNextConfig( diff --git a/packages/tests-unit/tests/build/helper.test.ts b/packages/tests-unit/tests/build/helper.test.ts index c98e2c102..7cc948968 100644 --- a/packages/tests-unit/tests/build/helper.test.ts +++ b/packages/tests-unit/tests/build/helper.test.ts @@ -17,4 +17,9 @@ describe("compareSemver", () => { it("should work with latest", () => { expect(compareSemver("latest", "1.0.0")).toBe(1); }); + + it("should work with incomplete version", () => { + expect(compareSemver("14.1.0", "14.1")).toBe(0); + expect(compareSemver("14.1", "14.1.0")).toBe(0); + }); }); From d6cb38139695120c652a300eefc2f17aa35f96f5 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Thu, 23 Jan 2025 19:01:33 +0100 Subject: [PATCH 4/6] fix issue, add comment and throw on incorrect params --- packages/open-next/src/build/helper.ts | 18 +++++++++++++++--- packages/tests-unit/tests/build/helper.test.ts | 11 ++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index c56ce2173..d473171b4 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -275,6 +275,15 @@ export function getNextVersion(appPath: string): string { return version.split("-")[0]; } +/** + * Compare two semver versions. + * @param v1 - First version. Can be "latest", otherwise it should be a valid semver version in the format of `major.minor.patch`. Usually is the next version from the package.json without canary suffix. If minor or patch are missing, they are considered 0. + * @param v2 - Second version. Should not be "latest", it should be a valid semver version in the format of `major.minor.patch`. If minor or patch are missing, they are considered 0. + * @see + * - + * @example + * compareSemver("1.0.0", "1.0.0") // 0 + */ export function compareSemver(v1: string, v2: string): number { if (v1 === "latest") return 1; if (/^[^\d]/.test(v1)) { @@ -285,12 +294,15 @@ export function compareSemver(v1: string, v2: string): number { // biome-ignore lint/style/noParameterAssign: v2 = v2.substring(1); } - const [major1, minor1, patch1] = v1.split(".").map(Number); - const [major2, minor2, patch2] = v2.split(".").map(Number); + const [major1, minor1 = 0, patch1 = 0] = v1.split(".").map(Number); + const [major2, minor2 = 0, patch2 = 0] = v2.split(".").map(Number); + if (Number.isNaN(major1) || Number.isNaN(major2)) { + throw new Error("The major version is required."); + } if (major1 !== major2) return major1 - major2; if (minor1 !== minor2) return minor1 - minor2; - return (patch1 ?? 0) - (patch2 ?? 0); + return patch1 - patch2; } export function copyOpenNextConfig( diff --git a/packages/tests-unit/tests/build/helper.test.ts b/packages/tests-unit/tests/build/helper.test.ts index 7cc948968..87a51de84 100644 --- a/packages/tests-unit/tests/build/helper.test.ts +++ b/packages/tests-unit/tests/build/helper.test.ts @@ -18,8 +18,17 @@ describe("compareSemver", () => { expect(compareSemver("latest", "1.0.0")).toBe(1); }); - it("should work with incomplete version", () => { + it("should work with incomplete version for patch", () => { expect(compareSemver("14.1.0", "14.1")).toBe(0); expect(compareSemver("14.1", "14.1.0")).toBe(0); }); + + it("should work with incomplete version for minor", () => { + expect(compareSemver("14.0.0", "14")).toBe(0); + }); + + it("should throw if the major version is missing", () => { + expect(() => compareSemver("incorrect", "14.0.0")).toThrow(); + expect(() => compareSemver("14.0.0", "latest")).toThrow(); + }); }); From 8be865cae72235d6c99c6d75f3f4edbf25f5d78b Mon Sep 17 00:00:00 2001 From: conico974 Date: Thu, 23 Jan 2025 23:21:33 +0100 Subject: [PATCH 5/6] Update packages/open-next/src/build/helper.ts Co-authored-by: Victor Berchet --- packages/open-next/src/build/helper.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index d473171b4..c8ddcccdf 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -277,6 +277,7 @@ export function getNextVersion(appPath: string): string { /** * Compare two semver versions. + * * @param v1 - First version. Can be "latest", otherwise it should be a valid semver version in the format of `major.minor.patch`. Usually is the next version from the package.json without canary suffix. If minor or patch are missing, they are considered 0. * @param v2 - Second version. Should not be "latest", it should be a valid semver version in the format of `major.minor.patch`. If minor or patch are missing, they are considered 0. * @see From 8e31e845a6fe60f7d8ba3dede1d90684a94c3893 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Thu, 23 Jan 2025 23:22:56 +0100 Subject: [PATCH 6/6] review --- .changeset/unlucky-olives-try.md | 2 +- packages/open-next/src/build/helper.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.changeset/unlucky-olives-try.md b/.changeset/unlucky-olives-try.md index f0c3040e4..d9c6df435 100644 --- a/.changeset/unlucky-olives-try.md +++ b/.changeset/unlucky-olives-try.md @@ -2,4 +2,4 @@ "@opennextjs/aws": patch --- -use correct version for applying stableIncrementalCache (It failed for next 14.0.4) +fix: stableIncrementalCache is only used for Next.js >= 14.1 diff --git a/packages/open-next/src/build/helper.ts b/packages/open-next/src/build/helper.ts index c8ddcccdf..819b5de45 100644 --- a/packages/open-next/src/build/helper.ts +++ b/packages/open-next/src/build/helper.ts @@ -280,8 +280,6 @@ export function getNextVersion(appPath: string): string { * * @param v1 - First version. Can be "latest", otherwise it should be a valid semver version in the format of `major.minor.patch`. Usually is the next version from the package.json without canary suffix. If minor or patch are missing, they are considered 0. * @param v2 - Second version. Should not be "latest", it should be a valid semver version in the format of `major.minor.patch`. If minor or patch are missing, they are considered 0. - * @see - * - * @example * compareSemver("1.0.0", "1.0.0") // 0 */