@mediusinc/mng-commons 6.2.0-rc.0 → 7.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/core/index.d.ts +1743 -84
  2. package/fesm2022/mediusinc-mng-commons-core.mjs +104 -87
  3. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  4. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  5. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  6. package/fesm2022/mediusinc-mng-commons-form.mjs +97 -97
  7. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  8. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -1
  9. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  10. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -1
  11. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  12. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs +30 -0
  13. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs.map +1 -0
  14. package/fesm2022/{mediusinc-mng-commons-table-mediusinc-mng-commons-table-8TdW6NCC.mjs → mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs} +183 -186
  15. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs.map +1 -0
  16. package/fesm2022/mediusinc-mng-commons-table.mjs +1 -1
  17. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -1
  18. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +3 -3
  19. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  20. package/fesm2022/mediusinc-mng-commons-tableview.mjs +305 -289
  21. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  22. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  23. package/filter/index.d.ts +398 -5
  24. package/form/api/index.d.ts +134 -7
  25. package/form/index.d.ts +301 -6
  26. package/index.d.ts +11 -1
  27. package/model/class/index.d.ts +25 -4
  28. package/model/index.d.ts +71 -5
  29. package/package.json +10 -10
  30. package/table/api/class/index.d.ts +77 -5
  31. package/table/api/index.d.ts +1161 -14
  32. package/table/index.d.ts +545 -17
  33. package/tableview/api/class/index.d.ts +141 -10
  34. package/tableview/api/index.d.ts +2542 -63
  35. package/tableview/index.d.ts +1274 -54
  36. package/version-info.json +5 -5
  37. package/core/action/action-data.model.d.ts +0 -3
  38. package/core/action/action-parameters.model.d.ts +0 -44
  39. package/core/components/notification/notification-wrapper.component.d.ts +0 -14
  40. package/core/data-list/data-list-params-helpers.d.ts +0 -93
  41. package/core/data-list/data-list.model.d.ts +0 -28
  42. package/core/data-list/filter-match.model.d.ts +0 -36
  43. package/core/data-list/filter-metadata.model.d.ts +0 -20
  44. package/core/data-providers/base.data-provider.d.ts +0 -17
  45. package/core/data-providers/lookup.data-provider.d.ts +0 -10
  46. package/core/descriptors/action.descriptor.d.ts +0 -12
  47. package/core/descriptors/column.descriptor.d.ts +0 -3
  48. package/core/descriptors/editor.descriptor.d.ts +0 -11
  49. package/core/descriptors/enum.descriptor.d.ts +0 -6
  50. package/core/descriptors/filter.descriptor.d.ts +0 -3
  51. package/core/descriptors/lookup.descriptor.d.ts +0 -12
  52. package/core/descriptors/model.descriptor.d.ts +0 -5
  53. package/core/descriptors/table.descriptor.d.ts +0 -11
  54. package/core/descriptors/tableview.descriptor.d.ts +0 -11
  55. package/core/directives/component.directive.d.ts +0 -18
  56. package/core/directives/rerender.directive.d.ts +0 -9
  57. package/core/directives/template.directive.d.ts +0 -8
  58. package/core/enum/enum-helpers.d.ts +0 -54
  59. package/core/enum/enum.model.d.ts +0 -8
  60. package/core/error/error-handler.d.ts +0 -6
  61. package/core/error/error-helpers.d.ts +0 -136
  62. package/core/error/error.model.d.ts +0 -53
  63. package/core/helpers/coercion.d.ts +0 -10
  64. package/core/helpers/date.d.ts +0 -14
  65. package/core/helpers/notification.d.ts +0 -18
  66. package/core/helpers/number.d.ts +0 -5
  67. package/core/helpers/object.d.ts +0 -27
  68. package/core/helpers/route.d.ts +0 -34
  69. package/core/helpers/string.d.ts +0 -7
  70. package/core/helpers/templates.d.ts +0 -3
  71. package/core/helpers/type-helpers.d.ts +0 -37
  72. package/core/i18n/i18n-common.d.ts +0 -6
  73. package/core/i18n/i18n-error.d.ts +0 -3
  74. package/core/i18n/i18n-type.d.ts +0 -11
  75. package/core/log/log-publisher-console.service.d.ts +0 -4
  76. package/core/log/log.model.d.ts +0 -40
  77. package/core/log/logger.service.d.ts +0 -33
  78. package/core/models/class-attribute.model.d.ts +0 -6
  79. package/core/models/class-service.model.d.ts +0 -7
  80. package/core/models/getter.model.d.ts +0 -2
  81. package/core/models/i18n.model.d.ts +0 -1
  82. package/core/models/menu.model.d.ts +0 -42
  83. package/core/models/user.model.d.ts +0 -8
  84. package/core/models/version.model.d.ts +0 -31
  85. package/core/pipes/boolean.pipe.d.ts +0 -7
  86. package/core/pipes/class-map.pipe.d.ts +0 -7
  87. package/core/pipes/enum.pipe.d.ts +0 -8
  88. package/core/pipes/enumerate-async.pipe.d.ts +0 -9
  89. package/core/pipes/enumerate.pipe.d.ts +0 -16
  90. package/core/pipes/getter.pipe.d.ts +0 -8
  91. package/core/pipes/i18n-property.pipe.d.ts +0 -8
  92. package/core/pipes/json-path.pipe.d.ts +0 -13
  93. package/core/pipes/parametrize.pipe.d.ts +0 -16
  94. package/core/pipes/template.pipe.d.ts +0 -8
  95. package/core/provide.d.ts +0 -13
  96. package/core/reactivity/effect.d.ts +0 -16
  97. package/core/reflect/type-enum-decorator.d.ts +0 -2
  98. package/core/reflect/type-enum-metadata.d.ts +0 -32
  99. package/core/registry/registry.model.d.ts +0 -8
  100. package/core/registry/type-registry.d.ts +0 -27
  101. package/core/router/route-builder.d.ts +0 -187
  102. package/core/router/router.model.d.ts +0 -13
  103. package/core/router/routes-builder.d.ts +0 -33
  104. package/core/rxjs/map-data-list-result-operator.d.ts +0 -9
  105. package/core/security/permission-helpers.d.ts +0 -3
  106. package/core/security/permission.guard.d.ts +0 -2
  107. package/core/security/permission.service.d.ts +0 -25
  108. package/core/security/permissions.model.d.ts +0 -82
  109. package/core/services/commons-configuration.service.d.ts +0 -81
  110. package/core/services/commons-init.service.d.ts +0 -30
  111. package/core/services/commons-router.service.d.ts +0 -37
  112. package/core/services/commons-storage.service.d.ts +0 -12
  113. package/core/services/commons.service.d.ts +0 -47
  114. package/core/services/providers/commons-init.provider.d.ts +0 -4
  115. package/core/services/tokens/browser-storage.token.d.ts +0 -2
  116. package/core/services/tokens/commons-init.token.d.ts +0 -3
  117. package/core/services/tokens/log-publisher.token.d.ts +0 -3
  118. package/core/services/tokens/module-config.token.d.ts +0 -28
  119. package/core/styles/style-constants.d.ts +0 -11
  120. package/core/styles/style.model.d.ts +0 -18
  121. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-CCyGSxaD.mjs +0 -30
  122. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-CCyGSxaD.mjs.map +0 -1
  123. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-8TdW6NCC.mjs.map +0 -1
  124. package/filter/descriptors/filter-generic.descriptor.d.ts +0 -14
  125. package/filter/descriptors/filter-lookup.descriptor.d.ts +0 -97
  126. package/filter/descriptors/filter.descriptor.d.ts +0 -264
  127. package/filter/models/filter-generic-property.model.d.ts +0 -7
  128. package/filter/models/filter.model.d.ts +0 -16
  129. package/form/api/data-providers/lookup-data-provider.factory.d.ts +0 -19
  130. package/form/api/data-providers/lookup.data-provider.d.ts +0 -7
  131. package/form/api/descriptors/action-button.descriptor.d.ts +0 -23
  132. package/form/api/descriptors/button-style.builder.d.ts +0 -54
  133. package/form/api/models/button.model.d.ts +0 -19
  134. package/form/api/models/empty-value.model.d.ts +0 -7
  135. package/form/api/models/trim.model.d.ts +0 -1
  136. package/form/components/autocomplete/autocomplete.component.d.ts +0 -99
  137. package/form/components/date-range/date-range.component.d.ts +0 -37
  138. package/form/components/dropdown/dropdown.component.d.ts +0 -89
  139. package/form/components/number-range/number-range.component.d.ts +0 -35
  140. package/form/directives/input-empty-value.directive.d.ts +0 -40
  141. package/form/directives/input-trim.directive.d.ts +0 -9
  142. package/model/class/data-providers/base-from-class-data-provider.factory.d.ts +0 -3
  143. package/model/class/descriptors/model-class.descriptor.d.ts +0 -12
  144. package/model/class/descriptors/type-class.descriptor.d.ts +0 -3
  145. package/model/class/helpers/model.d.ts +0 -4
  146. package/model/data-providers/base-from-type-data-provider.factory.d.ts +0 -15
  147. package/model/descriptors/enum.descriptor.d.ts +0 -13
  148. package/model/descriptors/model.descriptor.d.ts +0 -25
  149. package/model/descriptors/type.descriptor.d.ts +0 -3
  150. package/model/helpers/i18n.d.ts +0 -13
  151. package/provide.d.ts +0 -7
  152. package/table/api/class/class-table-attribute-converter.d.ts +0 -15
  153. package/table/api/class/class-table-attribute.model.d.ts +0 -8
  154. package/table/api/class/class-table-data-provider.factory.d.ts +0 -4
  155. package/table/api/class/class-table-descriptor-helpers.d.ts +0 -42
  156. package/table/api/class/class-table-descriptor.factory.d.ts +0 -11
  157. package/table/api/data-providers/table-data-provider.factory.d.ts +0 -19
  158. package/table/api/data-providers/table.data-provider.d.ts +0 -27
  159. package/table/api/descriptors/column.descriptor.d.ts +0 -269
  160. package/table/api/descriptors/sort.descriptor.d.ts +0 -39
  161. package/table/api/descriptors/table-descriptor.factory.d.ts +0 -12
  162. package/table/api/descriptors/table.descriptor.d.ts +0 -672
  163. package/table/api/helpers/column-converter.d.ts +0 -7
  164. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +0 -20
  165. package/table/api/models/column-value.model.d.ts +0 -7
  166. package/table/api/models/column.model.d.ts +0 -18
  167. package/table/api/models/row-expandable-component.model.d.ts +0 -4
  168. package/table/api/models/table-columns.model.d.ts +0 -42
  169. package/table/api/models/table-event.model.d.ts +0 -18
  170. package/table/api/models/table.model.d.ts +0 -22
  171. package/table/components/column-filter/column-filter.component.d.ts +0 -81
  172. package/table/components/column-toggle/column-toggle.component.d.ts +0 -12
  173. package/table/components/column-value/column-value.component.d.ts +0 -33
  174. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +0 -20
  175. package/table/components/filter/filter-form/filter-form.component.d.ts +0 -56
  176. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +0 -54
  177. package/table/components/table/table.component.d.ts +0 -83
  178. package/table/helpers/filters.d.ts +0 -37
  179. package/table/helpers/notification.d.ts +0 -13
  180. package/table/helpers/table-layout-prefs.d.ts +0 -7
  181. package/table/helpers/table.d.ts +0 -6
  182. package/table/models/column-preferences.model.d.ts +0 -12
  183. package/table/models/filter.model.d.ts +0 -36
  184. package/table/pipes/filter-value.pipe.d.ts +0 -19
  185. package/table/pipes/locale-default-row-class.pipe.d.ts +0 -10
  186. package/table/pipes/table-column-filter-class.pipe.d.ts +0 -8
  187. package/table/provide.d.ts +0 -15
  188. package/table/services/table-data.service.d.ts +0 -37
  189. package/table/services/table-feature-config.token.d.ts +0 -7
  190. package/table/services/table-metadata.service.d.ts +0 -31
  191. package/table/services/table-preferences.service.d.ts +0 -25
  192. package/tableview/action/components/action/action.component.d.ts +0 -63
  193. package/tableview/action/components/editor/action-editor.component.d.ts +0 -32
  194. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +0 -79
  195. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +0 -19
  196. package/tableview/action/components/route/action-route.component.d.ts +0 -26
  197. package/tableview/action/components/table/action-table.component.d.ts +0 -50
  198. package/tableview/action/guards/unsaved-changes.guard.d.ts +0 -3
  199. package/tableview/action/helpers/action-execution.d.ts +0 -7
  200. package/tableview/action/helpers/i18n.d.ts +0 -47
  201. package/tableview/action/helpers/inject.d.ts +0 -39
  202. package/tableview/action/helpers/notification.d.ts +0 -40
  203. package/tableview/action/helpers/styles.d.ts +0 -5
  204. package/tableview/action/models/action-editor-dialog-data.model.d.ts +0 -11
  205. package/tableview/action/models/can-component-deactivate.model.d.ts +0 -4
  206. package/tableview/action/models/execution/action-context.model.d.ts +0 -43
  207. package/tableview/action/models/execution/action-instance.model.d.ts +0 -56
  208. package/tableview/action/services/action-error-mapper.service.d.ts +0 -18
  209. package/tableview/action/services/action-executor.service.d.ts +0 -174
  210. package/tableview/action/services/component-action-executor.service.d.ts +0 -9
  211. package/tableview/action/services/data-provider-executor.service.d.ts +0 -23
  212. package/tableview/action/services/navigation.service.d.ts +0 -15
  213. package/tableview/action/services/providers/provide-action-executor.d.ts +0 -2
  214. package/tableview/action/services/providers/provide-view-container.d.ts +0 -2
  215. package/tableview/action/services/root-action-executor.service.d.ts +0 -9
  216. package/tableview/action/services/tokens/action-editor.token.d.ts +0 -2
  217. package/tableview/action/services/view-container.service.d.ts +0 -25
  218. package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +0 -25
  219. package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +0 -24
  220. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +0 -105
  221. package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +0 -23
  222. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +0 -27
  223. package/tableview/api/action/descriptors/action.descriptor.d.ts +0 -118
  224. package/tableview/api/action/descriptors/editor-action-descriptor.factory.d.ts +0 -21
  225. package/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.d.ts +0 -21
  226. package/tableview/api/action/descriptors/table-action-descriptor.factory.d.ts +0 -36
  227. package/tableview/api/action/descriptors/table-action-editor-descriptor.factory.d.ts +0 -40
  228. package/tableview/api/action/helpers/data-provider-executors.d.ts +0 -23
  229. package/tableview/api/action/models/action-component.model.d.ts +0 -12
  230. package/tableview/api/action/models/action-confirmation.model.d.ts +0 -16
  231. package/tableview/api/action/models/action-descriptor.types.d.ts +0 -10
  232. package/tableview/api/action/models/action-editor.model.d.ts +0 -4
  233. package/tableview/api/action/models/action-error.model.d.ts +0 -14
  234. package/tableview/api/action/models/action.type.d.ts +0 -21
  235. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +0 -11
  236. package/tableview/api/action/models/execution/action-context.model.d.ts +0 -25
  237. package/tableview/api/action/models/execution/action-execution-error.model.d.ts +0 -4
  238. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +0 -30
  239. package/tableview/api/action/models/execution/action-instance.model.d.ts +0 -32
  240. package/tableview/api/action/models/execution/view-container.model.d.ts +0 -22
  241. package/tableview/api/action/models/tableview-action-default-categories.model.d.ts +0 -10
  242. package/tableview/api/action/services/data-provider-executor.service.d.ts +0 -39
  243. package/tableview/api/action/services/tokens/data-language-dropdown.token.d.ts +0 -2
  244. package/tableview/api/class/editor/class-editor-attribute-converter.d.ts +0 -21
  245. package/tableview/api/class/editor/class-editor-attribute.model.d.ts +0 -7
  246. package/tableview/api/class/editor/class-editor-data-provider.factory.d.ts +0 -4
  247. package/tableview/api/class/editor/class-editor-descriptor-helpers.d.ts +0 -40
  248. package/tableview/api/class/editor/class-editor-descriptor.factory.d.ts +0 -11
  249. package/tableview/api/class/tableview/class-tableview-attribute-converter.d.ts +0 -8
  250. package/tableview/api/class/tableview/class-tableview-attribute.model.d.ts +0 -3
  251. package/tableview/api/class/tableview/class-tableview-data-provider.factory.d.ts +0 -4
  252. package/tableview/api/class/tableview/class-tableview-descriptor-helpers.d.ts +0 -41
  253. package/tableview/api/class/tableview/class-tableview-descriptor.factory.d.ts +0 -12
  254. package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +0 -19
  255. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +0 -119
  256. package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +0 -11
  257. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +0 -254
  258. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +0 -21
  259. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +0 -147
  260. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +0 -58
  261. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +0 -80
  262. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +0 -56
  263. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +0 -16
  264. package/tableview/api/editor/descriptors/field.descriptor.d.ts +0 -239
  265. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +0 -25
  266. package/tableview/api/editor/models/editor-fields.model.d.ts +0 -42
  267. package/tableview/api/editor/models/editor.model.d.ts +0 -7
  268. package/tableview/api/editor/models/field-action-context.model.d.ts +0 -26
  269. package/tableview/api/editor/models/field-image-preview.model.d.ts +0 -4
  270. package/tableview/api/editor/models/field-validation.model.d.ts +0 -26
  271. package/tableview/api/editor/models/field.model.d.ts +0 -56
  272. package/tableview/api/editor/models/form-editor.event.d.ts +0 -74
  273. package/tableview/api/editor/models/form-editor.interface.d.ts +0 -53
  274. package/tableview/api/editor/models/formly-custom-field.model.d.ts +0 -30
  275. package/tableview/api/editor/models/formly-field.model.d.ts +0 -42
  276. package/tableview/api/editor/models/formly-options.model.d.ts +0 -15
  277. package/tableview/api/editor/models/radio.model.d.ts +0 -6
  278. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +0 -24
  279. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +0 -33
  280. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +0 -23
  281. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +0 -153
  282. package/tableview/api/tableview/helpers/files-export.d.ts +0 -4
  283. package/tableview/api/tableview/helpers/tableview-create.d.ts +0 -29
  284. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +0 -20
  285. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +0 -93
  286. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +0 -192
  287. package/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.d.ts +0 -9
  288. package/tableview/api/tableview/models/tableview-descriptor-helper.type.d.ts +0 -2
  289. package/tableview/api/tableview/models/tableview-input.model.d.ts +0 -8
  290. package/tableview/api/tableview/models/tableview-route.model.d.ts +0 -20
  291. package/tableview/editor/components/editor/auto-save-status/auto-save-status.component.d.ts +0 -10
  292. package/tableview/editor/components/editor/form-editor.component.d.ts +0 -117
  293. package/tableview/editor/components/formly/constants.d.ts +0 -1
  294. package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +0 -15
  295. package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -11
  296. package/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +0 -10
  297. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +0 -24
  298. package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -10
  299. package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +0 -12
  300. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -33
  301. package/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.d.ts +0 -10
  302. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -36
  303. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -22
  304. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -37
  305. package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +0 -10
  306. package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +0 -11
  307. package/tableview/editor/components/formly/fields/formly-group-type.abstract.component.d.ts +0 -7
  308. package/tableview/editor/components/formly/fields/formly-type.abstract.component.d.ts +0 -20
  309. package/tableview/editor/components/formly/pipes/formly-field-label.pipe.d.ts +0 -8
  310. package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +0 -18
  311. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +0 -16
  312. package/tableview/editor/helpers/editor-autosave.d.ts +0 -17
  313. package/tableview/editor/helpers/editor-field.d.ts +0 -2
  314. package/tableview/editor/helpers/editor-formly.d.ts +0 -11
  315. package/tableview/editor/helpers/editor-validators.d.ts +0 -7
  316. package/tableview/editor/helpers/field-create.d.ts +0 -9
  317. package/tableview/editor/helpers/formly-config.d.ts +0 -18
  318. package/tableview/editor/helpers/notification.d.ts +0 -4
  319. package/tableview/editor/models/editor-auto-save-preview.model.d.ts +0 -10
  320. package/tableview/editor/models/formly-config.model.d.ts +0 -14
  321. package/tableview/editor/models/formly.model.d.ts +0 -23
  322. package/tableview/editor/services/form-editor.service.d.ts +0 -39
  323. package/tableview/editor/services/formly-config.provider.d.ts +0 -5
  324. package/tableview/provide.d.ts +0 -15
  325. package/tableview/tableview/components/route/tableview-route.component.d.ts +0 -7
  326. package/tableview/tableview/components/tableview/tableview.component.d.ts +0 -29
  327. package/tableview/tableview/router/tableview-route-builder.d.ts +0 -43
  328. package/tableview/tableview/services/tableview-feature-config.token.d.ts +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"mediusinc-mng-commons-table-api.mjs","sources":["../../table/api/src/data-providers/table.data-provider.ts","../../table/api/src/data-providers/table-data-provider.factory.ts","../../table/api/src/helpers/column-converter.ts","../../table/api/src/models/column.model.ts","../../table/api/src/descriptors/column.descriptor.ts","../../table/api/src/descriptors/sort.descriptor.ts","../../table/api/src/models/table.model.ts","../../table/api/src/descriptors/table.descriptor.ts","../../table/api/src/descriptors/table-descriptor.factory.ts","../../table/api/src/helpers/table-data-provider-descriptor-convert.ts","../../table/api/src/index.ts","../../table/api/src/mediusinc-mng-commons-table-api.ts"],"sourcesContent":["import {Observable, Subject} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {DataListParams, DataListResult, DataProviderInst, IDataProvider, ItemOrObservable, ServiceClassOptType, toObservable} from '@mediusinc/mng-commons/core';\n\nimport {TableReloadEvent} from '../models/table-event.model';\n\nexport type TableDataProviderGetAllFnType<\n Model = any,\n Service = undefined,\n Sorts = keyof Model,\n Filters extends keyof any = keyof Model,\n Return = ItemOrObservable<DataListResult<Model>>\n> = (params: DataListParams<Sorts, Filters>, service: Service, locale?: string) => Return;\nexport type TableDataProviderGetAllEagerFnType<Model = any, Service = undefined, Return = ItemOrObservable<Model[]>> = (service: Service, locale?: string) => Return;\n\nexport interface ITableDataProviderGetAll<Model, Service, Sorts = keyof Model, Filters extends keyof any = keyof Model> {\n getAll: TableDataProviderGetAllFnType<Model, Service, Sorts, Filters>;\n\n withGetAll(fn: TableDataProviderGetAllFnType<Model, Service, Sorts, Filters>): this;\n}\n\nexport interface ITableDataProviderSupport<Sorts = any, Filters extends keyof any = any> {\n get isLazy(): boolean;\n\n get tableReload$(): Observable<TableReloadEvent<Sorts, Filters>>;\n\n reloadTable(event?: TableReloadEvent<Sorts, Filters>): void;\n}\n\nexport type ITableDataProvider<\n Model = any,\n Service = any,\n Sorts = keyof Model,\n Filters extends keyof any = keyof Model,\n ServiceClass = ServiceClassOptType<Service>\n> = IDataProvider<Model, Service, ServiceClass> & ITableDataProviderSupport<Sorts, Filters> & ITableDataProviderGetAll<Model, Service, Sorts, Filters>;\n\nexport class TableDataProviderInst<Model, Service = any, Sorts = keyof Model, Filters extends keyof any = keyof Model, ServiceClass = ServiceClassOptType<Service>>\n extends DataProviderInst<Model, Service, ServiceClass>\n implements ITableDataProvider<Model, Service, Sorts, Filters, ServiceClass>\n{\n protected readonly _reloadTableSubject = new Subject<TableReloadEvent<Sorts, Filters>>();\n\n protected _isLazy = true;\n\n public constructor(serviceType: ServiceClass) {\n super(serviceType);\n }\n\n protected _getAll: TableDataProviderGetAllFnType<Model, Service, Sorts, Filters> = () => ({data: []});\n\n get isLazy() {\n return this._isLazy;\n }\n\n get getAll() {\n return this._getAll;\n }\n\n get tableReload$() {\n return this._reloadTableSubject.asObservable();\n }\n\n withGetAll(fn: TableDataProviderGetAllFnType<Model, Service, Sorts, Filters>): this {\n this._getAll = fn;\n return this;\n }\n\n withGetAllEagerly(fn: TableDataProviderGetAllEagerFnType<Model, Service>): this {\n this._getAll = (qp: DataListParams<Sorts, Filters>, service: Service, locale?: string) => toObservable(fn(service, locale)).pipe(map(data => ({data: data})));\n this._isLazy = false;\n return this;\n }\n\n reloadTable(event?: TableReloadEvent<Sorts, Filters>): void {\n this._reloadTableSubject.next(event ?? {});\n }\n}\n","import {ServiceClassType} from '@mediusinc/mng-commons/core';\nimport {ModelDescriptor, TypeDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {TableDataProviderInst} from './table.data-provider';\n\n/**\n * Creates and returns an instance of `TableDataProviderInst` with the specified options for managing table data.\n *\n * @param {Object} [opts] - The options object to configure the data provider.\n * @param {TypeDescriptor<Model> | ModelDescriptor<Model>} [opts.type] - The descriptor defining the type of model.\n * @param {ServiceClassType<Service>} [opts.service] - The service class type associated with the data provider.\n * @param {TypeDescriptor<CreateModel> | ModelDescriptor<CreateModel>} [opts.filtersType] - The descriptor defining the filters type.\n * @param {TypeDescriptor<UpdateModel> | ModelDescriptor<UpdateModel>} [opts.sortsType] - The descriptor defining the sorts type.\n * @return {TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClass>} An instance of `TableDataProviderInst` configured according to the provided options.\n */\nexport function tableDataProvider<\n Model,\n Service = undefined,\n Sorts = keyof Model,\n Filters extends keyof any = keyof Model,\n ServiceClass = Service extends undefined ? undefined : ServiceClassType<Service>\n>(opts?: {\n type?: TypeDescriptor<Model> | ModelDescriptor<Model>;\n service?: ServiceClassType<Service>;\n filtersType?: TypeDescriptor<Filters> | ModelDescriptor<Filters>;\n sortsType?: TypeDescriptor<Sorts> | ModelDescriptor<Sorts>;\n}): TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClass> {\n return new TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClass>(opts?.service as ServiceClass);\n}\n","import {ColumnDescriptor} from '../descriptors/column.descriptor';\n\nconst dateRegex = /\\d{4}-[01]\\d-[0-3]\\d/;\nconst dateTimeRegex = /\\d{4}-[01]\\d-[0-3]\\dT([0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z?)|([0-2]\\d:[0-5]\\d:[0-5]\\d\\+[0-2]\\d:[0-5]\\d))/;\n\n/**\n * converts column to number or date on value based\n * @param column column to be transformed\n * @param value value to check if applicable\n */\nexport function columnToDateNumberOrBoolean(column: ColumnDescriptor<any, any>, value: any): ColumnDescriptor<any, any> {\n if (typeof value === 'boolean') {\n return column.asBoolean();\n } else if (!isNaN(value) && typeof value === 'number') {\n return column.asNumber();\n } else if (dateRegex.test(value)) {\n if (dateTimeRegex.test(value)) {\n return column.asDate('dd. MMM yyyy HH:mm');\n }\n return column.asDate('dd. MMM yyyy');\n } else {\n return column;\n }\n}\n","export enum ColumnTypeEnum {\n String = 'STRING',\n Number = 'NUMBER',\n Boolean = 'BOOLEAN',\n Date = 'DATE',\n Enum = 'ENUM',\n Custom = 'CUSTOM'\n}\n\nexport enum ColumnDisplayTypeEnum {\n String = 'STRING',\n Number = 'NUMBER',\n Currency = 'CURRENCY',\n Boolean = 'BOOLEAN',\n Date = 'DATE',\n Enum = 'ENUM',\n Component = 'COMPONENT',\n Html = 'HTML'\n}\n","import {Type} from '@angular/core';\n\nimport {GetterFn} from '@mediusinc/mng-commons/core';\nimport {EnumDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {columnToDateNumberOrBoolean} from '../helpers/column-converter';\nimport {IColumnValueComponent} from '../models/column-value.model';\nimport {ColumnDisplayTypeEnum, ColumnTypeEnum} from '../models/column.model';\n\nexport type ColumnComponentOpts = {\n inputs?: Record<string, any>;\n};\n\nexport type ColumnCurrencyOptsType<Property = string> = {\n currencyProperty?: Property;\n currency?: string;\n currencyDisplay?: 'symbol' | 'code' | 'name';\n} & ColumnNumberFractionOptsType &\n ColumnLocaleOptsType;\n\nexport type ColumnNumberOptsType = ColumnNumberFractionOptsType & ColumnLocaleOptsType;\n\nexport type ColumnNumberFractionOptsType = {\n minIntegerDigits?: number;\n minFractionDigits?: number;\n maxFractionDigits?: number;\n};\n\nexport type ColumnLocaleOptsType = {\n locale?: string;\n};\n\nexport class ColumnDescriptor<ColumnModel, TableModel, ColumnValue = ColumnModel> {\n protected readonly _property: string;\n private _columnType: ColumnTypeEnum = ColumnTypeEnum.String;\n private _columnDisplayType: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.String;\n protected _title?: string;\n private _titleUseModelBase?: boolean;\n\n // value display\n private _displayFormat?: string;\n private _locale?: string;\n private _template?: string;\n private _getter?: GetterFn<ColumnValue, TableModel>;\n private _isMultiline = false;\n private _hasValueAsTooltip = false;\n\n // column visibility\n private _isReorderable = false;\n private _isToggleable = false;\n private _isVisible = true;\n\n // styling\n private _headerClassName = '';\n private _className = '';\n private _classNameMapFn?: (className?: string, item?: TableModel) => string;\n private _width: number | null = null;\n private _minWidth: number | null = null;\n private _maxWidth: number | null = null;\n\n // enum specifics\n private _enum?: EnumDescriptor<any>;\n\n // boolean specifics\n private _booleanAsIcon = false;\n private _booleanYes?: string;\n private _booleanNo?: string;\n\n // currency specifics\n private _currencyCode?: string;\n private _currencyProperty?: string;\n private _currencyDisplay?: 'symbol' | 'code' | 'name';\n\n // custom specifics\n private _customComponentType?: Type<IColumnValueComponent<ColumnValue, TableModel, ColumnModel>>;\n private _customComponentInputs?: Record<string, any>;\n\n // helpers\n private _hasCopyToClipboard = false;\n private _clipboardValueGetter?: GetterFn<ColumnValue, TableModel>;\n\n // localization\n private _isLocalized = false;\n private _localizationExistsProperty?: string;\n\n constructor(property: string) {\n this._property = property as string;\n }\n\n public get columnType() {\n return this._columnType;\n }\n\n public get columnDisplayType() {\n return this._columnDisplayType;\n }\n\n public get title() {\n return this._title;\n }\n\n public get titleUseModelBase() {\n return this._titleUseModelBase;\n }\n\n public get displayFormat() {\n return this._displayFormat;\n }\n\n public get property() {\n return this._property;\n }\n\n public get headerClassName() {\n return this._headerClassName;\n }\n\n public get className() {\n return this._className;\n }\n\n public get classNameMapFn() {\n return this._classNameMapFn;\n }\n\n public get width() {\n return this._width;\n }\n\n public get minWidth() {\n return this._minWidth;\n }\n\n public get maxWidth() {\n return this._maxWidth;\n }\n\n public get enum() {\n return this._enum;\n }\n\n public get booleanAsIcon() {\n return this._booleanAsIcon;\n }\n\n public get booleanYes() {\n return this._booleanYes;\n }\n\n public get booleanNo() {\n return this._booleanNo;\n }\n\n public get customComponentType() {\n return this._customComponentType;\n }\n\n public get customComponentInputs() {\n return this._customComponentInputs;\n }\n\n public get locale() {\n return this._locale;\n }\n\n public get currencyCode() {\n return this._currencyCode;\n }\n\n public get currencyDisplay() {\n return this._currencyDisplay;\n }\n\n public get currencyProperty() {\n return this._currencyProperty;\n }\n\n public get hasCopyToClipboard() {\n return this._hasCopyToClipboard;\n }\n\n public get clipboardValueGetter() {\n return this._clipboardValueGetter;\n }\n\n public get template() {\n return this._template;\n }\n\n public get getter() {\n return this._getter;\n }\n\n public get isMultiline() {\n return this._isMultiline;\n }\n\n public get hasValueAsTooltip() {\n return this._hasValueAsTooltip;\n }\n\n public get isReorderable() {\n return this._isReorderable;\n }\n\n public get isToggleable() {\n return this._isToggleable;\n }\n\n public get isVisible() {\n return this._isVisible;\n }\n\n public get isLocalized() {\n return this._isLocalized;\n }\n\n public get localizationExistsProperty() {\n return this._localizationExistsProperty;\n }\n\n /**\n * Converts column to given type with additional arguments\n *\n * @param type Column type enum.\n * @param displayType Column display type\n * @param args Any additional arguments that might be needed for specific target type.\n */\n public asType(type: ColumnTypeEnum, displayType?: ColumnDisplayTypeEnum, ...args: any[]): this {\n switch (type) {\n case ColumnTypeEnum.Number:\n return displayType === ColumnDisplayTypeEnum.Currency ? this.asCurrency(...args) : this.asNumber(...args);\n case ColumnTypeEnum.Boolean:\n return this.asBoolean(...args);\n case ColumnTypeEnum.Date:\n return this.asDate(...args);\n case ColumnTypeEnum.Enum:\n return this.asEnumUnsafe(args[0] as EnumDescriptor<any>);\n case ColumnTypeEnum.Custom:\n return this.asCustomComponent(args[0], args[1]);\n case ColumnTypeEnum.String:\n default:\n return this;\n }\n }\n\n /**\n * Set column display as number.\n *\n * @param opts Options for number display.\n */\n public asNumber(opts?: ColumnNumberOptsType): this {\n this._columnType = ColumnTypeEnum.Number;\n this._columnDisplayType = ColumnDisplayTypeEnum.Number;\n this._displayFormat =\n opts?.minIntegerDigits || opts?.minFractionDigits || opts?.maxFractionDigits\n ? `${opts?.minIntegerDigits ?? 0}.${opts?.minFractionDigits ?? 0}-${opts?.maxFractionDigits ?? opts?.minFractionDigits ?? 0}`\n : undefined;\n this._locale = opts?.locale;\n return this;\n }\n\n /**\n * Set column display as currency.\n *\n * @param opts Options for currency display.\n */\n public asCurrency(opts?: ColumnCurrencyOptsType<keyof TableModel>): this {\n return this.asCurrencyUnsafe({\n ...opts,\n currencyProperty: opts?.currencyProperty ? (opts.currencyProperty as string) : undefined\n });\n }\n\n /**\n * Set column display as currency.\n *\n * This function is UNSAFE!\n *\n * @param opts Options for currency display.\n */\n public asCurrencyUnsafe(opts?: ColumnCurrencyOptsType): this {\n this._columnType = ColumnTypeEnum.Number;\n this._columnDisplayType = ColumnDisplayTypeEnum.Currency;\n this._currencyCode = opts?.currency;\n this._currencyProperty = opts?.currencyProperty;\n this._currencyDisplay = opts?.currencyDisplay;\n this._displayFormat =\n opts?.minIntegerDigits || opts?.minFractionDigits || opts?.maxFractionDigits\n ? `${opts?.minIntegerDigits ?? 0}.${opts?.minFractionDigits ?? 0}-${opts?.maxFractionDigits ?? opts?.minFractionDigits ?? 0}`\n : undefined;\n this._locale = opts?.locale;\n return this;\n }\n\n /**\n * Set column display as date.\n *\n * @param displayFormat Date display format (in Angular date formatting).\n */\n public asDate(displayFormat = 'dd.MM.yyyy'): this {\n this._columnType = ColumnTypeEnum.Date;\n this._columnDisplayType = ColumnDisplayTypeEnum.Date;\n this._displayFormat = displayFormat;\n return this;\n }\n\n /**\n * Set column display as boolean.\n *\n * @param yes Translation key for true value.\n * @param no Translation key for false value.\n * @param asIcon Use true/false texts as icon.\n */\n public asBoolean(yes?: string, no?: string, asIcon = false): this {\n this._columnType = ColumnTypeEnum.Boolean;\n this._columnDisplayType = ColumnDisplayTypeEnum.Boolean;\n this._booleanAsIcon = asIcon;\n this._booleanYes = yes;\n this._booleanNo = no;\n return this;\n }\n\n /**\n * Set column display as enum.\n *\n * @param enumDesc Enum descriptor for value display.\n */\n public asEnumUnsafe(enumDesc: EnumDescriptor<any>): this {\n this._columnType = ColumnTypeEnum.Enum;\n this._columnDisplayType = ColumnDisplayTypeEnum.Enum;\n this._enum = enumDesc;\n return this;\n }\n\n /**\n * Set column display with custom component.\n *\n * @param customComponentType Component type to be used for display. Must implement {IColumnValueComponent}.\n * @param opts Options for the custom component, including inputs to pass to the component.\n */\n public asCustomComponent(customComponentType: Type<IColumnValueComponent<ColumnValue, TableModel, ColumnModel>>, opts?: ColumnComponentOpts): this {\n this._columnType = ColumnTypeEnum.Custom;\n this._columnDisplayType = ColumnDisplayTypeEnum.Component;\n this._customComponentType = customComponentType;\n this._customComponentInputs = opts?.inputs;\n return this;\n }\n\n /**\n * Sets columns display as HTML using Angular innerHTML.\n */\n public asHtml(): this {\n this._columnDisplayType = ColumnDisplayTypeEnum.Html;\n return this;\n }\n\n /**\n * Sets the class names for the column.\n *\n * @param className - The class name for the element column.\n * @param headerClassName - The class name for the header element of the column.\n * @param classNameMapFn - A function to return class name based on the current class name and row item value.\n */\n public withClassName(className?: string, headerClassName?: string, classNameMapFn?: (className?: string, item?: TableModel) => string): this {\n this._className = className ?? '';\n this._headerClassName = headerClassName ?? '';\n this._classNameMapFn = classNameMapFn;\n return this;\n }\n\n /**\n * Sets the width for the column.\n *\n * @param width - The desired width in percents (relative to table width).\n * @param minWidth - The minimum width of column in pixels.\n * @param maxWidth - The maximum width of column in pixels.\n */\n public withWidth(width?: number, minWidth?: number, maxWidth?: number): this {\n this._width = width ?? null;\n this._minWidth = minWidth ?? null;\n this._maxWidth = maxWidth ?? null;\n return this;\n }\n\n /**\n * Sets the title for the column. If title is undefined, then the title will be calculated based on table model (i18nBase) and column property.\n *\n * @param title - The title of the column.\n * @param useModelBase - Whether to append title to model's i18n path.\n */\n public withTitle(title?: string, useModelBase?: boolean): this {\n this._title = title;\n this._titleUseModelBase = useModelBase;\n return this;\n }\n\n /**\n * Enables button that copies column value to the clipboard.\n *\n * @param hasCopyToClipboard - Flag to enable/disable the feature.\n * @param clipboardValueGetter - Optional getter function to adjust the value to be copied to clipboard.\n */\n public withCopyToClipboard(hasCopyToClipboard = true, clipboardValueGetter?: GetterFn<ColumnValue, TableModel>): this {\n this._hasCopyToClipboard = hasCopyToClipboard;\n\n if (clipboardValueGetter) {\n this._clipboardValueGetter = clipboardValueGetter;\n }\n\n return this;\n }\n\n /**\n * Sets the template for displaying value.\n *\n * Use `{{}}` syntax for string interpolation within template.\n * Use `item` key to access value of row item.\n *\n * Example interpolates row item's title within some text:\n * ```\n * This template shows {{item.title}} value in column.\n * ```\n *\n * @param {string} template - The template to set.\n *\n * @usageNotes\n * Display item's title property within some text:\n *\n * ```\n * This template shows {{item.title}} value in column.\n * ```\n */\n public withTemplate(template: string): this {\n this._template = template;\n return this;\n }\n\n /**\n * Sets the getter function for adjusting the column value for display.\n *\n * @param {GetterFn<ColumnValue, TableModel>} getter - The getter function to be used.\n */\n public withGetter(getter?: GetterFn<ColumnValue, TableModel>): this {\n this._getter = getter;\n return this;\n }\n\n /**\n * Show text in multiple lines (useful for displaying of long texts).\n *\n * @param isMultiline Enables/disabled the feature.\n */\n public withMultiline(isMultiline = true): this {\n this._isMultiline = isMultiline;\n return this;\n }\n\n /**\n * Shows the whole display value as text (usefule when display values are expected to be to long and/or are overflown).\n *\n * @param valueAsTooltip Enables/disabled the feature.\n */\n public withValueAsTooltip(valueAsTooltip = true): this {\n this._hasValueAsTooltip = valueAsTooltip;\n return this;\n }\n\n /**\n * Enables ordering of column.\n *\n * @param isReorderable Flag to enable/disable reordering.\n */\n public withReorderable(isReorderable = true): this {\n this._isReorderable = isReorderable;\n return this;\n }\n\n /**\n * Enables toggling column visibility.\n *\n * @param isReorderable Flag to enable/disable visibility toggle.\n */\n public withToggleable(isToggleable = true, isVisible = true): this {\n this._isToggleable = isToggleable;\n this._isVisible = isVisible;\n return this;\n }\n\n /**\n * Enables localization of column by displaying flag if the column value is localized (or just displaying default fallback text).\n *\n * @param existsProperty Property to mark\n */\n public localized(existsProperty?: keyof TableModel): this {\n if (existsProperty) {\n this._localizationExistsProperty = existsProperty as string;\n } else {\n this._localizationExistsProperty = `${this._property}Localized`;\n }\n return this;\n }\n\n /**\n * Copies current descriptor to a new instance.\n */\n public copy(): ColumnDescriptor<ColumnModel, TableModel, ColumnValue> {\n const descriptor = new ColumnDescriptor<ColumnModel, TableModel, ColumnValue>(this._property);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n\n protected copyFieldsTo(obj: ColumnDescriptor<ColumnModel, TableModel, ColumnValue>) {\n obj._title = this._title;\n obj._columnType = this._columnType;\n obj._columnDisplayType = this._columnDisplayType;\n obj._enum = this._enum;\n obj._booleanAsIcon = this._booleanAsIcon;\n obj._booleanYes = this._booleanYes;\n obj._booleanNo = this._booleanNo;\n obj._locale = this._locale;\n obj._currencyCode = this._currencyCode;\n obj._currencyDisplay = this._currencyDisplay;\n obj._currencyProperty = this._currencyProperty;\n obj._displayFormat = this._displayFormat;\n obj._headerClassName = this._headerClassName;\n obj._className = this._className;\n obj._classNameMapFn = this._classNameMapFn;\n obj._width = this._width;\n obj._minWidth = this._minWidth;\n obj._maxWidth = this._maxWidth;\n obj._customComponentType = this._customComponentType;\n obj._customComponentInputs = this._customComponentInputs;\n obj._hasCopyToClipboard = this._hasCopyToClipboard;\n obj._template = this._template;\n obj._getter = this._getter;\n obj._isMultiline = this._isMultiline;\n obj._hasValueAsTooltip = this._hasValueAsTooltip;\n obj._isReorderable = this._isReorderable;\n obj._isToggleable = this._isToggleable;\n obj._isVisible = this._isVisible;\n obj._isLocalized = this._isLocalized;\n obj._localizationExistsProperty = this._localizationExistsProperty;\n }\n}\n\nexport class ColumnDynamicDescriptor extends ColumnDescriptor<any, any> {\n protected override _title: string | undefined = undefined;\n private _visibility = true;\n\n // private _filterStatus;\n\n constructor(property: string) {\n super(property);\n }\n\n public get visibility() {\n return this._visibility;\n }\n\n /**\n * sets column's title and returns this column\n * @param title title to be set\n * @param override should column title if all ready set?\n */\n public override withTitle(title: string, override = false): this {\n if (this._title == null || override) {\n this._title = title;\n }\n return this;\n }\n\n /**\n * defines automatic type and returns this column\n * @param value\n */\n public withAutomaticType(value: string): this {\n columnToDateNumberOrBoolean(this, value);\n return this;\n }\n\n /**\n * sets visibility state for column and returns this column\n * @param visibility\n */\n public withVisibility(visibility: boolean): this {\n this._visibility = visibility;\n return this;\n }\n\n /**\n * creates deep copy of column dynamic descriptor\n */\n public override copy(): ColumnDynamicDescriptor {\n const descriptor = new ColumnDynamicDescriptor(this._property);\n this.copyFieldsTo(descriptor);\n descriptor._title = this._title;\n descriptor._visibility = this._visibility;\n return descriptor;\n }\n\n public toColumnDescriptor(): ColumnDescriptor<any, any> {\n const descriptor = new ColumnDescriptor(this._property);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n}\n","export class SortDescriptor<TableModel> {\n protected readonly _property: string;\n protected _showOnColumn: string;\n\n protected _defaultIsEnabled = false;\n protected _defaultIsAscending = true;\n protected _defaultOrder?: number = undefined;\n\n constructor(property: string) {\n this._property = property;\n this._showOnColumn = property;\n }\n\n public get property() {\n return this._property;\n }\n\n public get showOnColumn() {\n return this._showOnColumn;\n }\n\n public get defaultIsEnabled() {\n return this._defaultIsEnabled;\n }\n\n public get defaultIsAscending() {\n return this._defaultIsAscending;\n }\n\n public get defaultOrder() {\n return this._defaultOrder;\n }\n\n /**\n * Shows sort on column for giver property.\n *\n * @param property Column property.\n */\n public withShowOnColumn(property: keyof TableModel): this {\n return this.withShowOnColumnUnsafe(property as string);\n }\n\n /**\n * Shows sort on column for giver property.\n *\n * This function is UNSAFE!\n *\n * @param property Column property.\n */\n public withShowOnColumnUnsafe(property: string): this {\n this._showOnColumn = property;\n return this;\n }\n\n /**\n * Sets the default sort for this descriptor.\n *\n * @param {boolean} enabled - Enables/disables the feature. Default is true.\n * @param {boolean} [ascending] - If the sort is ascending. Default is true.\n * @param {number} [order] - Order index in case of multiple default sorts.\n */\n public withDefaultSort(enabled = true, ascending?: boolean, order?: number): this {\n this._defaultIsEnabled = enabled;\n this._defaultIsAscending = ascending ?? true;\n this._defaultOrder = order;\n return this;\n }\n\n /**\n * Copies current descriptor to a new instance.\n */\n public copy(): SortDescriptor<TableModel> {\n const descriptor = new SortDescriptor<TableModel>(this._property);\n descriptor._defaultIsEnabled = this._defaultIsEnabled;\n descriptor._defaultIsAscending = this._defaultIsAscending;\n descriptor._defaultOrder = this._defaultOrder;\n return descriptor;\n }\n}\n","export enum TablePaginationModeEnum {\n Pagination,\n None\n}\n\nexport enum TableSizeEnum {\n Small,\n Normal,\n Large\n}\n\n/**\n * EXCLUDE default, all columns has sort and filter on by default, developer EXCLUDES properties from sort/filter\n * INCLUDE_ONLY only selected columns have sort/filter, developers INCLUDES properties\n */\nexport enum TableDynamicColumnsModeEnum {\n EXCLUDE,\n INCLUDE_ONLY\n}\n\nexport interface TableLayoutPreferences {\n columnWidths?: Record<string, number>;\n columnOrder?: string[];\n columnHidden?: string[];\n}\n","import {Type} from '@angular/core';\n\nimport {CommonsInternalError, DataListResult, EnumConstantType, ILookupDataProvider, ITableDescriptor, flattenObjectKeys} from '@mediusinc/mng-commons/core';\nimport {\n FilterDescriptor,\n FilterDisplayTypeEnum,\n FilterGenericDescriptor,\n FilterGenericProperty,\n FilterLookupDescriptor,\n FilterLookupEnumDescriptor,\n FilterTypeEnum\n} from '@mediusinc/mng-commons/filter';\nimport {LookupDataProviderInst} from '@mediusinc/mng-commons/form/api';\nimport {EnumDescriptor, ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {columnToDateNumberOrBoolean} from '../helpers/column-converter';\nimport {ColumnDisplayTypeEnum, ColumnTypeEnum} from '../models/column.model';\nimport {IRowExpandableComponent} from '../models/row-expandable-component.model';\nimport {IColumnsManageInterface} from '../models/table-columns.model';\nimport {TableDynamicColumnsModeEnum, TablePaginationModeEnum, TableSizeEnum} from '../models/table.model';\nimport {ColumnDescriptor, ColumnDynamicDescriptor} from './column.descriptor';\nimport {SortDescriptor} from './sort.descriptor';\n\nexport class TableDescriptorInst<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>\n implements ITableDescriptor<TableModel, Sorts, Filters>, IColumnsManageInterface<TableModel, Sorts, Filters>\n{\n private readonly _model: ModelDescriptor<TableModel>;\n protected readonly _autoGenerated;\n\n private _identifier?: string;\n private _trackProperty?: string;\n private _paginationMode?: TablePaginationModeEnum;\n private _rowsPerPageOptions?: number[];\n private _defaultNumRows?: number;\n protected _columns: Array<ColumnDescriptor<any, TableModel>> = [];\n private _title?: string;\n private _hideHeader = false;\n private _loadingText?: string;\n private _loadingIcon: string | null = 'pi pi-spinner';\n\n // extra\n private _hasHover = true;\n private _hasGridlines = false;\n private _hasResizableColumns = false;\n private _columnResizeMode?: 'fit' | 'expand';\n\n // special columns\n private _selectionColumnFrozen?: boolean;\n private _actionColumnFrozen?: boolean;\n\n // styling\n private _size: TableSizeEnum = TableSizeEnum.Large;\n private _className = '';\n private _headerClassName?: string;\n private _rowClassName?: string;\n private _rowClassNameMapFn?: (className?: string, item?: TableModel) => string;\n\n // filters&sorts\n private _filters: FilterDescriptor<any, TableModel>[] = [];\n private _genericFilter?: FilterGenericDescriptor;\n private _sorts: SortDescriptor<TableModel>[] = [];\n\n // localization\n private _isLocalized = false;\n private _localizationLocaleProperty?: string;\n\n // row expand\n private _rowExpandable = false;\n private _rowExpandableColSpan = 100;\n private _rowExpandableProperty?: string;\n private _isRowExpanded?: string | ((item: TableModel) => boolean);\n private _rowExpandableComponentType?: Type<IRowExpandableComponent<TableModel>>;\n\n // row reorder\n private _rowReorderable = false;\n\n private _search?: boolean;\n private _searchLimitMaxWords?: number | null;\n private _searchFields?: string[];\n\n public constructor(model: ModelDescriptor<TableModel>, autoGenerated = false) {\n this._model = model;\n this._trackProperty = this._model.idProperty;\n this._autoGenerated = autoGenerated;\n }\n\n public get identifier() {\n return this._identifier;\n }\n\n public get trackProperty() {\n return this._trackProperty;\n }\n\n public get paginationMode() {\n return this._paginationMode;\n }\n\n get rowsPerPageOptions() {\n return this._rowsPerPageOptions;\n }\n\n get defaultNumRows() {\n return this._defaultNumRows;\n }\n\n public get columns() {\n return this._columns;\n }\n\n public get title() {\n return this._title;\n }\n\n public get hideHeader() {\n return this._hideHeader;\n }\n\n public get loadingText() {\n return this._loadingText;\n }\n\n public get loadingIcon() {\n return this._loadingIcon;\n }\n\n public get filters() {\n return this._filters;\n }\n\n public get genericFilter() {\n return this._genericFilter;\n }\n\n public get sorts() {\n return this._sorts;\n }\n\n public get model() {\n return this._model;\n }\n\n public get search() {\n return this._search;\n }\n\n public get searchLimitMaxWords() {\n return this._searchLimitMaxWords;\n }\n\n public get searchFields() {\n return this._searchFields;\n }\n\n public get className() {\n return this._className;\n }\n\n public get size() {\n return this._size;\n }\n\n public get hasHover() {\n return this._hasHover;\n }\n\n public get hasGridlines() {\n return this._hasGridlines;\n }\n\n public get hasResizableColumns() {\n return this._hasResizableColumns;\n }\n\n public get columnResizeMode() {\n return this._columnResizeMode;\n }\n\n public get rowClassName() {\n return this._rowClassName;\n }\n\n public get rowClassNameMapFn() {\n return this._rowClassNameMapFn;\n }\n\n public get selectionColumnFrozen() {\n return this._selectionColumnFrozen;\n }\n\n public get actionColumnFrozen() {\n return this._actionColumnFrozen;\n }\n\n public get headerClassName() {\n return this._headerClassName;\n }\n\n public get isLocalized() {\n return this._isLocalized;\n }\n\n public get localizationLocaleProperty() {\n return this._localizationLocaleProperty;\n }\n\n public get rowReorderable() {\n return this._rowReorderable;\n }\n\n public get rowExpandable() {\n return this._rowExpandable;\n }\n\n public get rowExpandableColSpan() {\n return this._rowExpandableColSpan;\n }\n\n /**\n * This table model property tells us if the specific row should be expandable or not based on row item value\n */\n public get rowExpandableProperty() {\n return this._rowExpandableProperty;\n }\n\n /**\n * This table model property tells us when the table row should be expanded by default, without clicking on the toggle button.\n */\n public get isRowExpanded() {\n return this._isRowExpanded;\n }\n\n /**\n * This property is used to define the type of the custom component that will be used to render the expanded row.\n */\n public get rowExpandableComponentType() {\n return this._rowExpandableComponentType;\n }\n\n /**\n * Identifier is used for the purpose of combined saving user preferences in localstorage if 2 tables have the same track properties they will share the same localstorage entry.\n * Similarly, this property can also be used to differentiate two tables of the same model on the same url (so that they have separate entries in localstorage).\n * @param identifier\n */\n public withIdentifier(identifier: string): this {\n this._identifier = identifier;\n return this;\n }\n\n /**\n * Sets the track property (identifier of table row) for the table.\n *\n * @param {keyof TableModel} property - The property to track the row items by.\n */\n public withTrackProperty(property?: keyof TableModel): this {\n return this.withTrackPropertyUnsafe(property as string);\n }\n\n /**\n * Sets the track property (identifier of table row) for the table.\n *\n * This function is UNSAFE!\n *\n * @param {string} property - The property to set '_trackProperty' to.\n */\n public withTrackPropertyUnsafe(property?: string): this {\n this._trackProperty = property;\n return this;\n }\n\n /**\n * Retrieves the column descriptor for the given property.\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n *\n * @return The column descriptor.\n */\n public getColumn<Property extends keyof TableModel, ColumnModel = NonNullable<TableModel[Property]>, ColumnValue = TableModel[Property]>(\n property: Property\n ): ColumnDescriptor<ColumnModel, TableModel, ColumnValue> | null {\n return this.getColumnUnsafe<ColumnModel, ColumnValue>(property as string);\n }\n\n /**\n * Retrieves the column descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n *\n * @return The column descriptor.\n */\n public getColumnUnsafe<ColumnModel = any, ColumnValue = ColumnModel>(property: string): ColumnDescriptor<ColumnModel, TableModel, ColumnValue> | null {\n return this._columns.find(col => col.property === property) ?? null;\n }\n\n /**\n * Removes the column descriptor for the given property.\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n */\n public removeColumn(property: keyof TableModel): void {\n this.removeColumnUnsafe(property as string);\n }\n\n /**\n * Removes the column descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n */\n public removeColumnUnsafe(property: string): void {\n const columnIdx = this._columns.findIndex(c => c.property === property);\n this._columns.splice(columnIdx, 1);\n }\n\n /**\n * Adds column descriptor to table columns.\n *\n * @param {ColumnDescriptor<ColumnModel, TableModel, ColumnValue>} column - The property for column descriptor.\n */\n public withColumn<ColumnModel, ColumnValue = ColumnModel>(column: ColumnDescriptor<ColumnModel, TableModel, ColumnValue>): this {\n this._columns.push(column);\n return this;\n }\n\n /**\n * Adds a column to the table.\n *\n * @param {PropertyKey} property - The property key of the column in the table model.\n *\n * @returns The newly added column descriptor.\n */\n public addColumn<PropertyKey extends keyof TableModel>(property: PropertyKey) {\n const column = new ColumnDescriptor<NonNullable<TableModel[PropertyKey]>, TableModel, TableModel[PropertyKey]>(property as string);\n this._columns.push(column);\n return column;\n }\n\n /**\n * Adds a column with enum display to the table.\n *\n * @param {PropertyKey} property - The property key of the table model.\n * @param {EnumDescriptor<Enum>} enumDesc - The enum descriptor for column display.\n * @return {ColumnDescriptor<Enum, TableModel, TableModel[PropertyKey]>} - The added column descriptor.\n */\n public addColumnEnum<PropertyKey extends keyof TableModel, Enum extends NonNullable<TableModel[PropertyKey]>>(property: PropertyKey, enumDesc: EnumDescriptor<Enum>) {\n const column = new ColumnDescriptor<Enum, TableModel, TableModel[PropertyKey]>(property as string);\n column.asEnumUnsafe(enumDesc);\n this._columns.push(column);\n return column;\n }\n\n /**\n * Adds a column to the table.\n *\n * This function is UNSAFE!\n *\n * @param {string} property - The property key of the column in the table model.\n *\n * @returns The newly added column descriptor.\n */\n public addColumnUnsafe<ColumnModel = unknown>(property: string): ColumnDescriptor<ColumnModel, TableModel> {\n const column = new ColumnDescriptor<ColumnModel, TableModel>(property);\n this._columns.push(column);\n return column;\n }\n\n /**\n * Adds one or more columns to the table model.\n *\n * @param properties - An array of property names to add as columns.\n */\n public withColumns(...properties: (keyof TableModel)[]): this {\n properties.forEach(p => this.addColumn(p));\n return this;\n }\n\n /**\n * Set the pagination mode for the table.\n *\n * @param {TablePaginationModeEnum} paginationMode - The pagination mode to set. Must be one of the values from the TablePaginationModeEnum.\n */\n public withPaginationMode(paginationMode: TablePaginationModeEnum): this {\n this._paginationMode = paginationMode;\n return this;\n }\n\n /**\n * Sets the number of rows per page for a paginated display.\n *\n * @param {number} rows - The default number of rows to display per page.\n * @param {Array<number>} [options] - Rows per page options to be available in table paginator.\n */\n public withRowsPerPage(rows: number, options?: Array<number>): this {\n this._defaultNumRows = rows;\n this._rowsPerPageOptions = options;\n return this;\n }\n\n /**\n * Sets the title for an instance of the class.\n *\n * @param {string} [title] - The title value to be set. It undefined, no title will be displayed.\n */\n public withTitle(title?: string): this {\n this._title = title;\n\n return this;\n }\n\n /**\n * Shows/hides the header row with column titles.\n *\n * @param {boolean} hideHeader - A boolean value indicating whether to hide the header.\n */\n public withHideHeader(hideHeader = true) {\n this._hideHeader = hideHeader;\n return this;\n }\n\n /**\n * Adjusts loading display with custom text and/or icon.\n *\n * @param {string} [text] - Text to be displayed when loading indicator is shown.\n * @param {string | null} [icon] - Icon to be used when loading indicator is shown.\n */\n public withLoading(text?: string, icon?: string | null): this {\n this._loadingText = text;\n this._loadingIcon = icon === undefined ? 'pi pi-spinner' : icon;\n return this;\n }\n\n /**\n * Retrieves the sort descriptor for a given property.\n *\n * @param {Sorts} property - The property to retrieve the sort for.\n *\n * @return {SortDescriptor<TableModel> | null} The sort descriptor or null.\n */\n public getSort(property: Sorts): SortDescriptor<TableModel> | null {\n return this.getSortUnsafe(property as string);\n }\n\n /**\n * Retrieves the sort descriptor for a given property.\n *\n * This function is UNSAFE!\n *\n * @param {Sorts} property - The property to retrieve the sort for.\n *\n * @return {SortDescriptor<TableModel> | null} The sort descriptor or null.\n */\n public getSortUnsafe(property: string): SortDescriptor<TableModel> | null {\n return this._sorts.find(s => s.property === property) ?? null;\n }\n\n /**\n * Removes the sort for a given property.\n *\n * @param {Sorts} property - The property to remove the sort for.\n */\n public removeSort(property: Sorts) {\n return this.removeSortUnsafe(property as string);\n }\n\n /**\n * Removes the sort for a given property.\n *\n * This function is UNSAFE!\n *\n * @param {Sorts} property - The property to remove the sort for.\n */\n public removeSortUnsafe(property: string) {\n const sortIdx = this._sorts.findIndex(c => c.property === property);\n this._sorts.splice(sortIdx, 1);\n }\n\n /**\n * Adds sort for the given property.\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n *\n * @return Created sort descriptor.\n */\n public addSort(property: Sorts, isDefault = false, ascending?: boolean): SortDescriptor<TableModel> {\n return this.addSortUnsafe(property as string, isDefault, ascending);\n }\n\n /**\n * Adds sort for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n\n * @return Created sort descriptor.\n */\n public addSortUnsafe(property: string, isDefault = false, ascending?: boolean): SortDescriptor<TableModel> {\n const sort = new SortDescriptor<TableModel>(property);\n if (isDefault) {\n const defaultOrderMax = this._sorts\n .filter(s => s.defaultIsEnabled)\n .reduce((acc, s) => (s.defaultOrder !== undefined && s.defaultOrder > acc ? s.defaultOrder : acc), -1);\n sort.withDefaultSort(true, ascending, defaultOrderMax + 1);\n }\n this._sorts.push(sort);\n return sort;\n }\n\n /**\n * Adds sort for the given property.\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n */\n public withSort(property: Sorts, isDefault = false, ascending?: boolean): this {\n return this.withSortUnsafe(property as string, isDefault, ascending);\n }\n\n /**\n * Adds sort for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n */\n public withSortUnsafe(property: string, isDefault = false, ascending?: boolean): this {\n this.addSortUnsafe(property, isDefault, ascending);\n return this;\n }\n\n /**\n * Sets the default sorting for the property.\n *\n * @param property - The property to set default sort for.\n * @param ascending - If the sorting should be ascending (default: true).\n * @param enabled - Enables/disabled the default sort.\n */\n public withDefaultSort(property: Sorts, ascending?: boolean, enabled?: boolean): this {\n return this.withDefaultSortUnsafe(property as string, ascending, enabled);\n }\n\n /**\n * Sets the default sorting for the property.\n *\n * This function is UNSAFE!\n *\n * @param property - The property to set default sort for.\n * @param ascending - If the sorting should be ascending (default: true).\n * @param enabled - Enables/disabled the default sort.\n */\n public withDefaultSortUnsafe(property: string, ascending?: boolean, enabled?: boolean): this {\n let sort = this._sorts.find(s => s.property === property);\n if (!sort) {\n sort = new SortDescriptor(property);\n this._sorts.push(sort);\n }\n const order = this._sorts.filter(s => s.defaultIsEnabled).reduce((acc, s) => (s.defaultOrder == null || s.defaultOrder < acc ? acc : s.defaultOrder + 1), 0);\n sort.withDefaultSort(enabled ?? true, ascending, order);\n return this;\n }\n\n /**\n * Sets the default sorting for provided properties.\n *\n * @param properties - The properties to set default sort for.\n */\n public withDefaultSorts(...properties: Sorts[]): this {\n properties.forEach(p => this.withDefaultSortUnsafe(p as string));\n return this;\n }\n\n /**\n * Unsets all default sorts.\n */\n public withoutDefaultSorts(): this {\n this._sorts.forEach(s => s.withDefaultSort(false, undefined, undefined));\n return this;\n }\n\n /**\n * Add sorts for more properties.\n *\n * @param properties Properties to add the sorts for.\n */\n public withSorts(...properties: Sorts[]): this {\n return this.withSortsUnsafe(...(properties as string[]));\n }\n\n /**\n * Add sorts for more properties.\n *\n * This function is UNSAFE!\n *\n * @param properties Properties to add the sorts for.\n */\n public withSortsUnsafe(...properties: string[]): this {\n properties.forEach(p => {\n this._sorts.push(new SortDescriptor(p));\n });\n return this;\n }\n\n /**\n * Gets filter descriptor for given property.\n *\n * @param property Filter property\n *\n * @return Filter descriptor for property or null if not exists.\n */\n public getFilter<FilterModel = Filters extends keyof TableModel ? NonNullable<TableModel[Filters]> : any>(property: Filters): FilterDescriptor<FilterModel, TableModel> | null {\n return this.getFilterUnsafe<FilterModel>(property as string);\n }\n\n /**\n * Gets filter descriptor for given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property\n *\n * @return Filter descriptor for property or null if not exists.\n */\n public getFilterUnsafe<FilterModel = any>(property: string): FilterDescriptor<FilterModel, TableModel> | null {\n return this._filters.find(s => s.property === property) ?? null;\n }\n\n /**\n * Removes filter descriptor for given property.\n *\n * @param property Filter property\n */\n public removeFilter(property: Filters) {\n return this.removeFilterUnsafe(property as string);\n }\n\n /**\n * Removes filter descriptor for given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property\n */\n public removeFilterUnsafe(property: string) {\n const filterIdx = this._filters.findIndex(c => c.property === property);\n this._filters.splice(filterIdx, 1);\n }\n\n /**\n * Creates filter descriptor for the given property.\n *\n * @param property Filter property.\n *\n * @return Created filter descriptor.\n */\n public addFilter<FilterModel = Filters extends keyof TableModel ? TableModel[Filters] : never>(property: Filters): FilterDescriptor<FilterModel, TableModel> {\n return this.addFilterUnsafe<FilterModel>(property as string);\n }\n\n /**\n * Creates filter descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n *\n * @return Created filter descriptor.\n */\n public addFilterUnsafe<FilterModel>(property: string): FilterDescriptor<FilterModel, TableModel> {\n const filter = new FilterDescriptor<FilterModel, TableModel>(property);\n this._filters.push(filter);\n return filter;\n }\n\n /**\n * Creates filter lookup descriptor for the given property.\n *\n * @param property Filter property.\n * @param provider Lookup provider.\n * @param optionsValueProperty Property on lookup provider's item (FilterModel) that will be used as filter value.\n *\n * @return Created filter lookup descriptor.\n */\n public addFilterLookup<FilterModel = Filters extends keyof TableModel ? NonNullable<TableModel[Filters]> : never, Service = undefined>(\n property: Filters,\n provider?: ILookupDataProvider<FilterModel, Service, any, any>,\n optionsValueProperty?: keyof FilterModel\n ): FilterLookupDescriptor<FilterModel, TableModel, Service> {\n return this.addFilterLookupUnsafe(property as string, provider, optionsValueProperty as string);\n }\n\n /**\n * Creates filter lookup descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n * @param provider Lookup provider.\n * @param optionsValueProperty Property on lookup provider's item (FilterModel) that will be used as filter value.\n *\n * @return Created filter lookup descriptor.\n */\n public addFilterLookupUnsafe<FilterModel, Service = undefined>(\n property: string,\n provider?: ILookupDataProvider<FilterModel, Service, any, any>,\n optionsValueProperty?: string\n ): FilterLookupDescriptor<FilterModel, TableModel, Service> {\n const filter = new FilterLookupDescriptor<FilterModel, TableModel, Service>(property, {\n dataProvider: provider,\n optionsValueProperty: optionsValueProperty\n });\n this._filters.push(filter);\n return filter;\n }\n\n /**\n * Creates filter lookup enum descriptor for the given property.\n *\n * @param property Filter property.\n * @param enumDesc Descriptor for enum.\n * @param options Optional options of enum values to be available to filter by.\n *\n * @return Created filter lookup enum descriptor.\n */\n public addFilterLookupEnum<Enum>(property: Filters, enumDesc: EnumDescriptor<Enum>, options?: Array<Enum>) {\n return this.addFilterLookupEnumUnsafe<Enum>(property as string, enumDesc, options);\n }\n\n /**\n * Creates filter lookup enum descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n * @param enumDesc Descriptor for enum.\n * @param options Optional options of enum values to be available to filter by.\n *\n * @return Created filter lookup enum descriptor.\n */\n public addFilterLookupEnumUnsafe<Enum = EnumConstantType>(property: string, enumDesc: EnumDescriptor<Enum>, options?: Array<Enum>) {\n const filter = new FilterLookupEnumDescriptor(property, enumDesc, options);\n this._filters.push(filter);\n return filter;\n }\n\n /**\n * Creates filter descriptor from column. The column must exist on table descriptor.\n *\n * @param property Column property to add filter for.\n * @param displayType Optional display type setting.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n public addFilterFromColumn<Property extends keyof TableModel, FilterModel = NonNullable<TableModel[Property]>>(\n property: Extract<Filters, Property>,\n displayType?: FilterDisplayTypeEnum,\n forceSimple = false\n ): FilterDescriptor<FilterModel, TableModel> {\n return this.addFilterFromColumnUnsafe(property as string, displayType, forceSimple);\n }\n\n public addGenericFilter(propertyLookupDataProvider: LookupDataProviderInst<FilterGenericProperty>): FilterGenericDescriptor {\n this._genericFilter = new FilterGenericDescriptor(propertyLookupDataProvider);\n return this._genericFilter;\n }\n\n public withGenericFilter(\n propertyLookupDataProvider: LookupDataProviderInst<FilterGenericProperty>,\n valueLookupDataProvider?: LookupDataProviderInst<string, any, any, 'field'>\n ): this {\n this._genericFilter = this.addGenericFilter(propertyLookupDataProvider);\n\n if (valueLookupDataProvider) {\n this._genericFilter.withValueLookup(valueLookupDataProvider);\n }\n return this;\n }\n\n /**\n * Creates filter descriptors from columns. The columns must exist on table descriptor.\n *\n * @param properties Column properties to add filters for.\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n */\n public withFiltersFromColumns(...properties: Extract<Filters, keyof TableModel>[]): this {\n return this.withFiltersFromColumnsUnsafe(...(properties as string[]));\n }\n\n /**\n * Creates filter descriptors from columns. The columns must exist on table descriptor.\n *\n * This function is UNSAFE!\n *\n * @param properties Column properties to add filters for.\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n */\n public withFiltersFromColumnsUnsafe(...properties: string[]): this {\n properties.forEach(p => {\n this.addFilterFromColumnUnsafe(p);\n });\n return this;\n }\n\n /**\n * Creates filter descriptor from column. The column must exist on table descriptor.\n *\n * This function is UNSAFE!\n *\n * @param property Column property to add filter for.\n * @param displayType Optional display type setting.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n public addFilterFromColumnUnsafe<FilterModel = any>(property: string, displayType?: FilterDisplayTypeEnum, forceSimple = false): FilterDescriptor<FilterModel, TableModel> {\n const column = this.getColumnUnsafe<FilterModel, any>(property);\n if (!column) {\n throw new CommonsInternalError(`No column found for filter property \"${property}\"`);\n }\n const filter = this.addFilterFromColumnDescriptorUnsafe<FilterModel>(column, forceSimple);\n if (displayType != null) filter.withDisplayType(displayType);\n return filter;\n }\n\n /**\n * Creates filter descriptor from provided column descriptor.\n *\n * This function is UNSAFE!\n *\n * @param column Column descriptor.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n public addFilterFromColumnDescriptorUnsafe<FilterModel>(\n column: ColumnDescriptor<FilterModel, TableModel, any>,\n forceSimple = false\n ): FilterDescriptor<FilterModel, TableModel> {\n let filterDescriptor = new FilterDescriptor<FilterModel, TableModel>(column.property);\n let filterType: FilterTypeEnum;\n\n switch (column.columnType) {\n case ColumnTypeEnum.Number:\n filterType = FilterTypeEnum.Number;\n break;\n case ColumnTypeEnum.Boolean:\n filterType = FilterTypeEnum.Boolean;\n break;\n case ColumnTypeEnum.Date:\n filterType = FilterTypeEnum.Date;\n break;\n case ColumnTypeEnum.Enum:\n if (!forceSimple && column.enum) {\n filterDescriptor = new FilterLookupEnumDescriptor(column.property, column.enum) as FilterDescriptor<FilterModel, TableModel>;\n filterType = FilterTypeEnum.LookupEnum;\n } else {\n filterType = FilterTypeEnum.String;\n }\n break;\n case ColumnTypeEnum.String:\n case ColumnTypeEnum.Custom:\n default:\n filterType = FilterTypeEnum.String;\n break;\n }\n\n filterDescriptor.asFilterType(filterType);\n if ((filterType === FilterTypeEnum.Number || filterType === FilterTypeEnum.Date) && column.displayFormat) {\n filterDescriptor.withDisplayFormat(column.displayFormat, true);\n }\n\n this._filters.push(filterDescriptor);\n\n return filterDescriptor;\n }\n\n /**\n * Adds filter descriptor for the given property.\n *\n * @param property Filter property.\n * @param filter Descriptor for property.\n */\n public withFilter<FilterModel>(property: Filters, filter: FilterDescriptor<FilterModel, TableModel>): this {\n if (filter.property !== property) {\n throw new CommonsInternalError(`Filter property \"${property}\" and Filter descriptor property \"${filter.property}\" do not match.`);\n }\n return this.withFilterUnsafe<FilterModel>(filter);\n }\n\n /**\n * Adds filter descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param filter Descriptor for property.\n */\n public withFilterUnsafe<FilterModel>(filter: FilterDescriptor<FilterModel, TableModel>): this {\n this._filters.push(filter);\n return this;\n }\n\n /**\n * Enables or disables the global search option for the table.\n *\n * @param {boolean} search - Indicates whether the global search should be enabled.\n * @param opts - Additional options for search. limitMaxWords can limit max words as search input and fields can limit\n * the filtering fields included in search when lazy load is not being used.\n */\n public withSearch(search = true, opts?: {limitMaxWords?: number | null; fields?: (keyof TableModel)[]}): this {\n return this.withSearchUnsafe(search, {\n fields: opts?.fields as string[] | undefined,\n limitMaxWords: opts?.limitMaxWords\n });\n }\n\n /**\n * Enables or disables the global search option for the table.\n *\n * @param {boolean} search - Indicates whether the global search should be enabled.\n * @param opts - Additional options for search. limitMaxWords can limit max words as search input and fields can limit\n * the filtering fields included in search when lazy load is not being used.\n */\n public withSearchUnsafe(search = true, opts?: {limitMaxWords?: number | null; fields?: string[]}): this {\n this._search = search;\n this._searchLimitMaxWords = opts?.limitMaxWords;\n this._searchFields = opts?.fields as string[] | undefined;\n return this;\n }\n\n /**\n * Sets classes for table component.\n *\n * @param className Class names.\n */\n public withClassName(className: string): this {\n this._className = className;\n return this;\n }\n\n /**\n * Sets table sizing.\n *\n * @param size Table size.\n */\n public withSize(size: TableSizeEnum = TableSizeEnum.Normal): this {\n this._size = size;\n return this;\n }\n\n /**\n * Enables hover effect on table rows.\n *\n * @param hover Enables/disables the hover.\n */\n public withHover(hover = true): this {\n this._hasHover = hover;\n return this;\n }\n\n /**\n * Enables gridlines on table.\n *\n * @param gridlines Enables/disables the gridlines.\n */\n public withGridlines(gridlines = true): this {\n this._hasGridlines = gridlines;\n return this;\n }\n\n /**\n * Enables/disables reorderable property on all columns currently in the descriptor.\n *\n * @param {boolean} [columnsReorderable] - Boolean flag to set reordering on columns to.\n */\n public withCurrentColumnsReorderable(columnsReorderable = true): this {\n for (const col of this.columns) {\n col.withReorderable(columnsReorderable);\n }\n return this;\n }\n\n /**\n * Enables/disables toggleable property on all columns currently in the descriptor.\n *\n * @param {boolean} [columnsToggleable] - Boolean flag to set toggleable on columns to.\n */\n public withCurrentColumnsToggleable(columnsToggleable = true): this {\n for (const col of this.columns) {\n col.withToggleable(columnsToggleable);\n }\n return this;\n }\n\n /**\n * Enables/disabled column resize feature with columnResizeMode on all columns.\n *\n * @param resizableColumns True if enabled\n * @param columnResizeMode 'fit' or 'expand' mode\n */\n public withColumnsResizable(resizableColumns = true, columnResizeMode: 'fit' | 'expand' = 'fit'): this {\n this._hasResizableColumns = resizableColumns;\n this._columnResizeMode = columnResizeMode;\n return this;\n }\n\n /**\n * Sets column to (un)frozen.\n *\n * @param selectionColumnFrozen True to freeze selection column, false to unfreeze it.\n * @param actionColumnFrozen True to freeze action column, false to unfreeze it.\n */\n public withColumnFrozen(selectionColumnFrozen?: boolean, actionColumnFrozen?: boolean): this {\n this._selectionColumnFrozen = selectionColumnFrozen;\n this._actionColumnFrozen = actionColumnFrozen;\n return this;\n }\n\n /**\n * Sets the class name for rows in the table.\n *\n * @param {string} rowClassName - The CSS class name to be applied to each row.\n * @param {function} [classNameMapFn] - Optional function to map the class name dynamically based on row's item and current class name.\n */\n public withRowClassName(rowClassName?: string, classNameMapFn?: (className?: string, item?: TableModel) => string): this {\n this._rowClassName = rowClassName;\n this._rowClassNameMapFn = classNameMapFn;\n return this;\n }\n\n /**\n * Sets header row class name.\n *\n * @param headerClassName Class name.\n */\n public withHeaderClassName(headerClassName: string): this {\n this._headerClassName = headerClassName;\n return this;\n }\n\n /**\n * Enables localization of the table.\n */\n public withLocalized(): this {\n this._isLocalized = true;\n return this;\n }\n\n /**\n * Sets locale property for localization.\n *\n * @param property Locale property\n */\n public withLocalizationLocaleProperty(property: string): this {\n this._isLocalized = true;\n this._localizationLocaleProperty = property;\n return this;\n }\n\n /**\n * Enables row expanding.\n *\n * @param property Property to check if row can be expanded.\n * @param colSpan set custom row span for expanded row.\n * @param componentType Component to be displayed on row expand.\n * @param isRowExpanded Property or function that tells the table to expand the row by default.\n */\n public withRowExpandable(\n property?: keyof TableModel,\n colSpan?: number,\n componentType?: Type<IRowExpandableComponent<TableModel>>,\n isRowExpanded?: string | ((item: TableModel) => boolean)\n ): this {\n this._rowExpandable = true;\n if (property) {\n this._rowExpandableProperty = property as string;\n }\n if (colSpan) {\n this._rowExpandableColSpan = colSpan;\n }\n if (componentType) {\n this._rowExpandableComponentType = componentType;\n }\n this._isRowExpanded = isRowExpanded;\n return this;\n }\n\n /**\n * Enables row reordering.\n *\n * @param reordable Enables/disables feature.\n */\n withRowReorderable(reordable = true) {\n this._rowReorderable = reordable;\n return this;\n }\n\n protected copyFieldsTo(obj: TableDescriptorInst<any, any, any>) {\n obj._title = this._title;\n obj._hideHeader = this._hideHeader;\n obj._trackProperty = this._trackProperty;\n obj._filters = this._filters.map(f => f.copy());\n obj._sorts = this._sorts.map(s => s.copy());\n obj._search = this._search;\n obj._searchLimitMaxWords = this._searchLimitMaxWords;\n obj._searchFields = this._searchFields ? [...this._searchFields] : undefined;\n obj._className = this._className;\n obj._size = this._size;\n obj._hasHover = this._hasHover;\n obj._hasGridlines = this._hasGridlines;\n obj._hasResizableColumns = this._hasResizableColumns;\n obj._columnResizeMode = this._columnResizeMode;\n obj._actionColumnFrozen = this._actionColumnFrozen;\n obj._selectionColumnFrozen = this._selectionColumnFrozen;\n obj._isLocalized = this._isLocalized;\n obj._localizationLocaleProperty = this._localizationLocaleProperty;\n obj._paginationMode = this._paginationMode;\n obj._rowsPerPageOptions = this._rowsPerPageOptions;\n obj._rowExpandable = this._rowExpandable;\n obj._rowExpandableColSpan = this._rowExpandableColSpan;\n obj._rowExpandableProperty = this._rowExpandableProperty;\n obj._isRowExpanded = this.isRowExpanded;\n obj._rowExpandableComponentType = this._rowExpandableComponentType;\n obj._rowReorderable = this._rowReorderable;\n obj._genericFilter = this._genericFilter?.copy();\n }\n\n /**\n * Copies current descriptor to a new instance.\n */\n public copy(): TableDescriptorInst<TableModel, Sorts, Filters> {\n const descriptor = new TableDescriptorInst<TableModel, Sorts, Filters>(this.model.copy());\n this.copyFieldsTo(descriptor);\n descriptor._columns = this.columns.map(c => c.copy());\n return descriptor;\n }\n}\n\nexport class TableDynamicDescriptorInst extends TableDescriptorInst<any> {\n private _excludedColumns: Array<string> = [];\n private _filterColumns: Array<string> = [];\n private _sortColumns: Array<string> = [];\n private _sortColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;\n private _filterColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;\n\n protected override _columns: ColumnDynamicDescriptor[] = [];\n\n public constructor(model: ModelDescriptor<any>) {\n super(model);\n\n if (typeof model.titleProperty === 'string') {\n this.withTitle(model.titleProperty);\n }\n }\n\n public override get columns() {\n return this._columns;\n }\n\n /**\n * defines excluded columns when generating descriptor\n * @param excludedColumn names of excluded columns\n */\n public withColumnsExcluded(excludedColumn: string[]): this {\n this._excludedColumns = excludedColumn;\n return this;\n }\n\n /**\n * defines column properties on which sort is defined or not depending on sortColumnMode\n * @param sortOnColumns column names\n * @param sortColumnMode INCLUDE_ONLY (default) only given columns will have sort, EXCLUDE given columns will NOT have sort\n */\n public withColumnsSort(sortOnColumns: string[], sortColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY): this {\n this._sortColumnMode = sortColumnMode;\n this._sortColumns = sortOnColumns;\n return this;\n }\n\n /**\n * defines column properties on which filter is defined or not depending on filterColumnMode\n * @param filterOnColumn column names\n * @param filterColumnMode INCLUDE_ONLY (default) only given columns will have filter, EXCLUDE given columns will NOT have filter\n */\n public withColumnsFilter(filterOnColumn: string[], filterColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY): this {\n this._filterColumnMode = filterColumnMode;\n this._filterColumns = filterOnColumn;\n return this;\n }\n\n /**\n * sets given type to column with given property and returns this table\n * @param property column's property\n * @param type custom type for column\n * @param displayType custom column value display type\n * @param args addition arguments for column\n */\n public withColumnPresetType(property: string, type: ColumnTypeEnum, displayType?: ColumnDisplayTypeEnum, ...args: any[]): this {\n const column = this._columns.find(col => property === col.property) ?? this.addColumn(property).withTitle(property);\n if (column) {\n column.asType(type, displayType, ...args);\n }\n return this;\n }\n\n /**\n * sets title to column with given property and returns this table\n * @param property column's property\n * @param title column's title\n */\n public withColumnTitle(property: string, title: string): this {\n const column = this._columns.find(col => property === col.property) ?? this.addColumn(property);\n column.withTitle(title);\n return this;\n }\n\n /**\n * generates columns defined on table based on data fetched from api\n * @param data data from api\n */\n public toTableDescriptorFromData(data: DataListResult): TableDescriptorInst<any> {\n const tableDescriptor = this.toTableDescriptor();\n\n if (data.data == null || data.data.length == 0) {\n return tableDescriptor;\n }\n\n const objectModel = data.data[0];\n const entries = flattenObjectKeys(objectModel)\n .filter(([key]) => !this._excludedColumns.includes(key))\n .filter(([, value]) => !Array.isArray(value)); //exclude arrays and sets\n\n for (const [key, value] of entries) {\n const metaColumn = this._columns.find(col => col.property === key);\n let column: ColumnDescriptor<any, any>;\n if (metaColumn) {\n if (!metaColumn.visibility) {\n continue;\n }\n column = metaColumn.toColumnDescriptor();\n tableDescriptor.withColumn(column);\n } else {\n column = tableDescriptor.addColumn(key).withTitle(key);\n columnToDateNumberOrBoolean(column, value);\n }\n\n if (this.model.i18nBaseKey && !column.property.includes('rev')) {\n column.withTitle([this.model.i18nBaseKey, 'properties', column.property].join('.').replace('state.', ''));\n }\n\n const elementOfSortColumns = this._sortColumns.includes(column.property);\n if (\n (this._sortColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfSortColumns) ||\n (this._sortColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfSortColumns)\n ) {\n tableDescriptor.withSortUnsafe(column.property);\n }\n\n const elementOfFilterColumns = this._filterColumns.includes(column.property);\n if (\n this._filterColumns.length > 0 &&\n ((this._filterColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfFilterColumns) ||\n (this._filterColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfFilterColumns))\n ) {\n tableDescriptor.addFilterFromColumnDescriptorUnsafe(column, false);\n }\n }\n\n return tableDescriptor;\n }\n\n /**\n * adds ColumnDynamicDescriptor to this table\n * @param property column's property\n */\n public override addColumn(property: keyof any): ColumnDynamicDescriptor {\n const column = new ColumnDynamicDescriptor(property as string);\n this._columns.push(column);\n return column;\n }\n\n public override removeColumn(property: keyof any): this {\n const column = this.columns.find(col => col.property === property) ?? this.addColumn(property);\n column.withVisibility(false);\n return this;\n }\n\n /**\n * creates deep copy of table dynamic descriptor\n */\n public override copy(): TableDynamicDescriptorInst {\n const descriptor = new TableDynamicDescriptorInst(this.model.copy());\n this.copyFieldsTo(descriptor);\n descriptor._columns = this.columns.map(c => c.copy());\n descriptor._excludedColumns = [...this._excludedColumns];\n descriptor._filterColumns = [...this._filterColumns];\n descriptor._sortColumns = [...this._sortColumns];\n descriptor._filterColumnMode = this._filterColumnMode;\n descriptor._sortColumnMode = this._sortColumnMode;\n return descriptor;\n }\n\n public toTableDescriptor(): TableDescriptorInst<any> {\n const descriptor = new TableDescriptorInst<any>(this.model);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n}\n","import {ModelDescriptor, ModelDescriptorCreateOpts, TypeDescriptor, model} from '@mediusinc/mng-commons/model';\n\nimport {TableDescriptorInst, TableDynamicDescriptorInst} from './table.descriptor';\n\nexport type TableDescriptorSortsFiltersCreateOptsType<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel> = {\n filtersType?: TypeDescriptor<Filters> | ModelDescriptor<Filters>;\n sortsType?: TypeDescriptor<Sorts> | ModelDescriptor<Sorts>;\n};\n\nexport type TableDescriptorCreateOptsType<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel> = TableDescriptorSortsFiltersCreateOptsType<\n TableModel,\n Sorts,\n Filters\n> &\n ModelDescriptorCreateOpts<TableModel>;\n\nexport function tableDescriptor<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>(): TableDescriptorInst<TableModel, Sorts, Filters>;\nexport function tableDescriptor<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>(\n opts: TableDescriptorCreateOptsType<TableModel, Sorts, Filters>\n): TableDescriptorInst<TableModel, Sorts, Filters>;\nexport function tableDescriptor<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>(\n model: ModelDescriptor<TableModel>,\n opts?: TableDescriptorSortsFiltersCreateOptsType<TableModel, Sorts, Filters>\n): TableDescriptorInst<TableModel, Sorts, Filters>;\nexport function tableDescriptor<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>(\n opts?: TableDescriptorCreateOptsType<TableModel, Sorts, Filters>\n): TableDescriptorInst<TableModel, Sorts, Filters>;\nexport function tableDescriptor<TableModel, Sorts = keyof TableModel, Filters = keyof TableModel>(\n modelOrOpts?: ModelDescriptor<TableModel> | TableDescriptorCreateOptsType<TableModel>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n opts?: TableDescriptorCreateOptsType<TableModel, Sorts, Filters>\n) {\n if (modelOrOpts == null) {\n return new TableDescriptorInst<TableModel, Sorts, Filters>(model<TableModel>());\n } else if (modelOrOpts instanceof ModelDescriptor) {\n return new TableDescriptorInst<TableModel, Sorts, Filters>(modelOrOpts);\n } else {\n // this could have autoGenerated if model descriptor is class\n return new TableDescriptorInst<TableModel, Sorts, Filters>(model<TableModel>(modelOrOpts));\n }\n}\n\nexport function tableDynamicDescriptor(modelOrOpts?: ModelDescriptor<any> | TableDescriptorCreateOptsType<any>): TableDynamicDescriptorInst {\n return modelOrOpts instanceof ModelDescriptor\n ? new TableDynamicDescriptorInst(modelOrOpts)\n : new TableDynamicDescriptorInst(new ModelDescriptor<any>(modelOrOpts?.id as string, modelOrOpts?.title as string, modelOrOpts?.i18nBase as string));\n}\n","import {ServiceClassType} from '@mediusinc/mng-commons/core';\n\nimport {TableDataProviderInst} from '../data-providers/table.data-provider';\nimport {TableDescriptorInst} from '../descriptors/table.descriptor';\n\n/**\n * Creates a data provider for from descriptor. DO NOT use if the model is class, because the type (from model descriptor) will not be set in data provider.\n *\n * @param {TableDescriptorInst<Model, Sorts, Filters>} descriptor - The table descriptor.\n *\n * @return {TableDataProviderInst<Model, undefined, Sorts, Filters, undefined>} - The data provider for the table component.\n */\nexport function tableDataProviderFromDescriptor<Model, Sorts = keyof Model, Filters extends keyof any = keyof Model>(\n descriptor: TableDescriptorInst<Model, Sorts, Filters>\n): TableDataProviderInst<Model, undefined, Sorts, Filters, undefined>;\n/**\n * Creates a data provider for from descriptor. DO NOT use if the model is class, because the type (from model descriptor) will not be set in data provider.\n *\n * @param {TableDescriptorInst<Model, Sorts, Filters>} descriptor - The table descriptor.\n * @param {ServiceClassType<Service>} serviceClass - The service class type.\n *\n * @return {TableDataProviderInst<Model, Service, Sorts, Filters, undefined, ServiceClassType<Service>>} - The data provider for the table component.\n */\nexport function tableDataProviderFromDescriptor<Model, Service = any, Sorts = keyof Model, Filters extends keyof any = keyof Model>(\n descriptor: TableDescriptorInst<Model, Sorts, Filters>,\n serviceClass: ServiceClassType<Service>\n): TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>>;\nexport function tableDataProviderFromDescriptor<Model, Service = any, Sorts = keyof Model, Filters extends keyof any = keyof Model, ServiceClass = ServiceClassType<Service>>(\n descriptor: TableDescriptorInst<Model, Sorts, Filters>,\n serviceType?: ServiceClass\n) {\n return typeof serviceType !== 'undefined'\n ? new TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>>(serviceType as ServiceClassType<Service>)\n : new TableDataProviderInst<Model, undefined, Sorts, Filters, undefined>(undefined);\n}\n","// data providers\nexport * from './data-providers/table.data-provider';\nexport * from './data-providers/table-data-provider.factory';\n\n// descriptors\nexport * from './descriptors/column.descriptor';\nexport * from './descriptors/sort.descriptor';\nexport * from './descriptors/table.descriptor';\nexport * from './descriptors/table-descriptor.factory';\n\n// helpers\nexport * from './helpers/column-converter';\nexport * from './helpers/table-data-provider-descriptor-convert';\n\n// models\nexport * from './models/column.model';\nexport * from './models/column-value.model';\nexport * from './models/table.model';\nexport * from './models/table-columns.model';\nexport * from './models/table-event.model';\nexport * from './models/row-expandable-component.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mediusinc-mng-commons-table-api.mjs","sources":["../tmp-esm2022/table/api/data-providers/table.data-provider.js","../tmp-esm2022/table/api/data-providers/table-data-provider.factory.js","../tmp-esm2022/table/api/helpers/column-converter.js","../tmp-esm2022/table/api/models/column.model.js","../tmp-esm2022/table/api/descriptors/column.descriptor.js","../tmp-esm2022/table/api/descriptors/sort.descriptor.js","../tmp-esm2022/table/api/models/table.model.js","../tmp-esm2022/table/api/descriptors/table.descriptor.js","../tmp-esm2022/table/api/descriptors/table-descriptor.factory.js","../tmp-esm2022/table/api/helpers/table-data-provider-descriptor-convert.js","../tmp-esm2022/table/api/index.js","../tmp-esm2022/table/api/mediusinc-mng-commons-table-api.js"],"sourcesContent":["import { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DataProviderInst, toObservable } from '@mediusinc/mng-commons/core';\nexport class TableDataProviderInst extends DataProviderInst {\n constructor(serviceType) {\n super(serviceType);\n this._reloadTableSubject = new Subject();\n this._isLazy = true;\n this._getAll = () => ({ data: [] });\n }\n get isLazy() {\n return this._isLazy;\n }\n get getAll() {\n return this._getAll;\n }\n get tableReload$() {\n return this._reloadTableSubject.asObservable();\n }\n withGetAll(fn) {\n this._getAll = fn;\n return this;\n }\n withGetAllEagerly(fn) {\n this._getAll = (qp, service, locale) => toObservable(fn(service, locale)).pipe(map(data => ({ data: data })));\n this._isLazy = false;\n return this;\n }\n reloadTable(event) {\n this._reloadTableSubject.next(event ?? {});\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGF0YS1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGF0YS1wcm92aWRlcnMvdGFibGUuZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQWlDLGdCQUFnQixFQUF3RCxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQW1DakssTUFBTSxPQUFPLHFCQUNULFNBQVEsZ0JBQThDO0lBT3RELFlBQW1CLFdBQXlCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUxKLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFvQyxDQUFDO1FBRS9FLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFNZixZQUFPLEdBQWtFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztJQUZ0RyxDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxVQUFVLENBQUMsRUFBaUU7UUFDeEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQXNEO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFrQyxFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlKLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBd0M7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7RGF0YUxpc3RQYXJhbXMsIERhdGFMaXN0UmVzdWx0LCBEYXRhUHJvdmlkZXJJbnN0LCBJRGF0YVByb3ZpZGVyLCBJdGVtT3JPYnNlcnZhYmxlLCBTZXJ2aWNlQ2xhc3NPcHRUeXBlLCB0b09ic2VydmFibGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7VGFibGVSZWxvYWRFdmVudH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWV2ZW50Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgVGFibGVEYXRhUHJvdmlkZXJHZXRBbGxGblR5cGU8XG4gICAgTW9kZWwgPSBhbnksXG4gICAgU2VydmljZSA9IHVuZGVmaW5lZCxcbiAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICBSZXR1cm4gPSBJdGVtT3JPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PE1vZGVsPj5cbj4gPSAocGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sIHNlcnZpY2U6IFNlcnZpY2UsIGxvY2FsZT86IHN0cmluZykgPT4gUmV0dXJuO1xuZXhwb3J0IHR5cGUgVGFibGVEYXRhUHJvdmlkZXJHZXRBbGxFYWdlckZuVHlwZTxNb2RlbCA9IGFueSwgU2VydmljZSA9IHVuZGVmaW5lZCwgUmV0dXJuID0gSXRlbU9yT2JzZXJ2YWJsZTxNb2RlbFtdPj4gPSAoc2VydmljZTogU2VydmljZSwgbG9jYWxlPzogc3RyaW5nKSA9PiBSZXR1cm47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRGF0YVByb3ZpZGVyR2V0QWxsPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWw+IHtcbiAgICBnZXRBbGw6IFRhYmxlRGF0YVByb3ZpZGVyR2V0QWxsRm5UeXBlPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG5cbiAgICB3aXRoR2V0QWxsKGZuOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KTogdGhpcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVEYXRhUHJvdmlkZXJTdXBwb3J0PFNvcnRzID0gYW55LCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gYW55PiB7XG4gICAgZ2V0IGlzTGF6eSgpOiBib29sZWFuO1xuXG4gICAgZ2V0IHRhYmxlUmVsb2FkJCgpOiBPYnNlcnZhYmxlPFRhYmxlUmVsb2FkRXZlbnQ8U29ydHMsIEZpbHRlcnM+PjtcblxuICAgIHJlbG9hZFRhYmxlKGV2ZW50PzogVGFibGVSZWxvYWRFdmVudDxTb3J0cywgRmlsdGVycz4pOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBJVGFibGVEYXRhUHJvdmlkZXI8XG4gICAgTW9kZWwgPSBhbnksXG4gICAgU2VydmljZSA9IGFueSxcbiAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICBTZXJ2aWNlQ2xhc3MgPSBTZXJ2aWNlQ2xhc3NPcHRUeXBlPFNlcnZpY2U+XG4+ID0gSURhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSwgU2VydmljZUNsYXNzPiAmIElUYWJsZURhdGFQcm92aWRlclN1cHBvcnQ8U29ydHMsIEZpbHRlcnM+ICYgSVRhYmxlRGF0YVByb3ZpZGVyR2V0QWxsPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UgPSBhbnksIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCwgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPj5cbiAgICBleHRlbmRzIERhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNlcnZpY2VDbGFzcz5cbiAgICBpbXBsZW1lbnRzIElUYWJsZURhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIFNlcnZpY2VDbGFzcz5cbntcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JlbG9hZFRhYmxlU3ViamVjdCA9IG5ldyBTdWJqZWN0PFRhYmxlUmVsb2FkRXZlbnQ8U29ydHMsIEZpbHRlcnM+PigpO1xuXG4gICAgcHJvdGVjdGVkIF9pc0xhenkgPSB0cnVlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgc3VwZXIoc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZ2V0QWxsOiBUYWJsZURhdGFQcm92aWRlckdldEFsbEZuVHlwZTxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+ID0gKCkgPT4gKHtkYXRhOiBbXX0pO1xuXG4gICAgZ2V0IGlzTGF6eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTGF6eTtcbiAgICB9XG5cbiAgICBnZXQgZ2V0QWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWxsO1xuICAgIH1cblxuICAgIGdldCB0YWJsZVJlbG9hZCQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWxvYWRUYWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgd2l0aEdldEFsbChmbjogVGFibGVEYXRhUHJvdmlkZXJHZXRBbGxGblR5cGU8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXRBbGwgPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEdldEFsbEVhZ2VybHkoZm46IFRhYmxlRGF0YVByb3ZpZGVyR2V0QWxsRWFnZXJGblR5cGU8TW9kZWwsIFNlcnZpY2U+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dldEFsbCA9IChxcDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+LCBzZXJ2aWNlOiBTZXJ2aWNlLCBsb2NhbGU/OiBzdHJpbmcpID0+IHRvT2JzZXJ2YWJsZShmbihzZXJ2aWNlLCBsb2NhbGUpKS5waXBlKG1hcChkYXRhID0+ICh7ZGF0YTogZGF0YX0pKSk7XG4gICAgICAgIHRoaXMuX2lzTGF6eSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZWxvYWRUYWJsZShldmVudD86IFRhYmxlUmVsb2FkRXZlbnQ8U29ydHMsIEZpbHRlcnM+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbG9hZFRhYmxlU3ViamVjdC5uZXh0KGV2ZW50ID8/IHt9KTtcbiAgICB9XG59XG4iXX0=","import { TableDataProviderInst } from './table.data-provider';\n/**\n * Creates and returns an instance of `TableDataProviderInst` with the specified options for managing table data.\n *\n * @param {Object} [opts] - The options object to configure the data provider.\n * @param {TypeDescriptor<Model> | ModelDescriptor<Model>} [opts.type] - The descriptor defining the type of model.\n * @param {ServiceClassType<Service>} [opts.service] - The service class type associated with the data provider.\n * @param {TypeDescriptor<CreateModel> | ModelDescriptor<CreateModel>} [opts.filtersType] - The descriptor defining the filters type.\n * @param {TypeDescriptor<UpdateModel> | ModelDescriptor<UpdateModel>} [opts.sortsType] - The descriptor defining the sorts type.\n * @return {TableDataProviderInst<Model, Service, Sorts, Filters, ServiceClass>} An instance of `TableDataProviderInst` configured according to the provided options.\n */\nexport function tableDataProvider(opts) {\n return new TableDataProviderInst(opts?.service);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1wcm92aWRlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9kYXRhLXByb3ZpZGVycy90YWJsZS1kYXRhLXByb3ZpZGVyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQU0vQixJQUtEO0lBQ0csT0FBTyxJQUFJLHFCQUFxQixDQUErQyxJQUFJLEVBQUUsT0FBdUIsQ0FBQyxDQUFDO0FBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZpY2VDbGFzc1R5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvciwgVHlwZURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge1RhYmxlRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnLi90YWJsZS5kYXRhLXByb3ZpZGVyJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIGBUYWJsZURhdGFQcm92aWRlckluc3RgIHdpdGggdGhlIHNwZWNpZmllZCBvcHRpb25zIGZvciBtYW5hZ2luZyB0YWJsZSBkYXRhLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gY29uZmlndXJlIHRoZSBkYXRhIHByb3ZpZGVyLlxuICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxNb2RlbD4gfCBNb2RlbERlc2NyaXB0b3I8TW9kZWw+fSBbb3B0cy50eXBlXSAtIFRoZSBkZXNjcmlwdG9yIGRlZmluaW5nIHRoZSB0eXBlIG9mIG1vZGVsLlxuICogQHBhcmFtIHtTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+fSBbb3B0cy5zZXJ2aWNlXSAtIFRoZSBzZXJ2aWNlIGNsYXNzIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIHByb3ZpZGVyLlxuICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxDcmVhdGVNb2RlbD4gfCBNb2RlbERlc2NyaXB0b3I8Q3JlYXRlTW9kZWw+fSBbb3B0cy5maWx0ZXJzVHlwZV0gLSBUaGUgZGVzY3JpcHRvciBkZWZpbmluZyB0aGUgZmlsdGVycyB0eXBlLlxuICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxVcGRhdGVNb2RlbD4gfCBNb2RlbERlc2NyaXB0b3I8VXBkYXRlTW9kZWw+fSBbb3B0cy5zb3J0c1R5cGVdIC0gVGhlIGRlc2NyaXB0b3IgZGVmaW5pbmcgdGhlIHNvcnRzIHR5cGUuXG4gKiBAcmV0dXJuIHtUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3M+fSBBbiBpbnN0YW5jZSBvZiBgVGFibGVEYXRhUHJvdmlkZXJJbnN0YCBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlRGF0YVByb3ZpZGVyPFxuICAgIE1vZGVsLFxuICAgIFNlcnZpY2UgPSB1bmRlZmluZWQsXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgU2VydmljZUNsYXNzID0gU2VydmljZSBleHRlbmRzIHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT5cbj4ob3B0cz86IHtcbiAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TW9kZWw+IHwgTW9kZWxEZXNjcmlwdG9yPE1vZGVsPjtcbiAgICBzZXJ2aWNlPzogU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPjtcbiAgICBmaWx0ZXJzVHlwZT86IFR5cGVEZXNjcmlwdG9yPEZpbHRlcnM+IHwgTW9kZWxEZXNjcmlwdG9yPEZpbHRlcnM+O1xuICAgIHNvcnRzVHlwZT86IFR5cGVEZXNjcmlwdG9yPFNvcnRzPiB8IE1vZGVsRGVzY3JpcHRvcjxTb3J0cz47XG59KTogVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzPiB7XG4gICAgcmV0dXJuIG5ldyBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3M+KG9wdHM/LnNlcnZpY2UgYXMgU2VydmljZUNsYXNzKTtcbn1cbiJdfQ==","const dateRegex = /\\d{4}-[01]\\d-[0-3]\\d/;\nconst dateTimeRegex = /\\d{4}-[01]\\d-[0-3]\\dT([0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z?)|([0-2]\\d:[0-5]\\d:[0-5]\\d\\+[0-2]\\d:[0-5]\\d))/;\n/**\n * converts column to number or date on value based\n * @param column column to be transformed\n * @param value value to check if applicable\n */\nexport function columnToDateNumberOrBoolean(column, value) {\n if (typeof value === 'boolean') {\n return column.asBoolean();\n }\n else if (!isNaN(value) && typeof value === 'number') {\n return column.asNumber();\n }\n else if (dateRegex.test(value)) {\n if (dateTimeRegex.test(value)) {\n return column.asDate('dd. MMM yyyy HH:mm');\n }\n return column.asDate('dd. MMM yyyy');\n }\n else {\n return column;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvaGVscGVycy9jb2x1bW4tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO0FBQ3pDLE1BQU0sYUFBYSxHQUFHLHdIQUF3SCxDQUFDO0FBRS9JOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBa0MsRUFBRSxLQUFVO0lBQ3RGLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQztTQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztTQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuXG5jb25zdCBkYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9cXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFQoWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaPyl8KFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwrWzAtMl1cXGQ6WzAtNV1cXGQpKS87XG5cbi8qKlxuICogY29udmVydHMgY29sdW1uIHRvIG51bWJlciBvciBkYXRlIG9uIHZhbHVlIGJhc2VkXG4gKiBAcGFyYW0gY29sdW1uIGNvbHVtbiB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGNoZWNrIGlmIGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+LCB2YWx1ZTogYW55KTogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gY29sdW1uLmFzQm9vbGVhbigpO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXNOdW1iZXIoKTtcbiAgICB9IGVsc2UgaWYgKGRhdGVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoZGF0ZVRpbWVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXNEYXRlKCdkZC4gTU1NIHl5eXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbn1cbiJdfQ==","export var ColumnTypeEnum;\n(function (ColumnTypeEnum) {\n ColumnTypeEnum[\"String\"] = \"STRING\";\n ColumnTypeEnum[\"Number\"] = \"NUMBER\";\n ColumnTypeEnum[\"Boolean\"] = \"BOOLEAN\";\n ColumnTypeEnum[\"Date\"] = \"DATE\";\n ColumnTypeEnum[\"Enum\"] = \"ENUM\";\n ColumnTypeEnum[\"Custom\"] = \"CUSTOM\";\n})(ColumnTypeEnum || (ColumnTypeEnum = {}));\nexport var ColumnDisplayTypeEnum;\n(function (ColumnDisplayTypeEnum) {\n ColumnDisplayTypeEnum[\"String\"] = \"STRING\";\n ColumnDisplayTypeEnum[\"Number\"] = \"NUMBER\";\n ColumnDisplayTypeEnum[\"Currency\"] = \"CURRENCY\";\n ColumnDisplayTypeEnum[\"Boolean\"] = \"BOOLEAN\";\n ColumnDisplayTypeEnum[\"Date\"] = \"DATE\";\n ColumnDisplayTypeEnum[\"Enum\"] = \"ENUM\";\n ColumnDisplayTypeEnum[\"Component\"] = \"COMPONENT\";\n ColumnDisplayTypeEnum[\"Html\"] = \"HTML\";\n})(ColumnDisplayTypeEnum || (ColumnDisplayTypeEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9tb2RlbHMvY29sdW1uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBT1g7QUFQRCxXQUFZLGNBQWM7SUFDdEIsbUNBQWlCLENBQUE7SUFDakIsbUNBQWlCLENBQUE7SUFDakIscUNBQW1CLENBQUE7SUFDbkIsK0JBQWEsQ0FBQTtJQUNiLCtCQUFhLENBQUE7SUFDYixtQ0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBUFcsY0FBYyxLQUFkLGNBQWMsUUFPekI7QUFFRCxNQUFNLENBQU4sSUFBWSxxQkFTWDtBQVRELFdBQVkscUJBQXFCO0lBQzdCLDBDQUFpQixDQUFBO0lBQ2pCLDBDQUFpQixDQUFBO0lBQ2pCLDhDQUFxQixDQUFBO0lBQ3JCLDRDQUFtQixDQUFBO0lBQ25CLHNDQUFhLENBQUE7SUFDYixzQ0FBYSxDQUFBO0lBQ2IsZ0RBQXVCLENBQUE7SUFDdkIsc0NBQWEsQ0FBQTtBQUNqQixDQUFDLEVBVFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQVNoQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIENvbHVtblR5cGVFbnVtIHtcbiAgICBTdHJpbmcgPSAnU1RSSU5HJyxcbiAgICBOdW1iZXIgPSAnTlVNQkVSJyxcbiAgICBCb29sZWFuID0gJ0JPT0xFQU4nLFxuICAgIERhdGUgPSAnREFURScsXG4gICAgRW51bSA9ICdFTlVNJyxcbiAgICBDdXN0b20gPSAnQ1VTVE9NJ1xufVxuXG5leHBvcnQgZW51bSBDb2x1bW5EaXNwbGF5VHlwZUVudW0ge1xuICAgIFN0cmluZyA9ICdTVFJJTkcnLFxuICAgIE51bWJlciA9ICdOVU1CRVInLFxuICAgIEN1cnJlbmN5ID0gJ0NVUlJFTkNZJyxcbiAgICBCb29sZWFuID0gJ0JPT0xFQU4nLFxuICAgIERhdGUgPSAnREFURScsXG4gICAgRW51bSA9ICdFTlVNJyxcbiAgICBDb21wb25lbnQgPSAnQ09NUE9ORU5UJyxcbiAgICBIdG1sID0gJ0hUTUwnXG59XG4iXX0=","import { columnToDateNumberOrBoolean } from '../helpers/column-converter';\nimport { ColumnDisplayTypeEnum, ColumnTypeEnum } from '../models/column.model';\nexport class ColumnDescriptor {\n constructor(property) {\n this._columnType = ColumnTypeEnum.String;\n this._columnDisplayType = ColumnDisplayTypeEnum.String;\n this._isMultiline = false;\n this._hasValueAsTooltip = false;\n // column visibility\n this._isReorderable = false;\n this._isToggleable = false;\n this._isVisible = true;\n // styling\n this._headerClassName = '';\n this._className = '';\n this._width = null;\n this._minWidth = null;\n this._maxWidth = null;\n // boolean specifics\n this._booleanAsIcon = false;\n // helpers\n this._hasCopyToClipboard = false;\n // localization\n this._isLocalized = false;\n this._property = property;\n }\n get columnType() {\n return this._columnType;\n }\n get columnDisplayType() {\n return this._columnDisplayType;\n }\n get title() {\n return this._title;\n }\n get titleUseModelBase() {\n return this._titleUseModelBase;\n }\n get displayFormat() {\n return this._displayFormat;\n }\n get property() {\n return this._property;\n }\n get headerClassName() {\n return this._headerClassName;\n }\n get className() {\n return this._className;\n }\n get classNameMapFn() {\n return this._classNameMapFn;\n }\n get width() {\n return this._width;\n }\n get minWidth() {\n return this._minWidth;\n }\n get maxWidth() {\n return this._maxWidth;\n }\n get enum() {\n return this._enum;\n }\n get booleanAsIcon() {\n return this._booleanAsIcon;\n }\n get booleanYes() {\n return this._booleanYes;\n }\n get booleanNo() {\n return this._booleanNo;\n }\n get customComponentType() {\n return this._customComponentType;\n }\n get customComponentInputs() {\n return this._customComponentInputs;\n }\n get locale() {\n return this._locale;\n }\n get currencyCode() {\n return this._currencyCode;\n }\n get currencyDisplay() {\n return this._currencyDisplay;\n }\n get currencyProperty() {\n return this._currencyProperty;\n }\n get hasCopyToClipboard() {\n return this._hasCopyToClipboard;\n }\n get clipboardValueGetter() {\n return this._clipboardValueGetter;\n }\n get template() {\n return this._template;\n }\n get getter() {\n return this._getter;\n }\n get isMultiline() {\n return this._isMultiline;\n }\n get hasValueAsTooltip() {\n return this._hasValueAsTooltip;\n }\n get isReorderable() {\n return this._isReorderable;\n }\n get isToggleable() {\n return this._isToggleable;\n }\n get isVisible() {\n return this._isVisible;\n }\n get isLocalized() {\n return this._isLocalized;\n }\n get localizationExistsProperty() {\n return this._localizationExistsProperty;\n }\n /**\n * Converts column to given type with additional arguments\n *\n * @param type Column type enum.\n * @param displayType Column display type\n * @param args Any additional arguments that might be needed for specific target type.\n */\n asType(type, displayType, ...args) {\n switch (type) {\n case ColumnTypeEnum.Number:\n return displayType === ColumnDisplayTypeEnum.Currency ? this.asCurrency(...args) : this.asNumber(...args);\n case ColumnTypeEnum.Boolean:\n return this.asBoolean(...args);\n case ColumnTypeEnum.Date:\n return this.asDate(...args);\n case ColumnTypeEnum.Enum:\n return this.asEnumUnsafe(args[0]);\n case ColumnTypeEnum.Custom:\n return this.asCustomComponent(args[0], args[1]);\n case ColumnTypeEnum.String:\n default:\n return this;\n }\n }\n /**\n * Set column display as number.\n *\n * @param opts Options for number display.\n */\n asNumber(opts) {\n this._columnType = ColumnTypeEnum.Number;\n this._columnDisplayType = ColumnDisplayTypeEnum.Number;\n this._displayFormat =\n opts?.minIntegerDigits || opts?.minFractionDigits || opts?.maxFractionDigits\n ? `${opts?.minIntegerDigits ?? 0}.${opts?.minFractionDigits ?? 0}-${opts?.maxFractionDigits ?? opts?.minFractionDigits ?? 0}`\n : undefined;\n this._locale = opts?.locale;\n return this;\n }\n /**\n * Set column display as currency.\n *\n * @param opts Options for currency display.\n */\n asCurrency(opts) {\n return this.asCurrencyUnsafe({\n ...opts,\n currencyProperty: opts?.currencyProperty ? opts.currencyProperty : undefined\n });\n }\n /**\n * Set column display as currency.\n *\n * This function is UNSAFE!\n *\n * @param opts Options for currency display.\n */\n asCurrencyUnsafe(opts) {\n this._columnType = ColumnTypeEnum.Number;\n this._columnDisplayType = ColumnDisplayTypeEnum.Currency;\n this._currencyCode = opts?.currency;\n this._currencyProperty = opts?.currencyProperty;\n this._currencyDisplay = opts?.currencyDisplay;\n this._displayFormat =\n opts?.minIntegerDigits || opts?.minFractionDigits || opts?.maxFractionDigits\n ? `${opts?.minIntegerDigits ?? 0}.${opts?.minFractionDigits ?? 0}-${opts?.maxFractionDigits ?? opts?.minFractionDigits ?? 0}`\n : undefined;\n this._locale = opts?.locale;\n return this;\n }\n /**\n * Set column display as date.\n *\n * @param displayFormat Date display format (in Angular date formatting).\n */\n asDate(displayFormat = 'dd.MM.yyyy') {\n this._columnType = ColumnTypeEnum.Date;\n this._columnDisplayType = ColumnDisplayTypeEnum.Date;\n this._displayFormat = displayFormat;\n return this;\n }\n /**\n * Set column display as boolean.\n *\n * @param yes Translation key for true value.\n * @param no Translation key for false value.\n * @param asIcon Use true/false texts as icon.\n */\n asBoolean(yes, no, asIcon = false) {\n this._columnType = ColumnTypeEnum.Boolean;\n this._columnDisplayType = ColumnDisplayTypeEnum.Boolean;\n this._booleanAsIcon = asIcon;\n this._booleanYes = yes;\n this._booleanNo = no;\n return this;\n }\n /**\n * Set column display as enum.\n *\n * @param enumDesc Enum descriptor for value display.\n */\n asEnumUnsafe(enumDesc) {\n this._columnType = ColumnTypeEnum.Enum;\n this._columnDisplayType = ColumnDisplayTypeEnum.Enum;\n this._enum = enumDesc;\n return this;\n }\n /**\n * Set column display with custom component.\n *\n * @param customComponentType Component type to be used for display. Must implement {IColumnValueComponent}.\n * @param opts Options for the custom component, including inputs to pass to the component.\n */\n asCustomComponent(customComponentType, opts) {\n this._columnType = ColumnTypeEnum.Custom;\n this._columnDisplayType = ColumnDisplayTypeEnum.Component;\n this._customComponentType = customComponentType;\n this._customComponentInputs = opts?.inputs;\n return this;\n }\n /**\n * Sets columns display as HTML using Angular innerHTML.\n */\n asHtml() {\n this._columnDisplayType = ColumnDisplayTypeEnum.Html;\n return this;\n }\n /**\n * Sets the class names for the column.\n *\n * @param className - The class name for the element column.\n * @param headerClassName - The class name for the header element of the column.\n * @param classNameMapFn - A function to return class name based on the current class name and row item value.\n */\n withClassName(className, headerClassName, classNameMapFn) {\n this._className = className ?? '';\n this._headerClassName = headerClassName ?? '';\n this._classNameMapFn = classNameMapFn;\n return this;\n }\n /**\n * Sets the width for the column.\n *\n * @param width - The desired width in percents (relative to table width).\n * @param minWidth - The minimum width of column in pixels.\n * @param maxWidth - The maximum width of column in pixels.\n */\n withWidth(width, minWidth, maxWidth) {\n this._width = width ?? null;\n this._minWidth = minWidth ?? null;\n this._maxWidth = maxWidth ?? null;\n return this;\n }\n /**\n * Sets the title for the column. If title is undefined, then the title will be calculated based on table model (i18nBase) and column property.\n *\n * @param title - The title of the column.\n * @param useModelBase - Whether to append title to model's i18n path.\n */\n withTitle(title, useModelBase) {\n this._title = title;\n this._titleUseModelBase = useModelBase;\n return this;\n }\n /**\n * Enables button that copies column value to the clipboard.\n *\n * @param hasCopyToClipboard - Flag to enable/disable the feature.\n * @param clipboardValueGetter - Optional getter function to adjust the value to be copied to clipboard.\n */\n withCopyToClipboard(hasCopyToClipboard = true, clipboardValueGetter) {\n this._hasCopyToClipboard = hasCopyToClipboard;\n if (clipboardValueGetter) {\n this._clipboardValueGetter = clipboardValueGetter;\n }\n return this;\n }\n /**\n * Sets the template for displaying value.\n *\n * Use `{{}}` syntax for string interpolation within template.\n * Use `item` key to access value of row item.\n *\n * Example interpolates row item's title within some text:\n * ```\n * This template shows {{item.title}} value in column.\n * ```\n *\n * @param {string} template - The template to set.\n *\n * @usageNotes\n * Display item's title property within some text:\n *\n * ```\n * This template shows {{item.title}} value in column.\n * ```\n */\n withTemplate(template) {\n this._template = template;\n return this;\n }\n /**\n * Sets the getter function for adjusting the column value for display.\n *\n * @param {GetterFn<ColumnValue, TableModel>} getter - The getter function to be used.\n */\n withGetter(getter) {\n this._getter = getter;\n return this;\n }\n /**\n * Show text in multiple lines (useful for displaying of long texts).\n *\n * @param isMultiline Enables/disabled the feature.\n */\n withMultiline(isMultiline = true) {\n this._isMultiline = isMultiline;\n return this;\n }\n /**\n * Shows the whole display value as text (usefule when display values are expected to be to long and/or are overflown).\n *\n * @param valueAsTooltip Enables/disabled the feature.\n */\n withValueAsTooltip(valueAsTooltip = true) {\n this._hasValueAsTooltip = valueAsTooltip;\n return this;\n }\n /**\n * Enables ordering of column.\n *\n * @param isReorderable Flag to enable/disable reordering.\n */\n withReorderable(isReorderable = true) {\n this._isReorderable = isReorderable;\n return this;\n }\n /**\n * Enables toggling column visibility.\n *\n * @param isReorderable Flag to enable/disable visibility toggle.\n */\n withToggleable(isToggleable = true, isVisible = true) {\n this._isToggleable = isToggleable;\n this._isVisible = isVisible;\n return this;\n }\n /**\n * Enables localization of column by displaying flag if the column value is localized (or just displaying default fallback text).\n *\n * @param existsProperty Property to mark\n */\n localized(existsProperty) {\n if (existsProperty) {\n this._localizationExistsProperty = existsProperty;\n }\n else {\n this._localizationExistsProperty = `${this._property}Localized`;\n }\n return this;\n }\n /**\n * Copies current descriptor to a new instance.\n */\n copy() {\n const descriptor = new ColumnDescriptor(this._property);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n copyFieldsTo(obj) {\n obj._title = this._title;\n obj._columnType = this._columnType;\n obj._columnDisplayType = this._columnDisplayType;\n obj._enum = this._enum;\n obj._booleanAsIcon = this._booleanAsIcon;\n obj._booleanYes = this._booleanYes;\n obj._booleanNo = this._booleanNo;\n obj._locale = this._locale;\n obj._currencyCode = this._currencyCode;\n obj._currencyDisplay = this._currencyDisplay;\n obj._currencyProperty = this._currencyProperty;\n obj._displayFormat = this._displayFormat;\n obj._headerClassName = this._headerClassName;\n obj._className = this._className;\n obj._classNameMapFn = this._classNameMapFn;\n obj._width = this._width;\n obj._minWidth = this._minWidth;\n obj._maxWidth = this._maxWidth;\n obj._customComponentType = this._customComponentType;\n obj._customComponentInputs = this._customComponentInputs;\n obj._hasCopyToClipboard = this._hasCopyToClipboard;\n obj._template = this._template;\n obj._getter = this._getter;\n obj._isMultiline = this._isMultiline;\n obj._hasValueAsTooltip = this._hasValueAsTooltip;\n obj._isReorderable = this._isReorderable;\n obj._isToggleable = this._isToggleable;\n obj._isVisible = this._isVisible;\n obj._isLocalized = this._isLocalized;\n obj._localizationExistsProperty = this._localizationExistsProperty;\n }\n}\nexport class ColumnDynamicDescriptor extends ColumnDescriptor {\n // private _filterStatus;\n constructor(property) {\n super(property);\n this._title = undefined;\n this._visibility = true;\n }\n get visibility() {\n return this._visibility;\n }\n /**\n * sets column's title and returns this column\n * @param title title to be set\n * @param override should column title if all ready set?\n */\n withTitle(title, override = false) {\n if (this._title == null || override) {\n this._title = title;\n }\n return this;\n }\n /**\n * defines automatic type and returns this column\n * @param value\n */\n withAutomaticType(value) {\n columnToDateNumberOrBoolean(this, value);\n return this;\n }\n /**\n * sets visibility state for column and returns this column\n * @param visibility\n */\n withVisibility(visibility) {\n this._visibility = visibility;\n return this;\n }\n /**\n * creates deep copy of column dynamic descriptor\n */\n copy() {\n const descriptor = new ColumnDynamicDescriptor(this._property);\n this.copyFieldsTo(descriptor);\n descriptor._title = this._title;\n descriptor._visibility = this._visibility;\n return descriptor;\n }\n toColumnDescriptor() {\n const descriptor = new ColumnDescriptor(this._property);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQXlCN0UsTUFBTSxPQUFPLGdCQUFnQjtJQXFEekIsWUFBWSxRQUFnQjtRQW5EcEIsZ0JBQVcsR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUNwRCx1QkFBa0IsR0FBMEIscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBU3pFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVuQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFVBQVU7UUFDRixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUNoQyxjQUFTLEdBQWtCLElBQUksQ0FBQztRQUt4QyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQWEvQixVQUFVO1FBQ0Ysd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDLGVBQWU7UUFDUCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUl6QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcs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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7R2V0dGVyRm59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW59IGZyb20gJy4uL2hlbHBlcnMvY29sdW1uLWNvbnZlcnRlcic7XG5pbXBvcnQge0lDb2x1bW5WYWx1ZUNvbXBvbmVudH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi12YWx1ZS5tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRpc3BsYXlUeXBlRW51bSwgQ29sdW1uVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Db21wb25lbnRPcHRzID0ge1xuICAgIGlucHV0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBDb2x1bW5DdXJyZW5jeU9wdHNUeXBlPFByb3BlcnR5ID0gc3RyaW5nPiA9IHtcbiAgICBjdXJyZW5jeVByb3BlcnR5PzogUHJvcGVydHk7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZSc7XG59ICYgQ29sdW1uTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSAmXG4gICAgQ29sdW1uTG9jYWxlT3B0c1R5cGU7XG5cbmV4cG9ydCB0eXBlIENvbHVtbk51bWJlck9wdHNUeXBlID0gQ29sdW1uTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSAmIENvbHVtbkxvY2FsZU9wdHNUeXBlO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5OdW1iZXJGcmFjdGlvbk9wdHNUeXBlID0ge1xuICAgIG1pbkludGVnZXJEaWdpdHM/OiBudW1iZXI7XG4gICAgbWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgbWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Mb2NhbGVPcHRzVHlwZSA9IHtcbiAgICBsb2NhbGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSA9IENvbHVtblR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF9jb2x1bW5EaXNwbGF5VHlwZTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLlN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RpdGxlVXNlTW9kZWxCYXNlPzogYm9vbGVhbjtcblxuICAgIC8vIHZhbHVlIGRpc3BsYXlcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF90ZW1wbGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9nZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD47XG4gICAgcHJpdmF0ZSBfaXNNdWx0aWxpbmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNWYWx1ZUFzVG9vbHRpcCA9IGZhbHNlO1xuXG4gICAgLy8gY29sdW1uIHZpc2liaWxpdHlcbiAgICBwcml2YXRlIF9pc1Jlb3JkZXJhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNUb2dnbGVhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9tYXhXaWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBlbnVtIHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2VudW0/OiBFbnVtRGVzY3JpcHRvcjxhbnk+O1xuXG4gICAgLy8gYm9vbGVhbiBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9ib29sZWFuQXNJY29uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYm9vbGVhblllcz86IHN0cmluZztcbiAgICBwcml2YXRlIF9ib29sZWFuTm8/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJztcblxuICAgIC8vIGN1c3RvbSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXN0b21Db21wb25lbnRUeXBlPzogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8Q29sdW1uVmFsdWUsIFRhYmxlTW9kZWwsIENvbHVtbk1vZGVsPj47XG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50SW5wdXRzPzogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIC8vIGhlbHBlcnNcbiAgICBwcml2YXRlIF9oYXNDb3B5VG9DbGlwYm9hcmQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jbGlwYm9hcmRWYWx1ZUdldHRlcj86IEdldHRlckZuPENvbHVtblZhbHVlLCBUYWJsZU1vZGVsPjtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5EaXNwbGF5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlVXNlTW9kZWxCYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVVc2VNb2RlbEJhc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRJbnB1dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21Db21wb25lbnRJbnB1dHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeURpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0NvcHlUb0NsaXBib2FyZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0NvcHlUb0NsaXBib2FyZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsaXBib2FyZFZhbHVlR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcGJvYXJkVmFsdWVHZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNdWx0aWxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpbGluZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1ZhbHVlQXNUb29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Jlb3JkZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVG9nZ2xlYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVG9nZ2xlYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGNvbHVtbiB0byBnaXZlbiB0eXBlIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIENvbHVtbiB0eXBlIGVudW0uXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIENvbHVtbiBkaXNwbGF5IHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBtaWdodCBiZSBuZWVkZWQgZm9yIHNwZWNpZmljIHRhcmdldCB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc1R5cGUodHlwZTogQ29sdW1uVHlwZUVudW0sIGRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5ID8gdGhpcy5hc0N1cnJlbmN5KC4uLmFyZ3MpIDogdGhpcy5hc051bWJlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0Jvb2xlYW4oLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNEYXRlKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRW51bVVuc2FmZShhcmdzWzBdIGFzIEVudW1EZXNjcmlwdG9yPGFueT4pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXN0b21Db21wb25lbnQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgY29sdW1uIGRpc3BsYXkgYXMgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgbnVtYmVyIGRpc3BsYXkuXG4gICAgICovXG4gICAgcHVibGljIGFzTnVtYmVyKG9wdHM/OiBDb2x1bW5OdW1iZXJPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPVxuICAgICAgICAgICAgb3B0cz8ubWluSW50ZWdlckRpZ2l0cyB8fCBvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyB8fCBvcHRzPy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgICAgICAgID8gYCR7b3B0cz8ubWluSW50ZWdlckRpZ2l0cyA/PyAwfS4ke29wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9LSR7b3B0cz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IG9wdHM/LmxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbHVtbiBkaXNwbGF5IGFzIGN1cnJlbmN5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgY3VycmVuY3kgZGlzcGxheS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNDdXJyZW5jeShvcHRzPzogQ29sdW1uQ3VycmVuY3lPcHRzVHlwZTxrZXlvZiBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hc0N1cnJlbmN5VW5zYWZlKHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBjdXJyZW5jeVByb3BlcnR5OiBvcHRzPy5jdXJyZW5jeVByb3BlcnR5ID8gKG9wdHMuY3VycmVuY3lQcm9wZXJ0eSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBjb2x1bW4gZGlzcGxheSBhcyBjdXJyZW5jeS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgY3VycmVuY3kgZGlzcGxheS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNDdXJyZW5jeVVuc2FmZShvcHRzPzogQ29sdW1uQ3VycmVuY3lPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lDb2RlID0gb3B0cz8uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5UHJvcGVydHkgPSBvcHRzPy5jdXJyZW5jeVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeURpc3BsYXkgPSBvcHRzPy5jdXJyZW5jeURpc3BsYXk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPVxuICAgICAgICAgICAgb3B0cz8ubWluSW50ZWdlckRpZ2l0cyB8fCBvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyB8fCBvcHRzPy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgICAgICAgID8gYCR7b3B0cz8ubWluSW50ZWdlckRpZ2l0cyA/PyAwfS4ke29wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9LSR7b3B0cz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IG9wdHM/LmxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbHVtbiBkaXNwbGF5IGFzIGRhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGlzcGxheUZvcm1hdCBEYXRlIGRpc3BsYXkgZm9ybWF0IChpbiBBbmd1bGFyIGRhdGUgZm9ybWF0dGluZykuXG4gICAgICovXG4gICAgcHVibGljIGFzRGF0ZShkaXNwbGF5Rm9ybWF0ID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbHVtbiBkaXNwbGF5IGFzIGJvb2xlYW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geWVzIFRyYW5zbGF0aW9uIGtleSBmb3IgdHJ1ZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbm8gVHJhbnNsYXRpb24ga2V5IGZvciBmYWxzZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gYXNJY29uIFVzZSB0cnVlL2ZhbHNlIHRleHRzIGFzIGljb24uXG4gICAgICovXG4gICAgcHVibGljIGFzQm9vbGVhbih5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhbkFzSWNvbiA9IGFzSWNvbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhblllcyA9IHllcztcbiAgICAgICAgdGhpcy5fYm9vbGVhbk5vID0gbm87XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBjb2x1bW4gZGlzcGxheSBhcyBlbnVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudW1EZXNjIEVudW0gZGVzY3JpcHRvciBmb3IgdmFsdWUgZGlzcGxheS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNFbnVtVW5zYWZlKGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9lbnVtID0gZW51bURlc2M7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBjb2x1bW4gZGlzcGxheSB3aXRoIGN1c3RvbSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3VzdG9tQ29tcG9uZW50VHlwZSBDb21wb25lbnQgdHlwZSB0byBiZSB1c2VkIGZvciBkaXNwbGF5LiBNdXN0IGltcGxlbWVudCB7SUNvbHVtblZhbHVlQ29tcG9uZW50fS5cbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciB0aGUgY3VzdG9tIGNvbXBvbmVudCwgaW5jbHVkaW5nIGlucHV0cyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHVibGljIGFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGU6IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PENvbHVtblZhbHVlLCBUYWJsZU1vZGVsLCBDb2x1bW5Nb2RlbD4+LCBvcHRzPzogQ29sdW1uQ29tcG9uZW50T3B0cyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5Db21wb25lbnQ7XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGUgPSBjdXN0b21Db21wb25lbnRUeXBlO1xuICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnRJbnB1dHMgPSBvcHRzPy5pbnB1dHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY29sdW1ucyBkaXNwbGF5IGFzIEhUTUwgdXNpbmcgQW5ndWxhciBpbm5lckhUTUwuXG4gICAgICovXG4gICAgcHVibGljIGFzSHRtbCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uSHRtbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZXMgZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNsYXNzIG5hbWUgZm9yIHRoZSBlbGVtZW50IGNvbHVtbi5cbiAgICAgKiBAcGFyYW0gaGVhZGVyQ2xhc3NOYW1lIC0gVGhlIGNsYXNzIG5hbWUgZm9yIHRoZSBoZWFkZXIgZWxlbWVudCBvZiB0aGUgY29sdW1uLlxuICAgICAqIEBwYXJhbSBjbGFzc05hbWVNYXBGbiAtIEEgZnVuY3Rpb24gdG8gcmV0dXJuIGNsYXNzIG5hbWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBhbmQgcm93IGl0ZW0gdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lPzogc3RyaW5nLCBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcsIGNsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lTWFwRm4gPSBjbGFzc05hbWVNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgd2lkdGggZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGggLSBUaGUgZGVzaXJlZCB3aWR0aCBpbiBwZXJjZW50cyAocmVsYXRpdmUgdG8gdGFibGUgd2lkdGgpLlxuICAgICAqIEBwYXJhbSBtaW5XaWR0aCAtIFRoZSBtaW5pbXVtIHdpZHRoIG9mIGNvbHVtbiBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIG1heFdpZHRoIC0gVGhlIG1heGltdW0gd2lkdGggb2YgY29sdW1uIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFdpZHRoKHdpZHRoPzogbnVtYmVyLCBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9taW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gbWF4V2lkdGggPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGl0bGUgZm9yIHRoZSBjb2x1bW4uIElmIHRpdGxlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdGl0bGUgd2lsbCBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRhYmxlIG1vZGVsIChpMThuQmFzZSkgYW5kIGNvbHVtbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgY29sdW1uLlxuICAgICAqIEBwYXJhbSB1c2VNb2RlbEJhc2UgLSBXaGV0aGVyIHRvIGFwcGVuZCB0aXRsZSB0byBtb2RlbCdzIGkxOG4gcGF0aC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlPzogc3RyaW5nLCB1c2VNb2RlbEJhc2U/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX3RpdGxlVXNlTW9kZWxCYXNlID0gdXNlTW9kZWxCYXNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGJ1dHRvbiB0aGF0IGNvcGllcyBjb2x1bW4gdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYXNDb3B5VG9DbGlwYm9hcmQgLSBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSBjbGlwYm9hcmRWYWx1ZUdldHRlciAtIE9wdGlvbmFsIGdldHRlciBmdW5jdGlvbiB0byBhZGp1c3QgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCB0byBjbGlwYm9hcmQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb3B5VG9DbGlwYm9hcmQoaGFzQ29weVRvQ2xpcGJvYXJkID0gdHJ1ZSwgY2xpcGJvYXJkVmFsdWVHZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpcGJvYXJkO1xuXG4gICAgICAgIGlmIChjbGlwYm9hcmRWYWx1ZUdldHRlcikge1xuICAgICAgICAgICAgdGhpcy5fY2xpcGJvYXJkVmFsdWVHZXR0ZXIgPSBjbGlwYm9hcmRWYWx1ZUdldHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHZhbHVlLlxuICAgICAqXG4gICAgICogVXNlIGB7e319YCBzeW50YXggZm9yIHN0cmluZyBpbnRlcnBvbGF0aW9uIHdpdGhpbiB0ZW1wbGF0ZS5cbiAgICAgKiBVc2UgYGl0ZW1gIGtleSB0byBhY2Nlc3MgdmFsdWUgb2Ygcm93IGl0ZW0uXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIGludGVycG9sYXRlcyByb3cgaXRlbSdzIHRpdGxlIHdpdGhpbiBzb21lIHRleHQ6XG4gICAgICogYGBgXG4gICAgICogVGhpcyB0ZW1wbGF0ZSBzaG93cyB7e2l0ZW0udGl0bGV9fSB2YWx1ZSBpbiBjb2x1bW4uXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgLSBUaGUgdGVtcGxhdGUgdG8gc2V0LlxuICAgICAqXG4gICAgICogQHVzYWdlTm90ZXNcbiAgICAgKiBEaXNwbGF5IGl0ZW0ncyB0aXRsZSBwcm9wZXJ0eSB3aXRoaW4gc29tZSB0ZXh0OlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogVGhpcyB0ZW1wbGF0ZSBzaG93cyB7e2l0ZW0udGl0bGV9fSB2YWx1ZSBpbiBjb2x1bW4uXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdldHRlciBmdW5jdGlvbiBmb3IgYWRqdXN0aW5nIHRoZSBjb2x1bW4gdmFsdWUgZm9yIGRpc3BsYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0dldHRlckZuPENvbHVtblZhbHVlLCBUYWJsZU1vZGVsPn0gZ2V0dGVyIC0gVGhlIGdldHRlciBmdW5jdGlvbiB0byBiZSB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoR2V0dGVyKGdldHRlcj86IEdldHRlckZuPENvbHVtblZhbHVlLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXR0ZXIgPSBnZXR0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGV4dCBpbiBtdWx0aXBsZSBsaW5lcyAodXNlZnVsIGZvciBkaXNwbGF5aW5nIG9mIGxvbmcgdGV4dHMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzTXVsdGlsaW5lIEVuYWJsZXMvZGlzYWJsZWQgdGhlIGZlYXR1cmUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNdWx0aWxpbmUoaXNNdWx0aWxpbmUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlsaW5lID0gaXNNdWx0aWxpbmU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSB3aG9sZSBkaXNwbGF5IHZhbHVlIGFzIHRleHQgKHVzZWZ1bGUgd2hlbiBkaXNwbGF5IHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgdG8gbG9uZyBhbmQvb3IgYXJlIG92ZXJmbG93bikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWVBc1Rvb2x0aXAgRW5hYmxlcy9kaXNhYmxlZCB0aGUgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZhbHVlQXNUb29sdGlwKHZhbHVlQXNUb29sdGlwID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNWYWx1ZUFzVG9vbHRpcCA9IHZhbHVlQXNUb29sdGlwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG9yZGVyaW5nIG9mIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1Jlb3JkZXJhYmxlIEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgcmVvcmRlcmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJlb3JkZXJhYmxlKGlzUmVvcmRlcmFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzUmVvcmRlcmFibGUgPSBpc1Jlb3JkZXJhYmxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRvZ2dsaW5nIGNvbHVtbiB2aXNpYmlsaXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUmVvcmRlcmFibGUgRmxhZyB0byBlbmFibGUvZGlzYWJsZSB2aXNpYmlsaXR5IHRvZ2dsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRvZ2dsZWFibGUoaXNUb2dnbGVhYmxlID0gdHJ1ZSwgaXNWaXNpYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1RvZ2dsZWFibGUgPSBpc1RvZ2dsZWFibGU7XG4gICAgICAgIHRoaXMuX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBsb2NhbGl6YXRpb24gb2YgY29sdW1uIGJ5IGRpc3BsYXlpbmcgZmxhZyBpZiB0aGUgY29sdW1uIHZhbHVlIGlzIGxvY2FsaXplZCAob3IganVzdCBkaXNwbGF5aW5nIGRlZmF1bHQgZmFsbGJhY2sgdGV4dCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhpc3RzUHJvcGVydHkgUHJvcGVydHkgdG8gbWFya1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQoZXhpc3RzUHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsKTogdGhpcyB7XG4gICAgICAgIGlmIChleGlzdHNQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBleGlzdHNQcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSA9IGAke3RoaXMuX3Byb3BlcnR5fUxvY2FsaXplZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2VudW0gPSB0aGlzLl9lbnVtO1xuICAgICAgICBvYmouX2Jvb2xlYW5Bc0ljb24gPSB0aGlzLl9ib29sZWFuQXNJY29uO1xuICAgICAgICBvYmouX2Jvb2xlYW5ZZXMgPSB0aGlzLl9ib29sZWFuWWVzO1xuICAgICAgICBvYmouX2Jvb2xlYW5ObyA9IHRoaXMuX2Jvb2xlYW5ObztcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeVByb3BlcnR5ID0gdGhpcy5fY3VycmVuY3lQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9kaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgb2JqLl9oZWFkZXJDbGFzc05hbWUgPSB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX2NsYXNzTmFtZU1hcEZuID0gdGhpcy5fY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50SW5wdXRzID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50SW5wdXRzO1xuICAgICAgICBvYmouX2hhc0NvcHlUb0NsaXBib2FyZCA9IHRoaXMuX2hhc0NvcHlUb0NsaXBib2FyZDtcbiAgICAgICAgb2JqLl90ZW1wbGF0ZSA9IHRoaXMuX3RlbXBsYXRlO1xuICAgICAgICBvYmouX2dldHRlciA9IHRoaXMuX2dldHRlcjtcbiAgICAgICAgb2JqLl9pc011bHRpbGluZSA9IHRoaXMuX2lzTXVsdGlsaW5lO1xuICAgICAgICBvYmouX2hhc1ZhbHVlQXNUb29sdGlwID0gdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXA7XG4gICAgICAgIG9iai5faXNSZW9yZGVyYWJsZSA9IHRoaXMuX2lzUmVvcmRlcmFibGU7XG4gICAgICAgIG9iai5faXNUb2dnbGVhYmxlID0gdGhpcy5faXNUb2dnbGVhYmxlO1xuICAgICAgICBvYmouX2lzVmlzaWJsZSA9IHRoaXMuX2lzVmlzaWJsZTtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5ID0gdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgZXh0ZW5kcyBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF90aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgX3Zpc2liaWxpdHkgPSB0cnVlO1xuXG4gICAgLy8gcHJpdmF0ZSBfZmlsdGVyU3RhdHVzO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGNvbHVtbidzIHRpdGxlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIHRvIGJlIHNldFxuICAgICAqIEBwYXJhbSBvdmVycmlkZSBzaG91bGQgY29sdW1uIHRpdGxlIGlmIGFsbCByZWFkeSBzZXQ/XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nLCBvdmVycmlkZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl90aXRsZSA9PSBudWxsIHx8IG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgYXV0b21hdGljIHR5cGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEF1dG9tYXRpY1R5cGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW4odGhpcywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHZpc2liaWxpdHkgc3RhdGUgZm9yIGNvbHVtbiBhbmQgcmV0dXJucyB0aGlzIGNvbHVtblxuICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhWaXNpYmlsaXR5KHZpc2liaWxpdHk6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgZGVlcCBjb3B5IG9mIGNvbHVtbiBkeW5hbWljIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IodGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fdmlzaWJpbGl0eSA9IHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NvbHVtbkRlc2NyaXB0b3IoKTogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3IodGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19","export class SortDescriptor {\n constructor(property) {\n this._defaultIsEnabled = false;\n this._defaultIsAscending = true;\n this._defaultOrder = undefined;\n this._property = property;\n this._showOnColumn = property;\n }\n get property() {\n return this._property;\n }\n get showOnColumn() {\n return this._showOnColumn;\n }\n get defaultIsEnabled() {\n return this._defaultIsEnabled;\n }\n get defaultIsAscending() {\n return this._defaultIsAscending;\n }\n get defaultOrder() {\n return this._defaultOrder;\n }\n /**\n * Shows sort on column for giver property.\n *\n * @param property Column property.\n */\n withShowOnColumn(property) {\n return this.withShowOnColumnUnsafe(property);\n }\n /**\n * Shows sort on column for giver property.\n *\n * This function is UNSAFE!\n *\n * @param property Column property.\n */\n withShowOnColumnUnsafe(property) {\n this._showOnColumn = property;\n return this;\n }\n /**\n * Sets the default sort for this descriptor.\n *\n * @param {boolean} enabled - Enables/disables the feature. Default is true.\n * @param {boolean} [ascending] - If the sort is ascending. Default is true.\n * @param {number} [order] - Order index in case of multiple default sorts.\n */\n withDefaultSort(enabled = true, ascending, order) {\n this._defaultIsEnabled = enabled;\n this._defaultIsAscending = ascending ?? true;\n this._defaultOrder = order;\n return this;\n }\n /**\n * Copies current descriptor to a new instance.\n */\n copy() {\n const descriptor = new SortDescriptor(this._property);\n descriptor._defaultIsEnabled = this._defaultIsEnabled;\n descriptor._defaultIsAscending = this._defaultIsAscending;\n descriptor._defaultOrder = this._defaultOrder;\n return descriptor;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9kZXNjcmlwdG9ycy9zb3J0LmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGNBQWM7SUFRdkIsWUFBWSxRQUFnQjtRQUpsQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQzNCLGtCQUFhLEdBQVksU0FBUyxDQUFDO1FBR3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLFFBQTBCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsUUFBZ0I7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLFNBQW1CLEVBQUUsS0FBYztRQUN0RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBYSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxVQUFVLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzFELFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3Nob3dPbkNvbHVtbjogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0SXNFbmFibGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0SXNBc2NlbmRpbmcgPSB0cnVlO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdE9yZGVyPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9zaG93T25Db2x1bW4gPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaG93T25Db2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93T25Db2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0SXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdElzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRJc0FzY2VuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRJc0FzY2VuZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRPcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRPcmRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBzb3J0IG9uIGNvbHVtbiBmb3IgZ2l2ZXIgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgQ29sdW1uIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU2hvd09uQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZU1vZGVsKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTaG93T25Db2x1bW5VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBzb3J0IG9uIGNvbHVtbiBmb3IgZ2l2ZXIgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBDb2x1bW4gcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTaG93T25Db2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaG93T25Db2x1bW4gPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGVmYXVsdCBzb3J0IGZvciB0aGlzIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBFbmFibGVzL2Rpc2FibGVzIHRoZSBmZWF0dXJlLiBEZWZhdWx0IGlzIHRydWUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYXNjZW5kaW5nXSAtIElmIHRoZSBzb3J0IGlzIGFzY2VuZGluZy4gRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3JkZXJdIC0gT3JkZXIgaW5kZXggaW4gY2FzZSBvZiBtdWx0aXBsZSBkZWZhdWx0IHNvcnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQoZW5hYmxlZCA9IHRydWUsIGFzY2VuZGluZz86IGJvb2xlYW4sIG9yZGVyPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRJc0VuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICB0aGlzLl9kZWZhdWx0SXNBc2NlbmRpbmcgPSBhc2NlbmRpbmcgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdE9yZGVyID0gb3JkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBjdXJyZW50IGRlc2NyaXB0b3IgdG8gYSBuZXcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGNvcHkoKTogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdElzRW5hYmxlZCA9IHRoaXMuX2RlZmF1bHRJc0VuYWJsZWQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RlZmF1bHRJc0FzY2VuZGluZyA9IHRoaXMuX2RlZmF1bHRJc0FzY2VuZGluZztcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdE9yZGVyID0gdGhpcy5fZGVmYXVsdE9yZGVyO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=","export var TablePaginationModeEnum;\n(function (TablePaginationModeEnum) {\n TablePaginationModeEnum[TablePaginationModeEnum[\"Pagination\"] = 0] = \"Pagination\";\n TablePaginationModeEnum[TablePaginationModeEnum[\"None\"] = 1] = \"None\";\n})(TablePaginationModeEnum || (TablePaginationModeEnum = {}));\nexport var TableSizeEnum;\n(function (TableSizeEnum) {\n TableSizeEnum[TableSizeEnum[\"Small\"] = 0] = \"Small\";\n TableSizeEnum[TableSizeEnum[\"Normal\"] = 1] = \"Normal\";\n TableSizeEnum[TableSizeEnum[\"Large\"] = 2] = \"Large\";\n})(TableSizeEnum || (TableSizeEnum = {}));\n/**\n * EXCLUDE default, all columns has sort and filter on by default, developer EXCLUDES properties from sort/filter\n * INCLUDE_ONLY only selected columns have sort/filter, developers INCLUDES properties\n */\nexport var TableDynamicColumnsModeEnum;\n(function (TableDynamicColumnsModeEnum) {\n TableDynamicColumnsModeEnum[TableDynamicColumnsModeEnum[\"EXCLUDE\"] = 0] = \"EXCLUDE\";\n TableDynamicColumnsModeEnum[TableDynamicColumnsModeEnum[\"INCLUDE_ONLY\"] = 1] = \"INCLUDE_ONLY\";\n})(TableDynamicColumnsModeEnum || (TableDynamicColumnsModeEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL21vZGVscy90YWJsZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSx1QkFHWDtBQUhELFdBQVksdUJBQXVCO0lBQy9CLGlGQUFVLENBQUE7SUFDVixxRUFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUhXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFHbEM7QUFFRCxNQUFNLENBQU4sSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3JCLG1EQUFLLENBQUE7SUFDTCxxREFBTSxDQUFBO0lBQ04sbURBQUssQ0FBQTtBQUNULENBQUMsRUFKVyxhQUFhLEtBQWIsYUFBYSxRQUl4QjtBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBTixJQUFZLDJCQUdYO0FBSEQsV0FBWSwyQkFBMkI7SUFDbkMsbUZBQU8sQ0FBQTtJQUNQLDZGQUFZLENBQUE7QUFDaEIsQ0FBQyxFQUhXLDJCQUEyQixLQUEzQiwyQkFBMkIsUUFHdEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSB7XG4gICAgUGFnaW5hdGlvbixcbiAgICBOb25lXG59XG5cbmV4cG9ydCBlbnVtIFRhYmxlU2l6ZUVudW0ge1xuICAgIFNtYWxsLFxuICAgIE5vcm1hbCxcbiAgICBMYXJnZVxufVxuXG4vKipcbiAqIEVYQ0xVREUgZGVmYXVsdCwgYWxsIGNvbHVtbnMgaGFzIHNvcnQgYW5kIGZpbHRlciBvbiBieSBkZWZhdWx0LCBkZXZlbG9wZXIgRVhDTFVERVMgcHJvcGVydGllcyBmcm9tIHNvcnQvZmlsdGVyXG4gKiBJTkNMVURFX09OTFkgb25seSBzZWxlY3RlZCBjb2x1bW5zIGhhdmUgc29ydC9maWx0ZXIsIGRldmVsb3BlcnMgSU5DTFVERVMgcHJvcGVydGllc1xuICovXG5leHBvcnQgZW51bSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0ge1xuICAgIEVYQ0xVREUsXG4gICAgSU5DTFVERV9PTkxZXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVMYXlvdXRQcmVmZXJlbmNlcyB7XG4gICAgY29sdW1uV2lkdGhzPzogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICBjb2x1bW5PcmRlcj86IHN0cmluZ1tdO1xuICAgIGNvbHVtbkhpZGRlbj86IHN0cmluZ1tdO1xufVxuIl19","import { CommonsInternalError, flattenObjectKeys } from '@mediusinc/mng-commons/core';\nimport { FilterDescriptor, FilterGenericDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { columnToDateNumberOrBoolean } from '../helpers/column-converter';\nimport { ColumnTypeEnum } from '../models/column.model';\nimport { TableDynamicColumnsModeEnum, TableSizeEnum } from '../models/table.model';\nimport { ColumnDescriptor, ColumnDynamicDescriptor } from './column.descriptor';\nimport { SortDescriptor } from './sort.descriptor';\nexport class TableDescriptorInst {\n constructor(model, autoGenerated = false) {\n this._columns = [];\n this._hideHeader = false;\n this._loadingIcon = 'pi pi-spinner';\n // extra\n this._hasHover = true;\n this._hasGridlines = false;\n this._hasResizableColumns = false;\n // styling\n this._size = TableSizeEnum.Large;\n this._className = '';\n // filters&sorts\n this._filters = [];\n this._sorts = [];\n // localization\n this._isLocalized = false;\n // row expand\n this._rowExpandable = false;\n this._rowExpandableColSpan = 100;\n // row reorder\n this._rowReorderable = false;\n this._model = model;\n this._trackProperty = this._model.idProperty;\n this._autoGenerated = autoGenerated;\n }\n get identifier() {\n return this._identifier;\n }\n get trackProperty() {\n return this._trackProperty;\n }\n get paginationMode() {\n return this._paginationMode;\n }\n get rowsPerPageOptions() {\n return this._rowsPerPageOptions;\n }\n get defaultNumRows() {\n return this._defaultNumRows;\n }\n get columns() {\n return this._columns;\n }\n get title() {\n return this._title;\n }\n get hideHeader() {\n return this._hideHeader;\n }\n get loadingText() {\n return this._loadingText;\n }\n get loadingIcon() {\n return this._loadingIcon;\n }\n get filters() {\n return this._filters;\n }\n get genericFilter() {\n return this._genericFilter;\n }\n get sorts() {\n return this._sorts;\n }\n get model() {\n return this._model;\n }\n get search() {\n return this._search;\n }\n get searchLimitMaxWords() {\n return this._searchLimitMaxWords;\n }\n get searchFields() {\n return this._searchFields;\n }\n get className() {\n return this._className;\n }\n get size() {\n return this._size;\n }\n get hasHover() {\n return this._hasHover;\n }\n get hasGridlines() {\n return this._hasGridlines;\n }\n get hasResizableColumns() {\n return this._hasResizableColumns;\n }\n get columnResizeMode() {\n return this._columnResizeMode;\n }\n get rowClassName() {\n return this._rowClassName;\n }\n get rowClassNameMapFn() {\n return this._rowClassNameMapFn;\n }\n get selectionColumnFrozen() {\n return this._selectionColumnFrozen;\n }\n get actionColumnFrozen() {\n return this._actionColumnFrozen;\n }\n get headerClassName() {\n return this._headerClassName;\n }\n get isLocalized() {\n return this._isLocalized;\n }\n get localizationLocaleProperty() {\n return this._localizationLocaleProperty;\n }\n get rowReorderable() {\n return this._rowReorderable;\n }\n get rowExpandable() {\n return this._rowExpandable;\n }\n get rowExpandableColSpan() {\n return this._rowExpandableColSpan;\n }\n /**\n * This table model property tells us if the specific row should be expandable or not based on row item value\n */\n get rowExpandableProperty() {\n return this._rowExpandableProperty;\n }\n /**\n * This table model property tells us when the table row should be expanded by default, without clicking on the toggle button.\n */\n get isRowExpanded() {\n return this._isRowExpanded;\n }\n /**\n * This property is used to define the type of the custom component that will be used to render the expanded row.\n */\n get rowExpandableComponentType() {\n return this._rowExpandableComponentType;\n }\n /**\n * Identifier is used for the purpose of combined saving user preferences in localstorage if 2 tables have the same track properties they will share the same localstorage entry.\n * Similarly, this property can also be used to differentiate two tables of the same model on the same url (so that they have separate entries in localstorage).\n * @param identifier\n */\n withIdentifier(identifier) {\n this._identifier = identifier;\n return this;\n }\n /**\n * Sets the track property (identifier of table row) for the table.\n *\n * @param {keyof TableModel} property - The property to track the row items by.\n */\n withTrackProperty(property) {\n return this.withTrackPropertyUnsafe(property);\n }\n /**\n * Sets the track property (identifier of table row) for the table.\n *\n * This function is UNSAFE!\n *\n * @param {string} property - The property to set '_trackProperty' to.\n */\n withTrackPropertyUnsafe(property) {\n this._trackProperty = property;\n return this;\n }\n /**\n * Retrieves the column descriptor for the given property.\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n *\n * @return The column descriptor.\n */\n getColumn(property) {\n return this.getColumnUnsafe(property);\n }\n /**\n * Retrieves the column descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n *\n * @return The column descriptor.\n */\n getColumnUnsafe(property) {\n return this._columns.find(col => col.property === property) ?? null;\n }\n /**\n * Removes the column descriptor for the given property.\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n */\n removeColumn(property) {\n this.removeColumnUnsafe(property);\n }\n /**\n * Removes the column descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param {keyof TableModel} property - The property for column descriptor.\n */\n removeColumnUnsafe(property) {\n const columnIdx = this._columns.findIndex(c => c.property === property);\n this._columns.splice(columnIdx, 1);\n }\n /**\n * Adds column descriptor to table columns.\n *\n * @param {ColumnDescriptor<ColumnModel, TableModel, ColumnValue>} column - The property for column descriptor.\n */\n withColumn(column) {\n this._columns.push(column);\n return this;\n }\n /**\n * Adds a column to the table.\n *\n * @param {PropertyKey} property - The property key of the column in the table model.\n *\n * @returns The newly added column descriptor.\n */\n addColumn(property) {\n const column = new ColumnDescriptor(property);\n this._columns.push(column);\n return column;\n }\n /**\n * Adds a column with enum display to the table.\n *\n * @param {PropertyKey} property - The property key of the table model.\n * @param {EnumDescriptor<Enum>} enumDesc - The enum descriptor for column display.\n * @return {ColumnDescriptor<Enum, TableModel, TableModel[PropertyKey]>} - The added column descriptor.\n */\n addColumnEnum(property, enumDesc) {\n const column = new ColumnDescriptor(property);\n column.asEnumUnsafe(enumDesc);\n this._columns.push(column);\n return column;\n }\n /**\n * Adds a column to the table.\n *\n * This function is UNSAFE!\n *\n * @param {string} property - The property key of the column in the table model.\n *\n * @returns The newly added column descriptor.\n */\n addColumnUnsafe(property) {\n const column = new ColumnDescriptor(property);\n this._columns.push(column);\n return column;\n }\n /**\n * Adds one or more columns to the table model.\n *\n * @param properties - An array of property names to add as columns.\n */\n withColumns(...properties) {\n properties.forEach(p => this.addColumn(p));\n return this;\n }\n /**\n * Set the pagination mode for the table.\n *\n * @param {TablePaginationModeEnum} paginationMode - The pagination mode to set. Must be one of the values from the TablePaginationModeEnum.\n */\n withPaginationMode(paginationMode) {\n this._paginationMode = paginationMode;\n return this;\n }\n /**\n * Sets the number of rows per page for a paginated display.\n *\n * @param {number} rows - The default number of rows to display per page.\n * @param {Array<number>} [options] - Rows per page options to be available in table paginator.\n */\n withRowsPerPage(rows, options) {\n this._defaultNumRows = rows;\n this._rowsPerPageOptions = options;\n return this;\n }\n /**\n * Sets the title for an instance of the class.\n *\n * @param {string} [title] - The title value to be set. It undefined, no title will be displayed.\n */\n withTitle(title) {\n this._title = title;\n return this;\n }\n /**\n * Shows/hides the header row with column titles.\n *\n * @param {boolean} hideHeader - A boolean value indicating whether to hide the header.\n */\n withHideHeader(hideHeader = true) {\n this._hideHeader = hideHeader;\n return this;\n }\n /**\n * Adjusts loading display with custom text and/or icon.\n *\n * @param {string} [text] - Text to be displayed when loading indicator is shown.\n * @param {string | null} [icon] - Icon to be used when loading indicator is shown.\n */\n withLoading(text, icon) {\n this._loadingText = text;\n this._loadingIcon = icon === undefined ? 'pi pi-spinner' : icon;\n return this;\n }\n /**\n * Retrieves the sort descriptor for a given property.\n *\n * @param {Sorts} property - The property to retrieve the sort for.\n *\n * @return {SortDescriptor<TableModel> | null} The sort descriptor or null.\n */\n getSort(property) {\n return this.getSortUnsafe(property);\n }\n /**\n * Retrieves the sort descriptor for a given property.\n *\n * This function is UNSAFE!\n *\n * @param {Sorts} property - The property to retrieve the sort for.\n *\n * @return {SortDescriptor<TableModel> | null} The sort descriptor or null.\n */\n getSortUnsafe(property) {\n return this._sorts.find(s => s.property === property) ?? null;\n }\n /**\n * Removes the sort for a given property.\n *\n * @param {Sorts} property - The property to remove the sort for.\n */\n removeSort(property) {\n return this.removeSortUnsafe(property);\n }\n /**\n * Removes the sort for a given property.\n *\n * This function is UNSAFE!\n *\n * @param {Sorts} property - The property to remove the sort for.\n */\n removeSortUnsafe(property) {\n const sortIdx = this._sorts.findIndex(c => c.property === property);\n this._sorts.splice(sortIdx, 1);\n }\n /**\n * Adds sort for the given property.\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n *\n * @return Created sort descriptor.\n */\n addSort(property, isDefault = false, ascending) {\n return this.addSortUnsafe(property, isDefault, ascending);\n }\n /**\n * Adds sort for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n\n * @return Created sort descriptor.\n */\n addSortUnsafe(property, isDefault = false, ascending) {\n const sort = new SortDescriptor(property);\n if (isDefault) {\n const defaultOrderMax = this._sorts\n .filter(s => s.defaultIsEnabled)\n .reduce((acc, s) => (s.defaultOrder !== undefined && s.defaultOrder > acc ? s.defaultOrder : acc), -1);\n sort.withDefaultSort(true, ascending, defaultOrderMax + 1);\n }\n this._sorts.push(sort);\n return sort;\n }\n /**\n * Adds sort for the given property.\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n */\n withSort(property, isDefault = false, ascending) {\n return this.withSortUnsafe(property, isDefault, ascending);\n }\n /**\n * Adds sort for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Property to add the sort for.\n * @param isDefault If default sorting is enabled.\n * @param ascending If default sort should be ascending.\n */\n withSortUnsafe(property, isDefault = false, ascending) {\n this.addSortUnsafe(property, isDefault, ascending);\n return this;\n }\n /**\n * Sets the default sorting for the property.\n *\n * @param property - The property to set default sort for.\n * @param ascending - If the sorting should be ascending (default: true).\n * @param enabled - Enables/disabled the default sort.\n */\n withDefaultSort(property, ascending, enabled) {\n return this.withDefaultSortUnsafe(property, ascending, enabled);\n }\n /**\n * Sets the default sorting for the property.\n *\n * This function is UNSAFE!\n *\n * @param property - The property to set default sort for.\n * @param ascending - If the sorting should be ascending (default: true).\n * @param enabled - Enables/disabled the default sort.\n */\n withDefaultSortUnsafe(property, ascending, enabled) {\n let sort = this._sorts.find(s => s.property === property);\n if (!sort) {\n sort = new SortDescriptor(property);\n this._sorts.push(sort);\n }\n const order = this._sorts.filter(s => s.defaultIsEnabled).reduce((acc, s) => (s.defaultOrder == null || s.defaultOrder < acc ? acc : s.defaultOrder + 1), 0);\n sort.withDefaultSort(enabled ?? true, ascending, order);\n return this;\n }\n /**\n * Sets the default sorting for provided properties.\n *\n * @param properties - The properties to set default sort for.\n */\n withDefaultSorts(...properties) {\n properties.forEach(p => this.withDefaultSortUnsafe(p));\n return this;\n }\n /**\n * Unsets all default sorts.\n */\n withoutDefaultSorts() {\n this._sorts.forEach(s => s.withDefaultSort(false, undefined, undefined));\n return this;\n }\n /**\n * Add sorts for more properties.\n *\n * @param properties Properties to add the sorts for.\n */\n withSorts(...properties) {\n return this.withSortsUnsafe(...properties);\n }\n /**\n * Add sorts for more properties.\n *\n * This function is UNSAFE!\n *\n * @param properties Properties to add the sorts for.\n */\n withSortsUnsafe(...properties) {\n properties.forEach(p => {\n this._sorts.push(new SortDescriptor(p));\n });\n return this;\n }\n /**\n * Gets filter descriptor for given property.\n *\n * @param property Filter property\n *\n * @return Filter descriptor for property or null if not exists.\n */\n getFilter(property) {\n return this.getFilterUnsafe(property);\n }\n /**\n * Gets filter descriptor for given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property\n *\n * @return Filter descriptor for property or null if not exists.\n */\n getFilterUnsafe(property) {\n return this._filters.find(s => s.property === property) ?? null;\n }\n /**\n * Removes filter descriptor for given property.\n *\n * @param property Filter property\n */\n removeFilter(property) {\n return this.removeFilterUnsafe(property);\n }\n /**\n * Removes filter descriptor for given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property\n */\n removeFilterUnsafe(property) {\n const filterIdx = this._filters.findIndex(c => c.property === property);\n this._filters.splice(filterIdx, 1);\n }\n /**\n * Creates filter descriptor for the given property.\n *\n * @param property Filter property.\n *\n * @return Created filter descriptor.\n */\n addFilter(property) {\n return this.addFilterUnsafe(property);\n }\n /**\n * Creates filter descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n *\n * @return Created filter descriptor.\n */\n addFilterUnsafe(property) {\n const filter = new FilterDescriptor(property);\n this._filters.push(filter);\n return filter;\n }\n /**\n * Creates filter lookup descriptor for the given property.\n *\n * @param property Filter property.\n * @param provider Lookup provider.\n * @param optionsValueProperty Property on lookup provider's item (FilterModel) that will be used as filter value.\n *\n * @return Created filter lookup descriptor.\n */\n addFilterLookup(property, provider, optionsValueProperty) {\n return this.addFilterLookupUnsafe(property, provider, optionsValueProperty);\n }\n /**\n * Creates filter lookup descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n * @param provider Lookup provider.\n * @param optionsValueProperty Property on lookup provider's item (FilterModel) that will be used as filter value.\n *\n * @return Created filter lookup descriptor.\n */\n addFilterLookupUnsafe(property, provider, optionsValueProperty) {\n const filter = new FilterLookupDescriptor(property, {\n dataProvider: provider,\n optionsValueProperty: optionsValueProperty\n });\n this._filters.push(filter);\n return filter;\n }\n /**\n * Creates filter lookup enum descriptor for the given property.\n *\n * @param property Filter property.\n * @param enumDesc Descriptor for enum.\n * @param options Optional options of enum values to be available to filter by.\n *\n * @return Created filter lookup enum descriptor.\n */\n addFilterLookupEnum(property, enumDesc, options) {\n return this.addFilterLookupEnumUnsafe(property, enumDesc, options);\n }\n /**\n * Creates filter lookup enum descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param property Filter property.\n * @param enumDesc Descriptor for enum.\n * @param options Optional options of enum values to be available to filter by.\n *\n * @return Created filter lookup enum descriptor.\n */\n addFilterLookupEnumUnsafe(property, enumDesc, options) {\n const filter = new FilterLookupEnumDescriptor(property, enumDesc, options);\n this._filters.push(filter);\n return filter;\n }\n /**\n * Creates filter descriptor from column. The column must exist on table descriptor.\n *\n * @param property Column property to add filter for.\n * @param displayType Optional display type setting.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n addFilterFromColumn(property, displayType, forceSimple = false) {\n return this.addFilterFromColumnUnsafe(property, displayType, forceSimple);\n }\n addGenericFilter(propertyLookupDataProvider) {\n this._genericFilter = new FilterGenericDescriptor(propertyLookupDataProvider);\n return this._genericFilter;\n }\n withGenericFilter(propertyLookupDataProvider, valueLookupDataProvider) {\n this._genericFilter = this.addGenericFilter(propertyLookupDataProvider);\n if (valueLookupDataProvider) {\n this._genericFilter.withValueLookup(valueLookupDataProvider);\n }\n return this;\n }\n /**\n * Creates filter descriptors from columns. The columns must exist on table descriptor.\n *\n * @param properties Column properties to add filters for.\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n */\n withFiltersFromColumns(...properties) {\n return this.withFiltersFromColumnsUnsafe(...properties);\n }\n /**\n * Creates filter descriptors from columns. The columns must exist on table descriptor.\n *\n * This function is UNSAFE!\n *\n * @param properties Column properties to add filters for.\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n */\n withFiltersFromColumnsUnsafe(...properties) {\n properties.forEach(p => {\n this.addFilterFromColumnUnsafe(p);\n });\n return this;\n }\n /**\n * Creates filter descriptor from column. The column must exist on table descriptor.\n *\n * This function is UNSAFE!\n *\n * @param property Column property to add filter for.\n * @param displayType Optional display type setting.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n addFilterFromColumnUnsafe(property, displayType, forceSimple = false) {\n const column = this.getColumnUnsafe(property);\n if (!column) {\n throw new CommonsInternalError(`No column found for filter property \"${property}\"`);\n }\n const filter = this.addFilterFromColumnDescriptorUnsafe(column, forceSimple);\n if (displayType != null)\n filter.withDisplayType(displayType);\n return filter;\n }\n /**\n * Creates filter descriptor from provided column descriptor.\n *\n * This function is UNSAFE!\n *\n * @param column Column descriptor.\n * @param forceSimple Forces simple creation of filter (no lookup or lookup enum filters).\n *\n * @throws {CommonsInternalError} If column for property doesn't exist.\n *\n * @return Created filter descriptor\n */\n addFilterFromColumnDescriptorUnsafe(column, forceSimple = false) {\n let filterDescriptor = new FilterDescriptor(column.property);\n let filterType;\n switch (column.columnType) {\n case ColumnTypeEnum.Number:\n filterType = FilterTypeEnum.Number;\n break;\n case ColumnTypeEnum.Boolean:\n filterType = FilterTypeEnum.Boolean;\n break;\n case ColumnTypeEnum.Date:\n filterType = FilterTypeEnum.Date;\n break;\n case ColumnTypeEnum.Enum:\n if (!forceSimple && column.enum) {\n filterDescriptor = new FilterLookupEnumDescriptor(column.property, column.enum);\n filterType = FilterTypeEnum.LookupEnum;\n }\n else {\n filterType = FilterTypeEnum.String;\n }\n break;\n case ColumnTypeEnum.String:\n case ColumnTypeEnum.Custom:\n default:\n filterType = FilterTypeEnum.String;\n break;\n }\n filterDescriptor.asFilterType(filterType);\n if ((filterType === FilterTypeEnum.Number || filterType === FilterTypeEnum.Date) && column.displayFormat) {\n filterDescriptor.withDisplayFormat(column.displayFormat, true);\n }\n this._filters.push(filterDescriptor);\n return filterDescriptor;\n }\n /**\n * Adds filter descriptor for the given property.\n *\n * @param property Filter property.\n * @param filter Descriptor for property.\n */\n withFilter(property, filter) {\n if (filter.property !== property) {\n throw new CommonsInternalError(`Filter property \"${property}\" and Filter descriptor property \"${filter.property}\" do not match.`);\n }\n return this.withFilterUnsafe(filter);\n }\n /**\n * Adds filter descriptor for the given property.\n *\n * This function is UNSAFE!\n *\n * @param filter Descriptor for property.\n */\n withFilterUnsafe(filter) {\n this._filters.push(filter);\n return this;\n }\n /**\n * Enables or disables the global search option for the table.\n *\n * @param {boolean} search - Indicates whether the global search should be enabled.\n * @param opts - Additional options for search. limitMaxWords can limit max words as search input and fields can limit\n * the filtering fields included in search when lazy load is not being used.\n */\n withSearch(search = true, opts) {\n return this.withSearchUnsafe(search, {\n fields: opts?.fields,\n limitMaxWords: opts?.limitMaxWords\n });\n }\n /**\n * Enables or disables the global search option for the table.\n *\n * @param {boolean} search - Indicates whether the global search should be enabled.\n * @param opts - Additional options for search. limitMaxWords can limit max words as search input and fields can limit\n * the filtering fields included in search when lazy load is not being used.\n */\n withSearchUnsafe(search = true, opts) {\n this._search = search;\n this._searchLimitMaxWords = opts?.limitMaxWords;\n this._searchFields = opts?.fields;\n return this;\n }\n /**\n * Sets classes for table component.\n *\n * @param className Class names.\n */\n withClassName(className) {\n this._className = className;\n return this;\n }\n /**\n * Sets table sizing.\n *\n * @param size Table size.\n */\n withSize(size = TableSizeEnum.Normal) {\n this._size = size;\n return this;\n }\n /**\n * Enables hover effect on table rows.\n *\n * @param hover Enables/disables the hover.\n */\n withHover(hover = true) {\n this._hasHover = hover;\n return this;\n }\n /**\n * Enables gridlines on table.\n *\n * @param gridlines Enables/disables the gridlines.\n */\n withGridlines(gridlines = true) {\n this._hasGridlines = gridlines;\n return this;\n }\n /**\n * Enables/disables reorderable property on all columns currently in the descriptor.\n *\n * @param {boolean} [columnsReorderable] - Boolean flag to set reordering on columns to.\n */\n withCurrentColumnsReorderable(columnsReorderable = true) {\n for (const col of this.columns) {\n col.withReorderable(columnsReorderable);\n }\n return this;\n }\n /**\n * Enables/disables toggleable property on all columns currently in the descriptor.\n *\n * @param {boolean} [columnsToggleable] - Boolean flag to set toggleable on columns to.\n */\n withCurrentColumnsToggleable(columnsToggleable = true) {\n for (const col of this.columns) {\n col.withToggleable(columnsToggleable);\n }\n return this;\n }\n /**\n * Enables/disabled column resize feature with columnResizeMode on all columns.\n *\n * @param resizableColumns True if enabled\n * @param columnResizeMode 'fit' or 'expand' mode\n */\n withColumnsResizable(resizableColumns = true, columnResizeMode = 'fit') {\n this._hasResizableColumns = resizableColumns;\n this._columnResizeMode = columnResizeMode;\n return this;\n }\n /**\n * Sets column to (un)frozen.\n *\n * @param selectionColumnFrozen True to freeze selection column, false to unfreeze it.\n * @param actionColumnFrozen True to freeze action column, false to unfreeze it.\n */\n withColumnFrozen(selectionColumnFrozen, actionColumnFrozen) {\n this._selectionColumnFrozen = selectionColumnFrozen;\n this._actionColumnFrozen = actionColumnFrozen;\n return this;\n }\n /**\n * Sets the class name for rows in the table.\n *\n * @param {string} rowClassName - The CSS class name to be applied to each row.\n * @param {function} [classNameMapFn] - Optional function to map the class name dynamically based on row's item and current class name.\n */\n withRowClassName(rowClassName, classNameMapFn) {\n this._rowClassName = rowClassName;\n this._rowClassNameMapFn = classNameMapFn;\n return this;\n }\n /**\n * Sets header row class name.\n *\n * @param headerClassName Class name.\n */\n withHeaderClassName(headerClassName) {\n this._headerClassName = headerClassName;\n return this;\n }\n /**\n * Enables localization of the table.\n */\n withLocalized() {\n this._isLocalized = true;\n return this;\n }\n /**\n * Sets locale property for localization.\n *\n * @param property Locale property\n */\n withLocalizationLocaleProperty(property) {\n this._isLocalized = true;\n this._localizationLocaleProperty = property;\n return this;\n }\n /**\n * Enables row expanding.\n *\n * @param property Property to check if row can be expanded.\n * @param colSpan set custom row span for expanded row.\n * @param componentType Component to be displayed on row expand.\n * @param isRowExpanded Property or function that tells the table to expand the row by default.\n */\n withRowExpandable(property, colSpan, componentType, isRowExpanded) {\n this._rowExpandable = true;\n if (property) {\n this._rowExpandableProperty = property;\n }\n if (colSpan) {\n this._rowExpandableColSpan = colSpan;\n }\n if (componentType) {\n this._rowExpandableComponentType = componentType;\n }\n this._isRowExpanded = isRowExpanded;\n return this;\n }\n /**\n * Enables row reordering.\n *\n * @param reordable Enables/disables feature.\n */\n withRowReorderable(reordable = true) {\n this._rowReorderable = reordable;\n return this;\n }\n copyFieldsTo(obj) {\n obj._title = this._title;\n obj._hideHeader = this._hideHeader;\n obj._trackProperty = this._trackProperty;\n obj._filters = this._filters.map(f => f.copy());\n obj._sorts = this._sorts.map(s => s.copy());\n obj._search = this._search;\n obj._searchLimitMaxWords = this._searchLimitMaxWords;\n obj._searchFields = this._searchFields ? [...this._searchFields] : undefined;\n obj._className = this._className;\n obj._size = this._size;\n obj._hasHover = this._hasHover;\n obj._hasGridlines = this._hasGridlines;\n obj._hasResizableColumns = this._hasResizableColumns;\n obj._columnResizeMode = this._columnResizeMode;\n obj._actionColumnFrozen = this._actionColumnFrozen;\n obj._selectionColumnFrozen = this._selectionColumnFrozen;\n obj._isLocalized = this._isLocalized;\n obj._localizationLocaleProperty = this._localizationLocaleProperty;\n obj._paginationMode = this._paginationMode;\n obj._rowsPerPageOptions = this._rowsPerPageOptions;\n obj._rowExpandable = this._rowExpandable;\n obj._rowExpandableColSpan = this._rowExpandableColSpan;\n obj._rowExpandableProperty = this._rowExpandableProperty;\n obj._isRowExpanded = this.isRowExpanded;\n obj._rowExpandableComponentType = this._rowExpandableComponentType;\n obj._rowReorderable = this._rowReorderable;\n obj._genericFilter = this._genericFilter?.copy();\n }\n /**\n * Copies current descriptor to a new instance.\n */\n copy() {\n const descriptor = new TableDescriptorInst(this.model.copy());\n this.copyFieldsTo(descriptor);\n descriptor._columns = this.columns.map(c => c.copy());\n return descriptor;\n }\n}\nexport class TableDynamicDescriptorInst extends TableDescriptorInst {\n constructor(model) {\n super(model);\n this._excludedColumns = [];\n this._filterColumns = [];\n this._sortColumns = [];\n this._sortColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;\n this._filterColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;\n this._columns = [];\n if (typeof model.titleProperty === 'string') {\n this.withTitle(model.titleProperty);\n }\n }\n get columns() {\n return this._columns;\n }\n /**\n * defines excluded columns when generating descriptor\n * @param excludedColumn names of excluded columns\n */\n withColumnsExcluded(excludedColumn) {\n this._excludedColumns = excludedColumn;\n return this;\n }\n /**\n * defines column properties on which sort is defined or not depending on sortColumnMode\n * @param sortOnColumns column names\n * @param sortColumnMode INCLUDE_ONLY (default) only given columns will have sort, EXCLUDE given columns will NOT have sort\n */\n withColumnsSort(sortOnColumns, sortColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY) {\n this._sortColumnMode = sortColumnMode;\n this._sortColumns = sortOnColumns;\n return this;\n }\n /**\n * defines column properties on which filter is defined or not depending on filterColumnMode\n * @param filterOnColumn column names\n * @param filterColumnMode INCLUDE_ONLY (default) only given columns will have filter, EXCLUDE given columns will NOT have filter\n */\n withColumnsFilter(filterOnColumn, filterColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY) {\n this._filterColumnMode = filterColumnMode;\n this._filterColumns = filterOnColumn;\n return this;\n }\n /**\n * sets given type to column with given property and returns this table\n * @param property column's property\n * @param type custom type for column\n * @param displayType custom column value display type\n * @param args addition arguments for column\n */\n withColumnPresetType(property, type, displayType, ...args) {\n const column = this._columns.find(col => property === col.property) ?? this.addColumn(property).withTitle(property);\n if (column) {\n column.asType(type, displayType, ...args);\n }\n return this;\n }\n /**\n * sets title to column with given property and returns this table\n * @param property column's property\n * @param title column's title\n */\n withColumnTitle(property, title) {\n const column = this._columns.find(col => property === col.property) ?? this.addColumn(property);\n column.withTitle(title);\n return this;\n }\n /**\n * generates columns defined on table based on data fetched from api\n * @param data data from api\n */\n toTableDescriptorFromData(data) {\n const tableDescriptor = this.toTableDescriptor();\n if (data.data == null || data.data.length == 0) {\n return tableDescriptor;\n }\n const objectModel = data.data[0];\n const entries = flattenObjectKeys(objectModel)\n .filter(([key]) => !this._excludedColumns.includes(key))\n .filter(([, value]) => !Array.isArray(value)); //exclude arrays and sets\n for (const [key, value] of entries) {\n const metaColumn = this._columns.find(col => col.property === key);\n let column;\n if (metaColumn) {\n if (!metaColumn.visibility) {\n continue;\n }\n column = metaColumn.toColumnDescriptor();\n tableDescriptor.withColumn(column);\n }\n else {\n column = tableDescriptor.addColumn(key).withTitle(key);\n columnToDateNumberOrBoolean(column, value);\n }\n if (this.model.i18nBaseKey && !column.property.includes('rev')) {\n column.withTitle([this.model.i18nBaseKey, 'properties', column.property].join('.').replace('state.', ''));\n }\n const elementOfSortColumns = this._sortColumns.includes(column.property);\n if ((this._sortColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfSortColumns) ||\n (this._sortColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfSortColumns)) {\n tableDescriptor.withSortUnsafe(column.property);\n }\n const elementOfFilterColumns = this._filterColumns.includes(column.property);\n if (this._filterColumns.length > 0 &&\n ((this._filterColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfFilterColumns) ||\n (this._filterColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfFilterColumns))) {\n tableDescriptor.addFilterFromColumnDescriptorUnsafe(column, false);\n }\n }\n return tableDescriptor;\n }\n /**\n * adds ColumnDynamicDescriptor to this table\n * @param property column's property\n */\n addColumn(property) {\n const column = new ColumnDynamicDescriptor(property);\n this._columns.push(column);\n return column;\n }\n removeColumn(property) {\n const column = this.columns.find(col => col.property === property) ?? this.addColumn(property);\n column.withVisibility(false);\n return this;\n }\n /**\n * creates deep copy of table dynamic descriptor\n */\n copy() {\n const descriptor = new TableDynamicDescriptorInst(this.model.copy());\n this.copyFieldsTo(descriptor);\n descriptor._columns = this.columns.map(c => c.copy());\n descriptor._excludedColumns = [...this._excludedColumns];\n descriptor._filterColumns = [...this._filterColumns];\n descriptor._sortColumns = [...this._sortColumns];\n descriptor._filterColumnMode = this._filterColumnMode;\n descriptor._sortColumnMode = this._sortColumnMode;\n return descriptor;\n }\n toTableDescriptor() {\n const descriptor = new TableDescriptorInst(this.model);\n this.copyFieldsTo(descriptor);\n return descriptor;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUNILGdCQUFnQixFQUVoQix1QkFBdUIsRUFFdkIsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixjQUFjLEVBQ2pCLE1BQU0sK0JBQStCLENBQUM7QUFJdkMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUF3QixjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RSxPQUFPLEVBQUMsMkJBQTJCLEVBQTJCLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sbUJBQW1CO0lBeUQ1QixZQUFtQixLQUFrQyxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBOUNsRSxhQUFRLEdBQTZDLEVBQUUsQ0FBQztRQUUxRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFrQixlQUFlLENBQUM7UUFFdEQsUUFBUTtRQUNBLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBT3JDLFVBQVU7UUFDRixVQUFLLEdBQWtCLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDM0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUt4QixnQkFBZ0I7UUFDUixhQUFRLEdBQXdDLEVBQUUsQ0FB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QUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDbEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIERhdGFMaXN0UmVzdWx0LCBFbnVtQ29uc3RhbnRUeXBlLCBJTG9va3VwRGF0YVByb3ZpZGVyLCBJVGFibGVEZXNjcmlwdG9yLCBmbGF0dGVuT2JqZWN0S2V5c30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7XG4gICAgRmlsdGVyRGVzY3JpcHRvcixcbiAgICBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sXG4gICAgRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3IsXG4gICAgRmlsdGVyR2VuZXJpY1Byb3BlcnR5LFxuICAgIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsXG4gICAgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmlsdGVyVHlwZUVudW1cbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Y29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFufSBmcm9tICcuLi9oZWxwZXJzL2NvbHVtbi1jb252ZXJ0ZXInO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmltcG9ydCB7SVJvd0V4cGFuZGFibGVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscy9yb3ctZXhwYW5kYWJsZS1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHtJQ29sdW1uc01hbmFnZUludGVyZmFjZX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHtUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0sIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLCBUYWJsZVNpemVFbnVtfSBmcm9tICcuLi9tb2RlbHMvdGFibGUubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi9jb2x1bW4uZGVzY3JpcHRvcic7XG5pbXBvcnQge1NvcnREZXNjcmlwdG9yfSBmcm9tICcuL3NvcnQuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzID0ga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxlTW9kZWw+XG4gICAgaW1wbGVtZW50cyBJVGFibGVEZXNjcmlwdG9yPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiwgSUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2U8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2F1dG9HZW5lcmF0ZWQ7XG5cbiAgICBwcml2YXRlIF9pZGVudGlmaWVyPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RyYWNrUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU/OiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bTtcbiAgICBwcml2YXRlIF9yb3dzUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBwcml2YXRlIF9kZWZhdWx0TnVtUm93cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPj4gPSBbXTtcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oaWRlSGVhZGVyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ0ljb246IHN0cmluZyB8IG51bGwgPSAncGkgcGktc3Bpbm5lcic7XG5cbiAgICAvLyBleHRyYVxuICAgIHByaXZhdGUgX2hhc0hvdmVyID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9oYXNHcmlkbGluZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNSZXNpemFibGVDb2x1bW5zID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29sdW1uUmVzaXplTW9kZT86ICdmaXQnIHwgJ2V4cGFuZCc7XG5cbiAgICAvLyBzcGVjaWFsIGNvbHVtbnNcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW47XG5cbiAgICAvLyBzdHlsaW5nXG4gICAgcHJpdmF0ZSBfc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTGFyZ2U7XG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJpdmF0ZSBfaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0NsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmc7XG5cbiAgICAvLyBmaWx0ZXJzJnNvcnRzXG4gICAgcHJpdmF0ZSBfZmlsdGVyczogRmlsdGVyRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+W10gPSBbXTtcbiAgICBwcml2YXRlIF9nZW5lcmljRmlsdGVyPzogRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3I7XG4gICAgcHJpdmF0ZSBfc29ydHM6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+W10gPSBbXTtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyByb3cgZXhwYW5kXG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gMTAwO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9pc1Jvd0V4cGFuZGVkPzogc3RyaW5nIHwgKChpdGVtOiBUYWJsZU1vZGVsKSA9PiBib29sZWFuKTtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+O1xuXG4gICAgLy8gcm93IHJlb3JkZXJcbiAgICBwcml2YXRlIF9yb3dSZW9yZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc2VhcmNoPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9zZWFyY2hMaW1pdE1heFdvcmRzPzogbnVtYmVyIHwgbnVsbDtcbiAgICBwcml2YXRlIF9zZWFyY2hGaWVsZHM/OiBzdHJpbmdbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxlTW9kZWw+LCBhdXRvR2VuZXJhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fdHJhY2tQcm9wZXJ0eSA9IHRoaXMuX21vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWQgPSBhdXRvR2VuZXJhdGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0cmFja1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgZ2V0IHJvd3NQZXJQYWdlT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdE51bVJvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TnVtUm93cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlSGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZ1RleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdlbmVyaWNGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmljRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc29ydHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2hMaW1pdE1heFdvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTGltaXRNYXhXb3JkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dSZW9yZGVyYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGFibGUgbW9kZWwgcHJvcGVydHkgdGVsbHMgdXMgaWYgdGhlIHNwZWNpZmljIHJvdyBzaG91bGQgYmUgZXhwYW5kYWJsZSBvciBub3QgYmFzZWQgb24gcm93IGl0ZW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRhYmxlIG1vZGVsIHByb3BlcnR5IHRlbGxzIHVzIHdoZW4gdGhlIHRhYmxlIHJvdyBzaG91bGQgYmUgZXhwYW5kZWQgYnkgZGVmYXVsdCwgd2l0aG91dCBjbGlja2luZyBvbiB0aGUgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzUm93RXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Jvd0V4cGFuZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBjb21wb25lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICovXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgaXMgdXNlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tYmluZWQgc2F2aW5nIHVzZXIgcHJlZmVyZW5jZXMgaW4gbG9jYWxzdG9yYWdlIGlmIDIgdGFibGVzIGhhdmUgdGhlIHNhbWUgdHJhY2sgcHJvcGVydGllcyB0aGV5IHdpbGwgc2hhcmUgdGhlIHNhbWUgbG9jYWxzdG9yYWdlIGVudHJ5LlxuICAgICAqIFNpbWlsYXJseSwgdGhpcyBwcm9wZXJ0eSBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdHdvIHRhYmxlcyBvZiB0aGUgc2FtZSBtb2RlbCBvbiB0aGUgc2FtZSB1cmwgKHNvIHRoYXQgdGhleSBoYXZlIHNlcGFyYXRlIGVudHJpZXMgaW4gbG9jYWxzdG9yYWdlKS5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRyYWNrIHByb3BlcnR5IChpZGVudGlmaWVyIG9mIHRhYmxlIHJvdykgZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gdHJhY2sgdGhlIHJvdyBpdGVtcyBieS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRyYWNrUHJvcGVydHkocHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdHJhY2sgcHJvcGVydHkgKGlkZW50aWZpZXIgb2YgdGFibGUgcm93KSBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gc2V0ICdfdHJhY2tQcm9wZXJ0eScgdG8uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb2x1bW4gZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtrZXlvZiBUYWJsZU1vZGVsfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3IgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCwgQ29sdW1uTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5XT4sIENvbHVtblZhbHVlID0gVGFibGVNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHlcbiAgICApOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uVW5zYWZlPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbHVtbiBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueSwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbHVtbiBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2tleW9mIFRhYmxlTW9kZWx9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGZvciBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgY29sdW1uIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtrZXlvZiBUYWJsZU1vZGVsfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3IgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbklkeCA9IHRoaXMuX2NvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnNwbGljZShjb2x1bW5JZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgY29sdW1uIGRlc2NyaXB0b3IgdG8gdGFibGUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+fSBjb2x1bW4gLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZSA9IENvbHVtbk1vZGVsPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5S2V5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGNvbHVtbiBpbiB0aGUgdGFibGUgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbHVtbjxQcm9wZXJ0eUtleSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eUtleSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sdW1uIHdpdGggZW51bSBkaXNwbGF5IHRvIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHlLZXl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgdGFibGUgbW9kZWwuXG4gICAgICogQHBhcmFtIHtFbnVtRGVzY3JpcHRvcjxFbnVtPn0gZW51bURlc2MgLSBUaGUgZW51bSBkZXNjcmlwdG9yIGZvciBjb2x1bW4gZGlzcGxheS5cbiAgICAgKiBAcmV0dXJuIHtDb2x1bW5EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPn0gLSBUaGUgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtRGVzYyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIG5ld2x5IGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSB1bmtub3duPihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIGNvbHVtbnMgdG8gdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0byBhZGQgYXMgY29sdW1ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRDb2x1bW4ocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHBhZ2luYXRpb24gbW9kZSBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUYWJsZVBhZ2luYXRpb25Nb2RlRW51bX0gcGFnaW5hdGlvbk1vZGUgLSBUaGUgcGFnaW5hdGlvbiBtb2RlIHRvIHNldC4gTXVzdCBiZSBvbmUgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uTW9kZSA9IHBhZ2luYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZSBmb3IgYSBwYWdpbmF0ZWQgZGlzcGxheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzIC0gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSBwZXIgcGFnZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zXSAtIFJvd3MgcGVyIHBhZ2Ugb3B0aW9ucyB0byBiZSBhdmFpbGFibGUgaW4gdGFibGUgcGFnaW5hdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUm93c1BlclBhZ2Uocm93czogbnVtYmVyLCBvcHRpb25zPzogQXJyYXk8bnVtYmVyPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZWZhdWx0TnVtUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpdGxlIGZvciBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSAtIFRoZSB0aXRsZSB2YWx1ZSB0byBiZSBzZXQuIEl0IHVuZGVmaW5lZCwgbm8gdGl0bGUgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzL2hpZGVzIHRoZSBoZWFkZXIgcm93IHdpdGggY29sdW1uIHRpdGxlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlkZUhlYWRlciAtIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gaGlkZSB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSGlkZUhlYWRlcihoaWRlSGVhZGVyID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oaWRlSGVhZGVyID0gaGlkZUhlYWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRqdXN0cyBsb2FkaW5nIGRpc3BsYXkgd2l0aCBjdXN0b20gdGV4dCBhbmQvb3IgaWNvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBUZXh0IHRvIGJlIGRpc3BsYXllZCB3aGVuIGxvYWRpbmcgaW5kaWNhdG9yIGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW2ljb25dIC0gSWNvbiB0byBiZSB1c2VkIHdoZW4gbG9hZGluZyBpbmRpY2F0b3IgaXMgc2hvd24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhMb2FkaW5nKHRleHQ/OiBzdHJpbmcsIGljb24/OiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdUZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0ljb24gPSBpY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktc3Bpbm5lcicgOiBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHNvcnQgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U29ydHN9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIHRoZSBzb3J0IGZvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbH0gVGhlIHNvcnQgZGVzY3JpcHRvciBvciBudWxsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTb3J0KHByb3BlcnR5OiBTb3J0cyk6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHNvcnQgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTb3J0c30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gcmV0cmlldmUgdGhlIHNvcnQgZm9yLlxuICAgICAqXG4gICAgICogQHJldHVybiB7U29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4gfCBudWxsfSBUaGUgc29ydCBkZXNjcmlwdG9yIG9yIG51bGwuXG4gICAgICovXG4gICAgcHVibGljIGdldFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0cy5maW5kKHMgPT4gcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc29ydCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U29ydHN9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHJlbW92ZSB0aGUgc29ydCBmb3IuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVNvcnQocHJvcGVydHk6IFNvcnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzb3J0IGZvciBhIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NvcnRzfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byByZW1vdmUgdGhlIHNvcnQgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydElkeCA9IHRoaXMuX3NvcnRzLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fc29ydHMuc3BsaWNlKHNvcnRJZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGFkZCB0aGUgc29ydCBmb3IuXG4gICAgICogQHBhcmFtIGlzRGVmYXVsdCBJZiBkZWZhdWx0IHNvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIElmIGRlZmF1bHQgc29ydCBzaG91bGQgYmUgYXNjZW5kaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIHNvcnQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYWRkIHRoZSBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gaXNEZWZhdWx0IElmIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgSWYgZGVmYXVsdCBzb3J0IHNob3VsZCBiZSBhc2NlbmRpbmcuXG5cbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgc29ydCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVyTWF4ID0gdGhpcy5fc29ydHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcy5kZWZhdWx0T3JkZXIgPiBhY2MgPyBzLmRlZmF1bHRPcmRlciA6IGFjYyksIC0xKTtcbiAgICAgICAgICAgIHNvcnQud2l0aERlZmF1bHRTb3J0KHRydWUsIGFzY2VuZGluZywgZGVmYXVsdE9yZGVyTWF4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBzb3J0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYWRkIHRoZSBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gaXNEZWZhdWx0IElmIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgSWYgZGVmYXVsdCBzb3J0IHNob3VsZCBiZSBhc2NlbmRpbmcuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBzb3J0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBhZGQgdGhlIHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBpc0RlZmF1bHQgSWYgZGVmYXVsdCBzb3J0aW5nIGlzIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIGFzY2VuZGluZyBJZiBkZWZhdWx0IHNvcnQgc2hvdWxkIGJlIGFzY2VuZGluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5LCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRlZmF1bHQgc29ydGluZyBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgLSBJZiB0aGUgc29ydGluZyBzaG91bGQgYmUgYXNjZW5kaW5nIChkZWZhdWx0OiB0cnVlKS5cbiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZXMvZGlzYWJsZWQgdGhlIGRlZmF1bHQgc29ydC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgZW5hYmxlZD86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgYXNjZW5kaW5nLCBlbmFibGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHNvcnRpbmcgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgLSBJZiB0aGUgc29ydGluZyBzaG91bGQgYmUgYXNjZW5kaW5nIChkZWZhdWx0OiB0cnVlKS5cbiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZXMvZGlzYWJsZWQgdGhlIGRlZmF1bHQgc29ydC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGFzY2VuZGluZz86IGJvb2xlYW4sIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGxldCBzb3J0ID0gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yKHByb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9zb3J0cy5maWx0ZXIocyA9PiBzLmRlZmF1bHRJc0VuYWJsZWQpLnJlZHVjZSgoYWNjLCBzKSA9PiAocy5kZWZhdWx0T3JkZXIgPT0gbnVsbCB8fCBzLmRlZmF1bHRPcmRlciA8IGFjYyA/IGFjYyA6IHMuZGVmYXVsdE9yZGVyICsgMSksIDApO1xuICAgICAgICBzb3J0LndpdGhEZWZhdWx0U29ydChlbmFibGVkID8/IHRydWUsIGFzY2VuZGluZywgb3JkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHNvcnRpbmcgZm9yIHByb3ZpZGVkIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyAtIFRoZSBwcm9wZXJ0aWVzIHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy53aXRoRGVmYXVsdFNvcnRVbnNhZmUocCBhcyBzdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZXRzIGFsbCBkZWZhdWx0IHNvcnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRob3V0RGVmYXVsdFNvcnRzKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0cy5mb3JFYWNoKHMgPT4gcy53aXRoRGVmYXVsdFNvcnQoZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBzb3J0cyBmb3IgbW9yZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydGllcyB0byBhZGQgdGhlIHNvcnRzIGZvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRzVW5zYWZlKC4uLihwcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHNvcnRzIGZvciBtb3JlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gYWRkIHRoZSBzb3J0cyBmb3IuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0c1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0cy5wdXNoKG5ldyBTb3J0RGVzY3JpcHRvcihwKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpbHRlciBkZXNjcmlwdG9yIGZvciBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEByZXR1cm4gRmlsdGVyIGRlc2NyaXB0b3IgZm9yIHByb3BlcnR5IG9yIG51bGwgaWYgbm90IGV4aXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IGFueT4ocHJvcGVydHk6IEZpbHRlcnMpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEByZXR1cm4gRmlsdGVyIGRlc2NyaXB0b3IgZm9yIHByb3BlcnR5IG9yIG51bGwgaWYgbm90IGV4aXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySWR4ID0gdGhpcy5fZmlsdGVycy5maW5kSW5kZXgoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMuc3BsaWNlKGZpbHRlcklkeCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBUYWJsZU1vZGVsW0ZpbHRlcnNdIDogbmV2ZXI+KHByb3BlcnR5OiBGaWx0ZXJzKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBwcm92aWRlciBMb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnNWYWx1ZVByb3BlcnR5IFByb3BlcnR5IG9uIGxvb2t1cCBwcm92aWRlcidzIGl0ZW0gKEZpbHRlck1vZGVsKSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXIgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXA8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCA/IE5vbk51bGxhYmxlPFRhYmxlTW9kZWxbRmlsdGVyc10+IDogbmV2ZXIsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBwcm9wZXJ0eTogRmlsdGVycyxcbiAgICAgICAgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBhbnksIGFueT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzoga2V5b2YgRmlsdGVyTW9kZWxcbiAgICApOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIHByb3ZpZGVyIExvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1ZhbHVlUHJvcGVydHkgUHJvcGVydHkgb24gbG9va3VwIHByb3ZpZGVyJ3MgaXRlbSAoRmlsdGVyTW9kZWwpIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZSwgYW55LCBhbnk+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+KHByb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IG9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBlbnVtRGVzYyBEZXNjcmlwdG9yIGZvciBlbnVtLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgb2YgZW51bSB2YWx1ZXMgdG8gYmUgYXZhaWxhYmxlIHRvIGZpbHRlciBieS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgbG9va3VwIGVudW0gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bTxFbnVtPihwcm9wZXJ0eTogRmlsdGVycywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGVudW1EZXNjIERlc2NyaXB0b3IgZm9yIGVudW0uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyBvZiBlbnVtIHZhbHVlcyB0byBiZSBhdmFpbGFibGUgdG8gZmlsdGVyIGJ5LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IocHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmcm9tIGNvbHVtbi4gVGhlIGNvbHVtbiBtdXN0IGV4aXN0IG9uIHRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgQ29sdW1uIHByb3BlcnR5IHRvIGFkZCBmaWx0ZXIgZm9yLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBPcHRpb25hbCBkaXNwbGF5IHR5cGUgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0gZm9yY2VTaW1wbGUgRm9yY2VzIHNpbXBsZSBjcmVhdGlvbiBvZiBmaWx0ZXIgKG5vIGxvb2t1cCBvciBsb29rdXAgZW51bSBmaWx0ZXJzKS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlck1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IEV4dHJhY3Q8RmlsdGVycywgUHJvcGVydHk+LFxuICAgICAgICBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSxcbiAgICAgICAgZm9yY2VTaW1wbGUgPSBmYWxzZVxuICAgICk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGRpc3BsYXlUeXBlLCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEdlbmVyaWNGaWx0ZXIocHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXI6IExvb2t1cERhdGFQcm92aWRlckluc3Q8RmlsdGVyR2VuZXJpY1Byb3BlcnR5Pik6IEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgdGhpcy5fZ2VuZXJpY0ZpbHRlciA9IG5ldyBGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcihwcm9wZXJ0eUxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmljRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR2VuZXJpY0ZpbHRlcihcbiAgICAgICAgcHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXI6IExvb2t1cERhdGFQcm92aWRlckluc3Q8RmlsdGVyR2VuZXJpY1Byb3BlcnR5PixcbiAgICAgICAgdmFsdWVMb29rdXBEYXRhUHJvdmlkZXI/OiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dlbmVyaWNGaWx0ZXIgPSB0aGlzLmFkZEdlbmVyaWNGaWx0ZXIocHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh2YWx1ZUxvb2t1cERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJpY0ZpbHRlci53aXRoVmFsdWVMb29rdXAodmFsdWVMb29rdXBEYXRhUHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3JzIGZyb20gY29sdW1ucy4gVGhlIGNvbHVtbnMgbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQ29sdW1uIHByb3BlcnRpZXMgdG8gYWRkIGZpbHRlcnMgZm9yLlxuICAgICAqXG4gICAgICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGNvbHVtbiBmb3IgcHJvcGVydHkgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxlTW9kZWw+W10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3JzIGZyb20gY29sdW1ucy4gVGhlIGNvbHVtbnMgbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBDb2x1bW4gcHJvcGVydGllcyB0byBhZGQgZmlsdGVycyBmb3IuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgY29sdW1uIGZvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZnJvbSBjb2x1bW4uIFRoZSBjb2x1bW4gbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgQ29sdW1uIHByb3BlcnR5IHRvIGFkZCBmaWx0ZXIgZm9yLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBPcHRpb25hbCBkaXNwbGF5IHR5cGUgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0gZm9yY2VTaW1wbGUgRm9yY2VzIHNpbXBsZSBjcmVhdGlvbiBvZiBmaWx0ZXIgKG5vIGxvb2t1cCBvciBsb29rdXAgZW51bSBmaWx0ZXJzKS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZTxGaWx0ZXJNb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIGZvcmNlU2ltcGxlID0gZmFsc2UpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uVW5zYWZlPEZpbHRlck1vZGVsLCBhbnk+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgTm8gY29sdW1uIGZvdW5kIGZvciBmaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxGaWx0ZXJNb2RlbD4oY29sdW1uLCBmb3JjZVNpbXBsZSk7XG4gICAgICAgIGlmIChkaXNwbGF5VHlwZSAhPSBudWxsKSBmaWx0ZXIud2l0aERpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBkZXNjcmlwdG9yIGZyb20gcHJvdmlkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGZvcmNlU2ltcGxlIEZvcmNlcyBzaW1wbGUgY3JlYXRpb24gb2YgZmlsdGVyIChubyBsb29rdXAgb3IgbG9va3VwIGVudW0gZmlsdGVycykuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgY29sdW1uIGZvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlPEZpbHRlck1vZGVsPihcbiAgICAgICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBhbnk+LFxuICAgICAgICBmb3JjZVNpbXBsZSA9IGZhbHNlXG4gICAgKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBsZXQgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPihjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgc3dpdGNoIChjb2x1bW4uY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlU2ltcGxlICYmIGNvbHVtbi5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IoY29sdW1uLnByb3BlcnR5LCBjb2x1bW4uZW51bSkgYXMgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciB8fCBmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSAmJiBjb2x1bW4uZGlzcGxheUZvcm1hdCkge1xuICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci53aXRoRGlzcGxheUZvcm1hdChjb2x1bW4uZGlzcGxheUZvcm1hdCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyRGVzY3JpcHRvcik7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gZmlsdGVyIERlc2NyaXB0b3IgZm9yIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogRmlsdGVycywgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICBpZiAoZmlsdGVyLnByb3BlcnR5ICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiIGFuZCBGaWx0ZXIgZGVzY3JpcHRvciBwcm9wZXJ0eSBcIiR7ZmlsdGVyLnByb3BlcnR5fVwiIGRvIG5vdCBtYXRjaC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlciBEZXNjcmlwdG9yIGZvciBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4oZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZ2xvYmFsIHNlYXJjaCBvcHRpb24gZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VhcmNoIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdsb2JhbCBzZWFyY2ggc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNlYXJjaC4gbGltaXRNYXhXb3JkcyBjYW4gbGltaXQgbWF4IHdvcmRzIGFzIHNlYXJjaCBpbnB1dCBhbmQgZmllbGRzIGNhbiBsaW1pdFxuICAgICAqIHRoZSBmaWx0ZXJpbmcgZmllbGRzIGluY2x1ZGVkIGluIHNlYXJjaCB3aGVuIGxhenkgbG9hZCBpcyBub3QgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNlYXJjaChzZWFyY2ggPSB0cnVlLCBvcHRzPzoge2xpbWl0TWF4V29yZHM/OiBudW1iZXIgfCBudWxsOyBmaWVsZHM/OiAoa2V5b2YgVGFibGVNb2RlbClbXX0pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlYXJjaFVuc2FmZShzZWFyY2gsIHtcbiAgICAgICAgICAgIGZpZWxkczogb3B0cz8uZmllbGRzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGltaXRNYXhXb3Jkczogb3B0cz8ubGltaXRNYXhXb3Jkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnbG9iYWwgc2VhcmNoIG9wdGlvbiBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWFyY2ggLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2xvYmFsIHNlYXJjaCBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Igc2VhcmNoLiBsaW1pdE1heFdvcmRzIGNhbiBsaW1pdCBtYXggd29yZHMgYXMgc2VhcmNoIGlucHV0IGFuZCBmaWVsZHMgY2FuIGxpbWl0XG4gICAgICogdGhlIGZpbHRlcmluZyBmaWVsZHMgaW5jbHVkZWQgaW4gc2VhcmNoIHdoZW4gbGF6eSBsb2FkIGlzIG5vdCBiZWluZyB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU2VhcmNoVW5zYWZlKHNlYXJjaCA9IHRydWUsIG9wdHM/OiB7bGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7IGZpZWxkcz86IHN0cmluZ1tdfSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zZWFyY2ggPSBzZWFyY2g7XG4gICAgICAgIHRoaXMuX3NlYXJjaExpbWl0TWF4V29yZHMgPSBvcHRzPy5saW1pdE1heFdvcmRzO1xuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBvcHRzPy5maWVsZHMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY2xhc3NlcyBmb3IgdGFibGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsYXNzTmFtZSBDbGFzcyBuYW1lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGFibGUgc2l6aW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNpemUgVGFibGUgc2l6ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNpemUoc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGhvdmVyIGVmZmVjdCBvbiB0YWJsZSByb3dzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvdmVyIEVuYWJsZXMvZGlzYWJsZXMgdGhlIGhvdmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSG92ZXIoaG92ZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0hvdmVyID0gaG92ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZ3JpZGxpbmVzIG9uIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWRsaW5lcyBFbmFibGVzL2Rpc2FibGVzIHRoZSBncmlkbGluZXMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhHcmlkbGluZXMoZ3JpZGxpbmVzID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNHcmlkbGluZXMgPSBncmlkbGluZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgcmVvcmRlcmFibGUgcHJvcGVydHkgb24gYWxsIGNvbHVtbnMgY3VycmVudGx5IGluIHRoZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29sdW1uc1Jlb3JkZXJhYmxlXSAtIEJvb2xlYW4gZmxhZyB0byBzZXQgcmVvcmRlcmluZyBvbiBjb2x1bW5zIHRvLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ3VycmVudENvbHVtbnNSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2x1bW5zVG9nZ2xlYWJsZV0gLSBCb29sZWFuIGZsYWcgdG8gc2V0IHRvZ2dsZWFibGUgb24gY29sdW1ucyB0by5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZShjb2x1bW5zVG9nZ2xlYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFRvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZWQgY29sdW1uIHJlc2l6ZSBmZWF0dXJlIHdpdGggY29sdW1uUmVzaXplTW9kZSBvbiBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNpemFibGVDb2x1bW5zIFRydWUgaWYgZW5hYmxlZFxuICAgICAqIEBwYXJhbSBjb2x1bW5SZXNpemVNb2RlICdmaXQnIG9yICdleHBhbmQnIG1vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNSZXNpemFibGUocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY29sdW1uIHRvICh1bilmcm96ZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uQ29sdW1uRnJvemVuIFRydWUgdG8gZnJlZXplIHNlbGVjdGlvbiBjb2x1bW4sIGZhbHNlIHRvIHVuZnJlZXplIGl0LlxuICAgICAqIEBwYXJhbSBhY3Rpb25Db2x1bW5Gcm96ZW4gVHJ1ZSB0byBmcmVlemUgYWN0aW9uIGNvbHVtbiwgZmFsc2UgdG8gdW5mcmVlemUgaXQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5Gcm96ZW4oc2VsZWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbiwgYWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPSBzZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbiA9IGFjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBmb3Igcm93cyBpbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcm93Q2xhc3NOYW1lIC0gVGhlIENTUyBjbGFzcyBuYW1lIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCByb3cuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NsYXNzTmFtZU1hcEZuXSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIG1hcCB0aGUgY2xhc3MgbmFtZSBkeW5hbWljYWxseSBiYXNlZCBvbiByb3cncyBpdGVtIGFuZCBjdXJyZW50IGNsYXNzIG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSb3dDbGFzc05hbWUocm93Q2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lID0gcm93Q2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWVNYXBGbiA9IGNsYXNzTmFtZU1hcEZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGhlYWRlciByb3cgY2xhc3MgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZWFkZXJDbGFzc05hbWUgQ2xhc3MgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEhlYWRlckNsYXNzTmFtZShoZWFkZXJDbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oZWFkZXJDbGFzc05hbWUgPSBoZWFkZXJDbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgbG9jYWxpemF0aW9uIG9mIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGxvY2FsZSBwcm9wZXJ0eSBmb3IgbG9jYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IExvY2FsZSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcm93IGV4cGFuZGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjaGVjayBpZiByb3cgY2FuIGJlIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSBjb2xTcGFuIHNldCBjdXN0b20gcm93IHNwYW4gZm9yIGV4cGFuZGVkIHJvdy5cbiAgICAgKiBAcGFyYW0gY29tcG9uZW50VHlwZSBDb21wb25lbnQgdG8gYmUgZGlzcGxheWVkIG9uIHJvdyBleHBhbmQuXG4gICAgICogQHBhcmFtIGlzUm93RXhwYW5kZWQgUHJvcGVydHkgb3IgZnVuY3Rpb24gdGhhdCB0ZWxscyB0aGUgdGFibGUgdG8gZXhwYW5kIHRoZSByb3cgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJvd0V4cGFuZGFibGUoXG4gICAgICAgIHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCxcbiAgICAgICAgY29sU3Bhbj86IG51bWJlcixcbiAgICAgICAgY29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+LFxuICAgICAgICBpc1Jvd0V4cGFuZGVkPzogc3RyaW5nIHwgKChpdGVtOiBUYWJsZU1vZGVsKSA9PiBib29sZWFuKVxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlUHJvcGVydHkgPSBwcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbFNwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzUm93RXhwYW5kZWQgPSBpc1Jvd0V4cGFuZGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHJvdyByZW9yZGVyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlb3JkYWJsZSBFbmFibGVzL2Rpc2FibGVzIGZlYXR1cmUuXG4gICAgICovXG4gICAgd2l0aFJvd1Jlb3JkZXJhYmxlKHJlb3JkYWJsZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fcm93UmVvcmRlcmFibGUgPSByZW9yZGFibGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl90cmFja1Byb3BlcnR5ID0gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9maWx0ZXJzID0gdGhpcy5fZmlsdGVycy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc29ydHMgPSB0aGlzLl9zb3J0cy5tYXAocyA9PiBzLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc2VhcmNoID0gdGhpcy5fc2VhcmNoO1xuICAgICAgICBvYmouX3NlYXJjaExpbWl0TWF4V29yZHMgPSB0aGlzLl9zZWFyY2hMaW1pdE1heFdvcmRzO1xuICAgICAgICBvYmouX3NlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/IFsuLi50aGlzLl9zZWFyY2hGaWVsZHNdIDogdW5kZWZpbmVkO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl9oYXNIb3ZlciA9IHRoaXMuX2hhc0hvdmVyO1xuICAgICAgICBvYmouX2hhc0dyaWRsaW5lcyA9IHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICAgICAgb2JqLl9oYXNSZXNpemFibGVDb2x1bW5zID0gdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgb2JqLl9jb2x1bW5SZXNpemVNb2RlID0gdGhpcy5fY29sdW1uUmVzaXplTW9kZTtcbiAgICAgICAgb2JqLl9hY3Rpb25Db2x1bW5Gcm96ZW4gPSB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIG9iai5fc2VsZWN0aW9uQ29sdW1uRnJvemVuID0gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9wYWdpbmF0aW9uTW9kZSA9IHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgICAgICBvYmouX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlID0gdGhpcy5fcm93RXhwYW5kYWJsZTtcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlQ29sU3BhbiA9IHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9pc1Jvd0V4cGFuZGVkID0gdGhpcy5pc1Jvd0V4cGFuZGVkO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlID0gdGhpcy5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5fcm93UmVvcmRlcmFibGUgPSB0aGlzLl9yb3dSZW9yZGVyYWJsZTtcbiAgICAgICAgb2JqLl9nZW5lcmljRmlsdGVyID0gdGhpcy5fZ2VuZXJpY0ZpbHRlcj8uY29weSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBjdXJyZW50IGRlc2NyaXB0b3IgdG8gYSBuZXcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGNvcHkoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCBleHRlbmRzIFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbHVtbnM6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwudGl0bGVQcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFRpdGxlKG1vZGVsLnRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGV4Y2x1ZGVkIGNvbHVtbnMgd2hlbiBnZW5lcmF0aW5nIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gZXhjbHVkZWRDb2x1bW4gbmFtZXMgb2YgZXhjbHVkZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0V4Y2x1ZGVkKGV4Y2x1ZGVkQ29sdW1uOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9leGNsdWRlZENvbHVtbnMgPSBleGNsdWRlZENvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBzb3J0IGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBzb3J0Q29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBzb3J0T25Db2x1bW5zIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBzb3J0Q29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgc29ydCwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgc29ydFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1NvcnQoc29ydE9uQ29sdW1uczogc3RyaW5nW10sIHNvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1uTW9kZSA9IHNvcnRDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1ucyA9IHNvcnRPbkNvbHVtbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggZmlsdGVyIGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBmaWx0ZXJDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIGZpbHRlck9uQ29sdW1uIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBmaWx0ZXJDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBmaWx0ZXIsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIGZpbHRlclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0ZpbHRlcihmaWx0ZXJPbkNvbHVtbjogc3RyaW5nW10sIGZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPSBmaWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zID0gZmlsdGVyT25Db2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgZ2l2ZW4gdHlwZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGUgY3VzdG9tIHR5cGUgZm9yIGNvbHVtblxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBjdXN0b20gY29sdW1uIHZhbHVlIGRpc3BsYXkgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uIGFyZ3VtZW50cyBmb3IgY29sdW1uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5QcmVzZXRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogRGF0YUxpc3RSZXN1bHQpOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0b3IgPSB0aGlzLnRvVGFibGVEZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZGF0YSA9PSBudWxsIHx8IGRhdGEuZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5kYXRhWzBdO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWwpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuX2V4Y2x1ZGVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpOyAvL2V4Y2x1ZGUgYXJyYXlzIGFuZCBzZXRzXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YUNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBrZXkpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT47XG4gICAgICAgICAgICBpZiAobWV0YUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUNvbHVtbi52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBtZXRhQ29sdW1uLnRvQ29sdW1uRGVzY3JpcHRvcigpO1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW4oa2V5KS53aXRoVGl0bGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW4oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5ICYmICFjb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoJ3JldicpKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShbdGhpcy5tb2RlbC5pMThuQmFzZUtleSwgJ3Byb3BlcnRpZXMnLCBjb2x1bW4ucHJvcGVydHldLmpvaW4oJy4nKS5yZXBsYWNlKCdzdGF0ZS4nLCAnJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZTb3J0Q29sdW1ucyA9IHRoaXMuX3NvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mU29ydENvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZlNvcnRDb2x1bW5zKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLndpdGhTb3J0VW5zYWZlKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZkZpbHRlckNvbHVtbnMgPSB0aGlzLl9maWx0ZXJDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgKCh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mRmlsdGVyQ29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mRmlsdGVyQ29sdW1ucykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3IuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZSBkeW5hbWljIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2V4Y2x1ZGVkQ29sdW1ucyA9IFsuLi50aGlzLl9leGNsdWRlZENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5zID0gWy4uLnRoaXMuX2ZpbHRlckNvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1ucyA9IFsuLi50aGlzLl9zb3J0Q29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbk1vZGUgPSB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1uTW9kZSA9IHRoaXMuX3NvcnRDb2x1bW5Nb2RlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9UYWJsZURlc2NyaXB0b3IoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4odGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=","import { ModelDescriptor, model } from '@mediusinc/mng-commons/model';\nimport { TableDescriptorInst, TableDynamicDescriptorInst } from './table.descriptor';\nexport function tableDescriptor(modelOrOpts, \n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nopts) {\n if (modelOrOpts == null) {\n return new TableDescriptorInst(model());\n }\n else if (modelOrOpts instanceof ModelDescriptor) {\n return new TableDescriptorInst(modelOrOpts);\n }\n else {\n // this could have autoGenerated if model descriptor is class\n return new TableDescriptorInst(model(modelOrOpts));\n }\n}\nexport function tableDynamicDescriptor(modelOrOpts) {\n return modelOrOpts instanceof ModelDescriptor\n ? new TableDynamicDescriptorInst(modelOrOpts)\n : new TableDynamicDescriptorInst(new ModelDescriptor(modelOrOpts?.id, modelOrOpts?.title, modelOrOpts?.i18nBase));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGVzY3JpcHRvci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9kZXNjcmlwdG9ycy90YWJsZS1kZXNjcmlwdG9yLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBNkMsS0FBSyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFL0csT0FBTyxFQUFDLG1CQUFtQixFQUFFLDBCQUEwQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUF5Qm5GLE1BQU0sVUFBVSxlQUFlLENBQzNCLFdBQXFGO0FBQ3JGLDZEQUE2RDtBQUM3RCxJQUFnRTtJQUVoRSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksbUJBQW1CLENBQTZCLEtBQUssRUFBYyxDQUFDLENBQUM7SUFDcEYsQ0FBQztTQUFNLElBQUksV0FBVyxZQUFZLGVBQWUsRUFBRSxDQUFDO1FBQ2hELE9BQU8sSUFBSSxtQkFBbUIsQ0FBNkIsV0FBVyxDQUFDLENBQUM7SUFDNUUsQ0FBQztTQUFNLENBQUM7UUFDSiw2REFBNkQ7UUFDN0QsT0FBTyxJQUFJLG1CQUFtQixDQUE2QixLQUFLLENBQWEsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxXQUF1RTtJQUMxRyxPQUFPLFdBQVcsWUFBWSxlQUFlO1FBQ3pDLENBQUMsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLFdBQVcsQ0FBQztRQUM3QyxDQUFDLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLGVBQWUsQ0FBTSxXQUFXLEVBQUUsRUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFlLEVBQUUsV0FBVyxFQUFFLFFBQWtCLENBQUMsQ0FBQyxDQUFDO0FBQzdKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01vZGVsRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yQ3JlYXRlT3B0cywgVHlwZURlc2NyaXB0b3IsIG1vZGVsfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3JJbnN0LCBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcblxuZXhwb3J0IHR5cGUgVGFibGVEZXNjcmlwdG9yU29ydHNGaWx0ZXJzQ3JlYXRlT3B0c1R5cGU8VGFibGVNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGVNb2RlbD4gPSB7XG4gICAgZmlsdGVyc1R5cGU/OiBUeXBlRGVzY3JpcHRvcjxGaWx0ZXJzPiB8IE1vZGVsRGVzY3JpcHRvcjxGaWx0ZXJzPjtcbiAgICBzb3J0c1R5cGU/OiBUeXBlRGVzY3JpcHRvcjxTb3J0cz4gfCBNb2RlbERlc2NyaXB0b3I8U29ydHM+O1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVEZXNjcmlwdG9yQ3JlYXRlT3B0c1R5cGU8VGFibGVNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGVNb2RlbD4gPSBUYWJsZURlc2NyaXB0b3JTb3J0c0ZpbHRlcnNDcmVhdGVPcHRzVHlwZTxcbiAgICBUYWJsZU1vZGVsLFxuICAgIFNvcnRzLFxuICAgIEZpbHRlcnNcbj4gJlxuICAgIE1vZGVsRGVzY3JpcHRvckNyZWF0ZU9wdHM8VGFibGVNb2RlbD47XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZURlc2NyaXB0b3I8VGFibGVNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGVNb2RlbD4oKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz47XG5leHBvcnQgZnVuY3Rpb24gdGFibGVEZXNjcmlwdG9yPFRhYmxlTW9kZWwsIFNvcnRzID0ga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxlTW9kZWw+KFxuICAgIG9wdHM6IFRhYmxlRGVzY3JpcHRvckNyZWF0ZU9wdHNUeXBlPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPlxuKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz47XG5leHBvcnQgZnVuY3Rpb24gdGFibGVEZXNjcmlwdG9yPFRhYmxlTW9kZWwsIFNvcnRzID0ga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxlTW9kZWw+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD4sXG4gICAgb3B0cz86IFRhYmxlRGVzY3JpcHRvclNvcnRzRmlsdGVyc0NyZWF0ZU9wdHNUeXBlPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPlxuKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz47XG5leHBvcnQgZnVuY3Rpb24gdGFibGVEZXNjcmlwdG9yPFRhYmxlTW9kZWwsIFNvcnRzID0ga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxlTW9kZWw+KFxuICAgIG9wdHM/OiBUYWJsZURlc2NyaXB0b3JDcmVhdGVPcHRzVHlwZTxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz5cbik6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+O1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlcnMgPSBrZXlvZiBUYWJsZU1vZGVsPihcbiAgICBtb2RlbE9yT3B0cz86IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IFRhYmxlRGVzY3JpcHRvckNyZWF0ZU9wdHNUeXBlPFRhYmxlTW9kZWw+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBvcHRzPzogVGFibGVEZXNjcmlwdG9yQ3JlYXRlT3B0c1R5cGU8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG4pIHtcbiAgICBpZiAobW9kZWxPck9wdHMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KG1vZGVsPFRhYmxlTW9kZWw+KCkpO1xuICAgIH0gZWxzZSBpZiAobW9kZWxPck9wdHMgaW5zdGFuY2VvZiBNb2RlbERlc2NyaXB0b3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPihtb2RlbE9yT3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXZlIGF1dG9HZW5lcmF0ZWQgaWYgbW9kZWwgZGVzY3JpcHRvciBpcyBjbGFzc1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KG1vZGVsPFRhYmxlTW9kZWw+KG1vZGVsT3JPcHRzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVEeW5hbWljRGVzY3JpcHRvcihtb2RlbE9yT3B0cz86IE1vZGVsRGVzY3JpcHRvcjxhbnk+IHwgVGFibGVEZXNjcmlwdG9yQ3JlYXRlT3B0c1R5cGU8YW55Pik6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0IHtcbiAgICByZXR1cm4gbW9kZWxPck9wdHMgaW5zdGFuY2VvZiBNb2RlbERlc2NyaXB0b3JcbiAgICAgICAgPyBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QobW9kZWxPck9wdHMpXG4gICAgICAgIDogbmV3IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0KG5ldyBNb2RlbERlc2NyaXB0b3I8YW55Pihtb2RlbE9yT3B0cz8uaWQgYXMgc3RyaW5nLCBtb2RlbE9yT3B0cz8udGl0bGUgYXMgc3RyaW5nLCBtb2RlbE9yT3B0cz8uaTE4bkJhc2UgYXMgc3RyaW5nKSk7XG59XG4iXX0=","import { TableDataProviderInst } from '../data-providers/table.data-provider';\nexport function tableDataProviderFromDescriptor(descriptor, serviceType) {\n return typeof serviceType !== 'undefined'\n ? new TableDataProviderInst(serviceType)\n : new TableDataProviderInst(undefined);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2hlbHBlcnMvdGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUF5QjVFLE1BQU0sVUFBVSwrQkFBK0IsQ0FDM0MsVUFBc0QsRUFDdEQsV0FBMEI7SUFFMUIsT0FBTyxPQUFPLFdBQVcsS0FBSyxXQUFXO1FBQ3JDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUE0RCxXQUF3QyxDQUFDO1FBQ2hJLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUE4QyxTQUFTLENBQUMsQ0FBQztBQUM1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge1RhYmxlRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMvdGFibGUuZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3InO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkYXRhIHByb3ZpZGVyIGZvciBmcm9tIGRlc2NyaXB0b3IuIERPIE5PVCB1c2UgaWYgdGhlIG1vZGVsIGlzIGNsYXNzLCBiZWNhdXNlIHRoZSB0eXBlIChmcm9tIG1vZGVsIGRlc2NyaXB0b3IpIHdpbGwgbm90IGJlIHNldCBpbiBkYXRhIHByb3ZpZGVyLlxuICpcbiAqIEBwYXJhbSB7VGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+fSBkZXNjcmlwdG9yIC0gVGhlIHRhYmxlIGRlc2NyaXB0b3IuXG4gKlxuICogQHJldHVybiB7VGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQ+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxNb2RlbCwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz5cbik6IFRhYmxlRGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkPjtcbi8qKlxuICogQ3JlYXRlcyBhIGRhdGEgcHJvdmlkZXIgZm9yIGZyb20gZGVzY3JpcHRvci4gRE8gTk9UIHVzZSBpZiB0aGUgbW9kZWwgaXMgY2xhc3MsIGJlY2F1c2UgdGhlIHR5cGUgKGZyb20gbW9kZWwgZGVzY3JpcHRvcikgd2lsbCBub3QgYmUgc2V0IGluIGRhdGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7U2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPn0gc2VydmljZUNsYXNzIC0gVGhlIHNlcnZpY2UgY2xhc3MgdHlwZS5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxNb2RlbCwgU2VydmljZSA9IGFueSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz4sXG4gICAgc2VydmljZUNsYXNzOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4pOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+PjtcbmV4cG9ydCBmdW5jdGlvbiB0YWJsZURhdGFQcm92aWRlckZyb21EZXNjcmlwdG9yPE1vZGVsLCBTZXJ2aWNlID0gYW55LCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPixcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VDbGFzc1xuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBuZXcgVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4oc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgOiBuZXcgVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG59XG4iXX0=","// data providers\nexport * from './data-providers/table.data-provider';\nexport * from './data-providers/table-data-provider.factory';\n// descriptors\nexport * from './descriptors/column.descriptor';\nexport * from './descriptors/sort.descriptor';\nexport * from './descriptors/table.descriptor';\nexport * from './descriptors/table-descriptor.factory';\n// helpers\nexport * from './helpers/column-converter';\nexport * from './helpers/table-data-provider-descriptor-convert';\n// models\nexport * from './models/column.model';\nexport * from './models/column-value.model';\nexport * from './models/table.model';\nexport * from './models/table-columns.model';\nexport * from './models/table-event.model';\nexport * from './models/row-expandable-component.model';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxrREFBa0QsQ0FBQztBQUVqRSxTQUFTO0FBQ1QsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy90YWJsZS5kYXRhLXByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1wcm92aWRlcnMvdGFibGUtZGF0YS1wcm92aWRlci5mYWN0b3J5JztcblxuLy8gZGVzY3JpcHRvcnNcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9zb3J0LmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy90YWJsZS5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUtZGVzY3JpcHRvci5mYWN0b3J5JztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2NvbHVtbi1jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3RhYmxlLWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0JztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY29sdW1uLXZhbHVlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdGFibGUtZXZlbnQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsJztcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLXRhYmxlLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvbWVkaXVzaW5jLW1uZy1jb21tb25zLXRhYmxlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}