@mediusinc/mng-commons 0.2.0 → 0.2.6

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 (235) hide show
  1. package/esm2020/lib/api/models/builders/query-param.builder.mjs +48 -48
  2. package/esm2020/lib/api/models/filter-match-type.model.mjs +26 -26
  3. package/esm2020/lib/api/models/filter-param.model.mjs +46 -46
  4. package/esm2020/lib/api/models/index.mjs +9 -9
  5. package/esm2020/lib/api/models/mappers.mjs +17 -17
  6. package/esm2020/lib/api/models/query-mode.model.mjs +19 -19
  7. package/esm2020/lib/api/models/query-param.model.mjs +69 -69
  8. package/esm2020/lib/api/models/query-result.model.mjs +45 -45
  9. package/esm2020/lib/api/models/serialization.model.mjs +2 -2
  10. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +72 -72
  11. package/esm2020/lib/api/services/index.mjs +2 -2
  12. package/esm2020/lib/api/utils/index.mjs +3 -3
  13. package/esm2020/lib/api/utils/medius-rest.util.mjs +122 -122
  14. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -226
  15. package/esm2020/lib/components/action/action.component.mjs +65 -65
  16. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -148
  17. package/esm2020/lib/components/action/index.mjs +4 -4
  18. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -2
  19. package/esm2020/lib/components/action/models/action-execution.model.mjs +58 -58
  20. package/esm2020/lib/components/action/models/index.mjs +3 -3
  21. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -144
  22. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +114 -114
  23. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +113 -113
  24. package/esm2020/lib/components/form/editor/form-editor.component.mjs +141 -141
  25. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +19 -19
  26. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +19 -19
  27. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -16
  28. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +30 -26
  29. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +108 -109
  30. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +122 -122
  31. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -17
  32. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -8
  33. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -17
  34. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -16
  35. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -3
  36. package/esm2020/lib/components/form/index.mjs +4 -4
  37. package/esm2020/lib/components/form/models/form-editor.event.mjs +7 -7
  38. package/esm2020/lib/components/form/models/index.mjs +2 -2
  39. package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -17
  40. package/esm2020/lib/components/layout/footer.component.mjs +17 -17
  41. package/esm2020/lib/components/layout/index.mjs +7 -7
  42. package/esm2020/lib/components/layout/main-layout.component.mjs +54 -54
  43. package/esm2020/lib/components/layout/menu-item.component.mjs +173 -173
  44. package/esm2020/lib/components/layout/menu.component.mjs +20 -20
  45. package/esm2020/lib/components/layout/services/index.mjs +2 -2
  46. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -190
  47. package/esm2020/lib/components/layout/topbar.component.mjs +59 -59
  48. package/esm2020/lib/components/tableview/index.mjs +7 -6
  49. package/esm2020/lib/components/tableview/models/index.mjs +2 -2
  50. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -16
  51. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +24 -24
  52. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +33 -0
  53. package/esm2020/lib/components/tableview/services/index.mjs +2 -2
  54. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +16 -17
  55. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +85 -74
  56. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -25
  57. package/esm2020/lib/components/tableview/table/table.component.mjs +307 -307
  58. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -82
  59. package/esm2020/lib/config/formly.config.mjs +136 -136
  60. package/esm2020/lib/config/index.mjs +2 -2
  61. package/esm2020/lib/config/models/index.mjs +2 -2
  62. package/esm2020/lib/config/models/mng-config.model.mjs +2 -2
  63. package/esm2020/lib/data-providers/base.data-provider.mjs +24 -24
  64. package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -37
  65. package/esm2020/lib/data-providers/index.mjs +6 -6
  66. package/esm2020/lib/data-providers/lookup.data-provider.mjs +16 -16
  67. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -2
  68. package/esm2020/lib/data-providers/tableview.data-provider.mjs +17 -17
  69. package/esm2020/lib/descriptors/action.descriptor.mjs +332 -332
  70. package/esm2020/lib/descriptors/editor.descriptor.mjs +670 -670
  71. package/esm2020/lib/descriptors/field.validator.mjs +21 -21
  72. package/esm2020/lib/descriptors/index.mjs +8 -8
  73. package/esm2020/lib/descriptors/lookup.descriptor.mjs +2 -2
  74. package/esm2020/lib/descriptors/model.descriptor.mjs +34 -34
  75. package/esm2020/lib/descriptors/table.descriptor.mjs +427 -401
  76. package/esm2020/lib/descriptors/tableview.descriptor.mjs +131 -131
  77. package/esm2020/lib/directives/component.directive.mjs +23 -23
  78. package/esm2020/lib/directives/index.mjs +3 -3
  79. package/esm2020/lib/directives/template.directive.mjs +29 -29
  80. package/esm2020/lib/mng-commons.module.mjs +412 -410
  81. package/esm2020/lib/models/index.mjs +2 -3
  82. package/esm2020/lib/models/user.model.mjs +2 -2
  83. package/esm2020/lib/pipes/boolean.pipe.mjs +22 -22
  84. package/esm2020/lib/pipes/index.mjs +3 -3
  85. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -36
  86. package/esm2020/lib/router/index.mjs +2 -0
  87. package/esm2020/lib/router/models/index.mjs +2 -0
  88. package/esm2020/lib/router/models/router.model.mjs +2 -0
  89. package/esm2020/lib/router/route-builder.mjs +288 -0
  90. package/esm2020/lib/services/action.service.mjs +269 -269
  91. package/esm2020/lib/services/commons.service.mjs +354 -353
  92. package/esm2020/lib/services/configuration.service.mjs +78 -78
  93. package/esm2020/lib/services/index.mjs +5 -5
  94. package/esm2020/lib/services/navigation.service.mjs +48 -48
  95. package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -4
  96. package/esm2020/lib/services/providers/config-service.provider.mjs +20 -20
  97. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -31
  98. package/esm2020/lib/services/providers/index.mjs +4 -4
  99. package/esm2020/lib/services/tokens/browser-storage.token.mjs +6 -6
  100. package/esm2020/lib/services/tokens/index.mjs +3 -3
  101. package/esm2020/lib/services/tokens/module-config.token.mjs +3 -3
  102. package/esm2020/lib/types/index.mjs +3 -3
  103. package/esm2020/lib/types/type.decorator.mjs +7 -7
  104. package/esm2020/lib/types/type.model.mjs +2 -2
  105. package/esm2020/lib/utils/editor-formly.util.mjs +176 -176
  106. package/esm2020/lib/utils/i18n.util.mjs +125 -125
  107. package/esm2020/lib/utils/index.mjs +6 -6
  108. package/esm2020/lib/utils/model.util.mjs +57 -57
  109. package/esm2020/lib/utils/route.util.mjs +24 -0
  110. package/esm2020/lib/utils/toast.util.mjs +39 -39
  111. package/esm2020/lib/utils/type.util.mjs +39 -39
  112. package/esm2020/mediusinc-mng-commons.mjs +5 -5
  113. package/esm2020/public-api.mjs +37 -36
  114. package/fesm2015/mediusinc-mng-commons.mjs +6407 -6024
  115. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  116. package/fesm2020/mediusinc-mng-commons.mjs +6329 -5950
  117. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  118. package/lib/api/models/builders/query-param.builder.d.ts +11 -11
  119. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  120. package/lib/api/models/filter-param.model.d.ts +23 -23
  121. package/lib/api/models/index.d.ts +8 -8
  122. package/lib/api/models/mappers.d.ts +6 -6
  123. package/lib/api/models/query-mode.model.d.ts +16 -16
  124. package/lib/api/models/query-param.model.d.ts +31 -31
  125. package/lib/api/models/query-result.model.d.ts +36 -36
  126. package/lib/api/models/serialization.model.d.ts +8 -8
  127. package/lib/api/services/crud-api.abstract.service.d.ts +23 -23
  128. package/lib/api/services/index.d.ts +1 -1
  129. package/lib/api/utils/index.d.ts +2 -2
  130. package/lib/api/utils/medius-rest.util.d.ts +12 -12
  131. package/lib/api/utils/object-serializer.util.d.ts +30 -30
  132. package/lib/components/action/action.component.d.ts +36 -36
  133. package/lib/components/action/dialog/action-dialog.component.d.ts +46 -46
  134. package/lib/components/action/index.d.ts +3 -3
  135. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  136. package/lib/components/action/models/action-execution.model.d.ts +53 -53
  137. package/lib/components/action/models/index.d.ts +2 -2
  138. package/lib/components/action/route/action-route.component.d.ts +32 -32
  139. package/lib/components/form/autocomplete/autocomplete.component.d.ts +36 -36
  140. package/lib/components/form/dropdown/dropdown.component.d.ts +34 -34
  141. package/lib/components/form/editor/form-editor.component.d.ts +39 -39
  142. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +11 -11
  143. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +11 -11
  144. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -6
  145. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -12
  146. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -17
  147. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -36
  148. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  149. package/lib/components/form/formly/fields/index.d.ts +7 -7
  150. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -8
  151. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -8
  152. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  153. package/lib/components/form/index.d.ts +3 -3
  154. package/lib/components/form/models/form-editor.event.d.ts +5 -5
  155. package/lib/components/form/models/index.d.ts +1 -1
  156. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  157. package/lib/components/layout/footer.component.d.ts +9 -9
  158. package/lib/components/layout/index.d.ts +6 -6
  159. package/lib/components/layout/main-layout.component.d.ts +21 -21
  160. package/lib/components/layout/menu-item.component.d.ts +29 -29
  161. package/lib/components/layout/menu.component.d.ts +10 -10
  162. package/lib/components/layout/services/index.d.ts +1 -1
  163. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  164. package/lib/components/layout/topbar.component.d.ts +25 -25
  165. package/lib/components/tableview/index.d.ts +6 -5
  166. package/lib/components/tableview/models/index.d.ts +1 -1
  167. package/lib/components/tableview/models/table.event.d.ts +17 -17
  168. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +15 -14
  169. package/lib/components/tableview/route/tableview-route.component.d.ts +15 -0
  170. package/lib/components/tableview/services/index.d.ts +1 -1
  171. package/lib/components/tableview/services/tableview.component.service.d.ts +13 -13
  172. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +27 -22
  173. package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -12
  174. package/lib/components/tableview/table/table.component.d.ts +79 -79
  175. package/lib/components/tableview/tableview.component.d.ts +35 -35
  176. package/lib/config/formly.config.d.ts +14 -14
  177. package/lib/config/index.d.ts +1 -1
  178. package/lib/config/models/index.d.ts +1 -1
  179. package/lib/config/models/mng-config.model.d.ts +34 -34
  180. package/lib/data-providers/base.data-provider.d.ts +17 -17
  181. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  182. package/lib/data-providers/index.d.ts +5 -5
  183. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  184. package/lib/data-providers/table.data-provider.d.ts +6 -6
  185. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  186. package/lib/descriptors/action.descriptor.d.ts +148 -148
  187. package/lib/descriptors/editor.descriptor.d.ts +255 -255
  188. package/lib/descriptors/field.validator.d.ts +18 -18
  189. package/lib/descriptors/index.d.ts +7 -7
  190. package/lib/descriptors/lookup.descriptor.d.ts +17 -17
  191. package/lib/descriptors/model.descriptor.d.ts +15 -15
  192. package/lib/descriptors/table.descriptor.d.ts +184 -164
  193. package/lib/descriptors/tableview.descriptor.d.ts +39 -39
  194. package/lib/directives/component.directive.d.ts +11 -11
  195. package/lib/directives/index.d.ts +2 -2
  196. package/lib/directives/template.directive.d.ts +13 -13
  197. package/lib/mng-commons.module.d.ts +80 -79
  198. package/lib/models/index.d.ts +1 -2
  199. package/lib/models/user.model.d.ts +8 -8
  200. package/lib/pipes/boolean.pipe.d.ts +7 -7
  201. package/lib/pipes/index.d.ts +2 -2
  202. package/lib/pipes/property-path.pipe.d.ts +7 -7
  203. package/lib/router/index.d.ts +1 -0
  204. package/lib/router/models/index.d.ts +1 -0
  205. package/lib/router/models/router.model.d.ts +22 -0
  206. package/lib/router/route-builder.d.ts +66 -0
  207. package/lib/services/action.service.d.ts +92 -92
  208. package/lib/services/commons.service.d.ts +72 -72
  209. package/lib/services/configuration.service.d.ts +35 -35
  210. package/lib/services/index.d.ts +4 -4
  211. package/lib/services/navigation.service.d.ts +14 -14
  212. package/lib/services/providers/commons-init.provider.d.ts +2 -2
  213. package/lib/services/providers/config-service.provider.d.ts +5 -5
  214. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  215. package/lib/services/providers/index.d.ts +3 -3
  216. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  217. package/lib/services/tokens/index.d.ts +2 -2
  218. package/lib/services/tokens/module-config.token.d.ts +3 -3
  219. package/lib/types/index.d.ts +2 -2
  220. package/lib/types/type.decorator.d.ts +2 -2
  221. package/lib/types/type.model.d.ts +10 -10
  222. package/lib/utils/editor-formly.util.d.ts +9 -9
  223. package/lib/utils/i18n.util.d.ts +18 -18
  224. package/lib/utils/index.d.ts +5 -5
  225. package/lib/utils/model.util.d.ts +7 -7
  226. package/lib/utils/route.util.d.ts +4 -0
  227. package/lib/utils/toast.util.d.ts +13 -13
  228. package/lib/utils/type.util.d.ts +15 -15
  229. package/mediusinc-mng-commons.d.ts +5 -5
  230. package/package.json +4 -4
  231. package/public-api.d.ts +26 -25
  232. package/scss/common/layout/_exception.scss +1 -1
  233. package/esm2020/lib/models/router.model.mjs +0 -2
  234. package/lib/models/router.model.d.ts +0 -14
  235. package/mediusinc-mng-commons-0.2.0.tgz +0 -0
@@ -1,401 +1,427 @@
1
- import { ModelDescriptor } from './model.descriptor';
2
- import { LookupDataProvider } from '../data-providers';
3
- import { ModelUtil } from '../utils';
4
- export class TableDescriptor {
5
- constructor(modelType, idProperty, titleProperty) {
6
- this._filterDisplay = TableDescriptor.FilterDisplayEnum.Menu;
7
- this._paginationMode = TableDescriptor.PaginationModeEnum.Pagination;
8
- this._columns = [];
9
- this._hasDefaultSort = false;
10
- this._defaultSortProperty = [];
11
- this._defaultSortAsc = [];
12
- this._rowHeight = 45;
13
- this._tableFullHeightOffset = 315;
14
- this._model = new ModelDescriptor(modelType, idProperty, titleProperty);
15
- }
16
- get model() {
17
- return this._model;
18
- }
19
- get filterDisplay() {
20
- return this._filterDisplay;
21
- }
22
- get paginationMode() {
23
- return this._paginationMode;
24
- }
25
- get columns() {
26
- return this._columns;
27
- }
28
- get title() {
29
- return this._title;
30
- }
31
- get dataKeyProperty() {
32
- return this._dataKeyProperty;
33
- }
34
- get hasDefaultSort() {
35
- return this._hasDefaultSort;
36
- }
37
- get defaultSortProperty() {
38
- return this._defaultSortProperty;
39
- }
40
- get defaultSortAsc() {
41
- return this._defaultSortAsc;
42
- }
43
- get rowHeight() {
44
- return this._rowHeight;
45
- }
46
- get tableFullHeightOffset() {
47
- return this._tableFullHeightOffset;
48
- }
49
- addColumnDescriptor(column) {
50
- this._columns.push(column);
51
- this.setDataKeyFromColumn();
52
- return this;
53
- }
54
- addColumn(property) {
55
- const column = new ColumnDescriptor(this, property);
56
- this._columns.push(column);
57
- this.setDataKeyFromColumn();
58
- return column;
59
- }
60
- addColumnNumber(property, displayFormat) {
61
- const column = new ColumnDescriptor(this, property);
62
- column.asNumber(displayFormat);
63
- this._columns.push(column);
64
- this.setDataKeyFromColumn();
65
- return column;
66
- }
67
- addColumnDate(property, displayFormat) {
68
- const column = new ColumnDescriptor(this, property);
69
- column.asDate(displayFormat);
70
- this._columns.push(column);
71
- this.setDataKeyFromColumn();
72
- return column;
73
- }
74
- addColumnBoolean(property) {
75
- const column = new ColumnDescriptor(this, property);
76
- column.asBoolean();
77
- this._columns.push(column);
78
- this.setDataKeyFromColumn();
79
- return column;
80
- }
81
- addColumnObject(property, modelType, displayProperty) {
82
- const column = new ColumnDescriptor(this, property);
83
- column.withModelType(modelType);
84
- column.withDisplayPropertyPath(displayProperty);
85
- this._columns.push(column);
86
- this.setDataKeyFromColumn();
87
- return column;
88
- }
89
- withFilterDisplay(filterDisplayType) {
90
- this._filterDisplay = filterDisplayType;
91
- return this;
92
- }
93
- withPaginationMode(paginationMode) {
94
- this._paginationMode = paginationMode;
95
- return this;
96
- }
97
- withTitle(title) {
98
- this._title = title;
99
- return this;
100
- }
101
- withDataKeyProperty(property) {
102
- this._dataKeyProperty = property;
103
- return this;
104
- }
105
- withDefaultSort(property, asc = true) {
106
- this._hasDefaultSort = true;
107
- this._defaultSortProperty.push(property);
108
- this._defaultSortAsc.push(asc);
109
- return this;
110
- }
111
- withRowHeight(rowHeight) {
112
- this._rowHeight = rowHeight;
113
- return this;
114
- }
115
- withTableFullHeightOffset(tableFullHeightOffset) {
116
- this._tableFullHeightOffset = tableFullHeightOffset;
117
- return this;
118
- }
119
- setDataKeyFromColumn() {
120
- if (!this._dataKeyProperty && this._columns.length === 1) {
121
- this._dataKeyProperty = this._columns[0].property;
122
- }
123
- }
124
- copy() {
125
- const descriptor = new TableDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName);
126
- descriptor._columns = this.columns.map(c => c.copy());
127
- descriptor._title = this._title;
128
- descriptor._dataKeyProperty = this._dataKeyProperty;
129
- descriptor._defaultSortProperty = this._defaultSortProperty.map(p => p);
130
- descriptor._defaultSortAsc = this._defaultSortAsc.map(p => p);
131
- descriptor._filterDisplay = this._filterDisplay;
132
- return descriptor;
133
- }
134
- }
135
- (function (TableDescriptor) {
136
- let PaginationModeEnum;
137
- (function (PaginationModeEnum) {
138
- PaginationModeEnum[PaginationModeEnum["Pagination"] = 0] = "Pagination";
139
- PaginationModeEnum[PaginationModeEnum["InfiniteScroll"] = 1] = "InfiniteScroll";
140
- })(PaginationModeEnum = TableDescriptor.PaginationModeEnum || (TableDescriptor.PaginationModeEnum = {}));
141
- let FilterDisplayEnum;
142
- (function (FilterDisplayEnum) {
143
- FilterDisplayEnum[FilterDisplayEnum["Row"] = 0] = "Row";
144
- FilterDisplayEnum[FilterDisplayEnum["Menu"] = 1] = "Menu";
145
- })(FilterDisplayEnum = TableDescriptor.FilterDisplayEnum || (TableDescriptor.FilterDisplayEnum = {}));
146
- })(TableDescriptor || (TableDescriptor = {}));
147
- export class ColumnDescriptor {
148
- constructor(table, property) {
149
- this._modelType = null;
150
- this._columnType = ColumnDescriptor.TypeEnum.String;
151
- this._isSortEnabled = false;
152
- this._table = table;
153
- this._property = property;
154
- }
155
- get table() {
156
- return this._table;
157
- }
158
- get property() {
159
- return this._property;
160
- }
161
- get modelType() {
162
- return this._modelType;
163
- }
164
- get displayPropertyPath() {
165
- return this._displayPropertyPath;
166
- }
167
- get title() {
168
- return this._title;
169
- }
170
- get isSortEnabled() {
171
- return this._isSortEnabled;
172
- }
173
- get columnType() {
174
- return this._columnType;
175
- }
176
- get filterDescriptor() {
177
- return this._filterDescriptor;
178
- }
179
- get displayFormat() {
180
- return this._displayFormat;
181
- }
182
- asType(type = ColumnDescriptor.TypeEnum.String) {
183
- this._columnType = type;
184
- return this;
185
- }
186
- asNumber(displayFormat = '1.0-0') {
187
- this._columnType = ColumnDescriptor.TypeEnum.Number;
188
- this._displayFormat = displayFormat;
189
- return this;
190
- }
191
- asDate(displayFormat = 'dd.MM.yyyy') {
192
- this._columnType = ColumnDescriptor.TypeEnum.Date;
193
- this._displayFormat = displayFormat;
194
- return this;
195
- }
196
- asBoolean() {
197
- this._columnType = ColumnDescriptor.TypeEnum.Boolean;
198
- return this;
199
- }
200
- withModelType(modelType) {
201
- this._modelType = modelType;
202
- return this;
203
- }
204
- withTitle(title) {
205
- this._title = title;
206
- return this;
207
- }
208
- withDisplayPropertyPath(displayPropertyPath) {
209
- this._displayPropertyPath = displayPropertyPath;
210
- return this;
211
- }
212
- withFilter() {
213
- this._filterDescriptor = new FilterDescriptor(this._property);
214
- this._filterDescriptor.asFilterType(this._columnType);
215
- return this._filterDescriptor;
216
- }
217
- withFilterLookup() {
218
- const filterDescriptor = new FilterLookupDescriptor(this._property, this._modelType);
219
- this._filterDescriptor = filterDescriptor;
220
- return filterDescriptor;
221
- }
222
- withSort(isEnabled = true) {
223
- this._isSortEnabled = isEnabled;
224
- return this;
225
- }
226
- copy() {
227
- const descriptor = new ColumnDescriptor(this._table, this._property);
228
- descriptor._displayPropertyPath = this._displayPropertyPath;
229
- descriptor._title = this._title;
230
- descriptor._isSortEnabled = this._isSortEnabled;
231
- descriptor._columnType = this._columnType;
232
- descriptor._filterDescriptor = this._filterDescriptor?.copy();
233
- return descriptor;
234
- }
235
- }
236
- (function (ColumnDescriptor) {
237
- let TypeEnum;
238
- (function (TypeEnum) {
239
- TypeEnum[TypeEnum["String"] = 0] = "String";
240
- TypeEnum[TypeEnum["Number"] = 1] = "Number";
241
- TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
242
- TypeEnum[TypeEnum["Date"] = 3] = "Date";
243
- })(TypeEnum = ColumnDescriptor.TypeEnum || (ColumnDescriptor.TypeEnum = {}));
244
- })(ColumnDescriptor || (ColumnDescriptor = {}));
245
- export class FilterDescriptor {
246
- constructor(property) {
247
- this._filterType = FilterDescriptor.TypeEnum.String;
248
- this._className = '';
249
- this._property = property;
250
- }
251
- get property() {
252
- return this._property;
253
- }
254
- get filterType() {
255
- return this._filterType;
256
- }
257
- get filterProperty() {
258
- return this._filterProperty;
259
- }
260
- get placeholder() {
261
- return this._placeholder;
262
- }
263
- get className() {
264
- return this._className;
265
- }
266
- asFilterType(filterType) {
267
- this._filterType = filterType;
268
- return this;
269
- }
270
- /**
271
- * Sets different filter property name instead of default property. Use this if API requires different property provided to perform correct filter.
272
- * @param filterProperty
273
- */
274
- withFilterProperty(filterProperty) {
275
- this._filterProperty = filterProperty;
276
- return this;
277
- }
278
- withPlaceholder(placeholder) {
279
- this._placeholder = placeholder;
280
- return this;
281
- }
282
- withClassName(className) {
283
- this._className = className;
284
- return this;
285
- }
286
- copyFieldsTo(descriptor) {
287
- descriptor._filterType = this._filterType;
288
- descriptor._filterProperty = this._filterProperty;
289
- descriptor._placeholder = this._placeholder;
290
- descriptor._className = this._className;
291
- }
292
- copy() {
293
- const descriptor = new FilterDescriptor(this._property);
294
- this.copyFieldsTo(descriptor);
295
- return descriptor;
296
- }
297
- }
298
- (function (FilterDescriptor) {
299
- let TypeEnum;
300
- (function (TypeEnum) {
301
- TypeEnum[TypeEnum["String"] = 0] = "String";
302
- TypeEnum[TypeEnum["Number"] = 1] = "Number";
303
- TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
304
- TypeEnum[TypeEnum["Date"] = 3] = "Date";
305
- TypeEnum[TypeEnum["Lookup"] = 4] = "Lookup";
306
- })(TypeEnum = FilterDescriptor.TypeEnum || (FilterDescriptor.TypeEnum = {}));
307
- })(FilterDescriptor || (FilterDescriptor = {}));
308
- export class FilterLookupDescriptor extends FilterDescriptor {
309
- constructor(property, modelType) {
310
- super(property);
311
- this._modelType = null;
312
- this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Dropdown;
313
- this._multiselect = false;
314
- this._dropdownClassName = 'mng-filter-lookup-dropdown';
315
- this._modelType = modelType;
316
- this._filterType = FilterDescriptor.TypeEnum.Lookup;
317
- ModelUtil.trySetLookupItemsProperties(this);
318
- }
319
- get modelType() {
320
- return this._modelType;
321
- }
322
- get lookupType() {
323
- return this._lookupType;
324
- }
325
- get itemsLabelProperty() {
326
- return this._itemsLabelProperty;
327
- }
328
- get itemsValueProperty() {
329
- return this._itemsValueProperty;
330
- }
331
- get dataKeyProperty() {
332
- return this._dataKeyProperty;
333
- }
334
- get dataProvider() {
335
- return this._dataProvider;
336
- }
337
- get multiselect() {
338
- return this._multiselect;
339
- }
340
- withItemsLabelProperty(itemsLabelProperty) {
341
- this._itemsLabelProperty = itemsLabelProperty;
342
- return this;
343
- }
344
- withItemsValueProperty(itemsValueProperty) {
345
- this._itemsValueProperty = itemsValueProperty;
346
- return this;
347
- }
348
- withDataKeyProperty(dataKeyProperty) {
349
- this._dataKeyProperty = dataKeyProperty;
350
- return this;
351
- }
352
- get dropdownClassName() {
353
- return this._dropdownClassName;
354
- }
355
- withLookup(lookup, serviceType) {
356
- const dataProvider = new LookupDataProvider(this._modelType);
357
- if (serviceType) {
358
- dataProvider.withServiceType(serviceType);
359
- }
360
- dataProvider.withLookup(lookup);
361
- this._dataProvider = dataProvider;
362
- return this;
363
- }
364
- withLookupDataProvider(dataProvider) {
365
- this._dataProvider = dataProvider;
366
- return this;
367
- }
368
- withMultiselect(multiselect = true) {
369
- this._multiselect = multiselect;
370
- return this;
371
- }
372
- withDropdownClassName(dropdownClassName) {
373
- this._dropdownClassName = dropdownClassName;
374
- return this;
375
- }
376
- asAutocomplete() {
377
- this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Autocomplete;
378
- return this;
379
- }
380
- copyFieldsTo(descriptor) {
381
- super.copyFieldsTo(descriptor);
382
- descriptor._dataProvider = this._dataProvider;
383
- descriptor._lookupType = this._lookupType;
384
- descriptor._itemsLabelProperty = this._itemsLabelProperty;
385
- descriptor._itemsValueProperty = this._itemsValueProperty;
386
- descriptor._dataKeyProperty = this._dataKeyProperty;
387
- }
388
- copy() {
389
- const descriptor = new FilterLookupDescriptor(this._property, this._modelType);
390
- this.copyFieldsTo(descriptor);
391
- return descriptor;
392
- }
393
- }
394
- (function (FilterLookupDescriptor) {
395
- let LookupTypeEnum;
396
- (function (LookupTypeEnum) {
397
- LookupTypeEnum[LookupTypeEnum["Dropdown"] = 0] = "Dropdown";
398
- LookupTypeEnum[LookupTypeEnum["Autocomplete"] = 1] = "Autocomplete";
399
- })(LookupTypeEnum = FilterLookupDescriptor.LookupTypeEnum || (FilterLookupDescriptor.LookupTypeEnum = {}));
400
- })(FilterLookupDescriptor || (FilterLookupDescriptor = {}));
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFzQixrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxPQUFPLGVBQWU7SUFleEIsWUFBWSxTQUF1QixFQUFFLFVBQW1CLEVBQUUsYUFBc0I7UUFaeEUsbUJBQWMsR0FBc0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMzRixvQkFBZSxHQUF1QyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQ3BHLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBRy9DLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUVoQyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLDJCQUFzQixHQUFXLEdBQUcsQ0FBQztRQUd6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2Qs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QUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFFRCxXQUFpQixzQkFBc0I7SUFDbkMsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3RCLDJEQUFRLENBQUE7UUFDUixtRUFBWSxDQUFBO0lBQ2hCLENBQUMsRUFIVyxjQUFjLEdBQWQscUNBQWMsS0FBZCxxQ0FBYyxRQUd6QjtBQUNMLENBQUMsRUFMZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQUt0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGlzcGxheTogVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtID0gVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtLk1lbnU7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU6IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0gPSBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb247XG4gICAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0OiBudW1iZXIgPSA0NTtcbiAgICBwcml2YXRlIF90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlciA9IDMxNTtcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0QXNjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRBc2M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uTnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxudW1iZXIsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzTnVtYmVyKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5Cb29sZWFuKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPGJvb2xlYW4sIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNCb29sZWFuKCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbk9iamVjdDxDVD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8Q1Q+LCBkaXNwbGF5UHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhNb2RlbFR5cGUobW9kZWxUeXBlKTtcbiAgICAgICAgY29sdW1uLndpdGhEaXNwbGF5UHJvcGVydHlQYXRoKGRpc3BsYXlQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJEaXNwbGF5KGZpbHRlckRpc3BsYXlUeXBlOiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGlzcGxheSA9IGZpbHRlckRpc3BsYXlUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb25Nb2RlID0gcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogc3RyaW5nLCBhc2M6IGJvb2xlYW4gPSB0cnVlKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFNvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5LnB1c2gocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydEFzYy5wdXNoKGFzYyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93SGVpZ2h0KHJvd0hlaWdodDogbnVtYmVyKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRnVsbEhlaWdodE9mZnNldCh0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlcik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRhS2V5RnJvbUNvbHVtbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhS2V5UHJvcGVydHkgJiYgdGhpcy5fY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2NvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvcih0aGlzLm1vZGVsLnR5cGUsIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFNvcnRBc2MgPSB0aGlzLl9kZWZhdWx0U29ydEFzYy5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZURlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFBhZ2luYXRpb25Nb2RlRW51bSB7XG4gICAgICAgIFBhZ2luYXRpb24sXG4gICAgICAgIEluZmluaXRlU2Nyb2xsXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gRmlsdGVyRGlzcGxheUVudW0ge1xuICAgICAgICBSb3csXG4gICAgICAgIE1lbnVcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZTogVGFibGVEZXNjcmlwdG9yPFRUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIHByaXZhdGUgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbHVtblR5cGU6IENvbHVtbkRlc2NyaXB0b3IuVHlwZUVudW0gPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5UHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2lzU29ydEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9maWx0ZXJEZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheVByb3BlcnR5UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc051bWJlcihkaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnMS4wLTAnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdDogc3RyaW5nID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNCb29sZWFuKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGVsVHlwZShtb2RlbFR5cGU6IENsYXNzVHlwZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc3BsYXlQcm9wZXJ0eVBhdGgoZGlzcGxheVByb3BlcnR5UGF0aDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSBkaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcigpOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueT4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZSh0aGlzLl9jb2x1bW5UeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXAoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxhbnk+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KGlzRW5hYmxlZDogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTb3J0RW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KHRoaXMuX3RhYmxlLCB0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSB0aGlzLl9kaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9pc1NvcnRFbmFibGVkID0gdGhpcy5faXNTb3J0RW5hYmxlZDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uVHlwZSA9IHRoaXMuX2NvbHVtblR5cGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb2x1bW5EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN0cmluZyxcbiAgICAgICAgTnVtYmVyLFxuICAgICAgICBCb29sZWFuLFxuICAgICAgICBEYXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJUeXBlID0gRmlsdGVyRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlOiBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRpZmZlcmVudCBmaWx0ZXIgcHJvcGVydHkgbmFtZSBpbnN0ZWFkIG9mIGRlZmF1bHQgcHJvcGVydHkuIFVzZSB0aGlzIGlmIEFQSSByZXF1aXJlcyBkaWZmZXJlbnQgcHJvcGVydHkgcHJvdmlkZWQgdG8gcGVyZm9ybSBjb3JyZWN0IGZpbHRlci5cbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlclByb3BlcnR5KGZpbHRlclByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlclR5cGUgPSB0aGlzLl9maWx0ZXJUeXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2ZpbHRlclByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxUPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsdGVyRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBTdHJpbmcsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgQm9vbGVhbixcbiAgICAgICAgRGF0ZSxcbiAgICAgICAgTG9va3VwXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiBleHRlbmRzIEZpbHRlckRlc2NyaXB0b3I8VD4gaW1wbGVtZW50cyBJTG9va3VwRGVzY3JpcHRvcjxUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPnxudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9sb29rdXBUeXBlPzogRmlsdGVyTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bSA9IEZpbHRlckxvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG5cbiAgICBwcml2YXRlIF9kYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgcHJpdmF0ZSBfaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2l0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kYXRhS2V5UHJvcGVydHk/IDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD58bnVsbCkge1xuICAgICAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IEZpbHRlckRlc2NyaXB0b3IuVHlwZUVudW0uTG9va3VwO1xuICAgICAgICBNb2RlbFV0aWwudHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc1ZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtdWx0aXNlbGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IGl0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc1ZhbHVlUHJvcGVydHkoaXRlbXNWYWx1ZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID0gaXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShkYXRhS2V5UHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBkYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZHJvcGRvd25DbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cDxTPihsb29rdXA6IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMsIHNlYXJjaD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBcnJheTxUPj4sIHNlcnZpY2VUeXBlPzogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPFQsIFM+KHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhMb29rdXAobG9va3VwKTtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX211bHRpc2VsZWN0ID0gbXVsdGlzZWxlY3Q7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRHJvcGRvd25DbGFzc05hbWUoZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZSA9IGRyb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNBdXRvY29tcGxldGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZGVzY3JpcHRvci5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlckxvb2t1cERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIExvb2t1cFR5cGVFbnVtIHtcbiAgICAgICAgRHJvcGRvd24sXG4gICAgICAgIEF1dG9jb21wbGV0ZVxuICAgIH1cbn1cbiJdfQ==
1
+ import { ModelDescriptor } from './model.descriptor';
2
+ import { LookupDataProvider } from '../data-providers';
3
+ import { ModelUtil } from '../utils';
4
+ export class TableDescriptor {
5
+ constructor(modelType, idProperty, titleProperty) {
6
+ this._filterDisplay = TableDescriptor.FilterDisplayEnum.Menu;
7
+ this._paginationMode = TableDescriptor.PaginationModeEnum.Pagination;
8
+ this._columns = [];
9
+ this._hasDefaultSort = false;
10
+ this._defaultSortProperty = [];
11
+ this._defaultSortAsc = [];
12
+ this._rowHeight = 45;
13
+ this._tableFullHeightOffset = 315;
14
+ this._model = new ModelDescriptor(modelType, idProperty, titleProperty);
15
+ }
16
+ get model() {
17
+ return this._model;
18
+ }
19
+ get filterDisplay() {
20
+ return this._filterDisplay;
21
+ }
22
+ get paginationMode() {
23
+ return this._paginationMode;
24
+ }
25
+ get columns() {
26
+ return this._columns;
27
+ }
28
+ get title() {
29
+ return this._title;
30
+ }
31
+ get dataKeyProperty() {
32
+ return this._dataKeyProperty;
33
+ }
34
+ get hasDefaultSort() {
35
+ return this._hasDefaultSort;
36
+ }
37
+ get defaultSortProperty() {
38
+ return this._defaultSortProperty;
39
+ }
40
+ get defaultSortAsc() {
41
+ return this._defaultSortAsc;
42
+ }
43
+ get rowHeight() {
44
+ return this._rowHeight;
45
+ }
46
+ get tableFullHeightOffset() {
47
+ return this._tableFullHeightOffset;
48
+ }
49
+ addColumnDescriptor(column) {
50
+ this._columns.push(column);
51
+ this.setDataKeyFromColumn();
52
+ return this;
53
+ }
54
+ addColumn(property) {
55
+ const column = new ColumnDescriptor(this, property);
56
+ this._columns.push(column);
57
+ this.setDataKeyFromColumn();
58
+ return column;
59
+ }
60
+ addColumnNumber(property, displayFormat) {
61
+ const column = new ColumnDescriptor(this, property);
62
+ column.asNumber(displayFormat);
63
+ this._columns.push(column);
64
+ this.setDataKeyFromColumn();
65
+ return column;
66
+ }
67
+ addColumnDate(property, displayFormat) {
68
+ const column = new ColumnDescriptor(this, property);
69
+ column.asDate(displayFormat);
70
+ this._columns.push(column);
71
+ this.setDataKeyFromColumn();
72
+ return column;
73
+ }
74
+ addColumnBoolean(property) {
75
+ const column = new ColumnDescriptor(this, property);
76
+ column.asBoolean();
77
+ this._columns.push(column);
78
+ this.setDataKeyFromColumn();
79
+ return column;
80
+ }
81
+ addColumnObject(property, modelType, displayProperty) {
82
+ const column = new ColumnDescriptor(this, property);
83
+ column.withModelType(modelType);
84
+ column.withDisplayPropertyPath(displayProperty);
85
+ this._columns.push(column);
86
+ this.setDataKeyFromColumn();
87
+ return column;
88
+ }
89
+ withFilterDisplay(filterDisplayType) {
90
+ this._filterDisplay = filterDisplayType;
91
+ return this;
92
+ }
93
+ withPaginationMode(paginationMode) {
94
+ this._paginationMode = paginationMode;
95
+ return this;
96
+ }
97
+ withTitle(title) {
98
+ this._title = title;
99
+ return this;
100
+ }
101
+ withDataKeyProperty(property) {
102
+ this._dataKeyProperty = property;
103
+ return this;
104
+ }
105
+ withDefaultSort(property, asc = true) {
106
+ this._hasDefaultSort = true;
107
+ this._defaultSortProperty.push(property);
108
+ this._defaultSortAsc.push(asc);
109
+ return this;
110
+ }
111
+ withRowHeight(rowHeight) {
112
+ this._rowHeight = rowHeight;
113
+ return this;
114
+ }
115
+ withTableFullHeightOffset(tableFullHeightOffset) {
116
+ this._tableFullHeightOffset = tableFullHeightOffset;
117
+ return this;
118
+ }
119
+ setDataKeyFromColumn() {
120
+ if (!this._dataKeyProperty && this._columns.length === 1) {
121
+ this._dataKeyProperty = this._columns[0].property;
122
+ }
123
+ }
124
+ copy() {
125
+ const descriptor = new TableDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName);
126
+ descriptor._columns = this.columns.map(c => c.copy());
127
+ descriptor._title = this._title;
128
+ descriptor._dataKeyProperty = this._dataKeyProperty;
129
+ descriptor._defaultSortProperty = this._defaultSortProperty.map(p => p);
130
+ descriptor._defaultSortAsc = this._defaultSortAsc.map(p => p);
131
+ descriptor._filterDisplay = this._filterDisplay;
132
+ return descriptor;
133
+ }
134
+ }
135
+ (function (TableDescriptor) {
136
+ let PaginationModeEnum;
137
+ (function (PaginationModeEnum) {
138
+ PaginationModeEnum[PaginationModeEnum["Pagination"] = 0] = "Pagination";
139
+ PaginationModeEnum[PaginationModeEnum["InfiniteScroll"] = 1] = "InfiniteScroll";
140
+ })(PaginationModeEnum = TableDescriptor.PaginationModeEnum || (TableDescriptor.PaginationModeEnum = {}));
141
+ let FilterDisplayEnum;
142
+ (function (FilterDisplayEnum) {
143
+ FilterDisplayEnum[FilterDisplayEnum["Row"] = 0] = "Row";
144
+ FilterDisplayEnum[FilterDisplayEnum["Menu"] = 1] = "Menu";
145
+ })(FilterDisplayEnum = TableDescriptor.FilterDisplayEnum || (TableDescriptor.FilterDisplayEnum = {}));
146
+ })(TableDescriptor || (TableDescriptor = {}));
147
+ export class ColumnDescriptor {
148
+ constructor(table, property) {
149
+ this._modelType = null;
150
+ this._columnType = ColumnDescriptor.TypeEnum.String;
151
+ this._isSortEnabled = false;
152
+ this._table = table;
153
+ this._property = property;
154
+ }
155
+ get table() {
156
+ return this._table;
157
+ }
158
+ get property() {
159
+ return this._property;
160
+ }
161
+ get modelType() {
162
+ return this._modelType;
163
+ }
164
+ get displayPropertyPath() {
165
+ return this._displayPropertyPath;
166
+ }
167
+ get title() {
168
+ return this._title;
169
+ }
170
+ get isSortEnabled() {
171
+ return this._isSortEnabled;
172
+ }
173
+ get columnType() {
174
+ return this._columnType;
175
+ }
176
+ get filterDescriptor() {
177
+ return this._filterDescriptor;
178
+ }
179
+ get displayFormat() {
180
+ return this._displayFormat;
181
+ }
182
+ asType(type = ColumnDescriptor.TypeEnum.String) {
183
+ this._columnType = type;
184
+ return this;
185
+ }
186
+ asNumber(displayFormat = '1.0-0') {
187
+ this._columnType = ColumnDescriptor.TypeEnum.Number;
188
+ this._displayFormat = displayFormat;
189
+ return this;
190
+ }
191
+ asDate(displayFormat = 'dd.MM.yyyy') {
192
+ this._columnType = ColumnDescriptor.TypeEnum.Date;
193
+ this._displayFormat = displayFormat;
194
+ return this;
195
+ }
196
+ asBoolean() {
197
+ this._columnType = ColumnDescriptor.TypeEnum.Boolean;
198
+ return this;
199
+ }
200
+ withModelType(modelType) {
201
+ this._modelType = modelType;
202
+ return this;
203
+ }
204
+ withTitle(title) {
205
+ this._title = title;
206
+ return this;
207
+ }
208
+ withDisplayPropertyPath(displayPropertyPath) {
209
+ this._displayPropertyPath = displayPropertyPath;
210
+ return this;
211
+ }
212
+ withFilter() {
213
+ this._filterDescriptor = new FilterDescriptor(this._property);
214
+ this._filterDescriptor.asFilterType(this._columnType);
215
+ return this._filterDescriptor;
216
+ }
217
+ withFilterLookup() {
218
+ const filterDescriptor = new FilterLookupDescriptor(this._property, this._modelType);
219
+ this._filterDescriptor = filterDescriptor;
220
+ return filterDescriptor;
221
+ }
222
+ withSort(isEnabled = true) {
223
+ this._isSortEnabled = isEnabled;
224
+ return this;
225
+ }
226
+ copy() {
227
+ const descriptor = new ColumnDescriptor(this._table, this._property);
228
+ descriptor._displayPropertyPath = this._displayPropertyPath;
229
+ descriptor._title = this._title;
230
+ descriptor._isSortEnabled = this._isSortEnabled;
231
+ descriptor._columnType = this._columnType;
232
+ descriptor._filterDescriptor = this._filterDescriptor?.copy();
233
+ return descriptor;
234
+ }
235
+ }
236
+ (function (ColumnDescriptor) {
237
+ let TypeEnum;
238
+ (function (TypeEnum) {
239
+ TypeEnum[TypeEnum["String"] = 0] = "String";
240
+ TypeEnum[TypeEnum["Number"] = 1] = "Number";
241
+ TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
242
+ TypeEnum[TypeEnum["Date"] = 3] = "Date";
243
+ })(TypeEnum = ColumnDescriptor.TypeEnum || (ColumnDescriptor.TypeEnum = {}));
244
+ })(ColumnDescriptor || (ColumnDescriptor = {}));
245
+ export class FilterDescriptor {
246
+ constructor(property) {
247
+ this._filterType = FilterDescriptor.TypeEnum.String;
248
+ this._matchModes = null;
249
+ this._className = '';
250
+ this._property = property;
251
+ }
252
+ get property() {
253
+ return this._property;
254
+ }
255
+ get filterType() {
256
+ return this._filterType;
257
+ }
258
+ get filterProperty() {
259
+ return this._filterProperty;
260
+ }
261
+ get matchModes() {
262
+ return this._matchModes;
263
+ }
264
+ get placeholder() {
265
+ return this._placeholder;
266
+ }
267
+ get className() {
268
+ return this._className;
269
+ }
270
+ asFilterType(filterType) {
271
+ this._filterType = filterType;
272
+ return this;
273
+ }
274
+ /**
275
+ * Sets different filter property name instead of default property. Use this if API requires different property provided to perform correct filter.
276
+ * @param filterProperty
277
+ */
278
+ withFilterProperty(filterProperty) {
279
+ this._filterProperty = filterProperty;
280
+ return this;
281
+ }
282
+ withPlaceholder(placeholder) {
283
+ this._placeholder = placeholder;
284
+ return this;
285
+ }
286
+ withClassName(className) {
287
+ this._className = className;
288
+ return this;
289
+ }
290
+ withMatchModes(matchModes) {
291
+ this._matchModes = matchModes;
292
+ return this;
293
+ }
294
+ copyFieldsTo(descriptor) {
295
+ descriptor._filterType = this._filterType;
296
+ descriptor._filterProperty = this._filterProperty;
297
+ descriptor._placeholder = this._placeholder;
298
+ descriptor._className = this._className;
299
+ }
300
+ copy() {
301
+ const descriptor = new FilterDescriptor(this._property);
302
+ this.copyFieldsTo(descriptor);
303
+ return descriptor;
304
+ }
305
+ }
306
+ (function (FilterDescriptor) {
307
+ let TypeEnum;
308
+ (function (TypeEnum) {
309
+ TypeEnum[TypeEnum["String"] = 0] = "String";
310
+ TypeEnum[TypeEnum["Number"] = 1] = "Number";
311
+ TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
312
+ TypeEnum[TypeEnum["Date"] = 3] = "Date";
313
+ TypeEnum[TypeEnum["Lookup"] = 4] = "Lookup";
314
+ })(TypeEnum = FilterDescriptor.TypeEnum || (FilterDescriptor.TypeEnum = {}));
315
+ let MatchModeEnum;
316
+ (function (MatchModeEnum) {
317
+ MatchModeEnum["StartsWith"] = "startsWith";
318
+ MatchModeEnum["Contains"] = "contains";
319
+ MatchModeEnum["EndsWith"] = "endsWith";
320
+ MatchModeEnum["Equals"] = "equals";
321
+ MatchModeEnum["NotEquals"] = "notEquals";
322
+ MatchModeEnum["In"] = "in";
323
+ MatchModeEnum["LessThan"] = "lt";
324
+ MatchModeEnum["LessThanOrEqualTo"] = "lte";
325
+ MatchModeEnum["GreaterThan"] = "gt";
326
+ MatchModeEnum["GreaterThanOrEqualTo"] = "gte";
327
+ MatchModeEnum["Between"] = "between";
328
+ MatchModeEnum["DateIs"] = "dateIs";
329
+ MatchModeEnum["DateIsNot"] = "dateIsNot";
330
+ MatchModeEnum["DateBefore"] = "dateBefore";
331
+ MatchModeEnum["DateAfter"] = "dateAfter";
332
+ })(MatchModeEnum = FilterDescriptor.MatchModeEnum || (FilterDescriptor.MatchModeEnum = {}));
333
+ })(FilterDescriptor || (FilterDescriptor = {}));
334
+ export class FilterLookupDescriptor extends FilterDescriptor {
335
+ constructor(property, modelType) {
336
+ super(property);
337
+ this._modelType = null;
338
+ this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Dropdown;
339
+ this._multiselect = false;
340
+ this._dropdownClassName = 'mng-filter-lookup-dropdown';
341
+ this._modelType = modelType;
342
+ this._filterType = FilterDescriptor.TypeEnum.Lookup;
343
+ ModelUtil.trySetLookupItemsProperties(this);
344
+ }
345
+ get modelType() {
346
+ return this._modelType;
347
+ }
348
+ get lookupType() {
349
+ return this._lookupType;
350
+ }
351
+ get itemsLabelProperty() {
352
+ return this._itemsLabelProperty;
353
+ }
354
+ get itemsValueProperty() {
355
+ return this._itemsValueProperty;
356
+ }
357
+ get dataKeyProperty() {
358
+ return this._dataKeyProperty;
359
+ }
360
+ get dataProvider() {
361
+ return this._dataProvider;
362
+ }
363
+ get multiselect() {
364
+ return this._multiselect;
365
+ }
366
+ withItemsLabelProperty(itemsLabelProperty) {
367
+ this._itemsLabelProperty = itemsLabelProperty;
368
+ return this;
369
+ }
370
+ withItemsValueProperty(itemsValueProperty) {
371
+ this._itemsValueProperty = itemsValueProperty;
372
+ return this;
373
+ }
374
+ withDataKeyProperty(dataKeyProperty) {
375
+ this._dataKeyProperty = dataKeyProperty;
376
+ return this;
377
+ }
378
+ get dropdownClassName() {
379
+ return this._dropdownClassName;
380
+ }
381
+ withLookup(lookup, serviceType) {
382
+ const dataProvider = new LookupDataProvider(this._modelType);
383
+ if (serviceType) {
384
+ dataProvider.withServiceType(serviceType);
385
+ }
386
+ dataProvider.withLookup(lookup);
387
+ this._dataProvider = dataProvider;
388
+ return this;
389
+ }
390
+ withLookupDataProvider(dataProvider) {
391
+ this._dataProvider = dataProvider;
392
+ return this;
393
+ }
394
+ withMultiselect(multiselect = true) {
395
+ this._multiselect = multiselect;
396
+ return this;
397
+ }
398
+ withDropdownClassName(dropdownClassName) {
399
+ this._dropdownClassName = dropdownClassName;
400
+ return this;
401
+ }
402
+ asAutocomplete() {
403
+ this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Autocomplete;
404
+ return this;
405
+ }
406
+ copyFieldsTo(descriptor) {
407
+ super.copyFieldsTo(descriptor);
408
+ descriptor._dataProvider = this._dataProvider;
409
+ descriptor._lookupType = this._lookupType;
410
+ descriptor._itemsLabelProperty = this._itemsLabelProperty;
411
+ descriptor._itemsValueProperty = this._itemsValueProperty;
412
+ descriptor._dataKeyProperty = this._dataKeyProperty;
413
+ }
414
+ copy() {
415
+ const descriptor = new FilterLookupDescriptor(this._property, this._modelType);
416
+ this.copyFieldsTo(descriptor);
417
+ return descriptor;
418
+ }
419
+ }
420
+ (function (FilterLookupDescriptor) {
421
+ let LookupTypeEnum;
422
+ (function (LookupTypeEnum) {
423
+ LookupTypeEnum[LookupTypeEnum["Dropdown"] = 0] = "Dropdown";
424
+ LookupTypeEnum[LookupTypeEnum["Autocomplete"] = 1] = "Autocomplete";
425
+ })(LookupTypeEnum = FilterLookupDescriptor.LookupTypeEnum || (FilterLookupDescriptor.LookupTypeEnum = {}));
426
+ })(FilterLookupDescriptor || (FilterLookupDescriptor = {}));
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFzQixrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxPQUFPLGVBQWU7SUFleEIsWUFBWSxTQUF1QixFQUFFLFVBQW1CLEVBQUUsYUFBc0I7UUFaeEUsbUJBQWMsR0FBc0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMzRixvQkFBZSxHQUF1QyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQ3BHLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBRy9DLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUVoQyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLDJCQUFzQixHQUFXLEdBQUcsQ0FBQztRQUd6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFD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QyxZQUFZLENBQUM7UUFDdEUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVrQixZQUFZLENBQUMsVUFBcUM7UUFDakUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDOUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsVUFBVSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUMxRCxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hELENBQUM7SUFFZSxJQUFJO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksc0JBQXNCLENBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFFRCxXQUFpQixzQkFBc0I7SUFDbkMsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3RCLDJEQUFRLENBQUE7UUFDUixtRUFBWSxDQUFBO0lBQ2hCLENBQUMsRUFIVyxjQUFjLEdBQWQscUNBQWMsS0FBZCxxQ0FBYyxRQUd6QjtBQUNMLENBQUMsRUFMZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQUt0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGlzcGxheTogVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtID0gVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtLk1lbnU7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU6IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0gPSBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb247XG4gICAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0OiBudW1iZXIgPSA0NTtcbiAgICBwcml2YXRlIF90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlciA9IDMxNTtcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0QXNjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRBc2M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uTnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxudW1iZXIsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzTnVtYmVyKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5Cb29sZWFuKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPGJvb2xlYW4sIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNCb29sZWFuKCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbk9iamVjdDxDVD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8Q1Q+LCBkaXNwbGF5UHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhNb2RlbFR5cGUobW9kZWxUeXBlKTtcbiAgICAgICAgY29sdW1uLndpdGhEaXNwbGF5UHJvcGVydHlQYXRoKGRpc3BsYXlQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJEaXNwbGF5KGZpbHRlckRpc3BsYXlUeXBlOiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGlzcGxheSA9IGZpbHRlckRpc3BsYXlUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb25Nb2RlID0gcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogc3RyaW5nLCBhc2M6IGJvb2xlYW4gPSB0cnVlKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFNvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5LnB1c2gocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydEFzYy5wdXNoKGFzYyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93SGVpZ2h0KHJvd0hlaWdodDogbnVtYmVyKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRnVsbEhlaWdodE9mZnNldCh0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlcik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRhS2V5RnJvbUNvbHVtbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhS2V5UHJvcGVydHkgJiYgdGhpcy5fY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2NvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvcih0aGlzLm1vZGVsLnR5cGUsIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFNvcnRBc2MgPSB0aGlzLl9kZWZhdWx0U29ydEFzYy5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZURlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFBhZ2luYXRpb25Nb2RlRW51bSB7XG4gICAgICAgIFBhZ2luYXRpb24sXG4gICAgICAgIEluZmluaXRlU2Nyb2xsXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gRmlsdGVyRGlzcGxheUVudW0ge1xuICAgICAgICBSb3csXG4gICAgICAgIE1lbnVcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZTogVGFibGVEZXNjcmlwdG9yPFRUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIHByaXZhdGUgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbHVtblR5cGU6IENvbHVtbkRlc2NyaXB0b3IuVHlwZUVudW0gPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5UHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2lzU29ydEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9maWx0ZXJEZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheVByb3BlcnR5UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc051bWJlcihkaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnMS4wLTAnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdDogc3RyaW5nID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNCb29sZWFuKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGVsVHlwZShtb2RlbFR5cGU6IENsYXNzVHlwZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc3BsYXlQcm9wZXJ0eVBhdGgoZGlzcGxheVByb3BlcnR5UGF0aDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSBkaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcigpOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueT4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZSh0aGlzLl9jb2x1bW5UeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXAoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxhbnk+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KGlzRW5hYmxlZDogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTb3J0RW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KHRoaXMuX3RhYmxlLCB0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSB0aGlzLl9kaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9pc1NvcnRFbmFibGVkID0gdGhpcy5faXNTb3J0RW5hYmxlZDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uVHlwZSA9IHRoaXMuX2NvbHVtblR5cGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb2x1bW5EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN0cmluZyxcbiAgICAgICAgTnVtYmVyLFxuICAgICAgICBCb29sZWFuLFxuICAgICAgICBEYXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJUeXBlID0gRmlsdGVyRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfbWF0Y2hNb2Rlczogc3RyaW5nW118bnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlclByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyUHJvcGVydHk7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBnZXQgbWF0Y2hNb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hdGNoTW9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0ZpbHRlclR5cGUoZmlsdGVyVHlwZTogQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bSkge1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gZmlsdGVyVHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBkaWZmZXJlbnQgZmlsdGVyIHByb3BlcnR5IG5hbWUgaW5zdGVhZCBvZiBkZWZhdWx0IHByb3BlcnR5LiBVc2UgdGhpcyBpZiBBUEkgcmVxdWlyZXMgZGlmZmVyZW50IHByb3BlcnR5IHByb3ZpZGVkIHRvIHBlcmZvcm0gY29ycmVjdCBmaWx0ZXIuXG4gICAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWx0ZXJQcm9wZXJ0eShmaWx0ZXJQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3BlcnR5ID0gZmlsdGVyUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgd2l0aE1hdGNoTW9kZXMobWF0Y2hNb2RlczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvci5NYXRjaE1vZGVFbnVtPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tYXRjaE1vZGVzID0gbWF0Y2hNb2RlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlclR5cGUgPSB0aGlzLl9maWx0ZXJUeXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2ZpbHRlclByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxUPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsdGVyRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBTdHJpbmcsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgQm9vbGVhbixcbiAgICAgICAgRGF0ZSxcbiAgICAgICAgTG9va3VwXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gTWF0Y2hNb2RlRW51bSB7XG4gICAgICAgIFN0YXJ0c1dpdGggPSAnc3RhcnRzV2l0aCcsXG4gICAgICAgIENvbnRhaW5zID0gJ2NvbnRhaW5zJyxcbiAgICAgICAgRW5kc1dpdGggPSAnZW5kc1dpdGgnLFxuICAgICAgICBFcXVhbHMgPSAnZXF1YWxzJyxcbiAgICAgICAgTm90RXF1YWxzID0gJ25vdEVxdWFscycsXG4gICAgICAgIEluID0gJ2luJyxcbiAgICAgICAgTGVzc1RoYW4gPSAnbHQnLFxuICAgICAgICBMZXNzVGhhbk9yRXF1YWxUbyA9ICdsdGUnLFxuICAgICAgICBHcmVhdGVyVGhhbiA9ICdndCcsXG4gICAgICAgIEdyZWF0ZXJUaGFuT3JFcXVhbFRvID0gJ2d0ZScsXG4gICAgICAgIEJldHdlZW4gPSAnYmV0d2VlbicsXG4gICAgICAgIERhdGVJcyA9ICdkYXRlSXMnLFxuICAgICAgICBEYXRlSXNOb3QgPSAnZGF0ZUlzTm90JyxcbiAgICAgICAgRGF0ZUJlZm9yZSA9ICdkYXRlQmVmb3JlJyxcbiAgICAgICAgRGF0ZUFmdGVyID0gJ2RhdGVBZnRlcidcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgRmlsdGVyRGVzY3JpcHRvcjxUPiBpbXBsZW1lbnRzIElMb29rdXBEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2xvb2t1cFR5cGU/OiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5Ecm9wZG93bjtcblxuICAgIHByaXZhdGUgX2RhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICBwcml2YXRlIF9pdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaXRlbXNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT8gOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9tdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyA9ICdtbmctZmlsdGVyLWxvb2t1cC1kcm9wZG93bic7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPnxudWxsKSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gRmlsdGVyRGVzY3JpcHRvci5UeXBlRW51bS5Mb29rdXA7XG4gICAgICAgIE1vZGVsVXRpbC50cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXModGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG11bHRpc2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbXVsdGlzZWxlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc0xhYmVsUHJvcGVydHkoaXRlbXNMYWJlbFByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5ID0gaXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eShpdGVtc1ZhbHVlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSBpdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KGRhdGFLZXlQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IGRhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGxvb2t1cDogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUHJvdmlkZXIud2l0aExvb2t1cChsb29rdXApO1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNdWx0aXNlbGVjdChtdWx0aXNlbGVjdCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlzZWxlY3QgPSBtdWx0aXNlbGVjdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEcm9wZG93bkNsYXNzTmFtZShkcm9wZG93bkNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gZHJvcGRvd25DbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0F1dG9jb21wbGV0ZSgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVHlwZSA9IEZpbHRlckxvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY29weUZpZWxkc1RvKGRlc2NyaXB0b3I6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRhUHJvdmlkZXIgPSB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX2xvb2t1cFR5cGUgPSB0aGlzLl9sb29rdXBUeXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9pdGVtc0xhYmVsUHJvcGVydHkgPSB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4odGhpcy5fcHJvcGVydHksIHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsdGVyTG9va3VwRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gTG9va3VwVHlwZUVudW0ge1xuICAgICAgICBEcm9wZG93bixcbiAgICAgICAgQXV0b2NvbXBsZXRlXG4gICAgfVxufVxuIl19