UNPKG

@expressjs/codemod

Version:

Codemods for updating express servers.

59 lines (58 loc) 2.37 kB
"use strict"; 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'); }