ng2-rest 13.2.9 → 16.0.11
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/{client/esm2020 → browser/esm2022}/lib/cookie.mjs +3 -3
- package/browser/esm2022/lib/helpers.mjs +25 -0
- package/{websql/esm2020 → browser/esm2022}/lib/models.mjs +9 -9
- package/browser/esm2022/lib/other/simple-resource.mjs +119 -0
- package/browser/esm2022/lib/request-cache.mjs +102 -0
- package/browser/esm2022/lib/resource.service.mjs +221 -0
- package/browser/esm2022/lib/rest-headers.mjs +129 -0
- package/browser/esm2022/lib/rest-request.mjs +323 -0
- package/browser/esm2022/lib/rest.class.mjs +120 -0
- package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
- package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
- package/browser/lib/rest-headers.d.ts +1 -1
- package/browser/package.json +6 -12
- package/client/README.md +24 -24
- package/{browser/esm2020 → client/esm2022}/lib/cookie.mjs +3 -3
- package/client/esm2022/lib/helpers.mjs +25 -0
- package/client/esm2022/lib/models.mjs +160 -0
- package/client/esm2022/lib/other/simple-resource.mjs +119 -0
- package/client/esm2022/lib/request-cache.mjs +102 -0
- package/client/esm2022/lib/resource.service.mjs +221 -0
- package/client/esm2022/lib/rest-headers.mjs +129 -0
- package/client/esm2022/lib/rest-request.mjs +323 -0
- package/client/esm2022/lib/rest.class.mjs +120 -0
- package/client/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
- package/client/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
- package/client/lib/rest-headers.d.ts +1 -1
- package/client/package.json +84 -82
- package/index.js.map +1 -1
- package/lib/content-type.js.map +1 -1
- package/lib/cookie.js.map +1 -1
- package/lib/helpers.js +1 -2
- package/lib/helpers.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mapping.js.map +1 -1
- package/lib/models.js.map +1 -1
- package/lib/other/simple-resource.js +1 -2
- package/lib/other/simple-resource.js.map +1 -1
- package/lib/params.js.map +1 -1
- package/lib/request-cache.js +1 -2
- package/lib/request-cache.js.map +1 -1
- package/lib/resource.service.js +1 -2
- package/lib/resource.service.js.map +1 -1
- package/lib/rest-headers.d.ts +1 -1
- package/lib/rest-headers.js.map +1 -1
- package/lib/rest-request.js +1 -2
- package/lib/rest-request.js.map +1 -1
- package/lib/rest.class.js.map +1 -1
- package/package.json +4 -4
- package/package.json_devDependencies.json +217 -217
- package/package.json_tnp.json5 +53 -53
- package/tmp-environment.json +89 -87
- package/websql/README.md +24 -24
- package/websql/{esm2020 → esm2022}/lib/cookie.mjs +3 -3
- package/websql/esm2022/lib/helpers.mjs +25 -0
- package/websql/esm2022/lib/models.mjs +160 -0
- package/websql/esm2022/lib/other/simple-resource.mjs +119 -0
- package/websql/esm2022/lib/request-cache.mjs +102 -0
- package/websql/esm2022/lib/resource.service.mjs +221 -0
- package/websql/esm2022/lib/rest-headers.mjs +129 -0
- package/websql/esm2022/lib/rest-request.mjs +323 -0
- package/websql/esm2022/lib/rest.class.mjs +120 -0
- package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
- package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
- package/websql/lib/rest-headers.d.ts +1 -1
- package/websql/package.json +6 -12
- package/browser/esm2020/lib/helpers.mjs +0 -24
- package/browser/esm2020/lib/models.mjs +0 -160
- package/browser/esm2020/lib/other/simple-resource.mjs +0 -118
- package/browser/esm2020/lib/request-cache.mjs +0 -101
- package/browser/esm2020/lib/resource.service.mjs +0 -220
- package/browser/esm2020/lib/rest-headers.mjs +0 -129
- package/browser/esm2020/lib/rest-request.mjs +0 -322
- package/browser/esm2020/lib/rest.class.mjs +0 -120
- package/browser/fesm2015/ng2-rest.mjs +0 -1739
- package/browser/fesm2015/ng2-rest.mjs.map +0 -1
- package/client/esm2020/lib/helpers.mjs +0 -24
- package/client/esm2020/lib/models.mjs +0 -160
- package/client/esm2020/lib/other/simple-resource.mjs +0 -118
- package/client/esm2020/lib/request-cache.mjs +0 -101
- package/client/esm2020/lib/resource.service.mjs +0 -220
- package/client/esm2020/lib/rest-headers.mjs +0 -129
- package/client/esm2020/lib/rest-request.mjs +0 -322
- package/client/esm2020/lib/rest.class.mjs +0 -120
- package/client/fesm2015/ng2-rest.mjs +0 -1739
- package/client/fesm2015/ng2-rest.mjs.map +0 -1
- package/websql/esm2020/lib/helpers.mjs +0 -24
- package/websql/esm2020/lib/other/simple-resource.mjs +0 -118
- package/websql/esm2020/lib/request-cache.mjs +0 -101
- package/websql/esm2020/lib/resource.service.mjs +0 -220
- package/websql/esm2020/lib/rest-headers.mjs +0 -129
- package/websql/esm2020/lib/rest-request.mjs +0 -322
- package/websql/esm2020/lib/rest.class.mjs +0 -120
- package/websql/fesm2015/ng2-rest.mjs +0 -1739
- package/websql/fesm2015/ng2-rest.mjs.map +0 -1
- /package/browser/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
- /package/browser/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/browser/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
- /package/browser/{esm2020 → esm2022}/lib/params.mjs +0 -0
- /package/browser/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
- /package/browser/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/browser/{ng2-rest.d.ts → index.d.ts} +0 -0
- /package/client/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
- /package/client/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/client/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
- /package/client/{esm2020 → esm2022}/lib/params.mjs +0 -0
- /package/client/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
- /package/client/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/client/{ng2-rest.d.ts → index.d.ts} +0 -0
- /package/websql/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
- /package/websql/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/websql/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
- /package/websql/{esm2020 → esm2022}/lib/params.mjs +0 -0
- /package/websql/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
- /package/websql/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/websql/{ng2-rest.d.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export class RestHeaders {
|
|
2
|
+
static from(headers) {
|
|
3
|
+
if (!headers) {
|
|
4
|
+
return void 0;
|
|
5
|
+
}
|
|
6
|
+
return new RestHeaders(headers);
|
|
7
|
+
}
|
|
8
|
+
constructor(headers) {
|
|
9
|
+
/** @internal header names are lower case */
|
|
10
|
+
this._headers = new Map();
|
|
11
|
+
/** @internal map lower case names to actual names */
|
|
12
|
+
this._normalizedNames = new Map();
|
|
13
|
+
if (headers instanceof RestHeaders) {
|
|
14
|
+
headers.forEach((values, name) => {
|
|
15
|
+
values.forEach(value => this.set(name, value));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
Object.keys(headers).forEach((name) => {
|
|
20
|
+
const values = (Array.isArray(headers[name]) ? headers[name] : [headers[name]]);
|
|
21
|
+
this.delete(name);
|
|
22
|
+
values.forEach(value => this.set(name, value));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns a new RestHeaders instance from the given DOMString of Response RestHeaders
|
|
28
|
+
*/
|
|
29
|
+
static fromResponseHeaderString(headersString) {
|
|
30
|
+
const headers = new RestHeaders();
|
|
31
|
+
headersString.split('\n').forEach(line => {
|
|
32
|
+
const index = line.indexOf(':');
|
|
33
|
+
if (index > 0) {
|
|
34
|
+
const name = line.slice(0, index);
|
|
35
|
+
const value = line.slice(index + 1).trim();
|
|
36
|
+
headers.set(name, value);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return headers;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Appends a header to existing list of header values for a given header name.
|
|
43
|
+
*/
|
|
44
|
+
append(name, value) {
|
|
45
|
+
const values = this.getAll(name);
|
|
46
|
+
if (values === null) {
|
|
47
|
+
this.set(name, value);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
values.push(value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Deletes all header values for the given name.
|
|
55
|
+
*/
|
|
56
|
+
delete(name) {
|
|
57
|
+
const lcName = name.toLowerCase();
|
|
58
|
+
this._normalizedNames.delete(lcName);
|
|
59
|
+
this._headers.delete(lcName);
|
|
60
|
+
}
|
|
61
|
+
forEach(fn) {
|
|
62
|
+
this._headers.forEach((values, lcName) => fn(values, this._normalizedNames.get(lcName), this._headers));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns first header that matches given name.
|
|
66
|
+
*/
|
|
67
|
+
get(name) {
|
|
68
|
+
const values = this.getAll(name);
|
|
69
|
+
if (values === null) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return values.length > 0 ? values[0] : null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Checks for existence of header by given name.
|
|
76
|
+
*/
|
|
77
|
+
has(name) { return this._headers.has(name.toLowerCase()); }
|
|
78
|
+
/**
|
|
79
|
+
* Returns the names of the headers
|
|
80
|
+
*/
|
|
81
|
+
keys() { return Array.from(this._normalizedNames.values()); }
|
|
82
|
+
/**
|
|
83
|
+
* Sets or overrides header value for given name.
|
|
84
|
+
*/
|
|
85
|
+
set(name, value) {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
if (value.length) {
|
|
88
|
+
this._headers.set(name.toLowerCase(), [value.join(',')]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this._headers.set(name.toLowerCase(), [value]);
|
|
93
|
+
}
|
|
94
|
+
this.mayBeSetNormalizedName(name);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns values of all headers.
|
|
98
|
+
*/
|
|
99
|
+
values() { return Array.from(this._headers.values()); }
|
|
100
|
+
/**
|
|
101
|
+
* Returns string of all headers.
|
|
102
|
+
*/
|
|
103
|
+
toJSON() {
|
|
104
|
+
const serialized = {};
|
|
105
|
+
if (!this._headers) {
|
|
106
|
+
}
|
|
107
|
+
this._headers.forEach((values, name) => {
|
|
108
|
+
const split = [];
|
|
109
|
+
values.forEach(v => split.push(...v.split(',')));
|
|
110
|
+
serialized[this._normalizedNames.get(name)] = split;
|
|
111
|
+
});
|
|
112
|
+
return serialized;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Returns list of header values for a given name.
|
|
116
|
+
*/
|
|
117
|
+
getAll(name) {
|
|
118
|
+
return this.has(name) ? this._headers.get(name.toLowerCase()) : null;
|
|
119
|
+
}
|
|
120
|
+
mayBeSetNormalizedName(name) {
|
|
121
|
+
const lcName = name.toLowerCase();
|
|
122
|
+
if (!this._normalizedNames.has(lcName)) {
|
|
123
|
+
this._normalizedNames.set(lcName, name);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
;
|
|
128
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/rest-headers.ts
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1oZWFkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL3Jlc3QtaGVhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sV0FBVztJQU9mLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBNEI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sS0FBSyxDQUFDLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQW9CLE9BQStEO1FBYm5GLDRDQUE0QztRQUM1QyxhQUFRLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUMscURBQXFEO1FBQ3JELHFCQUFnQixHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBV2hELElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtZQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBZ0IsRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxNQUFNLEdBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVEsQ0FBQztn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QUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkUsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQVk7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztDQUNGO0FBR0EsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2VkIG9uIEhlYWRlcnMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2h0dHAvc3JjL2hlYWRlcnMudHNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdEhlYWRlcnNPcHRpb25zID0gUmVzdEhlYWRlcnMgfCB7IFtuYW1lOiBzdHJpbmddOiAoc3RyaW5nIHwgc3RyaW5nW10pIH1cblxuZXhwb3J0IGNsYXNzIFJlc3RIZWFkZXJzIHtcbiAgLyoqIEBpbnRlcm5hbCBoZWFkZXIgbmFtZXMgYXJlIGxvd2VyIGNhc2UgKi9cbiAgX2hlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcbiAgLyoqIEBpbnRlcm5hbCBtYXAgbG93ZXIgY2FzZSBuYW1lcyB0byBhY3R1YWwgbmFtZXMgKi9cbiAgX25vcm1hbGl6ZWROYW1lczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcblxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbShoZWFkZXJzPzogUmVzdEhlYWRlcnNPcHRpb25zKSB7XG4gICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlc3RIZWFkZXJzKGhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihoZWFkZXJzPzogUmVzdEhlYWRlcnMgfCB7IFtuYW1lOiBzdHJpbmddOiAoc3RyaW5nIHwgc3RyaW5nW10pIH0pIHtcbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIFJlc3RIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbHVlczogc3RyaW5nW10sIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB0aGlzLnNldChuYW1lLCB2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gKEFycmF5LmlzQXJyYXkoaGVhZGVyc1tuYW1lXSkgPyBoZWFkZXJzW25hbWVdIDogW2hlYWRlcnNbbmFtZV1dKSBhcyBhbnk7XG4gICAgICAgIHRoaXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB0aGlzLnNldChuYW1lLCB2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgUmVzdEhlYWRlcnMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gRE9NU3RyaW5nIG9mIFJlc3BvbnNlIFJlc3RIZWFkZXJzXG4gICAqL1xuICBzdGF0aWMgZnJvbVJlc3BvbnNlSGVhZGVyU3RyaW5nKGhlYWRlcnNTdHJpbmc6IHN0cmluZyk6IFJlc3RIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IFJlc3RIZWFkZXJzKCk7XG5cblxuXG4gICAgaGVhZGVyc1N0cmluZy5zcGxpdCgnXFxuJykuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBsaW5lLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBsaW5lLnNsaWNlKGluZGV4ICsgMSkudHJpbSgpO1xuICAgICAgICBoZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgaGVhZGVyIHRvIGV4aXN0aW5nIGxpc3Qgb2YgaGVhZGVyIHZhbHVlcyBmb3IgYSBnaXZlbiBoZWFkZXIgbmFtZS5cbiAgICovXG4gIGFwcGVuZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEFsbChuYW1lKTtcblxuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBoZWFkZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAgICovXG4gIGRlbGV0ZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBsY05hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5fbm9ybWFsaXplZE5hbWVzLmRlbGV0ZShsY05hbWUpO1xuICAgIHRoaXMuX2hlYWRlcnMuZGVsZXRlKGxjTmFtZSk7XG4gIH1cblxuICBmb3JFYWNoKGZuOiAodmFsdWVzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBoZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9oZWFkZXJzLmZvckVhY2goXG4gICAgICAodmFsdWVzLCBsY05hbWUpID0+IGZuKHZhbHVlcywgdGhpcy5fbm9ybWFsaXplZE5hbWVzLmdldChsY05hbWUpLCB0aGlzLl9oZWFkZXJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBmaXJzdCBoZWFkZXIgdGhhdCBtYXRjaGVzIGdpdmVuIG5hbWUuXG4gICAqL1xuICBnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEFsbChuYW1lKTtcblxuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlc1swXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGZvciBleGlzdGVuY2Ugb2YgaGVhZGVyIGJ5IGdpdmVuIG5hbWUuXG4gICAqL1xuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oZWFkZXJzLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpOyB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzXG4gICAqL1xuICBrZXlzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fbm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKTsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIG92ZXJyaWRlcyBoZWFkZXIgdmFsdWUgZm9yIGdpdmVuIG5hbWUuXG4gICAqL1xuICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5faGVhZGVycy5zZXQobmFtZS50b0xvd2VyQ2FzZSgpLCBbdmFsdWUuam9pbignLCcpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hlYWRlcnMuc2V0KG5hbWUudG9Mb3dlckNhc2UoKSwgW3ZhbHVlXSk7XG4gICAgfVxuICAgIHRoaXMubWF5QmVTZXROb3JtYWxpemVkTmFtZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHZhbHVlcyBvZiBhbGwgaGVhZGVycy5cbiAgICovXG4gIHZhbHVlcygpOiBzdHJpbmdbXVtdIHsgcmV0dXJuIEFycmF5LmZyb20odGhpcy5faGVhZGVycy52YWx1ZXMoKSk7IH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJpbmcgb2YgYWxsIGhlYWRlcnMuXG4gICAqL1xuXG4gIHRvSlNPTigpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgIGlmICghdGhpcy5faGVhZGVycykge1xuXG5cbiAgICB9XG5cbiAgICB0aGlzLl9oZWFkZXJzLmZvckVhY2goKHZhbHVlczogc3RyaW5nW10sIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3BsaXQ6IHN0cmluZ1tdID0gW107XG4gICAgICB2YWx1ZXMuZm9yRWFjaCh2ID0+IHNwbGl0LnB1c2goLi4udi5zcGxpdCgnLCcpKSk7XG5cblxuXG5cbiAgICAgIHNlcmlhbGl6ZWRbdGhpcy5fbm9ybWFsaXplZE5hbWVzLmdldChuYW1lKV0gPSBzcGxpdDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZXJpYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbGlzdCBvZiBoZWFkZXIgdmFsdWVzIGZvciBhIGdpdmVuIG5hbWUuXG4gICAqL1xuICBnZXRBbGwobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMuX2hlYWRlcnMuZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXlCZVNldE5vcm1hbGl6ZWROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGxjTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghdGhpcy5fbm9ybWFsaXplZE5hbWVzLmhhcyhsY05hbWUpKSB7XG4gICAgICB0aGlzLl9ub3JtYWxpemVkTmFtZXMuc2V0KGxjTmFtZSwgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9yZXN0LWhlYWRlcnMudHMiXX0=
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { firstValueFrom, Observable } from 'rxjs';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { _ } from 'tnp-core/browser';
|
|
4
|
+
import { Models } from './models';
|
|
5
|
+
import { RestHeaders } from './rest-headers';
|
|
6
|
+
import { Helpers } from 'tnp-core/browser';
|
|
7
|
+
import { Level } from 'ng2-logger/browser';
|
|
8
|
+
import axios from 'axios';
|
|
9
|
+
import { Resource } from './resource.service';
|
|
10
|
+
import { Log } from 'ng2-logger/browser';
|
|
11
|
+
import { RequestCache } from './request-cache';
|
|
12
|
+
const log = Log.create('[ng2-rest] rest-request', Level.__NOTHING);
|
|
13
|
+
const jobIDkey = 'jobID';
|
|
14
|
+
const customObs = 'customObs';
|
|
15
|
+
const cancelFn = 'cancelFn';
|
|
16
|
+
const isCanceled = 'isCanceled';
|
|
17
|
+
class RestRequest {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.subjectInuUse = {};
|
|
20
|
+
this.meta = {};
|
|
21
|
+
this.replaySubjects = {};
|
|
22
|
+
}
|
|
23
|
+
static { this.jobId = 0; }
|
|
24
|
+
handlerResult(options, sourceRequest) {
|
|
25
|
+
if (_.isUndefined(options)) {
|
|
26
|
+
options = {};
|
|
27
|
+
}
|
|
28
|
+
const { res, jobid, isArray, method } = options;
|
|
29
|
+
if (typeof res !== 'object') {
|
|
30
|
+
throw new Error('No resposnse for request. ');
|
|
31
|
+
}
|
|
32
|
+
if (Helpers.isBrowser) {
|
|
33
|
+
res.headers = RestHeaders.from(res.headers);
|
|
34
|
+
}
|
|
35
|
+
if (res.error) {
|
|
36
|
+
this.subjectInuUse[jobid].error(new Models.HttpResponseError(res.error, res.data, res.headers, res.code, jobid));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const entity = this.meta[jobid].entity;
|
|
40
|
+
const circular = this.meta[jobid].circular;
|
|
41
|
+
const success = Resource['_listenSuccess'];
|
|
42
|
+
const reqResp = new Models.HttpResponse(sourceRequest, res.data, res.headers, res.code, entity, circular, jobid, isArray);
|
|
43
|
+
success.next(reqResp);
|
|
44
|
+
this.subjectInuUse[jobid].next(reqResp);
|
|
45
|
+
this.meta[jobid] = void 0;
|
|
46
|
+
this.subjectInuUse[jobid].complete();
|
|
47
|
+
}
|
|
48
|
+
checkCache(sourceRequest, jobid) {
|
|
49
|
+
const existedInCache = RequestCache.findBy(sourceRequest);
|
|
50
|
+
if (existedInCache) {
|
|
51
|
+
const success = Resource['_listenSuccess'];
|
|
52
|
+
success.next(existedInCache.response);
|
|
53
|
+
this.subjectInuUse[jobid].next(existedInCache);
|
|
54
|
+
this.subjectInuUse[jobid].complete();
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
async req(url, method, headers, body, jobid, isArray = false, mockHttp) {
|
|
60
|
+
if (this.checkCache({
|
|
61
|
+
url,
|
|
62
|
+
body,
|
|
63
|
+
isArray,
|
|
64
|
+
method
|
|
65
|
+
}, jobid)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const CancelToken = axios.CancelToken;
|
|
69
|
+
const source = CancelToken.source();
|
|
70
|
+
this.subjectInuUse[jobid][cancelFn] = source.cancel;
|
|
71
|
+
var response;
|
|
72
|
+
if (mockHttp) {
|
|
73
|
+
if (typeof mockHttp === 'object') {
|
|
74
|
+
response = {
|
|
75
|
+
data: mockHttp.data,
|
|
76
|
+
status: mockHttp.code,
|
|
77
|
+
headers: mockHttp.headers,
|
|
78
|
+
statusText: mockHttp.error,
|
|
79
|
+
config: {}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else if (typeof mockHttp === 'function') {
|
|
83
|
+
const r = mockHttp(url, method, headers, body);
|
|
84
|
+
response = {
|
|
85
|
+
data: r.data,
|
|
86
|
+
status: r.code,
|
|
87
|
+
headers: r.headers,
|
|
88
|
+
statusText: r.error,
|
|
89
|
+
config: {}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const headersJson = headers.toJSON();
|
|
94
|
+
const responseType = headersJson.responsetypeaxios ? headersJson.responsetypeaxios : 'text';
|
|
95
|
+
try {
|
|
96
|
+
if (!response) {
|
|
97
|
+
response = await axios({
|
|
98
|
+
url,
|
|
99
|
+
method,
|
|
100
|
+
data: body,
|
|
101
|
+
responseType,
|
|
102
|
+
headers: headersJson,
|
|
103
|
+
cancelToken: source.token,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (this.subjectInuUse[jobid][isCanceled]) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.handlerResult({
|
|
110
|
+
res: {
|
|
111
|
+
code: response.status,
|
|
112
|
+
data: response.data,
|
|
113
|
+
isArray,
|
|
114
|
+
jobid,
|
|
115
|
+
headers: RestHeaders.from(response.headers)
|
|
116
|
+
},
|
|
117
|
+
method,
|
|
118
|
+
jobid,
|
|
119
|
+
isArray
|
|
120
|
+
}, {
|
|
121
|
+
url,
|
|
122
|
+
body,
|
|
123
|
+
method,
|
|
124
|
+
isArray,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (catchedError) {
|
|
128
|
+
if (this.subjectInuUse[jobid][isCanceled]) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (typeof catchedError === 'object' && catchedError.response && catchedError.response.data) {
|
|
132
|
+
const err = catchedError.response.data;
|
|
133
|
+
const msg = catchedError.response.data.message || '';
|
|
134
|
+
let stack = (err.stack || '').split('\n');
|
|
135
|
+
const errObs = Resource['_listenErrors'];
|
|
136
|
+
errObs.next({
|
|
137
|
+
msg,
|
|
138
|
+
stack,
|
|
139
|
+
data: catchedError.response.data
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const error = (catchedError && catchedError.response) ? `[${catchedError.response.statusText}]: ` : '';
|
|
143
|
+
this.handlerResult({
|
|
144
|
+
res: {
|
|
145
|
+
code: (catchedError && catchedError.response) ? catchedError.response.status : void 0,
|
|
146
|
+
error: `${error}${catchedError.message}`,
|
|
147
|
+
data: (catchedError && catchedError.response) ? JSON.stringify(catchedError.response.data) : void 0,
|
|
148
|
+
isArray,
|
|
149
|
+
jobid,
|
|
150
|
+
headers: RestHeaders.from(catchedError && catchedError.response && catchedError.response.headers)
|
|
151
|
+
},
|
|
152
|
+
method,
|
|
153
|
+
jobid,
|
|
154
|
+
isArray
|
|
155
|
+
}, {
|
|
156
|
+
url,
|
|
157
|
+
body,
|
|
158
|
+
isArray,
|
|
159
|
+
method
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
getReplay(method, meta, onlyGetLastReplayForMethod) {
|
|
164
|
+
let replay;
|
|
165
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint])) {
|
|
166
|
+
this.replaySubjects[meta.endpoint] = {};
|
|
167
|
+
}
|
|
168
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path])) {
|
|
169
|
+
this.replaySubjects[meta.endpoint][meta.path] = {};
|
|
170
|
+
}
|
|
171
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path][method])) {
|
|
172
|
+
this.replaySubjects[meta.endpoint][meta.path][method] = {};
|
|
173
|
+
}
|
|
174
|
+
const objectIDToCreateOrLast = (Object.keys(this.replaySubjects[meta.endpoint][meta.path][method]).length) +
|
|
175
|
+
(onlyGetLastReplayForMethod ? 0 : 1);
|
|
176
|
+
if (onlyGetLastReplayForMethod && (objectIDToCreateOrLast === 0)) {
|
|
177
|
+
return replay;
|
|
178
|
+
}
|
|
179
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path][method][objectIDToCreateOrLast])) {
|
|
180
|
+
this.replaySubjects[meta.endpoint][meta.path][method][objectIDToCreateOrLast] = {
|
|
181
|
+
subject: new Subject(),
|
|
182
|
+
data: void 0,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
replay = this.replaySubjects[meta.endpoint][meta.path][method][objectIDToCreateOrLast];
|
|
186
|
+
if (!_.isNumber(replay.id)) {
|
|
187
|
+
if (RestRequest.jobId === Number.MAX_SAFE_INTEGER) {
|
|
188
|
+
RestRequest.jobId = 0;
|
|
189
|
+
}
|
|
190
|
+
const jobid = RestRequest.jobId++;
|
|
191
|
+
replay.id = jobid;
|
|
192
|
+
const subject = replay.subject;
|
|
193
|
+
subject[jobIDkey] = jobid; // modify internal rxjs subject obj
|
|
194
|
+
this.meta[jobid] = meta;
|
|
195
|
+
this.subjectInuUse[jobid] = subject;
|
|
196
|
+
this.subjectInuUse[jobid][customObs] = new Observable((observer) => {
|
|
197
|
+
observer.add(() => {
|
|
198
|
+
if (!this.subjectInuUse[jobid][isCanceled]) {
|
|
199
|
+
this.subjectInuUse[jobid][isCanceled] = true;
|
|
200
|
+
if (typeof this.subjectInuUse[jobid][cancelFn] === 'function') {
|
|
201
|
+
this.subjectInuUse[jobid][cancelFn]('[ng2-rest] on purpose canceled http request');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
const sub = subject.subscribe({
|
|
208
|
+
next: a => observer.next(a),
|
|
209
|
+
error: a => observer.error(a),
|
|
210
|
+
complete: () => {
|
|
211
|
+
sub.unsubscribe();
|
|
212
|
+
observer.complete();
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return replay;
|
|
218
|
+
}
|
|
219
|
+
generalReq(method, url, body, headers, meta, isArray, mockHttp) {
|
|
220
|
+
const replay = this.getReplay(method, meta, false);
|
|
221
|
+
replay.data = { url, body, headers, isArray };
|
|
222
|
+
((pthis, purl, pmethod, pheaders, pbody, pid, pisArray, pmockHttp) => {
|
|
223
|
+
setTimeout(() => pthis.req(purl, pmethod, pheaders, pbody, pid, pisArray, pmockHttp));
|
|
224
|
+
})(this, url, method, headers, body, replay.id, isArray, mockHttp);
|
|
225
|
+
const resp = firstValueFrom(replay.subject[customObs]);
|
|
226
|
+
resp.observable = replay.subject[customObs];
|
|
227
|
+
resp.cache = RequestCache.findBy({
|
|
228
|
+
body,
|
|
229
|
+
isArray,
|
|
230
|
+
method,
|
|
231
|
+
url
|
|
232
|
+
});
|
|
233
|
+
return resp;
|
|
234
|
+
}
|
|
235
|
+
get(url, body, headers, meta, isArray, mockHttp) {
|
|
236
|
+
return this.generalReq('get', url, body, headers, meta, isArray, mockHttp);
|
|
237
|
+
}
|
|
238
|
+
head(url, body, headers, meta, isArray, mockHttp) {
|
|
239
|
+
return this.generalReq('head', url, body, headers, meta, isArray, mockHttp);
|
|
240
|
+
}
|
|
241
|
+
delete(url, body, headers, meta, isArray, mockHttp) {
|
|
242
|
+
return this.generalReq('delete', url, body, headers, meta, isArray, mockHttp);
|
|
243
|
+
}
|
|
244
|
+
post(url, body, headers, meta, isArray, mockHttp) {
|
|
245
|
+
return this.generalReq('post', url, body, headers, meta, isArray, mockHttp);
|
|
246
|
+
}
|
|
247
|
+
put(url, body, headers, meta, isArray, mockHttp) {
|
|
248
|
+
return this.generalReq('put', url, body, headers, meta, isArray, mockHttp);
|
|
249
|
+
}
|
|
250
|
+
patch(url, body, headers, meta, isArray, mockHttp) {
|
|
251
|
+
return this.generalReq('patch', url, body, headers, meta, isArray, mockHttp);
|
|
252
|
+
}
|
|
253
|
+
jsonp(url, body, headers, meta, isArray, mockHttp) {
|
|
254
|
+
const replay = this.getReplay('jsonp', meta, false);
|
|
255
|
+
const jobid = replay.id;
|
|
256
|
+
const method = 'jsonp';
|
|
257
|
+
setTimeout(() => {
|
|
258
|
+
if (url.endsWith('/'))
|
|
259
|
+
url = url.slice(0, url.length - 1);
|
|
260
|
+
let num = Math.round(10000 * Math.random());
|
|
261
|
+
let callbackMethodName = "cb_" + num;
|
|
262
|
+
window[callbackMethodName] = (data) => {
|
|
263
|
+
if (this.checkCache({
|
|
264
|
+
url,
|
|
265
|
+
body,
|
|
266
|
+
isArray,
|
|
267
|
+
method
|
|
268
|
+
}, jobid)) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
this.handlerResult({
|
|
272
|
+
res: {
|
|
273
|
+
data, isArray
|
|
274
|
+
},
|
|
275
|
+
method,
|
|
276
|
+
jobid,
|
|
277
|
+
isArray
|
|
278
|
+
}, {
|
|
279
|
+
url,
|
|
280
|
+
body,
|
|
281
|
+
isArray,
|
|
282
|
+
method,
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
let sc = document.createElement('script');
|
|
286
|
+
sc.src = `${url}?callback=${callbackMethodName}`;
|
|
287
|
+
document.body.appendChild(sc);
|
|
288
|
+
document.body.removeChild(sc);
|
|
289
|
+
});
|
|
290
|
+
const resp = firstValueFrom(replay.subject[customObs]);
|
|
291
|
+
resp.observable = replay.subject[customObs];
|
|
292
|
+
console.log('assiging custom observable');
|
|
293
|
+
resp.cache = RequestCache.findBy({
|
|
294
|
+
body,
|
|
295
|
+
isArray,
|
|
296
|
+
method,
|
|
297
|
+
url
|
|
298
|
+
});
|
|
299
|
+
return resp;
|
|
300
|
+
}
|
|
301
|
+
replay(method, meta) {
|
|
302
|
+
const replay = this.getReplay(method, meta, true);
|
|
303
|
+
if (!replay || !replay.data) {
|
|
304
|
+
console.warn(`Canno replay first ${method} request from ${meta.endpoint}/${meta.path}`);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
;
|
|
308
|
+
if (replay && replay.subject && Array.isArray(replay.subject.observers) &&
|
|
309
|
+
replay.subject.observers.length === 0) {
|
|
310
|
+
console.warn(`No observators for ${method} request from ${meta.endpoint}/${meta.path}`);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const url = replay.data.url;
|
|
314
|
+
const headers = replay.data.headers;
|
|
315
|
+
const body = replay.data.body;
|
|
316
|
+
const isArray = replay.data.isArray;
|
|
317
|
+
setTimeout(() => this.req(url, method, headers, body, replay.id, isArray));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export { RestRequest };
|
|
321
|
+
;
|
|
322
|
+
({}); // @--end-of-file-for-module=ng2-rest lib/rest-request.ts
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL3Jlc3QtcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBd0IsTUFBTSxPQUFPLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FDbEIsQ0FBQTtBQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDOUIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQzVCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUtoQyxNQUFhLFdBQVc7SUFBeEI7UUFJVSxrQkFBYSxHQUFtQyxFQUFFLENBQUM7UUFDbkQsU0FB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QixNQUFNLGlCQUFpQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE9BQU87U0FDUjtRQUFBLENBQUM7UUFDRixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDckUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixNQUFNLGlCQUFpQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE9BQU87U0FDUjtRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQzs7U0E3YlUsV0FBVztBQWljdkIsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5cbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFJlc3RIZWFkZXJzIH0gZnJvbSAnLi9yZXN0LWhlYWRlcnMnO1xuXG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvZywgTG9nZ2VyIH0gZnJvbSAnbmcyLWxvZ2dlci9icm93c2VyJztcblxuaW1wb3J0IHsgUmVxdWVzdENhY2hlIH0gZnJvbSAnLi9yZXF1ZXN0LWNhY2hlJztcbmNvbnN0IGxvZyA9IExvZy5jcmVhdGUoJ1tuZzItcmVzdF0gcmVzdC1yZXF1ZXN0J1xuICAsIExldmVsLl9fTk9USElOR1xuKVxuXG5jb25zdCBqb2JJRGtleSA9ICdqb2JJRCc7XG5jb25zdCBjdXN0b21PYnMgPSAnY3VzdG9tT2JzJztcbmNvbnN0IGNhbmNlbEZuID0gJ2NhbmNlbEZuJztcbmNvbnN0IGlzQ2FuY2VsZWQgPSAnaXNDYW5jZWxlZCc7XG5cblxuXG5cbmV4cG9ydCBjbGFzcyBSZXN0UmVxdWVzdCB7XG5cbiAgcHVibGljIHN0YXRpYyB6b25lO1xuICBwcml2YXRlIHN0YXRpYyBqb2JJZCA9IDA7XG4gIHByaXZhdGUgc3ViamVjdEludVVzZTogeyBbaWQ6IG51bWJlcl06IFN1YmplY3Q8YW55PiB9ID0ge307XG4gIHByaXZhdGUgbWV0YTogeyBbaWQ6IG51bWJlcl06IE1vZGVscy5NZXRhUmVxdWVzdCB9ID0ge307XG5cblxuICBwcml2YXRlIGhhbmRsZXJSZXN1bHQob3B0aW9uczogTW9kZWxzLkhhbmRsZVJlc3VsdE9wdGlvbnMsXG4gICAgc291cmNlUmVxdWVzdDogTW9kZWxzLkhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMgPSB7fSBhcyBhbnk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXMsIGpvYmlkLCBpc0FycmF5LCBtZXRob2QgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAodHlwZW9mIHJlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9zbnNlIGZvciByZXF1ZXN0LiAnKTtcbiAgICB9XG5cbiAgICBpZiAoSGVscGVycy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJlcy5oZWFkZXJzID0gUmVzdEhlYWRlcnMuZnJvbShyZXMuaGVhZGVycyk7XG4gICAgfVxuXG5cbiAgICBpZiAocmVzLmVycm9yKSB7XG4gICAgICB0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdLmVycm9yKG5ldyBNb2RlbHMuSHR0cFJlc3BvbnNlRXJyb3IocmVzLmVycm9yLCByZXMuZGF0YSwgcmVzLmhlYWRlcnMsIHJlcy5jb2RlLCBqb2JpZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLm1ldGFbam9iaWRdLmVudGl0eTtcbiAgICBjb25zdCBjaXJjdWxhciA9IHRoaXMubWV0YVtqb2JpZF0uY2lyY3VsYXI7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gKFJlc291cmNlWydfbGlzdGVuU3VjY2VzcyddIGFzIFN1YmplY3Q8TW9kZWxzLkh0dHBSZXNwb25zZTxhbnk+PilcblxuICAgIGNvbnN0IHJlcVJlc3AgPSBuZXcgTW9kZWxzLkh0dHBSZXNwb25zZShzb3VyY2VSZXF1ZXN0LCByZXMuZGF0YSwgcmVzLmhlYWRlcnMsIHJlcy5jb2RlLCBlbnRpdHksIGNpcmN1bGFyLCBqb2JpZCwgaXNBcnJheSk7XG4gICAgc3VjY2Vzcy5uZXh0KHJlcVJlc3ApO1xuXG4gICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXS5uZXh0KHJlcVJlc3ApO1xuICAgIHRoaXMubWV0YVtqb2JpZF0gPSB2b2lkIDA7XG4gICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXS5jb21wbGV0ZSgpO1xuICB9XG4gIGNoZWNrQ2FjaGUoc291cmNlUmVxdWVzdDogTW9kZWxzLkhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zLCBqb2JpZDogbnVtYmVyKSB7XG4gICAgY29uc3QgZXhpc3RlZEluQ2FjaGUgPSBSZXF1ZXN0Q2FjaGUuZmluZEJ5KHNvdXJjZVJlcXVlc3QpO1xuICAgIGlmIChleGlzdGVkSW5DYWNoZSkge1xuXG4gICAgICBjb25zdCBzdWNjZXNzID0gKFJlc291cmNlWydfbGlzdGVuU3VjY2VzcyddIGFzIFN1YmplY3Q8TW9kZWxzLkh0dHBSZXNwb25zZTxhbnk+Pik7XG4gICAgICBzdWNjZXNzLm5leHQoZXhpc3RlZEluQ2FjaGUucmVzcG9uc2UpO1xuICAgICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXS5uZXh0KGV4aXN0ZWRJbkNhY2hlKTtcbiAgICAgIHRoaXMuc3ViamVjdEludVVzZVtqb2JpZF0uY29tcGxldGUoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgIGJvZHk/OiBhbnksXG4gICAgam9iaWQ/OiBudW1iZXIsXG4gICAgaXNBcnJheSA9IGZhbHNlLFxuICAgIG1vY2tIdHRwPzogTW9kZWxzLk1vY2tIdHRwXG4gICkge1xuICAgIGlmICh0aGlzLmNoZWNrQ2FjaGUoe1xuICAgICAgdXJsLFxuICAgICAgYm9keSxcbiAgICAgIGlzQXJyYXksXG4gICAgICBtZXRob2RcbiAgICB9LCBqb2JpZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBDYW5jZWxUb2tlbiA9IGF4aW9zLkNhbmNlbFRva2VuO1xuICAgIGNvbnN0IHNvdXJjZSA9IENhbmNlbFRva2VuLnNvdXJjZSgpO1xuICAgIHRoaXMuc3ViamVjdEludVVzZVtqb2JpZF1bY2FuY2VsRm5dID0gc291cmNlLmNhbmNlbDtcblxuICAgIHZhciByZXNwb25zZTogQXhpb3NSZXNwb25zZTxhbnk+O1xuICAgIGlmIChtb2NrSHR0cCkge1xuXG4gICAgICBpZiAodHlwZW9mIG1vY2tIdHRwID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICBkYXRhOiBtb2NrSHR0cC5kYXRhLFxuICAgICAgICAgIHN0YXR1czogbW9ja0h0dHAuY29kZSxcbiAgICAgICAgICBoZWFkZXJzOiBtb2NrSHR0cC5oZWFkZXJzIGFzIGFueSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiBtb2NrSHR0cC5lcnJvcixcbiAgICAgICAgICBjb25maWc6IHt9IGFzIGFueVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2NrSHR0cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCByID0gbW9ja0h0dHAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICBkYXRhOiByLmRhdGEsXG4gICAgICAgICAgc3RhdHVzOiByLmNvZGUsXG4gICAgICAgICAgaGVhZGVyczogci5oZWFkZXJzIGFzIGFueSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByLmVycm9yLFxuICAgICAgICAgIGNvbmZpZzoge30gYXMgYW55XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGNvbnN0IGhlYWRlcnNKc29uID0gaGVhZGVycy50b0pTT04oKTtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSBoZWFkZXJzSnNvbi5yZXNwb25zZXR5cGVheGlvcyA/IGhlYWRlcnNKc29uLnJlc3BvbnNldHlwZWF4aW9zIDogJ3RleHQnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcblxuXG5cblxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgcmVzcG9uc2VUeXBlLFxuICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNKc29uLFxuICAgICAgICAgIGNhbmNlbFRva2VuOiBzb3VyY2UudG9rZW4sXG5cbiAgICAgICAgfSk7XG5cbiAgICAgIH1cblxuXG5cbiAgICAgIGlmICh0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdW2lzQ2FuY2VsZWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVyUmVzdWx0KHtcbiAgICAgICAgcmVzOiB7XG4gICAgICAgICAgY29kZTogcmVzcG9uc2Uuc3RhdHVzIGFzIGFueSxcbiAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgam9iaWQsXG4gICAgICAgICAgaGVhZGVyczogUmVzdEhlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzIGFzIGFueSlcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBqb2JpZCxcbiAgICAgICAgaXNBcnJheVxuICAgICAgfSwge1xuICAgICAgICB1cmwsXG4gICAgICAgIGJvZHksXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdGNoZWRFcnJvcikge1xuICAgICAgaWYgKHRoaXMuc3ViamVjdEludVVzZVtqb2JpZF1baXNDYW5jZWxlZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0eXBlb2YgY2F0Y2hlZEVycm9yID09PSAnb2JqZWN0JyAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgY29uc3QgZXJyID0gY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnN0IG1zZzogc3RyaW5nID0gY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSB8fCAnJztcblxuXG5cbiAgICAgICAgbGV0IHN0YWNrOiBzdHJpbmdbXSA9IChlcnIuc3RhY2sgfHwgJycpLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICBjb25zdCBlcnJPYnMgPSAoUmVzb3VyY2VbJ19saXN0ZW5FcnJvcnMnXSBhcyBTdWJqZWN0PE1vZGVscy5CYWNrZW5kRXJyb3I+KTtcbiAgICAgICAgZXJyT2JzLm5leHQoe1xuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgICBkYXRhOiBjYXRjaGVkRXJyb3IucmVzcG9uc2UuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yID0gKGNhdGNoZWRFcnJvciAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UpID8gYFske2NhdGNoZWRFcnJvci5yZXNwb25zZS5zdGF0dXNUZXh0fV06IGAgOiAnJztcbiAgICAgIHRoaXMuaGFuZGxlclJlc3VsdCh7XG4gICAgICAgIHJlczoge1xuICAgICAgICAgIGNvZGU6IChjYXRjaGVkRXJyb3IgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlKSA/IGNhdGNoZWRFcnJvci5yZXNwb25zZS5zdGF0dXMgYXMgYW55IDogdm9pZCAwLFxuICAgICAgICAgIGVycm9yOiBgJHtlcnJvcn0ke2NhdGNoZWRFcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgZGF0YTogKGNhdGNoZWRFcnJvciAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UpID8gSlNPTi5zdHJpbmdpZnkoY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEpIDogdm9pZCAwLFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgam9iaWQsXG4gICAgICAgICAgaGVhZGVyczogUmVzdEhlYWRlcnMuZnJvbShjYXRjaGVkRXJyb3IgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlICYmIGNhdGNoZWRFcnJvci5yZXNwb25zZS5oZWFkZXJzKVxuICAgICAgICB9LFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGpvYmlkLFxuICAgICAgICBpc0FycmF5XG4gICAgICB9LCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgYm9keSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgbWV0aG9kXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlcGxheShtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLCBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QsIG9ubHlHZXRMYXN0UmVwbGF5Rm9yTWV0aG9kOiBib29sZWFuKTogTW9kZWxzLlJlcGxheURhdGEge1xuICAgIGxldCByZXBsYXk6IE1vZGVscy5SZXBsYXlEYXRhO1xuXG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdKSkge1xuXG4gICAgICB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdID0ge307XG4gICAgfVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucmVwbGF5U3ViamVjdHNbbWV0YS5lbmRwb2ludF1bbWV0YS5wYXRoXSkpIHtcblxuICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdID0ge307XG4gICAgfVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucmVwbGF5U3ViamVjdHNbbWV0YS5lbmRwb2ludF1bbWV0YS5wYXRoXVttZXRob2RdKSkge1xuXG4gICAgICB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF1bbWV0aG9kXSA9IHt9O1xuICAgIH1cblxuXG4gICAgY29uc3Qgb2JqZWN0SURUb0NyZWF0ZU9yTGFzdCA9IChPYmplY3Qua2V5cyh0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF1bbWV0aG9kXSBhcyBPYmplY3QpLmxlbmd0aCkgK1xuICAgICAgKG9ubHlHZXRMYXN0UmVwbGF5Rm9yTWV0aG9kID8gMCA6IDEpO1xuICAgIGlmIChvbmx5R2V0TGFzdFJlcGxheUZvck1ldGhvZCAmJiAob2JqZWN0SURUb0NyZWF0ZU9yTGFzdCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiByZXBsYXk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF1bb2JqZWN0SURUb0NyZWF0ZU9yTGFzdF0pKSB7XG5cbiAgICAgIHRoaXMucmVwbGF5U3ViamVjdHNbbWV0YS5lbmRwb2ludF1bbWV0YS5wYXRoXVttZXRob2RdW29iamVjdElEVG9DcmVhdGVPckxhc3RdID0gPE1vZGVscy5SZXBsYXlEYXRhPntcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3QoKSxcbiAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXBsYXkgPSB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF1bbWV0aG9kXVtvYmplY3RJRFRvQ3JlYXRlT3JMYXN0XTtcblxuICAgIGlmICghXy5pc051bWJlcihyZXBsYXkuaWQpKSB7XG4gICAgICBpZiAoUmVzdFJlcXVlc3Quam9iSWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIFJlc3RSZXF1ZXN0LmpvYklkID0gMDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgam9iaWQ6IG51bWJlciA9IFJlc3RSZXF1ZXN0LmpvYklkKys7XG4gICAgICByZXBsYXkuaWQgPSBqb2JpZDtcbiAgICAgIGNvbnN0IHN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IHJlcGxheS5zdWJqZWN0O1xuICAgICAgc3ViamVjdFtqb2JJRGtleV0gPSBqb2JpZDsgLy8gbW9kaWZ5IGludGVybmFsIHJ4anMgc3ViamVjdCBvYmpcblxuICAgICAgdGhpcy5tZXRhW2pvYmlkXSA9IG1ldGE7XG4gICAgICB0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdID0gc3ViamVjdDtcblxuICAgICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXVtjdXN0b21PYnNdID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG5cblxuXG4gICAgICAgIG9ic2VydmVyLmFkZCgoKSA9PiB7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuc3ViamVjdEludVVzZVtqb2JpZF1baXNDYW5jZWxlZF0pIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdEludVVzZVtqb2JpZF1baXNDYW5jZWxlZF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdW2NhbmNlbEZuXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdW2NhbmNlbEZuXSgnW25nMi1yZXN0XSBvbiBwdXJwb3NlIGNhbmNlbGVkIGh0dHAgcmVxdWVzdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHN1YiA9IHN1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBhID0+IG9ic2VydmVyLm5leHQoYSksXG4gICAgICAgICAgZXJyb3I6IGEgPT4gb2JzZXJ2ZXIuZXJyb3IoYSksXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGF5O1xuICB9XG5cblxuXG5cbiAgcHJpdmF0ZSBnZW5lcmFsUmVxKFxuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzLFxuICAgIG1ldGE6IE1vZGVscy5NZXRhUmVxdWVzdCxcbiAgICBpc0FycmF5OiBib29sZWFuLFxuICAgIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG5cbiAgICBjb25zdCByZXBsYXk6IE1vZGVscy5SZXBsYXlEYXRhID0gdGhpcy5nZXRSZXBsYXkobWV0aG9kLCBtZXRhLCBmYWxzZSk7XG4gICAgcmVwbGF5LmRhdGEgPSB7IHVybCwgYm9keSwgaGVhZGVycywgaXNBcnJheSB9O1xuXG4gICAgKChwdGhpcywgcHVybCwgcG1ldGhvZCwgcGhlYWRlcnMsIHBib2R5LCBwaWQsIHBpc0FycmF5LCBwbW9ja0h0dHApID0+IHtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiBwdGhpcy5yZXEocHVybCwgcG1ldGhvZCwgcGhlYWRlcnMsIHBib2R5LCBwaWQsIHBpc0FycmF5LCBwbW9ja0h0dHApKTtcbiAgICB9KSh0aGlzLCB1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSwgcmVwbGF5LmlkLCBpc0FycmF5LCBtb2NrSHR0cClcblxuICAgIGNvbnN0IHJlc3A6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+ID0gZmlyc3RWYWx1ZUZyb20ocmVwbGF5LnN1YmplY3RbY3VzdG9tT2JzXSkgYXMgYW55O1xuICAgIHJlc3Aub2JzZXJ2YWJsZSA9IHJlcGxheS5zdWJqZWN0W2N1c3RvbU9ic107XG4gICAgcmVzcC5jYWNoZSA9IFJlcXVlc3RDYWNoZS5maW5kQnkoe1xuICAgICAgYm9keSxcbiAgICAgIGlzQXJyYXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcDtcbiAgfVxuXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ2dldCcsIHVybCwgYm9keSwgaGVhZGVycywgbWV0YSwgaXNBcnJheSwgbW9ja0h0dHApO1xuICB9XG5cbiAgaGVhZChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ2hlYWQnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIGRlbGV0ZShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cCk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmFsUmVxKCdkZWxldGUnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzLFxuICAgIG1ldGE6IE1vZGVscy5NZXRhUmVxdWVzdCxcbiAgICBpc0FycmF5OiBib29sZWFuLFxuICAgIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ3Bvc3QnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIHB1dChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cFxuICApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFJlcSgncHV0JywgdXJsLCBib2R5LCBoZWFkZXJzLCBtZXRhLCBpc0FycmF5LCBtb2NrSHR0cCk7XG4gIH1cblxuICBwYXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cFxuICApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFJlcSgncGF0Y2gnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIGpzb25wKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBoZWFkZXJzOiBSZXN0SGVhZGVycyxcbiAgICBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QsXG4gICAgaXNBcnJheTogYm9vbGVhbixcbiAgICBtb2NrSHR0cDogTW9kZWxzLk1vY2tIdHRwXG4gICk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+IHtcblxuICAgIGNvbnN0IHJlcGxheTogTW9kZWxzLlJlcGxheURhdGEgPSB0aGlzLmdldFJlcGxheSgnanNvbnAnLCBtZXRhLCBmYWxzZSk7XG4gICAgY29uc3Qgam9iaWQgPSByZXBsYXkuaWQ7XG4gICAgY29uc3QgbWV0aG9kID0gJ2pzb25wJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB1cmwgPSB1cmwuc2xpY2UoMCwgdXJsLmxlbmd0aCAtIDEpXG4gICAgICBsZXQgbnVtID0gTWF0aC5yb3VuZCgxMDAwMCAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgbGV0IGNhbGxiYWNrTWV0aG9kTmFtZSA9IFwiY2JfXCIgKyBudW07XG4gICAgICB3aW5kb3dbY2FsbGJhY2tNZXRob2ROYW1lXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQ2FjaGUoe1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgbWV0aG9kXG4gICAgICAgIH0sIGpvYmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXJSZXN1bHQoe1xuICAgICAgICAgIHJlczoge1xuICAgICAgICAgICAgZGF0YSwgaXNBcnJheVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGpvYmlkLFxuICAgICAgICAgIGlzQXJyYXlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgbGV0IHNjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzYy5zcmMgPSBgJHt1cmx9P2NhbGxiYWNrPSR7Y2FsbGJhY2tNZXRob2ROYW1lfWA7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2MpO1xuICAgIH0pXG5cbiAgICBjb25zdCByZXNwOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiA9IGZpcnN0VmFsdWVGcm9tKHJlcGxheS5zdWJqZWN0W2N1c3RvbU9ic10pIGFzIGFueTtcbiAgICByZXNwLm9ic2VydmFibGUgPSByZXBsYXkuc3ViamVjdFtjdXN0b21PYnNdO1xuICAgIGNvbnNvbGUubG9nKCdhc3NpZ2luZyBjdXN0b20gb2JzZXJ2YWJsZScpXG4gICAgcmVzcC5jYWNoZSA9IFJlcXVlc3RDYWNoZS5maW5kQnkoe1xuICAgICAgYm9keSxcbiAgICAgIGlzQXJyYXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9KVxuICAgIHJldHVybiByZXNwO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYXlTdWJqZWN0cyA9IHt9O1xuICBwdWJsaWMgcmVwbGF5KG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsIG1ldGE6IE1vZGVscy5NZXRhUmVxdWVzdCkge1xuICAgIGNvbnN0IHJlcGxheTogTW9kZWxzLlJlcGxheURhdGEgPSB0aGlzLmdldFJlcGxheShtZXRob2QsIG1ldGEsIHRydWUpO1xuICAgIGlmICghcmVwbGF5IHx8ICFyZXBsYXkuZGF0YSkge1xuICAgICAgY29uc29sZS53YXJuKGBDYW5ubyByZXBsYXkgZmlyc3QgJHttZXRob2R9IHJlcXVlc3QgZnJvbSAke21ldGEuZW5kcG9pbnR9LyR7bWV0YS5wYXRofWApO1xuICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgaWYgKHJlcGxheSAmJiByZXBsYXkuc3ViamVjdCAmJiBBcnJheS5pc0FycmF5KHJlcGxheS5zdWJqZWN0Lm9ic2VydmVycykgJiZcbiAgICAgIHJlcGxheS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gb2JzZXJ2YXRvcnMgZm9yICR7bWV0aG9kfSByZXF1ZXN0IGZyb20gJHttZXRhLmVuZHBvaW50fS8ke21ldGEucGF0aH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gcmVwbGF5LmRhdGEudXJsO1xuICAgIGNvbnN0IGhlYWRlcnMgPSByZXBsYXkuZGF0YS5oZWFkZXJzO1xuICAgIGNvbnN0IGJvZHkgPSByZXBsYXkuZGF0YS5ib2R5O1xuICAgIGNvbnN0IGlzQXJyYXkgPSByZXBsYXkuZGF0YS5pc0FycmF5O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXEodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHksIHJlcGxheS5pZCwgaXNBcnJheSkpXG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL3Jlc3QtcmVxdWVzdC50cyJdfQ==
|