@openrewrite/recipes-nodejs 0.37.0-20251217-170721 → 0.37.0-20251219-122858

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAwBpD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,QAsBhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAyBpD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,QAuBhD"}
package/dist/index.js CHANGED
@@ -19,6 +19,7 @@ const zlib_bytes_read_1 = require("./migrate/zlib-bytes-read");
19
19
  const fs_truncate_1 = require("./migrate/fs-truncate");
20
20
  const outgoing_message_headers_1 = require("./migrate/outgoing-message-headers");
21
21
  const tls_internal_modules_1 = require("./migrate/tls-internal-modules");
22
+ const net_set_simultaneous_accepts_1 = require("./migrate/net-set-simultaneous-accepts");
22
23
  const upgrade_node_22_1 = require("./migrate/upgrade-node-22");
23
24
  const upgrade_node_24_1 = require("./migrate/upgrade-node-24");
24
25
  const security_1 = require("./security");
@@ -41,6 +42,7 @@ function activate(registry) {
41
42
  registry.register(fs_truncate_1.ReplaceFsTruncateWithFd);
42
43
  registry.register(outgoing_message_headers_1.ReplaceOutgoingMessageHeaders);
43
44
  registry.register(tls_internal_modules_1.ReplaceTlsInternalModules);
45
+ registry.register(net_set_simultaneous_accepts_1.RemoveNetSetSimultaneousAccepts);
44
46
  registry.register(upgrade_node_22_1.UpgradeNode22);
45
47
  registry.register(upgrade_node_24_1.UpgradeNode24);
46
48
  registry.register(security_1.DependencyVulnerabilityCheck);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAwBA,4BAsBC;AA7CD,qEAA0E;AAC1E,yDAAoE;AACpE,yEAAwF;AACxF,uEAAwE;AACxE,iDAAkD;AAClD,uDAAwD;AACxD,yEAAyE;AACzE,uDAAwD;AACxD,uDAAwD;AACxD,uEAAuE;AACvE,yEAAwE;AACxE,mEAA4E;AAC5E,uDAAwD;AACxD,+DAA6E;AAC7E,+DAA+D;AAC/D,uDAA8D;AAC9D,iFAAiF;AACjF,yEAAyE;AACzE,+DAAwD;AACxD,+DAAwD;AACxD,yCAAwD;AAGxD,SAAgB,QAAQ,CAAC,QAAwB;IAC7C,QAAQ,CAAC,QAAQ,CAAC,iDAA4B,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,2CAA4B,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,+DAAwC,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,CAAC,+CAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,yBAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,gDAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,8CAAwB,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,+CAAwB,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,mDAA+B,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,oDAAkC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,sCAAoB,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,qCAAuB,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,wDAA6B,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,gDAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,+BAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,+BAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,uCAA4B,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAyBA,4BAuBC;AA/CD,qEAA0E;AAC1E,yDAAoE;AACpE,yEAAwF;AACxF,uEAAwE;AACxE,iDAAkD;AAClD,uDAAwD;AACxD,yEAAyE;AACzE,uDAAwD;AACxD,uDAAwD;AACxD,uEAAuE;AACvE,yEAAwE;AACxE,mEAA4E;AAC5E,uDAAwD;AACxD,+DAA6E;AAC7E,+DAA+D;AAC/D,uDAA8D;AAC9D,iFAAiF;AACjF,yEAAyE;AACzE,yFAAuF;AACvF,+DAAwD;AACxD,+DAAwD;AACxD,yCAAwD;AAGxD,SAAgB,QAAQ,CAAC,QAAwB;IAC7C,QAAQ,CAAC,QAAQ,CAAC,iDAA4B,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,2CAA4B,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,+DAAwC,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,CAAC,+CAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,yBAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,gDAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,8CAAwB,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,+CAAwB,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,mDAA+B,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,+BAAiB,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,oDAAkC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,sCAAoB,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,qCAAuB,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,wDAA6B,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,gDAAyB,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,8DAA+B,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,+BAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,+BAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,uCAA4B,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class RemoveNetSetSimultaneousAccepts extends Recipe {
3
+ readonly name = "org.openrewrite.node.migrate.net.remove-set-simultaneous-accepts";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ readonly tags: string[];
7
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
8
+ }
9
+ //# sourceMappingURL=net-set-simultaneous-accepts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net-set-simultaneous-accepts.d.ts","sourceRoot":"","sources":["../../src/migrate/net-set-simultaneous-accepts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAI3E,qBAAa,+BAAgC,SAAQ,MAAM;IACvD,QAAQ,CAAC,IAAI,sEAAqE;IAClF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAuD;IACnF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAyI;IACrK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAe;IAEhC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAkF9D"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveNetSetSimultaneousAccepts = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ class RemoveNetSetSimultaneousAccepts extends rewrite_1.Recipe {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.name = "org.openrewrite.node.migrate.net.remove-set-simultaneous-accepts";
20
+ this.displayName = "Remove deprecated `net._setSimultaneousAccepts()`";
21
+ this.description = "Remove calls to deprecated `net._setSimultaneousAccepts()` which was an undocumented internal function that is no longer necessary.";
22
+ this.tags = ["DEP0121"];
23
+ }
24
+ editor() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ return new class extends javascript_1.JavaScriptVisitor {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.netNamespaceAlias = null;
30
+ this.hasSetSimultaneousAcceptsImport = false;
31
+ }
32
+ visitImportDeclaration(jsImport, p) {
33
+ const _super = Object.create(null, {
34
+ visitImportDeclaration: { get: () => super.visitImportDeclaration }
35
+ });
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const imp = yield _super.visitImportDeclaration.call(this, jsImport, p);
38
+ if (!imp.moduleSpecifier) {
39
+ return imp;
40
+ }
41
+ const moduleSpec = imp.moduleSpecifier.element;
42
+ if (moduleSpec.kind === java_1.J.Kind.Literal) {
43
+ const moduleName = moduleSpec.value;
44
+ if (moduleName === "net" || moduleName === "node:net") {
45
+ const importClause = imp.importClause;
46
+ if (importClause) {
47
+ const namedBindings = importClause.namedBindings;
48
+ if ((namedBindings === null || namedBindings === void 0 ? void 0 : namedBindings.kind) === javascript_1.JS.Kind.Alias) {
49
+ const alias = namedBindings;
50
+ if (alias.alias.kind === java_1.J.Kind.Identifier) {
51
+ this.netNamespaceAlias = alias.alias.simpleName;
52
+ }
53
+ }
54
+ if ((namedBindings === null || namedBindings === void 0 ? void 0 : namedBindings.kind) === javascript_1.JS.Kind.NamedImports) {
55
+ const namedImports = namedBindings;
56
+ for (const binding of namedImports.elements.elements) {
57
+ const specifier = binding.element;
58
+ if (specifier.specifier.kind === java_1.J.Kind.Identifier) {
59
+ const name = specifier.specifier.simpleName;
60
+ if (name === "_setSimultaneousAccepts") {
61
+ this.hasSetSimultaneousAcceptsImport = true;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ return imp;
70
+ });
71
+ }
72
+ visitMethodInvocation(m, p) {
73
+ const _super = Object.create(null, {
74
+ visitMethodInvocation: { get: () => super.visitMethodInvocation }
75
+ });
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const method = yield _super.visitMethodInvocation.call(this, m, p);
78
+ const methodName = method.name.simpleName;
79
+ if (methodName !== "_setSimultaneousAccepts") {
80
+ return method;
81
+ }
82
+ let isNetMethod = false;
83
+ if (method.select && this.netNamespaceAlias) {
84
+ const select = method.select.element;
85
+ if (select.kind === java_1.J.Kind.Identifier) {
86
+ const selectName = select.simpleName;
87
+ if (selectName === this.netNamespaceAlias) {
88
+ isNetMethod = true;
89
+ }
90
+ }
91
+ }
92
+ if (!method.select && this.hasSetSimultaneousAcceptsImport) {
93
+ isNetMethod = true;
94
+ }
95
+ if (isNetMethod) {
96
+ (0, javascript_1.maybeRemoveImport)(this, "net");
97
+ (0, javascript_1.maybeRemoveImport)(this, "node:net");
98
+ (0, javascript_1.maybeRemoveImport)(this, "net", "_setSimultaneousAccepts");
99
+ (0, javascript_1.maybeRemoveImport)(this, "node:net", "_setSimultaneousAccepts");
100
+ return undefined;
101
+ }
102
+ return method;
103
+ });
104
+ }
105
+ };
106
+ });
107
+ }
108
+ }
109
+ exports.RemoveNetSetSimultaneousAccepts = RemoveNetSetSimultaneousAccepts;
110
+ //# sourceMappingURL=net-set-simultaneous-accepts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net-set-simultaneous-accepts.js","sourceRoot":"","sources":["../../src/migrate/net-set-simultaneous-accepts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openrewrite/recipes-nodejs",
3
- "version": "0.37.0-20251217-170721",
3
+ "version": "0.37.0-20251219-122858",
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",
package/src/index.ts CHANGED
@@ -17,6 +17,7 @@ import {ReplaceZlibBytesRead} from "./migrate/zlib-bytes-read";
17
17
  import {ReplaceFsTruncateWithFd} from "./migrate/fs-truncate";
18
18
  import {ReplaceOutgoingMessageHeaders} from "./migrate/outgoing-message-headers";
19
19
  import {ReplaceTlsInternalModules} from "./migrate/tls-internal-modules";
20
+ import {RemoveNetSetSimultaneousAccepts} from "./migrate/net-set-simultaneous-accepts";
20
21
  import {UpgradeNode22} from "./migrate/upgrade-node-22";
21
22
  import {UpgradeNode24} from "./migrate/upgrade-node-24";
22
23
  import {DependencyVulnerabilityCheck} from "./security";
@@ -41,6 +42,7 @@ export function activate(registry: RecipeRegistry) {
41
42
  registry.register(ReplaceFsTruncateWithFd);
42
43
  registry.register(ReplaceOutgoingMessageHeaders);
43
44
  registry.register(ReplaceTlsInternalModules);
45
+ registry.register(RemoveNetSetSimultaneousAccepts);
44
46
  registry.register(UpgradeNode22);
45
47
  registry.register(UpgradeNode24);
46
48
  registry.register(DependencyVulnerabilityCheck);
@@ -0,0 +1,93 @@
1
+ import {ExecutionContext, Recipe, TreeVisitor} from "@openrewrite/rewrite";
2
+ import {JavaScriptVisitor, JS, maybeRemoveImport} from "@openrewrite/rewrite/javascript";
3
+ import {J} from "@openrewrite/rewrite/java";
4
+
5
+ export class RemoveNetSetSimultaneousAccepts extends Recipe {
6
+ readonly name = "org.openrewrite.node.migrate.net.remove-set-simultaneous-accepts"
7
+ readonly displayName: string = "Remove deprecated `net._setSimultaneousAccepts()`";
8
+ readonly description: string = "Remove calls to deprecated `net._setSimultaneousAccepts()` which was an undocumented internal function that is no longer necessary.";
9
+ readonly tags: string[] = ["DEP0121"];
10
+
11
+ async editor(): Promise<TreeVisitor<any, ExecutionContext>> {
12
+ return new class extends JavaScriptVisitor<ExecutionContext> {
13
+ private netNamespaceAlias: string | null = null;
14
+ private hasSetSimultaneousAcceptsImport = false;
15
+
16
+ protected async visitImportDeclaration(jsImport: JS.Import, p: ExecutionContext): Promise<J | undefined> {
17
+ const imp = await super.visitImportDeclaration(jsImport, p) as JS.Import;
18
+
19
+ if (!imp.moduleSpecifier) {
20
+ return imp;
21
+ }
22
+
23
+ const moduleSpec = imp.moduleSpecifier.element;
24
+ if (moduleSpec.kind === J.Kind.Literal) {
25
+ const moduleName = (moduleSpec as J.Literal).value as string;
26
+ if (moduleName === "net" || moduleName === "node:net") {
27
+ const importClause = imp.importClause;
28
+ if (importClause) {
29
+ const namedBindings = importClause.namedBindings;
30
+
31
+ if (namedBindings?.kind === JS.Kind.Alias) {
32
+ const alias = namedBindings as JS.Alias;
33
+ if (alias.alias.kind === J.Kind.Identifier) {
34
+ this.netNamespaceAlias = (alias.alias as J.Identifier).simpleName;
35
+ }
36
+ }
37
+
38
+ if (namedBindings?.kind === JS.Kind.NamedImports) {
39
+ const namedImports = namedBindings as JS.NamedImports;
40
+ for (const binding of namedImports.elements.elements) {
41
+ const specifier = binding.element;
42
+ if (specifier.specifier.kind === J.Kind.Identifier) {
43
+ const name = (specifier.specifier as J.Identifier).simpleName;
44
+ if (name === "_setSimultaneousAccepts") {
45
+ this.hasSetSimultaneousAcceptsImport = true;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ return imp;
55
+ }
56
+
57
+ protected async visitMethodInvocation(m: J.MethodInvocation, p: ExecutionContext): Promise<J | undefined> {
58
+ const method = await super.visitMethodInvocation(m, p) as J.MethodInvocation;
59
+
60
+ const methodName = method.name.simpleName;
61
+ if (methodName !== "_setSimultaneousAccepts") {
62
+ return method;
63
+ }
64
+
65
+ let isNetMethod = false;
66
+
67
+ if (method.select && this.netNamespaceAlias) {
68
+ const select = method.select.element;
69
+ if (select.kind === J.Kind.Identifier) {
70
+ const selectName = (select as J.Identifier).simpleName;
71
+ if (selectName === this.netNamespaceAlias) {
72
+ isNetMethod = true;
73
+ }
74
+ }
75
+ }
76
+
77
+ if (!method.select && this.hasSetSimultaneousAcceptsImport) {
78
+ isNetMethod = true;
79
+ }
80
+
81
+ if (isNetMethod) {
82
+ maybeRemoveImport(this, "net");
83
+ maybeRemoveImport(this, "node:net");
84
+ maybeRemoveImport(this, "net", "_setSimultaneousAccepts");
85
+ maybeRemoveImport(this, "node:net", "_setSimultaneousAccepts");
86
+ return undefined;
87
+ }
88
+
89
+ return method;
90
+ }
91
+ };
92
+ }
93
+ }