@micropermit/client-angular 0.4.5-alpha1 → 0.5.0-alpha.0
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/{fesm2015/micropermit-client-angular.js → fesm2022/micropermit-client-angular.mjs} +354 -1513
- package/fesm2022/micropermit-client-angular.mjs.map +1 -0
- package/{micropermit-client-angular.d.ts → index.d.ts} +1 -0
- package/lib/components/errorindicator.component.d.ts +3 -0
- package/lib/components/loadingindicator.component.d.ts +3 -0
- package/lib/directives/call-link.directive.d.ts +3 -0
- package/lib/directives/linkfield.directive.d.ts +7 -4
- package/lib/directives/micro-link-validate.directive.d.ts +3 -0
- package/lib/link-field-paging-support.d.ts +1 -1
- package/lib/microclient.module.d.ts +10 -0
- package/lib/microclient.service.d.ts +3 -0
- package/lib/pipes/linkfield.pipe.d.ts +3 -0
- package/package.json +14 -12
- package/bundles/micropermit-client-angular.umd.js +0 -3315
- package/bundles/micropermit-client-angular.umd.js.map +0 -1
- package/bundles/micropermit-client-angular.umd.min.js +0 -16
- package/bundles/micropermit-client-angular.umd.min.js.map +0 -1
- package/esm2015/lib/components/errorindicator.component.js +0 -53
- package/esm2015/lib/components/loadingindicator.component.js +0 -49
- package/esm2015/lib/directives/call-link.directive.js +0 -110
- package/esm2015/lib/directives/linkfield.directive.js +0 -363
- package/esm2015/lib/directives/micro-link-validate.directive.js +0 -141
- package/esm2015/lib/error/microerror.js +0 -27
- package/esm2015/lib/link-field-paging-support.js +0 -318
- package/esm2015/lib/links/callablelink.js +0 -265
- package/esm2015/lib/links/linkfield.js +0 -289
- package/esm2015/lib/links/mock-linkfield.js +0 -42
- package/esm2015/lib/microclient.module.js +0 -54
- package/esm2015/lib/microclient.service.js +0 -515
- package/esm2015/lib/microobject.js +0 -222
- package/esm2015/lib/paramutils.js +0 -176
- package/esm2015/lib/pipes/linkfield.pipe.js +0 -53
- package/esm2015/micropermit-client-angular.js +0 -9
- package/esm2015/public_api.js +0 -23
- package/esm5/lib/components/errorindicator.component.js +0 -36
- package/esm5/lib/components/loadingindicator.component.js +0 -19
- package/esm5/lib/directives/call-link.directive.js +0 -112
- package/esm5/lib/directives/linkfield.directive.js +0 -420
- package/esm5/lib/directives/micro-link-validate.directive.js +0 -152
- package/esm5/lib/error/microerror.js +0 -31
- package/esm5/lib/link-field-paging-support.js +0 -387
- package/esm5/lib/links/callablelink.js +0 -336
- package/esm5/lib/links/linkfield.js +0 -369
- package/esm5/lib/links/mock-linkfield.js +0 -56
- package/esm5/lib/microclient.module.js +0 -61
- package/esm5/lib/microclient.service.js +0 -616
- package/esm5/lib/microobject.js +0 -296
- package/esm5/lib/paramutils.js +0 -228
- package/esm5/lib/pipes/linkfield.pipe.js +0 -60
- package/esm5/micropermit-client-angular.js +0 -9
- package/esm5/public_api.js +0 -23
- package/fesm2015/micropermit-client-angular.js.map +0 -1
- package/fesm5/micropermit-client-angular.js +0 -3116
- package/fesm5/micropermit-client-angular.js.map +0 -1
- package/micropermit-client-angular.metadata.json +0 -1
|
@@ -1,515 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import { Injectable } from '@angular/core';
|
|
6
|
-
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
7
|
-
import { MicroObject } from './microobject';
|
|
8
|
-
import { ReplaySubject, throwError } from 'rxjs';
|
|
9
|
-
import { catchError, finalize, map } from 'rxjs/operators';
|
|
10
|
-
import { ParamUtils } from './paramutils';
|
|
11
|
-
import { MicroError } from './error/microerror';
|
|
12
|
-
export class MicroClient {
|
|
13
|
-
/**
|
|
14
|
-
* @param {?} httpClient
|
|
15
|
-
*/
|
|
16
|
-
constructor(httpClient) {
|
|
17
|
-
this.httpClient = httpClient;
|
|
18
|
-
this.entryPointSubject = new ReplaySubject();
|
|
19
|
-
this.usePost = true;
|
|
20
|
-
this.sendAsPermitTokenHeader = true;
|
|
21
|
-
this.sendAsMultipartFormData = false;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @param {?} sendAsPermitTokenHeader
|
|
25
|
-
* @return {?}
|
|
26
|
-
*/
|
|
27
|
-
setSendAsPermitTokenHeader(sendAsPermitTokenHeader) {
|
|
28
|
-
this.sendAsPermitTokenHeader = sendAsPermitTokenHeader;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @param {?} token
|
|
32
|
-
* @return {?}
|
|
33
|
-
*/
|
|
34
|
-
setAuthToken(token) {
|
|
35
|
-
this.authHeader = 'Bearer ' + token;
|
|
36
|
-
this.permitToken = token;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @param {?} authHeader
|
|
40
|
-
* @return {?}
|
|
41
|
-
*/
|
|
42
|
-
setAuthHeader(authHeader) {
|
|
43
|
-
this.authHeader = authHeader;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* @return {?}
|
|
47
|
-
*/
|
|
48
|
-
getEntryPoint() {
|
|
49
|
-
return this.entryPoint;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* @param {?=} cb
|
|
53
|
-
* @return {?}
|
|
54
|
-
*/
|
|
55
|
-
waitForEntryPoint(cb) {
|
|
56
|
-
if (cb != null) {
|
|
57
|
-
this.entryPointSubject.subscribe(cb);
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
return this.entryPointSubject.toPromise();
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* @param {?} other
|
|
64
|
-
* @return {?}
|
|
65
|
-
*/
|
|
66
|
-
copyAuthAndEntrypointOf(other) {
|
|
67
|
-
this.authHeader = other.authHeader;
|
|
68
|
-
this.permitToken = other.permitToken;
|
|
69
|
-
this.entryPoint = other.entryPoint;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* @template T
|
|
73
|
-
* @param {?} entryPoint
|
|
74
|
-
* @return {?}
|
|
75
|
-
*/
|
|
76
|
-
setEntryPoint(entryPoint) {
|
|
77
|
-
if (entryPoint == null) {
|
|
78
|
-
this.authHeader = null;
|
|
79
|
-
this.entryPoint = null;
|
|
80
|
-
this.permitToken = null;
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
this.entryPoint = entryPoint;
|
|
84
|
-
if (this.entryPoint.__meta && this.entryPoint.__meta.permitToken) {
|
|
85
|
-
this.setAuthToken(this.entryPoint.__meta.permitToken);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
throw Error('Expected the entryPoint to contain a "permitToken" within the "__meta" field');
|
|
89
|
-
}
|
|
90
|
-
this.entryPointSubject.next(entryPoint);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* @param {?} handler
|
|
95
|
-
* @return {?}
|
|
96
|
-
*/
|
|
97
|
-
setDefaultErrorHandler(handler) {
|
|
98
|
-
this.defaultErrorHandler = handler;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* @param {?} httpErr
|
|
102
|
-
* @return {?}
|
|
103
|
-
*/
|
|
104
|
-
handleError(httpErr) {
|
|
105
|
-
if (this.defaultErrorHandler) {
|
|
106
|
-
/** @type {?} */
|
|
107
|
-
const microError = MicroClient.toMicroError(httpErr);
|
|
108
|
-
if (microError) {
|
|
109
|
-
/** @type {?} */
|
|
110
|
-
const microResultObj = (/** @type {?} */ (MicroObject.fromObject(httpErr.error, this)));
|
|
111
|
-
this.defaultErrorHandler(httpErr, microResultObj);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.defaultErrorHandler(httpErr, null);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* @template T
|
|
120
|
-
* @param {?} url
|
|
121
|
-
* @param {?=} username
|
|
122
|
-
* @param {?=} password
|
|
123
|
-
* @param {?=} headers
|
|
124
|
-
* @return {?}
|
|
125
|
-
*/
|
|
126
|
-
ignite(url, username = null, password = null, headers = {}) {
|
|
127
|
-
if (this.urlRewriter) {
|
|
128
|
-
url = this.urlRewriter(url);
|
|
129
|
-
}
|
|
130
|
-
/** @type {?} */
|
|
131
|
-
let requestHeaders = new HttpHeaders();
|
|
132
|
-
for (const headerKey in headers) {
|
|
133
|
-
if (headers.hasOwnProperty(headerKey)) {
|
|
134
|
-
requestHeaders = requestHeaders.set(headerKey, headers[headerKey]);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (username != null || password != null) {
|
|
138
|
-
requestHeaders = requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));
|
|
139
|
-
}
|
|
140
|
-
return this.httpClient.get(url, {
|
|
141
|
-
headers: requestHeaders
|
|
142
|
-
}).pipe(map((/**
|
|
143
|
-
* @param {?} val
|
|
144
|
-
* @return {?}
|
|
145
|
-
*/
|
|
146
|
-
val => {
|
|
147
|
-
/** @type {?} */
|
|
148
|
-
const entryPoint = MicroObject.fromObject(val, this);
|
|
149
|
-
this.setEntryPoint(entryPoint);
|
|
150
|
-
return (/** @type {?} */ (entryPoint));
|
|
151
|
-
})), this.catchAndHandleError());
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* @template T
|
|
155
|
-
* @param {?} url
|
|
156
|
-
* @param {?=} params
|
|
157
|
-
* @param {?=} requestOptions
|
|
158
|
-
* @return {?}
|
|
159
|
-
*/
|
|
160
|
-
load(url, params, requestOptions) {
|
|
161
|
-
/** @type {?} */
|
|
162
|
-
let requestHeaders = new HttpHeaders();
|
|
163
|
-
if (this.authHeader) {
|
|
164
|
-
requestHeaders = requestHeaders.set('Authorization', this.authHeader);
|
|
165
|
-
if (this.sendAsPermitTokenHeader) {
|
|
166
|
-
requestHeaders = requestHeaders.set('MicroPermitToken', this.permitToken);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
/** @type {?} */
|
|
170
|
-
let oParams = params;
|
|
171
|
-
if (params != null || this.usePost) {
|
|
172
|
-
/** @type {?} */
|
|
173
|
-
const existingParamsStr = ParamUtils.getParam(url, 'oParams', true);
|
|
174
|
-
/** @type {?} */
|
|
175
|
-
let existingParams;
|
|
176
|
-
if (existingParamsStr) {
|
|
177
|
-
existingParams = JSON.parse(existingParamsStr);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
existingParams = {};
|
|
181
|
-
}
|
|
182
|
-
oParams = Object.assign(existingParams, params);
|
|
183
|
-
}
|
|
184
|
-
/** @type {?} */
|
|
185
|
-
let options = requestOptions;
|
|
186
|
-
if (requestOptions != null || this.usePost) {
|
|
187
|
-
/** @type {?} */
|
|
188
|
-
const prevOptionsStr = ParamUtils.getParam(url, 'options', true);
|
|
189
|
-
if (prevOptionsStr) {
|
|
190
|
-
options = JSON.parse(prevOptionsStr);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
options = {};
|
|
194
|
-
}
|
|
195
|
-
options = Object.assign(options, requestOptions);
|
|
196
|
-
}
|
|
197
|
-
/** @type {?} */
|
|
198
|
-
const queryParams = ParamUtils.getParams(url);
|
|
199
|
-
/** @type {?} */
|
|
200
|
-
let httpObs = null;
|
|
201
|
-
if (this.usePost) {
|
|
202
|
-
/** @type {?} */
|
|
203
|
-
let bOParams;
|
|
204
|
-
/** @type {?} */
|
|
205
|
-
const encBOParams = queryParams['bOParams'];
|
|
206
|
-
if (encBOParams) {
|
|
207
|
-
bOParams = JSON.parse(ParamUtils.base64UrlDecode(encBOParams));
|
|
208
|
-
}
|
|
209
|
-
/** @type {?} */
|
|
210
|
-
const body = {
|
|
211
|
-
params: queryParams['params'],
|
|
212
|
-
oParams: oParams,
|
|
213
|
-
bParams: queryParams['bParams'],
|
|
214
|
-
bOParams: bOParams,
|
|
215
|
-
options: options,
|
|
216
|
-
};
|
|
217
|
-
delete queryParams['params'];
|
|
218
|
-
delete queryParams['oParams'];
|
|
219
|
-
delete queryParams['bParams'];
|
|
220
|
-
delete queryParams['bOParams'];
|
|
221
|
-
delete queryParams['options'];
|
|
222
|
-
url = ParamUtils.setParams(url, queryParams);
|
|
223
|
-
if (this.urlRewriter) {
|
|
224
|
-
url = this.urlRewriter(url);
|
|
225
|
-
}
|
|
226
|
-
httpObs = this.httpClient.post(url, this.encodeBody(body), {
|
|
227
|
-
headers: requestHeaders
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
if (oParams) {
|
|
232
|
-
queryParams['oParams'] = ParamUtils.base64UrlEncode(JSON.stringify(oParams));
|
|
233
|
-
}
|
|
234
|
-
if (options) {
|
|
235
|
-
queryParams['options'] = ParamUtils.base64UrlEncode(JSON.stringify(options));
|
|
236
|
-
}
|
|
237
|
-
url = ParamUtils.setParams(url, queryParams);
|
|
238
|
-
if (this.urlRewriter) {
|
|
239
|
-
url = this.urlRewriter(url);
|
|
240
|
-
}
|
|
241
|
-
httpObs = this.httpClient.get(url, {
|
|
242
|
-
headers: requestHeaders
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
httpObs = httpObs.pipe(map((/**
|
|
246
|
-
* @param {?} val
|
|
247
|
-
* @return {?}
|
|
248
|
-
*/
|
|
249
|
-
val => {
|
|
250
|
-
return MicroObject.fromObject(val, this);
|
|
251
|
-
})), this.catchAndHandleError());
|
|
252
|
-
return httpObs;
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* @private
|
|
256
|
-
* @param {?} body
|
|
257
|
-
* @return {?}
|
|
258
|
-
*/
|
|
259
|
-
encodeBody(body) {
|
|
260
|
-
if (this.sendAsMultipartFormData) {
|
|
261
|
-
/** @type {?} */
|
|
262
|
-
let formData = new FormData();
|
|
263
|
-
/** @type {?} */
|
|
264
|
-
let paramBlob = new Blob([JSON.stringify(body)], { type: "application/json" });
|
|
265
|
-
formData.append('*', paramBlob);
|
|
266
|
-
return formData;
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
return body;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* @private
|
|
274
|
-
* @template T
|
|
275
|
-
* @return {?}
|
|
276
|
-
*/
|
|
277
|
-
catchAndHandleError() {
|
|
278
|
-
return (/**
|
|
279
|
-
* @param {?} source
|
|
280
|
-
* @return {?}
|
|
281
|
-
*/
|
|
282
|
-
(source) => {
|
|
283
|
-
return source.pipe(catchError((/**
|
|
284
|
-
* @param {?} err
|
|
285
|
-
* @return {?}
|
|
286
|
-
*/
|
|
287
|
-
err => {
|
|
288
|
-
/** @type {?} */
|
|
289
|
-
let loadError = new MicroClientLoadError(err, (/**
|
|
290
|
-
* @param {?} errToHandle
|
|
291
|
-
* @return {?}
|
|
292
|
-
*/
|
|
293
|
-
(errToHandle) => {
|
|
294
|
-
this.handleError(errToHandle);
|
|
295
|
-
}));
|
|
296
|
-
return throwError(loadError).pipe(finalize((/**
|
|
297
|
-
* @return {?}
|
|
298
|
-
*/
|
|
299
|
-
() => {
|
|
300
|
-
if (!loadError.shouldPreventDefault()) {
|
|
301
|
-
loadError.handleDefault();
|
|
302
|
-
}
|
|
303
|
-
})));
|
|
304
|
-
})));
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* @param {?} entryPoint
|
|
309
|
-
* @return {?}
|
|
310
|
-
*/
|
|
311
|
-
createChildClientForEntryPoint(entryPoint) {
|
|
312
|
-
if (entryPoint.__meta && entryPoint.__meta.permitToken) {
|
|
313
|
-
/** @type {?} */
|
|
314
|
-
const childClient = Object.create(this, {
|
|
315
|
-
entryPoint: {
|
|
316
|
-
configurable: true,
|
|
317
|
-
enumerable: true,
|
|
318
|
-
writable: true
|
|
319
|
-
},
|
|
320
|
-
authHeader: {
|
|
321
|
-
configurable: true,
|
|
322
|
-
enumerable: true,
|
|
323
|
-
writable: true
|
|
324
|
-
},
|
|
325
|
-
permitToken: {
|
|
326
|
-
configurable: true,
|
|
327
|
-
enumerable: true,
|
|
328
|
-
writable: true
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
childClient.setEntryPoint(entryPoint);
|
|
332
|
-
return childClient;
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
throw new Error('The supplied value can\'t be used to construct a child MicroClient because it doesn\'t contain metadata with a permitToken ');
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* @param {?} rewriter
|
|
340
|
-
* @return {?}
|
|
341
|
-
*/
|
|
342
|
-
setURLRewriter(rewriter) {
|
|
343
|
-
this.urlRewriter = rewriter;
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* @param {?} httpResponse
|
|
347
|
-
* @return {?}
|
|
348
|
-
*/
|
|
349
|
-
static toMicroError(httpResponse) {
|
|
350
|
-
/** @type {?} */
|
|
351
|
-
const res = httpResponse.error;
|
|
352
|
-
if (res && res.__meta && res.__meta.error) {
|
|
353
|
-
return Object.assign(new MicroError(), res.__meta.error);
|
|
354
|
-
}
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* @return {?}
|
|
359
|
-
*/
|
|
360
|
-
static guessMicroComponentBaseURL() {
|
|
361
|
-
/** @type {?} */
|
|
362
|
-
const href = window.location.href;
|
|
363
|
-
// Last URL-Segement is static
|
|
364
|
-
if (MicroClient.staticContentRegExp.test(href)) {
|
|
365
|
-
return href.replace(new RegExp('/static/.*'), '')
|
|
366
|
-
.replace(new RegExp('/#/.*'), '');
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
if (window.location.protocol.startsWith('file')) {
|
|
370
|
-
return 'http://localhost:8080';
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
return window.location.protocol + '//' + window.location.hostname + ':8080';
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* @return {?}
|
|
379
|
-
*/
|
|
380
|
-
static guessMicroComponentAuthorizeURL() {
|
|
381
|
-
return this.guessMicroComponentBaseURL() + '/authorize';
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
MicroClient.staticContentRegExp = new RegExp('[a-zA-Z0-9]://.*(:[0-9]+)?(/.*)*/static(/.*(\\?.*)?(#.*)?)?');
|
|
385
|
-
MicroClient.decorators = [
|
|
386
|
-
{ type: Injectable }
|
|
387
|
-
];
|
|
388
|
-
/** @nocollapse */
|
|
389
|
-
MicroClient.ctorParameters = () => [
|
|
390
|
-
{ type: HttpClient }
|
|
391
|
-
];
|
|
392
|
-
if (false) {
|
|
393
|
-
/**
|
|
394
|
-
* @type {?}
|
|
395
|
-
* @private
|
|
396
|
-
*/
|
|
397
|
-
MicroClient.staticContentRegExp;
|
|
398
|
-
/**
|
|
399
|
-
* @type {?}
|
|
400
|
-
* @private
|
|
401
|
-
*/
|
|
402
|
-
MicroClient.prototype.authHeader;
|
|
403
|
-
/**
|
|
404
|
-
* @type {?}
|
|
405
|
-
* @private
|
|
406
|
-
*/
|
|
407
|
-
MicroClient.prototype.permitToken;
|
|
408
|
-
/**
|
|
409
|
-
* @type {?}
|
|
410
|
-
* @private
|
|
411
|
-
*/
|
|
412
|
-
MicroClient.prototype.entryPoint;
|
|
413
|
-
/**
|
|
414
|
-
* @type {?}
|
|
415
|
-
* @private
|
|
416
|
-
*/
|
|
417
|
-
MicroClient.prototype.entryPointSubject;
|
|
418
|
-
/**
|
|
419
|
-
* @type {?}
|
|
420
|
-
* @private
|
|
421
|
-
*/
|
|
422
|
-
MicroClient.prototype.urlRewriter;
|
|
423
|
-
/**
|
|
424
|
-
* @type {?}
|
|
425
|
-
* @private
|
|
426
|
-
*/
|
|
427
|
-
MicroClient.prototype.defaultErrorHandler;
|
|
428
|
-
/** @type {?} */
|
|
429
|
-
MicroClient.prototype.usePost;
|
|
430
|
-
/** @type {?} */
|
|
431
|
-
MicroClient.prototype.sendAsPermitTokenHeader;
|
|
432
|
-
/** @type {?} */
|
|
433
|
-
MicroClient.prototype.sendAsMultipartFormData;
|
|
434
|
-
/**
|
|
435
|
-
* @type {?}
|
|
436
|
-
* @private
|
|
437
|
-
*/
|
|
438
|
-
MicroClient.prototype.httpClient;
|
|
439
|
-
}
|
|
440
|
-
export class MicroClientLoadError {
|
|
441
|
-
/**
|
|
442
|
-
* @param {?} error
|
|
443
|
-
* @param {?} defaultHandler
|
|
444
|
-
*/
|
|
445
|
-
constructor(error, defaultHandler) {
|
|
446
|
-
this.error = error;
|
|
447
|
-
this.defaultHandler = defaultHandler;
|
|
448
|
-
this.handled = false;
|
|
449
|
-
this.doPreventDefault = false;
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* @return {?}
|
|
453
|
-
*/
|
|
454
|
-
handleDefault() {
|
|
455
|
-
if (this.defaultHandler) {
|
|
456
|
-
this.defaultHandler(this.error);
|
|
457
|
-
this.handled = true;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* @param {?} handler
|
|
462
|
-
* @return {?}
|
|
463
|
-
*/
|
|
464
|
-
handleError(handler) {
|
|
465
|
-
handler(this.error);
|
|
466
|
-
this.handled = true;
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* @return {?}
|
|
470
|
-
*/
|
|
471
|
-
isHandled() {
|
|
472
|
-
return this.handled;
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* @return {?}
|
|
476
|
-
*/
|
|
477
|
-
shouldPreventDefault() {
|
|
478
|
-
return this.doPreventDefault;
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* @return {?}
|
|
482
|
-
*/
|
|
483
|
-
preventDefault() {
|
|
484
|
-
this.doPreventDefault = true;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* @return {?}
|
|
488
|
-
*/
|
|
489
|
-
hasDefaultHandler() {
|
|
490
|
-
return this.defaultHandler != null;
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
if (false) {
|
|
494
|
-
/**
|
|
495
|
-
* @type {?}
|
|
496
|
-
* @private
|
|
497
|
-
*/
|
|
498
|
-
MicroClientLoadError.prototype.handled;
|
|
499
|
-
/**
|
|
500
|
-
* @type {?}
|
|
501
|
-
* @private
|
|
502
|
-
*/
|
|
503
|
-
MicroClientLoadError.prototype.doPreventDefault;
|
|
504
|
-
/**
|
|
505
|
-
* @type {?}
|
|
506
|
-
* @private
|
|
507
|
-
*/
|
|
508
|
-
MicroClientLoadError.prototype.error;
|
|
509
|
-
/**
|
|
510
|
-
* @type {?}
|
|
511
|
-
* @private
|
|
512
|
-
*/
|
|
513
|
-
MicroClientLoadError.prototype.defaultHandler;
|
|
514
|
-
}
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9jbGllbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtaWNyb3Blcm1pdC9jbGllbnQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9taWNyb2NsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQXFCLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFhLGFBQWEsRUFBVyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxXQUFXOzs7O0lBY3BCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFSbEMsc0JBQWlCLEdBQStCLElBQUksYUFBYSxFQUFlLENBQUM7UUFJbEYsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFJdkMsQ0FBQzs7Ozs7SUFFTSwwQkFBMEIsQ0FBQyx1QkFBZ0M7UUFDOUQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0lBQzNELENBQUM7Ozs7O0lBRU0sWUFBWSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Ozs7O0lBRU0s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O0lBQ3hDLDBDQUE2Rjs7SUFDN0YsOEJBQXNCOztJQUN0Qiw4Q0FBc0M7O0lBQ3RDLDhDQUF1Qzs7Ozs7SUFFM0IsaUNBQThCOztBQW1TOUMsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFJN0IsWUFBb0IsS0FBVSxFQUFVLGNBQWtDO1FBQXRELFVBQUssR0FBTCxLQUFLLENBQUs7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7UUFIbEUsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFJakMsQ0FBQzs7OztJQUVNLGFBQWE7UUFDaEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxXQUFXLENBQUMsT0FBNkI7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDOzs7O0lBRU0sU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOzs7O0lBRU0sb0JBQW9CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7Ozs7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQzs7OztJQUVNLGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3ZDLENBQUM7Q0FDSjs7Ozs7O0lBbENHLHVDQUF3Qjs7Ozs7SUFDeEIsZ0RBQWlDOzs7OztJQUVyQixxQ0FBa0I7Ozs7O0lBQUUsOENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge01pY3JvT2JqZWN0fSBmcm9tICcuL21pY3Jvb2JqZWN0JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHRha2UsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BhcmFtVXRpbHN9IGZyb20gJy4vcGFyYW11dGlscyc7XG5pbXBvcnQge01pY3JvRXJyb3J9IGZyb20gJy4vZXJyb3IvbWljcm9lcnJvcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNaWNyb0NsaWVudCB7XG5cbiAgICBwcml2YXRlIGF1dGhIZWFkZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHBlcm1pdFRva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBlbnRyeVBvaW50OiBNaWNyb09iamVjdDtcblxuICAgIHByaXZhdGUgZW50cnlQb2ludFN1YmplY3Q6IFJlcGxheVN1YmplY3Q8TWljcm9PYmplY3Q+ID0gbmV3IFJlcGxheVN1YmplY3Q8TWljcm9PYmplY3Q+KCk7XG5cbiAgICBwcml2YXRlIHVybFJld3JpdGVyOiAoc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkZWZhdWx0RXJyb3JIYW5kbGVyOiAoaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgbWljcm9FcnJvcjogTWljcm9PYmplY3QpID0+IHZvaWQ7XG4gICAgcHVibGljIHVzZVBvc3QgPSB0cnVlO1xuICAgIHB1YmxpYyBzZW5kQXNQZXJtaXRUb2tlbkhlYWRlciA9IHRydWU7XG4gICAgcHVibGljIHNlbmRBc011bHRpcGFydEZvcm1EYXRhID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcblxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZW5kQXNQZXJtaXRUb2tlbkhlYWRlcihzZW5kQXNQZXJtaXRUb2tlbkhlYWRlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlbmRBc1Blcm1pdFRva2VuSGVhZGVyID0gc2VuZEFzUGVybWl0VG9rZW5IZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXV0aEhlYWRlciA9ICdCZWFyZXIgJyArIHRva2VuO1xuICAgICAgICB0aGlzLnBlcm1pdFRva2VuID0gdG9rZW47XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dGhIZWFkZXIoYXV0aEhlYWRlcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXV0aEhlYWRlciA9IGF1dGhIZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVudHJ5UG9pbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cnlQb2ludDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvckVudHJ5UG9pbnQoY2I/OiAoZW50cnlQb2ludDogYW55KSA9PiB2b2lkKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKGNiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cnlQb2ludFN1YmplY3Quc3Vic2NyaWJlKGNiKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5UG9pbnRTdWJqZWN0LnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5QXV0aEFuZEVudHJ5cG9pbnRPZihvdGhlcjogTWljcm9DbGllbnQpIHtcbiAgICAgICAgdGhpcy5hdXRoSGVhZGVyID0gb3RoZXIuYXV0aEhlYWRlcjtcbiAgICAgICAgdGhpcy5wZXJtaXRUb2tlbiA9IG90aGVyLnBlcm1pdFRva2VuO1xuICAgICAgICB0aGlzLmVudHJ5UG9pbnQgPSBvdGhlci5lbnRyeVBvaW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFbnRyeVBvaW50PFQgZXh0ZW5kcyBNaWNyb09iamVjdD4oZW50cnlQb2ludDogYW55KSB7XG4gICAgICAgIGlmIChlbnRyeVBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aEhlYWRlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmVudHJ5UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXRUb2tlbiA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVudHJ5UG9pbnQgPSBlbnRyeVBvaW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50cnlQb2ludC5fX21ldGEgJiYgdGhpcy5lbnRyeVBvaW50Ll9fbWV0YS5wZXJtaXRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0aFRva2VuKHRoaXMuZW50cnlQb2ludC5fX21ldGEucGVybWl0VG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignRXhwZWN0ZWQgdGhlIGVudHJ5UG9pbnQgdG8gY29udGFpbiBhIFwicGVybWl0VG9rZW5cIiB3aXRoaW4gdGhlIFwiX19tZXRhXCIgZmllbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW50cnlQb2ludFN1YmplY3QubmV4dChlbnRyeVBvaW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREZWZhdWx0RXJyb3JIYW5kbGVyKGhhbmRsZXI6IChodHRwRXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBtaWNyb0Vycm9yOiBNaWNyb09iamVjdCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRFcnJvckhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVFcnJvcihodHRwRXJyOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0RXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBtaWNyb0Vycm9yID0gTWljcm9DbGllbnQudG9NaWNyb0Vycm9yKGh0dHBFcnIpO1xuICAgICAgICAgICAgaWYgKG1pY3JvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWNyb1Jlc3VsdE9iajogTWljcm9PYmplY3QgPSA8TWljcm9PYmplY3Q+TWljcm9PYmplY3QuZnJvbU9iamVjdChodHRwRXJyLmVycm9yLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFcnJvckhhbmRsZXIoaHR0cEVyciwgbWljcm9SZXN1bHRPYmopO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFcnJvckhhbmRsZXIoaHR0cEVyciwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaWduaXRlPFQ+KFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgdXNlcm5hbWU6IFN0cmluZyA9IG51bGwsXG4gICAgICAgIHBhc3N3b3JkOiBTdHJpbmcgPSBudWxsLFxuICAgICAgICBoZWFkZXJzOiBvYmplY3QgPSB7fVxuICAgICk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAodGhpcy51cmxSZXdyaXRlcikge1xuICAgICAgICAgICAgdXJsID0gdGhpcy51cmxSZXdyaXRlcih1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcktleSkpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzLnNldChoZWFkZXJLZXksIGhlYWRlcnNbaGVhZGVyS2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlcm5hbWUgIT0gbnVsbCB8fCBwYXNzd29yZCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeVBvaW50ID0gTWljcm9PYmplY3QuZnJvbU9iamVjdCh2YWwsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW50cnlQb2ludChlbnRyeVBvaW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnlQb2ludCBhcyBUO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLmNhdGNoQW5kSGFuZGxlRXJyb3IoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkPFQ+KFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zPzogb2JqZWN0LFxuICAgICAgICByZXF1ZXN0T3B0aW9ucz86IG9iamVjdFxuICAgICk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0aEhlYWRlcikge1xuICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmF1dGhIZWFkZXIpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZW5kQXNQZXJtaXRUb2tlbkhlYWRlcikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnMuc2V0KCdNaWNyb1Blcm1pdFRva2VuJywgdGhpcy5wZXJtaXRUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb1BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgaWYgKHBhcmFtcyAhPSBudWxsIHx8IHRoaXMudXNlUG9zdCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbXNTdHIgPSBQYXJhbVV0aWxzLmdldFBhcmFtKHVybCwgJ29QYXJhbXMnLCB0cnVlKTtcbiAgICAgICAgICAgIGxldCBleGlzdGluZ1BhcmFtcztcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1BhcmFtc1N0cikge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUGFyYW1zID0gSlNPTi5wYXJzZShleGlzdGluZ1BhcmFtc1N0cik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvUGFyYW1zID0gT2JqZWN0LmFzc2lnbihleGlzdGluZ1BhcmFtcywgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XG4gICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAhPSBudWxsIHx8IHRoaXMudXNlUG9zdCkge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wdGlvbnNTdHIgPSBQYXJhbVV0aWxzLmdldFBhcmFtKHVybCwgJ29wdGlvbnMnLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChwcmV2T3B0aW9uc1N0cikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBKU09OLnBhcnNlKHByZXZPcHRpb25zU3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IFBhcmFtVXRpbHMuZ2V0UGFyYW1zKHVybCk7XG5cbiAgICAgICAgbGV0IGh0dHBPYnMgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy51c2VQb3N0KSB7XG5cbiAgICAgICAgICAgIGxldCBiT1BhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IGVuY0JPUGFyYW1zID0gcXVlcnlQYXJhbXNbJ2JPUGFyYW1zJ107XG4gICAgICAgICAgICBpZiAoZW5jQk9QYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBiT1BhcmFtcyA9IEpTT04ucGFyc2UoUGFyYW1VdGlscy5iYXNlNjRVcmxEZWNvZGUoZW5jQk9QYXJhbXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtc1sncGFyYW1zJ10sXG4gICAgICAgICAgICAgICAgb1BhcmFtczogb1BhcmFtcyxcbiAgICAgICAgICAgICAgICBiUGFyYW1zOiBxdWVyeVBhcmFtc1snYlBhcmFtcyddLFxuICAgICAgICAgICAgICAgIGJPUGFyYW1zOiBiT1BhcmFtcyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1snb1BhcmFtcyddO1xuICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zWydiUGFyYW1zJ107XG4gICAgICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNbJ2JPUGFyYW1zJ107XG4gICAgICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNbJ29wdGlvbnMnXTtcblxuICAgICAgICAgICAgdXJsID0gUGFyYW1VdGlscy5zZXRQYXJhbXModXJsLCBxdWVyeVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVybFJld3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy51cmxSZXdyaXRlcih1cmwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodHRwT2JzID0gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCB0aGlzLmVuY29kZUJvZHkoYm9keSksIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVyc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob1BhcmFtcykge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zWydvUGFyYW1zJ10gPSBQYXJhbVV0aWxzLmJhc2U2NFVybEVuY29kZShKU09OLnN0cmluZ2lmeShvUGFyYW1zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbJ29wdGlvbnMnXSA9IFBhcmFtVXRpbHMuYmFzZTY0VXJsRW5jb2RlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVybCA9IFBhcmFtVXRpbHMuc2V0UGFyYW1zKHVybCwgcXVlcnlQYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy51cmxSZXdyaXRlcikge1xuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMudXJsUmV3cml0ZXIodXJsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaHR0cE9icyA9IHRoaXMuaHR0cENsaWVudC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaHR0cE9icyA9IGh0dHBPYnMucGlwZShcbiAgICAgICAgICAgIG1hcCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBNaWNyb09iamVjdC5mcm9tT2JqZWN0KHZhbCwgdGhpcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hBbmRIYW5kbGVFcnJvcigpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPYnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmNvZGVCb2R5KGJvZHk6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnNlbmRBc011bHRpcGFydEZvcm1EYXRhKSB7XG4gICAgICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGxldCBwYXJhbUJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoYm9keSldLCB7dHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCJ9KVxuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCcqJywgcGFyYW1CbG9iKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXRjaEFuZEhhbmRsZUVycm9yPFQ+KCk6ICgoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9hZEVycm9yID0gbmV3IE1pY3JvQ2xpZW50TG9hZEVycm9yKGVyciwgKGVyclRvSGFuZGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyclRvSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGxvYWRFcnJvcikucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvYWRFcnJvci5zaG91bGRQcmV2ZW50RGVmYXVsdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRFcnJvci5oYW5kbGVEZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2hpbGRDbGllbnRGb3JFbnRyeVBvaW50KGVudHJ5UG9pbnQ6IE1pY3JvT2JqZWN0KTogTWljcm9DbGllbnQge1xuICAgICAgICBpZiAoZW50cnlQb2ludC5fX21ldGEgJiYgZW50cnlQb2ludC5fX21ldGEucGVybWl0VG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQ2xpZW50OiBNaWNyb0NsaWVudCA9IE9iamVjdC5jcmVhdGUodGhpcywge1xuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXV0aEhlYWRlcjoge1xuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwZXJtaXRUb2tlbjoge1xuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGlsZENsaWVudC5zZXRFbnRyeVBvaW50KGVudHJ5UG9pbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkQ2xpZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgdmFsdWUgY2FuXFwndCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIGNoaWxkIE1pY3JvQ2xpZW50IGJlY2F1c2UgaXQgZG9lc25cXCd0IGNvbnRhaW4gbWV0YWRhdGEgd2l0aCBhIHBlcm1pdFRva2VuICcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFVSTFJld3JpdGVyKHJld3JpdGVyOiAoc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51cmxSZXdyaXRlciA9IHJld3JpdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9NaWNyb0Vycm9yKGh0dHBSZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpOiBNaWNyb0Vycm9yIHtcbiAgICAgICAgY29uc3QgcmVzID0gaHR0cFJlc3BvbnNlLmVycm9yO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5fX21ldGEgJiYgcmVzLl9fbWV0YS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IE1pY3JvRXJyb3IoKSwgcmVzLl9fbWV0YS5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3RhdGljQ29udGVudFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ1thLXpBLVowLTldOi8vLiooOlswLTldKyk/KC8uKikqL3N0YXRpYygvLiooXFxcXD8uKik/KCMuKik/KT8nKTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ3Vlc3NNaWNyb0NvbXBvbmVudEJhc2VVUkwoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXG4gICAgICAgIC8vIExhc3QgVVJMLVNlZ2VtZW50IGlzIHN0YXRpY1xuICAgICAgICBpZiAoTWljcm9DbGllbnQuc3RhdGljQ29udGVudFJlZ0V4cC50ZXN0KGhyZWYpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHJlZi5yZXBsYWNlKG5ldyBSZWdFeHAoJy9zdGF0aWMvLionKSwgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgnLyMvLionKSwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5zdGFydHNXaXRoKCdmaWxlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJzo4MDgwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ3Vlc3NNaWNyb0NvbXBvbmVudEF1dGhvcml6ZVVSTCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5ndWVzc01pY3JvQ29tcG9uZW50QmFzZVVSTCgpICsgJy9hdXRob3JpemUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pY3JvQ2xpZW50TG9hZEVycm9yIHtcbiAgICBwcml2YXRlIGhhbmRsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGRvUHJldmVudERlZmF1bHQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXJyb3I6IGFueSwgcHJpdmF0ZSBkZWZhdWx0SGFuZGxlcjogKGVycjogYW55KSA9PiB2b2lkKSB7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRGVmYXVsdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEhhbmRsZXIodGhpcy5lcnJvcik7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUVycm9yKGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGhhbmRsZXIodGhpcy5lcnJvcik7XG4gICAgICAgIHRoaXMuaGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSGFuZGxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUHJldmVudERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvUHJldmVudERlZmF1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXZlbnREZWZhdWx0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvUHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNEZWZhdWx0SGFuZGxlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEhhbmRsZXIgIT0gbnVsbDtcbiAgICB9XG59XG4iXX0=
|