@expressjs/codemod
Version:
Codemods for updating express servers.
59 lines (58 loc) • 2.37 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.upgrade = upgrade;
const node_path_1 = require("node:path");
const Runner_1 = require("jscodeshift/src/Runner");
const prompts_1 = __importDefault(require("prompts"));
const config_1 = require("../config");
const prompts_2 = require("../utils/prompts");
const transformerDirectory = (0, node_path_1.join)(__dirname, '../', 'transforms');
async function upgrade(source, options) {
const sourceSelected = source || (await (0, prompts_2.promptSource)('Which directory should the codemods be applied to?'));
if (!sourceSelected) {
console.info('> Source path for project is not selected. Exits the program. \n');
process.exit(1);
}
let codemods = [];
if (options?.select) {
const { codemodsSelected } = await (0, prompts_1.default)({
type: 'multiselect',
name: 'codemodsSelected',
message: `The following 'codemods' are recommended for your upgrade. Select the ones to apply.`,
choices: config_1.TRANSFORM_OPTIONS.map(({ description, value, version }) => {
return {
title: `(v${version}) ${value}`,
description,
value,
selected: true,
};
}),
}, { onCancel: prompts_2.onCancel });
codemods = codemodsSelected;
}
else {
codemods = config_1.TRANSFORM_OPTIONS.map(({ value }) => value);
}
const args = {
dry: false,
babel: false,
silent: true,
ignorePattern: '**/node_modules/**',
extensions: 'cts,mts,ts,js,mjs,cjs',
};
for (const codemod of codemods) {
const transformerPath = (0, node_path_1.join)(transformerDirectory, `${codemod}.js`);
console.log(`> Applying codemod: ${codemod}`);
try {
await (0, Runner_1.run)(transformerPath, [(0, node_path_1.resolve)(sourceSelected)], args);
}
catch (error) {
console.error(`> Error applying codemod: ${codemod}`);
console.error(error);
}
}
console.log('\n> All codemods have been applied successfully. \n');
}