UNPKG

@mvx/cli

Version:
190 lines (189 loc) 6.81 kB
#!/usr/bin/env node "use strict"; 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);