astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
67 lines (55 loc) • 5.97 kB
JavaScript
import fs from 'fs-extra'
import dedent from 'dedent-js'
import inquirer from 'inquirer'
/* eslint-disable no-console */
const init = {
command: 'init [file]',
describe: 'create a transform file',
builder: (yargs) =>
yargs
.positional('file', {
describe: `name of the transform file to create`,
type: 'string',
default: 'astx.js',
})
.option('style', {
alias: 's',
type: 'string',
choices: ['find-replace', 'function'],
}),
handler: async ({ file = 'astx.js', style }) => {
if (await fs.pathExists(file)) {
console.error(
`Path already exists: ${/^[./]/.test(file) ? file : './' + file}`
)
process.exit(1)
}
if (!style) {
;({ style } = await inquirer.prompt([
{
name: 'style',
type: 'list',
choices: ['find-replace', 'function'],
},
]))
}
const content =
style === 'function'
? dedent`
exports.astx = ({ astx, t, expression, statement, statements, report }) => {
// example: astx.find\`$foo\`().replace\`$foo\`()
}
`
: dedent`
exports.find = \`
\`
exports.where = {
}
exports.replace = \`
\`
`
await fs.writeFile(file, content, 'utf8')
console.error(`Wrote ${/^[./]/.test(file) ? file : './' + file}`)
},
}
export default init //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImRlZGVudCIsImlucXVpcmVyIiwiaW5pdCIsImNvbW1hbmQiLCJkZXNjcmliZSIsImJ1aWxkZXIiLCJ5YXJncyIsInBvc2l0aW9uYWwiLCJ0eXBlIiwiZGVmYXVsdCIsIm9wdGlvbiIsImFsaWFzIiwiY2hvaWNlcyIsImhhbmRsZXIiLCJmaWxlIiwic3R5bGUiLCJwYXRoRXhpc3RzIiwiY29uc29sZSIsImVycm9yIiwidGVzdCIsInByb2Nlc3MiLCJleGl0IiwicHJvbXB0IiwibmFtZSIsImNvbnRlbnQiLCJ3cml0ZUZpbGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luaXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJndW1lbnRzLCBBcmd2LCBDb21tYW5kTW9kdWxlIH0gZnJvbSAneWFyZ3MnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgZGVkZW50IGZyb20gJ2RlZGVudC1qcydcbmltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gIGZpbGU/OiBzdHJpbmdcbiAgc3R5bGU/OiBzdHJpbmdcbn1cblxuY29uc3QgaW5pdDogQ29tbWFuZE1vZHVsZTxPcHRpb25zPiA9IHtcbiAgY29tbWFuZDogJ2luaXQgW2ZpbGVdJyxcbiAgZGVzY3JpYmU6ICdjcmVhdGUgYSB0cmFuc2Zvcm0gZmlsZScsXG4gIGJ1aWxkZXI6ICh5YXJnczogQXJndjxPcHRpb25zPikgPT5cbiAgICB5YXJnc1xuICAgICAgLnBvc2l0aW9uYWwoJ2ZpbGUnLCB7XG4gICAgICAgIGRlc2NyaWJlOiBgbmFtZSBvZiB0aGUgdHJhbnNmb3JtIGZpbGUgdG8gY3JlYXRlYCxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdhc3R4LmpzJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdzdHlsZScsIHtcbiAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGNob2ljZXM6IFsnZmluZC1yZXBsYWNlJywgJ2Z1bmN0aW9uJ10sXG4gICAgICB9KSxcbiAgaGFuZGxlcjogYXN5bmMgKHtcbiAgICBmaWxlID0gJ2FzdHguanMnLFxuICAgIHN0eWxlLFxuICB9OiBBcmd1bWVudHM8T3B0aW9ucz4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhmaWxlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFBhdGggYWxyZWFkeSBleGlzdHM6ICR7L15bLi9dLy50ZXN0KGZpbGUpID8gZmlsZSA6ICcuLycgKyBmaWxlfWBcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICA7KHsgc3R5bGUgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3R5bGUnLFxuICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICBjaG9pY2VzOiBbJ2ZpbmQtcmVwbGFjZScsICdmdW5jdGlvbiddLFxuICAgICAgICB9LFxuICAgICAgXSkpXG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgc3R5bGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBkZWRlbnRgXG4gICAgICAgICAgZXhwb3J0cy5hc3R4ID0gKHsgYXN0eCwgdCwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBzdGF0ZW1lbnRzLCByZXBvcnQgfSkgPT4ge1xuICAgICAgICAgICAgLy8gZXhhbXBsZTogYXN0eC5maW5kXFxgJGZvb1xcYCgpLnJlcGxhY2VcXGAkZm9vXFxgKClcbiAgICAgICAgICB9XG4gICAgICAgIGBcbiAgICAgICAgOiBkZWRlbnRgXG4gICAgICAgICAgZXhwb3J0cy5maW5kID0gXFxgXG5cbiAgICAgICAgICBcXGAgXG5cbiAgICAgICAgICBleHBvcnRzLndoZXJlID0ge1xuICAgICAgICAgIFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV4cG9ydHMucmVwbGFjZSA9IFxcYFxuXG4gICAgICAgICAgXFxgXG4gICAgICAgIGBcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgY29udGVudCwgJ3V0ZjgnKVxuICAgIGNvbnNvbGUuZXJyb3IoYFdyb3RlICR7L15bLi9dLy50ZXN0KGZpbGUpID8gZmlsZSA6ICcuLycgKyBmaWxlfWApXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRcbiJdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU9BLEVBQVAsTUFBZSxVQUFmO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixXQUFuQjtBQUNBLE9BQU9DLFFBQVAsTUFBcUIsVUFBckI7O0FBRUE7Ozs7Ozs7QUFPQSxNQUFNQyxJQUE0QixHQUFHO0VBQ25DQyxPQUFPLEVBQUUsYUFEMEI7RUFFbkNDLFFBQVEsRUFBRSx5QkFGeUI7RUFHbkNDLE9BQU8sRUFBRSxDQUFDQyxLQUFEO0VBQ1BBLEtBQUs7RUFDRkMsVUFESCxDQUNjLE1BRGQsRUFDc0I7SUFDbEJILFFBQVEsRUFBRyxzQ0FETztJQUVsQkksSUFBSSxFQUFFLFFBRlk7SUFHbEJDLE9BQU8sRUFBRSxTQUhTLEVBRHRCOztFQU1HQyxNQU5ILENBTVUsT0FOVixFQU1tQjtJQUNmQyxLQUFLLEVBQUUsR0FEUTtJQUVmSCxJQUFJLEVBQUUsUUFGUztJQUdmSSxPQUFPLEVBQUUsQ0FBQyxjQUFELEVBQWlCLFVBQWpCLENBSE0sRUFObkIsQ0FKaUM7O0VBZW5DQyxPQUFPLEVBQUUsT0FBTztJQUNkQyxJQUFJLEdBQUcsU0FETztJQUVkQyxLQUZjLEVBQVA7RUFHZ0M7SUFDdkMsSUFBSSxNQUFNaEIsRUFBRSxDQUFDaUIsVUFBSCxDQUFjRixJQUFkLENBQVYsRUFBK0I7TUFDN0JHLE9BQU8sQ0FBQ0MsS0FBUjtNQUNHLHdCQUF1QixRQUFRQyxJQUFSLENBQWFMLElBQWIsSUFBcUJBLElBQXJCLEdBQTRCLE9BQU9BLElBQUssRUFEbEU7O01BR0FNLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWI7SUFDRDtJQUNELElBQUksQ0FBQ04sS0FBTCxFQUFZO01BQ1YsQ0FBQyxDQUFDLEVBQUVBLEtBQUYsS0FBWSxNQUFNZCxRQUFRLENBQUNxQixNQUFULENBQWdCO01BQ2xDO1FBQ0VDLElBQUksRUFBRSxPQURSO1FBRUVmLElBQUksRUFBRSxNQUZSO1FBR0VJLE9BQU8sRUFBRSxDQUFDLGNBQUQsRUFBaUIsVUFBakIsQ0FIWCxFQURrQyxDQUFoQixDQUFuQjs7O0lBT0Y7SUFDRCxNQUFNWSxPQUFPO0lBQ1hULEtBQUssS0FBSyxVQUFWO0lBQ0lmLE1BQU87QUFDakI7QUFDQTtBQUNBO0FBQ0EsU0FMTTtJQU1JQSxNQUFPO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQW5CSTtJQW9CQSxNQUFNRCxFQUFFLENBQUMwQixTQUFILENBQWFYLElBQWIsRUFBbUJVLE9BQW5CLEVBQTRCLE1BQTVCLENBQU47SUFDQVAsT0FBTyxDQUFDQyxLQUFSLENBQWUsU0FBUSxRQUFRQyxJQUFSLENBQWFMLElBQWIsSUFBcUJBLElBQXJCLEdBQTRCLE9BQU9BLElBQUssRUFBL0Q7RUFDRCxDQXhEa0MsRUFBckM7OztBQTJEQSxlQUFlWixJQUFmIn0=