@tsdi/cli
Version:
296 lines (295 loc) • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs");
var path = require("path");
var chalk = require("chalk");
var program = require("commander");
var child_process_1 = require("child_process");
var util_1 = require("util");
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');
}
program
.version(packageConf.version)
.command('init [action]')
.description('init tsioc project. action is project init type: "activity","pack", "boot", default: tsioc')
.option('-b, --browser [bool]', 'init browser project or not.')
.option('-v, --version [string]', 'the version of tsioc to init.')
.option('--dev [bool]', 'init tsioc with devDependencies.')
.action(function (action, options) {
if (!cwdPackageConf) {
child_process_1.execSync('npm init', { cwd: processRoot });
}
var packs = ['typescript', 'ts-node', 'tsconfig-paths', 'tslib', 'zone.js', 'bluebird'];
var initcmds = packs.join('@latest ') + '@latest' + " ";
var version = util_1.isString(options.version) ? "@" + (options.version || 'latest') + " " : '@latest ';
var cmds;
switch (action) {
case 'activity':
console.log(chalk.gray('init activity project...'));
cmds = [
'@tsdi/ioc',
'@tsdi/core',
'@tsdi/annotations',
'@tsdi/aop',
'@tsdi/logs',
'@tsdi/boot',
'@tsdi/activities'
];
if (options.browser) {
cmds.push('@tsdi/platform-browser');
cmds.push('@tsdi/platform-browser-boot');
cmds.push('@tsdi/platform-browser-activities');
}
else {
cmds.push('@tsdi/platform-server');
cmds.push('@tsdi/platform-server-boot');
cmds.push('@tsdi/platform-server-activities');
}
initcmds = "npm install " + initcmds + " " + (cmds.join(version) + version) + " --save" + (options.dev ? '-dev' : '');
console.log(initcmds);
child_process_1.execSync(initcmds, { cwd: processRoot });
break;
case 'pack':
console.log(chalk.gray('init pack project...'));
cmds = [
'@tsdi/ioc',
'@tsdi/core',
'@tsdi/annotations',
'@tsdi/aop',
'@tsdi/logs',
'@tsdi/boot',
'@tsdi/platform-server',
'@tsdi/platform-server-boot',
'@tsdi/activities',
'@tsdi/platform-server-activities',
'@tsdi/pack',
'@tsdi/unit',
'@tsdi/unit-console'
];
initcmds = "npm install " + initcmds + " " + (cmds.join(version) + version) + " --save" + (options.dev ? '-dev' : '');
console.log(initcmds);
child_process_1.execSync(initcmds, { cwd: processRoot });
break;
case 'boot':
console.log(chalk.gray('init boot project...'));
cmds = [
'@tsdi/ioc',
'@tsdi/core',
'@tsdi/annotations',
'@tsdi/aop',
'@tsdi/logs',
'@tsdi/boot'
];
if (options.browser) {
cmds.push('@tsdi/platform-browser');
cmds.push('@tsdi/platform-browser-boot');
}
else {
cmds.push('@tsdi/platform-server');
cmds.push('@tsdi/platform-server-boot');
}
initcmds = "npm install " + initcmds + " " + (cmds.join(version) + version) + " --save" + (options.dev ? '-dev' : '');
console.log(initcmds);
child_process_1.execSync(initcmds, { cwd: processRoot });
break;
default:
console.log(chalk.gray('init tsioc project...'));
cmds = [
'@tsdi/ioc',
'@tsdi/core',
'@tsdi/annotations',
'@tsdi/aop',
'@tsdi/logs'
];
if (options.browser) {
cmds.push('@tsdi/platform-browser');
}
else {
cmds.push('@tsdi/platform-server');
}
initcmds = "npm install " + initcmds + " " + (cmds.join(version) + version) + " --save" + (options.dev ? '-dev' : '');
console.log(initcmds);
child_process_1.execSync(initcmds, { cwd: processRoot });
break;
}
});
function requireRegisters() {
requireCwd('tsconfig-paths').register();
}
function runActivity(fileName, options) {
var _a;
var wf = requireCwd('@tsdi/activities');
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.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);
}
program
.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/**/*.(js|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();
fileName = vaildifyFile(fileName);
if (options.activity) {
runActivity(fileName, options);
}
else {
requireCwd(resolve.sync(fileName, { basedir: processRoot, package: cwdPackageConf }));
}
});
program
.command('build [taskfile]')
.description('build project, run build activities')
.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('serve [taskfile]')
.description('spawn the local express server')
.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('-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')
// .option('--src [string]', 'specify a path to an existing src folder')
// .option('--skip-install [bool]', 'prevents install during scaffold')
// .option('--yarn [bool]', 'use yarn instead of npm to install')
// .action((app, options) => {
// if (fs.existsSync(path.join(processRoot, app))) {
// console.log(chalk.red(app + ' already exists'));
// process.exit();
// }
// if (!fs.existsSync(path.join(processRoot, app))) {
// mkdir(path.join(processRoot, app));
// }
// cp(path.join(cliRoot, 'src', 'scaffold', 'root', 'ngr.config.js'), path.join(processRoot, program.new));
// })
// .command('g, generate [string]')
// .description('generate schematics packaged with cmd')
// .option('--ng [bool]', 'generate angular project')
// .action((build, options) => {
// });
program.parse(process.argv);