@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
JavaScript
;
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);
};
ShellActivity.ρAnn = 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