@libs-ui/services-base-request-abstract 0.2.351-0 → 0.2.352-1

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.
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { HttpClient, HttpStatusCode } from '@angular/common/http';
3
3
  import { inject } from '@angular/core';
4
- import { DEFAULT_START_PAGE_0, UtilsCache, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, endCodeUrl, get, getKeyCacheByArrayObject, isNil, md5, omitBy } from '@libs-ui/utils';
4
+ import { DEFAULT_START_PAGE_0, UtilsCache, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, endCodeUrl, get, getKeyCacheByArrayObject, isNil, md5, normalizeUrl, omitBy } from '@libs-ui/utils';
5
5
  import { defer, from, lastValueFrom, Observable, of } from 'rxjs';
6
6
  import { catchError, map, switchMap, tap } from 'rxjs/operators';
7
7
  export class LibsUiBaseRequestAbstractService {
@@ -16,14 +16,14 @@ export class LibsUiBaseRequestAbstractService {
16
16
  const observe = this.getObserveResponse(params);
17
17
  const resultCheckPageZero = this.checkStartPageIsZero(params);
18
18
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
19
- return this.http.get(result.url, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
19
+ return this.http.get(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
20
20
  }
21
21
  post(path, body, params) {
22
22
  params = UtilsHttpParamsRequestInstance(undefined, params);
23
23
  const observe = this.getObserveResponse(params);
24
24
  const resultCheckPageZero = this.checkStartPageIsZero(params);
25
25
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
26
- return this.http.post(result.url, body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
26
+ return this.http.post(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
27
27
  }
28
28
  postUrlEndCode(path, body, params) {
29
29
  params = UtilsHttpParamsRequestInstance(undefined, params);
@@ -31,21 +31,21 @@ export class LibsUiBaseRequestAbstractService {
31
31
  const resultCheckPageZero = this.checkStartPageIsZero(params);
32
32
  const bodyValue = endCodeUrl(body, true);
33
33
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
34
- return this.http.post(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
34
+ return this.http.post(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
35
35
  }
36
36
  put(path, body, params) {
37
37
  params = UtilsHttpParamsRequestInstance(undefined, params);
38
38
  const observe = this.getObserveResponse(params);
39
39
  const resultCheckPageZero = this.checkStartPageIsZero(params);
40
40
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
41
- return this.http.put(result.url, body, { ...this.getOptions(params), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
41
+ return this.http.put(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
42
42
  }
43
43
  patch(path, body, params) {
44
44
  params = UtilsHttpParamsRequestInstance(undefined, params);
45
45
  const observe = this.getObserveResponse(params);
46
46
  const resultCheckPageZero = this.checkStartPageIsZero(params);
47
47
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
48
- return this.http.patch(result.url, body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
48
+ return this.http.patch(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
49
49
  }
50
50
  patchUrlEndCode(path, body, params) {
51
51
  params = UtilsHttpParamsRequestInstance(undefined, params);
@@ -53,14 +53,14 @@ export class LibsUiBaseRequestAbstractService {
53
53
  const resultCheckPageZero = this.checkStartPageIsZero(params);
54
54
  const bodyValue = endCodeUrl(body, true);
55
55
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
56
- return this.http.patch(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
56
+ return this.http.patch(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
57
57
  }
58
58
  delete(path, params) {
59
59
  params = UtilsHttpParamsRequestInstance(undefined, params);
60
60
  const observe = this.getObserveResponse(params);
61
61
  const resultCheckPageZero = this.checkStartPageIsZero(params);
62
62
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
63
- return this.http.delete(result.url, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
63
+ return this.http.delete(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
64
64
  }
65
65
  sendWithFile(path, params, argumentsValue) {
66
66
  const { method, keepFileOfBody, keepArrayValue, processUpload } = argumentsValue;
@@ -68,7 +68,7 @@ export class LibsUiBaseRequestAbstractService {
68
68
  params = UtilsHttpParamsRequestInstance(undefined, params);
69
69
  const resultCheckPageZero = this.checkStartPageIsZero(params);
70
70
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, resultCheckPageZero.params);
71
- const url = result.url;
71
+ const url = normalizeUrl(result.url);
72
72
  const options = this.getOptions(result.params);
73
73
  return new Observable((observer) => {
74
74
  const formData = argumentsValue.bodyData instanceof FormData ? argumentsValue.bodyData : new FormData();
@@ -327,4 +327,4 @@ export class LibsUiBaseRequestAbstractService {
327
327
  return this.observeResponse;
328
328
  }
329
329
  }
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXF1ZXN0LWFic3RyYWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2Jhc2UtcmVxdWVzdC1hYnN0cmFjdC9zcmMvYmFzZS1yZXF1ZXN0LWFic3RyYWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQThDLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekwsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2pFLE1BQU0sT0FBZ0IsZ0NBQWdDO0lBQzFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxPQUFPLENBQVU7SUFDakIsaUJBQWlCLENBQVc7SUFDNUIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBMEIsTUFBTSxDQUFDO0lBTTFELEdBQUcsQ0FBaUMsSUFBWSxFQUFFLE1BQTJDO1FBQzNGLE1BQU0sR0FBRyw4QkFBOEIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtC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SSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9DLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBbUM7UUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxxQkFBcUIsS0FBSyxVQUFVLElBQUkscUJBQXFCLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDN0UsT0FBTyxxQkFBOEMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElIdHRwUHJvY2Vzc1VwbG9hZCwgSUh0dHBSZXNwb25zZSwgSVBhZ2luZywgVFlQRV9PQkpFQ1QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IERFRkFVTFRfU1RBUlRfUEFHRV8wLCBVdGlsc0NhY2hlLCBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0LCBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0SW5zdGFuY2UsIGVuZENvZGVVcmwsIGdldCwgZ2V0S2V5Q2FjaGVCeUFycmF5T2JqZWN0LCBpc05pbCwgbWQ1LCBvbWl0QnkgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBkZWZlciwgZnJvbSwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcy9pbnRlcm5hbC90eXBlcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xudHlwZSBUWVBFX01FVEhPRCA9ICdQT1NUJyB8ICdQQVRDSCcgfCAnUFVUJztcblxuZXhwb3J0IHR5cGUgVFlQRV9PQlNFUlZFX1JFU1BPTlNFID0gJ3Jlc3BvbnNlJyB8ICdib2R5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpYnNVaUJhc2VSZXF1ZXN0QWJzdHJhY3RTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGtleUNhY2hlVW5pcXVlQnlJZFVzZXJMb2dpbiA9ICcnO1xuICBwcm90ZWN0ZWQgYmFzZVVybCE6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlnbm9yZVJlZGlyZWN0NDAxPzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByb3RlY3RlZCBpc1N0YXJ0WmVyb1BhZ2UgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG9ic2VydmVSZXNwb25zZTogVFlQRV9PQlNFUlZFX1JFU1BPTlNFID0gJ2JvZHknO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRPcHRpb25zPFR5cGVQYXJhbXM+KGh0dHBQYXJhbXM6IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4sIGNvbnRlbnRUeXBlPzogc3RyaW5nKTogeyBoZWFkZXJzOiBIdHRwSGVhZGVyczsgcGFyYW1zOiBIdHRwUGFyYW1zIH07XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWRpcmVjdFRvTG9naW4oKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4odXJsOiBzdHJpbmcsIHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPik6IHsgdXJsOiBzdHJpbmc7IHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPiB9O1xuXG4gIGdldDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnk+KHBhdGg6IHN0cmluZywgcGFyYW1zPzogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPikge1xuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IHRoaXMuZ2V0T2JzZXJ2ZVJlc3BvbnNlKHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4oYCR7dGhpcy5iYXNlVXJsfSR7cGF0aCA/IHBhdGggOiAnJ31gLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PihyZXN1bHQudXJsLCB7IC4uLnRoaXMuZ2V0T3B0aW9ucyhwYXJhbXMpLCBvYnNlcnZlOiBvYnNlcnZlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgcG9zdDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnksIFR5cGVCb2R5ID0gYW55PihwYXRoOiBzdHJpbmcsIGJvZHk6IFR5cGVCb2R5LCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PihyZXN1bHQudXJsLCBib2R5LCB7IC4uLnRoaXMuZ2V0T3B0aW9ucyhwYXJhbXMpLCBvYnNlcnZlOiBvYnNlcnZlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgcG9zdFVybEVuZENvZGU8VHlwZVJlc3BvbnNlLCBUeXBlUGFyYW1zID0gYW55LCBUeXBlQm9keSA9IGFueT4ocGF0aDogc3RyaW5nLCBib2R5OiBUeXBlQm9keSwgcGFyYW1zPzogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPikge1xuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IHRoaXMuZ2V0T2JzZXJ2ZVJlc3BvbnNlKHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcbiAgICBjb25zdCBib2R5VmFsdWUgPSBlbmRDb2RlVXJsKGJvZHkgYXMgVFlQRV9PQkpFQ1QsIHRydWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PihyZXN1bHQudXJsLCBib2R5VmFsdWUsIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpLCBvYnNlcnZlOiB0aGlzLm9ic2VydmVSZXNwb25zZSB9IGFzIGFueSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCBvYnNlcnZlKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4gdGhpcy5oYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHB1dDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnksIFR5cGVCb2R5ID0gYW55PihwYXRoOiBzdHJpbmcsIGJvZHk6IFR5cGVCb2R5LCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KHJlc3VsdC51cmwsIGJvZHksIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcyksIG9ic2VydmU6IHRoaXMub2JzZXJ2ZVJlc3BvbnNlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgcGF0Y2g8VHlwZVJlc3BvbnNlLCBUeXBlUGFyYW1zID0gYW55PihwYXRoOiBzdHJpbmcsIGJvZHk6IHVua25vd24sIHBhcmFtcz86IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4pIHtcbiAgICBwYXJhbXMgPSBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0SW5zdGFuY2UodW5kZWZpbmVkLCBwYXJhbXMpO1xuICAgIGNvbnN0IG9ic2VydmUgPSB0aGlzLmdldE9ic2VydmVSZXNwb25zZShwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdENoZWNrUGFnZVplcm8gPSB0aGlzLmNoZWNrU3RhcnRQYWdlSXNaZXJvPFR5cGVQYXJhbXM+KHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZXBsYWNlVVJMQnlQYXR0ZXJuPFR5cGVQYXJhbXM+KGAke3RoaXMuYmFzZVVybH0ke3BhdGggPyBwYXRoIDogJyd9YCwgcGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PihyZXN1bHQudXJsLCBib2R5LCB7IC4uLnRoaXMuZ2V0T3B0aW9ucyhwYXJhbXMpLCBvYnNlcnZlOiBvYnNlcnZlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgcGF0Y2hVcmxFbmRDb2RlPFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueT4ocGF0aDogc3RyaW5nLCBib2R5OiB1bmtub3duLCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IGJvZHlWYWx1ZSA9IGVuZENvZGVVcmwoYm9keSBhcyBUWVBFX09CSkVDVCwgdHJ1ZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZXBsYWNlVVJMQnlQYXR0ZXJuPFR5cGVQYXJhbXM+KGAke3RoaXMuYmFzZVVybH0ke3BhdGggPyBwYXRoIDogJyd9YCwgcGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PihyZXN1bHQudXJsLCBib2R5VmFsdWUsIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpLCBvYnNlcnZlOiBvYnNlcnZlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlPFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueT4ocGF0aDogc3RyaW5nLCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KHJlc3VsdC51cmwsIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcyksIG9ic2VydmU6IG9ic2VydmUgfSBhcyBhbnkpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB0aGlzLmhhbmRsZXJSZXNwb25zZTxUeXBlUmVzcG9uc2U+KHJlcywgcmVzdWx0Q2hlY2tQYWdlWmVyby5pc1N0YXJ0WmVybywgb2JzZXJ2ZSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHRoaXMuaGFuZGxlckNhdGNoRXJyb3I8VHlwZVJlc3BvbnNlPihlcnIpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VuZFdpdGhGaWxlPFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueSwgVHlwZUJvZHkgPSBhbnk+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXJhbXM6IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4sXG4gICAgYXJndW1lbnRzVmFsdWU6IHsgbWV0aG9kOiBUWVBFX01FVEhPRDsgYm9keURhdGE6IFR5cGVCb2R5OyBrZWVwRmlsZU9mQm9keT86IGJvb2xlYW47IGtlZXBBcnJheVZhbHVlPzogYm9vbGVhbjsgcHJvY2Vzc1VwbG9hZD86IChwcm9jZXNzOiBJSHR0cFByb2Nlc3NVcGxvYWQpID0+IHZvaWQgfVxuICApOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHsgbWV0aG9kLCBrZWVwRmlsZU9mQm9keSwga2VlcEFycmF5VmFsdWUsIHByb2Nlc3NVcGxvYWQgfSA9IGFyZ3VtZW50c1ZhbHVlO1xuICAgIGNvbnN0IGJvZHlEYXRhID0gb21pdEJ5PFJlY29yZDxzdHJpbmcsIGFueT4+KGFyZ3VtZW50c1ZhbHVlLmJvZHlEYXRhIGFzIGFueSwgKGRhdGFJdGVtOiBhbnkpID0+IGlzTmlsKGRhdGFJdGVtKSk7XG5cbiAgICBwYXJhbXMgPSBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0SW5zdGFuY2UodW5kZWZpbmVkLCBwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdENoZWNrUGFnZVplcm8gPSB0aGlzLmNoZWNrU3RhcnRQYWdlSXNaZXJvPFR5cGVQYXJhbXM+KHBhcmFtcyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4oYCR7dGhpcy5iYXNlVXJsfSR7cGF0aCA/IHBhdGggOiAnJ31gLCByZXN1bHRDaGVja1BhZ2VaZXJvLnBhcmFtcyk7XG4gICAgY29uc3QgdXJsID0gcmVzdWx0LnVybDtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHJlc3VsdC5wYXJhbXMpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PikgPT4ge1xuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gYXJndW1lbnRzVmFsdWUuYm9keURhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSA/IGFyZ3VtZW50c1ZhbHVlLmJvZHlEYXRhIDogbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICBjb25zdCBwYXJhbXNTdHIgPSBvcHRpb25zLnBhcmFtcy50b1N0cmluZygpO1xuICAgICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcblxuICAgICAgaWYgKHByb2Nlc3NVcGxvYWQpIHtcbiAgICAgICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0gKGUpID0+IHtcbiAgICAgICAgICBwcm9jZXNzVXBsb2FkKHtcbiAgICAgICAgICAgIGxvYWRlZDogZS5sb2FkZWQsXG4gICAgICAgICAgICB0b3RhbDogZS50b3RhbCxcbiAgICAgICAgICAgIHBlcmNlbnQ6IChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIShhcmd1bWVudHNWYWx1ZS5ib2R5RGF0YSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGJvZHlEYXRhKSB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRSZWN1cnNpdmUoZm9ybURhdGEsIGJvZHlEYXRhW3Byb3BlcnR5XSwgcHJvcGVydHksIGtlZXBGaWxlT2ZCb2R5LCBrZWVwQXJyYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHhoci5vcGVuKG1ldGhvZCwgYCR7dXJsfSR7cGFyYW1zU3RyID8gYD8ke3BhcmFtc1N0cn1gIDogJyd9YCwgdHJ1ZSk7XG4gICAgICBoZWFkZXJzLmtleXMoKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkgIT09ICdjb250ZW50LXR5cGUnICYmIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVycy5nZXQoa2V5KSB8fCAnJykpO1xuICAgICAgeGhyLnNlbmQoZm9ybURhdGEpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4odGhpcy5jb252ZXJ0UmVzcG9uc2VYSFI8VHlwZVJlc3BvbnNlPih4aHIpLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCAnYm9keScpKTtcblxuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHRoaXMuY29udmVydFJlc3BvbnNlWEhSPFR5cGVSZXNwb25zZT4oeGhyKSk7XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZWN1cnNpdmU8VHlwZUJvZHk+KGZEYXRhOiBGb3JtRGF0YSwgZGF0YTogVHlwZUJvZHksIHByb3A6IHN0cmluZywga2VlcEZpbGVPZkJvZHk/OiBib29sZWFuLCBrZWVwQXJyYXlWYWx1ZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoa2VlcEZpbGVPZkJvZHkpIHtcbiAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRmlsZSB8fCBkYXRhIGluc3RhbmNlb2YgQmxvYiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEZpbGVdJykge1xuICAgICAgICB0aGlzLmFwcGVuZEZpbGVUb0Zvcm1EYXRhKGZEYXRhLCBwcm9wLCBkYXRhIGFzIEZpbGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0YS5sZW5ndGggJiYgZGF0YVswXSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmFwcGVuZEZpbGVUb0Zvcm1EYXRhKGZEYXRhLCBwcm9wLCBmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtlZXBBcnJheVZhbHVlICYmIGRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZkRhdGEuYXBwZW5kKHByb3AsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiBkYXRhKSB7XG4gICAgICBmRGF0YS5hcHBlbmQocHJvcCwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZEYXRhLmFwcGVuZChwcm9wLCBkYXRhIGFzIGFueSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZEZpbGVUb0Zvcm1EYXRhKGZvcm1EYXRhOiBGb3JtRGF0YSwgcHJvcDogc3RyaW5nLCBmaWxlOiBGaWxlKSB7XG4gICAgZm9ybURhdGEuYXBwZW5kKHByb3AsIGZpbGUsIGZpbGUubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSZXNwb25zZVhIUjxUeXBlUmVzcG9uc2U+KF94aHI6IFhNTEh0dHBSZXF1ZXN0KTogSUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+IHtcbiAgICBjb25zdCBYU1NJX1BSRUZJWCA9IC9eXFwpXFxdXFx9Jyw/XFxuLztcbiAgICBsZXQgY29kZTogbnVtYmVyID0gX3hoci5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiBfeGhyLnN0YXR1cztcbiAgICBsZXQgbWVzc2FnZSA9IF94aHIuc3RhdHVzVGV4dDtcbiAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcblxuICAgIGlmIChjb2RlICE9PSAyMDQpIHtcbiAgICAgIGRhdGEgPSB0eXBlb2YgX3hoci5yZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcgPyBfeGhyLnJlc3BvbnNlVGV4dCA6IF94aHIucmVzcG9uc2U7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoWFNTSV9QUkVGSVgsICcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgY29kZSA9IGRhdGEgPyAyMDAgOiAwO1xuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBjb2RlID0gZGF0YS5jb2RlID8/IDIwMDtcbiAgICAgIG1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgbWVzc2FnZTtcbiAgICB9XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZSA/PyAnT0snO1xuXG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgY29kZSwgbWVzc2FnZSB9O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3BvbnNlVVJMKHhocjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoJ3Jlc3BvbnNlVVJMJyBpbiB4aHIpIHtcbiAgICAgIHJldHVybiB4aHIucmVzcG9uc2VVUkw7XG4gICAgfVxuICAgIGlmICgvXlgtUmVxdWVzdC1VUkw6L20udGVzdCh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKSB7XG4gICAgICByZXR1cm4geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdYLVJlcXVlc3QtVVJMJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrU3RhcnRQYWdlSXNaZXJvPFR5cGVQYXJhbXM+KHBhcmFtcz86IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4pOiB7IHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPjsgaXNTdGFydFplcm86IGJvb2xlYW4gfSB7XG4gICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgIHJldHVybiB7IHBhcmFtczogbmV3IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QoKSwgaXNTdGFydFplcm86IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGFzKERFRkFVTFRfU1RBUlRfUEFHRV8wKSB8fCB0aGlzLmlzU3RhcnRaZXJvUGFnZSkge1xuICAgICAgcGFyYW1zLmRlbGV0ZShERUZBVUxUX1NUQVJUX1BBR0VfMCk7XG4gICAgICBjb25zdCBwYWdlID0gcGFyYW1zLmdldCgncGFnZScpID8gTnVtYmVyKHBhcmFtcy5nZXQoJ3BhZ2UnKSkgOiAtMTtcblxuICAgICAgaWYgKGlzTmlsKHBhZ2UpIHx8IHBhZ2UgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zLCBpc1N0YXJ0WmVybzogZmFsc2UgfTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5zZXQoJ3BhZ2UnLCBwYWdlIC0gMSk7XG5cbiAgICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zLCBpc1N0YXJ0WmVybzogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zLCBpc1N0YXJ0WmVybzogZmFsc2UgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXM6IGFueSwgaXNQYWdlU3RhcnRaZXJvOiBib29sZWFuLCBvYnNlcnZlOiAncmVzcG9uc2UnIHwgJ2JvZHknKTogSUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXNDb252ZXJ0OiBhbnkgPSB7XG4gICAgICBjb2RlOiAyMDAsXG4gICAgfTtcbiAgICBpZiAob2JzZXJ2ZSA9PT0gJ3Jlc3BvbnNlJykge1xuICAgICAgcmVzQ29udmVydC5zdGF0dXNDb2RlSHR0cCA9IHJlcy5zdGF0dXM7XG4gICAgICByZXMgPSByZXMuYm9keTtcbiAgICB9XG4gICAgcmVzQ29udmVydC5tZXNzYWdlID0gZ2V0KHJlcywgJ21lc3NhZ2UnKTtcbiAgICBjb25zdCBjb2RlID0gZ2V0KHJlcywgJ2NvZGUnLCAyMDApO1xuICAgIGlmIChgJHtjb2RlfWAgIT09ICcyMDAnICYmIGAke2NvZGV9YCAhPT0gJzAwMScpIHtcbiAgICAgIHJlc0NvbnZlcnQuZmVDbG9uZUNvZGUgPSBjb2RlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzICE9PSAnb2JqZWN0JyB8fCByZXMgPT09IG51bGwpIHtcbiAgICAgIHJlc0NvbnZlcnRbJ2RhdGEnXSA9IHJlcztcbiAgICAgIHJldHVybiByZXNDb252ZXJ0O1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luZzogSVBhZ2luZyA9IHtcbiAgICAgIHBhZ2U6IGdldChyZXMsICdwYWdpbmcucGFnZScpIHx8IGdldChyZXMsICdwYWdlJykgfHwgMCxcbiAgICAgIHBlcl9wYWdlOiBnZXQocmVzLCAncGFnaW5nLnBlcl9wYWdlJykgfHwgZ2V0KHJlcywgJ3NpemUnKSB8fCAwLFxuICAgICAgdG90YWxfaXRlbXM6IGdldChyZXMsICdwYWdpbmcudG90YWxfaXRlbXMnKSB8fCBnZXQocmVzLCAncGFnaW5nLnRvdGFsX2NvdW50JykgfHwgZ2V0KHJlcywgJ3BhZ2luZy50b3RhbF9pdGVtJykgfHwgZ2V0KHJlcywgJ3RvdGFsRWxlbWVudHMnKSB8fCAwLFxuICAgICAgdG90YWxfcGFnZXM6IGdldChyZXMsICdwYWdpbmcudG90YWxfcGFnZXMnKSB8fCBnZXQocmVzLCAncGFnaW5nLnRvdGFsX3BhZ2UnKSB8fCBnZXQocmVzLCAncGFnaW5nLnBhZ2VfY291bnQnKSB8fCBnZXQocmVzLCAncGFnaW5nLnBhZ2VfY291bnQnKSB8fCBnZXQocmVzLCAndG90YWxQYWdlcycpIHx8IDAsXG4gICAgICBiZWZvcmU6IGdldChyZXMsICdwYWdpbmcuY3Vyc29ycy5iZWZvcmUnKSB8fCBnZXQocmVzLCAncGFnaW5nLmJlZm9yZScpIHx8IGdldChyZXMsICdjdXJzb3JzLmJlZm9yZScpIHx8IGdldChyZXMsICdwYWdpbmcuYmVmb3JlX3Rva2VuJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5jdXJzb3JzLmJlZm9yZV90b2tlbicpLFxuICAgICAgYWZ0ZXI6IGdldChyZXMsICdwYWdpbmcuY3Vyc29ycy5hZnRlcicpIHx8IGdldChyZXMsICdwYWdpbmcuYWZ0ZXInKSB8fCBnZXQocmVzLCAnY3Vyc29ycy5hZnRlcicpIHx8IGdldChyZXMsICdwYWdpbmcuYWZ0ZXJfdG9rZW4nKSB8fCBnZXQocmVzLCAncGFnaW5nLmN1cnNvcnMuYWZ0ZXJfdG9rZW4nKSxcbiAgICAgIHByZXZpb3VzOiBnZXQocmVzLCAncGFnaW5nLnByZXZpb3VzJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5jdXJzb3JzLnByZXZpb3VzJykgfHwgZ2V0KHJlcywgJ2N1cnNvcnMucHJldmlvdXMnKSxcbiAgICAgIG5leHQ6IGdldChyZXMsICdwYWdpbmcubmV4dCcpIHx8IGdldChyZXMsICdwYWdpbmcubmV4dF9wYWdlJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5jdXJzb3JzLm5leHQnKSB8fCBnZXQocmVzLCAnY3Vyc29ycy5uZXh0JyksXG4gICAgfTtcbiAgICBjb25zdCBrZXlzUGFnaW5nID0gT2JqZWN0LmtleXMocGFnaW5nKTtcblxuICAgIGtleXNQYWdpbmcuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc05pbCgocGFnaW5nIGFzIGFueSlba2V5XSkpIHtcbiAgICAgICAgZGVsZXRlIChwYWdpbmcgYXMgYW55KVtrZXldO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhwYWdpbmcpLmxlbmd0aCkge1xuICAgICAgaWYgKGlzUGFnZVN0YXJ0WmVybyAmJiAhaXNOaWwocGFnaW5nLnBhZ2UpKSB7XG4gICAgICAgIHBhZ2luZy5wYWdlICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAocGFnaW5nLnRvdGFsX2l0ZW1zICYmIHBhZ2luZy5wYWdlICYmIHBhZ2luZy5wZXJfcGFnZSAmJiBwYWdpbmcucGFnZSAqIHBhZ2luZy5wZXJfcGFnZSA+PSBwYWdpbmcudG90YWxfaXRlbXMpIHtcbiAgICAgICAgcGFnaW5nLnRvdGFsX3BhZ2VzID0gcGFnaW5nLnBhZ2U7XG4gICAgICB9XG4gICAgICBpZiAocmVzQ29udmVydC5kYXRhIGluc3RhbmNlb2YgQXJyYXkgJiYgIXJlc0NvbnZlcnQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgcGFnaW5nLnRvdGFsX3BhZ2VzID0gcGFnaW5nLnBhZ2UgfHwgMDtcbiAgICAgIH1cbiAgICAgIHJlc0NvbnZlcnQucGFnaW5nID0gcGFnaW5nO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZERlbGV0ZSA9IFsnY29kZScsICdtZXNzYWdlJywgJ3BhZ2luZycsICd0b3RhbEVsZW1lbnRzJywgJ3NpemUnLCAndG90YWxQYWdlcycsICdwYWdlJ107XG5cbiAgICBmaWVsZERlbGV0ZS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCFpc05pbChyZXNbZmllbGRdKSkge1xuICAgICAgICBkZWxldGUgcmVzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBmaWVsZE5vdE1lcmdlVG9EYXRhID0gWydsYW5nJ107XG5cbiAgICBmaWVsZE5vdE1lcmdlVG9EYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIWlzTmlsKHJlc1tmaWVsZF0pKSB7XG4gICAgICAgIHJlc0NvbnZlcnRbZmllbGRdID0gcmVzW2ZpZWxkXTtcbiAgICAgICAgZGVsZXRlIHJlc1tmaWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlcyk7XG5cbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJlc0NvbnZlcnQuZGF0YSA9IGtleXNbMF0gPT09ICcwJyA/IHJlcyA6IHJlc1trZXlzWzBdXTtcbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIGlzTmlsKHJlcy5kYXRhKSA/IChyZXNDb252ZXJ0LmRhdGEgPSByZXMpIDogT2JqZWN0LmFzc2lnbihyZXNDb252ZXJ0LCByZXMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNDb252ZXJ0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PiB7XG4gICAgaWYgKGVyci5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCAmJiAhdGhpcy5pZ25vcmVSZWRpcmVjdDQwMSkge1xuICAgICAgdGhpcy5yZWRpcmVjdFRvTG9naW4oKTtcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IGdldDxhbnk+KGVyciwgJ2Vycm9yLmNvZGUnLCBnZXQ8YW55PihlcnIsICdzdGF0dXMnLCAwIGFzIGFueSkpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjb2RlID49IDEwMCAmJiBjb2RlIDwgNTAwID8gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ2kxOG5fYWxlcnRfY29ubmVjdF9zZXJ2ZXJfZXJyb3InIDogJ2kxOG5fYWxlcnRfY29ubmVjdF9zZXJ2ZXJfZXJyb3InO1xuICAgIGNvbnN0IGRhdGEgPSBnZXQ8YW55PihlcnIsICdlcnJvci5kYXRhJywgJycgYXMgYW55KTtcblxuICAgIHRocm93IHsgY29kZTogY29kZSA+PSAxMDAgJiYgY29kZSA8IDUwMCA/IGNvZGUgOiA1MDAsIG1lc3NhZ2UsIHN1Yk1lc3NhZ2U6IGdldDxhbnk+KGVyciwgJ2Vycm9yLmVycm9ycycsIGdldDxhbnk+KGVyciwgJ2Vycm9ycycpKSwgZGF0YTogZGF0YSwgcm9vdEVycm9yOiBlcnIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMxrB1IHRy4buvIGThu68gbGnhu4d1IHBo4bqjbiBo4buTaSB2w6BvIGNhY2hlLlxuICAgKiBAcGFyYW0gb2JzZXJ2YWJsZSAtIE9ic2VydmFibGUgY+G7p2EgcGjhuqNuIGjhu5NpIEhUVFAuXG4gICAqIEBwYXJhbSBrZXkgLSBLaMOzYSBjYWNoZS5MxrB1IMO9IGtow7RuZyBtZDUga2V5IHRyxrDhu5tjIGtoaSB0cnV54buBbiB2w6BvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBDw6FjIHRoYW0gc+G7kSDEkeG7gyB04bqhbyBraMOzYSBjYWNoZS5cbiAgICogQHBhcmFtIHRpbWVDYWNoZSAtIFRo4budaSBnaWFuIGzGsHUgdHLhu68gY2FjaGUgKG3hurdjIMSR4buLbmggbMOgIENBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQpLlxuICAgKiBAcGFyYW0gcmVsb2FkQ2FjaGUgLSBO4bq/dSB0cnVlLCBsdcO0biBn4buNaSDEkeG7gyBs4bqleSBnacOhIHRy4buLIG3hu5tpLiBnacOhIHRy4buLIG7DoHkgY8OzIMSR4buDIHPhu60gZOG7pW5nIHbhu5tpIGPDoWMgbmdoaeG7h3AgduG7pSBn4buNaSBsdcO0biBsdcO0biBs4bqleSBk4buvIGxp4buHdSBt4bubaSBuaOG6pXRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBj4bunYSBwaOG6o24gaOG7k2kgSFRUUCDEkcOjIMSRxrDhu6NjIGNhY2hlLlxuICAgKi9cbiAgcHVibGljIGNhY2hlSW5kZXhEQjxUPihvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VD4+LCBrZXk6IHN0cmluZywgcGFyYW1zOiBBcnJheTxhbnk+LCB0aW1lQ2FjaGUgPSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQsIHJlbG9hZENhY2hlID0gZmFsc2UpOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zTm9ybWFsaXplID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gWy4uLnBhcmFtc10gOiBbcGFyYW1zXTtcbiAgICAgIHBhcmFtc05vcm1hbGl6ZS5wdXNoKHRoaXMua2V5Q2FjaGVVbmlxdWVCeUlkVXNlckxvZ2luKTtcbiAgICAgIGNvbnN0IGtleUNhY2hlID0gZ2V0S2V5Q2FjaGVCeUFycmF5T2JqZWN0KGtleSwgcGFyYW1zTm9ybWFsaXplKTtcblxuICAgICAgY29uc3QgZGVsZXRlQ2FjaGUkID0gcmVsb2FkQ2FjaGUgPyBmcm9tKHRoaXMuZGVsZXRlQ2FjaGVLZXlTdGFydFdpZHRoKGtleSkpIDogb2YobnVsbCk7XG5cbiAgICAgIHJldHVybiBkZWxldGVDYWNoZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb20oVXRpbHNDYWNoZS5HZXRBc3luYyhrZXlDYWNoZSwgdW5kZWZpbmVkLCB0cnVlKSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGRhdGEgYXMgSUh0dHBSZXNwb25zZTxUPik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBMxrB1IGNhY2hlIGNobyBr4bq/dCBxdeG6oyBo4bujcCBs4buHXG4gICAgICAgICAgICAgICAgVXRpbHNDYWNoZS5TZXRBc3luYyhrZXlDYWNoZSwgcmVzdWx0LCB0aW1lQ2FjaGUsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEzGsHUgdHLhu68gZOG7ryBsaeG7h3UgcGjhuqNuIGjhu5NpIHbDoG8gY2FjaGUuXG4gICAqIEBkZXByZWNhdGVkIHPhu60gZOG7pW5nIGBgYGNhY2hlSW5kZXhEQmBgYCBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGNhY2hlUmVzcG9uc2VEYXRhPFQ+KG9ic2VydmFibGU6IE9ic2VydmFibGU8SUh0dHBSZXNwb25zZTxUPj4sIGtleTogc3RyaW5nLCBwYXJhbXM6IEFycmF5PGFueT4sIHRpbWVDYWNoZSA9IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX1RJTUVfREVGQVVMVCwgcmVsb2FkQ2FjaGUgPSBmYWxzZSk6IE9ic2VydmFibGU8SUh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMucHJvbWlzZUNhY2hlUmVzcG9uc2VEYXRhKG9ic2VydmFibGUsIGtleSwgcGFyYW1zLCB0aW1lQ2FjaGUsIHJlbG9hZENhY2hlKSk7XG4gIH1cblxuICAvKipcbiAgICogWMOzYSBjw6FjIGtow7NhIGNhY2hlIGLhuq90IMSR4bqndSB24bubaSBt4buZdCBjaHXhu5dpIG5o4bqldCDEkeG7i25oLlxuICAgKiBMxrB1IMO9OiBraMO0bmcgbWQ1IGtleSB0csaw4bubYyBraGkgdHJ1eeG7gW4gdsOgby5cbiAgICogU+G7rSBk4bulbmcgaMOgbSBuw6B5IHRyb25nIGPDoWMgdHLGsOG7nW5nIGjhu6NwIG5oxrAgZ+G7jWkgQVBJIHVwZGF0ZSBob+G6t2MgeMOzYSBk4buvIGxp4buHdSxraGkgxJHDsyBj4bqnbiB4w7NhIGNhY2hlIMSRaSDEkeG7gyBraGkgZ+G7jWkgZGFuaCBzw6FjaCBz4bq9IGzhuqV5IMSRxrDhu6NjIGdpw6EgdHLhu4sgbeG7m2kgbmjhuqV0LlxuICAgKiBAcGFyYW0ga2V5IC0gQ2h14buXaSBraMOzYSBjYWNoZSBj4bqnbiB4w7NhLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUNhY2hlS2V5U3RhcnRXaWR0aChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCBVdGlsc0NhY2hlLkRlbGV0ZUtleVN0YXJ0V2l0aEFzeW5jKG1kNShrZXkpLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvbWlzZUNhY2hlUmVzcG9uc2VEYXRhPFQ+KG9ic2VydmFibGU6IE9ic2VydmFibGU8SUh0dHBSZXNwb25zZTxUPj4sIGtleTogc3RyaW5nLCBwYXJhbXM6IEFycmF5PGFueT4sIHRpbWVDYWNoZSA9IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX1RJTUVfREVGQVVMVCwgcmVsb2FkQ2FjaGUgPSBmYWxzZSk6IFByb21pc2U8SUh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHBhcmFtcyA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtcyA6IFtwYXJhbXNdO1xuICAgIHBhcmFtcy5wdXNoKHRoaXMua2V5Q2FjaGVVbmlxdWVCeUlkVXNlckxvZ2luKTtcblxuICAgIGNvbnN0IGtleUNhY2hlID0gZ2V0S2V5Q2FjaGVCeUFycmF5T2JqZWN0KGtleSwgcGFyYW1zKTtcbiAgICBpZiAocmVsb2FkQ2FjaGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ2FjaGVLZXlTdGFydFdpZHRoKGtleSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBVdGlsc0NhY2hlLkdldEFzeW5jKGtleUNhY2hlLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKG9ic2VydmFibGUpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgVXRpbHNDYWNoZS5TZXRBc3luYyhrZXlDYWNoZSwgcmVzdWx0LCB0aW1lQ2FjaGUsIHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldE9ic2VydmVSZXNwb25zZShwYXJhbXM6IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8YW55Pik6IFRZUEVfT0JTRVJWRV9SRVNQT05TRSB7XG4gICAgY29uc3Qgb2JzZXJ2ZVJlc3BvbnNlUGFyYW1zID0gcGFyYW1zLmdldCgnb2JzZXJ2ZVJlc3BvbnNlJyk7XG4gICAgaWYgKG9ic2VydmVSZXNwb25zZVBhcmFtcykge1xuICAgICAgcGFyYW1zLmRlbGV0ZSgnb2JzZXJ2ZVJlc3BvbnNlJyk7XG4gICAgfVxuICAgIGlmIChvYnNlcnZlUmVzcG9uc2VQYXJhbXMgPT09ICdyZXNwb25zZScgfHwgb2JzZXJ2ZVJlc3BvbnNlUGFyYW1zID09PSAnYm9keScpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlUmVzcG9uc2VQYXJhbXMgYXMgVFlQRV9PQlNFUlZFX1JFU1BPTlNFO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlUmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXF1ZXN0LWFic3RyYWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2Jhc2UtcmVxdWVzdC1hYnN0cmFjdC9zcmMvYmFzZS1yZXF1ZXN0LWFic3RyYWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQThDLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZNLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtqRSxNQUFNLE9BQWdCLGdDQUFnQztJQUMxQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFDakMsT0FBTyxDQUFVO0lBQ2pCLGlCQUFpQixDQUFXO0lBQzVCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixlQUFlLEdBQTBCLE1BQU0sQ0FBQztJQU0xRCxHQUFHLENBQWlDLElBQVksRUFBRSxNQUEyQztRQUMzRixNQUFNLEdBQUcsOEJBQThCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLElB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cmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSHR0cFByb2Nlc3NVcGxvYWQsIElIdHRwUmVzcG9uc2UsIElQYWdpbmcsIFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBERUZBVUxUX1NUQVJUX1BBR0VfMCwgVXRpbHNDYWNoZSwgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCwgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlLCBlbmRDb2RlVXJsLCBnZXQsIGdldEtleUNhY2hlQnlBcnJheU9iamVjdCwgaXNOaWwsIG1kNSwgbm9ybWFsaXplVXJsLCBvbWl0QnkgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBkZWZlciwgZnJvbSwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcy9pbnRlcm5hbC90eXBlcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xudHlwZSBUWVBFX01FVEhPRCA9ICdQT1NUJyB8ICdQQVRDSCcgfCAnUFVUJztcblxuZXhwb3J0IHR5cGUgVFlQRV9PQlNFUlZFX1JFU1BPTlNFID0gJ3Jlc3BvbnNlJyB8ICdib2R5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpYnNVaUJhc2VSZXF1ZXN0QWJzdHJhY3RTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGtleUNhY2hlVW5pcXVlQnlJZFVzZXJMb2dpbiA9ICcnO1xuICBwcm90ZWN0ZWQgYmFzZVVybCE6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlnbm9yZVJlZGlyZWN0NDAxPzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByb3RlY3RlZCBpc1N0YXJ0WmVyb1BhZ2UgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG9ic2VydmVSZXNwb25zZTogVFlQRV9PQlNFUlZFX1JFU1BPTlNFID0gJ2JvZHknO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRPcHRpb25zPFR5cGVQYXJhbXM+KGh0dHBQYXJhbXM6IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4sIGNvbnRlbnRUeXBlPzogc3RyaW5nKTogeyBoZWFkZXJzOiBIdHRwSGVhZGVyczsgcGFyYW1zOiBIdHRwUGFyYW1zIH07XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWRpcmVjdFRvTG9naW4oKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4odXJsOiBzdHJpbmcsIHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPik6IHsgdXJsOiBzdHJpbmc7IHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPiB9O1xuXG4gIGdldDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnk+KHBhdGg6IHN0cmluZywgcGFyYW1zPzogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPikge1xuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IHRoaXMuZ2V0T2JzZXJ2ZVJlc3BvbnNlKHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4oYCR7dGhpcy5iYXNlVXJsfSR7cGF0aCA/IHBhdGggOiAnJ31gLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+Pihub3JtYWxpemVVcmwocmVzdWx0LnVybCksIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcyksIG9ic2VydmU6IG9ic2VydmUgfSBhcyBhbnkpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB0aGlzLmhhbmRsZXJSZXNwb25zZTxUeXBlUmVzcG9uc2U+KHJlcywgcmVzdWx0Q2hlY2tQYWdlWmVyby5pc1N0YXJ0WmVybywgb2JzZXJ2ZSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHRoaXMuaGFuZGxlckNhdGNoRXJyb3I8VHlwZVJlc3BvbnNlPihlcnIpKVxuICAgICk7XG4gIH1cblxuICBwb3N0PFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueSwgVHlwZUJvZHkgPSBhbnk+KHBhdGg6IHN0cmluZywgYm9keTogVHlwZUJvZHksIHBhcmFtcz86IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4pIHtcbiAgICBwYXJhbXMgPSBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0SW5zdGFuY2UodW5kZWZpbmVkLCBwYXJhbXMpO1xuICAgIGNvbnN0IG9ic2VydmUgPSB0aGlzLmdldE9ic2VydmVSZXNwb25zZShwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdENoZWNrUGFnZVplcm8gPSB0aGlzLmNoZWNrU3RhcnRQYWdlSXNaZXJvPFR5cGVQYXJhbXM+KHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZXBsYWNlVVJMQnlQYXR0ZXJuPFR5cGVQYXJhbXM+KGAke3RoaXMuYmFzZVVybH0ke3BhdGggPyBwYXRoIDogJyd9YCwgcGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KG5vcm1hbGl6ZVVybChyZXN1bHQudXJsKSwgYm9keSwgeyAuLi50aGlzLmdldE9wdGlvbnMocGFyYW1zKSwgb2JzZXJ2ZTogb2JzZXJ2ZSB9IGFzIGFueSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCBvYnNlcnZlKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4gdGhpcy5oYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RVcmxFbmRDb2RlPFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueSwgVHlwZUJvZHkgPSBhbnk+KHBhdGg6IHN0cmluZywgYm9keTogVHlwZUJvZHksIHBhcmFtcz86IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz4pIHtcbiAgICBwYXJhbXMgPSBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0SW5zdGFuY2UodW5kZWZpbmVkLCBwYXJhbXMpO1xuICAgIGNvbnN0IG9ic2VydmUgPSB0aGlzLmdldE9ic2VydmVSZXNwb25zZShwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdENoZWNrUGFnZVplcm8gPSB0aGlzLmNoZWNrU3RhcnRQYWdlSXNaZXJvPFR5cGVQYXJhbXM+KHBhcmFtcyk7XG4gICAgY29uc3QgYm9keVZhbHVlID0gZW5kQ29kZVVybChib2R5IGFzIFRZUEVfT0JKRUNULCB0cnVlKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4oYCR7dGhpcy5iYXNlVXJsfSR7cGF0aCA/IHBhdGggOiAnJ31gLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPj4obm9ybWFsaXplVXJsKHJlc3VsdC51cmwpLCBib2R5VmFsdWUsIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpLCBvYnNlcnZlOiB0aGlzLm9ic2VydmVSZXNwb25zZSB9IGFzIGFueSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCBvYnNlcnZlKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4gdGhpcy5oYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHB1dDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnksIFR5cGVCb2R5ID0gYW55PihwYXRoOiBzdHJpbmcsIGJvZHk6IFR5cGVCb2R5LCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KG5vcm1hbGl6ZVVybChyZXN1bHQudXJsKSwgYm9keSwgeyAuLi50aGlzLmdldE9wdGlvbnMocGFyYW1zKSwgb2JzZXJ2ZTogdGhpcy5vYnNlcnZlUmVzcG9uc2UgfSBhcyBhbnkpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB0aGlzLmhhbmRsZXJSZXNwb25zZTxUeXBlUmVzcG9uc2U+KHJlcywgcmVzdWx0Q2hlY2tQYWdlWmVyby5pc1N0YXJ0WmVybywgb2JzZXJ2ZSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHRoaXMuaGFuZGxlckNhdGNoRXJyb3I8VHlwZVJlc3BvbnNlPihlcnIpKVxuICAgICk7XG4gIH1cblxuICBwYXRjaDxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnk+KHBhdGg6IHN0cmluZywgYm9keTogdW5rbm93biwgcGFyYW1zPzogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPikge1xuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IHRoaXMuZ2V0T2JzZXJ2ZVJlc3BvbnNlKHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlcGxhY2VVUkxCeVBhdHRlcm48VHlwZVBhcmFtcz4oYCR7dGhpcy5iYXNlVXJsfSR7cGF0aCA/IHBhdGggOiAnJ31gLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KG5vcm1hbGl6ZVVybChyZXN1bHQudXJsKSwgYm9keSwgeyAuLi50aGlzLmdldE9wdGlvbnMocGFyYW1zKSwgb2JzZXJ2ZTogb2JzZXJ2ZSB9IGFzIGFueSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCBvYnNlcnZlKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4gdGhpcy5oYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHBhdGNoVXJsRW5kQ29kZTxUeXBlUmVzcG9uc2UsIFR5cGVQYXJhbXMgPSBhbnk+KHBhdGg6IHN0cmluZywgYm9keTogdW5rbm93biwgcGFyYW1zPzogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPikge1xuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IHRoaXMuZ2V0T2JzZXJ2ZVJlc3BvbnNlKHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcbiAgICBjb25zdCBib2R5VmFsdWUgPSBlbmRDb2RlVXJsKGJvZHkgYXMgVFlQRV9PQkpFQ1QsIHRydWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPj4obm9ybWFsaXplVXJsKHJlc3VsdC51cmwpLCBib2R5VmFsdWUsIHsgLi4udGhpcy5nZXRPcHRpb25zKHBhcmFtcywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpLCBvYnNlcnZlOiBvYnNlcnZlIH0gYXMgYW55KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVyUmVzcG9uc2U8VHlwZVJlc3BvbnNlPihyZXMsIHJlc3VsdENoZWNrUGFnZVplcm8uaXNTdGFydFplcm8sIG9ic2VydmUpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB0aGlzLmhhbmRsZXJDYXRjaEVycm9yPFR5cGVSZXNwb25zZT4oZXJyKSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlPFR5cGVSZXNwb25zZSwgVHlwZVBhcmFtcyA9IGFueT4ocGF0aDogc3RyaW5nLCBwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KSB7XG4gICAgcGFyYW1zID0gVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlKHVuZGVmaW5lZCwgcGFyYW1zKTtcbiAgICBjb25zdCBvYnNlcnZlID0gdGhpcy5nZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zKTtcbiAgICBjb25zdCByZXN1bHRDaGVja1BhZ2VaZXJvID0gdGhpcy5jaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxJSHR0cFJlc3BvbnNlPFR5cGVSZXNwb25zZT4+KG5vcm1hbGl6ZVVybChyZXN1bHQudXJsKSwgeyAuLi50aGlzLmdldE9wdGlvbnMocGFyYW1zKSwgb2JzZXJ2ZTogb2JzZXJ2ZSB9IGFzIGFueSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzLCByZXN1bHRDaGVja1BhZ2VaZXJvLmlzU3RhcnRaZXJvLCBvYnNlcnZlKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4gdGhpcy5oYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kV2l0aEZpbGU8VHlwZVJlc3BvbnNlLCBUeXBlUGFyYW1zID0gYW55LCBUeXBlQm9keSA9IGFueT4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhcmFtczogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlUGFyYW1zPixcbiAgICBhcmd1bWVudHNWYWx1ZTogeyBtZXRob2Q6IFRZUEVfTUVUSE9EOyBib2R5RGF0YTogVHlwZUJvZHk7IGtlZXBGaWxlT2ZCb2R5PzogYm9vbGVhbjsga2VlcEFycmF5VmFsdWU/OiBib29sZWFuOyBwcm9jZXNzVXBsb2FkPzogKHByb2Nlc3M6IElIdHRwUHJvY2Vzc1VwbG9hZCkgPT4gdm9pZCB9XG4gICk6IE9ic2VydmFibGU8SUh0dHBSZXNwb25zZTxUeXBlUmVzcG9uc2U+PiB7XG4gICAgY29uc3QgeyBtZXRob2QsIGtlZXBGaWxlT2ZCb2R5LCBrZWVwQXJyYXlWYWx1ZSwgcHJvY2Vzc1VwbG9hZCB9ID0gYXJndW1lbnRzVmFsdWU7XG4gICAgY29uc3QgYm9keURhdGEgPSBvbWl0Qnk8UmVjb3JkPHN0cmluZywgYW55Pj4oYXJndW1lbnRzVmFsdWUuYm9keURhdGEgYXMgYW55LCAoZGF0YUl0ZW06IGFueSkgPT4gaXNOaWwoZGF0YUl0ZW0pKTtcblxuICAgIHBhcmFtcyA9IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3RJbnN0YW5jZSh1bmRlZmluZWQsIHBhcmFtcyk7XG4gICAgY29uc3QgcmVzdWx0Q2hlY2tQYWdlWmVybyA9IHRoaXMuY2hlY2tTdGFydFBhZ2VJc1plcm88VHlwZVBhcmFtcz4ocGFyYW1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVwbGFjZVVSTEJ5UGF0dGVybjxUeXBlUGFyYW1zPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHJlc3VsdENoZWNrUGFnZVplcm8ucGFyYW1zKTtcbiAgICBjb25zdCB1cmwgPSBub3JtYWxpemVVcmwocmVzdWx0LnVybCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhyZXN1bHQucGFyYW1zKTtcblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPj4pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IGFyZ3VtZW50c1ZhbHVlLmJvZHlEYXRhIGluc3RhbmNlb2YgRm9ybURhdGEgPyBhcmd1bWVudHNWYWx1ZS5ib2R5RGF0YSA6IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgY29uc3QgcGFyYW1zU3RyID0gb3B0aW9ucy5wYXJhbXMudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG5cbiAgICAgIGlmIChwcm9jZXNzVXBsb2FkKSB7XG4gICAgICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IChlKSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc1VwbG9hZCh7XG4gICAgICAgICAgICBsb2FkZWQ6IGUubG9hZGVkLFxuICAgICAgICAgICAgdG90YWw6IGUudG90YWwsXG4gICAgICAgICAgICBwZXJjZW50OiAoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoYXJndW1lbnRzVmFsdWUuYm9keURhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBib2R5RGF0YSkge1xuICAgICAgICAgIHRoaXMuYXBwZW5kUmVjdXJzaXZlKGZvcm1EYXRhLCBib2R5RGF0YVtwcm9wZXJ0eV0sIHByb3BlcnR5LCBrZWVwRmlsZU9mQm9keSwga2VlcEFycmF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB4aHIub3BlbihtZXRob2QsIGAke3VybH0ke3BhcmFtc1N0ciA/IGA/JHtwYXJhbXNTdHJ9YCA6ICcnfWAsIHRydWUpO1xuICAgICAgaGVhZGVycy5rZXlzKCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpICE9PSAnY29udGVudC10eXBlJyAmJiB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIGhlYWRlcnMuZ2V0KGtleSkgfHwgJycpKTtcbiAgICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLmhhbmRsZXJSZXNwb25zZTxUeXBlUmVzcG9uc2U+KHRoaXMuY29udmVydFJlc3BvbnNlWEhSPFR5cGVSZXNwb25zZT4oeGhyKSwgcmVzdWx0Q2hlY2tQYWdlWmVyby5pc1N0YXJ0WmVybywgJ2JvZHknKSk7XG5cbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlci5lcnJvcih0aGlzLmNvbnZlcnRSZXNwb25zZVhIUjxUeXBlUmVzcG9uc2U+KHhocikpO1xuXG4gICAgICAgIHJldHVybiBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUmVjdXJzaXZlPFR5cGVCb2R5PihmRGF0YTogRm9ybURhdGEsIGRhdGE6IFR5cGVCb2R5LCBwcm9wOiBzdHJpbmcsIGtlZXBGaWxlT2ZCb2R5PzogYm9vbGVhbiwga2VlcEFycmF5VmFsdWU/OiBib29sZWFuKSB7XG4gICAgaWYgKGtlZXBGaWxlT2ZCb2R5KSB7XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZpbGUgfHwgZGF0YSBpbnN0YW5jZW9mIEJsb2IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSAnW29iamVjdCBGaWxlXScpIHtcbiAgICAgICAgdGhpcy5hcHBlbmRGaWxlVG9Gb3JtRGF0YShmRGF0YSwgcHJvcCwgZGF0YSBhcyBGaWxlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdGEubGVuZ3RoICYmIGRhdGFbMF0gaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBkYXRhKSB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRGaWxlVG9Gb3JtRGF0YShmRGF0YSwgcHJvcCwgZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZWVwQXJyYXlWYWx1ZSAmJiBkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGZEYXRhLmFwcGVuZChwcm9wLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgZGF0YSkge1xuICAgICAgZkRhdGEuYXBwZW5kKHByb3AsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmRGF0YS5hcHBlbmQocHJvcCwgZGF0YSBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRGaWxlVG9Gb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEsIHByb3A6IHN0cmluZywgZmlsZTogRmlsZSkge1xuICAgIGZvcm1EYXRhLmFwcGVuZChwcm9wLCBmaWxlLCBmaWxlLm5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmVzcG9uc2VYSFI8VHlwZVJlc3BvbnNlPihfeGhyOiBYTUxIdHRwUmVxdWVzdCk6IElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgWFNTSV9QUkVGSVggPSAvXlxcKVxcXVxcfScsP1xcbi87XG4gICAgbGV0IGNvZGU6IG51bWJlciA9IF94aHIuc3RhdHVzID09PSAxMjIzID8gMjA0IDogX3hoci5zdGF0dXM7XG4gICAgbGV0IG1lc3NhZ2UgPSBfeGhyLnN0YXR1c1RleHQ7XG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG5cbiAgICBpZiAoY29kZSAhPT0gMjA0KSB7XG4gICAgICBkYXRhID0gdHlwZW9mIF94aHIucmVzcG9uc2UgPT09ICd1bmRlZmluZWQnID8gX3hoci5yZXNwb25zZVRleHQgOiBfeGhyLnJlc3BvbnNlO1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKFhTU0lfUFJFRklYLCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgIGNvZGUgPSBkYXRhID8gMjAwIDogMDtcbiAgICB9XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgY29kZSA9IGRhdGEuY29kZSA/PyAyMDA7XG4gICAgICBtZXNzYWdlID0gZGF0YS5tZXNzYWdlIHx8IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgPz8gJ09LJztcblxuICAgIHJldHVybiB7IC4uLmRhdGEsIGNvZGUsIG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXNwb25zZVVSTCh4aHI6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCdyZXNwb25zZVVSTCcgaW4geGhyKSB7XG4gICAgICByZXR1cm4geGhyLnJlc3BvbnNlVVJMO1xuICAgIH1cbiAgICBpZiAoL15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSkge1xuICAgICAgcmV0dXJuIHhoci5nZXRSZXNwb25zZUhlYWRlcignWC1SZXF1ZXN0LVVSTCcpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1N0YXJ0UGFnZUlzWmVybzxUeXBlUGFyYW1zPihwYXJhbXM/OiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PFR5cGVQYXJhbXM+KTogeyBwYXJhbXM6IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q8VHlwZVBhcmFtcz47IGlzU3RhcnRaZXJvOiBib29sZWFuIH0ge1xuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICByZXR1cm4geyBwYXJhbXM6IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KCksIGlzU3RhcnRaZXJvOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhhcyhERUZBVUxUX1NUQVJUX1BBR0VfMCkgfHwgdGhpcy5pc1N0YXJ0WmVyb1BhZ2UpIHtcbiAgICAgIHBhcmFtcy5kZWxldGUoREVGQVVMVF9TVEFSVF9QQUdFXzApO1xuICAgICAgY29uc3QgcGFnZSA9IHBhcmFtcy5nZXQoJ3BhZ2UnKSA/IE51bWJlcihwYXJhbXMuZ2V0KCdwYWdlJykpIDogLTE7XG5cbiAgICAgIGlmIChpc05pbChwYWdlKSB8fCBwYWdlID09PSAtMSkge1xuICAgICAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtcywgaXNTdGFydFplcm86IGZhbHNlIH07XG4gICAgICB9XG4gICAgICBwYXJhbXMuc2V0KCdwYWdlJywgcGFnZSAtIDEpO1xuXG4gICAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtcywgaXNTdGFydFplcm86IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtcywgaXNTdGFydFplcm86IGZhbHNlIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc3BvbnNlPFR5cGVSZXNwb25zZT4ocmVzOiBhbnksIGlzUGFnZVN0YXJ0WmVybzogYm9vbGVhbiwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB8ICdib2R5Jyk6IElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzQ29udmVydDogYW55ID0ge1xuICAgICAgY29kZTogMjAwLFxuICAgIH07XG4gICAgaWYgKG9ic2VydmUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgIHJlc0NvbnZlcnQuc3RhdHVzQ29kZUh0dHAgPSByZXMuc3RhdHVzO1xuICAgICAgcmVzID0gcmVzLmJvZHk7XG4gICAgfVxuICAgIHJlc0NvbnZlcnQubWVzc2FnZSA9IGdldChyZXMsICdtZXNzYWdlJyk7XG4gICAgY29uc3QgY29kZSA9IGdldChyZXMsICdjb2RlJywgMjAwKTtcbiAgICBpZiAoYCR7Y29kZX1gICE9PSAnMjAwJyAmJiBgJHtjb2RlfWAgIT09ICcwMDEnKSB7XG4gICAgICByZXNDb252ZXJ0LmZlQ2xvbmVDb2RlID0gY29kZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlcyAhPT0gJ29iamVjdCcgfHwgcmVzID09PSBudWxsKSB7XG4gICAgICByZXNDb252ZXJ0WydkYXRhJ10gPSByZXM7XG4gICAgICByZXR1cm4gcmVzQ29udmVydDtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdpbmc6IElQYWdpbmcgPSB7XG4gICAgICBwYWdlOiBnZXQocmVzLCAncGFnaW5nLnBhZ2UnKSB8fCBnZXQocmVzLCAncGFnZScpIHx8IDAsXG4gICAgICBwZXJfcGFnZTogZ2V0KHJlcywgJ3BhZ2luZy5wZXJfcGFnZScpIHx8IGdldChyZXMsICdzaXplJykgfHwgMCxcbiAgICAgIHRvdGFsX2l0ZW1zOiBnZXQocmVzLCAncGFnaW5nLnRvdGFsX2l0ZW1zJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy50b3RhbF9jb3VudCcpIHx8IGdldChyZXMsICdwYWdpbmcudG90YWxfaXRlbScpIHx8IGdldChyZXMsICd0b3RhbEVsZW1lbnRzJykgfHwgMCxcbiAgICAgIHRvdGFsX3BhZ2VzOiBnZXQocmVzLCAncGFnaW5nLnRvdGFsX3BhZ2VzJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy50b3RhbF9wYWdlJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5wYWdlX2NvdW50JykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5wYWdlX2NvdW50JykgfHwgZ2V0KHJlcywgJ3RvdGFsUGFnZXMnKSB8fCAwLFxuICAgICAgYmVmb3JlOiBnZXQocmVzLCAncGFnaW5nLmN1cnNvcnMuYmVmb3JlJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5iZWZvcmUnKSB8fCBnZXQocmVzLCAnY3Vyc29ycy5iZWZvcmUnKSB8fCBnZXQocmVzLCAncGFnaW5nLmJlZm9yZV90b2tlbicpIHx8IGdldChyZXMsICdwYWdpbmcuY3Vyc29ycy5iZWZvcmVfdG9rZW4nKSxcbiAgICAgIGFmdGVyOiBnZXQocmVzLCAncGFnaW5nLmN1cnNvcnMuYWZ0ZXInKSB8fCBnZXQocmVzLCAncGFnaW5nLmFmdGVyJykgfHwgZ2V0KHJlcywgJ2N1cnNvcnMuYWZ0ZXInKSB8fCBnZXQocmVzLCAncGFnaW5nLmFmdGVyX3Rva2VuJykgfHwgZ2V0KHJlcywgJ3BhZ2luZy5jdXJzb3JzLmFmdGVyX3Rva2VuJyksXG4gICAgICBwcmV2aW91czogZ2V0KHJlcywgJ3BhZ2luZy5wcmV2aW91cycpIHx8IGdldChyZXMsICdwYWdpbmcuY3Vyc29ycy5wcmV2aW91cycpIHx8IGdldChyZXMsICdjdXJzb3JzLnByZXZpb3VzJyksXG4gICAgICBuZXh0OiBnZXQocmVzLCAncGFnaW5nLm5leHQnKSB8fCBnZXQocmVzLCAncGFnaW5nLm5leHRfcGFnZScpIHx8IGdldChyZXMsICdwYWdpbmcuY3Vyc29ycy5uZXh0JykgfHwgZ2V0KHJlcywgJ2N1cnNvcnMubmV4dCcpLFxuICAgIH07XG4gICAgY29uc3Qga2V5c1BhZ2luZyA9IE9iamVjdC5rZXlzKHBhZ2luZyk7XG5cbiAgICBrZXlzUGFnaW5nLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNOaWwoKHBhZ2luZyBhcyBhbnkpW2tleV0pKSB7XG4gICAgICAgIGRlbGV0ZSAocGFnaW5nIGFzIGFueSlba2V5XTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnaW5nKS5sZW5ndGgpIHtcbiAgICAgIGlmIChpc1BhZ2VTdGFydFplcm8gJiYgIWlzTmlsKHBhZ2luZy5wYWdlKSkge1xuICAgICAgICBwYWdpbmcucGFnZSArPSAxO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2luZy50b3RhbF9pdGVtcyAmJiBwYWdpbmcucGFnZSAmJiBwYWdpbmcucGVyX3BhZ2UgJiYgcGFnaW5nLnBhZ2UgKiBwYWdpbmcucGVyX3BhZ2UgPj0gcGFnaW5nLnRvdGFsX2l0ZW1zKSB7XG4gICAgICAgIHBhZ2luZy50b3RhbF9wYWdlcyA9IHBhZ2luZy5wYWdlO1xuICAgICAgfVxuICAgICAgaWYgKHJlc0NvbnZlcnQuZGF0YSBpbnN0YW5jZW9mIEFycmF5ICYmICFyZXNDb252ZXJ0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHBhZ2luZy50b3RhbF9wYWdlcyA9IHBhZ2luZy5wYWdlIHx8IDA7XG4gICAgICB9XG4gICAgICByZXNDb252ZXJ0LnBhZ2luZyA9IHBhZ2luZztcbiAgICB9XG4gICAgY29uc3QgZmllbGREZWxldGUgPSBbJ2NvZGUnLCAnbWVzc2FnZScsICdwYWdpbmcnLCAndG90YWxFbGVtZW50cycsICdzaXplJywgJ3RvdGFsUGFnZXMnLCAncGFnZSddO1xuXG4gICAgZmllbGREZWxldGUuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICghaXNOaWwocmVzW2ZpZWxkXSkpIHtcbiAgICAgICAgZGVsZXRlIHJlc1tmaWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZmllbGROb3RNZXJnZVRvRGF0YSA9IFsnbGFuZyddO1xuXG4gICAgZmllbGROb3RNZXJnZVRvRGF0YS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCFpc05pbChyZXNbZmllbGRdKSkge1xuICAgICAgICByZXNDb252ZXJ0W2ZpZWxkXSA9IHJlc1tmaWVsZF07XG4gICAgICAgIGRlbGV0ZSByZXNbZmllbGRdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXMpO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXNDb252ZXJ0LmRhdGEgPSBrZXlzWzBdID09PSAnMCcgPyByZXMgOiByZXNba2V5c1swXV07XG4gICAgfVxuICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICBpc05pbChyZXMuZGF0YSkgPyAocmVzQ29udmVydC5kYXRhID0gcmVzKSA6IE9iamVjdC5hc3NpZ24ocmVzQ29udmVydCwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzQ29udmVydDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2F0Y2hFcnJvcjxUeXBlUmVzcG9uc2U+KGVycjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VHlwZVJlc3BvbnNlPj4ge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQgJiYgIXRoaXMuaWdub3JlUmVkaXJlY3Q0MDEpIHtcbiAgICAgIHRoaXMucmVkaXJlY3RUb0xvZ2luKCk7XG4gICAgfVxuICAgIGNvbnN0IGNvZGUgPSBnZXQ8YW55PihlcnIsICdlcnJvci5jb2RlJywgZ2V0PGFueT4oZXJyLCAnc3RhdHVzJywgMCBhcyBhbnkpKTtcbiAgICBjb25zdCBtZXNzYWdlID0gY29kZSA+PSAxMDAgJiYgY29kZSA8IDUwMCA/IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdpMThuX2FsZXJ0X2Nvbm5lY3Rfc2VydmVyX2Vycm9yJyA6ICdpMThuX2FsZXJ0X2Nvbm5lY3Rfc2VydmVyX2Vycm9yJztcbiAgICBjb25zdCBkYXRhID0gZ2V0PGFueT4oZXJyLCAnZXJyb3IuZGF0YScsICcnIGFzIGFueSk7XG5cbiAgICB0aHJvdyB7IGNvZGU6IGNvZGUgPj0gMTAwICYmIGNvZGUgPCA1MDAgPyBjb2RlIDogNTAwLCBtZXNzYWdlLCBzdWJNZXNzYWdlOiBnZXQ8YW55PihlcnIsICdlcnJvci5lcnJvcnMnLCBnZXQ8YW55PihlcnIsICdlcnJvcnMnKSksIGRhdGE6IGRhdGEsIHJvb3RFcnJvcjogZXJyIH07XG4gIH1cblxuICAvKipcbiAgICogTMawdSB0cuG7ryBk4buvIGxp4buHdSBwaOG6o24gaOG7k2kgdsOgbyBjYWNoZS5cbiAgICogQHBhcmFtIG9ic2VydmFibGUgLSBPYnNlcnZhYmxlIGPhu6dhIHBo4bqjbiBo4buTaSBIVFRQLlxuICAgKiBAcGFyYW0ga2V5IC0gS2jDs2EgY2FjaGUuTMawdSDDvSBraMO0bmcgbWQ1IGtleSB0csaw4bubYyBraGkgdHJ1eeG7gW4gdsOgb1xuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ8OhYyB0aGFtIHPhu5EgxJHhu4MgdOG6oW8ga2jDs2EgY2FjaGUuXG4gICAqIEBwYXJhbSB0aW1lQ2FjaGUgLSBUaOG7nWkgZ2lhbiBsxrB1IHRy4buvIGNhY2hlICht4bq3YyDEkeG7i25oIGzDoCBDQUNIRV9FWFBJUkVfVElNRV9ERUZBVUxUKS5cbiAgICogQHBhcmFtIHJlbG9hZENhY2hlIC0gTuG6v3UgdHJ1ZSwgbHXDtG4gZ+G7jWkgxJHhu4MgbOG6pXkgZ2nDoSB0cuG7iyBt4bubaS4gZ2nDoSB0cuG7iyBuw6B5IGPDsyDEkeG7gyBz4butIGThu6VuZyB24bubaSBjw6FjIG5naGnhu4dwIHbhu6UgZ+G7jWkgbHXDtG4gbHXDtG4gbOG6pXkgZOG7ryBsaeG7h3UgbeG7m2kgbmjhuqV0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY+G7p2EgcGjhuqNuIGjhu5NpIEhUVFAgxJHDoyDEkcaw4bujYyBjYWNoZS5cbiAgICovXG4gIHB1YmxpYyBjYWNoZUluZGV4REI8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxJSHR0cFJlc3BvbnNlPFQ+Piwga2V5OiBzdHJpbmcsIHBhcmFtczogQXJyYXk8YW55PiwgdGltZUNhY2hlID0gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfVElNRV9ERUZBVUxULCByZWxvYWRDYWNoZSA9IGZhbHNlKTogT2JzZXJ2YWJsZTxJSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtc05vcm1hbGl6ZSA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IFsuLi5wYXJhbXNdIDogW3BhcmFtc107XG4gICAgICBwYXJhbXNOb3JtYWxpemUucHVzaCh0aGlzLmtleUNhY2hlVW5pcXVlQnlJZFVzZXJMb2dpbik7XG4gICAgICBjb25zdCBrZXlDYWNoZSA9IGdldEtleUNhY2hlQnlBcnJheU9iamVjdChrZXksIHBhcmFtc05vcm1hbGl6ZSk7XG5cbiAgICAgIGNvbnN0IGRlbGV0ZUNhY2hlJCA9IHJlbG9hZENhY2hlID8gZnJvbSh0aGlzLmRlbGV0ZUNhY2hlS2V5U3RhcnRXaWR0aChrZXkpKSA6IG9mKG51bGwpO1xuXG4gICAgICByZXR1cm4gZGVsZXRlQ2FjaGUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tKFV0aWxzQ2FjaGUuR2V0QXN5bmMoa2V5Q2FjaGUsIHVuZGVmaW5lZCwgdHJ1ZSkpKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhIGFzIElIdHRwUmVzcG9uc2U8VD4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gTMawdSBjYWNoZSBjaG8ga+G6v3QgcXXhuqMgaOG7o3AgbOG7h1xuICAgICAgICAgICAgICAgIFV0aWxzQ2FjaGUuU2V0QXN5bmMoa2V5Q2FjaGUsIHJlc3VsdCwgdGltZUNhY2hlLCB0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMxrB1IHRy4buvIGThu68gbGnhu4d1IHBo4bqjbiBo4buTaSB2w6BvIGNhY2hlLlxuICAgKiBAZGVwcmVjYXRlZCBz4butIGThu6VuZyBgYGBjYWNoZUluZGV4REJgYGAgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBjYWNoZVJlc3BvbnNlRGF0YTxUPihvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VD4+LCBrZXk6IHN0cmluZywgcGFyYW1zOiBBcnJheTxhbnk+LCB0aW1lQ2FjaGUgPSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQsIHJlbG9hZENhY2hlID0gZmFsc2UpOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLnByb21pc2VDYWNoZVJlc3BvbnNlRGF0YShvYnNlcnZhYmxlLCBrZXksIHBhcmFtcywgdGltZUNhY2hlLCByZWxvYWRDYWNoZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFjDs2EgY8OhYyBraMOzYSBjYWNoZSBi4bqvdCDEkeG6p3UgduG7m2kgbeG7mXQgY2h14buXaSBuaOG6pXQgxJHhu4tuaC5cbiAgICogTMawdSDDvToga2jDtG5nIG1kNSBrZXkgdHLGsOG7m2Mga2hpIHRydXnhu4FuIHbDoG8uXG4gICAqIFPhu60gZOG7pW5nIGjDoG0gbsOgeSB0cm9uZyBjw6FjIHRyxrDhu51uZyBo4bujcCBuaMawIGfhu41pIEFQSSB1cGRhdGUgaG/hurdjIHjDs2EgZOG7ryBsaeG7h3Usa2hpIMSRw7MgY+G6p24geMOzYSBjYWNoZSDEkWkgxJHhu4Mga2hpIGfhu41pIGRhbmggc8OhY2ggc+G6vSBs4bqleSDEkcaw4bujYyBnacOhIHRy4buLIG3hu5tpIG5o4bqldC5cbiAgICogQHBhcmFtIGtleSAtIENodeG7l2kga2jDs2EgY2FjaGUgY+G6p24geMOzYS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVDYWNoZUtleVN0YXJ0V2lkdGgoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgVXRpbHNDYWNoZS5EZWxldGVLZXlTdGFydFdpdGhBc3luYyhtZDUoa2V5KSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb21pc2VDYWNoZVJlc3BvbnNlRGF0YTxUPihvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPElIdHRwUmVzcG9uc2U8VD4+LCBrZXk6IHN0cmluZywgcGFyYW1zOiBBcnJheTxhbnk+LCB0aW1lQ2FjaGUgPSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQsIHJlbG9hZENhY2hlID0gZmFsc2UpOiBQcm9taXNlPElIdHRwUmVzcG9uc2U8VD4+IHtcbiAgICBwYXJhbXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgICBwYXJhbXMucHVzaCh0aGlzLmtleUNhY2hlVW5pcXVlQnlJZFVzZXJMb2dpbik7XG5cbiAgICBjb25zdCBrZXlDYWNoZSA9IGdldEtleUNhY2hlQnlBcnJheU9iamVjdChrZXksIHBhcmFtcyk7XG4gICAgaWYgKHJlbG9hZENhY2hlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUNhY2hlS2V5U3RhcnRXaWR0aChrZXkpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgVXRpbHNDYWNoZS5HZXRBc3luYyhrZXlDYWNoZSwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbShvYnNlcnZhYmxlKTtcblxuICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAgIFV0aWxzQ2FjaGUuU2V0QXN5bmMoa2V5Q2FjaGUsIHJlc3VsdCwgdGltZUNhY2hlLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPYnNlcnZlUmVzcG9uc2UocGFyYW1zOiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0PGFueT4pOiBUWVBFX09CU0VSVkVfUkVTUE9OU0Uge1xuICAgIGNvbnN0IG9ic2VydmVSZXNwb25zZVBhcmFtcyA9IHBhcmFtcy5nZXQoJ29ic2VydmVSZXNwb25zZScpO1xuICAgIGlmIChvYnNlcnZlUmVzcG9uc2VQYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5kZWxldGUoJ29ic2VydmVSZXNwb25zZScpO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2ZVJlc3BvbnNlUGFyYW1zID09PSAncmVzcG9uc2UnIHx8IG9ic2VydmVSZXNwb25zZVBhcmFtcyA9PT0gJ2JvZHknKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZVJlc3BvbnNlUGFyYW1zIGFzIFRZUEVfT0JTRVJWRV9SRVNQT05TRTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZVJlc3BvbnNlO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { HttpClient, HttpStatusCode } from '@angular/common/http';
2
2
  import { inject } from '@angular/core';
3
- import { UtilsHttpParamsRequestInstance, endCodeUrl, omitBy, isNil, UtilsHttpParamsRequest, DEFAULT_START_PAGE_0, get, UtilsCache, getKeyCacheByArrayObject, md5 } from '@libs-ui/utils';
3
+ import { UtilsHttpParamsRequestInstance, normalizeUrl, endCodeUrl, omitBy, isNil, UtilsHttpParamsRequest, DEFAULT_START_PAGE_0, get, UtilsCache, getKeyCacheByArrayObject, md5 } from '@libs-ui/utils';
4
4
  import { Observable, defer, from, of, lastValueFrom } from 'rxjs';
5
5
  import { map, catchError, switchMap, tap } from 'rxjs/operators';
6
6
 
@@ -17,14 +17,14 @@ class LibsUiBaseRequestAbstractService {
17
17
  const observe = this.getObserveResponse(params);
18
18
  const resultCheckPageZero = this.checkStartPageIsZero(params);
19
19
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
20
- return this.http.get(result.url, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
20
+ return this.http.get(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
21
21
  }
22
22
  post(path, body, params) {
23
23
  params = UtilsHttpParamsRequestInstance(undefined, params);
24
24
  const observe = this.getObserveResponse(params);
25
25
  const resultCheckPageZero = this.checkStartPageIsZero(params);
26
26
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
27
- return this.http.post(result.url, body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
27
+ return this.http.post(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
28
28
  }
29
29
  postUrlEndCode(path, body, params) {
30
30
  params = UtilsHttpParamsRequestInstance(undefined, params);
@@ -32,21 +32,21 @@ class LibsUiBaseRequestAbstractService {
32
32
  const resultCheckPageZero = this.checkStartPageIsZero(params);
33
33
  const bodyValue = endCodeUrl(body, true);
34
34
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
35
- return this.http.post(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
35
+ return this.http.post(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
36
36
  }
37
37
  put(path, body, params) {
38
38
  params = UtilsHttpParamsRequestInstance(undefined, params);
39
39
  const observe = this.getObserveResponse(params);
40
40
  const resultCheckPageZero = this.checkStartPageIsZero(params);
41
41
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
42
- return this.http.put(result.url, body, { ...this.getOptions(params), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
42
+ return this.http.put(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: this.observeResponse }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
43
43
  }
44
44
  patch(path, body, params) {
45
45
  params = UtilsHttpParamsRequestInstance(undefined, params);
46
46
  const observe = this.getObserveResponse(params);
47
47
  const resultCheckPageZero = this.checkStartPageIsZero(params);
48
48
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
49
- return this.http.patch(result.url, body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
49
+ return this.http.patch(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
50
50
  }
51
51
  patchUrlEndCode(path, body, params) {
52
52
  params = UtilsHttpParamsRequestInstance(undefined, params);
@@ -54,14 +54,14 @@ class LibsUiBaseRequestAbstractService {
54
54
  const resultCheckPageZero = this.checkStartPageIsZero(params);
55
55
  const bodyValue = endCodeUrl(body, true);
56
56
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
57
- return this.http.patch(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
57
+ return this.http.patch(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
58
58
  }
59
59
  delete(path, params) {
60
60
  params = UtilsHttpParamsRequestInstance(undefined, params);
61
61
  const observe = this.getObserveResponse(params);
62
62
  const resultCheckPageZero = this.checkStartPageIsZero(params);
63
63
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, params);
64
- return this.http.delete(result.url, { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
64
+ return this.http.delete(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe }).pipe(map((res) => this.handlerResponse(res, resultCheckPageZero.isStartZero, observe)), catchError((err) => this.handlerCatchError(err)));
65
65
  }
66
66
  sendWithFile(path, params, argumentsValue) {
67
67
  const { method, keepFileOfBody, keepArrayValue, processUpload } = argumentsValue;
@@ -69,7 +69,7 @@ class LibsUiBaseRequestAbstractService {
69
69
  params = UtilsHttpParamsRequestInstance(undefined, params);
70
70
  const resultCheckPageZero = this.checkStartPageIsZero(params);
71
71
  const result = this.replaceURLByPattern(`${this.baseUrl}${path ? path : ''}`, resultCheckPageZero.params);
72
- const url = result.url;
72
+ const url = normalizeUrl(result.url);
73
73
  const options = this.getOptions(result.params);
74
74
  return new Observable((observer) => {
75
75
  const formData = argumentsValue.bodyData instanceof FormData ? argumentsValue.bodyData : new FormData();
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-services-base-request-abstract.mjs","sources":["../../../../../libs-ui/services/base-request-abstract/src/base-request-abstract.service.ts","../../../../../libs-ui/services/base-request-abstract/src/libs-ui-services-base-request-abstract.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpStatusCode } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { IHttpProcessUpload, IHttpResponse, IPaging, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { DEFAULT_START_PAGE_0, UtilsCache, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, endCodeUrl, get, getKeyCacheByArrayObject, isNil, md5, omitBy } from '@libs-ui/utils';\nimport { defer, from, lastValueFrom, Observable, of } from 'rxjs';\nimport { Observer } from 'rxjs/internal/types';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\ntype TYPE_METHOD = 'POST' | 'PATCH' | 'PUT';\n\nexport type TYPE_OBSERVE_RESPONSE = 'response' | 'body';\n\nexport abstract class LibsUiBaseRequestAbstractService {\n protected keyCacheUniqueByIdUserLogin = '';\n protected baseUrl!: string;\n protected ignoreRedirect401?: boolean;\n protected http = inject(HttpClient);\n protected isStartZeroPage = false;\n protected observeResponse: TYPE_OBSERVE_RESPONSE = 'body';\n\n protected abstract getOptions<TypeParams>(httpParams: UtilsHttpParamsRequest<TypeParams>, contentType?: string): { headers: HttpHeaders; params: HttpParams };\n protected abstract redirectToLogin(): void;\n protected abstract replaceURLByPattern<TypeParams>(url: string, params: UtilsHttpParamsRequest<TypeParams>): { url: string; params: UtilsHttpParamsRequest<TypeParams> };\n\n get<TypeResponse, TypeParams = any>(path: string, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.get<IHttpResponse<TypeResponse>>(result.url, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n post<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.post<IHttpResponse<TypeResponse>>(result.url, body, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n postUrlEndCode<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const bodyValue = endCodeUrl(body as TYPE_OBJECT, true);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.post<IHttpResponse<TypeResponse>>(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n put<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.put<IHttpResponse<TypeResponse>>(result.url, body, { ...this.getOptions(params), observe: this.observeResponse } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n patch<TypeResponse, TypeParams = any>(path: string, body: unknown, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.patch<IHttpResponse<TypeResponse>>(result.url, body, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n patchUrlEndCode<TypeResponse, TypeParams = any>(path: string, body: unknown, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const bodyValue = endCodeUrl(body as TYPE_OBJECT, true);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.patch<IHttpResponse<TypeResponse>>(result.url, bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n delete<TypeResponse, TypeParams = any>(path: string, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.delete<IHttpResponse<TypeResponse>>(result.url, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n public sendWithFile<TypeResponse, TypeParams = any, TypeBody = any>(\n path: string,\n params: UtilsHttpParamsRequest<TypeParams>,\n argumentsValue: { method: TYPE_METHOD; bodyData: TypeBody; keepFileOfBody?: boolean; keepArrayValue?: boolean; processUpload?: (process: IHttpProcessUpload) => void }\n ): Observable<IHttpResponse<TypeResponse>> {\n const { method, keepFileOfBody, keepArrayValue, processUpload } = argumentsValue;\n const bodyData = omitBy<Record<string, any>>(argumentsValue.bodyData as any, (dataItem: any) => isNil(dataItem));\n\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, resultCheckPageZero.params);\n const url = result.url;\n const options = this.getOptions(result.params);\n\n return new Observable((observer: Observer<IHttpResponse<TypeResponse>>) => {\n const formData: FormData = argumentsValue.bodyData instanceof FormData ? argumentsValue.bodyData : new FormData();\n const xhr: XMLHttpRequest = new XMLHttpRequest();\n const paramsStr = options.params.toString();\n const headers = options.headers;\n\n if (processUpload) {\n xhr.upload.onprogress = (e) => {\n processUpload({\n loaded: e.loaded,\n total: e.total,\n percent: (e.loaded / e.total) * 100,\n });\n };\n }\n\n if (!(argumentsValue.bodyData instanceof FormData)) {\n for (const property in bodyData) {\n this.appendRecursive(formData, bodyData[property], property, keepFileOfBody, keepArrayValue);\n }\n }\n xhr.open(method, `${url}${paramsStr ? `?${paramsStr}` : ''}`, true);\n headers.keys().forEach((key: string) => key.toLocaleLowerCase() !== 'content-type' && xhr.setRequestHeader(key, headers.get(key) || ''));\n xhr.send(formData);\n xhr.onreadystatechange = () => {\n if (xhr.readyState !== 4) {\n return;\n }\n if (xhr.status === 200) {\n observer.next(this.handlerResponse<TypeResponse>(this.convertResponseXHR<TypeResponse>(xhr), resultCheckPageZero.isStartZero, 'body'));\n\n return observer.complete();\n }\n observer.error(this.convertResponseXHR<TypeResponse>(xhr));\n\n return observer.complete();\n };\n });\n }\n\n private appendRecursive<TypeBody>(fData: FormData, data: TypeBody, prop: string, keepFileOfBody?: boolean, keepArrayValue?: boolean) {\n if (keepFileOfBody) {\n if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {\n this.appendFileToFormData(fData, prop, data as File);\n\n return;\n }\n if (data instanceof Array && data.length && data[0] instanceof File) {\n for (const file of data) {\n this.appendFileToFormData(fData, prop, file);\n }\n\n return;\n }\n }\n if (keepArrayValue && data instanceof Array) {\n fData.append(prop, JSON.stringify(data));\n\n return;\n }\n if ('object' === typeof data) {\n fData.append(prop, JSON.stringify(data));\n\n return;\n }\n fData.append(prop, data as any);\n }\n\n private appendFileToFormData(formData: FormData, prop: string, file: File) {\n formData.append(prop, file, file.name);\n }\n\n private convertResponseXHR<TypeResponse>(_xhr: XMLHttpRequest): IHttpResponse<TypeResponse> {\n const XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n let code: number = _xhr.status === 1223 ? 204 : _xhr.status;\n let message = _xhr.statusText;\n let data: any = null;\n\n if (code !== 204) {\n data = typeof _xhr.response === 'undefined' ? _xhr.responseText : _xhr.response;\n if (typeof data === 'string') {\n data = data.replace(XSSI_PREFIX, '');\n }\n }\n\n if (code === 0) {\n code = data ? 200 : 0;\n }\n if (data) {\n data = JSON.parse(data);\n code = data.code ?? 200;\n message = data.message || message;\n }\n\n message = message ?? 'OK';\n\n return { ...data, code, message };\n }\n\n public getResponseURL(xhr: any): string {\n if ('responseURL' in xhr) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n\n return '';\n }\n\n protected checkStartPageIsZero<TypeParams>(params?: UtilsHttpParamsRequest<TypeParams>): { params: UtilsHttpParamsRequest<TypeParams>; isStartZero: boolean } {\n if (!params) {\n return { params: new UtilsHttpParamsRequest(), isStartZero: false };\n }\n if (params.has(DEFAULT_START_PAGE_0) || this.isStartZeroPage) {\n params.delete(DEFAULT_START_PAGE_0);\n const page = params.get('page') ? Number(params.get('page')) : -1;\n\n if (isNil(page) || page === -1) {\n return { params: params, isStartZero: false };\n }\n params.set('page', page - 1);\n\n return { params: params, isStartZero: true };\n }\n\n return { params: params, isStartZero: false };\n }\n\n protected handlerResponse<TypeResponse>(res: any, isPageStartZero: boolean, observe: 'response' | 'body'): IHttpResponse<TypeResponse> {\n const resConvert: any = {\n code: 200,\n };\n if (observe === 'response') {\n resConvert.statusCodeHttp = res.status;\n res = res.body;\n }\n resConvert.message = get(res, 'message');\n const code = get(res, 'code', 200);\n if (`${code}` !== '200' && `${code}` !== '001') {\n resConvert.feCloneCode = code;\n }\n\n if (typeof res !== 'object' || res === null) {\n resConvert['data'] = res;\n return resConvert;\n }\n\n const paging: IPaging = {\n page: get(res, 'paging.page') || get(res, 'page') || 0,\n per_page: get(res, 'paging.per_page') || get(res, 'size') || 0,\n total_items: get(res, 'paging.total_items') || get(res, 'paging.total_count') || get(res, 'paging.total_item') || get(res, 'totalElements') || 0,\n total_pages: get(res, 'paging.total_pages') || get(res, 'paging.total_page') || get(res, 'paging.page_count') || get(res, 'paging.page_count') || get(res, 'totalPages') || 0,\n before: get(res, 'paging.cursors.before') || get(res, 'paging.before') || get(res, 'cursors.before') || get(res, 'paging.before_token') || get(res, 'paging.cursors.before_token'),\n after: get(res, 'paging.cursors.after') || get(res, 'paging.after') || get(res, 'cursors.after') || get(res, 'paging.after_token') || get(res, 'paging.cursors.after_token'),\n previous: get(res, 'paging.previous') || get(res, 'paging.cursors.previous') || get(res, 'cursors.previous'),\n next: get(res, 'paging.next') || get(res, 'paging.next_page') || get(res, 'paging.cursors.next') || get(res, 'cursors.next'),\n };\n const keysPaging = Object.keys(paging);\n\n keysPaging.forEach((key: string) => {\n if (isNil((paging as any)[key])) {\n delete (paging as any)[key];\n\n return;\n }\n });\n\n if (Object.keys(paging).length) {\n if (isPageStartZero && !isNil(paging.page)) {\n paging.page += 1;\n }\n if (paging.total_items && paging.page && paging.per_page && paging.page * paging.per_page >= paging.total_items) {\n paging.total_pages = paging.page;\n }\n if (resConvert.data instanceof Array && !resConvert.data.length) {\n paging.total_pages = paging.page || 0;\n }\n resConvert.paging = paging;\n }\n const fieldDelete = ['code', 'message', 'paging', 'totalElements', 'size', 'totalPages', 'page'];\n\n fieldDelete.forEach((field) => {\n if (!isNil(res[field])) {\n delete res[field];\n }\n });\n const fieldNotMergeToData = ['lang'];\n\n fieldNotMergeToData.forEach((field) => {\n if (!isNil(res[field])) {\n resConvert[field] = res[field];\n delete res[field];\n }\n });\n const keys = Object.keys(res);\n\n if (keys.length === 1) {\n resConvert.data = keys[0] === '0' ? res : res[keys[0]];\n }\n if (keys.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isNil(res.data) ? (resConvert.data = res) : Object.assign(resConvert, res);\n }\n\n return resConvert;\n }\n\n protected handlerCatchError<TypeResponse>(err: HttpErrorResponse): Observable<IHttpResponse<TypeResponse>> {\n if (err.status === HttpStatusCode.Unauthorized && !this.ignoreRedirect401) {\n this.redirectToLogin();\n }\n const code = get<any>(err, 'error.code', get<any>(err, 'status', 0 as any));\n const message = code >= 100 && code < 500 ? err?.error?.message || err?.message || 'i18n_alert_connect_server_error' : 'i18n_alert_connect_server_error';\n const data = get<any>(err, 'error.data', '' as any);\n\n throw { code: code >= 100 && code < 500 ? code : 500, message, subMessage: get<any>(err, 'error.errors', get<any>(err, 'errors')), data: data, rootError: err };\n }\n\n /**\n * Lưu trữ dữ liệu phản hồi vào cache.\n * @param observable - Observable của phản hồi HTTP.\n * @param key - Khóa cache.Lưu ý không md5 key trước khi truyền vào\n * @param params - Các tham số để tạo khóa cache.\n * @param timeCache - Thời gian lưu trữ cache (mặc định là CACHE_EXPIRE_TIME_DEFAULT).\n * @param reloadCache - Nếu true, luôn gọi để lấy giá trị mới. giá trị này có để sử dụng với các nghiệp vụ gọi luôn luôn lấy dữ liệu mới nhất\n * @returns Observable của phản hồi HTTP đã được cache.\n */\n public cacheIndexDB<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Observable<IHttpResponse<T>> {\n return defer(() => {\n const paramsNormalize = Array.isArray(params) ? [...params] : [params];\n paramsNormalize.push(this.keyCacheUniqueByIdUserLogin);\n const keyCache = getKeyCacheByArrayObject(key, paramsNormalize);\n\n const deleteCache$ = reloadCache ? from(this.deleteCacheKeyStartWidth(key)) : of(null);\n\n return deleteCache$.pipe(\n switchMap(() => from(UtilsCache.GetAsync(keyCache, undefined, true))),\n switchMap((data) => {\n if (data) {\n return of(data as IHttpResponse<T>);\n }\n\n return observable.pipe(\n tap((result) => {\n if (result && result.data) {\n // Lưu cache cho kết quả hợp lệ\n UtilsCache.SetAsync(keyCache, result, timeCache, true);\n }\n })\n );\n })\n );\n });\n }\n\n /**\n * Lưu trữ dữ liệu phản hồi vào cache.\n * @deprecated sử dụng ```cacheIndexDB``` function\n */\n public cacheResponseData<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Observable<IHttpResponse<T>> {\n return from(this.promiseCacheResponseData(observable, key, params, timeCache, reloadCache));\n }\n\n /**\n * Xóa các khóa cache bắt đầu với một chuỗi nhất định.\n * Lưu ý: không md5 key trước khi truyền vào.\n * Sử dụng hàm này trong các trường hợp như gọi API update hoặc xóa dữ liệu,khi đó cần xóa cache đi để khi gọi danh sách sẽ lấy được giá trị mới nhất.\n * @param key - Chuỗi khóa cache cần xóa.\n */\n public async deleteCacheKeyStartWidth(key: string) {\n return await UtilsCache.DeleteKeyStartWithAsync(md5(key), true);\n }\n\n private async promiseCacheResponseData<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Promise<IHttpResponse<T>> {\n params = Array.isArray(params) ? params : [params];\n params.push(this.keyCacheUniqueByIdUserLogin);\n\n const keyCache = getKeyCacheByArrayObject(key, params);\n if (reloadCache) {\n await this.deleteCacheKeyStartWidth(key);\n }\n const data = await UtilsCache.GetAsync(keyCache, undefined, true);\n\n if (data) {\n return data;\n }\n const result = await lastValueFrom(observable);\n\n if (result && result.data) {\n UtilsCache.SetAsync(keyCache, result, timeCache, true);\n }\n\n return result;\n }\n\n private getObserveResponse(params: UtilsHttpParamsRequest<any>): TYPE_OBSERVE_RESPONSE {\n const observeResponseParams = params.get('observeResponse');\n if (observeResponseParams) {\n params.delete('observeResponse');\n }\n if (observeResponseParams === 'response' || observeResponseParams === 'body') {\n return observeResponseParams as TYPE_OBSERVE_RESPONSE;\n }\n return this.observeResponse;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-services-base-request-abstract.mjs","sources":["../../../../../libs-ui/services/base-request-abstract/src/base-request-abstract.service.ts","../../../../../libs-ui/services/base-request-abstract/src/libs-ui-services-base-request-abstract.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpStatusCode } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { IHttpProcessUpload, IHttpResponse, IPaging, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { DEFAULT_START_PAGE_0, UtilsCache, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, endCodeUrl, get, getKeyCacheByArrayObject, isNil, md5, normalizeUrl, omitBy } from '@libs-ui/utils';\nimport { defer, from, lastValueFrom, Observable, of } from 'rxjs';\nimport { Observer } from 'rxjs/internal/types';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\ntype TYPE_METHOD = 'POST' | 'PATCH' | 'PUT';\n\nexport type TYPE_OBSERVE_RESPONSE = 'response' | 'body';\n\nexport abstract class LibsUiBaseRequestAbstractService {\n protected keyCacheUniqueByIdUserLogin = '';\n protected baseUrl!: string;\n protected ignoreRedirect401?: boolean;\n protected http = inject(HttpClient);\n protected isStartZeroPage = false;\n protected observeResponse: TYPE_OBSERVE_RESPONSE = 'body';\n\n protected abstract getOptions<TypeParams>(httpParams: UtilsHttpParamsRequest<TypeParams>, contentType?: string): { headers: HttpHeaders; params: HttpParams };\n protected abstract redirectToLogin(): void;\n protected abstract replaceURLByPattern<TypeParams>(url: string, params: UtilsHttpParamsRequest<TypeParams>): { url: string; params: UtilsHttpParamsRequest<TypeParams> };\n\n get<TypeResponse, TypeParams = any>(path: string, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.get<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n post<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.post<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n postUrlEndCode<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const bodyValue = endCodeUrl(body as TYPE_OBJECT, true);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.post<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: this.observeResponse } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n put<TypeResponse, TypeParams = any, TypeBody = any>(path: string, body: TypeBody, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.put<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: this.observeResponse } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n patch<TypeResponse, TypeParams = any>(path: string, body: unknown, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.patch<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), body, { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n patchUrlEndCode<TypeResponse, TypeParams = any>(path: string, body: unknown, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const bodyValue = endCodeUrl(body as TYPE_OBJECT, true);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.patch<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), bodyValue, { ...this.getOptions(params, 'application/x-www-form-urlencoded'), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n delete<TypeResponse, TypeParams = any>(path: string, params?: UtilsHttpParamsRequest<TypeParams>) {\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const observe = this.getObserveResponse(params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, params);\n\n return this.http.delete<IHttpResponse<TypeResponse>>(normalizeUrl(result.url), { ...this.getOptions(params), observe: observe } as any).pipe(\n map((res: any) => this.handlerResponse<TypeResponse>(res, resultCheckPageZero.isStartZero, observe)),\n catchError((err: any) => this.handlerCatchError<TypeResponse>(err))\n );\n }\n\n public sendWithFile<TypeResponse, TypeParams = any, TypeBody = any>(\n path: string,\n params: UtilsHttpParamsRequest<TypeParams>,\n argumentsValue: { method: TYPE_METHOD; bodyData: TypeBody; keepFileOfBody?: boolean; keepArrayValue?: boolean; processUpload?: (process: IHttpProcessUpload) => void }\n ): Observable<IHttpResponse<TypeResponse>> {\n const { method, keepFileOfBody, keepArrayValue, processUpload } = argumentsValue;\n const bodyData = omitBy<Record<string, any>>(argumentsValue.bodyData as any, (dataItem: any) => isNil(dataItem));\n\n params = UtilsHttpParamsRequestInstance(undefined, params);\n const resultCheckPageZero = this.checkStartPageIsZero<TypeParams>(params);\n\n const result = this.replaceURLByPattern<TypeParams>(`${this.baseUrl}${path ? path : ''}`, resultCheckPageZero.params);\n const url = normalizeUrl(result.url);\n const options = this.getOptions(result.params);\n\n return new Observable((observer: Observer<IHttpResponse<TypeResponse>>) => {\n const formData: FormData = argumentsValue.bodyData instanceof FormData ? argumentsValue.bodyData : new FormData();\n const xhr: XMLHttpRequest = new XMLHttpRequest();\n const paramsStr = options.params.toString();\n const headers = options.headers;\n\n if (processUpload) {\n xhr.upload.onprogress = (e) => {\n processUpload({\n loaded: e.loaded,\n total: e.total,\n percent: (e.loaded / e.total) * 100,\n });\n };\n }\n\n if (!(argumentsValue.bodyData instanceof FormData)) {\n for (const property in bodyData) {\n this.appendRecursive(formData, bodyData[property], property, keepFileOfBody, keepArrayValue);\n }\n }\n xhr.open(method, `${url}${paramsStr ? `?${paramsStr}` : ''}`, true);\n headers.keys().forEach((key: string) => key.toLocaleLowerCase() !== 'content-type' && xhr.setRequestHeader(key, headers.get(key) || ''));\n xhr.send(formData);\n xhr.onreadystatechange = () => {\n if (xhr.readyState !== 4) {\n return;\n }\n if (xhr.status === 200) {\n observer.next(this.handlerResponse<TypeResponse>(this.convertResponseXHR<TypeResponse>(xhr), resultCheckPageZero.isStartZero, 'body'));\n\n return observer.complete();\n }\n observer.error(this.convertResponseXHR<TypeResponse>(xhr));\n\n return observer.complete();\n };\n });\n }\n\n private appendRecursive<TypeBody>(fData: FormData, data: TypeBody, prop: string, keepFileOfBody?: boolean, keepArrayValue?: boolean) {\n if (keepFileOfBody) {\n if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {\n this.appendFileToFormData(fData, prop, data as File);\n\n return;\n }\n if (data instanceof Array && data.length && data[0] instanceof File) {\n for (const file of data) {\n this.appendFileToFormData(fData, prop, file);\n }\n\n return;\n }\n }\n if (keepArrayValue && data instanceof Array) {\n fData.append(prop, JSON.stringify(data));\n\n return;\n }\n if ('object' === typeof data) {\n fData.append(prop, JSON.stringify(data));\n\n return;\n }\n fData.append(prop, data as any);\n }\n\n private appendFileToFormData(formData: FormData, prop: string, file: File) {\n formData.append(prop, file, file.name);\n }\n\n private convertResponseXHR<TypeResponse>(_xhr: XMLHttpRequest): IHttpResponse<TypeResponse> {\n const XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n let code: number = _xhr.status === 1223 ? 204 : _xhr.status;\n let message = _xhr.statusText;\n let data: any = null;\n\n if (code !== 204) {\n data = typeof _xhr.response === 'undefined' ? _xhr.responseText : _xhr.response;\n if (typeof data === 'string') {\n data = data.replace(XSSI_PREFIX, '');\n }\n }\n\n if (code === 0) {\n code = data ? 200 : 0;\n }\n if (data) {\n data = JSON.parse(data);\n code = data.code ?? 200;\n message = data.message || message;\n }\n\n message = message ?? 'OK';\n\n return { ...data, code, message };\n }\n\n public getResponseURL(xhr: any): string {\n if ('responseURL' in xhr) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n\n return '';\n }\n\n protected checkStartPageIsZero<TypeParams>(params?: UtilsHttpParamsRequest<TypeParams>): { params: UtilsHttpParamsRequest<TypeParams>; isStartZero: boolean } {\n if (!params) {\n return { params: new UtilsHttpParamsRequest(), isStartZero: false };\n }\n if (params.has(DEFAULT_START_PAGE_0) || this.isStartZeroPage) {\n params.delete(DEFAULT_START_PAGE_0);\n const page = params.get('page') ? Number(params.get('page')) : -1;\n\n if (isNil(page) || page === -1) {\n return { params: params, isStartZero: false };\n }\n params.set('page', page - 1);\n\n return { params: params, isStartZero: true };\n }\n\n return { params: params, isStartZero: false };\n }\n\n protected handlerResponse<TypeResponse>(res: any, isPageStartZero: boolean, observe: 'response' | 'body'): IHttpResponse<TypeResponse> {\n const resConvert: any = {\n code: 200,\n };\n if (observe === 'response') {\n resConvert.statusCodeHttp = res.status;\n res = res.body;\n }\n resConvert.message = get(res, 'message');\n const code = get(res, 'code', 200);\n if (`${code}` !== '200' && `${code}` !== '001') {\n resConvert.feCloneCode = code;\n }\n\n if (typeof res !== 'object' || res === null) {\n resConvert['data'] = res;\n return resConvert;\n }\n\n const paging: IPaging = {\n page: get(res, 'paging.page') || get(res, 'page') || 0,\n per_page: get(res, 'paging.per_page') || get(res, 'size') || 0,\n total_items: get(res, 'paging.total_items') || get(res, 'paging.total_count') || get(res, 'paging.total_item') || get(res, 'totalElements') || 0,\n total_pages: get(res, 'paging.total_pages') || get(res, 'paging.total_page') || get(res, 'paging.page_count') || get(res, 'paging.page_count') || get(res, 'totalPages') || 0,\n before: get(res, 'paging.cursors.before') || get(res, 'paging.before') || get(res, 'cursors.before') || get(res, 'paging.before_token') || get(res, 'paging.cursors.before_token'),\n after: get(res, 'paging.cursors.after') || get(res, 'paging.after') || get(res, 'cursors.after') || get(res, 'paging.after_token') || get(res, 'paging.cursors.after_token'),\n previous: get(res, 'paging.previous') || get(res, 'paging.cursors.previous') || get(res, 'cursors.previous'),\n next: get(res, 'paging.next') || get(res, 'paging.next_page') || get(res, 'paging.cursors.next') || get(res, 'cursors.next'),\n };\n const keysPaging = Object.keys(paging);\n\n keysPaging.forEach((key: string) => {\n if (isNil((paging as any)[key])) {\n delete (paging as any)[key];\n\n return;\n }\n });\n\n if (Object.keys(paging).length) {\n if (isPageStartZero && !isNil(paging.page)) {\n paging.page += 1;\n }\n if (paging.total_items && paging.page && paging.per_page && paging.page * paging.per_page >= paging.total_items) {\n paging.total_pages = paging.page;\n }\n if (resConvert.data instanceof Array && !resConvert.data.length) {\n paging.total_pages = paging.page || 0;\n }\n resConvert.paging = paging;\n }\n const fieldDelete = ['code', 'message', 'paging', 'totalElements', 'size', 'totalPages', 'page'];\n\n fieldDelete.forEach((field) => {\n if (!isNil(res[field])) {\n delete res[field];\n }\n });\n const fieldNotMergeToData = ['lang'];\n\n fieldNotMergeToData.forEach((field) => {\n if (!isNil(res[field])) {\n resConvert[field] = res[field];\n delete res[field];\n }\n });\n const keys = Object.keys(res);\n\n if (keys.length === 1) {\n resConvert.data = keys[0] === '0' ? res : res[keys[0]];\n }\n if (keys.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isNil(res.data) ? (resConvert.data = res) : Object.assign(resConvert, res);\n }\n\n return resConvert;\n }\n\n protected handlerCatchError<TypeResponse>(err: HttpErrorResponse): Observable<IHttpResponse<TypeResponse>> {\n if (err.status === HttpStatusCode.Unauthorized && !this.ignoreRedirect401) {\n this.redirectToLogin();\n }\n const code = get<any>(err, 'error.code', get<any>(err, 'status', 0 as any));\n const message = code >= 100 && code < 500 ? err?.error?.message || err?.message || 'i18n_alert_connect_server_error' : 'i18n_alert_connect_server_error';\n const data = get<any>(err, 'error.data', '' as any);\n\n throw { code: code >= 100 && code < 500 ? code : 500, message, subMessage: get<any>(err, 'error.errors', get<any>(err, 'errors')), data: data, rootError: err };\n }\n\n /**\n * Lưu trữ dữ liệu phản hồi vào cache.\n * @param observable - Observable của phản hồi HTTP.\n * @param key - Khóa cache.Lưu ý không md5 key trước khi truyền vào\n * @param params - Các tham số để tạo khóa cache.\n * @param timeCache - Thời gian lưu trữ cache (mặc định là CACHE_EXPIRE_TIME_DEFAULT).\n * @param reloadCache - Nếu true, luôn gọi để lấy giá trị mới. giá trị này có để sử dụng với các nghiệp vụ gọi luôn luôn lấy dữ liệu mới nhất\n * @returns Observable của phản hồi HTTP đã được cache.\n */\n public cacheIndexDB<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Observable<IHttpResponse<T>> {\n return defer(() => {\n const paramsNormalize = Array.isArray(params) ? [...params] : [params];\n paramsNormalize.push(this.keyCacheUniqueByIdUserLogin);\n const keyCache = getKeyCacheByArrayObject(key, paramsNormalize);\n\n const deleteCache$ = reloadCache ? from(this.deleteCacheKeyStartWidth(key)) : of(null);\n\n return deleteCache$.pipe(\n switchMap(() => from(UtilsCache.GetAsync(keyCache, undefined, true))),\n switchMap((data) => {\n if (data) {\n return of(data as IHttpResponse<T>);\n }\n\n return observable.pipe(\n tap((result) => {\n if (result && result.data) {\n // Lưu cache cho kết quả hợp lệ\n UtilsCache.SetAsync(keyCache, result, timeCache, true);\n }\n })\n );\n })\n );\n });\n }\n\n /**\n * Lưu trữ dữ liệu phản hồi vào cache.\n * @deprecated sử dụng ```cacheIndexDB``` function\n */\n public cacheResponseData<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Observable<IHttpResponse<T>> {\n return from(this.promiseCacheResponseData(observable, key, params, timeCache, reloadCache));\n }\n\n /**\n * Xóa các khóa cache bắt đầu với một chuỗi nhất định.\n * Lưu ý: không md5 key trước khi truyền vào.\n * Sử dụng hàm này trong các trường hợp như gọi API update hoặc xóa dữ liệu,khi đó cần xóa cache đi để khi gọi danh sách sẽ lấy được giá trị mới nhất.\n * @param key - Chuỗi khóa cache cần xóa.\n */\n public async deleteCacheKeyStartWidth(key: string) {\n return await UtilsCache.DeleteKeyStartWithAsync(md5(key), true);\n }\n\n private async promiseCacheResponseData<T>(observable: Observable<IHttpResponse<T>>, key: string, params: Array<any>, timeCache = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, reloadCache = false): Promise<IHttpResponse<T>> {\n params = Array.isArray(params) ? params : [params];\n params.push(this.keyCacheUniqueByIdUserLogin);\n\n const keyCache = getKeyCacheByArrayObject(key, params);\n if (reloadCache) {\n await this.deleteCacheKeyStartWidth(key);\n }\n const data = await UtilsCache.GetAsync(keyCache, undefined, true);\n\n if (data) {\n return data;\n }\n const result = await lastValueFrom(observable);\n\n if (result && result.data) {\n UtilsCache.SetAsync(keyCache, result, timeCache, true);\n }\n\n return result;\n }\n\n private getObserveResponse(params: UtilsHttpParamsRequest<any>): TYPE_OBSERVE_RESPONSE {\n const observeResponseParams = params.get('observeResponse');\n if (observeResponseParams) {\n params.delete('observeResponse');\n }\n if (observeResponseParams === 'response' || observeResponseParams === 'body') {\n return observeResponseParams as TYPE_OBSERVE_RESPONSE;\n }\n return this.observeResponse;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@libs-ui/services-base-request-abstract",
3
- "version": "0.2.351-0",
3
+ "version": "0.2.352-1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/interfaces-types": "0.2.351-0",
8
- "@libs-ui/utils": "0.2.351-0",
7
+ "@libs-ui/interfaces-types": "0.2.352-1",
8
+ "@libs-ui/utils": "0.2.352-1",
9
9
  "rxjs": "~7.8.0"
10
10
  },
11
11
  "sideEffects": false,