@y3krulez/angular-archwizard
Version:
The port of angular-archwizard, supporting IVY and thus being compatible with Angular16+
161 lines • 19.9 kB
JavaScript
import { ContentChild, EventEmitter, HostBinding, Input, Output, Directive } from '@angular/core';
import { WizardStepSymbolDirective } from '../directives/wizard-step-symbol.directive';
import { WizardStepTitleDirective } from '../directives/wizard-step-title.directive';
import * as i0 from "@angular/core";
/**
* Basic functionality every type of wizard step needs to provide
*
* @author Marc Arndt
*/
/* tslint:disable-next-line directive-class-suffix */
export class WizardStep {
constructor() {
/**
* A symbol property, which contains an optional symbol for the step inside the navigation bar.
* Takes effect when `stepSymbolTemplate` is not defined or null.
*/
this.navigationSymbol = { symbol: '' };
/**
* A boolean describing if the wizard step is currently selected
*/
this.selected = false;
/**
* A boolean describing if the wizard step has been completed
*/
this.completed = false;
/**
* A boolean describing if the wizard step is shown as completed when the wizard is presented to the user
*
* Users will typically use `CompletedStepDirective` to set this flag
*/
this.initiallyCompleted = false;
/**
* A boolean describing if the wizard step is being edited after being competed
*
* This flag can only be true when `selected` is true.
*/
this.editing = false;
/**
* A boolean describing, if the wizard step should be selected by default, i.e. after the wizard has been initialized as the initial step
*/
this.defaultSelected = false;
/**
* A boolean describing if the wizard step is an optional step
*/
this.optional = false;
/**
* A function or boolean deciding, if this step can be entered
*/
this.canEnter = true;
/**
* A function or boolean deciding, if this step can be exited
*/
this.canExit = true;
/**
* This [[EventEmitter]] is called when the step is entered.
* The bound method should be used to do initialization work.
*/
this.stepEnter = new EventEmitter();
/**
* This [[EventEmitter]] is called when the step is exited.
* The bound method can be used to do cleanup work.
*/
this.stepExit = new EventEmitter();
}
/**
* Returns true if this wizard step should be visible to the user.
* If the step should be visible to the user false is returned, otherwise true
*/
get hidden() {
return !this.selected;
}
/**
* This method returns true, if this wizard step can be transitioned with a given direction.
* Transitioned in this case means either entered or exited, depending on the given `condition` parameter.
*
* @param condition A condition variable, deciding if the step can be transitioned
* @param direction The direction in which this step should be transitioned
* @returns A [[Promise]] containing `true`, if this step can transitioned in the given direction
* @throws An `Error` is thrown if `condition` is neither a function nor a boolean
*/
static canTransitionStep(condition, direction) {
if (typeof (condition) === typeof (true)) {
return Promise.resolve(condition);
}
else if (condition instanceof Function) {
return Promise.resolve(condition(direction));
}
else {
return Promise.reject(new Error(`Input value '${condition}' is neither a boolean nor a function`));
}
}
/**
* A function called when the step is entered
*
* @param direction The direction in which the step is entered
*/
enter(direction) {
this.stepEnter.emit(direction);
}
/**
* A function called when the step is exited
*
* @param direction The direction in which the step is exited
*/
exit(direction) {
this.stepExit.emit(direction);
}
/**
* This method returns true, if this wizard step can be entered from the given direction.
* Because this method depends on the value `canEnter`, it will throw an error, if `canEnter` is neither a boolean
* nor a function.
*
* @param direction The direction in which this step should be entered
* @returns A [[Promise]] containing `true`, if the step can be entered in the given direction, false otherwise
* @throws An `Error` is thrown if `anEnter` is neither a function nor a boolean
*/
canEnterStep(direction) {
return WizardStep.canTransitionStep(this.canEnter, direction);
}
/**
* This method returns true, if this wizard step can be exited into given direction.
* Because this method depends on the value `canExit`, it will throw an error, if `canExit` is neither a boolean
* nor a function.
*
* @param direction The direction in which this step should be left
* @returns A [[Promise]] containing `true`, if the step can be exited in the given direction, false otherwise
* @throws An `Error` is thrown if `canExit` is neither a function nor a boolean
*/
canExitStep(direction) {
return WizardStep.canTransitionStep(this.canExit, direction);
}
}
WizardStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WizardStep, deps: [], target: i0.ɵɵFactoryTarget.Directive });
WizardStep.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: WizardStep, inputs: { stepId: "stepId", stepTitle: "stepTitle", navigationSymbol: "navigationSymbol", canEnter: "canEnter", canExit: "canExit" }, outputs: { stepEnter: "stepEnter", stepExit: "stepExit" }, host: { properties: { "hidden": "this.hidden" } }, queries: [{ propertyName: "stepTitleTemplate", first: true, predicate: WizardStepTitleDirective, descendants: true }, { propertyName: "stepSymbolTemplate", first: true, predicate: WizardStepSymbolDirective, descendants: true }], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WizardStep, decorators: [{
type: Directive
}], propDecorators: { stepTitleTemplate: [{
type: ContentChild,
args: [WizardStepTitleDirective]
}], stepSymbolTemplate: [{
type: ContentChild,
args: [WizardStepSymbolDirective]
}], stepId: [{
type: Input
}], stepTitle: [{
type: Input
}], navigationSymbol: [{
type: Input
}], canEnter: [{
type: Input
}], canExit: [{
type: Input
}], stepEnter: [{
type: Output
}], stepExit: [{
type: Output
}], hidden: [{
type: HostBinding,
args: ['hidden']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlsL3dpemFyZC1zdGVwLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDckYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7O0FBSW5GOzs7O0dBSUc7QUFFSCxxREFBcUQ7QUFDckQsTUFBTSxPQUFnQixVQUFVO0lBRmhDO1FBK0JFOzs7V0FHRztRQUVJLHFCQUFnQixHQUFxQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUV6RDs7V0FFRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFDSSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXpCOzs7O1dBSUc7UUFDSSx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFbEM7Ozs7V0FJRztRQUNJLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFdkI7O1dBRUc7UUFDSSxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUUvQjs7V0FFRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFFSSxhQUFRLEdBQTZHLElBQUksQ0FBQztRQUVqSTs7V0FFRztRQUVJLFlBQU8sR0FBNkcsSUFBSSxDQUFDO1FBRWhJOzs7V0FHRztRQUVJLGNBQVMsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFdEY7OztXQUdHO1FBRUksYUFBUSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztLQTRFdEY7SUExRUM7OztPQUdHO0lBQ0gsSUFDVyxNQUFNO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBRVMsRUFDVCxTQUEwQjtRQUN6RCxJQUFJLE9BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQW9CLENBQUMsQ0FBQztTQUM5QzthQUFNLElBQUksU0FBUyxZQUFZLFFBQVEsRUFBRTtZQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNMLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsU0FBUyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUM7U0FDcEc7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxTQUEwQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUksQ0FBQyxTQUEwQjtRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxZQUFZLENBQUMsU0FBMEI7UUFDNUMsT0FBTyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxXQUFXLENBQUMsU0FBMEI7UUFDM0MsT0FBTyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDOzt3R0F6S21CLFVBQVU7NEZBQVYsVUFBVSw2VEFNaEIsd0JBQXdCLHFGQU94Qix5QkFBeUI7NEZBYm5CLFVBQVU7a0JBRi9CLFNBQVM7OEJBU0QsaUJBQWlCO3NCQUR2QixZQUFZO3VCQUFDLHdCQUF3QjtnQkFRL0Isa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHlCQUF5QjtnQkFPaEMsTUFBTTtzQkFEWixLQUFLO2dCQVFDLFNBQVM7c0JBRGYsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBeUNDLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBUUMsU0FBUztzQkFEZixNQUFNO2dCQVFBLFFBQVE7c0JBRGQsTUFBTTtnQkFRSSxNQUFNO3NCQURoQixXQUFXO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1dpemFyZFN0ZXBTeW1ib2xEaXJlY3RpdmV9IGZyb20gJy4uL2RpcmVjdGl2ZXMvd2l6YXJkLXN0ZXAtc3ltYm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7V2l6YXJkU3RlcFRpdGxlRGlyZWN0aXZlfSBmcm9tICcuLi9kaXJlY3RpdmVzL3dpemFyZC1zdGVwLXRpdGxlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7TW92aW5nRGlyZWN0aW9ufSBmcm9tICcuL21vdmluZy1kaXJlY3Rpb24uZW51bSc7XHJcbmltcG9ydCB7TmF2aWdhdGlvblN5bWJvbH0gZnJvbSAnLi9uYXZpZ2F0aW9uLXN5bWJvbC5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIGZ1bmN0aW9uYWxpdHkgZXZlcnkgdHlwZSBvZiB3aXphcmQgc3RlcCBuZWVkcyB0byBwcm92aWRlXHJcbiAqXHJcbiAqIEBhdXRob3IgTWFyYyBBcm5kdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBkaXJlY3RpdmUtY2xhc3Mtc3VmZml4ICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXaXphcmRTdGVwIHtcclxuICAvKipcclxuICAgKiBBIHN0ZXAgdGl0bGUgcHJvcGVydHksIHdoaWNoIGNvbnRhaW5zIHRoZSB2aXNpYmxlIGhlYWRlciB0aXRsZSBvZiB0aGUgc3RlcC5cclxuICAgKiBUaGlzIHRpdGxlIGlzIHRoZW4gc2hvd24gaW5zaWRlIHRoZSBuYXZpZ2F0aW9uIGJhci5cclxuICAgKiBDb21wYXJlZCB0byBgc3RlcFRpdGxlYCB0aGlzIHByb3BlcnR5IGNhbiBjb250YWluIGFueSBodG1sIGNvbnRlbnQgYW5kIG5vdCBvbmx5IHBsYWluIHRleHRcclxuICAgKi9cclxuICBAQ29udGVudENoaWxkKFdpemFyZFN0ZXBUaXRsZURpcmVjdGl2ZSlcclxuICBwdWJsaWMgc3RlcFRpdGxlVGVtcGxhdGU6IFdpemFyZFN0ZXBUaXRsZURpcmVjdGl2ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBzdGVwIHN5bWJvbCBwcm9wZXJ0eSB0aGF0LCBpZiBkZWZpbmVkLCBvdmVycmlkZXMgYG5hdmlnYXRpb25TeW1ib2xgLlxyXG4gICAqIEFsbG93cyB0byBkaXNwbGF5IGFyYml0cmFyeSBjb250ZW50IGFzIGEgc3RlcCBzeW1ib2wgaW5zdGVhZCBvZiBwbGFpbiB0ZXh0LlxyXG4gICAqL1xyXG4gIEBDb250ZW50Q2hpbGQoV2l6YXJkU3RlcFN5bWJvbERpcmVjdGl2ZSlcclxuICBwdWJsaWMgc3RlcFN5bWJvbFRlbXBsYXRlOiBXaXphcmRTdGVwU3ltYm9sRGlyZWN0aXZlO1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0ZXAgaWQsIHVuaXF1ZSB0byB0aGUgc3RlcFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN0ZXBJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0ZXAgdGl0bGUgcHJvcGVydHksIHdoaWNoIGNvbnRhaW5zIHRoZSB2aXNpYmxlIGhlYWRlciB0aXRsZSBvZiB0aGUgc3RlcC5cclxuICAgKiBUaGlzIHRpdGxlIGlzIG9ubHkgc2hvd24gaW5zaWRlIHRoZSBuYXZpZ2F0aW9uIGJhciwgaWYgYHN0ZXBUaXRsZVRlbXBsYXRlYCBpcyBub3QgZGVmaW5lZCBvciBudWxsLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN0ZXBUaXRsZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBBIHN5bWJvbCBwcm9wZXJ0eSwgd2hpY2ggY29udGFpbnMgYW4gb3B0aW9uYWwgc3ltYm9sIGZvciB0aGUgc3RlcCBpbnNpZGUgdGhlIG5hdmlnYXRpb24gYmFyLlxyXG4gICAqIFRha2VzIGVmZmVjdCB3aGVuIGBzdGVwU3ltYm9sVGVtcGxhdGVgIGlzIG5vdCBkZWZpbmVkIG9yIG51bGwuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbmF2aWdhdGlvblN5bWJvbDogTmF2aWdhdGlvblN5bWJvbCA9IHtzeW1ib2w6ICcnfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBib29sZWFuIGRlc2NyaWJpbmcgaWYgdGhlIHdpemFyZCBzdGVwIGlzIGN1cnJlbnRseSBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIGJvb2xlYW4gZGVzY3JpYmluZyBpZiB0aGUgd2l6YXJkIHN0ZXAgaGFzIGJlZW4gY29tcGxldGVkXHJcbiAgICovXHJcbiAgcHVibGljIGNvbXBsZXRlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIGJvb2xlYW4gZGVzY3JpYmluZyBpZiB0aGUgd2l6YXJkIHN0ZXAgaXMgc2hvd24gYXMgY29tcGxldGVkIHdoZW4gdGhlIHdpemFyZCBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJcclxuICAgKlxyXG4gICAqIFVzZXJzIHdpbGwgdHlwaWNhbGx5IHVzZSBgQ29tcGxldGVkU3RlcERpcmVjdGl2ZWAgdG8gc2V0IHRoaXMgZmxhZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBpbml0aWFsbHlDb21wbGV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBib29sZWFuIGRlc2NyaWJpbmcgaWYgdGhlIHdpemFyZCBzdGVwIGlzIGJlaW5nIGVkaXRlZCBhZnRlciBiZWluZyBjb21wZXRlZFxyXG4gICAqXHJcbiAgICogVGhpcyBmbGFnIGNhbiBvbmx5IGJlIHRydWUgd2hlbiBgc2VsZWN0ZWRgIGlzIHRydWUuXHJcbiAgICovXHJcbiAgcHVibGljIGVkaXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBib29sZWFuIGRlc2NyaWJpbmcsIGlmIHRoZSB3aXphcmQgc3RlcCBzaG91bGQgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgaS5lLiBhZnRlciB0aGUgd2l6YXJkIGhhcyBiZWVuIGluaXRpYWxpemVkIGFzIHRoZSBpbml0aWFsIHN0ZXBcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdFNlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgYm9vbGVhbiBkZXNjcmliaW5nIGlmIHRoZSB3aXphcmQgc3RlcCBpcyBhbiBvcHRpb25hbCBzdGVwXHJcbiAgICovXHJcbiAgcHVibGljIG9wdGlvbmFsID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gb3IgYm9vbGVhbiBkZWNpZGluZywgaWYgdGhpcyBzdGVwIGNhbiBiZSBlbnRlcmVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuRW50ZXI6ICgoZGlyZWN0aW9uOiBNb3ZpbmdEaXJlY3Rpb24pID0+IGJvb2xlYW4pIHwgKChkaXJlY3Rpb246IE1vdmluZ0RpcmVjdGlvbikgPT4gUHJvbWlzZTxib29sZWFuPikgfCBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiBvciBib29sZWFuIGRlY2lkaW5nLCBpZiB0aGlzIHN0ZXAgY2FuIGJlIGV4aXRlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhbkV4aXQ6ICgoZGlyZWN0aW9uOiBNb3ZpbmdEaXJlY3Rpb24pID0+IGJvb2xlYW4pIHwgKChkaXJlY3Rpb246IE1vdmluZ0RpcmVjdGlvbikgPT4gUHJvbWlzZTxib29sZWFuPikgfCBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBbW0V2ZW50RW1pdHRlcl1dIGlzIGNhbGxlZCB3aGVuIHRoZSBzdGVwIGlzIGVudGVyZWQuXHJcbiAgICogVGhlIGJvdW5kIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB0byBkbyBpbml0aWFsaXphdGlvbiB3b3JrLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzdGVwRW50ZXI6IEV2ZW50RW1pdHRlcjxNb3ZpbmdEaXJlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3ZpbmdEaXJlY3Rpb24+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgW1tFdmVudEVtaXR0ZXJdXSBpcyBjYWxsZWQgd2hlbiB0aGUgc3RlcCBpcyBleGl0ZWQuXHJcbiAgICogVGhlIGJvdW5kIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkbyBjbGVhbnVwIHdvcmsuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHN0ZXBFeGl0OiBFdmVudEVtaXR0ZXI8TW92aW5nRGlyZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8TW92aW5nRGlyZWN0aW9uPigpO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB3aXphcmQgc3RlcCBzaG91bGQgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cclxuICAgKiBJZiB0aGUgc3RlcCBzaG91bGQgYmUgdmlzaWJsZSB0byB0aGUgdXNlciBmYWxzZSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHRydWVcclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2hpZGRlbicpXHJcbiAgcHVibGljIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIGlmIHRoaXMgd2l6YXJkIHN0ZXAgY2FuIGJlIHRyYW5zaXRpb25lZCB3aXRoIGEgZ2l2ZW4gZGlyZWN0aW9uLlxyXG4gICAqIFRyYW5zaXRpb25lZCBpbiB0aGlzIGNhc2UgbWVhbnMgZWl0aGVyIGVudGVyZWQgb3IgZXhpdGVkLCBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGBjb25kaXRpb25gIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25kaXRpb24gQSBjb25kaXRpb24gdmFyaWFibGUsIGRlY2lkaW5nIGlmIHRoZSBzdGVwIGNhbiBiZSB0cmFuc2l0aW9uZWRcclxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhpcyBzdGVwIHNob3VsZCBiZSB0cmFuc2l0aW9uZWRcclxuICAgKiBAcmV0dXJucyBBIFtbUHJvbWlzZV1dIGNvbnRhaW5pbmcgYHRydWVgLCBpZiB0aGlzIHN0ZXAgY2FuIHRyYW5zaXRpb25lZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uXHJcbiAgICogQHRocm93cyBBbiBgRXJyb3JgIGlzIHRocm93biBpZiBgY29uZGl0aW9uYCBpcyBuZWl0aGVyIGEgZnVuY3Rpb24gbm9yIGEgYm9vbGVhblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIGNhblRyYW5zaXRpb25TdGVwKGNvbmRpdGlvbjogKChkaXJlY3Rpb246IE1vdmluZ0RpcmVjdGlvbikgPT4gYm9vbGVhbikgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaXJlY3Rpb246IE1vdmluZ0RpcmVjdGlvbikgPT4gUHJvbWlzZTxib29sZWFuPikgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IE1vdmluZ0RpcmVjdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHR5cGVvZihjb25kaXRpb24pID09PSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25kaXRpb24gYXMgYm9vbGVhbik7XHJcbiAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZGl0aW9uKGRpcmVjdGlvbikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgSW5wdXQgdmFsdWUgJyR7Y29uZGl0aW9ufScgaXMgbmVpdGhlciBhIGJvb2xlYW4gbm9yIGEgZnVuY3Rpb25gKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGVwIGlzIGVudGVyZWRcclxuICAgKlxyXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgc3RlcCBpcyBlbnRlcmVkXHJcbiAgICovXHJcbiAgcHVibGljIGVudGVyKGRpcmVjdGlvbjogTW92aW5nRGlyZWN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0ZXBFbnRlci5lbWl0KGRpcmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGVwIGlzIGV4aXRlZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBzdGVwIGlzIGV4aXRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBleGl0KGRpcmVjdGlvbjogTW92aW5nRGlyZWN0aW9uKSB7XHJcbiAgICB0aGlzLnN0ZXBFeGl0LmVtaXQoZGlyZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgaWYgdGhpcyB3aXphcmQgc3RlcCBjYW4gYmUgZW50ZXJlZCBmcm9tIHRoZSBnaXZlbiBkaXJlY3Rpb24uXHJcbiAgICogQmVjYXVzZSB0aGlzIG1ldGhvZCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBgY2FuRW50ZXJgLCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCBpZiBgY2FuRW50ZXJgIGlzIG5laXRoZXIgYSBib29sZWFuXHJcbiAgICogbm9yIGEgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhpcyBzdGVwIHNob3VsZCBiZSBlbnRlcmVkXHJcbiAgICogQHJldHVybnMgQSBbW1Byb21pc2VdXSBjb250YWluaW5nIGB0cnVlYCwgaWYgdGhlIHN0ZXAgY2FuIGJlIGVudGVyZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICogQHRocm93cyBBbiBgRXJyb3JgIGlzIHRocm93biBpZiBgYW5FbnRlcmAgaXMgbmVpdGhlciBhIGZ1bmN0aW9uIG5vciBhIGJvb2xlYW5cclxuICAgKi9cclxuICBwdWJsaWMgY2FuRW50ZXJTdGVwKGRpcmVjdGlvbjogTW92aW5nRGlyZWN0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gV2l6YXJkU3RlcC5jYW5UcmFuc2l0aW9uU3RlcCh0aGlzLmNhbkVudGVyLCBkaXJlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCBpZiB0aGlzIHdpemFyZCBzdGVwIGNhbiBiZSBleGl0ZWQgaW50byBnaXZlbiBkaXJlY3Rpb24uXHJcbiAgICogQmVjYXVzZSB0aGlzIG1ldGhvZCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBgY2FuRXhpdGAsIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIGlmIGBjYW5FeGl0YCBpcyBuZWl0aGVyIGEgYm9vbGVhblxyXG4gICAqIG5vciBhIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoaXMgc3RlcCBzaG91bGQgYmUgbGVmdFxyXG4gICAqIEByZXR1cm5zIEEgW1tQcm9taXNlXV0gY29udGFpbmluZyBgdHJ1ZWAsIGlmIHRoZSBzdGVwIGNhbiBiZSBleGl0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICogQHRocm93cyBBbiBgRXJyb3JgIGlzIHRocm93biBpZiBgY2FuRXhpdGAgaXMgbmVpdGhlciBhIGZ1bmN0aW9uIG5vciBhIGJvb2xlYW5cclxuICAgKi9cclxuICBwdWJsaWMgY2FuRXhpdFN0ZXAoZGlyZWN0aW9uOiBNb3ZpbmdEaXJlY3Rpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBXaXphcmRTdGVwLmNhblRyYW5zaXRpb25TdGVwKHRoaXMuY2FuRXhpdCwgZGlyZWN0aW9uKTtcclxuICB9XHJcbn1cclxuIl19