@expressjs/codemod
Version:
Codemods for updating express servers.
51 lines (50 loc) • 2.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.transform = transform;
const node_path_1 = require("node:path");
const Runner_1 = require("jscodeshift/src/Runner");
const picocolors_1 = require("picocolors");
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');
const selectCodemod = async () => {
const res = await (0, prompts_1.default)({
type: 'select',
name: 'transformer',
message: 'Which codemod would you like to apply?',
choices: config_1.TRANSFORM_OPTIONS.map(({ description, value, version }) => {
return {
title: `(${(0, picocolors_1.bold)(`v${version}`)}) ${value}`,
description,
value,
};
}),
}, { onCancel: prompts_2.onCancel });
return res.transformer;
};
async function transform(codemodName, source, options) {
const existCodemod = config_1.TRANSFORM_OPTIONS.find(({ value }) => value === codemodName);
const codemodSelected = !codemodName || (codemodName && !existCodemod) ? await selectCodemod() : codemodName;
if (!codemodSelected) {
console.info('> Codemod is not selected. Exits the program. \n');
process.exit(1);
}
const sourceSelected = source || (await (0, prompts_2.promptSource)('Which files or directories should the codemods be applied to?'));
if (!sourceSelected) {
console.info('> Source path for project is not selected. Exits the program. \n');
process.exit(1);
}
const transformerPath = (0, node_path_1.join)(transformerDirectory, `${codemodSelected}.js`);
const args = {
...options,
verbose: options?.verbose ? 2 : 0,
babel: false,
ignorePattern: '**/node_modules/**',
extensions: 'cts,mts,ts,js,mjs,cjs',
};
await (0, Runner_1.run)(transformerPath, [(0, node_path_1.resolve)(sourceSelected)], args);
}