@gravitee/ui-particles-angular 9.6.0-angular-16-c8d84dc → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/esm2020/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +104 -0
  2. package/{esm2022 → esm2020}/lib/gio-asciidoctor/gio-asciidoctor.module.mjs +5 -5
  3. package/{esm2022 → esm2020}/lib/gio-asciidoctor/gio-asciidoctor.service.mjs +4 -4
  4. package/{esm2022 → esm2020}/lib/gio-avatar/gio-avatar.component.mjs +4 -4
  5. package/{esm2022 → esm2020}/lib/gio-avatar/gio-avatar.module.mjs +5 -5
  6. package/{esm2022 → esm2020}/lib/gio-banner/gio-banner.component.mjs +22 -22
  7. package/{esm2022 → esm2020}/lib/gio-banner/gio-banner.module.mjs +17 -17
  8. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb-item.directive.mjs +4 -4
  9. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb.component.mjs +4 -4
  10. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb.module.mjs +5 -5
  11. package/{esm2022 → esm2020}/lib/gio-card-empty-state/gio-card-empty-state.component.mjs +4 -4
  12. package/{esm2022 → esm2020}/lib/gio-card-empty-state/gio-card-empty-state.module.mjs +5 -5
  13. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard-copy-icon.component.mjs +6 -6
  14. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard-copy-wrapper.component.mjs +6 -6
  15. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard.base.component.mjs +4 -4
  16. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard.module.mjs +5 -5
  17. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.mjs +4 -4
  18. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.mjs +2 -2
  19. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.mjs +5 -5
  20. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.component.mjs +4 -4
  21. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.harness.mjs +2 -2
  22. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.module.mjs +5 -5
  23. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron-hint.component.mjs +4 -4
  24. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron-label.component.mjs +4 -4
  25. package/esm2020/lib/gio-form-cron/gio-form-cron.component.mjs +208 -0
  26. package/esm2020/lib/gio-form-cron/gio-form-cron.harness.mjs +77 -0
  27. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron.module.mjs +21 -21
  28. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +4 -4
  29. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.mjs +4 -4
  30. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.mjs +4 -4
  31. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +95 -0
  32. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.component.mjs +4 -4
  33. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.module.mjs +11 -11
  34. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid-ignore.directive.mjs +4 -4
  35. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.directive.mjs +10 -10
  36. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.module.mjs +5 -5
  37. package/{esm2022 → esm2020}/lib/gio-form-headers/gio-form-headers-label.component.mjs +4 -4
  38. package/esm2020/lib/gio-form-headers/gio-form-headers.component.mjs +273 -0
  39. package/esm2020/lib/gio-form-headers/gio-form-headers.harness.mjs +73 -0
  40. package/{esm2022 → esm2020}/lib/gio-form-headers/gio-form-headers.module.mjs +19 -19
  41. package/{esm2022 → esm2020}/lib/gio-form-json-schema/gio-form-json-schema.component.mjs +4 -4
  42. package/esm2020/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +203 -0
  43. package/{esm2022 → esm2020}/lib/gio-form-json-schema/gio-formly-json-schema.service.mjs +4 -4
  44. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/array-type.component.mjs +6 -6
  45. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/code-editor-type.component.mjs +6 -6
  46. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/headers-type.component.mjs +6 -6
  47. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/multischema-type.component.mjs +6 -6
  48. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/null-type.component.mjs +4 -4
  49. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/object-type.component.mjs +7 -7
  50. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/toggle-type.component.mjs +6 -6
  51. package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-banner-wrapper.component.mjs +4 -4
  52. package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-password-eye.component.mjs +6 -6
  53. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-label.directive.mjs +10 -10
  54. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.mjs +4 -4
  55. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-slide-toggle.module.mjs +5 -5
  56. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +314 -0
  57. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +74 -0
  58. package/{esm2022 → esm2020}/lib/gio-form-tags-input/gio-form-tags-input.module.mjs +21 -21
  59. package/{esm2022 → esm2020}/lib/gio-icons/gio-icons.module.mjs +5 -5
  60. package/{esm2022 → esm2020}/lib/gio-license/gio-license-dialog/gio-license-dialog.component.mjs +4 -4
  61. package/{esm2022 → esm2020}/lib/gio-license/gio-license-dialog/gio-license-dialog.module.mjs +5 -5
  62. package/{esm2022 → esm2020}/lib/gio-license/gio-license.directive.mjs +4 -4
  63. package/{esm2022 → esm2020}/lib/gio-license/gio-license.module.mjs +5 -5
  64. package/{esm2022 → esm2020}/lib/gio-license/gio-license.service.mjs +4 -4
  65. package/esm2020/lib/gio-license/gio-license.testing.module.mjs +107 -0
  66. package/{esm2022 → esm2020}/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.mjs +5 -5
  67. package/esm2020/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +44 -0
  68. package/{esm2022 → esm2020}/lib/gio-license-expiration-notification/gio-license-expiration-notification.module.mjs +5 -5
  69. package/{esm2022 → esm2020}/lib/gio-loader/gio-loader.component.mjs +4 -4
  70. package/{esm2022 → esm2020}/lib/gio-loader/gio-loader.module.mjs +5 -5
  71. package/{esm2022 → esm2020}/lib/gio-mat-config/gio-mat-config.module.mjs +8 -8
  72. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +149 -0
  73. package/{esm2022 → esm2020}/lib/gio-monaco-editor/gio-monaco-editor.component.mjs +4 -4
  74. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +70 -0
  75. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +58 -0
  76. package/{esm2022 → esm2020}/lib/gio-monaco-editor/gio-monaco-editor.testing.component.mjs +4 -4
  77. package/{esm2022 → esm2020}/lib/gio-monaco-editor/services/gio-language-json.service.mjs +4 -4
  78. package/{esm2022 → esm2020}/lib/gio-monaco-editor/services/gio-monaco-editor.service.mjs +4 -4
  79. package/{esm2022 → esm2020}/lib/gio-pipe/gio.pipe.module.mjs +5 -5
  80. package/{esm2022 → esm2020}/lib/gio-pipe/safe.pipe.mjs +4 -4
  81. package/{esm2022 → esm2020}/lib/gio-prismjs/gio-prismjs.service.mjs +4 -4
  82. package/{esm2022 → esm2020}/lib/gio-radio-button/gio-radio-button-content.component.mjs +10 -10
  83. package/{esm2022 → esm2020}/lib/gio-radio-button/gio-radio-button.module.mjs +5 -5
  84. package/esm2020/lib/gio-save-bar/gio-save-bar.component.mjs +135 -0
  85. package/esm2020/lib/gio-save-bar/gio-save-bar.harness.mjs +54 -0
  86. package/{esm2022 → esm2020}/lib/gio-save-bar/gio-save-bar.module.mjs +5 -5
  87. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-footer/gio-menu-footer.component.mjs +4 -4
  88. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-header/gio-menu-header.component.mjs +4 -4
  89. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.mjs +5 -5
  90. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-license-expiration-notification/gio-menu-license-expiration-notification.component.mjs +4 -4
  91. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-list/gio-menu-list.component.mjs +4 -4
  92. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.component.mjs +4 -4
  93. package/esm2020/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +41 -0
  94. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.service.mjs +4 -4
  95. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.mjs +4 -4
  96. package/esm2020/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +41 -0
  97. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.component.mjs +4 -4
  98. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.module.mjs +19 -19
  99. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.service.mjs +4 -4
  100. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.mjs +4 -4
  101. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.mjs +4 -4
  102. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu.component.mjs +7 -7
  103. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu.module.mjs +5 -5
  104. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.mjs +5 -5
  105. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.mjs +4 -4
  106. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.mjs +5 -5
  107. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.mjs +4 -4
  108. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.mjs +5 -5
  109. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar.component.mjs +4 -4
  110. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar.module.mjs +5 -5
  111. package/esm2020/testing/harnesses/div.harness.mjs +45 -0
  112. package/esm2020/testing/harnesses/span.harness.mjs +42 -0
  113. package/fesm2015/gravitee-ui-particles-angular-testing.mjs +100 -0
  114. package/fesm2015/gravitee-ui-particles-angular-testing.mjs.map +1 -0
  115. package/fesm2015/gravitee-ui-particles-angular.mjs +7107 -0
  116. package/fesm2015/gravitee-ui-particles-angular.mjs.map +1 -0
  117. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular-testing.mjs +2 -2
  118. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular-testing.mjs.map +1 -1
  119. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular.mjs +629 -629
  120. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular.mjs.map +1 -1
  121. package/lib/gio-asciidoctor/gio-asciidoctor.component.d.ts +1 -1
  122. package/lib/gio-avatar/gio-avatar.component.d.ts +1 -1
  123. package/lib/gio-banner/gio-banner.component.d.ts +1 -1
  124. package/lib/gio-card-empty-state/gio-card-empty-state.component.d.ts +1 -1
  125. package/lib/gio-clipboard/gio-clipboard.base.component.d.ts +1 -1
  126. package/lib/gio-form-file-picker/gio-form-file-picker.component.d.ts +1 -1
  127. package/lib/gio-form-headers/gio-form-headers.component.d.ts +1 -1
  128. package/lib/gio-form-json-schema/gio-form-json-schema.component.d.ts +1 -1
  129. package/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.d.ts +1 -1
  130. package/lib/gio-form-tags-input/gio-form-tags-input.component.d.ts +1 -1
  131. package/lib/gio-license/gio-license.directive.d.ts +1 -1
  132. package/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.d.ts +1 -1
  133. package/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.d.ts +1 -1
  134. package/lib/gio-monaco-editor/gio-monaco-editor.component.d.ts +1 -1
  135. package/lib/gio-radio-button/gio-radio-button-content.component.d.ts +1 -1
  136. package/lib/gio-save-bar/gio-save-bar.component.d.ts +1 -1
  137. package/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.d.ts +1 -1
  138. package/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.d.ts +1 -1
  139. package/lib/oem-theme/gio-menu/gio-menu.component.d.ts +1 -1
  140. package/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.d.ts +1 -1
  141. package/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.d.ts +1 -1
  142. package/lib/oem-theme/gio-submenu/gio-submenu.component.d.ts +1 -1
  143. package/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.d.ts +1 -1
  144. package/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.d.ts +1 -1
  145. package/lib/oem-theme/gio-top-bar/gio-top-bar.component.d.ts +1 -1
  146. package/package.json +23 -15
  147. package/esm2022/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +0 -104
  148. package/esm2022/lib/gio-form-cron/gio-form-cron.component.mjs +0 -208
  149. package/esm2022/lib/gio-form-cron/gio-form-cron.harness.mjs +0 -77
  150. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +0 -95
  151. package/esm2022/lib/gio-form-headers/gio-form-headers.component.mjs +0 -273
  152. package/esm2022/lib/gio-form-headers/gio-form-headers.harness.mjs +0 -73
  153. package/esm2022/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +0 -203
  154. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +0 -314
  155. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +0 -74
  156. package/esm2022/lib/gio-license/gio-license.testing.module.mjs +0 -107
  157. package/esm2022/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +0 -44
  158. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +0 -149
  159. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +0 -70
  160. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +0 -58
  161. package/esm2022/lib/gio-save-bar/gio-save-bar.component.mjs +0 -135
  162. package/esm2022/lib/gio-save-bar/gio-save-bar.harness.mjs +0 -54
  163. package/esm2022/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +0 -41
  164. package/esm2022/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +0 -41
  165. package/esm2022/testing/harnesses/div.harness.mjs +0 -45
  166. package/esm2022/testing/harnesses/span.harness.mjs +0 -42
  167. /package/{esm2022 → esm2020}/gravitee-ui-particles-angular.mjs +0 -0
  168. /package/{esm2022 → esm2020}/lib/gio-avatar/index.mjs +0 -0
  169. /package/{esm2022 → esm2020}/lib/gio-breadcrumb/index.mjs +0 -0
  170. /package/{esm2022 → esm2020}/lib/gio-card-empty-state/index.mjs +0 -0
  171. /package/{esm2022 → esm2020}/lib/gio-dialog/gio-dialog.constant.mjs +0 -0
  172. /package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron.adapter.mjs +0 -0
  173. /package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.model.mjs +0 -0
  174. /package/{esm2022 → esm2020}/lib/gio-form-file-picker/index.mjs +0 -0
  175. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/model/GioJsonSchema.mjs +0 -0
  176. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/util/validation-message.util.mjs +0 -0
  177. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-banner-extension.mjs +0 -0
  178. /package/{esm2022 → esm2020}/lib/gio-mat-config/index.mjs +0 -0
  179. /package/{esm2022 → esm2020}/lib/gio-monaco-editor/models/GioMonacoEditorConfig.mjs +0 -0
  180. /package/{esm2022 → esm2020}/lib/gio-monaco-editor/models/MonacoEditorTheme.mjs +0 -0
  181. /package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/index.mjs +0 -0
  182. /package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/index.mjs +0 -0
  183. /package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/index.mjs +0 -0
  184. /package/{esm2022 → esm2020}/lib/oem-theme/oem-theme.service.mjs +0 -0
  185. /package/{esm2022 → esm2020}/lib/oem-theme/public-api.mjs +0 -0
  186. /package/{esm2022 → esm2020}/lib/public-api.mjs +0 -0
  187. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
  188. /package/{esm2022 → esm2020}/testing/gravitee-ui-particles-angular-testing.mjs +0 -0
  189. /package/{esm2022 → esm2020}/testing/harnesses/index.mjs +0 -0
  190. /package/{esm2022 → esm2020}/testing/public-api.mjs +0 -0
@@ -1,273 +0,0 @@
1
- import { Component, forwardRef, HostBinding, Input } from '@angular/core';
2
- import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
3
- import { dropRight, isEmpty } from 'lodash';
4
- import { map, startWith, tap } from 'rxjs/operators';
5
- import { of } from 'rxjs';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/cdk/a11y";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@angular/material/input";
10
- import * as i4 from "@angular/material/form-field";
11
- import * as i5 from "@angular/cdk/text-field";
12
- import * as i6 from "@angular/forms";
13
- import * as i7 from "@angular/material/icon";
14
- import * as i8 from "@angular/material/button";
15
- import * as i9 from "@angular/material/autocomplete";
16
- import * as i10 from "@angular/material/core";
17
- const HEADER_NAMES = [
18
- 'Accept',
19
- 'Accept-Charset',
20
- 'Accept-Encoding',
21
- 'Accept-Language',
22
- 'Accept-Ranges',
23
- 'Access-Control-Allow-Credentials',
24
- 'Access-Control-Allow-Headers',
25
- 'Access-Control-Allow-Methods',
26
- 'Access-Control-Allow-Origin',
27
- 'Access-Control-Expose-Headers',
28
- 'Access-Control-Max-Age',
29
- 'Access-Control-Request-Headers',
30
- 'Access-Control-Request-Method',
31
- 'Age',
32
- 'Allow',
33
- 'Authorization',
34
- 'Cache-Control',
35
- 'Connection',
36
- 'Content-Disposition',
37
- 'Content-Encoding',
38
- 'Content-ID',
39
- 'Content-Language',
40
- 'Content-Length',
41
- 'Content-Location',
42
- 'Content-MD5',
43
- 'Content-Range',
44
- 'Content-Type',
45
- 'Cookie',
46
- 'Date',
47
- 'ETag',
48
- 'Expires',
49
- 'Expect',
50
- 'Forwarded',
51
- 'From',
52
- 'Host',
53
- 'If-Match',
54
- 'If-Modified-Since',
55
- 'If-None-Match',
56
- 'If-Unmodified-Since',
57
- 'Keep-Alive',
58
- 'Last-Modified',
59
- 'Location',
60
- 'Link',
61
- 'Max-Forwards',
62
- 'MIME-Version',
63
- 'Origin',
64
- 'Pragma',
65
- 'Proxy-Authenticate',
66
- 'Proxy-Authorization',
67
- 'Proxy-Connection',
68
- 'Range',
69
- 'Referer',
70
- 'Retry-After',
71
- 'Server',
72
- 'Set-Cookie',
73
- 'Set-Cookie2',
74
- 'TE',
75
- 'Trailer',
76
- 'Transfer-Encoding',
77
- 'Upgrade',
78
- 'User-Agent',
79
- 'Vary',
80
- 'Via',
81
- 'Warning',
82
- 'WWW-Authenticate',
83
- 'X-Forwarded-For',
84
- 'X-Forwarded-Proto',
85
- 'X-Forwarded-Server',
86
- 'X-Forwarded-Host',
87
- 'X-Forwarded-Port',
88
- 'X-Forwarded-Prefix',
89
- ];
90
- export class GioFormHeadersComponent {
91
- constructor(fm, elRef) {
92
- this.fm = fm;
93
- this.elRef = elRef;
94
- this.headerFieldMapper = {
95
- keyName: 'key',
96
- valueName: 'value',
97
- };
98
- this.headersFormArray = new UntypedFormArray([
99
- new UntypedFormGroup({
100
- key: new UntypedFormControl('', Validators.pattern('^\\S*$')),
101
- value: new UntypedFormControl(''),
102
- }),
103
- ]);
104
- this.disabled = false;
105
- this.headers = [];
106
- this._onChange = () => ({});
107
- this._onTouched = () => ({});
108
- this.filteredHeaderNames = [];
109
- this.mainForm = new UntypedFormGroup({
110
- headers: this.headersFormArray,
111
- });
112
- }
113
- // From ControlValueAccessor interface
114
- writeValue(value) {
115
- if (!value) {
116
- return;
117
- }
118
- this.headers = [...(value ?? [])].map((header) => {
119
- return {
120
- key: header[this.headerFieldMapper.keyName],
121
- value: header[this.headerFieldMapper.valueName],
122
- };
123
- });
124
- this.initHeadersForm();
125
- }
126
- // From ControlValueAccessor interface
127
- registerOnChange(fn) {
128
- if (this.headerFieldMapper) {
129
- this._onChange = (headers) => fn(this.toHeaders(headers));
130
- return;
131
- }
132
- this._onChange = fn;
133
- }
134
- toHeaders(headers) {
135
- return [...(headers ?? [])].map(header => {
136
- return {
137
- [this.headerFieldMapper.keyName]: header.key,
138
- [this.headerFieldMapper.valueName]: header.value,
139
- };
140
- });
141
- }
142
- // From ControlValueAccessor interface
143
- registerOnTouched(fn) {
144
- this._onTouched = fn;
145
- }
146
- // From ControlValueAccessor interface
147
- setDisabledState(isDisabled) {
148
- if (isDisabled === this.disabled) {
149
- // do nothing if the disabled state is not changed
150
- return;
151
- }
152
- this.disabled = isDisabled;
153
- if (isDisabled) {
154
- this.headersFormArray.disable({ emitEvent: false });
155
- this.removeLastHeader();
156
- return;
157
- }
158
- this.headersFormArray.enable({ emitEvent: false });
159
- this.addEmptyHeader();
160
- }
161
- ngOnInit() {
162
- // When user start to complete last header add new empty one a the end
163
- this.headersFormArray?.valueChanges
164
- .pipe(tap(headers => headers.length > 0 && this._onChange(removeLastEmptyHeader(headers))), tap((headers) => {
165
- if (headers.length > 0 && (headers[headers.length - 1].key !== '' || headers[headers.length - 1].value !== '')) {
166
- this.addEmptyHeader();
167
- }
168
- }))
169
- .subscribe();
170
- this.fm.monitor(this.elRef.nativeElement, true).subscribe(() => {
171
- this._onTouched();
172
- });
173
- }
174
- initHeadersForm() {
175
- // Clear all previous headers
176
- this.headersFormArray.clear();
177
- // Populate headers array from headers
178
- this.headers.forEach(({ key, value }, headerIndex) => {
179
- this.headersFormArray.push(new UntypedFormGroup({
180
- key: this.initKeyFormControl(key, headerIndex),
181
- value: new UntypedFormControl({ value, disabled: this.disabled }),
182
- }), {
183
- emitEvent: false,
184
- });
185
- });
186
- // add one empty header a the end
187
- this.addEmptyHeader();
188
- }
189
- getFilteredHeaderNames(headerIndex, header) {
190
- if (!this.filteredHeaderNames[headerIndex]) {
191
- return this.filteredHeaderNames[headerIndex];
192
- }
193
- if (header.key != null && header.key != '') {
194
- this.filteredHeaderNames[headerIndex] = of(header.key).pipe(map(value => this._filter(value)));
195
- return this.filteredHeaderNames[headerIndex];
196
- }
197
- return of(HEADER_NAMES);
198
- }
199
- // From Validator interface
200
- validate(_control) {
201
- if (this.headersFormArray.invalid) {
202
- return { invalid: true };
203
- }
204
- return null;
205
- }
206
- initKeyFormControl(key, headerIndex) {
207
- const control = new UntypedFormControl({ value: key, disabled: this.disabled }, Validators.pattern('^\\S*$'));
208
- const filteredKeys = control.valueChanges.pipe(startWith(''), map(value => this._filter(value)));
209
- this.filteredHeaderNames.splice(headerIndex, 0, filteredKeys);
210
- return control;
211
- }
212
- onDeleteHeader(headerIndex) {
213
- this._onTouched();
214
- this.headersFormArray.removeAt(headerIndex);
215
- }
216
- addEmptyHeader() {
217
- if (this.disabled) {
218
- return;
219
- }
220
- this.headersFormArray.push(new UntypedFormGroup({
221
- key: this.initKeyFormControl('', this.headersFormArray.length),
222
- value: new UntypedFormControl(''),
223
- }), { emitEvent: false });
224
- }
225
- removeLastHeader() {
226
- this.headersFormArray.removeAt(this.headersFormArray.length - 1, { emitEvent: false });
227
- }
228
- _filter(value) {
229
- const filterValue = value.toLowerCase();
230
- return HEADER_NAMES.filter(option => option.toLowerCase().includes(filterValue));
231
- }
232
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GioFormHeadersComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
233
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GioFormHeadersComponent, selector: "gio-form-headers", inputs: { headerFieldMapper: "headerFieldMapper" }, host: { properties: { "class.disabled": "this.disabled" } }, providers: [
234
- {
235
- provide: NG_VALUE_ACCESSOR,
236
- useExisting: forwardRef(() => GioFormHeadersComponent),
237
- multi: true,
238
- },
239
- {
240
- provide: NG_VALIDATORS,
241
- useExisting: forwardRef(() => GioFormHeadersComponent),
242
- multi: true,
243
- },
244
- ], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-headers-label\"></ng-content></div>\n<table class=\"gio-form-headers__table gio-table-light\" [class.disabled]=\"disabled\" [formGroup]=\"mainForm\">\n <thead>\n <tr>\n <th>KEY</th>\n <th>VALUE</th>\n </tr>\n </thead>\n <tbody formArrayName=\"headers\">\n <tr\n *ngFor=\"let control of headersFormArray.controls; index as headerIndex\"\n class=\"gio-form-headers__table__header-row\"\n [formGroupName]=\"headerIndex\"\n >\n <td class=\"gio-form-headers__table__header-row__td-key\">\n <div class=\"gio-form-headers__table__header-row__td-key__field\">\n <textarea\n formControlName=\"key\"\n matInput\n placeholder=\"Name...\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n [matAutocomplete]=\"headerNamesAutocomplete\"\n ></textarea>\n </div>\n <mat-error *ngIf=\"control.get('key')?.hasError('pattern')\">\n Header name must not contain spaces. (RegExp: {{ control.get('key')?.getError('pattern')?.requiredPattern }})\n </mat-error>\n <mat-autocomplete #headerNamesAutocomplete=\"matAutocomplete\">\n <mat-option *ngFor=\"let headerName of getFilteredHeaderNames(headerIndex, control.value) | async\" [value]=\"headerName\">{{\n headerName\n }}</mat-option>\n </mat-autocomplete>\n </td>\n <td class=\"gio-form-headers__table__header-row__td-value\">\n <div class=\"gio-form-headers__table__header-row__td-value__field\">\n <textarea formControlName=\"value\" matInput placeholder=\"Value...\" cdkTextareaAutosize cdkAutosizeMinRows=\"1\"></textarea>\n </div>\n <button\n class=\"gio-form-headers__table__header-row__td-value__button\"\n *ngIf=\"headersFormArray.controls.length - 1 !== headerIndex\"\n mat-icon-button\n aria-label=\"Delete\"\n (click)=\"onDeleteHeader(headerIndex)\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:block;overflow:hidden}.label{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.gio-form-headers__table{width:100%}.gio-form-headers__table__header-row__td-key,.gio-form-headers__table__header-row__td-value{position:relative;width:50%}.gio-form-headers__table__header-row__td-key__field,.gio-form-headers__table__header-row__td-value__field{display:flex;overflow:hidden;width:100%;min-height:32px;flex-direction:column;justify-content:center;padding-bottom:0}.gio-form-headers__table__header-row__td-key__field textarea,.gio-form-headers__table__header-row__td-value__field textarea{overflow:auto;width:100%;height:16px;padding:0;border:none;background:transparent;box-shadow:none;outline:none;resize:none;font-size:14px;font-weight:400;line-height:20px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}.gio-form-headers__table__header-row__td-key__field:focus-within,.gio-form-headers__table__header-row__td-value__field:focus-within{z-index:100;height:auto;background-color:#fff}.gio-form-headers__table__header-row__td-key__field:focus-within *,.gio-form-headers__table__header-row__td-value__field:focus-within *{max-height:none}.gio-form-headers__table__header-row__td-key__button,.gio-form-headers__table__header-row__td-value__button{position:absolute;top:3px;right:3px;display:none}.gio-form-headers__table__header-row__td-remove{width:32px;height:32px;padding:0}.gio-form-headers__table__header-row:hover .gio-form-headers__table__header-row__td-value__button{z-index:110;display:block;background-color:#fff;opacity:.9}:host(.disabled) .label{color:#d3d5dc}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i6.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
245
- }
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GioFormHeadersComponent, decorators: [{
247
- type: Component,
248
- args: [{ selector: 'gio-form-headers', providers: [
249
- {
250
- provide: NG_VALUE_ACCESSOR,
251
- useExisting: forwardRef(() => GioFormHeadersComponent),
252
- multi: true,
253
- },
254
- {
255
- provide: NG_VALIDATORS,
256
- useExisting: forwardRef(() => GioFormHeadersComponent),
257
- multi: true,
258
- },
259
- ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-headers-label\"></ng-content></div>\n<table class=\"gio-form-headers__table gio-table-light\" [class.disabled]=\"disabled\" [formGroup]=\"mainForm\">\n <thead>\n <tr>\n <th>KEY</th>\n <th>VALUE</th>\n </tr>\n </thead>\n <tbody formArrayName=\"headers\">\n <tr\n *ngFor=\"let control of headersFormArray.controls; index as headerIndex\"\n class=\"gio-form-headers__table__header-row\"\n [formGroupName]=\"headerIndex\"\n >\n <td class=\"gio-form-headers__table__header-row__td-key\">\n <div class=\"gio-form-headers__table__header-row__td-key__field\">\n <textarea\n formControlName=\"key\"\n matInput\n placeholder=\"Name...\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n [matAutocomplete]=\"headerNamesAutocomplete\"\n ></textarea>\n </div>\n <mat-error *ngIf=\"control.get('key')?.hasError('pattern')\">\n Header name must not contain spaces. (RegExp: {{ control.get('key')?.getError('pattern')?.requiredPattern }})\n </mat-error>\n <mat-autocomplete #headerNamesAutocomplete=\"matAutocomplete\">\n <mat-option *ngFor=\"let headerName of getFilteredHeaderNames(headerIndex, control.value) | async\" [value]=\"headerName\">{{\n headerName\n }}</mat-option>\n </mat-autocomplete>\n </td>\n <td class=\"gio-form-headers__table__header-row__td-value\">\n <div class=\"gio-form-headers__table__header-row__td-value__field\">\n <textarea formControlName=\"value\" matInput placeholder=\"Value...\" cdkTextareaAutosize cdkAutosizeMinRows=\"1\"></textarea>\n </div>\n <button\n class=\"gio-form-headers__table__header-row__td-value__button\"\n *ngIf=\"headersFormArray.controls.length - 1 !== headerIndex\"\n mat-icon-button\n aria-label=\"Delete\"\n (click)=\"onDeleteHeader(headerIndex)\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:block;overflow:hidden}.label{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.gio-form-headers__table{width:100%}.gio-form-headers__table__header-row__td-key,.gio-form-headers__table__header-row__td-value{position:relative;width:50%}.gio-form-headers__table__header-row__td-key__field,.gio-form-headers__table__header-row__td-value__field{display:flex;overflow:hidden;width:100%;min-height:32px;flex-direction:column;justify-content:center;padding-bottom:0}.gio-form-headers__table__header-row__td-key__field textarea,.gio-form-headers__table__header-row__td-value__field textarea{overflow:auto;width:100%;height:16px;padding:0;border:none;background:transparent;box-shadow:none;outline:none;resize:none;font-size:14px;font-weight:400;line-height:20px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}.gio-form-headers__table__header-row__td-key__field:focus-within,.gio-form-headers__table__header-row__td-value__field:focus-within{z-index:100;height:auto;background-color:#fff}.gio-form-headers__table__header-row__td-key__field:focus-within *,.gio-form-headers__table__header-row__td-value__field:focus-within *{max-height:none}.gio-form-headers__table__header-row__td-key__button,.gio-form-headers__table__header-row__td-value__button{position:absolute;top:3px;right:3px;display:none}.gio-form-headers__table__header-row__td-remove{width:32px;height:32px;padding:0}.gio-form-headers__table__header-row:hover .gio-form-headers__table__header-row__td-value__button{z-index:110;display:block;background-color:#fff;opacity:.9}:host(.disabled) .label{color:#d3d5dc}\n"] }]
260
- }], ctorParameters: function () { return [{ type: i1.FocusMonitor }, { type: i0.ElementRef }]; }, propDecorators: { headerFieldMapper: [{
261
- type: Input
262
- }], disabled: [{
263
- type: HostBinding,
264
- args: ['class.disabled']
265
- }] } });
266
- const removeLastEmptyHeader = (headers) => {
267
- const lastHeader = headers[headers.length - 1];
268
- if (lastHeader && isEmpty(lastHeader.key) && isEmpty(lastHeader.value)) {
269
- return dropRight(headers);
270
- }
271
- return headers;
272
- };
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0taGVhZGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWhlYWRlcnMvZ2lvLWZvcm0taGVhZGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWhlYWRlcnMvZ2lvLWZvcm0taGVhZGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTdEMsTUFBTSxZQUFZLEdBQUc7SUFDbkIsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixrQ0FBa0M7SUFDbEMsOEJBQThCO0lBQzlCLDhCQUE4QjtJQUM5Qiw2QkFBNkI7SUFDN0IsK0JBQStCO0lBQy9CLHdCQUF3QjtJQUN4QixnQ0FBZ0M7SUFDaEMsK0JBQStCO0lBQy9CLEtBQUs7SUFDTCxPQUFPO0lBQ1AsZUFBZTtJQUNmLGVBQWU7SUFDZixZQUFZO0lBQ1oscUJBQXFCO0lB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LE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEUsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBVbnR5cGVkRm9ybUFycmF5LFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRyb3BSaWdodCwgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgSGVhZGVyID0geyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBGb3JtSGVhZGVyRmllbGRNYXBwZXIgPSB7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgdmFsdWVOYW1lOiBzdHJpbmc7XG59O1xuXG5jb25zdCBIRUFERVJfTkFNRVMgPSBbXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUNoYXJzZXQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZScsXG4gICdBY2NlcHQtUmFuZ2VzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxuICAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAnQWdlJyxcbiAgJ0FsbG93JyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDb25uZWN0aW9uJyxcbiAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nLFxuICAnQ29udGVudC1FbmNvZGluZycsXG4gICdDb250ZW50LUlEJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LU1ENScsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnRGF0ZScsXG4gICdFVGFnJyxcbiAgJ0V4cGlyZXMnLFxuICAnRXhwZWN0JyxcbiAgJ0ZvcndhcmRlZCcsXG4gICdGcm9tJyxcbiAgJ0hvc3QnLFxuICAnSWYtTWF0Y2gnLFxuICAnSWYtTW9kaWZpZWQtU2luY2UnLFxuICAnSWYtTm9uZS1NYXRjaCcsXG4gICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgJ0tlZXAtQWxpdmUnLFxuICAnTGFzdC1Nb2RpZmllZCcsXG4gICdMb2NhdGlvbicsXG4gICdMaW5rJyxcbiAgJ01heC1Gb3J3YXJkcycsXG4gICdNSU1FLVZlcnNpb24nLFxuICAnT3JpZ2luJyxcbiAgJ1ByYWdtYScsXG4gICdQcm94eS1BdXRoZW50aWNhdGUnLFxuICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICdQcm94eS1Db25uZWN0aW9uJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VydmVyJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU2V0LUNvb2tpZTInLFxuICAnVEUnLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV2FybmluZycsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtRm9yd2FyZGVkLUZvcicsXG4gICdYLUZvcndhcmRlZC1Qcm90bycsXG4gICdYLUZvcndhcmRlZC1TZXJ2ZXInLFxuICAnWC1Gb3J3YXJkZWQtSG9zdCcsXG4gICdYLUZvcndhcmRlZC1Qb3J0JyxcbiAgJ1gtRm9yd2FyZGVkLVByZWZpeCcsXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZm9ybS1oZWFkZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLWhlYWRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9naW8tZm9ybS1oZWFkZXJzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2lvRm9ybUhlYWRlcnNDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2lvRm9ybUhlYWRlcnNDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRm9ybUhlYWRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVhZGVyRmllbGRNYXBwZXI6IEZvcm1IZWFkZXJGaWVsZE1hcHBlciA9IHtcbiAgICBrZXlOYW1lOiAna2V5JyxcbiAgICB2YWx1ZU5hbWU6ICd2YWx1ZScsXG4gIH07XG5cbiAgcHVibGljIG1haW5Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaGVhZGVyc0Zvcm1BcnJheSA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtcbiAgICBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICBrZXk6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucGF0dGVybignXlxcXFxTKiQnKSksXG4gICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgfSksXG4gIF0pO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKVxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGhlYWRlcnM6IEhlYWRlcltdID0gW107XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IChfaGVhZGVyczogSGVhZGVyW10gfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHByaXZhdGUgZmlsdGVyZWRIZWFkZXJOYW1lczogT2JzZXJ2YWJsZTxzdHJpbmdbXT5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvciwgcHJpdmF0ZSByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZikge1xuICAgIHRoaXMubWFpbkZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnNGb3JtQXJyYXksXG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbLi4uKHZhbHVlID8/IFtdKV0ubWFwKChoZWFkZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogaGVhZGVyW3RoaXMuaGVhZGVyRmllbGRNYXBwZXIua2V5TmFtZV0sXG4gICAgICAgIHZhbHVlOiBoZWFkZXJbdGhpcy5oZWFkZXJGaWVsZE1hcHBlci52YWx1ZU5hbWVdLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRIZWFkZXJzRm9ybSgpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChoZWFkZXJzOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVhZGVyRmllbGRNYXBwZXIpIHtcbiAgICAgIHRoaXMuX29uQ2hhbmdlID0gKGhlYWRlcnM6IEhlYWRlcltdIHwgbnVsbCkgPT4gZm4odGhpcy50b0hlYWRlcnMoaGVhZGVycykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0hlYWRlcnMoaGVhZGVyczogSGVhZGVyW10gfCBudWxsKSB7XG4gICAgcmV0dXJuIFsuLi4oaGVhZGVycyA/PyBbXSldLm1hcChoZWFkZXIgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3RoaXMuaGVhZGVyRmllbGRNYXBwZXIua2V5TmFtZV06IGhlYWRlci5rZXksXG4gICAgICAgIFt0aGlzLmhlYWRlckZpZWxkTWFwcGVyLnZhbHVlTmFtZV06IGhlYWRlci52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNEaXNhYmxlZCA9PT0gdGhpcy5kaXNhYmxlZCkge1xuICAgICAgLy8gZG8gbm90aGluZyBpZiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgbm90IGNoYW5nZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5yZW1vdmVMYXN0SGVhZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuYWRkRW1wdHlIZWFkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBXaGVuIHVzZXIgc3RhcnQgdG8gY29tcGxldGUgbGFzdCBoZWFkZXIgYWRkIG5ldyBlbXB0eSBvbmUgYSB0aGUgZW5kXG4gICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5Py52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoaGVhZGVycyA9PiBoZWFkZXJzLmxlbmd0aCA+IDAgJiYgdGhpcy5fb25DaGFuZ2UocmVtb3ZlTGFzdEVtcHR5SGVhZGVyKGhlYWRlcnMpKSksXG4gICAgICAgIHRhcCgoaGVhZGVyczogSGVhZGVyW10pID0+IHtcbiAgICAgICAgICBpZiAoaGVhZGVycy5sZW5ndGggPiAwICYmIChoZWFkZXJzW2hlYWRlcnMubGVuZ3RoIC0gMV0ua2V5ICE9PSAnJyB8fCBoZWFkZXJzW2hlYWRlcnMubGVuZ3RoIC0gMV0udmFsdWUgIT09ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUhlYWRlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmZtLm1vbml0b3IodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdEhlYWRlcnNGb3JtKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGFsbCBwcmV2aW91cyBoZWFkZXJzXG4gICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5LmNsZWFyKCk7XG5cbiAgICAvLyBQb3B1bGF0ZSBoZWFkZXJzIGFycmF5IGZyb20gaGVhZGVyc1xuICAgIHRoaXMuaGVhZGVycy5mb3JFYWNoKCh7IGtleSwgdmFsdWUgfSwgaGVhZGVySW5kZXgpID0+IHtcbiAgICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5wdXNoKFxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICAgICAga2V5OiB0aGlzLmluaXRLZXlGb3JtQ29udHJvbChrZXksIGhlYWRlckluZGV4KSxcbiAgICAgICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIGFkZCBvbmUgZW1wdHkgaGVhZGVyIGEgdGhlIGVuZFxuICAgIHRoaXMuYWRkRW1wdHlIZWFkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJlZEhlYWRlck5hbWVzKGhlYWRlckluZGV4OiBudW1iZXIsIGhlYWRlcjogSGVhZGVyKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIGlmICghdGhpcy5maWx0ZXJlZEhlYWRlck5hbWVzW2hlYWRlckluZGV4XSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRIZWFkZXJOYW1lc1toZWFkZXJJbmRleF07XG4gICAgfVxuICAgIGlmIChoZWFkZXIua2V5ICE9IG51bGwgJiYgaGVhZGVyLmtleSAhPSAnJykge1xuICAgICAgdGhpcy5maWx0ZXJlZEhlYWRlck5hbWVzW2hlYWRlckluZGV4XSA9IG9mKGhlYWRlci5rZXkpLnBpcGUobWFwKHZhbHVlID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSGVhZGVyTmFtZXNbaGVhZGVySW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb2YoSEVBREVSX05BTUVTKTtcbiAgfVxuXG4gIC8vIEZyb20gVmFsaWRhdG9yIGludGVyZmFjZVxuICBwdWJsaWMgdmFsaWRhdGUoX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAodGhpcy5oZWFkZXJzRm9ybUFycmF5LmludmFsaWQpIHtcbiAgICAgIHJldHVybiB7IGludmFsaWQ6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGluaXRLZXlGb3JtQ29udHJvbChrZXk6IHN0cmluZywgaGVhZGVySW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IGtleSwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSwgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeXFxcXFMqJCcpKTtcbiAgICBjb25zdCBmaWx0ZXJlZEtleXMgPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLl9maWx0ZXIodmFsdWUpKSxcbiAgICApO1xuICAgIHRoaXMuZmlsdGVyZWRIZWFkZXJOYW1lcy5zcGxpY2UoaGVhZGVySW5kZXgsIDAsIGZpbHRlcmVkS2V5cyk7XG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgb25EZWxldGVIZWFkZXIoaGVhZGVySW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5yZW1vdmVBdChoZWFkZXJJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVtcHR5SGVhZGVyKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5LnB1c2goXG4gICAgICBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICAgIGtleTogdGhpcy5pbml0S2V5Rm9ybUNvbnRyb2woJycsIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5sZW5ndGgpLFxuICAgICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgICB9KSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxhc3RIZWFkZXIoKSB7XG4gICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5LnJlbW92ZUF0KHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5sZW5ndGggLSAxLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIEhFQURFUl9OQU1FUy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XG4gIH1cbn1cblxuY29uc3QgcmVtb3ZlTGFzdEVtcHR5SGVhZGVyID0gKGhlYWRlcnM6IEhlYWRlcltdKSA9PiB7XG4gIGNvbnN0IGxhc3RIZWFkZXIgPSBoZWFkZXJzW2hlYWRlcnMubGVuZ3RoIC0gMV07XG5cbiAgaWYgKGxhc3RIZWFkZXIgJiYgaXNFbXB0eShsYXN0SGVhZGVyLmtleSkgJiYgaXNFbXB0eShsYXN0SGVhZGVyLnZhbHVlKSkge1xuICAgIHJldHVybiBkcm9wUmlnaHQoaGVhZGVycyk7XG4gIH1cbiAgcmV0dXJuIGhlYWRlcnM7XG59O1xuIiwiPCEtLVxuXG4gICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuLS0+XG48ZGl2IGNsYXNzPVwibGFiZWxcIj48bmctY29udGVudCBzZWxlY3Q9XCJnaW8tZm9ybS1oZWFkZXJzLWxhYmVsXCI+PC9uZy1jb250ZW50PjwvZGl2PlxuPHRhYmxlIGNsYXNzPVwiZ2lvLWZvcm0taGVhZGVyc19fdGFibGUgZ2lvLXRhYmxlLWxpZ2h0XCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2Zvcm1Hcm91cF09XCJtYWluRm9ybVwiPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPktFWTwvdGg+XG4gICAgICA8dGg+VkFMVUU8L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keSBmb3JtQXJyYXlOYW1lPVwiaGVhZGVyc1wiPlxuICAgIDx0clxuICAgICAgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2YgaGVhZGVyc0Zvcm1BcnJheS5jb250cm9sczsgaW5kZXggYXMgaGVhZGVySW5kZXhcIlxuICAgICAgY2xhc3M9XCJnaW8tZm9ybS1oZWFkZXJzX190YWJsZV9faGVhZGVyLXJvd1wiXG4gICAgICBbZm9ybUdyb3VwTmFtZV09XCJoZWFkZXJJbmRleFwiXG4gICAgPlxuICAgICAgPHRkIGNsYXNzPVwiZ2lvLWZvcm0taGVhZGVyc19fdGFibGVfX2hlYWRlci1yb3dfX3RkLWtleVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2lvLWZvcm0taGVhZGVyc19fdGFibGVfX2hlYWRlci1yb3dfX3RkLWtleV9fZmllbGRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImtleVwiXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lLi4uXCJcbiAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcbiAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJoZWFkZXJOYW1lc0F1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5nZXQoJ2tleScpPy5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgSGVhZGVyIG5hbWUgbXVzdCBub3QgY29udGFpbiBzcGFjZXMuIChSZWdFeHA6IHt7IGNvbnRyb2wuZ2V0KCdrZXknKT8uZ2V0RXJyb3IoJ3BhdHRlcm4nKT8ucmVxdWlyZWRQYXR0ZXJuIH19KVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2hlYWRlck5hbWVzQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhlYWRlck5hbWUgb2YgZ2V0RmlsdGVyZWRIZWFkZXJOYW1lcyhoZWFkZXJJbmRleCwgY29udHJvbC52YWx1ZSkgfCBhc3luY1wiIFt2YWx1ZV09XCJoZWFkZXJOYW1lXCI+e3tcbiAgICAgICAgICAgIGhlYWRlck5hbWVcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdpby1mb3JtLWhlYWRlcnNfX3RhYmxlX19oZWFkZXItcm93X190ZC12YWx1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2lvLWZvcm0taGVhZGVyc19fdGFibGVfX2hlYWRlci1yb3dfX3RkLXZhbHVlX19maWVsZFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiVmFsdWUuLi5cIiBjZGtUZXh0YXJlYUF1dG9zaXplIGNka0F1dG9zaXplTWluUm93cz1cIjFcIj48L3RleHRhcmVhPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiZ2lvLWZvcm0taGVhZGVyc19fdGFibGVfX2hlYWRlci1yb3dfX3RkLXZhbHVlX19idXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwiaGVhZGVyc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggLSAxICE9PSBoZWFkZXJJbmRleFwiXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlSGVhZGVyKGhlYWRlckluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImdpbzpjYW5jZWxcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=
@@ -1,73 +0,0 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing';
17
- import { MatButtonHarness } from '@angular/material/button/testing';
18
- import { MatInputHarness } from '@angular/material/input/testing';
19
- import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
20
- export class GioFormHeadersHarness extends ComponentHarness {
21
- constructor() {
22
- super(...arguments);
23
- this.getHeaderRowsElement = this.locatorForAll('tr.gio-form-headers__table__header-row');
24
- this.getHeaderRowInputKey = (rowIndex) => this.locatorFor(MatInputHarness.with({ ancestor: `[ng-reflect-name="${rowIndex}"]`, selector: '[formControlName=key]' }));
25
- this.getHeaderRowInputKeyAutocomplete = (rowIndex) => this.locatorFor(MatAutocompleteHarness.with({ ancestor: `tr[ng-reflect-name="${rowIndex}"]` }));
26
- this.getHeaderRowInputValue = (rowIndex) => this.locatorFor(MatInputHarness.with({ ancestor: `tr[ng-reflect-name="${rowIndex}"]`, selector: '[formControlName=value]' }));
27
- this.getHeaderRowRemoveButton = (rowIndex) => this.locatorForOptional(MatButtonHarness.with({ ancestor: `tr[ng-reflect-name="${rowIndex}"]`, selector: '[aria-label="Delete"]' }));
28
- }
29
- static { this.hostSelector = 'gio-form-headers'; }
30
- /**
31
- * Gets a `HarnessPredicate` that can be used to search for a `GioFormColorInputHarness` that meets
32
- * certain criteria.
33
- *
34
- * @param options Options for filtering which input instances are considered a match.
35
- * @return a `HarnessPredicate` configured with the given options.
36
- */
37
- static with(options = {}) {
38
- return new HarnessPredicate(GioFormHeadersHarness, options);
39
- }
40
- async getHeaderRows() {
41
- const rows = await this.getHeaderRowsElement();
42
- return Promise.all(rows.map(async (_, rowIndex) => ({
43
- keyInput: await this.getHeaderRowInputKey(rowIndex)(),
44
- keyAutocomplete: await this.getHeaderRowInputKeyAutocomplete(rowIndex)(),
45
- valueInput: await this.getHeaderRowInputValue(rowIndex)(),
46
- removeButton: await this.getHeaderRowRemoveButton(rowIndex)(),
47
- })));
48
- }
49
- async getLastHeaderRow() {
50
- const rows = await this.getHeaderRowsElement();
51
- return {
52
- keyInput: await this.getHeaderRowInputKey(rows.length - 1)(),
53
- valueInput: await this.getHeaderRowInputValue(rows.length - 1)(),
54
- };
55
- }
56
- async addHeader({ key, value }) {
57
- const { keyInput, valueInput } = await this.getLastHeaderRow();
58
- await keyInput.setValue(key);
59
- await valueInput.setValue(value);
60
- }
61
- async isDisabled() {
62
- return (await this.host()).hasClass('disabled');
63
- }
64
- async getValue() {
65
- const rows = await this.getHeaderRows();
66
- if (!(await this.isDisabled())) {
67
- // Remove last empty value
68
- rows.pop();
69
- }
70
- return parallel(() => rows.map(async (r) => ({ key: await r.keyInput.getValue(), value: await r.valueInput.getValue() })));
71
- }
72
- }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0taGVhZGVycy5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1oZWFkZXJzL2dpby1mb3JtLWhlYWRlcnMuaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0MsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRWhGLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxnQkFBZ0I7SUFBM0Q7O1FBY1UseUJBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBRXBGLHlCQUFvQixHQUFHLENBQUMsUUFBZ0IsRUFBbUMsRUFBRSxDQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwSCxxQ0FBZ0MsR0FBRyxDQUFDLFFBQWdCLEVBQTBDLEVBQUUsQ0FDdEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFGLDJCQUFzQixHQUFHLENBQUMsUUFBZ0IsRUFBbUMsRUFBRSxDQUNyRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJ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QUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQXN5bmNGYWN0b3J5Rm4sIEJhc2VIYXJuZXNzRmlsdGVycywgQ29tcG9uZW50SGFybmVzcywgSGFybmVzc1ByZWRpY2F0ZSwgcGFyYWxsZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBNYXRCdXR0b25IYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0SW5wdXRIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQvdGVzdGluZyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL3Rlc3RpbmcnO1xuXG5leHBvcnQgY2xhc3MgR2lvRm9ybUhlYWRlcnNIYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLWhlYWRlcnMnO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGBHaW9Gb3JtQ29sb3JJbnB1dEhhcm5lc3NgIHRoYXQgbWVldHNcbiAgICogY2VydGFpbiBjcml0ZXJpYS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHdoaWNoIGlucHV0IGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBhIG1hdGNoLlxuICAgKiBAcmV0dXJuIGEgYEhhcm5lc3NQcmVkaWNhdGVgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChvcHRpb25zOiBCYXNlSGFybmVzc0ZpbHRlcnMgPSB7fSk6IEhhcm5lc3NQcmVkaWNhdGU8R2lvRm9ybUhlYWRlcnNIYXJuZXNzPiB7XG4gICAgcmV0dXJuIG5ldyBIYXJuZXNzUHJlZGljYXRlKEdpb0Zvcm1IZWFkZXJzSGFybmVzcywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlclJvd3NFbGVtZW50ID0gdGhpcy5sb2NhdG9yRm9yQWxsKCd0ci5naW8tZm9ybS1oZWFkZXJzX190YWJsZV9faGVhZGVyLXJvdycpO1xuXG4gIHByaXZhdGUgZ2V0SGVhZGVyUm93SW5wdXRLZXkgPSAocm93SW5kZXg6IG51bWJlcik6IEFzeW5jRmFjdG9yeUZuPE1hdElucHV0SGFybmVzcz4gPT5cbiAgICB0aGlzLmxvY2F0b3JGb3IoTWF0SW5wdXRIYXJuZXNzLndpdGgoeyBhbmNlc3RvcjogYFtuZy1yZWZsZWN0LW5hbWU9XCIke3Jvd0luZGV4fVwiXWAsIHNlbGVjdG9yOiAnW2Zvcm1Db250cm9sTmFtZT1rZXldJyB9KSk7XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJSb3dJbnB1dEtleUF1dG9jb21wbGV0ZSA9IChyb3dJbmRleDogbnVtYmVyKTogQXN5bmNGYWN0b3J5Rm48TWF0QXV0b2NvbXBsZXRlSGFybmVzcz4gPT5cbiAgICB0aGlzLmxvY2F0b3JGb3IoTWF0QXV0b2NvbXBsZXRlSGFybmVzcy53aXRoKHsgYW5jZXN0b3I6IGB0cltuZy1yZWZsZWN0LW5hbWU9XCIke3Jvd0luZGV4fVwiXWAgfSkpO1xuXG4gIHByaXZhdGUgZ2V0SGVhZGVyUm93SW5wdXRWYWx1ZSA9IChyb3dJbmRleDogbnVtYmVyKTogQXN5bmNGYWN0b3J5Rm48TWF0SW5wdXRIYXJuZXNzPiA9PlxuICAgIHRoaXMubG9jYXRvckZvcihNYXRJbnB1dEhhcm5lc3Mud2l0aCh7IGFuY2VzdG9yOiBgdHJbbmctcmVmbGVjdC1uYW1lPVwiJHtyb3dJbmRleH1cIl1gLCBzZWxlY3RvcjogJ1tmb3JtQ29udHJvbE5hbWU9dmFsdWVdJyB9KSk7XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJSb3dSZW1vdmVCdXR0b24gPSAocm93SW5kZXg6IG51bWJlcik6IEFzeW5jRmFjdG9yeUZuPE1hdEJ1dHRvbkhhcm5lc3MgfCBudWxsPiA9PlxuICAgIHRoaXMubG9jYXRvckZvck9wdGlvbmFsKE1hdEJ1dHRvbkhhcm5lc3Mud2l0aCh7IGFuY2VzdG9yOiBgdHJbbmctcmVmbGVjdC1uYW1lPVwiJHtyb3dJbmRleH1cIl1gLCBzZWxlY3RvcjogJ1thcmlhLWxhYmVsPVwiRGVsZXRlXCJdJyB9KSk7XG5cbiAgcHVibGljIGFzeW5jIGdldEhlYWRlclJvd3MoKTogUHJvbWlzZTxcbiAgICB7XG4gICAgICBrZXlJbnB1dDogTWF0SW5wdXRIYXJuZXNzO1xuICAgICAga2V5QXV0b2NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGVIYXJuZXNzO1xuICAgICAgdmFsdWVJbnB1dDogTWF0SW5wdXRIYXJuZXNzO1xuICAgICAgcmVtb3ZlQnV0dG9uOiBNYXRCdXR0b25IYXJuZXNzIHwgbnVsbDtcbiAgICB9W11cbiAgPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93c0VsZW1lbnQoKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIHJvd3MubWFwKGFzeW5jIChfLCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAga2V5SW5wdXQ6IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93SW5wdXRLZXkocm93SW5kZXgpKCksXG4gICAgICAgIGtleUF1dG9jb21wbGV0ZTogYXdhaXQgdGhpcy5nZXRIZWFkZXJSb3dJbnB1dEtleUF1dG9jb21wbGV0ZShyb3dJbmRleCkoKSxcbiAgICAgICAgdmFsdWVJbnB1dDogYXdhaXQgdGhpcy5nZXRIZWFkZXJSb3dJbnB1dFZhbHVlKHJvd0luZGV4KSgpLFxuICAgICAgICByZW1vdmVCdXR0b246IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93UmVtb3ZlQnV0dG9uKHJvd0luZGV4KSgpLFxuICAgICAgfSkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TGFzdEhlYWRlclJvdygpOiBQcm9taXNlPHsga2V5SW5wdXQ6IE1hdElucHV0SGFybmVzczsgdmFsdWVJbnB1dDogTWF0SW5wdXRIYXJuZXNzIH0+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJSb3dzRWxlbWVudCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleUlucHV0OiBhd2FpdCB0aGlzLmdldEhlYWRlclJvd0lucHV0S2V5KHJvd3MubGVuZ3RoIC0gMSkoKSxcbiAgICAgIHZhbHVlSW5wdXQ6IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93SW5wdXRWYWx1ZShyb3dzLmxlbmd0aCAtIDEpKCksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRIZWFkZXIoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsga2V5SW5wdXQsIHZhbHVlSW5wdXQgfSA9IGF3YWl0IHRoaXMuZ2V0TGFzdEhlYWRlclJvdygpO1xuXG4gICAgYXdhaXQga2V5SW5wdXQuc2V0VmFsdWUoa2V5KTtcbiAgICBhd2FpdCB2YWx1ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmhhc0NsYXNzKCdkaXNhYmxlZCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRIZWFkZXJSb3dzKCk7XG5cbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzRGlzYWJsZWQoKSkpIHtcbiAgICAgIC8vIFJlbW92ZSBsYXN0IGVtcHR5IHZhbHVlXG4gICAgICByb3dzLnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbGxlbCgoKSA9PiByb3dzLm1hcChhc3luYyByID0+ICh7IGtleTogYXdhaXQgci5rZXlJbnB1dC5nZXRWYWx1ZSgpLCB2YWx1ZTogYXdhaXQgci52YWx1ZUlucHV0LmdldFZhbHVlKCkgfSkpKTtcbiAgfVxufVxuIl19