tg-commander
Version:
<p align="center"><img src="https://github.com/stone-jin/tg-commander/raw/master/assets/logo.png" alt="tg-commander logo" width="150px" height="150px"></p>
64 lines (63 loc) • 3.2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var commander_1 = __importDefault(require("commander"));
require("reflect-metadata");
var function_reflect_utils_1 = require("../utils/function-reflect-utils");
var ioc_utils_1 = require("../utils/ioc-utils");
var params_utils_1 = require("../utils/params-utils");
function TgCommand(constructor) {
var instance = null;
if (Reflect.getMetadata("instance", constructor.prototype)) {
instance = Reflect.getMetadata("instance", constructor.prototype);
}
else {
var paramTypes = function_reflect_utils_1.FunctionReflectUtils.getFunctionTypes(constructor);
var paramNames = params_utils_1.ParamsUtils.getConstructorParamList(constructor);
if (paramTypes) {
for (var i = 0; i < paramTypes.length; i++) {
if (!paramTypes[i]) {
console.error(constructor.name + "\u6784\u9020\u51FD\u6570\u4E2D\u7684" + paramNames[i] + " \u4E0D\u80FD\u88AB\u6CE8\u5165,\n \u56E0\u4E3A" + paramNames[i] + " \u7C7B\u578B\u7684\u6784\u9020\u51FD\u6570\u4E2D\u53C8\u6CE8\u5165\u4E86" + constructor.name + "\u7684\u6210\u5458");
process.exit(-1);
}
}
}
var params = ioc_utils_1.IocUtils.iocInject(constructor, paramNames, paramTypes);
instance = Reflect.construct(constructor, params);
Reflect.defineMetadata("instance", instance, constructor.prototype);
var options = Reflect.getMetadata("tgOptions", constructor.prototype);
var _loop_1 = function (option) {
if (option.name.indexOf("[") >= 0) {
commander_1.default.option(option.name, option.description, function (arg1, arg2) {
instance[option.to] = arg1;
});
instance[option.to] = option.defaultValue;
}
else {
var result = /\-\-(\w+)/.exec(option.name);
commander_1.default.option(option.name, option.description, function (v, total) {
console.log(commander_1.default.online);
}, option.defaultValue);
instance[option.to] = commander_1.default[result[1]];
}
};
for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
var option = options_1[_i];
_loop_1(option);
}
var commands = Reflect.getMetadata("Command", constructor.prototype);
for (var _a = 0, commands_1 = commands; _a < commands_1.length; _a++) {
var command = commands_1[_a];
var result = commander_1.default.command(command.cmd).action(command.fn.bind(instance));
if (command.alias && command.alias.length > 0) {
result = result.alias(command.alias);
}
if (command.description && command.description.length > 0) {
result.description(command.description);
}
}
}
}
exports.TgCommand = TgCommand;