angular-toolbox 0.12.1 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.mjs +3 -3
  3. package/esm2022/lib/framework/logging/connector/console-log-connector.mjs +2 -2
  4. package/esm2022/lib/framework/logging/impl/log-impl.mjs +4 -1
  5. package/esm2022/lib/framework/logging/util/log.builder.mjs +2 -2
  6. package/esm2022/lib/framework/logging/util/log.util.mjs +3 -3
  7. package/esm2022/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.mjs +34 -0
  8. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.mjs +16 -17
  9. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.mjs +25 -15
  10. package/esm2022/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.mjs +41 -119
  11. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.mjs +38 -13
  12. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.mjs +15 -4
  13. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.mjs +12 -4
  14. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.mjs +36 -16
  15. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.mjs +43 -0
  16. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.mjs +116 -0
  17. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.mjs +63 -24
  18. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.mjs +72 -28
  19. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.mjs +22 -0
  20. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.mjs +53 -27
  21. package/esm2022/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.mjs +45 -21
  22. package/esm2022/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.mjs +15 -8
  23. package/esm2022/lib/framework/mock/http-monitoring-console/index.mjs +1 -1
  24. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.mjs +27 -1
  25. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.mjs +1 -1
  26. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.mjs +1 -1
  27. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.mjs +5 -1
  28. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-timeline-data.mjs +9 -0
  29. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.mjs +1 -1
  30. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.mjs +1 -1
  31. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.mjs +1 -1
  32. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.mjs +1 -1
  33. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.mjs +1 -1
  34. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.mjs +1 -1
  35. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.mjs +1 -1
  36. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.mjs +1 -1
  37. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.mjs +71 -43
  38. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.mjs +96 -0
  39. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.mjs +126 -0
  40. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.mjs +40 -0
  41. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-body-type.mjs +33 -1
  42. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-type-class.mjs +29 -1
  43. package/esm2022/lib/framework/mock/http-monitoring-console/util/data.util.mjs +21 -1
  44. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/body-converter.mjs +40 -0
  45. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/body-serializer.mjs +58 -0
  46. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.mjs +33 -0
  47. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.mjs +27 -0
  48. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.mjs +62 -0
  49. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.mjs +50 -0
  50. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-converter.mjs +43 -0
  51. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.mjs +53 -0
  52. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-message.util.mjs +30 -0
  53. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.mjs +45 -0
  54. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.mjs +47 -0
  55. package/esm2022/lib/framework/mock/http-monitoring-console/util/size.util.mjs +24 -2
  56. package/esm2022/lib/framework/mock/http-monitoring-console/util/timeline.util.mjs +28 -0
  57. package/esm2022/lib/framework/mock/http-monitoring-console/util/url.util.mjs +26 -1
  58. package/esm2022/lib/model/business/logging/atx-logger-config.provider.mjs +21 -0
  59. package/esm2022/lib/model/business/logging/index.mjs +3 -1
  60. package/esm2022/lib/model/business/logging/log-level.enum.mjs +1 -2
  61. package/esm2022/lib/model/business/logging/logger-config.mjs +9 -0
  62. package/esm2022/lib/model/business/logging/logger.mjs +1 -1
  63. package/esm2022/lib/model/business/logging/transactional-logger.mjs +1 -1
  64. package/esm2022/lib/model/business/mock/http/popup/atx-http-mock-console-popup.mjs +9 -0
  65. package/esm2022/lib/model/service/logging/logger-service.mjs +21 -4
  66. package/esm2022/lib/model/service/mock/http/logging/atx-http-mock-console.service.mjs +94 -0
  67. package/esm2022/lib/model/service/mock/http/logging/http-mock-logging-service.mjs +6 -3
  68. package/esm2022/lib/model/service/mock/http/logging/index.mjs +2 -1
  69. package/esm2022/lib/model/service/ui/app-bridge.service.mjs +1 -1
  70. package/esm2022/lib/model/service/version/angular-toolbox-version.service.mjs +3 -3
  71. package/fesm2022/angular-toolbox.mjs +3085 -1961
  72. package/fesm2022/angular-toolbox.mjs.map +1 -1
  73. package/lib/framework/logging/connector/console-log-connector.d.ts +1 -1
  74. package/lib/framework/logging/impl/log-impl.d.ts +3 -0
  75. package/lib/framework/logging/util/log.builder.d.ts +1 -1
  76. package/lib/framework/logging/util/log.util.d.ts +2 -2
  77. package/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.d.ts +28 -0
  78. package/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.d.ts +11 -4
  79. package/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.d.ts +18 -16
  80. package/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.d.ts +16 -37
  81. package/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.d.ts +20 -4
  82. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.d.ts +11 -0
  83. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.d.ts +8 -0
  84. package/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.d.ts +18 -11
  85. package/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.d.ts +25 -0
  86. package/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.d.ts +57 -0
  87. package/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.d.ts +27 -12
  88. package/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.d.ts +41 -7
  89. package/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.d.ts +9 -0
  90. package/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.d.ts +29 -3
  91. package/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.d.ts +36 -12
  92. package/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.d.ts +10 -5
  93. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.d.ts +27 -1
  94. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.d.ts +12 -0
  95. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.d.ts +20 -0
  96. package/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.d.ts +4 -0
  97. package/lib/framework/mock/http-monitoring-console/model/business/atx-timeline-data.d.ts +21 -0
  98. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.d.ts +14 -1
  99. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.d.ts +12 -0
  100. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.d.ts +14 -1
  101. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.d.ts +7 -0
  102. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.d.ts +6 -0
  103. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.d.ts +38 -1
  104. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.d.ts +26 -1
  105. package/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.d.ts +12 -0
  106. package/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.d.ts +24 -2
  107. package/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.d.ts +55 -0
  108. package/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.d.ts +75 -0
  109. package/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.d.ts +32 -0
  110. package/lib/framework/mock/http-monitoring-console/util/console-body-type.d.ts +32 -0
  111. package/lib/framework/mock/http-monitoring-console/util/console-type-class.d.ts +28 -0
  112. package/lib/framework/mock/http-monitoring-console/util/data.util.d.ts +20 -0
  113. package/lib/framework/mock/http-monitoring-console/util/io/body-converter.d.ts +30 -0
  114. package/lib/framework/mock/http-monitoring-console/util/io/body-serializer.d.ts +32 -0
  115. package/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.d.ts +21 -0
  116. package/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.d.ts +23 -0
  117. package/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.d.ts +31 -0
  118. package/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.d.ts +31 -0
  119. package/lib/framework/mock/http-monitoring-console/util/io/log-converter.d.ts +31 -0
  120. package/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.d.ts +31 -0
  121. package/lib/framework/mock/http-monitoring-console/util/io/log-message.util.d.ts +23 -0
  122. package/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.d.ts +31 -0
  123. package/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.d.ts +31 -0
  124. package/lib/framework/mock/http-monitoring-console/util/size.util.d.ts +22 -0
  125. package/lib/framework/mock/http-monitoring-console/util/timeline.util.d.ts +23 -0
  126. package/lib/framework/mock/http-monitoring-console/util/url.util.d.ts +25 -0
  127. package/lib/model/business/logging/atx-logger-config.provider.d.ts +21 -0
  128. package/lib/model/business/logging/index.d.ts +2 -0
  129. package/lib/model/business/logging/log-level.enum.d.ts +0 -1
  130. package/lib/model/business/logging/logger-config.d.ts +17 -0
  131. package/lib/model/business/logging/logger.d.ts +5 -5
  132. package/lib/model/business/logging/transactional-logger.d.ts +1 -1
  133. package/lib/model/business/mock/http/popup/atx-http-mock-console-popup.d.ts +23 -0
  134. package/lib/model/service/logging/logger-service.d.ts +6 -1
  135. package/lib/model/service/mock/http/logging/atx-http-mock-console.service.d.ts +53 -0
  136. package/lib/model/service/mock/http/logging/http-mock-logging-service.d.ts +1 -0
  137. package/lib/model/service/mock/http/logging/index.d.ts +1 -0
  138. package/package.json +1 -1
  139. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.mjs +0 -22
  140. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.mjs +0 -47
  141. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.mjs +0 -44
  142. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.mjs +0 -32
  143. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.mjs +0 -31
  144. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.mjs +0 -35
  145. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.mjs +0 -19
  146. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.mjs +0 -27
  147. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.mjs +0 -29
  148. package/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.d.ts +0 -12
  149. package/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.d.ts +0 -13
  150. package/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.d.ts +0 -13
  151. package/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.d.ts +0 -13
  152. package/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.d.ts +0 -13
  153. package/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.d.ts +0 -13
  154. package/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.d.ts +0 -12
  155. package/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.d.ts +0 -13
  156. package/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.d.ts +0 -13
@@ -9,42 +9,62 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
9
9
  import { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';
10
10
  import { DataUtil } from '../../../util/data.util';
11
11
  import { ConsoleBodyType } from '../../../util/console-body-type';
12
+ import { AtxLogRendererBase } from '../../abstract/log-renderer-base';
12
13
  import * as i0 from "@angular/core";
13
- export class AtxPayloadRendererComponent {
14
+ /**
15
+ * @private
16
+ * The component that displays payload data associated with an HTTP request in the ATX monitoring console.
17
+ */
18
+ export class AtxPayloadRendererComponent extends AtxLogRendererBase {
19
+ constructor() {
20
+ super(...arguments);
21
+ /**
22
+ * @private
23
+ */
24
+ this.json = null;
25
+ /**
26
+ * @private
27
+ */
28
+ this.formData = null;
29
+ /**
30
+ * @private
31
+ */
32
+ this.queryParams = null;
33
+ }
34
+ /**
35
+ * @private
36
+ */
14
37
  set log(value) {
15
- const request = value?.metadata.request;
38
+ super.log = value;
39
+ this.json = this.formData = this.queryParams = null;
40
+ if (!value)
41
+ return;
42
+ const request = value.metadata.request;
16
43
  const params = request.params;
17
44
  const paramsKeys = params.keys();
18
45
  const body = request.body;
19
46
  const bodyType = DataUtil.getBodyType(body);
20
- this.queryParams = this.formData = this.json = null;
21
47
  if (paramsKeys.length > 0) {
22
48
  this.queryParams = [];
23
49
  paramsKeys.forEach(key => this.queryParams?.push({ key: key, value: params.get(key) }));
24
50
  }
25
51
  if (bodyType === ConsoleBodyType.FORM_DATA) {
26
52
  this.formData = Array.from(body);
53
+ return;
27
54
  }
28
- else if (bodyType === ConsoleBodyType.TEXT) {
55
+ if (bodyType === ConsoleBodyType.TEXT) {
29
56
  this.json = JSON.parse(body);
30
57
  }
31
- this._cdr.detectChanges();
32
- }
33
- constructor(_cdr) {
34
- this._cdr = _cdr;
35
- this.json = null;
36
- this.formData = null;
37
- this.queryParams = null;
38
58
  }
39
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxPayloadRendererComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
40
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxPayloadRendererComponent, isStandalone: true, selector: "atx-payload-renderer", inputs: { log: "log" }, ngImport: i0, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n}\r\n@if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}details{border:1px solid var(--border-color)}summary{font-weight:700;padding:4px 6px}summary:hover{background-color:var(--dark-gray)}dl{display:flex;gap:6px;margin:0 0 0 20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "component", type: AtxJsonViewerComponent, selector: "atx-json-viewer", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxPayloadRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxPayloadRendererComponent, isStandalone: true, selector: "atx-payload-renderer", inputs: { log: "log" }, usesInheritance: true, ngImport: i0, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n} @else if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}details{border:1px solid var(--border-color)}summary{font-weight:700;padding:4px 6px}summary:hover{background-color:var(--dark-gray)}dl{display:flex;gap:6px;margin:0 0 0 20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "component", type: AtxJsonViewerComponent, selector: "atx-json-viewer", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
61
  }
42
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxPayloadRendererComponent, decorators: [{
43
63
  type: Component,
44
64
  args: [{ selector: 'atx-payload-renderer', standalone: true, imports: [
45
65
  AtxJsonViewerComponent
46
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n}\r\n@if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}details{border:1px solid var(--border-color)}summary{font-weight:700;padding:4px 6px}summary:hover{background-color:var(--dark-gray)}dl{display:flex;gap:6px;margin:0 0 0 20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
47
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { log: [{
66
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n} @else if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}details{border:1px solid var(--border-color)}summary{font-weight:700;padding:4px 6px}summary:hover{background-color:var(--dark-gray)}dl{display:flex;gap:6px;margin:0 0 0 20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
67
+ }], propDecorators: { log: [{
48
68
  type: Input
49
69
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcGF5bG9hZC1yZW5kZXJlci9wYXlsb2FkLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9wYXlsb2FkLXJlbmRlcmVyL3BheWxvYWQtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBWWxFLE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsSUFDVyxHQUFHLENBQUUsS0FBaUI7UUFDL0IsTUFBTSxPQUFPLEdBQXFCLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFlLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQWEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQW9CLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3BELElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFDRCxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFvQixJQUF1QjtRQUF2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXhCakMsU0FBSSxHQUFRLElBQUksQ0FBQztRQUNqQixhQUFRLEdBQWUsSUFBSSxDQUFDO1FBQzVCLGdCQUFXLEdBQWlCLElBQUksQ0FBQztJQXNCRyxDQUFDOzhHQTFCcEMsMkJBQTJCO2tHQUEzQiwyQkFBMkIsd0dDekJ4Qyxnd0NBK0NBLG9sREQ1Qkksc0JBQXNCOzsyRkFNYiwyQkFBMkI7a0JBVnZDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxzQkFBc0I7cUJBQ3ZCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO3NGQVNwQyxHQUFHO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQXR4SnNvblZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2pzb24tdmlld2VyL2pzb24tdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRhLnV0aWwnO1xyXG5pbXBvcnQgeyBDb25zb2xlQm9keVR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvbnNvbGUtYm9keS10eXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LXBheWxvYWQtcmVuZGVyZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXR4SnNvblZpZXdlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BheWxvYWQtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wYXlsb2FkLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4UGF5bG9hZFJlbmRlcmVyQ29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIGpzb246IGFueSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGZvcm1EYXRhOiBhbnkgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcXVlcnlQYXJhbXM6IGFueVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBsb2cgKHZhbHVlOiBMb2cgfCBudWxsKSB7XHJcbiAgICBjb25zdCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+ID0gdmFsdWU/Lm1ldGFkYXRhLnJlcXVlc3Q7XHJcbiAgICBjb25zdCBwYXJhbXM6IEh0dHBQYXJhbXMgPSByZXF1ZXN0LnBhcmFtcztcclxuICAgIGNvbnN0IHBhcmFtc0tleXM6IHN0cmluZ1tdID0gcGFyYW1zLmtleXMoKTtcclxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHJlcXVlc3QuYm9keTtcclxuICAgIGNvbnN0IGJvZHlUeXBlOiBDb25zb2xlQm9keVR5cGUgPSBEYXRhVXRpbC5nZXRCb2R5VHlwZShib2R5KTtcclxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLmZvcm1EYXRhID0gdGhpcy5qc29uID0gbnVsbDtcclxuICAgIGlmIChwYXJhbXNLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IFtdO1xyXG4gICAgICBwYXJhbXNLZXlzLmZvckVhY2goa2V5PT4gdGhpcy5xdWVyeVBhcmFtcz8ucHVzaCggeyBrZXk6IGtleSwgdmFsdWU6IHBhcmFtcy5nZXQoa2V5KSB9ICkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuRk9STV9EQVRBKSB7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBBcnJheS5mcm9tKGJvZHkpO1xyXG4gICAgfSBlbHNlIGlmIChib2R5VHlwZSA9PT0gQ29uc29sZUJvZHlUeXBlLlRFWFQpIHtcclxuICAgICAgdGhpcy5qc29uID0gSlNPTi5wYXJzZShib2R5KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG59XHJcbiIsIlxyXG48IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcblxyXG5AaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICA8ZGV0YWlscz5cclxuICAgICAgICA8c3VtbWFyeT5cclxuICAgICAgICAgICBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc1xyXG4gICAgICAgIDwvc3VtbWFyeT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIHF1ZXJ5UGFyYW1zOyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR0Pnt7IGl0ZW0ua2V5IH19OjwvZHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRkPnt7IGl0ZW0udmFsdWUgfX08L2RkPlxyXG4gICAgICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kZXRhaWxzPlxyXG59XHJcbkBpZiAoanNvbikge1xyXG4gICAgPGRldGFpbHM+XHJcbiAgICAgICAgPHN1bW1hcnk+XHJcbiAgICAgICAgICAgIFJlcXVlc3QgUGF5bG9hZFxyXG4gICAgICAgIDwvc3VtbWFyeT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICA8YXR4LWpzb24tdmlld2VyIFtkYXRhXT1cImpzb25cIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2RldGFpbHM+XHJcbn0gQGVsc2UgaWYgKGZvcm1EYXRhKSB7XHJcbiAgICA8ZGV0YWlscz5cclxuICAgICAgICA8c3VtbWFyeT5cclxuICAgICAgICAgICAgRm9ybSBEYXRhXHJcbiAgICAgICAgPC9zdW1tYXJ5PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGVudHJ5IG9mIGZvcm1EYXRhOyB0cmFjayBlbnRyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxsaT5bIHt7IGVudHJ5IH19IF08L2xpPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kZXRhaWxzPlxyXG59ICAgICAgXHJcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcGF5bG9hZC1yZW5kZXJlci9wYXlsb2FkLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9wYXlsb2FkLXJlbmRlcmVyL3BheWxvYWQtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFdEU7OztHQUdHO0FBV0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGtCQUFrQjtJQVZuRTs7UUFZRTs7V0FFRztRQUNPLFNBQUksR0FBUSxJQUFJLENBQUM7UUFFM0I7O1dBRUc7UUFDTyxhQUFRLEdBQWUsSUFBSSxDQUFDO1FBRXRDOztXQUVHO1FBQ08sZ0JBQVcsR0FBaUIsSUFBSSxDQUFDO0tBMkI1QztJQXpCQzs7T0FFRztJQUNILElBQ29CLEdBQUcsQ0FBRSxLQUFpQjtRQUN4QyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDcEQsSUFBRyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ2xCLE1BQU0sT0FBTyxHQUFxQixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBZSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFhLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFvQixRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFDRCxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQzs4R0F6Q1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsK0hDOUJ4Qyxtd0NBOENBLHd0RER0Qkksc0JBQXNCOzsyRkFNYiwyQkFBMkI7a0JBVnZDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxzQkFBc0I7cUJBQ3ZCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQXVCM0IsR0FBRztzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtcywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEF0eEpzb25WaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9qc29uLXZpZXdlci9qc29uLXZpZXdlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZGF0YS51dGlsJztcclxuaW1wb3J0IHsgQ29uc29sZUJvZHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jb25zb2xlLWJvZHktdHlwZSc7XHJcbmltcG9ydCB7IEF0eExvZ1JlbmRlcmVyQmFzZSB9IGZyb20gJy4uLy4uL2Fic3RyYWN0L2xvZy1yZW5kZXJlci1iYXNlJztcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgcGF5bG9hZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBIVFRQIHJlcXVlc3QgaW4gdGhlIEFUWCBtb25pdG9yaW5nIGNvbnNvbGUuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1wYXlsb2FkLXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEF0eEpzb25WaWV3ZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXlsb2FkLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGF5bG9hZC1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eFBheWxvYWRSZW5kZXJlckNvbXBvbmVudCBleHRlbmRzIEF0eExvZ1JlbmRlcmVyQmFzZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGpzb246IGFueSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGZvcm1EYXRhOiBhbnkgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBxdWVyeVBhcmFtczogYW55W10gfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBsb2cgKHZhbHVlOiBMb2cgfCBudWxsKSB7XHJcbiAgICBzdXBlci5sb2cgPSB2YWx1ZTtcclxuICAgIHRoaXMuanNvbiA9IHRoaXMuZm9ybURhdGEgPSB0aGlzLnF1ZXJ5UGFyYW1zID0gbnVsbDtcclxuICAgIGlmKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiA9IHZhbHVlLm1ldGFkYXRhLnJlcXVlc3Q7XHJcbiAgICBjb25zdCBwYXJhbXM6IEh0dHBQYXJhbXMgPSByZXF1ZXN0LnBhcmFtcztcclxuICAgIGNvbnN0IHBhcmFtc0tleXM6IHN0cmluZ1tdID0gcGFyYW1zLmtleXMoKTtcclxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHJlcXVlc3QuYm9keTtcclxuICAgIGNvbnN0IGJvZHlUeXBlOiBDb25zb2xlQm9keVR5cGUgPSBEYXRhVXRpbC5nZXRCb2R5VHlwZShib2R5KTtcclxuICAgIGlmIChwYXJhbXNLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IFtdO1xyXG4gICAgICBwYXJhbXNLZXlzLmZvckVhY2goa2V5PT4gdGhpcy5xdWVyeVBhcmFtcz8ucHVzaCggeyBrZXk6IGtleSwgdmFsdWU6IHBhcmFtcy5nZXQoa2V5KSB9ICkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuRk9STV9EQVRBKSB7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBBcnJheS5mcm9tKGJvZHkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5URVhUKSB7XHJcbiAgICAgIHRoaXMuanNvbiA9IEpTT04ucGFyc2UoYm9keSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcblxyXG5AaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICA8ZGV0YWlscz5cclxuICAgICAgICA8c3VtbWFyeT5cclxuICAgICAgICAgICBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc1xyXG4gICAgICAgIDwvc3VtbWFyeT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIHF1ZXJ5UGFyYW1zOyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR0Pnt7IGl0ZW0ua2V5IH19OjwvZHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRkPnt7IGl0ZW0udmFsdWUgfX08L2RkPlxyXG4gICAgICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kZXRhaWxzPlxyXG59ICBAZWxzZSBpZiAoanNvbikge1xyXG4gICAgPGRldGFpbHM+XHJcbiAgICAgICAgPHN1bW1hcnk+XHJcbiAgICAgICAgICAgIFJlcXVlc3QgUGF5bG9hZFxyXG4gICAgICAgIDwvc3VtbWFyeT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICA8YXR4LWpzb24tdmlld2VyIFtkYXRhXT1cImpzb25cIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2RldGFpbHM+XHJcbn0gQGVsc2UgaWYgKGZvcm1EYXRhKSB7XHJcbiAgICA8ZGV0YWlscz5cclxuICAgICAgICA8c3VtbWFyeT5cclxuICAgICAgICAgICAgRm9ybSBEYXRhXHJcbiAgICAgICAgPC9zdW1tYXJ5PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGVudHJ5IG9mIGZvcm1EYXRhOyB0cmFjayBlbnRyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxsaT5bIHt7IGVudHJ5IH19IF08L2xpPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kZXRhaWxzPlxyXG59ICAgICAgXHJcbiJdfQ==
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
9
+ import { NgStyle } from '@angular/common';
10
+ import { AtxLogRendererBase } from '../../abstract/log-renderer-base';
11
+ import * as i0 from "@angular/core";
12
+ /**
13
+ * @private
14
+ * The component that displays HTTP request info in the ATX monitoring console.
15
+ */
16
+ export class AtxRequesInfoComponent extends AtxLogRendererBase {
17
+ /**
18
+ * @private
19
+ * Gest or sets the log for which to display general information.
20
+ */
21
+ set log(value) {
22
+ super.log = value;
23
+ if (!value) {
24
+ this.request = this.response = null;
25
+ return;
26
+ }
27
+ const metadata = value.metadata;
28
+ const request = metadata.request;
29
+ this.request = request;
30
+ this.response = metadata.response;
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxRequesInfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxRequesInfoComponent, isStandalone: true, selector: "atx-request-info-renderer", inputs: { log: "log" }, usesInheritance: true, ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<details open>\r\n <summary>General</summary>\r\n <section>\r\n <dl>\r\n <dt>Request URL:</dt>\r\n <dd>{{ request.url }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request Method:</dt>\r\n <dd>{{ request.method }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Status Code:</dt>\r\n <dd class=\"status-container\">\r\n @if (response) {\r\n <svg [ngStyle]=\"{ fill: response.status < 400 ? 'green' : 'red' }\" \r\n width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n {{ response.status }} {{ response.statusText }}\r\n } @else {\r\n <svg fill=\"orange\" width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n prefetch\r\n }\r\n </dd>\r\n </dl>\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Response Headers</summary>\r\n <section>\r\n @if (response) {\r\n @for( item of response.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ response.headers.get(item) }}</dd>\r\n </dl>\r\n \r\n }\r\n }\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Request Headers</summary>\r\n <section>\r\n @for(item of request.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ request.headers.get(item) }}</dd>\r\n </dl>\r\n }\r\n </section>\r\n</details>", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}details summary{padding:2px 6px;background-color:var(--background-color);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;margin-bottom:6px}details section{padding:4px 6px}details section dl{display:flex;gap:10px}details section dl,details section dt,details section dd{padding:0;margin:0}details section dt{min-width:200px}.status-container{display:flex;align-items:center;gap:4px}.status-indicator{padding:0;margin:0}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxRequesInfoComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'atx-request-info-renderer', standalone: true, imports: [
38
+ NgStyle,
39
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<details open>\r\n <summary>General</summary>\r\n <section>\r\n <dl>\r\n <dt>Request URL:</dt>\r\n <dd>{{ request.url }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request Method:</dt>\r\n <dd>{{ request.method }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Status Code:</dt>\r\n <dd class=\"status-container\">\r\n @if (response) {\r\n <svg [ngStyle]=\"{ fill: response.status < 400 ? 'green' : 'red' }\" \r\n width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n {{ response.status }} {{ response.statusText }}\r\n } @else {\r\n <svg fill=\"orange\" width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n prefetch\r\n }\r\n </dd>\r\n </dl>\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Response Headers</summary>\r\n <section>\r\n @if (response) {\r\n @for( item of response.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ response.headers.get(item) }}</dd>\r\n </dl>\r\n \r\n }\r\n }\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Request Headers</summary>\r\n <section>\r\n @for(item of request.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ request.headers.get(item) }}</dd>\r\n </dl>\r\n }\r\n </section>\r\n</details>", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}details summary{padding:2px 6px;background-color:var(--background-color);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;margin-bottom:6px}details section{padding:4px 6px}details section dl{display:flex;gap:10px}details section dl,details section dt,details section dd{padding:0;margin:0}details section dt{min-width:200px}.status-container{display:flex;align-items:center;gap:4px}.status-indicator{padding:0;margin:0}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
40
+ }], propDecorators: { log: [{
41
+ type: Input
42
+ }] } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1pbmZvLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXF1ZXN0LWluZm8tcmVuZGVyZXIvcmVxdWVzdC1pbmZvLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXF1ZXN0LWluZm8tcmVuZGVyZXIvcmVxdWVzdC1pbmZvLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFdEU7OztHQUdHO0FBV0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVk1RDs7O09BR0c7SUFDSCxJQUNvQixHQUFHLENBQUMsS0FBaUI7UUFDdkMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQVcsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUE0QixLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFxQixRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDOzhHQTNCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixvSUM1Qm5DLG9qRUE4RFUsMCtERHhDTixPQUFPOzsyRkFNRSxzQkFBc0I7a0JBVmxDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUDt3QkFDUCxPQUFPO3FCQUNSLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQW1CM0IsR0FBRztzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBNb2NrTG9nZ2luZ01ldGFkYXRhLCBMb2cgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBdHhMb2dSZW5kZXJlckJhc2UgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC9sb2ctcmVuZGVyZXItYmFzZSc7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogVGhlIGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIEhUVFAgcmVxdWVzdCBpbmZvIGluIHRoZSBBVFggbW9uaXRvcmluZyBjb25zb2xlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtcmVxdWVzdC1pbmZvLXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nU3R5bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVxdWVzdC1pbmZvLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmVxdWVzdC1pbmZvLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4UmVxdWVzSW5mb0NvbXBvbmVudCBleHRlbmRzIEF0eExvZ1JlbmRlcmVyQmFzZSB7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVxdWVzdCE6IEh0dHBSZXF1ZXN0PGFueT47XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzcG9uc2UhOiBIdHRwUmVzcG9uc2U8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBHZXN0IG9yIHNldHMgdGhlIGxvZyBmb3Igd2hpY2ggdG8gZGlzcGxheSBnZW5lcmFsIGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBsb2codmFsdWU6IExvZyB8IG51bGwpIHtcclxuICAgIHN1cGVyLmxvZyA9IHZhbHVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLnJlcXVlc3QgPSB0aGlzLnJlc3BvbnNlID0gbnVsbCBhcyBhbnk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1ldGFkYXRhOiBIdHRwTW9ja0xvZ2dpbmdNZXRhZGF0YSA9IHZhbHVlLm1ldGFkYXRhOyBcclxuICAgIGNvbnN0IHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4gPSBtZXRhZGF0YS5yZXF1ZXN0OyBcclxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XHJcbiAgICB0aGlzLnJlc3BvbnNlID0gbWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuXHJcbjxkZXRhaWxzIG9wZW4+XHJcbiAgICA8c3VtbWFyeT5HZW5lcmFsPC9zdW1tYXJ5PlxyXG4gICAgPHNlY3Rpb24+XHJcbiAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICA8ZHQ+UmVxdWVzdCBVUkw6PC9kdD5cclxuICAgICAgICAgICAgPGRkPnt7IHJlcXVlc3QudXJsIH19PC9kZD5cclxuICAgICAgICA8L2RsPlxyXG4gICAgICAgIDxkbD5cclxuICAgICAgICAgICAgPGR0PlJlcXVlc3QgTWV0aG9kOjwvZHQ+XHJcbiAgICAgICAgICAgIDxkZD57eyByZXF1ZXN0Lm1ldGhvZCB9fTwvZGQ+XHJcbiAgICAgICAgPC9kbD5cclxuICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgIDxkdD5TdGF0dXMgQ29kZTo8L2R0PlxyXG4gICAgICAgICAgICA8ZGQgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdTdHlsZV09XCJ7IGZpbGw6IHJlc3BvbnNlLnN0YXR1cyA8IDQwMCA/ICdncmVlbicgOiAncmVkJyB9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICB7eyByZXNwb25zZS5zdGF0dXMgfX0ge3sgcmVzcG9uc2Uuc3RhdHVzVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBmaWxsPVwib3JhbmdlXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWZldGNoXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGQ+XHJcbiAgICAgICAgPC9kbD5cclxuICAgIDwvc2VjdGlvbj5cclxuPC9kZXRhaWxzPlxyXG48ZGV0YWlscz5cclxuICAgIDxzdW1tYXJ5PlJlc3BvbnNlIEhlYWRlcnM8L3N1bW1hcnk+XHJcbiAgICA8c2VjdGlvbj5cclxuICAgICAgICBAaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIEBmb3IoIGl0ZW0gb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCk7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIDxkbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZHQ+e3sgaXRlbSB9fTwvZHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRkPnt7IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGl0ZW0pIH19PC9kZD5cclxuICAgICAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIDwvc2VjdGlvbj5cclxuPC9kZXRhaWxzPlxyXG48ZGV0YWlscz5cclxuICAgIDxzdW1tYXJ5PlJlcXVlc3QgSGVhZGVyczwvc3VtbWFyeT5cclxuICAgIDxzZWN0aW9uPlxyXG4gICAgICAgIEBmb3IoaXRlbSBvZiByZXF1ZXN0LmhlYWRlcnMua2V5cygpOyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgIDxkbD5cclxuICAgICAgICAgICAgICAgIDxkdD57eyBpdGVtIH19PC9kdD5cclxuICAgICAgICAgICAgICAgIDxkZD57eyByZXF1ZXN0LmhlYWRlcnMuZ2V0KGl0ZW0pIH19PC9kZD5cclxuICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICB9XHJcbiAgICA8L3NlY3Rpb24+XHJcbjwvZGV0YWlscz4iXX0=
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { Component } from '@angular/core';
9
+ import { SizeUtil } from '../../../util/size.util';
10
+ import { UrlUtil } from '../../../util/url.util';
11
+ import { AtxIconRendererComponent } from '../icon-renderer/icon-renderer.component';
12
+ import { AtxConsoleActionType } from '../../../model/business/atx-console-action-type';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "../../../model/service/atx-monitoring-console.state";
15
+ import * as i2 from "../../../model/service/atx-user-action.service";
16
+ /**
17
+ * @private
18
+ */
19
+ const TPL_DASH = "---";
20
+ /**
21
+ * @private
22
+ */
23
+ const PREFETCH = "prefetch";
24
+ /**
25
+ * @private
26
+ */
27
+ const MS_SUFIX = " ms";
28
+ /**
29
+ * @private
30
+ * The component that layouts HTTP logs via a table element in the ATX monitoring console.
31
+ */
32
+ export class AtxRequestListRendererComponent {
33
+ /**
34
+ * @private
35
+ */
36
+ constructor(state, action) {
37
+ this.state = state;
38
+ this.action = action;
39
+ /**
40
+ * @private
41
+ */
42
+ this.actionType = AtxConsoleActionType;
43
+ }
44
+ /**
45
+ * @private
46
+ * Returns the data size for the specified log.
47
+ */
48
+ getSize(log) {
49
+ const response = log.metadata.response;
50
+ if (response) {
51
+ const size = SizeUtil.getSize(response.body);
52
+ return SizeUtil.sizeToString(size);
53
+ }
54
+ return TPL_DASH;
55
+ }
56
+ /**
57
+ * @private
58
+ * Returns the HTTP status for the specified log.
59
+ */
60
+ getStatus(log) {
61
+ const response = log.metadata.response;
62
+ if (response)
63
+ return response.status;
64
+ return PREFETCH;
65
+ }
66
+ /**
67
+ * @private
68
+ * Returns the transaction duration for the specified log.
69
+ */
70
+ getTime(log) {
71
+ const response = log.metadata.response;
72
+ if (response)
73
+ return log.metadata.requestMetadata.duration + MS_SUFIX;
74
+ return TPL_DASH;
75
+ }
76
+ /**
77
+ * @private
78
+ * RIndicates whether the specified log is an error (true), or not (false).
79
+ */
80
+ isError(log) {
81
+ const response = log.metadata.response;
82
+ if (response)
83
+ return response.status >= 400;
84
+ return false;
85
+ }
86
+ /**
87
+ * @private
88
+ * Returns the resource name for the specified log.
89
+ */
90
+ getResourceName(log) {
91
+ return UrlUtil.getResourceName(log);
92
+ }
93
+ /**
94
+ * @private
95
+ * Returns the resource path for the specified log.
96
+ */
97
+ getResourcePath(log) {
98
+ return UrlUtil.getResourcePath(log);
99
+ }
100
+ /**
101
+ * @private
102
+ * Applies user's filters to the spefivied log (previously unreleased).
103
+ */
104
+ checkFilters(log) {
105
+ return true;
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxRequestListRendererComponent, deps: [{ token: i1.AtxMonitoringConsoleState }, { token: i2.AtxUserActionService }], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxRequestListRendererComponent, isStandalone: true, selector: "atx-request-list-renderer", ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n<table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" title=\"Expand\" class=\"header-btn\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (this.state.selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!this.state.selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of this.state.logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"action.sendAction(actionType.LOG_SELECT, log)\"\r\n [class.selected-row]=\"this.state.selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [log]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!this.state.selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n</table>", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}#request-list{-webkit-user-select:none;user-select:none;width:100%}#request-list tbody tr td:first-of-type{display:flex;gap:6px}#request-list .name-header{display:flex;align-items:center}#request-list thead{position:sticky;top:0}#request-list .resource-cell{max-height:36px;overflow:hidden}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "component", type: AtxIconRendererComponent, selector: "atx-icon-renderer", inputs: ["log"] }] }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxRequestListRendererComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ selector: 'atx-request-list-renderer', standalone: true, imports: [
113
+ AtxIconRendererComponent
114
+ ], template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n<table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" title=\"Expand\" class=\"header-btn\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (this.state.selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!this.state.selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of this.state.logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"action.sendAction(actionType.LOG_SELECT, log)\"\r\n [class.selected-row]=\"this.state.selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [log]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!this.state.selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n</table>", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}#request-list{-webkit-user-select:none;user-select:none;width:100%}#request-list tbody tr td:first-of-type{display:flex;gap:6px}#request-list .name-header{display:flex;align-items:center}#request-list thead{position:sticky;top:0}#request-list .resource-cell{max-height:36px;overflow:hidden}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
115
+ }], ctorParameters: () => [{ type: i1.AtxMonitoringConsoleState }, { type: i2.AtxUserActionService }] });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1saXN0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXF1ZXN0LWxpc3QtcmVuZGVyZXIvcmVxdWVzdC1saXN0LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXF1ZXN0LWxpc3QtcmVuZGVyZXIvcmVxdWVzdC1saXN0LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUdwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7OztBQUV2Rjs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLEtBQUssQ0FBQztBQUUvQjs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLFVBQVUsQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLEtBQUssQ0FBQztBQUUvQjs7O0dBR0c7QUFVSCxNQUFNLE9BQU8sK0JBQStCO0lBTzFDOztPQUVHO0lBQ0gsWUFBc0IsS0FBZ0MsRUFDaEMsTUFBNEI7UUFENUIsVUFBSyxHQUFMLEtBQUssQ0FBMkI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFUbEQ7O1dBRUc7UUFDZ0IsZUFBVSxHQUFRLG9CQUFvQixDQUFDO0lBTUwsQ0FBQztJQUV0RDs7O09BR0c7SUFDTyxPQUFPLENBQUMsR0FBUTtRQUN4QixNQUFNLFFBQVEsR0FBNkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDakUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVMsQ0FBQyxHQUFRO1FBQXFCLE1BQU0sUUFBUSxHQUE2QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoSCxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDckMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLE9BQU8sQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sUUFBUSxHQUE2QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNqRSxJQUFJLFFBQVE7WUFBRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdEUsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLE9BQU8sQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sUUFBUSxHQUE2QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNqRSxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGVBQWUsQ0FBQyxHQUFRO1FBQ2hDLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sZUFBZSxDQUFDLEdBQVE7UUFDaEMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxZQUFZLENBQUMsR0FBUTtRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBN0VVLCtCQUErQjtrR0FBL0IsK0JBQStCLHFGQzlDNUMsOHhFQWlEUSwyMEREUkosd0JBQXdCOzsyRkFLZiwrQkFBK0I7a0JBVDNDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUDt3QkFDUCx3QkFBd0I7cUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTaXplVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvc2l6ZS51dGlsJztcclxuaW1wb3J0IHsgVXJsVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXJsLnV0aWwnO1xyXG5pbXBvcnQgeyBBdHhJY29uUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLXJlbmRlcmVyL2ljb24tcmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXR4TW9uaXRvcmluZ0NvbnNvbGVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVsL3NlcnZpY2UvYXR4LW1vbml0b3JpbmctY29uc29sZS5zdGF0ZSc7XHJcbmltcG9ydCB7IEF0eFVzZXJBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvc2VydmljZS9hdHgtdXNlci1hY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF0eENvbnNvbGVBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvYnVzaW5lc3MvYXR4LWNvbnNvbGUtYWN0aW9uLXR5cGUnO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBUUExfREFTSDogc3RyaW5nID0gXCItLS1cIjtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgUFJFRkVUQ0g6IHN0cmluZyA9IFwicHJlZmV0Y2hcIjtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgTVNfU1VGSVg6IHN0cmluZyA9IFwiIG1zXCI7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogVGhlIGNvbXBvbmVudCB0aGF0IGxheW91dHMgSFRUUCBsb2dzIHZpYSBhIHRhYmxlIGVsZW1lbnQgaW4gdGhlIEFUWCBtb25pdG9yaW5nIGNvbnNvbGUuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1yZXF1ZXN0LWxpc3QtcmVuZGVyZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXR4SWNvblJlbmRlcmVyQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVxdWVzdC1saXN0LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmVxdWVzdC1saXN0LXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4UmVxdWVzdExpc3RSZW5kZXJlckNvbXBvbmVudCB7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWN0aW9uVHlwZTogYW55ID0gQXR4Q29uc29sZUFjdGlvblR5cGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0YXRlOiBBdHhNb25pdG9yaW5nQ29uc29sZVN0YXRlLFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBhY3Rpb246IEF0eFVzZXJBY3Rpb25TZXJ2aWNlKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFJldHVybnMgdGhlIGRhdGEgc2l6ZSBmb3IgdGhlIHNwZWNpZmllZCBsb2cuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldFNpemUobG9nOiBMb2cpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+IHwgbnVsbCA9IGxvZy5tZXRhZGF0YS5yZXNwb25zZTtcclxuICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICBjb25zdCBzaXplOiBudW1iZXIgPSBTaXplVXRpbC5nZXRTaXplKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICByZXR1cm4gU2l6ZVV0aWwuc2l6ZVRvU3RyaW5nKHNpemUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRQTF9EQVNIO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBSZXR1cm5zIHRoZSBIVFRQIHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBsb2cuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldFN0YXR1cyhsb2c6IExvZyk6IHN0cmluZyB8IG51bWJlciB7IGNvbnN0IHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiB8IG51bGwgPSBsb2cubWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgICBpZiAocmVzcG9uc2UpIHJldHVybiByZXNwb25zZS5zdGF0dXM7XHJcbiAgICByZXR1cm4gUFJFRkVUQ0g7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gZHVyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgbG9nLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRUaW1lKGxvZzogTG9nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiB8IG51bGwgPSBsb2cubWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgICBpZiAocmVzcG9uc2UpIHJldHVybiBsb2cubWV0YWRhdGEucmVxdWVzdE1ldGFkYXRhLmR1cmF0aW9uICsgTVNfU1VGSVg7XHJcbiAgICByZXR1cm4gVFBMX0RBU0g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFJJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGxvZyBpcyBhbiBlcnJvciAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpc0Vycm9yKGxvZzogTG9nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gfCBudWxsID0gbG9nLm1ldGFkYXRhLnJlc3BvbnNlO1xyXG4gICAgaWYgKHJlc3BvbnNlKSByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID49IDQwMDtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIGxvZy5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0UmVzb3VyY2VOYW1lKGxvZzogTG9nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBVcmxVdGlsLmdldFJlc291cmNlTmFtZShsb2cpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFJldHVybnMgdGhlIHJlc291cmNlIHBhdGggZm9yIHRoZSBzcGVjaWZpZWQgbG9nLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRSZXNvdXJjZVBhdGgobG9nOiBMb2cpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVybFV0aWwuZ2V0UmVzb3VyY2VQYXRoKGxvZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEFwcGxpZXMgdXNlcidzIGZpbHRlcnMgdG8gdGhlIHNwZWZpdmllZCBsb2cgKHByZXZpb3VzbHkgdW5yZWxlYXNlZCkuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNoZWNrRmlsdGVycyhsb2c6IExvZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuPHRhYmxlIGlkPVwicmVxdWVzdC1saXN0XCIgPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibmFtZS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiRXhwYW5kXCIgY2xhc3M9XCJoZWFkZXItYnRuXCIgKGNsaWNrKT1cImFjdGlvbi5zZW5kQWN0aW9uKGFjdGlvblR5cGUuQ0xPU0VfREVUQUlMU19QQU5FTClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGhpcy5zdGF0ZS5zZWxlY3RlZExvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNiA4YS41LjUgMCAwIDAgLjUuNWg1Ljc5M2wtMi4xNDcgMi4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOGwzLTNhLjUuNSAwIDAgMCAwLS43MDhsLTMtM2EuNS41IDAgMCAwLS43MDguNzA4TDEyLjI5MyA3LjVINi41QS41LjUgMCAwIDAgNiA4bS0yLjUgN2EuNS41IDAgMCAxLS41LS41di0xM2EuNS41IDAgMCAxIDEgMHYxM2EuNS41IDAgMCAxLS41LjVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICBAaWYgKCF0aGlzLnN0YXRlLnNlbGVjdGVkTG9nKSB7XHJcbiAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5TaXplPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5UaW1lPC90aD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5PlxyXG4gICAgICAgIEBmb3IgKGxvZyBvZiB0aGlzLnN0YXRlLmxvZ3M7IHRyYWNrIGxvZy5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuaWQpIHtcclxuICAgICAgICAgICAgQGlmIChjaGVja0ZpbHRlcnMobG9nKSkge1xyXG4gICAgICAgICAgICAgICAgPHRyIFtjbGFzcy5lcnJvci1yb3ddPVwiaXNFcnJvcihsb2cpXCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3Rpb24uc2VuZEFjdGlvbihhY3Rpb25UeXBlLkxPR19TRUxFQ1QsIGxvZylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1yb3ddPVwidGhpcy5zdGF0ZS5zZWxlY3RlZExvZyA9PT0gbG9nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIFt0aXRsZV09XCJnZXRSZXNvdXJjZVBhdGgobG9nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXR4LWljb24tcmVuZGVyZXIgW2xvZ109XCJsb2dcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNvdXJjZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSZXNvdXJjZU5hbWUobG9nKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0UmVzb3VyY2VQYXRoKGxvZykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCF0aGlzLnN0YXRlLnNlbGVjdGVkTG9nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBnZXRTdGF0dXMobG9nKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBnZXRTaXplKGxvZykgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgZ2V0VGltZShsb2cpIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC90Ym9keT5cclxuPC90YWJsZT4iXX0=
@@ -10,41 +10,80 @@ import { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';
10
10
  import { DataUtil } from '../../../util/data.util';
11
11
  import { ConsoleBodyType } from '../../../util/console-body-type';
12
12
  import { SafeHtmlPipe } from '../../../../../../pipe';
13
+ import { AtxLogRendererBase } from '../../abstract/log-renderer-base';
13
14
  import * as i0 from "@angular/core";
14
- export class AtxResponseBodyRendererComponent {
15
- set data(value) {
16
- this.body = value;
17
- this.text = this.blob = this.arrayBuffer = null;
18
- if (value) {
19
- const bodyType = DataUtil.getBodyType(value);
20
- if (bodyType === ConsoleBodyType.TEXT)
21
- this.text = value;
22
- else if (bodyType === ConsoleBodyType.JSON)
23
- this.text = JSON.stringify(value);
24
- else if (bodyType === ConsoleBodyType.BLOB)
25
- this.blob = value;
26
- else if (bodyType === ConsoleBodyType.ARRAY_BUFFER)
27
- this.arrayBuffer = value;
28
- }
29
- this._cdr.detectChanges();
30
- }
31
- constructor(_cdr) {
32
- this._cdr = _cdr;
15
+ /**
16
+ * @private
17
+ * The component that displays HTTP response data in the ATX monitoring console.
18
+ */
19
+ export class AtxResponseBodyRendererComponent extends AtxLogRendererBase {
20
+ constructor() {
21
+ super(...arguments);
22
+ /**
23
+ * @private
24
+ */
33
25
  this.text = null;
26
+ /**
27
+ * @private
28
+ */
34
29
  this.body = null;
30
+ /**
31
+ * @private
32
+ */
35
33
  this.blob = null;
34
+ /**
35
+ * @private
36
+ */
36
37
  this.arrayBuffer = null;
37
38
  }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponseBodyRendererComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxResponseBodyRendererComponent, isStandalone: true, selector: "atx-response-body-renderer", inputs: { data: "data" }, ngImport: i0, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>ize:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n}\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}dl,dd,dt{margin:0;padding:0}dl{display:flex;gap:12px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
+ /**
40
+ * @private
41
+ */
42
+ set log(value) {
43
+ super.log = value;
44
+ this.ngOnDestroy();
45
+ if (!value)
46
+ return;
47
+ const metadata = value.metadata;
48
+ const response = metadata.response;
49
+ if (!response)
50
+ return;
51
+ const body = response.body;
52
+ this.body = body;
53
+ if (!body)
54
+ return;
55
+ const bodyType = DataUtil.getBodyType(body);
56
+ if (bodyType === ConsoleBodyType.TEXT) {
57
+ this.text = body;
58
+ return;
59
+ }
60
+ if (bodyType === ConsoleBodyType.JSON) {
61
+ this.text = JSON.stringify(body);
62
+ return;
63
+ }
64
+ if (bodyType === ConsoleBodyType.BLOB) {
65
+ this.blob = body;
66
+ return;
67
+ }
68
+ if (bodyType === ConsoleBodyType.ARRAY_BUFFER)
69
+ this.arrayBuffer = body;
70
+ }
71
+ /**
72
+ * @private
73
+ */
74
+ ngOnDestroy() {
75
+ this.text = this.body = this.blob = this.arrayBuffer = null;
76
+ }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponseBodyRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
78
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxResponseBodyRendererComponent, isStandalone: true, selector: "atx-response-body-renderer", inputs: { log: "log" }, usesInheritance: true, ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>size:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n} @else if (currLog) {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}dl,dd,dt{margin:0;padding:0}dl{display:flex;gap:12px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
79
  }
41
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponseBodyRendererComponent, decorators: [{
42
81
  type: Component,
43
82
  args: [{ selector: 'atx-response-body-renderer', standalone: true, imports: [
44
83
  AtxJsonViewerComponent,
45
84
  SafeHtmlPipe
46
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>ize:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n}\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}dl,dd,dt{margin:0;padding:0}dl{display:flex;gap:12px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
47
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { data: [{
85
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>size:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n} @else if (currLog) {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}dl,dd,dt{margin:0;padding:0}dl{display:flex;gap:12px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
86
+ }], propDecorators: { log: [{
48
87
  type: Input
49
88
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtYm9keS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcmVzcG9uc2UtYm9keS1yZW5kZXJlci9yZXNwb25zZS1ib2R5LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXNwb25zZS1ib2R5LXJlbmRlcmVyL3Jlc3BvbnNlLWJvZHktcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWF0RCxNQUFNLE9BQU8sZ0NBQWdDO0lBUTNDLElBQ1csSUFBSSxDQUFFLEtBQVU7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLFFBQVEsR0FBb0IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsSUFBSTtnQkFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztpQkFDcEQsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN6RSxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsSUFBSTtnQkFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztpQkFDekQsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDL0UsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQW9CLElBQXVCO1FBQXZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBcEJqQyxTQUFJLEdBQWtCLElBQUksQ0FBQztRQUMzQixTQUFJLEdBQVEsSUFBSSxDQUFDO1FBQ2pCLFNBQUksR0FBZ0IsSUFBSSxDQUFDO1FBQ3pCLGdCQUFXLEdBQXVCLElBQUksQ0FBQztJQWlCSCxDQUFDOzhHQXRCcEMsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0MsZ0hDekI3QyxxdUNBMENBOzsyRkRqQmEsZ0NBQWdDO2tCQVg1QyxTQUFTOytCQUNFLDRCQUE0QixjQUMxQixJQUFJLFdBQ1A7d0JBQ1Asc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO3NGQVdwQyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXR4SnNvblZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2pzb24tdmlld2VyL2pzb24tdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRhLnV0aWwnO1xyXG5pbXBvcnQgeyBDb25zb2xlQm9keVR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvbnNvbGUtYm9keS10eXBlJztcclxuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vcGlwZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1yZXNwb25zZS1ib2R5LXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEF0eEpzb25WaWV3ZXJDb21wb25lbnQsXHJcbiAgICBTYWZlSHRtbFBpcGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNwb25zZS1ib2R5LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmVzcG9uc2UtYm9keS1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eFJlc3BvbnNlQm9keVJlbmRlcmVyQ29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIHRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBib2R5OiBhbnkgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBibG9iOiBCbG9iIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZGF0YSAodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5ib2R5ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRleHQgPSB0aGlzLmJsb2IgPSB0aGlzLmFycmF5QnVmZmVyID0gbnVsbDtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBib2R5VHlwZTogQ29uc29sZUJvZHlUeXBlID0gRGF0YVV0aWwuZ2V0Qm9keVR5cGUodmFsdWUpO1xyXG4gICAgICBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5URVhUKSB0aGlzLnRleHQgPSB2YWx1ZTtcclxuICAgICAgZWxzZSBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5KU09OKSB0aGlzLnRleHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgIGVsc2UgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuQkxPQikgdGhpcy5ibG9iID0gdmFsdWU7XHJcbiAgICAgIGVsc2UgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuQVJSQVlfQlVGRkVSKSB0aGlzLmFycmF5QnVmZmVyID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxufVxyXG4iLCJcclxuPCEtLVxyXG4gKiBMSUNFTlNFXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbi0tPlxyXG5cclxuQGlmIChib2R5KSB7XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICBAaWYgKHRleHQpIHtcclxuICAgICAgICAgICAge3sgdGV4dCB9fVxyXG4gICAgICAgIH0gQGVsc2UgaWYgKGJsb2IpIHtcclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PkJpbmFyeSBkYXRhOjwvZHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGQ+QmxvYjwvZGQ+XHJcbiAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgICAgIDxkbD5cclxuICAgICAgICAgICAgICAgIDxkdD5pemU6PC9kdD5cclxuICAgICAgICAgICAgICAgIDxkZD57eyBibG9iLnNpemUgfX08L2RkPlxyXG4gICAgICAgICAgICA8L2RsPlxyXG4gICAgICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgICAgICA8ZHQ+dHlwZTo8L2R0PlxyXG4gICAgICAgICAgICAgICAgPGRkPnt7IGJsb2IudHlwZSB9fTwvZGQ+XHJcbiAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgfSBAZWxzZSBpZiAoYXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PkJpbmFyeSBkYXRhOjwvZHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGQ+QXJyYXkgQnVmZmVyPC9kZD5cclxuICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PmJ5dGUgbGVuZ3RoOjwvZHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGQ+e3sgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCB9fTwvZGQ+XHJcbiAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZz5UaGlzIHJlcXVlc3QgaGFzIG5vIGRhdGEgYXZhaWxhYmxlPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvc2VjdGlvbj5cclxufVxyXG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtYm9keS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcmVzcG9uc2UtYm9keS1yZW5kZXJlci9yZXNwb25zZS1ib2R5LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXNwb25zZS1ib2R5LXJlbmRlcmVyL3Jlc3BvbnNlLWJvZHktcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBRXRFOzs7R0FHRztBQVlILE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxrQkFBa0I7SUFYeEU7O1FBYUU7O1dBRUc7UUFDTyxTQUFJLEdBQWtCLElBQUksQ0FBQztRQUVyQzs7V0FFRztRQUNPLFNBQUksR0FBUSxJQUFJLENBQUM7UUFFM0I7O1dBRUc7UUFDTyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUVuQzs7V0FFRztRQUNPLGdCQUFXLEdBQXVCLElBQUksQ0FBQztLQXNDbEQ7SUFwQ0M7O09BRUc7SUFDSCxJQUNvQixHQUFHLENBQUMsS0FBaUI7UUFDdkMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixNQUFNLFFBQVEsR0FBNEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBdUIsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFDckIsTUFBTSxJQUFJLEdBQVEsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsTUFBTSxRQUFRLEdBQW9CLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLGVBQWUsQ0FBQyxZQUFZO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM5RCxDQUFDOzhHQXpEVSxnQ0FBZ0M7a0dBQWhDLGdDQUFnQyxxSUNoQzdDLCsyQ0E2Q0E7OzJGRGJhLGdDQUFnQztrQkFYNUMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLHNCQUFzQjt3QkFDdEIsWUFBWTtxQkFDYixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkE0QjNCLEdBQUc7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdHhKc29uVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vanNvbi12aWV3ZXIvanNvbi12aWV3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL2RhdGEudXRpbCc7XHJcbmltcG9ydCB7IENvbnNvbGVCb2R5VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWwvY29uc29sZS1ib2R5LXR5cGUnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbFBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9waXBlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwTW9ja0xvZ2dpbmdNZXRhZGF0YSwgTG9nIH0gZnJvbSAncHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgQXR4TG9nUmVuZGVyZXJCYXNlIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3QvbG9nLXJlbmRlcmVyLWJhc2UnO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIFRoZSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBIVFRQIHJlc3BvbnNlIGRhdGEgaW4gdGhlIEFUWCBtb25pdG9yaW5nIGNvbnNvbGUuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1yZXNwb25zZS1ib2R5LXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEF0eEpzb25WaWV3ZXJDb21wb25lbnQsXHJcbiAgICBTYWZlSHRtbFBpcGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNwb25zZS1ib2R5LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmVzcG9uc2UtYm9keS1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eFJlc3BvbnNlQm9keVJlbmRlcmVyQ29tcG9uZW50IGV4dGVuZHMgQXR4TG9nUmVuZGVyZXJCYXNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYm9keTogYW55ID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBibG9iOiBCbG9iIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgbG9nKHZhbHVlOiBMb2cgfCBudWxsKSB7XHJcbiAgICBzdXBlci5sb2cgPSB2YWx1ZTtcclxuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcclxuICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgIGNvbnN0IG1ldGFkYXRhOiBIdHRwTW9ja0xvZ2dpbmdNZXRhZGF0YSA9IHZhbHVlLm1ldGFkYXRhOyBcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiA9ICBtZXRhZGF0YS5yZXNwb25zZTtcclxuICAgIGlmICghcmVzcG9uc2UpIHJldHVyblxyXG4gICAgY29uc3QgYm9keTogYW55ID0gcmVzcG9uc2UuYm9keTtcclxuICAgIHRoaXMuYm9keSA9IGJvZHk7XHJcbiAgICBpZiAoIWJvZHkpIHJldHVybjtcclxuICAgIGNvbnN0IGJvZHlUeXBlOiBDb25zb2xlQm9keVR5cGUgPSBEYXRhVXRpbC5nZXRCb2R5VHlwZShib2R5KTtcclxuICAgIGlmIChib2R5VHlwZSA9PT0gQ29uc29sZUJvZHlUeXBlLlRFWFQpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gYm9keTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuSlNPTikge1xyXG4gICAgICB0aGlzLnRleHQgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuQkxPQikge1xyXG4gICAgICB0aGlzLmJsb2IgPSBib2R5O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5BUlJBWV9CVUZGRVIpIHRoaXMuYXJyYXlCdWZmZXIgPSBib2R5O1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dCA9IHRoaXMuYm9keSA9IHRoaXMuYmxvYiA9IHRoaXMuYXJyYXlCdWZmZXIgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcblxyXG5AaWYgKGJvZHkpIHtcclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgIEBpZiAodGV4dCkge1xyXG4gICAgICAgICAgICB7eyB0ZXh0IH19XHJcbiAgICAgICAgfSBAZWxzZSBpZiAoYmxvYikge1xyXG4gICAgICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgICAgICA8ZHQ+QmluYXJ5IGRhdGE6PC9kdD5cclxuICAgICAgICAgICAgICAgIDxkZD5CbG9iPC9kZD5cclxuICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PnNpemU6PC9kdD5cclxuICAgICAgICAgICAgICAgIDxkZD57eyBibG9iLnNpemUgfX08L2RkPlxyXG4gICAgICAgICAgICA8L2RsPlxyXG4gICAgICAgICAgICA8ZGw+XHJcbiAgICAgICAgICAgICAgICA8ZHQ+dHlwZTo8L2R0PlxyXG4gICAgICAgICAgICAgICAgPGRkPnt7IGJsb2IudHlwZSB9fTwvZGQ+XHJcbiAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgfSBAZWxzZSBpZiAoYXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PkJpbmFyeSBkYXRhOjwvZHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGQ+QXJyYXkgQnVmZmVyPC9kZD5cclxuICAgICAgICAgICAgPC9kbD5cclxuICAgICAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICAgICAgPGR0PmJ5dGUgbGVuZ3RoOjwvZHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGQ+e3sgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCB9fTwvZGQ+XHJcbiAgICAgICAgICAgIDwvZGw+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZz5UaGlzIHJlcXVlc3QgaGFzIG5vIGRhdGEgYXZhaWxhYmxlPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvc2VjdGlvbj5cclxufSBAZWxzZSBpZiAoY3VyckxvZykge1xyXG4gICAgPGRpdiBjbGFzcz1cImNlbnRlci1jb250ZW50XCI+XHJcbiAgICAgICAgPHN0cm9uZz5UaGlzIHJlcXVlc3QgaGFzIG5vIGRhdGEgYXZhaWxhYmxlPC9zdHJvbmc+XHJcbiAgICA8L2Rpdj5cclxufVxyXG4iXX0=