@schoolbelle/common
Version:
Demo library to showcase Angular packaging format
282 lines (274 loc) • 25 kB
JavaScript
import { Injectable, Component, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, Renderer2, NgModule } from '@angular/core';
import { HttpClient, HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';
import { DomSanitizer } from '@angular/platform-browser';
import { FormGroup, FormControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, COMPOSITION_BUFFER_MODE } from '@angular/forms';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class AddressService {
/**
* @param {?} http
* @param {?} sanitizer
*/
constructor(http, sanitizer) {
this.http = http;
this.sanitizer = sanitizer;
}
/**
* @param {?} q
* @return {?}
*/
search(q) {
// const host = 'schoolbelle.local';
// const url = `https://api.poesis.kr/post/search.php?q=${q}&v=3.0.0-schoolbelle&ref=${host}`;
const /** @type {?} */ apiKey = '906b6df16b1f8b0d02e4bbb4ec75ca02';
const /** @type {?} */ url = `${window.location.protocol}//apis.daum.net/local/v1/search/keyword.json?callback=JSON_CALLBACK&apikey=${apiKey}&query=${q}`;
return this.http
.jsonp(url, 'callback')
.toPromise()
.then((data) => {
return (/** @type {?} */ (data.channel.item)).map(li => {
return /** @type {?} */ ({
address: /** @type {?} */ ((li.address +
' ' +
li.title +
(li.zipcode ? ' (' + li.zipcode + ')' : ''))),
lat: /** @type {?} */ (li.latitude),
lng: /** @type {?} */ (li.longitude)
});
});
});
}
}
AddressService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
AddressService.ctorParameters = () => [
{ type: HttpClient, },
{ type: DomSanitizer, },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
const /** @type {?} */ AddressInputComponentValueAccessor = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => AddressInputComponent),
multi: true
};
class AddressInputComponent {
/**
* @param {?} addressService
* @param {?} cdRef
* @param {?} elementRef
* @param {?} renderer
*/
constructor(addressService, cdRef, elementRef, renderer) {
this.addressService = addressService;
this.cdRef = cdRef;
this.elementRef = elementRef;
this.renderer = renderer;
this.focused = true;
this.disabled = false;
this.onChange = _ => { };
this.onTouched = () => { };
this.addressSearchList = [];
this.loading = false;
this.subscriptions = [];
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value && typeof value === 'object') {
this.value = value;
setTimeout(() => this.renderer.setProperty(this.input, 'value', value.address));
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
if (this.disabled)
this.address.disable();
else
this.address.enable();
}
/**
* @return {?}
*/
createFormControls() {
this.address = new FormControl('');
}
/**
* @return {?}
*/
createForm() {
this.form = new FormGroup({
address: this.address
});
}
/**
* @return {?}
*/
ngOnInit() {
this.input = this.elementRef.nativeElement.querySelector('input');
this.createFormControls();
this.createForm();
this.subscriptions.push(this.address.valueChanges.subscribe(v => this.onChange('')));
this.subscriptions.push(this.address.valueChanges.subscribe(v => {
if (v && v.length >= 2) {
this.loading = true;
this.cdRef.detectChanges();
}
else {
this.loading = false;
this.cdRef.detectChanges();
}
}));
this.subscriptions.push(this.address.valueChanges
.pipe(debounceTime(1000), distinctUntilChanged())
.subscribe(v => {
if (v && v.length >= 2) {
this.addressService
.search(v)
.then((list) => {
this.addressSearchList = list;
this.loading = false;
this.cdRef.detectChanges();
})
.catch(() => {
this.loading = false;
this.cdRef.detectChanges();
});
}
}));
}
/**
* @return {?}
*/
ngOnDestroy() {
this.subscriptions.forEach(sub => sub.unsubscribe());
}
/**
* @param {?} $event
* @return {?}
*/
focus($event) {
this.renderer.addClass(this.elementRef.nativeElement, 'focus');
setTimeout(() => {
this.focused = true;
this.cdRef.detectChanges();
}, 100);
}
/**
* @param {?} $event
* @return {?}
*/
blur($event) {
this.renderer.removeClass(this.elementRef.nativeElement, 'focus');
setTimeout(() => {
this.focused = false;
this.cdRef.detectChanges();
}, 100);
}
/**
* @param {?} li
* @return {?}
*/
select(li) {
this.value = li;
this.renderer.setProperty(this.input, 'value', li.address);
this.onChange(this.value);
}
}
AddressInputComponent.decorators = [
{ type: Component, args: [{
selector: 'address-input',
template: `<form class="d-flex align-items-center"
[formGroup]="form">
<input type="text"
formControlName="address"
placeholder="건물명, 지번 검색"
class="w-100"
(focus)="focus($event)"
(blur)="blur($event)"
/>
<span *ngIf="loading" class="w-0 px-3">
<i class="fa fa-spinner fa-pulse fa-fw"></i>
<span class="sr-only">Loading...</span>
</span>
<div class="dropdown-menu show" [ngClass]="{'show':focused && addressSearchList.length !== 0}">
<a *ngFor="let li of addressSearchList" class="dropdown-item" (click)="select(li)" >
{{li.address}}
</a>
</div>
</form>
<!-- { "postcode5": "30100", "postcode6": "339011", "ko_common": "세종특별자치시", "ko_doro": "달빛로 174", "ko_jibeon": "아름동 1275", "en_common": "Sejong", "en_doro": "174, Dalbit-ro", "en_jibeon": "1275, Areum-dong", "building_id": "3611011300102730002000001", "building_name": "", "building_nums": "", "other_addresses": "아름초등학교", "road_id": "361103258103", "internal_id": "4739529" } -->
`,
styles: [`input{border:none;padding:.375em .75em;display:block;width:100%;line-height:1.5;color:#495057;text-align:inherit;background-color:transparent}input:focus{outline:0;box-shadow:none}input:disabled,textarea:disabled{color:#545454;cursor:default;background-color:#e9ecef;opacity:1}`],
providers: [AddressInputComponentValueAccessor],
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
AddressInputComponent.ctorParameters = () => [
{ type: AddressService, },
{ type: ChangeDetectorRef, },
{ type: ElementRef, },
{ type: Renderer2, },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class AddressInputModule {
}
AddressInputModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule,
HttpClientModule,
HttpClientJsonpModule,
FormsModule,
ReactiveFormsModule
],
providers: [
AddressService,
{ provide: COMPOSITION_BUFFER_MODE, useValue: false }
],
declarations: [AddressInputComponent],
exports: [AddressInputComponent]
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
export { AddressInputModule, AddressService, AddressInputComponent as ɵb, AddressInputComponentValueAccessor as ɵa };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLWNvbXBvbmVudHMtYWRkcmVzcy1pbnB1dC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9jb21wb25lbnRzL2FkZHJlc3MtaW5wdXQvc3JjL2FkZHJlc3Muc2VydmljZS50cyIsIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9jb21wb25lbnRzL2FkZHJlc3MtaW5wdXQvc3JjL2FkZHJlc3MtaW5wdXQuY29tcG9uZW50LnRzIiwibmc6Ly9Ac2Nob29sYmVsbGUvY29tbW9uL2NvbXBvbmVudHMvYWRkcmVzcy1pbnB1dC9zcmMvYWRkcmVzcy1pbnB1dC5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0luZm8ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGxhdDogbnVtYmVyO1xuICBsbmc6IG51bWJlcjtcbn1cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZGRyZXNzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50LCBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG4gIHB1YmxpYyBzZWFyY2gocTogc3RyaW5nKTogUHJvbWlzZTxBZGRyZXNzSW5mb1tdPiB7XG4gICAgLy8gY29uc3QgaG9zdCA9ICdzY2hvb2xiZWxsZS5sb2NhbCc7XG4gICAgLy8gY29uc3QgdXJsID0gIGBodHRwczovL2FwaS5wb2VzaXMua3IvcG9zdC9zZWFyY2gucGhwP3E9JHtxfSZ2PTMuMC4wLXNjaG9vbGJlbGxlJnJlZj0ke2hvc3R9YDtcblxuICAgIGNvbnN0IGFwaUtleSA9ICc5MDZiNmRmMTZiMWY4YjBkMDJlNGJiYjRlYzc1Y2EwMic7XG4gICAgY29uc3QgdXJsID0gYCR7XG4gICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2xcbiAgICB9Ly9hcGlzLmRhdW0ubmV0L2xvY2FsL3YxL3NlYXJjaC9rZXl3b3JkLmpzb24/Y2FsbGJhY2s9SlNPTl9DQUxMQkFDSyZhcGlrZXk9JHthcGlLZXl9JnF1ZXJ5PSR7cX1gO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmpzb25wKHVybCwgJ2NhbGxiYWNrJylcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gKDxBcnJheTxhbnk+PmRhdGEuY2hhbm5lbC5pdGVtKS5tYXAobGkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiAobGkuYWRkcmVzcyArXG4gICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgIGxpLnRpdGxlICtcbiAgICAgICAgICAgICAgKGxpLnppcGNvZGUgPyAnICgnICsgbGkuemlwY29kZSArICcpJyA6ICcnKSkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgbGF0OiBsaS5sYXRpdHVkZSBhcyBudW1iZXIsXG4gICAgICAgICAgICBsbmc6IGxpLmxvbmdpdHVkZSBhcyBudW1iZXJcbiAgICAgICAgICB9IGFzIEFkZHJlc3NJbmZvO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgZm9yd2FyZFJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UsIEFkZHJlc3NJbmZvIH0gZnJvbSAnLi9hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBBZGRyZXNzSW5wdXRDb21wb25lbnRWYWx1ZUFjY2Vzc29yOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZGRyZXNzSW5wdXRDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWRkcmVzcy1pbnB1dCcsXG4gIHRlbXBsYXRlOiBgPGZvcm0gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgXG5bZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgICAgICAgICBcbiAgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiXG4gIHBsYWNlaG9sZGVyPVwiw6rCscK0w6vCrMK8w6vCqsKFLCDDrMKnwoDDq8Kywoggw6rCssKAw6zCg8KJXCJcbiAgY2xhc3M9XCJ3LTEwMFwiXG4gIChmb2N1cyk9XCJmb2N1cygkZXZlbnQpXCIgICAgICAgIFxuICAoYmx1cik9XCJibHVyKCRldmVudClcIiAgICAgICAgXG4gIC8+XG4gIDxzcGFuICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwidy0wIHB4LTNcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1wdWxzZSBmYS1md1wiPjwvaT5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmcuLi48L3NwYW4+XG4gIDwvc3Bhbj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgc2hvd1wiIFtuZ0NsYXNzXT1cInsnc2hvdyc6Zm9jdXNlZCAmJiBhZGRyZXNzU2VhcmNoTGlzdC5sZW5ndGggIT09IDB9XCI+XG4gICAgPGEgKm5nRm9yPVwibGV0IGxpIG9mIGFkZHJlc3NTZWFyY2hMaXN0XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdChsaSlcIiA+XG4gICAgICB7e2xpLmFkZHJlc3N9fVxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjwhLS0geyBcInBvc3Rjb2RlNVwiOiBcIjMwMTAwXCIsIFwicG9zdGNvZGU2XCI6IFwiMzM5MDExXCIsIFwia29fY29tbW9uXCI6IFwiw6zChMK4w6zCosKFw63CisK5w6vCs8KEw6zCnsKQw6zCucKYw6zCi8KcXCIsIFwia29fZG9yb1wiOiBcIsOrwovCrMOrwrnCm8OrwqHCnCAxNzRcIiwgXCJrb19qaWJlb25cIjogXCLDrMKVwoTDq8KmwoTDq8KPwpkgMTI3NVwiLCBcImVuX2NvbW1vblwiOiBcIlNlam9uZ1wiLCBcImVuX2Rvcm9cIjogXCIxNzQsIERhbGJpdC1yb1wiLCBcImVuX2ppYmVvblwiOiBcIjEyNzUsIEFyZXVtLWRvbmdcIiwgXCJidWlsZGluZ19pZFwiOiBcIjM2MTEwMTEzMDAxMDI3MzAwMDIwMDAwMDFcIiwgXCJidWlsZGluZ19uYW1lXCI6IFwiXCIsIFwiYnVpbGRpbmdfbnVtc1wiOiBcIlwiLCBcIm90aGVyX2FkZHJlc3Nlc1wiOiBcIsOswpXChMOrwqbChMOswrTCiMOrwpPCscOtwpXCmcOqwrXCkFwiLCBcInJvYWRfaWRcIjogXCIzNjExMDMyNTgxMDNcIiwgXCJpbnRlcm5hbF9pZFwiOiBcIjQ3Mzk1MjlcIiB9ICAgICAgIC0tPlxuYCxcbiAgc3R5bGVzOiBbYGlucHV0e2JvcmRlcjpub25lO3BhZGRpbmc6LjM3NWVtIC43NWVtO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDoxLjU7Y29sb3I6IzQ5NTA1Nzt0ZXh0LWFsaWduOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1pbnB1dDpmb2N1c3tvdXRsaW5lOjA7Ym94LXNoYWRvdzpub25lfWlucHV0OmRpc2FibGVkLHRleHRhcmVhOmRpc2FibGVke2NvbG9yOiM1NDU0NTQ7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZTllY2VmO29wYWNpdHk6MX1gXSxcbiAgcHJvdmlkZXJzOiBbQWRkcmVzc0lucHV0Q29tcG9uZW50VmFsdWVBY2Nlc3Nvcl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFkZHJlc3NJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmFsdWU6IEFkZHJlc3NJbmZvO1xuICB3cml0ZVZhbHVlKHZhbHVlOiBBZGRyZXNzSW5mbykge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5pbnB1dCwgJ3ZhbHVlJywgdmFsdWUuYWRkcmVzcylcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIG9uQ2hhbmdlID0gXyA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB0aGlzLmFkZHJlc3MuZGlzYWJsZSgpO1xuICAgIGVsc2UgdGhpcy5hZGRyZXNzLmVuYWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFkZHJlc3NTZXJ2aWNlOiBBZGRyZXNzU2VydmljZSxcbiAgICBwdWJsaWMgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge31cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBhZGRyZXNzOiBGb3JtQ29udHJvbDtcbiAgYWRkcmVzc1NlYXJjaExpc3Q6IGFueVtdID0gW107XG4gIGNyZWF0ZUZvcm1Db250cm9scygpIHtcbiAgICB0aGlzLmFkZHJlc3MgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICB9XG4gIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3NcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHMoKTtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYWRkcmVzcy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gdGhpcy5vbkNoYW5nZSgnJykpXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYWRkcmVzcy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICBpZiAodiAmJiB2Lmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5hZGRyZXNzLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgaWYgKHYgJiYgdi5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzU2VydmljZVxuICAgICAgICAgICAgICAuc2VhcmNoKHYpXG4gICAgICAgICAgICAgIC50aGVuKChsaXN0OiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkcmVzc1NlYXJjaExpc3QgPSBsaXN0O1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG4gIGZvY3VzKCRldmVudCkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgYmx1cigkZXZlbnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHNlbGVjdChsaTogQWRkcmVzc0luZm8pIHtcbiAgICB0aGlzLnZhbHVlID0gbGk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0LCAndmFsdWUnLCBsaS5hZGRyZXNzKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUsIEh0dHBDbGllbnRKc29ucE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBDT01QT1NJVElPTl9CVUZGRVJfTU9ERVxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFkZHJlc3NJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vYWRkcmVzcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuL2FkZHJlc3Muc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBIdHRwQ2xpZW50SnNvbnBNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBZGRyZXNzU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IENPTVBPU0lUSU9OX0JVRkZFUl9NT0RFLCB1c2VWYWx1ZTogZmFsc2UgfVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtBZGRyZXNzSW5wdXRDb21wb25lbnRdLFxuICBleHBvcnRzOiBbQWRkcmVzc0lucHV0Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBBZGRyZXNzSW5wdXRNb2R1bGUge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOzs7OztJQVlFLFlBQW1CLElBQWdCLEVBQVMsU0FBdUI7UUFBaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQWM7S0FBSTs7Ozs7SUFDaEUsTUFBTSxDQUFDLENBQVM7OztRQUlyQix1QkFBTSxNQUFNLEdBQUcsa0NBQWtDLENBQUM7UUFDbEQsdUJBQU0sR0FBRyxHQUFHLEdBQ1YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUNsQiw4RUFBOEUsTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBRWxHLE9BQU8sSUFBSSxDQUFDLElBQUk7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