@gravitee/ui-particles-angular 9.6.0 → 10.0.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 (193) hide show
  1. package/esm2022/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +104 -0
  2. package/{esm2020 → esm2022}/lib/gio-asciidoctor/gio-asciidoctor.module.mjs +5 -5
  3. package/{esm2020 → esm2022}/lib/gio-asciidoctor/gio-asciidoctor.service.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/gio-avatar/gio-avatar.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/gio-avatar/gio-avatar.module.mjs +5 -5
  6. package/esm2022/lib/gio-banner/gio-banner.component.mjs +118 -0
  7. package/{esm2020 → esm2022}/lib/gio-banner/gio-banner.module.mjs +17 -17
  8. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb-item.directive.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb.component.mjs +5 -5
  10. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb.module.mjs +5 -5
  11. package/{esm2020 → esm2022}/lib/gio-card-empty-state/gio-card-empty-state.component.mjs +5 -5
  12. package/{esm2020 → esm2022}/lib/gio-card-empty-state/gio-card-empty-state.module.mjs +5 -5
  13. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard-copy-icon.component.mjs +7 -7
  14. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard-copy-wrapper.component.mjs +7 -7
  15. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard.base.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard.module.mjs +5 -5
  17. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.mjs +2 -2
  19. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.component.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.harness.mjs +2 -2
  22. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.module.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron-hint.component.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron-label.component.mjs +4 -4
  25. package/esm2022/lib/gio-form-cron/gio-form-cron.component.mjs +208 -0
  26. package/esm2022/lib/gio-form-cron/gio-form-cron.harness.mjs +77 -0
  27. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron.module.mjs +21 -21
  28. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +29 -0
  29. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.mjs +4 -4
  31. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +95 -0
  32. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.component.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.module.mjs +11 -11
  34. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid-ignore.directive.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.directive.mjs +10 -10
  36. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.module.mjs +5 -5
  37. package/{esm2020 → esm2022}/lib/gio-form-headers/gio-form-headers-label.component.mjs +4 -4
  38. package/esm2022/lib/gio-form-headers/gio-form-headers.component.mjs +273 -0
  39. package/esm2022/lib/gio-form-headers/gio-form-headers.harness.mjs +73 -0
  40. package/{esm2020 → esm2022}/lib/gio-form-headers/gio-form-headers.module.mjs +19 -19
  41. package/{esm2020 → esm2022}/lib/gio-form-json-schema/gio-form-json-schema.component.mjs +4 -4
  42. package/esm2022/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +203 -0
  43. package/{esm2020 → esm2022}/lib/gio-form-json-schema/gio-formly-json-schema.service.mjs +4 -4
  44. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/array-type.component.mjs +7 -7
  45. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/code-editor-type.component.mjs +6 -6
  46. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/headers-type.component.mjs +7 -7
  47. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/multischema-type.component.mjs +7 -7
  48. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/null-type.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/object-type.component.mjs +7 -7
  50. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/toggle-type.component.mjs +6 -6
  51. package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-banner-wrapper.component.mjs +5 -5
  52. package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-password-eye.component.mjs +6 -6
  53. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-label.directive.mjs +10 -10
  54. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.mjs +5 -5
  55. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-slide-toggle.module.mjs +5 -5
  56. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +314 -0
  57. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +74 -0
  58. package/{esm2020 → esm2022}/lib/gio-form-tags-input/gio-form-tags-input.module.mjs +21 -21
  59. package/{esm2020 → esm2022}/lib/gio-icons/gio-icons.module.mjs +5 -5
  60. package/{esm2020 → esm2022}/lib/gio-license/gio-license-dialog/gio-license-dialog.component.mjs +5 -5
  61. package/{esm2020 → esm2022}/lib/gio-license/gio-license-dialog/gio-license-dialog.module.mjs +5 -5
  62. package/{esm2020 → esm2022}/lib/gio-license/gio-license.directive.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/gio-license/gio-license.module.mjs +5 -5
  64. package/{esm2020 → esm2022}/lib/gio-license/gio-license.service.mjs +4 -4
  65. package/esm2022/lib/gio-license/gio-license.testing.module.mjs +107 -0
  66. package/{esm2020 → esm2022}/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.mjs +5 -5
  67. package/esm2022/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +44 -0
  68. package/{esm2020 → esm2022}/lib/gio-license-expiration-notification/gio-license-expiration-notification.module.mjs +5 -5
  69. package/{esm2020 → esm2022}/lib/gio-loader/gio-loader.component.mjs +4 -4
  70. package/{esm2020 → esm2022}/lib/gio-loader/gio-loader.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/gio-mat-config/gio-mat-config.module.mjs +8 -8
  72. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +149 -0
  73. package/{esm2020 → esm2022}/lib/gio-monaco-editor/gio-monaco-editor.component.mjs +4 -4
  74. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +70 -0
  75. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +58 -0
  76. package/{esm2020 → esm2022}/lib/gio-monaco-editor/gio-monaco-editor.testing.component.mjs +4 -4
  77. package/{esm2020 → esm2022}/lib/gio-monaco-editor/services/gio-language-json.service.mjs +4 -4
  78. package/{esm2020 → esm2022}/lib/gio-monaco-editor/services/gio-monaco-editor.service.mjs +4 -4
  79. package/{esm2020 → esm2022}/lib/gio-pipe/gio.pipe.module.mjs +5 -5
  80. package/{esm2020 → esm2022}/lib/gio-pipe/safe.pipe.mjs +4 -4
  81. package/{esm2020 → esm2022}/lib/gio-prismjs/gio-prismjs.service.mjs +4 -4
  82. package/{esm2020 → esm2022}/lib/gio-radio-button/gio-radio-button-content.component.mjs +11 -11
  83. package/{esm2020 → esm2022}/lib/gio-radio-button/gio-radio-button.module.mjs +5 -5
  84. package/esm2022/lib/gio-save-bar/gio-save-bar.component.mjs +135 -0
  85. package/esm2022/lib/gio-save-bar/gio-save-bar.harness.mjs +54 -0
  86. package/{esm2020 → esm2022}/lib/gio-save-bar/gio-save-bar.module.mjs +5 -5
  87. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-footer/gio-menu-footer.component.mjs +5 -5
  88. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-header/gio-menu-header.component.mjs +4 -4
  89. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.mjs +5 -5
  90. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-license-expiration-notification/gio-menu-license-expiration-notification.component.mjs +4 -4
  91. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-list/gio-menu-list.component.mjs +4 -4
  92. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.component.mjs +5 -5
  93. package/esm2022/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +41 -0
  94. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.service.mjs +4 -4
  95. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.mjs +5 -5
  96. package/esm2022/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +41 -0
  97. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.component.mjs +5 -5
  98. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.module.mjs +19 -19
  99. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.service.mjs +4 -4
  100. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.mjs +5 -5
  101. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.mjs +5 -5
  102. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu.component.mjs +8 -8
  103. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu.module.mjs +5 -5
  104. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.mjs +5 -5
  105. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.mjs +5 -5
  106. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.mjs +5 -5
  107. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.mjs +5 -5
  108. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.mjs +5 -5
  109. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar.component.mjs +5 -5
  110. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar.module.mjs +5 -5
  111. package/esm2022/testing/harnesses/div.harness.mjs +45 -0
  112. package/esm2022/testing/harnesses/span.harness.mjs +42 -0
  113. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular-testing.mjs +2 -2
  114. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular-testing.mjs.map +1 -1
  115. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular.mjs +662 -662
  116. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular.mjs.map +1 -1
  117. package/lib/gio-asciidoctor/gio-asciidoctor.component.d.ts +1 -1
  118. package/lib/gio-avatar/gio-avatar.component.d.ts +1 -1
  119. package/lib/gio-banner/gio-banner.component.d.ts +1 -1
  120. package/lib/gio-card-empty-state/gio-card-empty-state.component.d.ts +1 -1
  121. package/lib/gio-clipboard/gio-clipboard.base.component.d.ts +1 -1
  122. package/lib/gio-form-file-picker/gio-form-file-picker.component.d.ts +1 -1
  123. package/lib/gio-form-headers/gio-form-headers.component.d.ts +1 -1
  124. package/lib/gio-form-json-schema/gio-form-json-schema.component.d.ts +1 -1
  125. package/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.d.ts +1 -1
  126. package/lib/gio-form-tags-input/gio-form-tags-input.component.d.ts +1 -1
  127. package/lib/gio-license/gio-license.directive.d.ts +1 -1
  128. package/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.d.ts +1 -1
  129. package/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.d.ts +1 -1
  130. package/lib/gio-monaco-editor/gio-monaco-editor.component.d.ts +1 -1
  131. package/lib/gio-radio-button/gio-radio-button-content.component.d.ts +1 -1
  132. package/lib/gio-save-bar/gio-save-bar.component.d.ts +1 -1
  133. package/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.d.ts +1 -1
  134. package/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.d.ts +1 -1
  135. package/lib/oem-theme/gio-menu/gio-menu.component.d.ts +1 -1
  136. package/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.d.ts +1 -1
  137. package/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.d.ts +1 -1
  138. package/lib/oem-theme/gio-submenu/gio-submenu.component.d.ts +1 -1
  139. package/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.d.ts +1 -1
  140. package/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.d.ts +1 -1
  141. package/lib/oem-theme/gio-top-bar/gio-top-bar.component.d.ts +1 -1
  142. package/package.json +15 -23
  143. package/src/scss/gio-mat-palettes.scss +68 -1
  144. package/esm2020/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +0 -104
  145. package/esm2020/lib/gio-banner/gio-banner.component.mjs +0 -118
  146. package/esm2020/lib/gio-form-cron/gio-form-cron.component.mjs +0 -208
  147. package/esm2020/lib/gio-form-cron/gio-form-cron.harness.mjs +0 -77
  148. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +0 -29
  149. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +0 -95
  150. package/esm2020/lib/gio-form-headers/gio-form-headers.component.mjs +0 -273
  151. package/esm2020/lib/gio-form-headers/gio-form-headers.harness.mjs +0 -73
  152. package/esm2020/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +0 -203
  153. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +0 -314
  154. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +0 -74
  155. package/esm2020/lib/gio-license/gio-license.testing.module.mjs +0 -107
  156. package/esm2020/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +0 -44
  157. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +0 -149
  158. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +0 -70
  159. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +0 -58
  160. package/esm2020/lib/gio-save-bar/gio-save-bar.component.mjs +0 -135
  161. package/esm2020/lib/gio-save-bar/gio-save-bar.harness.mjs +0 -54
  162. package/esm2020/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +0 -41
  163. package/esm2020/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +0 -41
  164. package/esm2020/testing/harnesses/div.harness.mjs +0 -45
  165. package/esm2020/testing/harnesses/span.harness.mjs +0 -42
  166. package/fesm2015/gravitee-ui-particles-angular-testing.mjs +0 -100
  167. package/fesm2015/gravitee-ui-particles-angular-testing.mjs.map +0 -1
  168. package/fesm2015/gravitee-ui-particles-angular.mjs +0 -7107
  169. package/fesm2015/gravitee-ui-particles-angular.mjs.map +0 -1
  170. /package/{esm2020 → esm2022}/gravitee-ui-particles-angular.mjs +0 -0
  171. /package/{esm2020 → esm2022}/lib/gio-avatar/index.mjs +0 -0
  172. /package/{esm2020 → esm2022}/lib/gio-breadcrumb/index.mjs +0 -0
  173. /package/{esm2020 → esm2022}/lib/gio-card-empty-state/index.mjs +0 -0
  174. /package/{esm2020 → esm2022}/lib/gio-dialog/gio-dialog.constant.mjs +0 -0
  175. /package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron.adapter.mjs +0 -0
  176. /package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.model.mjs +0 -0
  177. /package/{esm2020 → esm2022}/lib/gio-form-file-picker/index.mjs +0 -0
  178. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/model/GioJsonSchema.mjs +0 -0
  179. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/util/validation-message.util.mjs +0 -0
  180. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-banner-extension.mjs +0 -0
  181. /package/{esm2020 → esm2022}/lib/gio-mat-config/index.mjs +0 -0
  182. /package/{esm2020 → esm2022}/lib/gio-monaco-editor/models/GioMonacoEditorConfig.mjs +0 -0
  183. /package/{esm2020 → esm2022}/lib/gio-monaco-editor/models/MonacoEditorTheme.mjs +0 -0
  184. /package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/index.mjs +0 -0
  185. /package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/index.mjs +0 -0
  186. /package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/index.mjs +0 -0
  187. /package/{esm2020 → esm2022}/lib/oem-theme/oem-theme.service.mjs +0 -0
  188. /package/{esm2020 → esm2022}/lib/oem-theme/public-api.mjs +0 -0
  189. /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
  190. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  191. /package/{esm2020 → esm2022}/testing/gravitee-ui-particles-angular-testing.mjs +0 -0
  192. /package/{esm2020 → esm2022}/testing/harnesses/index.mjs +0 -0
  193. /package/{esm2020 → esm2022}/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
- }
233
- GioFormHeadersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GioFormHeadersComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
234
- GioFormHeadersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GioFormHeadersComponent, selector: "gio-form-headers", inputs: { headerFieldMapper: "headerFieldMapper" }, host: { properties: { "class.disabled": "this.disabled" } }, providers: [
235
- {
236
- provide: NG_VALUE_ACCESSOR,
237
- useExisting: forwardRef(() => GioFormHeadersComponent),
238
- multi: true,
239
- },
240
- {
241
- provide: NG_VALIDATORS,
242
- useExisting: forwardRef(() => GioFormHeadersComponent),
243
- multi: true,
244
- },
245
- ], 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" }] });
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", 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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Q0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEUsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBVbnR5cGVkRm9ybUFycmF5LFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRyb3BSaWdodCwgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgSGVhZGVyID0geyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBGb3JtSGVhZGVyRmllbGRNYXBwZXIgPSB7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgdmFsdWVOYW1lOiBzdHJpbmc7XG59O1xuXG5jb25zdCBIRUFERVJfTkFNRVMgPSBbXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUNoYXJzZXQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZScsXG4gICdBY2NlcHQtUmFuZ2VzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxuICAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAnQWdlJyxcbiAgJ0FsbG93JyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDb25uZWN0aW9uJyxcbiAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nLFxuICAnQ29udGVudC1FbmNvZGluZycsXG4gICdDb250ZW50LUlEJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LU1ENScsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnRGF0ZScsXG4gICdFVGFnJyxcbiAgJ0V4cGlyZXMnLFxuICAnRXhwZWN0JyxcbiAgJ0ZvcndhcmRlZCcsXG4gICdGcm9tJyxcbiAgJ0hvc3QnLFxuICAnSWYtTWF0Y2gnLFxuICAnSWYtTW9kaWZpZWQtU2luY2UnLFxuICAnSWYtTm9uZS1NYXRjaCcsXG4gICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgJ0tlZXAtQWxpdmUnLFxuICAnTGFzdC1Nb2RpZmllZCcsXG4gICdMb2NhdGlvbicsXG4gICdMaW5rJyxcbiAgJ01heC1Gb3J3YXJkcycsXG4gICdNSU1FLVZlcnNpb24nLFxuICAnT3JpZ2luJyxcbiAgJ1ByYWdtYScsXG4gICdQcm94eS1BdXRoZW50aWNhdGUnLFxuICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICdQcm94eS1Db25uZWN0aW9uJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VydmVyJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU2V0LUNvb2tpZTInLFxuICAnVEUnLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV2FybmluZycsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtRm9yd2FyZGVkLUZvcicsXG4gICdYLUZvcndhcmRlZC1Qcm90bycsXG4gICdYLUZvcndhcmRlZC1TZXJ2ZXInLFxuICAnWC1Gb3J3YXJkZWQtSG9zdCcsXG4gICdYLUZvcndhcmRlZC1Qb3J0JyxcbiAgJ1gtRm9yd2FyZGVkLVByZWZpeCcsXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZm9ybS1oZWFkZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLWhlYWRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9naW8tZm9ybS1oZWFkZXJzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2lvRm9ybUhlYWRlcnNDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2lvRm9ybUhlYWRlcnNDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRm9ybUhlYWRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVhZGVyRmllbGRNYXBwZXI6IEZvcm1IZWFkZXJGaWVsZE1hcHBlciA9IHtcbiAgICBrZXlOYW1lOiAna2V5JyxcbiAgICB2YWx1ZU5hbWU6ICd2YWx1ZScsXG4gIH07XG5cbiAgcHVibGljIG1haW5Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaGVhZGVyc0Zvcm1BcnJheSA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtcbiAgICBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICBrZXk6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucGF0dGVybignXlxcXFxTKiQnKSksXG4gICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgfSksXG4gIF0pO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKVxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGhlYWRlcnM6IEhlYWRlcltdID0gW107XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IChfaGVhZGVyczogSGVhZGVyW10gfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+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
- /**
30
- * Gets a `HarnessPredicate` that can be used to search for a `GioFormColorInputHarness` that meets
31
- * certain criteria.
32
- *
33
- * @param options Options for filtering which input instances are considered a match.
34
- * @return a `HarnessPredicate` configured with the given options.
35
- */
36
- static with(options = {}) {
37
- return new HarnessPredicate(GioFormHeadersHarness, options);
38
- }
39
- async getHeaderRows() {
40
- const rows = await this.getHeaderRowsElement();
41
- return Promise.all(rows.map(async (_, rowIndex) => ({
42
- keyInput: await this.getHeaderRowInputKey(rowIndex)(),
43
- keyAutocomplete: await this.getHeaderRowInputKeyAutocomplete(rowIndex)(),
44
- valueInput: await this.getHeaderRowInputValue(rowIndex)(),
45
- removeButton: await this.getHeaderRowRemoveButton(rowIndex)(),
46
- })));
47
- }
48
- async getLastHeaderRow() {
49
- const rows = await this.getHeaderRowsElement();
50
- return {
51
- keyInput: await this.getHeaderRowInputKey(rows.length - 1)(),
52
- valueInput: await this.getHeaderRowInputValue(rows.length - 1)(),
53
- };
54
- }
55
- async addHeader({ key, value }) {
56
- const { keyInput, valueInput } = await this.getLastHeaderRow();
57
- await keyInput.setValue(key);
58
- await valueInput.setValue(value);
59
- }
60
- async isDisabled() {
61
- return (await this.host()).hasClass('disabled');
62
- }
63
- async getValue() {
64
- const rows = await this.getHeaderRows();
65
- if (!(await this.isDisabled())) {
66
- // Remove last empty value
67
- rows.pop();
68
- }
69
- return parallel(() => rows.map(async (r) => ({ key: await r.keyInput.getValue(), value: await r.valueInput.getValue() })));
70
- }
71
- }
72
- GioFormHeadersHarness.hostSelector = 'gio-form-headers';
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0taGVhZGVycy5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1oZWFkZXJzL2dpby1mb3JtLWhlYWRlcnMuaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0MsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRWhGLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxnQkFBZ0I7SUFBM0Q7O1FBY1UseUJBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBRXBGLHlCQUFvQixHQUFHLENBQUMsUUFBZ0IsRUFBbUMsRUFBRSxDQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwSCxxQ0FBZ0MsR0FBRyxDQUFDLFFBQWdCLEVBQTBDLEVBQUUsQ0FDdEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFGLDJCQUFzQixHQUFHLENBQUMsUUFBZ0IsRUFBbUMsRUFBRSxDQUNyRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJ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SUFDM0gsQ0FBQzs7QUE1RWEsa0NBQVksR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRmFjdG9yeUZuLCBCYXNlSGFybmVzc0ZpbHRlcnMsIENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUsIHBhcmFsbGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QnV0dG9uSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi90ZXN0aW5nJztcbmltcG9ydCB7IE1hdElucHV0SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0L3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZS90ZXN0aW5nJztcblxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1IZWFkZXJzSGFybmVzcyBleHRlbmRzIENvbXBvbmVudEhhcm5lc3Mge1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdnaW8tZm9ybS1oZWFkZXJzJztcblxuICAvKipcbiAgICogR2V0cyBhIGBIYXJuZXNzUHJlZGljYXRlYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgYSBgR2lvRm9ybUNvbG9ySW5wdXRIYXJuZXNzYCB0aGF0IG1lZXRzXG4gICAqIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGZpbHRlcmluZyB3aGljaCBpbnB1dCBpbnN0YW5jZXMgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaC5cbiAgICogQHJldHVybiBhIGBIYXJuZXNzUHJlZGljYXRlYCBjb25maWd1cmVkIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgob3B0aW9uczogQmFzZUhhcm5lc3NGaWx0ZXJzID0ge30pOiBIYXJuZXNzUHJlZGljYXRlPEdpb0Zvcm1IZWFkZXJzSGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9Gb3JtSGVhZGVyc0hhcm5lc3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJSb3dzRWxlbWVudCA9IHRoaXMubG9jYXRvckZvckFsbCgndHIuZ2lvLWZvcm0taGVhZGVyc19fdGFibGVfX2hlYWRlci1yb3cnKTtcblxuICBwcml2YXRlIGdldEhlYWRlclJvd0lucHV0S2V5ID0gKHJvd0luZGV4OiBudW1iZXIpOiBBc3luY0ZhY3RvcnlGbjxNYXRJbnB1dEhhcm5lc3M+ID0+XG4gICAgdGhpcy5sb2NhdG9yRm9yKE1hdElucHV0SGFybmVzcy53aXRoKHsgYW5jZXN0b3I6IGBbbmctcmVmbGVjdC1uYW1lPVwiJHtyb3dJbmRleH1cIl1gLCBzZWxlY3RvcjogJ1tmb3JtQ29udHJvbE5hbWU9a2V5XScgfSkpO1xuXG4gIHByaXZhdGUgZ2V0SGVhZGVyUm93SW5wdXRLZXlBdXRvY29tcGxldGUgPSAocm93SW5kZXg6IG51bWJlcik6IEFzeW5jRmFjdG9yeUZuPE1hdEF1dG9jb21wbGV0ZUhhcm5lc3M+ID0+XG4gICAgdGhpcy5sb2NhdG9yRm9yKE1hdEF1dG9jb21wbGV0ZUhhcm5lc3Mud2l0aCh7IGFuY2VzdG9yOiBgdHJbbmctcmVmbGVjdC1uYW1lPVwiJHtyb3dJbmRleH1cIl1gIH0pKTtcblxuICBwcml2YXRlIGdldEhlYWRlclJvd0lucHV0VmFsdWUgPSAocm93SW5kZXg6IG51bWJlcik6IEFzeW5jRmFjdG9yeUZuPE1hdElucHV0SGFybmVzcz4gPT5cbiAgICB0aGlzLmxvY2F0b3JGb3IoTWF0SW5wdXRIYXJuZXNzLndpdGgoeyBhbmNlc3RvcjogYHRyW25nLXJlZmxlY3QtbmFtZT1cIiR7cm93SW5kZXh9XCJdYCwgc2VsZWN0b3I6ICdbZm9ybUNvbnRyb2xOYW1lPXZhbHVlXScgfSkpO1xuXG4gIHByaXZhdGUgZ2V0SGVhZGVyUm93UmVtb3ZlQnV0dG9uID0gKHJvd0luZGV4OiBudW1iZXIpOiBBc3luY0ZhY3RvcnlGbjxNYXRCdXR0b25IYXJuZXNzIHwgbnVsbD4gPT5cbiAgICB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChNYXRCdXR0b25IYXJuZXNzLndpdGgoeyBhbmNlc3RvcjogYHRyW25nLXJlZmxlY3QtbmFtZT1cIiR7cm93SW5kZXh9XCJdYCwgc2VsZWN0b3I6ICdbYXJpYS1sYWJlbD1cIkRlbGV0ZVwiXScgfSkpO1xuXG4gIHB1YmxpYyBhc3luYyBnZXRIZWFkZXJSb3dzKCk6IFByb21pc2U8XG4gICAge1xuICAgICAga2V5SW5wdXQ6IE1hdElucHV0SGFybmVzcztcbiAgICAgIGtleUF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlSGFybmVzcztcbiAgICAgIHZhbHVlSW5wdXQ6IE1hdElucHV0SGFybmVzcztcbiAgICAgIHJlbW92ZUJ1dHRvbjogTWF0QnV0dG9uSGFybmVzcyB8IG51bGw7XG4gICAgfVtdXG4gID4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldEhlYWRlclJvd3NFbGVtZW50KCk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICByb3dzLm1hcChhc3luYyAoXywgcm93SW5kZXgpID0+ICh7XG4gICAgICAgIGtleUlucHV0OiBhd2FpdCB0aGlzLmdldEhlYWRlclJvd0lucHV0S2V5KHJvd0luZGV4KSgpLFxuICAgICAgICBrZXlBdXRvY29tcGxldGU6IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93SW5wdXRLZXlBdXRvY29tcGxldGUocm93SW5kZXgpKCksXG4gICAgICAgIHZhbHVlSW5wdXQ6IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93SW5wdXRWYWx1ZShyb3dJbmRleCkoKSxcbiAgICAgICAgcmVtb3ZlQnV0dG9uOiBhd2FpdCB0aGlzLmdldEhlYWRlclJvd1JlbW92ZUJ1dHRvbihyb3dJbmRleCkoKSxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExhc3RIZWFkZXJSb3coKTogUHJvbWlzZTx7IGtleUlucHV0OiBNYXRJbnB1dEhhcm5lc3M7IHZhbHVlSW5wdXQ6IE1hdElucHV0SGFybmVzcyB9PiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93c0VsZW1lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXlJbnB1dDogYXdhaXQgdGhpcy5nZXRIZWFkZXJSb3dJbnB1dEtleShyb3dzLmxlbmd0aCAtIDEpKCksXG4gICAgICB2YWx1ZUlucHV0OiBhd2FpdCB0aGlzLmdldEhlYWRlclJvd0lucHV0VmFsdWUocm93cy5sZW5ndGggLSAxKSgpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkSGVhZGVyKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGtleUlucHV0LCB2YWx1ZUlucHV0IH0gPSBhd2FpdCB0aGlzLmdldExhc3RIZWFkZXJSb3coKTtcblxuICAgIGF3YWl0IGtleUlucHV0LnNldFZhbHVlKGtleSk7XG4gICAgYXdhaXQgdmFsdWVJbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5oYXNDbGFzcygnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyUm93cygpO1xuXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc0Rpc2FibGVkKCkpKSB7XG4gICAgICAvLyBSZW1vdmUgbGFzdCBlbXB0eSB2YWx1ZVxuICAgICAgcm93cy5wb3AoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYWxsZWwoKCkgPT4gcm93cy5tYXAoYXN5bmMgciA9PiAoeyBrZXk6IGF3YWl0IHIua2V5SW5wdXQuZ2V0VmFsdWUoKSwgdmFsdWU6IGF3YWl0IHIudmFsdWVJbnB1dC5nZXRWYWx1ZSgpIH0pKSk7XG4gIH1cbn1cbiJdfQ==