ng2-rest 13.2.9 → 16.0.10
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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Based on Headers from https://github.com/angular/angular/blob/master/packages/http/src/headers.ts
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export type RestHeadersOptions = RestHeaders | {
|
|
6
6
|
[name: string]: (string | string[]);
|
|
7
7
|
};
|
|
8
8
|
export declare class RestHeaders {
|
package/websql/package.json
CHANGED
|
@@ -8,23 +8,17 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.3.0"
|
|
10
10
|
},
|
|
11
|
-
"module": "
|
|
12
|
-
"
|
|
13
|
-
"esm2020": "esm2020/ng2-rest.mjs",
|
|
14
|
-
"fesm2020": "fesm2020/ng2-rest.mjs",
|
|
15
|
-
"fesm2015": "fesm2015/ng2-rest.mjs",
|
|
16
|
-
"typings": "ng2-rest.d.ts",
|
|
11
|
+
"module": "fesm2022/ng2-rest.mjs",
|
|
12
|
+
"typings": "index.d.ts",
|
|
17
13
|
"exports": {
|
|
18
14
|
"./package.json": {
|
|
19
15
|
"default": "./package.json"
|
|
20
16
|
},
|
|
21
17
|
".": {
|
|
22
|
-
"types": "./
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"node": "./fesm2015/ng2-rest.mjs",
|
|
27
|
-
"default": "./fesm2020/ng2-rest.mjs"
|
|
18
|
+
"types": "./index.d.ts",
|
|
19
|
+
"esm2022": "./esm2022/ng2-rest.mjs",
|
|
20
|
+
"esm": "./esm2022/ng2-rest.mjs",
|
|
21
|
+
"default": "./fesm2022/ng2-rest.mjs"
|
|
28
22
|
}
|
|
29
23
|
},
|
|
30
24
|
"sideEffects": false
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { CoreHelpers } from 'tnp-core/browser';
|
|
2
|
-
import { Mapping } from './mapping';
|
|
3
|
-
import { JSON10 } from 'json10/browser';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
export class Helpers extends CoreHelpers {
|
|
6
|
-
static get Mapping() {
|
|
7
|
-
return {
|
|
8
|
-
encode(json, mapping) {
|
|
9
|
-
return Mapping.encode(json, mapping);
|
|
10
|
-
},
|
|
11
|
-
decode(json, autodetect = false) {
|
|
12
|
-
return Mapping.decode(json, autodetect);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
static checkValidUrl(url) {
|
|
17
|
-
let regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
|
|
18
|
-
return regex.test(url);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
Helpers.JSON = JSON10;
|
|
22
|
-
;
|
|
23
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/helpers.ts
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxhQUFhO0FBQ2IsTUFBTSxPQUFPLE9BQVEsU0FBUSxXQUFXO0lBSXRDLE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU87WUFDTCxNQUFNLENBQWUsSUFBWSxFQUFFLE9BQXdCO2dCQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBWSxFQUFFLFVBQVUsR0FBRyxLQUFLO2dCQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBVztRQUM5QixJQUFJLEtBQUssR0FBRyw2RUFBNkUsQ0FBQztRQUMxRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7QUFoQk0sWUFBSSxHQUFHLE1BQU0sQ0FBQztBQXNCdEIsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvREFBb0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDb3JlSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgTWFwcGluZyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5cbi8vIEB0cy1pZ25vcmVcbmV4cG9ydCBjbGFzcyBIZWxwZXJzIGV4dGVuZHMgQ29yZUhlbHBlcnMge1xuXG4gIHN0YXRpYyBKU09OID0gSlNPTjEwO1xuXG4gIHN0YXRpYyBnZXQgTWFwcGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5jb2RlPFQgPSBGdW5jdGlvbj4oanNvbjogT2JqZWN0LCBtYXBwaW5nOiBNYXBwaW5nLk1hcHBpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIE1hcHBpbmcuZW5jb2RlKGpzb24sIG1hcHBpbmcpO1xuICAgICAgfSxcbiAgICAgIGRlY29kZShqc29uOiBPYmplY3QsIGF1dG9kZXRlY3QgPSBmYWxzZSApOiBNYXBwaW5nLk1hcHBpbmcge1xuICAgICAgICByZXR1cm4gTWFwcGluZy5kZWNvZGUoanNvbiwgYXV0b2RldGVjdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tWYWxpZFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZWdleCA9IC8oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJSFcXC1cXC9dKSk/LztcbiAgICByZXR1cm4gcmVnZXgudGVzdCh1cmwpO1xuICB9XG5cblxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvaGVscGVycy50cyJdfQ==
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { Cookie } from './cookie';
|
|
2
|
-
import { Mapping } from './mapping';
|
|
3
|
-
import { Models as HelpersModels } from 'typescript-class-helpers/browser';
|
|
4
|
-
import { JSON10 } from 'json10/browser';
|
|
5
|
-
import { RequestCache } from './request-cache';
|
|
6
|
-
import { _ } from 'tnp-core/browser';
|
|
7
|
-
import { Helpers } from 'tnp-core/browser';
|
|
8
|
-
export var Models;
|
|
9
|
-
(function (Models) {
|
|
10
|
-
Models.MethodConfig = HelpersModels.MethodConfig;
|
|
11
|
-
Models.ClassConfig = HelpersModels.ClassConfig;
|
|
12
|
-
Models.ParamConfig = HelpersModels.ParamConfig;
|
|
13
|
-
;
|
|
14
|
-
;
|
|
15
|
-
[];
|
|
16
|
-
class BaseBody {
|
|
17
|
-
toJSON(data, isJSONArray = false) {
|
|
18
|
-
let r = isJSONArray ? [] : {};
|
|
19
|
-
if (typeof data === 'string') {
|
|
20
|
-
try {
|
|
21
|
-
r = JSON.parse(data);
|
|
22
|
-
}
|
|
23
|
-
catch (e) { }
|
|
24
|
-
}
|
|
25
|
-
else if (typeof data === 'object') {
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
return r;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
Models.BaseBody = BaseBody;
|
|
32
|
-
class HttpBody extends BaseBody {
|
|
33
|
-
constructor(responseText, isArray = false, entity, circular) {
|
|
34
|
-
super();
|
|
35
|
-
this.responseText = responseText;
|
|
36
|
-
this.isArray = isArray;
|
|
37
|
-
this.entity = entity;
|
|
38
|
-
this.circular = circular;
|
|
39
|
-
}
|
|
40
|
-
get blob() {
|
|
41
|
-
return this.responseText;
|
|
42
|
-
}
|
|
43
|
-
get booleanValue() {
|
|
44
|
-
if (!Helpers.isBlob(this.responseText)) {
|
|
45
|
-
return ['ok', 'true'].includes(this.responseText.trim());
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
get rawJson() {
|
|
49
|
-
if (!Helpers.isBlob(this.responseText)) {
|
|
50
|
-
let res = this.toJSON(this.responseText, this.isArray);
|
|
51
|
-
if (this.circular && Array.isArray(this.circular)) {
|
|
52
|
-
res = JSON10.parse(JSON.stringify(res), this.circular);
|
|
53
|
-
}
|
|
54
|
-
return res;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
get json() {
|
|
58
|
-
if (!Helpers.isBlob(this.responseText)) {
|
|
59
|
-
if (this.entity && typeof this.entity === 'function') {
|
|
60
|
-
return this.entity(); // @LAST
|
|
61
|
-
}
|
|
62
|
-
if (this.entity && typeof this.entity === 'object') {
|
|
63
|
-
const json = this.toJSON(this.responseText, this.isArray);
|
|
64
|
-
return Mapping.encode(json, this.entity, this.circular);
|
|
65
|
-
}
|
|
66
|
-
let res = this.toJSON(this.responseText, this.isArray);
|
|
67
|
-
if (this.circular && Array.isArray(this.circular)) {
|
|
68
|
-
res = JSON10.parse(JSON.stringify(res), this.circular);
|
|
69
|
-
}
|
|
70
|
-
return res;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
get text() {
|
|
74
|
-
if (!Helpers.isBlob(this.responseText)) {
|
|
75
|
-
return this.responseText.replace(/^\"/, '').replace(/\"$/, '');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
Models.HttpBody = HttpBody;
|
|
80
|
-
class ErrorBody extends BaseBody {
|
|
81
|
-
constructor(data) {
|
|
82
|
-
super();
|
|
83
|
-
this.data = data;
|
|
84
|
-
}
|
|
85
|
-
get json() {
|
|
86
|
-
return this.toJSON(this.data);
|
|
87
|
-
}
|
|
88
|
-
get text() {
|
|
89
|
-
return this.data;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
Models.ErrorBody = ErrorBody;
|
|
93
|
-
class BaseResponse {
|
|
94
|
-
constructor(responseText, headers, statusCode, isArray = false) {
|
|
95
|
-
this.responseText = responseText;
|
|
96
|
-
this.headers = headers;
|
|
97
|
-
this.statusCode = statusCode;
|
|
98
|
-
this.isArray = isArray;
|
|
99
|
-
}
|
|
100
|
-
get cookies() {
|
|
101
|
-
return BaseResponse.cookies;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
BaseResponse.cookies = Cookie.Instance;
|
|
105
|
-
Models.BaseResponse = BaseResponse;
|
|
106
|
-
class HttpResponse extends BaseResponse {
|
|
107
|
-
constructor(sourceRequest, responseText, headers, statusCode, entity, circular, jobid, isArray = false) {
|
|
108
|
-
super(responseText, headers, statusCode, isArray);
|
|
109
|
-
this.sourceRequest = sourceRequest;
|
|
110
|
-
this.responseText = responseText;
|
|
111
|
-
this.headers = headers;
|
|
112
|
-
this.statusCode = statusCode;
|
|
113
|
-
this.entity = entity;
|
|
114
|
-
this.circular = circular;
|
|
115
|
-
this.jobid = jobid;
|
|
116
|
-
this.isArray = isArray;
|
|
117
|
-
this.init();
|
|
118
|
-
}
|
|
119
|
-
init() {
|
|
120
|
-
if (typeof this.entity === 'string') {
|
|
121
|
-
let entityJSON = this.headers.getAll(this.entity);
|
|
122
|
-
if (!!entityJSON) {
|
|
123
|
-
this.entity = JSON.parse(entityJSON.join());
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (typeof this.circular === 'string') {
|
|
127
|
-
let circuralJSON = this.headers.getAll(this.circular);
|
|
128
|
-
if (!!circuralJSON) {
|
|
129
|
-
this.circular = JSON.parse(circuralJSON.join());
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
this.body = new HttpBody(this.responseText, this.isArray, this.entity, this.circular);
|
|
133
|
-
}
|
|
134
|
-
get cache() {
|
|
135
|
-
if (_.isUndefined(this.rq)) {
|
|
136
|
-
this.rq = new RequestCache(this);
|
|
137
|
-
}
|
|
138
|
-
return new RequestCache(this);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
Models.HttpResponse = HttpResponse;
|
|
142
|
-
class HttpResponseError extends BaseResponse {
|
|
143
|
-
constructor(message, responseText, headers, statusCode, jobid) {
|
|
144
|
-
super(responseText, headers, statusCode);
|
|
145
|
-
this.message = message;
|
|
146
|
-
this.jobid = jobid;
|
|
147
|
-
this.body = new ErrorBody(responseText);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
Models.HttpResponseError = HttpResponseError;
|
|
151
|
-
/* */
|
|
152
|
-
/* */
|
|
153
|
-
/* */
|
|
154
|
-
/* */
|
|
155
|
-
/* */
|
|
156
|
-
/* */
|
|
157
|
-
})(Models || (Models = {}));
|
|
158
|
-
;
|
|
159
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/models.ts
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHM0MsTUFBTSxLQUFXLE1BQU0sQ0E2UnRCO0FBN1JELFdBQWlCLE1BQU07SUFLUCxtQkFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDMUMsa0JBQVcsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQ3hDLGtCQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQTtJQTRFcEQsQ0FBQztJQUtELENBQUM7SUFXRCxFQUFFLENBQUM7SUFFSixNQUFzQixRQUFRO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxHQUFHLEtBQUs7WUFDeEMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsSUFBSTtvQkFDRixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMs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QztRQUVELElBQUksS0FBSztZQUNQLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEM7WUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7S0FFRjtJQW5EWSxtQkFBWSxlQW1EeEIsQ0FBQTtJQUVELE1BQWEsaUJBQWtCLFNBQVEsWUFBaUI7UUFLdEQsWUFDUyxPQUFlLEVBQ3RCLFlBQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLFVBQThCLEVBQ3ZCLEtBQWM7WUFFckIsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFObEMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtZQUlmLFVBQUssR0FBTCxLQUFLLENBQVM7WUFHckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN6QyxDQUFDO0tBQ0Y7SUFmWSx3QkFBaUIsb0JBZTdCLENBQUE7SUFZSCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFFTCxDQUFDLEVBN1JnQixNQUFNLEtBQU4sTUFBTSxRQTZSdEI7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IHsgUmVzdEhlYWRlcnMgfSBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG5pbXBvcnQgeyBSZXN0IH0gZnJvbSAnLi9yZXN0LmNsYXNzJztcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJy4vY29va2llJztcbmltcG9ydCB7IE1hcHBpbmcgfSBmcm9tICcuL21hcHBpbmcnO1xuaW1wb3J0IHsgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IE1vZGVscyBhcyBIZWxwZXJzTW9kZWxzIH0gZnJvbSAndHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL2Jyb3dzZXInXG5pbXBvcnQgeyBKU09OMTAsIENpcmMgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyBSZXF1ZXN0Q2FjaGUgfSBmcm9tICcuL3JlcXVlc3QtY2FjaGUnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgQ29uZmlnTW9kZWxzIH0gZnJvbSAndG5wLWNvbmZpZy9icm93c2VyJztcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcblxuXG5leHBvcnQgbmFtZXNwYWNlIE1vZGVscyB7XG5cbiAgZXhwb3J0IGltcG9ydCBIdHRwTWV0aG9kID0gQ29uZmlnTW9kZWxzLkh0dHBNZXRob2Q7XG4gIGV4cG9ydCBpbXBvcnQgUGFyYW1UeXBlID0gQ29uZmlnTW9kZWxzLlBhcmFtVHlwZTtcblxuICBleHBvcnQgaW1wb3J0IE1ldGhvZENvbmZpZyA9IEhlbHBlcnNNb2RlbHMuTWV0aG9kQ29uZmlnO1xuICBleHBvcnQgaW1wb3J0IENsYXNzQ29uZmlnID0gSGVscGVyc01vZGVscy5DbGFzc0NvbmZpZztcbiAgZXhwb3J0IGltcG9ydCBQYXJhbUNvbmZpZyA9IEhlbHBlcnNNb2RlbHMuUGFyYW1Db25maWdcblxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlUmVzdWx0T3B0aW9ucyB7XG4gICAgcmVzOiBNb2RlbHMuTW9ja1Jlc3BvbnNlO1xuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2Q7XG4gICAgam9iaWQ/OiBudW1iZXI7XG4gICAgaXNBcnJheT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zIHtcbiAgICB1cmw6IHN0cmluZyxcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLFxuXG4gICAgYm9keTogYW55LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gIH1cblxuICBleHBvcnQgdHlwZSBCYWNrZW5kRXJyb3IgPSB7XG4gICAgbXNnPzogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nW107XG4gICAgZGF0YTogYW55O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTWV0YVJlcXVlc3QgPSB7XG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGVuZHBvaW50OiBzdHJpbmc7XG4gICAgZW50aXR5OiBNYXBwaW5nLk1hcHBpbmc7XG4gICAgY2lyY3VsYXI6IENpcmNbXTtcbiAgfVxuICBleHBvcnQgdHlwZSBIdHRwQ29kZSA9IDIwMCB8IDQwMCB8IDQwMSB8IDQwNCB8IDUwMDtcblxuICBleHBvcnQgdHlwZSBQcm9taXNlT2JzZXJ2YWJsZU1peDxUPiA9IFByb21pc2U8VD4gJiB7XG4gICAgY2FjaGU/OiBSZXF1ZXN0Q2FjaGUsXG4gICAgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQsIFIgPSBQcm9taXNlT2JzZXJ2YWJsZU1peDxFPj4gPSAocGFyYW1zPzogVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbikgPT4gUlxuICBleHBvcnQgdHlwZSBNZXRob2RXaXRoQm9keTxFLCBULCBSID0gUHJvbWlzZU9ic2VydmFibGVNaXg8RT4+ID0gKGl0ZW0/OiBULCBwYXJhbXM/OiBVcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKSA9PiBSXG4gIGV4cG9ydCB0eXBlIFJlcGxheURhdGEgPSB7XG4gICAgc3ViamVjdDogU3ViamVjdDxhbnk+LFxuICAgIGRhdGE6IHsgdXJsOiBzdHJpbmcsIGJvZHk6IHN0cmluZywgaGVhZGVyczogUmVzdEhlYWRlcnMsIGlzQXJyYXk6IGJvb2xlYW47IH0sXG4gICAgLyoqXG4gICAgICogam9iaWRcbiAgICAgKi9cbiAgICBpZDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBSZXFQYXJhbXMgPSB7IHVybDogc3RyaW5nLCBtZXRob2Q6IENvbmZpZ01vZGVscy5IdHRwTWV0aG9kLCBoZWFkZXJzPzogUmVzdEhlYWRlcnMsIGJvZHk/OiBhbnksIGpvYmlkOiBudW1iZXIsIGlzQXJyYXk6IGJvb2xlYW4gfTtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc291cmNlTW9kZWw8QSwgVEE+IHtcbiAgICBtb2RlbDogKHBhdGhNb2RlbHM/OiBPYmplY3QsIHJlc3BvbnNlT2JqZWN0VHlwZT86IEZ1bmN0aW9uKSA9PiBSZXN0PEEsIFRBPixcbiAgICByZXBsYXk6IChtZXRob2Q6IENvbmZpZ01vZGVscy5IdHRwTWV0aG9kKSA9PiB2b2lkO1xuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBOZzJSZXN0TWV0aG9kczxFLCBUPiB7XG4gICAgZ2V0OiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgICBwb3N0OiBNZXRob2RXaXRoQm9keTxFLCBUPjtcbiAgICBwdXQ6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIHBhdGNoOiBNZXRob2RXaXRoQm9keTxFLCBUPjtcbiAgICBoZWFkOiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgICBkZWxldGU6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIGpzb25wOiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIE1vY2tDb250cm9sbGVyID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgIGJvZHk/OiBhbnlcbiAgKSA9PiBNb2NrUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgTW9ja0h0dHAgPSAoTW9ja1Jlc3BvbnNlIHwgTW9ja0NvbnRyb2xsZXIpO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRm5NZXRob2RzSHR0cDxULCBUQT4gZXh0ZW5kcyBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VD4sIFQ+IHtcbiAgICBhcnJheTogTmcyUmVzdE1ldGhvZHM8SHR0cFJlc3BvbnNlPFRBPiwgVEE+O1xuICB9O1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRm5NZXRob2RzSHR0cFdpdGhNb2NrPFQsIFRBPiBleHRlbmRzIE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUPiwgVD4ge1xuICAgIGFycmF5OiBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VEE+LCBUQT47XG4gICAgbW9jayhtb2NrOiBNb2NrSHR0cCwgY29kZTogSHR0cENvZGUpOiBGbk1ldGhvZHNIdHRwPFQsIFRBPjtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGludGVyZmFjZSBOZXN0ZWRQYXJhbXMge1xuICAgIFtwYXJhbXM6IHN0cmluZ106IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXJsUGFyYW1zIHtcbiAgICBbdXJsTW9kZWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVnRXhwIHwgT2JqZWN0O1xuICAgIHJlZ2V4PzogUmVnRXhwO1xuICB9W107XG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VCb2R5IHtcbiAgICBwcm90ZWN0ZWQgdG9KU09OKGRhdGEsIGlzSlNPTkFycmF5ID0gZmFsc2UpIHtcbiAgICAgIGxldCByID0gaXNKU09OQXJyYXkgPyBbXSA6IHt9O1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHIgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgYXMgYW55O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBIdHRwQm9keTxUPiBleHRlbmRzIEJhc2VCb2R5IHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2VUZXh0OiBzdHJpbmcgfCBCbG9iLCBwcml2YXRlIGlzQXJyYXkgPSBmYWxzZSxcbiAgICAgIHByaXZhdGUgZW50aXR5OiBNYXBwaW5nLk1hcHBpbmcsXG4gICAgICBwcml2YXRlIGNpcmN1bGFyOiBDaXJjW11cbiAgICApIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBibG9iKCk6IEJsb2Ige1xuICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VUZXh0IGFzIEJsb2I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuVmFsdWUoKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICByZXR1cm4gWydvaycsICd0cnVlJ10uaW5jbHVkZXMoKHRoaXMucmVzcG9uc2VUZXh0IGFzIHN0cmluZykudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhd0pzb24oKTogUGFydGlhbDxUPiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICBsZXQgcmVzID0gdGhpcy50b0pTT04odGhpcy5yZXNwb25zZVRleHQsIHRoaXMuaXNBcnJheSk7XG4gICAgICAgIGlmICh0aGlzLmNpcmN1bGFyICYmIEFycmF5LmlzQXJyYXkodGhpcy5jaXJjdWxhcikpIHtcbiAgICAgICAgICByZXMgPSBKU09OMTAucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzKSwgdGhpcy5jaXJjdWxhcilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uKCk6IFQge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzQmxvYih0aGlzLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0eSgpOyAvLyBATEFTVFxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0eXBlb2YgdGhpcy5lbnRpdHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXkpO1xuICAgICAgICAgIHJldHVybiBNYXBwaW5nLmVuY29kZShqc29uLCB0aGlzLmVudGl0eSwgdGhpcy5jaXJjdWxhcikgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXMgPSB0aGlzLnRvSlNPTih0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNpcmN1bGFyKSkge1xuICAgICAgICAgIHJlcyA9IEpTT04xMC5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpLCB0aGlzLmNpcmN1bGFyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdGV4dCgpIHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJlc3BvbnNlVGV4dCBhcyBzdHJpbmcpLnJlcGxhY2UoL15cXFwiLywgJycpLnJlcGxhY2UoL1xcXCIkLywgJycpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEVycm9yQm9keSBleHRlbmRzIEJhc2VCb2R5IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGEpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uKCk6IE9iamVjdCB7XG4gICAgICByZXR1cm4gdGhpcy50b0pTT04odGhpcy5kYXRhKTtcbiAgICB9XG4gICAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH1cbiAgfVxuXG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZXNwb25zZTxUPiB7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBjb29raWVzID0gQ29va2llLkluc3RhbmNlO1xuXG4gICAgcHVibGljIGdldCBjb29raWVzKCkge1xuICAgICAgcmV0dXJuIEJhc2VSZXNwb25zZS5jb29raWVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyByZXNwb25zZVRleHQ/OiBzdHJpbmcgfCBCbG9iLFxuICAgICAgcHVibGljIHJlYWRvbmx5IGhlYWRlcnM/OiBSZXN0SGVhZGVycyxcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlPzogSHR0cENvZGUgfCBudW1iZXIsXG4gICAgICBwdWJsaWMgaXNBcnJheSA9IGZhbHNlXG4gICAgKSB7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEh0dHBSZXNwb25zZTxUPiBleHRlbmRzIEJhc2VSZXNwb25zZTxUPiB7XG4gICAgcHVibGljIGJvZHk/OiBIdHRwQm9keTxUPjtcblxuXG5cblxuICAgIHJxOiBSZXF1ZXN0Q2FjaGU7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgc291cmNlUmVxdWVzdDogTW9kZWxzLkhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zLFxuICAgICAgcHVibGljIHJlc3BvbnNlVGV4dD86IHN0cmluZyB8IEJsb2IsXG4gICAgICBwdWJsaWMgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgcHVibGljIHN0YXR1c0NvZGU/OiBIdHRwQ29kZSB8IG51bWJlcixcbiAgICAgIHB1YmxpYyBlbnRpdHk/OiBNYXBwaW5nLk1hcHBpbmcgfCBGdW5jdGlvbixcbiAgICAgIHB1YmxpYyBjaXJjdWxhcj86IENpcmNbXSxcbiAgICAgIHB1YmxpYyBqb2JpZD86IG51bWJlcixcbiAgICAgIHB1YmxpYyBpc0FycmF5ID0gZmFsc2UsXG4gICAgKSB7XG5cblxuXG4gICAgICBzdXBlcihyZXNwb25zZVRleHQsIGhlYWRlcnMsIHN0YXR1c0NvZGUsIGlzQXJyYXkpO1xuXG4gICAgICB0aGlzLmluaXQoKVxuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICBsZXQgZW50aXR5SlNPTiA9IHRoaXMuaGVhZGVycy5nZXRBbGwodGhpcy5lbnRpdHkpXG4gICAgICAgIGlmICghIWVudGl0eUpTT04pIHtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IEpTT04ucGFyc2UoZW50aXR5SlNPTi5qb2luKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2lyY3VsYXIgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgbGV0IGNpcmN1cmFsSlNPTiA9IHRoaXMuaGVhZGVycy5nZXRBbGwodGhpcy5jaXJjdWxhcik7XG4gICAgICAgIGlmICghIWNpcmN1cmFsSlNPTikge1xuICAgICAgICAgIHRoaXMuY2lyY3VsYXIgPSBKU09OLnBhcnNlKGNpcmN1cmFsSlNPTi5qb2luKCkpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keSA9IG5ldyBIdHRwQm9keSh0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5LCB0aGlzLmVudGl0eSwgdGhpcy5jaXJjdWxhcikgYXMgYW55O1xuICAgIH1cblxuICAgIGdldCBjYWNoZSgpIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucnEpKSB7XG4gICAgICAgIHRoaXMucnEgPSBuZXcgUmVxdWVzdENhY2hlKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0Q2FjaGUodGhpcyk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBCYXNlUmVzcG9uc2U8YW55PiB7XG4gICAgcHJpdmF0ZSBib2R5OiBFcnJvckJvZHk7XG5cblxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgcmVzcG9uc2VUZXh0Pzogc3RyaW5nLFxuICAgICAgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZT86IEh0dHBDb2RlIHwgbnVtYmVyLFxuICAgICAgcHVibGljIGpvYmlkPzogbnVtYmVyLFxuICAgICkge1xuICAgICAgc3VwZXIocmVzcG9uc2VUZXh0LCBoZWFkZXJzLCBzdGF0dXNDb2RlKTtcbiAgICAgIHRoaXMuYm9keSA9IG5ldyBFcnJvckJvZHkocmVzcG9uc2VUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTW9ja1Jlc3BvbnNlIHtcbiAgICBkYXRhPzogYW55O1xuICAgIGNvZGU/OiBIdHRwQ29kZTtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnM7XG4gICAgam9iaWQ/OiBudW1iZXI7XG4gICAgaXNBcnJheTogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlVHlwZUF4aW9zID0gJ2Jsb2InIHwgJ3RleHQnXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL21vZGVscy50cyJdfQ==
|
|
@@ -1,118 +0,0 @@
|
|
|
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
|
-
constructor(endpoint, path_model) {
|
|
17
|
-
this.endpoint = endpoint;
|
|
18
|
-
this.path_model = path_model;
|
|
19
|
-
/**
|
|
20
|
-
* Get model by rest params
|
|
21
|
-
*/
|
|
22
|
-
this.model = (restParams) => {
|
|
23
|
-
return {
|
|
24
|
-
get: (queryPrams) => {
|
|
25
|
-
return Observable.create((observer) => {
|
|
26
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
27
|
-
.get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
28
|
-
.observable
|
|
29
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
30
|
-
});
|
|
31
|
-
},
|
|
32
|
-
patch: (item, queryParams) => {
|
|
33
|
-
return Observable.create((observer) => {
|
|
34
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
35
|
-
.put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
36
|
-
.observable
|
|
37
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
38
|
-
});
|
|
39
|
-
},
|
|
40
|
-
head: (queryPrams) => {
|
|
41
|
-
return Observable.create((observer) => {
|
|
42
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
43
|
-
.head([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
44
|
-
.observable
|
|
45
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
46
|
-
});
|
|
47
|
-
},
|
|
48
|
-
query: (queryPrams) => {
|
|
49
|
-
return Observable.create((observer) => {
|
|
50
|
-
ExtendedResource.handlers.push(this.rest.model(restParams).
|
|
51
|
-
array
|
|
52
|
-
.get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
53
|
-
.observable
|
|
54
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
|
-
post: (item, queryParams) => {
|
|
58
|
-
return Observable.create((observer) => {
|
|
59
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
60
|
-
.post(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
61
|
-
.observable
|
|
62
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
put: (item, queryParams) => {
|
|
66
|
-
return Observable.create((observer) => {
|
|
67
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
68
|
-
.put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
|
|
69
|
-
.observable
|
|
70
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
delete: (queryPrams) => {
|
|
74
|
-
return Observable.create((observer) => {
|
|
75
|
-
ExtendedResource.handlers.push(this.rest.model(restParams)
|
|
76
|
-
.delete([queryPrams], ExtendedResource.doNotSerializeQueryParams)
|
|
77
|
-
.observable
|
|
78
|
-
.subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
};
|
|
83
|
-
this.rest = Resource.create(endpoint, path_model);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
ExtendedResource.doNotSerializeQueryParams = false;
|
|
87
|
-
ExtendedResource.handlers = [];
|
|
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
|
-
constructor(endpoint, model) {
|
|
99
|
-
let rest = new ExtendedResource(endpoint, model);
|
|
100
|
-
this.model = rest.model;
|
|
101
|
-
}
|
|
102
|
-
static set doNotSerializeQueryParams(value) {
|
|
103
|
-
if (!SimpleResource._isSetQueryParamsSerialization) {
|
|
104
|
-
SimpleResource._isSetQueryParamsSerialization = true;
|
|
105
|
-
ExtendedResource.doNotSerializeQueryParams = value;
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
console.warn(`Query params serialization already set as
|
|
109
|
-
${ExtendedResource.doNotSerializeQueryParams},`);
|
|
110
|
-
}
|
|
111
|
-
static __destroy() {
|
|
112
|
-
ExtendedResource.handlers.forEach(h => h.unsubscribe());
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
SimpleResource._isSetQueryParamsSerialization = false;
|
|
116
|
-
;
|
|
117
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/other/simple-resource.ts
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL290aGVyL3NpbXBsZS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXFCL0M7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLGdCQUFnQjtJQStHcEIsWUFBMkIsUUFBb0IsRUFBVSxVQUFrQjtRQUFoRCxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXpHM0U7O1VBRUU7UUFDRixVQUFLLEdBQXlCLENBQUMsVUFBZSxFQUFFLEVBQUU7WUFFaEQsT0FBTztnQkFFTCxHQUFHLEVBQUUsQ0FBQyxVQUFlLEVBQUUsRUFBRTtvQkFDdkIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBcUIsRUFBRSxFQUFFO3dCQUNqRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs2QkFDdkQsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMseUJBQXlCLENBQUM7NkJBQzdELFVBQVU7NkJBQ1YsU0FBUyxDQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNyQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQzFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBQ2pDLENB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QUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDOztBQWJjLDZDQUE4QixHQUFHLEtBQUssQ0FBQztBQXNCdkQsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrRUFBa0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UHJvbWlzZXM8QSwgVEEsIFFQIGV4dGVuZHMgTW9kZWxzLlVybFBhcmFtcz4ge1xuICBnZXQ6IChxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBoZWFkOiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgcXVlcnk6IChxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PjtcbiAgcHV0OiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHBhdGNoOiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHBvc3Q6IChpdGVtPzogQSwgcXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgZGVsZXRlOiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+IHwgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbDxBLCBUQSwgUlAgZXh0ZW5kcyBPYmplY3QsIFFQIGV4dGVuZHMgTW9kZWxzLlVybFBhcmFtcz4ge1xuICAocmVzdFBhcmFtcz86IFJQKTogUmVzdFByb21pc2VzPEEsIFRBLCBRUD47XG59XG5cblxuXG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBhYnN0cmFjdFxuICogQGNsYXNzIFNpbXBsZVJlc291cmNlXG4gKiBAZXh0ZW5kcyB7UmVzb3VyY2U8VCwgQSwgVEE+fVxuICogQHRlbXBsYXRlIEUgIEVuZHBvaW50IHR5cGVcbiAqIEB0ZW1wbGF0ZSBBIFNpbmdsZSBtb2RsZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEEgQXJyYXkgTW9kZWwgVHlwZVxuICogQHRlbXBsYXRlIFJQIHJlc3QgdXJsIHBhcmFtZXRlcnMgdHlwZVxuICogQHRlbXBsYXRlIFFQIHF1ZXJ5IHBhcmFtZXRlciB0eXBlXG4gKi9cbmNsYXNzIEV4dGVuZGVkUmVzb3VyY2U8RSwgQSwgVEEsIFJQIGV4dGVuZHMgT2JqZWN0LCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+ICB7XG4gIHB1YmxpYyBzdGF0aWMgZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIGhhbmRsZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHJlc3Q6IE1vZGVscy5SZXNvdXJjZU1vZGVsPEEsIFRBPjtcblxuICAvKipcbiAgICogR2V0IG1vZGVsIGJ5IHJlc3QgcGFyYW1zXG4gICovXG4gIG1vZGVsOiBNb2RlbDxBLCBUQSwgUlAsIFFQPiA9IChyZXN0UGFyYW1zPzogUlApID0+IHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgIGdldDogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5nZXQoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfSxcblxuICAgICAgcGF0Y2g6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnB1dChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG4gICAgICBoZWFkOiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLmhlYWQoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfSxcblxuICAgICAgcXVlcnk6IChxdWVyeVByYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8VEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKS5cbiAgICAgICAgICAgIGFycmF5XG4gICAgICAgICAgICAuZ2V0KFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cblxuICAgICAgcG9zdDogKGl0ZW06IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAucG9zdChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG5cbiAgICAgIHB1dDogKGl0ZW06IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAucHV0KGl0ZW0sIFtxdWVyeVBhcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG5cbiAgICAgIH0sXG5cblxuICAgICAgZGVsZXRlOiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLmRlbGV0ZShbcXVlcnlQcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuXG5cblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVuZHBvaW50OiBFIHwgc3RyaW5nLCBwcml2YXRlIHBhdGhfbW9kZWw6IHN0cmluZykge1xuICAgIHRoaXMucmVzdCA9IDxhbnk+UmVzb3VyY2UuY3JlYXRlPEEsIFRBPig8YW55PmVuZHBvaW50LCBwYXRoX21vZGVsKTtcblxuICB9XG5cbn1cblxuXG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTaW1wbGVSZXNvdXJjZVxuICogQHRlbXBsYXRlIEEgc2luZ2xlIG1vZGVsIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUQSBhcnJheSBtb2RlbCB0eXBlXG4gKiBAdGVtcGxhdGUgUlAgcmVzdCBwYXJhbWV0ZXJzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBRUCBxdWVyeSBwYXJhbWV0ZXJzIHR5cGVcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbXBsZVJlc291cmNlPEEsIFRBPiB7XG4gIG1vZGVsOiBNb2RlbDxBLCBUQSwgT2JqZWN0LCBNb2RlbHMuVXJsUGFyYW1zPjtcblxuXG4gIHByaXZhdGUgc3RhdGljIF9pc1NldFF1ZXJ5UGFyYW1zU2VyaWFsaXphdGlvbiA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHNldCBkb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XG4gICAgaWYgKCFTaW1wbGVSZXNvdXJjZS5faXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24pIHtcbiAgICAgIFNpbXBsZVJlc291cmNlLl9pc1NldFF1ZXJ5UGFyYW1zU2VyaWFsaXphdGlvbiA9IHRydWU7XG4gICAgICBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMgPSB2YWx1ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oYFF1ZXJ5IHBhcmFtcyBzZXJpYWxpemF0aW9uIGFscmVhZHkgc2V0IGFzXG4gICAgICAgICR7RXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zfSxgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgX19kZXN0cm95KCkge1xuICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMuZm9yRWFjaChoID0+IGgudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogc3RyaW5nLCBtb2RlbDogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3QgPSBuZXcgRXh0ZW5kZWRSZXNvdXJjZTxzdHJpbmcsIEEsIFRBLCBPYmplY3QsIE1vZGVscy5VcmxQYXJhbXM+KGVuZHBvaW50LCBtb2RlbCk7XG4gICAgdGhpcy5tb2RlbCA9IHJlc3QubW9kZWw7XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL290aGVyL3NpbXBsZS1yZXNvdXJjZS50cyJdfQ==
|
|
@@ -1,101 +0,0 @@
|
|
|
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
|
-
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
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9yZXF1ZXN0LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUV4RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQWlFdkIsWUFDUyxRQUFrQztRQUFsQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtJQUczQyxDQUFDO0lBOURPLE1BQU0sQ0FBQyx1QkFBdUI7UUFDcEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUU7WUFDNUMsWUFBWSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xFLElBQUksUUFBUSxHQUFtQixFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSTtvQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQW1CLENBQUM7aUJBQy9DO2dCQUFDLE9BQU8sS0FBSyxFQUFFO2lCQUVmO2dCQUNELE1BQU0sUUFBUSxH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QUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNO1FBQ0osWUFBWSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDOztBQS9HZSw4QkFBaUIsR0FBRyxxQkFBcUIsQ0FBQztBQUUzQyxtQkFBTSxHQUFtQixFQUFFLENBQUM7QUFDNUIsdUNBQTBCLEdBQUcsS0FBSyxDQUFDO0FBZ0huRCxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDBEQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgUmVzdEhlYWRlcnMgfSBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG5jb25zdCBsb2cgPSBMb2cuY3JlYXRlKCdyZXF1ZXN0LWNhY2hlJywgTGV2ZWwuX19OT1RISU5HKVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiB0aGVyZSBpcyBDYWNoZSBBUEkgZm9yIHRoYXRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVlc3RDYWNoZSB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ25nMnJlc3RyZXF1ZXN0Y2FjaGUnO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlZDogUmVxdWVzdENhY2hlW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWMgaXNSZXN0b3JlZEZyb21Mb2NhbFN0b3JhZ2UgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXRpYyByZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpIHtcbiAgICBpZiAoSGVscGVycy5pc05vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFSZXF1ZXN0Q2FjaGUuaXNSZXN0b3JlZEZyb21Mb2NhbFN0b3JhZ2UpIHtcbiAgICAgIFJlcXVlc3RDYWNoZS5pc1Jlc3RvcmVkRnJvbUxvY2FsU3RvcmFnZSA9IHRydWU7XG4gICAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUmVxdWVzdENhY2hlLkxPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICAgIGxldCByZXF1ZXN0czogUmVxdWVzdENhY2hlW10gPSBbXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVxdWVzdHMgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFJlcXVlc3RDYWNoZVtdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdG9yZWQgPSByZXF1ZXN0cy5tYXAociA9PiB7XG4gICAgICAgICAgbGV0IHsgc291cmNlUmVxdWVzdCwgcmVzcG9uc2VUZXh0LCBib2R5LCBoZWFkZXJzLCBjaXJjdWxhcixcbiAgICAgICAgICAgIGVudGl0eSwgaXNBcnJheSwgY29va2llcywgc3RhdHVzQ29kZSB9ID0gci5yZXNwb25zZTtcbiAgICAgICAgICByLnJlc3BvbnNlID0gbmV3IE1vZGVscy5IdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICBzb3VyY2VSZXF1ZXN0LFxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbShoZWFkZXJzKSxcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBjaXJjdWxhcixcbiAgICAgICAgICAgIC0xLCAvLyBqb2JpZCBmcm9tIGxvY2FsIHN0b3JhZ2UgVE9ET1xuICAgICAgICAgICAgaXNBcnJheSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHIgPSBuZXcgUmVxdWVzdENhY2hlKHIucmVzcG9uc2UpO1xuICAgICAgICAgIHIucmVzcG9uc2UucnEgPSByO1xuXG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2cuaSgnUkVTVE9SRUQgRlJPTSBMT0NBTCBTVE9SQUdFJywgcmVzdG9yZWQpO1xuICAgICAgICBSZXF1ZXN0Q2FjaGUuY2FjaGVkID0gcmVzdG9yZWQ7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZpbmRCeShzb3VyY2VSZXF1ZXN0OiBNb2RlbHMuSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMpIHtcbiAgICBsb2cuaSgnZmluZGJ5Jywgc291cmNlUmVxdWVzdClcbiAgICBsb2cuaSgnUmVxdWVzdENhY2hlLmNhY2hlZCcsIFJlcXVlc3RDYWNoZS5jYWNoZWQpXG4gICAgUmVxdWVzdENhY2hlLnJlc3RvcmVGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgcmV0dXJuIFJlcXVlc3RDYWNoZS5jYWNoZWQuZmluZChjID0+IHtcbiAgICAgIGNvbnN0IGEgPSBjLnJlc3BvbnNlLnNvdXJjZVJlcXVlc3Q7XG4gICAgICBjb25zdCBiID0gc291cmNlUmVxdWVzdDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGEuaXNBcnJheSA9PT0gYi5pc0FycmF5ICYmXG4gICAgICAgIGEudXJsID09PSBiLnVybCAmJlxuICAgICAgICBhLm1ldGhvZCA9PT0gYi5tZXRob2QgJiZcbiAgICAgICAgYS5ib2R5ID09PSBiLmJvZHlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXNwb25zZTogTW9kZWxzLkh0dHBSZXNwb25zZTxhbnk+XG4gICkge1xuXG4gIH1cblxuICBnZXQgY29udGFpbnNDYWNoZSgpIHtcbiAgICBSZXF1ZXN0Q2FjaGUucmVzdG9yZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICByZXR1cm4gUmVxdWVzdENhY2hlLmNhY2hlZC5pbmNsdWRlcyh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdHNJbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShSZXF1ZXN0Q2FjaGUuTE9DQUxfU1RPUkFHRV9LRVksXG4gICAgICBKU09OLnN0cmluZ2lmeShSZXF1ZXN0Q2FjaGUuY2FjaGVkLm1hcChyID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgc291cmNlUmVxdWVzdDogci5yZXNwb25zZS5zb3VyY2VSZXF1ZXN0LFxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiByLnJlc3BvbnNlLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHIucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHIucmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIGVudGl0eTogci5yZXNwb25zZS5lbnRpdHksXG4gICAgICAgICAgICBjaXJjdWxhcjogci5yZXNwb25zZS5jaXJjdWxhcixcbiAgICAgICAgICAgIGlzQXJyYXk6IHIucmVzcG9uc2UuaXNBcnJheSxcbiAgICAgICAgICB9IGFzIE1vZGVscy5IdHRwUmVzcG9uc2U8YW55PlxuICAgICAgICB9O1xuICAgICAgfSkpKTtcbiAgfVxuXG4gIHN0b3JlKCkge1xuICAgIFJlcXVlc3RDYWNoZS5yZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICghdGhpcy5jb250YWluc0NhY2hlKSB7XG4gICAgICBSZXF1ZXN0Q2FjaGUuY2FjaGVkLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBlcnNpc3RzSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ2FscmVhZHkgc3RvcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIFJlcXVlc3RDYWNoZS5yZXN0b3JlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gUmVxdWVzdENhY2hlLmNhY2hlZC5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIFJlcXVlc3RDYWNoZS5jYWNoZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMucGVyc2lzdHNJbkxvY2FsU3RvcmFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnYWxyZWFkeSByZW1vdmVkJyk7XG4gICAgfVxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9yZXF1ZXN0LWNhY2hlLnRzIl19
|