diff --git a/.changeset/red-houses-remain.md b/.changeset/red-houses-remain.md new file mode 100644 index 000000000..26a6ce67a --- /dev/null +++ b/.changeset/red-houses-remain.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +fix `extractVersionedField` to always extract when no version is specified diff --git a/packages/open-next/src/build/patch/codePatcher.ts b/packages/open-next/src/build/patch/codePatcher.ts index ad93ca0d4..a36aa6f8b 100644 --- a/packages/open-next/src/build/patch/codePatcher.ts +++ b/packages/open-next/src/build/patch/codePatcher.ts @@ -99,26 +99,38 @@ export function extractVersionedField( const result: T[] = []; for (const field of fields) { - const { before, after } = parseVersions(field.versions); - if ( - before && - after && - buildHelper.compareSemver(version, "<=", before) && - buildHelper.compareSemver(version, ">=", after) - ) { - result.push(field.field); - } else if ( - before && - !after && - buildHelper.compareSemver(version, "<=", before) - ) { - result.push(field.field); - } else if ( - after && - !before && - buildHelper.compareSemver(version, ">=", after) - ) { + // No versions specified, the patch always apply + if (!field.versions) { result.push(field.field); + continue; + } + + const { before, after } = parseVersions(field.versions); + + // range + if (before && after) { + if ( + buildHelper.compareSemver(version, "<=", before) && + buildHelper.compareSemver(version, ">=", after) + ) { + result.push(field.field); + } + continue; + } + + // before only + if (before) { + if (buildHelper.compareSemver(version, "<=", before)) { + result.push(field.field); + } + continue; + } + + // after only + if (after) { + if (buildHelper.compareSemver(version, ">=", after)) { + result.push(field.field); + } } } return result; diff --git a/packages/open-next/src/plugins/content-updater.ts b/packages/open-next/src/plugins/content-updater.ts index e62df50bd..52da86489 100644 --- a/packages/open-next/src/plugins/content-updater.ts +++ b/packages/open-next/src/plugins/content-updater.ts @@ -13,6 +13,8 @@ import { extractVersionedField, } from "../build/patch/codePatcher.js"; +export type * from "esbuild"; + /** * The callbacks returns either an updated content or undefined if the content is unchanged. */ diff --git a/packages/tests-unit/tests/build/patch/codePatcher.test.ts b/packages/tests-unit/tests/build/patch/codePatcher.test.ts index 52577cd36..88a3726c6 100644 --- a/packages/tests-unit/tests/build/patch/codePatcher.test.ts +++ b/packages/tests-unit/tests/build/patch/codePatcher.test.ts @@ -55,6 +55,12 @@ describe("extractVersionedField", () => { expect(result).toEqual([]); }); + it("should return the field when versions is not specified", () => { + const result = extractVersionedField([{ field: 0 }], "15.1.0"); + + expect(result).toEqual([0]); + }); + it("should throw an error if a single version range is invalid because of a space before", () => { expect(() => extractVersionedField([{ versions: "<= 15.0.0", field: 0 }], "15.0.0"),