@openrewrite/recipes-nodejs 0.37.0-20260104-170507 → 0.37.0-20260106-083133

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.
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
42
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
43
+ return new (P || (P = Promise))(function (resolve, reject) {
44
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
45
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
46
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
47
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
48
+ });
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.RemoveRedundantOverrides = void 0;
52
+ const rewrite_1 = require("@openrewrite/rewrite");
53
+ const json_1 = require("@openrewrite/rewrite/json");
54
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
55
+ const semver = __importStar(require("semver"));
56
+ const npm_utils_1 = require("./npm-utils");
57
+ class RemoveRedundantOverrides extends rewrite_1.ScanningRecipe {
58
+ constructor(options) {
59
+ var _a;
60
+ super();
61
+ this.name = "org.openrewrite.node.security.remove-redundant-overrides";
62
+ this.displayName = "Remove redundant dependency overrides";
63
+ this.description = "Removes overrides/resolutions from package.json that are redundant " +
64
+ "because the dependency tree already resolves to the overridden version or higher.";
65
+ this.dryRun = (_a = options === null || options === void 0 ? void 0 : options.dryRun) !== null && _a !== void 0 ? _a : false;
66
+ }
67
+ initialValue(_ctx) {
68
+ return {
69
+ projects: new Map(),
70
+ redundantOverrides: new Map(),
71
+ analysisComplete: false
72
+ };
73
+ }
74
+ scanner(acc) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const recipe = this;
77
+ return new class extends rewrite_1.TreeVisitor {
78
+ accept(tree, _ctx) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ var _a, _b;
81
+ if (!(0, json_1.isJson)(tree) || tree.kind !== json_1.Json.Kind.Document) {
82
+ return tree;
83
+ }
84
+ const doc = tree;
85
+ if (!doc.sourcePath.endsWith('package.json')) {
86
+ return doc;
87
+ }
88
+ const marker = (0, javascript_1.findNodeResolutionResult)(doc);
89
+ if (!marker) {
90
+ return doc;
91
+ }
92
+ const pm = (_a = marker.packageManager) !== null && _a !== void 0 ? _a : "Npm";
93
+ const content = yield rewrite_1.TreePrinters.print(doc);
94
+ let packageJson;
95
+ try {
96
+ packageJson = JSON.parse(content);
97
+ }
98
+ catch (_c) {
99
+ return doc;
100
+ }
101
+ const overrides = recipe.extractOverrides(packageJson, pm);
102
+ if (overrides.length === 0) {
103
+ return doc;
104
+ }
105
+ const configFiles = {};
106
+ const projectNpmrc = (_b = marker.npmrcConfigs) === null || _b === void 0 ? void 0 : _b.find(c => c.scope === "Project");
107
+ if (projectNpmrc) {
108
+ const lines = Object.entries(projectNpmrc.properties)
109
+ .map(([key, value]) => `${key}=${value}`);
110
+ configFiles['.npmrc'] = lines.join('\n');
111
+ }
112
+ acc.projects.set(doc.sourcePath, {
113
+ packageJsonPath: doc.sourcePath,
114
+ originalPackageJson: content,
115
+ packageManager: pm,
116
+ overrides,
117
+ configFiles: Object.keys(configFiles).length > 0 ? configFiles : undefined
118
+ });
119
+ return doc;
120
+ });
121
+ }
122
+ };
123
+ });
124
+ }
125
+ editorWithData(acc) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const recipe = this;
128
+ if (!acc.analysisComplete) {
129
+ for (const [projectPath, project] of acc.projects) {
130
+ const redundant = yield recipe.findRedundantOverrides(project);
131
+ if (redundant.size > 0) {
132
+ acc.redundantOverrides.set(projectPath, redundant);
133
+ }
134
+ }
135
+ acc.analysisComplete = true;
136
+ }
137
+ if (recipe.dryRun) {
138
+ return new class extends rewrite_1.TreeVisitor {
139
+ accept(tree, _ctx) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return tree;
142
+ });
143
+ }
144
+ };
145
+ }
146
+ return new class extends json_1.JsonVisitor {
147
+ visitDocument(doc, _ctx) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ if (!doc.sourcePath.endsWith('package.json')) {
150
+ return doc;
151
+ }
152
+ const redundant = acc.redundantOverrides.get(doc.sourcePath);
153
+ if (!redundant || redundant.size === 0) {
154
+ return doc;
155
+ }
156
+ const project = acc.projects.get(doc.sourcePath);
157
+ if (!project) {
158
+ return doc;
159
+ }
160
+ const modifiedContent = recipe.removeOverrides(project.originalPackageJson, project.packageManager, redundant);
161
+ const parsed = yield new json_1.JsonParser({}).parseOne({
162
+ text: modifiedContent,
163
+ sourcePath: doc.sourcePath
164
+ });
165
+ return Object.assign(Object.assign({}, doc), { value: parsed.value, eof: parsed.eof });
166
+ });
167
+ }
168
+ };
169
+ });
170
+ }
171
+ extractOverrides(packageJson, pm) {
172
+ var _a;
173
+ const overrides = [];
174
+ let overrideObj;
175
+ switch (pm) {
176
+ case "Npm":
177
+ case "Bun":
178
+ overrideObj = packageJson.overrides;
179
+ break;
180
+ case "Pnpm":
181
+ overrideObj = (_a = packageJson.pnpm) === null || _a === void 0 ? void 0 : _a.overrides;
182
+ break;
183
+ case "YarnClassic":
184
+ case "YarnBerry":
185
+ overrideObj = packageJson.resolutions;
186
+ break;
187
+ }
188
+ if (!overrideObj) {
189
+ return overrides;
190
+ }
191
+ for (const [key, value] of Object.entries(overrideObj)) {
192
+ if (typeof value !== 'string') {
193
+ continue;
194
+ }
195
+ const atIndex = key.lastIndexOf('@');
196
+ let packageName;
197
+ let versionRange;
198
+ let isVersionSpecific = false;
199
+ if (atIndex > 0 && !key.startsWith('@')) {
200
+ packageName = key.substring(0, atIndex);
201
+ versionRange = key.substring(atIndex + 1);
202
+ isVersionSpecific = true;
203
+ }
204
+ else if (atIndex > 0 && key.startsWith('@')) {
205
+ const secondAtIndex = key.indexOf('@', 1);
206
+ if (secondAtIndex > 0 && secondAtIndex !== atIndex) {
207
+ packageName = key.substring(0, secondAtIndex);
208
+ versionRange = key.substring(secondAtIndex + 1);
209
+ isVersionSpecific = true;
210
+ }
211
+ else {
212
+ packageName = key;
213
+ }
214
+ }
215
+ else {
216
+ packageName = key;
217
+ }
218
+ overrides.push({
219
+ key,
220
+ packageName,
221
+ version: value,
222
+ isVersionSpecific,
223
+ versionRange
224
+ });
225
+ }
226
+ return overrides;
227
+ }
228
+ findRedundantOverrides(project) {
229
+ return __awaiter(this, void 0, void 0, function* () {
230
+ const redundant = new Set();
231
+ if (project.overrides.length === 0) {
232
+ return redundant;
233
+ }
234
+ try {
235
+ const packageJson = JSON.parse(project.originalPackageJson);
236
+ for (const override of project.overrides) {
237
+ this.removeOverrideFromObject(packageJson, project.packageManager, override.key);
238
+ }
239
+ const modifiedPackageJson = JSON.stringify(packageJson, null, 2);
240
+ const result = yield (0, javascript_1.runInstallInTempDir)(project.packageManager, modifiedPackageJson, {
241
+ configFiles: project.configFiles,
242
+ lockOnly: true
243
+ });
244
+ if (!result.success || !result.lockFileContent) {
245
+ return redundant;
246
+ }
247
+ for (const override of project.overrides) {
248
+ const isRedundant = this.isOverrideRedundantForLockFile(override, result.lockFileContent, project.packageManager);
249
+ if (isRedundant) {
250
+ redundant.add(override.key);
251
+ }
252
+ }
253
+ }
254
+ catch (_a) {
255
+ }
256
+ return redundant;
257
+ });
258
+ }
259
+ isOverrideRedundantForLockFile(override, lockFileContent, packageManager) {
260
+ const resolvedVersion = (0, npm_utils_1.extractVersionFromLockFile)(lockFileContent, override.packageName, packageManager);
261
+ if (!resolvedVersion) {
262
+ return true;
263
+ }
264
+ try {
265
+ if (semver.gte(resolvedVersion, override.version)) {
266
+ return true;
267
+ }
268
+ if (semver.satisfies(resolvedVersion, `>=${override.version}`)) {
269
+ return true;
270
+ }
271
+ }
272
+ catch (_a) {
273
+ return false;
274
+ }
275
+ return false;
276
+ }
277
+ removeOverrideFromObject(packageJson, pm, key) {
278
+ var _a;
279
+ switch (pm) {
280
+ case "Npm":
281
+ case "Bun":
282
+ if (packageJson.overrides) {
283
+ delete packageJson.overrides[key];
284
+ if (Object.keys(packageJson.overrides).length === 0) {
285
+ delete packageJson.overrides;
286
+ }
287
+ }
288
+ break;
289
+ case "Pnpm":
290
+ if ((_a = packageJson.pnpm) === null || _a === void 0 ? void 0 : _a.overrides) {
291
+ delete packageJson.pnpm.overrides[key];
292
+ if (Object.keys(packageJson.pnpm.overrides).length === 0) {
293
+ delete packageJson.pnpm.overrides;
294
+ }
295
+ if (Object.keys(packageJson.pnpm).length === 0) {
296
+ delete packageJson.pnpm;
297
+ }
298
+ }
299
+ break;
300
+ case "YarnClassic":
301
+ case "YarnBerry":
302
+ if (packageJson.resolutions) {
303
+ delete packageJson.resolutions[key];
304
+ if (Object.keys(packageJson.resolutions).length === 0) {
305
+ delete packageJson.resolutions;
306
+ }
307
+ }
308
+ break;
309
+ }
310
+ }
311
+ removeOverrides(originalContent, pm, keysToRemove) {
312
+ var _a;
313
+ const packageJson = JSON.parse(originalContent);
314
+ let overrideField;
315
+ let commentField;
316
+ switch (pm) {
317
+ case "Npm":
318
+ case "Bun":
319
+ overrideField = 'overrides';
320
+ commentField = '//overrides';
321
+ break;
322
+ case "Pnpm":
323
+ overrideField = 'pnpm';
324
+ commentField = '//pnpm.overrides';
325
+ break;
326
+ case "YarnClassic":
327
+ case "YarnBerry":
328
+ overrideField = 'resolutions';
329
+ commentField = '//resolutions';
330
+ break;
331
+ default:
332
+ return originalContent;
333
+ }
334
+ if (pm === "Pnpm") {
335
+ if ((_a = packageJson.pnpm) === null || _a === void 0 ? void 0 : _a.overrides) {
336
+ for (const key of keysToRemove) {
337
+ delete packageJson.pnpm.overrides[key];
338
+ }
339
+ if (Object.keys(packageJson.pnpm.overrides).length === 0) {
340
+ delete packageJson.pnpm.overrides;
341
+ }
342
+ if (Object.keys(packageJson.pnpm).length === 0) {
343
+ delete packageJson.pnpm;
344
+ }
345
+ }
346
+ }
347
+ else {
348
+ if (packageJson[overrideField]) {
349
+ for (const key of keysToRemove) {
350
+ delete packageJson[overrideField][key];
351
+ }
352
+ if (Object.keys(packageJson[overrideField]).length === 0) {
353
+ delete packageJson[overrideField];
354
+ }
355
+ }
356
+ }
357
+ if (packageJson[commentField]) {
358
+ for (const key of keysToRemove) {
359
+ delete packageJson[commentField][key];
360
+ }
361
+ if (Object.keys(packageJson[commentField]).length === 0) {
362
+ delete packageJson[commentField];
363
+ }
364
+ }
365
+ const indentMatch = originalContent.match(/^(\s+)"/m);
366
+ const indent = indentMatch ? indentMatch[1].length : 2;
367
+ return JSON.stringify(packageJson, null, indent);
368
+ }
369
+ }
370
+ exports.RemoveRedundantOverrides = RemoveRedundantOverrides;
371
+ __decorate([
372
+ (0, rewrite_1.Option)({
373
+ displayName: "Dry run",
374
+ description: "If true, only report which overrides are redundant without removing them.",
375
+ required: false,
376
+ example: "true"
377
+ })
378
+ ], RemoveRedundantOverrides.prototype, "dryRun", void 0);
379
+ //# sourceMappingURL=remove-redundant-overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-redundant-overrides.js","sourceRoot":"","sources":["../../src/security/remove-redundant-overrides.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,kDAO8B;AAC9B,oDAAgF;AAChF,gEAKyC;AACzC,+CAAiC;AACjC,2CAAuD;AA6DvD,MAAa,wBAAyB,SAAQ,wBAA2B;IAcrE,YAAY,OAA8B;;QACtC,KAAK,EAAE,CAAC;QAdH,SAAI,GAAG,0DAA0D,CAAC;QAClE,gBAAW,GAAG,uCAAuC,CAAC;QACtD,gBAAW,GAAG,qEAAqE;YACxF,mFAAmF,CAAC;QAYpF,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,KAAK,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,IAAsB;QAC/B,OAAO;YACH,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,kBAAkB,EAAE,IAAI,GAAG,EAAE;YAC7B,gBAAgB,EAAE,KAAK;SAC1B,CAAC;IACN,CAAC;IAEK,OAAO,CAAC,GAAgB;;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC;YAEpB,OAAO,IAAI,KAAM,SAAQ,qBAAmC;gBACxC,MAAM,CAAC,IAAU,EAAE,IAAsB;;;wBACrD,IAAI,CAAC,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACpD,OAAO,IAAI,CAAC;wBAChB,CAAC;wBAED,MAAM,GAAG,GAAG,IAAqB,CAAC;wBAClC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;4BAC3C,OAAO,GAAG,CAAC;wBACf,CAAC;wBAED,MAAM,MAAM,GAAG,IAAA,qCAAwB,EAAC,GAAG,CAAC,CAAC;wBAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;4BACV,OAAO,GAAG,CAAC;wBACf,CAAC;wBAED,MAAM,EAAE,GAAG,MAAA,MAAM,CAAC,cAAc,wCAAsB,CAAC;wBACvD,MAAM,OAAO,GAAG,MAAM,sBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC9C,IAAI,WAAgC,CAAC;wBAErC,IAAI,CAAC;4BACD,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACtC,CAAC;wBAAC,WAAM,CAAC;4BACL,OAAO,GAAG,CAAC;wBACf,CAAC;wBAGD,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;wBAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACzB,OAAO,GAAG,CAAC;wBACf,CAAC;wBAGD,MAAM,WAAW,GAA2B,EAAE,CAAC;wBAC/C,MAAM,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,cAAuB,CAAC,CAAC;wBACpF,IAAI,YAAY,EAAE,CAAC;4BACf,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;iCAChD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;4BAC9C,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC7C,CAAC;wBAED,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE;4BAC7B,eAAe,EAAE,GAAG,CAAC,UAAU;4BAC/B,mBAAmB,EAAE,OAAO;4BAC5B,cAAc,EAAE,EAAE;4BAClB,SAAS;4BACT,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;yBAC7E,CAAC,CAAC;wBAEH,OAAO,GAAG,CAAC;oBACf,CAAC;iBAAA;aACJ,CAAC;QACN,CAAC;KAAA;IAEK,cAAc,CAAC,GAAgB;;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC;YAGpB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAChD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;oBAC/D,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACrB,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBACvD,CAAC;gBACL,CAAC;gBACD,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAChC,CAAC;YAGD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,IAAI,KAAM,SAAQ,qBAAmC;oBACxC,MAAM,CAAC,IAAU,EAAE,IAAsB;;4BACrD,OAAO,IAAI,CAAC;wBAChB,CAAC;qBAAA;iBACJ,CAAC;YACN,CAAC;YAED,OAAO,IAAI,KAAM,SAAQ,kBAA6B;gBAClC,aAAa,CAAC,GAAkB,EAAE,IAAsB;;wBACpE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;4BAC3C,OAAO,GAAG,CAAC;wBACf,CAAC;wBAED,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBAC7D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;4BACrC,OAAO,GAAG,CAAC;wBACf,CAAC;wBAED,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACjD,IAAI,CAAC,OAAO,EAAE,CAAC;4BACX,OAAO,GAAG,CAAC;wBACf,CAAC;wBAGD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAC1C,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,cAAc,EACtB,SAAS,CACZ,CAAC;wBAGF,MAAM,MAAM,GAAG,MAAM,IAAI,iBAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;4BAC7C,IAAI,EAAE,eAAe;4BACrB,UAAU,EAAE,GAAG,CAAC,UAAU;yBAC7B,CAAkB,CAAC;wBAEpB,OAAO,gCACA,GAAG,KACN,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,GAAG,EAAE,MAAM,CAAC,GAAG,GACD,CAAC;oBACvB,CAAC;iBAAA;aACJ,CAAC;QACN,CAAC;KAAA;IAKO,gBAAgB,CACpB,WAAgC,EAChC,EAAkB;;QAElB,MAAM,SAAS,GAAmB,EAAE,CAAC;QAErC,IAAI,WAA4C,CAAC;QAEjD,QAAQ,EAAE,EAAE,CAAC;YACT,WAAwB;YACxB;gBACI,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;gBACpC,MAAM;YACV;gBACI,WAAW,GAAG,MAAA,WAAW,CAAC,IAAI,0CAAE,SAAS,CAAC;gBAC1C,MAAM;YACV,mBAAgC;YAChC;gBACI,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;gBACtC,MAAM;QACd,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAErD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YAGD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,WAAmB,CAAC;YACxB,IAAI,YAAgC,CAAC;YACrC,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAI9B,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAEtC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxC,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC1C,iBAAiB,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAE5C,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1C,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;oBAEjD,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC9C,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;oBAChD,iBAAiB,GAAG,IAAI,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBAEJ,WAAW,GAAG,GAAG,CAAC;gBACtB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,WAAW,GAAG,GAAG,CAAC;YACtB,CAAC;YAED,SAAS,CAAC,IAAI,CAAC;gBACX,GAAG;gBACH,WAAW;gBACX,OAAO,EAAE,KAAK;gBACd,iBAAiB;gBACjB,YAAY;aACf,CAAC,CAAC;QACP,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IASa,sBAAsB,CAAC,OAAoB;;YACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YAEpC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,IAAI,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBAC5D,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACvC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACrF,CAAC;gBACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAGjE,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAmB,EACpC,OAAO,CAAC,cAAc,EACtB,mBAAmB,EACnB;oBACI,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,QAAQ,EAAE,IAAI;iBACjB,CACJ,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBAE7C,OAAO,SAAS,CAAC;gBACrB,CAAC;gBAGD,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,8BAA8B,CACnD,QAAQ,EACR,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,cAAc,CACzB,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBACd,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,WAAM,CAAC;YAET,CAAC;YAED,OAAO,SAAS,CAAC;QACrB,CAAC;KAAA;IAKO,8BAA8B,CAClC,QAAsB,EACtB,eAAuB,EACvB,cAA8B;QAG9B,MAAM,eAAe,GAAG,IAAA,sCAA0B,EAC9C,eAAe,EACf,QAAQ,CAAC,WAAW,EACpB,cAAc,CACjB,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;YAGnB,OAAO,IAAI,CAAC;QAChB,CAAC;QAID,IAAI,CAAC;YACD,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,OAAO,IAAI,CAAC;YAChB,CAAC;YAGD,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YAEL,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAKO,wBAAwB,CAC5B,WAAgC,EAChC,EAAkB,EAClB,GAAW;;QAEX,QAAQ,EAAE,EAAE,CAAC;YACT,WAAwB;YACxB;gBACI,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;oBACxB,OAAO,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAClD,OAAO,WAAW,CAAC,SAAS,CAAC;oBACjC,CAAC;gBACL,CAAC;gBACD,MAAM;YACV;gBACI,IAAI,MAAA,WAAW,CAAC,IAAI,0CAAE,SAAS,EAAE,CAAC;oBAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvD,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;oBACtC,CAAC;oBACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7C,OAAO,WAAW,CAAC,IAAI,CAAC;oBAC5B,CAAC;gBACL,CAAC;gBACD,MAAM;YACV,mBAAgC;YAChC;gBACI,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;oBAC1B,OAAO,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACpD,OAAO,WAAW,CAAC,WAAW,CAAC;oBACnC,CAAC;gBACL,CAAC;gBACD,MAAM;QACd,CAAC;IACL,CAAC;IAMO,eAAe,CACnB,eAAuB,EACvB,EAAkB,EAClB,YAAyB;;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAGhD,IAAI,aAAqB,CAAC;QAC1B,IAAI,YAAoB,CAAC;QAEzB,QAAQ,EAAE,EAAE,CAAC;YACT,WAAwB;YACxB;gBACI,aAAa,GAAG,WAAW,CAAC;gBAC5B,YAAY,GAAG,aAAa,CAAC;gBAC7B,MAAM;YACV;gBACI,aAAa,GAAG,MAAM,CAAC;gBACvB,YAAY,GAAG,kBAAkB,CAAC;gBAClC,MAAM;YACV,mBAAgC;YAChC;gBACI,aAAa,GAAG,aAAa,CAAC;gBAC9B,YAAY,GAAG,eAAe,CAAC;gBAC/B,MAAM;YACV;gBACI,OAAO,eAAe,CAAC;QAC/B,CAAC;QAGD,IAAI,EAAE,WAAwB,EAAE,CAAC;YAC7B,IAAI,MAAA,WAAW,CAAC,IAAI,0CAAE,SAAS,EAAE,CAAC;gBAC9B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC7B,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvD,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtC,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,WAAW,CAAC,IAAI,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC7B,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvD,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC;gBACtC,CAAC;YACL,CAAC;QACL,CAAC;QAGD,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC7B,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtD,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAGD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACJ;AA/aD,4DA+aC;AAnaG;IANC,IAAA,gBAAM,EAAC;QACJ,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,2EAA2E;QACxF,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,MAAM;KAClB,CAAC;wDACe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openrewrite/recipes-nodejs",
3
- "version": "0.37.0-20260104-170507",
3
+ "version": "0.37.0-20260106-083133",
4
4
  "license": "Moderne Source Available License",
5
5
  "description": "OpenRewrite recipes for Node.js library migrations.",
6
6
  "homepage": "https://github.com/moderneinc/rewrite-node",
@@ -17,13 +17,15 @@
17
17
  "access": "public"
18
18
  },
19
19
  "scripts": {
20
- "build": "rm -rf ./dist tsconfig.build.tsbuildinfo && tsc --build tsconfig.build.json && cp -rL resources dist/",
20
+ "prebuild": "bun -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
21
+ "build": "tsc --build tsconfig.build.json",
22
+ "postbuild": "bun -e \"const fse=require('fs-extra'); fse.existsSync('resources') && fse.copySync('resources','dist/resources',{dereference:true})\"",
21
23
  "dev": "tsc --watch -p tsconfig.json",
22
24
  "test": "npm run build && jest",
23
25
  "ci:test": "jest"
24
26
  },
25
27
  "dependencies": {
26
- "@openrewrite/rewrite": "^8.70.4",
28
+ "@openrewrite/rewrite": "next",
27
29
  "immer": "^11.0.1",
28
30
  "semver": "^7.7.3"
29
31
  },
@@ -31,6 +33,8 @@
31
33
  "@types/jest": "^29.5.13",
32
34
  "@types/node": "^22.5.4",
33
35
  "@types/semver": "^7.7.1",
36
+ "bun": "^1.3.5",
37
+ "fs-extra": "^11.3.3",
34
38
  "jest": "^29.7.0",
35
39
  "jest-junit": "^16.0.0",
36
40
  "tmp-promise": "^3.0.3",
package/src/index.ts CHANGED
@@ -21,7 +21,7 @@ import {ReplaceStreamInternalModules} from "./migrate/stream-internal-modules";
21
21
  import {RemoveNetSetSimultaneousAccepts} from "./migrate/net-set-simultaneous-accepts";
22
22
  import {UpgradeNode22} from "./migrate/upgrade-node-22";
23
23
  import {UpgradeNode24} from "./migrate/upgrade-node-24";
24
- import {DependencyVulnerabilityCheck} from "./security";
24
+ import {DependencyVulnerabilityCheck, RemoveRedundantOverrides} from "./security";
25
25
 
26
26
  export const NodeJS: CategoryDescriptor[] = [{displayName: "Node.js"}];
27
27
  export const Migrate: CategoryDescriptor[] = [...NodeJS, {displayName: "Migrate"}];
@@ -52,4 +52,5 @@ export async function activate(marketplace: RecipeMarketplace): Promise<void> {
52
52
  await marketplace.install(UpgradeNode24, Migrate);
53
53
 
54
54
  await marketplace.install(DependencyVulnerabilityCheck, Security);
55
+ await marketplace.install(RemoveRedundantOverrides, Security);
55
56
  }