@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.
- package/fesm2022/rosoftlab-core.mjs +49 -46
- package/fesm2022/rosoftlab-core.mjs.map +1 -1
- package/package.json +1 -3
- package/esm2022/lib/base-components/base-form-edit.component.mjs +0 -241
- package/esm2022/lib/base-components/field-error-display/field-error-display.component.mjs +0 -15
- package/esm2022/lib/base-components/index.mjs +0 -4
- package/esm2022/lib/base-components/page-not-found/page-not-found.component.mjs +0 -15
- package/esm2022/lib/base-components/under-construction/under-construction.component.mjs +0 -12
- package/esm2022/lib/configurations.mjs +0 -8
- package/esm2022/lib/constants/symbols.mjs +0 -3
- package/esm2022/lib/converters/date/date.converter.mjs +0 -20
- package/esm2022/lib/core.mjs +0 -9
- package/esm2022/lib/decorators/attribute.decorator.mjs +0 -87
- package/esm2022/lib/decorators/base-datastore-config.decorator.mjs +0 -7
- package/esm2022/lib/decorators/base-model-config.decorator.mjs +0 -10
- package/esm2022/lib/decorators/custom.type.decorator.mjs +0 -11
- package/esm2022/lib/grid-layout-format.enum.mjs +0 -15
- package/esm2022/lib/index.mjs +0 -24
- package/esm2022/lib/interceptors/cache.interceptor.mjs +0 -52
- package/esm2022/lib/interceptors/index.mjs +0 -2
- package/esm2022/lib/interfaces/attribute-decorator-options.interface.mjs +0 -2
- package/esm2022/lib/interfaces/datastore-config.interface.mjs +0 -2
- package/esm2022/lib/interfaces/model-config.interface.mjs +0 -2
- package/esm2022/lib/interfaces/overrides.interface.mjs +0 -2
- package/esm2022/lib/interfaces/property-converter.interface.mjs +0 -2
- package/esm2022/lib/models/base-meta.model.mjs +0 -7
- package/esm2022/lib/models/base-query-data.mjs +0 -13
- package/esm2022/lib/models/base.model.mjs +0 -158
- package/esm2022/lib/models/error-response.model.mjs +0 -9
- package/esm2022/lib/models/rule.mjs +0 -6
- package/esm2022/lib/pipes/Nl2brPipe.pipe.mjs +0 -21
- package/esm2022/lib/pipes/input-error.pipe.mjs +0 -38
- package/esm2022/lib/providers.mjs +0 -12
- package/esm2022/lib/resolvers/dynamically-class-resolver.mjs +0 -22
- package/esm2022/lib/resolvers/dynamically-service-resolver.mjs +0 -22
- package/esm2022/lib/resolvers/index.mjs +0 -3
- package/esm2022/lib/rsl-base-module.mjs +0 -64
- package/esm2022/lib/services/base-datastore.service.mjs +0 -342
- package/esm2022/lib/services/base.service.mjs +0 -99
- package/esm2022/lib/services/cache.service.mjs +0 -35
- package/esm2022/lib/services/datastore.service.mjs +0 -33
- package/esm2022/lib/services/dialog.service.mjs +0 -2
- package/esm2022/lib/services/index.mjs +0 -7
- package/esm2022/lib/services/translate-loader.service.mjs +0 -33
- package/esm2022/lib/utils.mjs +0 -27
- package/esm2022/lib/validators/pattern-validator.mjs +0 -15
- package/esm2022/public-api.mjs +0 -5
- 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==
|