diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/delete.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/delete.input.ts index 844634f..aeab3e3 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/delete.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/delete.input.ts @@ -3,10 +3,37 @@ import express from "express"; const app = express(); app.get("/", (req, res) => {}); + +app.del([""],() => { + myImportantLogic(); +}); + +app.del([],() => { + myImportantLogic(); +}); + +app.del(/d/,() => { + myImportantLogic(); +}); + +app.del(() => { + myImportantLogic(); +}); + +app.del(function () { + myImportantLogic(); +}); + app.del("/old", () => { myImportantLogic(); }); +function noModify() { + let a + + app.del(a) +} + const myImportantLogic = () => { console.log("making sure it's there"); }; diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/delete.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/delete.output.ts index 64d81fc..b1dbf42 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/delete.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/delete.output.ts @@ -3,10 +3,37 @@ import express from "express"; const app = express(); app.get("/", (req, res) => {}); + +app.delete([""],() => { + myImportantLogic(); +}); + +app.delete([],() => { + myImportantLogic(); +}); + +app.delete(/d/,() => { + myImportantLogic(); +}); + +app.del(() => { + myImportantLogic(); +}); + +app.del(function () { + myImportantLogic(); +}); + app.delete("/old", () => { myImportantLogic(); }); +function noModify() { + let a + + app.del(a) +} + const myImportantLogic = () => { console.log("making sure it's there"); }; diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/json.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/json.input.ts index 56fc2b4..2f23e2a 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/json.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/json.input.ts @@ -2,6 +2,20 @@ import express from "express"; const app = express(); +app.get("/json", function (...arg) { + const [, res] = arg + res.json(); +}); + +app.get("/json", function (...arg) { + const [, res] = arg + res.json({ user: "Username", isValid: true }, 200); +}); + +app.get("/json", function (req, res) { + res.json(); +}); + app.get("/json", function (req, res) { res.json({ user: "Username", isValid: true }, 200); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/json.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/json.output.ts index 92905a1..c25583c 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/json.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/json.output.ts @@ -2,6 +2,20 @@ import express from "express"; const app = express(); +app.get("/json", function (...arg) { + const [, res] = arg + res.json(); +}); + +app.get("/json", function (...arg) { + const [, res] = arg + res.status(200).json({ user: "Username", isValid: true }); +}); + +app.get("/json", function (req, res) { + res.json(); +}); + app.get("/json", function (req, res) { res.status(200).json({ user: "Username", isValid: true }); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.input.ts index 99b2b2f..88a7e27 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.input.ts @@ -2,6 +2,10 @@ import express from "express"; const app = express(); +app.get("/json", function (req, res) { + res.json(); +}); + app.get("/jsonp", function (req, res) { res.jsonp({ user: "Username", isValid: true }, 200); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.output.ts index 2a8e4c1..4aafe06 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/jsonp.output.ts @@ -2,6 +2,10 @@ import express from "express"; const app = express(); +app.get("/json", function (req, res) { + res.json(); +}); + app.get("/jsonp", function (req, res) { res.status(200).jsonp({ user: "Username", isValid: true }); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/redirect.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/redirect.input.ts index b31fa65..5f21753 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/redirect.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/redirect.input.ts @@ -3,6 +3,20 @@ import { redirect } from "somelibrary"; const app = express(); +app.get("/", function (...arg) { + const [, res] = arg + res.redirect(); +}); + +app.get("/", function (...arg) { + const [, res] = arg + res.redirect("/other-page", 301); +}); + +app.get("/", function (req, res) { + res.redirect(); +}); + app.get("/", function (req, res) { res.redirect("/other-page", 301); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/redirect.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/redirect.output.ts index f14a6b6..5843b1d 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/redirect.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/redirect.output.ts @@ -3,6 +3,20 @@ import { redirect } from "somelibrary"; const app = express(); +app.get("/", function (...arg) { + const [, res] = arg + res.redirect(); +}); + +app.get("/", function (...arg) { + const [, res] = arg + res.redirect(301, "/other-page"); +}); + +app.get("/", function (req, res) { + res.redirect(); +}); + app.get("/", function (req, res) { res.redirect(301, "/other-page"); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/send-file.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/send-file.input.ts index c7a7902..37926ea 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/send-file.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/send-file.input.ts @@ -22,6 +22,14 @@ const sharedSendFile = (res, next, fileName) => { }) } +app.get('/file/:name', (req, res, next) => { + res.sendfile() +}) + +app.get('/file/:name', (req, res, next) => { + res.sendfile("file.txt") +}) + app.get('/file/:name', (req, res, next) => { const fileName = req.params.name diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/send-file.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/send-file.output.ts index 170b666..f222bc4 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/send-file.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/send-file.output.ts @@ -22,6 +22,14 @@ const sharedSendFile = (res, next, fileName) => { }) } +app.get('/file/:name', (req, res, next) => { + res.sendFile() +}) + +app.get('/file/:name', (req, res, next) => { + res.sendFile("file.txt") +}) + app.get('/file/:name', (req, res, next) => { const fileName = req.params.name diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/send.input.ts b/transforms/__testfixtures__/v4-deprecated-signatures/send.input.ts index d2d38fa..f436e85 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/send.input.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/send.input.ts @@ -2,6 +2,20 @@ import express from "express"; const app = express(); +app.get("/send", function (...arg) { + const [, res] = arg + res.send(); +}); + +app.get("/send", function (...arg) { + const [, res] = arg + res.send(200, true); +}); + +app.get("/send", function (req, res) { + res.send(); +}); + app.get("/send", function (req, res) { res.send(200, { hello: "world" }); }); diff --git a/transforms/__testfixtures__/v4-deprecated-signatures/send.output.ts b/transforms/__testfixtures__/v4-deprecated-signatures/send.output.ts index f317983..0824a61 100644 --- a/transforms/__testfixtures__/v4-deprecated-signatures/send.output.ts +++ b/transforms/__testfixtures__/v4-deprecated-signatures/send.output.ts @@ -2,6 +2,20 @@ import express from "express"; const app = express(); +app.get("/send", function (...arg) { + const [, res] = arg + res.send(); +}); + +app.get("/send", function (...arg) { + const [, res] = arg + res.status(200).send(true); +}); + +app.get("/send", function (req, res) { + res.send(); +}); + app.get("/send", function (req, res) { res.status(200).send({ hello: "world" }); }); diff --git a/transforms/v4-deprecated-signatures.ts b/transforms/v4-deprecated-signatures.ts index d54fda2..a2f3978 100644 --- a/transforms/v4-deprecated-signatures.ts +++ b/transforms/v4-deprecated-signatures.ts @@ -1,5 +1,5 @@ import type { API, ASTPath, FileInfo } from 'jscodeshift' -import { CallExpression, Identifier, callExpression, identifier, memberExpression, withParser } from 'jscodeshift' +import { CallExpression, callExpression, identifier, memberExpression, withParser } from 'jscodeshift' import { recursiveParent } from '../utils/recursiveParent' const separateStatusAndBody = (path: ASTPath, calleePropertyName: string) => { @@ -94,10 +94,29 @@ export default function transformer(file: FileInfo, _api: API): string { }) parsedFile - .find(Identifier, { - name: 'del', + .find(CallExpression, { + callee: { + property: { + name: 'del', + }, + }, + }) + .map((path) => { + const pathArguments = path.node.arguments + + if ( + pathArguments[0].type !== 'RegExpLiteral' && + pathArguments[0].type !== 'StringLiteral' && + pathArguments[0].type !== 'ArrayExpression' + ) + return path + + if (path.node.callee.type === 'MemberExpression' && path.node.callee.property.type === 'Identifier') { + path.node.callee.property.name = 'delete' + } + + return path }) - .replaceWith(() => identifier('delete')) parsedFile .find(CallExpression, {