ng2-rest 11.0.40 → 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.
Files changed (205) hide show
  1. package/README.md +1 -1
  2. package/app.js +2 -47
  3. package/app.js.map +1 -1
  4. package/browser/README.md +24 -0
  5. package/browser/esm2020/lib/cookie.mjs +27 -0
  6. package/browser/esm2020/lib/helpers.mjs +22 -0
  7. package/browser/esm2020/lib/index.mjs +10 -0
  8. package/browser/esm2020/lib/mapping.mjs +271 -0
  9. package/browser/esm2020/lib/models.mjs +135 -0
  10. package/browser/esm2020/lib/params.mjs +305 -0
  11. package/browser/esm2020/lib/request-cache.mjs +95 -0
  12. package/browser/esm2020/lib/resource.service.mjs +255 -0
  13. package/browser/esm2020/lib/rest-headers.mjs +129 -0
  14. package/browser/esm2020/lib/rest-request.mjs +311 -0
  15. package/browser/esm2020/lib/rest.class.mjs +114 -0
  16. package/browser/esm2020/lib/simple-resource.mjs +117 -0
  17. package/browser/esm2020/ng2-rest.mjs +5 -0
  18. package/browser/esm2020/public-api.mjs +2 -0
  19. package/browser/fesm2015/ng2-rest.mjs +1755 -0
  20. package/browser/fesm2015/ng2-rest.mjs.map +1 -0
  21. package/browser/fesm2020/ng2-rest.mjs +1752 -0
  22. package/browser/fesm2020/ng2-rest.mjs.map +1 -0
  23. package/browser/{cookie.d.ts → lib/cookie.d.ts} +0 -0
  24. package/browser/{helpers.d.ts → lib/helpers.d.ts} +0 -0
  25. package/browser/{index.d.ts → lib/index.d.ts} +0 -0
  26. package/browser/{mapping.d.ts → lib/mapping.d.ts} +0 -0
  27. package/{client → browser/lib}/models.d.ts +2 -3
  28. package/browser/{params.d.ts → lib/params.d.ts} +0 -0
  29. package/browser/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
  30. package/browser/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
  31. package/browser/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
  32. package/{rest-request.d.ts → browser/lib/rest-request.d.ts} +0 -3
  33. package/{rest.class.d.ts → browser/lib/rest.class.d.ts} +0 -1
  34. package/browser/{simple-resource.d.ts → lib/simple-resource.d.ts} +1 -5
  35. package/browser/ng2-rest.d.ts +5 -0
  36. package/browser/package.json +31 -0
  37. package/browser/public-api.d.ts +1 -0
  38. package/client/README.md +24 -0
  39. package/client/esm2020/lib/cookie.mjs +27 -0
  40. package/client/esm2020/lib/helpers.mjs +22 -0
  41. package/client/esm2020/lib/index.mjs +10 -0
  42. package/client/esm2020/lib/mapping.mjs +271 -0
  43. package/client/esm2020/lib/models.mjs +135 -0
  44. package/client/esm2020/lib/params.mjs +305 -0
  45. package/client/esm2020/lib/request-cache.mjs +95 -0
  46. package/client/esm2020/lib/resource.service.mjs +255 -0
  47. package/client/esm2020/lib/rest-headers.mjs +129 -0
  48. package/client/esm2020/lib/rest-request.mjs +311 -0
  49. package/client/esm2020/lib/rest.class.mjs +114 -0
  50. package/client/esm2020/lib/simple-resource.mjs +117 -0
  51. package/client/esm2020/ng2-rest.mjs +5 -0
  52. package/client/esm2020/public-api.mjs +2 -0
  53. package/client/fesm2015/ng2-rest.mjs +1755 -0
  54. package/client/fesm2015/ng2-rest.mjs.map +1 -0
  55. package/client/fesm2020/ng2-rest.mjs +1752 -0
  56. package/client/fesm2020/ng2-rest.mjs.map +1 -0
  57. package/client/{cookie.d.ts → lib/cookie.d.ts} +0 -0
  58. package/client/{helpers.d.ts → lib/helpers.d.ts} +0 -0
  59. package/client/{index.d.ts → lib/index.d.ts} +0 -0
  60. package/client/{mapping.d.ts → lib/mapping.d.ts} +0 -0
  61. package/{browser → client/lib}/models.d.ts +2 -3
  62. package/client/{params.d.ts → lib/params.d.ts} +0 -0
  63. package/client/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
  64. package/client/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
  65. package/client/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
  66. package/client/{rest-request.d.ts → lib/rest-request.d.ts} +0 -3
  67. package/client/{rest.class.d.ts → lib/rest.class.d.ts} +0 -1
  68. package/{simple-resource.d.ts → client/lib/simple-resource.d.ts} +1 -5
  69. package/client/ng2-rest.d.ts +5 -0
  70. package/client/package.json +25 -31
  71. package/client/public-api.d.ts +1 -0
  72. package/index.d.ts +1 -9
  73. package/index.js +3 -13
  74. package/index.js.map +1 -1
  75. package/{cookie.d.ts → lib/cookie.d.ts} +0 -0
  76. package/{cookie.js → lib/cookie.js} +2 -1
  77. package/lib/cookie.js.map +1 -0
  78. package/{helpers.d.ts → lib/helpers.d.ts} +0 -0
  79. package/{helpers.js → lib/helpers.js} +3 -2
  80. package/lib/helpers.js.map +1 -0
  81. package/{browser/index.js → lib/index.d.ts} +0 -1
  82. package/lib/index.js +17 -0
  83. package/lib/index.js.map +1 -0
  84. package/{mapping.d.ts → lib/mapping.d.ts} +0 -0
  85. package/{mapping.js → lib/mapping.js} +5 -4
  86. package/lib/mapping.js.map +1 -0
  87. package/{models.d.ts → lib/models.d.ts} +2 -3
  88. package/{models.js → lib/models.js} +6 -6
  89. package/lib/models.js.map +1 -0
  90. package/{params.d.ts → lib/params.d.ts} +0 -0
  91. package/{params.js → lib/params.js} +17 -16
  92. package/lib/params.js.map +1 -0
  93. package/{request-cache.d.ts → lib/request-cache.d.ts} +0 -0
  94. package/{request-cache.js → lib/request-cache.js} +2 -1
  95. package/lib/request-cache.js.map +1 -0
  96. package/{resource.service.d.ts → lib/resource.service.d.ts} +1 -5
  97. package/{resource.service.js → lib/resource.service.js} +33 -26
  98. package/lib/resource.service.js.map +1 -0
  99. package/{rest-headers.d.ts → lib/rest-headers.d.ts} +0 -0
  100. package/{rest-headers.js → lib/rest-headers.js} +2 -1
  101. package/lib/rest-headers.js.map +1 -0
  102. package/{browser → lib}/rest-request.d.ts +0 -3
  103. package/{rest-request.js → lib/rest-request.js} +19 -19
  104. package/lib/rest-request.js.map +1 -0
  105. package/{browser → lib}/rest.class.d.ts +0 -1
  106. package/{rest.class.js → lib/rest.class.js} +4 -5
  107. package/lib/rest.class.js.map +1 -0
  108. package/{client → lib}/simple-resource.d.ts +1 -5
  109. package/{simple-resource.js → lib/simple-resource.js} +11 -14
  110. package/lib/simple-resource.js.map +1 -0
  111. package/package.json +10 -10
  112. package/package.json_devDependencies.json +24 -24
  113. package/package.json_tnp.json +2 -1
  114. package/package.json_tnp.json5 +39 -0
  115. package/tmp-environment.json +85 -121
  116. package/browser/app.d.ts +0 -0
  117. package/browser/app.js +0 -31
  118. package/browser/app.js.map +0 -1
  119. package/browser/cookie.js +0 -27
  120. package/browser/cookie.js.map +0 -1
  121. package/browser/es5/app.js +0 -32
  122. package/browser/es5/cookie.js +0 -50
  123. package/browser/es5/helpers.js +0 -58
  124. package/browser/es5/index.js +0 -107
  125. package/browser/es5/mapping.js +0 -287
  126. package/browser/es5/models.js +0 -249
  127. package/browser/es5/params.js +0 -310
  128. package/browser/es5/request-cache.js +0 -133
  129. package/browser/es5/resource.service.js +0 -288
  130. package/browser/es5/rest-headers.js +0 -200
  131. package/browser/es5/rest-request.js +0 -423
  132. package/browser/es5/rest.class.js +0 -191
  133. package/browser/es5/simple-resource.js +0 -175
  134. package/browser/helpers.js +0 -22
  135. package/browser/helpers.js.map +0 -1
  136. package/browser/index.js.map +0 -1
  137. package/browser/mapping.js +0 -271
  138. package/browser/mapping.js.map +0 -1
  139. package/browser/models.js +0 -136
  140. package/browser/models.js.map +0 -1
  141. package/browser/params.js +0 -305
  142. package/browser/params.js.map +0 -1
  143. package/browser/request-cache.js +0 -95
  144. package/browser/request-cache.js.map +0 -1
  145. package/browser/resource.service.js +0 -249
  146. package/browser/resource.service.js.map +0 -1
  147. package/browser/rest-headers.js +0 -129
  148. package/browser/rest-headers.js.map +0 -1
  149. package/browser/rest-request.js +0 -316
  150. package/browser/rest-request.js.map +0 -1
  151. package/browser/rest.class.js +0 -116
  152. package/browser/rest.class.js.map +0 -1
  153. package/browser/simple-resource.js +0 -121
  154. package/browser/simple-resource.js.map +0 -1
  155. package/client/app.d.ts +0 -0
  156. package/client/app.js +0 -31
  157. package/client/app.js.map +0 -1
  158. package/client/cookie.js +0 -27
  159. package/client/cookie.js.map +0 -1
  160. package/client/es5/app.js +0 -32
  161. package/client/es5/cookie.js +0 -50
  162. package/client/es5/helpers.js +0 -58
  163. package/client/es5/index.js +0 -107
  164. package/client/es5/mapping.js +0 -287
  165. package/client/es5/models.js +0 -249
  166. package/client/es5/params.js +0 -310
  167. package/client/es5/request-cache.js +0 -133
  168. package/client/es5/resource.service.js +0 -288
  169. package/client/es5/rest-headers.js +0 -200
  170. package/client/es5/rest-request.js +0 -423
  171. package/client/es5/rest.class.js +0 -191
  172. package/client/es5/simple-resource.js +0 -175
  173. package/client/helpers.js +0 -22
  174. package/client/helpers.js.map +0 -1
  175. package/client/index.js +0 -10
  176. package/client/index.js.map +0 -1
  177. package/client/mapping.js +0 -271
  178. package/client/mapping.js.map +0 -1
  179. package/client/models.js +0 -136
  180. package/client/models.js.map +0 -1
  181. package/client/params.js +0 -305
  182. package/client/params.js.map +0 -1
  183. package/client/request-cache.js +0 -95
  184. package/client/request-cache.js.map +0 -1
  185. package/client/resource.service.js +0 -249
  186. package/client/resource.service.js.map +0 -1
  187. package/client/rest-headers.js +0 -129
  188. package/client/rest-headers.js.map +0 -1
  189. package/client/rest-request.js +0 -316
  190. package/client/rest-request.js.map +0 -1
  191. package/client/rest.class.js +0 -116
  192. package/client/rest.class.js.map +0 -1
  193. package/client/simple-resource.js +0 -121
  194. package/client/simple-resource.js.map +0 -1
  195. package/cookie.js.map +0 -1
  196. package/helpers.js.map +0 -1
  197. package/mapping.js.map +0 -1
  198. package/models.js.map +0 -1
  199. package/params.js.map +0 -1
  200. package/request-cache.js.map +0 -1
  201. package/resource.service.js.map +0 -1
  202. package/rest-headers.js.map +0 -1
  203. package/rest-request.js.map +0 -1
  204. package/rest.class.js.map +0 -1
  205. 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