hivessh
Version:
HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.
193 lines • 19.9 kB
JavaScript
/**
* @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==