ng2-rest 11.0.42 → 12.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/app.js +2 -47
- package/app.js.map +1 -1
- package/browser/README.md +24 -0
- package/browser/esm2020/lib/cookie.mjs +27 -0
- package/browser/esm2020/lib/helpers.mjs +22 -0
- package/browser/esm2020/lib/index.mjs +10 -0
- package/browser/esm2020/lib/mapping.mjs +271 -0
- package/browser/esm2020/lib/models.mjs +135 -0
- package/browser/esm2020/lib/params.mjs +305 -0
- package/browser/esm2020/lib/request-cache.mjs +95 -0
- package/browser/esm2020/lib/resource.service.mjs +255 -0
- package/browser/esm2020/lib/rest-headers.mjs +129 -0
- package/browser/esm2020/lib/rest-request.mjs +311 -0
- package/browser/esm2020/lib/rest.class.mjs +114 -0
- package/browser/esm2020/lib/simple-resource.mjs +117 -0
- package/browser/esm2020/ng2-rest.mjs +5 -0
- package/browser/esm2020/public-api.mjs +2 -0
- package/browser/fesm2015/ng2-rest.mjs +1755 -0
- package/browser/fesm2015/ng2-rest.mjs.map +1 -0
- package/browser/fesm2020/ng2-rest.mjs +1752 -0
- package/browser/fesm2020/ng2-rest.mjs.map +1 -0
- package/browser/{cookie.d.ts → lib/cookie.d.ts} +0 -0
- package/browser/{helpers.d.ts → lib/helpers.d.ts} +0 -0
- package/browser/{index.d.ts → lib/index.d.ts} +0 -0
- package/browser/{mapping.d.ts → lib/mapping.d.ts} +0 -0
- package/{client → browser/lib}/models.d.ts +2 -3
- package/browser/{params.d.ts → lib/params.d.ts} +0 -0
- package/browser/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
- package/browser/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
- package/browser/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
- package/{rest-request.d.ts → browser/lib/rest-request.d.ts} +0 -3
- package/{rest.class.d.ts → browser/lib/rest.class.d.ts} +0 -1
- package/browser/{simple-resource.d.ts → lib/simple-resource.d.ts} +1 -5
- package/browser/ng2-rest.d.ts +5 -0
- package/browser/package.json +31 -0
- package/browser/public-api.d.ts +1 -0
- package/client/README.md +24 -0
- package/client/esm2020/lib/cookie.mjs +27 -0
- package/client/esm2020/lib/helpers.mjs +22 -0
- package/client/esm2020/lib/index.mjs +10 -0
- package/client/esm2020/lib/mapping.mjs +271 -0
- package/client/esm2020/lib/models.mjs +135 -0
- package/client/esm2020/lib/params.mjs +305 -0
- package/client/esm2020/lib/request-cache.mjs +95 -0
- package/client/esm2020/lib/resource.service.mjs +255 -0
- package/client/esm2020/lib/rest-headers.mjs +129 -0
- package/client/esm2020/lib/rest-request.mjs +311 -0
- package/client/esm2020/lib/rest.class.mjs +114 -0
- package/client/esm2020/lib/simple-resource.mjs +117 -0
- package/client/esm2020/ng2-rest.mjs +5 -0
- package/client/esm2020/public-api.mjs +2 -0
- package/client/fesm2015/ng2-rest.mjs +1755 -0
- package/client/fesm2015/ng2-rest.mjs.map +1 -0
- package/client/fesm2020/ng2-rest.mjs +1752 -0
- package/client/fesm2020/ng2-rest.mjs.map +1 -0
- package/client/{cookie.d.ts → lib/cookie.d.ts} +0 -0
- package/client/{helpers.d.ts → lib/helpers.d.ts} +0 -0
- package/client/{index.d.ts → lib/index.d.ts} +0 -0
- package/client/{mapping.d.ts → lib/mapping.d.ts} +0 -0
- package/{browser → client/lib}/models.d.ts +2 -3
- package/client/{params.d.ts → lib/params.d.ts} +0 -0
- package/client/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
- package/client/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
- package/client/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
- package/client/{rest-request.d.ts → lib/rest-request.d.ts} +0 -3
- package/client/{rest.class.d.ts → lib/rest.class.d.ts} +0 -1
- package/{simple-resource.d.ts → client/lib/simple-resource.d.ts} +1 -5
- package/client/ng2-rest.d.ts +5 -0
- package/client/package.json +25 -31
- package/client/public-api.d.ts +1 -0
- package/index.d.ts +1 -9
- package/index.js +3 -13
- package/index.js.map +1 -1
- package/{cookie.d.ts → lib/cookie.d.ts} +0 -0
- package/{cookie.js → lib/cookie.js} +2 -1
- package/lib/cookie.js.map +1 -0
- package/{helpers.d.ts → lib/helpers.d.ts} +0 -0
- package/{helpers.js → lib/helpers.js} +3 -2
- package/lib/helpers.js.map +1 -0
- package/{browser/index.js → lib/index.d.ts} +0 -1
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -0
- package/{mapping.d.ts → lib/mapping.d.ts} +0 -0
- package/{mapping.js → lib/mapping.js} +5 -4
- package/lib/mapping.js.map +1 -0
- package/{models.d.ts → lib/models.d.ts} +2 -3
- package/{models.js → lib/models.js} +6 -6
- package/lib/models.js.map +1 -0
- package/{params.d.ts → lib/params.d.ts} +0 -0
- package/{params.js → lib/params.js} +17 -16
- package/lib/params.js.map +1 -0
- package/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
- package/{request-cache.js → lib/request-cache.js} +2 -1
- package/lib/request-cache.js.map +1 -0
- package/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
- package/{resource.service.js → lib/resource.service.js} +33 -26
- package/lib/resource.service.js.map +1 -0
- package/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
- package/{rest-headers.js → lib/rest-headers.js} +2 -1
- package/lib/rest-headers.js.map +1 -0
- package/{browser → lib}/rest-request.d.ts +0 -3
- package/{rest-request.js → lib/rest-request.js} +19 -19
- package/lib/rest-request.js.map +1 -0
- package/{browser → lib}/rest.class.d.ts +0 -1
- package/{rest.class.js → lib/rest.class.js} +4 -5
- package/lib/rest.class.js.map +1 -0
- package/{client → lib}/simple-resource.d.ts +1 -5
- package/{simple-resource.js → lib/simple-resource.js} +11 -14
- package/lib/simple-resource.js.map +1 -0
- package/package.json +10 -10
- package/package.json_tnp.json +2 -1
- package/package.json_tnp.json5 +39 -0
- package/tmp-environment.json +84 -120
- package/browser/app.d.ts +0 -0
- package/browser/app.js +0 -31
- package/browser/app.js.map +0 -1
- package/browser/cookie.js +0 -27
- package/browser/cookie.js.map +0 -1
- package/browser/es5/app.js +0 -32
- package/browser/es5/cookie.js +0 -50
- package/browser/es5/helpers.js +0 -58
- package/browser/es5/index.js +0 -107
- package/browser/es5/mapping.js +0 -287
- package/browser/es5/models.js +0 -249
- package/browser/es5/params.js +0 -310
- package/browser/es5/request-cache.js +0 -133
- package/browser/es5/resource.service.js +0 -288
- package/browser/es5/rest-headers.js +0 -200
- package/browser/es5/rest-request.js +0 -423
- package/browser/es5/rest.class.js +0 -191
- package/browser/es5/simple-resource.js +0 -175
- package/browser/helpers.js +0 -22
- package/browser/helpers.js.map +0 -1
- package/browser/index.js.map +0 -1
- package/browser/mapping.js +0 -271
- package/browser/mapping.js.map +0 -1
- package/browser/models.js +0 -136
- package/browser/models.js.map +0 -1
- package/browser/params.js +0 -305
- package/browser/params.js.map +0 -1
- package/browser/request-cache.js +0 -95
- package/browser/request-cache.js.map +0 -1
- package/browser/resource.service.js +0 -249
- package/browser/resource.service.js.map +0 -1
- package/browser/rest-headers.js +0 -129
- package/browser/rest-headers.js.map +0 -1
- package/browser/rest-request.js +0 -316
- package/browser/rest-request.js.map +0 -1
- package/browser/rest.class.js +0 -116
- package/browser/rest.class.js.map +0 -1
- package/browser/simple-resource.js +0 -121
- package/browser/simple-resource.js.map +0 -1
- package/client/app.d.ts +0 -0
- package/client/app.js +0 -31
- package/client/app.js.map +0 -1
- package/client/cookie.js +0 -27
- package/client/cookie.js.map +0 -1
- package/client/es5/app.js +0 -32
- package/client/es5/cookie.js +0 -50
- package/client/es5/helpers.js +0 -58
- package/client/es5/index.js +0 -107
- package/client/es5/mapping.js +0 -287
- package/client/es5/models.js +0 -249
- package/client/es5/params.js +0 -310
- package/client/es5/request-cache.js +0 -133
- package/client/es5/resource.service.js +0 -288
- package/client/es5/rest-headers.js +0 -200
- package/client/es5/rest-request.js +0 -423
- package/client/es5/rest.class.js +0 -191
- package/client/es5/simple-resource.js +0 -175
- package/client/helpers.js +0 -22
- package/client/helpers.js.map +0 -1
- package/client/index.js +0 -10
- package/client/index.js.map +0 -1
- package/client/mapping.js +0 -271
- package/client/mapping.js.map +0 -1
- package/client/models.js +0 -136
- package/client/models.js.map +0 -1
- package/client/params.js +0 -305
- package/client/params.js.map +0 -1
- package/client/request-cache.js +0 -95
- package/client/request-cache.js.map +0 -1
- package/client/resource.service.js +0 -249
- package/client/resource.service.js.map +0 -1
- package/client/rest-headers.js +0 -129
- package/client/rest-headers.js.map +0 -1
- package/client/rest-request.js +0 -316
- package/client/rest-request.js.map +0 -1
- package/client/rest.class.js +0 -116
- package/client/rest.class.js.map +0 -1
- package/client/simple-resource.js +0 -121
- package/client/simple-resource.js.map +0 -1
- package/cookie.js.map +0 -1
- package/helpers.js.map +0 -1
- package/mapping.js.map +0 -1
- package/models.js.map +0 -1
- package/params.js.map +0 -1
- package/request-cache.js.map +0 -1
- package/resource.service.js.map +0 -1
- package/rest-headers.js.map +0 -1
- package/rest-request.js.map +0 -1
- package/rest.class.js.map +0 -1
- package/simple-resource.js.map +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { firstValueFrom } 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 { isUndefined } from 'util';
|
|
12
|
+
import { RequestCache } from './request-cache';
|
|
13
|
+
const log = Log.create('[ng2-rest] rest-request', Level.__NOTHING);
|
|
14
|
+
const jobIDkey = 'jobID';
|
|
15
|
+
//#region mock request
|
|
16
|
+
//#endregion
|
|
17
|
+
export class RestRequest {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.subjectInuUse = {};
|
|
20
|
+
this.meta = {};
|
|
21
|
+
//#endregion
|
|
22
|
+
this.replaySubjects = {};
|
|
23
|
+
}
|
|
24
|
+
handlerResult(options, sourceRequest) {
|
|
25
|
+
if (isUndefined(options)) {
|
|
26
|
+
options = {};
|
|
27
|
+
}
|
|
28
|
+
// log.d(`HANDLE RESULT (jobid:${options.jobid}) ${sourceRequest.url}`);
|
|
29
|
+
const { res, jobid, isArray, method } = options;
|
|
30
|
+
// if (this.endedJobs[jobid]) {
|
|
31
|
+
// debugger
|
|
32
|
+
// }
|
|
33
|
+
// this.endedJobs[jobid] = true;
|
|
34
|
+
// log.i(`handle jobid ${jobid}`)
|
|
35
|
+
if (typeof res !== 'object') {
|
|
36
|
+
throw new Error('No resposnse for request. ');
|
|
37
|
+
}
|
|
38
|
+
if (Helpers.isBrowser) {
|
|
39
|
+
res.headers = RestHeaders.from(res.headers);
|
|
40
|
+
}
|
|
41
|
+
// error no internet
|
|
42
|
+
if (res.error) {
|
|
43
|
+
this.subjectInuUse[jobid].error(new Models.HttpResponseError(res.error, res.data, res.headers, res.code, jobid));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const entity = this.meta[jobid].entity;
|
|
47
|
+
const circular = this.meta[jobid].circular;
|
|
48
|
+
this.subjectInuUse[jobid].next(new Models.HttpResponse(sourceRequest, res.data, res.headers, res.code, entity, circular, jobid, isArray));
|
|
49
|
+
this.meta[jobid] = void 0;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
checkCache(sourceRequest, jobid) {
|
|
53
|
+
const existedInCache = RequestCache.findBy(sourceRequest);
|
|
54
|
+
if (existedInCache) {
|
|
55
|
+
log.i('cache exists', existedInCache);
|
|
56
|
+
this.subjectInuUse[jobid].next(existedInCache);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// log.i(`cache not exists for jobid ${jobid}`)
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
async req(url, method, headers, body, jobid, isArray = false, mockHttp) {
|
|
63
|
+
if (this.checkCache({
|
|
64
|
+
url,
|
|
65
|
+
body,
|
|
66
|
+
isArray,
|
|
67
|
+
method
|
|
68
|
+
}, jobid)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
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
|
+
try {
|
|
94
|
+
if (!response) {
|
|
95
|
+
log.d(`[${method}] (jobid=${jobid}) request to: ${url}`);
|
|
96
|
+
response = await axios({
|
|
97
|
+
url,
|
|
98
|
+
method,
|
|
99
|
+
data: body,
|
|
100
|
+
responseType: 'text',
|
|
101
|
+
headers: headers.toJSON()
|
|
102
|
+
});
|
|
103
|
+
// log.d(`after response of jobid: ${jobid}`);
|
|
104
|
+
}
|
|
105
|
+
this.handlerResult({
|
|
106
|
+
res: {
|
|
107
|
+
code: response.status,
|
|
108
|
+
data: JSON.stringify(response.data),
|
|
109
|
+
isArray,
|
|
110
|
+
jobid,
|
|
111
|
+
headers: RestHeaders.from(response.headers)
|
|
112
|
+
},
|
|
113
|
+
method,
|
|
114
|
+
jobid,
|
|
115
|
+
isArray
|
|
116
|
+
}, {
|
|
117
|
+
url,
|
|
118
|
+
body,
|
|
119
|
+
method,
|
|
120
|
+
isArray,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (catchedError) {
|
|
124
|
+
// console.log('ERROR RESPONESE catchedError typeof ', typeof catchedError)
|
|
125
|
+
// console.log('ERROR RESPONESE catchedError', catchedError)
|
|
126
|
+
if (typeof catchedError === 'object' && catchedError.response && catchedError.response.data) {
|
|
127
|
+
const err = catchedError.response.data;
|
|
128
|
+
const msg = catchedError.response.data.message || '';
|
|
129
|
+
let stack = (err.stack || '').split('\n');
|
|
130
|
+
Resource['_listenErrors'].next({
|
|
131
|
+
msg,
|
|
132
|
+
stack,
|
|
133
|
+
data: catchedError.response.data
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const error = (catchedError && catchedError.response) ? `[${catchedError.response.statusText}]: ` : '';
|
|
137
|
+
this.handlerResult({
|
|
138
|
+
res: {
|
|
139
|
+
code: (catchedError && catchedError.response) ? catchedError.response.status : void 0,
|
|
140
|
+
error: `${error}${catchedError.message}`,
|
|
141
|
+
data: (catchedError && catchedError.response) ? JSON.stringify(catchedError.response.data) : void 0,
|
|
142
|
+
isArray,
|
|
143
|
+
jobid,
|
|
144
|
+
headers: RestHeaders.from(catchedError && catchedError.response && catchedError.response.headers)
|
|
145
|
+
},
|
|
146
|
+
method,
|
|
147
|
+
jobid,
|
|
148
|
+
isArray
|
|
149
|
+
}, {
|
|
150
|
+
url,
|
|
151
|
+
body,
|
|
152
|
+
isArray,
|
|
153
|
+
method
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
getReplay(method, meta, onlyGetLastReplayForMethod) {
|
|
158
|
+
let replay;
|
|
159
|
+
//#region prevent empty tree
|
|
160
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint])) {
|
|
161
|
+
// log.i(`(${meta.endpoint}) `);
|
|
162
|
+
this.replaySubjects[meta.endpoint] = {};
|
|
163
|
+
}
|
|
164
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path])) {
|
|
165
|
+
// log.i(`(${meta.endpoint})(${meta.path}) `);
|
|
166
|
+
this.replaySubjects[meta.endpoint][meta.path] = {};
|
|
167
|
+
}
|
|
168
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path][method])) {
|
|
169
|
+
// log.i(`(${meta.endpoint})(${meta.path}) `);
|
|
170
|
+
this.replaySubjects[meta.endpoint][meta.path][method] = {};
|
|
171
|
+
}
|
|
172
|
+
//#endregion
|
|
173
|
+
const objectIDToCreateOrLast = (Object.keys(this.replaySubjects[meta.endpoint][meta.path][method]).length) +
|
|
174
|
+
(onlyGetLastReplayForMethod ? 0 : 1);
|
|
175
|
+
if (onlyGetLastReplayForMethod && (objectIDToCreateOrLast === 0)) {
|
|
176
|
+
return replay;
|
|
177
|
+
}
|
|
178
|
+
if (_.isUndefined(this.replaySubjects[meta.endpoint][meta.path][method][objectIDToCreateOrLast])) {
|
|
179
|
+
// log.i(`(${meta.endpoint})(${meta.path})(${method}) `);
|
|
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
|
+
const jobid = RestRequest.jobId++;
|
|
188
|
+
replay.id = jobid;
|
|
189
|
+
const subject = replay.subject;
|
|
190
|
+
subject[jobIDkey] = jobid; // modify internal rxjs subject obj
|
|
191
|
+
this.meta[jobid] = meta;
|
|
192
|
+
this.subjectInuUse[jobid] = subject;
|
|
193
|
+
//#region DISPOSE @UNCOMMENT AFTER TESTS
|
|
194
|
+
// if (objectIDToCreateOrLast > 2) {
|
|
195
|
+
// const oldReq: Models.ReplayData = this.replaySubjects[meta.endpoint][meta.path][method][(objectIDToCreateOrLast - 2)];
|
|
196
|
+
// if (_.isUndefined(this.meta[oldReq.id])) {
|
|
197
|
+
// // cant delete this - for counter purpose
|
|
198
|
+
// this.replaySubjects[meta.endpoint][meta.path][method][(objectIDToCreateOrLast - 2)] = {};
|
|
199
|
+
// delete this.subjectInuUse[oldReq.id];
|
|
200
|
+
// delete this.meta[oldReq.id];
|
|
201
|
+
// }
|
|
202
|
+
// }
|
|
203
|
+
//#endregion
|
|
204
|
+
}
|
|
205
|
+
return replay;
|
|
206
|
+
}
|
|
207
|
+
//#region http methods
|
|
208
|
+
generalReq(method, url, body, headers, meta, isArray, mockHttp) {
|
|
209
|
+
const replay = this.getReplay(method, meta, false);
|
|
210
|
+
replay.data = { url, body, headers, isArray };
|
|
211
|
+
((pthis, purl, pmethod, pheaders, pbody, pid, pisArray, pmockHttp) => {
|
|
212
|
+
// log.d(`for ${purl} jobid ${pid}`);
|
|
213
|
+
setTimeout(() => pthis.req(purl, pmethod, pheaders, pbody, pid, pisArray, pmockHttp));
|
|
214
|
+
})(this, url, method, headers, body, replay.id, isArray, mockHttp);
|
|
215
|
+
const resp = firstValueFrom(replay.subject.asObservable());
|
|
216
|
+
resp.observable = replay.subject.asObservable();
|
|
217
|
+
resp.cache = RequestCache.findBy({
|
|
218
|
+
body,
|
|
219
|
+
isArray,
|
|
220
|
+
method,
|
|
221
|
+
url
|
|
222
|
+
});
|
|
223
|
+
return resp;
|
|
224
|
+
}
|
|
225
|
+
get(url, body, headers, meta, isArray, mockHttp) {
|
|
226
|
+
return this.generalReq('get', url, body, headers, meta, isArray, mockHttp);
|
|
227
|
+
}
|
|
228
|
+
head(url, body, headers, meta, isArray, mockHttp) {
|
|
229
|
+
return this.generalReq('head', url, body, headers, meta, isArray, mockHttp);
|
|
230
|
+
}
|
|
231
|
+
delete(url, body, headers, meta, isArray, mockHttp) {
|
|
232
|
+
return this.generalReq('delete', url, body, headers, meta, isArray, mockHttp);
|
|
233
|
+
}
|
|
234
|
+
post(url, body, headers, meta, isArray, mockHttp) {
|
|
235
|
+
return this.generalReq('post', url, body, headers, meta, isArray, mockHttp);
|
|
236
|
+
}
|
|
237
|
+
put(url, body, headers, meta, isArray, mockHttp) {
|
|
238
|
+
return this.generalReq('put', url, body, headers, meta, isArray, mockHttp);
|
|
239
|
+
}
|
|
240
|
+
patch(url, body, headers, meta, isArray, mockHttp) {
|
|
241
|
+
return this.generalReq('patch', url, body, headers, meta, isArray, mockHttp);
|
|
242
|
+
}
|
|
243
|
+
jsonp(url, body, headers, meta, isArray, mockHttp) {
|
|
244
|
+
const replay = this.getReplay('jsonp', meta, false);
|
|
245
|
+
const jobid = replay.id;
|
|
246
|
+
const method = 'jsonp';
|
|
247
|
+
setTimeout(() => {
|
|
248
|
+
if (url.endsWith('/'))
|
|
249
|
+
url = url.slice(0, url.length - 1);
|
|
250
|
+
let num = Math.round(10000 * Math.random());
|
|
251
|
+
let callbackMethodName = "cb_" + num;
|
|
252
|
+
window[callbackMethodName] = (data) => {
|
|
253
|
+
if (this.checkCache({
|
|
254
|
+
url,
|
|
255
|
+
body,
|
|
256
|
+
isArray,
|
|
257
|
+
method
|
|
258
|
+
}, jobid)) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
this.handlerResult({
|
|
262
|
+
res: {
|
|
263
|
+
data, isArray
|
|
264
|
+
},
|
|
265
|
+
method,
|
|
266
|
+
jobid,
|
|
267
|
+
isArray
|
|
268
|
+
}, {
|
|
269
|
+
url,
|
|
270
|
+
body,
|
|
271
|
+
isArray,
|
|
272
|
+
method,
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
let sc = document.createElement('script');
|
|
276
|
+
sc.src = `${url}?callback=${callbackMethodName}`;
|
|
277
|
+
document.body.appendChild(sc);
|
|
278
|
+
document.body.removeChild(sc);
|
|
279
|
+
});
|
|
280
|
+
// return replay.subject.asObservable();
|
|
281
|
+
const resp = firstValueFrom(replay.subject.asObservable());
|
|
282
|
+
resp.observable = replay.subject.asObservable();
|
|
283
|
+
resp.cache = RequestCache.findBy({
|
|
284
|
+
body,
|
|
285
|
+
isArray,
|
|
286
|
+
method,
|
|
287
|
+
url
|
|
288
|
+
});
|
|
289
|
+
return resp;
|
|
290
|
+
}
|
|
291
|
+
replay(method, meta) {
|
|
292
|
+
const replay = this.getReplay(method, meta, true);
|
|
293
|
+
if (!replay || !replay.data) {
|
|
294
|
+
console.warn(`Canno replay first ${method} request from ${meta.endpoint}/${meta.path}`);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
;
|
|
298
|
+
if (replay && replay.subject && Array.isArray(replay.subject.observers) &&
|
|
299
|
+
replay.subject.observers.length === 0) {
|
|
300
|
+
console.warn(`No observators for ${method} request from ${meta.endpoint}/${meta.path}`);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const url = replay.data.url;
|
|
304
|
+
const headers = replay.data.headers;
|
|
305
|
+
const body = replay.data.body;
|
|
306
|
+
const isArray = replay.data.isArray;
|
|
307
|
+
setTimeout(() => this.req(url, method, headers, body, replay.id, isArray));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
RestRequest.jobId = 0;
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL3Jlc3QtcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBVSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEVBQzVDLEtBQUssQ0FBQyxTQUFTLENBQ2xCLENBQUE7QUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFJekIsc0JBQXNCO0FBQ3RCLFlBQVk7QUFJWixNQUFNLE9BQU8sV0FBVztJQUF4QjtRQUlVLGtCQUFhLEdBQW1DLEVBQUUsQ0FBQztRQUNuRCxTQUFJLEdBQXlDLEVBQUUsQ0FBQztRQTRXeEQsWUFBWTtRQUNK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QUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7O0FBaFljLGlCQUFLLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmRlY2xhcmUgdmFyIHJlcXVpcmU6IGFueTtcblxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBSZXN0SGVhZGVycyB9IGZyb20gJy4vcmVzdC1oZWFkZXJzJztcblxuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMb2csIExvZ2dlciB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgUmVxdWVzdENhY2hlIH0gZnJvbSAnLi9yZXF1ZXN0LWNhY2hlJztcbmNvbnN0IGxvZyA9IExvZy5jcmVhdGUoJ1tuZzItcmVzdF0gcmVzdC1yZXF1ZXN0J1xuICAsIExldmVsLl9fTk9USElOR1xuKVxuXG5jb25zdCBqb2JJRGtleSA9ICdqb2JJRCc7XG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogYW55O1xuXG5cbi8vI3JlZ2lvbiBtb2NrIHJlcXVlc3Rcbi8vI2VuZHJlZ2lvblxuXG5cblxuZXhwb3J0IGNsYXNzIFJlc3RSZXF1ZXN0IHtcblxuICBwdWJsaWMgc3RhdGljIHpvbmU7XG4gIHByaXZhdGUgc3RhdGljIGpvYklkID0gMDtcbiAgcHJpdmF0ZSBzdWJqZWN0SW51VXNlOiB7IFtpZDogbnVtYmVyXTogU3ViamVjdDxhbnk+IH0gPSB7fTtcbiAgcHJpdmF0ZSBtZXRhOiB7IFtpZDogbnVtYmVyXTogTW9kZWxzLk1ldGFSZXF1ZXN0IH0gPSB7fTtcblxuXG4gIHByaXZhdGUgaGFuZGxlclJlc3VsdChvcHRpb25zOiBNb2RlbHMuSGFuZGxlUmVzdWx0T3B0aW9ucyxcbiAgICBzb3VyY2VSZXF1ZXN0OiBNb2RlbHMuSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMpIHtcbiAgICBpZiAoaXNVbmRlZmluZWQob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMgPSB7fSBhcyBhbnk7XG4gICAgfVxuICAgIC8vIGxvZy5kKGBIQU5ETEUgUkVTVUxUIChqb2JpZDoke29wdGlvbnMuam9iaWR9KSAke3NvdXJjZVJlcXVlc3QudXJsfWApO1xuICAgIGNvbnN0IHsgcmVzLCBqb2JpZCwgaXNBcnJheSwgbWV0aG9kIH0gPSBvcHRpb25zO1xuICAgIC8vIGlmICh0aGlzLmVuZGVkSm9ic1tqb2JpZF0pIHtcbiAgICAvLyAgIGRlYnVnZ2VyXG4gICAgLy8gfVxuICAgIC8vIHRoaXMuZW5kZWRKb2JzW2pvYmlkXSA9IHRydWU7XG4gICAgLy8gbG9nLmkoYGhhbmRsZSBqb2JpZCAke2pvYmlkfWApXG4gICAgaWYgKHR5cGVvZiByZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3Bvc25zZSBmb3IgcmVxdWVzdC4gJyk7XG4gICAgfVxuXG4gICAgaWYgKEhlbHBlcnMuaXNCcm93c2VyKSB7XG4gICAgICByZXMuaGVhZGVycyA9IFJlc3RIZWFkZXJzLmZyb20ocmVzLmhlYWRlcnMpO1xuICAgIH1cblxuICAgIC8vIGVycm9yIG5vIGludGVybmV0XG4gICAgaWYgKHJlcy5lcnJvcikge1xuICAgICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXS5lcnJvcihuZXcgTW9kZWxzLkh0dHBSZXNwb25zZUVycm9yKHJlcy5lcnJvciwgcmVzLmRhdGEsIHJlcy5oZWFkZXJzLCByZXMuY29kZSwgam9iaWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5tZXRhW2pvYmlkXS5lbnRpdHk7XG4gICAgY29uc3QgY2lyY3VsYXIgPSB0aGlzLm1ldGFbam9iaWRdLmNpcmN1bGFyO1xuXG4gICAgdGhpcy5zdWJqZWN0SW51VXNlW2pvYmlkXS5uZXh0KFxuICAgICAgbmV3IE1vZGVscy5IdHRwUmVzcG9uc2Uoc291cmNlUmVxdWVzdCwgcmVzLmRhdGEsIHJlcy5oZWFkZXJzLCByZXMuY29kZSwgZW50aXR5LCBjaXJjdWxhciwgam9iaWQsIGlzQXJyYXkpXG4gICAgKTtcbiAgICB0aGlzLm1ldGFbam9iaWRdID0gdm9pZCAwO1xuICAgIHJldHVybjtcbiAgfVxuICBjaGVja0NhY2hlKHNvdXJjZVJlcXVlc3Q6IE1vZGVscy5IYW5kbGVSZXN1bHRTb3VyY2VSZXF1ZXN0T3B0aW9ucywgam9iaWQ6IG51bWJlcikge1xuICAgIGNvbnN0IGV4aXN0ZWRJbkNhY2hlID0gUmVxdWVzdENhY2hlLmZpbmRCeShzb3VyY2VSZXF1ZXN0KTtcbiAgICBpZiAoZXhpc3RlZEluQ2FjaGUpIHtcbiAgICAgIGxvZy5pKCdjYWNoZSBleGlzdHMnLCBleGlzdGVkSW5DYWNoZSlcbiAgICAgIHRoaXMuc3ViamVjdEludVVzZVtqb2JpZF0ubmV4dChleGlzdGVkSW5DYWNoZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gbG9nLmkoYGNhY2hlIG5vdCBleGlzdHMgZm9yIGpvYmlkICR7am9iaWR9YClcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLFxuICAgIGhlYWRlcnM/OiBSZXN0SGVhZGVycyxcbiAgICBib2R5PzogYW55LFxuICAgIGpvYmlkPzogbnVtYmVyLFxuICAgIGlzQXJyYXkgPSBmYWxzZSxcbiAgICBtb2NrSHR0cD86IE1vZGVscy5Nb2NrSHR0cFxuICApIHtcbiAgICBpZiAodGhpcy5jaGVja0NhY2hlKHtcbiAgICAgIHVybCxcbiAgICAgIGJvZHksXG4gICAgICBpc0FycmF5LFxuICAgICAgbWV0aG9kXG4gICAgfSwgam9iaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlPGFueT47XG4gICAgaWYgKG1vY2tIdHRwKSB7XG5cbiAgICAgIGlmICh0eXBlb2YgbW9ja0h0dHAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRhdGE6IG1vY2tIdHRwLmRhdGEsXG4gICAgICAgICAgc3RhdHVzOiBtb2NrSHR0cC5jb2RlLFxuICAgICAgICAgIGhlYWRlcnM6IG1vY2tIdHRwLmhlYWRlcnMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogbW9ja0h0dHAuZXJyb3IsXG4gICAgICAgICAgY29uZmlnOiB7fVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2NrSHR0cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCByID0gbW9ja0h0dHAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICBkYXRhOiByLmRhdGEsXG4gICAgICAgICAgc3RhdHVzOiByLmNvZGUsXG4gICAgICAgICAgaGVhZGVyczogci5oZWFkZXJzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHIuZXJyb3IsXG4gICAgICAgICAgY29uZmlnOiB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgbG9nLmQoYFske21ldGhvZH1dIChqb2JpZD0ke2pvYmlkfSkgcmVxdWVzdCB0bzogICR7dXJsfWApXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLnRvSlNPTigpXG4gICAgICAgIH0pXG4gICAgICAgIC8vIGxvZy5kKGBhZnRlciByZXNwb25zZSBvZiBqb2JpZDogJHtqb2JpZH1gKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVyUmVzdWx0KHtcbiAgICAgICAgcmVzOiB7XG4gICAgICAgICAgY29kZTogcmVzcG9uc2Uuc3RhdHVzIGFzIGFueSxcbiAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSxcbiAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgIGpvYmlkLFxuICAgICAgICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycylcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBqb2JpZCxcbiAgICAgICAgaXNBcnJheVxuICAgICAgfSwge1xuICAgICAgICB1cmwsXG4gICAgICAgIGJvZHksXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdGNoZWRFcnJvcikge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VSUk9SIFJFU1BPTkVTRSBjYXRjaGVkRXJyb3IgdHlwZW9mICcsIHR5cGVvZiBjYXRjaGVkRXJyb3IpXG4gICAgICAvLyBjb25zb2xlLmxvZygnRVJST1IgUkVTUE9ORVNFIGNhdGNoZWRFcnJvcicsIGNhdGNoZWRFcnJvcilcbiAgICAgIGlmICh0eXBlb2YgY2F0Y2hlZEVycm9yID09PSAnb2JqZWN0JyAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgY29uc3QgZXJyID0gY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnN0IG1zZzogc3RyaW5nID0gY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSB8fCAnJztcbiAgICAgICAgbGV0IHN0YWNrOiBzdHJpbmdbXSA9IChlcnIuc3RhY2sgfHwgJycpLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAoUmVzb3VyY2VbJ19saXN0ZW5FcnJvcnMnXSBhcyBTdWJqZWN0PE1vZGVscy5CYWNrZW5kRXJyb3I+KS5uZXh0KHtcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgZGF0YTogY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yID0gKGNhdGNoZWRFcnJvciAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UpID8gYFske2NhdGNoZWRFcnJvci5yZXNwb25zZS5zdGF0dXNUZXh0fV06IGAgOiAnJztcbiAgICAgIHRoaXMuaGFuZGxlclJlc3VsdCh7XG4gICAgICAgIHJlczoge1xuICAgICAgICAgIGNvZGU6IChjYXRjaGVkRXJyb3IgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlKSA/IGNhdGNoZWRFcnJvci5yZXNwb25zZS5zdGF0dXMgYXMgYW55IDogdm9pZCAwLFxuICAgICAgICAgIGVycm9yOiBgJHtlcnJvcn0ke2NhdGNoZWRFcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgZGF0YTogKGNhdGNoZWRFcnJvciAmJiBjYXRjaGVkRXJyb3IucmVzcG9uc2UpID8gSlNPTi5zdHJpbmdpZnkoY2F0Y2hlZEVycm9yLnJlc3BvbnNlLmRhdGEpIDogdm9pZCAwLFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgam9iaWQsXG4gICAgICAgICAgaGVhZGVyczogUmVzdEhlYWRlcnMuZnJvbShjYXRjaGVkRXJyb3IgJiYgY2F0Y2hlZEVycm9yLnJlc3BvbnNlICYmIGNhdGNoZWRFcnJvci5yZXNwb25zZS5oZWFkZXJzKVxuICAgICAgICB9LFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGpvYmlkLFxuICAgICAgICBpc0FycmF5XG4gICAgICB9LCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgYm9keSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgbWV0aG9kXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlcGxheShtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLCBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QsIG9ubHlHZXRMYXN0UmVwbGF5Rm9yTWV0aG9kOiBib29sZWFuKTogTW9kZWxzLlJlcGxheURhdGEge1xuICAgIGxldCByZXBsYXk6IE1vZGVscy5SZXBsYXlEYXRhO1xuXG4gICAgLy8jcmVnaW9uIHByZXZlbnQgZW1wdHkgdHJlZVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucmVwbGF5U3ViamVjdHNbbWV0YS5lbmRwb2ludF0pKSB7XG4gICAgICAvLyBsb2cuaShgKCR7bWV0YS5lbmRwb2ludH0pIGApO1xuICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XSA9IHt9O1xuICAgIH1cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF0pKSB7XG4gICAgICAvLyBsb2cuaShgKCR7bWV0YS5lbmRwb2ludH0pKCR7bWV0YS5wYXRofSkgYCk7XG4gICAgICB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF0gPSB7fTtcbiAgICB9XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF0pKSB7XG4gICAgICAvLyBsb2cuaShgKCR7bWV0YS5lbmRwb2ludH0pKCR7bWV0YS5wYXRofSkgYCk7XG4gICAgICB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF1bbWV0aG9kXSA9IHt9O1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIGNvbnN0IG9iamVjdElEVG9DcmVhdGVPckxhc3QgPSAoT2JqZWN0LmtleXModGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF0gYXMgT2JqZWN0KS5sZW5ndGgpICtcbiAgICAgIChvbmx5R2V0TGFzdFJlcGxheUZvck1ldGhvZCA/IDAgOiAxKTtcbiAgICBpZiAob25seUdldExhc3RSZXBsYXlGb3JNZXRob2QgJiYgKG9iamVjdElEVG9DcmVhdGVPckxhc3QgPT09IDApKSB7XG4gICAgICByZXR1cm4gcmVwbGF5O1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucmVwbGF5U3ViamVjdHNbbWV0YS5lbmRwb2ludF1bbWV0YS5wYXRoXVttZXRob2RdW29iamVjdElEVG9DcmVhdGVPckxhc3RdKSkge1xuICAgICAgLy8gbG9nLmkoYCgke21ldGEuZW5kcG9pbnR9KSgke21ldGEucGF0aH0pKCR7bWV0aG9kfSkgYCk7XG4gICAgICB0aGlzLnJlcGxheVN1YmplY3RzW21ldGEuZW5kcG9pbnRdW21ldGEucGF0aF1bbWV0aG9kXVtvYmplY3RJRFRvQ3JlYXRlT3JMYXN0XSA9IDxNb2RlbHMuUmVwbGF5RGF0YT57XG4gICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KCksXG4gICAgICAgIGRhdGE6IHZvaWQgMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmVwbGF5ID0gdGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF1bb2JqZWN0SURUb0NyZWF0ZU9yTGFzdF07XG5cbiAgICBpZiAoIV8uaXNOdW1iZXIocmVwbGF5LmlkKSkge1xuICAgICAgY29uc3Qgam9iaWQ6IG51bWJlciA9IFJlc3RSZXF1ZXN0LmpvYklkKys7XG4gICAgICByZXBsYXkuaWQgPSBqb2JpZDtcbiAgICAgIGNvbnN0IHN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IHJlcGxheS5zdWJqZWN0O1xuICAgICAgc3ViamVjdFtqb2JJRGtleV0gPSBqb2JpZDsgLy8gbW9kaWZ5IGludGVybmFsIHJ4anMgc3ViamVjdCBvYmpcblxuICAgICAgdGhpcy5tZXRhW2pvYmlkXSA9IG1ldGE7XG4gICAgICB0aGlzLnN1YmplY3RJbnVVc2Vbam9iaWRdID0gc3ViamVjdDtcblxuICAgICAgLy8jcmVnaW9uIERJU1BPU0UgIEBVTkNPTU1FTlQgQUZURVIgVEVTVFNcbiAgICAgIC8vIGlmIChvYmplY3RJRFRvQ3JlYXRlT3JMYXN0ID4gMikge1xuICAgICAgLy8gICBjb25zdCBvbGRSZXE6IE1vZGVscy5SZXBsYXlEYXRhID0gdGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF1bKG9iamVjdElEVG9DcmVhdGVPckxhc3QgLSAyKV07XG4gICAgICAvLyAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMubWV0YVtvbGRSZXEuaWRdKSkge1xuICAgICAgLy8gICAgIC8vIGNhbnQgZGVsZXRlIHRoaXMgLSBmb3IgY291bnRlciBwdXJwb3NlXG4gICAgICAvLyAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1ttZXRhLmVuZHBvaW50XVttZXRhLnBhdGhdW21ldGhvZF1bKG9iamVjdElEVG9DcmVhdGVPckxhc3QgLSAyKV0gPSB7fTtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5zdWJqZWN0SW51VXNlW29sZFJlcS5pZF07XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMubWV0YVtvbGRSZXEuaWRdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyNlbmRyZWdpb25cbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGF5O1xuICB9XG5cblxuICAvLyNyZWdpb24gaHR0cCBtZXRob2RzXG5cbiAgcHJpdmF0ZSBnZW5lcmFsUmVxKFxuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzLFxuICAgIG1ldGE6IE1vZGVscy5NZXRhUmVxdWVzdCxcbiAgICBpc0FycmF5OiBib29sZWFuLFxuICAgIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG5cbiAgICBjb25zdCByZXBsYXk6IE1vZGVscy5SZXBsYXlEYXRhID0gdGhpcy5nZXRSZXBsYXkobWV0aG9kLCBtZXRhLCBmYWxzZSk7XG4gICAgcmVwbGF5LmRhdGEgPSB7IHVybCwgYm9keSwgaGVhZGVycywgaXNBcnJheSB9O1xuXG4gICAgKChwdGhpcywgcHVybCwgcG1ldGhvZCwgcGhlYWRlcnMsIHBib2R5LCBwaWQsIHBpc0FycmF5LCBwbW9ja0h0dHApID0+IHtcbiAgICAgIC8vIGxvZy5kKGBmb3IgJHtwdXJsfSBqb2JpZCAke3BpZH1gKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcHRoaXMucmVxKHB1cmwsIHBtZXRob2QsIHBoZWFkZXJzLCBwYm9keSwgcGlkLCBwaXNBcnJheSwgcG1vY2tIdHRwKSk7XG4gICAgfSkodGhpcywgdXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHksIHJlcGxheS5pZCwgaXNBcnJheSwgbW9ja0h0dHApXG5cbiAgICBjb25zdCByZXNwOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiA9IGZpcnN0VmFsdWVGcm9tKHJlcGxheS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKSBhcyBhbnk7XG4gICAgcmVzcC5vYnNlcnZhYmxlID0gcmVwbGF5LnN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcmVzcC5jYWNoZSA9IFJlcXVlc3RDYWNoZS5maW5kQnkoe1xuICAgICAgYm9keSxcbiAgICAgIGlzQXJyYXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcDtcbiAgfVxuXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ2dldCcsIHVybCwgYm9keSwgaGVhZGVycywgbWV0YSwgaXNBcnJheSwgbW9ja0h0dHApO1xuICB9XG5cbiAgaGVhZChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ2hlYWQnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIGRlbGV0ZShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cCk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmFsUmVxKCdkZWxldGUnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzLFxuICAgIG1ldGE6IE1vZGVscy5NZXRhUmVxdWVzdCxcbiAgICBpc0FycmF5OiBib29sZWFuLFxuICAgIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHBcbiAgKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxSZXEoJ3Bvc3QnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIHB1dChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cFxuICApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFJlcSgncHV0JywgdXJsLCBib2R5LCBoZWFkZXJzLCBtZXRhLCBpc0FycmF5LCBtb2NrSHR0cCk7XG4gIH1cblxuICBwYXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnMsXG4gICAgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gICAgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cFxuICApOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFJlcSgncGF0Y2gnLCB1cmwsIGJvZHksIGhlYWRlcnMsIG1ldGEsIGlzQXJyYXksIG1vY2tIdHRwKTtcbiAgfVxuXG4gIGpzb25wKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBoZWFkZXJzOiBSZXN0SGVhZGVycyxcbiAgICBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QsXG4gICAgaXNBcnJheTogYm9vbGVhbixcbiAgICBtb2NrSHR0cDogTW9kZWxzLk1vY2tIdHRwXG4gICk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+IHtcblxuICAgIGNvbnN0IHJlcGxheTogTW9kZWxzLlJlcGxheURhdGEgPSB0aGlzLmdldFJlcGxheSgnanNvbnAnLCBtZXRhLCBmYWxzZSk7XG4gICAgY29uc3Qgam9iaWQgPSByZXBsYXkuaWQ7XG4gICAgY29uc3QgbWV0aG9kID0gJ2pzb25wJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB1cmwgPSB1cmwuc2xpY2UoMCwgdXJsLmxlbmd0aCAtIDEpXG4gICAgICBsZXQgbnVtID0gTWF0aC5yb3VuZCgxMDAwMCAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgbGV0IGNhbGxiYWNrTWV0aG9kTmFtZSA9IFwiY2JfXCIgKyBudW07XG4gICAgICB3aW5kb3dbY2FsbGJhY2tNZXRob2ROYW1lXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQ2FjaGUoe1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgbWV0aG9kXG4gICAgICAgIH0sIGpvYmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXJSZXN1bHQoe1xuICAgICAgICAgIHJlczoge1xuICAgICAgICAgICAgZGF0YSwgaXNBcnJheVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGpvYmlkLFxuICAgICAgICAgIGlzQXJyYXlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgbGV0IHNjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzYy5zcmMgPSBgJHt1cmx9P2NhbGxiYWNrPSR7Y2FsbGJhY2tNZXRob2ROYW1lfWA7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2MpO1xuICAgIH0pXG4gICAgLy8gcmV0dXJuIHJlcGxheS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIGNvbnN0IHJlc3A6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxhbnk+ID0gZmlyc3RWYWx1ZUZyb20ocmVwbGF5LnN1YmplY3QuYXNPYnNlcnZhYmxlKCkpIGFzIGFueTtcbiAgICByZXNwLm9ic2VydmFibGUgPSByZXBsYXkuc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICByZXNwLmNhY2hlID0gUmVxdWVzdENhY2hlLmZpbmRCeSh7XG4gICAgICBib2R5LFxuICAgICAgaXNBcnJheSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybFxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3A7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIHByaXZhdGUgcmVwbGF5U3ViamVjdHMgPSB7fTtcbiAgcHVibGljIHJlcGxheShtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLCBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QpIHtcbiAgICBjb25zdCByZXBsYXk6IE1vZGVscy5SZXBsYXlEYXRhID0gdGhpcy5nZXRSZXBsYXkobWV0aG9kLCBtZXRhLCB0cnVlKTtcbiAgICBpZiAoIXJlcGxheSB8fCAhcmVwbGF5LmRhdGEpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2Fubm8gcmVwbGF5IGZpcnN0ICR7bWV0aG9kfSByZXF1ZXN0IGZyb20gJHttZXRhLmVuZHBvaW50fS8ke21ldGEucGF0aH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIGlmIChyZXBsYXkgJiYgcmVwbGF5LnN1YmplY3QgJiYgQXJyYXkuaXNBcnJheShyZXBsYXkuc3ViamVjdC5vYnNlcnZlcnMpICYmXG4gICAgICByZXBsYXkuc3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIG9ic2VydmF0b3JzIGZvciAke21ldGhvZH0gcmVxdWVzdCBmcm9tICR7bWV0YS5lbmRwb2ludH0vJHttZXRhLnBhdGh9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IHJlcGxheS5kYXRhLnVybDtcbiAgICBjb25zdCBoZWFkZXJzID0gcmVwbGF5LmRhdGEuaGVhZGVycztcbiAgICBjb25zdCBib2R5ID0gcmVwbGF5LmRhdGEuYm9keTtcbiAgICBjb25zdCBpc0FycmF5ID0gcmVwbGF5LmRhdGEuaXNBcnJheTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVxKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCByZXBsYXkuaWQsIGlzQXJyYXkpKVxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { getRestParams, getParamsUrl } from './params';
|
|
2
|
+
import { RestHeaders } from './rest-headers';
|
|
3
|
+
//#endregion
|
|
4
|
+
export const DEFAULT_HEADERS = {
|
|
5
|
+
'Content-Type': 'application/json',
|
|
6
|
+
'Accept': 'application/json'
|
|
7
|
+
};
|
|
8
|
+
export class Rest {
|
|
9
|
+
constructor(endpoint, request, meta) {
|
|
10
|
+
this.request = request;
|
|
11
|
+
this.meta = meta;
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region constructor
|
|
14
|
+
this._headers = RestHeaders.from(DEFAULT_HEADERS);
|
|
15
|
+
//#endregion
|
|
16
|
+
this.array = {
|
|
17
|
+
get: (params = void 0, doNotSerializeParams) => {
|
|
18
|
+
return this.req('get', void 0, params, doNotSerializeParams, true);
|
|
19
|
+
},
|
|
20
|
+
head: (params = void 0, doNotSerializeParams) => {
|
|
21
|
+
return this.req('head', void 0, params, doNotSerializeParams, true);
|
|
22
|
+
},
|
|
23
|
+
post: (item, params, doNotSerializeParams) => {
|
|
24
|
+
return this.req('post', item, params, doNotSerializeParams, true);
|
|
25
|
+
},
|
|
26
|
+
put: (item, params, doNotSerializeParams) => {
|
|
27
|
+
return this.req('put', item, params, doNotSerializeParams, true);
|
|
28
|
+
},
|
|
29
|
+
patch: (item, params, doNotSerializeParams) => {
|
|
30
|
+
return this.req('patch', item, params, doNotSerializeParams, true);
|
|
31
|
+
},
|
|
32
|
+
delete: (params, doNotSerializeParams) => {
|
|
33
|
+
return this.req('delete', void 0, params, doNotSerializeParams, true);
|
|
34
|
+
},
|
|
35
|
+
jsonp: (params, doNotSerializeParams) => {
|
|
36
|
+
return this.req('jsonp', void 0, params, doNotSerializeParams, true);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
this.__meta_endpoint = endpoint;
|
|
40
|
+
}
|
|
41
|
+
mock(mock) {
|
|
42
|
+
if ((typeof mock === 'function') || (typeof mock === 'object')) {
|
|
43
|
+
this.mockHttp = mock;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw `[ng2-rest]
|
|
47
|
+
.model(...)
|
|
48
|
+
.mock( < BAD MOCK DATA > )
|
|
49
|
+
...
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
get endpoint() {
|
|
55
|
+
let e = this.__meta_endpoint;
|
|
56
|
+
if (this.restQueryParams !== void 0 && this._endpointRest !== void 0
|
|
57
|
+
&& typeof this._endpointRest === 'string' && this._endpointRest.trim() !== '')
|
|
58
|
+
e = this._endpointRest;
|
|
59
|
+
return e;
|
|
60
|
+
}
|
|
61
|
+
set __rest_endpoint(endpoint) {
|
|
62
|
+
this._endpointRest = endpoint;
|
|
63
|
+
if (endpoint === void 0) {
|
|
64
|
+
this.restQueryParams = void 0;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.restQueryParams = getRestParams(endpoint, this.__meta_endpoint);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
creatUrl(params, doNotSerializeParams = false) {
|
|
71
|
+
return `${this.endpoint}${getParamsUrl(params, doNotSerializeParams)}`;
|
|
72
|
+
}
|
|
73
|
+
get headers() {
|
|
74
|
+
return this._headers;
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region req
|
|
78
|
+
req(method, item, params, doNotSerializeParams = false, isArray = false) {
|
|
79
|
+
const modelUrl = this.creatUrl(params, doNotSerializeParams);
|
|
80
|
+
const body = item ? JSON.stringify(item) : void 0;
|
|
81
|
+
const result = this.request[method.toLowerCase()](modelUrl, body, this.headers, this.meta, isArray, this.mockHttp);
|
|
82
|
+
this._headers = RestHeaders.from(DEFAULT_HEADERS);
|
|
83
|
+
this.mockHttp = void 0;
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region http methods
|
|
88
|
+
//#region replay
|
|
89
|
+
replay(method) {
|
|
90
|
+
this.request.replay(method, this.meta);
|
|
91
|
+
}
|
|
92
|
+
get(params, doNotSerializeParams = false) {
|
|
93
|
+
return this.req('get', void 0, params, doNotSerializeParams);
|
|
94
|
+
}
|
|
95
|
+
head(params, doNotSerializeParams = false) {
|
|
96
|
+
return this.req('head', void 0, params, doNotSerializeParams);
|
|
97
|
+
}
|
|
98
|
+
post(item, params, doNotSerializeParams = false) {
|
|
99
|
+
return this.req('post', item, params, doNotSerializeParams);
|
|
100
|
+
}
|
|
101
|
+
put(item, params, doNotSerializeParams = false) {
|
|
102
|
+
return this.req('put', item, params, doNotSerializeParams);
|
|
103
|
+
}
|
|
104
|
+
patch(item, params, doNotSerializeParams = false) {
|
|
105
|
+
return this.req('patch', item, params, doNotSerializeParams);
|
|
106
|
+
}
|
|
107
|
+
delete(params, doNotSerializeParams = false) {
|
|
108
|
+
return this.req('delete', void 0, params, doNotSerializeParams);
|
|
109
|
+
}
|
|
110
|
+
jsonp(params, doNotSerializeParams = false) {
|
|
111
|
+
return this.req('jsonp', void 0, params, doNotSerializeParams);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9yZXN0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxZQUFZO0FBRVosTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsUUFBUSxFQUFFLGtCQUFrQjtDQUM3QixDQUFDO0FBRUYsTUFBTSxPQUFPLElBQUk7SUFpRGYsWUFDRSxRQUFnQixFQUNSLE9BQW9CLEVBQ3BCLElBQXdCO1FBRHhCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFWbEMsWUFBWTtRQUVaLHNCQUFzQjtRQUNkLGFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBNkNyRCxZQUFZO1FBRVosVUFBSyxHQUFHO1lBQ04sR0FBRyxFQUFFLENBQUMsU0FBNkIsS0FBSyxDQUFDLEVBQUUsb0JBQThCLEVBQXdELEVBQUU7Z0JBQ2pJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBUSxDQUFBO1lBQzNFLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxTQUE2QixLQUFLLENBQUMsRUFBRSxvQkFBOEIsRUFBd0QsRUFBRTtnQkFDbEksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFRLENBQUE7WUFDNUUsQ0FB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QVEsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQU8sRUFBRSxNQUEyQixFQUFFLHVCQUFnQyxLQUFLO1FBQzlFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxHQUFHLENBQUMsSUFBTyxFQUFFLE1BQTJCLEVBQUUsdUJBQWdDLEtBQUs7UUFDN0UsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFPLEVBQUUsTUFBMkIsRUFBRSx1QkFBZ0MsS0FBSztRQUMvRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQTJCLEVBQUUsdUJBQWdDLEtBQUs7UUFDdkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQTJCLEVBQUUsdUJBQWdDLEtBQUs7UUFDdEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuLy8jcmVnaW9uIGltcG9ydFxuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG4vLyBjb25zdCBsb2cgPSBMb2cuY3JlYXRlKCdyZXN0LmNsYXNzJywgTGV2ZWwuX19OT1RISU5HKVxuLy8gbG9jYWxcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IGdldFJlc3RQYXJhbXMsIGdldFBhcmFtc1VybCB9IGZyb20gJy4vcGFyYW1zJztcbmltcG9ydCB7IFJlc3RSZXF1ZXN0IH0gZnJvbSAnLi9yZXN0LXJlcXVlc3QnO1xuaW1wb3J0IHsgUmVzdEhlYWRlcnMgfSBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG4vLyNlbmRyZWdpb25cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBREVSUyA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xufTtcblxuZXhwb3J0IGNsYXNzIFJlc3Q8VCwgVEEgPSBUW10+IGltcGxlbWVudHMgTW9kZWxzLkZuTWV0aG9kc0h0dHBXaXRoTW9jazxULCBUQT4ge1xuXG4gIHByaXZhdGUgbW9ja0h0dHA6IE1vZGVscy5Nb2NrSHR0cDtcbiAgbW9jayhtb2NrOiBNb2RlbHMuTW9ja0h0dHApOiBNb2RlbHMuRm5NZXRob2RzSHR0cDxULCBUQT4ge1xuICAgIGlmICgodHlwZW9mIG1vY2sgPT09ICdmdW5jdGlvbicpIHx8ICh0eXBlb2YgbW9jayA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB0aGlzLm1vY2tIdHRwID0gbW9jaztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgYFtuZzItcmVzdF1cbiAgICAgIC5tb2RlbCguLi4pXG4gICAgICAubW9jayggPCBCQUQgTU9DSyBEQVRBID4gKVxuICAgICAgLi4uXG4gICAgICBgXG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cblxuXG4gIC8vI3JlZ2lvbiAgcHJpdmF0ZSBmaWVsZHNcbiAgcHJpdmF0ZSBfX21ldGFfZW5kcG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW5kcG9pbnRSZXN0OiBzdHJpbmc7XG4gIHByaXZhdGUgZ2V0IGVuZHBvaW50KCkge1xuICAgIGxldCBlID0gdGhpcy5fX21ldGFfZW5kcG9pbnQ7XG4gICAgaWYgKHRoaXMucmVzdFF1ZXJ5UGFyYW1zICE9PSB2b2lkIDAgJiYgdGhpcy5fZW5kcG9pbnRSZXN0ICE9PSB2b2lkIDBcbiAgICAgICYmIHR5cGVvZiB0aGlzLl9lbmRwb2ludFJlc3QgPT09ICdzdHJpbmcnICYmIHRoaXMuX2VuZHBvaW50UmVzdC50cmltKCkgIT09ICcnKSBlID0gdGhpcy5fZW5kcG9pbnRSZXN0O1xuICAgIHJldHVybiBlO1xuICB9XG4gIHByaXZhdGUgcmVzdFF1ZXJ5UGFyYW1zOiBPYmplY3Q7XG4gIHB1YmxpYyBzZXQgX19yZXN0X2VuZHBvaW50KGVuZHBvaW50KSB7XG4gICAgdGhpcy5fZW5kcG9pbnRSZXN0ID0gZW5kcG9pbnQ7XG4gICAgaWYgKGVuZHBvaW50ID09PSB2b2lkIDApIHtcbiAgICAgIHRoaXMucmVzdFF1ZXJ5UGFyYW1zID0gdm9pZCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3RRdWVyeVBhcmFtcyA9IGdldFJlc3RQYXJhbXMoZW5kcG9pbnQsIHRoaXMuX19tZXRhX2VuZHBvaW50KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRVcmwocGFyYW1zOiBhbnksIGRvTm90U2VyaWFsaXplUGFyYW1zOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbmRwb2ludH0ke2dldFBhcmFtc1VybChwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKX1gO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uICBjb25zdHJ1Y3RvclxuICBwcml2YXRlIF9oZWFkZXJzID0gUmVzdEhlYWRlcnMuZnJvbShERUZBVUxUX0hFQURFUlMpO1xuICBnZXQgaGVhZGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVycztcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmRwb2ludDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVxdWVzdDogUmVzdFJlcXVlc3QsXG4gICAgcHJpdmF0ZSBtZXRhOiBNb2RlbHMuTWV0YVJlcXVlc3QsXG4gICkge1xuICAgIHRoaXMuX19tZXRhX2VuZHBvaW50ID0gZW5kcG9pbnQ7XG5cbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gIHJlcVxuXG4gIHByaXZhdGUgcmVxKG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgaXRlbTogVCxcbiAgICBwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sXG4gICAgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0FycmF5OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG5cbiAgICBjb25zdCBtb2RlbFVybCA9IHRoaXMuY3JlYXRVcmwocGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcyk7XG4gICAgY29uc3QgYm9keSA9IGl0ZW0gPyBKU09OLnN0cmluZ2lmeShpdGVtKSA6IHZvaWQgMDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcXVlc3RbbWV0aG9kLnRvTG93ZXJDYXNlKCldKFxuICAgICAgbW9kZWxVcmwsXG4gICAgICBib2R5LFxuICAgICAgdGhpcy5oZWFkZXJzLFxuICAgICAgdGhpcy5tZXRhLFxuICAgICAgaXNBcnJheSxcbiAgICAgIHRoaXMubW9ja0h0dHBcbiAgICApO1xuICAgIHRoaXMuX2hlYWRlcnMgPSBSZXN0SGVhZGVycy5mcm9tKERFRkFVTFRfSEVBREVSUyk7XG4gICAgdGhpcy5tb2NrSHR0cCA9IHZvaWQgMDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBodHRwIG1ldGhvZHNcblxuICAvLyNyZWdpb24gcmVwbGF5XG4gIHJlcGxheShtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kKSB7XG4gICAgdGhpcy5yZXF1ZXN0LnJlcGxheShtZXRob2QsIHRoaXMubWV0YSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgYXJyYXkgPSB7XG4gICAgZ2V0OiAocGFyYW1zOiBNb2RlbHMuVXJsUGFyYW1zW10gPSB2b2lkIDAsIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdnZXQnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueVxuICAgIH0sXG4gICAgaGVhZDogKHBhcmFtczogTW9kZWxzLlVybFBhcmFtc1tdID0gdm9pZCAwLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUQT4+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcSgnaGVhZCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcywgdHJ1ZSkgYXMgYW55XG4gICAgfSxcbiAgICBwb3N0OiAoaXRlbTogVEEsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXEoJ3Bvc3QnLCBpdGVtIGFzIGFueSwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcywgdHJ1ZSkgYXMgYW55O1xuICAgIH0sXG4gICAgcHV0OiAoaXRlbTogVEEsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXEoJ3B1dCcsIGl0ZW0gYXMgYW55LCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zLCB0cnVlKSBhcyBhbnk7XG4gICAgfSxcbiAgICBwYXRjaDogKGl0ZW06IFRBLCBwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdwYXRjaCcsIGl0ZW0gYXMgYW55LCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zLCB0cnVlKSBhcyBhbnk7XG4gICAgfSxcbiAgICBkZWxldGU6IChwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdkZWxldGUnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueTtcbiAgICB9LFxuICAgIGpzb25wOiAocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUQT4+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcSgnanNvbnAnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueTtcbiAgICB9XG4gIH1cblxuICBnZXQocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXEoJ2dldCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcykgYXMgYW55O1xuICB9XG5cbiAgaGVhZChwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zOiBib29sZWFuID0gZmFsc2UpOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcSgnaGVhZCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcykgYXMgYW55O1xuICB9XG5cbiAgcG9zdChpdGVtOiBULCBwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zOiBib29sZWFuID0gZmFsc2UpOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcSgncG9zdCcsIGl0ZW0sIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAgcHV0KGl0ZW06IFQsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdwdXQnLCBpdGVtLCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKTtcbiAgfVxuXG4gIHBhdGNoKGl0ZW06IFQsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdwYXRjaCcsIGl0ZW0sIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAgZGVsZXRlKHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdkZWxldGUnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAganNvbnAocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXEoJ2pzb25wJywgdm9pZCAwLCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxufVxuIl19
|