UNPKG

flow-up

Version:

Easily add flowtype to your codebase

130 lines (98 loc) 4.15 kB
#!/usr/bin/env node 'use strict'; var _meow = require('meow'); var _meow2 = _interopRequireDefault(_meow); var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora); var _logSymbols = require('log-symbols'); var _logSymbols2 = _interopRequireDefault(_logSymbols); var _index = require('../index'); var _defaults = require('../defaults'); var _helpers = require('../helpers'); var helpers = _interopRequireWildcard(_helpers); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const getFlowupConfig = (pkgOpts, cliOpts) => ({ writeConfig: cliOpts.writeConfig || pkgOpts.config || _defaults.flowupconfig.writeConfig, writePragma: cliOpts.writePragma || pkgOpts.pragma || _defaults.flowupconfig.writePragma }); const cli = (0, _meow2.default)(` Usage: $ flowup [opts] [filename ...] where [filename ...] should be a valid glob pattern(s). Options: --pragma Add flowtype pragma to files. --no-pragma Avoid writing pragma to files. --config Create or update .flowconfig file. Will write/update the file based on configuration provided as "flow" in package file. --no-config Skip writing config file. Example: $ flowup --pragma --no-config "test/**/*.js" NOTE: Remember to wrap glob in double-quotes. `, { flags: { writePragma: { type: 'boolean', alias: 'pragma' }, writeConfig: { type: 'boolean', alias: 'config' } } }); const filepatterns = cli.input; const cliFlags = cli.flags; const cwd = process.cwd(); // $FlowFixMe const pkg = require(cwd + '/package.json'); const config = Object.assign({}, getFlowupConfig(helpers.isFlowupInPkg(pkg) ? pkg.flowup : {}, cliFlags), { flow: helpers.isFlowInPkg(pkg) ? Object.assign({}, _defaults.flowconfig, pkg.flow) : _defaults.flowconfig }); // initialize progress loader const spinLoader = (0, _ora2.default)('Initializing flowup...').start(); // terminate program if arguments are missing or invalid if (config.writePragma && filepatterns.length === 0) { console.log('\n [ERROR: Flow Pragma - Missing file patterns. See usage below.]'); cli.showHelp(); process.exit(0); } // execute tasks based on options (() => { var _ref = _asyncToGenerator(function* () { if (config.writeConfig) { spinLoader.text = 'Writing flow configuration...'; yield Promise.resolve().then(function () { (0, _index.writeFlowconfig)(config); }).then(function (err) { if (err) { throw err; } spinLoader.stopAndPersist({ symbol: _logSymbols2.default.success, text: 'Saved flowconfig file.' }); }).catch(function (err) { spinLoader.fail(err); }); } if (config.writePragma) { spinLoader.text = 'Writing flow pragma to files...'; yield Promise.resolve().then(function () { (0, _index.writeFlowPragma)(filepatterns); }).then(function () { spinLoader.stopAndPersist({ symbol: _logSymbols2.default.success, text: 'Wrote flow pragma to source files.' }); }).catch(function (err) { spinLoader.fail(err); }); } spinLoader.succeed('Completed.'); }); function executeTasks() { return _ref.apply(this, arguments); } return executeTasks; })()();