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