auto-complete.js
26.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { NgModule, Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { SharedModule } from 'primeng/primeng';
import { Request } from '../_services/request.service';
import * as _ from 'lodash';
import { DxSelectBoxModule } from 'devextreme-angular';
import DataSource from 'devextreme/data/data_source';
import CustomStore from 'devextreme/data/custom_store';
import ArrayStore from 'devextreme/data/array_store';
var SocAutoCompleteComponent = /** @class */ (function () {
function SocAutoCompleteComponent(request) {
this.request = request;
this.filteredOptions = [];
/**
* local, remote
*/
this.mode = 'local';
/**
* API ที่ต้องการเรียกใช้เมื่อพิมพ์ auto complete
*/
this.api = '';
/**
* field ที่ต้องการ query เมื่อยิง API
*/
this.field = '';
this.id = '';
this.placeholder = '';
this.disabled = false;
this.orderBy = '';
this.filter = '';
this.limit = 1000;
this.onLoad = new EventEmitter();
this.valueChange = new EventEmitter();
this.resData = [];
this.openOnFieldClick = false;
this.showDropDownButton = false;
this.acceptCustomValue = true;
this.searchEnabled = true;
this.inputValue = '';
this.fnCustomStoreOnLoaded = function (result) {
return result;
};
/**
* START Bind Value
*/
this.onModelChange = function () { };
this.onModelTouched = function () { };
}
/**
* @return {?}
*/
SocAutoCompleteComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (this.mode === 'dropdown') {
this.acceptCustomValue = false;
this.searchEnabled = false;
}
/** ถ้าเป็น โหมด local จะแสดง list ให้เลือกเลย แตถ้่เป็น remote จะต้องขึ้นเมื่อพิมพ์เท่านั้น */
if (this.mode === 'local' || this.mode === 'dropdown') {
this.openOnFieldClick = true;
this.showDropDownButton = true;
this.fnStartDataSourceLocal();
}
else {
this.fnStartDataSourceRemote();
}
return [2 /*return*/];
});
});
};
/**
* @return {?}
*/
SocAutoCompleteComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
SocAutoCompleteComponent.prototype.fnStartDataSourceLocal = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var params, resData;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
params = "?_fields=" + this.field;
if (this.filter) {
params += "&_where=(" + this.filter + ")";
}
if (this.orderBy && this.orderBy !== '') {
params += "&_sort=" + this.orderBy;
}
params += "&_limit=" + this.limit;
return [4 /*yield*/, this.fnPreResponse(params)];
case 1:
resData = _a.sent();
this.ds = new DataSource({
store: new ArrayStore({
data: resData,
onLoaded: this.fnCustomStoreOnLoaded
})
});
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
SocAutoCompleteComponent.prototype.fnStartDataSourceRemote = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
this.ds = new DataSource({
store: new CustomStore({
byKey: function (key) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
this.onLoad.emit(key);
return [2 /*return*/, this.fnGetCustomStore(key)];
});
}); },
load: function (loadOptions) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
this.onLoad.emit(loadOptions.searchValue);
return [2 /*return*/, this.fnGetCustomStore(loadOptions.searchValue)];
});
}); },
onLoaded: this.fnCustomStoreOnLoaded
})
});
return [2 /*return*/];
});
});
};
/**
* @param {?} key
* @return {?}
*/
SocAutoCompleteComponent.prototype.fnGetCustomStore = /**
* @param {?} key
* @return {?}
*/
function (key) {
/** @type {?} */
var params = "?_fields=" + this.field + "&_where=(" + this.field + ",like,$" + key + "$)";
if (this.filter) {
params = "?_fields=" + this.field + "&_where=((" + this.field + ",like,$" + key + "$)$and(" + this.filter + "))";
}
if (this.orderBy && this.orderBy !== '') {
params += "&_sort=" + this.orderBy;
}
params += "&_limit=" + this.limit;
return this.fnPreResponse(params);
;
};
/**
* @param {?} e
* @return {?}
*/
SocAutoCompleteComponent.prototype.onValueChanged = /**
* @param {?} e
* @return {?}
*/
function (e) {
console.log("SocAutoCompleteComponent -> onValueChanged -> e", e);
this.valueChange.emit(e.value);
};
/**
* @param {?} params
* @return {?}
*/
SocAutoCompleteComponent.prototype.fnPreResponse = /**
* @param {?} params
* @return {?}
*/
function (params) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var resData;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.request.get(this.api + params)];
case 1:
resData = _a.sent();
resData = _.map(resData, function (obj) {
return obj[_this.field];
});
resData = _.uniqBy(resData);
return [2 /*return*/, resData];
}
});
});
};
/**
* @param {?} e
* @return {?}
*/
SocAutoCompleteComponent.prototype.onOpened = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var element = document.querySelector('.dx-overlay-wrapper.dx-dropdowneditor-overlay.dx-popup-wrapper.dx-dropdownlist-popup-wrapper.dx-selectbox-popup-wrapper');
element.setAttribute('style', 'z-index:9999;');
};
/**
* @param {?} value
* @return {?}
*/
SocAutoCompleteComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) { };
/**
* @param {?} fn
* @return {?}
*/
SocAutoCompleteComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @param {?} fn
* @return {?}
*/
SocAutoCompleteComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
SocAutoCompleteComponent.decorators = [
{ type: Component, args: [{
selector: 'soc-auto-complete',
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return SocAutoCompleteComponent; }),
multi: true
}],
template: "\n <dx-select-box [dataSource]=\"ds\"\n [searchEnabled]=\"searchEnabled\"\n [openOnFieldClick]=\"openOnFieldClick\"\n [showClearButton]=\"true\"\n [showDropDownButton]=\"showDropDownButton\"\n [inputAttr]=\"{ id: id }\"\n [acceptCustomValue]=\"acceptCustomValue\"\n [placeholder]=\"placeholder\"\n [(value)]=\"value\"\n (onValueChanged)=\"onValueChanged($event)\"\n (onOpened)=\"onOpened($event)\"\n [disabled]=\"disabled\"\n noDataText=\"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\"\n placeholder=\"\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"\n ></dx-select-box>\n"
}] }
];
/** @nocollapse */
SocAutoCompleteComponent.ctorParameters = function () { return [
{ type: Request }
]; };
SocAutoCompleteComponent.propDecorators = {
mode: [{ type: Input }],
api: [{ type: Input }],
field: [{ type: Input }],
id: [{ type: Input }],
placeholder: [{ type: Input }],
value: [{ type: Input }],
disabled: [{ type: Input }],
orderBy: [{ type: Input }],
filter: [{ type: Input }],
limit: [{ type: Input }],
onLoad: [{ type: Output }],
valueChange: [{ type: Output }]
};
return SocAutoCompleteComponent;
}());
export { SocAutoCompleteComponent };
if (false) {
/** @type {?} */
SocAutoCompleteComponent.prototype.filteredOptions;
/**
* local, remote
* @type {?}
*/
SocAutoCompleteComponent.prototype.mode;
/**
* API ที่ต้องการเรียกใช้เมื่อพิมพ์ auto complete
* @type {?}
*/
SocAutoCompleteComponent.prototype.api;
/**
* field ที่ต้องการ query เมื่อยิง API
* @type {?}
*/
SocAutoCompleteComponent.prototype.field;
/** @type {?} */
SocAutoCompleteComponent.prototype.id;
/** @type {?} */
SocAutoCompleteComponent.prototype.placeholder;
/** @type {?} */
SocAutoCompleteComponent.prototype.value;
/** @type {?} */
SocAutoCompleteComponent.prototype.disabled;
/** @type {?} */
SocAutoCompleteComponent.prototype.orderBy;
/** @type {?} */
SocAutoCompleteComponent.prototype.filter;
/** @type {?} */
SocAutoCompleteComponent.prototype.limit;
/** @type {?} */
SocAutoCompleteComponent.prototype.onLoad;
/** @type {?} */
SocAutoCompleteComponent.prototype.valueChange;
/** @type {?} */
SocAutoCompleteComponent.prototype.resData;
/** @type {?} */
SocAutoCompleteComponent.prototype.openOnFieldClick;
/** @type {?} */
SocAutoCompleteComponent.prototype.showDropDownButton;
/** @type {?} */
SocAutoCompleteComponent.prototype.acceptCustomValue;
/** @type {?} */
SocAutoCompleteComponent.prototype.searchEnabled;
/** @type {?} */
SocAutoCompleteComponent.prototype.inputValue;
/**
* ds
* @type {?}
*/
SocAutoCompleteComponent.prototype.ds;
/** @type {?} */
SocAutoCompleteComponent.prototype.fnCustomStoreOnLoaded;
/**
* START Bind Value
* @type {?}
*/
SocAutoCompleteComponent.prototype.onModelChange;
/** @type {?} */
SocAutoCompleteComponent.prototype.onModelTouched;
/** @type {?} */
SocAutoCompleteComponent.prototype.request;
}
var SharedAutoCompleteModule = /** @class */ (function () {
function SharedAutoCompleteModule() {
}
SharedAutoCompleteModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule, SharedModule, DxSelectBoxModule],
exports: [SocAutoCompleteComponent, SharedModule],
declarations: [SocAutoCompleteComponent],
},] }
];
return SharedAutoCompleteModule;
}());
export { SharedAutoCompleteModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jb21wbGV0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9fdGVtcGxhdGUvYXV0by1jb21wbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFDdkUsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQzs7SUFvRGpELGtDQUFvQixPQUFnQjtRQUFoQixZQUFPLEdBQVAsT0FBTyxDQUFTOytCQXhCbEIsRUFBRTs7OztvQkFFNkIsT0FBTzs7OzttQkFFekMsRUFBRTs7OztxQkFFQSxFQUFFO2tCQUNMLEVBQUU7MkJBQ08sRUFBRTt3QkFFTCxLQUFLO3VCQUNOLEVBQUU7c0JBQ0gsRUFBRTtxQkFDSCxJQUFJO3NCQUNpQixJQUFJLFlBQVksRUFBTzsyQkFDZixJQUFJLFlBQVksRUFBVTt1QkFDOUQsRUFBRTtnQ0FDTyxLQUFLO2tDQUNILEtBQUs7aUNBQ04sSUFBSTs2QkFDUixJQUFJOzBCQUNQLEVBQUU7cUNBZ0VTLFVBQUMsTUFB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VUFBa0IsRUFBWSxLQUFXOztnQkF4STVDLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixTQUFTLEVBQUUsQ0FBQzs0QkFDUixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSx3QkFBd0IsRUFBeEIsQ0FBd0IsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ2QsQ0FBQztvQkFDRixRQUFRLEVBQUUseTFCQWdCYjtpQkFDQTs7OztnQkEvQlEsT0FBTzs7O3VCQW1DWCxLQUFLO3NCQUVMLEtBQUs7d0JBRUwsS0FBSztxQkFDTCxLQUFLOzhCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLE1BQU07OEJBQ04sTUFBTTs7bUNBdERYOztTQXNDYSx3QkFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBb0hwQyxRQUFRLFNBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3JFLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQztvQkFDakQsWUFBWSxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQzNDOzttQ0E5SkQ7O1NBK0phLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgTmdNb2R1bGUsIENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJpbWVuZyc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEeFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xuaW1wb3J0IEN1c3RvbVN0b3JlIGZyb20gJ2RldmV4dHJlbWUvZGF0YS9jdXN0b21fc3RvcmUnO1xuaW1wb3J0IEFycmF5U3RvcmUgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2FycmF5X3N0b3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzb2MtYXV0by1jb21wbGV0ZScsXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU29jQXV0b0NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICB9XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwiZHNcIlxuICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInNlYXJjaEVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtvcGVuT25GaWVsZENsaWNrXT1cIm9wZW5PbkZpZWxkQ2xpY2tcIlxuICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJCdXR0b25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIlxuICAgICAgICAgICAgICAgIFtpbnB1dEF0dHJdPVwieyBpZDogaWQgfVwiXG4gICAgICAgICAgICAgICAgW2FjY2VwdEN1c3RvbVZhbHVlXT1cImFjY2VwdEN1c3RvbVZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uT3BlbmVkKT1cIm9uT3BlbmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgbm9EYXRhVGV4dD1cIuC5hOC4oeC5iOC4nuC4muC4guC5ieC4reC4oeC4ueC4pVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguKPguLLguKLguIHguLLguKNcIlxuICAgICAgICAgICAgPjwvZHgtc2VsZWN0LWJveD5cbmBcbn0pXG5leHBvcnQgY2xhc3MgU29jQXV0b0NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgZmlsdGVyZWRPcHRpb25zID0gW107XG4gICAgLyoqIGxvY2FsLCByZW1vdGUgKi9cbiAgICBASW5wdXQoKSBtb2RlOiAnbG9jYWwnIHwgJ3JlbW90ZScgfCAnZHJvcGRvd24nID0gJ2xvY2FsJztcbiAgICAvKiogQVBJIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C5gOC4o+C4teC4ouC4geC5g+C4iuC5ieC5gOC4oeC4t+C5iOC4reC4nuC4tOC4oeC4nuC5jCBhdXRvIGNvbXBsZXRlICovXG4gICAgQElucHV0KCkgYXBpID0gJyc7XG4gICAgLyoqIGZpZWxkIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4oyBxdWVyeSDguYDguKHguLfguYjguK3guKLguLTguIcgQVBJICovXG4gICAgQElucHV0KCkgZmllbGQgPSAnJztcbiAgICBASW5wdXQoKSBpZCA9ICcnO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gICAgQElucHV0KCkgdmFsdWU6IFN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIG9yZGVyQnkgPSAnJztcbiAgICBASW5wdXQoKSBmaWx0ZXIgPSAnJztcbiAgICBASW5wdXQoKSBsaW1pdCA9IDEwMDA7XG4gICAgQE91dHB1dCgpIG9uTG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgcmVzRGF0YSA9IFtdO1xuICAgIG9wZW5PbkZpZWxkQ2xpY2sgPSBmYWxzZTtcbiAgICBzaG93RHJvcERvd25CdXR0b24gPSBmYWxzZTtcbiAgICBhY2NlcHRDdXN0b21WYWx1ZSA9IHRydWU7XG4gICAgc2VhcmNoRW5hYmxlZCA9IHRydWU7XG4gICAgaW5wdXRWYWx1ZSA9ICcnO1xuICAgIC8qKiBkcyAqL1xuICAgIGRzOiBEYXRhU291cmNlO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCkgeyB9XG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdkcm9wZG93bicpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0Q3VzdG9tVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qKiDguJbguYnguLLguYDguJvguYfguJkg4LmC4Lir4Lih4LiUIGxvY2FsIOC4iOC4sOC5geC4quC4lOC4hyBsaXN0IOC5g+C4q+C5ieC5gOC4peC4t+C4reC4geC5gOC4peC4oiDguYHguJXguJbguYnguYjguYDguJvguYfguJkgcmVtb3RlIOC4iOC4sOC4leC5ieC4reC4h+C4guC4tuC5ieC4meC5gOC4oeC4t+C5iOC4reC4nuC4tOC4oeC4nuC5jOC5gOC4l+C5iOC4suC4meC4seC5ieC4mSAqL1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnbG9jYWwnIHx8IHRoaXMubW9kZSA9PT0gJ2Ryb3Bkb3duJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuT25GaWVsZENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BEb3duQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm5TdGFydERhdGFTb3VyY2VMb2NhbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mblN0YXJ0RGF0YVNvdXJjZVJlbW90ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBmblN0YXJ0RGF0YVNvdXJjZUxvY2FsKCkge1xuICAgICAgICBsZXQgcGFyYW1zID0gYD9fZmllbGRzPSR7dGhpcy5maWVsZH1gXG4gICAgICAgIGlmKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgKz0gYCZfd2hlcmU9KCR7dGhpcy5maWx0ZXJ9KWBcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmRlckJ5ICYmIHRoaXMub3JkZXJCeSAhPT0gJycpIHtcbiAgICAgICAgICAgIHBhcmFtcyArPSBgJl9zb3J0PSR7dGhpcy5vcmRlckJ5fWA7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zICs9IGAmX2xpbWl0PSR7dGhpcy5saW1pdH1gO1xuICAgICAgICBsZXQgcmVzRGF0YSA9IGF3YWl0IHRoaXMuZm5QcmVSZXNwb25zZShwYXJhbXMpO1xuICAgICAgICB0aGlzLmRzID0gbmV3IERhdGFTb3VyY2Uoe1xuICAgICAgICAgICAgc3RvcmU6IG5ldyBBcnJheVN0b3JlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXNEYXRhLFxuICAgICAgICAgICAgICAgIG9uTG9hZGVkOiB0aGlzLmZuQ3VzdG9tU3RvcmVPbkxvYWRlZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZuU3RhcnREYXRhU291cmNlUmVtb3RlKCkge1xuICAgICAgICB0aGlzLmRzID0gbmV3IERhdGFTb3VyY2Uoe1xuICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XG4gICAgICAgICAgICAgICAgYnlLZXk6IGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWQuZW1pdChrZXkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbkdldEN1c3RvbVN0b3JlKGtleSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkOiBhc3luYyAobG9hZE9wdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZC5lbWl0KGxvYWRPcHRpb25zLnNlYXJjaFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm5HZXRDdXN0b21TdG9yZShsb2FkT3B0aW9ucy5zZWFyY2hWYWx1ZSk7O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Mb2FkZWQ6IHRoaXMuZm5DdXN0b21TdG9yZU9uTG9hZGVkXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm5HZXRDdXN0b21TdG9yZShrZXk6IGFueSkge1xuICAgICAgICBsZXQgcGFyYW1zID0gYD9fZmllbGRzPSR7dGhpcy5maWVsZH0mX3doZXJlPSgke3RoaXMuZmllbGR9LGxpa2UsJCR7a2V5fSQpYDtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBgP19maWVsZHM9JHt0aGlzLmZpZWxkfSZfd2hlcmU9KCgke3RoaXMuZmllbGR9LGxpa2UsJCR7a2V5fSQpJGFuZCgke3RoaXMuZmlsdGVyfSkpYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmRlckJ5ICYmIHRoaXMub3JkZXJCeSAhPT0gJycpIHtcbiAgICAgICAgICAgIHBhcmFtcyArPSBgJl9zb3J0PSR7dGhpcy5vcmRlckJ5fWA7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zICs9IGAmX2xpbWl0PSR7dGhpcy5saW1pdH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5mblByZVJlc3BvbnNlKHBhcmFtcyk7O1xuICAgIH1cbiAgICBmbkN1c3RvbVN0b3JlT25Mb2FkZWQgPSAocmVzdWx0OiBhbnlbXSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBvblZhbHVlQ2hhbmdlZChlOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLigItTb2NBdXRvQ29tcGxldGVDb21wb25lbnQgLT4gb25WYWx1ZUNoYW5nZWQgLT4gZVwiLCBlKVxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZS52YWx1ZSk7XG5cbiAgICB9XG4gICAgYXN5bmMgZm5QcmVSZXNwb25zZShwYXJhbXMpIHtcbiAgICAgICAgbGV0IHJlc0RhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMuYXBpICsgcGFyYW1zKTtcbiAgICAgICAgcmVzRGF0YSA9IF8ubWFwKHJlc0RhdGEsIChvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9ialt0aGlzLmZpZWxkXVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzRGF0YSA9IF8udW5pcUJ5KHJlc0RhdGEpO1xuICAgICAgICByZXR1cm4gcmVzRGF0YVxuICAgIH1cbiAgICBvbk9wZW5lZChlKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHgtb3ZlcmxheS13cmFwcGVyLmR4LWRyb3Bkb3duZWRpdG9yLW92ZXJsYXkuZHgtcG9wdXAtd3JhcHBlci5keC1kcm9wZG93bmxpc3QtcG9wdXAtd3JhcHBlci5keC1zZWxlY3Rib3gtcG9wdXAtd3JhcHBlcicpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnei1pbmRleDo5OTk5OycpO1xuICAgIH1cbiAgICAvKiogU1RBUlQgQmluZCBWYWx1ZSAqL1xuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4geyB9O1xuICAgIG9uTW9kZWxUb3VjaGVkOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHsgfVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7IH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHsgfVxuICAgIC8qKiBFTkQgQmluZCBWYWx1ZSAqL1xuXG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNoYXJlZE1vZHVsZSwgRHhTZWxlY3RCb3hNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtTb2NBdXRvQ29tcGxldGVDb21wb25lbnQsIFNoYXJlZE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbU29jQXV0b0NvbXBsZXRlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkQXV0b0NvbXBsZXRlTW9kdWxlIHsgfVxuIl19