@openrewrite/recipes-nodejs 0.47.0 → 0.47.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,12 +2,12 @@ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
2
  export declare class IncreaseNodeEngineVersion extends Recipe {
3
3
  readonly name = "org.openrewrite.node.migrate.increase-node-engine-version";
4
4
  readonly displayName = "Increase Node.js engine version";
5
- readonly description = "Increases the upper bound of the `engines.node` version range in package.json to allow the specified Node.js version.";
5
+ readonly description: string;
6
6
  version: string;
7
7
  constructor(options: {
8
8
  version: string;
9
9
  });
10
10
  editor(): Promise<TreeVisitor<any, ExecutionContext>>;
11
11
  }
12
- export declare function increaseUpperBound(range: string, targetVersion: number): string;
12
+ export declare function raiseMinimumVersion(range: string, targetVersion: number): string;
13
13
  //# sourceMappingURL=increase-node-engine-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"increase-node-engine-version.d.ts","sourceRoot":"","sources":["../../src/migrate/increase-node-engine-version.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAU,MAAM,EAAgB,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAIjG,qBAAa,yBAA0B,SAAQ,MAAM;IACjD,QAAQ,CAAC,IAAI,+DAA+D;IAC5E,QAAQ,CAAC,WAAW,qCAAqC;IACzD,QAAQ,CAAC,WAAW,2HAA2H;IAQ/I,OAAO,EAAG,MAAM,CAAC;gBAEL,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAKlC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA2C9D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CA+D/E"}
1
+ {"version":3,"file":"increase-node-engine-version.d.ts","sourceRoot":"","sources":["../../src/migrate/increase-node-engine-version.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAU,MAAM,EAAgB,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAIjG,qBAAa,yBAA0B,SAAQ,MAAM;IACjD,QAAQ,CAAC,IAAI,+DAA+D;IAC5E,QAAQ,CAAC,WAAW,qCAAqC;IACzD,QAAQ,CAAC,WAAW,SAGY;IAQhC,OAAO,EAAG,MAAM,CAAC;gBAEL,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAKlC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAgD9D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAwDhF"}
@@ -49,7 +49,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
49
49
  };
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
51
  exports.IncreaseNodeEngineVersion = void 0;
52
- exports.increaseUpperBound = increaseUpperBound;
52
+ exports.raiseMinimumVersion = raiseMinimumVersion;
53
53
  const rewrite_1 = require("@openrewrite/rewrite");
54
54
  const json_1 = require("@openrewrite/rewrite/json");
55
55
  const semver = __importStar(require("semver"));
@@ -58,7 +58,10 @@ class IncreaseNodeEngineVersion extends rewrite_1.Recipe {
58
58
  super();
59
59
  this.name = "org.openrewrite.node.migrate.increase-node-engine-version";
60
60
  this.displayName = "Increase Node.js engine version";
61
- this.description = "Increases the upper bound of the `engines.node` version range in package.json to allow the specified Node.js version.";
61
+ this.description = "Raises the lower bound of the `engines.node` version range in package.json to the specified " +
62
+ "Node.js version, performing a hard cutover that drops support for older, end-of-life versions " +
63
+ "(`22.x` → `24.x`, `>= 22` → `>= 24`). The original constraint style is preserved where possible and the " +
64
+ "version is never lowered.";
62
65
  this.version = options.version;
63
66
  }
64
67
  editor() {
@@ -83,12 +86,15 @@ class IncreaseNodeEngineVersion extends rewrite_1.Recipe {
83
86
  if (typeof nodeRange !== 'string') {
84
87
  return doc;
85
88
  }
86
- const updatedRange = increaseUpperBound(nodeRange, targetVersion);
89
+ const updatedRange = raiseMinimumVersion(nodeRange, targetVersion);
87
90
  if (updatedRange === nodeRange) {
88
91
  return doc;
89
92
  }
90
- packageJson.engines.node = updatedRange;
91
- const modifiedContent = JSON.stringify(packageJson, null, 2);
93
+ const nodeMemberRegex = /("engines"\s*:\s*\{[\s\S]*?"node"\s*:\s*)"([^"]+)"/;
94
+ const modifiedContent = content.replace(nodeMemberRegex, `$1${JSON.stringify(updatedRange)}`);
95
+ if (modifiedContent === content) {
96
+ return doc;
97
+ }
92
98
  const parsed = yield new json_1.JsonParser({}).parseOne({
93
99
  text: modifiedContent,
94
100
  sourcePath: doc.sourcePath
@@ -109,56 +115,56 @@ __decorate([
109
115
  example: "22"
110
116
  })
111
117
  ], IncreaseNodeEngineVersion.prototype, "version", void 0);
112
- function increaseUpperBound(range, targetVersion) {
118
+ function raiseMinimumVersion(range, targetVersion) {
119
+ const trimmed = range.trim();
120
+ let minVersion = null;
113
121
  try {
114
- if (semver.satisfies(`${targetVersion}.0.0`, range)) {
115
- return range;
116
- }
122
+ minVersion = semver.minVersion(trimmed);
117
123
  }
118
124
  catch (_a) {
119
125
  }
120
- const hyphenMatch = range.match(/^(.+\s+-\s+)(\d+)(\.0\.0)?$/);
121
- if (hyphenMatch) {
122
- return `${hyphenMatch[1]}${targetVersion}${hyphenMatch[3] || ''}`;
126
+ if (minVersion && minVersion.major >= targetVersion) {
127
+ return range;
123
128
  }
124
- if (range.includes('||') && !/[<>]/.test(range)) {
125
- const separatorMatch = range.match(/(\s*\|\|\s*)/);
126
- const separator = separatorMatch ? separatorMatch[1] : ' || ';
127
- const lastPart = range.split(/\s*\|\|\s*/).pop().trim();
128
- let newPart;
129
- if (lastPart.startsWith('^')) {
130
- newPart = `^${targetVersion}`;
131
- }
132
- else if (lastPart.startsWith('~')) {
133
- newPart = `~${targetVersion}`;
134
- }
135
- else if (lastPart.endsWith('.x')) {
136
- newPart = `${targetVersion}.x`;
137
- }
138
- else {
139
- newPart = `${targetVersion}`;
129
+ if (trimmed.includes('||') && !/[<>]/.test(trimmed)) {
130
+ const parts = trimmed.split(/\s*\|\|\s*/).map(p => p.trim());
131
+ const kept = parts.filter(p => {
132
+ try {
133
+ const m = semver.minVersion(p);
134
+ return m !== null && m.major >= targetVersion;
135
+ }
136
+ catch (_a) {
137
+ return false;
138
+ }
139
+ });
140
+ if (kept.length > 0) {
141
+ return kept.join(' || ');
140
142
  }
141
- return `${range}${separator}${newPart}`;
142
- }
143
- const upperBoundRegex = /(?<!>)(<=?)(\d+)(\.0\.0)?(?=[^<]*$)/;
144
- const upperMatch = range.match(upperBoundRegex);
145
- if (upperMatch) {
146
- const op = upperMatch[1];
147
- const suffix = upperMatch[3] || '';
148
- const newMajor = op === '<' ? targetVersion + 1 : targetVersion;
149
- return range.replace(upperBoundRegex, `${op}${newMajor}${suffix}`);
143
+ return floorTerm(parts[parts.length - 1], targetVersion);
150
144
  }
151
- const caretMatch = range.match(/^\^(\d+)(\.0\.0)?$/);
152
- if (caretMatch) {
153
- return `${range} || ^${targetVersion}${caretMatch[2] || ''}`;
154
- }
155
- const tildeMatch = range.match(/^~(\d+)(\.0\.0)?$/);
156
- if (tildeMatch) {
157
- return `${range} || ~${targetVersion}${tildeMatch[2] || ''}`;
145
+ const hyphenMatch = trimmed.match(/^(.+?)\s+-\s+(.+)$/);
146
+ if (hyphenMatch) {
147
+ const upper = hyphenMatch[2].trim();
148
+ const upperMajor = parseInt(upper, 10);
149
+ if (!Number.isNaN(upperMajor) && upperMajor < targetVersion) {
150
+ return `>=${targetVersion}`;
151
+ }
152
+ return `${targetVersion} - ${upper}`;
158
153
  }
159
- if (/^\d+\.x$/.test(range)) {
160
- return `${range} || ${targetVersion}.x`;
154
+ if (/</.test(trimmed)) {
155
+ const upperMatch = trimmed.match(/(<=?)\s*(\d+)(?:\.\d+)*/);
156
+ let upper = '';
157
+ if (upperMatch) {
158
+ const op = upperMatch[1];
159
+ const upperMajor = parseInt(upperMatch[2], 10);
160
+ const admitsTarget = op === '<=' ? upperMajor >= targetVersion : upperMajor > targetVersion;
161
+ upper = admitsTarget ? ` ${op}${upperMatch[2]}` : '';
162
+ }
163
+ return `>=${targetVersion}${upper}`;
161
164
  }
162
- return range;
165
+ return floorTerm(trimmed, targetVersion);
166
+ }
167
+ function floorTerm(part, targetVersion) {
168
+ return part.replace(/\d+/, String(targetVersion));
163
169
  }
164
170
  //# sourceMappingURL=increase-node-engine-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"increase-node-engine-version.js","sourceRoot":"","sources":["../../src/migrate/increase-node-engine-version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"increase-node-engine-version.js","sourceRoot":"","sources":["../../src/migrate/increase-node-engine-version.ts"],"names":[],"mappings":"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"}