@sourceloop/search-client 1.2.4 → 4.3.0
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.
- package/assets/icomoon/fonts/icomoon.ttf +0 -0
- package/assets/icomoon/style.css +32 -0
- package/bundles/sourceloop-search-client.umd.js +53 -17
- package/bundles/sourceloop-search-client.umd.js.map +1 -1
- package/esm2015/lib/lib-configuration.js +53 -17
- package/esm2015/lib/lib-configuration.ngsummary.json +1 -0
- package/esm2015/lib/search/search.component.js +2 -2
- package/esm2015/lib/search/search.component.ngfactory.js +129 -0
- package/esm2015/lib/search/search.component.ngsummary.json +1 -0
- package/esm2015/lib/search/search.component.scss.shim.ngstyle.js +9 -0
- package/esm2015/lib/search-lib.module.js +1 -1
- package/esm2015/lib/search-lib.module.ngfactory.js +32 -0
- package/esm2015/lib/search-lib.module.ngsummary.json +1 -0
- package/esm2015/lib/types.js +1 -1
- package/esm2015/lib/types.ngsummary.json +1 -0
- package/esm2015/public-api.js +1 -1
- package/esm2015/public-api.ngsummary.json +1 -0
- package/esm2015/sourceloop-search-client.js +1 -1
- package/esm2015/sourceloop-search-client.ngsummary.json +1 -0
- package/fesm2015/sourceloop-search-client.js +53 -17
- package/fesm2015/sourceloop-search-client.js.map +1 -1
- package/lib/lib-configuration.d.ts +4 -0
- package/lib/search/search.component.d.ts +1 -1
- package/lib/search/search.component.ngfactory.d.ts +1 -0
- package/lib/search/search.component.scss.shim.ngstyle.d.ts +1 -0
- package/lib/search-lib.module.ngfactory.d.ts +3 -0
- package/lib/types.d.ts +1 -1
- package/package.json +12 -6
- package/sourceloop-search-client.metadata.json +1 -1
|
Binary file
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'icomoon';
|
|
3
|
+
src: url('fonts/icomoon.ttf?n7v7vk') format('truetype');
|
|
4
|
+
font-weight: normal;
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-display: block;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.icomoon {
|
|
10
|
+
/* use !important to prevent issues with browser extensions that change fonts */
|
|
11
|
+
font-family: 'icomoon', sans-serif !important;
|
|
12
|
+
speak: never;
|
|
13
|
+
font-style: normal;
|
|
14
|
+
font-weight: normal;
|
|
15
|
+
font-variant: normal;
|
|
16
|
+
text-transform: none;
|
|
17
|
+
line-height: 1;
|
|
18
|
+
|
|
19
|
+
/* Better Font Rendering =========== */
|
|
20
|
+
-webkit-font-smoothing: antialiased;
|
|
21
|
+
-moz-osx-font-smoothing: grayscale;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.arrow_down:before {
|
|
25
|
+
content: '\eb79';
|
|
26
|
+
}
|
|
27
|
+
.Search:before {
|
|
28
|
+
content: '\eae0';
|
|
29
|
+
}
|
|
30
|
+
.close:before {
|
|
31
|
+
content: '\e926';
|
|
32
|
+
}
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
SearchComponent.decorators = [
|
|
290
290
|
{ type: core.Component, args: [{
|
|
291
291
|
selector: 'sourceloop-search',
|
|
292
|
-
template: "<div fxLayout fxLayoutAlign=\"start center\" class=\"toolbar-search\">\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-input\">\n <input\n matInput\n autocomplete=\"off\"\n type=\"text\"\n [placeholder]=\"\n config.placeholderFunction\n ? config.placeholderFunction(searchInput.value, category)\n : config.placeholder || 'Search'\n \"\n #searchInput\n name=\"searchInput\"\n (focus)=\"showSuggestions()\"\n (blur)=\"hideSuggestions()\"\n [(ngModel)]=\"searchBoxInput\"\n (keyup)=\"hitSearchApi($event)\"\n placeholder=\"Search\"\n (ngModelChange)=\"onChange(this.searchBoxInput)\"\n [disabled]=\"disabled\"\n />\n <mat-icon matPrefix
|
|
292
|
+
template: "<div fxLayout fxLayoutAlign=\"start center\" class=\"toolbar-search\">\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-input\">\n <input\n matInput\n autocomplete=\"off\"\n type=\"text\"\n [placeholder]=\"\n config.placeholderFunction\n ? config.placeholderFunction(searchInput.value, category)\n : config.placeholder || 'Search'\n \"\n #searchInput\n name=\"searchInput\"\n (focus)=\"showSuggestions()\"\n (blur)=\"hideSuggestions()\"\n [(ngModel)]=\"searchBoxInput\"\n (keyup)=\"hitSearchApi($event)\"\n placeholder=\"Search\"\n (ngModelChange)=\"onChange(this.searchBoxInput)\"\n [disabled]=\"disabled\"\n />\n <mat-icon matPrefix [className]=\"config.searchIconClass\"></mat-icon>\n <mat-icon\n *ngIf=\"searchBoxInput\"\n matSuffix\n [className]=\"config.crossIconClass\"\n (click)=\"resetInput()\"\n ></mat-icon>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-select\">\n <mat-icon matSuffix [className]=\"config.dropDownButtonIconClass\"></mat-icon>\n <mat-select\n [value]=\"category\"\n (selectionChange)=\"setCategory($event.value)\"\n panelClass=\"search-select\"\n >\n <mat-option [value]=\"model.name\" *ngFor=\"let model of config.models\">\n {{ model.displayName }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<div class=\"search-container\">\n <div\n *ngIf=\"suggestionsDisplay && (recentSearches.length || suggestions.length)\"\n class=\"search-popup\"\n >\n <ng-container *ngIf=\"searchBoxInput\">\n <span *ngIf=\"suggestions.length === 0\" class=\"search-message\">\n <ng-container *ngIf=\"searching\"> searching... </ng-container>\n <ng-container *ngIf=\"!searching\">\n {{ config.noResultMessage }}\n </ng-container>\n </span>\n <ng-container *ngIf=\"config.categorizeResults && suggestions.length\">\n <div\n class=\"search-result\"\n *ngFor=\"let modelWithSuggestions of getModelsWithSuggestions()\"\n >\n <h3 class=\"suggestions-heading\">\n <img\n *ngIf=\"modelWithSuggestions.model.imageUrl\"\n [src]=\"modelWithSuggestions.model.imageUrl\"\n [alt]=\"modelWithSuggestions.model.displayName\"\n />\n {{ modelWithSuggestions.model.displayName }} ({{\n modelWithSuggestions.items.length\n }})\n </h3>\n <ul>\n <li\n *ngFor=\"let suggestion of modelWithSuggestions.items\"\n (mousedown)=\"populateValue(suggestion, $event)\"\n class=\"suggestions\"\n >\n <ng-container *ngIf=\"subtitleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n subtitleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n <p\n *ngIf=\"!titleTemplate\"\n [innerHTML]=\"\n boldString(\n suggestion[config.displayPropertyName],\n searchBoxInput\n )\n \"\n style=\"display: inline\"\n ></p>\n <ng-container *ngIf=\"titleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n titleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!config.categorizeResults\">\n <div class=\"search-result\">\n <ul>\n <li\n *ngFor=\"let suggestion of suggestions\"\n (mousedown)=\"populateValue(suggestion, $event)\"\n >\n <!--Need to call fetchModelImageUrlFromSuggestion as each suggestion can come from different model-->\n <img\n *ngIf=\"\n !titleTemplate && fetchModelImageUrlFromSuggestion(suggestion)\n \"\n class=\"suggestions-categorize-false\"\n [src]=\"fetchModelImageUrlFromSuggestion(suggestion)\"\n style=\"margin-right: 5px\"\n alt=\"Img\"\n />\n <ng-container *ngIf=\"subtitleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n subtitleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n <p\n *ngIf=\"!titleTemplate\"\n [innerHTML]=\"\n boldString(\n suggestion[config.displayPropertyName],\n searchBoxInput\n )\n \"\n style=\"display: inline\"\n ></p>\n <ng-container *ngIf=\"titleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n titleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n </li>\n </ul>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!config.hideRecentSearch && recentSearches.length > 0\">\n <div class=\"recent-searches\">\n <h3 class=\"suggestions-heading\">Recent Searches</h3>\n <ul>\n <li\n *ngFor=\"let recentSearch of recentSearches\"\n class=\"suggestions\"\n (mousedown)=\"populateValueRecentSearch(recentSearch, $event)\"\n >\n <mat-icon\n matPrefix\n [className]=\"config.recentSearchIconClass\"\n ></mat-icon>\n\n <span> {{ recentSearch.match }}</span>\n </li>\n </ul>\n </div>\n </ng-container>\n </div>\n</div>\n",
|
|
293
293
|
providers: [
|
|
294
294
|
{
|
|
295
295
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -338,18 +338,9 @@
|
|
|
338
338
|
|
|
339
339
|
var Configuration = /** @class */ (function () {
|
|
340
340
|
function Configuration(d) {
|
|
341
|
-
|
|
342
|
-
if (d.categorizeResults === false &&
|
|
343
|
-
(d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)) {
|
|
344
|
-
throw new Error('You must provide hideCategorizeButton:true as categorizeResults is false');
|
|
345
|
-
}
|
|
346
|
-
if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {
|
|
347
|
-
throw new Error('You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true');
|
|
348
|
-
}
|
|
341
|
+
checkForError(d);
|
|
349
342
|
this.displayPropertyName = d.displayPropertyName;
|
|
350
343
|
this.models = d.models;
|
|
351
|
-
this.placeholder = (_a = d.placeholder) !== null && _a !== void 0 ? _a : 'Search';
|
|
352
|
-
this.placeholderFunction = d.placeholderFunction;
|
|
353
344
|
/* IRequestParameters - will be given default values before call is made in case undefined/null,
|
|
354
345
|
otherwise there ! is used on which sonar gives code smell */
|
|
355
346
|
this.limit = d.limit;
|
|
@@ -357,15 +348,60 @@
|
|
|
357
348
|
this.order = d.order;
|
|
358
349
|
this.offset = d.offset;
|
|
359
350
|
this.saveInRecents = d.saveInRecents;
|
|
360
|
-
|
|
361
|
-
this.
|
|
362
|
-
this.
|
|
363
|
-
this.
|
|
364
|
-
|
|
365
|
-
this.
|
|
351
|
+
var displayTexts = setDisplayText(d);
|
|
352
|
+
this.noResultMessage = displayTexts.noResultMessage;
|
|
353
|
+
this.placeholder = displayTexts.placeholder;
|
|
354
|
+
this.placeholderFunction = displayTexts.placeholderFunction;
|
|
355
|
+
var searchConfig = setSearchConfig(d);
|
|
356
|
+
this.categorizeResults = searchConfig.categorizeResults;
|
|
357
|
+
this.hideRecentSearch = searchConfig.hideRecentSearch;
|
|
358
|
+
this.hideCategorizeButton = searchConfig.hideCategorizeButton;
|
|
359
|
+
this.saveInRecentsOnlyOnEnter = searchConfig.saveInRecentsOnlyOnEnter;
|
|
360
|
+
this.searchOnlyOnEnter = searchConfig.searchOnlyOnEnter;
|
|
361
|
+
var classes = setIconClasses(d);
|
|
362
|
+
this.searchIconClass = classes.searchIconClass;
|
|
363
|
+
this.crossIconClass = classes.crossIconClass;
|
|
364
|
+
this.dropDownButtonIconClass = classes.dropDownButtonIconClass;
|
|
365
|
+
this.recentSearchIconClass = classes.recentSearchIconClass;
|
|
366
366
|
}
|
|
367
367
|
return Configuration;
|
|
368
368
|
}());
|
|
369
|
+
function checkForError(d) {
|
|
370
|
+
if (d.categorizeResults === false &&
|
|
371
|
+
(d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)) {
|
|
372
|
+
throw new Error('You must provide hideCategorizeButton:true as categorizeResults is false');
|
|
373
|
+
}
|
|
374
|
+
if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {
|
|
375
|
+
throw new Error('You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true');
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function setDisplayText(d) {
|
|
379
|
+
var _a, _b;
|
|
380
|
+
return {
|
|
381
|
+
placeholder: (_a = d.placeholder) !== null && _a !== void 0 ? _a : 'Search',
|
|
382
|
+
noResultMessage: (_b = d.noResultMessage) !== null && _b !== void 0 ? _b : 'No result found',
|
|
383
|
+
placeholderFunction: d.placeholderFunction,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
function setSearchConfig(d) {
|
|
387
|
+
var _a, _b, _c, _d, _e;
|
|
388
|
+
return {
|
|
389
|
+
categorizeResults: (_a = d.categorizeResults) !== null && _a !== void 0 ? _a : true,
|
|
390
|
+
hideRecentSearch: (_b = d.hideRecentSearch) !== null && _b !== void 0 ? _b : false,
|
|
391
|
+
hideCategorizeButton: (_c = d.hideCategorizeButton) !== null && _c !== void 0 ? _c : false,
|
|
392
|
+
saveInRecentsOnlyOnEnter: (_d = d.saveInRecentsOnlyOnEnter) !== null && _d !== void 0 ? _d : false,
|
|
393
|
+
searchOnlyOnEnter: (_e = d.searchOnlyOnEnter) !== null && _e !== void 0 ? _e : false,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
function setIconClasses(d) {
|
|
397
|
+
var _a, _b, _c, _d;
|
|
398
|
+
return {
|
|
399
|
+
searchIconClass: (_a = d.searchIconClass) !== null && _a !== void 0 ? _a : 'icomoon Search',
|
|
400
|
+
crossIconClass: (_b = d.crossIconClass) !== null && _b !== void 0 ? _b : 'icomoon close',
|
|
401
|
+
dropDownButtonIconClass: (_c = d.dropDownButtonIconClass) !== null && _c !== void 0 ? _c : 'icomoon arrow_down',
|
|
402
|
+
recentSearchIconClass: (_d = d.recentSearchIconClass) !== null && _d !== void 0 ? _d : 'icomoon Search',
|
|
403
|
+
};
|
|
404
|
+
}
|
|
369
405
|
|
|
370
406
|
/*
|
|
371
407
|
* Public API Surface of my-lib
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceloop-search-client.umd.js","sources":["../../projects/search-lib/src/lib/types.ts","../../projects/search-lib/src/lib/search/search.component.ts","../../projects/search-lib/src/lib/search-lib.module.ts","../../projects/search-lib/src/lib/lib-configuration.ts","../../projects/search-lib/src/public-api.ts","../../projects/search-lib/src/sourceloop-search-client.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nexport interface ISearchQuery {\n match: string;\n limit: number | null;\n order: string | null;\n limitByType: boolean | null;\n offset: number | null;\n sources: string[] | null;\n}\nexport interface IModel {\n name: string;\n displayName: string;\n imageUrl?: string;\n icon?: string;\n}\nexport interface IReturnType {\n rank: number;\n source: string;\n}\nexport interface IDefaultReturnType extends IReturnType {\n name: string;\n description: string;\n}\n\nexport interface ISearchService<T extends IReturnType> {\n searchApiRequest(\n requestParameters: ISearchQuery,\n saveInRecents: boolean,\n ): Observable<T[]>;\n recentSearchApiRequest?(): Observable<ISearchQuery[]>;\n}\n\n// cant use T extends IReturnType here\nexport const SEARCH_SERVICE_TOKEN: InjectionToken<ISearchService<IReturnType>> =\n new InjectionToken<ISearchService<IReturnType>>('Search_Service_Token');\n\nexport type RecentSearchEvent = {\n event?: Event;\n keyword: string;\n category: string;\n};\n\nexport type ItemClickedEvent<T> = {\n event: MouseEvent;\n item: T;\n};\n\nexport type TypeEvent = {\n event?: Event;\n input: string;\n};\n// IRequestParameters default values\nexport const DEFAULT_LIMIT = 20;\nexport const DEFAULT_LIMIT_TYPE = false;\nexport const DEFAULT_ORDER = [];\nexport const DEBOUNCE_TIME = 1000;\nexport const DEFAULT_OFFSET = 0;\nexport const DEFAULT_SAVE_IN_RECENTS = true;\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {Configuration} from '../lib-configuration';\nimport {Subject} from 'rxjs';\nimport {debounceTime, tap} from 'rxjs/operators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n ISearchService,\n ISearchQuery,\n SEARCH_SERVICE_TOKEN,\n DEBOUNCE_TIME,\n DEFAULT_LIMIT,\n DEFAULT_LIMIT_TYPE,\n DEFAULT_OFFSET,\n DEFAULT_SAVE_IN_RECENTS,\n DEFAULT_ORDER,\n IReturnType,\n RecentSearchEvent,\n TypeEvent,\n ItemClickedEvent,\n IModel,\n} from '../types';\nimport {isPlatformBrowser} from '@angular/common';\n\nconst ALL_LABEL = 'All';\n@Component({\n selector: 'sourceloop-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SearchComponent,\n multi: true,\n },\n ],\n})\nexport class SearchComponent<T extends IReturnType>\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n searchBoxInput = '';\n suggestionsDisplay = false;\n categoryDisplay = false;\n searching = false;\n suggestions: T[] = [];\n recentSearches: ISearchQuery[] = [];\n category: string = ALL_LABEL;\n searchRequest$ = new Subject<{input: string; event: Event}>();\n\n private _config!: Configuration<T>;\n public get config(): Configuration<T> {\n return this._config;\n }\n @Input()\n public set config(value: Configuration<T>) {\n this._config = value;\n\n if (value && value.models) {\n value.models.unshift({\n name: ALL_LABEL,\n displayName: ALL_LABEL,\n });\n } else if (value && !value.models) {\n value.models = [\n {\n name: ALL_LABEL,\n displayName: ALL_LABEL,\n },\n ];\n } else {\n // do nothing\n }\n }\n\n @Input() titleTemplate?: TemplateRef<any>;\n @Input() subtitleTemplate?: TemplateRef<any>;\n // emitted when user clicks one of the suggested results (including recent search sugestions)\n @Output() clicked = new EventEmitter<ItemClickedEvent<T>>();\n @Output() searched = new EventEmitter<RecentSearchEvent>();\n /* emitted when user makes search request (including recent search requests & requests made on change in category from dropdown)\n In case of recent search Array of recent Search request result is emitted */\n\n onChange!: (value: string | undefined) => void;\n onTouched!: () => void;\n disabled = false;\n\n @ViewChild('searchInput') public searchInputElement!: ElementRef;\n\n constructor(\n @Inject(SEARCH_SERVICE_TOKEN)\n private readonly searchService: ISearchService<T>,\n // tslint:disable-next-line:ban-types\n @Inject(PLATFORM_ID) private readonly platformId: Object,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.searchRequest$\n .pipe(\n tap(v => (this.suggestions = [])),\n debounceTime(DEBOUNCE_TIME),\n )\n .subscribe((value: TypeEvent) => {\n this.searched.emit({\n event: value.event,\n keyword: value.input,\n category: this.category,\n });\n this.getSuggestions(value);\n this.cdr.markForCheck();\n });\n }\n\n // ControlValueAccessor Implementation\n writeValue(value: string): void {\n this.searchBoxInput = value;\n }\n // When the value in the UI is changed, this method will invoke a callback function\n registerOnChange(fn: (value: string | undefined) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getSuggestions(eventValue: TypeEvent) {\n eventValue.input = eventValue.input.trim();\n if (!eventValue.input.length) {\n return;\n }\n const order = this.config.order ?? DEFAULT_ORDER;\n let orderString = '';\n order.forEach(preference => (orderString = `${orderString}${preference} `));\n\n let saveInRecents = this.config.saveInRecents ?? DEFAULT_SAVE_IN_RECENTS;\n if (this.config.saveInRecents && this.config.saveInRecentsOnlyOnEnter) {\n if (\n !eventValue.event ||\n (eventValue.event instanceof KeyboardEvent &&\n eventValue.event.key === 'Enter')\n ) {\n saveInRecents = true; // save in recents only on enter or change in category\n } else {\n // do not save in recent search on typing\n saveInRecents = false;\n }\n }\n /* need to put default value here and not in contructor\n because sonar was giving code smell with definite assertion as all these parameters are optional */\n const requestParameters: ISearchQuery = {\n match: eventValue.input,\n sources: this._categoryToSourceName(this.category),\n limit: this.config.limit ?? DEFAULT_LIMIT,\n limitByType: this.config.limitByType ?? DEFAULT_LIMIT_TYPE,\n order: orderString,\n offset: this.config.offset ?? DEFAULT_OFFSET,\n };\n\n this.searching = true;\n this.cdr.markForCheck();\n this.searchService\n .searchApiRequest(requestParameters, saveInRecents)\n .subscribe(\n (value: T[]) => {\n this.suggestions = value;\n this.searching = false;\n this.cdr.markForCheck();\n },\n (_error: Error) => {\n this.suggestions = [];\n this.searching = false;\n this.cdr.markForCheck();\n },\n );\n }\n getRecentSearches() {\n if (\n !this.config.hideRecentSearch &&\n this.searchService.recentSearchApiRequest\n ) {\n this.searchService.recentSearchApiRequest().subscribe(\n (value: ISearchQuery[]) => {\n this.recentSearches = value;\n this.cdr.markForCheck();\n },\n (_error: Error) => {\n this.recentSearches = [];\n this.cdr.markForCheck();\n },\n );\n }\n }\n\n // event can be KeyBoardEvent or Event of type 'change' fired on change in value of drop down for category\n hitSearchApi(event?: Event) {\n // this will happen only in case user searches something and then erases it, we need to update recent search\n if (!this.searchBoxInput) {\n this.suggestions = [];\n this.getRecentSearches();\n return;\n }\n\n // no debounce time needed in case of searchOnlyOnEnter\n if (this.config.searchOnlyOnEnter) {\n if (!event || (event instanceof KeyboardEvent && event.key === 'Enter')) {\n this.getSuggestions({input: this.searchBoxInput, event});\n }\n return;\n }\n\n // no debounce time needed in case of change in category\n if (!event) {\n this.getSuggestions({input: this.searchBoxInput, event});\n return;\n }\n\n this.searchRequest$.next({\n input: this.searchBoxInput,\n event,\n });\n }\n\n populateValue(suggestion: T, event: MouseEvent) {\n const value = suggestion[\n this.config.displayPropertyName\n ] as unknown as string; // converted to string to assign value to searchBoxInput\n this.searchBoxInput = value;\n this.suggestionsDisplay = false;\n // ngModelChange doesn't detect change in value when populated from outside, hence calling manually\n this.onChange(this.searchBoxInput);\n // need to do this to show more search options for selected suggestion - just in case user reopens search input\n this.getSuggestions({input: this.searchBoxInput, event});\n this.clicked.emit({item: suggestion, event});\n }\n populateValueRecentSearch(recentSearch: ISearchQuery, event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n const value = recentSearch['match'];\n this.searchBoxInput = value;\n this.suggestionsDisplay = false;\n this.onChange(this.searchBoxInput);\n // need to do this to show more search options for selected suggestion - just in case user reopens search input\n this.getSuggestions({input: this.searchBoxInput, event});\n this.focusInput();\n this.showSuggestions();\n }\n\n fetchModelImageUrlFromSuggestion(suggestion: T) {\n const modelName = suggestion[\n 'source' as unknown as keyof T\n ] as unknown as string;\n let url: string | undefined;\n this.config.models.forEach(model => {\n if (model.name === modelName && model.imageUrl) {\n url = model.imageUrl;\n }\n });\n return url;\n }\n\n boldString(str: T[keyof T] | string, substr: string) {\n const strRegExp = new RegExp(`(${substr})`, 'gi');\n const stringToMakeBold: string = str as unknown as string;\n return stringToMakeBold.replace(strRegExp, `<b>$1</b>`);\n }\n\n hideSuggestions() {\n this.suggestionsDisplay = false;\n this.onTouched();\n }\n\n showSuggestions() {\n this.suggestionsDisplay = true;\n this.getRecentSearches();\n }\n\n focusInput() {\n if (isPlatformBrowser(this.platformId)) {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n setCategory(category: string) {\n this.category = category;\n this.categoryDisplay = false;\n if (this.searchBoxInput) {\n this.hitSearchApi();\n this.focusInput();\n this.showSuggestions();\n }\n }\n\n showCategory() {\n this.categoryDisplay = !this.categoryDisplay;\n }\n\n hideCategory() {\n this.categoryDisplay = false;\n }\n\n resetInput() {\n this.searchBoxInput = '';\n this.suggestions = [];\n this.suggestionsDisplay = true;\n this.focusInput();\n // ngModelChange doesn't detect change in value when populated from outside, hence calling manually\n this.onChange(this.searchBoxInput);\n this.getRecentSearches();\n }\n ngOnDestroy() {\n this.searchRequest$.unsubscribe();\n }\n\n _categoryToSourceName(category: string) {\n if (category === ALL_LABEL) {\n return [];\n } else {\n return [category];\n }\n }\n getModelFromModelName(name: string) {\n return this.config.models.find(item => item.name === name) as IModel;\n }\n getModelsWithSuggestions() {\n const modelsWithSuggestions: {model: IModel; items: T[]}[] = [];\n const sources: string[] = [];\n this.suggestions.forEach(suggestion => {\n if (sources.indexOf(suggestion['source']) >= 0) {\n modelsWithSuggestions.every(modelWithSuggestions => {\n if (modelWithSuggestions.model.name === suggestion['source']) {\n modelWithSuggestions.items.push(suggestion);\n return false;\n }\n return true;\n });\n } else {\n const model = this.getModelFromModelName(suggestion['source']);\n modelsWithSuggestions.push({model, items: [suggestion]});\n sources.push(suggestion['source']);\n }\n });\n return modelsWithSuggestions;\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSelectModule} from '@angular/material/select';\n\nimport {SearchComponent} from './search/search.component';\n\n@NgModule({\n declarations: [SearchComponent],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n FlexLayoutModule,\n ],\n exports: [SearchComponent],\n})\nexport class SearchLibModule {}\n","import {IDefaultReturnType, IModel} from './types';\nexport class Configuration<T = IDefaultReturnType> {\n /** property to be displayed in the results */\n displayPropertyName: keyof T;\n /** list of model configuration to be render and categorize search results */\n models: IModel[];\n /** max number of results (based on limitByType option) */\n limit?: number;\n /** apply limit on individual models, or on overall results */\n limitByType?: boolean;\n /** apply a particular ordering on results */\n order?: string[];\n /** offset for results in case limit is used */\n offset?: number;\n /** save the search query in recent history */\n saveInRecents?: boolean;\n /** a placeholder to display in the search box */\n placeholder?: string;\n /** a function to generate placeholder, overrides the placeholder property */\n placeholderFunction?: (input: string, category: string) => string;\n /** categorize results on the basis of models provided */\n categorizeResults?: boolean;\n /** hides the recent search list */\n hideRecentSearch?: boolean;\n /** hide the category selection button */\n hideCategorizeButton?: boolean;\n /** save value in recent search only on enter or change in category, if false, also saved on typing */\n saveInRecentsOnlyOnEnter?: boolean;\n /** search only on enter key or when category is changed */\n searchOnlyOnEnter?: boolean;\n noResultMessage?: string;\n\n constructor(d: Configuration<T>) {\n if (\n d.categorizeResults === false &&\n (d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)\n ) {\n throw new Error(\n 'You must provide hideCategorizeButton:true as categorizeResults is false',\n );\n }\n if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {\n throw new Error(\n 'You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true',\n );\n }\n this.displayPropertyName = d.displayPropertyName;\n this.models = d.models;\n\n this.placeholder = d.placeholder ?? 'Search';\n this.placeholderFunction = d.placeholderFunction;\n /* IRequestParameters - will be given default values before call is made in case undefined/null,\n otherwise there ! is used on which sonar gives code smell */\n this.limit = d.limit;\n this.limitByType = d.limitByType;\n this.order = d.order;\n this.offset = d.offset;\n this.saveInRecents = d.saveInRecents;\n\n this.categorizeResults = d.categorizeResults ?? true;\n this.hideRecentSearch = d.hideRecentSearch ?? false;\n this.hideCategorizeButton = d.hideCategorizeButton ?? false;\n this.saveInRecentsOnlyOnEnter = d.saveInRecentsOnlyOnEnter ?? false;\n this.searchOnlyOnEnter = d.searchOnlyOnEnter ?? false;\n this.noResultMessage = d.noResultMessage ?? 'No result found';\n }\n}\n","/*\n * Public API Surface of my-lib\n */\n\nexport * from './lib/search-lib.module';\nexport * from './lib/search/search.component';\nexport * from './lib/lib-configuration';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["InjectionToken","Subject","EventEmitter","tap","debounceTime","isPlatformBrowser","Component","NG_VALUE_ACCESSOR","Inject","PLATFORM_ID","ChangeDetectorRef","Input","Output","ViewChild","NgModule","CommonModule","FormsModule","HttpClientModule","MatSelectModule","MatFormFieldModule","MatIconModule","MatInputModule","FlexLayoutModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sourceloop-search-client.umd.js","sources":["../../src/lib/types.ts","../../src/lib/search/search.component.ts","../../src/lib/search-lib.module.ts","../../src/lib/lib-configuration.ts","../../src/public-api.ts","../../src/sourceloop-search-client.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nexport interface ISearchQuery {\n match: string;\n limit: number | null;\n order: string | null;\n limitByType: boolean | null;\n offset: number | null;\n sources: string[] | null;\n}\nexport interface IModel {\n name: string;\n displayName: string;\n imageUrl?: string;\n icon?: string;\n}\nexport interface IReturnType {\n rank: number;\n source: string;\n}\nexport interface IDefaultReturnType extends IReturnType {\n name: string;\n description: string;\n}\n\nexport interface ISearchService<T extends IReturnType> {\n searchApiRequest(\n requestParameters: ISearchQuery,\n saveInRecents: boolean,\n ): Observable<T[]>;\n recentSearchApiRequest?(): Observable<ISearchQuery[]>;\n}\n\n// cant use T extends IReturnType here\nexport const SEARCH_SERVICE_TOKEN: InjectionToken<ISearchService<IReturnType>> =\n new InjectionToken<ISearchService<IReturnType>>('Search_Service_Token');\n\nexport type RecentSearchEvent = {\n event?: Event;\n keyword: string;\n category: string;\n};\n\nexport type ItemClickedEvent<T> = {\n event: MouseEvent;\n item: T;\n};\n\nexport type TypeEvent = {\n event?: Event;\n input: string;\n};\n// IRequestParameters default values\nexport const DEFAULT_LIMIT = 20;\nexport const DEFAULT_LIMIT_TYPE = false;\nexport const DEFAULT_ORDER = [];\nexport const DEBOUNCE_TIME = 1000;\nexport const DEFAULT_OFFSET = 0;\nexport const DEFAULT_SAVE_IN_RECENTS = true;\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {Configuration} from '../lib-configuration';\nimport {Subject} from 'rxjs';\nimport {debounceTime, tap} from 'rxjs/operators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n ISearchService,\n ISearchQuery,\n SEARCH_SERVICE_TOKEN,\n DEBOUNCE_TIME,\n DEFAULT_LIMIT,\n DEFAULT_LIMIT_TYPE,\n DEFAULT_OFFSET,\n DEFAULT_SAVE_IN_RECENTS,\n DEFAULT_ORDER,\n IReturnType,\n RecentSearchEvent,\n TypeEvent,\n ItemClickedEvent,\n IModel,\n} from '../types';\nimport {isPlatformBrowser} from '@angular/common';\n\nconst ALL_LABEL = 'All';\n@Component({\n selector: 'sourceloop-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SearchComponent,\n multi: true,\n },\n ],\n})\nexport class SearchComponent<T extends IReturnType>\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n searchBoxInput = '';\n suggestionsDisplay = false;\n categoryDisplay = false;\n searching = false;\n suggestions: T[] = [];\n recentSearches: ISearchQuery[] = [];\n category: string = ALL_LABEL;\n searchRequest$ = new Subject<{input: string; event: Event}>();\n\n private _config!: Configuration<T>;\n public get config(): Configuration<T> {\n return this._config;\n }\n @Input()\n public set config(value: Configuration<T>) {\n this._config = value;\n\n if (value && value.models) {\n value.models.unshift({\n name: ALL_LABEL,\n displayName: ALL_LABEL,\n });\n } else if (value && !value.models) {\n value.models = [\n {\n name: ALL_LABEL,\n displayName: ALL_LABEL,\n },\n ];\n } else {\n // do nothing\n }\n }\n\n @Input() titleTemplate?: TemplateRef<any>;\n @Input() subtitleTemplate?: TemplateRef<any>;\n // emitted when user clicks one of the suggested results (including recent search sugestions)\n @Output() clicked = new EventEmitter<ItemClickedEvent<T>>();\n @Output() searched = new EventEmitter<RecentSearchEvent>();\n /* emitted when user makes search request (including recent search requests & requests made on change in category from dropdown)\n In case of recent search Array of recent Search request result is emitted */\n\n onChange!: (value: string | undefined) => void;\n onTouched!: () => void;\n disabled = false;\n\n @ViewChild('searchInput') public searchInputElement!: ElementRef;\n\n constructor(\n @Inject(SEARCH_SERVICE_TOKEN)\n private readonly searchService: ISearchService<T>,\n // tslint:disable-next-line:ban-types\n @Inject(PLATFORM_ID) private readonly platformId: Object,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.searchRequest$\n .pipe(\n tap(v => (this.suggestions = [])),\n debounceTime(DEBOUNCE_TIME),\n )\n .subscribe((value: TypeEvent) => {\n this.searched.emit({\n event: value.event,\n keyword: value.input,\n category: this.category,\n });\n this.getSuggestions(value);\n this.cdr.markForCheck();\n });\n }\n\n // ControlValueAccessor Implementation\n writeValue(value: string): void {\n this.searchBoxInput = value;\n }\n // When the value in the UI is changed, this method will invoke a callback function\n registerOnChange(fn: (value: string | undefined) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getSuggestions(eventValue: TypeEvent) {\n eventValue.input = eventValue.input.trim();\n if (!eventValue.input.length) {\n return;\n }\n const order = this.config.order ?? DEFAULT_ORDER;\n let orderString = '';\n order.forEach(preference => (orderString = `${orderString}${preference} `));\n\n let saveInRecents = this.config.saveInRecents ?? DEFAULT_SAVE_IN_RECENTS;\n if (this.config.saveInRecents && this.config.saveInRecentsOnlyOnEnter) {\n if (\n !eventValue.event ||\n (eventValue.event instanceof KeyboardEvent &&\n eventValue.event.key === 'Enter')\n ) {\n saveInRecents = true; // save in recents only on enter or change in category\n } else {\n // do not save in recent search on typing\n saveInRecents = false;\n }\n }\n /* need to put default value here and not in contructor\n because sonar was giving code smell with definite assertion as all these parameters are optional */\n const requestParameters: ISearchQuery = {\n match: eventValue.input,\n sources: this._categoryToSourceName(this.category),\n limit: this.config.limit ?? DEFAULT_LIMIT,\n limitByType: this.config.limitByType ?? DEFAULT_LIMIT_TYPE,\n order: orderString,\n offset: this.config.offset ?? DEFAULT_OFFSET,\n };\n\n this.searching = true;\n this.cdr.markForCheck();\n this.searchService\n .searchApiRequest(requestParameters, saveInRecents)\n .subscribe(\n (value: T[]) => {\n this.suggestions = value;\n this.searching = false;\n this.cdr.markForCheck();\n },\n (_error: Error) => {\n this.suggestions = [];\n this.searching = false;\n this.cdr.markForCheck();\n },\n );\n }\n getRecentSearches() {\n if (\n !this.config.hideRecentSearch &&\n this.searchService.recentSearchApiRequest\n ) {\n this.searchService.recentSearchApiRequest().subscribe(\n (value: ISearchQuery[]) => {\n this.recentSearches = value;\n this.cdr.markForCheck();\n },\n (_error: Error) => {\n this.recentSearches = [];\n this.cdr.markForCheck();\n },\n );\n }\n }\n\n // event can be KeyBoardEvent or Event of type 'change' fired on change in value of drop down for category\n hitSearchApi(event?: Event) {\n // this will happen only in case user searches something and then erases it, we need to update recent search\n if (!this.searchBoxInput) {\n this.suggestions = [];\n this.getRecentSearches();\n return;\n }\n\n // no debounce time needed in case of searchOnlyOnEnter\n if (this.config.searchOnlyOnEnter) {\n if (!event || (event instanceof KeyboardEvent && event.key === 'Enter')) {\n this.getSuggestions({input: this.searchBoxInput, event});\n }\n return;\n }\n\n // no debounce time needed in case of change in category\n if (!event) {\n this.getSuggestions({input: this.searchBoxInput, event});\n return;\n }\n\n this.searchRequest$.next({\n input: this.searchBoxInput,\n event,\n });\n }\n\n populateValue(suggestion: T, event: MouseEvent) {\n const value = suggestion[\n this.config.displayPropertyName\n ] as unknown as string; // converted to string to assign value to searchBoxInput\n this.searchBoxInput = value;\n this.suggestionsDisplay = false;\n // ngModelChange doesn't detect change in value when populated from outside, hence calling manually\n this.onChange(this.searchBoxInput);\n // need to do this to show more search options for selected suggestion - just in case user reopens search input\n this.getSuggestions({input: this.searchBoxInput, event});\n this.clicked.emit({item: suggestion, event});\n }\n populateValueRecentSearch(recentSearch: ISearchQuery, event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n const value = recentSearch['match'];\n this.searchBoxInput = value;\n this.suggestionsDisplay = false;\n this.onChange(this.searchBoxInput);\n // need to do this to show more search options for selected suggestion - just in case user reopens search input\n this.getSuggestions({input: this.searchBoxInput, event});\n this.focusInput();\n this.showSuggestions();\n }\n\n fetchModelImageUrlFromSuggestion(suggestion: T) {\n const modelName = suggestion[\n 'source' as unknown as keyof T\n ] as unknown as string;\n let url: string | undefined;\n this.config.models.forEach(model => {\n if (model.name === modelName && model.imageUrl) {\n url = model.imageUrl;\n }\n });\n return url;\n }\n\n boldString(str: T[keyof T] | string, substr: string) {\n const strRegExp = new RegExp(`(${substr})`, 'gi');\n const stringToMakeBold: string = str as unknown as string;\n return stringToMakeBold.replace(strRegExp, `<b>$1</b>`);\n }\n\n hideSuggestions() {\n this.suggestionsDisplay = false;\n this.onTouched();\n }\n\n showSuggestions() {\n this.suggestionsDisplay = true;\n this.getRecentSearches();\n }\n\n focusInput() {\n if (isPlatformBrowser(this.platformId)) {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n setCategory(category: string) {\n this.category = category;\n this.categoryDisplay = false;\n if (this.searchBoxInput) {\n this.hitSearchApi();\n this.focusInput();\n this.showSuggestions();\n }\n }\n\n showCategory() {\n this.categoryDisplay = !this.categoryDisplay;\n }\n\n hideCategory() {\n this.categoryDisplay = false;\n }\n\n resetInput() {\n this.searchBoxInput = '';\n this.suggestions = [];\n this.suggestionsDisplay = true;\n this.focusInput();\n // ngModelChange doesn't detect change in value when populated from outside, hence calling manually\n this.onChange(this.searchBoxInput);\n this.getRecentSearches();\n }\n ngOnDestroy() {\n this.searchRequest$.unsubscribe();\n }\n\n _categoryToSourceName(category: string) {\n if (category === ALL_LABEL) {\n return [];\n } else {\n return [category];\n }\n }\n getModelFromModelName(name: string) {\n return this.config.models.find(item => item.name === name) as IModel;\n }\n getModelsWithSuggestions() {\n const modelsWithSuggestions: {model: IModel; items: T[]}[] = [];\n const sources: string[] = [];\n this.suggestions.forEach(suggestion => {\n if (sources.indexOf(suggestion['source']) >= 0) {\n modelsWithSuggestions.every(modelWithSuggestions => {\n if (modelWithSuggestions.model.name === suggestion['source']) {\n modelWithSuggestions.items.push(suggestion);\n return false;\n }\n return true;\n });\n } else {\n const model = this.getModelFromModelName(suggestion['source']);\n modelsWithSuggestions.push({model, items: [suggestion]});\n sources.push(suggestion['source']);\n }\n });\n return modelsWithSuggestions;\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSelectModule} from '@angular/material/select';\n\nimport {SearchComponent} from './search/search.component';\n\n@NgModule({\n declarations: [SearchComponent],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n FlexLayoutModule,\n ],\n exports: [SearchComponent],\n})\nexport class SearchLibModule {}\n","import {IDefaultReturnType, IModel} from './types';\nexport class Configuration<T = IDefaultReturnType> {\n /** property to be displayed in the results */\n displayPropertyName: keyof T;\n /** list of model configuration to be render and categorize search results */\n models: IModel[];\n /** max number of results (based on limitByType option) */\n limit?: number;\n /** apply limit on individual models, or on overall results */\n limitByType?: boolean;\n /** apply a particular ordering on results */\n order?: string[];\n /** offset for results in case limit is used */\n offset?: number;\n /** save the search query in recent history */\n saveInRecents?: boolean;\n /** a placeholder to display in the search box */\n placeholder?: string;\n /** a function to generate placeholder, overrides the placeholder property */\n placeholderFunction?: (input: string, category: string) => string;\n /** categorize results on the basis of models provided */\n categorizeResults?: boolean;\n /** hides the recent search list */\n hideRecentSearch?: boolean;\n /** hide the category selection button */\n hideCategorizeButton?: boolean;\n /** save value in recent search only on enter or change in category, if false, also saved on typing */\n saveInRecentsOnlyOnEnter?: boolean;\n /** search only on enter key or when category is changed */\n searchOnlyOnEnter?: boolean;\n noResultMessage?: string;\n searchIconClass?: string;\n crossIconClass?: string;\n dropDownButtonIconClass?: string;\n recentSearchIconClass?: string;\n\n constructor(d: Configuration<T>) {\n checkForError(d);\n this.displayPropertyName = d.displayPropertyName;\n this.models = d.models;\n\n /* IRequestParameters - will be given default values before call is made in case undefined/null,\n otherwise there ! is used on which sonar gives code smell */\n this.limit = d.limit;\n this.limitByType = d.limitByType;\n this.order = d.order;\n this.offset = d.offset;\n this.saveInRecents = d.saveInRecents;\n\n const displayTexts = setDisplayText(d);\n this.noResultMessage = displayTexts.noResultMessage;\n this.placeholder = displayTexts.placeholder;\n this.placeholderFunction = displayTexts.placeholderFunction;\n\n const searchConfig = setSearchConfig(d);\n this.categorizeResults = searchConfig.categorizeResults;\n this.hideRecentSearch = searchConfig.hideRecentSearch;\n this.hideCategorizeButton = searchConfig.hideCategorizeButton;\n this.saveInRecentsOnlyOnEnter = searchConfig.saveInRecentsOnlyOnEnter;\n this.searchOnlyOnEnter = searchConfig.searchOnlyOnEnter;\n\n const classes = setIconClasses(d);\n this.searchIconClass = classes.searchIconClass;\n this.crossIconClass = classes.crossIconClass;\n this.dropDownButtonIconClass = classes.dropDownButtonIconClass;\n this.recentSearchIconClass = classes.recentSearchIconClass;\n }\n}\nfunction checkForError<T>(d: Configuration<T>) {\n if (\n d.categorizeResults === false &&\n (d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)\n ) {\n throw new Error(\n 'You must provide hideCategorizeButton:true as categorizeResults is false',\n );\n }\n if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {\n throw new Error(\n 'You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true',\n );\n }\n}\nfunction setDisplayText<T>(d: Configuration<T>) {\n return {\n placeholder: d.placeholder ?? 'Search',\n noResultMessage: d.noResultMessage ?? 'No result found',\n placeholderFunction: d.placeholderFunction,\n };\n}\nfunction setSearchConfig<T>(d: Configuration<T>) {\n return {\n categorizeResults: d.categorizeResults ?? true,\n hideRecentSearch: d.hideRecentSearch ?? false,\n hideCategorizeButton: d.hideCategorizeButton ?? false,\n saveInRecentsOnlyOnEnter: d.saveInRecentsOnlyOnEnter ?? false,\n searchOnlyOnEnter: d.searchOnlyOnEnter ?? false,\n };\n}\nfunction setIconClasses<T>(d: Configuration<T>) {\n return {\n searchIconClass: d.searchIconClass ?? 'icomoon Search',\n crossIconClass: d.crossIconClass ?? 'icomoon close',\n dropDownButtonIconClass: d.dropDownButtonIconClass ?? 'icomoon arrow_down',\n recentSearchIconClass: d.recentSearchIconClass ?? 'icomoon Search',\n };\n}\n","/*\n * Public API Surface of my-lib\n */\n\nexport * from './lib/search-lib.module';\nexport * from './lib/search/search.component';\nexport * from './lib/lib-configuration';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["InjectionToken","Subject","EventEmitter","tap","debounceTime","isPlatformBrowser","Component","NG_VALUE_ACCESSOR","Inject","PLATFORM_ID","ChangeDetectorRef","Input","Output","ViewChild","NgModule","CommonModule","FormsModule","HttpClientModule","MatSelectModule","MatFormFieldModule","MatIconModule","MatInputModule","FlexLayoutModule"],"mappings":"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"}
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
export class Configuration {
|
|
2
2
|
constructor(d) {
|
|
3
|
-
|
|
4
|
-
if (d.categorizeResults === false &&
|
|
5
|
-
(d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)) {
|
|
6
|
-
throw new Error('You must provide hideCategorizeButton:true as categorizeResults is false');
|
|
7
|
-
}
|
|
8
|
-
if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {
|
|
9
|
-
throw new Error('You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true');
|
|
10
|
-
}
|
|
3
|
+
checkForError(d);
|
|
11
4
|
this.displayPropertyName = d.displayPropertyName;
|
|
12
5
|
this.models = d.models;
|
|
13
|
-
this.placeholder = (_a = d.placeholder) !== null && _a !== void 0 ? _a : 'Search';
|
|
14
|
-
this.placeholderFunction = d.placeholderFunction;
|
|
15
6
|
/* IRequestParameters - will be given default values before call is made in case undefined/null,
|
|
16
7
|
otherwise there ! is used on which sonar gives code smell */
|
|
17
8
|
this.limit = d.limit;
|
|
@@ -19,12 +10,57 @@ export class Configuration {
|
|
|
19
10
|
this.order = d.order;
|
|
20
11
|
this.offset = d.offset;
|
|
21
12
|
this.saveInRecents = d.saveInRecents;
|
|
22
|
-
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
this.
|
|
13
|
+
const displayTexts = setDisplayText(d);
|
|
14
|
+
this.noResultMessage = displayTexts.noResultMessage;
|
|
15
|
+
this.placeholder = displayTexts.placeholder;
|
|
16
|
+
this.placeholderFunction = displayTexts.placeholderFunction;
|
|
17
|
+
const searchConfig = setSearchConfig(d);
|
|
18
|
+
this.categorizeResults = searchConfig.categorizeResults;
|
|
19
|
+
this.hideRecentSearch = searchConfig.hideRecentSearch;
|
|
20
|
+
this.hideCategorizeButton = searchConfig.hideCategorizeButton;
|
|
21
|
+
this.saveInRecentsOnlyOnEnter = searchConfig.saveInRecentsOnlyOnEnter;
|
|
22
|
+
this.searchOnlyOnEnter = searchConfig.searchOnlyOnEnter;
|
|
23
|
+
const classes = setIconClasses(d);
|
|
24
|
+
this.searchIconClass = classes.searchIconClass;
|
|
25
|
+
this.crossIconClass = classes.crossIconClass;
|
|
26
|
+
this.dropDownButtonIconClass = classes.dropDownButtonIconClass;
|
|
27
|
+
this.recentSearchIconClass = classes.recentSearchIconClass;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
function checkForError(d) {
|
|
31
|
+
if (d.categorizeResults === false &&
|
|
32
|
+
(d.hideCategorizeButton === false || d.hideCategorizeButton === undefined)) {
|
|
33
|
+
throw new Error('You must provide hideCategorizeButton:true as categorizeResults is false');
|
|
34
|
+
}
|
|
35
|
+
if (d.saveInRecents === false && d.saveInRecentsOnlyOnEnter === true) {
|
|
36
|
+
throw new Error('You must provide saveInRecents:true for saveInRecentsOnlyOnEnter:true');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function setDisplayText(d) {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
return {
|
|
42
|
+
placeholder: (_a = d.placeholder) !== null && _a !== void 0 ? _a : 'Search',
|
|
43
|
+
noResultMessage: (_b = d.noResultMessage) !== null && _b !== void 0 ? _b : 'No result found',
|
|
44
|
+
placeholderFunction: d.placeholderFunction,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function setSearchConfig(d) {
|
|
48
|
+
var _a, _b, _c, _d, _e;
|
|
49
|
+
return {
|
|
50
|
+
categorizeResults: (_a = d.categorizeResults) !== null && _a !== void 0 ? _a : true,
|
|
51
|
+
hideRecentSearch: (_b = d.hideRecentSearch) !== null && _b !== void 0 ? _b : false,
|
|
52
|
+
hideCategorizeButton: (_c = d.hideCategorizeButton) !== null && _c !== void 0 ? _c : false,
|
|
53
|
+
saveInRecentsOnlyOnEnter: (_d = d.saveInRecentsOnlyOnEnter) !== null && _d !== void 0 ? _d : false,
|
|
54
|
+
searchOnlyOnEnter: (_e = d.searchOnlyOnEnter) !== null && _e !== void 0 ? _e : false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function setIconClasses(d) {
|
|
58
|
+
var _a, _b, _c, _d;
|
|
59
|
+
return {
|
|
60
|
+
searchIconClass: (_a = d.searchIconClass) !== null && _a !== void 0 ? _a : 'icomoon Search',
|
|
61
|
+
crossIconClass: (_b = d.crossIconClass) !== null && _b !== void 0 ? _b : 'icomoon close',
|
|
62
|
+
dropDownButtonIconClass: (_c = d.dropDownButtonIconClass) !== null && _c !== void 0 ? _c : 'icomoon arrow_down',
|
|
63
|
+
recentSearchIconClass: (_d = d.recentSearchIconClass) !== null && _d !== void 0 ? _d : 'icomoon Search',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2xpYi1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sT0FBTyxhQUFhO0lBbUN4QixZQUFZLENBQW1CO1FBQzdCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV2QjtvRUFDNEQ7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUVyQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDO1FBRTVELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDdEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFeEQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDN0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztRQUMvRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQzdELENBQUM7Q0FDRjtBQUNELFNBQVMsYUFBYSxDQUFJLENBQW1CO0lBQzNDLElBQ0UsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLEtBQUs7UUFDN0IsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLENBQUMsRUFDMUU7UUFDQSxNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxDQUMzRSxDQUFDO0tBQ0g7SUFDRCxJQUFJLENBQUMsQ0FBQyxhQUFhLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLEVBQUU7UUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFJLENBQW1COztJQUM1QyxPQUFPO1FBQ0wsV0FBVyxFQUFFLE1BQUEsQ0FBQyxDQUFDLFdBQVcsbUNBQUksUUFBUTtRQUN0QyxlQUFlLEVBQUUsTUFBQSxDQUFDLENBQUMsZUFBZSxtQ0FBSSxpQkFBaUI7UUFDdkQsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtLQUMzQyxDQUFDO0FBQ0osQ0FBQztBQUNELFNBQVMsZUFBZSxDQUFJLENBQW1COztJQUM3QyxPQUFPO1FBQ0wsaUJBQWlCLEVBQUUsTUFBQSxDQUFDLENBQUMsaUJBQWlCLG1DQUFJLElBQUk7UUFDOUMsZ0JBQWdCLEVBQUUsTUFBQSxDQUFDLENBQUMsZ0JBQWdCLG1DQUFJLEtBQUs7UUFDN0Msb0JBQW9CLEVBQUUsTUFBQSxDQUFDLENBQUMsb0JBQW9CLG1DQUFJLEtBQUs7UUFDckQsd0JBQXdCLEVBQUUsTUFBQSxDQUFDLENBQUMsd0JBQXdCLG1DQUFJLEtBQUs7UUFDN0QsaUJBQWlCLEVBQUUsTUFBQSxDQUFDLENBQUMsaUJBQWlCLG1DQUFJLEtBQUs7S0FDaEQsQ0FBQztBQUNKLENBQUM7QUFDRCxTQUFTLGNBQWMsQ0FBSSxDQUFtQjs7SUFDNUMsT0FBTztRQUNMLGVBQWUsRUFBRSxNQUFBLENBQUMsQ0FBQyxlQUFlLG1DQUFJLGdCQUFnQjtRQUN0RCxjQUFjLEVBQUUsTUFBQSxDQUFDLENBQUMsY0FBYyxtQ0FBSSxlQUFlO1FBQ25ELHVCQUF1QixFQUFFLE1BQUEsQ0FBQyxDQUFDLHVCQUF1QixtQ0FBSSxvQkFBb0I7UUFDMUUscUJBQXFCLEVBQUUsTUFBQSxDQUFDLENBQUMscUJBQXFCLG1DQUFJLGdCQUFnQjtLQUNuRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SURlZmF1bHRSZXR1cm5UeXBlLCBJTW9kZWx9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb248VCA9IElEZWZhdWx0UmV0dXJuVHlwZT4ge1xuICAvKiogcHJvcGVydHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHRzICovXG4gIGRpc3BsYXlQcm9wZXJ0eU5hbWU6IGtleW9mIFQ7XG4gIC8qKiBsaXN0IG9mIG1vZGVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgcmVuZGVyIGFuZCBjYXRlZ29yaXplIHNlYXJjaCByZXN1bHRzICovXG4gIG1vZGVsczogSU1vZGVsW107XG4gIC8qKiBtYXggbnVtYmVyIG9mIHJlc3VsdHMgKGJhc2VkIG9uIGxpbWl0QnlUeXBlIG9wdGlvbikgKi9cbiAgbGltaXQ/OiBudW1iZXI7XG4gIC8qKiBhcHBseSBsaW1pdCBvbiBpbmRpdmlkdWFsIG1vZGVscywgb3Igb24gb3ZlcmFsbCByZXN1bHRzICovXG4gIGxpbWl0QnlUeXBlPzogYm9vbGVhbjtcbiAgLyoqIGFwcGx5IGEgcGFydGljdWxhciBvcmRlcmluZyBvbiByZXN1bHRzICovXG4gIG9yZGVyPzogc3RyaW5nW107XG4gIC8qKiBvZmZzZXQgZm9yIHJlc3VsdHMgaW4gY2FzZSBsaW1pdCBpcyB1c2VkICovXG4gIG9mZnNldD86IG51bWJlcjtcbiAgLyoqIHNhdmUgdGhlIHNlYXJjaCBxdWVyeSBpbiByZWNlbnQgaGlzdG9yeSAqL1xuICBzYXZlSW5SZWNlbnRzPzogYm9vbGVhbjtcbiAgLyoqIGEgcGxhY2Vob2xkZXIgdG8gZGlzcGxheSBpbiB0aGUgc2VhcmNoIGJveCAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgcGxhY2Vob2xkZXIsIG92ZXJyaWRlcyB0aGUgcGxhY2Vob2xkZXIgcHJvcGVydHkgKi9cbiAgcGxhY2Vob2xkZXJGdW5jdGlvbj86IChpbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKiBjYXRlZ29yaXplIHJlc3VsdHMgb24gdGhlIGJhc2lzIG9mIG1vZGVscyBwcm92aWRlZCAqL1xuICBjYXRlZ29yaXplUmVzdWx0cz86IGJvb2xlYW47XG4gIC8qKiBoaWRlcyB0aGUgcmVjZW50IHNlYXJjaCBsaXN0ICovXG4gIGhpZGVSZWNlbnRTZWFyY2g/OiBib29sZWFuO1xuICAvKiogaGlkZSB0aGUgY2F0ZWdvcnkgc2VsZWN0aW9uIGJ1dHRvbiAqL1xuICBoaWRlQ2F0ZWdvcml6ZUJ1dHRvbj86IGJvb2xlYW47XG4gIC8qKiBzYXZlIHZhbHVlIGluIHJlY2VudCBzZWFyY2ggb25seSBvbiBlbnRlciBvciBjaGFuZ2UgaW4gY2F0ZWdvcnksIGlmIGZhbHNlLCBhbHNvIHNhdmVkIG9uIHR5cGluZyAqL1xuICBzYXZlSW5SZWNlbnRzT25seU9uRW50ZXI/OiBib29sZWFuO1xuICAvKiogc2VhcmNoIG9ubHkgb24gZW50ZXIga2V5IG9yIHdoZW4gY2F0ZWdvcnkgaXMgY2hhbmdlZCAqL1xuICBzZWFyY2hPbmx5T25FbnRlcj86IGJvb2xlYW47XG4gIG5vUmVzdWx0TWVzc2FnZT86IHN0cmluZztcbiAgc2VhcmNoSWNvbkNsYXNzPzogc3RyaW5nO1xuICBjcm9zc0ljb25DbGFzcz86IHN0cmluZztcbiAgZHJvcERvd25CdXR0b25JY29uQ2xhc3M/OiBzdHJpbmc7XG4gIHJlY2VudFNlYXJjaEljb25DbGFzcz86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihkOiBDb25maWd1cmF0aW9uPFQ+KSB7XG4gICAgY2hlY2tGb3JFcnJvcihkKTtcbiAgICB0aGlzLmRpc3BsYXlQcm9wZXJ0eU5hbWUgPSBkLmRpc3BsYXlQcm9wZXJ0eU5hbWU7XG4gICAgdGhpcy5tb2RlbHMgPSBkLm1vZGVscztcblxuICAgIC8qIElSZXF1ZXN0UGFyYW1ldGVycyAtIHdpbGwgYmUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZXMgYmVmb3JlIGNhbGwgaXMgbWFkZSBpbiBjYXNlIHVuZGVmaW5lZC9udWxsLFxuICAgIG90aGVyd2lzZSB0aGVyZSAhIGlzIHVzZWQgb24gd2hpY2ggc29uYXIgZ2l2ZXMgY29kZSBzbWVsbCAqL1xuICAgIHRoaXMubGltaXQgPSBkLmxpbWl0O1xuICAgIHRoaXMubGltaXRCeVR5cGUgPSBkLmxpbWl0QnlUeXBlO1xuICAgIHRoaXMub3JkZXIgPSBkLm9yZGVyO1xuICAgIHRoaXMub2Zmc2V0ID0gZC5vZmZzZXQ7XG4gICAgdGhpcy5zYXZlSW5SZWNlbnRzID0gZC5zYXZlSW5SZWNlbnRzO1xuXG4gICAgY29uc3QgZGlzcGxheVRleHRzID0gc2V0RGlzcGxheVRleHQoZCk7XG4gICAgdGhpcy5ub1Jlc3VsdE1lc3NhZ2UgPSBkaXNwbGF5VGV4dHMubm9SZXN1bHRNZXNzYWdlO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBkaXNwbGF5VGV4dHMucGxhY2Vob2xkZXI7XG4gICAgdGhpcy5wbGFjZWhvbGRlckZ1bmN0aW9uID0gZGlzcGxheVRleHRzLnBsYWNlaG9sZGVyRnVuY3Rpb247XG5cbiAgICBjb25zdCBzZWFyY2hDb25maWcgPSBzZXRTZWFyY2hDb25maWcoZCk7XG4gICAgdGhpcy5jYXRlZ29yaXplUmVzdWx0cyA9IHNlYXJjaENvbmZpZy5jYXRlZ29yaXplUmVzdWx0cztcbiAgICB0aGlzLmhpZGVSZWNlbnRTZWFyY2ggPSBzZWFyY2hDb25maWcuaGlkZVJlY2VudFNlYXJjaDtcbiAgICB0aGlzLmhpZGVDYXRlZ29yaXplQnV0dG9uID0gc2VhcmNoQ29uZmlnLmhpZGVDYXRlZ29yaXplQnV0dG9uO1xuICAgIHRoaXMuc2F2ZUluUmVjZW50c09ubHlPbkVudGVyID0gc2VhcmNoQ29uZmlnLnNhdmVJblJlY2VudHNPbmx5T25FbnRlcjtcbiAgICB0aGlzLnNlYXJjaE9ubHlPbkVudGVyID0gc2VhcmNoQ29uZmlnLnNlYXJjaE9ubHlPbkVudGVyO1xuXG4gICAgY29uc3QgY2xhc3NlcyA9IHNldEljb25DbGFzc2VzKGQpO1xuICAgIHRoaXMuc2VhcmNoSWNvbkNsYXNzID0gY2xhc3Nlcy5zZWFyY2hJY29uQ2xhc3M7XG4gICAgdGhpcy5jcm9zc0ljb25DbGFzcyA9IGNsYXNzZXMuY3Jvc3NJY29uQ2xhc3M7XG4gICAgdGhpcy5kcm9wRG93bkJ1dHRvbkljb25DbGFzcyA9IGNsYXNzZXMuZHJvcERvd25CdXR0b25JY29uQ2xhc3M7XG4gICAgdGhpcy5yZWNlbnRTZWFyY2hJY29uQ2xhc3MgPSBjbGFzc2VzLnJlY2VudFNlYXJjaEljb25DbGFzcztcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tGb3JFcnJvcjxUPihkOiBDb25maWd1cmF0aW9uPFQ+KSB7XG4gIGlmIChcbiAgICBkLmNhdGVnb3JpemVSZXN1bHRzID09PSBmYWxzZSAmJlxuICAgIChkLmhpZGVDYXRlZ29yaXplQnV0dG9uID09PSBmYWxzZSB8fCBkLmhpZGVDYXRlZ29yaXplQnV0dG9uID09PSB1bmRlZmluZWQpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdZb3UgbXVzdCBwcm92aWRlIGhpZGVDYXRlZ29yaXplQnV0dG9uOnRydWUgYXMgY2F0ZWdvcml6ZVJlc3VsdHMgaXMgZmFsc2UnLFxuICAgICk7XG4gIH1cbiAgaWYgKGQuc2F2ZUluUmVjZW50cyA9PT0gZmFsc2UgJiYgZC5zYXZlSW5SZWNlbnRzT25seU9uRW50ZXIgPT09IHRydWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnWW91IG11c3QgcHJvdmlkZSBzYXZlSW5SZWNlbnRzOnRydWUgZm9yIHNhdmVJblJlY2VudHNPbmx5T25FbnRlcjp0cnVlJyxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBzZXREaXNwbGF5VGV4dDxUPihkOiBDb25maWd1cmF0aW9uPFQ+KSB7XG4gIHJldHVybiB7XG4gICAgcGxhY2Vob2xkZXI6IGQucGxhY2Vob2xkZXIgPz8gJ1NlYXJjaCcsXG4gICAgbm9SZXN1bHRNZXNzYWdlOiBkLm5vUmVzdWx0TWVzc2FnZSA/PyAnTm8gcmVzdWx0IGZvdW5kJyxcbiAgICBwbGFjZWhvbGRlckZ1bmN0aW9uOiBkLnBsYWNlaG9sZGVyRnVuY3Rpb24sXG4gIH07XG59XG5mdW5jdGlvbiBzZXRTZWFyY2hDb25maWc8VD4oZDogQ29uZmlndXJhdGlvbjxUPikge1xuICByZXR1cm4ge1xuICAgIGNhdGVnb3JpemVSZXN1bHRzOiBkLmNhdGVnb3JpemVSZXN1bHRzID8/IHRydWUsXG4gICAgaGlkZVJlY2VudFNlYXJjaDogZC5oaWRlUmVjZW50U2VhcmNoID8/IGZhbHNlLFxuICAgIGhpZGVDYXRlZ29yaXplQnV0dG9uOiBkLmhpZGVDYXRlZ29yaXplQnV0dG9uID8/IGZhbHNlLFxuICAgIHNhdmVJblJlY2VudHNPbmx5T25FbnRlcjogZC5zYXZlSW5SZWNlbnRzT25seU9uRW50ZXIgPz8gZmFsc2UsXG4gICAgc2VhcmNoT25seU9uRW50ZXI6IGQuc2VhcmNoT25seU9uRW50ZXIgPz8gZmFsc2UsXG4gIH07XG59XG5mdW5jdGlvbiBzZXRJY29uQ2xhc3NlczxUPihkOiBDb25maWd1cmF0aW9uPFQ+KSB7XG4gIHJldHVybiB7XG4gICAgc2VhcmNoSWNvbkNsYXNzOiBkLnNlYXJjaEljb25DbGFzcyA/PyAnaWNvbW9vbiBTZWFyY2gnLFxuICAgIGNyb3NzSWNvbkNsYXNzOiBkLmNyb3NzSWNvbkNsYXNzID8/ICdpY29tb29uIGNsb3NlJyxcbiAgICBkcm9wRG93bkJ1dHRvbkljb25DbGFzczogZC5kcm9wRG93bkJ1dHRvbkljb25DbGFzcyA/PyAnaWNvbW9vbiBhcnJvd19kb3duJyxcbiAgICByZWNlbnRTZWFyY2hJY29uQ2xhc3M6IGQucmVjZW50U2VhcmNoSWNvbkNsYXNzID8/ICdpY29tb29uIFNlYXJjaCcsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"moduleName":null,"summaries":[{"symbol":{"__symbol":0,"members":[]},"metadata":{"__symbolic":"class","arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbol":0,"members":[]}]}]}}}],"symbols":[{"__symbol":0,"name":"Configuration","filePath":"./lib-configuration"}]}
|
|
@@ -270,7 +270,7 @@ export class SearchComponent {
|
|
|
270
270
|
SearchComponent.decorators = [
|
|
271
271
|
{ type: Component, args: [{
|
|
272
272
|
selector: 'sourceloop-search',
|
|
273
|
-
template: "<div fxLayout fxLayoutAlign=\"start center\" class=\"toolbar-search\">\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-input\">\n <input\n matInput\n autocomplete=\"off\"\n type=\"text\"\n [placeholder]=\"\n config.placeholderFunction\n ? config.placeholderFunction(searchInput.value, category)\n : config.placeholder || 'Search'\n \"\n #searchInput\n name=\"searchInput\"\n (focus)=\"showSuggestions()\"\n (blur)=\"hideSuggestions()\"\n [(ngModel)]=\"searchBoxInput\"\n (keyup)=\"hitSearchApi($event)\"\n placeholder=\"Search\"\n (ngModelChange)=\"onChange(this.searchBoxInput)\"\n [disabled]=\"disabled\"\n />\n <mat-icon matPrefix
|
|
273
|
+
template: "<div fxLayout fxLayoutAlign=\"start center\" class=\"toolbar-search\">\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-input\">\n <input\n matInput\n autocomplete=\"off\"\n type=\"text\"\n [placeholder]=\"\n config.placeholderFunction\n ? config.placeholderFunction(searchInput.value, category)\n : config.placeholder || 'Search'\n \"\n #searchInput\n name=\"searchInput\"\n (focus)=\"showSuggestions()\"\n (blur)=\"hideSuggestions()\"\n [(ngModel)]=\"searchBoxInput\"\n (keyup)=\"hitSearchApi($event)\"\n placeholder=\"Search\"\n (ngModelChange)=\"onChange(this.searchBoxInput)\"\n [disabled]=\"disabled\"\n />\n <mat-icon matPrefix [className]=\"config.searchIconClass\"></mat-icon>\n <mat-icon\n *ngIf=\"searchBoxInput\"\n matSuffix\n [className]=\"config.crossIconClass\"\n (click)=\"resetInput()\"\n ></mat-icon>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"toolbar-search-select\">\n <mat-icon matSuffix [className]=\"config.dropDownButtonIconClass\"></mat-icon>\n <mat-select\n [value]=\"category\"\n (selectionChange)=\"setCategory($event.value)\"\n panelClass=\"search-select\"\n >\n <mat-option [value]=\"model.name\" *ngFor=\"let model of config.models\">\n {{ model.displayName }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<div class=\"search-container\">\n <div\n *ngIf=\"suggestionsDisplay && (recentSearches.length || suggestions.length)\"\n class=\"search-popup\"\n >\n <ng-container *ngIf=\"searchBoxInput\">\n <span *ngIf=\"suggestions.length === 0\" class=\"search-message\">\n <ng-container *ngIf=\"searching\"> searching... </ng-container>\n <ng-container *ngIf=\"!searching\">\n {{ config.noResultMessage }}\n </ng-container>\n </span>\n <ng-container *ngIf=\"config.categorizeResults && suggestions.length\">\n <div\n class=\"search-result\"\n *ngFor=\"let modelWithSuggestions of getModelsWithSuggestions()\"\n >\n <h3 class=\"suggestions-heading\">\n <img\n *ngIf=\"modelWithSuggestions.model.imageUrl\"\n [src]=\"modelWithSuggestions.model.imageUrl\"\n [alt]=\"modelWithSuggestions.model.displayName\"\n />\n {{ modelWithSuggestions.model.displayName }} ({{\n modelWithSuggestions.items.length\n }})\n </h3>\n <ul>\n <li\n *ngFor=\"let suggestion of modelWithSuggestions.items\"\n (mousedown)=\"populateValue(suggestion, $event)\"\n class=\"suggestions\"\n >\n <ng-container *ngIf=\"subtitleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n subtitleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n <p\n *ngIf=\"!titleTemplate\"\n [innerHTML]=\"\n boldString(\n suggestion[config.displayPropertyName],\n searchBoxInput\n )\n \"\n style=\"display: inline\"\n ></p>\n <ng-container *ngIf=\"titleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n titleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!config.categorizeResults\">\n <div class=\"search-result\">\n <ul>\n <li\n *ngFor=\"let suggestion of suggestions\"\n (mousedown)=\"populateValue(suggestion, $event)\"\n >\n <!--Need to call fetchModelImageUrlFromSuggestion as each suggestion can come from different model-->\n <img\n *ngIf=\"\n !titleTemplate && fetchModelImageUrlFromSuggestion(suggestion)\n \"\n class=\"suggestions-categorize-false\"\n [src]=\"fetchModelImageUrlFromSuggestion(suggestion)\"\n style=\"margin-right: 5px\"\n alt=\"Img\"\n />\n <ng-container *ngIf=\"subtitleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n subtitleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n <p\n *ngIf=\"!titleTemplate\"\n [innerHTML]=\"\n boldString(\n suggestion[config.displayPropertyName],\n searchBoxInput\n )\n \"\n style=\"display: inline\"\n ></p>\n <ng-container *ngIf=\"titleTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n titleTemplate;\n context: {$implicit: suggestion}\n \"\n >\n </ng-container>\n </ng-container>\n </li>\n </ul>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!config.hideRecentSearch && recentSearches.length > 0\">\n <div class=\"recent-searches\">\n <h3 class=\"suggestions-heading\">Recent Searches</h3>\n <ul>\n <li\n *ngFor=\"let recentSearch of recentSearches\"\n class=\"suggestions\"\n (mousedown)=\"populateValueRecentSearch(recentSearch, $event)\"\n >\n <mat-icon\n matPrefix\n [className]=\"config.recentSearchIconClass\"\n ></mat-icon>\n\n <span> {{ recentSearch.match }}</span>\n </li>\n </ul>\n </div>\n </ng-container>\n </div>\n</div>\n",
|
|
274
274
|
providers: [
|
|
275
275
|
{
|
|
276
276
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -294,4 +294,4 @@ SearchComponent.propDecorators = {
|
|
|
294
294
|
searched: [{ type: Output }],
|
|
295
295
|
searchInputElement: [{ type: ViewChild, args: ['searchInput',] }]
|
|
296
296
|
};
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaC1saWIvc3JjL2xpYi9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sV0FBVyxFQUVYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFHTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixhQUFhLEdBTWQsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBYXhCLE1BQU0sT0FBTyxlQUFlO0lBbUQxQixZQUVtQixhQUFnQztJQUNqRCxxQ0FBcUM7SUFDQyxVQUFrQixFQUN2QyxHQUFzQjtRQUh0QixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFFWCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckR6QyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0Isb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0Qixt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QyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDOzs7WUFoVUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLGl2TkFBc0M7Z0JBRXRDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7O2FBQ0Y7Ozs0Q0FxREksTUFBTSxTQUFDLG9CQUFvQjtZQUdzQixNQUFNLHVCQUF2RCxNQUFNLFNBQUMsV0FBVztZQXZHckIsaUJBQWlCOzs7cUJBZ0VoQixLQUFLOzRCQXFCTCxLQUFLOytCQUNMLEtBQUs7c0JBRUwsTUFBTTt1QkFDTixNQUFNO2lDQVFOLFNBQVMsU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2xpYi1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSVNlYXJjaFNlcnZpY2UsXG4gIElTZWFyY2hRdWVyeSxcbiAgU0VBUkNIX1NFUlZJQ0VfVE9LRU4sXG4gIERFQk9VTkNFX1RJTUUsXG4gIERFRkFVTFRfTElNSVQsXG4gIERFRkFVTFRfTElNSVRfVFlQRSxcbiAgREVGQVVMVF9PRkZTRVQsXG4gIERFRkFVTFRfU0FWRV9JTl9SRUNFTlRTLFxuICBERUZBVUxUX09SREVSLFxuICBJUmV0dXJuVHlwZSxcbiAgUmVjZW50U2VhcmNoRXZlbnQsXG4gIFR5cGVFdmVudCxcbiAgSXRlbUNsaWNrZWRFdmVudCxcbiAgSU1vZGVsLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jb25zdCBBTExfTEFCRUwgPSAnQWxsJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NvdXJjZWxvb3Atc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBTZWFyY2hDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQ8VCBleHRlbmRzIElSZXR1cm5UeXBlPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICBzZWFyY2hCb3hJbnB1dCA9ICcnO1xuICBzdWdnZXN0aW9uc0Rpc3BsYXkgPSBmYWxzZTtcbiAgY2F0ZWdvcnlEaXNwbGF5ID0gZmFsc2U7XG4gIHNlYXJjaGluZyA9IGZhbHNlO1xuICBzdWdnZXN0aW9uczogVFtdID0gW107XG4gIHJlY2VudFNlYXJjaGVzOiBJU2VhcmNoUXVlcnlbXSA9IFtdO1xuICBjYXRlZ29yeTogc3RyaW5nID0gQUxMX0xBQkVMO1xuICBzZWFyY2hSZXF1ZXN0JCA9IG5ldyBTdWJqZWN0PHtpbnB1dDogc3RyaW5nOyBldmVudDogRXZlbnR9PigpO1xuXG4gIHByaXZhdGUgX2NvbmZpZyE6IENvbmZpZ3VyYXRpb248VD47XG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IENvbmZpZ3VyYXRpb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IENvbmZpZ3VyYXRpb248VD4pIHtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tb2RlbHMpIHtcbiAgICAgIHZhbHVlLm1vZGVscy51bnNoaWZ0KHtcbiAgICAgICAgbmFtZTogQUxMX0xBQkVMLFxuICAgICAgICBkaXNwbGF5TmFtZTogQUxMX0xBQkVMLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiAhdmFsdWUubW9kZWxzKSB7XG4gICAgICB2YWx1ZS5tb2RlbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBBTExfTEFCRUwsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IEFMTF9MQUJFTCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSB0aXRsZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgc3VidGl0bGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIC8vIGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBvbmUgb2YgdGhlIHN1Z2dlc3RlZCByZXN1bHRzIChpbmNsdWRpbmcgcmVjZW50IHNlYXJjaCBzdWdlc3Rpb25zKVxuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SXRlbUNsaWNrZWRFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNlbnRTZWFyY2hFdmVudD4oKTtcbiAgLyogZW1pdHRlZCB3aGVuIHVzZXIgbWFrZXMgc2VhcmNoIHJlcXVlc3QgKGluY2x1ZGluZyByZWNlbnQgc2VhcmNoIHJlcXVlc3RzICYgcmVxdWVzdHMgbWFkZSBvbiBjaGFuZ2UgaW4gY2F0ZWdvcnkgZnJvbSBkcm9wZG93bilcbiAgSW4gY2FzZSBvZiByZWNlbnQgc2VhcmNoIEFycmF5IG9mIHJlY2VudCBTZWFyY2ggcmVxdWVzdCByZXN1bHQgaXMgZW1pdHRlZCAqL1xuXG4gIG9uQ2hhbmdlITogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIG9uVG91Y2hlZCE6ICgpID0+IHZvaWQ7XG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBwdWJsaWMgc2VhcmNoSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFNFQVJDSF9TRVJWSUNFX1RPS0VOKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoU2VydmljZTogSVNlYXJjaFNlcnZpY2U8VD4sXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmJhbi10eXBlc1xuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVxdWVzdCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodiA9PiAodGhpcy5zdWdnZXN0aW9ucyA9IFtdKSksXG4gICAgICAgIGRlYm91bmNlVGltZShERUJPVU5DRV9USU1FKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBUeXBlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hlZC5lbWl0KHtcbiAgICAgICAgICBldmVudDogdmFsdWUuZXZlbnQsXG4gICAgICAgICAga2V5d29yZDogdmFsdWUuaW5wdXQsXG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldFN1Z2dlc3Rpb25zKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoQm94SW5wdXQgPSB2YWx1ZTtcbiAgfVxuICAvLyBXaGVuIHRoZSB2YWx1ZSBpbiB0aGUgVUkgaXMgY2hhbmdlZCwgdGhpcyBtZXRob2Qgd2lsbCBpbnZva2UgYSBjYWxsYmFjayBmdW5jdGlvblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgZ2V0U3VnZ2VzdGlvbnMoZXZlbnRWYWx1ZTogVHlwZUV2ZW50KSB7XG4gICAgZXZlbnRWYWx1ZS5pbnB1dCA9IGV2ZW50VmFsdWUuaW5wdXQudHJpbSgpO1xuICAgIGlmICghZXZlbnRWYWx1ZS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLmNvbmZpZy5vcmRlciA/PyBERUZBVUxUX09SREVSO1xuICAgIGxldCBvcmRlclN0cmluZyA9ICcnO1xuICAgIG9yZGVyLmZvckVhY2gocHJlZmVyZW5jZSA9PiAob3JkZXJTdHJpbmcgPSBgJHtvcmRlclN0cmluZ30ke3ByZWZlcmVuY2V9IGApKTtcblxuICAgIGxldCBzYXZlSW5SZWNlbnRzID0gdGhpcy5jb25maWcuc2F2ZUluUmVjZW50cyA/PyBERUZBVUxUX1NBVkVfSU5fUkVDRU5UUztcbiAgICBpZiAodGhpcy5jb25maWcuc2F2ZUluUmVjZW50cyAmJiB0aGlzLmNvbmZpZy5zYXZlSW5SZWNlbnRzT25seU9uRW50ZXIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWV2ZW50VmFsdWUuZXZlbnQgfHxcbiAgICAgICAgKGV2ZW50VmFsdWUuZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50ICYmXG4gICAgICAgICAgZXZlbnRWYWx1ZS5ldmVudC5rZXkgPT09ICdFbnRlcicpXG4gICAgICApIHtcbiAgICAgICAgc2F2ZUluUmVjZW50cyA9IHRydWU7IC8vIHNhdmUgaW4gcmVjZW50cyBvbmx5IG9uIGVudGVyIG9yIGNoYW5nZSBpbiBjYXRlZ29yeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG8gbm90IHNhdmUgaW4gcmVjZW50IHNlYXJjaCBvbiB0eXBpbmdcbiAgICAgICAgc2F2ZUluUmVjZW50cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBuZWVkIHRvIHB1dCBkZWZhdWx0IHZhbHVlIGhlcmUgYW5kIG5vdCBpbiBjb250cnVjdG9yXG4gICAgYmVjYXVzZSBzb25hciB3YXMgZ2l2aW5nIGNvZGUgc21lbGwgd2l0aCBkZWZpbml0ZSBhc3NlcnRpb24gYXMgYWxsIHRoZXNlIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsICovXG4gICAgY29uc3QgcmVxdWVzdFBhcmFtZXRlcnM6IElTZWFyY2hRdWVyeSA9IHtcbiAgICAgIG1hdGNoOiBldmVudFZhbHVlLmlucHV0LFxuICAgICAgc291cmNlczogdGhpcy5fY2F0ZWdvcnlUb1NvdXJjZU5hbWUodGhpcy5jYXRlZ29yeSksXG4gICAgICBsaW1pdDogdGhpcy5jb25maWcubGltaXQgPz8gREVGQVVMVF9MSU1JVCxcbiAgICAgIGxpbWl0QnlUeXBlOiB0aGlzLmNvbmZpZy5saW1pdEJ5VHlwZSA/PyBERUZBVUxUX0xJTUlUX1RZUEUsXG4gICAgICBvcmRlcjogb3JkZXJTdHJpbmcsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29uZmlnLm9mZnNldCA/PyBERUZBVUxUX09GRlNFVCxcbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLnNlYXJjaEFwaVJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnMsIHNhdmVJblJlY2VudHMpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAodmFsdWU6IFRbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LFxuICAgICAgICAoX2Vycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuICBnZXRSZWNlbnRTZWFyY2hlcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jb25maWcuaGlkZVJlY2VudFNlYXJjaCAmJlxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlY2VudFNlYXJjaEFwaVJlcXVlc3RcbiAgICApIHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5yZWNlbnRTZWFyY2hBcGlSZXF1ZXN0KCkuc3Vic2NyaWJlKFxuICAgICAgICAodmFsdWU6IElTZWFyY2hRdWVyeVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LFxuICAgICAgICAoX2Vycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXZlbnQgY2FuIGJlIEtleUJvYXJkRXZlbnQgb3IgRXZlbnQgb2YgdHlwZSAnY2hhbmdlJyBmaXJlZCBvbiBjaGFuZ2UgaW4gdmFsdWUgb2YgZHJvcCBkb3duIGZvciBjYXRlZ29yeVxuICBoaXRTZWFyY2hBcGkoZXZlbnQ/OiBFdmVudCkge1xuICAgIC8vIHRoaXMgd2lsbCBoYXBwZW4gb25seSBpbiBjYXNlIHVzZXIgc2VhcmNoZXMgc29tZXRoaW5nIGFuZCB0aGVuIGVyYXNlcyBpdCwgd2UgbmVlZCB0byB1cGRhdGUgcmVjZW50IHNlYXJjaFxuICAgIGlmICghdGhpcy5zZWFyY2hCb3hJbnB1dCkge1xuICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGRlYm91bmNlIHRpbWUgbmVlZGVkIGluIGNhc2Ugb2Ygc2VhcmNoT25seU9uRW50ZXJcbiAgICBpZiAodGhpcy5jb25maWcuc2VhcmNoT25seU9uRW50ZXIpIHtcbiAgICAgIGlmICghZXZlbnQgfHwgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpKSB7XG4gICAgICAgIHRoaXMuZ2V0U3VnZ2VzdGlvbnMoe2lucHV0OiB0aGlzLnNlYXJjaEJveElucHV0LCBldmVudH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIGRlYm91bmNlIHRpbWUgbmVlZGVkIGluIGNhc2Ugb2YgY2hhbmdlIGluIGNhdGVnb3J5XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5nZXRTdWdnZXN0aW9ucyh7aW5wdXQ6IHRoaXMuc2VhcmNoQm94SW5wdXQsIGV2ZW50fSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hSZXF1ZXN0JC5uZXh0KHtcbiAgICAgIGlucHV0OiB0aGlzLnNlYXJjaEJveElucHV0LFxuICAgICAgZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICBwb3B1bGF0ZVZhbHVlKHN1Z2dlc3Rpb246IFQsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBzdWdnZXN0aW9uW1xuICAgICAgdGhpcy5jb25maWcuZGlzcGxheVByb3BlcnR5TmFtZVxuICAgIF0gYXMgdW5rbm93biBhcyBzdHJpbmc7IC8vIGNvbnZlcnRlZCB0byBzdHJpbmcgdG8gYXNzaWduIHZhbHVlIHRvIHNlYXJjaEJveElucHV0XG4gICAgdGhpcy5zZWFyY2hCb3hJbnB1dCA9IHZhbHVlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ID0gZmFsc2U7XG4gICAgLy8gbmdNb2RlbENoYW5nZSBkb2Vzbid0IGRldGVjdCBjaGFuZ2UgaW4gdmFsdWUgd2hlbiBwb3B1bGF0ZWQgZnJvbSBvdXRzaWRlLCBoZW5jZSBjYWxsaW5nIG1hbnVhbGx5XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlYXJjaEJveElucHV0KTtcbiAgICAvLyBuZWVkIHRvIGRvIHRoaXMgdG8gc2hvdyBtb3JlIHNlYXJjaCBvcHRpb25zIGZvciBzZWxlY3RlZCBzdWdnZXN0aW9uIC0ganVzdCBpbiBjYXNlIHVzZXIgcmVvcGVucyBzZWFyY2ggaW5wdXRcbiAgICB0aGlzLmdldFN1Z2dlc3Rpb25zKHtpbnB1dDogdGhpcy5zZWFyY2hCb3hJbnB1dCwgZXZlbnR9KTtcbiAgICB0aGlzLmNsaWNrZWQuZW1pdCh7aXRlbTogc3VnZ2VzdGlvbiwgZXZlbnR9KTtcbiAgfVxuICBwb3B1bGF0ZVZhbHVlUmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogSVNlYXJjaFF1ZXJ5LCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdmFsdWUgPSByZWNlbnRTZWFyY2hbJ21hdGNoJ107XG4gICAgdGhpcy5zZWFyY2hCb3hJbnB1dCA9IHZhbHVlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ID0gZmFsc2U7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlYXJjaEJveElucHV0KTtcbiAgICAvLyBuZWVkIHRvIGRvIHRoaXMgdG8gc2hvdyBtb3JlIHNlYXJjaCBvcHRpb25zIGZvciBzZWxlY3RlZCBzdWdnZXN0aW9uIC0ganVzdCBpbiBjYXNlIHVzZXIgcmVvcGVucyBzZWFyY2ggaW5wdXRcbiAgICB0aGlzLmdldFN1Z2dlc3Rpb25zKHtpbnB1dDogdGhpcy5zZWFyY2hCb3hJbnB1dCwgZXZlbnR9KTtcbiAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucygpO1xuICB9XG5cbiAgZmV0Y2hNb2RlbEltYWdlVXJsRnJvbVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogVCkge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHN1Z2dlc3Rpb25bXG4gICAgICAnc291cmNlJyBhcyB1bmtub3duIGFzIGtleW9mIFRcbiAgICBdIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgIGxldCB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbmZpZy5tb2RlbHMuZm9yRWFjaChtb2RlbCA9PiB7XG4gICAgICBpZiAobW9kZWwubmFtZSA9PT0gbW9kZWxOYW1lICYmIG1vZGVsLmltYWdlVXJsKSB7XG4gICAgICAgIHVybCA9IG1vZGVsLmltYWdlVXJsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBib2xkU3RyaW5nKHN0cjogVFtrZXlvZiBUXSB8IHN0cmluZywgc3Vic3RyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdHJSZWdFeHAgPSBuZXcgUmVnRXhwKGAoJHtzdWJzdHJ9KWAsICdnaScpO1xuICAgIGNvbnN0IHN0cmluZ1RvTWFrZUJvbGQ6IHN0cmluZyA9IHN0ciBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyaW5nVG9NYWtlQm9sZC5yZXBsYWNlKHN0clJlZ0V4cCwgYDxiPiQxPC9iPmApO1xuICB9XG5cbiAgaGlkZVN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIHNob3dTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheSA9IHRydWU7XG4gICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHNldENhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5jYXRlZ29yeURpc3BsYXkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zZWFyY2hCb3hJbnB1dCkge1xuICAgICAgdGhpcy5oaXRTZWFyY2hBcGkoKTtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBzaG93Q2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5jYXRlZ29yeURpc3BsYXkgPSAhdGhpcy5jYXRlZ29yeURpc3BsYXk7XG4gIH1cblxuICBoaWRlQ2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5jYXRlZ29yeURpc3BsYXkgPSBmYWxzZTtcbiAgfVxuXG4gIHJlc2V0SW5wdXQoKSB7XG4gICAgdGhpcy5zZWFyY2hCb3hJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheSA9IHRydWU7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgLy8gbmdNb2RlbENoYW5nZSBkb2Vzbid0IGRldGVjdCBjaGFuZ2UgaW4gdmFsdWUgd2hlbiBwb3B1bGF0ZWQgZnJvbSBvdXRzaWRlLCBoZW5jZSBjYWxsaW5nIG1hbnVhbGx5XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlYXJjaEJveElucHV0KTtcbiAgICB0aGlzLmdldFJlY2VudFNlYXJjaGVzKCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hSZXF1ZXN0JC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgX2NhdGVnb3J5VG9Tb3VyY2VOYW1lKGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICBpZiAoY2F0ZWdvcnkgPT09IEFMTF9MQUJFTCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2NhdGVnb3J5XTtcbiAgICB9XG4gIH1cbiAgZ2V0TW9kZWxGcm9tTW9kZWxOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tb2RlbHMuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gbmFtZSkgYXMgSU1vZGVsO1xuICB9XG4gIGdldE1vZGVsc1dpdGhTdWdnZXN0aW9ucygpIHtcbiAgICBjb25zdCBtb2RlbHNXaXRoU3VnZ2VzdGlvbnM6IHttb2RlbDogSU1vZGVsOyBpdGVtczogVFtdfVtdID0gW107XG4gICAgY29uc3Qgc291cmNlczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zLmZvckVhY2goc3VnZ2VzdGlvbiA9PiB7XG4gICAgICBpZiAoc291cmNlcy5pbmRleE9mKHN1Z2dlc3Rpb25bJ3NvdXJjZSddKSA+PSAwKSB7XG4gICAgICAgIG1vZGVsc1dpdGhTdWdnZXN0aW9ucy5ldmVyeShtb2RlbFdpdGhTdWdnZXN0aW9ucyA9PiB7XG4gICAgICAgICAgaWYgKG1vZGVsV2l0aFN1Z2dlc3Rpb25zLm1vZGVsLm5hbWUgPT09IHN1Z2dlc3Rpb25bJ3NvdXJjZSddKSB7XG4gICAgICAgICAgICBtb2RlbFdpdGhTdWdnZXN0aW9ucy5pdGVtcy5wdXNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWxGcm9tTW9kZWxOYW1lKHN1Z2dlc3Rpb25bJ3NvdXJjZSddKTtcbiAgICAgICAgbW9kZWxzV2l0aFN1Z2dlc3Rpb25zLnB1c2goe21vZGVsLCBpdGVtczogW3N1Z2dlc3Rpb25dfSk7XG4gICAgICAgIHNvdXJjZXMucHVzaChzdWdnZXN0aW9uWydzb3VyY2UnXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsc1dpdGhTdWdnZXN0aW9ucztcbiAgfVxufVxuIl19
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFFWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBR0wsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsYUFBYSxHQU1kLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztBQWF4QixNQUFNLE9BQU8sZUFBZTtJQW1EMUIsWUFFbUIsYUFBZ0M7SUFDakQscUNBQXFDO0lBQ0MsVUFBa0IsRUFDdkMsR0FBc0I7UUFIdEIsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBRVgsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUN2QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJEekMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBbUIsRUFBRSxDQUFD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QyxDQUFDLENBQUM7YUFDcEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQzs7O1lBaFVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixtdE1BQXNDO2dCQUV0QyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGOzthQUNGOzs7NENBcURJLE1BQU0sU0FBQyxvQkFBb0I7WUFHc0IsTUFBTSx1QkFBdkQsTUFBTSxTQUFDLFdBQVc7WUF2R3JCLGlCQUFpQjs7O3FCQWdFaEIsS0FBSzs0QkFxQkwsS0FBSzsrQkFDTCxLQUFLO3NCQUVMLE1BQU07dUJBQ04sTUFBTTtpQ0FRTixTQUFTLFNBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuLi9saWItY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElTZWFyY2hTZXJ2aWNlLFxuICBJU2VhcmNoUXVlcnksXG4gIFNFQVJDSF9TRVJWSUNFX1RPS0VOLFxuICBERUJPVU5DRV9USU1FLFxuICBERUZBVUxUX0xJTUlULFxuICBERUZBVUxUX0xJTUlUX1RZUEUsXG4gIERFRkFVTFRfT0ZGU0VULFxuICBERUZBVUxUX1NBVkVfSU5fUkVDRU5UUyxcbiAgREVGQVVMVF9PUkRFUixcbiAgSVJldHVyblR5cGUsXG4gIFJlY2VudFNlYXJjaEV2ZW50LFxuICBUeXBlRXZlbnQsXG4gIEl0ZW1DbGlja2VkRXZlbnQsXG4gIElNb2RlbCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY29uc3QgQUxMX0xBQkVMID0gJ0FsbCc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzb3VyY2Vsb29wLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogU2VhcmNoQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50PFQgZXh0ZW5kcyBJUmV0dXJuVHlwZT5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgc2VhcmNoQm94SW5wdXQgPSAnJztcbiAgc3VnZ2VzdGlvbnNEaXNwbGF5ID0gZmFsc2U7XG4gIGNhdGVnb3J5RGlzcGxheSA9IGZhbHNlO1xuICBzZWFyY2hpbmcgPSBmYWxzZTtcbiAgc3VnZ2VzdGlvbnM6IFRbXSA9IFtdO1xuICByZWNlbnRTZWFyY2hlczogSVNlYXJjaFF1ZXJ5W10gPSBbXTtcbiAgY2F0ZWdvcnk6IHN0cmluZyA9IEFMTF9MQUJFTDtcbiAgc2VhcmNoUmVxdWVzdCQgPSBuZXcgU3ViamVjdDx7aW5wdXQ6IHN0cmluZzsgZXZlbnQ6IEV2ZW50fT4oKTtcblxuICBwcml2YXRlIF9jb25maWchOiBDb25maWd1cmF0aW9uPFQ+O1xuICBwdWJsaWMgZ2V0IGNvbmZpZygpOiBDb25maWd1cmF0aW9uPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29uZmlnKHZhbHVlOiBDb25maWd1cmF0aW9uPFQ+KSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubW9kZWxzKSB7XG4gICAgICB2YWx1ZS5tb2RlbHMudW5zaGlmdCh7XG4gICAgICAgIG5hbWU6IEFMTF9MQUJFTCxcbiAgICAgICAgZGlzcGxheU5hbWU6IEFMTF9MQUJFTCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgIXZhbHVlLm1vZGVscykge1xuICAgICAgdmFsdWUubW9kZWxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogQUxMX0xBQkVMLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBBTExfTEFCRUwsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgdGl0bGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHN1YnRpdGxlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvLyBlbWl0dGVkIHdoZW4gdXNlciBjbGlja3Mgb25lIG9mIHRoZSBzdWdnZXN0ZWQgcmVzdWx0cyAoaW5jbHVkaW5nIHJlY2VudCBzZWFyY2ggc3VnZXN0aW9ucylcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEl0ZW1DbGlja2VkRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjZW50U2VhcmNoRXZlbnQ+KCk7XG4gIC8qIGVtaXR0ZWQgd2hlbiB1c2VyIG1ha2VzIHNlYXJjaCByZXF1ZXN0IChpbmNsdWRpbmcgcmVjZW50IHNlYXJjaCByZXF1ZXN0cyAmIHJlcXVlc3RzIG1hZGUgb24gY2hhbmdlIGluIGNhdGVnb3J5IGZyb20gZHJvcGRvd24pXG4gIEluIGNhc2Ugb2YgcmVjZW50IHNlYXJjaCBBcnJheSBvZiByZWNlbnQgU2VhcmNoIHJlcXVlc3QgcmVzdWx0IGlzIGVtaXR0ZWQgKi9cblxuICBvbkNoYW5nZSE6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBvblRvdWNoZWQhOiAoKSA9PiB2b2lkO1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JykgcHVibGljIHNlYXJjaElucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChTRUFSQ0hfU0VSVklDRV9UT0tFTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlcnZpY2U6IElTZWFyY2hTZXJ2aWNlPFQ+LFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tdHlwZXNcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJlcXVlc3QkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHYgPT4gKHRoaXMuc3VnZ2VzdGlvbnMgPSBbXSkpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoREVCT1VOQ0VfVElNRSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogVHlwZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoZWQuZW1pdCh7XG4gICAgICAgICAgZXZlbnQ6IHZhbHVlLmV2ZW50LFxuICAgICAgICAgIGtleXdvcmQ6IHZhbHVlLmlucHV0LFxuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRTdWdnZXN0aW9ucyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBJbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEJveElucHV0ID0gdmFsdWU7XG4gIH1cbiAgLy8gV2hlbiB0aGUgdmFsdWUgaW4gdGhlIFVJIGlzIGNoYW5nZWQsIHRoaXMgbWV0aG9kIHdpbGwgaW52b2tlIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGV2ZW50VmFsdWU6IFR5cGVFdmVudCkge1xuICAgIGV2ZW50VmFsdWUuaW5wdXQgPSBldmVudFZhbHVlLmlucHV0LnRyaW0oKTtcbiAgICBpZiAoIWV2ZW50VmFsdWUuaW5wdXQubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5jb25maWcub3JkZXIgPz8gREVGQVVMVF9PUkRFUjtcbiAgICBsZXQgb3JkZXJTdHJpbmcgPSAnJztcbiAgICBvcmRlci5mb3JFYWNoKHByZWZlcmVuY2UgPT4gKG9yZGVyU3RyaW5nID0gYCR7b3JkZXJTdHJpbmd9JHtwcmVmZXJlbmNlfSBgKSk7XG5cbiAgICBsZXQgc2F2ZUluUmVjZW50cyA9IHRoaXMuY29uZmlnLnNhdmVJblJlY2VudHMgPz8gREVGQVVMVF9TQVZFX0lOX1JFQ0VOVFM7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNhdmVJblJlY2VudHMgJiYgdGhpcy5jb25maWcuc2F2ZUluUmVjZW50c09ubHlPbkVudGVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFldmVudFZhbHVlLmV2ZW50IHx8XG4gICAgICAgIChldmVudFZhbHVlLmV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJlxuICAgICAgICAgIGV2ZW50VmFsdWUuZXZlbnQua2V5ID09PSAnRW50ZXInKVxuICAgICAgKSB7XG4gICAgICAgIHNhdmVJblJlY2VudHMgPSB0cnVlOyAvLyBzYXZlIGluIHJlY2VudHMgb25seSBvbiBlbnRlciBvciBjaGFuZ2UgaW4gY2F0ZWdvcnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvIG5vdCBzYXZlIGluIHJlY2VudCBzZWFyY2ggb24gdHlwaW5nXG4gICAgICAgIHNhdmVJblJlY2VudHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogbmVlZCB0byBwdXQgZGVmYXVsdCB2YWx1ZSBoZXJlIGFuZCBub3QgaW4gY29udHJ1Y3RvclxuICAgIGJlY2F1c2Ugc29uYXIgd2FzIGdpdmluZyBjb2RlIHNtZWxsIHdpdGggZGVmaW5pdGUgYXNzZXJ0aW9uIGFzIGFsbCB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCAqL1xuICAgIGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzOiBJU2VhcmNoUXVlcnkgPSB7XG4gICAgICBtYXRjaDogZXZlbnRWYWx1ZS5pbnB1dCxcbiAgICAgIHNvdXJjZXM6IHRoaXMuX2NhdGVnb3J5VG9Tb3VyY2VOYW1lKHRoaXMuY2F0ZWdvcnkpLFxuICAgICAgbGltaXQ6IHRoaXMuY29uZmlnLmxpbWl0ID8/IERFRkFVTFRfTElNSVQsXG4gICAgICBsaW1pdEJ5VHlwZTogdGhpcy5jb25maWcubGltaXRCeVR5cGUgPz8gREVGQVVMVF9MSU1JVF9UWVBFLFxuICAgICAgb3JkZXI6IG9yZGVyU3RyaW5nLFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbmZpZy5vZmZzZXQgPz8gREVGQVVMVF9PRkZTRVQsXG4gICAgfTtcblxuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5zZWFyY2hBcGlSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLCBzYXZlSW5SZWNlbnRzKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHZhbHVlOiBUW10pID0+IHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgKF9lcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cbiAgZ2V0UmVjZW50U2VhcmNoZXMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY29uZmlnLmhpZGVSZWNlbnRTZWFyY2ggJiZcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5yZWNlbnRTZWFyY2hBcGlSZXF1ZXN0XG4gICAgKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVjZW50U2VhcmNoQXBpUmVxdWVzdCgpLnN1YnNjcmliZShcbiAgICAgICAgKHZhbHVlOiBJU2VhcmNoUXVlcnlbXSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgKF9lcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzID0gW107XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV2ZW50IGNhbiBiZSBLZXlCb2FyZEV2ZW50IG9yIEV2ZW50IG9mIHR5cGUgJ2NoYW5nZScgZmlyZWQgb24gY2hhbmdlIGluIHZhbHVlIG9mIGRyb3AgZG93biBmb3IgY2F0ZWdvcnlcbiAgaGl0U2VhcmNoQXBpKGV2ZW50PzogRXZlbnQpIHtcbiAgICAvLyB0aGlzIHdpbGwgaGFwcGVuIG9ubHkgaW4gY2FzZSB1c2VyIHNlYXJjaGVzIHNvbWV0aGluZyBhbmQgdGhlbiBlcmFzZXMgaXQsIHdlIG5lZWQgdG8gdXBkYXRlIHJlY2VudCBzZWFyY2hcbiAgICBpZiAoIXRoaXMuc2VhcmNoQm94SW5wdXQpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBubyBkZWJvdW5jZSB0aW1lIG5lZWRlZCBpbiBjYXNlIG9mIHNlYXJjaE9ubHlPbkVudGVyXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlYXJjaE9ubHlPbkVudGVyKSB7XG4gICAgICBpZiAoIWV2ZW50IHx8IChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInKSkge1xuICAgICAgICB0aGlzLmdldFN1Z2dlc3Rpb25zKHtpbnB1dDogdGhpcy5zZWFyY2hCb3hJbnB1dCwgZXZlbnR9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBubyBkZWJvdW5jZSB0aW1lIG5lZWRlZCBpbiBjYXNlIG9mIGNoYW5nZSBpbiBjYXRlZ29yeVxuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuZ2V0U3VnZ2VzdGlvbnMoe2lucHV0OiB0aGlzLnNlYXJjaEJveElucHV0LCBldmVudH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoUmVxdWVzdCQubmV4dCh7XG4gICAgICBpbnB1dDogdGhpcy5zZWFyY2hCb3hJbnB1dCxcbiAgICAgIGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcG9wdWxhdGVWYWx1ZShzdWdnZXN0aW9uOiBULCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gc3VnZ2VzdGlvbltcbiAgICAgIHRoaXMuY29uZmlnLmRpc3BsYXlQcm9wZXJ0eU5hbWVcbiAgICBdIGFzIHVua25vd24gYXMgc3RyaW5nOyAvLyBjb252ZXJ0ZWQgdG8gc3RyaW5nIHRvIGFzc2lnbiB2YWx1ZSB0byBzZWFyY2hCb3hJbnB1dFxuICAgIHRoaXMuc2VhcmNoQm94SW5wdXQgPSB2YWx1ZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheSA9IGZhbHNlO1xuICAgIC8vIG5nTW9kZWxDaGFuZ2UgZG9lc24ndCBkZXRlY3QgY2hhbmdlIGluIHZhbHVlIHdoZW4gcG9wdWxhdGVkIGZyb20gb3V0c2lkZSwgaGVuY2UgY2FsbGluZyBtYW51YWxseVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWFyY2hCb3hJbnB1dCk7XG4gICAgLy8gbmVlZCB0byBkbyB0aGlzIHRvIHNob3cgbW9yZSBzZWFyY2ggb3B0aW9ucyBmb3Igc2VsZWN0ZWQgc3VnZ2VzdGlvbiAtIGp1c3QgaW4gY2FzZSB1c2VyIHJlb3BlbnMgc2VhcmNoIGlucHV0XG4gICAgdGhpcy5nZXRTdWdnZXN0aW9ucyh7aW5wdXQ6IHRoaXMuc2VhcmNoQm94SW5wdXQsIGV2ZW50fSk7XG4gICAgdGhpcy5jbGlja2VkLmVtaXQoe2l0ZW06IHN1Z2dlc3Rpb24sIGV2ZW50fSk7XG4gIH1cbiAgcG9wdWxhdGVWYWx1ZVJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IElTZWFyY2hRdWVyeSwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHZhbHVlID0gcmVjZW50U2VhcmNoWydtYXRjaCddO1xuICAgIHRoaXMuc2VhcmNoQm94SW5wdXQgPSB2YWx1ZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheSA9IGZhbHNlO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWFyY2hCb3hJbnB1dCk7XG4gICAgLy8gbmVlZCB0byBkbyB0aGlzIHRvIHNob3cgbW9yZSBzZWFyY2ggb3B0aW9ucyBmb3Igc2VsZWN0ZWQgc3VnZ2VzdGlvbiAtIGp1c3QgaW4gY2FzZSB1c2VyIHJlb3BlbnMgc2VhcmNoIGlucHV0XG4gICAgdGhpcy5nZXRTdWdnZXN0aW9ucyh7aW5wdXQ6IHRoaXMuc2VhcmNoQm94SW5wdXQsIGV2ZW50fSk7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMoKTtcbiAgfVxuXG4gIGZldGNoTW9kZWxJbWFnZVVybEZyb21TdWdnZXN0aW9uKHN1Z2dlc3Rpb246IFQpIHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBzdWdnZXN0aW9uW1xuICAgICAgJ3NvdXJjZScgYXMgdW5rbm93biBhcyBrZXlvZiBUXG4gICAgXSBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICBsZXQgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25maWcubW9kZWxzLmZvckVhY2gobW9kZWwgPT4ge1xuICAgICAgaWYgKG1vZGVsLm5hbWUgPT09IG1vZGVsTmFtZSAmJiBtb2RlbC5pbWFnZVVybCkge1xuICAgICAgICB1cmwgPSBtb2RlbC5pbWFnZVVybDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgYm9sZFN0cmluZyhzdHI6IFRba2V5b2YgVF0gfCBzdHJpbmcsIHN1YnN0cjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RyUmVnRXhwID0gbmV3IFJlZ0V4cChgKCR7c3Vic3RyfSlgLCAnZ2knKTtcbiAgICBjb25zdCBzdHJpbmdUb01ha2VCb2xkOiBzdHJpbmcgPSBzdHIgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHN0cmluZ1RvTWFrZUJvbGQucmVwbGFjZShzdHJSZWdFeHAsIGA8Yj4kMTwvYj5gKTtcbiAgfVxuXG4gIGhpZGVTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheSA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBzaG93U3VnZ2VzdGlvbnMoKSB7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXkgPSB0cnVlO1xuICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoZXMoKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuY2F0ZWdvcnlEaXNwbGF5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc2VhcmNoQm94SW5wdXQpIHtcbiAgICAgIHRoaXMuaGl0U2VhcmNoQXBpKCk7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0NhdGVnb3J5KCkge1xuICAgIHRoaXMuY2F0ZWdvcnlEaXNwbGF5ID0gIXRoaXMuY2F0ZWdvcnlEaXNwbGF5O1xuICB9XG5cbiAgaGlkZUNhdGVnb3J5KCkge1xuICAgIHRoaXMuY2F0ZWdvcnlEaXNwbGF5ID0gZmFsc2U7XG4gIH1cblxuICByZXNldElucHV0KCkge1xuICAgIHRoaXMuc2VhcmNoQm94SW5wdXQgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXkgPSB0cnVlO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIC8vIG5nTW9kZWxDaGFuZ2UgZG9lc24ndCBkZXRlY3QgY2hhbmdlIGluIHZhbHVlIHdoZW4gcG9wdWxhdGVkIGZyb20gb3V0c2lkZSwgaGVuY2UgY2FsbGluZyBtYW51YWxseVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWFyY2hCb3hJbnB1dCk7XG4gICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoUmVxdWVzdCQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIF9jYXRlZ29yeVRvU291cmNlTmFtZShjYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ID09PSBBTExfTEFCRUwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtjYXRlZ29yeV07XG4gICAgfVxuICB9XG4gIGdldE1vZGVsRnJvbU1vZGVsTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubW9kZWxzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpIGFzIElNb2RlbDtcbiAgfVxuICBnZXRNb2RlbHNXaXRoU3VnZ2VzdGlvbnMoKSB7XG4gICAgY29uc3QgbW9kZWxzV2l0aFN1Z2dlc3Rpb25zOiB7bW9kZWw6IElNb2RlbDsgaXRlbXM6IFRbXX1bXSA9IFtdO1xuICAgIGNvbnN0IHNvdXJjZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9ucy5mb3JFYWNoKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgaWYgKHNvdXJjZXMuaW5kZXhPZihzdWdnZXN0aW9uWydzb3VyY2UnXSkgPj0gMCkge1xuICAgICAgICBtb2RlbHNXaXRoU3VnZ2VzdGlvbnMuZXZlcnkobW9kZWxXaXRoU3VnZ2VzdGlvbnMgPT4ge1xuICAgICAgICAgIGlmIChtb2RlbFdpdGhTdWdnZXN0aW9ucy5tb2RlbC5uYW1lID09PSBzdWdnZXN0aW9uWydzb3VyY2UnXSkge1xuICAgICAgICAgICAgbW9kZWxXaXRoU3VnZ2VzdGlvbnMuaXRlbXMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsRnJvbU1vZGVsTmFtZShzdWdnZXN0aW9uWydzb3VyY2UnXSk7XG4gICAgICAgIG1vZGVsc1dpdGhTdWdnZXN0aW9ucy5wdXNoKHttb2RlbCwgaXRlbXM6IFtzdWdnZXN0aW9uXX0pO1xuICAgICAgICBzb3VyY2VzLnB1c2goc3VnZ2VzdGlvblsnc291cmNlJ10pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbHNXaXRoU3VnZ2VzdGlvbnM7XG4gIH1cbn1cbiJdfQ==
|