@rosoftlab/core 1.0.0-alpha-19 → 1.0.1-alpha-2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. package/fesm2022/rosoftlab-core.mjs +49 -46
  2. package/fesm2022/rosoftlab-core.mjs.map +1 -1
  3. package/package.json +1 -3
  4. package/esm2022/lib/base-components/base-form-edit.component.mjs +0 -241
  5. package/esm2022/lib/base-components/field-error-display/field-error-display.component.mjs +0 -15
  6. package/esm2022/lib/base-components/index.mjs +0 -4
  7. package/esm2022/lib/base-components/page-not-found/page-not-found.component.mjs +0 -15
  8. package/esm2022/lib/base-components/under-construction/under-construction.component.mjs +0 -12
  9. package/esm2022/lib/configurations.mjs +0 -8
  10. package/esm2022/lib/constants/symbols.mjs +0 -3
  11. package/esm2022/lib/converters/date/date.converter.mjs +0 -20
  12. package/esm2022/lib/core.mjs +0 -9
  13. package/esm2022/lib/decorators/attribute.decorator.mjs +0 -87
  14. package/esm2022/lib/decorators/base-datastore-config.decorator.mjs +0 -7
  15. package/esm2022/lib/decorators/base-model-config.decorator.mjs +0 -10
  16. package/esm2022/lib/decorators/custom.type.decorator.mjs +0 -11
  17. package/esm2022/lib/grid-layout-format.enum.mjs +0 -15
  18. package/esm2022/lib/index.mjs +0 -24
  19. package/esm2022/lib/interceptors/cache.interceptor.mjs +0 -52
  20. package/esm2022/lib/interceptors/index.mjs +0 -2
  21. package/esm2022/lib/interfaces/attribute-decorator-options.interface.mjs +0 -2
  22. package/esm2022/lib/interfaces/datastore-config.interface.mjs +0 -2
  23. package/esm2022/lib/interfaces/model-config.interface.mjs +0 -2
  24. package/esm2022/lib/interfaces/overrides.interface.mjs +0 -2
  25. package/esm2022/lib/interfaces/property-converter.interface.mjs +0 -2
  26. package/esm2022/lib/models/base-meta.model.mjs +0 -7
  27. package/esm2022/lib/models/base-query-data.mjs +0 -13
  28. package/esm2022/lib/models/base.model.mjs +0 -158
  29. package/esm2022/lib/models/error-response.model.mjs +0 -9
  30. package/esm2022/lib/models/rule.mjs +0 -6
  31. package/esm2022/lib/pipes/Nl2brPipe.pipe.mjs +0 -21
  32. package/esm2022/lib/pipes/input-error.pipe.mjs +0 -38
  33. package/esm2022/lib/providers.mjs +0 -12
  34. package/esm2022/lib/resolvers/dynamically-class-resolver.mjs +0 -22
  35. package/esm2022/lib/resolvers/dynamically-service-resolver.mjs +0 -22
  36. package/esm2022/lib/resolvers/index.mjs +0 -3
  37. package/esm2022/lib/rsl-base-module.mjs +0 -64
  38. package/esm2022/lib/services/base-datastore.service.mjs +0 -342
  39. package/esm2022/lib/services/base.service.mjs +0 -99
  40. package/esm2022/lib/services/cache.service.mjs +0 -35
  41. package/esm2022/lib/services/datastore.service.mjs +0 -33
  42. package/esm2022/lib/services/dialog.service.mjs +0 -2
  43. package/esm2022/lib/services/index.mjs +0 -7
  44. package/esm2022/lib/services/translate-loader.service.mjs +0 -33
  45. package/esm2022/lib/utils.mjs +0 -27
  46. package/esm2022/lib/validators/pattern-validator.mjs +0 -15
  47. package/esm2022/public-api.mjs +0 -5
  48. package/esm2022/rosoftlab-core.mjs +0 -5
@@ -1,342 +0,0 @@
1
- import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { compare } from 'fast-json-patch';
4
- import * as qs from 'qs';
5
- import { Observable, throwError } from 'rxjs';
6
- import { catchError, map } from 'rxjs/operators';
7
- import { BaseQueryData } from '../models/base-query-data';
8
- import { CacheService } from './cache.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common/http";
11
- import * as i2 from "./cache.service";
12
- export class BaseDatastore {
13
- // tslint:enable:max-line-length
14
- get getDirtyAttributes() {
15
- if (this.datastoreConfig.overrides
16
- && this.datastoreConfig.overrides.getDirtyAttributes) {
17
- return this.datastoreConfig.overrides.getDirtyAttributes;
18
- }
19
- else {
20
- return BaseDatastore.getDirtyAttributes;
21
- }
22
- }
23
- get getAllAttributes() {
24
- if (this.datastoreConfig.overrides
25
- && this.datastoreConfig.overrides.getAllAttributes) {
26
- return this.datastoreConfig.overrides.getAllAttributes;
27
- }
28
- else {
29
- return BaseDatastore.getAllAttributes;
30
- }
31
- }
32
- // protected config: DatastoreConfig;
33
- static getDirtyAttributes(attributesMetadata) {
34
- const dirtyData = {};
35
- for (const propertyName in attributesMetadata) {
36
- if (attributesMetadata.hasOwnProperty(propertyName)) {
37
- const metadata = attributesMetadata[propertyName];
38
- if (metadata.hasDirtyAttributes) {
39
- const attributeName = metadata.serializedName != null ? metadata.serializedName : propertyName;
40
- dirtyData[attributeName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue;
41
- }
42
- }
43
- }
44
- return dirtyData;
45
- }
46
- static getAllAttributes(attributesMetadata) {
47
- const dirtyData = {};
48
- for (const propertyName in attributesMetadata) {
49
- if (attributesMetadata.hasOwnProperty(propertyName)) {
50
- const metadata = attributesMetadata[propertyName];
51
- const attributeName = metadata.serializedName != null ? metadata.serializedName : propertyName;
52
- dirtyData[attributeName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue;
53
- }
54
- }
55
- return dirtyData;
56
- }
57
- constructor(httpClient, cacheService) {
58
- this.httpClient = httpClient;
59
- this.cacheService = cacheService;
60
- // tslint:disable-next-line:variable-name
61
- this._store = {};
62
- // tslint:enable:max-line-length
63
- // tslint:disable-next-line:ban-types
64
- this.toQueryString = this.datastoreConfig.overrides
65
- && this.datastoreConfig.overrides.toQueryString ?
66
- this.datastoreConfig.overrides.toQueryString : this._toQueryString;
67
- }
68
- findAll(modelType, params, headers, customUrl) {
69
- const customHeadhers = this.buildHeaders(headers);
70
- const htmlParams = this.buildParams(modelType, params);
71
- const url = this.buildUrl(modelType, customUrl);
72
- const response = this.httpClient.get(url, { headers: customHeadhers, params: htmlParams, withCredentials: true })
73
- .pipe(map(res => this.extractQueryData(res, modelType)), catchError(this.handleError));
74
- return response;
75
- }
76
- findRecord(modelType, id, params, headers, customUrl) {
77
- const customHeadhers = this.buildHeaders(headers);
78
- let url = this.buildUrl(modelType, customUrl);
79
- if (id) {
80
- url += '/' + id;
81
- }
82
- const htmlParams = this.buildParams(modelType, params);
83
- const response = this.httpClient.get(url, { headers: customHeadhers, params: htmlParams, withCredentials: true })
84
- .pipe(map(res => this.entityToModel(res, modelType, undefined)), catchError(this.handleError));
85
- return response;
86
- }
87
- getCustom(modelType, params, headers, customUrl, customResponseType) {
88
- const customHeadhers = this.buildHeaders(headers);
89
- const url = this.buildUrl(modelType, customUrl);
90
- const htmlParams = this.buildParams(modelType, params);
91
- if (!customResponseType)
92
- customResponseType = 'json';
93
- return this.httpClient.get(url, { headers: customHeadhers, params: htmlParams, withCredentials: true, responseType: customResponseType });
94
- }
95
- postCustom(modelType, body, params, headers, customUrl) {
96
- const customHeadhers = this.buildHeaders(headers);
97
- const url = this.buildUrl(modelType, customUrl);
98
- const htmlParams = this.buildParams(modelType, params);
99
- return this.httpClient.post(url, body, { headers: customHeadhers, params: htmlParams, reportProgress: true, withCredentials: true });
100
- }
101
- patchCustom(modelType, body, params, headers, customUrl) {
102
- const customHeadhers = this.buildHeaders(headers);
103
- const url = this.buildUrl(modelType, customUrl);
104
- const htmlParams = this.buildParams(modelType, params);
105
- return this.httpClient.patch(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });
106
- }
107
- createRecord(modelType, data) {
108
- return new modelType(this, data);
109
- }
110
- saveRecord(attributesMetadata, model, params, headers, customUrl, customBody) {
111
- const modelType = model.constructor;
112
- const modelConfig = model.modelConfig;
113
- const customHeadhers = this.buildHeaders(headers);
114
- const url = this.buildUrl(modelType, customUrl);
115
- const htmlParams = this.buildParams(modelType, params);
116
- let httpCall;
117
- const body = customBody || this.modelToEntity(model, attributesMetadata);
118
- if (model.id) {
119
- // tslint:disable-next-line:max-line-length
120
- httpCall = this.httpClient.patch(url + '/' + model.id, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });
121
- }
122
- else {
123
- httpCall = this.httpClient.post(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });
124
- }
125
- return httpCall
126
- .pipe(map(res => {
127
- this.cacheService.clearCacheContainingKeyword(url);
128
- const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);
129
- return this.entityToModel(data, modelType);
130
- }), catchError(this.handleError));
131
- }
132
- patchRecord(attributesMetadata, model, origModel, params, headers, customUrl) {
133
- const modelType = model.constructor;
134
- const modelConfig = model.modelConfig;
135
- const customHeadhers = this.buildHeaders(headers);
136
- const url = this.buildUrl(modelType, customUrl);
137
- const htmlParams = this.buildParams(modelType, params);
138
- let httpCall;
139
- let origData = { id: '' };
140
- if (origModel)
141
- origData = this.modelToEntity(origModel, origModel.attributeMetadata, true);
142
- const newData = this.modelToEntity(model, attributesMetadata, true);
143
- newData.id = origData.id;
144
- const patch = compare(origData, newData);
145
- if (patch.length > 0) {
146
- httpCall = this.httpClient.patch(url + '/' + model.id, patch, { headers: customHeadhers, params: htmlParams, withCredentials: true });
147
- return httpCall
148
- .pipe(map(res => {
149
- this.cacheService.clearCacheContainingKeyword(url);
150
- const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);
151
- return this.entityToModel(data, modelType);
152
- }), catchError(this.handleError));
153
- }
154
- else {
155
- return new Observable((observer) => {
156
- observer.next(model);
157
- observer.complete();
158
- });
159
- }
160
- }
161
- // getPatch<T extends BaseModel>(
162
- // model: T,
163
- // origModel: T): any {
164
- // }
165
- replaceRecord(attributesMetadata, model, params, headers, customUrl, customBody) {
166
- const modelType = model.constructor;
167
- const modelConfig = model.modelConfig;
168
- const customHeadhers = this.buildHeaders(headers);
169
- const url = this.buildUrl(modelType, customUrl);
170
- const htmlParams = this.buildParams(modelType, params);
171
- let httpCall;
172
- const body = customBody || this.modelToEntity(model, attributesMetadata, true);
173
- if (model.id) {
174
- httpCall = this.httpClient.put(url + '/' + model.id, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });
175
- }
176
- else {
177
- httpCall = this.httpClient.post(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });
178
- }
179
- return httpCall
180
- .pipe(map(res => {
181
- this.cacheService.clearCacheContainingKeyword(url);
182
- const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);
183
- return this.entityToModel(data, modelType);
184
- }), catchError(this.handleError));
185
- }
186
- deleteRecord(modelType, id, headers, customUrl) {
187
- const customHeadhers = this.buildHeaders(headers);
188
- let url = this.buildUrl(modelType, customUrl);
189
- if (!url.includes('share')) {
190
- url = url + '/' + id;
191
- }
192
- // const idParam = new HttpParams().set('id', id);
193
- return this.httpClient.delete(url, { headers: customHeadhers, withCredentials: true })
194
- .pipe(map(res => {
195
- this.cacheService.clearCacheContainingKeyword(url);
196
- return res;
197
- }), catchError(this.handleError));
198
- }
199
- buildUrl(modelType, customUrl) {
200
- if (customUrl) {
201
- return customUrl;
202
- }
203
- const modelConfig = Reflect.getMetadata('BaseModelConfig', modelType);
204
- const baseUrl = modelConfig.baseUrl || this.datastoreConfig.baseUrl;
205
- const apiVersion = modelConfig.apiVersion || this.datastoreConfig.apiVersion;
206
- const modelEndpointUrl = modelConfig.modelEndpointUrl || modelConfig.type;
207
- const url = [baseUrl, apiVersion, modelEndpointUrl].filter((x) => x).join('/');
208
- return url;
209
- }
210
- extractQueryData(res, modelType) {
211
- let result;
212
- const body = res;
213
- const models = [];
214
- for (const data of body.data) {
215
- const model = this.entityToModel(data, modelType, undefined);
216
- models.push(model);
217
- }
218
- result = new BaseQueryData(models, this.parseMeta(body, modelType));
219
- return result;
220
- }
221
- deserializeModel(modelType, data) {
222
- data = this.transformSerializedNamesToPropertyNames(modelType, data);
223
- return new modelType(this, data);
224
- }
225
- handleError(error) {
226
- if (error.error instanceof ErrorEvent) {
227
- // A client-side or network error occurred. Handle it accordingly.
228
- // console.error('An error occurred:', error.error.message);
229
- }
230
- else {
231
- // The backend returned an unsuccessful response code.
232
- // The response body may contain clues as to what went wrong,
233
- // console.error(
234
- // 'Backend returned code ${error.status}, ' +
235
- // 'body was: ${error.error}');
236
- }
237
- // return an observable with a user-facing error message
238
- return throwError(error);
239
- }
240
- parseMeta(body, modelType) {
241
- const metaModel = Reflect.getMetadata('BaseModelConfig', modelType).meta;
242
- return new metaModel(body);
243
- }
244
- resetMetadataAttributes(res, attributesMetadata, modelType) {
245
- // TODO check why is attributesMetadata from the arguments never used
246
- for (const propertyName in attributesMetadata) {
247
- if (attributesMetadata.hasOwnProperty(propertyName)) {
248
- const metadata = attributesMetadata[propertyName];
249
- if (metadata.hasDirtyAttributes) {
250
- metadata.hasDirtyAttributes = false;
251
- }
252
- }
253
- }
254
- if (res) {
255
- res.attributeMetadata = attributesMetadata;
256
- }
257
- return res;
258
- }
259
- get datastoreConfig() {
260
- const configFromDecorator = Reflect.getMetadata('BaseDatastoreConfig', this.constructor);
261
- return Object.assign(configFromDecorator, this.config);
262
- }
263
- transformSerializedNamesToPropertyNames(modelType, attributes) {
264
- const serializedNameToPropertyName = this.getModelPropertyNames(modelType.prototype);
265
- const properties = {};
266
- Object.keys(serializedNameToPropertyName).forEach((serializedName) => {
267
- if (attributes[serializedName] !== null && attributes[serializedName] !== undefined) {
268
- properties[serializedNameToPropertyName[serializedName]] = attributes[serializedName];
269
- }
270
- });
271
- return properties;
272
- }
273
- getModelPropertyNames(model) {
274
- return Reflect.getMetadata('AttributeMapping', model);
275
- }
276
- buildHeaders(customHeaders) {
277
- const headers = {
278
- Accept: 'application/json-patch+json',
279
- // 'Content-Type': 'application/vnd.api+json',
280
- 'Content-Type': 'application/json-patch+json'
281
- };
282
- if (customHeaders && customHeaders.keys().length) {
283
- // tslint:disable-next-line:variable-name
284
- Object.assign({}, headers, customHeaders.keys().map(header_name => {
285
- headers['' + header_name] = customHeaders.get(header_name);
286
- }));
287
- }
288
- return new HttpHeaders(headers);
289
- }
290
- buildParams(modelType, params) {
291
- let httpParams = new HttpParams();
292
- if (params) {
293
- Object.keys(params)
294
- .filter(key => {
295
- const v = params[key];
296
- return (Array.isArray(v) || typeof v === 'string') ?
297
- (v.length > 0) :
298
- (v !== null && v !== undefined);
299
- })
300
- .forEach(key => {
301
- httpParams = httpParams.set(key, params[key]);
302
- });
303
- }
304
- const modelConfig = Reflect.getMetadata('BaseModelConfig', modelType);
305
- httpParams = httpParams.set('bypassCache', modelConfig.bypassCache || false);
306
- return httpParams;
307
- }
308
- entityToModel(res, modelType, model) {
309
- return this.extractRecordDataJson(res, modelType, model);
310
- }
311
- extractRecordDataJson(res, modelType, model) {
312
- const body = res;
313
- if (!body) {
314
- throw new Error('no body in response');
315
- }
316
- if (model) {
317
- Object.assign(model, body);
318
- }
319
- const deserializedModel = model || this.deserializeModel(modelType, body.data || body);
320
- return deserializedModel;
321
- }
322
- modelToEntity(model, attributesMetadata, allAttributes = false) {
323
- let attributes;
324
- if (allAttributes) {
325
- attributes = this.getAllAttributes(attributesMetadata, model);
326
- }
327
- else {
328
- attributes = this.getDirtyAttributes(attributesMetadata, model);
329
- }
330
- // this.getRelationships(model, attributes);
331
- return attributes;
332
- }
333
- _toQueryString(params) {
334
- return qs.stringify(params, { arrayFormat: 'brackets' });
335
- }
336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseDatastore, deps: [{ token: i1.HttpClient }, { token: i2.CacheService }], target: i0.ɵɵFactoryTarget.Injectable }); }
337
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseDatastore }); }
338
- }
339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseDatastore, decorators: [{
340
- type: Injectable
341
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.CacheService }] });
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhc3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvc2VydmljZXMvYmFzZS1kYXRhc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBWSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBSS9DLE1BQU0sT0FBTyxhQUFhO0lBU3hCLGdDQUFnQztJQUVoQyxJQUFZLGtCQUFrQjtRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUztlQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTO2VBQzdCLElBQUksQ0FBQyxl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SUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN2RixPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFTSxhQUFhLENBQ2xCLEtBQVEsRUFDUixrQkFBdUIsRUFDdkIsZ0JBQXlCLEtBQUs7UUFFOUIsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCw0Q0FBNEM7UUFDNUMsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNPLGNBQWMsQ0FBQyxNQUFXO1FBQ2hDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzhHQTljVSxhQUFhO2tIQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29tcGFyZSB9IGZyb20gJ2Zhc3QtanNvbi1wYXRjaCc7XHJcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRhc3RvcmVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGFzdG9yZS1jb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTW9kZWxDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21vZGVsLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlUXVlcnlEYXRhIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2UtcXVlcnktZGF0YSc7XHJcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4uL21vZGVscy9iYXNlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9jYWNoZS5zZXJ2aWNlJztcclxuZXhwb3J0IHR5cGUgTW9kZWxUeXBlPFQgZXh0ZW5kcyBCYXNlTW9kZWw+ID0gbmV3IChkYXRhc3RvcmU6IEJhc2VEYXRhc3RvcmUsIGRhdGE6IGFueSkgPT4gVDtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VEYXRhc3RvcmUge1xyXG4gIHByb3RlY3RlZCBjb25maWchOiBEYXRhc3RvcmVDb25maWc7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9zdG9yZTogeyBbdHlwZTogc3RyaW5nXTogeyBbaWQ6IHN0cmluZ106IEJhc2VNb2RlbCB9IH0gPSB7fTtcclxuICAvLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tdHlwZXNcclxuICBwcml2YXRlIHRvUXVlcnlTdHJpbmc6IEZ1bmN0aW9uID0gdGhpcy5kYXRhc3RvcmVDb25maWcub3ZlcnJpZGVzXHJcbiAgICAmJiB0aGlzLmRhdGFzdG9yZUNvbmZpZy5vdmVycmlkZXMudG9RdWVyeVN0cmluZyA/XHJcbiAgICB0aGlzLmRhdGFzdG9yZUNvbmZpZy5vdmVycmlkZXMudG9RdWVyeVN0cmluZyA6IHRoaXMuX3RvUXVlcnlTdHJpbmc7XHJcbiAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcclxuXHJcbiAgcHJpdmF0ZSBnZXQgZ2V0RGlydHlBdHRyaWJ1dGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YXN0b3JlQ29uZmlnLm92ZXJyaWRlc1xyXG4gICAgICAmJiB0aGlzLmRhdGFzdG9yZUNvbmZpZy5vdmVycmlkZXMuZ2V0RGlydHlBdHRyaWJ1dGVzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzdG9yZUNvbmZpZy5vdmVycmlkZXMuZ2V0RGlydHlBdHRyaWJ1dGVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIEJhc2VEYXRhc3RvcmUuZ2V0RGlydHlBdHRyaWJ1dGVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRBbGxBdHRyaWJ1dGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YXN0b3JlQ29uZmlnLm92ZXJyaWRlc1xyXG4gICAgICAmJiB0aGlzLmRhdGFzdG9yZUNvbmZpZy5vdmVycmlkZXMuZ2V0QWxsQXR0cmlidXRlcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc3RvcmVDb25maWcub3ZlcnJpZGVzLmdldEFsbEF0dHJpYnV0ZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gQmFzZURhdGFzdG9yZS5nZXRBbGxBdHRyaWJ1dGVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvdGVjdGVkIGNvbmZpZzogRGF0YXN0b3JlQ29uZmlnO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXREaXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlc01ldGFkYXRhOiBhbnkpOiB7IHN0cmluZzogYW55IH0ge1xyXG4gICAgY29uc3QgZGlydHlEYXRhOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBhdHRyaWJ1dGVzTWV0YWRhdGEpIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZXNNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IGFueSA9IGF0dHJpYnV0ZXNNZXRhZGF0YVtwcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgICAgICBpZiAobWV0YWRhdGEuaGFzRGlydHlBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gbWV0YWRhdGEuc2VyaWFsaXplZE5hbWUgIT0gbnVsbCA/IG1ldGFkYXRhLnNlcmlhbGl6ZWROYW1lIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgZGlydHlEYXRhW2F0dHJpYnV0ZU5hbWVdID0gbWV0YWRhdGEuc2VyaWFsaXNhdGlvblZhbHVlID8gbWV0YWRhdGEuc2VyaWFsaXNhdGlvblZhbHVlIDogbWV0YWRhdGEubmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlydHlEYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0QWxsQXR0cmlidXRlcyhhdHRyaWJ1dGVzTWV0YWRhdGE6IGFueSk6IHsgc3RyaW5nOiBhbnkgfSB7XHJcbiAgICBjb25zdCBkaXJ0eURhdGE6IGFueSA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIGF0dHJpYnV0ZXNNZXRhZGF0YSkge1xyXG4gICAgICBpZiAoYXR0cmlidXRlc01ldGFkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YTogYW55ID0gYXR0cmlidXRlc01ldGFkYXRhW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IG1ldGFkYXRhLnNlcmlhbGl6ZWROYW1lICE9IG51bGwgPyBtZXRhZGF0YS5zZXJpYWxpemVkTmFtZSA6IHByb3BlcnR5TmFtZTtcclxuICAgICAgICBkaXJ0eURhdGFbYXR0cmlidXRlTmFtZV0gPSBtZXRhZGF0YS5zZXJpYWxpc2F0aW9uVmFsdWUgPyBtZXRhZGF0YS5zZXJpYWxpc2F0aW9uVmFsdWUgOiBtZXRhZGF0YS5uZXdWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpcnR5RGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIGZpbmRBbGw8VCBleHRlbmRzIEJhc2VNb2RlbD4oXHJcbiAgICBtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPixcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8QmFzZVF1ZXJ5RGF0YTxUPj4ge1xyXG4gICAgY29uc3QgY3VzdG9tSGVhZGhlcnM6IEh0dHBIZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyk7XHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHRoaXMuYnVpbGRVcmwobW9kZWxUeXBlLCBjdXN0b21VcmwpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsXHJcbiAgICAgIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHBhcmFtczogaHRtbFBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChyZXMgPT4gdGhpcy5leHRyYWN0UXVlcnlEYXRhKHJlcywgbW9kZWxUeXBlKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG5cclxuICB9XHJcblxyXG4gIGZpbmRSZWNvcmQ8VCBleHRlbmRzIEJhc2VNb2RlbD4oXHJcbiAgICBtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPixcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgY3VzdG9tVXJsPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBjb25zdCBjdXN0b21IZWFkaGVyczogSHR0cEhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzKTtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9IHRoaXMuYnVpbGRVcmwobW9kZWxUeXBlLCBjdXN0b21VcmwpO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHVybCArPSAnLycgKyBpZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuaHR0cENsaWVudC5nZXQodXJsLCB7IGhlYWRlcnM6IGN1c3RvbUhlYWRoZXJzLCBwYXJhbXM6IGh0bWxQYXJhbXMsIHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KVxyXG4gICAgICAucGlwZShtYXAocmVzID0+IHRoaXMuZW50aXR5VG9Nb2RlbChyZXMsIG1vZGVsVHlwZSwgdW5kZWZpbmVkKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG5cclxuICB9XHJcbiAgZ2V0Q3VzdG9tPFUsIFQgZXh0ZW5kcyBCYXNlTW9kZWw+KG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgY3VzdG9tVXJsPzogc3RyaW5nLFxyXG4gICAgY3VzdG9tUmVzcG9uc2VUeXBlPzogYW55KTogT2JzZXJ2YWJsZTxVPiB7XHJcbiAgICBjb25zdCBjdXN0b21IZWFkaGVyczogSHR0cEhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzKTtcclxuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdGhpcy5idWlsZFVybChtb2RlbFR5cGUsIGN1c3RvbVVybCk7XHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcbiAgICBpZiAoIWN1c3RvbVJlc3BvbnNlVHlwZSlcclxuICAgICAgY3VzdG9tUmVzcG9uc2VUeXBlID0gJ2pzb24nO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8VT4odXJsLCB7IGhlYWRlcnM6IGN1c3RvbUhlYWRoZXJzLCBwYXJhbXM6IGh0bWxQYXJhbXMsIHdpdGhDcmVkZW50aWFsczogdHJ1ZSwgcmVzcG9uc2VUeXBlOiBjdXN0b21SZXNwb25zZVR5cGUgfSk7XHJcbiAgfVxyXG5cclxuICBwb3N0Q3VzdG9tPFUsIFQgZXh0ZW5kcyBCYXNlTW9kZWw+KG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+LFxyXG4gICAgYm9keTogYW55LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgY3VzdG9tVXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxVPiB7XHJcbiAgICBjb25zdCBjdXN0b21IZWFkaGVyczogSHR0cEhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzKTtcclxuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdGhpcy5idWlsZFVybChtb2RlbFR5cGUsIGN1c3RvbVVybCk7XHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VT4odXJsLCBib2R5LCB7IGhlYWRlcnM6IGN1c3RvbUhlYWRoZXJzLCBwYXJhbXM6IGh0bWxQYXJhbXMsIHJlcG9ydFByb2dyZXNzOiB0cnVlLCB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwYXRjaEN1c3RvbTxVLCBUIGV4dGVuZHMgQmFzZU1vZGVsPihtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPixcclxuICAgIGJvZHk6IGFueSxcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZyk6IE9ic2VydmFibGU8VT4ge1xyXG4gICAgY29uc3QgY3VzdG9tSGVhZGhlcnM6IEh0dHBIZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyk7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHRoaXMuYnVpbGRVcmwobW9kZWxUeXBlLCBjdXN0b21VcmwpO1xyXG4gICAgY29uc3QgaHRtbFBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMobW9kZWxUeXBlLCBwYXJhbXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaDxVPih1cmwsIGJvZHksIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHBhcmFtczogaHRtbFBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pO1xyXG4gIH1cclxuICBjcmVhdGVSZWNvcmQ8VCBleHRlbmRzIEJhc2VNb2RlbD4obW9kZWxUeXBlOiBNb2RlbFR5cGU8VD4sIGRhdGE/OiBhbnkpOiBUIHtcclxuICAgIHJldHVybiBuZXcgbW9kZWxUeXBlKHRoaXMsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVJlY29yZDxUIGV4dGVuZHMgQmFzZU1vZGVsPihcclxuICAgIGF0dHJpYnV0ZXNNZXRhZGF0YTogYW55LCBtb2RlbDogVCxcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZyxcclxuICAgIGN1c3RvbUJvZHk/OiBhbnlcclxuICApOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGNvbnN0IG1vZGVsVHlwZSA9IG1vZGVsLmNvbnN0cnVjdG9yIGFzIE1vZGVsVHlwZTxUPjtcclxuICAgIGNvbnN0IG1vZGVsQ29uZmlnOiBNb2RlbENvbmZpZyA9IG1vZGVsLm1vZGVsQ29uZmlnO1xyXG4gICAgY29uc3QgY3VzdG9tSGVhZGhlcnM6IEh0dHBIZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyk7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHRoaXMuYnVpbGRVcmwobW9kZWxUeXBlLCBjdXN0b21VcmwpO1xyXG4gICAgY29uc3QgaHRtbFBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMobW9kZWxUeXBlLCBwYXJhbXMpO1xyXG5cclxuICAgIGxldCBodHRwQ2FsbDogT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICAgIGNvbnN0IGJvZHkgPSBjdXN0b21Cb2R5IHx8IHRoaXMubW9kZWxUb0VudGl0eShtb2RlbCwgYXR0cmlidXRlc01ldGFkYXRhKTtcclxuXHJcbiAgICBpZiAobW9kZWwuaWQpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICBodHRwQ2FsbCA9IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmwgKyAnLycgKyBtb2RlbC5pZCwgYm9keSwgeyBoZWFkZXJzOiBjdXN0b21IZWFkaGVycywgcGFyYW1zOiBodG1sUGFyYW1zLCB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBodHRwQ2FsbCA9IHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgYm9keSwgeyBoZWFkZXJzOiBjdXN0b21IZWFkaGVycywgcGFyYW1zOiBodG1sUGFyYW1zLCB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGh0dHBDYWxsXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2UuY2xlYXJDYWNoZUNvbnRhaW5pbmdLZXl3b3JkKHVybCk7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZXNldE1ldGFkYXRhQXR0cmlidXRlcyhyZXMsIGF0dHJpYnV0ZXNNZXRhZGF0YSwgbW9kZWxUeXBlKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0eVRvTW9kZWwoZGF0YSwgbW9kZWxUeXBlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFJlY29yZDxUIGV4dGVuZHMgQmFzZU1vZGVsPihcclxuICAgIGF0dHJpYnV0ZXNNZXRhZGF0YTogYW55LCBtb2RlbDogVCxcclxuICAgIG9yaWdNb2RlbDogVCxcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3QgbW9kZWxUeXBlID0gbW9kZWwuY29uc3RydWN0b3IgYXMgTW9kZWxUeXBlPFQ+O1xyXG4gICAgY29uc3QgbW9kZWxDb25maWc6IE1vZGVsQ29uZmlnID0gbW9kZWwubW9kZWxDb25maWc7XHJcbiAgICBjb25zdCBjdXN0b21IZWFkaGVyczogSHR0cEhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzKTtcclxuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdGhpcy5idWlsZFVybChtb2RlbFR5cGUsIGN1c3RvbVVybCk7XHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcblxyXG4gICAgbGV0IGh0dHBDYWxsOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBsZXQgb3JpZ0RhdGEgPSB7IGlkOiAnJyB9O1xyXG4gICAgaWYgKG9yaWdNb2RlbClcclxuICAgICAgb3JpZ0RhdGEgPSB0aGlzLm1vZGVsVG9FbnRpdHkob3JpZ01vZGVsLCBvcmlnTW9kZWwuYXR0cmlidXRlTWV0YWRhdGEsIHRydWUpO1xyXG4gICAgY29uc3QgbmV3RGF0YSA9IHRoaXMubW9kZWxUb0VudGl0eShtb2RlbCwgYXR0cmlidXRlc01ldGFkYXRhLCB0cnVlKTtcclxuICAgIG5ld0RhdGEuaWQgPSBvcmlnRGF0YS5pZDtcclxuICAgIGNvbnN0IHBhdGNoID0gY29tcGFyZShvcmlnRGF0YSwgbmV3RGF0YSk7XHJcbiAgICBpZiAocGF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICBodHRwQ2FsbCA9IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmwgKyAnLycgKyBtb2RlbC5pZCwgcGF0Y2gsIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHBhcmFtczogaHRtbFBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGh0dHBDYWxsXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2UuY2xlYXJDYWNoZUNvbnRhaW5pbmdLZXl3b3JkKHVybCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc2V0TWV0YWRhdGFBdHRyaWJ1dGVzKHJlcywgYXR0cmlidXRlc01ldGFkYXRhLCBtb2RlbFR5cGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHlUb01vZGVsKGRhdGEsIG1vZGVsVHlwZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8VD4pID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KG1vZGVsKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0UGF0Y2g8VCBleHRlbmRzIEJhc2VNb2RlbD4oXHJcbiAgLy8gICBtb2RlbDogVCxcclxuICAvLyAgIG9yaWdNb2RlbDogVCk6IGFueSB7XHJcblxyXG4gIC8vIH1cclxuICByZXBsYWNlUmVjb3JkPFQgZXh0ZW5kcyBCYXNlTW9kZWw+KFxyXG4gICAgYXR0cmlidXRlc01ldGFkYXRhOiBhbnksIG1vZGVsOiBULFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgY3VzdG9tVXJsPzogc3RyaW5nLFxyXG4gICAgY3VzdG9tQm9keT86IGFueVxyXG4gICk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3QgbW9kZWxUeXBlID0gbW9kZWwuY29uc3RydWN0b3IgYXMgTW9kZWxUeXBlPFQ+O1xyXG4gICAgY29uc3QgbW9kZWxDb25maWc6IE1vZGVsQ29uZmlnID0gbW9kZWwubW9kZWxDb25maWc7XHJcbiAgICBjb25zdCBjdXN0b21IZWFkaGVyczogSHR0cEhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzKTtcclxuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdGhpcy5idWlsZFVybChtb2RlbFR5cGUsIGN1c3RvbVVybCk7XHJcbiAgICBjb25zdCBodG1sUGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhtb2RlbFR5cGUsIHBhcmFtcyk7XHJcblxyXG4gICAgbGV0IGh0dHBDYWxsOiBPYnNlcnZhYmxlPGFueT47XHJcblxyXG4gICAgY29uc3QgYm9keSA9IGN1c3RvbUJvZHkgfHwgdGhpcy5tb2RlbFRvRW50aXR5KG1vZGVsLCBhdHRyaWJ1dGVzTWV0YWRhdGEsIHRydWUpO1xyXG5cclxuICAgIGlmIChtb2RlbC5pZCkge1xyXG4gICAgICBodHRwQ2FsbCA9IHRoaXMuaHR0cENsaWVudC5wdXQodXJsICsgJy8nICsgbW9kZWwuaWQsIGJvZHksIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHBhcmFtczogaHRtbFBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaHR0cENhbGwgPSB0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIGJvZHksIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHBhcmFtczogaHRtbFBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBodHRwQ2FsbFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGVDb250YWluaW5nS2V5d29yZCh1cmwpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVzZXRNZXRhZGF0YUF0dHJpYnV0ZXMocmVzLCBhdHRyaWJ1dGVzTWV0YWRhdGEsIG1vZGVsVHlwZSk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHlUb01vZGVsKGRhdGEsIG1vZGVsVHlwZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIGRlbGV0ZVJlY29yZDxUIGV4dGVuZHMgQmFzZU1vZGVsPihcclxuICAgIG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+LFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8e30+IHtcclxuICAgIGNvbnN0IGN1c3RvbUhlYWRoZXJzOiBIdHRwSGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKGhlYWRlcnMpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5idWlsZFVybChtb2RlbFR5cGUsIGN1c3RvbVVybCk7XHJcbiAgICBpZiAoIXVybC5pbmNsdWRlcygnc2hhcmUnKSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyAnLycgKyBpZDtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IGlkUGFyYW0gPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnaWQnLCBpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwsIHsgaGVhZGVyczogY3VzdG9tSGVhZGhlcnMsIHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGVDb250YWluaW5nS2V5d29yZCh1cmwpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRVcmw8VCBleHRlbmRzIEJhc2VNb2RlbD4oXHJcbiAgICBtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPixcclxuICAgIGN1c3RvbVVybD86IHN0cmluZ1xyXG4gICk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICByZXR1cm4gY3VzdG9tVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1vZGVsQ29uZmlnOiBNb2RlbENvbmZpZyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ0Jhc2VNb2RlbENvbmZpZycsIG1vZGVsVHlwZSk7XHJcblxyXG4gICAgY29uc3QgYmFzZVVybCA9IG1vZGVsQ29uZmlnLmJhc2VVcmwgfHwgdGhpcy5kYXRhc3RvcmVDb25maWcuYmFzZVVybDtcclxuICAgIGNvbnN0IGFwaVZlcnNpb24gPSBtb2RlbENvbmZpZy5hcGlWZXJzaW9uIHx8IHRoaXMuZGF0YXN0b3JlQ29uZmlnLmFwaVZlcnNpb247XHJcbiAgICBjb25zdCBtb2RlbEVuZHBvaW50VXJsOiBzdHJpbmcgPSBtb2RlbENvbmZpZy5tb2RlbEVuZHBvaW50VXJsIHx8IG1vZGVsQ29uZmlnLnR5cGU7XHJcblxyXG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSBbYmFzZVVybCwgYXBpVmVyc2lvbiwgbW9kZWxFbmRwb2ludFVybF0uZmlsdGVyKCh4KSA9PiB4KS5qb2luKCcvJyk7XHJcblxyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBleHRyYWN0UXVlcnlEYXRhPFQgZXh0ZW5kcyBCYXNlTW9kZWw+KFxyXG4gICAgcmVzOiBhbnksXHJcbiAgICBtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPlxyXG4gICk6IEJhc2VRdWVyeURhdGE8VD4ge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHJlcztcclxuICAgIGNvbnN0IG1vZGVsczogVFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGJvZHkuZGF0YSkge1xyXG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZW50aXR5VG9Nb2RlbChkYXRhLCBtb2RlbFR5cGUsIHVuZGVmaW5lZCk7XHJcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXN1bHQgPSBuZXcgQmFzZVF1ZXJ5RGF0YShtb2RlbHMsIHRoaXMucGFyc2VNZXRhKGJvZHksIG1vZGVsVHlwZSkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZU1vZGVsPFQgZXh0ZW5kcyBCYXNlTW9kZWw+KG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+LCBkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEgPSB0aGlzLnRyYW5zZm9ybVNlcmlhbGl6ZWROYW1lc1RvUHJvcGVydHlOYW1lcyhtb2RlbFR5cGUsIGRhdGEpO1xyXG4gICAgcmV0dXJuIG5ldyBtb2RlbFR5cGUodGhpcywgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICBpZiAoZXJyb3IuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgIC8vIEEgY2xpZW50LXNpZGUgb3IgbmV0d29yayBlcnJvciBvY2N1cnJlZC4gSGFuZGxlIGl0IGFjY29yZGluZ2x5LlxyXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZDonLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRoZSBiYWNrZW5kIHJldHVybmVkIGFuIHVuc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlLlxyXG4gICAgICAvLyBUaGUgcmVzcG9uc2UgYm9keSBtYXkgY29udGFpbiBjbHVlcyBhcyB0byB3aGF0IHdlbnQgd3JvbmcsXHJcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgIC8vICAgJ0JhY2tlbmQgcmV0dXJuZWQgY29kZSAke2Vycm9yLnN0YXR1c30sICcgK1xyXG4gICAgICAvLyAgICdib2R5IHdhczogJHtlcnJvci5lcnJvcn0nKTtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiBhbiBvYnNlcnZhYmxlIHdpdGggYSB1c2VyLWZhY2luZyBlcnJvciBtZXNzYWdlXHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcGFyc2VNZXRhKGJvZHk6IGFueSwgbW9kZWxUeXBlOiBNb2RlbFR5cGU8QmFzZU1vZGVsPik6IGFueSB7XHJcbiAgICBjb25zdCBtZXRhTW9kZWw6IGFueSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ0Jhc2VNb2RlbENvbmZpZycsIG1vZGVsVHlwZSkubWV0YTtcclxuICAgIHJldHVybiBuZXcgbWV0YU1vZGVsKGJvZHkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0TWV0YWRhdGFBdHRyaWJ1dGVzPFQgZXh0ZW5kcyBCYXNlTW9kZWw+KHJlczogVCwgYXR0cmlidXRlc01ldGFkYXRhOiBhbnksIG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+KSB7XHJcbiAgICAvLyBUT0RPIGNoZWNrIHdoeSBpcyBhdHRyaWJ1dGVzTWV0YWRhdGEgZnJvbSB0aGUgYXJndW1lbnRzIG5ldmVyIHVzZWRcclxuXHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBhdHRyaWJ1dGVzTWV0YWRhdGEpIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZXNNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IGFueSA9IGF0dHJpYnV0ZXNNZXRhZGF0YVtwcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgICAgICBpZiAobWV0YWRhdGEuaGFzRGlydHlBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5oYXNEaXJ0eUF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzKSB7XHJcbiAgICAgIHJlcy5hdHRyaWJ1dGVNZXRhZGF0YSA9IGF0dHJpYnV0ZXNNZXRhZGF0YTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGFzdG9yZUNvbmZpZygpOiBEYXRhc3RvcmVDb25maWcge1xyXG4gICAgY29uc3QgY29uZmlnRnJvbURlY29yYXRvcjogRGF0YXN0b3JlQ29uZmlnID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnQmFzZURhdGFzdG9yZUNvbmZpZycsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29uZmlnRnJvbURlY29yYXRvciwgdGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zZm9ybVNlcmlhbGl6ZWROYW1lc1RvUHJvcGVydHlOYW1lczxUIGV4dGVuZHMgQmFzZU1vZGVsPihtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPiwgYXR0cmlidXRlczogYW55KSB7XHJcbiAgICBjb25zdCBzZXJpYWxpemVkTmFtZVRvUHJvcGVydHlOYW1lID0gdGhpcy5nZXRNb2RlbFByb3BlcnR5TmFtZXMobW9kZWxUeXBlLnByb3RvdHlwZSk7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyhzZXJpYWxpemVkTmFtZVRvUHJvcGVydHlOYW1lKS5mb3JFYWNoKChzZXJpYWxpemVkTmFtZSkgPT4ge1xyXG4gICAgICBpZiAoYXR0cmlidXRlc1tzZXJpYWxpemVkTmFtZV0gIT09IG51bGwgJiYgYXR0cmlidXRlc1tzZXJpYWxpemVkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHByb3BlcnRpZXNbc2VyaWFsaXplZE5hbWVUb1Byb3BlcnR5TmFtZVtzZXJpYWxpemVkTmFtZV1dID0gYXR0cmlidXRlc1tzZXJpYWxpemVkTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldE1vZGVsUHJvcGVydHlOYW1lcyhtb2RlbDogQmFzZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YSgnQXR0cmlidXRlTWFwcGluZycsIG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBidWlsZEhlYWRlcnMoY3VzdG9tSGVhZGVycz86IEh0dHBIZWFkZXJzKTogSHR0cEhlYWRlcnMge1xyXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xyXG4gICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxyXG4gICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hcGkranNvbicsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJ1xyXG4gICAgfTtcclxuICAgIGlmIChjdXN0b21IZWFkZXJzICYmIGN1c3RvbUhlYWRlcnMua2V5cygpLmxlbmd0aCkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBoZWFkZXJzLCBjdXN0b21IZWFkZXJzLmtleXMoKS5tYXAoaGVhZGVyX25hbWUgPT4ge1xyXG4gICAgICAgIGhlYWRlcnNbJycgKyBoZWFkZXJfbmFtZV0gPSBjdXN0b21IZWFkZXJzLmdldChoZWFkZXJfbmFtZSk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoaGVhZGVycyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRQYXJhbXM8VCBleHRlbmRzIEJhc2VNb2RlbD4obW9kZWxUeXBlOiBNb2RlbFR5cGU8VD4sXHJcbiAgICBwYXJhbXM6IGFueSk6IEh0dHBQYXJhbXMge1xyXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpXHJcbiAgICAgICAgLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdiA9IHBhcmFtc1trZXldO1xyXG4gICAgICAgICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHYpIHx8IHR5cGVvZiB2ID09PSAnc3RyaW5nJykgP1xyXG4gICAgICAgICAgICAodi5sZW5ndGggPiAwKSA6XHJcbiAgICAgICAgICAgICh2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KGtleSwgcGFyYW1zW2tleV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9kZWxDb25maWc6IE1vZGVsQ29uZmlnID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnQmFzZU1vZGVsQ29uZmlnJywgbW9kZWxUeXBlKTtcclxuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldCgnYnlwYXNzQ2FjaGUnLCBtb2RlbENvbmZpZy5ieXBhc3NDYWNoZSB8fCBmYWxzZSk7XHJcbiAgICByZXR1cm4gaHR0cFBhcmFtcztcclxuICB9XHJcblxyXG5cclxuICBwcm90ZWN0ZWQgZW50aXR5VG9Nb2RlbDxUIGV4dGVuZHMgQmFzZU1vZGVsPihcclxuICAgIHJlczogYW55LFxyXG4gICAgbW9kZWxUeXBlOiBNb2RlbFR5cGU8VD4sXHJcbiAgICBtb2RlbD86IFRcclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLmV4dHJhY3RSZWNvcmREYXRhSnNvbihyZXMsIG1vZGVsVHlwZSwgbW9kZWwpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdFJlY29yZERhdGFKc29uPFQgZXh0ZW5kcyBCYXNlTW9kZWw+KFxyXG4gICAgcmVzOiBSZXNwb25zZSxcclxuICAgIG1vZGVsVHlwZTogTW9kZWxUeXBlPFQ+LFxyXG4gICAgbW9kZWw/OiBUXHJcbiAgKTogVCB7XHJcbiAgICBjb25zdCBib2R5OiBhbnkgPSByZXM7XHJcbiAgICBpZiAoIWJvZHkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBib2R5IGluIHJlc3BvbnNlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZWwpIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihtb2RlbCwgYm9keSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRNb2RlbCA9IG1vZGVsIHx8IHRoaXMuZGVzZXJpYWxpemVNb2RlbChtb2RlbFR5cGUsIGJvZHkuZGF0YSB8fCBib2R5KTtcclxuICAgIHJldHVybiBkZXNlcmlhbGl6ZWRNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb2RlbFRvRW50aXR5PFQgZXh0ZW5kcyBCYXNlTW9kZWw+KFxyXG4gICAgbW9kZWw6IFQsXHJcbiAgICBhdHRyaWJ1dGVzTWV0YWRhdGE6IGFueSxcclxuICAgIGFsbEF0dHJpYnV0ZXM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IGFueSB7XHJcbiAgICBsZXQgYXR0cmlidXRlcztcclxuICAgIGlmIChhbGxBdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXMgPSB0aGlzLmdldEFsbEF0dHJpYnV0ZXMoYXR0cmlidXRlc01ldGFkYXRhLCBtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhdHRyaWJ1dGVzID0gdGhpcy5nZXREaXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlc01ldGFkYXRhLCBtb2RlbCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmdldFJlbGF0aW9uc2hpcHMobW9kZWwsIGF0dHJpYnV0ZXMpO1xyXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvUXVlcnlTdHJpbmcocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHFzLnN0cmluZ2lmeShwYXJhbXMsIHsgYXJyYXlGb3JtYXQ6ICdicmFja2V0cycgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
@@ -1,99 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { UntypedFormGroup } from '@angular/forms';
3
- import { BaseDatastore } from './base-datastore.service';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./base-datastore.service";
6
- export class BaseService {
7
- constructor(datastore) {
8
- this.datastore = datastore;
9
- }
10
- setModelType(modelType) {
11
- this.modelType = modelType;
12
- }
13
- get(id, customInclude = '') {
14
- const response = this.datastore.findRecord(this.modelType, id, { customInclude });
15
- return response;
16
- }
17
- getAll(page, pageSize, sort = '', filters = '', customInclude = '') {
18
- const response = this.datastore.findAll(this.modelType, {
19
- Page: page,
20
- PageSize: pageSize,
21
- Sorts: sort,
22
- Filters: filters,
23
- customInclude
24
- });
25
- return response;
26
- }
27
- delete(id) {
28
- const response = this.datastore.deleteRecord(this.modelType, id);
29
- return response;
30
- }
31
- getCustom(params, headers, customUrl, customResponseType) {
32
- return this.datastore.getCustom(this.modelType, params, headers, customUrl, customResponseType);
33
- }
34
- postCustom(body, params, headers, customUrl) {
35
- return this.datastore.postCustom(this.modelType, body, params, headers, customUrl);
36
- }
37
- patchCustom(body, params, headers, customUrl) {
38
- return this.datastore.patchCustom(this.modelType, body, params, headers, customUrl);
39
- }
40
- // checkIfPropertyUnique(property: string, value: any): Observable<boolean> {
41
- // }
42
- save(docTypeOrFormGroup, id, origModel) {
43
- if (id == null) {
44
- let fromModel;
45
- if (docTypeOrFormGroup instanceof UntypedFormGroup) {
46
- fromModel = this.fromFormGroup(docTypeOrFormGroup, id);
47
- }
48
- else {
49
- fromModel = docTypeOrFormGroup;
50
- }
51
- const data = this.datastore.createRecord(this.modelType, fromModel);
52
- return data.save();
53
- }
54
- else {
55
- return this.patch(docTypeOrFormGroup, origModel, id);
56
- }
57
- }
58
- patch(docTypeOrFormGroup, origModel, id) {
59
- let fromModel;
60
- if (docTypeOrFormGroup instanceof UntypedFormGroup) {
61
- fromModel = this.fromFormGroup(docTypeOrFormGroup, id);
62
- }
63
- else {
64
- fromModel = docTypeOrFormGroup;
65
- }
66
- const data = this.datastore.createRecord(this.modelType, fromModel);
67
- return data.patch(origModel);
68
- }
69
- newModel(data) {
70
- return new this.modelType(this.datastore, data);
71
- }
72
- toFormGroup(fb, fromModel) {
73
- if (fromModel === undefined) {
74
- fromModel = this.newModel();
75
- }
76
- return fromModel.getFromGroup(fb);
77
- }
78
- fromFormGroup(formGroup, id) {
79
- // const saveModel = this.newModel(formGroup.getRawValue());
80
- // saveModel.id = id ? id : null;
81
- // return saveModel;
82
- const saveModel = this.newModel();
83
- saveModel.getModelFromFormGroup(formGroup);
84
- saveModel.id = id ? id : null;
85
- return saveModel;
86
- }
87
- getSelectValues(property) {
88
- return null;
89
- }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseService, deps: [{ token: i1.BaseDatastore }], target: i0.ɵɵFactoryTarget.Injectable }); }
91
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseService, providedIn: 'root' }); }
92
- }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseService, decorators: [{
94
- type: Injectable,
95
- args: [{
96
- providedIn: 'root'
97
- }]
98
- }], ctorParameters: () => [{ type: i1.BaseDatastore }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXNCLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEUsT0FBTyxFQUFFLGFBQWEsRUFBYSxNQUFNLDBCQUEwQixDQUFDOzs7QUFNcEUsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFBbUIsU0FBd0I7UUFBeEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtJQUMzQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLFNBQXVCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsRUFBUSxFQUFFLGdCQUF3QixFQUFFO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNsRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVksRUFDakIsUUFBZ0IsRUFDaEIsT0FBZSxFQUFFLEVBQ2pCLFVBQWtCLEVBQUUsRUFDcEIsZ0JBQXdCLEVBQUU7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDcEQ7WUFDRSxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUNMLE9BQU8sUUFBUSxDQUFDO0lB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LENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQTJCLEVBQUUsRUFBUTtRQUNqRCw0REFBNEQ7UUFDNUQsaUNBQWlDO1FBQ2pDLG9CQUFvQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsZUFBZSxDQUFDLFFBQWdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0F4R1UsV0FBVztrSEFBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZVF1ZXJ5RGF0YSB9IGZyb20gJy4uL21vZGVscy9iYXNlLXF1ZXJ5LWRhdGEnO1xyXG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VEYXRhc3RvcmUsIE1vZGVsVHlwZSB9IGZyb20gJy4vYmFzZS1kYXRhc3RvcmUuc2VydmljZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNlcnZpY2U8VCBleHRlbmRzIEJhc2VNb2RlbD4ge1xyXG4gIHB1YmxpYyBtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPjtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YXN0b3JlOiBCYXNlRGF0YXN0b3JlKSB7XHJcbiAgfVxyXG4gIHNldE1vZGVsVHlwZShtb2RlbFR5cGU6IE1vZGVsVHlwZTxUPikge1xyXG4gICAgdGhpcy5tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQoaWQ/OiBhbnksIGN1c3RvbUluY2x1ZGU6IHN0cmluZyA9ICcnKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuZGF0YXN0b3JlLmZpbmRSZWNvcmQodGhpcy5tb2RlbFR5cGUsIGlkLCB7IGN1c3RvbUluY2x1ZGUgfSk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBnZXRBbGwocGFnZTogbnVtYmVyLFxyXG4gICAgcGFnZVNpemU6IG51bWJlcixcclxuICAgIHNvcnQ6IHN0cmluZyA9ICcnLFxyXG4gICAgZmlsdGVyczogc3RyaW5nID0gJycsXHJcbiAgICBjdXN0b21JbmNsdWRlOiBzdHJpbmcgPSAnJyk6IE9ic2VydmFibGU8QmFzZVF1ZXJ5RGF0YTxUPj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmRhdGFzdG9yZS5maW5kQWxsKHRoaXMubW9kZWxUeXBlLFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFnZTogcGFnZSxcclxuICAgICAgICBQYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgICAgU29ydHM6IHNvcnQsXHJcbiAgICAgICAgRmlsdGVyczogZmlsdGVycyxcclxuICAgICAgICBjdXN0b21JbmNsdWRlXHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuICBkZWxldGUoaWQ6IGFueSk6IE9ic2VydmFibGU8e30+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kYXRhc3RvcmUuZGVsZXRlUmVjb3JkKHRoaXMubW9kZWxUeXBlLCBpZCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG4gIGdldEN1c3RvbTxVPihwYXJhbXM/OiBhbnksXHJcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMsXHJcbiAgICBjdXN0b21Vcmw/OiBzdHJpbmcsXHJcbiAgICBjdXN0b21SZXNwb25zZVR5cGU/OiBhbnkpOiBPYnNlcnZhYmxlPFU+IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFzdG9yZS5nZXRDdXN0b208VSwgVD4odGhpcy5tb2RlbFR5cGUsIHBhcmFtcywgaGVhZGVycywgY3VzdG9tVXJsLCBjdXN0b21SZXNwb25zZVR5cGUpO1xyXG4gIH1cclxuICBwb3N0Q3VzdG9tPFU+KFxyXG4gICAgYm9keTogYW55LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgY3VzdG9tVXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxVPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhc3RvcmUucG9zdEN1c3RvbTxVLCBUPih0aGlzLm1vZGVsVHlwZSwgYm9keSwgcGFyYW1zLCBoZWFkZXJzLCBjdXN0b21VcmwpO1xyXG4gIH1cclxuICBwYXRjaEN1c3RvbTxVPihcclxuICAgIGJvZHk6IGFueSxcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIGN1c3RvbVVybD86IHN0cmluZyk6IE9ic2VydmFibGU8VT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXN0b3JlLnBhdGNoQ3VzdG9tPFUsIFQ+KHRoaXMubW9kZWxUeXBlLCBib2R5LCBwYXJhbXMsIGhlYWRlcnMsIGN1c3RvbVVybCk7XHJcbiAgfVxyXG4gIC8vIGNoZWNrSWZQcm9wZXJ0eVVuaXF1ZShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgc2F2ZShkb2NUeXBlT3JGb3JtR3JvdXA6IFQgfCBVbnR5cGVkRm9ybUdyb3VwLCBpZD86IGFueSwgb3JpZ01vZGVsPzogVCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKGlkID09IG51bGwpIHtcclxuICAgICAgbGV0IGZyb21Nb2RlbDogVDtcclxuICAgICAgaWYgKGRvY1R5cGVPckZvcm1Hcm91cCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgICAgICBmcm9tTW9kZWwgPSB0aGlzLmZyb21Gb3JtR3JvdXAoZG9jVHlwZU9yRm9ybUdyb3VwLCBpZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZnJvbU1vZGVsID0gZG9jVHlwZU9yRm9ybUdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFzdG9yZS5jcmVhdGVSZWNvcmQodGhpcy5tb2RlbFR5cGUsIGZyb21Nb2RlbCk7XHJcbiAgICAgIHJldHVybiBkYXRhLnNhdmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhdGNoKGRvY1R5cGVPckZvcm1Hcm91cCwgb3JpZ01vZGVsLCBpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXRjaChkb2NUeXBlT3JGb3JtR3JvdXA6IFQgfCBVbnR5cGVkRm9ybUdyb3VwLCBvcmlnTW9kZWw6IFQsIGlkPzogYW55KTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBsZXQgZnJvbU1vZGVsOiBUO1xyXG4gICAgaWYgKGRvY1R5cGVPckZvcm1Hcm91cCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgICAgZnJvbU1vZGVsID0gdGhpcy5mcm9tRm9ybUdyb3VwKGRvY1R5cGVPckZvcm1Hcm91cCwgaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZnJvbU1vZGVsID0gZG9jVHlwZU9yRm9ybUdyb3VwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YXN0b3JlLmNyZWF0ZVJlY29yZCh0aGlzLm1vZGVsVHlwZSwgZnJvbU1vZGVsKTtcclxuICAgIHJldHVybiBkYXRhLnBhdGNoKG9yaWdNb2RlbCk7XHJcbiAgfVxyXG5cclxuICBuZXdNb2RlbChkYXRhPzogYW55KTogVCB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMubW9kZWxUeXBlKHRoaXMuZGF0YXN0b3JlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHRvRm9ybUdyb3VwKGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsIGZyb21Nb2RlbD86IFQpOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGlmIChmcm9tTW9kZWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmcm9tTW9kZWwgPSB0aGlzLm5ld01vZGVsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJvbU1vZGVsLmdldEZyb21Hcm91cChmYik7XHJcbiAgfVxyXG5cclxuICBmcm9tRm9ybUdyb3VwKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgaWQ/OiBhbnkpOiBUIHtcclxuICAgIC8vIGNvbnN0IHNhdmVNb2RlbCA9IHRoaXMubmV3TW9kZWwoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgLy8gc2F2ZU1vZGVsLmlkID0gaWQgPyBpZCA6IG51bGw7XHJcbiAgICAvLyByZXR1cm4gc2F2ZU1vZGVsO1xyXG4gICAgY29uc3Qgc2F2ZU1vZGVsID0gdGhpcy5uZXdNb2RlbCgpO1xyXG4gICAgc2F2ZU1vZGVsLmdldE1vZGVsRnJvbUZvcm1Hcm91cChmb3JtR3JvdXApXHJcbiAgICBzYXZlTW9kZWwuaWQgPSBpZCA/IGlkIDogbnVsbDtcclxuICAgIHJldHVybiBzYXZlTW9kZWw7XHJcbiAgfVxyXG4gIGdldFNlbGVjdFZhbHVlcyhwcm9wZXJ0eTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59Il19
@@ -1,35 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class CacheService {
4
- constructor() {
5
- this.cache = {};
6
- }
7
- get(key) {
8
- const cachedItem = this.cache[key];
9
- if (cachedItem && cachedItem.expiration > Date.now()) {
10
- return cachedItem.data;
11
- }
12
- this.delete(key);
13
- return null;
14
- }
15
- set(key, data, expiresInMs) {
16
- const expiration = Date.now() + expiresInMs;
17
- this.cache[key] = { data, expiration };
18
- }
19
- delete(key) {
20
- delete this.cache[key];
21
- }
22
- clearCacheContainingKeyword(keyword) {
23
- const keysToDelete = Object.keys(this.cache).filter(key => key.includes(keyword));
24
- keysToDelete.forEach(key => this.delete(key));
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CacheService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CacheService, providedIn: 'root' }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CacheService, decorators: [{
30
- type: Injectable,
31
- args: [{
32
- providedIn: 'root'
33
- }]
34
- }], ctorParameters: () => [] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvc2VydmljZXMvY2FjaGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sWUFBWTtJQUd2QjtRQUZRLFVBQUssR0FBeUQsRUFBRSxDQUFDO0lBRTFELENBQUM7SUFFaEIsR0FBRyxDQUFDLEdBQVc7UUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDckQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBUyxFQUFFLFdBQW1CO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFlO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBMUJVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FjaGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNhY2hlOiB7IFtrZXk6IHN0cmluZ106IHsgZGF0YTogYW55LCBleHBpcmF0aW9uOiBudW1iZXIgfSB9ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmNhY2hlW2tleV07XHJcbiAgICBpZiAoY2FjaGVkSXRlbSAmJiBjYWNoZWRJdGVtLmV4cGlyYXRpb24gPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgIHJldHVybiBjYWNoZWRJdGVtLmRhdGE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlbGV0ZShrZXkpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSwgZXhwaXJlc0luTXM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZXhwaXJhdGlvbiA9IERhdGUubm93KCkgKyBleHBpcmVzSW5NcztcclxuICAgIHRoaXMuY2FjaGVba2V5XSA9IHsgZGF0YSwgZXhwaXJhdGlvbiB9O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBkZWxldGUgdGhpcy5jYWNoZVtrZXldO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDYWNoZUNvbnRhaW5pbmdLZXl3b3JkKGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5c1RvRGVsZXRlID0gT2JqZWN0LmtleXModGhpcy5jYWNoZSkuZmlsdGVyKGtleSA9PiBrZXkuaW5jbHVkZXMoa2V5d29yZCkpO1xyXG4gICAga2V5c1RvRGVsZXRlLmZvckVhY2goa2V5ID0+IHRoaXMuZGVsZXRlKGtleSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,33 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Injectable } from '@angular/core';
4
- import { Configurations } from '../configurations';
5
- import { BaseDatastoreConfig } from '../core';
6
- import { BaseDatastore } from './base-datastore.service';
7
- import { CacheService } from './cache.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common/http";
10
- import * as i2 from "./cache.service";
11
- import * as i3 from "../configurations";
12
- let DatastoreCore = class DatastoreCore extends BaseDatastore {
13
- constructor(http, cacheService, configExt) {
14
- super(http, cacheService);
15
- this.configExt = configExt;
16
- this.customConfig = {
17
- apiVersion: this.configExt.apiVersion,
18
- baseUrl: this.configExt.baseUrl
19
- };
20
- this.config = this.customConfig;
21
- }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatastoreCore, deps: [{ token: i1.HttpClient }, { token: i2.CacheService }, { token: i3.Configurations }], target: i0.ɵɵFactoryTarget.Injectable }); }
23
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatastoreCore }); }
24
- };
25
- DatastoreCore = __decorate([
26
- BaseDatastoreConfig({ apiVersion: '', baseUrl: '' }),
27
- __metadata("design:paramtypes", [HttpClient, CacheService, Configurations])
28
- ], DatastoreCore);
29
- export { DatastoreCore };
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatastoreCore, decorators: [{
31
- type: Injectable
32
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.CacheService }, { type: i3.Configurations }] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3NlcnZpY2VzL2RhdGFzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFtQixNQUFNLFNBQVMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUt4QyxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsYUFBYTtJQUU1QyxZQUFZLElBQWdCLEVBQUUsWUFBMEIsRUFBVSxTQUF5QjtRQUN2RixLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRG9DLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBRXZGLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUNyQyxPQUFPLEVBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1NBQ25DLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDcEMsQ0FBQzs4R0FUUSxhQUFhO2tIQUFiLGFBQWE7O0FBQWIsYUFBYTtJQUR6QixtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FDQUcvQixVQUFVLEVBQWdCLFlBQVksRUFBcUIsY0FBYztHQUZsRixhQUFhLENBVXpCOzsyRkFWWSxhQUFhO2tCQUZ6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQmFzZURhdGFzdG9yZUNvbmZpZywgRGF0YXN0b3JlQ29uZmlnIH0gZnJvbSAnLi4vY29yZSc7XHJcbmltcG9ydCB7IEJhc2VEYXRhc3RvcmUgfSBmcm9tICcuL2Jhc2UtZGF0YXN0b3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICcuL2NhY2hlLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuQEJhc2VEYXRhc3RvcmVDb25maWcoeyBhcGlWZXJzaW9uOiAnJywgYmFzZVVybDogJycgfSlcclxuZXhwb3J0IGNsYXNzIERhdGFzdG9yZUNvcmUgZXh0ZW5kcyBCYXNlRGF0YXN0b3JlIHtcclxuICAgIHByaXZhdGUgY3VzdG9tQ29uZmlnOiBEYXRhc3RvcmVDb25maWdcclxuICAgIGNvbnN0cnVjdG9yKGh0dHA6IEh0dHBDbGllbnQsIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLCBwcml2YXRlIGNvbmZpZ0V4dDogQ29uZmlndXJhdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihodHRwLCBjYWNoZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhcGlWZXJzaW9uOiB0aGlzLmNvbmZpZ0V4dC5hcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICBiYXNlVXJsOiAgdGhpcy5jb25maWdFeHQuYmFzZVVybFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmN1c3RvbUNvbmZpZztcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nU2VydmljZSB7XHJcbiAgY29uZmlybShtZXNzYWdlPzogc3RyaW5nLCB0ZXh0Pzogc3RyaW5nLCBjb25maXJtQnV0dG9uVGV4dD86IHN0cmluZywgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgc2hvd1NhdmVNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICBzaG93UmVnaXN0ZXJlZE1lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIHNob3dFcnJvck1lc3NhZ2UoZTogYW55LCBtZXNzYWdlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxufVxyXG5cclxuIl19
@@ -1,7 +0,0 @@
1
- export * from './base-datastore.service';
2
- export * from './base.service';
3
- export * from './cache.service';
4
- export * from './datastore.service';
5
- export * from './dialog.service';
6
- export * from './translate-loader.service';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlLWRhdGFzdG9yZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NhY2hlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGFzdG9yZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNsYXRlLWxvYWRlci5zZXJ2aWNlJztcclxuXHJcbiJdfQ==