ng2-rest 19.0.2 → 19.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/shared/shared_folder_info.txt +1 -1
- package/browser/esm2022/lib/content-type.mjs +13 -0
- package/browser/esm2022/lib/cookie.mjs +29 -0
- package/browser/esm2022/lib/helpers.mjs +24 -0
- package/browser/esm2022/lib/index.mjs +13 -0
- package/browser/esm2022/lib/mapping.mjs +250 -0
- package/browser/esm2022/lib/models.mjs +172 -0
- package/browser/esm2022/lib/other/simple-resource.mjs +118 -0
- package/browser/esm2022/lib/params.mjs +279 -0
- package/browser/esm2022/lib/request-cache.mjs +101 -0
- package/browser/esm2022/lib/resource-service.mjs +220 -0
- package/browser/esm2022/lib/rest-headers.mjs +129 -0
- package/browser/esm2022/lib/rest-request.mjs +325 -0
- package/browser/esm2022/lib/rest.class.mjs +120 -0
- package/browser/esm2022/ng2-rest.mjs +5 -0
- package/browser/esm2022/public-api.mjs +2 -0
- package/browser/fesm2022/ng2-rest.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/client/esm2022/lib/content-type.mjs +13 -0
- package/client/esm2022/lib/cookie.mjs +29 -0
- package/client/esm2022/lib/helpers.mjs +24 -0
- package/client/esm2022/lib/index.mjs +13 -0
- package/client/esm2022/lib/mapping.mjs +250 -0
- package/client/esm2022/lib/models.mjs +172 -0
- package/client/esm2022/lib/other/simple-resource.mjs +118 -0
- package/client/esm2022/lib/params.mjs +279 -0
- package/client/esm2022/lib/request-cache.mjs +101 -0
- package/client/esm2022/lib/resource-service.mjs +220 -0
- package/client/esm2022/lib/rest-headers.mjs +129 -0
- package/client/esm2022/lib/rest-request.mjs +325 -0
- package/client/esm2022/lib/rest.class.mjs +120 -0
- package/client/esm2022/ng2-rest.mjs +5 -0
- package/client/esm2022/public-api.mjs +2 -0
- package/client/fesm2022/ng2-rest.mjs.map +1 -1
- package/client/package.json +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/package.json +1 -1
- package/tmp-environment.json +4 -3
- package/websql/esm2022/lib/content-type.mjs +13 -0
- package/websql/esm2022/lib/cookie.mjs +29 -0
- package/websql/esm2022/lib/helpers.mjs +24 -0
- package/websql/esm2022/lib/index.mjs +13 -0
- package/websql/esm2022/lib/mapping.mjs +250 -0
- package/websql/esm2022/lib/models.mjs +172 -0
- package/websql/esm2022/lib/other/simple-resource.mjs +118 -0
- package/websql/esm2022/lib/params.mjs +279 -0
- package/websql/esm2022/lib/request-cache.mjs +101 -0
- package/websql/esm2022/lib/resource-service.mjs +220 -0
- package/websql/esm2022/lib/rest-headers.mjs +129 -0
- package/websql/esm2022/lib/rest-request.mjs +325 -0
- package/websql/esm2022/lib/rest.class.mjs +120 -0
- package/websql/esm2022/ng2-rest.mjs +5 -0
- package/websql/esm2022/public-api.mjs +2 -0
- package/websql/fesm2022/ng2-rest.mjs.map +1 -1
- package/websql/package.json +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { Resource } from '../resource-service';
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @abstract
|
|
7
|
+
* @class SimpleResource
|
|
8
|
+
* @extends {Resource<T, A, TA>}
|
|
9
|
+
* @template E Endpoint type
|
|
10
|
+
* @template A Single modle type
|
|
11
|
+
* @template TA Array Model Type
|
|
12
|
+
* @template RP rest url parameters type
|
|
13
|
+
* @template QP query parameter type
|
|
14
|
+
*/
|
|
15
|
+
class ExtendedResource {
|
|
16
|
+
static { this.doNotSerializeQueryParams = false; }
|
|
17
|
+
static { this.handlers = []; }
|
|
18
|
+
constructor(endpoint, path_model) {
|
|
19
|
+
this.endpoint = endpoint;
|
|
20
|
+
this.path_model = path_model;
|
|
21
|
+
/**
|
|
22
|
+
* Get model by rest params
|
|
23
|
+
*/
|
|
24
|
+
this.model = (restParams) => {
|
|
25
|
+
return {
|
|
26
|
+
get: (queryPrams) => {
|
|
27
|
+
return Observable.create((observer) => {
|
|
28
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
29
|
+
.get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
30
|
+
.observable
|
|
31
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
patch: (item, queryParams) => {
|
|
35
|
+
return Observable.create((observer) => {
|
|
36
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
37
|
+
.put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
38
|
+
.observable
|
|
39
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
head: (queryPrams) => {
|
|
43
|
+
return Observable.create((observer) => {
|
|
44
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
45
|
+
.head([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
46
|
+
.observable
|
|
47
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
query: (queryPrams) => {
|
|
51
|
+
return Observable.create((observer) => {
|
|
52
|
+
ExtendedResource.handlers.push(this.rest.model(restParams).
|
|
53
|
+
array
|
|
54
|
+
.get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
55
|
+
.observable
|
|
56
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
post: (item, queryParams) => {
|
|
60
|
+
return Observable.create((observer) => {
|
|
61
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
62
|
+
.post(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
63
|
+
.observable
|
|
64
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
put: (item, queryParams) => {
|
|
68
|
+
return Observable.create((observer) => {
|
|
69
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
70
|
+
.put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
71
|
+
.observable
|
|
72
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
delete: (queryPrams) => {
|
|
76
|
+
return Observable.create((observer) => {
|
|
77
|
+
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
78
|
+
.delete([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
79
|
+
.observable
|
|
80
|
+
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
this.rest = Resource.create(endpoint, path_model);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
*
|
|
90
|
+
* @export
|
|
91
|
+
* @class SimpleResource
|
|
92
|
+
* @template A single model type
|
|
93
|
+
* @template TA array model type
|
|
94
|
+
* @template RP rest parameters type
|
|
95
|
+
* @template QP query parameters type
|
|
96
|
+
*/
|
|
97
|
+
export class SimpleResource {
|
|
98
|
+
static { this._isSetQueryParamsSerialization = false; }
|
|
99
|
+
static set doNotSerializeQueryParams(value) {
|
|
100
|
+
if (!SimpleResource._isSetQueryParamsSerialization) {
|
|
101
|
+
SimpleResource._isSetQueryParamsSerialization = true;
|
|
102
|
+
ExtendedResource.doNotSerializeQueryParams = value;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.warn(`Query params serialization already set as
|
|
106
|
+
${ExtendedResource.doNotSerializeQueryParams},`);
|
|
107
|
+
}
|
|
108
|
+
static __destroy() {
|
|
109
|
+
ExtendedResource.handlers.forEach(h => h.unsubscribe());
|
|
110
|
+
}
|
|
111
|
+
constructor(endpoint, model) {
|
|
112
|
+
let rest = new ExtendedResource(endpoint, model);
|
|
113
|
+
this.model = rest.model;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
;
|
|
117
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/other/simple-resource.ts
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9vdGhlci9zaW1wbGUtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFxQi9DOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxnQkFBZ0I7YUFDTiw4QkFBeUIsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUNsQyxhQUFRLEdBQW1CLEVBQUUsQUFBckIsQ0FBc0I7SUE2RzVDLFlBQTJCLFFBQW9CLEVBQVUsVUFBa0I7UUFBaEQsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUF6RzNFOztVQUVFO1FBQ0YsVUFBSyxHQUF5QixDQUFDLFVBQWUsRUFBRSxFQUFFO1lBRWhELE9BQU87Z0JBRUwsR0FBRyxFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3ZCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTt3QkFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7NkJBQ3ZELEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDOzZCQUM3RCxVQUFVOzZCQUNWLFNBQVMsQ0FDUixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDckMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxF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QUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7O0FBSUYsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrRUFBa0UiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZS1zZXJ2aWNlJztcblxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFByb21pc2VzPEEsIFRBLCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+IHtcbiAgZ2V0OiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgaGVhZDogKHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHF1ZXJ5OiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj47XG4gIHB1dDogKGl0ZW0/OiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBwYXRjaDogKGl0ZW0/OiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBwb3N0OiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIGRlbGV0ZTogKHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPiB8IGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWw8QSwgVEEsIFJQIGV4dGVuZHMgT2JqZWN0LCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+IHtcbiAgKHJlc3RQYXJhbXM/OiBSUCk6IFJlc3RQcm9taXNlczxBLCBUQSwgUVA+O1xufVxuXG5cblxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAYWJzdHJhY3RcbiAqIEBjbGFzcyBTaW1wbGVSZXNvdXJjZVxuICogQGV4dGVuZHMge1Jlc291cmNlPFQsIEEsIFRBPn1cbiAqIEB0ZW1wbGF0ZSBFICBFbmRwb2ludCB0eXBlXG4gKiBAdGVtcGxhdGUgQSBTaW5nbGUgbW9kbGUgdHlwZVxuICogQHRlbXBsYXRlIFRBIEFycmF5IE1vZGVsIFR5cGVcbiAqIEB0ZW1wbGF0ZSBSUCByZXN0IHVybCBwYXJhbWV0ZXJzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBRUCBxdWVyeSBwYXJhbWV0ZXIgdHlwZVxuICovXG5jbGFzcyBFeHRlbmRlZFJlc291cmNlPEUsIEEsIFRBLCBSUCBleHRlbmRzIE9iamVjdCwgUVAgZXh0ZW5kcyBNb2RlbHMuVXJsUGFyYW1zPiAge1xuICBwdWJsaWMgc3RhdGljIGRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBoYW5kbGVyczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICByZXN0OiBNb2RlbHMuUmVzb3VyY2VNb2RlbDxBLCBUQT47XG5cbiAgLyoqXG4gICAqIEdldCBtb2RlbCBieSByZXN0IHBhcmFtc1xuICAqL1xuICBtb2RlbDogTW9kZWw8QSwgVEEsIFJQLCBRUD4gPSAocmVzdFBhcmFtcz86IFJQKSA9PiB7XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICBnZXQ6IChxdWVyeVByYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAuZ2V0KFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cbiAgICAgIHBhdGNoOiAoaXRlbTogQSwgcXVlcnlQYXJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5wdXQoaXRlbSwgW3F1ZXJ5UGFyYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcblxuICAgICAgfSxcblxuICAgICAgaGVhZDogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5oZWFkKFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cbiAgICAgIHF1ZXJ5OiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFRBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcykuXG4gICAgICAgICAgICBhcnJheVxuICAgICAgICAgICAgLmdldChbcXVlcnlQcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG4gICAgICB9LFxuXG5cbiAgICAgIHBvc3Q6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnBvc3QoaXRlbSwgW3F1ZXJ5UGFyYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcblxuICAgICAgfSxcblxuXG4gICAgICBwdXQ6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnB1dChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG5cbiAgICAgIGRlbGV0ZTogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5kZWxldGUoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfVxuXG5cbiAgICB9XG4gIH1cblxuXG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBlbmRwb2ludDogRSB8IHN0cmluZywgcHJpdmF0ZSBwYXRoX21vZGVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc3QgPSA8YW55PlJlc291cmNlLmNyZWF0ZTxBLCBUQT4oPGFueT5lbmRwb2ludCwgcGF0aF9tb2RlbCk7XG5cbiAgfVxuXG59XG5cblxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgU2ltcGxlUmVzb3VyY2VcbiAqIEB0ZW1wbGF0ZSBBIHNpbmdsZSBtb2RlbCB0eXBlXG4gKiBAdGVtcGxhdGUgVEEgYXJyYXkgbW9kZWwgdHlwZVxuICogQHRlbXBsYXRlIFJQIHJlc3QgcGFyYW1ldGVycyB0eXBlXG4gKiBAdGVtcGxhdGUgUVAgcXVlcnkgcGFyYW1ldGVycyB0eXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW1wbGVSZXNvdXJjZTxBLCBUQT4ge1xuICBtb2RlbDogTW9kZWw8QSwgVEEsIE9iamVjdCwgTW9kZWxzLlVybFBhcmFtcz47XG5cblxuICBwcml2YXRlIHN0YXRpYyBfaXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBzZXQgZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcyh2YWx1ZSkge1xuICAgIGlmICghU2ltcGxlUmVzb3VyY2UuX2lzU2V0UXVlcnlQYXJhbXNTZXJpYWxpemF0aW9uKSB7XG4gICAgICBTaW1wbGVSZXNvdXJjZS5faXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24gPSB0cnVlO1xuICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zID0gdmFsdWVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKGBRdWVyeSBwYXJhbXMgc2VyaWFsaXphdGlvbiBhbHJlYWR5IHNldCBhc1xuICAgICAgICAke0V4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtc30sYCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIF9fZGVzdHJveSgpIHtcbiAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLmZvckVhY2goaCA9PiBoLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW5kcG9pbnQ6IHN0cmluZywgbW9kZWw6IHN0cmluZykge1xuICAgIGxldCByZXN0ID0gbmV3IEV4dGVuZGVkUmVzb3VyY2U8c3RyaW5nLCBBLCBUQSwgT2JqZWN0LCBNb2RlbHMuVXJsUGFyYW1zPihlbmRwb2ludCwgbW9kZWwpO1xuICAgIHRoaXMubW9kZWwgPSByZXN0Lm1vZGVsO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9vdGhlci9zaW1wbGUtcmVzb3VyY2UudHMiXX0=
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { diffChars } from 'diff';
|
|
2
|
+
import { _ } from 'tnp-core/browser';
|
|
3
|
+
import { Log, Level } from 'ng2-logger/browser';
|
|
4
|
+
import { Helpers } from './helpers';
|
|
5
|
+
const log = Log.create('[ng2-rest] params', Level.__NOTHING);
|
|
6
|
+
/** check if string is a valid pattern */
|
|
7
|
+
export function isValid(pattern) {
|
|
8
|
+
return (new RegExp('\/:[a-zA-Z]*', 'g')).test(pattern.replace('://', ''));
|
|
9
|
+
}
|
|
10
|
+
export function check(url, pattern) {
|
|
11
|
+
if (!Helpers.checkValidUrl(url)) {
|
|
12
|
+
log.error(`Incorrect url: ${url}`);
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (url.charAt(url.length - 1) === '/')
|
|
16
|
+
url = url.slice(0, url.length - 2);
|
|
17
|
+
if (pattern.charAt(pattern.length - 1) === '/')
|
|
18
|
+
pattern = pattern.slice(0, url.length - 2);
|
|
19
|
+
pattern = pattern.replace(/\//g, '\/');
|
|
20
|
+
pattern = pattern.replace(new RegExp('\/:[a-zA-Z]*', 'g'), '.+');
|
|
21
|
+
let reg = new RegExp(pattern, 'g');
|
|
22
|
+
return reg.test(url);
|
|
23
|
+
}
|
|
24
|
+
export function getModels(pattern) {
|
|
25
|
+
let m = pattern.match(new RegExp('[a-z-A-Z]*\/:', 'g'));
|
|
26
|
+
return m.map(p => p.replace('/:', ''));
|
|
27
|
+
}
|
|
28
|
+
export function getRestPramsNames(pattern) {
|
|
29
|
+
if (pattern.charAt(pattern.length - 1) !== '/')
|
|
30
|
+
pattern = `${pattern}/`;
|
|
31
|
+
let m = pattern.match(new RegExp(':[a-zA-Z]*\/', 'g'));
|
|
32
|
+
let res = m.map(p => p.replace(':', '').replace('/', ''));
|
|
33
|
+
return res.filter(p => p.trim() !== '');
|
|
34
|
+
}
|
|
35
|
+
export function containsModels(url, models) {
|
|
36
|
+
if (url.charAt(0) !== '/')
|
|
37
|
+
url = '/' + url;
|
|
38
|
+
let res = models.filter(m => {
|
|
39
|
+
let word = '/' + m;
|
|
40
|
+
let iii = url.indexOf(word);
|
|
41
|
+
if (iii + word.length < url.length && url.charAt(iii + word.length) !== '/') {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (iii !== -1) {
|
|
45
|
+
url = url.replace(new RegExp('\/' + m, 'g'), '');
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}).length;
|
|
50
|
+
return res === models.length;
|
|
51
|
+
}
|
|
52
|
+
export function stars(n) {
|
|
53
|
+
let res = '';
|
|
54
|
+
for (let i = 0; i < n; i++)
|
|
55
|
+
res += '*';
|
|
56
|
+
return res;
|
|
57
|
+
}
|
|
58
|
+
export function getRestParams(url, pattern) {
|
|
59
|
+
let res = {};
|
|
60
|
+
let models = getRestPramsNames(pattern);
|
|
61
|
+
models.forEach(m => {
|
|
62
|
+
pattern = pattern.replace(`:${m}`, stars(m.length));
|
|
63
|
+
});
|
|
64
|
+
let currentModel = void 0;
|
|
65
|
+
diffChars(pattern, url).forEach(d => {
|
|
66
|
+
if (d.added) {
|
|
67
|
+
if (!isNaN(Number(d.value)))
|
|
68
|
+
res[currentModel] = Number(d.value);
|
|
69
|
+
else if (d.value.trim() === 'true')
|
|
70
|
+
res[currentModel] = true;
|
|
71
|
+
else if (d.value.trim() === 'false')
|
|
72
|
+
res[currentModel] = false;
|
|
73
|
+
else
|
|
74
|
+
res[currentModel] = decodeURIComponent(d.value);
|
|
75
|
+
currentModel = void 0;
|
|
76
|
+
}
|
|
77
|
+
let m = d.value.replace(':', "");
|
|
78
|
+
if (d.removed) {
|
|
79
|
+
currentModel = models.shift();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
export const regexisPath = /[^\..]+(\.[^\..]+)+/g;
|
|
85
|
+
/**
|
|
86
|
+
* Models like books/:id
|
|
87
|
+
*/
|
|
88
|
+
function cutUrlModel(params, models, output) {
|
|
89
|
+
if (models.length === 0)
|
|
90
|
+
return output.join('\/');
|
|
91
|
+
let m = models.pop();
|
|
92
|
+
let param = m.match(/:[a-zA-Z0-9\.]+/)[0].replace(':', '');
|
|
93
|
+
const paramIsPath = regexisPath.test(param);
|
|
94
|
+
let model = m.match(/[a-zA-Z0-9]+\//)[0].replace('\/', '');
|
|
95
|
+
if (params === void 0 ||
|
|
96
|
+
(paramIsPath ? _.get(params, param) === void 0 : params[param] === void 0) ||
|
|
97
|
+
param === 'undefined') {
|
|
98
|
+
output.length = 0;
|
|
99
|
+
output.unshift(model);
|
|
100
|
+
return cutUrlModel(params, models, output);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (paramIsPath) {
|
|
104
|
+
let mrep = m.replace(new RegExp(`:${param}`, 'g'), `${_.get(params, param)}`);
|
|
105
|
+
output.unshift(mrep);
|
|
106
|
+
return cutUrlModel(params, models, output);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
let mrep = m.replace(new RegExp(`:${param}`, 'g'), `${params[param]}`);
|
|
110
|
+
output.unshift(mrep);
|
|
111
|
+
return cutUrlModel(params, models, output);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function interpolateParamsToUrl(params, url) {
|
|
116
|
+
const regexInt = /\[\[([^\..]+\.[^\..]+)+\]\]/g;
|
|
117
|
+
url = url.split('/').map(p => {
|
|
118
|
+
let isParam = p.startsWith(':');
|
|
119
|
+
if (isParam) {
|
|
120
|
+
let part = p.slice(1);
|
|
121
|
+
if (regexInt.test(part)) {
|
|
122
|
+
part = part.replace('[[', '');
|
|
123
|
+
part = part.replace(']]', '');
|
|
124
|
+
}
|
|
125
|
+
return `:${part}`;
|
|
126
|
+
}
|
|
127
|
+
return p;
|
|
128
|
+
}).join('/');
|
|
129
|
+
let slash = {
|
|
130
|
+
start: url.charAt(0) === '\/',
|
|
131
|
+
end: url.charAt(url.length - 1) === '\/'
|
|
132
|
+
};
|
|
133
|
+
let morePramsOnEnd = url.match(/(\/:[a-zA-Z0-9\.]+){2,10}/g);
|
|
134
|
+
if (morePramsOnEnd && (Array.isArray(morePramsOnEnd) && morePramsOnEnd.length === 1)) {
|
|
135
|
+
let m = morePramsOnEnd[0];
|
|
136
|
+
let match = m.match(/\/:[a-zA-Z0-9\.]+/g);
|
|
137
|
+
match.forEach(e => {
|
|
138
|
+
let c = e.replace('\/:', '');
|
|
139
|
+
if (regexisPath.test(c)) {
|
|
140
|
+
url = url.replace(e, `/${_.get(params, c)}`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
url = url.replace(e, `/${params[c]}`);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return url;
|
|
147
|
+
}
|
|
148
|
+
let nestedParams = url.match(/[a-zA-Z0-9]+\/:[a-zA-Z0-9\.]+/g);
|
|
149
|
+
if (!nestedParams || (Array.isArray(nestedParams) && nestedParams.length === 0))
|
|
150
|
+
return url;
|
|
151
|
+
if (!slash.end)
|
|
152
|
+
url = `${url}/`;
|
|
153
|
+
let addUndefinedForAlone = (!/:[a-zA-Z0-9\.]+\/$/g.test(url) && /[a-zA-Z0-9]+\/$/g.test(url));
|
|
154
|
+
let replace = (nestedParams.length > 1 ? nestedParams.join('\/') : nestedParams[0]) +
|
|
155
|
+
(addUndefinedForAlone ? '\/' + url.match(/[a-zA-Z0-9]+\/$/g)[0] : '\/');
|
|
156
|
+
let beginHref = url.replace(replace, '');
|
|
157
|
+
if (addUndefinedForAlone) {
|
|
158
|
+
url = url.replace(/\/$/g, '/:undefined');
|
|
159
|
+
nestedParams = url.match(/[a-zA-Z0-9]+\/:[a-zA-Z0-9\.]+/g);
|
|
160
|
+
url = cutUrlModel(params, nestedParams, []);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
url = cutUrlModel(params, nestedParams, []);
|
|
164
|
+
}
|
|
165
|
+
url = beginHref + url;
|
|
166
|
+
if (url.charAt(url.length - 1) !== '/' && slash.end)
|
|
167
|
+
url = `${url}/`;
|
|
168
|
+
if (url.charAt(0) !== '\/' && slash.start)
|
|
169
|
+
url = `/${url}`;
|
|
170
|
+
return url;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get query params from url, like 'ex' in /api/books?ex=value
|
|
174
|
+
*/
|
|
175
|
+
export function decodeUrl(url) {
|
|
176
|
+
let regex = /[?&]([^=#]+)=([^&#]*)/g, params = {}, match;
|
|
177
|
+
while (match = regex.exec(url)) {
|
|
178
|
+
params[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);
|
|
179
|
+
}
|
|
180
|
+
let paramsObject = params;
|
|
181
|
+
for (let p in paramsObject) {
|
|
182
|
+
if (paramsObject[p] === void 0) {
|
|
183
|
+
delete paramsObject[p];
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (paramsObject.hasOwnProperty(p)) {
|
|
187
|
+
let n = Number(params[p]);
|
|
188
|
+
if (!isNaN(n)) {
|
|
189
|
+
params[p] = n;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (typeof params[p] === 'string') {
|
|
193
|
+
let json;
|
|
194
|
+
try {
|
|
195
|
+
json = JSON.parse(params[p]);
|
|
196
|
+
}
|
|
197
|
+
catch (error) { }
|
|
198
|
+
if (json !== void 0) {
|
|
199
|
+
params[p] = json;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return params;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Create query params string for url
|
|
209
|
+
*
|
|
210
|
+
* @export
|
|
211
|
+
* @param {UrlParams[]} params
|
|
212
|
+
* @returns {string}
|
|
213
|
+
*/
|
|
214
|
+
export function getParamsUrl(params, doNotSerialize = false) {
|
|
215
|
+
let urlparts = [];
|
|
216
|
+
if (!params)
|
|
217
|
+
return '';
|
|
218
|
+
if (!(params instanceof Array))
|
|
219
|
+
return '';
|
|
220
|
+
if (params.length === 0)
|
|
221
|
+
return '';
|
|
222
|
+
params.forEach(urlparam => {
|
|
223
|
+
if (JSON.stringify(urlparam) !== '{}') {
|
|
224
|
+
let parameters = [];
|
|
225
|
+
let paramObject = urlparam;
|
|
226
|
+
for (let p in paramObject) {
|
|
227
|
+
if (paramObject[p] === void 0)
|
|
228
|
+
delete paramObject[p];
|
|
229
|
+
if (paramObject.hasOwnProperty(p) && typeof p === 'string' && p !== 'regex' && !(paramObject[p] instanceof RegExp)) {
|
|
230
|
+
if (p.length > 0 && p[0] === '/') {
|
|
231
|
+
let newName = p.slice(1, p.length - 1);
|
|
232
|
+
urlparam[newName] = urlparam[p];
|
|
233
|
+
urlparam[p] = void 0;
|
|
234
|
+
p = newName;
|
|
235
|
+
}
|
|
236
|
+
if (p.length > 0 && p[p.length - 1] === '/') {
|
|
237
|
+
let newName = p.slice(0, p.length - 2);
|
|
238
|
+
urlparam[newName] = urlparam[p];
|
|
239
|
+
urlparam[p] = void 0;
|
|
240
|
+
p = newName;
|
|
241
|
+
}
|
|
242
|
+
let v = urlparam[p];
|
|
243
|
+
if (v instanceof Object) {
|
|
244
|
+
urlparam[p] = JSON.stringify(urlparam[p]);
|
|
245
|
+
}
|
|
246
|
+
urlparam[p] = doNotSerialize ? urlparam[p] : encodeURIComponent(urlparam[p]);
|
|
247
|
+
if (urlparam.regex !== void 0 && urlparam.regex instanceof RegExp) {
|
|
248
|
+
if (!urlparam.regex.test(urlparam[p])) {
|
|
249
|
+
console.warn(`Data: ${urlparam[p]} incostistent with regex ${urlparam.regex.source}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
parameters.push(`${p}=${urlparam[p]}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
urlparts.push(parameters.join('&'));
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
let join = urlparts.join().trim();
|
|
259
|
+
if (join.trim() === '')
|
|
260
|
+
return '';
|
|
261
|
+
return `?${urlparts.join('&')}`;
|
|
262
|
+
}
|
|
263
|
+
function transform(o) {
|
|
264
|
+
if (typeof o === 'object') {
|
|
265
|
+
return encodeURIComponent(JSON.stringify(o));
|
|
266
|
+
}
|
|
267
|
+
return o;
|
|
268
|
+
}
|
|
269
|
+
export function prepareUrlOldWay(params) {
|
|
270
|
+
if (!params)
|
|
271
|
+
return this.endpoint;
|
|
272
|
+
if (typeof params === 'object') {
|
|
273
|
+
params = transform(params);
|
|
274
|
+
}
|
|
275
|
+
return this.endpoint + '/' + params;
|
|
276
|
+
}
|
|
277
|
+
;
|
|
278
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/params.ts
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBSTVELHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQWU7SUFDckMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHO1FBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFN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QUFDLFFBQVEsQ0FBQztJQUNsQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFHQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBkaWZmQ2hhcnMgfSBmcm9tICdkaWZmJztcbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4vaGVscGVycyc7XG5cbmNvbnN0IGxvZyA9IExvZy5jcmVhdGUoJ1tuZzItcmVzdF0gcGFyYW1zJywgTGV2ZWwuX19OT1RISU5HKVxuXG5cblxuLyoqIGNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIHBhdHRlcm4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkKHBhdHRlcm46IHN0cmluZykge1xuICByZXR1cm4gKG5ldyBSZWdFeHAoJ1xcLzpbYS16QS1aXSonLCAnZycpKS50ZXN0KHBhdHRlcm4ucmVwbGFjZSgnOi8vJywgJycpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrKHVybDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFIZWxwZXJzLmNoZWNrVmFsaWRVcmwodXJsKSkge1xuICAgIGxvZy5lcnJvcihgSW5jb3JyZWN0IHVybDogJHt1cmx9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh1cmwuY2hhckF0KHVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB1cmwgPSB1cmwuc2xpY2UoMCwgdXJsLmxlbmd0aCAtIDIpO1xuICBpZiAocGF0dGVybi5jaGFyQXQocGF0dGVybi5sZW5ndGggLSAxKSA9PT0gJy8nKSBwYXR0ZXJuID0gcGF0dGVybi5zbGljZSgwLCB1cmwubGVuZ3RoIC0gMik7XG4gIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcLy9nLCAnXFwvJyk7XG4gIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwvOlthLXpBLVpdKicsICdnJyksICcuKycpO1xuICBsZXQgcmVnID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZycpO1xuICByZXR1cm4gcmVnLnRlc3QodXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVscyhwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGxldCBtID0gcGF0dGVybi5tYXRjaChuZXcgUmVnRXhwKCdbYS16LUEtWl0qXFwvOicsICdnJykpO1xuICByZXR1cm4gbS5tYXAocCA9PiBwLnJlcGxhY2UoJy86JywgJycpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3RQcmFtc05hbWVzKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgaWYgKHBhdHRlcm4uY2hhckF0KHBhdHRlcm4ubGVuZ3RoIC0gMSkgIT09ICcvJykgcGF0dGVybiA9IGAke3BhdHRlcm59L2A7XG4gIGxldCBtID0gcGF0dGVybi5tYXRjaChuZXcgUmVnRXhwKCc6W2EtekEtWl0qXFwvJywgJ2cnKSk7XG4gIGxldCByZXMgPSBtLm1hcChwID0+IHAucmVwbGFjZSgnOicsICcnKS5yZXBsYWNlKCcvJywgJycpKTtcbiAgcmV0dXJuIHJlcy5maWx0ZXIocCA9PiBwLnRyaW0oKSAhPT0gJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNNb2RlbHModXJsOiBzdHJpbmcsIG1vZGVsczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKHVybC5jaGFyQXQoMCkgIT09ICcvJykgdXJsID0gJy8nICsgdXJsO1xuXG4gIGxldCByZXMgPSBtb2RlbHMuZmlsdGVyKG0gPT4ge1xuICAgIGxldCB3b3JkID0gJy8nICsgbTtcblxuICAgIGxldCBpaWkgPSB1cmwuaW5kZXhPZih3b3JkKTtcblxuICAgIGlmIChpaWkgKyB3b3JkLmxlbmd0aCA8IHVybC5sZW5ndGggJiYgdXJsLmNoYXJBdChpaWkgKyB3b3JkLmxlbmd0aCkgIT09ICcvJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaWlpICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwvJyArIG0sICdnJyksICcnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pLmxlbmd0aDtcblxuICByZXR1cm4gcmVzID09PSBtb2RlbHMubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnMobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IHJlcyA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgcmVzICs9ICcqJztcbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3RQYXJhbXModXJsOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IE9iamVjdCB7XG4gIGxldCByZXMgPSB7fTtcbiAgbGV0IG1vZGVscyA9IGdldFJlc3RQcmFtc05hbWVzKHBhdHRlcm4pO1xuXG4gIG1vZGVscy5mb3JFYWNoKG0gPT4ge1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoYDoke219YCwgc3RhcnMobS5sZW5ndGgpKTtcbiAgfSlcblxuICBsZXQgY3VycmVudE1vZGVsOiBzdHJpbmcgPSB2b2lkIDA7XG4gIGRpZmZDaGFycyhwYXR0ZXJuLCB1cmwpLmZvckVhY2goZCA9PiB7XG5cbiAgICBpZiAoZC5hZGRlZCkge1xuICAgICAgaWYgKCFpc05hTihOdW1iZXIoZC52YWx1ZSkpKSByZXNbY3VycmVudE1vZGVsXSA9IE51bWJlcihkLnZhbHVlKTtcbiAgICAgIGVsc2UgaWYgKGQudmFsdWUudHJpbSgpID09PSAndHJ1ZScpIHJlc1tjdXJyZW50TW9kZWxdID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKGQudmFsdWUudHJpbSgpID09PSAnZmFsc2UnKSByZXNbY3VycmVudE1vZGVsXSA9IGZhbHNlO1xuICAgICAgZWxzZSByZXNbY3VycmVudE1vZGVsXSA9IGRlY29kZVVSSUNvbXBvbmVudChkLnZhbHVlKTtcbiAgICAgIGN1cnJlbnRNb2RlbCA9IHZvaWQgMDtcbiAgICB9XG4gICAgbGV0IG0gPSBkLnZhbHVlLnJlcGxhY2UoJzonLCBcIlwiKTtcblxuICAgIGlmIChkLnJlbW92ZWQpIHtcbiAgICAgIGN1cnJlbnRNb2RlbCA9IG1vZGVscy5zaGlmdCgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCByZWdleGlzUGF0aCA9IC9bXlxcLi5dKyhcXC5bXlxcLi5dKykrL2c7XG5cbi8qKlxuICogTW9kZWxzIGxpa2UgYm9va3MvOmlkXG4gKi9cbmZ1bmN0aW9uIGN1dFVybE1vZGVsKHBhcmFtczogT2JqZWN0LCBtb2RlbHM6IHN0cmluZ1tdLCBvdXRwdXQ6IHN0cmluZ1tdKSB7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwKSByZXR1cm4gb3V0cHV0LmpvaW4oJ1xcLycpO1xuICBsZXQgbSA9IG1vZGVscy5wb3AoKTtcblxuICBsZXQgcGFyYW0gPSBtLm1hdGNoKC86W2EtekEtWjAtOVxcLl0rLylbMF0ucmVwbGFjZSgnOicsICcnKTtcbiAgY29uc3QgcGFyYW1Jc1BhdGggPSByZWdleGlzUGF0aC50ZXN0KHBhcmFtKVxuXG4gIGxldCBtb2RlbCA9IG0ubWF0Y2goL1thLXpBLVowLTldK1xcLy8pWzBdLnJlcGxhY2UoJ1xcLycsICcnKTtcbiAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwIHx8XG4gICAgKHBhcmFtSXNQYXRoID8gXy5nZXQocGFyYW1zLCBwYXJhbSkgPT09IHZvaWQgMCA6IHBhcmFtc1twYXJhbV0gPT09IHZvaWQgMCkgfHxcbiAgICBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvdXRwdXQubGVuZ3RoID0gMDtcbiAgICBvdXRwdXQudW5zaGlmdChtb2RlbClcbiAgICByZXR1cm4gY3V0VXJsTW9kZWwocGFyYW1zLCBtb2RlbHMsIG91dHB1dCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhcmFtSXNQYXRoKSB7XG5cbiAgICAgIGxldCBtcmVwID0gbS5yZXBsYWNlKG5ldyBSZWdFeHAoYDoke3BhcmFtfWAsICdnJyksIGAke18uZ2V0KHBhcmFtcywgcGFyYW0pfWApXG4gICAgICBvdXRwdXQudW5zaGlmdChtcmVwKVxuICAgICAgcmV0dXJuIGN1dFVybE1vZGVsKHBhcmFtcywgbW9kZWxzLCBvdXRwdXQpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIGxldCBtcmVwID0gbS5yZXBsYWNlKG5ldyBSZWdFeHAoYDoke3BhcmFtfWAsICdnJyksIGAke3BhcmFtc1twYXJhbV19YClcbiAgICAgIG91dHB1dC51bnNoaWZ0KG1yZXApXG4gICAgICByZXR1cm4gY3V0VXJsTW9kZWwocGFyYW1zLCBtb2RlbHMsIG91dHB1dCk7XG4gICAgfVxuXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwb2xhdGVQYXJhbXNUb1VybChwYXJhbXM6IE9iamVjdCwgdXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gIGNvbnN0IHJlZ2V4SW50ID0gL1xcW1xcWyhbXlxcLi5dK1xcLlteXFwuLl0rKStcXF1cXF0vZztcblxuICB1cmwgPSB1cmwuc3BsaXQoJy8nKS5tYXAocCA9PiB7XG5cbiAgICBsZXQgaXNQYXJhbSA9IHAuc3RhcnRzV2l0aCgnOicpXG4gICAgaWYgKGlzUGFyYW0pIHtcbiAgICAgIGxldCBwYXJ0ID0gcC5zbGljZSgxKTtcblxuICAgICAgaWYgKHJlZ2V4SW50LnRlc3QocGFydCkpIHtcblxuICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKCdbWycsICcnKVxuICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKCddXScsICcnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGA6JHtwYXJ0fWBcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKTtcblxuXG5cblxuXG4gIGxldCBzbGFzaCA9IHtcbiAgICBzdGFydDogdXJsLmNoYXJBdCgwKSA9PT0gJ1xcLycsXG4gICAgZW5kOiB1cmwuY2hhckF0KHVybC5sZW5ndGggLSAxKSA9PT0gJ1xcLydcbiAgfVxuXG4gIGxldCBtb3JlUHJhbXNPbkVuZCA9IHVybC5tYXRjaCgvKFxcLzpbYS16QS1aMC05XFwuXSspezIsMTB9L2cpO1xuICBpZiAobW9yZVByYW1zT25FbmQgJiYgKEFycmF5LmlzQXJyYXkobW9yZVByYW1zT25FbmQpICYmIG1vcmVQcmFtc09uRW5kLmxlbmd0aCA9PT0gMSkpIHtcblxuICAgIGxldCBtID0gbW9yZVByYW1zT25FbmRbMF07XG4gICAgbGV0IG1hdGNoID0gbS5tYXRjaCgvXFwvOlthLXpBLVowLTlcXC5dKy9nKTtcblxuICAgIG1hdGNoLmZvckVhY2goZSA9PiB7XG4gICAgICBsZXQgYyA9IGUucmVwbGFjZSgnXFwvOicsICcnKTtcblxuICAgICAgaWYgKHJlZ2V4aXNQYXRoLnRlc3QoYykpIHtcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoZSwgYC8ke18uZ2V0KHBhcmFtcywgYyl9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKGUsIGAvJHtwYXJhbXNbY119YClcbiAgICAgIH1cblxuXG5cbiAgICB9KVxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBsZXQgbmVzdGVkUGFyYW1zID0gdXJsLm1hdGNoKC9bYS16QS1aMC05XStcXC86W2EtekEtWjAtOVxcLl0rL2cpO1xuICBpZiAoIW5lc3RlZFBhcmFtcyB8fCAoQXJyYXkuaXNBcnJheShuZXN0ZWRQYXJhbXMpICYmIG5lc3RlZFBhcmFtcy5sZW5ndGggPT09IDApKSByZXR1cm4gdXJsO1xuXG5cbiAgaWYgKCFzbGFzaC5lbmQpIHVybCA9IGAke3VybH0vYDtcbiAgbGV0IGFkZFVuZGVmaW5lZEZvckFsb25lID0gKCEvOlthLXpBLVowLTlcXC5dK1xcLyQvZy50ZXN0KHVybCkgJiYgL1thLXpBLVowLTldK1xcLyQvZy50ZXN0KHVybCkpO1xuXG4gIGxldCByZXBsYWNlID0gKG5lc3RlZFBhcmFtcy5sZW5ndGggPiAxID8gbmVzdGVkUGFyYW1zLmpvaW4oJ1xcLycpIDogbmVzdGVkUGFyYW1zWzBdKSArXG4gICAgKGFkZFVuZGVmaW5lZEZvckFsb25lID8gJ1xcLycgKyB1cmwubWF0Y2goL1thLXpBLVowLTldK1xcLyQvZylbMF0gOiAnXFwvJyk7XG4gIGxldCBiZWdpbkhyZWYgPSB1cmwucmVwbGFjZShyZXBsYWNlLCAnJylcblxuICBpZiAoYWRkVW5kZWZpbmVkRm9yQWxvbmUpIHtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwvJC9nLCAnLzp1bmRlZmluZWQnKVxuICAgIG5lc3RlZFBhcmFtcyA9IHVybC5tYXRjaCgvW2EtekEtWjAtOV0rXFwvOlthLXpBLVowLTlcXC5dKy9nKTtcbiAgICB1cmwgPSBjdXRVcmxNb2RlbChwYXJhbXMsIG5lc3RlZFBhcmFtcywgW10pXG4gIH0gZWxzZSB7XG4gICAgdXJsID0gY3V0VXJsTW9kZWwocGFyYW1zLCBuZXN0ZWRQYXJhbXMsIFtdKVxuICB9XG4gIHVybCA9IGJlZ2luSHJlZiArIHVybDtcblxuICBpZiAodXJsLmNoYXJBdCh1cmwubGVuZ3RoIC0gMSkgIT09ICcvJyAmJiBzbGFzaC5lbmQpIHVybCA9IGAke3VybH0vYDtcbiAgaWYgKHVybC5jaGFyQXQoMCkgIT09ICdcXC8nICYmIHNsYXNoLnN0YXJ0KSB1cmwgPSBgLyR7dXJsfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBHZXQgcXVlcnkgcGFyYW1zIGZyb20gdXJsLCBsaWtlICdleCcgaW4gL2FwaS9ib29rcz9leD12YWx1ZVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVcmwodXJsOiBzdHJpbmcpOiBPYmplY3Qge1xuICBsZXQgcmVnZXggPSAvWz8mXShbXj0jXSspPShbXiYjXSopL2csXG4gICAgcGFyYW1zID0ge30sXG4gICAgbWF0Y2g7XG4gIHdoaWxlIChtYXRjaCA9IHJlZ2V4LmV4ZWModXJsKSkge1xuICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFsyXSk7XG4gIH1cbiAgbGV0IHBhcmFtc09iamVjdCA9IDxPYmplY3Q+cGFyYW1zO1xuICBmb3IgKGxldCBwIGluIHBhcmFtc09iamVjdCkge1xuICAgIGlmIChwYXJhbXNPYmplY3RbcF0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIHBhcmFtc09iamVjdFtwXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zT2JqZWN0Lmhhc093blByb3BlcnR5KHApKSB7XG5cbiAgICAgIGxldCBuID0gTnVtYmVyKHBhcmFtc1twXSk7XG4gICAgICBpZiAoIWlzTmFOKG4pKSB7XG4gICAgICAgIHBhcmFtc1twXSA9IG47XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbcF0gPT09ICdzdHJpbmcnKSB7XG5cblxuICAgICAgICBsZXQganNvbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShwYXJhbXNbcF0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikgeyB9XG4gICAgICAgIGlmIChqc29uICE9PSB2b2lkIDApIHtcbiAgICAgICAgICBwYXJhbXNbcF0gPSBqc29uO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cblxuXG5cblxuXG5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDcmVhdGUgcXVlcnkgcGFyYW1zIHN0cmluZyBmb3IgdXJsXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtVcmxQYXJhbXNbXX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW1zVXJsKHBhcmFtczogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgbGV0IHVybHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoIXBhcmFtcykgcmV0dXJuICcnO1xuICBpZiAoIShwYXJhbXMgaW5zdGFuY2VvZiBBcnJheSkpIHJldHVybiAnJztcbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcblxuICBwYXJhbXMuZm9yRWFjaCh1cmxwYXJhbSA9PiB7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHVybHBhcmFtKSAhPT0gJ3t9Jykge1xuXG4gICAgICBsZXQgcGFyYW1ldGVyczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBwYXJhbU9iamVjdCA9IDxPYmplY3Q+dXJscGFyYW07XG5cblxuICAgICAgZm9yIChsZXQgcCBpbiBwYXJhbU9iamVjdCkge1xuICAgICAgICBpZiAocGFyYW1PYmplY3RbcF0gPT09IHZvaWQgMCkgZGVsZXRlIHBhcmFtT2JqZWN0W3BdO1xuICAgICAgICBpZiAocGFyYW1PYmplY3QuaGFzT3duUHJvcGVydHkocCkgJiYgdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAgIT09ICdyZWdleCcgJiYgIShwYXJhbU9iamVjdFtwXSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICBpZiAocC5sZW5ndGggPiAwICYmIHBbMF0gPT09ICcvJykge1xuICAgICAgICAgICAgbGV0IG5ld05hbWUgPSBwLnNsaWNlKDEsIHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB1cmxwYXJhbVtuZXdOYW1lXSA9IHVybHBhcmFtW3BdO1xuICAgICAgICAgICAgdXJscGFyYW1bcF0gPSB2b2lkIDA7XG4gICAgICAgICAgICBwID0gbmV3TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHAubGVuZ3RoID4gMCAmJiBwW3AubGVuZ3RoIC0gMV0gPT09ICcvJykge1xuICAgICAgICAgICAgbGV0IG5ld05hbWUgPSBwLnNsaWNlKDAsIHAubGVuZ3RoIC0gMik7XG4gICAgICAgICAgICB1cmxwYXJhbVtuZXdOYW1lXSA9IHVybHBhcmFtW3BdO1xuICAgICAgICAgICAgdXJscGFyYW1bcF0gPSB2b2lkIDA7XG4gICAgICAgICAgICBwID0gbmV3TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHY6IGFueSA9IHVybHBhcmFtW3BdO1xuICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICB1cmxwYXJhbVtwXSA9IEpTT04uc3RyaW5naWZ5KHVybHBhcmFtW3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdXJscGFyYW1bcF0gPSBkb05vdFNlcmlhbGl6ZSA/IDxzdHJpbmc+dXJscGFyYW1bcF0gOiBlbmNvZGVVUklDb21wb25lbnQoPHN0cmluZz51cmxwYXJhbVtwXSk7XG4gICAgICAgICAgaWYgKHVybHBhcmFtLnJlZ2V4ICE9PSB2b2lkIDAgJiYgdXJscGFyYW0ucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApIHtcblxuICAgICAgICAgICAgaWYgKCF1cmxwYXJhbS5yZWdleC50ZXN0KDxzdHJpbmc+dXJscGFyYW1bcF0pKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YTogJHt1cmxwYXJhbVtwXX0gaW5jb3N0aXN0ZW50IHdpdGggcmVnZXggJHt1cmxwYXJhbS5yZWdleC5zb3VyY2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmFtZXRlcnMucHVzaChgJHtwfT0ke3VybHBhcmFtW3BdfWApO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgdXJscGFydHMucHVzaChwYXJhbWV0ZXJzLmpvaW4oJyYnKSk7XG5cblxuICAgIH1cblxuXG4gIH0pO1xuICBsZXQgam9pbiA9IHVybHBhcnRzLmpvaW4oKS50cmltKCk7XG4gIGlmIChqb2luLnRyaW0oKSA9PT0gJycpIHJldHVybiAnJztcbiAgcmV0dXJuIGA/JHt1cmxwYXJ0cy5qb2luKCcmJyl9YDtcbn1cblxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0obykge1xuICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvKSk7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVVcmxPbGRXYXkocGFyYW1zPzogVGVtcGxhdGVTdHJpbmdzQXJyYXkpOiBzdHJpbmcge1xuICBpZiAoIXBhcmFtcykgcmV0dXJuIHRoaXMuZW5kcG9pbnQ7XG4gIGlmICh0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgIHBhcmFtcyA9IHRyYW5zZm9ybShwYXJhbXMpO1xuICB9XG4gIHJldHVybiB0aGlzLmVuZHBvaW50ICsgJy8nICsgcGFyYW1zO1xufVxuXG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvcGFyYW1zLnRzIl19
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Models } from './models';
|
|
2
|
+
import { Log, Level } from 'ng2-logger/browser';
|
|
3
|
+
import { Helpers } from 'tnp-core/browser';
|
|
4
|
+
import { RestHeaders } from './rest-headers';
|
|
5
|
+
const log = Log.create('request-cache', Level.__NOTHING);
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated
|
|
8
|
+
* there is Cache API for that
|
|
9
|
+
*/
|
|
10
|
+
export class RequestCache {
|
|
11
|
+
static { this.LOCAL_STORAGE_KEY = 'ng2restrequestcache'; }
|
|
12
|
+
static { this.cached = []; }
|
|
13
|
+
static { this.isRestoredFromLocalStorage = false; }
|
|
14
|
+
static restoreFromLocalStorage() {
|
|
15
|
+
if (Helpers.isNode) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!RequestCache.isRestoredFromLocalStorage) {
|
|
19
|
+
RequestCache.isRestoredFromLocalStorage = true;
|
|
20
|
+
const data = localStorage.getItem(RequestCache.LOCAL_STORAGE_KEY);
|
|
21
|
+
let requests = [];
|
|
22
|
+
if (data) {
|
|
23
|
+
try {
|
|
24
|
+
requests = JSON.parse(data);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
}
|
|
28
|
+
const restored = requests.map(r => {
|
|
29
|
+
let { sourceRequest, responseText, body, headers, circular, entity, isArray, cookies, statusCode } = r.response;
|
|
30
|
+
r.response = new Models.HttpResponse(sourceRequest, responseText, RestHeaders.from(headers), statusCode, entity, circular, -1, // jobid from local storage TODO
|
|
31
|
+
isArray);
|
|
32
|
+
r = new RequestCache(r.response);
|
|
33
|
+
r.response.rq = r;
|
|
34
|
+
return r;
|
|
35
|
+
});
|
|
36
|
+
log.i('RESTORED FROM LOCAL STORAGE', restored);
|
|
37
|
+
RequestCache.cached = restored;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
static findBy(sourceRequest) {
|
|
42
|
+
log.i('findby', sourceRequest);
|
|
43
|
+
log.i('RequestCache.cached', RequestCache.cached);
|
|
44
|
+
RequestCache.restoreFromLocalStorage();
|
|
45
|
+
return RequestCache.cached.find(c => {
|
|
46
|
+
const a = c.response.sourceRequest;
|
|
47
|
+
const b = sourceRequest;
|
|
48
|
+
return (a.isArray === b.isArray &&
|
|
49
|
+
a.url === b.url &&
|
|
50
|
+
a.method === b.method &&
|
|
51
|
+
a.body === b.body);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
constructor(response) {
|
|
55
|
+
this.response = response;
|
|
56
|
+
}
|
|
57
|
+
get containsCache() {
|
|
58
|
+
RequestCache.restoreFromLocalStorage();
|
|
59
|
+
return RequestCache.cached.includes(this);
|
|
60
|
+
}
|
|
61
|
+
persistsInLocalStorage() {
|
|
62
|
+
localStorage.setItem(RequestCache.LOCAL_STORAGE_KEY, JSON.stringify(RequestCache.cached.map(r => {
|
|
63
|
+
return {
|
|
64
|
+
response: {
|
|
65
|
+
sourceRequest: r.response.sourceRequest,
|
|
66
|
+
responseText: r.response.responseText,
|
|
67
|
+
headers: r.response.headers,
|
|
68
|
+
statusCode: r.response.statusCode,
|
|
69
|
+
entity: r.response.entity,
|
|
70
|
+
circular: r.response.circular,
|
|
71
|
+
isArray: r.response.isArray,
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
})));
|
|
75
|
+
}
|
|
76
|
+
store() {
|
|
77
|
+
RequestCache.restoreFromLocalStorage();
|
|
78
|
+
if (!this.containsCache) {
|
|
79
|
+
RequestCache.cached.push(this);
|
|
80
|
+
this.persistsInLocalStorage();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log('already stored');
|
|
84
|
+
}
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
remove() {
|
|
88
|
+
RequestCache.restoreFromLocalStorage();
|
|
89
|
+
const index = RequestCache.cached.indexOf(this);
|
|
90
|
+
if (index !== -1) {
|
|
91
|
+
RequestCache.cached.splice(index, 1);
|
|
92
|
+
this.persistsInLocalStorage();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log('already removed');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
;
|
|
100
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/request-cache.ts
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L25nMi1yZXN0L3Byb2plY3RzL25nMi1yZXN0L3NyYy9saWIvcmVxdWVzdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7YUFFUCxzQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQzthQUUzQyxXQUFNLEdBQW1CLEVBQUUsQ0FBQzthQUM1QiwrQkFBMEIsR0FBRyxLQUFLLENBQUM7SUFFMUMsTUFBTSxDQUFDLHVCQUF1QjtRQUNwQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM3QyxZQUFZLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEUsSUFBSSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQztvQkFDSCxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQW1CLENBQUM7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LE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU87aUJBQ0E7YUFDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxLQUFLO1FBQ0gsWUFBWSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTTtRQUNKLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDOztBQUlGLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsMERBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgUmVzdEhlYWRlcnMgfSBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG5jb25zdCBsb2cgPSBMb2cuY3JlYXRlKCdyZXF1ZXN0LWNhY2hlJywgTGV2ZWwuX19OT1RISU5HKVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiB0aGVyZSBpcyBDYWNoZSBBUEkgZm9yIHRoYXRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVlc3RDYWNoZSB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ25nMnJlc3RyZXF1ZXN0Y2FjaGUnO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlZDogUmVxdWVzdENhY2hlW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWMgaXNSZXN0b3JlZEZyb21Mb2NhbFN0b3JhZ2UgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXRpYyByZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpIHtcbiAgICBpZiAoSGVscGVycy5pc05vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFSZXF1ZXN0Q2FjaGUuaXNSZXN0b3JlZEZyb21Mb2NhbFN0b3JhZ2UpIHtcbiAgICAgIFJlcXVlc3RDYWNoZS5pc1Jlc3RvcmVkRnJvbUxvY2FsU3RvcmFnZSA9IHRydWU7XG4gICAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUmVxdWVzdENhY2hlLkxPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICAgIGxldCByZXF1ZXN0czogUmVxdWVzdENhY2hlW10gPSBbXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVxdWVzdHMgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFJlcXVlc3RDYWNoZVtdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdG9yZWQgPSByZXF1ZXN0cy5tYXAociA9PiB7XG4gICAgICAgICAgbGV0IHsgc291cmNlUmVxdWVzdCwgcmVzcG9uc2VUZXh0LCBib2R5LCBoZWFkZXJzLCBjaXJjdWxhcixcbiAgICAgICAgICAgIGVudGl0eSwgaXNBcnJheSwgY29va2llcywgc3RhdHVzQ29kZSB9ID0gci5yZXNwb25zZTtcbiAgICAgICAgICByLnJlc3BvbnNlID0gbmV3IE1vZGVscy5IdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICBzb3VyY2VSZXF1ZXN0LFxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbShoZWFkZXJzKSxcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBjaXJjdWxhcixcbiAgICAgICAgICAgIC0xLCAvLyBqb2JpZCBmcm9tIGxvY2FsIHN0b3JhZ2UgVE9ET1xuICAgICAgICAgICAgaXNBcnJheSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHIgPSBuZXcgUmVxdWVzdENhY2hlKHIucmVzcG9uc2UpO1xuICAgICAgICAgIHIucmVzcG9uc2UucnEgPSByO1xuXG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2cuaSgnUkVTVE9SRUQgRlJPTSBMT0NBTCBTVE9SQUdFJywgcmVzdG9yZWQpO1xuICAgICAgICBSZXF1ZXN0Q2FjaGUuY2FjaGVkID0gcmVzdG9yZWQ7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZpbmRCeShzb3VyY2VSZXF1ZXN0OiBNb2RlbHMuSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMpIHtcbiAgICBsb2cuaSgnZmluZGJ5Jywgc291cmNlUmVxdWVzdClcbiAgICBsb2cuaSgnUmVxdWVzdENhY2hlLmNhY2hlZCcsIFJlcXVlc3RDYWNoZS5jYWNoZWQpXG4gICAgUmVxdWVzdENhY2hlLnJlc3RvcmVGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgcmV0dXJuIFJlcXVlc3RDYWNoZS5jYWNoZWQuZmluZChjID0+IHtcbiAgICAgIGNvbnN0IGEgPSBjLnJlc3BvbnNlLnNvdXJjZVJlcXVlc3Q7XG4gICAgICBjb25zdCBiID0gc291cmNlUmVxdWVzdDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGEuaXNBcnJheSA9PT0gYi5pc0FycmF5ICYmXG4gICAgICAgIGEudXJsID09PSBiLnVybCAmJlxuICAgICAgICBhLm1ldGhvZCA9PT0gYi5tZXRob2QgJiZcbiAgICAgICAgYS5ib2R5ID09PSBiLmJvZHlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXNwb25zZTogTW9kZWxzLkh0dHBSZXNwb25zZTxhbnk+XG4gICkge1xuXG4gIH1cblxuICBnZXQgY29udGFpbnNDYWNoZSgpIHtcbiAgICBSZXF1ZXN0Q2FjaGUucmVzdG9yZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICByZXR1cm4gUmVxdWVzdENhY2hlLmNhY2hlZC5pbmNsdWRlcyh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdHNJbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShSZXF1ZXN0Q2FjaGUuTE9DQUxfU1RPUkFHRV9LRVksXG4gICAgICBKU09OLnN0cmluZ2lmeShSZXF1ZXN0Q2FjaGUuY2FjaGVkLm1hcChyID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgc291cmNlUmVxdWVzdDogci5yZXNwb25zZS5zb3VyY2VSZXF1ZXN0LFxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiByLnJlc3BvbnNlLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHIucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHIucmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIGVudGl0eTogci5yZXNwb25zZS5lbnRpdHksXG4gICAgICAgICAgICBjaXJjdWxhcjogci5yZXNwb25zZS5jaXJjdWxhcixcbiAgICAgICAgICAgIGlzQXJyYXk6IHIucmVzcG9uc2UuaXNBcnJheSxcbiAgICAgICAgICB9IGFzIE1vZGVscy5IdHRwUmVzcG9uc2U8YW55PlxuICAgICAgICB9O1xuICAgICAgfSkpKTtcbiAgfVxuXG4gIHN0b3JlKCkge1xuICAgIFJlcXVlc3RDYWNoZS5yZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICghdGhpcy5jb250YWluc0NhY2hlKSB7XG4gICAgICBSZXF1ZXN0Q2FjaGUuY2FjaGVkLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBlcnNpc3RzSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ2FscmVhZHkgc3RvcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIFJlcXVlc3RDYWNoZS5yZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gUmVxdWVzdENhY2hlLmNhY2hlZC5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIFJlcXVlc3RDYWNoZS5jYWNoZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMucGVyc2lzdHNJbkxvY2FsU3RvcmFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnYWxyZWFkeSByZW1vdmVkJyk7XG4gICAgfVxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9yZXF1ZXN0LWNhY2hlLnRzIl19
|