UNPKG

@neo-one/monitor

Version:

NEO•ONE monitoring.

162 lines (160 loc) 20.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("./utils"); class MetricProxy { constructor(metric, labelNames = []) { this.metric = metric; this.labelNames = labelNames; } getLabelNames() { return this.labelNames; } getLabels(countOrLabels) { if (countOrLabels !== undefined && typeof countOrLabels === 'object') { return utils_1.convertMetricLabels(countOrLabels); } return countOrLabels; } } exports.MetricProxy = MetricProxy; class CounterProxy extends MetricProxy { inc(countOrLabels, count) { if (this.metric !== undefined) { this.metric.inc(this.getLabels(countOrLabels), count); } } } exports.CounterProxy = CounterProxy; class GaugeProxy extends MetricProxy { inc(countOrLabels, count) { if (this.metric !== undefined) { this.metric.inc(this.getLabels(countOrLabels), count); } } dec(countOrLabels, count) { if (this.metric !== undefined) { this.metric.dec(this.getLabels(countOrLabels), count); } } set(countOrLabels, count) { if (this.metric !== undefined) { this.metric.set(this.getLabels(countOrLabels), count); } } } exports.GaugeProxy = GaugeProxy; class HistogramProxy extends MetricProxy { observe(countOrLabels, count) { if (this.metric !== undefined) { this.metric.observe(this.getLabels(countOrLabels), count); } } } exports.HistogramProxy = HistogramProxy; class SummaryProxy extends MetricProxy { observe(countOrLabels, count) { if (this.metric !== undefined) { this.metric.observe(this.getLabels(countOrLabels), count); } } } exports.SummaryProxy = SummaryProxy; class MetricsFactoryProxy { constructor() { this.mutableCounters = {}; this.mutableHistograms = {}; this.mutableGauges = {}; this.mutableSummaries = {}; } reset_forTest() { this.mutableCounters = {}; this.mutableHistograms = {}; this.mutableGauges = {}; this.mutableSummaries = {}; } createCounter(options) { let counter = this.mutableCounters[options.name]; if (counter === undefined) { counter = this.createCounterHelper(options); this.mutableCounters[options.name] = counter; } return counter; } createGauge(options) { let gauge = this.mutableGauges[options.name]; if (gauge === undefined) { gauge = this.createGaugeHelper(options); this.mutableGauges[options.name] = gauge; } return gauge; } createHistogram(options) { let histogram = this.mutableHistograms[options.name]; if (histogram === undefined) { histogram = this.createHistogramHelper(options); this.mutableHistograms[options.name] = histogram; } return histogram; } createSummary(options) { let summary = this.mutableSummaries[options.name]; if (summary === undefined) { summary = this.createSummaryHelper(options); this.mutableSummaries[options.name] = summary; } return summary; } setFactory(mutableFactory) { this.mutableFactory = mutableFactory; } createCounterInternal(_options) { return new CounterProxy(); } createGaugeInternal(_options) { return new GaugeProxy(); } createHistogramInternal(_options) { return new HistogramProxy(); } createSummaryInternal(_options) { return new SummaryProxy(); } getMetricConstruct(options) { const { name, help = 'placeholder', labelNames: labelNamesIn = [] } = options; const labelNames = labelNamesIn.map(utils_1.convertMetricLabel); let construct = { name, help, labelNames }; if ('percentiles' in options && options.percentiles !== undefined) { construct = { name, help, labelNames, percentiles: [...options.percentiles] }; } else if ('buckets' in options && options.buckets !== undefined) { construct = { name, help, labelNames, buckets: [...options.buckets] }; } return construct; } createCounterHelper(options) { if (this.mutableFactory !== undefined) { return this.mutableFactory.createCounter(options); } return this.createCounterInternal(options); } createGaugeHelper(options) { if (this.mutableFactory !== undefined) { return this.mutableFactory.createGauge(options); } return this.createGaugeInternal(options); } createHistogramHelper(options) { if (this.mutableFactory !== undefined) { return this.mutableFactory.createHistogram(options); } return this.createHistogramInternal(options); } createSummaryHelper(options) { if (this.mutableFactory !== undefined) { return this.mutableFactory.createSummary(options); } return this.createSummaryInternal(options); } } exports.MetricsFactoryProxy = MetricsFactoryProxy; //# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBaUM7UUFDM0QsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBekhELGtEQXlIQyIsImZpbGUiOiJuZW8tb25lLW1vbml0b3Ivc3JjL01ldHJpY3NGYWN0b3J5UHJveHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCdWNrZXRlZE1ldHJpY09wdGlvbnMsXG4gIENvdW50ZXIsXG4gIENvdW50ZXJCYXNlLFxuICBHYXVnZSxcbiAgR2F1Z2VCYXNlLFxuICBIaXN0b2dyYW0sXG4gIEhpc3RvZ3JhbUJhc2UsXG4gIExhYmVscyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgTWV0cmljc0ZhY3RvcnksXG4gIFBlcmNlbnRpbGVkTWV0cmljT3B0aW9ucyxcbiAgU3VtbWFyeSxcbiAgU3VtbWFyeUJhc2UsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0TWV0cmljTGFiZWwsIGNvbnZlcnRNZXRyaWNMYWJlbHMgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNDb25zdHJ1Y3Qge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhlbHA6IHN0cmluZztcbiAgLy8gdHNsaW50OmRpc2FibGUgcmVhZG9ubHktYXJyYXlcbiAgcmVhZG9ubHkgbGFiZWxOYW1lczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGJ1Y2tldHM/OiBudW1iZXJbXTtcbiAgcmVhZG9ubHkgcGVyY2VudGlsZXM/OiBudW1iZXJbXTtcbiAgLy8gdHNsaW50OmVuYWJsZSByZWFkb25seS1hcnJheVxufVxuXG5leHBvcnQgY2xhc3MgTWV0cmljUHJveHk8VD4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWV0cmljOiBUIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGFiZWxOYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1ldHJpYz86IFQgfCB1bmRlZmluZWQsIGxhYmVsTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pIHtcbiAgICB0aGlzLm1ldHJpYyA9IG1ldHJpYztcbiAgICB0aGlzLmxhYmVsTmFtZXMgPSBsYWJlbE5hbWVzO1xuICB9XG5cbiAgcHVibGljIGdldExhYmVsTmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxhYmVsTmFtZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGFiZWxzKGNvdW50T3JMYWJlbHM/OiBMYWJlbHMgfCBudW1iZXIpOiBMYWJlbHMgfCBudW1iZXIgfCB2b2lkIHtcbiAgICBpZiAoY291bnRPckxhYmVscyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjb3VudE9yTGFiZWxzID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNvbnZlcnRNZXRyaWNMYWJlbHMoY291bnRPckxhYmVscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50T3JMYWJlbHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvdW50ZXJQcm94eSBleHRlbmRzIE1ldHJpY1Byb3h5PENvdW50ZXJCYXNlPiBpbXBsZW1lbnRzIENvdW50ZXIge1xuICBwdWJsaWMgaW5jKGNvdW50T3JMYWJlbHM/OiBMYWJlbHMgfCBudW1iZXIsIGNvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWV0cmljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0cmljLmluYyh0aGlzLmdldExhYmVscyhjb3VudE9yTGFiZWxzKSBhcyBMYWJlbHMsIGNvdW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdhdWdlUHJveHkgZXh0ZW5kcyBNZXRyaWNQcm94eTxHYXVnZUJhc2U+IGltcGxlbWVudHMgR2F1Z2Uge1xuICBwdWJsaWMgaW5jKGNvdW50T3JMYWJlbHM/OiBMYWJlbHMgfCBudW1iZXIsIGNvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWV0cmljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0cmljLmluYyh0aGlzLmdldExhYmVscyhjb3VudE9yTGFiZWxzKSBhcyBMYWJlbHMsIGNvdW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVjKGNvdW50T3JMYWJlbHM/OiBMYWJlbHMgfCBudW1iZXIsIGNvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWV0cmljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0cmljLmRlYyh0aGlzLmdldExhYmVscyhjb3VudE9yTGFiZWxzKSBhcyBMYWJlbHMsIGNvdW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0KGNvdW50T3JMYWJlbHM6IExhYmVscyB8IG51bWJlciwgY291bnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXRyaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tZXRyaWMuc2V0KHRoaXMuZ2V0TGFiZWxzKGNvdW50T3JMYWJlbHMpIGFzIExhYmVscywgY291bnQgYXMgbnVtYmVyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpc3RvZ3JhbVByb3h5IGV4dGVuZHMgTWV0cmljUHJveHk8SGlzdG9ncmFtQmFzZT4gaW1wbGVtZW50cyBIaXN0b2dyYW0ge1xuICBwdWJsaWMgb2JzZXJ2ZShjb3VudE9yTGFiZWxzOiBMYWJlbHMgfCBudW1iZXIsIGNvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWV0cmljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0cmljLm9ic2VydmUodGhpcy5nZXRMYWJlbHMoY291bnRPckxhYmVscykgYXMgTGFiZWxzLCBjb3VudCBhcyBudW1iZXIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VtbWFyeVByb3h5IGV4dGVuZHMgTWV0cmljUHJveHk8U3VtbWFyeUJhc2U+IGltcGxlbWVudHMgU3VtbWFyeSB7XG4gIHB1YmxpYyBvYnNlcnZlKGNvdW50T3JMYWJlbHM6IExhYmVscyB8IG51bWJlciwgY291bnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXRyaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tZXRyaWMub2JzZXJ2ZSh0aGlzLmdldExhYmVscyhjb3VudE9yTGFiZWxzKSBhcyBMYWJlbHMsIGNvdW50IGFzIG51bWJlcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRyaWNzRmFjdG9yeVByb3h5IGltcGxlbWVudHMgTWV0cmljc0ZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgbXV0YWJsZUNvdW50ZXJzOiB7IFtLIGluIHN0cmluZ10/OiBDb3VudGVyIH0gPSB7fTtcbiAgcHJvdGVjdGVkIG11dGFibGVIaXN0b2dyYW1zOiB7IFtLIGluIHN0cmluZ10/OiBIaXN0b2dyYW0gfSA9IHt9O1xuICBwcm90ZWN0ZWQgbXV0YWJsZUdhdWdlczogeyBbSyBpbiBzdHJpbmddPzogR2F1Z2UgfSA9IHt9O1xuICBwcm90ZWN0ZWQgbXV0YWJsZVN1bW1hcmllczogeyBbSyBpbiBzdHJpbmddPzogU3VtbWFyeSB9ID0ge307XG5cbiAgcHJpdmF0ZSBtdXRhYmxlRmFjdG9yeTogTWV0cmljc0ZhY3RvcnkgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlc2V0X2ZvclRlc3QoKTogdm9pZCB7XG4gICAgdGhpcy5tdXRhYmxlQ291bnRlcnMgPSB7fTtcbiAgICB0aGlzLm11dGFibGVIaXN0b2dyYW1zID0ge307XG4gICAgdGhpcy5tdXRhYmxlR2F1Z2VzID0ge307XG4gICAgdGhpcy5tdXRhYmxlU3VtbWFyaWVzID0ge307XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ291bnRlcihvcHRpb25zOiBNZXRyaWNPcHRpb25zKTogQ291bnRlciB7XG4gICAgbGV0IGNvdW50ZXIgPSB0aGlzLm11dGFibGVDb3VudGVyc1tvcHRpb25zLm5hbWVdO1xuICAgIGlmIChjb3VudGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ZXIgPSB0aGlzLmNyZWF0ZUNvdW50ZXJIZWxwZXIob3B0aW9ucyk7XG4gICAgICB0aGlzLm11dGFibGVDb3VudGVyc1tvcHRpb25zLm5hbWVdID0gY291bnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRlcjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVHYXVnZShvcHRpb25zOiBNZXRyaWNPcHRpb25zKTogR2F1Z2Uge1xuICAgIGxldCBnYXVnZSA9IHRoaXMubXV0YWJsZUdhdWdlc1tvcHRpb25zLm5hbWVdO1xuICAgIGlmIChnYXVnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBnYXVnZSA9IHRoaXMuY3JlYXRlR2F1Z2VIZWxwZXIob3B0aW9ucyk7XG4gICAgICB0aGlzLm11dGFibGVHYXVnZXNbb3B0aW9ucy5uYW1lXSA9IGdhdWdlO1xuICAgIH1cblxuICAgIHJldHVybiBnYXVnZTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVIaXN0b2dyYW0ob3B0aW9uczogTWV0cmljT3B0aW9ucyk6IEhpc3RvZ3JhbSB7XG4gICAgbGV0IGhpc3RvZ3JhbSA9IHRoaXMubXV0YWJsZUhpc3RvZ3JhbXNbb3B0aW9ucy5uYW1lXTtcbiAgICBpZiAoaGlzdG9ncmFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGhpc3RvZ3JhbSA9IHRoaXMuY3JlYXRlSGlzdG9ncmFtSGVscGVyKG9wdGlvbnMpO1xuICAgICAgdGhpcy5tdXRhYmxlSGlzdG9ncmFtc1tvcHRpb25zLm5hbWVdID0gaGlzdG9ncmFtO1xuICAgIH1cblxuICAgIHJldHVybiBoaXN0b2dyYW07XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU3VtbWFyeShvcHRpb25zOiBNZXRyaWNPcHRpb25zKTogU3VtbWFyeSB7XG4gICAgbGV0IHN1bW1hcnkgPSB0aGlzLm11dGFibGVTdW1tYXJpZXNbb3B0aW9ucy5uYW1lXTtcbiAgICBpZiAoc3VtbWFyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdW1tYXJ5ID0gdGhpcy5jcmVhdGVTdW1tYXJ5SGVscGVyKG9wdGlvbnMpO1xuICAgICAgdGhpcy5tdXRhYmxlU3VtbWFyaWVzW29wdGlvbnMubmFtZV0gPSBzdW1tYXJ5O1xuICAgIH1cblxuICAgIHJldHVybiBzdW1tYXJ5O1xuICB9XG5cbiAgcHVibGljIHNldEZhY3RvcnkobXV0YWJsZUZhY3Rvcnk6IE1ldHJpY3NGYWN0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5tdXRhYmxlRmFjdG9yeSA9IG11dGFibGVGYWN0b3J5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvdW50ZXJJbnRlcm5hbChfb3B0aW9uczogTWV0cmljT3B0aW9ucyk6IENvdW50ZXIge1xuICAgIHJldHVybiBuZXcgQ291bnRlclByb3h5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlR2F1Z2VJbnRlcm5hbChfb3B0aW9uczogTWV0cmljT3B0aW9ucyk6IEdhdWdlIHtcbiAgICByZXR1cm4gbmV3IEdhdWdlUHJveHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVIaXN0b2dyYW1JbnRlcm5hbChfb3B0aW9uczogQnVja2V0ZWRNZXRyaWNPcHRpb25zKTogSGlzdG9ncmFtIHtcbiAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbVByb3h5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU3VtbWFyeUludGVybmFsKF9vcHRpb25zOiBQZXJjZW50aWxlZE1ldHJpY09wdGlvbnMpOiBTdW1tYXJ5IHtcbiAgICByZXR1cm4gbmV3IFN1bW1hcnlQcm94eSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1ldHJpY0NvbnN0cnVjdChcbiAgICBvcHRpb25zOiBNZXRyaWNPcHRpb25zIHwgQnVja2V0ZWRNZXRyaWNPcHRpb25zIHwgUGVyY2VudGlsZWRNZXRyaWNPcHRpb25zLFxuICApOiBNZXRyaWNDb25zdHJ1Y3Qge1xuICAgIGNvbnN0IHsgbmFtZSwgaGVscCA9ICdwbGFjZWhvbGRlcicsIGxhYmVsTmFtZXM6IGxhYmVsTmFtZXNJbiA9IFtdIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxhYmVsTmFtZXMgPSBsYWJlbE5hbWVzSW4ubWFwKGNvbnZlcnRNZXRyaWNMYWJlbCk7XG4gICAgbGV0IGNvbnN0cnVjdDogTWV0cmljQ29uc3RydWN0ID0geyBuYW1lLCBoZWxwLCBsYWJlbE5hbWVzIH07XG4gICAgaWYgKCdwZXJjZW50aWxlcycgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnBlcmNlbnRpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0cnVjdCA9IHsgbmFtZSwgaGVscCwgbGFiZWxOYW1lcywgcGVyY2VudGlsZXM6IFsuLi5vcHRpb25zLnBlcmNlbnRpbGVzXSB9O1xuICAgIH0gZWxzZSBpZiAoJ2J1Y2tldHMnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5idWNrZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0cnVjdCA9IHsgbmFtZSwgaGVscCwgbGFiZWxOYW1lcywgYnVja2V0czogWy4uLm9wdGlvbnMuYnVja2V0c10gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb3VudGVySGVscGVyKG9wdGlvbnM6IE1ldHJpY09wdGlvbnMpOiBDb3VudGVyIHtcbiAgICBpZiAodGhpcy5tdXRhYmxlRmFjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdXRhYmxlRmFjdG9yeS5jcmVhdGVDb3VudGVyKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvdW50ZXJJbnRlcm5hbChvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2F1Z2VIZWxwZXIob3B0aW9uczogTWV0cmljT3B0aW9ucyk6IEdhdWdlIHtcbiAgICBpZiAodGhpcy5tdXRhYmxlRmFjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdXRhYmxlRmFjdG9yeS5jcmVhdGVHYXVnZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVHYXVnZUludGVybmFsKG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVIaXN0b2dyYW1IZWxwZXIob3B0aW9uczogQnVja2V0ZWRNZXRyaWNPcHRpb25zKTogSGlzdG9ncmFtIHtcbiAgICBpZiAodGhpcy5tdXRhYmxlRmFjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdXRhYmxlRmFjdG9yeS5jcmVhdGVIaXN0b2dyYW0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlSGlzdG9ncmFtSW50ZXJuYWwob3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN1bW1hcnlIZWxwZXIob3B0aW9uczogUGVyY2VudGlsZWRNZXRyaWNPcHRpb25zKTogU3VtbWFyeSB7XG4gICAgaWYgKHRoaXMubXV0YWJsZUZhY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMubXV0YWJsZUZhY3RvcnkuY3JlYXRlU3VtbWFyeShvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdW1tYXJ5SW50ZXJuYWwob3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==