UNPKG

code-migration-helpers

Version:

Provides useful (but currently not thorough) code migration helpers

122 lines 6.18 kB
#!/usr/bin/env node import cliui from '@isaacs/cliui'; import fsExtra from 'fs-extra'; import { addExtCmd } from './addExt.mjs'; import { addVitestToTestCmd } from './addVitestToTests.mjs'; import { renameExtCmd } from './renameExt.mjs'; import { renameFileCmd } from './renameFile.mjs'; import { getArg, getMainCmd, getRequiredArg, parseCLIArgs, printCommand, } from './utils/cli/cli.mjs'; import { kAppliesToMessage, kCmdVars } from './utils/constants.mjs'; import { kProcessCmdType } from './utils/types.mjs'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const ui = new cliui({ width: 80, padding: [0, 4, 0, 4] }); async function main() { const pkgJson = await fsExtra.readJSON('./package.json'); const name = pkgJson.name || 'code-migration-helpers'; const description = pkgJson.description || 'Provides useful (but currently not thorough) code migration helpers'; const version = pkgJson.version || '0.1.0'; const args = parseCLIArgs(process.argv.slice(2)); const mainCmd = getMainCmd(args); switch (mainCmd) { case kProcessCmdType.addExtToImports: { const folderpath = getRequiredArg({ args, name: kCmdVars.folder }); const from = getArg({ args, name: kCmdVars.from }); const to = getArg({ args, name: kCmdVars.to }); await addExtCmd(folderpath, { from, to }); break; } case kProcessCmdType.jestToVitest: { const folderpath = getRequiredArg({ args, name: kCmdVars.folder }); await addVitestToTestCmd(folderpath); break; } case kProcessCmdType.renameExt: { const folderpath = getRequiredArg({ args, name: kCmdVars.folder }); const from = getRequiredArg({ args, name: kCmdVars.from }); const to = getRequiredArg({ args, name: kCmdVars.to }); await renameExtCmd(folderpath, { from, to }); break; } case kProcessCmdType.addIndexFile: { // const folderpath = getRequiredArg({args, name: kCmdVars.folder}); // const includeArg = getRequiredArg({args, name: kCmdVars.include}); // const excludeArg = getRequiredArg({args, name: kCmdVars.exclude}); // const absFolderpath = path.isAbsolute(folderpath) // ? folderpath // : path.join(process.cwd(), folderpath); // await addIndexFileCmd({ // absFolderpath, // includeStrOrRegex: [includeArg], // excludeStrOrRegex: [excludeArg], // }); break; } case kProcessCmdType.renameFile: { const folderpath = getRequiredArg({ args, name: kCmdVars.folder }); const fromArg = getRequiredArg({ args, name: kCmdVars.include }); const toArg = getRequiredArg({ args, name: kCmdVars.exclude }); const preserveCaseArg = getRequiredArg({ args, name: kCmdVars.exclude }); const preserveCase = !!preserveCaseArg; await renameFileCmd(folderpath, { asks: [{ preserveCase, from: fromArg, to: toArg }], }); break; } case kProcessCmdType.version: ui.div(`${name} - v${version}`); console.log(ui.toString()); break; case kProcessCmdType.help: default: ui.div(`${name} - v${version}`); ui.div({ text: 'DESCRIPTION', width: 20 }, description); printCommand(ui, kProcessCmdType.addExtToImports, 'Add extension to relative imports', [ { name: kCmdVars.folder, description: 'folderpath to operate in' }, { name: kCmdVars.from, description: 'existing relative import extension to replace', }, { name: kCmdVars.to, description: 'extension to replace with' }, ]); printCommand(ui, kProcessCmdType.jestToVitest, 'Import "vitest" test constructs and replace "jest.fn" with "vi.fn". ' + 'Does nothing if there\'s an existing "vitest" import. ' + kAppliesToMessage, [{ name: kCmdVars.folder, description: 'folderpath to operate in' }]); printCommand(ui, kProcessCmdType.renameExt, 'Rename filename extensions', [ { name: kCmdVars.folder, description: 'folderpath to operate in' }, { name: kCmdVars.from, description: 'extension to replace' }, { name: kCmdVars.to, description: 'extension to replace with' }, ]); printCommand(ui, kProcessCmdType.addIndexFile, 'Recursively adds index files to folders', [ { name: kCmdVars.folder, description: 'folderpath to operate in' }, { name: kCmdVars.include, description: 'string or js-flavor regex of file and folder names to include', }, { name: kCmdVars.exclude, description: 'string or js-flavor regex of file and folder names to exclude', }, ]); printCommand(ui, kProcessCmdType.renameFile, 'Recursively adds index files to folders', [ { name: kCmdVars.folder, description: 'folderpath to operate in' }, { name: kCmdVars.from, description: 'string or js-flavor regex of file and folder name to replace', }, { name: kCmdVars.to, description: 'string to replace with' }, { name: kCmdVars.preserveCase, description: 'whether to preserve case when replacing. ' + 'will preserve case if passed in any form, omit to not preserve case.', }, ]); printCommand(ui, kProcessCmdType.help, 'Print commands'); printCommand(ui, kProcessCmdType.version, 'Print version'); console.log(ui.toString()); break; } } main().catch(console.error.bind(console)); //# sourceMappingURL=index.js.map