UNPKG

@kephas/core

Version:

Provides a common infrastructure for all the other Kephas Framework components: ambient services, dynamic reflection, composition, application management, and others.

100 lines 12.5 kB
/** * Arguments used in command line execution. * * @export * @class Args * @implements {Expando} */ export class Args { /** * Creates an instance of Args. * @param {(string | string[] | {})} [args] The arguments. * @memberof Args */ constructor(args) { if (typeof args === 'string') { this._fillArgsFromString(args, this); } else if (Array.isArray(args)) { this._fillArgsFromStringArray(args, this); } else if (typeof args === 'object') { this._fillArgsFromObject(args, this); } } _fillArgsFromObject(source, target) { for (let key in source) { target[key] = source[key]; } return target; } _fillArgsFromString(source, target) { var args = source.split(' ').filter(i => i !== ''); return this._fillArgsFromStringArray(args, target); } _fillArgsFromStringArray(source, target) { let key = ''; let value = null; let expectedValue = false; for (let currentArg of source) { var keyStartIndex = 0; if (currentArg.startsWith("--")) { keyStartIndex = 2; } else if (currentArg.startsWith("-")) { keyStartIndex = 1; } else if (currentArg.startsWith("/")) { // "/SomeSwitch" is equivalent to "--SomeSwitch" keyStartIndex = 1; } // if we received a new argument, but we expected a value, add the previous key with the value "true" if (expectedValue) { expectedValue = false; if (keyStartIndex > 0) { // set the previous key to true and continue with processing the current arg target[key] = true; } else { target[key] = Args._unescape(currentArg); continue; } } // currentArg starts a new argument var separator = currentArg.indexOf('='); if (separator >= 0) { // currentArg specifies a key with value key = Args._unescape(currentArg.substr(keyStartIndex, separator - keyStartIndex)); value = Args._unescape(currentArg.substr(separator + 1)); } else { // currentArg specifies only a key // If there is no prefix in current argument, consider it as a key with value "true" if (keyStartIndex == 0) { key = Args._unescape(currentArg); value = true; } else { key = Args._unescape(currentArg.substr(keyStartIndex)); expectedValue = true; } } // Override value when key is duplicated. So we always have the last argument win. if (!expectedValue) { target[key] = value; } } if (expectedValue) { target[key] = true; } return target; } static _unescape(value) { if (value.startsWith("\"") && value.endsWith("\"")) { value = value.substr(1, value.length - 2); return value.replace("\\\"", "\""); } return value; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlcGhhcy9jb3JlL3NyYy9saWIvY29tbWFuZHMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sSUFBSTtJQUNiOzs7O09BSUc7SUFDSCxZQUFZLElBQTZCO1FBQ3JDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEM7YUFDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QzthQUNJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBVSxFQUFFLE1BQWU7UUFDbkQsS0FBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFJLE1BQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBYyxFQUFFLE1BQWU7UUFDdkQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyx3QkFBd0Is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LyoqXHJcbiAqIEFyZ3VtZW50cyB1c2VkIGluIGNvbW1hbmQgbGluZSBleGVjdXRpb24uXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEFyZ3NcclxuICogQGltcGxlbWVudHMge0V4cGFuZG99XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXJncyBpbXBsZW1lbnRzIEV4cGFuZG8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEFyZ3MuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmcgfCBzdHJpbmdbXSB8IHt9KX0gW2FyZ3NdIFRoZSBhcmd1bWVudHMuXHJcbiAgICAgKiBAbWVtYmVyb2YgQXJnc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihhcmdzPzogc3RyaW5nIHwgc3RyaW5nW10gfCB7fSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsbEFyZ3NGcm9tU3RyaW5nKGFyZ3MsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGxBcmdzRnJvbVN0cmluZ0FycmF5KGFyZ3MsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsbEFyZ3NGcm9tT2JqZWN0KGFyZ3MsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9maWxsQXJnc0Zyb21PYmplY3Qoc291cmNlOiB7fSwgdGFyZ2V0OiBFeHBhbmRvKTogRXhwYW5kbyB7XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gKHNvdXJjZSBhcyBFeHBhbmRvKVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2ZpbGxBcmdzRnJvbVN0cmluZyhzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBFeHBhbmRvKTogRXhwYW5kbyB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBzb3VyY2Uuc3BsaXQoJyAnKS5maWx0ZXIoaSA9PiBpICE9PSAnJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGxBcmdzRnJvbVN0cmluZ0FycmF5KGFyZ3MsIHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZmlsbEFyZ3NGcm9tU3RyaW5nQXJyYXkoc291cmNlOiBzdHJpbmdbXSwgdGFyZ2V0OiBFeHBhbmRvKTogRXhwYW5kbyB7XHJcbiAgICAgICAgbGV0IGtleSA9ICcnO1xyXG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gbnVsbDtcclxuICAgICAgICBsZXQgZXhwZWN0ZWRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBjdXJyZW50QXJnIG9mIHNvdXJjZSkge1xyXG4gICAgICAgICAgICB2YXIga2V5U3RhcnRJbmRleCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VycmVudEFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcclxuICAgICAgICAgICAgICAgIGtleVN0YXJ0SW5kZXggPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRBcmcuc3RhcnRzV2l0aChcIi1cIikpIHtcclxuICAgICAgICAgICAgICAgIGtleVN0YXJ0SW5kZXggPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRBcmcuc3RhcnRzV2l0aChcIi9cIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIFwiL1NvbWVTd2l0Y2hcIiBpcyBlcXVpdmFsZW50IHRvIFwiLS1Tb21lU3dpdGNoXCJcclxuICAgICAgICAgICAgICAgIGtleVN0YXJ0SW5kZXggPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB3ZSByZWNlaXZlZCBhIG5ldyBhcmd1bWVudCwgYnV0IHdlIGV4cGVjdGVkIGEgdmFsdWUsIGFkZCB0aGUgcHJldmlvdXMga2V5IHdpdGggdGhlIHZhbHVlIFwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBleHBlY3RlZFZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGtleVN0YXJ0SW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBwcmV2aW91cyBrZXkgdG8gdHJ1ZSBhbmQgY29udGludWUgd2l0aCBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IGFyZ1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gQXJncy5fdW5lc2NhcGUoY3VycmVudEFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGN1cnJlbnRBcmcgc3RhcnRzIGEgbmV3IGFyZ3VtZW50XHJcbiAgICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBjdXJyZW50QXJnLmluZGV4T2YoJz0nKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXBhcmF0b3IgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudEFyZyBzcGVjaWZpZXMgYSBrZXkgd2l0aCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAga2V5ID0gQXJncy5fdW5lc2NhcGUoY3VycmVudEFyZy5zdWJzdHIoa2V5U3RhcnRJbmRleCwgc2VwYXJhdG9yIC0ga2V5U3RhcnRJbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBBcmdzLl91bmVzY2FwZShjdXJyZW50QXJnLnN1YnN0cihzZXBhcmF0b3IgKyAxKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50QXJnIHNwZWNpZmllcyBvbmx5IGEga2V5XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBwcmVmaXggaW4gY3VycmVudCBhcmd1bWVudCwgY29uc2lkZXIgaXQgYXMgYSBrZXkgd2l0aCB2YWx1ZSBcInRydWVcIlxyXG4gICAgICAgICAgICAgICAgaWYgKGtleVN0YXJ0SW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IEFyZ3MuX3VuZXNjYXBlKGN1cnJlbnRBcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IEFyZ3MuX3VuZXNjYXBlKGN1cnJlbnRBcmcuc3Vic3RyKGtleVN0YXJ0SW5kZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgd2hlbiBrZXkgaXMgZHVwbGljYXRlZC4gU28gd2UgYWx3YXlzIGhhdmUgdGhlIGxhc3QgYXJndW1lbnQgd2luLlxyXG4gICAgICAgICAgICBpZiAoIWV4cGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChleHBlY3RlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3VuZXNjYXBlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIlxcXCJcIikgJiYgdmFsdWUuZW5kc1dpdGgoXCJcXFwiXCIpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMSwgdmFsdWUubGVuZ3RoIC0gMik7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKFwiXFxcXFxcXCJcIiwgXCJcXFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==