UNPKG

hivessh

Version:

HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.

193 lines 19.9 kB
/** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions */ export class AbstractPackageManagerWrapper { apm; type; sshHost; constructor(apm) { this.apm = apm; this.type = apm.type; this.sshHost = apm.sshHost; } debug = false; execLogs = []; noCache = false; lastUpdateCache = 0; updateCacheMillis = 1000 * 60 * 2; lastUpgradeAll = 0; upgradeAllMillis = 1000 * 60 * 5; lastUninstallUnused = 0; uninstallUnusedMillis = 1000 * 60 * 5; //### cache /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Update package source cache */ updateCache(noCache = this.noCache) { if (!noCache && Date.now() - this.lastUpdateCache > this.updateCacheMillis) { if (this.debug) { this.execLogs.push([ "updateCache", true, ]); } return; } return this.apm.updateCache() ?.then((v) => { if (this.debug) { this.execLogs.push([ "updateCache", false, ]); } this.lastUpdateCache = Date.now(); return v; }); } /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Clear package source cache */ clearCache() { if (this.debug) { this.execLogs.push([ "clearCache", false, ]); } this.lastUpdateCache = 0; return this.apm.clearCache(); } //### edit /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Install defined packages */ install(...pkgs) { if (this.debug) { this.execLogs.push([ "install", false, pkgs, ]); } return this.apm.install(...pkgs); } /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Uninstall defined packages */ uninstall(...pkgs) { if (this.debug) { this.execLogs.push([ "uninstall", false, pkgs, ]); } return this.apm.uninstall(...pkgs); } //### maintenance /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Upgrades all upgradable packages */ upgradeAll(noCache = this.noCache) { if (!noCache && Date.now() - this.lastUpgradeAll > this.upgradeAllMillis) { if (this.debug) { this.execLogs.push([ "upgradeAll", true, ]); } return; } return this.apm.upgradeAll() ?.then((v) => { if (this.debug) { this.execLogs.push([ "upgradeAll", false, ]); } this.lastUpgradeAll = Date.now(); return v; }); } /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Uninstall unused packages */ uninstallUnused(noCache = this.noCache) { if (!noCache && Date.now() - this.lastUninstallUnused > this.uninstallUnusedMillis) { if (this.debug) { this.execLogs.push([ "uninstallUnused", true, ]); } return; } return this.apm.uninstallUnused() ?.then((v) => { if (this.debug) { this.execLogs.push([ "uninstallUnused", false, ]); } this.lastUninstallUnused = Date.now(); return v; }); } //### get /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description List of installed packages */ list() { if (this.debug) { this.execLogs.push([ "list", false, ]); } return this.apm.list(); } /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description List upgradable packages */ upgradable() { if (this.debug) { this.execLogs.push([ "upgradable", false, ]); } return this.apm.upgradable(); } /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @description Returns a package description */ describe(pkg) { if (this.debug) { this.execLogs.push([ "describe", false, pkg, ]); } return this.apm.describe(pkg); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcG0vV3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7R0FFRztBQUNILE1BQU0sT0FBTyw2QkFBNkI7SUFLM0I7SUFKWCxJQUFJLENBQVE7SUFDWixPQUFPLENBQVM7SUFFaEIsWUFDVyxHQUEyQjtRQUEzQixRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFBO0lBQzlCLENBQUM7SUFFRCxLQUFLLEdBQVksS0FBSyxDQUFBO0lBQ3RCLFFBQVEsR0FBa0MsRUFBRSxDQUFBO0lBRTVDLE9BQU8sR0FBWSxLQUFLLENBQUE7SUFFeEIsZUFBZSxHQUFXLENBQUMsQ0FBQTtJQUMzQixpQkFBaUIsR0FBVyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUV6QyxjQUFjLEdBQVcsQ0FBQyxDQUFBO0lBQzFCLGdCQUFnQixHQUFXLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRXhDLG1CQUFtQixHQUFXLENBQUMsQ0FBQTtJQUMvQixxQkFBcUIsR0FBVyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUU3QyxXQUFXO0lBQ1g7OztPQUdHO0lBQ0gsV0FBVyxDQUNQLFVBQW1CLElBQUksQ0FBQyxPQUFPO1FBRS9CLElBQ0ksQ0FBQyxPQUFPO1lBQ1IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlO2dCQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQ3hCLENBQUM7WUFDQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDZixhQUFhO29CQUNiLElBQUk7aUJBQ1AsQ0FBQyxDQUFBO1lB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QUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsVUFBVTtnQkFDVixLQUFLO2dCQUNMLEdBQUc7YUFDTixDQUFDLENBQUE7UUFDTixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTc2hIb3N0IH0gZnJvbSBcIi4uL1NzaEhvc3QuanNcIlxuaW1wb3J0IHsgQXdhaXRhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL2Jhc2UuanNcIlxuaW1wb3J0IHsgQWJzdHJhY3RQYWNrYWdlLCBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vQXBtSW50ZXJmYWNlLmpzXCJcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYWNrYWdlTWFuYWdlcldyYXBwZXIge1xuICAgIHR5cGU6IHN0cmluZ1xuICAgIHNzaEhvc3Q6IFNzaEhvc3RcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgYXBtOiBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyXG4gICAgKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IGFwbS50eXBlXG4gICAgICAgIHRoaXMuc3NoSG9zdCA9IGFwbS5zc2hIb3N0XG4gICAgfVxuXG4gICAgZGVidWc6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGV4ZWNMb2dzOiBbc3RyaW5nLCBib29sZWFuLCAuLi5hbnlbXV1bXSA9IFtdXG5cbiAgICBub0NhY2hlOiBib29sZWFuID0gZmFsc2VcblxuICAgIGxhc3RVcGRhdGVDYWNoZTogbnVtYmVyID0gMFxuICAgIHVwZGF0ZUNhY2hlTWlsbGlzOiBudW1iZXIgPSAxMDAwICogNjAgKiAyXG5cbiAgICBsYXN0VXBncmFkZUFsbDogbnVtYmVyID0gMFxuICAgIHVwZ3JhZGVBbGxNaWxsaXM6IG51bWJlciA9IDEwMDAgKiA2MCAqIDVcblxuICAgIGxhc3RVbmluc3RhbGxVbnVzZWQ6IG51bWJlciA9IDBcbiAgICB1bmluc3RhbGxVbnVzZWRNaWxsaXM6IG51bWJlciA9IDEwMDAgKiA2MCAqIDVcblxuICAgIC8vIyMjIGNhY2hlXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAgICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlIHBhY2thZ2Ugc291cmNlIGNhY2hlXG4gICAgICovXG4gICAgdXBkYXRlQ2FjaGUoXG4gICAgICAgIG5vQ2FjaGU6IGJvb2xlYW4gPSB0aGlzLm5vQ2FjaGUsXG4gICAgKTogQXdhaXRhYmxlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW5vQ2FjaGUgJiZcbiAgICAgICAgICAgIERhdGUubm93KCkgLSB0aGlzLmxhc3RVcGRhdGVDYWNoZSA+XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlTWlsbGlzXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICBcInVwZGF0ZUNhY2hlXCIsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBtLnVwZGF0ZUNhY2hlKClcbiAgICAgICAgICAgID8udGhlbigodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0xvZ3MucHVzaChbXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVwZGF0ZUNhY2hlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVDYWNoZSA9IERhdGUubm93KClcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxuICAgICAgICAgICAgfSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXIgcGFja2FnZSBzb3VyY2UgY2FjaGVcbiAgICAgKi9cbiAgICBjbGVhckNhY2hlKCk6IEF3YWl0YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgIFwiY2xlYXJDYWNoZVwiLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZUNhY2hlID0gMFxuICAgICAgICByZXR1cm4gdGhpcy5hcG0uY2xlYXJDYWNoZSgpXG4gICAgfVxuXG4gICAgLy8jIyMgZWRpdFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIEluc3RhbGwgZGVmaW5lZCBwYWNrYWdlc1xuICAgICAqL1xuICAgIGluc3RhbGwoLi4ucGtnczogc3RyaW5nW10pOiBBd2FpdGFibGU8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5leGVjTG9ncy5wdXNoKFtcbiAgICAgICAgICAgICAgICBcImluc3RhbGxcIixcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBwa2dzLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwbS5pbnN0YWxsKC4uLnBrZ3MpXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW5zdGFsbCBkZWZpbmVkIHBhY2thZ2VzXG4gICAgICovXG4gICAgdW5pbnN0YWxsKC4uLnBrZ3M6IHN0cmluZ1tdKTogQXdhaXRhYmxlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY0xvZ3MucHVzaChbXG4gICAgICAgICAgICAgICAgXCJ1bmluc3RhbGxcIixcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBwa2dzLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwbS51bmluc3RhbGwoLi4ucGtncylcbiAgICB9XG5cbiAgICAvLyMjIyBtYWludGVuYW5jZVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIFVwZ3JhZGVzIGFsbCB1cGdyYWRhYmxlIHBhY2thZ2VzXG4gICAgICovXG4gICAgdXBncmFkZUFsbChcbiAgICAgICAgbm9DYWNoZTogYm9vbGVhbiA9IHRoaXMubm9DYWNoZSxcbiAgICApOiBBd2FpdGFibGU8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbm9DYWNoZSAmJlxuICAgICAgICAgICAgRGF0ZS5ub3coKSAtIHRoaXMubGFzdFVwZ3JhZGVBbGwgPlxuICAgICAgICAgICAgdGhpcy51cGdyYWRlQWxsTWlsbGlzXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICBcInVwZ3JhZGVBbGxcIixcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcG0udXBncmFkZUFsbCgpXG4gICAgICAgICAgICA/LnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1cGdyYWRlQWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGdyYWRlQWxsID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgIHJldHVybiB2XG4gICAgICAgICAgICB9KVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICAgICAqIEBkZXNjcmlwdGlvbiBVbmluc3RhbGwgdW51c2VkIHBhY2thZ2VzXG4gICAgICovXG4gICAgdW5pbnN0YWxsVW51c2VkKFxuICAgICAgICBub0NhY2hlOiBib29sZWFuID0gdGhpcy5ub0NhY2hlLFxuICAgICk6IEF3YWl0YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFub0NhY2hlICYmXG4gICAgICAgICAgICBEYXRlLm5vdygpIC0gdGhpcy5sYXN0VW5pbnN0YWxsVW51c2VkID5cbiAgICAgICAgICAgIHRoaXMudW5pbnN0YWxsVW51c2VkTWlsbGlzXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICBcInVuaW5zdGFsbFVudXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwbS51bmluc3RhbGxVbnVzZWQoKVxuICAgICAgICAgICAgPy50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjTG9ncy5wdXNoKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidW5pbnN0YWxsVW51c2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RVbmluc3RhbGxVbnVzZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcbiAgICAgICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8jIyMgZ2V0XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICAgKi9cbiAgICBsaXN0KCk6IEF3YWl0YWJsZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5leGVjTG9ncy5wdXNoKFtcbiAgICAgICAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcG0ubGlzdCgpXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3QgdXBncmFkYWJsZSBwYWNrYWdlc1xuICAgICAqL1xuICAgIHVwZ3JhZGFibGUoKTogQXdhaXRhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWNMb2dzLnB1c2goW1xuICAgICAgICAgICAgICAgIFwidXBncmFkYWJsZVwiLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwbS51cGdyYWRhYmxlKClcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIHBhY2thZ2UgZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBkZXNjcmliZShwa2c6IHN0cmluZyk6IEF3YWl0YWJsZTxBYnN0cmFjdFBhY2thZ2U+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY0xvZ3MucHVzaChbXG4gICAgICAgICAgICAgICAgXCJkZXNjcmliZVwiLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHBrZyxcbiAgICAgICAgICAgIF0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcG0uZGVzY3JpYmUocGtnKVxuICAgIH1cbn1cbiJdfQ==