@porscheinformatik/clr-addons 18.2.5 → 19.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/abstract-form-component/abstract-form-component.d.ts +1 -1
  2. package/daterangepicker/directives/abstract-container.component.d.ts +1 -1
  3. package/fesm2022/clr-addons.mjs +889 -839
  4. package/fesm2022/clr-addons.mjs.map +1 -1
  5. package/multilingual/abstract-multilingual.d.ts +1 -1
  6. package/package.json +6 -8
  7. package/esm2022/abstract-form-component/abstract-form-component.mjs +0 -100
  8. package/esm2022/abstract-form-component/control-id.service.mjs +0 -31
  9. package/esm2022/abstract-form-component/form.module.mjs +0 -21
  10. package/esm2022/abstract-form-component/index.mjs +0 -3
  11. package/esm2022/abstract-form-component/label.mjs +0 -37
  12. package/esm2022/action-panel/action-panel-container-content.mjs +0 -22
  13. package/esm2022/action-panel/action-panel-container-footer.mjs +0 -22
  14. package/esm2022/action-panel/action-panel-container.mjs +0 -35
  15. package/esm2022/action-panel/action-panel.mjs +0 -80
  16. package/esm2022/action-panel/action-panel.module.mjs +0 -36
  17. package/esm2022/action-panel/index.mjs +0 -6
  18. package/esm2022/autocomplete-off/autocomplete-off.directive.mjs +0 -21
  19. package/esm2022/autocomplete-off/autocomplete-off.module.mjs +0 -21
  20. package/esm2022/autocomplete-off/index.mjs +0 -3
  21. package/esm2022/back-button/back-button.mjs +0 -27
  22. package/esm2022/back-button/back-button.module.mjs +0 -25
  23. package/esm2022/back-button/index.mjs +0 -8
  24. package/esm2022/brand-avatar/brand-avatar.mjs +0 -77
  25. package/esm2022/brand-avatar/brand-avatar.module.mjs +0 -24
  26. package/esm2022/brand-avatar/index.mjs +0 -8
  27. package/esm2022/breadcrumb/breadcrumb-model.interface.mjs +0 -7
  28. package/esm2022/breadcrumb/breadcrumb.mjs +0 -37
  29. package/esm2022/breadcrumb/breadcrumb.module.mjs +0 -27
  30. package/esm2022/breadcrumb/breadcrumb.service.mjs +0 -25
  31. package/esm2022/breadcrumb/index.mjs +0 -10
  32. package/esm2022/clr-addons.mjs +0 -5
  33. package/esm2022/clr-addons.module.mjs +0 -152
  34. package/esm2022/clr-control-warning/if-warning.directive.mjs +0 -73
  35. package/esm2022/clr-control-warning/if-warning.module.mjs +0 -20
  36. package/esm2022/clr-control-warning/index.mjs +0 -3
  37. package/esm2022/collapse-expand-section/collapse-expand-section.mjs +0 -88
  38. package/esm2022/collapse-expand-section/collapse-expand-section.module.mjs +0 -25
  39. package/esm2022/collapse-expand-section/index.mjs +0 -8
  40. package/esm2022/content-panel/content-panel-container-content.mjs +0 -22
  41. package/esm2022/content-panel/content-panel-container-footer.mjs +0 -22
  42. package/esm2022/content-panel/content-panel-container.mjs +0 -35
  43. package/esm2022/content-panel/content-panel.mjs +0 -81
  44. package/esm2022/content-panel/content-panel.module.mjs +0 -36
  45. package/esm2022/content-panel/index.mjs +0 -11
  46. package/esm2022/data-list-validator/data-list-predefined-validator.directive.mjs +0 -33
  47. package/esm2022/data-list-validator/data-list-validator.module.mjs +0 -21
  48. package/esm2022/data-list-validator/data-list.validator.mjs +0 -35
  49. package/esm2022/data-list-validator/index.mjs +0 -9
  50. package/esm2022/datagrid/datagrid-state-persistence/column-hidden-state-persistence.directive.mjs +0 -80
  51. package/esm2022/datagrid/datagrid-state-persistence/datagrid-field.directive.mjs +0 -20
  52. package/esm2022/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.mjs +0 -2
  53. package/esm2022/datagrid/datagrid-state-persistence/datagrid-state-persistence.module.mjs +0 -18
  54. package/esm2022/datagrid/datagrid-state-persistence/index.mjs +0 -7
  55. package/esm2022/datagrid/datagrid-state-persistence/state-persistence-key.directive.mjs +0 -308
  56. package/esm2022/datagrid/datagrid-state-persistence/state-persistence-options.interface.mjs +0 -2
  57. package/esm2022/datagrid/date-filter/date-filter.component.mjs +0 -210
  58. package/esm2022/datagrid/date-filter/date-filter.module.mjs +0 -22
  59. package/esm2022/datagrid/date-filter/index.mjs +0 -3
  60. package/esm2022/datagrid/date-filter/nested-property.mjs +0 -37
  61. package/esm2022/datagrid/enum-filter/enum-filter.component.mjs +0 -148
  62. package/esm2022/datagrid/enum-filter/enum-filter.module.mjs +0 -20
  63. package/esm2022/datagrid/enum-filter/index.mjs +0 -3
  64. package/esm2022/datagrid/index.mjs +0 -4
  65. package/esm2022/date-time-container/date-time-container.mjs +0 -53
  66. package/esm2022/date-time-container/date-time-module.mjs +0 -26
  67. package/esm2022/date-time-container/index.mjs +0 -9
  68. package/esm2022/date-time-container/time-input.mjs +0 -21
  69. package/esm2022/daterangepicker/daterange.constants.mjs +0 -27
  70. package/esm2022/daterangepicker/daterangepicker.module.mjs +0 -60
  71. package/esm2022/daterangepicker/directives/abstract-container.component.mjs +0 -104
  72. package/esm2022/daterangepicker/directives/datepicker/datepicker.component.mjs +0 -100
  73. package/esm2022/daterangepicker/directives/daterangepicker/daterangepicker.directive.mjs +0 -329
  74. package/esm2022/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.mjs +0 -321
  75. package/esm2022/daterangepicker/directives/if-daterange-error.directive.mjs +0 -94
  76. package/esm2022/daterangepicker/directives/timepicker/timepicker.component.mjs +0 -54
  77. package/esm2022/daterangepicker/index.mjs +0 -17
  78. package/esm2022/daterangepicker/interfaces/daterange-preset.interface.mjs +0 -2
  79. package/esm2022/daterangepicker/interfaces/daterange.interface.mjs +0 -2
  80. package/esm2022/daterangepicker/interfaces/timerange-preset.interface.mjs +0 -2
  81. package/esm2022/daterangepicker/interfaces/timerange.interface.mjs +0 -2
  82. package/esm2022/daterangepicker/models/day.model.mjs +0 -99
  83. package/esm2022/daterangepicker/models/popover-positions.model.mjs +0 -66
  84. package/esm2022/daterangepicker/models/time.model.mjs +0 -82
  85. package/esm2022/daterangepicker/providers/daterange-control-state.service.mjs +0 -62
  86. package/esm2022/daterangepicker/providers/daterange-parsing.service.mjs +0 -226
  87. package/esm2022/daterangepicker/providers/daterange.service.mjs +0 -66
  88. package/esm2022/daterangepicker/providers/opened-datepickers-tracker.service.mjs +0 -36
  89. package/esm2022/daterangepicker/validators/daterange-max.validator.mjs +0 -85
  90. package/esm2022/daterangepicker/validators/daterange-min.validator.mjs +0 -85
  91. package/esm2022/daterangepicker/validators/daterange-order.validator.mjs +0 -82
  92. package/esm2022/daterangepicker/validators/daterange-required.validator.mjs +0 -71
  93. package/esm2022/dot-pager/dot-pager.mjs +0 -58
  94. package/esm2022/dot-pager/dot-pager.module.mjs +0 -25
  95. package/esm2022/dot-pager/index.mjs +0 -8
  96. package/esm2022/dropdown/clr-dropdown-overflow.directive.mjs +0 -117
  97. package/esm2022/dropdown/clr-dropdown-overflow.module.mjs +0 -21
  98. package/esm2022/dropdown/index.mjs +0 -8
  99. package/esm2022/flow-bar/flow-bar.mjs +0 -163
  100. package/esm2022/flow-bar/flow-bar.module.mjs +0 -26
  101. package/esm2022/flow-bar/index.mjs +0 -8
  102. package/esm2022/generic-quick-list/generic-quick-list.mjs +0 -98
  103. package/esm2022/generic-quick-list/generic-quick-list.module.mjs +0 -24
  104. package/esm2022/generic-quick-list/index.mjs +0 -8
  105. package/esm2022/history/history-model.interface.mjs +0 -8
  106. package/esm2022/history/history-pinned.mjs +0 -60
  107. package/esm2022/history/history.mjs +0 -91
  108. package/esm2022/history/history.module.mjs +0 -27
  109. package/esm2022/history/history.provider.mjs +0 -8
  110. package/esm2022/history/history.service.mjs +0 -236
  111. package/esm2022/history/index.mjs +0 -12
  112. package/esm2022/icons/index.mjs +0 -8
  113. package/esm2022/icons/shapes.mjs +0 -5453
  114. package/esm2022/icons/svg-tag-generator.mjs +0 -39
  115. package/esm2022/index.mjs +0 -41
  116. package/esm2022/letter-avatar/index.mjs +0 -8
  117. package/esm2022/letter-avatar/letter-avatar.mjs +0 -52
  118. package/esm2022/letter-avatar/letter-avatar.module.mjs +0 -24
  119. package/esm2022/location-bar/index.mjs +0 -6
  120. package/esm2022/location-bar/location-bar-node/location-bar-node.component.mjs +0 -150
  121. package/esm2022/location-bar/location-bar-search/location-bar-search.component.mjs +0 -74
  122. package/esm2022/location-bar/location-bar.component.mjs +0 -64
  123. package/esm2022/location-bar/location-bar.model.mjs +0 -63
  124. package/esm2022/location-bar/location-bar.module.mjs +0 -55
  125. package/esm2022/location-bar/location-bar.provider.mjs +0 -18
  126. package/esm2022/location-bar/location-bar.search.model.mjs +0 -2
  127. package/esm2022/main-nav-group/index.mjs +0 -9
  128. package/esm2022/main-nav-group/main-nav-group-item.mjs +0 -27
  129. package/esm2022/main-nav-group/main-nav-group.mjs +0 -154
  130. package/esm2022/main-nav-group/main-nav-group.module.mjs +0 -26
  131. package/esm2022/multilingual/abstract-multilingual.mjs +0 -133
  132. package/esm2022/multilingual/index.mjs +0 -11
  133. package/esm2022/multilingual/multilingual-input/multilingual-input.mjs +0 -42
  134. package/esm2022/multilingual/multilingual-selector.mjs +0 -84
  135. package/esm2022/multilingual/multilingual-textarea/multilingual-textarea.mjs +0 -44
  136. package/esm2022/multilingual/multilingual-validators.mjs +0 -104
  137. package/esm2022/multilingual/multilingual.module.mjs +0 -49
  138. package/esm2022/notification/index.mjs +0 -10
  139. package/esm2022/notification/notification-ref.mjs +0 -61
  140. package/esm2022/notification/notification.mjs +0 -134
  141. package/esm2022/notification/notification.module.mjs +0 -24
  142. package/esm2022/notification/notification.service.mjs +0 -92
  143. package/esm2022/notification/scheduler-utils.mjs +0 -52
  144. package/esm2022/numericfield/index.mjs +0 -9
  145. package/esm2022/numericfield/numeric-field-validators.mjs +0 -140
  146. package/esm2022/numericfield/numeric-field.mjs +0 -280
  147. package/esm2022/numericfield/numeric-field.module.mjs +0 -26
  148. package/esm2022/paged-search-result-list/index.mjs +0 -8
  149. package/esm2022/paged-search-result-list/paged-search-result-list.mjs +0 -67
  150. package/esm2022/paged-search-result-list/paged-search-result-list.module.mjs +0 -26
  151. package/esm2022/pager/index.mjs +0 -8
  152. package/esm2022/pager/pager.mjs +0 -137
  153. package/esm2022/pager/pager.module.mjs +0 -25
  154. package/esm2022/progress-spinner/index.mjs +0 -8
  155. package/esm2022/progress-spinner/progress-spinner.mjs +0 -78
  156. package/esm2022/progress-spinner/progress-spinner.module.mjs +0 -23
  157. package/esm2022/quick-list/add-option.mjs +0 -78
  158. package/esm2022/quick-list/add-option.service.mjs +0 -7
  159. package/esm2022/quick-list/index.mjs +0 -9
  160. package/esm2022/quick-list/quick-list.mjs +0 -128
  161. package/esm2022/quick-list/quick-list.module.mjs +0 -26
  162. package/esm2022/readonly/index.mjs +0 -8
  163. package/esm2022/readonly/readonly.directive.mjs +0 -149
  164. package/esm2022/readonly/readonly.module.mjs +0 -16
  165. package/esm2022/searchfield/index.mjs +0 -8
  166. package/esm2022/searchfield/search-field.mjs +0 -104
  167. package/esm2022/searchfield/search-field.module.mjs +0 -25
  168. package/esm2022/treetable/index.mjs +0 -14
  169. package/esm2022/treetable/renderer/cell-renderer.mjs +0 -28
  170. package/esm2022/treetable/renderer/header-renderer.mjs +0 -41
  171. package/esm2022/treetable/renderer/index.mjs +0 -5
  172. package/esm2022/treetable/renderer/main-renderer.mjs +0 -103
  173. package/esm2022/treetable/renderer/row-renderer.mjs +0 -20
  174. package/esm2022/treetable/treetable-action-overflow.mjs +0 -94
  175. package/esm2022/treetable/treetable-cell.mjs +0 -23
  176. package/esm2022/treetable/treetable-column.mjs +0 -23
  177. package/esm2022/treetable/treetable-placeholder.mjs +0 -30
  178. package/esm2022/treetable/treetable-row.mjs +0 -100
  179. package/esm2022/treetable/treetable.mjs +0 -79
  180. package/esm2022/treetable/treetable.module.mjs +0 -63
  181. package/esm2022/util/escape.util.mjs +0 -20
  182. package/esm2022/util/index.mjs +0 -8
  183. package/esm2022/util/numeric.format.util.mjs +0 -99
  184. package/esm2022/view-edit-section/index.mjs +0 -8
  185. package/esm2022/view-edit-section/view-edit-section.mjs +0 -154
  186. package/esm2022/view-edit-section/view-edit-section.module.mjs +0 -25
@@ -1,20 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class DatagridFieldDirective {
4
- getFieldName() {
5
- return this.clrDgField ?? this.clrDgFieldKey;
6
- }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DatagridFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", type: DatagridFieldDirective, selector: "[clrDgField],[clrDgFieldKey]", inputs: { clrDgField: "clrDgField", clrDgFieldKey: "clrDgFieldKey" }, ngImport: i0 }); }
9
- }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DatagridFieldDirective, decorators: [{
11
- type: Directive,
12
- args: [{
13
- selector: '[clrDgField],[clrDgFieldKey]',
14
- }]
15
- }], propDecorators: { clrDgField: [{
16
- type: Input
17
- }], clrDgFieldKey: [{
18
- type: Input
19
- }] } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtZmllbGQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UvZGF0YWdyaWQtZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtqRCxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMvQyxDQUFDOzhHQVJVLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw4QkFBOEI7aUJBQ3pDOzhCQUdDLFVBQVU7c0JBRFQsS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJEZ0ZpZWxkXSxbY2xyRGdGaWVsZEtleV0nLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhZ3JpZEZpZWxkRGlyZWN0aXZlIHtcbiAgQElucHV0KClcbiAgY2xyRGdGaWVsZDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBjbHJEZ0ZpZWxkS2V5OiBzdHJpbmc7XG5cbiAgZ2V0RmllbGROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2xyRGdGaWVsZCA/PyB0aGlzLmNsckRnRmllbGRLZXk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UtbW9kZWwuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UtbW9kZWwuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0UmV2ZXJzZT86IGJvb2xlYW47XG4gIGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogQ2xyQ29sdW1uU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xyQ29sdW1uU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZmlsdGVyVmFsdWU/OiBhbnk7XG4gIHdpZHRoPzogc3RyaW5nO1xufVxuIl19
@@ -1,18 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { ColumnHiddenStatePersistenceDirective } from './column-hidden-state-persistence.directive';
3
- import { DatagridFieldDirective } from './datagrid-field.directive';
4
- import { StatePersistenceKeyDirective } from './state-persistence-key.directive';
5
- import * as i0 from "@angular/core";
6
- export class ClrDatagridStatePersistenceModule {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDatagridStatePersistenceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ClrDatagridStatePersistenceModule, declarations: [ColumnHiddenStatePersistenceDirective, DatagridFieldDirective, StatePersistenceKeyDirective], exports: [ColumnHiddenStatePersistenceDirective, DatagridFieldDirective, StatePersistenceKeyDirective] }); }
9
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDatagridStatePersistenceModule }); }
10
- }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDatagridStatePersistenceModule, decorators: [{
12
- type: NgModule,
13
- args: [{
14
- declarations: [ColumnHiddenStatePersistenceDirective, DatagridFieldDirective, StatePersistenceKeyDirective],
15
- exports: [ColumnHiddenStatePersistenceDirective, DatagridFieldDirective, StatePersistenceKeyDirective],
16
- }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBTWpGLE1BQU0sT0FBTyxpQ0FBaUM7OEdBQWpDLGlDQUFpQzsrR0FBakMsaUNBQWlDLGlCQUg3QixxQ0FBcUMsRUFBRSxzQkFBc0IsRUFBRSw0QkFBNEIsYUFDaEcscUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCOytHQUUxRixpQ0FBaUM7OzJGQUFqQyxpQ0FBaUM7a0JBSjdDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLENBQUM7b0JBQzNHLE9BQU8sRUFBRSxDQUFDLHFDQUFxQyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixDQUFDO2lCQUN2RyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5IaWRkZW5TdGF0ZVBlcnNpc3RlbmNlRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4taGlkZGVuLXN0YXRlLXBlcnNpc3RlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhZ3JpZEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9kYXRhZ3JpZC1maWVsZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZUtleURpcmVjdGl2ZSB9IGZyb20gJy4vc3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NvbHVtbkhpZGRlblN0YXRlUGVyc2lzdGVuY2VEaXJlY3RpdmUsIERhdGFncmlkRmllbGREaXJlY3RpdmUsIFN0YXRlUGVyc2lzdGVuY2VLZXlEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbQ29sdW1uSGlkZGVuU3RhdGVQZXJzaXN0ZW5jZURpcmVjdGl2ZSwgRGF0YWdyaWRGaWVsZERpcmVjdGl2ZSwgU3RhdGVQZXJzaXN0ZW5jZUtleURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZHVsZSB7fVxuIl19
@@ -1,7 +0,0 @@
1
- export * from './column-hidden-state-persistence.directive';
2
- export * from './datagrid-field.directive';
3
- export * from './datagrid-state-persistence.module';
4
- export * from './state-persistence-key.directive';
5
- export * from './datagrid-state-persistence-model.interface';
6
- export * from './state-persistence-options.interface';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29sdW1uLWhpZGRlbi1zdGF0ZS1wZXJzaXN0ZW5jZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhZ3JpZC1maWVsZC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS1wZXJzaXN0ZW5jZS1rZXkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UtbW9kZWwuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucy5pbnRlcmZhY2UnO1xuIl19
@@ -1,308 +0,0 @@
1
- import { ContentChild, ContentChildren, Directive, ElementRef, HostListener, Input, QueryList, } from '@angular/core';
2
- import { ClrDatagrid, ClrDatagridColumn, ClrDatagridFilter, ClrDatagridPagination, ClrDatagridSortOrder, DatagridPropertyComparator, } from '@clr/angular';
3
- import { delay, Subject } from 'rxjs';
4
- import { take, takeUntil } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@clr/angular";
7
- const DATE_TYPE = 'date';
8
- export class StatePersistenceKeyDirective {
9
- constructor(datagrid) {
10
- this.datagrid = datagrid;
11
- this.useLocalStoreOnly = false;
12
- this.paginationDescription = '';
13
- this.canShowPaginationDescription = false;
14
- this.warnedAboutCustomDescription = false;
15
- this.destroy$ = new Subject();
16
- }
17
- ngAfterContentInit() {
18
- if (this.options.serverDriven) {
19
- this.init();
20
- }
21
- else {
22
- setTimeout(() => {
23
- this.init();
24
- });
25
- }
26
- }
27
- init() {
28
- const volatileDataState = this.getVolatileDataState();
29
- const localStorageState = this.getLocalStorageState();
30
- this.initFilter(volatileDataState);
31
- this.initSorting(localStorageState);
32
- this.initDatagridPersister();
33
- const columnWidthPersistenceEnabled = this.options.persistColumnWidths ?? false;
34
- if (columnWidthPersistenceEnabled) {
35
- this.initColumnWidths(localStorageState);
36
- }
37
- const paginationPersistenceEnabled = this.options.persistPagination ?? true;
38
- if (this.pagination?.page && paginationPersistenceEnabled) {
39
- this.initPageSizePersister(localStorageState);
40
- this.initCurrentPage(volatileDataState);
41
- }
42
- this.canShowPaginationDescription = true;
43
- }
44
- /**
45
- * With this method filters can be cleared
46
- * @param key The key for clrStatePersistenceKey
47
- * @param useLocalStoreOnly The clrUseLocalStoreOnly indicator
48
- */
49
- static clearFilters(key, useLocalStoreOnly) {
50
- const data = JSON.parse((useLocalStoreOnly ? localStorage : sessionStorage).getItem(key)) || {};
51
- data.columns = {};
52
- (useLocalStoreOnly ? localStorage : sessionStorage).setItem(key, JSON.stringify(data));
53
- }
54
- initPageSizePersister(savedState) {
55
- /* persist page size changes in local storage */
56
- this.pagination.page.sizeChange.pipe(takeUntil(this.destroy$)).subscribe(pageSize => {
57
- const state = this.getLocalStorageState();
58
- state.pageSize = pageSize;
59
- this.saveLocalStorageState(state);
60
- });
61
- /* init page size of datagrid if already persisted in local storage */
62
- if (savedState.pageSize) {
63
- this.pagination.page.size = savedState.pageSize;
64
- }
65
- }
66
- initCurrentPage(savedState) {
67
- /* init current page of datagrid if already persisted */
68
- if (savedState?.currentPage) {
69
- this.datagrid.items.change.pipe(take(1)).subscribe(() => (this.pagination.page.current = savedState.currentPage));
70
- }
71
- }
72
- initFilter(savedState) {
73
- const filterPersistenceEnabled = this.options.persistFilters ?? true;
74
- if (savedState.columns && filterPersistenceEnabled) {
75
- Object.keys(savedState.columns).forEach(prop => {
76
- const filter = this.getFilter(prop);
77
- if (filter) {
78
- /* if the saved value is empty filter send null */
79
- const savedFilterValue = savedState.columns[prop].filterValue;
80
- if (savedFilterValue == null) {
81
- filter['value'] = null;
82
- }
83
- else {
84
- Object.keys(savedFilterValue)
85
- .filter(valueKey => valueKey !== 'property')
86
- .forEach(valueKey => (filter[valueKey] = this.parseFilterValue(savedFilterValue[valueKey])));
87
- }
88
- }
89
- });
90
- }
91
- }
92
- initSorting(savedState) {
93
- const sortPersistenceEnabled = this.options.persistSort ?? true;
94
- if (savedState.sortBy && sortPersistenceEnabled) {
95
- this.datagrid.columns.forEach(column => {
96
- if (this.getSortProperty(column.sortBy) === savedState.sortBy) {
97
- column.sortOrder = savedState.sortReverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;
98
- }
99
- else {
100
- column.sortOrder = ClrDatagridSortOrder.UNSORTED;
101
- }
102
- });
103
- }
104
- }
105
- initColumnWidths(savedState) {
106
- const columnWidthsByField = savedState?.columns
107
- ? Object.fromEntries(Object.entries(savedState.columns).map(([key, value]) => [key, value.width]))
108
- : undefined;
109
- if (this.gridColumns && this.gridColumnRefs && columnWidthsByField !== undefined) {
110
- for (let i = 0; i < this.gridColumns.length; i++) {
111
- const col = this.gridColumns.get(i);
112
- const el = this.gridColumnRefs.get(i)?.nativeElement;
113
- if ((col?.field && columnWidthsByField[col.field]) || el) {
114
- el.style.width = columnWidthsByField[col.field];
115
- }
116
- }
117
- }
118
- }
119
- initDatagridPersister() {
120
- // delay is needed, as onDestroy the filters emit empty values.
121
- // So delay it to the end of the current cycle, so the directive is also destroyed before it gets the next values
122
- this.datagrid.refresh.pipe(delay(0), takeUntil(this.destroy$)).subscribe(dgState => {
123
- this.persistFiltersAndCurrentPage(dgState);
124
- this.persistSorting(dgState);
125
- if (this.canShowPaginationDescription) {
126
- this.updatePaginationDescription();
127
- }
128
- });
129
- this.datagrid.items.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.updatePaginationDescription());
130
- }
131
- persistFiltersAndCurrentPage(dgState) {
132
- const filterPersistenceEnabled = this.options.persistFilters ?? true;
133
- const paginationPersistenceEnabled = this.options.persistPagination ?? true;
134
- if (!filterPersistenceEnabled && !paginationPersistenceEnabled) {
135
- return;
136
- }
137
- const state = this.getVolatileDataState();
138
- state.columns = state.columns || {};
139
- if (paginationPersistenceEnabled) {
140
- state.currentPage = dgState.page?.current;
141
- }
142
- if (filterPersistenceEnabled) {
143
- Object.keys(state.columns).forEach(prop => (state.columns[prop].filterValue = undefined));
144
- dgState.filters?.forEach(filter => {
145
- const property = this.getFilterPropertyName(filter);
146
- if (property) {
147
- state.columns[property] = state.columns[property] || {};
148
- state.columns[property].filterValue = this.enrichFilterValue(filter);
149
- }
150
- });
151
- }
152
- this.saveVolatileDataState(state);
153
- }
154
- persistSorting(dgState) {
155
- const sortPersistenceEnabled = this.options.persistSort ?? true;
156
- if (sortPersistenceEnabled) {
157
- const state = this.getLocalStorageState();
158
- state.sortBy = this.getSortProperty(dgState.sort?.by);
159
- state.sortReverse = dgState.sort?.reverse;
160
- this.saveLocalStorageState(state);
161
- }
162
- }
163
- persistColumnWidths() {
164
- const columnWidthPersistenceEnabled = this.options?.persistColumnWidths ?? false;
165
- if (columnWidthPersistenceEnabled) {
166
- const state = this.getLocalStorageState();
167
- state.columns = state.columns || {};
168
- for (let i = 0; i < this.gridColumns.length; i++) {
169
- const col = this.gridColumns.get(i);
170
- const el = this.gridColumnRefs.get(i)?.nativeElement;
171
- if (el?.style?.width && el.style.width !== '0px' && col?.field) {
172
- state.columns[col.field] ||= {};
173
- state.columns[col.field].width = el.style.width;
174
- }
175
- }
176
- this.saveLocalStorageState(state);
177
- }
178
- }
179
- /**
180
- * Pagination description must be set by this directive,
181
- * otherwise we can't update datagrid values from localStorage
182
- * without getting ExpressionChangedAfterItHasBeenCheckedError
183
- */
184
- updatePaginationDescription() {
185
- if (this.paginationElem && this.pagination) {
186
- const paginationDescElem = this.paginationElem.nativeElement.getElementsByClassName('pagination-description')?.[0];
187
- if (paginationDescElem) {
188
- if (!this.warnedAboutCustomDescription && paginationDescElem.textContent.trim().length !== 0) {
189
- console.error('When using clrStatePersistenceKey directive, you should not use custom pagination description' +
190
- ' inside pagination component content, but use [clrPaginationDescription] on clr-datagrid');
191
- }
192
- this.warnedAboutCustomDescription = true;
193
- if (this.paginationDescription) {
194
- paginationDescElem.textContent = this.paginationDescription
195
- .replace('{{first}}', (this.pagination.firstItem + 1).toString())
196
- .replace('{{last}}', (this.pagination.lastItem + 1).toString())
197
- .replace('{{total}}', this.pagination.totalItems.toString());
198
- }
199
- }
200
- }
201
- }
202
- /**
203
- * Gets the state of volatile data. This can be influenced by clrUseLocalStoreOnly.
204
- */
205
- getVolatileDataState() {
206
- return JSON.parse(this.getStorageBasedOnInputFlag().getItem(this.options.key)) || {};
207
- }
208
- getLocalStorageState() {
209
- return JSON.parse(localStorage.getItem(this.options.key)) || {};
210
- }
211
- /**
212
- * Save the state of volatile data. This can be influenced by clrUseLocalStoreOnly.
213
- */
214
- saveVolatileDataState(state) {
215
- this.getStorageBasedOnInputFlag().setItem(this.options.key, JSON.stringify(state));
216
- }
217
- saveLocalStorageState(state) {
218
- localStorage.setItem(this.options.key, JSON.stringify(state));
219
- }
220
- getStorageBasedOnInputFlag() {
221
- return this.useLocalStoreOnly ? localStorage : sessionStorage;
222
- }
223
- /**
224
- * As a date is serialized as string, but not deserialized as date
225
- * we need to add some meta information to do that manually later
226
- */
227
- enrichFilterValue(filter) {
228
- const result = {};
229
- Object.keys(filter).forEach(key => (result[key] =
230
- filter[key] instanceof Date
231
- ? {
232
- type: DATE_TYPE,
233
- value: filter[key],
234
- }
235
- : filter[key]));
236
- return result;
237
- }
238
- /**
239
- * Parse filter values with meta information like date, which needs manual deserialization to a date object
240
- */
241
- parseFilterValue(value) {
242
- return value?.type === DATE_TYPE
243
- ? new Date(value.value)
244
- : value;
245
- }
246
- getFilter(prop) {
247
- // get default filter or custom filter
248
- return (this.datagrid.columns.find(col => col.field === prop)?.filter ||
249
- this.customFilters.find(filter => this.getFilterPropertyName(filter.filter) === prop)?.filter);
250
- }
251
- getFilterPropertyName(filter) {
252
- // for NestedProperty we need to get the original property
253
- const filterWithProp = filter;
254
- return (filterWithProp.property?.prop || filterWithProp.property);
255
- }
256
- getSortProperty(sortBy) {
257
- if (sortBy) {
258
- if (typeof sortBy === 'string') {
259
- return sortBy;
260
- }
261
- if (sortBy instanceof DatagridPropertyComparator) {
262
- return sortBy.prop;
263
- }
264
- }
265
- return undefined;
266
- }
267
- ngOnDestroy() {
268
- this.persistColumnWidths();
269
- this.destroy$.next();
270
- this.destroy$.complete();
271
- }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: StatePersistenceKeyDirective, deps: [{ token: i1.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Directive }); }
273
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { options: ["clrStatePersistenceKey", "options"], useLocalStoreOnly: ["clrUseLocalStoreOnly", "useLocalStoreOnly"], paginationDescription: ["clrPaginationDescription", "paginationDescription"] }, host: { listeners: { "window:beforeunload": "persistColumnWidths()" } }, queries: [{ propertyName: "pagination", first: true, predicate: ClrDatagridPagination, descendants: true }, { propertyName: "paginationElem", first: true, predicate: ClrDatagridPagination, descendants: true, read: ElementRef }, { propertyName: "customFilters", predicate: ClrDatagridFilter, descendants: true }, { propertyName: "gridColumnRefs", predicate: ClrDatagridColumn, read: ElementRef }, { propertyName: "gridColumns", predicate: ClrDatagridColumn }], ngImport: i0 }); }
274
- }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: StatePersistenceKeyDirective, decorators: [{
276
- type: Directive,
277
- args: [{
278
- selector: '[clrStatePersistenceKey]',
279
- }]
280
- }], ctorParameters: () => [{ type: i1.ClrDatagrid }], propDecorators: { options: [{
281
- type: Input,
282
- args: ['clrStatePersistenceKey']
283
- }], useLocalStoreOnly: [{
284
- type: Input,
285
- args: ['clrUseLocalStoreOnly']
286
- }], paginationDescription: [{
287
- type: Input,
288
- args: ['clrPaginationDescription']
289
- }], pagination: [{
290
- type: ContentChild,
291
- args: [ClrDatagridPagination]
292
- }], paginationElem: [{
293
- type: ContentChild,
294
- args: [ClrDatagridPagination, { read: ElementRef }]
295
- }], customFilters: [{
296
- type: ContentChildren,
297
- args: [ClrDatagridFilter, { descendants: true }]
298
- }], gridColumnRefs: [{
299
- type: ContentChildren,
300
- args: [ClrDatagridColumn, { read: ElementRef }]
301
- }], gridColumns: [{
302
- type: ContentChildren,
303
- args: [ClrDatagridColumn]
304
- }], persistColumnWidths: [{
305
- type: HostListener,
306
- args: ['window:beforeunload']
307
- }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGFncmlkL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGlCQUFpQixFQUVqQixpQkFBaUIsRUFFakIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUVwQiwwQkFBMEIsR0FDM0IsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBR2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztBQVV6QixNQUFNLE9BQU8sNEJBQTRCO0lBb0N2QyxZQUFvQixRQUFxQjtRQUFyQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBeEJ6QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFHMUIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBaUIzQixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7UUFDckMsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWEsQ0FBQztJQUU3QyxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFB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QUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEQsV0FBVztzQkFEVixlQUFlO3VCQUFDLGlCQUFpQjtnQkFpTDFCLG1CQUFtQjtzQkFEMUIsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDbHJEYXRhZ3JpZCxcbiAgQ2xyRGF0YWdyaWRDb2x1bW4sXG4gIENsckRhdGFncmlkQ29tcGFyYXRvckludGVyZmFjZSxcbiAgQ2xyRGF0YWdyaWRGaWx0ZXIsXG4gIENsckRhdGFncmlkRmlsdGVySW50ZXJmYWNlLFxuICBDbHJEYXRhZ3JpZFBhZ2luYXRpb24sXG4gIENsckRhdGFncmlkU29ydE9yZGVyLFxuICBDbHJEYXRhZ3JpZFN0YXRlSW50ZXJmYWNlLFxuICBEYXRhZ3JpZFByb3BlcnR5Q29tcGFyYXRvcixcbn0gZnJvbSAnQGNsci9hbmd1bGFyJztcbmltcG9ydCB7IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIH0gZnJvbSAnLi9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS1tb2RlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGVsYXksIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN0YXRlUGVyc2lzdGVuY2VPcHRpb25zIH0gZnJvbSAnLi9zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zLmludGVyZmFjZSc7XG5cbmNvbnN0IERBVEVfVFlQRSA9ICdkYXRlJztcblxuaW50ZXJmYWNlIEZpbHRlclZhbHVlV2l0aE1ldGFkYXRhIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsclN0YXRlUGVyc2lzdGVuY2VLZXldJyxcbn0pXG5leHBvcnQgY2xhc3MgU3RhdGVQZXJzaXN0ZW5jZUtleURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBwZXJzaXN0ZW5jZS5cbiAgICogJ0tleScgcmVwcmVzZW50cyB0aGUgbG9jYWwgc3RvcmFnZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHBlcnNpc3RlbmNlIHN0YXRlIGlzIHN0b3JlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZmllbGRzIHdpdGggdGhlICdwZXJzaXN0JyBwcmVmaXggdG9nZ2xlIHRoZSBwZXJzaXN0ZW5jZSBvZiB0aGUgcmVzcGVjdGl2ZSBkYXRhZ3JpZCBmdW5jdGlvbmFsaXR5LFxuICAgKiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHdheXMgJ3RydWUnLlxuICAgKi9cbiAgQElucHV0KCdjbHJTdGF0ZVBlcnNpc3RlbmNlS2V5JylcbiAgb3B0aW9uczogU3RhdGVQZXJzaXN0ZW5jZU9wdGlvbnM7XG5cbiAgQElucHV0KCdjbHJVc2VMb2NhbFN0b3JlT25seScpXG4gIHVzZUxvY2FsU3RvcmVPbmx5ID0gZmFsc2U7XG5cbiAgQElucHV0KCdjbHJQYWdpbmF0aW9uRGVzY3JpcHRpb24nKVxuICBwYWdpbmF0aW9uRGVzY3JpcHRpb24gPSAnJztcblxuICBAQ29udGVudENoaWxkKENsckRhdGFncmlkUGFnaW5hdGlvbilcbiAgcGFnaW5hdGlvbjogQ2xyRGF0YWdyaWRQYWdpbmF0aW9uO1xuXG4gIEBDb250ZW50Q2hpbGQoQ2xyRGF0YWdyaWRQYWdpbmF0aW9uLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcGFnaW5hdGlvbkVsZW06IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDbHJEYXRhZ3JpZEZpbHRlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBjdXN0b21GaWx0ZXJzOiBRdWVyeUxpc3Q8Q2xyRGF0YWdyaWRGaWx0ZXI+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyRGF0YWdyaWRDb2x1bW4sIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBncmlkQ29sdW1uUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyRGF0YWdyaWRDb2x1bW4pXG4gIGdyaWRDb2x1bW5zOiBRdWVyeUxpc3Q8Q2xyRGF0YWdyaWRDb2x1bW4+O1xuXG4gIGNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTtcbiAgd2FybmVkQWJvdXRDdXN0b21EZXNjcmlwdGlvbiA9IGZhbHNlO1xuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhZ3JpZDogQ2xyRGF0YWdyaWQpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VydmVyRHJpdmVuKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGNvbnN0IHZvbGF0aWxlRGF0YVN0YXRlID0gdGhpcy5nZXRWb2xhdGlsZURhdGFTdGF0ZSgpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0YXRlID0gdGhpcy5nZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpO1xuXG4gICAgdGhpcy5pbml0RmlsdGVyKHZvbGF0aWxlRGF0YVN0YXRlKTtcbiAgICB0aGlzLmluaXRTb3J0aW5nKGxvY2FsU3RvcmFnZVN0YXRlKTtcbiAgICB0aGlzLmluaXREYXRhZ3JpZFBlcnNpc3RlcigpO1xuXG4gICAgY29uc3QgY29sdW1uV2lkdGhQZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdENvbHVtbldpZHRocyA/PyBmYWxzZTtcbiAgICBpZiAoY29sdW1uV2lkdGhQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocyhsb2NhbFN0b3JhZ2VTdGF0ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0UGFnaW5hdGlvbiA/PyB0cnVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24/LnBhZ2UgJiYgcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgdGhpcy5pbml0UGFnZVNpemVQZXJzaXN0ZXIobG9jYWxTdG9yYWdlU3RhdGUpO1xuICAgICAgdGhpcy5pbml0Q3VycmVudFBhZ2Uodm9sYXRpbGVEYXRhU3RhdGUpO1xuICAgIH1cbiAgICB0aGlzLmNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpdGggdGhpcyBtZXRob2QgZmlsdGVycyBjYW4gYmUgY2xlYXJlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGNsclN0YXRlUGVyc2lzdGVuY2VLZXlcbiAgICogQHBhcmFtIHVzZUxvY2FsU3RvcmVPbmx5IFRoZSBjbHJVc2VMb2NhbFN0b3JlT25seSBpbmRpY2F0b3JcbiAgICovXG4gIHN0YXRpYyBjbGVhckZpbHRlcnMoa2V5OiBzdHJpbmcsIHVzZUxvY2FsU3RvcmVPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoKHVzZUxvY2FsU3RvcmVPbmx5ID8gbG9jYWxTdG9yYWdlIDogc2Vzc2lvblN0b3JhZ2UpLmdldEl0ZW0oa2V5KSkgfHwge307XG4gICAgZGF0YS5jb2x1bW5zID0ge307XG4gICAgKHVzZUxvY2FsU3RvcmVPbmx5ID8gbG9jYWxTdG9yYWdlIDogc2Vzc2lvblN0b3JhZ2UpLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRQYWdlU2l6ZVBlcnNpc3RlcihzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCkge1xuICAgIC8qIHBlcnNpc3QgcGFnZSBzaXplIGNoYW5nZXMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlLnNpemVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShwYWdlU2l6ZSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcbiAgICAgIHN0YXRlLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICB0aGlzLnNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvKiBpbml0IHBhZ2Ugc2l6ZSBvZiBkYXRhZ3JpZCBpZiBhbHJlYWR5IHBlcnNpc3RlZCBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgaWYgKHNhdmVkU3RhdGUucGFnZVNpemUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlLnNpemUgPSBzYXZlZFN0YXRlLnBhZ2VTaXplO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEN1cnJlbnRQYWdlKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKSB7XG4gICAgLyogaW5pdCBjdXJyZW50IHBhZ2Ugb2YgZGF0YWdyaWQgaWYgYWxyZWFkeSBwZXJzaXN0ZWQgKi9cbiAgICBpZiAoc2F2ZWRTdGF0ZT8uY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuZGF0YWdyaWQuaXRlbXMuY2hhbmdlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLnBhZ2luYXRpb24ucGFnZS5jdXJyZW50ID0gc2F2ZWRTdGF0ZS5jdXJyZW50UGFnZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbHRlcihzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0RmlsdGVycyA/PyB0cnVlO1xuICAgIGlmIChzYXZlZFN0YXRlLmNvbHVtbnMgJiYgZmlsdGVyUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyhzYXZlZFN0YXRlLmNvbHVtbnMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyKHByb3ApO1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgLyogaWYgdGhlIHNhdmVkIHZhbHVlIGlzIGVtcHR5IGZpbHRlciBzZW5kIG51bGwgKi9cbiAgICAgICAgICBjb25zdCBzYXZlZEZpbHRlclZhbHVlID0gc2F2ZWRTdGF0ZS5jb2x1bW5zW3Byb3BdLmZpbHRlclZhbHVlO1xuICAgICAgICAgIGlmIChzYXZlZEZpbHRlclZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIChmaWx0ZXIgYXMgYW55KVsndmFsdWUnXSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNhdmVkRmlsdGVyVmFsdWUpXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsdWVLZXkgPT4gdmFsdWVLZXkgIT09ICdwcm9wZXJ0eScpXG4gICAgICAgICAgICAgIC5mb3JFYWNoKHZhbHVlS2V5ID0+ICgoZmlsdGVyIGFzIGFueSlbdmFsdWVLZXldID0gdGhpcy5wYXJzZUZpbHRlclZhbHVlKHNhdmVkRmlsdGVyVmFsdWVbdmFsdWVLZXldKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0U29ydGluZyhzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRQZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdFNvcnQgPz8gdHJ1ZTtcbiAgICBpZiAoc2F2ZWRTdGF0ZS5zb3J0QnkgJiYgc29ydFBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgdGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U29ydFByb3BlcnR5KGNvbHVtbi5zb3J0QnkpID09PSBzYXZlZFN0YXRlLnNvcnRCeSkge1xuICAgICAgICAgIGNvbHVtbi5zb3J0T3JkZXIgPSBzYXZlZFN0YXRlLnNvcnRSZXZlcnNlID8gQ2xyRGF0YWdyaWRTb3J0T3JkZXIuREVTQyA6IENsckRhdGFncmlkU29ydE9yZGVyLkFTQztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uc29ydE9yZGVyID0gQ2xyRGF0YWdyaWRTb3J0T3JkZXIuVU5TT1JURUQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbldpZHRocyhzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoc0J5RmllbGQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQgPSBzYXZlZFN0YXRlPy5jb2x1bW5zXG4gICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzYXZlZFN0YXRlLmNvbHVtbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB2YWx1ZS53aWR0aF0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5ncmlkQ29sdW1ucyAmJiB0aGlzLmdyaWRDb2x1bW5SZWZzICYmIGNvbHVtbldpZHRoc0J5RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZENvbHVtbnMuZ2V0KGkpO1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZ3JpZENvbHVtblJlZnMuZ2V0KGkpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICgoY29sPy5maWVsZCAmJiBjb2x1bW5XaWR0aHNCeUZpZWxkW2NvbC5maWVsZF0pIHx8IGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBjb2x1bW5XaWR0aHNCeUZpZWxkW2NvbC5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhZ3JpZFBlcnNpc3RlcigpIHtcbiAgICAvLyBkZWxheSBpcyBuZWVkZWQsIGFzIG9uRGVzdHJveSB0aGUgZmlsdGVycyBlbWl0IGVtcHR5IHZhbHVlcy5cbiAgICAvLyBTbyBkZWxheSBpdCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGN5Y2xlLCBzbyB0aGUgZGlyZWN0aXZlIGlzIGFsc28gZGVzdHJveWVkIGJlZm9yZSBpdCBnZXRzIHRoZSBuZXh0IHZhbHVlc1xuICAgIHRoaXMuZGF0YWdyaWQucmVmcmVzaC5waXBlKGRlbGF5KDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShkZ1N0YXRlID0+IHtcbiAgICAgIHRoaXMucGVyc2lzdEZpbHRlcnNBbmRDdXJyZW50UGFnZShkZ1N0YXRlKTtcbiAgICAgIHRoaXMucGVyc2lzdFNvcnRpbmcoZGdTdGF0ZSk7XG5cbiAgICAgIGlmICh0aGlzLmNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uRGVzY3JpcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YWdyaWQuaXRlbXMuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVQYWdpbmF0aW9uRGVzY3JpcHRpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RGaWx0ZXJzQW5kQ3VycmVudFBhZ2UoZGdTdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZUludGVyZmFjZTx1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0RmlsdGVycyA/PyB0cnVlO1xuICAgIGNvbnN0IHBhZ2luYXRpb25QZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdFBhZ2luYXRpb24gPz8gdHJ1ZTtcbiAgICBpZiAoIWZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCAmJiAhcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRWb2xhdGlsZURhdGFTdGF0ZSgpO1xuICAgIHN0YXRlLmNvbHVtbnMgPSBzdGF0ZS5jb2x1bW5zIHx8IHt9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRQYWdlID0gZGdTdGF0ZS5wYWdlPy5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmNvbHVtbnMpLmZvckVhY2gocHJvcCA9PiAoc3RhdGUuY29sdW1uc1twcm9wXS5maWx0ZXJWYWx1ZSA9IHVuZGVmaW5lZCkpO1xuICAgICAgZGdTdGF0ZS5maWx0ZXJzPy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eU5hbWUoZmlsdGVyKTtcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgc3RhdGUuY29sdW1uc1twcm9wZXJ0eV0gPSBzdGF0ZS5jb2x1bW5zW3Byb3BlcnR5XSB8fCB7fTtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW3Byb3BlcnR5XS5maWx0ZXJWYWx1ZSA9IHRoaXMuZW5yaWNoRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlVm9sYXRpbGVEYXRhU3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U29ydGluZyhkZ1N0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlSW50ZXJmYWNlPHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3Qgc29ydFBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0U29ydCA/PyB0cnVlO1xuICAgIGlmIChzb3J0UGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcbiAgICAgIHN0YXRlLnNvcnRCeSA9IHRoaXMuZ2V0U29ydFByb3BlcnR5KGRnU3RhdGUuc29ydD8uYnkpO1xuICAgICAgc3RhdGUuc29ydFJldmVyc2UgPSBkZ1N0YXRlLnNvcnQ/LnJldmVyc2U7XG5cbiAgICAgIHRoaXMuc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJylcbiAgcHJpdmF0ZSBwZXJzaXN0Q29sdW1uV2lkdGhzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zPy5wZXJzaXN0Q29sdW1uV2lkdGhzID8/IGZhbHNlO1xuICAgIGlmIChjb2x1bW5XaWR0aFBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldExvY2FsU3RvcmFnZVN0YXRlKCk7XG4gICAgICBzdGF0ZS5jb2x1bW5zID0gc3RhdGUuY29sdW1ucyB8fCB7fTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZENvbHVtbnMuZ2V0KGkpO1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZ3JpZENvbHVtblJlZnMuZ2V0KGkpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmIChlbD8uc3R5bGU/LndpZHRoICYmIGVsLnN0eWxlLndpZHRoICE9PSAnMHB4JyAmJiBjb2w/LmZpZWxkKSB7XG4gICAgICAgICAgc3RhdGUuY29sdW1uc1tjb2wuZmllbGRdIHx8PSB7fTtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW2NvbC5maWVsZF0ud2lkdGggPSBlbC5zdHlsZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhZ2luYXRpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBzZXQgYnkgdGhpcyBkaXJlY3RpdmUsXG4gICAqIG90aGVyd2lzZSB3ZSBjYW4ndCB1cGRhdGUgZGF0YWdyaWQgdmFsdWVzIGZyb20gbG9jYWxTdG9yYWdlXG4gICAqIHdpdGhvdXQgZ2V0dGluZyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25EZXNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uRWxlbSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25EZXNjRWxlbSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYWdpbmF0aW9uRWxlbS5uYXRpdmVFbGVtZW50KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAncGFnaW5hdGlvbi1kZXNjcmlwdGlvbidcbiAgICAgICk/LlswXTtcbiAgICAgIGlmIChwYWdpbmF0aW9uRGVzY0VsZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLndhcm5lZEFib3V0Q3VzdG9tRGVzY3JpcHRpb24gJiYgcGFnaW5hdGlvbkRlc2NFbGVtLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1doZW4gdXNpbmcgY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSBkaXJlY3RpdmUsIHlvdSBzaG91bGQgbm90IHVzZSBjdXN0b20gcGFnaW5hdGlvbiBkZXNjcmlwdGlvbicgK1xuICAgICAgICAgICAgICAnIGluc2lkZSBwYWdpbmF0aW9uIGNvbXBvbmVudCBjb250ZW50LCBidXQgdXNlIFtjbHJQYWdpbmF0aW9uRGVzY3JpcHRpb25dIG9uIGNsci1kYXRhZ3JpZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FybmVkQWJvdXRDdXN0b21EZXNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhZ2luYXRpb25EZXNjRWxlbS50ZXh0Q29udGVudCA9IHRoaXMucGFnaW5hdGlvbkRlc2NyaXB0aW9uXG4gICAgICAgICAgICAucmVwbGFjZSgne3tmaXJzdH19JywgKHRoaXMucGFnaW5hdGlvbi5maXJzdEl0ZW0gKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7bGFzdH19JywgKHRoaXMucGFnaW5hdGlvbi5sYXN0SXRlbSArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3t0b3RhbH19JywgdGhpcy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGUgb2Ygdm9sYXRpbGUgZGF0YS4gVGhpcyBjYW4gYmUgaW5mbHVlbmNlZCBieSBjbHJVc2VMb2NhbFN0b3JlT25seS5cbiAgICovXG4gIGdldFZvbGF0aWxlRGF0YVN0YXRlKCk6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmdldFN0b3JhZ2VCYXNlZE9uSW5wdXRGbGFnKCkuZ2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5KSkgfHwge307XG4gIH1cblxuICBnZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5vcHRpb25zLmtleSkpIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHN0YXRlIG9mIHZvbGF0aWxlIGRhdGEuIFRoaXMgY2FuIGJlIGluZmx1ZW5jZWQgYnkgY2xyVXNlTG9jYWxTdG9yZU9ubHkuXG4gICAqL1xuICBzYXZlVm9sYXRpbGVEYXRhU3RhdGUoc3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpLnNldEl0ZW0odGhpcy5vcHRpb25zLmtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgfVxuXG4gIHNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy51c2VMb2NhbFN0b3JlT25seSA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGEgZGF0ZSBpcyBzZXJpYWxpemVkIGFzIHN0cmluZywgYnV0IG5vdCBkZXNlcmlhbGl6ZWQgYXMgZGF0ZVxuICAgKiB3ZSBuZWVkIHRvIGFkZCBzb21lIG1ldGEgaW5mb3JtYXRpb24gdG8gZG8gdGhhdCBtYW51YWxseSBsYXRlclxuICAgKi9cbiAgcHJpdmF0ZSBlbnJpY2hGaWx0ZXJWYWx1ZShmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goXG4gICAgICBrZXkgPT5cbiAgICAgICAgKHJlc3VsdFtrZXldID1cbiAgICAgICAgICBmaWx0ZXJba2V5XSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEQVRFX1RZUEUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlcltrZXldLFxuICAgICAgICAgICAgICB9IGFzIEZpbHRlclZhbHVlV2l0aE1ldGFkYXRhKVxuICAgICAgICAgICAgOiBmaWx0ZXJba2V5XSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBmaWx0ZXIgdmFsdWVzIHdpdGggbWV0YSBpbmZvcm1hdGlvbiBsaWtlIGRhdGUsIHdoaWNoIG5lZWRzIG1hbnVhbCBkZXNlcmlhbGl6YXRpb24gdG8gYSBkYXRlIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZpbHRlclZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBGaWx0ZXJWYWx1ZVdpdGhNZXRhZGF0YSk/LnR5cGUgPT09IERBVEVfVFlQRVxuICAgICAgPyBuZXcgRGF0ZSgodmFsdWUgYXMgRmlsdGVyVmFsdWVXaXRoTWV0YWRhdGEpLnZhbHVlIGFzIHN0cmluZylcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcihwcm9wOiBzdHJpbmcpOiBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTx1bmtub3duLCB1bmtub3duPiB7XG4gICAgLy8gZ2V0IGRlZmF1bHQgZmlsdGVyIG9yIGN1c3RvbSBmaWx0ZXJcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gcHJvcCk/LmZpbHRlciB8fFxuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzLmZpbmQoZmlsdGVyID0+IHRoaXMuZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlci5maWx0ZXIpID09PSBwcm9wKT8uZmlsdGVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlcjogQ2xyRGF0YWdyaWRGaWx0ZXJJbnRlcmZhY2U8dW5rbm93biwgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGZvciBOZXN0ZWRQcm9wZXJ0eSB3ZSBuZWVkIHRvIGdldCB0aGUgb3JpZ2luYWwgcHJvcGVydHlcbiAgICBjb25zdCBmaWx0ZXJXaXRoUHJvcCA9IGZpbHRlciBhcyB1bmtub3duIGFzIHsgcHJvcGVydHk6IHVua25vd24gfTtcbiAgICByZXR1cm4gKChmaWx0ZXJXaXRoUHJvcC5wcm9wZXJ0eSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnByb3AgfHwgZmlsdGVyV2l0aFByb3AucHJvcGVydHkpIGFzIHN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFByb3BlcnR5KHNvcnRCeTogQ2xyRGF0YWdyaWRDb21wYXJhdG9ySW50ZXJmYWNlPHVua25vd24+IHwgc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc29ydEJ5KSB7XG4gICAgICBpZiAodHlwZW9mIHNvcnRCeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRCeTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3J0QnkgaW5zdGFuY2VvZiBEYXRhZ3JpZFByb3BlcnR5Q29tcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gc29ydEJ5LnByb3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnBlcnNpc3RDb2x1bW5XaWR0aHMoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTdGF0ZVBlcnNpc3RlbmNlT3B0aW9ucyB7XG4gIGtleTogc3RyaW5nO1xuICBzZXJ2ZXJEcml2ZW46IGJvb2xlYW47XG4gIHBlcnNpc3RGaWx0ZXJzPzogYm9vbGVhbjtcbiAgcGVyc2lzdFBhZ2luYXRpb24/OiBib29sZWFuO1xuICBwZXJzaXN0U29ydD86IGJvb2xlYW47XG4gIHBlcnNpc3RIaWRkZW5Db2x1bW5zPzogYm9vbGVhbjtcbiAgcGVyc2lzdENvbHVtbldpZHRocz86IGJvb2xlYW47XG59XG4iXX0=