@mediusinc/mng-commons 0.17.5 → 0.18.0-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 (377) hide show
  1. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  2. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  3. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  4. package/esm2020/lib/api/models/index.mjs +8 -8
  5. package/esm2020/lib/api/models/mappers.mjs +12 -12
  6. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  7. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  8. package/esm2020/lib/api/models/query-result.model.mjs +23 -23
  9. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  10. package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
  11. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +67 -67
  12. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
  13. package/esm2020/lib/api/services/index.mjs +3 -3
  14. package/esm2020/lib/api/utils/index.mjs +2 -2
  15. package/esm2020/lib/api/utils/medius-rest.util.mjs +212 -212
  16. package/esm2020/lib/api/utils/object-serializer.util.mjs +247 -247
  17. package/esm2020/lib/components/action/action.component.mjs +213 -213
  18. package/esm2020/lib/components/action/editor/action-editor.component.mjs +272 -269
  19. package/esm2020/lib/components/action/index.mjs +3 -3
  20. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  21. package/esm2020/lib/components/action/models/action-execution.model.mjs +240 -240
  22. package/esm2020/lib/components/action/models/index.mjs +3 -3
  23. package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
  24. package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
  25. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +299 -299
  26. package/esm2020/lib/components/form/date-range/date-range.component.mjs +108 -108
  27. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +193 -193
  28. package/esm2020/lib/components/form/editor/form-editor.component.mjs +219 -213
  29. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +39 -0
  30. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +50 -49
  31. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +45 -44
  32. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +26 -25
  33. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +103 -102
  34. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -23
  35. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +181 -180
  36. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +168 -167
  37. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +149 -148
  38. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -17
  39. package/esm2020/lib/components/form/formly/fields/index.mjs +11 -10
  40. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +15 -0
  41. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +15 -15
  42. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -3
  43. package/esm2020/lib/components/form/index.mjs +4 -4
  44. package/esm2020/lib/components/form/models/field-action-context.model.mjs +2 -0
  45. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  46. package/esm2020/lib/components/form/models/form-editor.interface.mjs +2 -0
  47. package/esm2020/lib/components/form/models/index.mjs +3 -2
  48. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  49. package/esm2020/lib/components/layout/footer.component.mjs +16 -16
  50. package/esm2020/lib/components/layout/index.mjs +7 -7
  51. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  52. package/esm2020/lib/components/layout/menu-item.component.mjs +267 -267
  53. package/esm2020/lib/components/layout/menu.component.mjs +20 -20
  54. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  55. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
  56. package/esm2020/lib/components/layout/topbar.component.mjs +64 -64
  57. package/esm2020/lib/components/layout/version.component.mjs +57 -57
  58. package/esm2020/lib/components/tableview/index.mjs +6 -6
  59. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  60. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  61. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +81 -81
  62. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -52
  63. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +119 -119
  64. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +74 -73
  65. package/esm2020/lib/components/tableview/table/table.component.mjs +559 -559
  66. package/esm2020/lib/components/tableview/tableview.component.mjs +112 -112
  67. package/esm2020/lib/config/formly.config.mjs +186 -181
  68. package/esm2020/lib/config/index.mjs +1 -1
  69. package/esm2020/lib/config/models/config.model.mjs +2 -0
  70. package/esm2020/lib/config/models/formly-config.model.mjs +2 -0
  71. package/esm2020/lib/config/models/index.mjs +3 -3
  72. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  73. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  74. package/esm2020/lib/data-providers/index.mjs +6 -6
  75. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  76. package/esm2020/lib/data-providers/table.data-provider.mjs +37 -37
  77. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +23 -23
  78. package/esm2020/lib/data-providers/tableview.data-provider.mjs +58 -58
  79. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +76 -76
  80. package/esm2020/lib/descriptors/action-button.descriptor.mjs +59 -59
  81. package/esm2020/lib/descriptors/action.descriptor.mjs +548 -548
  82. package/esm2020/lib/descriptors/column.descriptor.mjs +381 -374
  83. package/esm2020/lib/descriptors/editor.descriptor.mjs +251 -246
  84. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
  85. package/esm2020/lib/descriptors/field.descriptor.mjs +902 -864
  86. package/esm2020/lib/descriptors/filter.descriptor.mjs +320 -320
  87. package/esm2020/lib/descriptors/index.mjs +11 -11
  88. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  89. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  90. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  91. package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
  92. package/esm2020/lib/descriptors/table.descriptor.mjs +463 -463
  93. package/esm2020/lib/descriptors/tableview.descriptor.mjs +323 -323
  94. package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
  95. package/esm2020/lib/descriptors/types/column.type.mjs +12 -11
  96. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  97. package/esm2020/lib/descriptors/types/field.type.mjs +52 -52
  98. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  99. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  100. package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
  101. package/esm2020/lib/directives/component.directive.mjs +43 -43
  102. package/esm2020/lib/directives/index.mjs +2 -2
  103. package/esm2020/lib/directives/template.directive.mjs +27 -27
  104. package/esm2020/lib/mng-commons.module.mjs +466 -463
  105. package/esm2020/lib/models/column-value.model.mjs +1 -1
  106. package/esm2020/lib/models/enum.model.mjs +1 -1
  107. package/esm2020/lib/models/error.model.mjs +1 -1
  108. package/esm2020/lib/models/formly-field.model.mjs +2 -2
  109. package/esm2020/lib/models/index.mjs +9 -9
  110. package/esm2020/lib/models/menu.model.mjs +1 -1
  111. package/esm2020/lib/models/tableview-attr.model.mjs +1 -1
  112. package/esm2020/lib/models/user.model.mjs +1 -1
  113. package/esm2020/lib/models/version.model.mjs +1 -1
  114. package/esm2020/lib/models/view-container.model.mjs +1 -1
  115. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  116. package/esm2020/lib/pipes/class-map.pipe.mjs +21 -21
  117. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  118. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +37 -37
  119. package/esm2020/lib/pipes/enumerate.pipe.mjs +54 -54
  120. package/esm2020/lib/pipes/getter.pipe.mjs +20 -20
  121. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  122. package/esm2020/lib/pipes/index.mjs +10 -10
  123. package/esm2020/lib/pipes/json-path.pipe.mjs +78 -78
  124. package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
  125. package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
  126. package/esm2020/lib/pipes/parametrize.pipe.mjs +84 -84
  127. package/esm2020/lib/pipes/template.pipe.mjs +23 -23
  128. package/esm2020/lib/router/index.mjs +2 -2
  129. package/esm2020/lib/router/models/index.mjs +1 -1
  130. package/esm2020/lib/router/models/router.model.mjs +1 -1
  131. package/esm2020/lib/router/route-builder.mjs +425 -425
  132. package/esm2020/lib/router/tableview-route-builder.mjs +183 -183
  133. package/esm2020/lib/security/authorization.guard.mjs +25 -25
  134. package/esm2020/lib/security/authorization.service.mjs +46 -46
  135. package/esm2020/lib/security/authorization.util.mjs +15 -15
  136. package/esm2020/lib/security/index.mjs +3 -3
  137. package/esm2020/lib/security/model/authorization.type.mjs +7 -7
  138. package/esm2020/lib/security/model/index.mjs +3 -3
  139. package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
  140. package/esm2020/lib/security/model/permissions.model.mjs +86 -86
  141. package/esm2020/lib/services/action-executor.service.mjs +547 -547
  142. package/esm2020/lib/services/commons.service.mjs +354 -354
  143. package/esm2020/lib/services/configuration.service.mjs +119 -119
  144. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  145. package/esm2020/lib/services/index.mjs +6 -6
  146. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  147. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  148. package/esm2020/lib/services/internal/index.mjs +2 -2
  149. package/esm2020/lib/services/navigation.service.mjs +47 -47
  150. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  151. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  152. package/esm2020/lib/services/providers/index.mjs +2 -2
  153. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  154. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  155. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  156. package/esm2020/lib/services/tokens/index.mjs +4 -4
  157. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  158. package/esm2020/lib/services/version.service.mjs +38 -38
  159. package/esm2020/lib/services/view-container.component.service.mjs +47 -47
  160. package/esm2020/lib/styles/button-style.builder.mjs +164 -164
  161. package/esm2020/lib/styles/index.mjs +2 -2
  162. package/esm2020/lib/styles/models/index.mjs +2 -2
  163. package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
  164. package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
  165. package/esm2020/lib/styles/styles.util.mjs +41 -41
  166. package/esm2020/lib/types/index.mjs +2 -2
  167. package/esm2020/lib/types/type.decorator.mjs +21 -21
  168. package/esm2020/lib/types/type.model.mjs +1 -1
  169. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  170. package/esm2020/lib/utils/date.util.mjs +117 -117
  171. package/esm2020/lib/utils/editor-formly.util.mjs +263 -251
  172. package/esm2020/lib/utils/enum.util.mjs +81 -81
  173. package/esm2020/lib/utils/i18n.util.mjs +232 -232
  174. package/esm2020/lib/utils/index.mjs +9 -9
  175. package/esm2020/lib/utils/model.util.mjs +68 -68
  176. package/esm2020/lib/utils/notification.util.mjs +45 -45
  177. package/esm2020/lib/utils/route.util.mjs +23 -23
  178. package/esm2020/lib/utils/string.util.mjs +26 -26
  179. package/esm2020/lib/utils/tableview.util.mjs +143 -143
  180. package/esm2020/lib/utils/type.util.mjs +92 -92
  181. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  182. package/esm2020/public-api.mjs +54 -54
  183. package/fesm2015/mediusinc-mng-commons.mjs +12803 -12682
  184. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  185. package/fesm2020/mediusinc-mng-commons.mjs +12647 -12528
  186. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  187. package/index.d.ts +5 -5
  188. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  189. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  190. package/lib/api/models/filter-param.model.d.ts +23 -23
  191. package/lib/api/models/index.d.ts +8 -8
  192. package/lib/api/models/mappers.d.ts +6 -6
  193. package/lib/api/models/query-mode.model.d.ts +16 -16
  194. package/lib/api/models/query-param.model.d.ts +31 -31
  195. package/lib/api/models/query-result.model.d.ts +24 -24
  196. package/lib/api/models/serialization.model.d.ts +8 -8
  197. package/lib/api/services/api.abstract.service.d.ts +24 -24
  198. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  199. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  200. package/lib/api/services/index.d.ts +3 -3
  201. package/lib/api/utils/index.d.ts +2 -2
  202. package/lib/api/utils/medius-rest.util.d.ts +16 -16
  203. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  204. package/lib/components/action/action.component.d.ts +69 -69
  205. package/lib/components/action/editor/action-editor.component.d.ts +63 -63
  206. package/lib/components/action/index.d.ts +3 -3
  207. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  208. package/lib/components/action/models/action-execution.model.d.ts +131 -131
  209. package/lib/components/action/models/index.d.ts +3 -3
  210. package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
  211. package/lib/components/action/route/action-route.component.d.ts +31 -31
  212. package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
  213. package/lib/components/form/date-range/date-range.component.d.ts +28 -28
  214. package/lib/components/form/dropdown/dropdown.component.d.ts +52 -52
  215. package/lib/components/form/editor/form-editor.component.d.ts +45 -45
  216. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -0
  217. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -15
  218. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -14
  219. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -13
  220. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +24 -23
  221. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -10
  222. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -45
  223. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +21 -20
  224. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -36
  225. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -6
  226. package/lib/components/form/formly/fields/index.d.ts +10 -9
  227. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -0
  228. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
  229. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  230. package/lib/components/form/index.d.ts +4 -4
  231. package/lib/components/form/models/field-action-context.model.d.ts +17 -0
  232. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  233. package/lib/components/form/models/form-editor.interface.d.ts +10 -0
  234. package/lib/components/form/models/index.d.ts +2 -1
  235. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  236. package/lib/components/layout/footer.component.d.ts +9 -9
  237. package/lib/components/layout/index.d.ts +7 -7
  238. package/lib/components/layout/main-layout.component.d.ts +20 -20
  239. package/lib/components/layout/menu-item.component.d.ts +52 -52
  240. package/lib/components/layout/menu.component.d.ts +10 -10
  241. package/lib/components/layout/services/index.d.ts +1 -1
  242. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  243. package/lib/components/layout/topbar.component.d.ts +28 -28
  244. package/lib/components/layout/version.component.d.ts +19 -19
  245. package/lib/components/tableview/index.d.ts +6 -6
  246. package/lib/components/tableview/models/index.d.ts +1 -1
  247. package/lib/components/tableview/models/table.event.d.ts +17 -17
  248. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +26 -26
  249. package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
  250. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
  251. package/lib/components/tableview/table/column-value/column-value.component.d.ts +30 -29
  252. package/lib/components/tableview/table/table.component.d.ts +113 -113
  253. package/lib/components/tableview/tableview.component.d.ts +48 -48
  254. package/lib/config/formly.config.d.ts +16 -16
  255. package/lib/config/index.d.ts +1 -1
  256. package/lib/config/models/{mng-config.model.d.ts → config.model.d.ts} +36 -36
  257. package/lib/config/models/formly-config.model.d.ts +11 -0
  258. package/lib/config/models/index.d.ts +2 -2
  259. package/lib/data-providers/base.data-provider.d.ts +14 -14
  260. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  261. package/lib/data-providers/index.d.ts +6 -6
  262. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  263. package/lib/data-providers/table.data-provider.d.ts +27 -27
  264. package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
  265. package/lib/data-providers/tableview.data-provider.d.ts +37 -37
  266. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
  267. package/lib/descriptors/action-button.descriptor.d.ts +22 -22
  268. package/lib/descriptors/action.descriptor.d.ts +212 -212
  269. package/lib/descriptors/column.descriptor.d.ts +123 -122
  270. package/lib/descriptors/editor.descriptor.d.ts +95 -94
  271. package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
  272. package/lib/descriptors/field.descriptor.d.ts +324 -309
  273. package/lib/descriptors/filter.descriptor.d.ts +112 -112
  274. package/lib/descriptors/index.d.ts +11 -11
  275. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  276. package/lib/descriptors/interfaces/index.d.ts +2 -2
  277. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  278. package/lib/descriptors/model.descriptor.d.ts +18 -18
  279. package/lib/descriptors/table.descriptor.d.ts +182 -182
  280. package/lib/descriptors/tableview.descriptor.d.ts +122 -122
  281. package/lib/descriptors/types/action.type.d.ts +21 -21
  282. package/lib/descriptors/types/column.type.d.ts +10 -9
  283. package/lib/descriptors/types/editor.type.d.ts +6 -6
  284. package/lib/descriptors/types/field.type.d.ts +44 -44
  285. package/lib/descriptors/types/filter.type.d.ts +27 -27
  286. package/lib/descriptors/types/index.d.ts +6 -6
  287. package/lib/descriptors/types/table.type.d.ts +22 -22
  288. package/lib/directives/component.directive.d.ts +16 -16
  289. package/lib/directives/index.d.ts +2 -2
  290. package/lib/directives/template.directive.d.ts +13 -13
  291. package/lib/mng-commons.module.d.ts +94 -93
  292. package/lib/models/column-value.model.d.ts +4 -4
  293. package/lib/models/enum.model.d.ts +6 -6
  294. package/lib/models/error.model.d.ts +14 -14
  295. package/lib/models/formly-field.model.d.ts +16 -16
  296. package/lib/models/index.d.ts +9 -9
  297. package/lib/models/menu.model.d.ts +27 -27
  298. package/lib/models/tableview-attr.model.d.ts +9 -9
  299. package/lib/models/user.model.d.ts +8 -8
  300. package/lib/models/version.model.d.ts +18 -18
  301. package/lib/models/view-container.model.d.ts +37 -37
  302. package/lib/pipes/boolean.pipe.d.ts +7 -7
  303. package/lib/pipes/class-map.pipe.d.ts +7 -7
  304. package/lib/pipes/enum.pipe.d.ts +8 -8
  305. package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
  306. package/lib/pipes/enumerate.pipe.d.ts +21 -21
  307. package/lib/pipes/getter.pipe.d.ts +7 -7
  308. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  309. package/lib/pipes/index.d.ts +10 -10
  310. package/lib/pipes/json-path.pipe.d.ts +13 -13
  311. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
  312. package/lib/pipes/models/internal/index.d.ts +1 -1
  313. package/lib/pipes/parametrize.pipe.d.ts +13 -13
  314. package/lib/pipes/template.pipe.d.ts +10 -10
  315. package/lib/router/index.d.ts +2 -2
  316. package/lib/router/models/index.d.ts +1 -1
  317. package/lib/router/models/router.model.d.ts +33 -33
  318. package/lib/router/route-builder.d.ts +98 -98
  319. package/lib/router/tableview-route-builder.d.ts +37 -37
  320. package/lib/security/authorization.guard.d.ts +11 -11
  321. package/lib/security/authorization.service.d.ts +19 -19
  322. package/lib/security/authorization.util.d.ts +5 -5
  323. package/lib/security/index.d.ts +3 -3
  324. package/lib/security/model/authorization.type.d.ts +6 -6
  325. package/lib/security/model/index.d.ts +3 -3
  326. package/lib/security/model/permission-service.interface.d.ts +6 -6
  327. package/lib/security/model/permissions.model.d.ts +37 -37
  328. package/lib/services/action-executor.service.d.ts +149 -149
  329. package/lib/services/commons.service.d.ts +81 -81
  330. package/lib/services/configuration.service.d.ts +45 -45
  331. package/lib/services/error-mapper.service.d.ts +7 -7
  332. package/lib/services/index.d.ts +6 -6
  333. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  334. package/lib/services/internal/commons-init.service.d.ts +16 -16
  335. package/lib/services/internal/index.d.ts +2 -2
  336. package/lib/services/navigation.service.d.ts +14 -14
  337. package/lib/services/providers/config-service.provider.d.ts +6 -6
  338. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  339. package/lib/services/providers/index.d.ts +2 -2
  340. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  341. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  342. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  343. package/lib/services/tokens/index.d.ts +4 -4
  344. package/lib/services/tokens/module-config.token.d.ts +3 -3
  345. package/lib/services/version.service.d.ts +13 -13
  346. package/lib/services/view-container.component.service.d.ts +28 -28
  347. package/lib/styles/button-style.builder.d.ts +67 -67
  348. package/lib/styles/index.d.ts +2 -2
  349. package/lib/styles/models/index.d.ts +2 -2
  350. package/lib/styles/models/style-level.enum.d.ts +10 -10
  351. package/lib/styles/models/style-size.enum.d.ts +7 -7
  352. package/lib/styles/styles.util.d.ts +14 -14
  353. package/lib/types/index.d.ts +2 -2
  354. package/lib/types/type.decorator.d.ts +4 -4
  355. package/lib/types/type.model.d.ts +23 -23
  356. package/lib/utils/action-data-provider.util.d.ts +20 -20
  357. package/lib/utils/date.util.d.ts +7 -7
  358. package/lib/utils/editor-formly.util.d.ts +12 -11
  359. package/lib/utils/enum.util.d.ts +50 -50
  360. package/lib/utils/i18n.util.d.ts +56 -56
  361. package/lib/utils/index.d.ts +9 -9
  362. package/lib/utils/model.util.d.ts +8 -8
  363. package/lib/utils/notification.util.d.ts +11 -11
  364. package/lib/utils/route.util.d.ts +4 -4
  365. package/lib/utils/string.util.d.ts +4 -4
  366. package/lib/utils/tableview.util.d.ts +39 -39
  367. package/lib/utils/type.util.d.ts +57 -57
  368. package/mediusinc-mng-commons-0.18.0-rc.1.tgz +0 -0
  369. package/package.json +1 -1
  370. package/public-api.d.ts +34 -34
  371. package/scss/mng-overrides/_theme_datatable.scss +9 -3
  372. package/version-info.json +6 -6
  373. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +0 -15
  374. package/esm2020/lib/config/models/mng-config.model.mjs +0 -2
  375. package/esm2020/lib/config/models/mng-formly-config-model.mjs +0 -2
  376. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +0 -6
  377. package/lib/config/models/mng-formly-config-model.d.ts +0 -17
@@ -1,251 +1,263 @@
1
- import { map } from 'rxjs/operators';
2
- import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
3
- import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
4
- export class EditorFormlyUtil {
5
- static createFormlyConfigFromDescriptor(descriptor) {
6
- const fields = [];
7
- if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
8
- // dont use tabs
9
- fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
10
- }
11
- else {
12
- fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
13
- }
14
- return fields;
15
- }
16
- static createFormlyTabType(tabGroups) {
17
- const tabsField = {
18
- type: 'tabs',
19
- fieldGroup: []
20
- };
21
- for (const tab of tabGroups) {
22
- const tabField = {
23
- id: tab.name,
24
- props: {},
25
- expressions: {},
26
- fieldGroup: []
27
- };
28
- if (tab.title) {
29
- tabField.props.label = tab.title;
30
- }
31
- tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
32
- tabsField.fieldGroup.push(tabField);
33
- }
34
- return [tabsField];
35
- }
36
- static createFormlyGroupType(groups) {
37
- if (groups.length === 1 && groups[0].default) {
38
- // dont use fieldset, just create fields
39
- return EditorFormlyUtil.createFormlyFields(groups[0]);
40
- }
41
- else {
42
- const groupsField = {
43
- type: 'fieldset',
44
- fieldGroup: [],
45
- props: {},
46
- expressions: {}
47
- };
48
- for (const group of groups) {
49
- const groupField = {
50
- id: group.name,
51
- props: {
52
- descriptor: group
53
- },
54
- expressions: {},
55
- fieldGroup: []
56
- };
57
- if (group.title) {
58
- groupField.props.label = group.title;
59
- }
60
- groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
61
- groupsField.fieldGroup.push(groupField);
62
- }
63
- return [groupsField];
64
- }
65
- }
66
- static createFormlyFields(descriptor) {
67
- const fields = [];
68
- for (const descriptorField of descriptor.fields) {
69
- fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
70
- }
71
- // wrap in group to be able to use flex grid
72
- const wrapperGroup = {
73
- fieldGroupClassName: 'p-fluid formgrid grid',
74
- fieldGroup: fields
75
- };
76
- EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
77
- return [wrapperGroup];
78
- }
79
- static createFormlyField(descriptor) {
80
- const field = {
81
- key: descriptor.property,
82
- props: {
83
- descriptor
84
- },
85
- expressions: {}
86
- };
87
- let className = descriptor.className;
88
- if (!className) {
89
- // assign default field width through entire row
90
- className = 'col-12';
91
- }
92
- field.className = className;
93
- if (descriptor instanceof FieldInputDescriptor) {
94
- switch (descriptor.fieldType) {
95
- case FieldInputTypeEnum.Hidden:
96
- break;
97
- case FieldInputTypeEnum.Label:
98
- field.type = 'label';
99
- delete field.key;
100
- break;
101
- case FieldInputTypeEnum.Textarea:
102
- field.type = 'textarea';
103
- field.props.maxLength = descriptor.maxLength;
104
- field.props.minLength = descriptor.minLength;
105
- field.props.pattern = descriptor.pattern;
106
- break;
107
- case FieldInputTypeEnum.Number:
108
- field.type = 'number';
109
- field.props.min = descriptor.numberMin;
110
- field.props.max = descriptor.numberMax;
111
- break;
112
- case FieldInputTypeEnum.Currency:
113
- field.type = 'currency';
114
- field.props.min = descriptor.numberMin;
115
- field.props.max = descriptor.numberMax;
116
- break;
117
- case FieldInputTypeEnum.Switch:
118
- field.type = 'switch';
119
- break;
120
- case FieldInputTypeEnum.Radio:
121
- field.type = 'radio';
122
- break;
123
- case FieldInputTypeEnum.Datepicker:
124
- field.type = 'datepicker';
125
- break;
126
- case FieldInputTypeEnum.Mask:
127
- field.type = 'mask';
128
- break;
129
- case FieldInputTypeEnum.File:
130
- field.type = 'file';
131
- break;
132
- case FieldInputTypeEnum.Custom:
133
- field.type = descriptor.customComponentName;
134
- break;
135
- default:
136
- field.type = 'input';
137
- field.props.minLength = descriptor.minLength;
138
- field.props.maxLength = descriptor.maxLength;
139
- field.props.pattern = descriptor.pattern;
140
- break;
141
- }
142
- }
143
- else if (descriptor instanceof FieldLookupEnumDescriptor) {
144
- field.type = 'enum';
145
- }
146
- else if (descriptor instanceof FieldLookupDescriptor) {
147
- switch (descriptor.lookupType) {
148
- case FieldLookupTypeEnum.Autocomplete:
149
- field.type = 'autocomplete';
150
- break;
151
- case FieldLookupTypeEnum.Dialog:
152
- field.type = 'dialog';
153
- break;
154
- case FieldLookupTypeEnum.Dropdown:
155
- default:
156
- field.type = 'dropdown';
157
- break;
158
- }
159
- }
160
- else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
161
- field.type = 'table-dialog-multiselect';
162
- }
163
- else if (descriptor instanceof FieldManyEditorDescriptor) {
164
- field.type = 'table-dialog-form';
165
- }
166
- if (descriptor.label) {
167
- field.props.label = descriptor.label;
168
- }
169
- if (descriptor.requiredExpression) {
170
- field.expressions['props.required'] = descriptor.requiredExpression;
171
- }
172
- if (descriptor.required) {
173
- field.props.required = true;
174
- if (descriptor.requiredHideLabelMarker) {
175
- field.props['hideRequiredMarker'] = true;
176
- }
177
- }
178
- if (descriptor.hiddenExpression) {
179
- field.expressions['hide'] = descriptor.hiddenExpression;
180
- }
181
- if (descriptor.disabledExpression) {
182
- field.expressions['props.disabled'] = descriptor.disabledExpression;
183
- }
184
- else if (descriptor.disabled) {
185
- field.props.disabled = true;
186
- }
187
- else {
188
- field.expressions['props.disabled'] = 'formState.disabled';
189
- }
190
- if (typeof descriptor.defaultValue !== 'undefined') {
191
- field.defaultValue = descriptor.defaultValue;
192
- }
193
- EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
194
- EditorFormlyUtil.addAsyncValidationsToFormlyField(field, descriptor.asyncValidations);
195
- return field;
196
- }
197
- static addValidationsToFormlyField(config, validations) {
198
- if (!config.validators) {
199
- config.validators = {};
200
- }
201
- for (const validation of validations) {
202
- if (typeof validation.validator === 'function') {
203
- config.validators[validation.name] = {
204
- expression: (control, field, options) => {
205
- const validatorRes = validation.validator(control, field, options);
206
- // formly validator only excepts true/false for validation
207
- // map possible angular validator result to true/false
208
- return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
209
- }
210
- };
211
- if (typeof validation.message === 'function') {
212
- config.validators[validation.name].message = validation.message;
213
- }
214
- }
215
- else {
216
- if (!Array.isArray(config.validators.validation)) {
217
- config.validators.validation = [];
218
- }
219
- config.validators.validation.push(validation.name);
220
- }
221
- }
222
- }
223
- static addAsyncValidationsToFormlyField(config, asyncValidations) {
224
- if (!config.asyncValidators) {
225
- config.asyncValidators = {};
226
- }
227
- for (const validation of asyncValidations) {
228
- if (typeof validation.validator === 'function') {
229
- config.asyncValidators[validation.name] = {
230
- expression: (control, field, options) => {
231
- const validator = validation.validator;
232
- const validatorObs = validator(control, field, options);
233
- // formly validator only excepts true/false for validation
234
- // map possible angular validator result to true/false
235
- return validatorObs.pipe(map(value => (typeof value === 'boolean' ? value : value === null)));
236
- }
237
- };
238
- if (typeof validation.message === 'function') {
239
- config.asyncValidators[validation.name].message = validation.message;
240
- }
241
- }
242
- else {
243
- if (!Array.isArray(config.asyncValidators.validation)) {
244
- config.asyncValidators.validation = [];
245
- }
246
- config.asyncValidators.validation.push(validation.name);
247
- }
248
- }
249
- }
250
- }
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFJSCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBR2xDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFJN0UsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixNQUFNLENBQUMsZ0NBQWdDLENBQUMsVUFBaUM7UUFDNUUsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM1RCxnQkFBZ0I7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNyRjthQUFNO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUF5QztRQUN2RSxNQUFNLFNBQVMsR0FBc0I7WUFDakMsSUFBSSxFQUFFLE1BQU07WUFDWixVQUFVLEVBQUUsRUFBRTtTQUNqQixDQUFDO1FBQ0YsS0FBSyxN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QUN2RywwREFBMEQ7d0JBQzFELHNEQUFzRDt3QkFDdEQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xHLENBQUM7aUJBQ0osQ0FBQztnQkFDRixJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQzFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2lCQUN4RTthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ25ELE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDMUM7Z0JBQ0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzRDtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3Jcbn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtGaWVsZElucHV0VHlwZUVudW0sIEZpZWxkTG9va3VwVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0ZpZWxkQXN5bmNWYWxpZGF0b3J9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckZvcm1seVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxhbnk+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnRhYnMubGVuZ3RoID09PSAxICYmIGRlc2NyaXB0b3IudGFic1swXS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBkb250IHVzZSB0YWJzXG4gICAgICAgICAgICBmaWVsZHMucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZShkZXNjcmlwdG9yLnRhYnNbMF0uZmllbGRzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seVRhYlR5cGUoZGVzY3JpcHRvci50YWJzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5VGFiVHlwZSh0YWJHcm91cHM6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPGFueT5bXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCB0YWJzRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RhYnMnLFxuICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgdGFiR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRhYi5uYW1lLFxuICAgICAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uczoge30sXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGFiLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGFiRmllbGQucHJvcHMubGFiZWwgPSB0YWIudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKHRhYi5maWVsZHMpKTtcbiAgICAgICAgICAgIHRhYnNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKHRhYkZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RhYnNGaWVsZF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlHcm91cFR5cGUoZ3JvdXBzOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDEgJiYgZ3JvdXBzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIGZpZWxkc2V0LCBqdXN0IGNyZWF0ZSBmaWVsZHNcbiAgICAgICAgICAgIHJldHVybiBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzRmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW10sXG4gICAgICAgICAgICAgICAgcHJvcHM6IHt9LFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBncm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQucHJvcHMubGFiZWwgPSBncm91cC50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3VwKSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBzRmllbGQuZmllbGRHcm91cCEucHVzaChncm91cEZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbZ3JvdXBzRmllbGRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZHMoZGVzY3JpcHRvcjogRmllbGRHcm91cERlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yRmllbGQgb2YgZGVzY3JpcHRvci5maWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGQoZGVzY3JpcHRvckZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JhcCBpbiBncm91cCB0byBiZSBhYmxlIHRvIHVzZSBmbGV4IGdyaWRcbiAgICAgICAgY29uc3Qgd3JhcHBlckdyb3VwOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdwLWZsdWlkIGZvcm1ncmlkIGdyaWQnLFxuICAgICAgICAgICAgZmllbGRHcm91cDogZmllbGRzXG4gICAgICAgIH07XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQod3JhcHBlckdyb3VwLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gW3dyYXBwZXJHcm91cF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yOiBBRmllbGREZXNjcmlwdG9yPGFueSwgYW55Pik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGRlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgLy8gYXNzaWduIGRlZmF1bHQgZmllbGQgd2lkdGggdGhyb3VnaCBlbnRpcmUgcm93XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAnY29sLTEyJztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkhpZGRlbjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbGFiZWwnO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmllbGQua2V5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0ZXh0YXJlYSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heExlbmd0aCA9IGRlc2NyaXB0b3IubWF4TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5taW5MZW5ndGggPSBkZXNjcmlwdG9yLm1pbkxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnY3VycmVuY3knO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5taW4gPSBkZXNjcmlwdG9yLm51bWJlck1pbjtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWF4ID0gZGVzY3JpcHRvci5udW1iZXJNYXg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdzd2l0Y2gnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbWFzayc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXhMZW5ndGggPSBkZXNjcmlwdG9yLm1heExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZW51bSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5EaWFsb2c6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGlhbG9nJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkRyb3Bkb3duOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZHJvcGRvd24nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QnO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1mb3JtJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmxhYmVsKSB7XG4gICAgICAgICAgICBmaWVsZC5wcm9wcy5sYWJlbCA9IGRlc2NyaXB0b3IubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zWydwcm9wcy5yZXF1aXJlZCddID0gZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzIS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzIVsnaGlkZVJlcXVpcmVkTWFya2VyJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydoaWRlJ10gPSBkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zWydwcm9wcy5kaXNhYmxlZCddID0gZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZmllbGQucHJvcHMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnNbJ3Byb3BzLmRpc2FibGVkJ10gPSAnZm9ybVN0YXRlLmRpc2FibGVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEVkaXRvckZvcm1seVV0aWwuYWRkVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGZpZWxkLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRBc3luY1ZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChmaWVsZCwgZGVzY3JpcHRvci5hc3luY1ZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoY29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+KSB7XG4gICAgICAgIGlmICghY29uZmlnLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvclJlcyA9IHZhbGlkYXRpb24udmFsaWRhdG9yIShjb250cm9sLCBmaWVsZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtbHkgdmFsaWRhdG9yIG9ubHkgZXhjZXB0cyB0cnVlL2ZhbHNlIGZvciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsaWRhdG9yUmVzID09PSAnYm9vbGVhbicgPyB2YWxpZGF0b3JSZXMgOiB2YWxpZGF0b3JSZXMgPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRBc3luY1ZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCBhc3luY1ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPikge1xuICAgICAgICBpZiAoIWNvbmZpZy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBhc3luY1ZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IDxNbmdGaWVsZEFzeW5jVmFsaWRhdG9yPnZhbGlkYXRpb24udmFsaWRhdG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JPYnM6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IGJvb2xlYW4gfCBudWxsPiA9IHZhbGlkYXRvcihjb250cm9sLCBmaWVsZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtbHkgdmFsaWRhdG9yIG9ubHkgZXhjZXB0cyB0cnVlL2ZhbHNlIGZvciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JPYnMucGlwZShtYXAodmFsdWUgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB2YWx1ZSA9PT0gbnVsbCkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLm1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdLm1lc3NhZ2UgPSB2YWxpZGF0aW9uLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLmFzeW5jVmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9ycy52YWxpZGF0aW9uLnB1c2godmFsaWRhdGlvbi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
1
+ import { map } from 'rxjs/operators';
2
+ import { FieldActionDescriptor, FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
3
+ import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
4
+ export class EditorFormlyUtil {
5
+ static createFormlyConfigFromDescriptor(descriptor, formEditorComponent) {
6
+ const fields = [];
7
+ if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
8
+ // dont use tabs
9
+ fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields, formEditorComponent));
10
+ }
11
+ else {
12
+ fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs, formEditorComponent));
13
+ }
14
+ return fields;
15
+ }
16
+ static createFormlyTabType(tabGroups, formEditorComponent) {
17
+ const tabsField = {
18
+ type: 'tabs',
19
+ fieldGroup: [],
20
+ props: {
21
+ formEditorComponent
22
+ }
23
+ };
24
+ for (const tab of tabGroups) {
25
+ const tabField = {
26
+ id: tab.name,
27
+ props: {
28
+ formEditorComponent
29
+ },
30
+ expressions: {},
31
+ fieldGroup: []
32
+ };
33
+ if (tab.title) {
34
+ tabField.props.label = tab.title;
35
+ }
36
+ tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields, formEditorComponent));
37
+ tabsField.fieldGroup.push(tabField);
38
+ }
39
+ return [tabsField];
40
+ }
41
+ static createFormlyGroupType(groups, formEditorComponent) {
42
+ if (groups.length === 1 && groups[0].default) {
43
+ // dont use fieldset, just create fields
44
+ return EditorFormlyUtil.createFormlyFields(groups[0], formEditorComponent);
45
+ }
46
+ else {
47
+ const groupsField = {
48
+ type: 'fieldset',
49
+ fieldGroup: [],
50
+ props: {
51
+ formEditorComponent
52
+ },
53
+ expressions: {}
54
+ };
55
+ for (const group of groups) {
56
+ const groupField = {
57
+ id: group.name,
58
+ props: {
59
+ descriptor: group
60
+ },
61
+ expressions: {},
62
+ fieldGroup: []
63
+ };
64
+ if (group.title) {
65
+ groupField.props.label = group.title;
66
+ }
67
+ groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group, formEditorComponent));
68
+ groupsField.fieldGroup.push(groupField);
69
+ }
70
+ return [groupsField];
71
+ }
72
+ }
73
+ static createFormlyFields(descriptor, formEditorComponent) {
74
+ const fields = [];
75
+ for (const descriptorField of descriptor.fields) {
76
+ fields.push(EditorFormlyUtil.createFormlyField(descriptorField, formEditorComponent));
77
+ }
78
+ // wrap in group to be able to use flex grid
79
+ const wrapperGroup = {
80
+ fieldGroupClassName: 'p-fluid formgrid grid',
81
+ fieldGroup: fields
82
+ };
83
+ EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
84
+ return [wrapperGroup];
85
+ }
86
+ static createFormlyField(descriptor, formEditorComponent) {
87
+ const field = {
88
+ key: descriptor.property,
89
+ props: {
90
+ descriptor,
91
+ formEditorComponent
92
+ },
93
+ expressions: {}
94
+ };
95
+ let className = descriptor.className;
96
+ if (!className) {
97
+ // assign default field width through entire row
98
+ className = 'col-12';
99
+ }
100
+ field.className = className;
101
+ if (descriptor instanceof FieldInputDescriptor) {
102
+ switch (descriptor.fieldType) {
103
+ case FieldInputTypeEnum.Hidden:
104
+ break;
105
+ case FieldInputTypeEnum.Label:
106
+ field.type = 'label';
107
+ delete field.key;
108
+ break;
109
+ case FieldInputTypeEnum.Textarea:
110
+ field.type = 'textarea';
111
+ field.props.maxLength = descriptor.maxLength;
112
+ field.props.minLength = descriptor.minLength;
113
+ field.props.pattern = descriptor.pattern;
114
+ break;
115
+ case FieldInputTypeEnum.Number:
116
+ field.type = 'number';
117
+ field.props.min = descriptor.numberMin;
118
+ field.props.max = descriptor.numberMax;
119
+ break;
120
+ case FieldInputTypeEnum.Currency:
121
+ field.type = 'currency';
122
+ field.props.min = descriptor.numberMin;
123
+ field.props.max = descriptor.numberMax;
124
+ break;
125
+ case FieldInputTypeEnum.Switch:
126
+ field.type = 'switch';
127
+ break;
128
+ case FieldInputTypeEnum.Radio:
129
+ field.type = 'radio';
130
+ break;
131
+ case FieldInputTypeEnum.Datepicker:
132
+ field.type = 'datepicker';
133
+ break;
134
+ case FieldInputTypeEnum.Mask:
135
+ field.type = 'mask';
136
+ break;
137
+ case FieldInputTypeEnum.File:
138
+ field.type = 'file';
139
+ break;
140
+ case FieldInputTypeEnum.Custom:
141
+ field.type = descriptor.customComponentName;
142
+ break;
143
+ default:
144
+ field.type = 'input';
145
+ field.props.minLength = descriptor.minLength;
146
+ field.props.maxLength = descriptor.maxLength;
147
+ field.props.pattern = descriptor.pattern;
148
+ break;
149
+ }
150
+ }
151
+ else if (descriptor instanceof FieldActionDescriptor) {
152
+ field.type = 'action';
153
+ delete field.key;
154
+ }
155
+ else if (descriptor instanceof FieldLookupEnumDescriptor) {
156
+ field.type = 'enum';
157
+ }
158
+ else if (descriptor instanceof FieldLookupDescriptor) {
159
+ switch (descriptor.lookupType) {
160
+ case FieldLookupTypeEnum.Autocomplete:
161
+ field.type = 'autocomplete';
162
+ break;
163
+ case FieldLookupTypeEnum.Dialog:
164
+ field.type = 'dialog';
165
+ break;
166
+ case FieldLookupTypeEnum.Dropdown:
167
+ default:
168
+ field.type = 'dropdown';
169
+ break;
170
+ }
171
+ }
172
+ else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
173
+ field.type = 'table-dialog-multiselect';
174
+ }
175
+ else if (descriptor instanceof FieldManyEditorDescriptor) {
176
+ field.type = 'table-dialog-form';
177
+ }
178
+ if (descriptor.label) {
179
+ field.props.label = descriptor.label;
180
+ }
181
+ if (descriptor.requiredExpression) {
182
+ field.expressions['props.required'] = descriptor.requiredExpression;
183
+ }
184
+ if (descriptor.required) {
185
+ field.props.required = true;
186
+ if (descriptor.requiredHideLabelMarker) {
187
+ field.props['hideRequiredMarker'] = true;
188
+ }
189
+ }
190
+ if (descriptor.hiddenExpression) {
191
+ field.expressions['hide'] = descriptor.hiddenExpression;
192
+ }
193
+ if (descriptor.disabledExpression) {
194
+ field.expressions['props.disabled'] = descriptor.disabledExpression;
195
+ }
196
+ else if (descriptor.disabled) {
197
+ field.props.disabled = true;
198
+ }
199
+ else {
200
+ field.expressions['props.disabled'] = 'formState.disabled';
201
+ }
202
+ if (typeof descriptor.defaultValue !== 'undefined') {
203
+ field.defaultValue = descriptor.defaultValue;
204
+ }
205
+ EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
206
+ EditorFormlyUtil.addAsyncValidationsToFormlyField(field, descriptor.asyncValidations);
207
+ return field;
208
+ }
209
+ static addValidationsToFormlyField(config, validations) {
210
+ if (!config.validators) {
211
+ config.validators = {};
212
+ }
213
+ for (const validation of validations) {
214
+ if (typeof validation.validator === 'function') {
215
+ config.validators[validation.name] = {
216
+ expression: (control, field, options) => {
217
+ const validatorRes = validation.validator(control, field, options);
218
+ // formly validator only excepts true/false for validation
219
+ // map possible angular validator result to true/false
220
+ return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
221
+ }
222
+ };
223
+ if (typeof validation.message === 'function') {
224
+ config.validators[validation.name].message = validation.message;
225
+ }
226
+ }
227
+ else {
228
+ if (!Array.isArray(config.validators.validation)) {
229
+ config.validators.validation = [];
230
+ }
231
+ config.validators.validation.push(validation.name);
232
+ }
233
+ }
234
+ }
235
+ static addAsyncValidationsToFormlyField(config, asyncValidations) {
236
+ if (!config.asyncValidators) {
237
+ config.asyncValidators = {};
238
+ }
239
+ for (const validation of asyncValidations) {
240
+ if (typeof validation.validator === 'function') {
241
+ config.asyncValidators[validation.name] = {
242
+ expression: (control, field, options) => {
243
+ const validator = validation.validator;
244
+ const validatorObs = validator(control, field, options);
245
+ // formly validator only excepts true/false for validation
246
+ // map possible angular validator result to true/false
247
+ return validatorObs.pipe(map(value => (typeof value === 'boolean' ? value : value === null)));
248
+ }
249
+ };
250
+ if (typeof validation.message === 'function') {
251
+ config.asyncValidators[validation.name].message = validation.message;
252
+ }
253
+ }
254
+ else {
255
+ if (!Array.isArray(config.asyncValidators.validation)) {
256
+ config.asyncValidators.validation = [];
257
+ }
258
+ config.asyncValidators.validation.push(validation.name);
259
+ }
260
+ }
261
+ }
262
+ }
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLE9BQU8sRUFHSCxxQkFBcUIsRUFFckIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUdsQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSTdFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLFVBQWlDLEVBQUUsbUJBQWtEO1FBQ2hJLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFFdkMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDNUQsZ0JBQWdCO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7U0FDMUc7YUFBTTtZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBeUMsRUFBRSxtQkFBa0Q7UUFDM0gsTUFBTSxTQUFTLEdBQXNCO1lB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtJRm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtL21vZGVscyc7XG5pbXBvcnQge1xuICAgIEFGaWVsZERlc2NyaXB0b3IsXG4gICAgRWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZEFjdGlvbkRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3Jcbn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtGaWVsZElucHV0VHlwZUVudW0sIEZpZWxkTG9va3VwVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0ZpZWxkQXN5bmNWYWxpZGF0b3J9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckZvcm1seVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IHRhYnNGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFicycsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiB0YWJHcm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkZpZWxkOiBNbmdGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGFiLm5hbWUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnByb3BzLmxhYmVsID0gdGFiLnRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZSh0YWIuZmllbGRzLCBmb3JtRWRpdG9yQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB0YWJzRmllbGQuZmllbGRHcm91cCEucHVzaCh0YWJGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0YWJzRmllbGRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5R3JvdXBUeXBlKGdyb3VwczogRmllbGRHcm91cERlc2NyaXB0b3I8YW55PltdLCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiBncm91cHNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgZmllbGRzZXQsIGp1c3QgY3JlYXRlIGZpZWxkc1xuICAgICAgICAgICAgcmV0dXJuIEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3Vwc1swXSwgZm9ybUVkaXRvckNvbXBvbmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cHNGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2ZpZWxkc2V0JyxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRWRpdG9yQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChncm91cC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cEZpZWxkLnByb3BzLmxhYmVsID0gZ3JvdXAudGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cCwgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICAgICAgICAgIGdyb3Vwc0ZpZWxkLmZpZWxkR3JvdXAhLnB1c2goZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2dyb3Vwc0ZpZWxkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5RmllbGRzKGRlc2NyaXB0b3I6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPGFueT4sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQsIGZvcm1FZGl0b3JDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHNcbiAgICAgICAgfTtcblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZCh3cmFwcGVyR3JvdXAsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBbd3JhcHBlckdyb3VwXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkKGRlc2NyaXB0b3I6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgIGZvcm1FZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gZGVzY3JpcHRvci5jbGFzc05hbWU7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAvLyBhc3NpZ24gZGVmYXVsdCBmaWVsZCB3aWR0aCB0aHJvdWdoIGVudGlyZSByb3dcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdjb2wtMTInO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5MYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlRleHRhcmVhOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RleHRhcmVhJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWF4TGVuZ3RoID0gZGVzY3JpcHRvci5tYXhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5wYXR0ZXJuID0gZGVzY3JpcHRvci5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWluID0gZGVzY3JpcHRvci5udW1iZXJNaW47XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heCA9IGRlc2NyaXB0b3IubnVtYmVyTWF4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdjdXJyZW5jeSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uU3dpdGNoOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3N3aXRjaCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3JhZGlvJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uRGF0ZXBpY2tlcjpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkYXRlcGlja2VyJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTWFzazpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdtYXNrJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uRmlsZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdmaWxlJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gZGVzY3JpcHRvci5jdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2lucHV0JztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWluTGVuZ3RoID0gZGVzY3JpcHRvci5taW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heExlbmd0aCA9IGRlc2NyaXB0b3IubWF4TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5wYXR0ZXJuID0gZGVzY3JpcHRvci5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRBY3Rpb25EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ2FjdGlvbic7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQua2V5O1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ2VudW0nO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZExvb2t1cERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5sb29rdXBUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uRGlhbG9nOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2RpYWxvZyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5Ecm9wZG93bjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2Ryb3Bkb3duJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGFibGUtZGlhbG9nLW11bHRpc2VsZWN0JztcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctZm9ybSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5sYWJlbCkge1xuICAgICAgICAgICAgZmllbGQucHJvcHMubGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9ucyFbJ3Byb3BzLnJlcXVpcmVkJ10gPSBkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgZmllbGQucHJvcHMhLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkSGlkZUxhYmVsTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgZmllbGQucHJvcHMhWydoaWRlUmVxdWlyZWRNYXJrZXInXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5oaWRkZW5FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9ucyFbJ2hpZGUnXSA9IGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmRpc2FibGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydwcm9wcy5kaXNhYmxlZCddID0gZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZmllbGQucHJvcHMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydwcm9wcy5kaXNhYmxlZCddID0gJ2Zvcm1TdGF0ZS5kaXNhYmxlZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChmaWVsZCwgZGVzY3JpcHRvci52YWxpZGF0aW9ucyk7XG4gICAgICAgIEVkaXRvckZvcm1seVV0aWwuYWRkQXN5bmNWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoZmllbGQsIGRlc2NyaXB0b3IuYXN5bmNWYWxpZGF0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIHZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPikge1xuICAgICAgICBpZiAoIWNvbmZpZy52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXMgPSB2YWxpZGF0aW9uLnZhbGlkYXRvciEoY29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWx5IHZhbGlkYXRvciBvbmx5IGV4Y2VwdHMgdHJ1ZS9mYWxzZSBmb3IgdmFsaWRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFwIHBvc3NpYmxlIGFuZ3VsYXIgdmFsaWRhdG9yIHJlc3VsdCB0byB0cnVlL2ZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbGlkYXRvclJlcyA9PT0gJ2Jvb2xlYW4nID8gdmFsaWRhdG9yUmVzIDogdmFsaWRhdG9yUmVzID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdLm1lc3NhZ2UgPSB2YWxpZGF0aW9uLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uLnB1c2godmFsaWRhdGlvbi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQXN5bmNWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoY29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgYXN5bmNWYWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4pIHtcbiAgICAgICAgaWYgKCFjb25maWcuYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgYXN5bmNWYWxpZGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSA8TW5nRmllbGRBc3luY1ZhbGlkYXRvcj52YWxpZGF0aW9uLnZhbGlkYXRvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yT2JzOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBib29sZWFuIHwgbnVsbD4gPSB2YWxpZGF0b3IoY29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWx5IHZhbGlkYXRvciBvbmx5IGV4Y2VwdHMgdHJ1ZS9mYWxzZSBmb3IgdmFsaWRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFwIHBvc3NpYmxlIGFuZ3VsYXIgdmFsaWRhdG9yIHJlc3VsdCB0byB0cnVlL2ZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yT2JzLnBpcGUobWFwKHZhbHVlID0+ICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogdmFsdWUgPT09IG51bGwpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXS5tZXNzYWdlID0gdmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMudmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9ycy52YWxpZGF0aW9uID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMudmFsaWRhdGlvbi5wdXNoKHZhbGlkYXRpb24ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=