UNPKG

@tsdi/pack

Version:

@tsdi/pack is simple build tasks, base on AOP, Ioc container, via @tsdi. dev build pack activities.

160 lines (158 loc) 6.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ShellActivity = void 0; var tslib_1 = require("tslib"); var child_process_1 = require("child_process"); var ioc_1 = require("@tsdi/ioc"); var components_1 = require("@tsdi/components"); var activities_1 = require("@tsdi/activities"); var NodeActivity_1 = require("../NodeActivity"); var preWordExp = /^[a-zA-Z]/; /** * Shell Task * * @class ShellActivity * @implements {ITask} */ var ShellActivity = /** @class */ (function (_super) { tslib_1.__extends(ShellActivity, _super); function ShellActivity() { return _super !== null && _super.apply(this, arguments) || this; } ShellActivity.prototype.execute = function (ctx) { return tslib_1.__awaiter(this, void 0, void 0, function () { var shell, options, args, argstrs, allowError, shells; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, ctx.resolveExpression(this.shell)]; case 1: shell = _a.sent(); return [4 /*yield*/, ctx.resolveExpression(this.options)]; case 2: options = _a.sent(); return [4 /*yield*/, ctx.resolveExpression(this.args)]; case 3: args = _a.sent(); argstrs = ioc_1.isArray(args) ? args : this.formatArgs(args); return [4 /*yield*/, ctx.resolveExpression(this.allowError)]; case 4: allowError = _a.sent(); shells = ioc_1.isArray(shell) ? shell : [shell]; if (!this.parallel) return [3 /*break*/, 6]; return [4 /*yield*/, Promise.all(shells.map(function (sh) { return _this.execShell(sh, argstrs, options, allowError); }))]; case 5: _a.sent(); return [3 /*break*/, 8]; case 6: return [4 /*yield*/, ioc_1.PromiseUtil.step(shells.map(function (sh) { return function () { return _this.execShell(sh, argstrs, options, allowError); }; }))]; case 7: _a.sent(); _a.label = 8; case 8: return [2 /*return*/]; } }); }); }; ShellActivity.prototype.formatShell = function (shell, args) { if (args.length) { return shell + ' ' + args.join(' '); } return shell; }; ShellActivity.prototype.formatArgs = function (args) { var _this = this; var strArgs = []; ioc_1.lang.forIn(args, function (val, k) { if (k === 'root' || !preWordExp.test(k)) { return; } if (ioc_1.isArray(val)) { strArgs.push("--" + k + " " + val.join(',')); } else if (!ioc_1.isNullOrUndefined(val)) { var arg = _this.formatArg(val, k, args); if (arg) { strArgs.push(arg); } } }); return strArgs; }; ShellActivity.prototype.formatArg = function (arg, key, args) { if (ioc_1.isBoolean(arg) && arg) { return "--" + key; } if (!ioc_1.isNullOrUndefined(arg)) { return "--" + key + " " + arg; } return ''; }; ShellActivity.prototype.execShell = function (cmd, args, options, allowError) { var _this = this; cmd = this.formatShell(cmd, args); if (!cmd) { return Promise.resolve(); } return new Promise(function (resolve, reject) { var shell = child_process_1.exec(cmd, options, function (err, stdout, stderr) { if (err) { reject(err); } else { resolve(stdout); } }); shell.stdout.on('data', function (data) { _this.checkStdout(data, resolve, reject); }); shell.stderr.on('data', function (err) { _this.checkStderr(err, reject, allowError); }); shell.on('exit', function (code) { var msg = "exit child process with code\uFF1A" + code + " "; console.log(msg); if (code > 0) { reject(new Error(msg)); } }); }); }; ShellActivity.prototype.checkStderr = function (err, reject, allowError) { console.error(err); if (allowError === false) { reject(err); } }; ShellActivity.prototype.checkStdout = function (data, resolve, reject) { console.log(data); }; ShellActivityAnn = function () { return { "name": "ShellActivity", "params": { "execute": ["ctx"], "formatShell": ["shell", "args"], "formatArgs": ["args"], "formatArg": ["arg", "key", "args"], "execShell": ["cmd", "args", "options", "allowError"], "checkStderr": ["err", "reject", "allowError"], "checkStdout": ["data", "resolve", "reject"] } }; }; tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], ShellActivity.prototype, "shell", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], ShellActivity.prototype, "args", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], ShellActivity.prototype, "options", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], ShellActivity.prototype, "allowError", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Boolean) ], ShellActivity.prototype, "parallel", void 0); ShellActivity = tslib_1.__decorate([ activities_1.Task('shell') ], ShellActivity); return ShellActivity; }(NodeActivity_1.NodeActivity)); exports.ShellActivity = ShellActivity; //# sourceMappingURL=../sourcemaps/tasks/ShellActivity.js.map