UNPKG

puml2code

Version:

PlantUML to code generator

74 lines (67 loc) 2.32 kB
// 3rd party modules const _ = require('lodash'); const program = require('commander'); // application modules const Puml = require('./'); const logger = require('./logger'); const options = new RegExp(`^(${_.reduce(Puml.languages, (acc, ext) => `${acc}${ext}|`, '')})$`, 'i'); const parseArgs = argv => program .version('0.1.0') .option('-i, --input [file]', 'input .puml file, or "stdin"') .option('-l, --lang [lang]', 'Optional output source code language', options, 'ecmascript6') .option('-o, --out [path]', 'Output path. When not given output is printed to console.') .on('--help', () => { const print = console.log; // eslint-disable-line no-console print(''); print(`Supported languages: ${Puml.languages.join(', ')}`); print(''); print('Examples:'); print(' $ puml2code -i input.puml -l ecmascript6'); print(' $ puml2code -h'); print('Use DEBUG=puml2code env variable to get traces. Example:'); print(' $ DEBUG=puml2code puml2code -i input.puml'); }) .parse(argv); const fromStdin = () => { process.stdin.resume(); process.stdin.setEncoding('utf8'); return Promise.resolve(new Puml(process.stdin)); }; const fromFile = input => Promise.resolve(Puml.fromFile(input)); const getSource = (args) => { if (!args.input) { console.error('Error: input option is required'); // eslint-disable-line no-console args.help(); } if (args.input !== 'stdin') { logger.debug(`Reading file: ${args.input}`); // eslint-disable-line no-console return fromFile(args.input); } console.log('Reading puml from stdin..'); // eslint-disable-line no-console return fromStdin(); }; const execute = async (argv = process.argv, printer = console.log) => { // eslint-disable-line no-console let args = { removeAllListeners: () => {} }; try { args = parseArgs(argv); const puml = await getSource(args); const output = await puml.generate(args.lang); if (args.out) { await output.save(args.out); } else { output.print(printer); } logger.debug('ready'); args.removeAllListeners(); return 0; } catch (error) { logger.error(error); args.removeAllListeners(); throw error; } }; module.exports = execute; module.exports.parseArgs = parseArgs; if (require.main === module) { execute(); }