@bimeister/pupakit.forms
Version:
PupaKit Forms
179 lines • 24.7 kB
JavaScript
import { Directive, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, } from '@angular/core';
import '@bimeister/pupakit.common';
import { distinctUntilSerializedChanged, isEmpty, isNil } from '@bimeister/utilities';
import { BehaviorSubject, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
import { isDate } from '../../functions/is-date.function';
import '../../types/input-size.type';
import '../../types/input-style-customization.type';
import { InputBaseControlValueAccessor } from './input-base-control-value-accessor.abstract';
import * as i0 from "@angular/core";
export class InputBase extends InputBaseControlValueAccessor {
constructor() {
super(...arguments);
this.controlAttribute = 'input';
this.invalidTooltipHideOnHover = false;
this.invalidTooltipDisabled = false;
this.invalidTooltip = null;
this.invalidTooltipContentTemplate = null;
this.size = 'medium';
this.size$ = new BehaviorSubject('medium');
this.placeholder = '';
this.placeholder$ = new BehaviorSubject('');
this.autocomplete = false;
this.autocomplete$ = new BehaviorSubject(false);
this.withReset = false;
this.withReset$ = new BehaviorSubject(false);
this.isPatched = false;
this.isPatched$ = new BehaviorSubject(false);
this.customStyles = [];
this.customStyles$ = new BehaviorSubject([]);
this.leftIcon = '';
this.leftIcon$ = new BehaviorSubject('');
this.rightIcon = '';
this.rightIcon$ = new BehaviorSubject('');
this.focus = new EventEmitter();
this.blur = new EventEmitter();
this.isInvalid$ = combineLatest([
this.isDisabled$,
this.isPatched$,
this.isValid$,
this.isTouched$,
]).pipe(distinctUntilSerializedChanged(), map(([isDisabled, isPatched, isValid, isTouched]) => (isTouched || isPatched) && !isValid && !isDisabled));
this.resultClassList$ = combineLatest([
this.size$,
this.isInvalid$.pipe(map((isInvalid) => (isInvalid ? 'invalid' : null))),
this.isFilled$.pipe(map((filled) => (filled ? 'filled' : null))),
this.isDisabled$.pipe(map((isDisabled) => (isDisabled ? 'disabled' : null))),
this.customStyles$.pipe(map((styles) => (!isEmpty(styles) ? styles.join('-') : null))),
]).pipe(map((classes) => classes
.filter((innerClass) => !isNil(innerClass))
.map((innerProperty) => `input-wrapper_${innerProperty}`)));
this.isVisibleReset$ = combineLatest([
this.withReset$,
this.isFilled$,
this.isDisabled$,
]).pipe(map(([withReset, isFilled, isDisabled]) => withReset && isFilled && !isDisabled));
}
processIsPatchedChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.isPatched$.next(updatedValue);
}
processWithResetChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.withReset$.next(updatedValue);
}
ngOnChanges(changes) {
this.processSizeChange(changes?.size);
this.processPlaceholderChange(changes?.placeholder);
this.processAutocompleteChange(changes?.autocomplete);
this.processIsPatchedChange(changes?.isPatched);
this.processWithResetChange(changes?.withReset);
this.processStylesChange(changes?.customStyles);
this.processLeftIconChange(changes?.leftIcon);
this.processRightIconChange(changes?.rightIcon);
}
emitFocusEvent(focusEvent) {
this.isFocused$.next(true);
this.focus.emit(focusEvent);
}
emitBlurEvent(blurEvent) {
this.isFocused$.next(false);
this.blur.emit(blurEvent);
}
isDate(value) {
return isDate(value);
}
focusOnInputElement() {
const inputElement = this.inputElementRef.nativeElement;
inputElement.focus();
}
processSizeChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.size$.next(updatedValue);
}
processPlaceholderChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.placeholder$.next(updatedValue);
}
processAutocompleteChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.autocomplete$.next(updatedValue);
}
processStylesChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.customStyles$.next(updatedValue);
}
processLeftIconChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.leftIcon$.next(updatedValue);
}
processRightIconChange(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.rightIcon$.next(updatedValue);
}
}
InputBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
InputBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: InputBase, inputs: { invalidTooltipHideOnHover: "invalidTooltipHideOnHover", invalidTooltipDisabled: "invalidTooltipDisabled", invalidTooltip: "invalidTooltip", invalidTooltipContentTemplate: "invalidTooltipContentTemplate", size: "size", placeholder: "placeholder", autocomplete: "autocomplete", withReset: "withReset", isPatched: "isPatched", customStyles: "customStyles", leftIcon: "leftIcon", rightIcon: "rightIcon" }, outputs: { focus: "focus", blur: "blur" }, host: { properties: { "attr.pupa-control": "this.controlAttribute" } }, viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputBase, decorators: [{
type: Directive
}], propDecorators: { controlAttribute: [{
type: HostBinding,
args: ['attr.pupa-control']
}], inputElementRef: [{
type: ViewChild,
args: ['inputElement']
}], invalidTooltipHideOnHover: [{
type: Input
}], invalidTooltipDisabled: [{
type: Input
}], invalidTooltip: [{
type: Input
}], invalidTooltipContentTemplate: [{
type: Input
}], size: [{
type: Input
}], placeholder: [{
type: Input
}], autocomplete: [{
type: Input
}], withReset: [{
type: Input
}], isPatched: [{
type: Input
}], customStyles: [{
type: Input
}], leftIcon: [{
type: Input
}], rightIcon: [{
type: Input
}], focus: [{
type: Output
}], blur: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzZS5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kZWNsYXJhdGlvbnMvY2xhc3Nlcy9hYnN0cmFjdC9pbnB1dC1iYXNlLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBa0QsMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQTBCLDZCQUE2QixDQUFDO0FBQ3hELE9BQXdDLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQUc3RixNQUFNLE9BQWdCLFNBQWEsU0FBUSw2QkFBZ0M7SUFEM0U7O1FBRW9ELHFCQUFnQixHQUFXLE9BQU8sQ0FBQztRQUtyRSw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFDM0MsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLG1CQUFjLEdBQXFCLElBQUksQ0FBQztRQUN4QyxrQ0FBNkIsR0FBbUMsSUFBSSxDQUFDO1FBRXJFLFNBQUksR0FBYyxRQUFRLENBQUM7UUFDM0IsVUFBSyxHQUErQixJQUFJLGVBQWUsQ0FBWSxRQUFRLENBQUMsQ0FBQztRQUU3RSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUE0QixJQUFJLGVBQWUs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QUFXO3NCQUExQixLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBR1UsU0FBUztzQkFBeEIsS0FBSztnQkFHVSxTQUFTO3NCQUF4QixLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFHVSxTQUFTO3NCQUF4QixLQUFLO2dCQUdvQixLQUFLO3NCQUE5QixNQUFNO2dCQUNtQixJQUFJO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhbmdlLCBDb21wb25lbnRDaGFuZ2VzIH0gZnJvbSAnQGJpbWVpc3Rlci9wdXBha2l0LmNvbW1vbic7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsU2VyaWFsaXplZENoYW5nZWQsIGlzRW1wdHksIGlzTmlsLCBOdWxsYWJsZSB9IGZyb20gJ0BiaW1laXN0ZXIvdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2lzLWRhdGUuZnVuY3Rpb24nO1xuaW1wb3J0IHsgSW5wdXRTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMvaW5wdXQtc2l6ZS50eXBlJztcbmltcG9ydCB7IElucHV0U3R5bGVDdXN0b21pemF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvaW5wdXQtc3R5bGUtY3VzdG9taXphdGlvbi50eXBlJztcbmltcG9ydCB7IElucHV0QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi9pbnB1dC1iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IuYWJzdHJhY3QnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnB1dEJhc2U8VD4gZXh0ZW5kcyBJbnB1dEJhc2VDb250cm9sVmFsdWVBY2Nlc3NvcjxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBIb3N0QmluZGluZygnYXR0ci5wdXBhLWNvbnRyb2wnKSBwdWJsaWMgcmVhZG9ubHkgY29udHJvbEF0dHJpYnV0ZTogc3RyaW5nID0gJ2lucHV0JztcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5wdXRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkVG9vbHRpcEhpZGVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkVG9vbHRpcERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkVG9vbHRpcDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkVG9vbHRpcENvbnRlbnRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+ID0gbnVsbDtcblxuICBASW5wdXQoKSBwdWJsaWMgc2l6ZTogSW5wdXRTaXplID0gJ21lZGl1bSc7XG4gIHB1YmxpYyByZWFkb25seSBzaXplJDogQmVoYXZpb3JTdWJqZWN0PElucHV0U2l6ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElucHV0U2l6ZT4oJ21lZGl1bScpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyByZWFkb25seSBwbGFjZWhvbGRlciQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBASW5wdXQoKSBwdWJsaWMgYXV0b2NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFkb25seSBhdXRvY29tcGxldGUkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBwdWJsaWMgd2l0aFJlc2V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFkb25seSB3aXRoUmVzZXQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBwdWJsaWMgaXNQYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFkb25seSBpc1BhdGNoZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU3R5bGVzOiBJbnB1dFN0eWxlQ3VzdG9taXphdGlvbltdID0gW107XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21TdHlsZXMkOiBCZWhhdmlvclN1YmplY3Q8SW5wdXRTdHlsZUN1c3RvbWl6YXRpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIElucHV0U3R5bGVDdXN0b21pemF0aW9uW11cbiAgPihbXSk7XG5cbiAgQElucHV0KCkgcHVibGljIGxlZnRJY29uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHJlYWRvbmx5IGxlZnRJY29uJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyByaWdodEljb246IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgcmVhZG9ubHkgcmlnaHRJY29uJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZm9jdXM6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBibHVyOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzSW52YWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlzRGlzYWJsZWQkLFxuICAgIHRoaXMuaXNQYXRjaGVkJCxcbiAgICB0aGlzLmlzVmFsaWQkLFxuICAgIHRoaXMuaXNUb3VjaGVkJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsU2VyaWFsaXplZENoYW5nZWQoKSxcbiAgICBtYXAoXG4gICAgICAoW2lzRGlzYWJsZWQsIGlzUGF0Y2hlZCwgaXNWYWxpZCwgaXNUb3VjaGVkXTogW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dKSA9PlxuICAgICAgICAoaXNUb3VjaGVkIHx8IGlzUGF0Y2hlZCkgJiYgIWlzVmFsaWQgJiYgIWlzRGlzYWJsZWRcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc3VsdENsYXNzTGlzdCQ6IE9ic2VydmFibGU8c3RyaW5nW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zaXplJCxcbiAgICB0aGlzLmlzSW52YWxpZCQucGlwZShtYXAoKGlzSW52YWxpZDogYm9vbGVhbikgPT4gKGlzSW52YWxpZCA/ICdpbnZhbGlkJyA6IG51bGwpKSksXG4gICAgdGhpcy5pc0ZpbGxlZCQucGlwZShtYXAoKGZpbGxlZDogYm9vbGVhbikgPT4gKGZpbGxlZCA/ICdmaWxsZWQnIDogbnVsbCkpKSxcbiAgICB0aGlzLmlzRGlzYWJsZWQkLnBpcGUobWFwKChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiAoaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsKSkpLFxuICAgIHRoaXMuY3VzdG9tU3R5bGVzJC5waXBlKG1hcCgoc3R5bGVzOiBJbnB1dFN0eWxlQ3VzdG9taXphdGlvbltdKSA9PiAoIWlzRW1wdHkoc3R5bGVzKSA/IHN0eWxlcy5qb2luKCctJykgOiBudWxsKSkpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoY2xhc3Nlczogc3RyaW5nW10pID0+XG4gICAgICBjbGFzc2VzXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQ2xhc3M6IHN0cmluZykgPT4gIWlzTmlsKGlubmVyQ2xhc3MpKVxuICAgICAgICAubWFwKChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGBpbnB1dC13cmFwcGVyXyR7aW5uZXJQcm9wZXJ0eX1gKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNWaXNpYmxlUmVzZXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy53aXRoUmVzZXQkLFxuICAgIHRoaXMuaXNGaWxsZWQkLFxuICAgIHRoaXMuaXNEaXNhYmxlZCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbd2l0aFJlc2V0LCBpc0ZpbGxlZCwgaXNEaXNhYmxlZF06IFtib29sZWFuLCBib29sZWFuLCBib29sZWFuXSkgPT4gd2l0aFJlc2V0ICYmIGlzRmlsbGVkICYmICFpc0Rpc2FibGVkKVxuICApO1xuXG4gIHByb3RlY3RlZCBwcm9jZXNzSXNQYXRjaGVkQ2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNQYXRjaGVkJC5uZXh0KHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1dpdGhSZXNldENoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBib29sZWFuPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy53aXRoUmVzZXQkLm5leHQodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBDb21wb25lbnRDaGFuZ2VzPHRoaXM+KTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzU2l6ZUNoYW5nZShjaGFuZ2VzPy5zaXplKTtcbiAgICB0aGlzLnByb2Nlc3NQbGFjZWhvbGRlckNoYW5nZShjaGFuZ2VzPy5wbGFjZWhvbGRlcik7XG4gICAgdGhpcy5wcm9jZXNzQXV0b2NvbXBsZXRlQ2hhbmdlKGNoYW5nZXM/LmF1dG9jb21wbGV0ZSk7XG4gICAgdGhpcy5wcm9jZXNzSXNQYXRjaGVkQ2hhbmdlKGNoYW5nZXM/LmlzUGF0Y2hlZCk7XG4gICAgdGhpcy5wcm9jZXNzV2l0aFJlc2V0Q2hhbmdlKGNoYW5nZXM/LndpdGhSZXNldCk7XG4gICAgdGhpcy5wcm9jZXNzU3R5bGVzQ2hhbmdlKGNoYW5nZXM/LmN1c3RvbVN0eWxlcyk7XG4gICAgdGhpcy5wcm9jZXNzTGVmdEljb25DaGFuZ2UoY2hhbmdlcz8ubGVmdEljb24pO1xuICAgIHRoaXMucHJvY2Vzc1JpZ2h0SWNvbkNoYW5nZShjaGFuZ2VzPy5yaWdodEljb24pO1xuICB9XG5cbiAgcHVibGljIGVtaXRGb2N1c0V2ZW50KGZvY3VzRXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmZvY3VzLmVtaXQoZm9jdXNFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdEJsdXJFdmVudChibHVyRXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5ibHVyLmVtaXQoYmx1ckV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RhdGUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNEYXRlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1c09uSW5wdXRFbGVtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTaXplQ2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIElucHV0U2l6ZT4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkVmFsdWU6IElucHV0U2l6ZSB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUkLm5leHQodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1BsYWNlaG9sZGVyQ2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYWNlaG9sZGVyJC5uZXh0KHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NBdXRvY29tcGxldGVDaGFuZ2UoY2hhbmdlOiBDb21wb25lbnRDaGFuZ2U8dGhpcywgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkVmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvY29tcGxldGUkLm5leHQodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0eWxlc0NoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBJbnB1dFN0eWxlQ3VzdG9taXphdGlvbltdPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogSW5wdXRTdHlsZUN1c3RvbWl6YXRpb25bXSB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1c3RvbVN0eWxlcyQubmV4dCh1cGRhdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTGVmdEljb25DaGFuZ2UoY2hhbmdlOiBDb21wb25lbnRDaGFuZ2U8dGhpcywgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGVmdEljb24kLm5leHQodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1JpZ2h0SWNvbkNoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yaWdodEljb24kLm5leHQodXBkYXRlZFZhbHVlKTtcbiAgfVxufVxuIl19