UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

153 lines 21.1 kB
import { of } from 'rxjs'; import { take } from 'rxjs/operators'; import { ActionButton } from '../action-button/action-button'; export class ActionButtonAsync extends ActionButton { /** * Constructor for ActionButtonAsync. */ constructor() { super(); this.targetState = {}; this.waitForUIStateUpdate = false; this.skipBusyHandling = false; this.asyncExecute = (target) => of(target); } execute(target) { if (this.enabled) { this.preExecute(target); this.onExecute(target) .pipe(take(1)) .subscribe({ next: result => { this.container.executed.emit({ result: result || target, item: this }); }, error: error => { this.markTargetAsNotBusy(target); this.container.error.emit({ error: error, item: this }); }, complete: () => { this.postExecute(target); } }); } } setActionState(target, container) { this.target = target; this.container = container; if (this.waitForUIStateUpdate && target) { if (this.isArray(target)) { for (let i = 0; i < target.length; i++) { const item = target[i]; const targetUniqueReference = this.getTargetUniqueReference(item); const postState = this.getTransitionState(target); if (this.isDataRefreshed(this.targetState[targetUniqueReference], postState)) { this.markTargetAsNotBusy(item); } this.busy = this.busyTargets.indexOf(targetUniqueReference) !== -1; } } else { const targetUniqueReference = this.getTargetUniqueReference(target); const postState = this.getTransitionState(target); if (this.isDataRefreshed(this.targetState[targetUniqueReference], postState)) { this.markTargetAsNotBusy(target); } this.busy = this.busyTargets.indexOf(targetUniqueReference) !== -1; } } } getTransitionState(target) { return target; } preExecute(target) { if (!this.skipBusyHandling) { if (this.waitForUIStateUpdate) { if (this.target === target) { this.busy = true; } this.markTargetAsBusy(target); } else { this.busy = true; } } } onExecute(target) { // By default just return the target wrapped in observable and do nothing. // This should be overridden in derived classes return this.asyncExecute(target); } postExecute(target) { if (!this.skipBusyHandling) { if (this.waitForUIStateUpdate) { if (this.target === target) { this.busy = false; } if (!this.waitForUIStateUpdate) { this.markTargetAsNotBusy(target); } } else { this.busy = false; } } } markTargetAsBusy(target) { if (this.waitForUIStateUpdate && target) { if (this.isArray(target)) { for (let i = 0; i < target.length; i++) { this.markIndividualTargetAsBusy(target, i); } } else { this.markIndividualTargetAsBusy(target); } } } markIndividualTargetAsBusy(target, index) { const targetObjectReference = this.markIndividualTargetParseTarget(target, index); const targetUniqueReference = this.getTargetUniqueReference(targetObjectReference); this.busyTargets.push(targetUniqueReference); const state = this.getTransitionState(targetObjectReference); this.targetState[targetUniqueReference] = state; } markTargetAsNotBusy(target) { if (target) { if (this.isArray(target)) { for (let i = 0; i < target.length; i++) { this.markIndividualTargetAsNotBusy(target, i); } } else { this.markIndividualTargetAsNotBusy(target); } } } markIndividualTargetParseTarget(target, index) { let targetObjectReference; if (index !== undefined && this.isArray(target)) { targetObjectReference = target[index]; } else { targetObjectReference = target; } return targetObjectReference; } markIndividualTargetAsNotBusy(target, index) { const targetObjectReference = this.markIndividualTargetParseTarget(target, index); const targetUniqueReference = this.getTargetUniqueReference(targetObjectReference); const busyTargetIndex = this.busyTargets.indexOf(targetUniqueReference); if (busyTargetIndex !== -1) { this.busyTargets.splice(busyTargetIndex, 1); } const state = this.getTransitionState(targetObjectReference); this.targetState[targetUniqueReference] = state; } isDataRefreshed(preState, postState) { return preState !== postState; } isArray(target) { return Array.isArray(target); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1hc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FjdGlvbnMvaXRlbXMvYWN0aW9uLWJ1dHRvbi1hc3luYy9hY3Rpb24tYnV0dG9uLWFzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxNQUFNLE9BQU8saUJBQXFCLFNBQVEsWUFBWTtJQVVsRDs7T0FFRztJQUNIO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFURixnQkFBVyxHQUE2QyxFQUFFLENBQUM7UUFFM0QseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQU8vQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLE9BQU8sQ0FBQyxNQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7aUJBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDO2dCQUNQLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztn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QUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRVMsZUFBZSxDQUFDLFFBQWEsRUFBRSxTQUFjO1FBQ25ELE9BQU8sUUFBUSxLQUFLLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sT0FBTyxDQUFDLE1BQVc7UUFDdkIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFjdGlvbkNvbnRhaW5lciB9IGZyb20gJy4uLy4uL2NvbnRhaW5lcnMvYWN0aW9uLWNvbnRhaW5lcic7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4uL2FjdGlvbi1idXR0b24vYWN0aW9uLWJ1dHRvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uQXN5bmM8VD4gZXh0ZW5kcyBBY3Rpb25CdXR0b24ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBleGVjdXRlIGFzeW5jaHJvbm91c2x5IG9uIGFjdGlvbiBidXR0b24gY2xpY2suXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luY0V4ZWN1dGU6IE1zZnRTbWUuRnVuYzE8VCwgT2JzZXJ2YWJsZTxUPj47XHJcbiAgICBwcm90ZWN0ZWQgdGFyZ2V0U3RhdGU6IHsgW3RhcmdldFVuaXF1ZVJlZmVyZW5jZTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgd2FpdEZvclVJU3RhdGVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBza2lwQnVzeUhhbmRsaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciBmb3IgQWN0aW9uQnV0dG9uQXN5bmMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5hc3luY0V4ZWN1dGUgPSAodGFyZ2V0KSA9PiBvZih0YXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleGVjdXRlKHRhcmdldD86IFQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlRXhlY3V0ZSh0YXJnZXQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uRXhlY3V0ZSh0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZXhlY3V0ZWQuZW1pdCh7IHJlc3VsdDogcmVzdWx0IHx8IHRhcmdldCwgaXRlbTogdGhpcyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1RhcmdldEFzTm90QnVzeSh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5lcnJvci5lbWl0KHsgZXJyb3I6IGVycm9yLCBpdGVtOiB0aGlzIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0RXhlY3V0ZSh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWN0aW9uU3RhdGUodGFyZ2V0OiBhbnksIGNvbnRhaW5lcjogQWN0aW9uQ29udGFpbmVyKSB7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndhaXRGb3JVSVN0YXRlVXBkYXRlICYmIHRhcmdldCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRhcmdldFtpXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRVbmlxdWVSZWZlcmVuY2UgPSB0aGlzLmdldFRhcmdldFVuaXF1ZVJlZmVyZW5jZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0U3RhdGUgPSB0aGlzLmdldFRyYW5zaXRpb25TdGF0ZSh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJlZnJlc2hlZCh0aGlzLnRhcmdldFN0YXRlW3RhcmdldFVuaXF1ZVJlZmVyZW5jZV0sIHBvc3RTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVGFyZ2V0QXNOb3RCdXN5KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c3kgPSB0aGlzLmJ1c3lUYXJnZXRzLmluZGV4T2YodGFyZ2V0VW5pcXVlUmVmZXJlbmNlKSAhPT0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRVbmlxdWVSZWZlcmVuY2UgPSB0aGlzLmdldFRhcmdldFVuaXF1ZVJlZmVyZW5jZSh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zdFN0YXRlID0gdGhpcy5nZXRUcmFuc2l0aW9uU3RhdGUodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJlZnJlc2hlZCh0aGlzLnRhcmdldFN0YXRlW3RhcmdldFVuaXF1ZVJlZmVyZW5jZV0sIHBvc3RTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtUYXJnZXRBc05vdEJ1c3kodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSA9IHRoaXMuYnVzeVRhcmdldHMuaW5kZXhPZih0YXJnZXRVbmlxdWVSZWZlcmVuY2UpICE9PSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VHJhbnNpdGlvblN0YXRlKHRhcmdldDogVCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJlRXhlY3V0ZSh0YXJnZXQ6IFQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2tpcEJ1c3lIYW5kbGluZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWl0Rm9yVUlTdGF0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0ID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFya1RhcmdldEFzQnVzeSh0YXJnZXQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25FeGVjdXRlKHRhcmdldDogVCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIC8vIEJ5IGRlZmF1bHQganVzdCByZXR1cm4gdGhlIHRhcmdldCB3cmFwcGVkIGluIG9ic2VydmFibGUgYW5kIGRvIG5vdGhpbmcuXHJcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBkZXJpdmVkIGNsYXNzZXNcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3luY0V4ZWN1dGUodGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcG9zdEV4ZWN1dGUodGFyZ2V0OiBUKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNraXBCdXN5SGFuZGxpbmcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FpdEZvclVJU3RhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCA9PT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMud2FpdEZvclVJU3RhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtUYXJnZXRBc05vdEJ1c3kodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYXJrVGFyZ2V0QXNCdXN5KHRhcmdldDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMud2FpdEZvclVJU3RhdGVVcGRhdGUgJiYgdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtJbmRpdmlkdWFsVGFyZ2V0QXNCdXN5KHRhcmdldCwgaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtJbmRpdmlkdWFsVGFyZ2V0QXNCdXN5KHRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXJrSW5kaXZpZHVhbFRhcmdldEFzQnVzeSh0YXJnZXQ6IGFueSwgaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRPYmplY3RSZWZlcmVuY2UgPSB0aGlzLm1hcmtJbmRpdmlkdWFsVGFyZ2V0UGFyc2VUYXJnZXQodGFyZ2V0LCBpbmRleCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VW5pcXVlUmVmZXJlbmNlID0gdGhpcy5nZXRUYXJnZXRVbmlxdWVSZWZlcmVuY2UodGFyZ2V0T2JqZWN0UmVmZXJlbmNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5idXN5VGFyZ2V0cy5wdXNoKHRhcmdldFVuaXF1ZVJlZmVyZW5jZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUcmFuc2l0aW9uU3RhdGUodGFyZ2V0T2JqZWN0UmVmZXJlbmNlKTtcclxuICAgICAgICB0aGlzLnRhcmdldFN0YXRlW3RhcmdldFVuaXF1ZVJlZmVyZW5jZV0gPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFya1RhcmdldEFzTm90QnVzeSh0YXJnZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya0luZGl2aWR1YWxUYXJnZXRBc05vdEJ1c3kodGFyZ2V0LCBpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFya0luZGl2aWR1YWxUYXJnZXRBc05vdEJ1c3kodGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFya0luZGl2aWR1YWxUYXJnZXRQYXJzZVRhcmdldCh0YXJnZXQ6IGFueSwgaW5kZXg/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIGxldCB0YXJnZXRPYmplY3RSZWZlcmVuY2U7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0T2JqZWN0UmVmZXJlbmNlID0gdGFyZ2V0W2luZGV4XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0YXJnZXRPYmplY3RSZWZlcmVuY2UgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFyZ2V0T2JqZWN0UmVmZXJlbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFya0luZGl2aWR1YWxUYXJnZXRBc05vdEJ1c3kodGFyZ2V0OiBhbnksIGluZGV4PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0T2JqZWN0UmVmZXJlbmNlID0gdGhpcy5tYXJrSW5kaXZpZHVhbFRhcmdldFBhcnNlVGFyZ2V0KHRhcmdldCwgaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFVuaXF1ZVJlZmVyZW5jZSA9IHRoaXMuZ2V0VGFyZ2V0VW5pcXVlUmVmZXJlbmNlKHRhcmdldE9iamVjdFJlZmVyZW5jZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1c3lUYXJnZXRJbmRleCA9IHRoaXMuYnVzeVRhcmdldHMuaW5kZXhPZih0YXJnZXRVbmlxdWVSZWZlcmVuY2UpO1xyXG4gICAgICAgIGlmIChidXN5VGFyZ2V0SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeVRhcmdldHMuc3BsaWNlKGJ1c3lUYXJnZXRJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VHJhbnNpdGlvblN0YXRlKHRhcmdldE9iamVjdFJlZmVyZW5jZSk7XHJcbiAgICAgICAgdGhpcy50YXJnZXRTdGF0ZVt0YXJnZXRVbmlxdWVSZWZlcmVuY2VdID0gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGlzRGF0YVJlZnJlc2hlZChwcmVTdGF0ZTogYW55LCBwb3N0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBwcmVTdGF0ZSAhPT0gcG9zdFN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNBcnJheSh0YXJnZXQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRhcmdldCk7XHJcbiAgICB9XHJcbn1cclxuIl19