flow-up
Version:
Easily add flowtype to your codebase
130 lines (98 loc) • 4.15 kB
JavaScript
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;
})()();
;