@mediusinc/mng-commons 1.3.0-1c14fa2b → 2.0.0-rc.0-08f92864

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 (230) hide show
  1. package/assets/i18n/en.json +9 -0
  2. package/assets/i18n/sl.json +9 -0
  3. package/esm2020/lib/api/utils/medius-rest.util.mjs +1 -1
  4. package/esm2020/lib/components/action/action.component.mjs +76 -20
  5. package/esm2020/lib/components/action/editor/action-editor.component.mjs +12 -12
  6. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +6 -6
  7. package/esm2020/lib/components/action/models/action-component.model.mjs +1 -1
  8. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  9. package/esm2020/lib/components/action/models/action-execution.model.mjs +1 -1
  10. package/esm2020/lib/components/action/route/action-route.component.mjs +6 -5
  11. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +11 -10
  12. package/esm2020/lib/components/form/date-range/date-range.component.mjs +9 -8
  13. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +13 -11
  14. package/esm2020/lib/components/form/editor/form-editor.component.mjs +14 -11
  15. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +13 -9
  16. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +8 -7
  17. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +8 -7
  18. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +11 -9
  19. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +50 -20
  20. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +5 -5
  21. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +27 -17
  22. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +32 -12
  23. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +21 -12
  24. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +13 -11
  25. package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
  26. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +10 -9
  27. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +11 -10
  28. package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
  29. package/esm2020/lib/components/layout/breadcrumb.component.mjs +7 -6
  30. package/esm2020/lib/components/layout/footer.component.mjs +6 -5
  31. package/esm2020/lib/components/layout/main-layout.component.mjs +8 -8
  32. package/esm2020/lib/components/layout/menu-item.component.mjs +43 -23
  33. package/esm2020/lib/components/layout/menu.component.mjs +24 -13
  34. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +3 -3
  35. package/esm2020/lib/components/layout/topbar.component.mjs +14 -12
  36. package/esm2020/lib/components/layout/version.component.mjs +6 -6
  37. package/esm2020/lib/components/tableview/models/table.event.mjs +1 -1
  38. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +38 -10
  39. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +5 -6
  40. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +14 -13
  41. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +29 -12
  42. package/esm2020/lib/components/tableview/table/table.component.mjs +33 -17
  43. package/esm2020/lib/components/tableview/tableview.component.mjs +13 -11
  44. package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +60 -0
  45. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +2 -2
  46. package/esm2020/lib/descriptors/action/action.descriptor.mjs +579 -0
  47. package/esm2020/lib/descriptors/action/index.mjs +4 -0
  48. package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +291 -0
  49. package/esm2020/lib/descriptors/editor/field-validation.descriptor.mjs +25 -0
  50. package/esm2020/lib/descriptors/editor/field.descriptor.mjs +990 -0
  51. package/esm2020/lib/descriptors/editor/index.mjs +4 -0
  52. package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +370 -0
  53. package/esm2020/lib/descriptors/filter/index.mjs +2 -0
  54. package/esm2020/lib/descriptors/index.mjs +1 -11
  55. package/esm2020/lib/descriptors/table/column.descriptor.mjs +406 -0
  56. package/esm2020/lib/descriptors/table/index.mjs +3 -0
  57. package/esm2020/lib/descriptors/table/table.descriptor.mjs +497 -0
  58. package/esm2020/lib/descriptors/tableview/index.mjs +2 -0
  59. package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +346 -0
  60. package/esm2020/lib/directives/component.directive.mjs +5 -4
  61. package/esm2020/lib/directives/template.directive.mjs +5 -4
  62. package/esm2020/lib/mng-commons.module.mjs +108 -138
  63. package/esm2020/lib/models/column-value.model.mjs +1 -1
  64. package/esm2020/lib/models/config.model.mjs +1 -1
  65. package/esm2020/lib/models/menu.model.mjs +1 -1
  66. package/esm2020/lib/models/view-container.model.mjs +1 -1
  67. package/esm2020/lib/pipes/boolean.pipe.mjs +5 -4
  68. package/esm2020/lib/pipes/class-map.pipe.mjs +5 -4
  69. package/esm2020/lib/pipes/enum.pipe.mjs +5 -4
  70. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +5 -4
  71. package/esm2020/lib/pipes/enumerate.pipe.mjs +5 -4
  72. package/esm2020/lib/pipes/getter.pipe.mjs +5 -4
  73. package/esm2020/lib/pipes/i18n-property.pipe.mjs +5 -4
  74. package/esm2020/lib/pipes/json-path.pipe.mjs +5 -4
  75. package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +5 -4
  76. package/esm2020/lib/pipes/parametrize.pipe.mjs +5 -4
  77. package/esm2020/lib/pipes/template.pipe.mjs +5 -4
  78. package/esm2020/lib/provide-commons.mjs +73 -0
  79. package/esm2020/lib/router/index.mjs +2 -1
  80. package/esm2020/lib/router/models/router.model.mjs +1 -1
  81. package/esm2020/lib/router/route-builder.mjs +31 -144
  82. package/esm2020/lib/router/routes-builder.mjs +67 -0
  83. package/esm2020/lib/router/tableview-route-builder.mjs +2 -2
  84. package/esm2020/lib/security/authorization.guard.mjs +8 -5
  85. package/esm2020/lib/security/authorization.service.mjs +8 -5
  86. package/esm2020/lib/services/action-executor.service.mjs +13 -7
  87. package/esm2020/lib/services/commons.service.mjs +15 -10
  88. package/esm2020/lib/services/configuration.service.mjs +27 -20
  89. package/esm2020/lib/services/internal/commons-init.service.mjs +13 -7
  90. package/esm2020/lib/services/navigation.service.mjs +8 -5
  91. package/esm2020/lib/services/providers/config-service.provider.mjs +5 -4
  92. package/esm2020/lib/services/router.service.mjs +97 -0
  93. package/esm2020/lib/services/version.service.mjs +8 -5
  94. package/esm2020/lib/services/view-container.component.service.mjs +4 -4
  95. package/esm2020/lib/styles/styles.util.mjs +1 -1
  96. package/esm2020/lib/utils/action-data-provider.util.mjs +1 -1
  97. package/esm2020/lib/utils/editor-formly.util.mjs +2 -2
  98. package/esm2020/lib/utils/export.util.mjs +20 -0
  99. package/esm2020/lib/utils/i18n.util.mjs +1 -1
  100. package/esm2020/lib/utils/index.mjs +2 -1
  101. package/esm2020/lib/utils/notification.util.mjs +1 -1
  102. package/esm2020/lib/utils/route.util.mjs +13 -1
  103. package/esm2020/lib/utils/tableview.util.mjs +1 -1
  104. package/esm2020/public-api.mjs +7 -1
  105. package/fesm2015/mediusinc-mng-commons.mjs +6767 -6381
  106. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  107. package/fesm2020/mediusinc-mng-commons.mjs +6707 -6325
  108. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  109. package/lib/api/utils/medius-rest.util.d.ts +1 -1
  110. package/lib/components/action/action.component.d.ts +10 -5
  111. package/lib/components/action/editor/action-editor.component.d.ts +2 -2
  112. package/lib/components/action/localization/data-language-dropdown.component.d.ts +2 -2
  113. package/lib/components/action/models/action-component.model.d.ts +1 -1
  114. package/lib/components/action/models/action-confirmation-service.model.d.ts +1 -1
  115. package/lib/components/action/models/action-execution.model.d.ts +2 -2
  116. package/lib/components/action/route/action-route.component.d.ts +2 -2
  117. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -1
  118. package/lib/components/form/date-range/date-range.component.d.ts +1 -1
  119. package/lib/components/form/dropdown/dropdown.component.d.ts +1 -1
  120. package/lib/components/form/editor/form-editor.component.d.ts +2 -2
  121. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +2 -2
  122. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +2 -2
  123. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +2 -2
  124. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +2 -2
  125. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -2
  126. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +1 -1
  127. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +2 -2
  128. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -2
  129. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +2 -2
  130. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +1 -1
  131. package/lib/components/form/formly/models/formly-field.model.d.ts +2 -2
  132. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +1 -1
  133. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -2
  134. package/lib/components/form/models/field-action-context.model.d.ts +1 -1
  135. package/lib/components/layout/breadcrumb.component.d.ts +1 -1
  136. package/lib/components/layout/footer.component.d.ts +1 -1
  137. package/lib/components/layout/main-layout.component.d.ts +1 -1
  138. package/lib/components/layout/menu-item.component.d.ts +6 -2
  139. package/lib/components/layout/menu.component.d.ts +9 -3
  140. package/lib/components/layout/topbar.component.d.ts +1 -1
  141. package/lib/components/layout/version.component.d.ts +1 -1
  142. package/lib/components/tableview/models/table.event.d.ts +1 -1
  143. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +9 -2
  144. package/lib/components/tableview/route/tableview-route.component.d.ts +3 -2
  145. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +2 -2
  146. package/lib/components/tableview/table/column-value/column-value.component.d.ts +2 -2
  147. package/lib/components/tableview/table/table.component.d.ts +4 -2
  148. package/lib/components/tableview/tableview.component.d.ts +3 -2
  149. package/lib/descriptors/{action-button.descriptor.d.ts → action/action-button.descriptor.d.ts} +1 -1
  150. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +2 -2
  151. package/lib/descriptors/{action.descriptor.d.ts → action/action.descriptor.d.ts} +16 -8
  152. package/lib/descriptors/action/index.d.ts +3 -0
  153. package/lib/descriptors/{editor.descriptor.d.ts → editor/editor.descriptor.d.ts} +9 -6
  154. package/lib/descriptors/{field-validation.descriptor.d.ts → editor/field-validation.descriptor.d.ts} +1 -1
  155. package/lib/descriptors/{field.descriptor.d.ts → editor/field.descriptor.d.ts} +14 -10
  156. package/lib/descriptors/editor/index.d.ts +3 -0
  157. package/lib/descriptors/{filter.descriptor.d.ts → filter/filter.descriptor.d.ts} +11 -9
  158. package/lib/descriptors/filter/index.d.ts +1 -0
  159. package/lib/descriptors/index.d.ts +0 -10
  160. package/lib/descriptors/{column.descriptor.d.ts → table/column.descriptor.d.ts} +4 -4
  161. package/lib/descriptors/table/index.d.ts +2 -0
  162. package/lib/descriptors/{table.descriptor.d.ts → table/table.descriptor.d.ts} +12 -7
  163. package/lib/descriptors/tableview/index.d.ts +1 -0
  164. package/lib/descriptors/{tableview.descriptor.d.ts → tableview/tableview.descriptor.d.ts} +9 -7
  165. package/lib/directives/component.directive.d.ts +1 -1
  166. package/lib/directives/template.directive.d.ts +1 -1
  167. package/lib/mng-commons.module.d.ts +90 -88
  168. package/lib/models/column-value.model.d.ts +1 -1
  169. package/lib/models/config.model.d.ts +1 -0
  170. package/lib/models/menu.model.d.ts +1 -1
  171. package/lib/models/version.model.d.ts +1 -1
  172. package/lib/models/view-container.model.d.ts +1 -1
  173. package/lib/pipes/boolean.pipe.d.ts +1 -1
  174. package/lib/pipes/class-map.pipe.d.ts +1 -1
  175. package/lib/pipes/enum.pipe.d.ts +1 -1
  176. package/lib/pipes/enumerate-async.pipe.d.ts +1 -1
  177. package/lib/pipes/enumerate.pipe.d.ts +1 -1
  178. package/lib/pipes/getter.pipe.d.ts +1 -1
  179. package/lib/pipes/i18n-property.pipe.d.ts +1 -1
  180. package/lib/pipes/json-path.pipe.d.ts +1 -1
  181. package/lib/pipes/locale-default-row-class.pipe.d.ts +2 -2
  182. package/lib/pipes/parametrize.pipe.d.ts +1 -1
  183. package/lib/pipes/template.pipe.d.ts +1 -1
  184. package/lib/provide-commons.d.ts +3 -0
  185. package/lib/router/index.d.ts +1 -0
  186. package/lib/router/models/router.model.d.ts +5 -2
  187. package/lib/router/route-builder.d.ts +12 -48
  188. package/lib/router/routes-builder.d.ts +29 -0
  189. package/lib/router/tableview-route-builder.d.ts +2 -1
  190. package/lib/services/action-executor.service.d.ts +2 -1
  191. package/lib/services/commons.service.d.ts +3 -3
  192. package/lib/services/configuration.service.d.ts +4 -1
  193. package/lib/services/internal/commons-init.service.d.ts +4 -2
  194. package/lib/services/router.service.d.ts +22 -0
  195. package/lib/services/view-container.component.service.d.ts +1 -1
  196. package/lib/styles/styles.util.d.ts +2 -1
  197. package/lib/types/type.model.d.ts +8 -8
  198. package/lib/utils/editor-formly.util.d.ts +1 -1
  199. package/lib/utils/export.util.d.ts +5 -0
  200. package/lib/utils/i18n.util.d.ts +2 -1
  201. package/lib/utils/index.d.ts +1 -0
  202. package/lib/utils/notification.util.d.ts +2 -1
  203. package/lib/utils/route.util.d.ts +55 -0
  204. package/lib/utils/tableview.util.d.ts +1 -1
  205. package/package.json +6 -6
  206. package/public-api.d.ts +6 -0
  207. package/scss/common/layout/_breadcrumb.scss +12 -2
  208. package/scss/common/layout/_exception.scss +1 -1
  209. package/scss/common/layout/_inlinemenu.scss +13 -0
  210. package/scss/common/layout/_login.scss +1 -0
  211. package/scss/common/layout/_rightmenu.scss +5 -0
  212. package/scss/common/layout/menu/_menu_common.scss +1 -1
  213. package/scss/common/theme/designer/_components.scss +4 -4
  214. package/scss/common/theme/designer/_mixins.scss +29 -0
  215. package/scss/common/theme/extensions/_datatable.scss +2 -2
  216. package/scss/common/variables/layout/_layout_dark.scss +0 -1
  217. package/scss/common/variables/layout/_layout_light.scss +0 -1
  218. package/scss/common/variables/theme/_theme_dark.scss +72 -46
  219. package/scss/common/variables/theme/_theme_light.scss +70 -33
  220. package/scss/mng-overrides/_layout_menu.scss +4 -0
  221. package/version-info.json +6 -6
  222. package/esm2020/lib/descriptors/action-button.descriptor.mjs +0 -60
  223. package/esm2020/lib/descriptors/action.descriptor.mjs +0 -560
  224. package/esm2020/lib/descriptors/column.descriptor.mjs +0 -405
  225. package/esm2020/lib/descriptors/editor.descriptor.mjs +0 -290
  226. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +0 -25
  227. package/esm2020/lib/descriptors/field.descriptor.mjs +0 -987
  228. package/esm2020/lib/descriptors/filter.descriptor.mjs +0 -368
  229. package/esm2020/lib/descriptors/table.descriptor.mjs +0 -482
  230. package/esm2020/lib/descriptors/tableview.descriptor.mjs +0 -344
@@ -1,405 +0,0 @@
1
- import { ModelUtil, TypeUtil } from '../utils';
2
- import { DateUtil } from '../utils/date.util';
3
- import { TableviewUtil } from '../utils/tableview.util';
4
- import { FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor } from './filter.descriptor';
5
- import { ColumnDisplayTypeEnum, ColumnTypeEnum, FilterTypeEnum } from './types';
6
- export class ColumnDescriptor {
7
- constructor(table, property) {
8
- this._columnType = ColumnTypeEnum.String;
9
- this._columnDisplayType = ColumnDisplayTypeEnum.String;
10
- this._isSortEnabled = false;
11
- // styling
12
- this._headerClassName = '';
13
- this._className = '';
14
- this._width = null;
15
- this._minWidth = null;
16
- this._maxWidth = null;
17
- this._enumNameAsValue = false;
18
- // boolean specifics
19
- this._booleanAsIcon = false;
20
- // helpers
21
- this._hasCopyToClipboard = false;
22
- // localization
23
- this._isLocalized = false;
24
- this._table = table;
25
- this._property = property;
26
- }
27
- get columnType() {
28
- return this._columnType;
29
- }
30
- get columnDisplayType() {
31
- return this._columnDisplayType;
32
- }
33
- get title() {
34
- return this._title;
35
- }
36
- get jsonPath() {
37
- return this._jsonPath;
38
- }
39
- get isSortEnabled() {
40
- return this._isSortEnabled;
41
- }
42
- get filterDescriptor() {
43
- return this._filterDescriptor;
44
- }
45
- get displayFormat() {
46
- return this._displayFormat;
47
- }
48
- get table() {
49
- return this._table;
50
- }
51
- get property() {
52
- return this._property;
53
- }
54
- get headerClassName() {
55
- return this._headerClassName;
56
- }
57
- get className() {
58
- return this._className;
59
- }
60
- get width() {
61
- return this._width;
62
- }
63
- get minWidth() {
64
- return this._minWidth;
65
- }
66
- get maxWidth() {
67
- return this._maxWidth;
68
- }
69
- get enumType() {
70
- return this._enumType;
71
- }
72
- get enumTitlePath() {
73
- return this._enumTitlePath;
74
- }
75
- get enumNameAsValue() {
76
- return this._enumNameAsValue;
77
- }
78
- get booleanAsIcon() {
79
- return this._booleanAsIcon;
80
- }
81
- get booleanYes() {
82
- return this._booleanYes;
83
- }
84
- get booleanNo() {
85
- return this._booleanNo;
86
- }
87
- get objectModelType() {
88
- return this._objectModelType;
89
- }
90
- get objectTitleProperty() {
91
- return this._objectTitleProperty;
92
- }
93
- get customComponentType() {
94
- return this._customComponentType;
95
- }
96
- get locale() {
97
- return this._locale;
98
- }
99
- get currencyCode() {
100
- return this._currencyCode;
101
- }
102
- get currencyDisplay() {
103
- return this._currencyDisplay;
104
- }
105
- get currencyFromProperty() {
106
- return this._currencyFromProperty;
107
- }
108
- get hasCopyToClipboard() {
109
- return this._hasCopyToClipboard;
110
- }
111
- get template() {
112
- return this._template;
113
- }
114
- get getter() {
115
- return this._getter;
116
- }
117
- get isLocalized() {
118
- return this._isLocalized;
119
- }
120
- get localizationExistsProperty() {
121
- return this._localizationExistsProperty;
122
- }
123
- /**
124
- * converts column to given type with additional arguments
125
- * @param type column type enum
126
- * @param args any additional arguments for column (optional)
127
- */
128
- asType(type, displayType, ...args) {
129
- switch (type) {
130
- case ColumnTypeEnum.Number:
131
- return displayType === ColumnDisplayTypeEnum.Currency ? this.asCurrency(...args) : this.asNumber(...args);
132
- case ColumnTypeEnum.Boolean:
133
- return this.asBoolean(...args);
134
- case ColumnTypeEnum.Date:
135
- return this.asDate(...args);
136
- case ColumnTypeEnum.Enum:
137
- return this.asEnum(args[0], args[1], args[2]);
138
- case ColumnTypeEnum.Custom:
139
- return this.asCustomComponent(args[0]);
140
- case ColumnTypeEnum.String:
141
- default:
142
- return this;
143
- }
144
- }
145
- asNumber(displayFormat = '1.0-0', locale) {
146
- this._columnType = ColumnTypeEnum.Number;
147
- this._columnDisplayType = ColumnDisplayTypeEnum.Number;
148
- this._displayFormat = displayFormat;
149
- this._locale = locale ?? this._locale;
150
- return this;
151
- }
152
- asCurrency(currencyCode, currencyFromProperty, currencyDisplay, displayFormat = '1.2-2', locale) {
153
- this._columnType = ColumnTypeEnum.Number;
154
- this._columnDisplayType = ColumnDisplayTypeEnum.Currency;
155
- this._currencyCode = currencyCode ?? this._currencyCode;
156
- this._currencyFromProperty = currencyFromProperty ?? this._currencyFromProperty;
157
- this._currencyDisplay = currencyDisplay ?? this._currencyDisplay;
158
- this._displayFormat = displayFormat ?? displayFormat;
159
- this._locale = locale ?? this._locale;
160
- return this;
161
- }
162
- asDate(displayFormat = 'dd.MM.yyyy') {
163
- this._columnType = ColumnTypeEnum.Date;
164
- this._columnDisplayType = ColumnDisplayTypeEnum.Date;
165
- this._displayFormat = displayFormat;
166
- return this;
167
- }
168
- asBoolean(yes, no, asIcon = false) {
169
- this._columnType = ColumnTypeEnum.Boolean;
170
- this._columnDisplayType = ColumnDisplayTypeEnum.Boolean;
171
- this._booleanAsIcon = asIcon;
172
- this._booleanYes = yes;
173
- this._booleanNo = no;
174
- return this;
175
- }
176
- asEnum(enumType, nameAsValue = false, titlePath) {
177
- this._columnType = ColumnTypeEnum.Enum;
178
- this._columnDisplayType = ColumnDisplayTypeEnum.Enum;
179
- this._enumType = enumType;
180
- this._enumNameAsValue = nameAsValue;
181
- if (typeof titlePath === 'undefined') {
182
- titlePath = TypeUtil.findEnumName(enumType);
183
- }
184
- this._enumTitlePath = titlePath;
185
- return this;
186
- }
187
- asCustomComponent(customComponentType) {
188
- this._columnType = ColumnTypeEnum.Custom;
189
- this._columnDisplayType = ColumnDisplayTypeEnum.Component;
190
- this._customComponentType = customComponentType;
191
- return this;
192
- }
193
- asHtml() {
194
- this._columnDisplayType = ColumnDisplayTypeEnum.Html;
195
- return this;
196
- }
197
- withClassName(className, headerClassName) {
198
- this._className = className ?? '';
199
- this._headerClassName = headerClassName ?? '';
200
- return this;
201
- }
202
- withWidth(width, minWidth, maxWidth) {
203
- this._width = width ?? null;
204
- this._minWidth = minWidth ?? null;
205
- this._maxWidth = maxWidth ?? null;
206
- return this;
207
- }
208
- withObjectProperty(modelType, titleProperty) {
209
- this._objectModelType = modelType;
210
- if (!titleProperty) {
211
- this._objectTitleProperty = ModelUtil.findTitleAttribute(modelType) ?? undefined;
212
- }
213
- else {
214
- this._objectTitleProperty = titleProperty;
215
- }
216
- return this;
217
- }
218
- withTitle(title) {
219
- this._title = title;
220
- return this;
221
- }
222
- withJsonPath(path) {
223
- this._jsonPath = path;
224
- return this;
225
- }
226
- withFilter(forceSimple = false) {
227
- this._filterDescriptor = new FilterDescriptor(this._property);
228
- let filterType;
229
- if (!forceSimple && this._objectModelType) {
230
- return this.withFilterLookup();
231
- }
232
- switch (this._columnType) {
233
- case ColumnTypeEnum.Number:
234
- filterType = FilterTypeEnum.Number;
235
- break;
236
- case ColumnTypeEnum.Boolean:
237
- filterType = FilterTypeEnum.Boolean;
238
- break;
239
- case ColumnTypeEnum.Date:
240
- filterType = FilterTypeEnum.Date;
241
- break;
242
- case ColumnTypeEnum.Enum:
243
- if (!forceSimple) {
244
- return this.withFilterLookupEnum();
245
- }
246
- else {
247
- filterType = FilterTypeEnum.String;
248
- break;
249
- }
250
- case ColumnTypeEnum.String:
251
- case ColumnTypeEnum.Custom:
252
- default:
253
- filterType = FilterTypeEnum.String;
254
- break;
255
- }
256
- this._filterDescriptor.asFilterType(filterType);
257
- if (filterType === FilterTypeEnum.Number) {
258
- const displayFormatFractions = this._displayFormat?.split('.')?.[1]?.split('-');
259
- if (displayFormatFractions && displayFormatFractions.length > 2) {
260
- this._filterDescriptor.withNumberFractions(parseInt(displayFormatFractions[0]), parseInt(displayFormatFractions[1]));
261
- }
262
- }
263
- else if (filterType === FilterTypeEnum.Date) {
264
- const displayFormat = this._displayFormat;
265
- if (displayFormat) {
266
- const filterDisplayFormat = DateUtil.fromPrimeToAngularDateFormat(displayFormat);
267
- this._filterDescriptor.withDateFormat(filterDisplayFormat);
268
- }
269
- }
270
- return this._filterDescriptor;
271
- }
272
- withFilterLookup() {
273
- const filterDescriptor = new FilterLookupDescriptor(this._property, this._objectModelType ?? null);
274
- this._filterDescriptor = filterDescriptor;
275
- return filterDescriptor;
276
- }
277
- withFilterLookupEnum(options) {
278
- if (this._columnType !== ColumnTypeEnum.Enum || !this._enumType) {
279
- throw new Error(`Column ${this._property} is not of type enum or enum type is undefined.`);
280
- }
281
- const filterDescriptor = new FilterLookupEnumDescriptor(this._property, this._enumType, options, this._enumNameAsValue, this._enumTitlePath);
282
- this._filterDescriptor = filterDescriptor;
283
- return filterDescriptor;
284
- }
285
- withSort(isEnabled = true) {
286
- this._isSortEnabled = isEnabled;
287
- return this;
288
- }
289
- withDefaultSort(asc = true) {
290
- this._table.withDefaultSort(this._property, asc);
291
- return this;
292
- }
293
- withCopyToClipboard(hasCopyToCliboard = true) {
294
- this._hasCopyToClipboard = hasCopyToCliboard;
295
- return this;
296
- }
297
- withTemplate(template) {
298
- this._template = template;
299
- return this;
300
- }
301
- withGetter(getter) {
302
- this._getter = getter;
303
- return this;
304
- }
305
- localized(existsProperty) {
306
- if (existsProperty) {
307
- this._localizationExistsProperty = existsProperty;
308
- }
309
- else {
310
- this._localizationExistsProperty = `${this._property}Localized`;
311
- }
312
- return this;
313
- }
314
- copy() {
315
- const descriptor = new ColumnDescriptor(this._table, this._property);
316
- this.copyFieldsTo(descriptor);
317
- return descriptor;
318
- }
319
- copyFieldsTo(obj) {
320
- obj._jsonPath = this._jsonPath;
321
- obj._title = this._title;
322
- obj._isSortEnabled = this._isSortEnabled;
323
- obj._columnType = this._columnType;
324
- obj._columnDisplayType = this._columnDisplayType;
325
- obj._filterDescriptor = this._filterDescriptor?.copy();
326
- obj._enumType = this._enumType;
327
- obj._enumTitlePath = this._enumTitlePath;
328
- obj._enumNameAsValue = this._enumNameAsValue;
329
- obj._booleanAsIcon = this._booleanAsIcon;
330
- obj._booleanYes = this._booleanYes;
331
- obj._booleanNo = this._booleanNo;
332
- obj._objectModelType = this._objectModelType;
333
- obj._objectTitleProperty = this._objectTitleProperty;
334
- obj._locale = this._locale;
335
- obj._currencyCode = this._currencyCode;
336
- obj._currencyDisplay = this._currencyDisplay;
337
- obj._currencyFromProperty = this._currencyFromProperty;
338
- obj._displayFormat = this._displayFormat;
339
- obj._headerClassName = this._headerClassName;
340
- obj._className = this._className;
341
- obj._width = this._width;
342
- obj._minWidth = this._minWidth;
343
- obj._maxWidth = this._maxWidth;
344
- obj._customComponentType = this._customComponentType;
345
- obj._hasCopyToClipboard = this._hasCopyToClipboard;
346
- obj._template = this._template;
347
- obj._getter = this._getter;
348
- obj._isLocalized = this._isLocalized;
349
- obj._localizationExistsProperty = this._localizationExistsProperty;
350
- }
351
- }
352
- export class ColumnDynamicDescriptor extends ColumnDescriptor {
353
- // private _filterStatus;
354
- constructor(table, property) {
355
- super(table, property);
356
- this._visibility = true;
357
- this._table = table;
358
- }
359
- get visibility() {
360
- return this._visibility;
361
- }
362
- /**
363
- * sets column's title and returns this column
364
- * @param title title to be set
365
- * @param override should column title if all ready set?
366
- */
367
- withTitle(title, override = false) {
368
- if (this._title == null || override) {
369
- this._title = title;
370
- }
371
- return this;
372
- }
373
- /**
374
- * defines automatic type and returns this column
375
- * @param value
376
- */
377
- withAutomaticType(value) {
378
- TableviewUtil.stringColumnConverter(this, value);
379
- return this;
380
- }
381
- /**
382
- * sets visibility state for column and returns this column
383
- * @param visibility
384
- */
385
- withVisibility(visibility) {
386
- this._visibility = visibility;
387
- return this;
388
- }
389
- /**
390
- * creates deep copy of column dynamic descriptor
391
- */
392
- copy() {
393
- const descriptor = new ColumnDynamicDescriptor(this._table, this._property);
394
- this.copyFieldsTo(descriptor);
395
- descriptor._title = this._title;
396
- descriptor._visibility = this._visibility;
397
- return descriptor;
398
- }
399
- toColumnDescriptor(tableDescriptor) {
400
- const descriptor = new ColumnDescriptor(tableDescriptor, this._property);
401
- this.copyFieldsTo(descriptor);
402
- return descriptor;
403
- }
404
- }
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLDBCQUEwQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekcsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUUsTUFBTSxPQUFPLGdCQUFnQjtJQWtEekIsWUFBWSxLQUEwQixFQUFFLFFBQWdCO1FBL0NoRCxnQkFBVyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BELHVCQUFrQixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFHekUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPL0IsVUFBVTtRQUNGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBS2hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVqQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQWdCL0IsVUFBVTtRQUNGLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQyxlQUFlO1FBQ1AsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFJekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7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UUFBUSxHQUFHLEtBQUs7UUFDckQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsS0FBYTtRQUNsQyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsVUFBbUI7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ2EsSUFBSTtRQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRU0sa0JBQWtCLENBQUMsZUFBcUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7TW9kZWxVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS51dGlsJztcbmltcG9ydCB7VGFibGV2aWV3VXRpbH0gZnJvbSAnLi4vdXRpbHMvdGFibGV2aWV3LnV0aWwnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcn0gZnJvbSAnLi9maWx0ZXIuZGVzY3JpcHRvcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfdGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2NvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtID0gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgIHByaXZhdGUgX2NvbHVtbkRpc3BsYXlUeXBlOiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uU3RyaW5nO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfanNvblBhdGg/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaXNTb3J0RW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2ZpbHRlckRlc2NyaXB0b3I/OiBGaWx0ZXJEZXNjcmlwdG9yPHVua25vd24+O1xuICAgIHByaXZhdGUgX2Rpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RlbXBsYXRlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2dldHRlcj86IChpdGVtOiBUVCwgdmFsdWU/OiBUIHwgbnVsbCkgPT4gdW5rbm93bjtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21heFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIGVudW0gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfZW51bVR5cGU/OiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIF9lbnVtVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbnVtTmFtZUFzVmFsdWUgPSBmYWxzZTtcblxuICAgIC8vIGJvb2xlYW4gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfYm9vbGVhbkFzSWNvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Jvb2xlYW5ZZXM/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYm9vbGVhbk5vPzogc3RyaW5nO1xuXG4gICAgLy8gbW9kZWwgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfb2JqZWN0TW9kZWxUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+O1xuICAgIHByaXZhdGUgX29iamVjdFRpdGxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZSc7XG5cbiAgICAvLyBjdXN0b20gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50VHlwZT86IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFRUPj47XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBfaGFzQ29weVRvQ2xpcGJvYXJkID0gZmFsc2U7XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uRGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25QYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bVRpdGxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UaXRsZVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtTmFtZUFzVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0TW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0TW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0VGl0bGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RnJvbVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydHMgY29sdW1uIHRvIGdpdmVuIHR5cGUgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB0eXBlIGNvbHVtbiB0eXBlIGVudW1cbiAgICAgKiBAcGFyYW0gYXJncyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIGNvbHVtbiAob3B0aW9uYWwpXG4gICAgICovXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlUeXBlID09PSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3kgPyB0aGlzLmFzQ3VycmVuY3koLi4uYXJncykgOiB0aGlzLmFzTnVtYmVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQm9vbGVhbiguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0RhdGUoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNFbnVtKGFyZ3NbMF0gYXMgRW51bVR5cGUsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXN0b21Db21wb25lbnQoYXJnc1swXSk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXNOdW1iZXIoZGlzcGxheUZvcm1hdCA9ICcxLjAtMCcsIGxvY2FsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGUgPz8gdGhpcy5fbG9jYWxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXJyZW5jeShjdXJyZW5jeUNvZGU/OiBzdHJpbmcsIGN1cnJlbmN5RnJvbVByb3BlcnR5Pzogc3RyaW5nLCBjdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJywgZGlzcGxheUZvcm1hdCA9ICcxLjItMicsIGxvY2FsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lDb2RlID0gY3VycmVuY3lDb2RlID8/IHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHkgPSBjdXJyZW5jeUZyb21Qcm9wZXJ0eSA/PyB0aGlzLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lEaXNwbGF5ID0gY3VycmVuY3lEaXNwbGF5ID8/IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQgPz8gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlID8/IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGF0ZShkaXNwbGF5Rm9ybWF0ID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQm9vbGVhbih5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhbkFzSWNvbiA9IGFzSWNvbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhblllcyA9IHllcztcbiAgICAgICAgdGhpcy5fYm9vbGVhbk5vID0gbm87XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0VudW0oZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9lbnVtVHlwZSA9IGVudW1UeXBlO1xuICAgICAgICB0aGlzLl9lbnVtTmFtZUFzVmFsdWUgPSBuYW1lQXNWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VudW1UaXRsZVBhdGggPSB0aXRsZVBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxUVD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5DdXN0b207XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkNvbXBvbmVudDtcbiAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IGN1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0h0bWwoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkh0bWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZT86IHN0cmluZywgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lID8/ICcnO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFdpZHRoKHdpZHRoPzogbnVtYmVyLCBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9taW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gbWF4V2lkdGggPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPYmplY3RQcm9wZXJ0eTxNVD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8TVQ+LCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29iamVjdE1vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgaWYgKCF0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZShtb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHkgPSB0aXRsZVByb3BlcnR5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25QYXRoKHBhdGg6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9qc29uUGF0aCA9IHBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyKGZvcmNlU2ltcGxlID0gZmFsc2UpOiBGaWx0ZXJEZXNjcmlwdG9yPGFueT4ge1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8dW5rbm93bj4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSAmJiB0aGlzLl9vYmplY3RNb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJMb29rdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2NvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkRhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyTG9va3VwRW51bSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUZvcm1hdEZyYWN0aW9ucyA9IHRoaXMuX2Rpc3BsYXlGb3JtYXQ/LnNwbGl0KCcuJyk/LlsxXT8uc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zICYmIGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3Iud2l0aE51bWJlckZyYWN0aW9ucyhwYXJzZUludChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zWzBdKSwgcGFyc2VJbnQoZGlzcGxheUZvcm1hdEZyYWN0aW9uc1sxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXNwbGF5Rm9ybWF0ID0gRGF0ZVV0aWwuZnJvbVByaW1lVG9Bbmd1bGFyRGF0ZUZvcm1hdChkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLndpdGhEYXRlRm9ybWF0KGZpbHRlckRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXAoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjx1bmtub3duPih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fb2JqZWN0TW9kZWxUeXBlID8/IG51bGwpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXBFbnVtKG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPik6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbHVtblR5cGUgIT09IENvbHVtblR5cGVFbnVtLkVudW0gfHwgIXRoaXMuX2VudW1UeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke3RoaXMuX3Byb3BlcnR5fSBpcyBub3Qgb2YgdHlwZSBlbnVtIG9yIGVudW0gdHlwZSBpcyB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fZW51bVR5cGUsIG9wdGlvbnMsIHRoaXMuX2VudW1OYW1lQXNWYWx1ZSwgdGhpcy5fZW51bVRpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnQoaXNFbmFibGVkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1NvcnRFbmFibGVkID0gaXNFbmFibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KGFzYyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aERlZmF1bHRTb3J0KHRoaXMuX3Byb3BlcnR5LCBhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvcHlUb0NsaXBib2FyZChoYXNDb3B5VG9DbGlib2FyZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpYm9hcmQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI/OiAoaXRlbTogVFQsIHZhbHVlPzogVCB8IG51bGwpID0+IHVua25vd24pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jYWxpemVkKGV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmIChleGlzdHNQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBleGlzdHNQcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5ID0gYCR7dGhpcy5fcHJvcGVydHl9TG9jYWxpemVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4odGhpcy5fdGFibGUsIHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPikge1xuICAgICAgICBvYmouX2pzb25QYXRoID0gdGhpcy5fanNvblBhdGg7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9pc1NvcnRFbmFibGVkID0gdGhpcy5faXNTb3J0RW5hYmxlZDtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIG9iai5fZW51bVR5cGUgPSB0aGlzLl9lbnVtVHlwZTtcbiAgICAgICAgb2JqLl9lbnVtVGl0bGVQYXRoID0gdGhpcy5fZW51bVRpdGxlUGF0aDtcbiAgICAgICAgb2JqLl9lbnVtTmFtZUFzVmFsdWUgPSB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgICAgIG9iai5fYm9vbGVhbkFzSWNvbiA9IHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgICAgIG9iai5fYm9vbGVhblllcyA9IHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgICAgIG9iai5fYm9vbGVhbk5vID0gdGhpcy5fYm9vbGVhbk5vO1xuICAgICAgICBvYmouX29iamVjdE1vZGVsVHlwZSA9IHRoaXMuX29iamVjdE1vZGVsVHlwZTtcbiAgICAgICAgb2JqLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICBvYmouX2Rpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICBvYmouX2hlYWRlckNsYXNzTmFtZSA9IHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5faGFzQ29weVRvQ2xpcGJvYXJkID0gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgICAgICBvYmouX3RlbXBsYXRlID0gdGhpcy5fdGVtcGxhdGU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF92aXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8vIHByaXZhdGUgX2ZpbHRlclN0YXR1cztcblxuICAgIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yLCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHRhYmxlLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGNvbHVtbidzIHRpdGxlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIHRvIGJlIHNldFxuICAgICAqIEBwYXJhbSBvdmVycmlkZSBzaG91bGQgY29sdW1uIHRpdGxlIGlmIGFsbCByZWFkeSBzZXQ/XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nLCBvdmVycmlkZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl90aXRsZSA9PSBudWxsIHx8IG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgYXV0b21hdGljIHR5cGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEF1dG9tYXRpY1R5cGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcih0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgY29sdW1uIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgY29sdW1uIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fdmlzaWJpbGl0eSA9IHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8YW55Pik6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yKHRhYmxlRGVzY3JpcHRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19