@mediusinc/mng-commons 0.9.0 → 0.9.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dev-scripts/version-info.js +98 -0
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  4. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  5. package/esm2020/lib/api/models/index.mjs +8 -8
  6. package/esm2020/lib/api/models/mappers.mjs +12 -12
  7. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  8. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  9. package/esm2020/lib/api/models/query-result.model.mjs +17 -17
  10. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  11. package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
  12. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +66 -66
  13. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
  14. package/esm2020/lib/api/services/index.mjs +3 -3
  15. package/esm2020/lib/api/utils/index.mjs +2 -2
  16. package/esm2020/lib/api/utils/medius-rest.util.mjs +151 -151
  17. package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
  18. package/esm2020/lib/components/action/action.component.mjs +177 -177
  19. package/esm2020/lib/components/action/editor/action-editor.component.mjs +247 -247
  20. package/esm2020/lib/components/action/index.mjs +3 -3
  21. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  22. package/esm2020/lib/components/action/models/action-execution.model.mjs +234 -234
  23. package/esm2020/lib/components/action/models/index.mjs +2 -2
  24. package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
  25. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +268 -268
  26. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +160 -160
  27. package/esm2020/lib/components/form/editor/form-editor.component.mjs +189 -189
  28. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +18 -18
  29. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +42 -42
  30. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
  31. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +95 -95
  32. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +16 -16
  33. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +178 -178
  34. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +154 -154
  35. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +126 -126
  36. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
  37. package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
  38. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
  39. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
  40. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  41. package/esm2020/lib/components/form/index.mjs +3 -3
  42. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  43. package/esm2020/lib/components/form/models/index.mjs +1 -1
  44. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  45. package/esm2020/lib/components/layout/footer.component.mjs +17 -17
  46. package/esm2020/lib/components/layout/index.mjs +8 -7
  47. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  48. package/esm2020/lib/components/layout/menu-item.component.mjs +216 -216
  49. package/esm2020/lib/components/layout/menu.component.mjs +21 -20
  50. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  51. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
  52. package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
  53. package/esm2020/lib/components/layout/version.component.mjs +58 -0
  54. package/esm2020/lib/components/tableview/index.mjs +6 -6
  55. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  56. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  57. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +57 -57
  58. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +53 -53
  59. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +101 -101
  60. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +70 -70
  61. package/esm2020/lib/components/tableview/table/table.component.mjs +427 -427
  62. package/esm2020/lib/components/tableview/tableview.component.mjs +91 -91
  63. package/esm2020/lib/config/formly.config.mjs +180 -180
  64. package/esm2020/lib/config/index.mjs +1 -1
  65. package/esm2020/lib/config/models/index.mjs +1 -1
  66. package/esm2020/lib/config/models/mng-config.model.mjs +2 -2
  67. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  68. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  69. package/esm2020/lib/data-providers/index.mjs +5 -5
  70. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  71. package/esm2020/lib/data-providers/table.data-provider.mjs +16 -16
  72. package/esm2020/lib/data-providers/tableview.data-provider.mjs +16 -16
  73. package/esm2020/lib/descriptors/action.descriptor.mjs +565 -565
  74. package/esm2020/lib/descriptors/column.descriptor.mjs +260 -260
  75. package/esm2020/lib/descriptors/editor.descriptor.mjs +146 -146
  76. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
  77. package/esm2020/lib/descriptors/field.descriptor.mjs +799 -799
  78. package/esm2020/lib/descriptors/filter.descriptor.mjs +261 -261
  79. package/esm2020/lib/descriptors/index.mjs +9 -9
  80. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  81. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  82. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  83. package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
  84. package/esm2020/lib/descriptors/table.descriptor.mjs +196 -196
  85. package/esm2020/lib/descriptors/tableview.descriptor.mjs +134 -134
  86. package/esm2020/lib/descriptors/types/action.type.mjs +52 -52
  87. package/esm2020/lib/descriptors/types/column.type.mjs +10 -10
  88. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  89. package/esm2020/lib/descriptors/types/field.type.mjs +52 -52
  90. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  91. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  92. package/esm2020/lib/descriptors/types/table.type.mjs +16 -16
  93. package/esm2020/lib/directives/component.directive.mjs +43 -43
  94. package/esm2020/lib/directives/index.mjs +2 -2
  95. package/esm2020/lib/directives/template.directive.mjs +27 -27
  96. package/esm2020/lib/mng-commons.module.mjs +438 -427
  97. package/esm2020/lib/models/column-value.model.mjs +1 -1
  98. package/esm2020/lib/models/enum.model.mjs +1 -1
  99. package/esm2020/lib/models/error.model.mjs +1 -1
  100. package/esm2020/lib/models/index.mjs +8 -7
  101. package/esm2020/lib/models/menu.model.mjs +1 -1
  102. package/esm2020/lib/models/user.model.mjs +1 -1
  103. package/esm2020/lib/models/version.model.mjs +2 -0
  104. package/esm2020/lib/models/view-container.model.mjs +1 -1
  105. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  106. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  107. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  108. package/esm2020/lib/pipes/index.mjs +5 -5
  109. package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
  110. package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
  111. package/esm2020/lib/router/index.mjs +1 -1
  112. package/esm2020/lib/router/models/index.mjs +1 -1
  113. package/esm2020/lib/router/models/router.model.mjs +1 -1
  114. package/esm2020/lib/router/route-builder.mjs +431 -431
  115. package/esm2020/lib/services/action-executor.service.mjs +535 -535
  116. package/esm2020/lib/services/commons.service.mjs +331 -328
  117. package/esm2020/lib/services/configuration.service.mjs +110 -110
  118. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  119. package/esm2020/lib/services/index.mjs +6 -6
  120. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  121. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  122. package/esm2020/lib/services/internal/index.mjs +2 -2
  123. package/esm2020/lib/services/navigation.service.mjs +47 -47
  124. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  125. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  126. package/esm2020/lib/services/providers/index.mjs +2 -2
  127. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  128. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  129. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  130. package/esm2020/lib/services/tokens/index.mjs +4 -4
  131. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  132. package/esm2020/lib/services/version.service.mjs +38 -0
  133. package/esm2020/lib/services/view-container.component.service.mjs +34 -34
  134. package/esm2020/lib/types/index.mjs +2 -2
  135. package/esm2020/lib/types/type.decorator.mjs +12 -12
  136. package/esm2020/lib/types/type.model.mjs +1 -1
  137. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  138. package/esm2020/lib/utils/editor-formly.util.mjs +210 -210
  139. package/esm2020/lib/utils/enum.util.mjs +81 -81
  140. package/esm2020/lib/utils/i18n.util.mjs +232 -232
  141. package/esm2020/lib/utils/index.mjs +7 -7
  142. package/esm2020/lib/utils/model.util.mjs +59 -59
  143. package/esm2020/lib/utils/notification.util.mjs +45 -45
  144. package/esm2020/lib/utils/route.util.mjs +23 -23
  145. package/esm2020/lib/utils/styles.util.mjs +40 -40
  146. package/esm2020/lib/utils/type.util.mjs +76 -76
  147. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  148. package/esm2020/public-api.mjs +41 -41
  149. package/fesm2015/mediusinc-mng-commons.mjs +9967 -9865
  150. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  151. package/fesm2020/mediusinc-mng-commons.mjs +9829 -9730
  152. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  153. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  154. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  155. package/lib/api/models/filter-param.model.d.ts +23 -23
  156. package/lib/api/models/index.d.ts +8 -8
  157. package/lib/api/models/mappers.d.ts +6 -6
  158. package/lib/api/models/query-mode.model.d.ts +16 -16
  159. package/lib/api/models/query-param.model.d.ts +31 -31
  160. package/lib/api/models/query-result.model.d.ts +23 -23
  161. package/lib/api/models/serialization.model.d.ts +8 -8
  162. package/lib/api/services/api.abstract.service.d.ts +24 -24
  163. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  164. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  165. package/lib/api/services/index.d.ts +3 -3
  166. package/lib/api/utils/index.d.ts +2 -2
  167. package/lib/api/utils/medius-rest.util.d.ts +15 -15
  168. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  169. package/lib/components/action/action.component.d.ts +69 -69
  170. package/lib/components/action/editor/action-editor.component.d.ts +64 -64
  171. package/lib/components/action/index.d.ts +3 -3
  172. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  173. package/lib/components/action/models/action-execution.model.d.ts +129 -129
  174. package/lib/components/action/models/index.d.ts +2 -2
  175. package/lib/components/action/route/action-route.component.d.ts +31 -31
  176. package/lib/components/form/autocomplete/autocomplete.component.d.ts +53 -53
  177. package/lib/components/form/dropdown/dropdown.component.d.ts +44 -44
  178. package/lib/components/form/editor/form-editor.component.d.ts +45 -45
  179. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +12 -12
  180. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
  181. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +13 -13
  182. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +21 -21
  183. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -6
  184. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +45 -45
  185. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +22 -22
  186. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  187. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  188. package/lib/components/form/formly/fields/index.d.ts +9 -9
  189. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
  190. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
  191. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  192. package/lib/components/form/index.d.ts +3 -3
  193. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  194. package/lib/components/form/models/index.d.ts +1 -1
  195. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  196. package/lib/components/layout/footer.component.d.ts +9 -9
  197. package/lib/components/layout/index.d.ts +7 -6
  198. package/lib/components/layout/main-layout.component.d.ts +20 -20
  199. package/lib/components/layout/menu-item.component.d.ts +37 -37
  200. package/lib/components/layout/menu.component.d.ts +10 -10
  201. package/lib/components/layout/services/index.d.ts +1 -1
  202. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  203. package/lib/components/layout/topbar.component.d.ts +24 -24
  204. package/lib/components/layout/version.component.d.ts +19 -0
  205. package/lib/components/tableview/index.d.ts +6 -6
  206. package/lib/components/tableview/models/index.d.ts +1 -1
  207. package/lib/components/tableview/models/table.event.d.ts +17 -17
  208. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +20 -20
  209. package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
  210. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +32 -32
  211. package/lib/components/tableview/table/column-value/column-value.component.d.ts +29 -29
  212. package/lib/components/tableview/table/table.component.d.ts +105 -105
  213. package/lib/components/tableview/tableview.component.d.ts +41 -41
  214. package/lib/config/formly.config.d.ts +15 -15
  215. package/lib/config/index.d.ts +1 -1
  216. package/lib/config/models/index.d.ts +1 -1
  217. package/lib/config/models/mng-config.model.d.ts +36 -34
  218. package/lib/data-providers/base.data-provider.d.ts +14 -14
  219. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  220. package/lib/data-providers/index.d.ts +5 -5
  221. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  222. package/lib/data-providers/table.data-provider.d.ts +14 -14
  223. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  224. package/lib/descriptors/action.descriptor.d.ts +227 -227
  225. package/lib/descriptors/column.descriptor.d.ts +81 -81
  226. package/lib/descriptors/editor.descriptor.d.ts +37 -37
  227. package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
  228. package/lib/descriptors/field.descriptor.d.ts +287 -287
  229. package/lib/descriptors/filter.descriptor.d.ts +97 -97
  230. package/lib/descriptors/index.d.ts +9 -9
  231. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  232. package/lib/descriptors/interfaces/index.d.ts +2 -2
  233. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  234. package/lib/descriptors/model.descriptor.d.ts +15 -15
  235. package/lib/descriptors/table.descriptor.d.ts +66 -66
  236. package/lib/descriptors/tableview.descriptor.d.ts +42 -42
  237. package/lib/descriptors/types/action.type.d.ts +45 -45
  238. package/lib/descriptors/types/column.type.d.ts +9 -9
  239. package/lib/descriptors/types/editor.type.d.ts +6 -6
  240. package/lib/descriptors/types/field.type.d.ts +44 -44
  241. package/lib/descriptors/types/filter.type.d.ts +27 -27
  242. package/lib/descriptors/types/index.d.ts +6 -6
  243. package/lib/descriptors/types/table.type.d.ts +13 -13
  244. package/lib/directives/component.directive.d.ts +16 -16
  245. package/lib/directives/index.d.ts +2 -2
  246. package/lib/directives/template.directive.d.ts +13 -13
  247. package/lib/mng-commons.module.d.ts +87 -86
  248. package/lib/models/column-value.model.d.ts +4 -4
  249. package/lib/models/enum.model.d.ts +6 -6
  250. package/lib/models/error.model.d.ts +14 -14
  251. package/lib/models/index.d.ts +7 -6
  252. package/lib/models/menu.model.d.ts +25 -25
  253. package/lib/models/user.model.d.ts +8 -8
  254. package/lib/models/version.model.d.ts +18 -0
  255. package/lib/models/view-container.model.d.ts +6 -6
  256. package/lib/pipes/boolean.pipe.d.ts +7 -7
  257. package/lib/pipes/enum.pipe.d.ts +8 -8
  258. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  259. package/lib/pipes/index.d.ts +5 -5
  260. package/lib/pipes/json-path.pipe.d.ts +13 -13
  261. package/lib/pipes/link-formatter.pipe.d.ts +11 -11
  262. package/lib/router/index.d.ts +1 -1
  263. package/lib/router/models/index.d.ts +1 -1
  264. package/lib/router/models/router.model.d.ts +22 -22
  265. package/lib/router/route-builder.d.ts +86 -86
  266. package/lib/services/action-executor.service.d.ts +149 -149
  267. package/lib/services/commons.service.d.ts +73 -72
  268. package/lib/services/configuration.service.d.ts +36 -36
  269. package/lib/services/error-mapper.service.d.ts +7 -7
  270. package/lib/services/index.d.ts +6 -6
  271. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  272. package/lib/services/internal/commons-init.service.d.ts +16 -16
  273. package/lib/services/internal/index.d.ts +2 -2
  274. package/lib/services/navigation.service.d.ts +14 -14
  275. package/lib/services/providers/config-service.provider.d.ts +6 -6
  276. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  277. package/lib/services/providers/index.d.ts +2 -2
  278. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  279. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  280. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  281. package/lib/services/tokens/index.d.ts +4 -4
  282. package/lib/services/tokens/module-config.token.d.ts +3 -3
  283. package/lib/services/version.service.d.ts +13 -0
  284. package/lib/services/view-container.component.service.d.ts +22 -22
  285. package/lib/types/index.d.ts +2 -2
  286. package/lib/types/type.decorator.d.ts +4 -4
  287. package/lib/types/type.model.d.ts +20 -20
  288. package/lib/utils/action-data-provider.util.d.ts +20 -20
  289. package/lib/utils/editor-formly.util.d.ts +10 -10
  290. package/lib/utils/enum.util.d.ts +50 -50
  291. package/lib/utils/i18n.util.d.ts +56 -56
  292. package/lib/utils/index.d.ts +7 -7
  293. package/lib/utils/model.util.d.ts +8 -8
  294. package/lib/utils/notification.util.d.ts +11 -11
  295. package/lib/utils/route.util.d.ts +4 -4
  296. package/lib/utils/styles.util.d.ts +14 -14
  297. package/lib/utils/type.util.d.ts +36 -36
  298. package/mediusinc-mng-commons-0.9.1-rc.1.tgz +0 -0
  299. package/mediusinc-mng-commons.d.ts +5 -5
  300. package/package.json +6 -7
  301. package/public-api.d.ts +30 -30
  302. package/scss/mng-overrides/_layout_menu.scss +6 -0
  303. package/scss/mng-overrides/_layout_styles.scss +1 -0
  304. package/version-info.json +10 -0
@@ -1,211 +1,211 @@
1
- import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
2
- import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
3
- export class EditorFormlyUtil {
4
- static createFormlyConfigFromDescriptor(descriptor) {
5
- const fields = [];
6
- if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
7
- // dont use tabs
8
- fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
9
- }
10
- else {
11
- fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
12
- }
13
- return fields;
14
- }
15
- static createFormlyTabType(tabGroups) {
16
- const tabsField = {
17
- type: 'tabs',
18
- fieldGroup: []
19
- };
20
- for (const tab of tabGroups) {
21
- const tabField = {
22
- id: tab.name,
23
- templateOptions: {},
24
- fieldGroup: []
25
- };
26
- if (tab.title) {
27
- tabField.templateOptions.label = tab.title;
28
- }
29
- tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
30
- tabsField.fieldGroup.push(tabField);
31
- }
32
- return [tabsField];
33
- }
34
- static createFormlyGroupType(groups) {
35
- if (groups.length === 1 && groups[0].default) {
36
- // dont use fieldset, just create fields
37
- return EditorFormlyUtil.createFormlyFields(groups[0]);
38
- }
39
- else {
40
- const groupsField = {
41
- type: 'fieldset',
42
- fieldGroup: []
43
- };
44
- for (const group of groups) {
45
- const groupField = {
46
- id: group.name,
47
- templateOptions: {
48
- descriptor: group
49
- },
50
- fieldGroup: []
51
- };
52
- if (group.title) {
53
- groupField.templateOptions.label = group.title;
54
- }
55
- groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
56
- groupsField.fieldGroup.push(groupField);
57
- }
58
- return [groupsField];
59
- }
60
- }
61
- static createFormlyFields(descriptor) {
62
- const fields = [];
63
- for (const descriptorField of descriptor.fields) {
64
- fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
65
- }
66
- // wrap in group to be able to use flex grid
67
- const wrapperGroup = {
68
- fieldGroupClassName: 'p-fluid formgrid grid',
69
- fieldGroup: fields
70
- };
71
- EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
72
- return [wrapperGroup];
73
- }
74
- static createFormlyField(descriptor) {
75
- const field = {
76
- key: descriptor.property,
77
- expressionProperties: {},
78
- templateOptions: {}
79
- };
80
- let className = descriptor.className;
81
- if (!className) {
82
- // assign default field width through entire row
83
- className = 'col-12';
84
- }
85
- field.className = className;
86
- field.templateOptions['descriptor'] = descriptor;
87
- if (descriptor instanceof FieldInputDescriptor) {
88
- switch (descriptor.fieldType) {
89
- case FieldInputTypeEnum.Hidden:
90
- break;
91
- case FieldInputTypeEnum.Label:
92
- field.type = 'label';
93
- delete field.key;
94
- break;
95
- case FieldInputTypeEnum.Textarea:
96
- field.type = 'textarea';
97
- break;
98
- case FieldInputTypeEnum.Number:
99
- field.type = 'number';
100
- field.templateOptions.min = descriptor.numberMin;
101
- field.templateOptions.max = descriptor.numberMax;
102
- break;
103
- case FieldInputTypeEnum.Currency:
104
- field.type = 'currency';
105
- field.templateOptions.min = descriptor.numberMin;
106
- field.templateOptions.max = descriptor.numberMax;
107
- break;
108
- case FieldInputTypeEnum.Switch:
109
- field.type = 'switch';
110
- break;
111
- case FieldInputTypeEnum.Radio:
112
- field.type = 'radio';
113
- break;
114
- case FieldInputTypeEnum.Datepicker:
115
- field.type = 'datepicker';
116
- break;
117
- case FieldInputTypeEnum.Mask:
118
- field.type = 'mask';
119
- break;
120
- case FieldInputTypeEnum.File:
121
- field.type = 'file';
122
- break;
123
- case FieldInputTypeEnum.Custom:
124
- field.type = descriptor.customComponentName;
125
- break;
126
- default:
127
- field.type = 'input';
128
- field.templateOptions.minLength = descriptor.minLength;
129
- field.templateOptions.maxLength = descriptor.maxLength;
130
- field.templateOptions.pattern = descriptor.pattern;
131
- break;
132
- }
133
- }
134
- else if (descriptor instanceof FieldLookupEnumDescriptor) {
135
- field.type = 'enum';
136
- }
137
- else if (descriptor instanceof FieldLookupDescriptor) {
138
- switch (descriptor.lookupType) {
139
- case FieldLookupTypeEnum.Autocomplete:
140
- field.type = 'autocomplete';
141
- break;
142
- case FieldLookupTypeEnum.Dialog:
143
- field.type = 'dialog';
144
- break;
145
- case FieldLookupTypeEnum.Dropdown:
146
- default:
147
- field.type = 'dropdown';
148
- break;
149
- }
150
- }
151
- else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
152
- field.type = 'table-dialog-multiselect';
153
- }
154
- else if (descriptor instanceof FieldManyEditorDescriptor) {
155
- field.type = 'table-dialog-form';
156
- }
157
- if (descriptor.label) {
158
- field.templateOptions.label = descriptor.label;
159
- }
160
- if (descriptor.requiredExpression) {
161
- field.expressionProperties['templateOptions.required'] = descriptor.requiredExpression;
162
- }
163
- if (descriptor.required) {
164
- field.templateOptions.required = true;
165
- }
166
- if (descriptor.hiddenExpression) {
167
- field.expressionProperties['hide'] = descriptor.hiddenExpression;
168
- }
169
- if (descriptor.disabledExpression) {
170
- field.expressionProperties['templateOptions.disabled'] = descriptor.disabledExpression;
171
- }
172
- else if (descriptor.disabled) {
173
- field.templateOptions.disabled = true;
174
- }
175
- else {
176
- field.expressionProperties['templateOptions.disabled'] = 'formState.disabled';
177
- }
178
- if (typeof descriptor.defaultValue !== 'undefined') {
179
- field.defaultValue = descriptor.defaultValue;
180
- }
181
- EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
182
- return field;
183
- }
184
- static addValidationsToFormlyField(config, validations) {
185
- if (!config.validators) {
186
- config.validators = {};
187
- }
188
- for (const validation of validations) {
189
- if (typeof validation.validator === 'function') {
190
- config.validators[validation.name] = {
191
- expression: (control, field, options) => {
192
- const validatorRes = validation.validator(control, field, options);
193
- // formly validator only excepts true/false for validation
194
- // map possible angular validator result to true/false
195
- return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
196
- }
197
- };
198
- if (typeof validation.message === 'function') {
199
- config.validators[validation.name].message = validation.message;
200
- }
201
- }
202
- else {
203
- if (!Array.isArray(config.validators.validation)) {
204
- config.validators.validation = [];
205
- }
206
- config.validators.validation.push(validation.name);
207
- }
208
- }
209
- }
210
- }
1
+ import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
2
+ import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
3
+ export class EditorFormlyUtil {
4
+ static createFormlyConfigFromDescriptor(descriptor) {
5
+ const fields = [];
6
+ if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
7
+ // dont use tabs
8
+ fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
9
+ }
10
+ else {
11
+ fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
12
+ }
13
+ return fields;
14
+ }
15
+ static createFormlyTabType(tabGroups) {
16
+ const tabsField = {
17
+ type: 'tabs',
18
+ fieldGroup: []
19
+ };
20
+ for (const tab of tabGroups) {
21
+ const tabField = {
22
+ id: tab.name,
23
+ templateOptions: {},
24
+ fieldGroup: []
25
+ };
26
+ if (tab.title) {
27
+ tabField.templateOptions.label = tab.title;
28
+ }
29
+ tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
30
+ tabsField.fieldGroup.push(tabField);
31
+ }
32
+ return [tabsField];
33
+ }
34
+ static createFormlyGroupType(groups) {
35
+ if (groups.length === 1 && groups[0].default) {
36
+ // dont use fieldset, just create fields
37
+ return EditorFormlyUtil.createFormlyFields(groups[0]);
38
+ }
39
+ else {
40
+ const groupsField = {
41
+ type: 'fieldset',
42
+ fieldGroup: []
43
+ };
44
+ for (const group of groups) {
45
+ const groupField = {
46
+ id: group.name,
47
+ templateOptions: {
48
+ descriptor: group
49
+ },
50
+ fieldGroup: []
51
+ };
52
+ if (group.title) {
53
+ groupField.templateOptions.label = group.title;
54
+ }
55
+ groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
56
+ groupsField.fieldGroup.push(groupField);
57
+ }
58
+ return [groupsField];
59
+ }
60
+ }
61
+ static createFormlyFields(descriptor) {
62
+ const fields = [];
63
+ for (const descriptorField of descriptor.fields) {
64
+ fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
65
+ }
66
+ // wrap in group to be able to use flex grid
67
+ const wrapperGroup = {
68
+ fieldGroupClassName: 'p-fluid formgrid grid',
69
+ fieldGroup: fields
70
+ };
71
+ EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
72
+ return [wrapperGroup];
73
+ }
74
+ static createFormlyField(descriptor) {
75
+ const field = {
76
+ key: descriptor.property,
77
+ expressionProperties: {},
78
+ templateOptions: {}
79
+ };
80
+ let className = descriptor.className;
81
+ if (!className) {
82
+ // assign default field width through entire row
83
+ className = 'col-12';
84
+ }
85
+ field.className = className;
86
+ field.templateOptions['descriptor'] = descriptor;
87
+ if (descriptor instanceof FieldInputDescriptor) {
88
+ switch (descriptor.fieldType) {
89
+ case FieldInputTypeEnum.Hidden:
90
+ break;
91
+ case FieldInputTypeEnum.Label:
92
+ field.type = 'label';
93
+ delete field.key;
94
+ break;
95
+ case FieldInputTypeEnum.Textarea:
96
+ field.type = 'textarea';
97
+ break;
98
+ case FieldInputTypeEnum.Number:
99
+ field.type = 'number';
100
+ field.templateOptions.min = descriptor.numberMin;
101
+ field.templateOptions.max = descriptor.numberMax;
102
+ break;
103
+ case FieldInputTypeEnum.Currency:
104
+ field.type = 'currency';
105
+ field.templateOptions.min = descriptor.numberMin;
106
+ field.templateOptions.max = descriptor.numberMax;
107
+ break;
108
+ case FieldInputTypeEnum.Switch:
109
+ field.type = 'switch';
110
+ break;
111
+ case FieldInputTypeEnum.Radio:
112
+ field.type = 'radio';
113
+ break;
114
+ case FieldInputTypeEnum.Datepicker:
115
+ field.type = 'datepicker';
116
+ break;
117
+ case FieldInputTypeEnum.Mask:
118
+ field.type = 'mask';
119
+ break;
120
+ case FieldInputTypeEnum.File:
121
+ field.type = 'file';
122
+ break;
123
+ case FieldInputTypeEnum.Custom:
124
+ field.type = descriptor.customComponentName;
125
+ break;
126
+ default:
127
+ field.type = 'input';
128
+ field.templateOptions.minLength = descriptor.minLength;
129
+ field.templateOptions.maxLength = descriptor.maxLength;
130
+ field.templateOptions.pattern = descriptor.pattern;
131
+ break;
132
+ }
133
+ }
134
+ else if (descriptor instanceof FieldLookupEnumDescriptor) {
135
+ field.type = 'enum';
136
+ }
137
+ else if (descriptor instanceof FieldLookupDescriptor) {
138
+ switch (descriptor.lookupType) {
139
+ case FieldLookupTypeEnum.Autocomplete:
140
+ field.type = 'autocomplete';
141
+ break;
142
+ case FieldLookupTypeEnum.Dialog:
143
+ field.type = 'dialog';
144
+ break;
145
+ case FieldLookupTypeEnum.Dropdown:
146
+ default:
147
+ field.type = 'dropdown';
148
+ break;
149
+ }
150
+ }
151
+ else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
152
+ field.type = 'table-dialog-multiselect';
153
+ }
154
+ else if (descriptor instanceof FieldManyEditorDescriptor) {
155
+ field.type = 'table-dialog-form';
156
+ }
157
+ if (descriptor.label) {
158
+ field.templateOptions.label = descriptor.label;
159
+ }
160
+ if (descriptor.requiredExpression) {
161
+ field.expressionProperties['templateOptions.required'] = descriptor.requiredExpression;
162
+ }
163
+ if (descriptor.required) {
164
+ field.templateOptions.required = true;
165
+ }
166
+ if (descriptor.hiddenExpression) {
167
+ field.expressionProperties['hide'] = descriptor.hiddenExpression;
168
+ }
169
+ if (descriptor.disabledExpression) {
170
+ field.expressionProperties['templateOptions.disabled'] = descriptor.disabledExpression;
171
+ }
172
+ else if (descriptor.disabled) {
173
+ field.templateOptions.disabled = true;
174
+ }
175
+ else {
176
+ field.expressionProperties['templateOptions.disabled'] = 'formState.disabled';
177
+ }
178
+ if (typeof descriptor.defaultValue !== 'undefined') {
179
+ field.defaultValue = descriptor.defaultValue;
180
+ }
181
+ EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
182
+ return field;
183
+ }
184
+ static addValidationsToFormlyField(config, validations) {
185
+ if (!config.validators) {
186
+ config.validators = {};
187
+ }
188
+ for (const validation of validations) {
189
+ if (typeof validation.validator === 'function') {
190
+ config.validators[validation.name] = {
191
+ expression: (control, field, options) => {
192
+ const validatorRes = validation.validator(control, field, options);
193
+ // formly validator only excepts true/false for validation
194
+ // map possible angular validator result to true/false
195
+ return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
196
+ }
197
+ };
198
+ if (typeof validation.message === 'function') {
199
+ config.validators[validation.name].message = validation.message;
200
+ }
201
+ }
202
+ else {
203
+ if (!Array.isArray(config.validators.validation)) {
204
+ config.validators.validation = [];
205
+ }
206
+ config.validators.validation.push(validation.name);
207
+ }
208
+ }
209
+ }
210
+ }
211
211
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUlILG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFHbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFpQztRQUM1RSxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVELGdCQUFnQjtZQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFzQjtZQUNqQyxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBc0I7Z0JBQ2hDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDWixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsVUFBVSxFQUFFLEVBQUU7YUFDakIsQ0FBQztZQUNGLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDWCxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUMvQztZQUNELFFBQVEsQ0FBQyxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakYsU0FBUyxDQUFDLFVBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFtQztRQUNuRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDMUMsd0NBQXdDO1lBQ3hDLE9BQU8sZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNILE1BQU0sV0FBVyxHQUFzQjtnQkFDbkMsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7WUFDRixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDeEIsTUFBTSxVQUFVLEdBQXNCO29CQUNsQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2QsZUFBZSxFQUFFO3dCQUNiLFVBQVUsRUFBRSxLQUFLO3FCQUNwQjtvQkFDRCxVQUFVLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztnQkFDRixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ2IsVUFBVSxDQUFDLGVBQWdCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ25EO2dCQUNELFVBQVUsQ0FBQyxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsV0FBVyxDQUFDLFVBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQXFDO1FBQ2xFLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELDRDQUE0QztRQUM1QyxNQUFNLFlBQVksR0FBc0I7WUFDcEMsbUJBQW1CLEVBQUUsdUJBQXVCO1lBQzVDLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7UUFFRixnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5GLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQXNDO1FBQ2xFLE1BQU0sS0FBSyxHQUFzQjtZQUM3QixHQUFHLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDeEIsb0JBQW9CLEVBQUUsRUFBRTtZQUN4QixlQUFlLEVBQUUsRUFBRTtTQUN0QixDQUFDO1FBRUYsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osZ0RBQWdEO1lBQ2hELFNBQVMsR0FBRyxRQUFRLENBQUM7U0FDeEI7UUFDRCxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUU1QixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDbEQsSUFBSSxVQUFVLFlBQVksb0JBQW9CLEVBQUU7WUFDNUMsUUFBUSxVQUFVLENBQUMsU0FBUyxFQUFFO2dCQUMxQixLQUFLLGtCQUFrQixDQUFDLE1BQU07b0JBQzFCLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLO29CQUN6QixLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztvQkFDckIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUNqQixNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsUUFBUTtvQkFDNUIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7b0JBQ3hCLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO29CQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLGVBQWdCLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xELEtBQUssQ0FBQyxlQUFnQixDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUNsRCxNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsUUFBUTtvQkFDNUIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7b0JBQ3hCLEtBQUssQ0FBQyxlQUFnQixDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUNsRCxLQUFLLENBQUMsZUFBZ0IsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztvQkFDbEQsTUFBTTtnQkFDVixLQUFLLGtCQUFrQixDQUFDLE1BQU07b0JBQzFCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO29CQUN0QixNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsS0FBSztvQkFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxVQUFVO29CQUM5QixLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztvQkFDMUIsTUFBTTtnQkFDVixLQUFLLGtCQUFrQixDQUFDLElBQUk7b0JBQ3hCLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNwQixNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsSUFBSTtvQkFDeEIsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7b0JBQ3BCLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO29CQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDNUMsTUFBTTtnQkFDVjtvQkFDSSxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztvQkFDckIsS0FBSyxDQUFDLGVBQWdCLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxlQUFnQixDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUN4RCxLQUFLLENBQUMsZUFBZ0IsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztvQkFDcEQsTUFBTTthQUNiO1NBQ0o7YUFBTSxJQUFJLFVBQVUsWUFBWSx5QkFBeUIsRUFBRTtZQUN4RCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUN2QjthQUFNLElBQUksVUFBVSxZQUFZLHFCQUFxQixFQUFFO1lBQ3BELFFBQVEsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNqQyxLQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztvQkFDNUIsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLE1BQU07b0JBQzNCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO29CQUN0QixNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsUUFBUSxDQUFDO2dCQUNsQztvQkFDSSxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztvQkFDeEIsTUFBTTthQUNiO1NBQ0o7YUFBTSxJQUFJLFVBQVUsWUFBWSwrQkFBK0IsRUFBRTtZQUM5RCxLQUFLLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFDO1NBQzNDO2FBQU0sSUFBSSxVQUFVLFlBQVkseUJBQXlCLEVBQUU7WUFDeEQsS0FBSyxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztTQUNwQztRQUVELElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNsQixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNuRDtRQUVELElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxvQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUMzRjtRQUNELElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0IsS0FBSyxDQUFDLG9CQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNyRTtRQUVELElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxvQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUMzRjthQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUM1QixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzFDO2FBQU07WUFDSCxLQUFLLENBQUMsb0JBQXFCLENBQUMsMEJBQTBCLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztTQUNsRjtRQUVELElBQUksT0FBTyxVQUFVLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUNoRCxLQUFLLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7U0FDaEQ7UUFFRCxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxNQUFNLENBQUMsMkJBQTJCLENBQUMsTUFBeUIsRUFBRSxXQUE2QztRQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUVELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ2xDLElBQUksT0FBTyxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtnQkFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUc7b0JBQ2pDLFVBQVUsRUFBRSxDQUNSLE9BQXdCLEVBQ3hCLEtBQXdCLEVBQ3hCLE9BRUMsRUFDSCxFQUFFO3dCQUNBLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxTQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDcEUsMERBQTBEO3dCQUMxRCxzREFBc0Q7d0JBQ3RELE9BQU8sT0FBTyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUM7b0JBQ3BGLENBQUM7aUJBQ0osQ0FBQztnQkFDRixJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQzFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2lCQUNuRTthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDckM7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQUZpZWxkRGVzY3JpcHRvcixcbiAgICBFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkSW5wdXREZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yXG59IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBGaWVsZExvb2t1cFR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JGb3JtbHlVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUNvbmZpZ0Zyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgY29uc3QgdGFic0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICd0YWJzJyxcbiAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIHRhYkdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgdGFiRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0YWIubmFtZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubGFiZWwgPSB0YWIudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKHRhYi5maWVsZHMpKTtcbiAgICAgICAgICAgIHRhYnNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKHRhYkZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RhYnNGaWVsZF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlHcm91cFR5cGUoZ3JvdXBzOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDEgJiYgZ3JvdXBzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIGZpZWxkc2V0LCBqdXN0IGNyZWF0ZSBmaWVsZHNcbiAgICAgICAgICAgIHJldHVybiBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBncm91cFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQudGVtcGxhdGVPcHRpb25zIS5sYWJlbCA9IGdyb3VwLnRpdGxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cEZpZWxkLmZpZWxkR3JvdXAhLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZHMoZ3JvdXApKTtcbiAgICAgICAgICAgICAgICBncm91cHNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKGdyb3VwRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtncm91cHNGaWVsZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkcyhkZXNjcmlwdG9yOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHNcbiAgICAgICAgfTtcblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZCh3cmFwcGVyR3JvdXAsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBbd3JhcHBlckdyb3VwXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkKGRlc2NyaXB0b3I6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBhbnk+KTogRm9ybWx5RmllbGRDb25maWcge1xuICAgICAgICBjb25zdCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICBrZXk6IGRlc2NyaXB0b3IucHJvcGVydHksXG4gICAgICAgICAgICBleHByZXNzaW9uUHJvcGVydGllczoge30sXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGRlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgLy8gYXNzaWduIGRlZmF1bHQgZmllbGQgd2lkdGggdGhyb3VnaCBlbnRpcmUgcm93XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAnY29sLTEyJztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIVsnZGVzY3JpcHRvciddID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkhpZGRlbjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbGFiZWwnO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmllbGQua2V5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0ZXh0YXJlYSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1heCA9IGRlc2NyaXB0b3IubnVtYmVyTWF4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdjdXJyZW5jeSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWluID0gZGVzY3JpcHRvci5udW1iZXJNaW47XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWF4ID0gZGVzY3JpcHRvci5udW1iZXJNYXg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdzd2l0Y2gnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbWFzayc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWluTGVuZ3RoID0gZGVzY3JpcHRvci5taW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWF4TGVuZ3RoID0gZGVzY3JpcHRvci5tYXhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZW51bSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5EaWFsb2c6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGlhbG9nJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkRyb3Bkb3duOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZHJvcGRvd24nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QnO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1mb3JtJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmxhYmVsKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLmxhYmVsID0gZGVzY3JpcHRvci5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMhWyd0ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQnXSA9IGRlc2NyaXB0b3IucmVxdWlyZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIVsnaGlkZSddID0gZGVzY3JpcHRvci5oaWRkZW5FeHByZXNzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCddID0gZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCddID0gJ2Zvcm1TdGF0ZS5kaXNhYmxlZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChmaWVsZCwgZGVzY3JpcHRvci52YWxpZGF0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIHZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPikge1xuICAgICAgICBpZiAoIWNvbmZpZy52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXMgPSB2YWxpZGF0aW9uLnZhbGlkYXRvciEoY29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWx5IHZhbGlkYXRvciBvbmx5IGV4Y2VwdHMgdHJ1ZS9mYWxzZSBmb3IgdmFsaWRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFwIHBvc3NpYmxlIGFuZ3VsYXIgdmFsaWRhdG9yIHJlc3VsdCB0byB0cnVlL2ZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbGlkYXRvclJlcyA9PT0gJ2Jvb2xlYW4nID8gdmFsaWRhdG9yUmVzIDogdmFsaWRhdG9yUmVzID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdLm1lc3NhZ2UgPSB2YWxpZGF0aW9uLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uLnB1c2godmFsaWRhdGlvbi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,82 +1,82 @@
1
- export class EnumUtil {
2
- /**
3
- * Returns array of names for constants in enum.
4
- * @param enumType Enum object.
5
- */
6
- static getConstantNames(enumType) {
7
- return EnumUtil.getConstantNamesFromEnumObject(enumType);
8
- }
9
- /**
10
- * Returns array of names for constants in enum.
11
- * @param enumObj Enum object.
12
- */
13
- static getConstantNamesFromEnumObject(enumObj) {
14
- // in number enum, the numbers are also represented in objects and should be filtered out
15
- return Object.keys(enumObj).filter(v => isNaN(+v));
16
- }
17
- /**
18
- * Returns array of string values for constants in enum.
19
- * @param enumType Enum object.
20
- */
21
- static getConstantValuesAsString(enumType) {
22
- return Object.keys(enumType).map(v => enumType[v]);
23
- }
24
- /**
25
- * Returns array of number values for constants in enum.
26
- * @param enumType Enum object.
27
- */
28
- static getConstantValuesAsNumber(enumType) {
29
- return Object.keys(enumType)
30
- .filter(v => !isNaN(+v))
31
- .map(v => +v);
32
- }
33
- /**
34
- * Returns array of type EnumValue for all constants in enum.
35
- * @param enumType Enum object.
36
- * @param nameAsValue If use name of constant as value (optional, default: false).
37
- * @param titlePath Base path for title to use as translation (optional).
38
- */
39
- static fromConstantsAsEnumValueArray(enumType, nameAsValue = false, titlePath) {
40
- return EnumUtil.getConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));
41
- }
42
- /**
43
- * Returns array of type EnumValue for provided values in enum.
44
- * @param enumType Enum object.
45
- * @param nameAsValue If use name of constant as value (optional, default: false).
46
- * @param titlePath Base path for title to use as translation (optional).
47
- */
48
- static fromValuesAsEnumValueArray(enumType, values, nameAsValue = false, titlePath) {
49
- return values.map(v => {
50
- const k = EnumUtil.getConstantName(enumType, v);
51
- return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };
52
- });
53
- }
54
- /**
55
- * Gets constant name for value.
56
- * @param enumType Enum object.
57
- * @param value Value of enum constant.
58
- */
59
- static getConstantName(enumType, value) {
60
- if (typeof value === 'string') {
61
- return EnumUtil.getConstantNames(enumType).find(c => enumType[c] === value) ?? null;
62
- }
63
- else {
64
- return typeof enumType[value] !== 'undefined' ? enumType[value] : null;
65
- }
66
- }
67
- /**
68
- * Gets constant name for value.
69
- * @param enumObj Enum object.
70
- * @param value Value of enum constant.
71
- */
72
- static getConstantNameFromEnumObject(enumObj, value) {
73
- const enumObjAny = enumObj;
74
- if (typeof value === 'string') {
75
- return EnumUtil.getConstantNamesFromEnumObject(enumObj).find(c => enumObjAny[c] === value) ?? null;
76
- }
77
- else {
78
- return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;
79
- }
80
- }
81
- }
1
+ export class EnumUtil {
2
+ /**
3
+ * Returns array of names for constants in enum.
4
+ * @param enumType Enum object.
5
+ */
6
+ static getConstantNames(enumType) {
7
+ return EnumUtil.getConstantNamesFromEnumObject(enumType);
8
+ }
9
+ /**
10
+ * Returns array of names for constants in enum.
11
+ * @param enumObj Enum object.
12
+ */
13
+ static getConstantNamesFromEnumObject(enumObj) {
14
+ // in number enum, the numbers are also represented in objects and should be filtered out
15
+ return Object.keys(enumObj).filter(v => isNaN(+v));
16
+ }
17
+ /**
18
+ * Returns array of string values for constants in enum.
19
+ * @param enumType Enum object.
20
+ */
21
+ static getConstantValuesAsString(enumType) {
22
+ return Object.keys(enumType).map(v => enumType[v]);
23
+ }
24
+ /**
25
+ * Returns array of number values for constants in enum.
26
+ * @param enumType Enum object.
27
+ */
28
+ static getConstantValuesAsNumber(enumType) {
29
+ return Object.keys(enumType)
30
+ .filter(v => !isNaN(+v))
31
+ .map(v => +v);
32
+ }
33
+ /**
34
+ * Returns array of type EnumValue for all constants in enum.
35
+ * @param enumType Enum object.
36
+ * @param nameAsValue If use name of constant as value (optional, default: false).
37
+ * @param titlePath Base path for title to use as translation (optional).
38
+ */
39
+ static fromConstantsAsEnumValueArray(enumType, nameAsValue = false, titlePath) {
40
+ return EnumUtil.getConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));
41
+ }
42
+ /**
43
+ * Returns array of type EnumValue for provided values in enum.
44
+ * @param enumType Enum object.
45
+ * @param nameAsValue If use name of constant as value (optional, default: false).
46
+ * @param titlePath Base path for title to use as translation (optional).
47
+ */
48
+ static fromValuesAsEnumValueArray(enumType, values, nameAsValue = false, titlePath) {
49
+ return values.map(v => {
50
+ const k = EnumUtil.getConstantName(enumType, v);
51
+ return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };
52
+ });
53
+ }
54
+ /**
55
+ * Gets constant name for value.
56
+ * @param enumType Enum object.
57
+ * @param value Value of enum constant.
58
+ */
59
+ static getConstantName(enumType, value) {
60
+ if (typeof value === 'string') {
61
+ return EnumUtil.getConstantNames(enumType).find(c => enumType[c] === value) ?? null;
62
+ }
63
+ else {
64
+ return typeof enumType[value] !== 'undefined' ? enumType[value] : null;
65
+ }
66
+ }
67
+ /**
68
+ * Gets constant name for value.
69
+ * @param enumObj Enum object.
70
+ * @param value Value of enum constant.
71
+ */
72
+ static getConstantNameFromEnumObject(enumObj, value) {
73
+ const enumObjAny = enumObj;
74
+ if (typeof value === 'string') {
75
+ return EnumUtil.getConstantNamesFromEnumObject(enumObj).find(c => enumObjAny[c] === value) ?? null;
76
+ }
77
+ else {
78
+ return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;
79
+ }
80
+ }
81
+ }
82
82
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lbnVtLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFFBQVE7SUFDakI7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWtCO1FBQzdDLE9BQU8sUUFBUSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsOEJBQThCLENBQUMsT0FBZTtRQUN4RCx5RkFBeUY7UUFDekYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxRQUFrQjtRQUN0RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQVcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMseUJBQXlCLENBQUMsUUFBa0I7UUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLDZCQUE2QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtRQUNuRyxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBNEIsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUEsQ0FDckksQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUFrQixFQUFFLE1BQStCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtRQUNqSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQStCLENBQUM7UUFDakksQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxLQUF1QjtRQUNyRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1NBQ3ZGO2FBQU07WUFDSCxPQUFPLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDdEY7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFlLEVBQUUsS0FBdUI7UUFDaEYsTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO1FBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sUUFBUSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7U0FDdEc7YUFBTTtZQUNILE9BQU8sT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMxRjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW51bVZhbHVlfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRW51bVV0aWwge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYXJyYXkgb2YgbmFtZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50TmFtZXMoZW51bVR5cGU6IEVudW1UeXBlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBFbnVtVXRpbC5nZXRDb25zdGFudE5hbWVzRnJvbUVudW1PYmplY3QoZW51bVR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYXJyYXkgb2YgbmFtZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29uc3RhbnROYW1lc0Zyb21FbnVtT2JqZWN0KGVudW1PYmo6IG9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAvLyBpbiBudW1iZXIgZW51bSwgdGhlIG51bWJlcnMgYXJlIGFsc28gcmVwcmVzZW50ZWQgaW4gb2JqZWN0cyBhbmQgc2hvdWxkIGJlIGZpbHRlcmVkIG91dFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bU9iaikuZmlsdGVyKHYgPT4gaXNOYU4oK3YpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50VmFsdWVzQXNTdHJpbmcoZW51bVR5cGU6IEVudW1UeXBlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSkubWFwKHYgPT4gZW51bVR5cGVbdiBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhcnJheSBvZiBudW1iZXIgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAgICAgKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRDb25zdGFudFZhbHVlc0FzTnVtYmVyKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVR5cGUpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gIWlzTmFOKCt2KSlcbiAgICAgICAgICAgIC5tYXAodiA9PiArdik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgYWxsIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gbmFtZUFzVmFsdWUgSWYgdXNlIG5hbWUgb2YgY29uc3RhbnQgYXMgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0OiBmYWxzZSkuXG4gICAgICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNvbnN0YW50c0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIEVudW1VdGlsLmdldENvbnN0YW50TmFtZXMoZW51bVR5cGUpLm1hcChcbiAgICAgICAgICAgIG4gPT4gPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+PntuYW1lOiBuLCB0aXRsZTogYCR7dGl0bGVQYXRoID8gYCR7dGl0bGVQYXRofS5gIDogJyd9JHtufWAsIHZhbHVlOiBuYW1lQXNWYWx1ZSA/IG4gOiBlbnVtVHlwZVtuXX1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFycmF5IG9mIHR5cGUgRW51bVZhbHVlIGZvciBwcm92aWRlZCB2YWx1ZXMgaW4gZW51bS5cbiAgICAgKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gICAgICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICAgICAqIEBwYXJhbSB0aXRsZVBhdGggQmFzZSBwYXRoIGZvciB0aXRsZSB0byB1c2UgYXMgdHJhbnNsYXRpb24gKG9wdGlvbmFsKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZXNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlOiBFbnVtVHlwZSwgdmFsdWVzOiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgdGl0bGVQYXRoPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICAgICAgY29uc3QgayA9IEVudW1VdGlsLmdldENvbnN0YW50TmFtZShlbnVtVHlwZSwgdik7XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6IGssIHRpdGxlOiBgJHt0aXRsZVBhdGggPyBgJHt0aXRsZVBhdGh9LmAgOiAnJ30ke2t9YCwgdmFsdWU6IG5hbWVBc1ZhbHVlID8gayA6IHZ9IGFzIEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNvbnN0YW50IG5hbWUgZm9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZW51bSBjb25zdGFudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50TmFtZShlbnVtVHlwZTogRW51bVR5cGUsIHZhbHVlOiBFbnVtQ29uc3RhbnRUeXBlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lcyhlbnVtVHlwZSkuZmluZChjID0+IGVudW1UeXBlW2NdID09PSB2YWx1ZSkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZW51bVR5cGVbdmFsdWVdICE9PSAndW5kZWZpbmVkJyA/IChlbnVtVHlwZVt2YWx1ZV0gYXMgc3RyaW5nKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNvbnN0YW50IG5hbWUgZm9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBlbnVtIGNvbnN0YW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29uc3RhbnROYW1lRnJvbUVudW1PYmplY3QoZW51bU9iajogb2JqZWN0LCB2YWx1ZTogRW51bUNvbnN0YW50VHlwZSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBlbnVtT2JqQW55ID0gZW51bU9iaiBhcyBhbnk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lc0Zyb21FbnVtT2JqZWN0KGVudW1PYmopLmZpbmQoYyA9PiBlbnVtT2JqQW55W2NdID09PSB2YWx1ZSkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZW51bU9iakFueVt2YWx1ZV0gIT09ICd1bmRlZmluZWQnID8gKGVudW1PYmpBbnlbdmFsdWVdIGFzIHN0cmluZykgOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19