UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

174 lines 23.4 kB
import { ContentChildren, Directive, EventEmitter, Injector, Input, IterableDiffers, Output, QueryList } from '@angular/core'; import { merge } from 'rxjs'; import { CoreBaseComponent } from '../../common/base.component'; import * as i0 from "@angular/core"; const _c0 = ["action"]; // eslint-disable-next-line @angular-eslint/directive-class-suffix export class ActionContainerComponent extends CoreBaseComponent { /** * Constructor for ActionContainerComponent. */ constructor(iterableDiffers, injector) { super(injector); this.iterableDiffers = iterableDiffers; this.targetChange = new EventEmitter(); /** * Event emitter fired whenever an error occurs within a child ActionItem. */ // eslint-disable-next-line @angular-eslint/no-output-native this.error = new EventEmitter(); /** * Event emitter fired whenever a child ActionItem is executed. */ this.executed = new EventEmitter(); /** * List of all child ActionItem objects, both HTML and programmatically defined. */ this.combinedActions = []; /** * List of programmatically defined ActionItem objects stored in ActionContainerComponent. */ this.internalActions = []; /** * List of HTML defined ActionItem objects stored in ActionContainerComponent. */ this.inlineActions = []; this.displayInlineActionsFirstInternal = false; this.enabledInternal = true; } /** * List of programmatically defined ActionItem objects stored in ActionContainerComponent. */ set actions(actions) { this.internalActions = actions || []; this.updateActions(); } /** * Flag set to display either HTML or programmatically defined ActionItem objects first. * True to display HTML defined actions first, false to display programmatically defined actions first (defaults to false). */ set displayInlineActionsFirst(displayFirst) { this.displayInlineActionsFirstInternal = displayFirst; } /** * List of all ActionItem objects stored in ActionContainerComponent. */ get actions() { this.combinedActions.length = 0; this.combinedActions.push.apply(this.combinedActions, this.displayInlineActionsFirstInternal ? this.inlineActions.concat(this.internalActions) : this.internalActions.concat(this.inlineActions)); return this.combinedActions; } /** * Target object used by child actions of ActionContainerComponent. */ set target(input) { this.internalTarget = input; this.targetChange.emit(this.internalTarget); this.updateActionStates(); } get target() { return this.internalTarget; } /** * Flag set to enable or disable ActionContainerComponent. */ set enabled(input) { this.enabledInternal = !!input; this.updateActionStates(); } get enabled() { return this.enabledInternal; } /** * Returns true if any child ActionItem objects have the busy flag set, false otherwise. */ get isBusy() { return this.actions && this.actions.some(action => action.busy); } /** * Callback method run when ActionContainerComponent is initialized. */ ngOnInit() { // whenever an action executes or errors, update action states // NOTE: Angular documentation states that we should not treat event emitters as observables. // in the future this could break if angular changes its implementation. // We should consider another way of surfacing this. this.completedSubscription = merge(this.executed, this.error).subscribe(next => this.updateActionStates()); } /** * Callback method run when ActionContainerComponent is destroyed. */ ngOnDestroy() { this.completedSubscription.unsubscribe(); } /** * Callback method run immediately after Angular has completed initialization of all of ActionContainerComponent's content. */ ngAfterContentInit() { this.childActions.changes.subscribe(val => { this.inlineActions.length = 0; this.inlineActions.push.apply(this.inlineActions, this.childActions.map(item => item.action)); }); this.inlineActions = this.childActions.map(item => item.action); this.updateActions(); } // Needs more investigation. /** * Angular's doCheck life cycle hook. Note there is an odd condition when trying to create dynamic toolbar items inline with ng for. * Somehow this method is not getting called in time to initialize the button that is created by the ng for statement. */ ngDoCheck() { if (this.actionsDiffer) { const changes = this.actionsDiffer.diff(this.actions); if (changes) { changes.forEachAddedItem((record) => (record.item).addedToContainer(this.target, this)); changes.forEachRemovedItem((record) => (record.item).removedFromContainer()); } } if (this.wasBusy !== this.isBusy) { this.wasBusy = this.isBusy; this.updateActionStates(); } } /** * Method to update all child ActionItem objects states. */ updateActionStates() { if (this.actions && this.actions.length > 0) { this.actions.forEach(action => action.setActionState(this.target, this)); } } updateActions() { this.actionsDiffer = this.iterableDiffers.find(this.actions).create(null); this.updateActionStates(); } } /** @nocollapse */ ActionContainerComponent.ɵfac = function ActionContainerComponent_Factory(t) { return new (t || ActionContainerComponent)(i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ ActionContainerComponent.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: ActionContainerComponent, contentQueries: function ActionContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, _c0, 4); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.childActions = _t); } }, inputs: { actions: "actions", displayInlineActionsFirst: "displayInlineActionsFirst", target: "target", enabled: "enabled" }, outputs: { targetChange: "targetChange", error: "error", executed: "executed" }, features: [i0.ɵɵInheritDefinitionFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionContainerComponent, [{ type: Directive }], function () { return [{ type: i0.IterableDiffers }, { type: i0.Injector }]; }, { childActions: [{ type: ContentChildren, args: ['action'] }], actions: [{ type: Input }], displayInlineActionsFirst: [{ type: Input }], target: [{ type: Input }], targetChange: [{ type: Output }], enabled: [{ type: Input }], error: [{ type: Output }], executed: [{ type: Output }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9hY3Rpb25zL2NvbnRhaW5lcnMvYWN0aW9uLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsZUFBZSxFQUdmLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUtoRSxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQix3QkFDbEIsU0FBUSxpQkFBaUI7SUEySHpCOztPQUVHO0lBQ0gsWUFBb0IsZUFBZ0MsRUFBRSxRQUFrQjtRQUNwRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUEzRDdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQWM5Qzs7V0FFRztRQUNILDREQUE0RDtRQUVyRCxVQUFLLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFMUQ7O1dBRUc7UUFFSSxhQUFRLEdBQThDLElBQUksWUFBWSxFQUErQixDQUFDO1FBUzdHOztXQUVHO1FBQ0ksb0JBQWUsR0FBaUIsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ksb0JBQWUsR0FBaUIsRUFBRSxDQUFDO1FBRTFDOztVQUVFO1FBQ0ssa0JBQWEsR0FBaUIsRUFBRSxDQUFDO1FBRWhDLHNDQUFpQyxHQUFHLEtBQUssQ0FBQztRQUMxQyxvQkFBZSxHQUFHLElBQUksQ0FBQztJQVcvQixDQUFDO0lBNUdEOztPQUVHO0lBQ0gsSUFD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LENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7bUhBbE1pQix3QkFBd0I7MEdBQXhCLHdCQUF3Qjs7Ozs7O3VGQUF4Qix3QkFBd0I7Y0FGN0MsU0FBUzt5RkFxQkMsWUFBWTtrQkFEbEIsZUFBZTttQkFBQyxRQUFRO1lBT2QsT0FBTztrQkFEakIsS0FBSztZQVdLLHlCQUF5QjtrQkFEbkMsS0FBSztZQXdCSyxNQUFNO2tCQURoQixLQUFLO1lBV0MsWUFBWTtrQkFEbEIsTUFBTTtZQU9JLE9BQU87a0JBRGpCLEtBQUs7WUFjQyxLQUFLO2tCQURYLE1BQU07WUFPQSxRQUFRO2tCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXHJcbiAgICBJdGVyYWJsZURpZmZlcixcclxuICAgIEl0ZXJhYmxlRGlmZmVycyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSwgQWN0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2l0ZW1zL2FjdGlvbi1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGlvbkNvbnRhaW5lciwgQWN0aW9uQ29udGFpbmVyT3JpZW50YXRpb24sIEFjdGlvbkl0ZW1FeGVjdXRlZEV2ZW50QXJncyB9IGZyb20gJy4vYWN0aW9uLWNvbnRhaW5lcic7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb25Db250YWluZXJDb21wb25lbnRcclxuICAgIGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnRcclxuICAgIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgRG9DaGVjaywgT25Jbml0LCBPbkRlc3Ryb3ksIEFjdGlvbkNvbnRhaW5lciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IHN0b3JlcyBBY3Rpb25Db250YWluZXJDb21wb25lbnQgY29tcGFjdCBzdGF0ZS4gVHJ1ZSBmb3IgY29tcGFjdCwgZmFsc2UgZm9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IGdldCBjb21wYWN0KCk6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IHN0b3JlcyBBY3Rpb25Db250YWluZXJDb21wb25lbnQgb3JpZW50YXRpb24uXHJcbiAgICAgKiBWZXJ0aWNhbCBkaXNwbGF5cyBjb250YWluZXIgZnJvbSB0b3AgdG8gYm90dG9tIG9mIHBhZ2UsIGhvcml6b250YWwgZGlzcGxheXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IG9yaWVudGF0aW9uKCk6IEFjdGlvbkNvbnRhaW5lck9yaWVudGF0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBIVE1MIGRlZmluZWQgQWN0aW9uSXRlbSBvYmplY3RzIHN0b3JlZCBpbiBBY3Rpb25Db250YWluZXJDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2FjdGlvbicpXHJcbiAgICBwdWJsaWMgY2hpbGRBY3Rpb25zOiBRdWVyeUxpc3Q8QWN0aW9uSXRlbUNvbXBvbmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IG9mIHByb2dyYW1tYXRpY2FsbHkgZGVmaW5lZCBBY3Rpb25JdGVtIG9iamVjdHMgc3RvcmVkIGluIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgYWN0aW9ucyhhY3Rpb25zOiBBY3Rpb25JdGVtW10pIHtcclxuICAgICAgICB0aGlzLmludGVybmFsQWN0aW9ucyA9IGFjdGlvbnMgfHwgW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbGFnIHNldCB0byBkaXNwbGF5IGVpdGhlciBIVE1MIG9yIHByb2dyYW1tYXRpY2FsbHkgZGVmaW5lZCBBY3Rpb25JdGVtIG9iamVjdHMgZmlyc3QuXHJcbiAgICAgKiBUcnVlIHRvIGRpc3BsYXkgSFRNTCBkZWZpbmVkIGFjdGlvbnMgZmlyc3QsIGZhbHNlIHRvIGRpc3BsYXkgcHJvZ3JhbW1hdGljYWxseSBkZWZpbmVkIGFjdGlvbnMgZmlyc3QgKGRlZmF1bHRzIHRvIGZhbHNlKS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZGlzcGxheUlubGluZUFjdGlvbnNGaXJzdChkaXNwbGF5Rmlyc3Q6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlJbmxpbmVBY3Rpb25zRmlyc3RJbnRlcm5hbCA9IGRpc3BsYXlGaXJzdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgYWxsIEFjdGlvbkl0ZW0gb2JqZWN0cyBzdG9yZWQgaW4gQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFjdGlvbnMoKTogQWN0aW9uSXRlbVtdIHtcclxuICAgICAgICB0aGlzLmNvbWJpbmVkQWN0aW9ucy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNvbWJpbmVkQWN0aW9ucy5wdXNoLmFwcGx5KFxyXG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVkQWN0aW9ucyxcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5SW5saW5lQWN0aW9uc0ZpcnN0SW50ZXJuYWwgPyB0aGlzLmlubGluZUFjdGlvbnMuY29uY2F0KHRoaXMuaW50ZXJuYWxBY3Rpb25zKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmludGVybmFsQWN0aW9ucy5jb25jYXQodGhpcy5pbmxpbmVBY3Rpb25zKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJpbmVkQWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBvYmplY3QgdXNlZCBieSBjaGlsZCBhY3Rpb25zIG9mIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdGFyZ2V0KGlucHV0OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsVGFyZ2V0ID0gaW5wdXQ7XHJcbiAgICAgICAgdGhpcy50YXJnZXRDaGFuZ2UuZW1pdCh0aGlzLmludGVybmFsVGFyZ2V0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGlvblN0YXRlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0YXJnZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdGFyZ2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbGFnIHNldCB0byBlbmFibGUgb3IgZGlzYWJsZSBBY3Rpb25Db250YWluZXJDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGVuYWJsZWQoaW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcm5hbCA9ICEhaW5wdXQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25TdGF0ZXMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZW5hYmxlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkSW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCBlbWl0dGVyIGZpcmVkIHdoZW5ldmVyIGFuIGVycm9yIG9jY3VycyB3aXRoaW4gYSBjaGlsZCBBY3Rpb25JdGVtLlxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGVycm9yOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgZW1pdHRlciBmaXJlZCB3aGVuZXZlciBhIGNoaWxkIEFjdGlvbkl0ZW0gaXMgZXhlY3V0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGV4ZWN1dGVkOiBFdmVudEVtaXR0ZXI8QWN0aW9uSXRlbUV4ZWN1dGVkRXZlbnRBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uSXRlbUV4ZWN1dGVkRXZlbnRBcmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGFueSBjaGlsZCBBY3Rpb25JdGVtIG9iamVjdHMgaGF2ZSB0aGUgYnVzeSBmbGFnIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGlzQnVzeSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zICYmIHRoaXMuYWN0aW9ucy5zb21lKGFjdGlvbiA9PiBhY3Rpb24uYnVzeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IG9mIGFsbCBjaGlsZCBBY3Rpb25JdGVtIG9iamVjdHMsIGJvdGggSFRNTCBhbmQgcHJvZ3JhbW1hdGljYWxseSBkZWZpbmVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tYmluZWRBY3Rpb25zOiBBY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgcHJvZ3JhbW1hdGljYWxseSBkZWZpbmVkIEFjdGlvbkl0ZW0gb2JqZWN0cyBzdG9yZWQgaW4gQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW50ZXJuYWxBY3Rpb25zOiBBY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICogTGlzdCBvZiBIVE1MIGRlZmluZWQgQWN0aW9uSXRlbSBvYmplY3RzIHN0b3JlZCBpbiBBY3Rpb25Db250YWluZXJDb21wb25lbnQuXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGlubGluZUFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZGlzcGxheUlubGluZUFjdGlvbnNGaXJzdEludGVybmFsID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGVuYWJsZWRJbnRlcm5hbCA9IHRydWU7XHJcbiAgICBwcml2YXRlIGludGVybmFsVGFyZ2V0OiBhbnk7XHJcbiAgICBwcml2YXRlIGFjdGlvbnNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT47XHJcbiAgICBwcml2YXRlIHdhc0J1c3k6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGNvbXBsZXRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3IgZm9yIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycywgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHJ1biB3aGVuIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIHdoZW5ldmVyIGFuIGFjdGlvbiBleGVjdXRlcyBvciBlcnJvcnMsIHVwZGF0ZSBhY3Rpb24gc3RhdGVzXHJcbiAgICAgICAgLy8gTk9URTogQW5ndWxhciBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHdlIHNob3VsZCBub3QgdHJlYXQgZXZlbnQgZW1pdHRlcnMgYXMgb2JzZXJ2YWJsZXMuXHJcbiAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSB0aGlzIGNvdWxkIGJyZWFrIGlmIGFuZ3VsYXIgY2hhbmdlcyBpdHMgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVyIGFub3RoZXIgd2F5IG9mIHN1cmZhY2luZyB0aGlzLlxyXG4gICAgICAgIHRoaXMuY29tcGxldGVkU3Vic2NyaXB0aW9uID0gbWVyZ2UodGhpcy5leGVjdXRlZCwgdGhpcy5lcnJvcikuc3Vic2NyaWJlKG5leHQgPT4gdGhpcy51cGRhdGVBY3Rpb25TdGF0ZXMoKSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHJ1biB3aGVuIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHJ1biBpbW1lZGlhdGVseSBhZnRlciBBbmd1bGFyIGhhcyBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb24gb2YgYWxsIG9mIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCdzIGNvbnRlbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZEFjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbmxpbmVBY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQWN0aW9ucy5wdXNoLmFwcGx5KHRoaXMuaW5saW5lQWN0aW9ucywgdGhpcy5jaGlsZEFjdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS5hY3Rpb24pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlubGluZUFjdGlvbnMgPSB0aGlzLmNoaWxkQWN0aW9ucy5tYXAoaXRlbSA9PiBpdGVtLmFjdGlvbik7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLlxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyJ3MgZG9DaGVjayBsaWZlIGN5Y2xlIGhvb2suIE5vdGUgdGhlcmUgaXMgYW4gb2RkIGNvbmRpdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgZHluYW1pYyB0b29sYmFyIGl0ZW1zIGlubGluZSB3aXRoIG5nIGZvci5cclxuICAgICAqIFNvbWVob3cgdGhpcyBtZXRob2QgaXMgbm90IGdldHRpbmcgY2FsbGVkIGluIHRpbWUgdG8gaW5pdGlhbGl6ZSB0aGUgYnV0dG9uIHRoYXQgaXMgY3JlYXRlZCBieSB0aGUgbmcgZm9yIHN0YXRlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb25zRGlmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmFjdGlvbnNEaWZmZXIuZGlmZih0aGlzLmFjdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPEFjdGlvbkl0ZW0+KSA9PiAocmVjb3JkLml0ZW0pLmFkZGVkVG9Db250YWluZXIodGhpcy50YXJnZXQsIHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPEFjdGlvbkl0ZW0+KSA9PiAocmVjb3JkLml0ZW0pLnJlbW92ZWRGcm9tQ29udGFpbmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53YXNCdXN5ICE9PSB0aGlzLmlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLndhc0J1c3kgPSB0aGlzLmlzQnVzeTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25TdGF0ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdG8gdXBkYXRlIGFsbCBjaGlsZCBBY3Rpb25JdGVtIG9iamVjdHMgc3RhdGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQWN0aW9uU3RhdGVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbnMgJiYgdGhpcy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbi5zZXRBY3Rpb25TdGF0ZSh0aGlzLnRhcmdldCwgdGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUFjdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLmFjdGlvbnMpLmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGlvblN0YXRlcygpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==