ng2-rest 13.2.4 → 13.2.6
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/README.md +135 -135
- package/assets/shared/shared_folder_info.txt +1 -1
- package/browser/README.md +24 -24
- package/browser/esm2020/lib/content-type.mjs +12 -12
- package/browser/esm2020/lib/cookie.mjs +28 -28
- package/browser/esm2020/lib/helpers.mjs +23 -23
- package/browser/esm2020/lib/index.mjs +12 -12
- package/browser/esm2020/lib/mapping.mjs +238 -238
- package/browser/esm2020/lib/models.mjs +160 -165
- package/browser/esm2020/lib/other/simple-resource.mjs +116 -116
- package/browser/esm2020/lib/params.mjs +278 -278
- package/browser/esm2020/lib/request-cache.mjs +100 -100
- package/browser/esm2020/lib/resource.service.mjs +213 -213
- package/browser/esm2020/lib/rest-headers.mjs +128 -128
- package/browser/esm2020/lib/rest-request.mjs +321 -321
- package/browser/esm2020/lib/rest.class.mjs +115 -115
- package/browser/esm2020/ng2-rest.mjs +4 -4
- package/browser/esm2020/public-api.mjs +1 -1
- package/browser/fesm2015/ng2-rest.mjs +1677 -1683
- package/browser/fesm2015/ng2-rest.mjs.map +1 -1
- package/browser/fesm2020/ng2-rest.mjs +1675 -1681
- package/browser/fesm2020/ng2-rest.mjs.map +1 -1
- package/browser/lib/content-type.d.ts +4 -4
- package/browser/lib/cookie.d.ts +7 -7
- package/browser/lib/helpers.d.ts +10 -10
- package/browser/lib/index.d.ts +9 -9
- package/browser/lib/mapping.d.ts +12 -12
- package/browser/lib/models.d.ts +157 -157
- package/browser/lib/other/simple-resource.d.ts +29 -29
- package/browser/lib/params.d.ts +23 -23
- package/browser/lib/request-cache.d.ts +17 -17
- package/browser/lib/resource.service.d.ts +43 -43
- package/browser/lib/rest-headers.d.ts +57 -57
- package/browser/lib/rest-request.d.ts +21 -21
- package/browser/lib/rest.class.d.ts +36 -36
- package/browser/ng2-rest.d.ts +4 -4
- package/client/README.md +24 -24
- package/client/esm2020/lib/content-type.mjs +12 -12
- package/client/esm2020/lib/cookie.mjs +28 -28
- package/client/esm2020/lib/helpers.mjs +23 -23
- package/client/esm2020/lib/index.mjs +12 -12
- package/client/esm2020/lib/mapping.mjs +238 -238
- package/client/esm2020/lib/models.mjs +160 -165
- package/client/esm2020/lib/other/simple-resource.mjs +116 -116
- package/client/esm2020/lib/params.mjs +278 -278
- package/client/esm2020/lib/request-cache.mjs +100 -100
- package/client/esm2020/lib/resource.service.mjs +213 -213
- package/client/esm2020/lib/rest-headers.mjs +128 -128
- package/client/esm2020/lib/rest-request.mjs +321 -321
- package/client/esm2020/lib/rest.class.mjs +115 -115
- package/client/esm2020/ng2-rest.mjs +4 -4
- package/client/esm2020/public-api.mjs +1 -1
- package/client/fesm2015/ng2-rest.mjs +1677 -1683
- package/client/fesm2015/ng2-rest.mjs.map +1 -1
- package/client/fesm2020/ng2-rest.mjs +1675 -1681
- package/client/fesm2020/ng2-rest.mjs.map +1 -1
- package/client/lib/content-type.d.ts +4 -4
- package/client/lib/cookie.d.ts +7 -7
- package/client/lib/helpers.d.ts +10 -10
- package/client/lib/index.d.ts +9 -9
- package/client/lib/mapping.d.ts +12 -12
- package/client/lib/models.d.ts +157 -157
- package/client/lib/other/simple-resource.d.ts +29 -29
- package/client/lib/params.d.ts +23 -23
- package/client/lib/request-cache.d.ts +17 -17
- package/client/lib/resource.service.d.ts +43 -43
- package/client/lib/rest-headers.d.ts +57 -57
- package/client/lib/rest-request.d.ts +21 -21
- package/client/lib/rest.class.d.ts +36 -36
- package/client/ng2-rest.d.ts +4 -4
- package/client/package.json +44 -44
- package/index.d.ts +1 -1
- package/lib/content-type.d.ts +5 -5
- package/lib/cookie.d.ts +8 -8
- package/lib/helpers.d.ts +11 -11
- package/lib/index.d.ts +10 -10
- package/lib/mapping.d.ts +13 -13
- package/lib/models.d.ts +158 -158
- package/lib/models.js +5 -12
- package/lib/models.js.map +1 -1
- package/lib/other/simple-resource.d.ts +30 -30
- package/lib/params.d.ts +24 -24
- package/lib/request-cache.d.ts +18 -18
- package/lib/resource.service.d.ts +44 -44
- package/lib/rest-headers.d.ts +58 -58
- package/lib/rest-request.d.ts +22 -22
- package/lib/rest.class.d.ts +37 -37
- package/package.json +5 -238
- package/package.json_devDependencies.json +217 -217
- package/package.json_tnp.json5 +50 -50
- package/tmp-environment.json +48 -48
- package/websql/README.md +24 -24
- package/websql/esm2020/lib/content-type.mjs +12 -12
- package/websql/esm2020/lib/cookie.mjs +28 -28
- package/websql/esm2020/lib/helpers.mjs +23 -23
- package/websql/esm2020/lib/index.mjs +12 -12
- package/websql/esm2020/lib/mapping.mjs +238 -238
- package/websql/esm2020/lib/models.mjs +160 -165
- package/websql/esm2020/lib/other/simple-resource.mjs +116 -116
- package/websql/esm2020/lib/params.mjs +278 -278
- package/websql/esm2020/lib/request-cache.mjs +100 -100
- package/websql/esm2020/lib/resource.service.mjs +213 -213
- package/websql/esm2020/lib/rest-headers.mjs +128 -128
- package/websql/esm2020/lib/rest-request.mjs +321 -321
- package/websql/esm2020/lib/rest.class.mjs +115 -115
- package/websql/esm2020/ng2-rest.mjs +4 -4
- package/websql/esm2020/public-api.mjs +1 -1
- package/websql/fesm2015/ng2-rest.mjs +1677 -1683
- package/websql/fesm2015/ng2-rest.mjs.map +1 -1
- package/websql/fesm2020/ng2-rest.mjs +1675 -1681
- package/websql/fesm2020/ng2-rest.mjs.map +1 -1
- package/websql/lib/content-type.d.ts +4 -4
- package/websql/lib/cookie.d.ts +7 -7
- package/websql/lib/helpers.d.ts +10 -10
- package/websql/lib/index.d.ts +9 -9
- package/websql/lib/mapping.d.ts +12 -12
- package/websql/lib/models.d.ts +157 -157
- package/websql/lib/other/simple-resource.d.ts +29 -29
- package/websql/lib/params.d.ts +23 -23
- package/websql/lib/request-cache.d.ts +17 -17
- package/websql/lib/resource.service.d.ts +43 -43
- package/websql/lib/rest-headers.d.ts +57 -57
- package/websql/lib/rest-request.d.ts +21 -21
- package/websql/lib/rest.class.d.ts +36 -36
- package/websql/ng2-rest.d.ts +4 -4
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import { Models } from './models';
|
|
2
|
-
import { Log, Level } from 'ng2-logger/websql';
|
|
3
|
-
import { Helpers } from 'tnp-core/websql';
|
|
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
|
-
constructor(response) {
|
|
12
|
-
this.response = response;
|
|
13
|
-
}
|
|
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
|
-
get containsCache() {
|
|
55
|
-
RequestCache.restoreFromLocalStorage();
|
|
56
|
-
return RequestCache.cached.includes(this);
|
|
57
|
-
}
|
|
58
|
-
persistsInLocalStorage() {
|
|
59
|
-
localStorage.setItem(RequestCache.LOCAL_STORAGE_KEY, JSON.stringify(RequestCache.cached.map(r => {
|
|
60
|
-
return {
|
|
61
|
-
response: {
|
|
62
|
-
sourceRequest: r.response.sourceRequest,
|
|
63
|
-
responseText: r.response.responseText,
|
|
64
|
-
headers: r.response.headers,
|
|
65
|
-
statusCode: r.response.statusCode,
|
|
66
|
-
entity: r.response.entity,
|
|
67
|
-
circular: r.response.circular,
|
|
68
|
-
isArray: r.response.isArray,
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
})));
|
|
72
|
-
}
|
|
73
|
-
store() {
|
|
74
|
-
RequestCache.restoreFromLocalStorage();
|
|
75
|
-
if (!this.containsCache) {
|
|
76
|
-
RequestCache.cached.push(this);
|
|
77
|
-
this.persistsInLocalStorage();
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
console.log('already stored');
|
|
81
|
-
}
|
|
82
|
-
return this;
|
|
83
|
-
}
|
|
84
|
-
remove() {
|
|
85
|
-
RequestCache.restoreFromLocalStorage();
|
|
86
|
-
const index = RequestCache.cached.indexOf(this);
|
|
87
|
-
if (index !== -1) {
|
|
88
|
-
RequestCache.cached.splice(index, 1);
|
|
89
|
-
this.persistsInLocalStorage();
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
console.log('already removed');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
RequestCache.LOCAL_STORAGE_KEY = 'ng2restrequestcache';
|
|
97
|
-
RequestCache.cached = [];
|
|
98
|
-
RequestCache.isRestoredFromLocalStorage = false;
|
|
99
|
-
;
|
|
100
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/request-cache.ts
|
|
1
|
+
import { Models } from './models';
|
|
2
|
+
import { Log, Level } from 'ng2-logger/websql';
|
|
3
|
+
import { Helpers } from 'tnp-core/websql';
|
|
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
|
+
constructor(response) {
|
|
12
|
+
this.response = response;
|
|
13
|
+
}
|
|
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
|
+
get containsCache() {
|
|
55
|
+
RequestCache.restoreFromLocalStorage();
|
|
56
|
+
return RequestCache.cached.includes(this);
|
|
57
|
+
}
|
|
58
|
+
persistsInLocalStorage() {
|
|
59
|
+
localStorage.setItem(RequestCache.LOCAL_STORAGE_KEY, JSON.stringify(RequestCache.cached.map(r => {
|
|
60
|
+
return {
|
|
61
|
+
response: {
|
|
62
|
+
sourceRequest: r.response.sourceRequest,
|
|
63
|
+
responseText: r.response.responseText,
|
|
64
|
+
headers: r.response.headers,
|
|
65
|
+
statusCode: r.response.statusCode,
|
|
66
|
+
entity: r.response.entity,
|
|
67
|
+
circular: r.response.circular,
|
|
68
|
+
isArray: r.response.isArray,
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
})));
|
|
72
|
+
}
|
|
73
|
+
store() {
|
|
74
|
+
RequestCache.restoreFromLocalStorage();
|
|
75
|
+
if (!this.containsCache) {
|
|
76
|
+
RequestCache.cached.push(this);
|
|
77
|
+
this.persistsInLocalStorage();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log('already stored');
|
|
81
|
+
}
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
remove() {
|
|
85
|
+
RequestCache.restoreFromLocalStorage();
|
|
86
|
+
const index = RequestCache.cached.indexOf(this);
|
|
87
|
+
if (index !== -1) {
|
|
88
|
+
RequestCache.cached.splice(index, 1);
|
|
89
|
+
this.persistsInLocalStorage();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log('already removed');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
RequestCache.LOCAL_STORAGE_KEY = 'ng2restrequestcache';
|
|
97
|
+
RequestCache.cached = [];
|
|
98
|
+
RequestCache.isRestoredFromLocalStorage = false;
|
|
99
|
+
;
|
|
100
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/request-cache.ts
|
|
101
101
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUtd2Vic3FsL25nMi1yZXN0L3Byb2plY3RzL25nMi1yZXN0L3NyYy9saWIvcmVxdWVzdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFpRXZCLFlBQ1MsUUFBa0M7UUFBbEMsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7SUFHM0MsQ0FBQztJQTlETyxNQUFNLENBQUMsdUJBQXVCO1FBQ3BDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFO1lBQzVDLFlBQVksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7WUFDL0MsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNsRSxJQUFJLFFBQVEsR0FBbUIsRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUk7b0JBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFtQixDQUFDO2lCQUMvQztnQkFBQyxPQUFPLEtBQUssRUFBRTtpQkFFZjtnQkFDRCxNQUFN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LEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTTtRQUNKLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7QUEvR2UsOEJBQWlCLEdBQUcscUJBQXFCLENBQUM7QUFFM0MsbUJBQU0sR0FBbUIsRUFBRSxDQUFDO0FBQzVCLHVDQUEwQixHQUFHLEtBQUssQ0FBQztBQWdIbkQsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwREFBMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL3dlYnNxbCc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IFJlc3RIZWFkZXJzIH0gZnJvbSAnLi9yZXN0LWhlYWRlcnMnO1xuY29uc3QgbG9nID0gTG9nLmNyZWF0ZSgncmVxdWVzdC1jYWNoZScsIExldmVsLl9fTk9USElORylcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogdGhlcmUgaXMgQ2FjaGUgQVBJIGZvciB0aGF0XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q2FjaGUge1xuXG4gIHN0YXRpYyByZWFkb25seSBMT0NBTF9TVE9SQUdFX0tFWSA9ICduZzJyZXN0cmVxdWVzdGNhY2hlJztcblxuICBwcml2YXRlIHN0YXRpYyBjYWNoZWQ6IFJlcXVlc3RDYWNoZVtdID0gW107XG4gIHByaXZhdGUgc3RhdGljIGlzUmVzdG9yZWRGcm9tTG9jYWxTdG9yYWdlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzdG9yZUZyb21Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgaWYgKEhlbHBlcnMuaXNOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghUmVxdWVzdENhY2hlLmlzUmVzdG9yZWRGcm9tTG9jYWxTdG9yYWdlKSB7XG4gICAgICBSZXF1ZXN0Q2FjaGUuaXNSZXN0b3JlZEZyb21Mb2NhbFN0b3JhZ2UgPSB0cnVlO1xuICAgICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFJlcXVlc3RDYWNoZS5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgICBsZXQgcmVxdWVzdHM6IFJlcXVlc3RDYWNoZVtdID0gW107XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3RzID0gSlNPTi5wYXJzZShkYXRhKSBhcyBSZXF1ZXN0Q2FjaGVbXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3RvcmVkID0gcmVxdWVzdHMubWFwKHIgPT4ge1xuICAgICAgICAgIGxldCB7IHNvdXJjZVJlcXVlc3QsIHJlc3BvbnNlVGV4dCwgYm9keSwgaGVhZGVycywgY2lyY3VsYXIsXG4gICAgICAgICAgICBlbnRpdHksIGlzQXJyYXksIGNvb2tpZXMsIHN0YXR1c0NvZGUgfSA9IHIucmVzcG9uc2U7XG4gICAgICAgICAgci5yZXNwb25zZSA9IG5ldyBNb2RlbHMuSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgc291cmNlUmVxdWVzdCxcbiAgICAgICAgICAgIHJlc3BvbnNlVGV4dCxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oaGVhZGVycyksXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgY2lyY3VsYXIsXG4gICAgICAgICAgICAtMSwgLy8gam9iaWQgZnJvbSBsb2NhbCBzdG9yYWdlIFRPRE9cbiAgICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByID0gbmV3IFJlcXVlc3RDYWNoZShyLnJlc3BvbnNlKTtcbiAgICAgICAgICByLnJlc3BvbnNlLnJxID0gcjtcblxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmkoJ1JFU1RPUkVEIEZST00gTE9DQUwgU1RPUkFHRScsIHJlc3RvcmVkKTtcbiAgICAgICAgUmVxdWVzdENhY2hlLmNhY2hlZCA9IHJlc3RvcmVkO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kQnkoc291cmNlUmVxdWVzdDogTW9kZWxzLkhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zKSB7XG4gICAgbG9nLmkoJ2ZpbmRieScsIHNvdXJjZVJlcXVlc3QpXG4gICAgbG9nLmkoJ1JlcXVlc3RDYWNoZS5jYWNoZWQnLCBSZXF1ZXN0Q2FjaGUuY2FjaGVkKVxuICAgIFJlcXVlc3RDYWNoZS5yZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIHJldHVybiBSZXF1ZXN0Q2FjaGUuY2FjaGVkLmZpbmQoYyA9PiB7XG4gICAgICBjb25zdCBhID0gYy5yZXNwb25zZS5zb3VyY2VSZXF1ZXN0O1xuICAgICAgY29uc3QgYiA9IHNvdXJjZVJlcXVlc3Q7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLmlzQXJyYXkgPT09IGIuaXNBcnJheSAmJlxuICAgICAgICBhLnVybCA9PT0gYi51cmwgJiZcbiAgICAgICAgYS5tZXRob2QgPT09IGIubWV0aG9kICYmXG4gICAgICAgIGEuYm9keSA9PT0gYi5ib2R5XG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVzcG9uc2U6IE1vZGVscy5IdHRwUmVzcG9uc2U8YW55PlxuICApIHtcblxuICB9XG5cbiAgZ2V0IGNvbnRhaW5zQ2FjaGUoKSB7XG4gICAgUmVxdWVzdENhY2hlLnJlc3RvcmVGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgcmV0dXJuIFJlcXVlc3RDYWNoZS5jYWNoZWQuaW5jbHVkZXModGhpcyk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RzSW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oUmVxdWVzdENhY2hlLkxPQ0FMX1NUT1JBR0VfS0VZLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoUmVxdWVzdENhY2hlLmNhY2hlZC5tYXAociA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIHNvdXJjZVJlcXVlc3Q6IHIucmVzcG9uc2Uuc291cmNlUmVxdWVzdCxcbiAgICAgICAgICAgIHJlc3BvbnNlVGV4dDogci5yZXNwb25zZS5yZXNwb25zZVRleHQsXG4gICAgICAgICAgICBoZWFkZXJzOiByLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByLnJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICBlbnRpdHk6IHIucmVzcG9uc2UuZW50aXR5LFxuICAgICAgICAgICAgY2lyY3VsYXI6IHIucmVzcG9uc2UuY2lyY3VsYXIsXG4gICAgICAgICAgICBpc0FycmF5OiByLnJlc3BvbnNlLmlzQXJyYXksXG4gICAgICAgICAgfSBhcyBNb2RlbHMuSHR0cFJlc3BvbnNlPGFueT5cbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gIH1cblxuICBzdG9yZSgpIHtcbiAgICBSZXF1ZXN0Q2FjaGUucmVzdG9yZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAoIXRoaXMuY29udGFpbnNDYWNoZSkge1xuICAgICAgUmVxdWVzdENhY2hlLmNhY2hlZC5wdXNoKHRoaXMpO1xuICAgICAgdGhpcy5wZXJzaXN0c0luTG9jYWxTdG9yYWdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdhbHJlYWR5IHN0b3JlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICBSZXF1ZXN0Q2FjaGUucmVzdG9yZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBjb25zdCBpbmRleCA9IFJlcXVlc3RDYWNoZS5jYWNoZWQuaW5kZXhPZih0aGlzKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBSZXF1ZXN0Q2FjaGUuY2FjaGVkLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLnBlcnNpc3RzSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ2FscmVhZHkgcmVtb3ZlZCcpO1xuICAgIH1cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvcmVxdWVzdC1jYWNoZS50cyJdfQ==
|