@mvx/cli
Version:
190 lines (189 loc) • 6.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var shelljs_1 = require("shelljs");
var fs = require("fs");
var path = require("path");
var chalk = require("chalk");
var program = require("commander");
var util_1 = require("util");
var fs_1 = require("fs");
var path_1 = require("path");
var child_process_1 = require("child_process");
var resolve = require('resolve');
var cliRoot = path.join(path.normalize(__dirname), '../');
var packageConf = require(cliRoot + '/package.json');
var processRoot = path.join(path.dirname(process.cwd()), path.basename(process.cwd()));
process.env.INIT_CWD = processRoot;
var cwdPackageConf = path.join(processRoot, '/package.json');
if (!fs.existsSync(cwdPackageConf)) {
cwdPackageConf = undefined;
}
function requireCwd(id) {
try {
return require(resolve.sync(id, { basedir: processRoot, package: cwdPackageConf }));
}
catch (err) {
// require ts-config/paths or globals
return require(id);
}
}
requireCwd('ts-node').register();
if (process.argv.indexOf('scaffold') > -1) {
process.argv.push('--verbose');
}
function requireRegisters() {
requireCwd('tsconfig-paths').register();
}
function runActivity(fileName, options) {
var _a;
var wf = requireCwd('@tsdi/activities');
// const pk = requireCwd('@tsdi/pack');
var config;
if (options.config && util_1.isString(options.config)) {
config = requireCwd(options.config);
}
config = config || {};
if (util_1.isBoolean(options.debug)) {
config.debug = options.debug;
}
var md = requireCwd(fileName);
var activites = Object.values(md);
if (activites.some(function (v) { return wf.isAcitvityClass(v); })) {
(_a = wf.Workflow).sequence.apply(_a, activites.filter(function (v) { return wf.isAcitvityClass(v); }));
}
}
function vaildifyFile(fileName, defaultFile) {
if (defaultFile === void 0) { defaultFile = 'taskfile'; }
if (!fileName) {
defaultFile = defaultFile.trim().replace(/(\.ts|\.js)$/, '');
['.ts', '.js'].some(function (ext) {
if (fs.existsSync(path.join(processRoot, defaultFile + ext))) {
fileName = defaultFile + ext;
return true;
}
});
fileName && process.argv.push(fileName);
}
fileName = path_1.normalize(fileName);
if (!fs.existsSync(path.join(processRoot, fileName))) {
console.log(chalk.red("'" + path.join(processRoot, fileName) + "' not exsists"));
process.exit(1);
}
return path.join(processRoot, fileName);
}
function copyDir(src, dist, options) {
if (!fs_1.existsSync(dist)) {
shelljs_1.mkdir('-p', dist);
}
if (options && options.force) {
shelljs_1.rm('-rf', path_1.normalize(path_1.join(dist, '/')));
shelljs_1.mkdir('-p', path_1.normalize(path_1.join(dist, '/')));
shelljs_1.cp('-R', path_1.normalize(src + '/*'), path_1.normalize(path_1.join(dist, '/')));
}
else {
shelljs_1.cp('-R', path_1.normalize(src + '/*'), path_1.normalize(path_1.join(dist, '/')));
}
}
program
.version(packageConf.version)
.command('test [files]')
.description('run unit test.')
.option('--config [string]', 'config file path.')
.option('-b, --browser [bool]', 'test browser project or not.')
.option('--debug [bool]', 'enable debug log or not')
.action(function (files, options) {
requireRegisters();
if (util_1.isArray(files)) {
files = files.filter(function (f) { return f && util_1.isString(f); });
}
else {
if (!files || !util_1.isString(files)) {
files = 'test/**/*.ts';
}
}
var unit = requireCwd('@tsdi/unit');
var reporter;
if (options.browser) {
reporter = requireCwd('@tsdi/unit-karma');
}
else {
reporter = requireCwd('@tsdi/unit-console').ConsoleReporter;
}
var config;
if (util_1.isString(options.config)) {
config = requireCwd(options.config);
}
config = config || {};
config.baseURL = config.baseURL || processRoot;
if (util_1.isBoolean(options.debug)) {
config.debug = options.debug;
}
unit.runTest(files, config, reporter);
});
program
.command('run [fileName]')
.description('run ts file.')
.option('--activity [bool]', 'target file is activity.')
.option('--config [string]', 'path to configuration file for activities build')
.option('--debug [bool]', 'enable debug log or not')
.allowUnknownOption(true)
.action(function (fileName, options) {
requireRegisters();
if (options.activity) {
runActivity(vaildifyFile(fileName), options);
}
else {
fileName = vaildifyFile(fileName, 'src/app.ts');
requireCwd(resolve.sync(fileName, { basedir: processRoot, package: cwdPackageConf }));
}
});
program
.command('build [taskfile]')
.description('build the application')
.option('--boot [bool]', 'target file with Workflow instace to boot activity.')
.option('-e, --env [string]', 'use that particular environment.ts during the build, just like @angular/cli')
.option('-c, --clean [bool]', 'destroy the build folder prior to compilation, default for prod')
.option('-w, --watch [bool]', 'listen for changes in filesystem and rebuild')
.option('--config [string]', 'path to configuration file for activities build')
.option('--debug [bool]', 'enable debug log or not')
.option('-d, --deploy [bool]', 'run deploy activity')
.option('--verbose [bool]', 'log all messages in list format')
.option('--closure [bool]', 'bundle and optimize with closure compiler (default)')
.option('-r, --rollup [bool]', 'bundle with rollup and optimize with closure compiler')
.allowUnknownOption(true)
.action(function (taskfile, options) {
requireRegisters();
taskfile = vaildifyFile(taskfile);
if (options.boot) {
requireCwd(taskfile);
}
else {
runActivity(taskfile, options);
}
});
program
.command('new [app]')
.description('new my-app')
.action(function (app, options) {
var dist = path.join(processRoot, app);
if (fs.existsSync(dist)) {
console.log(chalk.red(app + ' already exists'));
process.exit();
}
copyDir(path_1.join(__dirname, '../temp'), dist);
child_process_1.exec("cd " + dist + " && npm i", function (err, out) {
if (err) {
console.error(err);
}
else {
console.log(out);
}
});
});
// .command('g, generate [string]')
// .description('generate schematics packaged with cmd')
// .option('--ng [bool]', 'generate angular project')
// .action((build, options) => {
// });
program.parse(process.argv);