@elderbyte/ngx-starter 16.4.3 → 16.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@ import { Directive, Host, Input } from "@angular/core";
2
2
  import { LoggerFactory } from "@elderbyte/ts-logger";
3
3
  import { debounceTime, delay, first, map, takeUntil } from 'rxjs/operators';
4
4
  import { PropertyPathUtil } from "../../../common/utils/property-path-util";
5
- import { BehaviorSubject, concat, of, skipUntil, Subject } from 'rxjs';
5
+ import { concat, of, skipUntil, Subject } from 'rxjs';
6
6
  import { SearchInputState } from "./domain/input/search-input-state";
7
7
  import { Objects } from "../../../common/objects";
8
8
  import { CollectionUtil } from "../../../common/utils/collection-util";
@@ -22,10 +22,12 @@ export class ElderSearchInputDirective {
22
22
  constructor(searchContext, ngModel) {
23
23
  this.searchContext = searchContext;
24
24
  this.ngModel = ngModel;
25
- this._state = new BehaviorSubject(SearchInputState.unknown());
26
25
  this.destroy$ = new Subject();
27
26
  this.log = LoggerFactory.getLogger(this.constructor.name);
28
27
  this.initialValueDirective = new ElderInitialValueDirective(ngModel);
28
+ this._state$ = this.buildInputStateObservable().pipe(
29
+ // tap(state => this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state))
30
+ );
29
31
  }
30
32
  /***************************************************************************
31
33
  * *
@@ -39,11 +41,6 @@ export class ElderSearchInputDirective {
39
41
  ngAfterViewInit() {
40
42
  this._extractedName = this.extractName();
41
43
  this.log.debug(this._extractedName + "|" + this.queryKey + "|" + this.resolvePath);
42
- this.stateObservable()
43
- .subscribe(state => {
44
- // this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state)
45
- this.emitState(state);
46
- });
47
44
  }
48
45
  ngOnDestroy() {
49
46
  this.destroy$.next();
@@ -55,10 +52,7 @@ export class ElderSearchInputDirective {
55
52
  * *
56
53
  **************************************************************************/
57
54
  get state$() {
58
- return this._state.asObservable();
59
- }
60
- get stateSnapshot() {
61
- return this._state.getValue();
55
+ return this._state$;
62
56
  }
63
57
  get name() {
64
58
  if (this.queryKey) {
@@ -84,9 +78,9 @@ export class ElderSearchInputDirective {
84
78
  * Public API *
85
79
  * *
86
80
  **************************************************************************/
87
- applyInitialValue(queryString) {
81
+ setValue(queryString) {
88
82
  const value = this.convertQueryStringToRawModelValue(queryString);
89
- this.initialValueDirective.applyInitialValue(value);
83
+ this.initialValueDirective.setValue(value);
90
84
  }
91
85
  reset() {
92
86
  this.ngModel.reset();
@@ -100,10 +94,13 @@ export class ElderSearchInputDirective {
100
94
  return this.ngModel.control.valueChanges
101
95
  .pipe(takeUntil(this.destroy$));
102
96
  }
103
- stateObservable() {
97
+ buildInputStateObservable() {
104
98
  const viewStabilized$ = of('stabilized$').pipe(delay(20), first());
105
99
  const inputStateChanges$ = this.valueChanges$.pipe(takeUntil(this.destroy$), map(value => this.buildInputState(value, true)), skipUntil(viewStabilized$), debounceTime(20));
106
- const startWithAsync$ = of('start').pipe(map(start => this.buildInputState(this.ngModel.control.value, false)));
100
+ const startWithAsync$ = of('start').pipe(map(start => {
101
+ const state = this.buildInputState(this.ngModel.control.value, false);
102
+ return state;
103
+ }));
107
104
  return concat(startWithAsync$, inputStateChanges$);
108
105
  }
109
106
  buildInputState(controlValue, userEvent) {
@@ -135,9 +132,6 @@ export class ElderSearchInputDirective {
135
132
  }
136
133
  return queryValue;
137
134
  }
138
- emitState(state) {
139
- this._state.next(state);
140
- }
141
135
  checkAndConvertFaultyValuesToNull(value) {
142
136
  let fixedValue = value;
143
137
  fixedValue = this.convertEmptyArrayToNull(fixedValue);
@@ -237,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
237
231
  type: Input,
238
232
  args: ["valueAsId"]
239
233
  }] } });
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc2VhcmNoL2VsZGVyLXNlYXJjaC1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQWEsU0FBUyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUd2RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7OztBQUd6Rjs7R0FFRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUE4Q3BDOzs7O2dGQUk0RTtJQUU1RSxZQUNVLGFBQTBDLEVBQ2xDLE9BQWdCO1FBRHhCLGtCQUFhLEdBQWIsYUFBYSxDQUE2QjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBYmpCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBbUIsZ0JBQWdCLENBQUMsT0FB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QUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tIFwiQGVsZGVyYnl0ZS90cy1sb2dnZXJcIjtcbmltcG9ydCB7IEVsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZSB9IGZyb20gXCIuL2VsZGVyLXNlYXJjaC1jb250ZXh0LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzL2ludGVybmFsL09ic2VydmFibGVcIjtcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSBcIi4vZG9tYWluL2lucHV0L3NlYXJjaC1pbnB1dFwiO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRlbGF5LCBmaXJzdCwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9wZXJ0eVBhdGhVdGlsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi91dGlscy9wcm9wZXJ0eS1wYXRoLXV0aWxcIjtcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb25jYXQsIG9mLCBza2lwVW50aWwsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXRTdGF0ZSB9IGZyb20gXCIuL2RvbWFpbi9pbnB1dC9zZWFyY2gtaW5wdXQtc3RhdGVcIjtcbmltcG9ydCB7IE9iamVjdHMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL29iamVjdHNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25VdGlsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi91dGlscy9jb2xsZWN0aW9uLXV0aWxcIjtcbmltcG9ydCB7IExvY2FsUGFnZWREYXRhU291cmNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGFzb3VyY2UvbG9jYWwvbG9jYWwtcGFnZWQtZGF0YS1zb3VyY2VcIjtcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IEVsZGVySW5pdGlhbFZhbHVlRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvZWxkZXItaW5pdGlhbC12YWx1ZS5kaXJlY3RpdmVcIjtcbmltcG9ydCB7U2VhcmNoQ29udGV4dH0gZnJvbSAnLi9kb21haW4vY29udGV4dC9zZWFyY2gtY29udGV4dCc7XG5cbi8qKlxuICogU2VhcmNoIG5hbWUgYWRhcHRlciBmb3IgaW5wdXQgY29udHJvbHMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZWxkZXJTZWFyY2hJbnB1dF1cIixcbiAgZXhwb3J0QXM6IFwiZWxkZXJTZWFyY2hJbnB1dFwiXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VhcmNoSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBTZWFyY2hJbnB1dCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFZhbHVlRGlyZWN0aXZlOiBFbGRlckluaXRpYWxWYWx1ZURpcmVjdGl2ZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBVc3VhbGx5IHRoZSBjb250cm9sIG5hbWUgaXMgdXNlZCwgdGhpcyBhbGxvd3MgYSBjdXN0b20gcXVlcnkga2V5XG4gICAqL1xuICBASW5wdXQoXCJlbGRlclNlYXJjaElucHV0S2V5XCIpXG4gIHB1YmxpYyBxdWVyeUtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIEZ1bmN0aW9uIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHZhbHVlIG9iamVjdCB0byBhIHF1ZXJ5IHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoXCJlbGRlclNlYXJjaElucHV0VHJhbnNmb3JtXCIpXG4gIHB1YmxpYyB2YWx1ZVRyYW5zZm9ybTogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwsIERlZmF1bHQpIFBhdGggb24gdGhlIHZhbHVlIG9iamVjdCB0byB1c2UgYXMgcXVlcnkgcGFyYW0gdmFsdWVcbiAgICogIHZhbHVlID0gXCJ0eXBlLmlkXCJcbiAgICovXG4gIEBJbnB1dChcImVsZGVyU2VhcmNoSW5wdXRcIilcbiAgcHVibGljIHJlc29sdmVQYXRoOiBzdHJpbmc7XG5cbiAgQElucHV0KFwiZGF0YVNvdXJjZVwiKVxuICBwdWJsaWMgZGF0YVNvdXJjZTogTG9jYWxQYWdlZERhdGFTb3VyY2U8YW55PjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBVc2UgdGhpcyB2YWx1ZSBmb3IgdGhlIHF1ZXJ5IGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAqL1xuICBASW5wdXQoXCJlbGRlclNlYXJjaElucHV0RmFsbGJhY2tcIilcbiAgcHVibGljIGZhbGxiYWNrVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIEBJbnB1dChcInZhbHVlQXNJZFwiKVxuICBwdWJsaWMgdmFsdWVBc0lkOiBCb29sZWFuSW5wdXQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaElucHV0U3RhdGU+KFNlYXJjaElucHV0U3RhdGUudW5rbm93bigpKTtcbiAgcHJpdmF0ZSBfZXh0cmFjdGVkTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlYXJjaENvbnRleHQ6IEVsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZSxcbiAgICBASG9zdCgpIHByaXZhdGUgbmdNb2RlbDogTmdNb2RlbFxuICApIHtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZURpcmVjdGl2ZSA9IG5ldyBFbGRlckluaXRpYWxWYWx1ZURpcmVjdGl2ZShuZ01vZGVsKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9leHRyYWN0ZWROYW1lID0gdGhpcy5leHRyYWN0TmFtZSgpO1xuICAgIHRoaXMuc2VhcmNoQ29udGV4dC5yZWdpc3Rlcih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZXh0cmFjdGVkTmFtZSA9IHRoaXMuZXh0cmFjdE5hbWUoKTtcbiAgICB0aGlzLmxvZy5kZWJ1Zyh0aGlzLl9leHRyYWN0ZWROYW1lICsgXCJ8XCIgKyB0aGlzLnF1ZXJ5S2V5ICsgXCJ8XCIgKyB0aGlzLnJlc29sdmVQYXRoKTtcblxuICAgIHRoaXMuc3RhdGVPYnNlcnZhYmxlKClcbiAgICAgIC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgLy8gdGhpcy5sb2cuZXJyb3IoJ0VNSVQgU0VBUkNIIElOUFVUIFNUQVRFIFsnICsgc3RhdGUucXVlcnlLZXkgKyAnXTogJyArIHN0YXRlLnF1ZXJ5VmFsdWUgKyAoc3RhdGUucHJpc3RpbmUgPyAnKHByaXN0aW5lKScgOiAnJyksIHN0YXRlKVxuICAgICAgdGhpcy5lbWl0U3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUkKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVTbmFwc2hvdCgpOiBTZWFyY2hJbnB1dFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnF1ZXJ5S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeUtleTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2V4dHJhY3RlZE5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leHRyYWN0ZWROYW1lO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHNlYXJjaCBuYW1lIGtleSBuYW1lLlwiICtcbiAgICAgIFwiIEVpdGhlciBzcGVjaWZ5IHRoZSBuYW1lIHByb3BlcnR5IG9yIGV4cGxpY2l0bHkgc2V0IFtlbGRlclNlYXJjaElucHV0S2V5XS5cIik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzRmFsbGJhY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNlYXJjaElucHV0U3RhdGUuaXNWYWx1ZURlZmluZWQodGhpcy5mYWxsYmFja1ZhbHVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBhcHBseUluaXRpYWxWYWx1ZShxdWVyeVN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnZlcnRRdWVyeVN0cmluZ1RvUmF3TW9kZWxWYWx1ZShxdWVyeVN0cmluZyk7XG4gICAgdGhpcy5pbml0aWFsVmFsdWVEaXJlY3RpdmUuYXBwbHlJbml0aWFsVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubmdNb2RlbC5yZXNldCgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBnZXQgdmFsdWVDaGFuZ2VzJCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsLmNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0ZU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFN0YXRlPiB7XG5cbiAgICBjb25zdCB2aWV3U3RhYmlsaXplZCQgPSBvZignc3RhYmlsaXplZCQnKS5waXBlKFxuICAgICAgZGVsYXkoMjApLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dFN0YXRlQ2hhbmdlcyQgPSB0aGlzLnZhbHVlQ2hhbmdlcyQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmJ1aWxkSW5wdXRTdGF0ZSh2YWx1ZSwgdHJ1ZSkpLFxuICAgICAgc2tpcFVudGlsKHZpZXdTdGFiaWxpemVkJCksXG4gICAgICBkZWJvdW5jZVRpbWUoMjApLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFydFdpdGhBc3luYyQgPSBvZignc3RhcnQnKS5waXBlKFxuICAgICAgbWFwKHN0YXJ0ID0+IHRoaXMuYnVpbGRJbnB1dFN0YXRlKHRoaXMubmdNb2RlbC5jb250cm9sLnZhbHVlLCBmYWxzZSkpXG4gICAgKTtcblxuICAgIHJldHVybiBjb25jYXQoc3RhcnRXaXRoQXN5bmMkLCBpbnB1dFN0YXRlQ2hhbmdlcyQpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZElucHV0U3RhdGUoY29udHJvbFZhbHVlOiBhbnksIHVzZXJFdmVudDogYm9vbGVhbik6IFNlYXJjaElucHV0U3RhdGUge1xuICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSB0aGlzLmNvbnZlcnRSYXdNb2RlbFZhbHVlVG9RdWVyeVN0cmluZyhjb250cm9sVmFsdWUpO1xuICAgIGNvbnN0IHByaXN0aW5lID0gIXRoaXMuaXNBdHRyaWJ1dGVWYWx1ZVByZXNlbnQoY29udHJvbFZhbHVlKTtcbiAgICByZXR1cm4gbmV3IFNlYXJjaElucHV0U3RhdGUoXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICBxdWVyeVZhbHVlLFxuICAgICAgdGhpcy5xdWVyeUtleSB8fCB0aGlzLm5hbWUsXG4gICAgICBwcmlzdGluZSxcbiAgICAgIHVzZXJFdmVudFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRRdWVyeVN0cmluZ1RvUmF3TW9kZWxWYWx1ZShxdWVyeVN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsKSB7XG4gICAgaWYgKE9iamVjdHMubm9uTnVsbChxdWVyeVN0cmluZykpIHtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmF3TW9kZWxWYWx1ZVRvUXVlcnlTdHJpbmcobW9kZWw6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB7XG5cbiAgICBsZXQgcXVlcnlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnZhbHVlQXNJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHF1ZXJ5VmFsdWUgPSB0aGlzLmNoZWNrQW5kQ29udmVydEZhdWx0eVZhbHVlc1RvTnVsbChtb2RlbCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQXR0cmlidXRlVmFsdWVQcmVzZW50KG1vZGVsKSkge1xuICAgICAgLy8gQXR0cmlidXRlIHZhbHVlIGlzIHByZXNlbnRcbiAgICAgIHF1ZXJ5VmFsdWUgPSB0aGlzLnJlc29sdmVWYWx1ZShtb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmhhc0ZhbGxiYWNrKSB7XG4gICAgICAgIHF1ZXJ5VmFsdWUgPSB0aGlzLmZhbGxiYWNrVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZW1pdFN0YXRlKHN0YXRlOiBTZWFyY2hJbnB1dFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUubmV4dChzdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kQ29udmVydEZhdWx0eVZhbHVlc1RvTnVsbCh2YWx1ZTogYW55KSB7XG4gICAgbGV0IGZpeGVkVmFsdWUgPSB2YWx1ZTtcbiAgICBmaXhlZFZhbHVlID0gdGhpcy5jb252ZXJ0RW1wdHlBcnJheVRvTnVsbChmaXhlZFZhbHVlKTtcbiAgICBmaXhlZFZhbHVlID0gdGhpcy5jb252ZXJ0RW1wdHlTdHJpbmdUb051bGwoZml4ZWRWYWx1ZSk7XG5cbiAgICByZXR1cm4gZml4ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEVtcHR5QXJyYXlUb051bGwodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEVtcHR5U3RyaW5nVG9OdWxsKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBdHRyaWJ1dGVWYWx1ZVByZXNlbnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTZWFyY2hJbnB1dFN0YXRlLmlzVmFsdWVEZWZpbmVkKHZhbHVlKVxuICAgICAgJiYgKHZhbHVlICsgXCJcIikubGVuZ3RoICE9PSAwO1xuICB9XG5cblxuICBwcml2YXRlIHJlc29sdmVWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0cy5ub25OdWxsKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcblxuICAgICAgICBjb25zdCByZXNvbHZlZFZhbHVlcyA9IHZhbHVlXG4gICAgICAgICAgLm1hcCh2ID0+IHRoaXMucmVzb2x2ZVNpbmdsZVZhbHVlKHYpKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiBPYmplY3RzLm5vbk51bGwodikpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmNhdElmTmVjZXNzYXJ5KHJlc29sdmVkVmFsdWVzKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNpbmdsZVZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2luZ2xlVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgdmFsdWUgPSBQcm9wZXJ0eVBhdGhVdGlsLnJlc29sdmVWYWx1ZSh2YWx1ZSwgdGhpcy5yZXNvbHZlUGF0aCk7XG4gICAgdmFsdWUgPSB0aGlzLnZhbHVlVHJhbnNmb3JtID8gdGhpcy52YWx1ZVRyYW5zZm9ybSh2YWx1ZSkgOiB2YWx1ZTtcblxuXG4gICAgaWYgKE9iamVjdHMubm9uTnVsbCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgIC5maWx0ZXIoaSA9PiBPYmplY3RzLm5vbk51bGwoaSkpXG4gICAgICAgICAgLm1hcChpID0+IGkudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGNvbmNhdElmTmVjZXNzYXJ5KHZhbHVlczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogYW55W10ge1xuICAgIGNvbnN0IGFycmF5cyA9IHZhbHVlcy5tYXAodiA9PiB7XG4gICAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt2XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29sbGVjdGlvblV0aWwuZmxhdHRlbihhcnJheXMpO1xuICB9XG5cbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc2VhcmNoL2VsZGVyLXNlYXJjaC1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQWEsU0FBUyxFQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBa0IsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7QUFHekY7O0dBRUc7QUFLSCxNQUFNLE9BQU8seUJBQXlCO0lBOENwQzs7OztnRkFJNEU7SUFFNUUsWUFDVSxhQUEwQyxFQUNsQyxPQUFnQjtRQUR4QixrQkFBYSxHQUFiLGFBQWEsQ0FBNkI7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQVhqQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQixRQUFHLEdBQUcsYUFB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QUFDO0lBRU8sV0FBVztRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUE2QjtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtnQkFDdEIsT0FBTyxDQUFDLENBQUM7YUFDVjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBNVJVLHlCQUF5QjttR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzswQkF1REksSUFBSTs0Q0F4Q0EsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLHFCQUFxQjtnQkFPckIsY0FBYztzQkFEcEIsS0FBSzt1QkFBQywyQkFBMkI7Z0JBUTNCLFdBQVc7c0JBRGpCLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUlsQixVQUFVO3NCQURoQixLQUFLO3VCQUFDLFlBQVk7Z0JBT1osYUFBYTtzQkFEbkIsS0FBSzt1QkFBQywwQkFBMEI7Z0JBSTFCLFNBQVM7c0JBRGYsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBIb3N0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gXCJAZWxkZXJieXRlL3RzLWxvZ2dlclwiO1xuaW1wb3J0IHsgRWxkZXJTZWFyY2hDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSBcIi4vZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXQgfSBmcm9tIFwiLi9kb21haW4vaW5wdXQvc2VhcmNoLWlucHV0XCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGVsYXksIGZpcnN0LCBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJvcGVydHlQYXRoVXRpbCB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vdXRpbHMvcHJvcGVydHktcGF0aC11dGlsXCI7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29uY2F0LCBvZiwgc2tpcFVudGlsLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlYXJjaElucHV0U3RhdGUgfSBmcm9tIFwiLi9kb21haW4vaW5wdXQvc2VhcmNoLWlucHV0LXN0YXRlXCI7XG5pbXBvcnQgeyBPYmplY3RzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9vYmplY3RzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uVXRpbCB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vdXRpbHMvY29sbGVjdGlvbi11dGlsXCI7XG5pbXBvcnQgeyBMb2NhbFBhZ2VkRGF0YVNvdXJjZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhc291cmNlL2xvY2FsL2xvY2FsLXBhZ2VkLWRhdGEtc291cmNlXCI7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBFbGRlckluaXRpYWxWYWx1ZURpcmVjdGl2ZSB9IGZyb20gXCIuLi9kaXJlY3RpdmVzL2VsZGVyLWluaXRpYWwtdmFsdWUuZGlyZWN0aXZlXCI7XG5pbXBvcnQge1NlYXJjaENvbnRleHR9IGZyb20gJy4vZG9tYWluL2NvbnRleHQvc2VhcmNoLWNvbnRleHQnO1xuXG4vKipcbiAqIFNlYXJjaCBuYW1lIGFkYXB0ZXIgZm9yIGlucHV0IGNvbnRyb2xzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2VsZGVyU2VhcmNoSW5wdXRdXCIsXG4gIGV4cG9ydEFzOiBcImVsZGVyU2VhcmNoSW5wdXRcIlxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlYXJjaElucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgU2VhcmNoSW5wdXQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxWYWx1ZURpcmVjdGl2ZTogRWxkZXJJbml0aWFsVmFsdWVEaXJlY3RpdmU7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVXN1YWxseSB0aGUgY29udHJvbCBuYW1lIGlzIHVzZWQsIHRoaXMgYWxsb3dzIGEgY3VzdG9tIHF1ZXJ5IGtleVxuICAgKi9cbiAgQElucHV0KFwiZWxkZXJTZWFyY2hJbnB1dEtleVwiKVxuICBwdWJsaWMgcXVlcnlLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSB2YWx1ZSBvYmplY3QgdG8gYSBxdWVyeSBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KFwiZWxkZXJTZWFyY2hJbnB1dFRyYW5zZm9ybVwiKVxuICBwdWJsaWMgdmFsdWVUcmFuc2Zvcm06ICgodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsKTtcblxuICAvKipcbiAgICogKE9wdGlvbmFsLCBEZWZhdWx0KSBQYXRoIG9uIHRoZSB2YWx1ZSBvYmplY3QgdG8gdXNlIGFzIHF1ZXJ5IHBhcmFtIHZhbHVlXG4gICAqICB2YWx1ZSA9IFwidHlwZS5pZFwiXG4gICAqL1xuICBASW5wdXQoXCJlbGRlclNlYXJjaElucHV0XCIpXG4gIHB1YmxpYyByZXNvbHZlUGF0aDogc3RyaW5nO1xuXG4gIEBJbnB1dChcImRhdGFTb3VyY2VcIilcbiAgcHVibGljIGRhdGFTb3VyY2U6IExvY2FsUGFnZWREYXRhU291cmNlPGFueT47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVXNlIHRoaXMgdmFsdWUgZm9yIHRoZSBxdWVyeSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgQElucHV0KFwiZWxkZXJTZWFyY2hJbnB1dEZhbGxiYWNrXCIpXG4gIHB1YmxpYyBmYWxsYmFja1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICBASW5wdXQoXCJ2YWx1ZUFzSWRcIilcbiAgcHVibGljIHZhbHVlQXNJZDogQm9vbGVhbklucHV0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlJDogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFN0YXRlPjtcbiAgcHJpdmF0ZSBfZXh0cmFjdGVkTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlYXJjaENvbnRleHQ6IEVsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZSxcbiAgICBASG9zdCgpIHByaXZhdGUgbmdNb2RlbDogTmdNb2RlbFxuICApIHtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZURpcmVjdGl2ZSA9IG5ldyBFbGRlckluaXRpYWxWYWx1ZURpcmVjdGl2ZShuZ01vZGVsKTtcbiAgICB0aGlzLl9zdGF0ZSQgPSB0aGlzLmJ1aWxkSW5wdXRTdGF0ZU9ic2VydmFibGUoKS5waXBlKFxuICAgICAgLy8gdGFwKHN0YXRlID0+IHRoaXMubG9nLmVycm9yKCdFTUlUIFNFQVJDSCBJTlBVVCBTVEFURSBbJyArIHN0YXRlLnF1ZXJ5S2V5ICsgJ106ICcgKyBzdGF0ZS5xdWVyeVZhbHVlICsgKHN0YXRlLnByaXN0aW5lID8gJyhwcmlzdGluZSknIDogJycpLCBzdGF0ZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9leHRyYWN0ZWROYW1lID0gdGhpcy5leHRyYWN0TmFtZSgpO1xuICAgIHRoaXMuc2VhcmNoQ29udGV4dC5yZWdpc3Rlcih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZXh0cmFjdGVkTmFtZSA9IHRoaXMuZXh0cmFjdE5hbWUoKTtcbiAgICB0aGlzLmxvZy5kZWJ1Zyh0aGlzLl9leHRyYWN0ZWROYW1lICsgXCJ8XCIgKyB0aGlzLnF1ZXJ5S2V5ICsgXCJ8XCIgKyB0aGlzLnJlc29sdmVQYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFNlYXJjaElucHV0U3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucXVlcnlLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5S2V5O1xuICAgIH1cbiAgICBpZiAodGhpcy5fZXh0cmFjdGVkTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RlZE5hbWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGRldGVybWluZSB0aGUgc2VhcmNoIG5hbWUga2V5IG5hbWUuXCIgK1xuICAgICAgXCIgRWl0aGVyIHNwZWNpZnkgdGhlIG5hbWUgcHJvcGVydHkgb3IgZXhwbGljaXRseSBzZXQgW2VsZGVyU2VhcmNoSW5wdXRLZXldLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsLmlzRGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNGYWxsYmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU2VhcmNoSW5wdXRTdGF0ZS5pc1ZhbHVlRGVmaW5lZCh0aGlzLmZhbGxiYWNrVmFsdWUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHNldFZhbHVlKHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydFF1ZXJ5U3RyaW5nVG9SYXdNb2RlbFZhbHVlKHF1ZXJ5U3RyaW5nKTtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZURpcmVjdGl2ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5uZ01vZGVsLnJlc2V0KCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGdldCB2YWx1ZUNoYW5nZXMkKCkge1xuICAgIHJldHVybiB0aGlzLm5nTW9kZWwuY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSW5wdXRTdGF0ZU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFN0YXRlPiB7XG5cbiAgICBjb25zdCB2aWV3U3RhYmlsaXplZCQgPSBvZignc3RhYmlsaXplZCQnKS5waXBlKFxuICAgICAgZGVsYXkoMjApLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dFN0YXRlQ2hhbmdlcyQgPSB0aGlzLnZhbHVlQ2hhbmdlcyQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmJ1aWxkSW5wdXRTdGF0ZSh2YWx1ZSwgdHJ1ZSkpLFxuICAgICAgc2tpcFVudGlsKHZpZXdTdGFiaWxpemVkJCksXG4gICAgICBkZWJvdW5jZVRpbWUoMjApLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFydFdpdGhBc3luYyQgPSBvZignc3RhcnQnKS5waXBlKFxuICAgICAgbWFwKHN0YXJ0ID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmJ1aWxkSW5wdXRTdGF0ZSh0aGlzLm5nTW9kZWwuY29udHJvbC52YWx1ZSwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gY29uY2F0KHN0YXJ0V2l0aEFzeW5jJCwgaW5wdXRTdGF0ZUNoYW5nZXMkKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRJbnB1dFN0YXRlKGNvbnRyb2xWYWx1ZTogYW55LCB1c2VyRXZlbnQ6IGJvb2xlYW4pOiBTZWFyY2hJbnB1dFN0YXRlIHtcbiAgICBjb25zdCBxdWVyeVZhbHVlID0gdGhpcy5jb252ZXJ0UmF3TW9kZWxWYWx1ZVRvUXVlcnlTdHJpbmcoY29udHJvbFZhbHVlKTtcbiAgICBjb25zdCBwcmlzdGluZSA9ICF0aGlzLmlzQXR0cmlidXRlVmFsdWVQcmVzZW50KGNvbnRyb2xWYWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBTZWFyY2hJbnB1dFN0YXRlKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgcXVlcnlWYWx1ZSxcbiAgICAgIHRoaXMucXVlcnlLZXkgfHwgdGhpcy5uYW1lLFxuICAgICAgcHJpc3RpbmUsXG4gICAgICB1c2VyRXZlbnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UXVlcnlTdHJpbmdUb1Jhd01vZGVsVmFsdWUocXVlcnlTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCkge1xuICAgIGlmIChPYmplY3RzLm5vbk51bGwocXVlcnlTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFJhd01vZGVsVmFsdWVUb1F1ZXJ5U3RyaW5nKG1vZGVsOiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwge1xuXG4gICAgbGV0IHF1ZXJ5VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy52YWx1ZUFzSWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeVZhbHVlID0gdGhpcy5jaGVja0FuZENvbnZlcnRGYXVsdHlWYWx1ZXNUb051bGwobW9kZWwpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0F0dHJpYnV0ZVZhbHVlUHJlc2VudChtb2RlbCkpIHtcbiAgICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZSBpcyBwcmVzZW50XG4gICAgICBxdWVyeVZhbHVlID0gdGhpcy5yZXNvbHZlVmFsdWUobW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oYXNGYWxsYmFjaykge1xuICAgICAgICBxdWVyeVZhbHVlID0gdGhpcy5mYWxsYmFja1ZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZENvbnZlcnRGYXVsdHlWYWx1ZXNUb051bGwodmFsdWU6IGFueSkge1xuICAgIGxldCBmaXhlZFZhbHVlID0gdmFsdWU7XG4gICAgZml4ZWRWYWx1ZSA9IHRoaXMuY29udmVydEVtcHR5QXJyYXlUb051bGwoZml4ZWRWYWx1ZSk7XG4gICAgZml4ZWRWYWx1ZSA9IHRoaXMuY29udmVydEVtcHR5U3RyaW5nVG9OdWxsKGZpeGVkVmFsdWUpO1xuXG4gICAgcmV0dXJuIGZpeGVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRFbXB0eUFycmF5VG9OdWxsKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRFbXB0eVN0cmluZ1RvTnVsbCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGlzQXR0cmlidXRlVmFsdWVQcmVzZW50KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU2VhcmNoSW5wdXRTdGF0ZS5pc1ZhbHVlRGVmaW5lZCh2YWx1ZSlcbiAgICAgICYmICh2YWx1ZSArIFwiXCIpLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZXNvbHZlVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdHMubm9uTnVsbCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSB2YWx1ZVxuICAgICAgICAgIC5tYXAodiA9PiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2KSlcbiAgICAgICAgICAuZmlsdGVyKHYgPT4gT2JqZWN0cy5ub25OdWxsKHYpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25jYXRJZk5lY2Vzc2FyeShyZXNvbHZlZFZhbHVlcyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbmdsZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwge1xuICAgIHZhbHVlID0gUHJvcGVydHlQYXRoVXRpbC5yZXNvbHZlVmFsdWUodmFsdWUsIHRoaXMucmVzb2x2ZVBhdGgpO1xuICAgIHZhbHVlID0gdGhpcy52YWx1ZVRyYW5zZm9ybSA/IHRoaXMudmFsdWVUcmFuc2Zvcm0odmFsdWUpIDogdmFsdWU7XG5cblxuICAgIGlmIChPYmplY3RzLm5vbk51bGwodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAuZmlsdGVyKGkgPT4gT2JqZWN0cy5ub25OdWxsKGkpKVxuICAgICAgICAgIC5tYXAoaSA9PiBpLnRvU3RyaW5nKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC5uYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25jYXRJZk5lY2Vzc2FyeSh2YWx1ZXM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBhcnJheXMgPSB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbdl07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbGxlY3Rpb25VdGlsLmZsYXR0ZW4oYXJyYXlzKTtcbiAgfVxuXG59XG4iXX0=
@@ -5,7 +5,7 @@ import { Pipe, Injectable, LOCALE_ID, Inject, NgModule, Optional, SkipSelf, Dire
5
5
  import * as i1 from '@angular/platform-browser';
6
6
  import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId, DateTimeFormatter, convert, ZonedDateTime, Temporal } from '@js-joda/core';
7
7
  import { LoggerFactory } from '@elderbyte/ts-logger';
8
- import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, lastValueFrom, Subject, switchMap, of, combineLatest, EMPTY, merge, forkJoin, throwError, mergeWith, Observable, zip, mergeMap as mergeMap$1, fromEvent, combineLatestWith as combineLatestWith$1, skipUntil, NEVER } from 'rxjs';
8
+ import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, Subject, switchMap, of, combineLatest, EMPTY, merge, forkJoin, throwError, mergeWith, Observable, zip, mergeMap as mergeMap$1, fromEvent, combineLatestWith as combineLatestWith$1, skipUntil, NEVER } from 'rxjs';
9
9
  import { tap, takeUntil, takeWhile, map, filter, distinctUntilChanged, debounceTime, catchError, first, take, switchMap as switchMap$1, mergeMap, expand, reduce, startWith, skip, delay, share, combineLatestWith, timeout, skipWhile } from 'rxjs/operators';
10
10
  import * as i1$2 from '@angular/common/http';
11
11
  import { HttpParams, HttpEventType, HttpRequest, HttpClient, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
@@ -2704,10 +2704,9 @@ class FilterContext {
2704
2704
  }
2705
2705
  return Array.from(filterMap.values());
2706
2706
  }
2707
- static async of(filters) {
2707
+ static of(filters) {
2708
2708
  const filterContext = new FilterContext();
2709
- filterContext.updateFilters(filters);
2710
- await lastValueFrom(filterContext.filters);
2709
+ filterContext.replaceFilters(filters);
2711
2710
  return filterContext;
2712
2711
  }
2713
2712
  /***************************************************************************
@@ -25935,6 +25934,12 @@ class SearchContext {
25935
25934
  this.userFilterContext = new FilterContext();
25936
25935
  this.forcedFilterContext = new FilterContext();
25937
25936
  this.allFilters$ = new BehaviorSubject(undefined);
25937
+ /***************************************************************************
25938
+ * *
25939
+ * Public API *
25940
+ * *
25941
+ **************************************************************************/
25942
+ this.acceptDefaultFilters = true;
25938
25943
  this.id = id;
25939
25944
  this.userFilterContext.filters.pipe(combineLatestWith(this.forcedFilterContext.filters), skip(1), map(([userFilters, forcedFilters]) => FilterUtil.mergeCombine(userFilters, forcedFilters)), tap(x => this.log.debug('allFilters changed: ', x))).subscribe(merged => this.allFilters$.next(merged));
25940
25945
  }
@@ -25947,24 +25952,36 @@ class SearchContext {
25947
25952
  return this.allFilters$.pipe(filter(filters => !!filters));
25948
25953
  }
25949
25954
  get userFilters() {
25950
- return this.userFilterContext;
25955
+ return this.userFilterContext.filtersSnapshot;
25956
+ }
25957
+ get userFilters$() {
25958
+ return this.userFilterContext.filters;
25951
25959
  }
25952
25960
  get forcedFilters() {
25953
- return this.forcedFilterContext;
25961
+ return this.forcedFilterContext.filtersSnapshot;
25962
+ }
25963
+ updateDefaultFilters(filters) {
25964
+ // this.log.error('updateDefaultFilters, acceptDefaultFilters: ' + this.acceptDefaultFilters, filters);
25965
+ if (this.acceptDefaultFilters) {
25966
+ this.userFilterContext.updateFilters(FilterUtil.strip(filters, this.forcedFilters));
25967
+ }
25968
+ return this.acceptDefaultFilters;
25954
25969
  }
25955
- /***************************************************************************
25956
- * *
25957
- * Public API *
25958
- * *
25959
- **************************************************************************/
25960
25970
  updateUserFilters(filters) {
25961
- this.userFilterContext.updateFilters(filters);
25971
+ if (filters.length > 0) {
25972
+ // this.log.error('updateUserFilters', filters);
25973
+ this.acceptDefaultFilters = false;
25974
+ this.userFilterContext.updateFilters(filters);
25975
+ }
25962
25976
  }
25963
25977
  replaceUserFilters(filters) {
25978
+ // this.log.error('replaceUserFilters', filters);
25979
+ this.acceptDefaultFilters = false;
25964
25980
  this.userFilterContext.replaceFilters(filters);
25965
25981
  }
25966
25982
  replaceForcedFilters(filters) {
25967
25983
  this.forcedFilterContext.replaceFilters(filters);
25984
+ // Maybe clean up existing user filters here
25968
25985
  }
25969
25986
  }
25970
25987
 
@@ -26027,6 +26044,7 @@ class ElderSearchContextDirective {
26027
26044
  **************************************************************************/
26028
26045
  this.log = LoggerFactory.getLogger(this.constructor.name);
26029
26046
  this.destroy$ = new Subject();
26047
+ this.filtersToApplyAtRegistration = new Map;
26030
26048
  this._searchInputs$ = new BehaviorSubject([]);
26031
26049
  this._searchStates$ = new BehaviorSubject([]);
26032
26050
  this._filterContext$ = new BehaviorSubject(null);
@@ -26043,7 +26061,7 @@ class ElderSearchContextDirective {
26043
26061
  this.applyDefaultFiltersToSearchContext();
26044
26062
  this.syncSearchContextToBoundFilterContext();
26045
26063
  }
26046
- ngAfterContentInit() {
26064
+ ngAfterViewInit() {
26047
26065
  const searchContext = this.searchContext;
26048
26066
  this.applySearchContextToInputs(searchContext);
26049
26067
  this.syncSearchInputsToSearchContext();
@@ -26098,7 +26116,7 @@ class ElderSearchContextDirective {
26098
26116
  this.searchContext.replaceForcedFilters(filters);
26099
26117
  }
26100
26118
  get forcedFilters() {
26101
- return this.searchContext.forcedFilters.filtersSnapshot;
26119
+ return this.searchContext.forcedFilters;
26102
26120
  }
26103
26121
  get attributes() {
26104
26122
  return this._searchInputs$.asObservable();
@@ -26127,8 +26145,12 @@ class ElderSearchContextDirective {
26127
26145
  * Register a new search name in this container
26128
26146
  */
26129
26147
  register(searchInput) {
26130
- this.log.debug('Registering search input [' + searchInput.name + ']');
26131
26148
  const current = this._searchInputs$.getValue();
26149
+ const toApply = this.filtersToApplyAtRegistration.get(searchInput.name);
26150
+ if (toApply) {
26151
+ searchInput.setValue(toApply.value);
26152
+ }
26153
+ this.log.debug('Registering search input [' + searchInput.name + ']. Late registration value:' + toApply?.value);
26132
26154
  this._searchInputs$.next([...current, searchInput]);
26133
26155
  }
26134
26156
  reset() {
@@ -26146,18 +26168,21 @@ class ElderSearchContextDirective {
26146
26168
  applyDefaultFiltersToSearchContext() {
26147
26169
  const dcFilters = this.filterContext;
26148
26170
  const searchContext = this.searchContext;
26149
- if (searchContext.userFilters.isEmpty) {
26150
- if (!dcFilters.isEmpty) {
26151
- // Consider all filters in DC as defaults, expect for foced filters.
26152
- searchContext.updateUserFilters(FilterUtil.strip(dcFilters.filtersSnapshot, this.forcedFilters));
26153
- }
26171
+ if (searchContext.userFilters.length === 0) {
26172
+ this.applyAsDefaultsUntilUserAction(searchContext, dcFilters);
26154
26173
  }
26155
26174
  else {
26156
- dcFilters.replaceFilters(searchContext.userFilters.filtersSnapshot);
26175
+ dcFilters.replaceFilters(searchContext.userFilters);
26157
26176
  }
26158
26177
  }
26178
+ applyAsDefaultsUntilUserAction(searchContext, dcFilters) {
26179
+ dcFilters.filters.pipe(map(filters => searchContext.updateDefaultFilters(filters)), takeWhile(acceptDefaultFilters => acceptDefaultFilters)).subscribe();
26180
+ }
26159
26181
  syncSearchInputsToSearchContext() {
26160
- const inputFilters$ = this._searchInputs$.pipe(switchMap$1(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5), tap(states => this._searchStates$.next(states)), map(states => this.convertToFilters(states)));
26182
+ this._searchInputs$.pipe(takeUntil(this.destroy$), switchMap$1(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5)).subscribe(states => {
26183
+ this._searchStates$.next(states);
26184
+ });
26185
+ const inputFilters$ = this._searchStates$.pipe(map(states => this.convertToFilters(states)), filter(filters => filters.length > 0));
26161
26186
  inputFilters$
26162
26187
  .pipe(takeUntil(this.destroy$), combineLatestWith(this._searchContext$))
26163
26188
  .subscribe(([inputFilters, searchContext]) => {
@@ -26178,7 +26203,7 @@ class ElderSearchContextDirective {
26178
26203
  }
26179
26204
  }
26180
26205
  applySearchContextToInputs(searchContext) {
26181
- this.applyFiltersToInputs(searchContext.userFilters.filtersSnapshot);
26206
+ this.applyFiltersToInputs(searchContext.userFilters);
26182
26207
  }
26183
26208
  applyFiltersToInputs(filters) {
26184
26209
  if (filters.length > 0) {
@@ -26190,7 +26215,10 @@ class ElderSearchContextDirective {
26190
26215
  filters.forEach(f => {
26191
26216
  const input = inputsByName.get(f.key);
26192
26217
  if (input) {
26193
- input.applyInitialValue(f.value);
26218
+ input.setValue(f.value);
26219
+ }
26220
+ else {
26221
+ this.filtersToApplyAtRegistration.set(f.key, f);
26194
26222
  }
26195
26223
  });
26196
26224
  }
@@ -26342,28 +26370,6 @@ class ElderInitialValueDirective {
26342
26370
  this.initialDone$.next();
26343
26371
  this.initialDone$.complete();
26344
26372
  });
26345
- // this.ngModelValue = this.ngModel.model;
26346
- // ngModel.control.valueChanges
26347
- // .pipe(
26348
- // takeUntil(this.initialDone$),
26349
- // takeUntil(this.unsubscribe$),
26350
- // combineLatestWith(this.newValue$),
26351
- // debounceTime(500)
26352
- // ).subscribe({
26353
- // next: ([ngModelValue, newValue]) => {
26354
- // if (this.initialValue === ngModelValue) {
26355
- // this.initialDone$.next();
26356
- // this.initialDone$.complete();
26357
- // ngModel.control.setValue(newValue ? newValue : ngModelValue); // Why set ngModelValue again??
26358
- // } else {
26359
- // this.log.warn('Initialisation not yet done!', {
26360
- // initialValue: this.initialValue,
26361
- // ngModelValue: ngModelValue,
26362
- // newValue: newValue
26363
- // });
26364
- // }
26365
- // }
26366
- // });
26367
26373
  }
26368
26374
  /***************************************************************************
26369
26375
  * *
@@ -26379,7 +26385,7 @@ class ElderInitialValueDirective {
26379
26385
  return this.ngModel.control.valueChanges
26380
26386
  .pipe(takeUntil(this.destroy$));
26381
26387
  }
26382
- applyInitialValue(value) {
26388
+ setValue(value) {
26383
26389
  if (value) {
26384
26390
  this.ngModel.control.setValue(value);
26385
26391
  }
@@ -26414,10 +26420,12 @@ class ElderSearchInputDirective {
26414
26420
  constructor(searchContext, ngModel) {
26415
26421
  this.searchContext = searchContext;
26416
26422
  this.ngModel = ngModel;
26417
- this._state = new BehaviorSubject(SearchInputState.unknown());
26418
26423
  this.destroy$ = new Subject();
26419
26424
  this.log = LoggerFactory.getLogger(this.constructor.name);
26420
26425
  this.initialValueDirective = new ElderInitialValueDirective(ngModel);
26426
+ this._state$ = this.buildInputStateObservable().pipe(
26427
+ // tap(state => this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state))
26428
+ );
26421
26429
  }
26422
26430
  /***************************************************************************
26423
26431
  * *
@@ -26431,11 +26439,6 @@ class ElderSearchInputDirective {
26431
26439
  ngAfterViewInit() {
26432
26440
  this._extractedName = this.extractName();
26433
26441
  this.log.debug(this._extractedName + "|" + this.queryKey + "|" + this.resolvePath);
26434
- this.stateObservable()
26435
- .subscribe(state => {
26436
- // this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state)
26437
- this.emitState(state);
26438
- });
26439
26442
  }
26440
26443
  ngOnDestroy() {
26441
26444
  this.destroy$.next();
@@ -26447,10 +26450,7 @@ class ElderSearchInputDirective {
26447
26450
  * *
26448
26451
  **************************************************************************/
26449
26452
  get state$() {
26450
- return this._state.asObservable();
26451
- }
26452
- get stateSnapshot() {
26453
- return this._state.getValue();
26453
+ return this._state$;
26454
26454
  }
26455
26455
  get name() {
26456
26456
  if (this.queryKey) {
@@ -26476,9 +26476,9 @@ class ElderSearchInputDirective {
26476
26476
  * Public API *
26477
26477
  * *
26478
26478
  **************************************************************************/
26479
- applyInitialValue(queryString) {
26479
+ setValue(queryString) {
26480
26480
  const value = this.convertQueryStringToRawModelValue(queryString);
26481
- this.initialValueDirective.applyInitialValue(value);
26481
+ this.initialValueDirective.setValue(value);
26482
26482
  }
26483
26483
  reset() {
26484
26484
  this.ngModel.reset();
@@ -26492,10 +26492,13 @@ class ElderSearchInputDirective {
26492
26492
  return this.ngModel.control.valueChanges
26493
26493
  .pipe(takeUntil(this.destroy$));
26494
26494
  }
26495
- stateObservable() {
26495
+ buildInputStateObservable() {
26496
26496
  const viewStabilized$ = of('stabilized$').pipe(delay(20), first());
26497
26497
  const inputStateChanges$ = this.valueChanges$.pipe(takeUntil(this.destroy$), map(value => this.buildInputState(value, true)), skipUntil(viewStabilized$), debounceTime(20));
26498
- const startWithAsync$ = of('start').pipe(map(start => this.buildInputState(this.ngModel.control.value, false)));
26498
+ const startWithAsync$ = of('start').pipe(map(start => {
26499
+ const state = this.buildInputState(this.ngModel.control.value, false);
26500
+ return state;
26501
+ }));
26499
26502
  return concat(startWithAsync$, inputStateChanges$);
26500
26503
  }
26501
26504
  buildInputState(controlValue, userEvent) {
@@ -26527,9 +26530,6 @@ class ElderSearchInputDirective {
26527
26530
  }
26528
26531
  return queryValue;
26529
26532
  }
26530
- emitState(state) {
26531
- this._state.next(state);
26532
- }
26533
26533
  checkAndConvertFaultyValuesToNull(value) {
26534
26534
  let fixedValue = value;
26535
26535
  fixedValue = this.convertEmptyArrayToNull(fixedValue);
@@ -27360,7 +27360,7 @@ class ElderSearchUrlDirective {
27360
27360
  * *
27361
27361
  **************************************************************************/
27362
27362
  ngAfterViewInit() {
27363
- this.searchContext$.pipe(takeUntil(this.destroy$), switchMap(searchContext => searchContext.userFilters.filters.pipe(map(filters => new ContextWithUserFilters(searchContext, filters))))).subscribe(ctxAndFilters => this.searchUrlService.updateQueryParams(ctxAndFilters.context.id, ctxAndFilters.userFilters));
27363
+ this.searchContext$.pipe(takeUntil(this.destroy$), switchMap(searchContext => searchContext.userFilters$.pipe(map(filters => new ContextWithUserFilters(searchContext, filters))))).subscribe(ctxAndFilters => this.searchUrlService.updateQueryParams(ctxAndFilters.context.id, ctxAndFilters.userFilters));
27364
27364
  }
27365
27365
  ngOnDestroy() {
27366
27366
  this.destroy$.next();