@decaf-ts/fabric-weaver
Version:
template for ts projects
184 lines • 21.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigtxgenCommandBuilder = void 0;
const logging_1 = require("@decaf-ts/logging");
const fabric_binaries_1 = require("../constants/fabric-binaries.cjs");
const parsers_1 = require("../../utils/parsers.cjs");
const child_process_1 = require("../../utils/child-process.cjs");
class ConfigtxgenCommandBuilder {
constructor(logger) {
this.binName = fabric_binaries_1.FabricBinaries.CONFIGTXGEN;
this.args = new Map();
if (!logger)
this.log = logging_1.Logging.for(ConfigtxgenCommandBuilder);
else
this.log = logger.for(ConfigtxgenCommandBuilder.name);
}
/**
* @description Sets the organization for config generation.
* @param {string} org - The organization name.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setAsOrg(org) {
if (org !== undefined) {
this.log.debug(`Setting organization to ${org}`);
this.args.set("asOrg", org);
}
return this;
}
/**
* @description Sets the base profile for channel creation tx generation.
* @param {string} profile - The profile name.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setChannelCreateTxBaseProfile(profile) {
if (profile !== undefined) {
this.log.debug(`Setting channel create tx base profile to ${profile}`);
this.args.set("channelCreateTxBaseProfile", profile);
}
return this;
}
/**
* @description Sets the channel ID for the configtx.
* @param {string} channelID - The channel ID.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setChannelID(channelID) {
if (channelID !== undefined) {
this.log.debug(`Setting channel ID to ${channelID}`);
this.args.set("channelID", channelID);
}
return this;
}
/**
* @description Sets the configuration path.
* @param {string} path - The configuration path.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setConfigPath(path) {
if (path !== undefined) {
this.log.debug(`Setting config path to ${path}`);
this.args.set("configPath", path);
}
return this;
}
/**
* @description Sets the path for block inspection.
* @param {string} path - The path to the block.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setInspectBlock(path) {
if (path !== undefined) {
this.log.debug(`Setting inspect block path to ${path}`);
this.args.set("inspectBlock", path);
}
return this;
}
/**
* @description Sets the path for channel create tx inspection.
* @param {string} path - The path to the channel create tx.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setInspectChannelCreateTx(path) {
if (path !== undefined) {
this.log.debug(`Setting inspect channel create tx path to ${path}`);
this.args.set("inspectChannelCreateTx", path);
}
return this;
}
/**
* @description Sets the output path for anchor peers update.
* @param {string} path - The output path.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setOutputAnchorPeersUpdate(path) {
if (path !== undefined) {
this.log.debug(`Setting output anchor peers update path to ${path}`);
this.args.set("outputAnchorPeersUpdate", path);
}
return this;
}
/**
* @description Sets the output path for the genesis block.
* @param {string} path - The output path.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setOutputBlock(path) {
if (path !== undefined) {
this.log.debug(`Setting output block path to ${path}`);
this.args.set("outputBlock", path);
}
return this;
}
/**
* @description Sets the output path for channel creation configtx.
* @param {string} path - The output path.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setOutputCreateChannelTx(path) {
if (path !== undefined) {
this.log.debug(`Setting output create channel tx path to ${path}`);
this.args.set("outputCreateChannelTx", path);
}
return this;
}
/**
* @description Sets the organization to print.
* @param {string} org - The organization name.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setPrintOrg(org) {
if (org !== undefined) {
this.log.debug(`Setting print org to ${org}`);
this.args.set("printOrg", org);
}
return this;
}
/**
* @description Sets the profile to use for generation.
* @param {string} profile - The profile name.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setProfile(profile) {
if (profile !== undefined) {
this.log.debug(`Setting profile to ${profile}`);
this.args.set("profile", profile);
}
return this;
}
/**
* @description Sets whether to show version information.
* @param {boolean} show - Whether to show version information.
* @returns {ConfigtxgenCommandBuilder} The current instance for method chaining.
*/
setVersion(show = false) {
this.log.debug(`Setting version flag to ${show}`);
this.args.set("version", show);
return this;
}
build() {
const command = [this.getBinary(), ...(0, parsers_1.mapParser)(this.args)].join(" ");
this.log.debug(`Built command: ${command}`);
return command;
}
getBinary() {
return this.binName;
}
getArgs() {
return (0, parsers_1.mapParser)(this.args);
}
async execute() {
const bin = this.getBinary();
const argz = [...this.getArgs()];
try {
// can be used as a promise but to lock the logs running as execsync
await (0, child_process_1.runCommand)(bin, argz);
}
catch (error) {
this.log.error(`Error: Failed to execute the command: ${error}`);
process.exit(1);
}
}
}
exports.ConfigtxgenCommandBuilder = ConfigtxgenCommandBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndHhnZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmFicmljL2NvbmZpZ3R4Z2VuL2NvbmZpZ3R4Z2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUFvRDtBQUNwRCxrRUFBOEQ7QUFDOUQsaURBQWdEO0FBQ2hELDZEQUF1RDtBQUV2RCxNQUFhLHlCQUF5QjtJQU1wQyxZQUFZLE1BQWU7UUFIbkIsWUFBTyxHQUFtQixnQ0FBYyxDQUFDLFdBQVcsQ0FBQztRQUNyRCxTQUFJLEdBQXNELElBQUksR0FBRyxFQUFFLENBQUM7UUFHMUUsSUFBSSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7O1lBQzFELElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxHQUFZO1FBQ25CLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDZCQUE2QixDQUFDLE9BQWdCO1FBQzVDLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFD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QUM5QixDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQztZQUNILG9FQUFvRTtZQUNwRSxNQUFNLElBQUEsMEJBQVUsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMseUNBQXlDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN0xELDhEQTZMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRmFicmljQmluYXJpZXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2ZhYnJpYy1iaW5hcmllc1wiO1xuaW1wb3J0IHsgbWFwUGFyc2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhcnNlcnNcIjtcbmltcG9ydCB7IHJ1bkNvbW1hbmQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2hpbGQtcHJvY2Vzc1wiO1xuXG5leHBvcnQgY2xhc3MgQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gIHByaXZhdGUgbG9nOiBMb2dnZXI7XG5cbiAgcHJpdmF0ZSBiaW5OYW1lOiBGYWJyaWNCaW5hcmllcyA9IEZhYnJpY0JpbmFyaWVzLkNPTkZJR1RYR0VOO1xuICBwcml2YXRlIGFyZ3M6IE1hcDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmdbXT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IobG9nZ2VyPzogTG9nZ2VyKSB7XG4gICAgaWYgKCFsb2dnZXIpIHRoaXMubG9nID0gTG9nZ2luZy5mb3IoQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlcik7XG4gICAgZWxzZSB0aGlzLmxvZyA9IGxvZ2dlci5mb3IoQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlci5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb3JnYW5pemF0aW9uIGZvciBjb25maWcgZ2VuZXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZyAtIFRoZSBvcmdhbml6YXRpb24gbmFtZS5cbiAgICogQHJldHVybnMge0NvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBc09yZyhvcmc/OiBzdHJpbmcpOiBDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyIHtcbiAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIG9yZ2FuaXphdGlvbiB0byAke29yZ31gKTtcbiAgICAgIHRoaXMuYXJncy5zZXQoXCJhc09yZ1wiLCBvcmcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYmFzZSBwcm9maWxlIGZvciBjaGFubmVsIGNyZWF0aW9uIHR4IGdlbmVyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9maWxlIC0gVGhlIHByb2ZpbGUgbmFtZS5cbiAgICogQHJldHVybnMge0NvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDaGFubmVsQ3JlYXRlVHhCYXNlUHJvZmlsZShwcm9maWxlPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKHByb2ZpbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgY2hhbm5lbCBjcmVhdGUgdHggYmFzZSBwcm9maWxlIHRvICR7cHJvZmlsZX1gKTtcbiAgICAgIHRoaXMuYXJncy5zZXQoXCJjaGFubmVsQ3JlYXRlVHhCYXNlUHJvZmlsZVwiLCBwcm9maWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGNoYW5uZWwgSUQgZm9yIHRoZSBjb25maWd0eC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxJRCAtIFRoZSBjaGFubmVsIElELlxuICAgKiBAcmV0dXJucyB7Q29uZmlndHhnZW5Db21tYW5kQnVpbGRlcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldENoYW5uZWxJRChjaGFubmVsSUQ/OiBzdHJpbmcpOiBDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyIHtcbiAgICBpZiAoY2hhbm5lbElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGNoYW5uZWwgSUQgdG8gJHtjaGFubmVsSUR9YCk7XG4gICAgICB0aGlzLmFyZ3Muc2V0KFwiY2hhbm5lbElEXCIsIGNoYW5uZWxJRCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjb25maWd1cmF0aW9uIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIGNvbmZpZ3VyYXRpb24gcGF0aC5cbiAgICogQHJldHVybnMge0NvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDb25maWdQYXRoKHBhdGg/OiBzdHJpbmcpOiBDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyIHtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBjb25maWcgcGF0aCB0byAke3BhdGh9YCk7XG4gICAgICB0aGlzLmFyZ3Muc2V0KFwiY29uZmlnUGF0aFwiLCBwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHBhdGggZm9yIGJsb2NrIGluc3BlY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGJsb2NrLlxuICAgKiBAcmV0dXJucyB7Q29uZmlndHhnZW5Db21tYW5kQnVpbGRlcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluc3BlY3RCbG9jayhwYXRoPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5zcGVjdCBibG9jayBwYXRoIHRvICR7cGF0aH1gKTtcbiAgICAgIHRoaXMuYXJncy5zZXQoXCJpbnNwZWN0QmxvY2tcIiwgcGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBwYXRoIGZvciBjaGFubmVsIGNyZWF0ZSB0eCBpbnNwZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjaGFubmVsIGNyZWF0ZSB0eC5cbiAgICogQHJldHVybnMge0NvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnNwZWN0Q2hhbm5lbENyZWF0ZVR4KHBhdGg/OiBzdHJpbmcpOiBDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyIHtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbnNwZWN0IGNoYW5uZWwgY3JlYXRlIHR4IHBhdGggdG8gJHtwYXRofWApO1xuICAgICAgdGhpcy5hcmdzLnNldChcImluc3BlY3RDaGFubmVsQ3JlYXRlVHhcIiwgcGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBvdXRwdXQgcGF0aCBmb3IgYW5jaG9yIHBlZXJzIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgb3V0cHV0IHBhdGguXG4gICAqIEByZXR1cm5zIHtDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyfSBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0T3V0cHV0QW5jaG9yUGVlcnNVcGRhdGUocGF0aD86IHN0cmluZyk6IENvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXIge1xuICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIG91dHB1dCBhbmNob3IgcGVlcnMgdXBkYXRlIHBhdGggdG8gJHtwYXRofWApO1xuICAgICAgdGhpcy5hcmdzLnNldChcIm91dHB1dEFuY2hvclBlZXJzVXBkYXRlXCIsIHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb3V0cHV0IHBhdGggZm9yIHRoZSBnZW5lc2lzIGJsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBvdXRwdXQgcGF0aC5cbiAgICogQHJldHVybnMge0NvbmZpZ3R4Z2VuQ29tbWFuZEJ1aWxkZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRPdXRwdXRCbG9jayhwYXRoPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgb3V0cHV0IGJsb2NrIHBhdGggdG8gJHtwYXRofWApO1xuICAgICAgdGhpcy5hcmdzLnNldChcIm91dHB1dEJsb2NrXCIsIHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb3V0cHV0IHBhdGggZm9yIGNoYW5uZWwgY3JlYXRpb24gY29uZmlndHguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIG91dHB1dCBwYXRoLlxuICAgKiBAcmV0dXJucyB7Q29uZmlndHhnZW5Db21tYW5kQnVpbGRlcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE91dHB1dENyZWF0ZUNoYW5uZWxUeChwYXRoPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgb3V0cHV0IGNyZWF0ZSBjaGFubmVsIHR4IHBhdGggdG8gJHtwYXRofWApO1xuICAgICAgdGhpcy5hcmdzLnNldChcIm91dHB1dENyZWF0ZUNoYW5uZWxUeFwiLCBwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBvcmdhbml6YXRpb24gdG8gcHJpbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcmcgLSBUaGUgb3JnYW5pemF0aW9uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyfSBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0UHJpbnRPcmcob3JnPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKG9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBwcmludCBvcmcgdG8gJHtvcmd9YCk7XG4gICAgICB0aGlzLmFyZ3Muc2V0KFwicHJpbnRPcmdcIiwgb3JnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHByb2ZpbGUgdG8gdXNlIGZvciBnZW5lcmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZmlsZSAtIFRoZSBwcm9maWxlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtDb25maWd0eGdlbkNvbW1hbmRCdWlsZGVyfSBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0UHJvZmlsZShwcm9maWxlPzogc3RyaW5nKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgaWYgKHByb2ZpbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgcHJvZmlsZSB0byAke3Byb2ZpbGV9YCk7XG4gICAgICB0aGlzLmFyZ3Muc2V0KFwicHJvZmlsZVwiLCBwcm9maWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgd2hldGhlciB0byBzaG93IHZlcnNpb24gaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdyAtIFdoZXRoZXIgdG8gc2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7Q29uZmlndHhnZW5Db21tYW5kQnVpbGRlcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFZlcnNpb24oc2hvdzogYm9vbGVhbiA9IGZhbHNlKTogQ29uZmlndHhnZW5Db21tYW5kQnVpbGRlciB7XG4gICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgdmVyc2lvbiBmbGFnIHRvICR7c2hvd31gKTtcbiAgICB0aGlzLmFyZ3Muc2V0KFwidmVyc2lvblwiLCBzaG93KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ1aWxkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbWFuZDogc3RyaW5nID0gW3RoaXMuZ2V0QmluYXJ5KCksIC4uLm1hcFBhcnNlcih0aGlzLmFyZ3MpXS5qb2luKFxuICAgICAgXCIgXCJcbiAgICApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCdWlsdCBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cbiAgZ2V0QmluYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmluTmFtZTtcbiAgfVxuICBnZXRBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gbWFwUGFyc2VyKHRoaXMuYXJncyk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiaW4gPSB0aGlzLmdldEJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3ogPSBbLi4udGhpcy5nZXRBcmdzKCldO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGNhbiBiZSB1c2VkIGFzIGEgcHJvbWlzZSBidXQgdG8gbG9jayB0aGUgbG9ncyBydW5uaW5nIGFzIGV4ZWNzeW5jXG4gICAgICBhd2FpdCBydW5Db21tYW5kKGJpbiwgYXJneik7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBFcnJvcjogRmFpbGVkIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQ6ICR7ZXJyb3J9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59XG4iXX0=