@colijnit/corecomponents_v12 12.2.26 → 12.2.27

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 (438) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +13684 -13680
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12.d.ts +43 -43
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/colijnit-corecomponents_v12.js +43 -43
  6. package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
  7. package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
  8. package/esm2015/lib/components/base/base-input.component.js +833 -833
  9. package/esm2015/lib/components/base/base.module.js +21 -21
  10. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
  11. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
  12. package/esm2015/lib/components/base/dialog-base.component.js +5 -5
  13. package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
  14. package/esm2015/lib/components/button/button.component.js +73 -73
  15. package/esm2015/lib/components/button/button.module.js +18 -18
  16. package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
  17. package/esm2015/lib/components/calendar/calendar.component.js +32 -32
  18. package/esm2015/lib/components/calendar/calendar.module.js +27 -27
  19. package/esm2015/lib/components/card/card.component.js +50 -50
  20. package/esm2015/lib/components/card/card.module.js +34 -34
  21. package/esm2015/lib/components/carousel/carousel.component.js +109 -109
  22. package/esm2015/lib/components/carousel/carousel.module.js +31 -31
  23. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
  24. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
  25. package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
  26. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
  27. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
  28. package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
  29. package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
  30. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
  31. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
  32. package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
  33. package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
  34. package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
  35. package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
  36. package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
  37. package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
  38. package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
  39. package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
  40. package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
  41. package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
  42. package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
  43. package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
  44. package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
  45. package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
  46. package/esm2015/lib/components/form/form.component.js +181 -181
  47. package/esm2015/lib/components/form/form.module.js +22 -22
  48. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
  49. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
  50. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
  51. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
  52. package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
  53. package/esm2015/lib/components/icon/icon.component.js +47 -47
  54. package/esm2015/lib/components/icon/icon.module.js +24 -24
  55. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
  56. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
  57. package/esm2015/lib/components/image/image.component.js +31 -31
  58. package/esm2015/lib/components/image/image.module.js +13 -13
  59. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
  60. package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
  61. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
  62. package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
  63. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
  64. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
  65. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
  66. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
  67. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
  68. package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
  69. package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
  70. package/esm2015/lib/components/input-scanner/input-scanner.component.js +56 -56
  71. package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
  72. package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
  73. package/esm2015/lib/components/input-search/input-search.component.js +67 -63
  74. package/esm2015/lib/components/input-search/input-search.module.js +20 -20
  75. package/esm2015/lib/components/input-text/input-text.component.js +192 -192
  76. package/esm2015/lib/components/input-text/input-text.module.js +32 -32
  77. package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
  78. package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
  79. package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
  80. package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
  81. package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
  82. package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
  83. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
  84. package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
  85. package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
  86. package/esm2015/lib/components/loader/loader.component.js +16 -16
  87. package/esm2015/lib/components/loader/loader.module.js +18 -18
  88. package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
  89. package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
  90. package/esm2015/lib/components/pagination/pagination.component.js +107 -107
  91. package/esm2015/lib/components/pagination/pagination.module.js +27 -27
  92. package/esm2015/lib/components/pagination/pagination.service.js +87 -87
  93. package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
  94. package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
  95. package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
  96. package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
  97. package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
  98. package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
  99. package/esm2015/lib/components/popup/interface/popup.js +1 -1
  100. package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
  101. package/esm2015/lib/components/popup/model/popup-window.js +37 -37
  102. package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
  103. package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
  104. package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
  105. package/esm2015/lib/components/popup/popup.module.js +48 -48
  106. package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
  107. package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
  108. package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
  109. package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
  110. package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
  111. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +163 -163
  112. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
  113. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +110 -110
  114. package/esm2015/lib/components/simple-grid/simple-grid.component.js +378 -378
  115. package/esm2015/lib/components/simple-grid/simple-grid.module.js +40 -40
  116. package/esm2015/lib/components/tile/tile.component.js +44 -44
  117. package/esm2015/lib/components/tile/tile.module.js +22 -22
  118. package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
  119. package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
  120. package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
  121. package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
  122. package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
  123. package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
  124. package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
  125. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
  126. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
  127. package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
  128. package/esm2015/lib/core/constant/java-max-int.js +1 -1
  129. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
  130. package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
  131. package/esm2015/lib/core/enum/co-direction.js +8 -8
  132. package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
  133. package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
  134. package/esm2015/lib/core/enum/co-orientation.js +16 -16
  135. package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
  136. package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
  137. package/esm2015/lib/core/enum/file-type.enum.js +10 -10
  138. package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
  139. package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
  140. package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
  141. package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
  142. package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
  143. package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
  144. package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
  145. package/esm2015/lib/core/enum/table-name.enum.js +80 -80
  146. package/esm2015/lib/core/function/any-nill.function.js +5 -5
  147. package/esm2015/lib/core/function/is-nill.function.js +4 -4
  148. package/esm2015/lib/core/function/none-nill.function.js +16 -16
  149. package/esm2015/lib/core/function/not-nill.function.js +4 -4
  150. package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
  151. package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
  152. package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
  153. package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
  154. package/esm2015/lib/core/model/co-document.bo.js +120 -120
  155. package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
  156. package/esm2015/lib/core/model/element-position.js +9 -9
  157. package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
  158. package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
  159. package/esm2015/lib/core/service/form-master.service.js +101 -101
  160. package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
  161. package/esm2015/lib/core/utils/array-utils.js +263 -263
  162. package/esm2015/lib/core/utils/browser-utils.js +99 -99
  163. package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
  164. package/esm2015/lib/core/utils/event-utils.js +52 -52
  165. package/esm2015/lib/core/utils/file-utils.js +266 -266
  166. package/esm2015/lib/core/utils/number-utils.js +308 -308
  167. package/esm2015/lib/core/utils/object-utils.js +185 -185
  168. package/esm2015/lib/core/utils/string-utils.js +93 -93
  169. package/esm2015/lib/core/validator/email.validator.js +5 -5
  170. package/esm2015/lib/core/validator/equal.validator.js +10 -10
  171. package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
  172. package/esm2015/lib/core/validator/password.validator.js +30 -30
  173. package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
  174. package/esm2015/lib/core/validator/required.validator.js +4 -4
  175. package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
  176. package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
  177. package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
  178. package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
  179. package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
  180. package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
  181. package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
  182. package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
  183. package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
  184. package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
  185. package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
  186. package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
  187. package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
  188. package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
  189. package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
  190. package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
  191. package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
  192. package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
  193. package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
  194. package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
  195. package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
  196. package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
  197. package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
  198. package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
  199. package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
  200. package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
  201. package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
  202. package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
  203. package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
  204. package/esm2015/lib/pipes/append.pipe.js +16 -16
  205. package/esm2015/lib/pipes/append.pipe.module.js +14 -14
  206. package/esm2015/lib/pipes/filter.pipe.js +15 -15
  207. package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
  208. package/esm2015/lib/pipes/prepend.pipe.js +16 -16
  209. package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
  210. package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
  211. package/esm2015/lib/pipes/price-display.pipe.js +19 -19
  212. package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
  213. package/esm2015/lib/service/base-module.service.js +41 -41
  214. package/esm2015/lib/service/color-sequence.service.js +22 -22
  215. package/esm2015/lib/service/overlay.service.js +72 -72
  216. package/esm2015/lib/translation/core-components-translation.module.js +28 -28
  217. package/esm2015/lib/translation/core-components-translation.service.js +16 -16
  218. package/esm2015/lib/translation/core-dictionary.service.js +28 -28
  219. package/esm2015/lib/translation/core-localize.pipe.js +25 -25
  220. package/esm2015/public-api.js +129 -129
  221. package/fesm2015/colijnit-corecomponents_v12.js +12090 -12086
  222. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  223. package/lib/components/article-tile/article-tile.component.d.ts +22 -22
  224. package/lib/components/article-tile/article-tile.module.d.ts +2 -2
  225. package/lib/components/base/base-input.component.d.ts +182 -182
  226. package/lib/components/base/base.module.d.ts +2 -2
  227. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
  228. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
  229. package/lib/components/base/dialog-base.component.d.ts +4 -4
  230. package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
  231. package/lib/components/button/button.component.d.ts +29 -29
  232. package/lib/components/button/button.module.d.ts +2 -2
  233. package/lib/components/calendar/calendar-template.component.d.ts +60 -60
  234. package/lib/components/calendar/calendar.component.d.ts +13 -13
  235. package/lib/components/calendar/calendar.module.d.ts +2 -2
  236. package/lib/components/card/card.component.d.ts +23 -23
  237. package/lib/components/card/card.module.d.ts +2 -2
  238. package/lib/components/carousel/carousel.component.d.ts +23 -23
  239. package/lib/components/carousel/carousel.module.d.ts +6 -6
  240. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
  241. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
  242. package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
  243. package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
  244. package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
  245. package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
  246. package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
  247. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
  248. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
  249. package/lib/components/collapsible/collapsible.component.d.ts +22 -22
  250. package/lib/components/collapsible/collapsible.module.d.ts +2 -2
  251. package/lib/components/color-picker/color-picker.component.d.ts +6 -6
  252. package/lib/components/color-picker/color-picker.module.d.ts +2 -2
  253. package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
  254. package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
  255. package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
  256. package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
  257. package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
  258. package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
  259. package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
  260. package/lib/components/filter-item/filter-item.component.d.ts +80 -80
  261. package/lib/components/filter-item/filter-item.module.d.ts +2 -2
  262. package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
  263. package/lib/components/form/form.component.d.ts +39 -39
  264. package/lib/components/form/form.module.d.ts +2 -2
  265. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
  266. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
  267. package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
  268. package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
  269. package/lib/components/icon/icon-cache.service.d.ts +20 -20
  270. package/lib/components/icon/icon.component.d.ts +17 -17
  271. package/lib/components/icon/icon.module.d.ts +2 -2
  272. package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
  273. package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
  274. package/lib/components/image/image.component.d.ts +20 -20
  275. package/lib/components/image/image.module.d.ts +2 -2
  276. package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
  277. package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
  278. package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
  279. package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
  280. package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
  281. package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
  282. package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
  283. package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
  284. package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
  285. package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
  286. package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
  287. package/lib/components/input-scanner/input-scanner.component.d.ts +24 -24
  288. package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
  289. package/lib/components/input-scanner/scanner.service.d.ts +11 -11
  290. package/lib/components/input-search/input-search.component.d.ts +20 -19
  291. package/lib/components/input-search/input-search.module.d.ts +2 -2
  292. package/lib/components/input-text/input-text.component.d.ts +65 -65
  293. package/lib/components/input-text/input-text.module.d.ts +2 -2
  294. package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
  295. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
  296. package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
  297. package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
  298. package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
  299. package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
  300. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
  301. package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
  302. package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
  303. package/lib/components/loader/loader.component.d.ts +3 -3
  304. package/lib/components/loader/loader.module.d.ts +2 -2
  305. package/lib/components/pagination/paginate.pipe.d.ts +15 -15
  306. package/lib/components/pagination/pagination-instance.d.ts +14 -14
  307. package/lib/components/pagination/pagination.component.d.ts +38 -38
  308. package/lib/components/pagination/pagination.module.d.ts +2 -2
  309. package/lib/components/pagination/pagination.service.d.ts +24 -24
  310. package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
  311. package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
  312. package/lib/components/popup/const/popup-window-token.d.ts +3 -3
  313. package/lib/components/popup/interface/popup-button.d.ts +8 -8
  314. package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
  315. package/lib/components/popup/interface/popup-settings.d.ts +21 -21
  316. package/lib/components/popup/interface/popup.d.ts +9 -9
  317. package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
  318. package/lib/components/popup/model/popup-window.d.ts +21 -21
  319. package/lib/components/popup/popup-buttons.component.d.ts +13 -13
  320. package/lib/components/popup/popup-message-display.component.d.ts +12 -12
  321. package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
  322. package/lib/components/popup/popup.module.d.ts +4 -4
  323. package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
  324. package/lib/components/popup/service/prompt.service.d.ts +17 -17
  325. package/lib/components/popup/text-input-popup.component.d.ts +12 -12
  326. package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
  327. package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
  328. package/lib/components/simple-grid/base-simple-grid.component.d.ts +52 -52
  329. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
  330. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +42 -42
  331. package/lib/components/simple-grid/simple-grid.component.d.ts +64 -64
  332. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
  333. package/lib/components/tile/tile.component.d.ts +16 -16
  334. package/lib/components/tile/tile.module.d.ts +2 -2
  335. package/lib/components/tile-select/tile-select.component.d.ts +8 -8
  336. package/lib/components/tile-select/tile-select.module.d.ts +2 -2
  337. package/lib/components/tooltip/tooltip.component.d.ts +18 -18
  338. package/lib/components/tooltip/tooltip.module.d.ts +2 -2
  339. package/lib/components/validation-error/validation-error.component.d.ts +12 -12
  340. package/lib/components/validation-error/validation-error.module.d.ts +2 -2
  341. package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
  342. package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
  343. package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
  344. package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
  345. package/lib/core/constant/java-max-int.d.ts +1 -1
  346. package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
  347. package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
  348. package/lib/core/enum/co-direction.d.ts +6 -6
  349. package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
  350. package/lib/core/enum/co-document-type.enum.d.ts +5 -5
  351. package/lib/core/enum/co-orientation.d.ts +6 -6
  352. package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
  353. package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
  354. package/lib/core/enum/file-type.enum.d.ts +5 -5
  355. package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
  356. package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
  357. package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
  358. package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
  359. package/lib/core/enum/object-right-type.enum.d.ts +5 -5
  360. package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
  361. package/lib/core/enum/popup-type.enum.d.ts +9 -9
  362. package/lib/core/enum/table-name.enum.d.ts +79 -79
  363. package/lib/core/function/any-nill.function.d.ts +1 -1
  364. package/lib/core/function/is-nill.function.d.ts +1 -1
  365. package/lib/core/function/none-nill.function.d.ts +1 -1
  366. package/lib/core/function/not-nill.function.d.ts +1 -1
  367. package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
  368. package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
  369. package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
  370. package/lib/core/model/co-document-right.bo.d.ts +6 -6
  371. package/lib/core/model/co-document.bo.d.ts +61 -61
  372. package/lib/core/model/core-components-icon-svg.d.ts +4 -4
  373. package/lib/core/model/element-position.d.ts +7 -7
  374. package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
  375. package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
  376. package/lib/core/service/form-master.service.d.ts +26 -26
  377. package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
  378. package/lib/core/utils/array-utils.d.ts +85 -85
  379. package/lib/core/utils/browser-utils.d.ts +15 -15
  380. package/lib/core/utils/direction-enum-utils.d.ts +5 -5
  381. package/lib/core/utils/event-utils.d.ts +12 -12
  382. package/lib/core/utils/file-utils.d.ts +29 -29
  383. package/lib/core/utils/number-utils.d.ts +89 -89
  384. package/lib/core/utils/object-utils.d.ts +31 -31
  385. package/lib/core/utils/string-utils.d.ts +25 -25
  386. package/lib/core/validator/email.validator.d.ts +2 -2
  387. package/lib/core/validator/equal.validator.d.ts +2 -2
  388. package/lib/core/validator/max-string-length.validator.d.ts +2 -2
  389. package/lib/core/validator/password.validator.d.ts +3 -3
  390. package/lib/core/validator/precision-scale.validator.d.ts +2 -2
  391. package/lib/core/validator/required.validator.d.ts +2 -2
  392. package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
  393. package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
  394. package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
  395. package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
  396. package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
  397. package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
  398. package/lib/directives/overlay/overlay.directive.d.ts +25 -25
  399. package/lib/directives/overlay/overlay.module.d.ts +2 -2
  400. package/lib/directives/ripple/ripple-ref.d.ts +21 -21
  401. package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
  402. package/lib/directives/ripple/ripple.directive.d.ts +56 -56
  403. package/lib/directives/ripple/ripple.module.d.ts +2 -2
  404. package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
  405. package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
  406. package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
  407. package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
  408. package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
  409. package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
  410. package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
  411. package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
  412. package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
  413. package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
  414. package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
  415. package/lib/interfaces/dialog-response.interface.d.ts +6 -6
  416. package/lib/interfaces/scanner-input.interface.d.ts +3 -3
  417. package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
  418. package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
  419. package/lib/model/enum/app-button-type.enum.d.ts +9 -9
  420. package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
  421. package/lib/pipes/append.pipe.d.ts +4 -4
  422. package/lib/pipes/append.pipe.module.d.ts +2 -2
  423. package/lib/pipes/filter.pipe.d.ts +4 -4
  424. package/lib/pipes/filter.pipe.module.d.ts +2 -2
  425. package/lib/pipes/prepend.pipe.d.ts +4 -4
  426. package/lib/pipes/prepend.pipe.module.d.ts +2 -2
  427. package/lib/pipes/price-display-pipe.module.d.ts +2 -2
  428. package/lib/pipes/price-display.pipe.d.ts +4 -4
  429. package/lib/service/base-module-screen-config.service.d.ts +47 -47
  430. package/lib/service/base-module.service.d.ts +22 -22
  431. package/lib/service/color-sequence.service.d.ts +4 -4
  432. package/lib/service/overlay.service.d.ts +13 -13
  433. package/lib/translation/core-components-translation.module.d.ts +4 -4
  434. package/lib/translation/core-components-translation.service.d.ts +6 -6
  435. package/lib/translation/core-dictionary.service.d.ts +12 -12
  436. package/lib/translation/core-localize.pipe.d.ts +7 -7
  437. package/package.json +1 -1
  438. package/public-api.d.ts +126 -126
@@ -1,15 +1,15 @@
1
- import { NgModule } from '@angular/core';
2
- import { PrependPipe } from './prepend.pipe';
3
- export class PrependPipeModule {
4
- }
5
- PrependPipeModule.decorators = [
6
- { type: NgModule, args: [{
7
- declarations: [
8
- PrependPipe
9
- ],
10
- exports: [
11
- PrependPipe
12
- ]
13
- },] }
14
- ];
1
+ import { NgModule } from '@angular/core';
2
+ import { PrependPipe } from './prepend.pipe';
3
+ export class PrependPipeModule {
4
+ }
5
+ PrependPipeModule.decorators = [
6
+ { type: NgModule, args: [{
7
+ declarations: [
8
+ PrependPipe
9
+ ],
10
+ exports: [
11
+ PrependPipe
12
+ ]
13
+ },] }
14
+ ];
15
15
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGVuZC5waXBlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmVjb21wb25lbnRzL3NyYy9saWIvcGlwZXMvcHJlcGVuZC5waXBlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVUzQyxNQUFNLE9BQU8saUJBQWlCOzs7WUFSN0IsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWixXQUFXO2lCQUNaO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxXQUFXO2lCQUNaO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQcmVwZW5kUGlwZX0gZnJvbSAnLi9wcmVwZW5kLnBpcGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFByZXBlbmRQaXBlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQcmVwZW5kUGlwZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByZXBlbmRQaXBlTW9kdWxlIHtcclxufVxyXG4iXX0=
@@ -1,15 +1,15 @@
1
- import { NgModule } from "@angular/core";
2
- import { PriceDisplayPipe } from "./price-display.pipe";
3
- export class PriceDisplayPipeModule {
4
- }
5
- PriceDisplayPipeModule.decorators = [
6
- { type: NgModule, args: [{
7
- declarations: [
8
- PriceDisplayPipe
9
- ],
10
- exports: [
11
- PriceDisplayPipe
12
- ]
13
- },] }
14
- ];
1
+ import { NgModule } from "@angular/core";
2
+ import { PriceDisplayPipe } from "./price-display.pipe";
3
+ export class PriceDisplayPipeModule {
4
+ }
5
+ PriceDisplayPipeModule.decorators = [
6
+ { type: NgModule, args: [{
7
+ declarations: [
8
+ PriceDisplayPipe
9
+ ],
10
+ exports: [
11
+ PriceDisplayPipe
12
+ ]
13
+ },] }
14
+ ];
15
15
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZGlzcGxheS1waXBlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmVjb21wb25lbnRzL3NyYy9saWIvcGlwZXMvcHJpY2UtZGlzcGxheS1waXBlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBVXRELE1BQU0sT0FBTyxzQkFBc0I7OztZQVJsQyxRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFO29CQUNWLGdCQUFnQjtpQkFDbkI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLGdCQUFnQjtpQkFDbkI7YUFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1ByaWNlRGlzcGxheVBpcGV9IGZyb20gXCIuL3ByaWNlLWRpc3BsYXkucGlwZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIFByaWNlRGlzcGxheVBpcGVcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgUHJpY2VEaXNwbGF5UGlwZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpY2VEaXNwbGF5UGlwZU1vZHVsZSB7XHJcbn0iXX0=
@@ -1,20 +1,20 @@
1
- import { Pipe } from "@angular/core";
2
- import { NumberUtils } from "../core/utils/number-utils";
3
- import { notNill } from "../core/function/not-nill.function";
4
- export class PriceDisplayPipe {
5
- transform(value) {
6
- let priceStr = "";
7
- if (notNill(value) && value !== 0 && value !== "") {
8
- value = NumberUtils.ParseFloat(value, 2);
9
- priceStr = "€ " + NumberUtils.AddThousandsCommasTo(value);
10
- if (NumberUtils.GetDecimalPlaces(priceStr) === 0) {
11
- priceStr += ",-";
12
- }
13
- }
14
- return priceStr;
15
- }
16
- }
17
- PriceDisplayPipe.decorators = [
18
- { type: Pipe, args: [{ name: "priceDisplay" },] }
19
- ];
1
+ import { Pipe } from "@angular/core";
2
+ import { NumberUtils } from "../core/utils/number-utils";
3
+ import { notNill } from "../core/function/not-nill.function";
4
+ export class PriceDisplayPipe {
5
+ transform(value) {
6
+ let priceStr = "";
7
+ if (notNill(value) && value !== 0 && value !== "") {
8
+ value = NumberUtils.ParseFloat(value, 2);
9
+ priceStr = "€ " + NumberUtils.AddThousandsCommasTo(value);
10
+ if (NumberUtils.GetDecimalPlaces(priceStr) === 0) {
11
+ priceStr += ",-";
12
+ }
13
+ }
14
+ return priceStr;
15
+ }
16
+ }
17
+ PriceDisplayPipe.decorators = [
18
+ { type: Pipe, args: [{ name: "priceDisplay" },] }
19
+ ];
20
20
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZGlzcGxheS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9waXBlcy9wcmljZS1kaXNwbGF5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUczRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFNBQVMsQ0FBQyxLQUFzQjtRQUM1QixJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFFMUIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1lBQy9DLEtBQUssR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxRQUFRLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlDLFFBQVEsSUFBSSxJQUFJLENBQUM7YUFDcEI7U0FDSjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7OztZQWRKLElBQUksU0FBQyxFQUFDLElBQUksRUFBRSxjQUFjLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TnVtYmVyVXRpbHN9IGZyb20gXCIuLi9jb3JlL3V0aWxzL251bWJlci11dGlsc1wiO1xyXG5pbXBvcnQge25vdE5pbGx9IGZyb20gXCIuLi9jb3JlL2Z1bmN0aW9uL25vdC1uaWxsLmZ1bmN0aW9uXCI7XHJcblxyXG5AUGlwZSh7bmFtZTogXCJwcmljZURpc3BsYXlcIn0pXHJcbmV4cG9ydCBjbGFzcyBQcmljZURpc3BsYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHByaWNlU3RyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgICBpZiAobm90TmlsbCh2YWx1ZSkgJiYgdmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXJVdGlscy5QYXJzZUZsb2F0KHZhbHVlLCAyKTtcclxuICAgICAgICAgICAgcHJpY2VTdHIgPSBcIuKCrCBcIiArIE51bWJlclV0aWxzLkFkZFRob3VzYW5kc0NvbW1hc1RvKHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKE51bWJlclV0aWxzLkdldERlY2ltYWxQbGFjZXMocHJpY2VTdHIpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwcmljZVN0ciArPSBcIiwtXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmljZVN0cjtcclxuICAgIH1cclxufSJdfQ==
@@ -1,205 +1,205 @@
1
- import { __awaiter } from "tslib";
2
- // Base screen configuration service for one "screen module", e.g. 'Crm'. Db-loads, stores and and interprets ObjectConfiguration config objects.
3
- import { Injectable } from '@angular/core';
4
- import { BehaviorSubject } from 'rxjs';
5
- import { ArrayUtils } from '@colijnit/ioneconnector/build/utils/array-utils';
6
- import { DEFAULT_GET_OBJECT_CONFIGURATION_PARAMS } from '@colijnit/ioneconnector/build/model/default-get-object-configurations-params';
7
- import { ObjectConfiguration } from '@colijnit/ioneconnector/build/model/object-configuration';
8
- export class BaseModuleScreenConfigService {
9
- constructor() {
10
- // emits the params of the loaded config, each time when a new config was loaded
11
- this.configSet = new BehaviorSubject([]);
12
- this._configObjects = [];
13
- // key: configName, value: the ObjectConfiguration with that configName. For faster ObjectConfiguration lookups, given a configName string (vs. array).
14
- this._objectConfigsMap = new Map();
15
- }
16
- get configObjects() {
17
- return this._configObjects;
18
- }
19
- // POST: this.configObjects are loaded. Returns the loaded config objects.
20
- loadConfig(params = DEFAULT_GET_OBJECT_CONFIGURATION_PARAMS, insertRights) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- const configObjects = yield this.loadConfigForModule(params, insertRights);
23
- this._configObjects = configObjects;
24
- if (configObjects && Array.isArray(configObjects)) {
25
- this._buildScreenConfigMap();
26
- this.configSet.next(params);
27
- }
28
- return this._configObjects;
29
- });
30
- }
31
- lazyLoadConfig() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- if (!this.configObjects.length) {
34
- yield this.loadConfig();
35
- }
36
- });
37
- }
38
- isActiveFieldValidationObject(configObject) {
39
- if (configObject) {
40
- return configObject.isActiveFieldValidationObject() && !this.isDataNameHiddenByAnyOfItsParentRubrics(configObject.dataName);
41
- }
42
- }
43
- isBoValid(bo) {
44
- if (this.controlValidityByBoMap && !ArrayUtils.IsEmptyArray(this.controlValidityByBoMap)) {
45
- const mapEntry = this.controlValidityByBoMap.find(value => value.bo === bo && value.valid === false);
46
- if (mapEntry) {
47
- return mapEntry.valid;
48
- }
49
- }
50
- return true;
51
- }
52
- getObjectConfigurationFor(configName) {
53
- const configuration = this._objectConfigsMap.get(configName);
54
- // If configuration not found by configname, try by data name
55
- if (!!this._objectConfigsMap.size && !configuration && configName) {
56
- const configNameByDataName = this._getConfigNameByDataName(configName);
57
- if (this._objectConfigsMap.get(configNameByDataName)) {
58
- return this._objectConfigsMap.get(configNameByDataName);
59
- } /*else if (!environment.production) {
60
- console.warn("No configuration object was found by the name of: ", configName, " or dataname ", configNameByDataName);
61
- }*/
62
- }
63
- return configuration;
64
- }
65
- setObjectConfigurationFor(configName, configObject) {
66
- this._objectConfigsMap.set(configName, configObject);
67
- }
68
- // Whether the user may read the component that's associated with given config object (visibility).
69
- mayRead(configName) {
70
- const objectConfig = this._objectConfigsMap.get(configName);
71
- return objectConfig ? objectConfig.mayRead() : false;
72
- }
73
- isReadonly(configName) {
74
- return !this.mayWrite(configName);
75
- }
76
- // Whether the user may write onto the component that's associated with given config object.
77
- mayWrite(configName) {
78
- const objectConfig = this._objectConfigsMap.get(configName);
79
- return objectConfig ? objectConfig.mayWrite() : false;
80
- }
81
- // Whether the component associated with given config object should, from the start, be visible to the user.
82
- immediatelyVisible(configName) {
83
- const objectConfig = this._objectConfigsMap.get(configName);
84
- return objectConfig ? objectConfig.immediatelyVisible() : false;
85
- }
86
- // Whether the component associated with given config object should, from the start, be visible to the user.
87
- immediatelyHidden(configName) {
88
- const objectConfig = this._objectConfigsMap.get(configName);
89
- return objectConfig ? objectConfig.immediatelyHidden() : false;
90
- }
91
- noRights(configName) {
92
- const objectConfig = this._objectConfigsMap.get(configName);
93
- return objectConfig ? objectConfig.noRights() : false;
94
- }
95
- isHidden(configName) {
96
- return !this.immediatelyVisible(configName);
97
- }
98
- isRequired(configName) {
99
- const objectConfig = this._objectConfigsMap.get(configName);
100
- return objectConfig ? !objectConfig.nullable : false;
101
- }
102
- getDefaultValue(configName) {
103
- const objectConfig = this._objectConfigsMap.get(configName);
104
- return objectConfig ? objectConfig.getDefaultValue() : undefined;
105
- }
106
- getDefaultStringValue(configName) {
107
- const objectConfig = this._objectConfigsMap.get(configName);
108
- return objectConfig ? objectConfig.getDefaultStringValue() : undefined;
109
- }
110
- getDefaultNumberValue(configName) {
111
- const objectConfig = this._objectConfigsMap.get(configName);
112
- return objectConfig ? objectConfig.getDefaultNumberValue() : undefined;
113
- }
114
- getMaxLength(configName) {
115
- const objectConfig = this._objectConfigsMap.get(configName);
116
- return objectConfig ? objectConfig.maxLength : undefined;
117
- }
118
- getDecimals(configName) {
119
- const objectConfig = this._objectConfigsMap.get(configName);
120
- return objectConfig ? objectConfig.scale : undefined;
121
- }
122
- hasConfigObjects() {
123
- return this._configObjects && this._configObjects.length > 0 && this._objectConfigsMap.size > 0;
124
- }
125
- isKind(configName, kind) {
126
- const objectConfig = this._objectConfigsMap.get(configName);
127
- return objectConfig ? objectConfig.isKind(kind) : false;
128
- }
129
- isDataNameHiddenByItselfOrAnyOfItsParentRubrics(dataName) {
130
- const isHiddenItself = ArrayUtils.ContainsAnElementFoundBy(this._configObjects, ((item) => {
131
- return item.dataName === dataName && item.isHidden();
132
- }));
133
- if (isHiddenItself) {
134
- return true;
135
- }
136
- else {
137
- return this.isDataNameHiddenByAnyOfItsParentRubrics(dataName);
138
- }
139
- }
140
- isDataNameHiddenByAnyOfItsParentRubrics(dataName) {
141
- // if (this._hardCodedConfigStructure) {
142
- // const parentConfigNames: string[] = this._hardCodedConfigStructure.getParentConfigNamesOfFieldConfigName(this._getConfigNameByDataName(dataName));
143
- // if (parentConfigNames) {
144
- // for (let i: number = 0, len: number = parentConfigNames.length; i < len; i++) {
145
- // const parentConfigObj: ObjectConfiguration = this.getObjectConfigurationFor(parentConfigNames[i]);
146
- // if (parentConfigObj && parentConfigObj.isHidden()) {
147
- // return true;
148
- // }
149
- // }
150
- // }
151
- // return false;
152
- // }
153
- return false;
154
- }
155
- // return the first found config name for given data name
156
- _getConfigNameByDataName(dataName) {
157
- const itsConfigObject = this._getConfigObjectByDataName(dataName);
158
- if (itsConfigObject) {
159
- return itsConfigObject.configName;
160
- }
161
- }
162
- // return the first found config object with given data name
163
- _getConfigObjectByDataName(dataName) {
164
- return ArrayUtils.Find(this._configObjects, (cfgObj) => {
165
- return cfgObj.dataName === dataName;
166
- });
167
- }
168
- // PRE: this.configObjects is loaded. POST: this._objectConfigsMap contains the latest map of configName -> to -> ObjectConfiguration for a live screen module.
169
- _buildScreenConfigMap() {
170
- this._objectConfigsMap.clear();
171
- this.configObjects.forEach(item => this._objectConfigsMap.set(item.configName, item));
172
- }
173
- setScreenConfigurationObjectsReadOnly(value) {
174
- this.configObjects.forEach((object) => {
175
- const copy = Object.assign(new ObjectConfiguration(), object);
176
- copy.variableReadOnly = value;
177
- this.setObjectConfigurationFor(object.configName, copy);
178
- });
179
- }
180
- setScreenConfigurationObjectsRedErrorBackground(errorValidation, setAllFalse = false) {
181
- if (setAllFalse) {
182
- this.configObjects.forEach((object) => {
183
- const copy = Object.assign(new ObjectConfiguration(), object);
184
- copy.redErrorBackground = false;
185
- this.setObjectConfigurationFor(object.configName, copy);
186
- });
187
- }
188
- else if (errorValidation) {
189
- const errorMessages = errorValidation.getAllErrorMessagesOfMyValidationFields();
190
- for (let i = 0, len = errorMessages.length; i < len; i++) {
191
- const errorMsg = errorMessages[i];
192
- const configObject = this.configObjects.find(object => object.configName === errorMsg.fieldId);
193
- if (configObject) {
194
- const copy = Object.assign(new ObjectConfiguration(), configObject);
195
- copy.redErrorBackground = false;
196
- this.setObjectConfigurationFor(configObject.configName, copy);
197
- }
198
- }
199
- }
200
- }
201
- }
202
- BaseModuleScreenConfigService.decorators = [
203
- { type: Injectable }
204
- ];
1
+ import { __awaiter } from "tslib";
2
+ // Base screen configuration service for one "screen module", e.g. 'Crm'. Db-loads, stores and and interprets ObjectConfiguration config objects.
3
+ import { Injectable } from '@angular/core';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import { ArrayUtils } from '@colijnit/ioneconnector/build/utils/array-utils';
6
+ import { DEFAULT_GET_OBJECT_CONFIGURATION_PARAMS } from '@colijnit/ioneconnector/build/model/default-get-object-configurations-params';
7
+ import { ObjectConfiguration } from '@colijnit/ioneconnector/build/model/object-configuration';
8
+ export class BaseModuleScreenConfigService {
9
+ constructor() {
10
+ // emits the params of the loaded config, each time when a new config was loaded
11
+ this.configSet = new BehaviorSubject([]);
12
+ this._configObjects = [];
13
+ // key: configName, value: the ObjectConfiguration with that configName. For faster ObjectConfiguration lookups, given a configName string (vs. array).
14
+ this._objectConfigsMap = new Map();
15
+ }
16
+ get configObjects() {
17
+ return this._configObjects;
18
+ }
19
+ // POST: this.configObjects are loaded. Returns the loaded config objects.
20
+ loadConfig(params = DEFAULT_GET_OBJECT_CONFIGURATION_PARAMS, insertRights) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const configObjects = yield this.loadConfigForModule(params, insertRights);
23
+ this._configObjects = configObjects;
24
+ if (configObjects && Array.isArray(configObjects)) {
25
+ this._buildScreenConfigMap();
26
+ this.configSet.next(params);
27
+ }
28
+ return this._configObjects;
29
+ });
30
+ }
31
+ lazyLoadConfig() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ if (!this.configObjects.length) {
34
+ yield this.loadConfig();
35
+ }
36
+ });
37
+ }
38
+ isActiveFieldValidationObject(configObject) {
39
+ if (configObject) {
40
+ return configObject.isActiveFieldValidationObject() && !this.isDataNameHiddenByAnyOfItsParentRubrics(configObject.dataName);
41
+ }
42
+ }
43
+ isBoValid(bo) {
44
+ if (this.controlValidityByBoMap && !ArrayUtils.IsEmptyArray(this.controlValidityByBoMap)) {
45
+ const mapEntry = this.controlValidityByBoMap.find(value => value.bo === bo && value.valid === false);
46
+ if (mapEntry) {
47
+ return mapEntry.valid;
48
+ }
49
+ }
50
+ return true;
51
+ }
52
+ getObjectConfigurationFor(configName) {
53
+ const configuration = this._objectConfigsMap.get(configName);
54
+ // If configuration not found by configname, try by data name
55
+ if (!!this._objectConfigsMap.size && !configuration && configName) {
56
+ const configNameByDataName = this._getConfigNameByDataName(configName);
57
+ if (this._objectConfigsMap.get(configNameByDataName)) {
58
+ return this._objectConfigsMap.get(configNameByDataName);
59
+ } /*else if (!environment.production) {
60
+ console.warn("No configuration object was found by the name of: ", configName, " or dataname ", configNameByDataName);
61
+ }*/
62
+ }
63
+ return configuration;
64
+ }
65
+ setObjectConfigurationFor(configName, configObject) {
66
+ this._objectConfigsMap.set(configName, configObject);
67
+ }
68
+ // Whether the user may read the component that's associated with given config object (visibility).
69
+ mayRead(configName) {
70
+ const objectConfig = this._objectConfigsMap.get(configName);
71
+ return objectConfig ? objectConfig.mayRead() : false;
72
+ }
73
+ isReadonly(configName) {
74
+ return !this.mayWrite(configName);
75
+ }
76
+ // Whether the user may write onto the component that's associated with given config object.
77
+ mayWrite(configName) {
78
+ const objectConfig = this._objectConfigsMap.get(configName);
79
+ return objectConfig ? objectConfig.mayWrite() : false;
80
+ }
81
+ // Whether the component associated with given config object should, from the start, be visible to the user.
82
+ immediatelyVisible(configName) {
83
+ const objectConfig = this._objectConfigsMap.get(configName);
84
+ return objectConfig ? objectConfig.immediatelyVisible() : false;
85
+ }
86
+ // Whether the component associated with given config object should, from the start, be visible to the user.
87
+ immediatelyHidden(configName) {
88
+ const objectConfig = this._objectConfigsMap.get(configName);
89
+ return objectConfig ? objectConfig.immediatelyHidden() : false;
90
+ }
91
+ noRights(configName) {
92
+ const objectConfig = this._objectConfigsMap.get(configName);
93
+ return objectConfig ? objectConfig.noRights() : false;
94
+ }
95
+ isHidden(configName) {
96
+ return !this.immediatelyVisible(configName);
97
+ }
98
+ isRequired(configName) {
99
+ const objectConfig = this._objectConfigsMap.get(configName);
100
+ return objectConfig ? !objectConfig.nullable : false;
101
+ }
102
+ getDefaultValue(configName) {
103
+ const objectConfig = this._objectConfigsMap.get(configName);
104
+ return objectConfig ? objectConfig.getDefaultValue() : undefined;
105
+ }
106
+ getDefaultStringValue(configName) {
107
+ const objectConfig = this._objectConfigsMap.get(configName);
108
+ return objectConfig ? objectConfig.getDefaultStringValue() : undefined;
109
+ }
110
+ getDefaultNumberValue(configName) {
111
+ const objectConfig = this._objectConfigsMap.get(configName);
112
+ return objectConfig ? objectConfig.getDefaultNumberValue() : undefined;
113
+ }
114
+ getMaxLength(configName) {
115
+ const objectConfig = this._objectConfigsMap.get(configName);
116
+ return objectConfig ? objectConfig.maxLength : undefined;
117
+ }
118
+ getDecimals(configName) {
119
+ const objectConfig = this._objectConfigsMap.get(configName);
120
+ return objectConfig ? objectConfig.scale : undefined;
121
+ }
122
+ hasConfigObjects() {
123
+ return this._configObjects && this._configObjects.length > 0 && this._objectConfigsMap.size > 0;
124
+ }
125
+ isKind(configName, kind) {
126
+ const objectConfig = this._objectConfigsMap.get(configName);
127
+ return objectConfig ? objectConfig.isKind(kind) : false;
128
+ }
129
+ isDataNameHiddenByItselfOrAnyOfItsParentRubrics(dataName) {
130
+ const isHiddenItself = ArrayUtils.ContainsAnElementFoundBy(this._configObjects, ((item) => {
131
+ return item.dataName === dataName && item.isHidden();
132
+ }));
133
+ if (isHiddenItself) {
134
+ return true;
135
+ }
136
+ else {
137
+ return this.isDataNameHiddenByAnyOfItsParentRubrics(dataName);
138
+ }
139
+ }
140
+ isDataNameHiddenByAnyOfItsParentRubrics(dataName) {
141
+ // if (this._hardCodedConfigStructure) {
142
+ // const parentConfigNames: string[] = this._hardCodedConfigStructure.getParentConfigNamesOfFieldConfigName(this._getConfigNameByDataName(dataName));
143
+ // if (parentConfigNames) {
144
+ // for (let i: number = 0, len: number = parentConfigNames.length; i < len; i++) {
145
+ // const parentConfigObj: ObjectConfiguration = this.getObjectConfigurationFor(parentConfigNames[i]);
146
+ // if (parentConfigObj && parentConfigObj.isHidden()) {
147
+ // return true;
148
+ // }
149
+ // }
150
+ // }
151
+ // return false;
152
+ // }
153
+ return false;
154
+ }
155
+ // return the first found config name for given data name
156
+ _getConfigNameByDataName(dataName) {
157
+ const itsConfigObject = this._getConfigObjectByDataName(dataName);
158
+ if (itsConfigObject) {
159
+ return itsConfigObject.configName;
160
+ }
161
+ }
162
+ // return the first found config object with given data name
163
+ _getConfigObjectByDataName(dataName) {
164
+ return ArrayUtils.Find(this._configObjects, (cfgObj) => {
165
+ return cfgObj.dataName === dataName;
166
+ });
167
+ }
168
+ // PRE: this.configObjects is loaded. POST: this._objectConfigsMap contains the latest map of configName -> to -> ObjectConfiguration for a live screen module.
169
+ _buildScreenConfigMap() {
170
+ this._objectConfigsMap.clear();
171
+ this.configObjects.forEach(item => this._objectConfigsMap.set(item.configName, item));
172
+ }
173
+ setScreenConfigurationObjectsReadOnly(value) {
174
+ this.configObjects.forEach((object) => {
175
+ const copy = Object.assign(new ObjectConfiguration(), object);
176
+ copy.variableReadOnly = value;
177
+ this.setObjectConfigurationFor(object.configName, copy);
178
+ });
179
+ }
180
+ setScreenConfigurationObjectsRedErrorBackground(errorValidation, setAllFalse = false) {
181
+ if (setAllFalse) {
182
+ this.configObjects.forEach((object) => {
183
+ const copy = Object.assign(new ObjectConfiguration(), object);
184
+ copy.redErrorBackground = false;
185
+ this.setObjectConfigurationFor(object.configName, copy);
186
+ });
187
+ }
188
+ else if (errorValidation) {
189
+ const errorMessages = errorValidation.getAllErrorMessagesOfMyValidationFields();
190
+ for (let i = 0, len = errorMessages.length; i < len; i++) {
191
+ const errorMsg = errorMessages[i];
192
+ const configObject = this.configObjects.find(object => object.configName === errorMsg.fieldId);
193
+ if (configObject) {
194
+ const copy = Object.assign(new ObjectConfiguration(), configObject);
195
+ copy.redErrorBackground = false;
196
+ this.setObjectConfigurationFor(configObject.configName, copy);
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ BaseModuleScreenConfigService.decorators = [
203
+ { type: Injectable }
204
+ ];
205
205
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2R1bGUtc2NyZWVuLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlL2Jhc2UtbW9kdWxlLXNjcmVlbi1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUpBQWlKO0FBQ2pKLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBVSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saURBQWlELENBQUM7QUFNM0UsT0FBTyxFQUFDLHVDQUF1QyxFQUFDLE1BQU0sOEVBQThFLENBQUM7QUFDckksT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFHN0YsTUFBTSxPQUFnQiw2QkFBNkI7SUFEbkQ7UUFLSSxnRkFBZ0Y7UUFDaEUsY0FBUyxHQUE4QixJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztRQVFqRixtQkFBYyxHQUEwQixFQUFFLENBQUM7UUFFbkQsdUpBQXVKO1FBQy9JLHNCQUFpQixHQUFxQyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztJQW1OekcsQ0FBQztJQTVORyxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFTRCwwRUFBMEU7SUFDN0QsVUFBVSxDQUFDLFNBQW1CLHVDQUF1QyxFQUFFLFlBQXNCOztZQUN0RyxNQUFNLGFBQWEsR0FBMEIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1lBQ3BDLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQy9DLElB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QVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxlQUFlLEVBQUU7WUFDeEIsTUFBTSxhQUFhLEdBQXdCLGVBQWUsQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDO1lBQ3JHLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RFLE1BQU0sUUFBUSxHQUFzQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sWUFBWSxHQUF3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwSCxJQUFJLFlBQVksRUFBRTtvQkFDZCxNQUFNLElBQUksR0FBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQ3pGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ2hDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNqRTthQUNKO1NBQ0o7SUFDTCxDQUFDOzs7WUFuT0osVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEJhc2Ugc2NyZWVuIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3Igb25lIFwic2NyZWVuIG1vZHVsZVwiLCBlLmcuICdDcm0nLiBEYi1sb2Fkcywgc3RvcmVzIGFuZCBhbmQgaW50ZXJwcmV0cyBPYmplY3RDb25maWd1cmF0aW9uIGNvbmZpZyBvYmplY3RzLlxyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QXJyYXlVdGlsc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdXRpbHMvYXJyYXktdXRpbHMnO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9idXNpbmVzcy1vYmplY3QnO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL3ZhbGlkYXRpb24tcmVzdWx0JztcclxuaW1wb3J0IHtPYmplY3RDb25maWd1cmF0aW9uRGVmYXVsdFZhbHVlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdHlwZS9vYmplY3QtY29uZmlndXJhdGlvbi1kZWZhdWx0LXZhbHVlLXR5cGUnO1xyXG5pbXBvcnQge09iamVjdENvbmZpZ0tpbmR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL2VudW0vb2JqZWN0LWNvbmZpZy1raW5kJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uTWVzc2FnZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvdmFsaWRhdGlvbi1tZXNzYWdlJztcclxuaW1wb3J0IHtERUZBVUxUX0dFVF9PQkpFQ1RfQ09ORklHVVJBVElPTl9QQVJBTVN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RlZmF1bHQtZ2V0LW9iamVjdC1jb25maWd1cmF0aW9ucy1wYXJhbXMnO1xyXG5pbXBvcnQge09iamVjdENvbmZpZ3VyYXRpb259IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29iamVjdC1jb25maWd1cmF0aW9uJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNb2R1bGVTY3JlZW5Db25maWdTZXJ2aWNlIHtcclxuICAgIC8vIG1hbnVhbGx5IGdpdmVuIG1vZHVsZSBuYW1lXHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2NyZWVuTW9kdWxlTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIC8vIGVtaXRzIHRoZSBwYXJhbXMgb2YgdGhlIGxvYWRlZCBjb25maWcsIGVhY2ggdGltZSB3aGVuIGEgbmV3IGNvbmZpZyB3YXMgbG9hZGVkXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnU2V0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgY29uZmlnT2JqZWN0cygpOiBPYmplY3RDb25maWd1cmF0aW9uW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb250cm9sVmFsaWRpdHlCeUJvTWFwOiB7Ym86IEJ1c2luZXNzT2JqZWN0LCBjb250cm9sS2V5OiBzdHJpbmcsIHZhbGlkOiBib29sZWFufVtdO1xyXG5cclxuICAgIHByaXZhdGUgX2NvbmZpZ09iamVjdHM6IE9iamVjdENvbmZpZ3VyYXRpb25bXSA9IFtdO1xyXG5cclxuICAgIC8vIGtleTogY29uZmlnTmFtZSwgdmFsdWU6IHRoZSBPYmplY3RDb25maWd1cmF0aW9uIHdpdGggdGhhdCBjb25maWdOYW1lLiBGb3IgZmFzdGVyIE9iamVjdENvbmZpZ3VyYXRpb24gbG9va3VwcywgZ2l2ZW4gYSBjb25maWdOYW1lIHN0cmluZyAodnMuIGFycmF5KS5cclxuICAgIHByaXZhdGUgX29iamVjdENvbmZpZ3NNYXA6IE1hcDxzdHJpbmcsIE9iamVjdENvbmZpZ3VyYXRpb24+ID0gbmV3IE1hcDxzdHJpbmcsIE9iamVjdENvbmZpZ3VyYXRpb24+KCk7XHJcblxyXG4gICAgLy8gUE9TVDogdGhpcy5jb25maWdPYmplY3RzIGFyZSBsb2FkZWQuIFJldHVybnMgdGhlIGxvYWRlZCBjb25maWcgb2JqZWN0cy5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkQ29uZmlnKHBhcmFtczogc3RyaW5nW10gPSBERUZBVUxUX0dFVF9PQkpFQ1RfQ09ORklHVVJBVElPTl9QQVJBTVMsIGluc2VydFJpZ2h0cz86IGJvb2xlYW4pOiBQcm9taXNlPE9iamVjdENvbmZpZ3VyYXRpb25bXT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ09iamVjdHM6IE9iamVjdENvbmZpZ3VyYXRpb25bXSA9IGF3YWl0IHRoaXMubG9hZENvbmZpZ0Zvck1vZHVsZShwYXJhbXMsIGluc2VydFJpZ2h0cyk7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnT2JqZWN0cyA9IGNvbmZpZ09iamVjdHM7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iamVjdHMgJiYgQXJyYXkuaXNBcnJheShjb25maWdPYmplY3RzKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9idWlsZFNjcmVlbkNvbmZpZ01hcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1NldC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsYXp5TG9hZENvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnT2JqZWN0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FjdGl2ZUZpZWxkVmFsaWRhdGlvbk9iamVjdChjb25maWdPYmplY3Q6IE9iamVjdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoY29uZmlnT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWdPYmplY3QuaXNBY3RpdmVGaWVsZFZhbGlkYXRpb25PYmplY3QoKSAmJiAhdGhpcy5pc0RhdGFOYW1lSGlkZGVuQnlBbnlPZkl0c1BhcmVudFJ1YnJpY3MoY29uZmlnT2JqZWN0LmRhdGFOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQm9WYWxpZChibzogQnVzaW5lc3NPYmplY3QpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sVmFsaWRpdHlCeUJvTWFwICYmICFBcnJheVV0aWxzLklzRW1wdHlBcnJheSh0aGlzLmNvbnRyb2xWYWxpZGl0eUJ5Qm9NYXApKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcEVudHJ5OiB7Ym86IEJ1c2luZXNzT2JqZWN0LCBjb250cm9sS2V5OiBzdHJpbmcsIHZhbGlkOiBib29sZWFufSA9IHRoaXMuY29udHJvbFZhbGlkaXR5QnlCb01hcC5maW5kKHZhbHVlID0+IHZhbHVlLmJvID09PSBibyAmJiB2YWx1ZS52YWxpZCA9PT0gZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAobWFwRW50cnkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS52YWxpZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcihjb25maWdOYW1lOiBzdHJpbmcpOiBPYmplY3RDb25maWd1cmF0aW9uIHtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBPYmplY3RDb25maWd1cmF0aW9uID0gdGhpcy5fb2JqZWN0Q29uZmlnc01hcC5nZXQoY29uZmlnTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIElmIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGJ5IGNvbmZpZ25hbWUsIHRyeSBieSBkYXRhIG5hbWVcclxuICAgICAgICBpZiAoISF0aGlzLl9vYmplY3RDb25maWdzTWFwLnNpemUgJiYgIWNvbmZpZ3VyYXRpb24gJiYgY29uZmlnTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWdOYW1lQnlEYXRhTmFtZTogc3RyaW5nID0gdGhpcy5fZ2V0Q29uZmlnTmFtZUJ5RGF0YU5hbWUoY29uZmlnTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb2JqZWN0Q29uZmlnc01hcC5nZXQoY29uZmlnTmFtZUJ5RGF0YU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Q29uZmlnc01hcC5nZXQoY29uZmlnTmFtZUJ5RGF0YU5hbWUpO1xyXG4gICAgICAgICAgICB9IC8qZWxzZSBpZiAoIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdhcyBmb3VuZCBieSB0aGUgbmFtZSBvZjogXCIsIGNvbmZpZ05hbWUsIFwiIG9yIGRhdGFuYW1lIFwiLCBjb25maWdOYW1lQnlEYXRhTmFtZSk7XHJcbiAgICAgICAgICAgIH0qL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE9iamVjdENvbmZpZ3VyYXRpb25Gb3IoY29uZmlnTmFtZTogc3RyaW5nLCBjb25maWdPYmplY3Q6IE9iamVjdENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vYmplY3RDb25maWdzTWFwLnNldChjb25maWdOYW1lLCBjb25maWdPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZXRoZXIgdGhlIHVzZXIgbWF5IHJlYWQgdGhlIGNvbXBvbmVudCB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGNvbmZpZyBvYmplY3QgKHZpc2liaWxpdHkpLlxyXG4gICAgcHVibGljIG1heVJlYWQoY29uZmlnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0Q29uZmlnOiBPYmplY3RDb25maWd1cmF0aW9uID0gdGhpcy5fb2JqZWN0Q29uZmlnc01hcC5nZXQoY29uZmlnTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdENvbmZpZyA/IG9iamVjdENvbmZpZy5tYXlSZWFkKCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSZWFkb25seShjb25maWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubWF5V3JpdGUoY29uZmlnTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2hldGhlciB0aGUgdXNlciBtYXkgd3JpdGUgb250byB0aGUgY29tcG9uZW50IHRoYXQncyBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gY29uZmlnIG9iamVjdC5cclxuICAgIHB1YmxpYyBtYXlXcml0ZShjb25maWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBvYmplY3RDb25maWc6IE9iamVjdENvbmZpZ3VyYXRpb24gPSB0aGlzLl9vYmplY3RDb25maWdzTWFwLmdldChjb25maWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0Q29uZmlnID8gb2JqZWN0Q29uZmlnLm1heVdyaXRlKCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGV0aGVyIHRoZSBjb21wb25lbnQgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGNvbmZpZyBvYmplY3Qgc2hvdWxkLCBmcm9tIHRoZSBzdGFydCwgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cclxuICAgIHB1YmxpYyBpbW1lZGlhdGVseVZpc2libGUoY29uZmlnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0Q29uZmlnOiBPYmplY3RDb25maWd1cmF0aW9uID0gdGhpcy5fb2JqZWN0Q29uZmlnc01hcC5nZXQoY29uZmlnTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdENvbmZpZyA/IG9iamVjdENvbmZpZy5pbW1lZGlhdGVseVZpc2libGUoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gY29uZmlnIG9iamVjdCBzaG91bGQsIGZyb20gdGhlIHN0YXJ0LCBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxyXG4gICAgcHVibGljIGltbWVkaWF0ZWx5SGlkZGVuKGNvbmZpZ05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcuaW1tZWRpYXRlbHlIaWRkZW4oKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub1JpZ2h0cyhjb25maWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBvYmplY3RDb25maWc6IE9iamVjdENvbmZpZ3VyYXRpb24gPSB0aGlzLl9vYmplY3RDb25maWdzTWFwLmdldChjb25maWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0Q29uZmlnID8gb2JqZWN0Q29uZmlnLm5vUmlnaHRzKCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNIaWRkZW4oY29uZmlnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmltbWVkaWF0ZWx5VmlzaWJsZShjb25maWdOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZChjb25maWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBvYmplY3RDb25maWc6IE9iamVjdENvbmZpZ3VyYXRpb24gPSB0aGlzLl9vYmplY3RDb25maWdzTWFwLmdldChjb25maWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0Q29uZmlnID8gIW9iamVjdENvbmZpZy5udWxsYWJsZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREZWZhdWx0VmFsdWUoY29uZmlnTmFtZTogc3RyaW5nKTogT2JqZWN0Q29uZmlndXJhdGlvbkRlZmF1bHRWYWx1ZVR5cGUge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcuZ2V0RGVmYXVsdFZhbHVlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZmF1bHRTdHJpbmdWYWx1ZShjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcuZ2V0RGVmYXVsdFN0cmluZ1ZhbHVlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZmF1bHROdW1iZXJWYWx1ZShjb25maWdOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcuZ2V0RGVmYXVsdE51bWJlclZhbHVlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1heExlbmd0aChjb25maWdOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcubWF4TGVuZ3RoIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREZWNpbWFscyhjb25maWdOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdENvbmZpZzogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuX29iamVjdENvbmZpZ3NNYXAuZ2V0KGNvbmZpZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3RDb25maWcgPyBvYmplY3RDb25maWcuc2NhbGUgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc0NvbmZpZ09iamVjdHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ09iamVjdHMgJiYgdGhpcy5fY29uZmlnT2JqZWN0cy5sZW5ndGggPiAwICYmIHRoaXMuX29iamVjdENvbmZpZ3NNYXAuc2l6ZSA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzS2luZChjb25maWdOYW1lOiBzdHJpbmcsIGtpbmQ6IE9iamVjdENvbmZpZ0tpbmQpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBvYmplY3RDb25maWc6IE9iamVjdENvbmZpZ3VyYXRpb24gPSB0aGlzLl9vYmplY3RDb25maWdzTWFwLmdldChjb25maWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0Q29uZmlnID8gb2JqZWN0Q29uZmlnLmlzS2luZChraW5kKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0RhdGFOYW1lSGlkZGVuQnlJdHNlbGZPckFueU9mSXRzUGFyZW50UnVicmljcyhkYXRhTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgaXNIaWRkZW5JdHNlbGY6IGJvb2xlYW4gPSBBcnJheVV0aWxzLkNvbnRhaW5zQW5FbGVtZW50Rm91bmRCeSh0aGlzLl9jb25maWdPYmplY3RzLCAoKGl0ZW06IE9iamVjdENvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YU5hbWUgPT09IGRhdGFOYW1lICYmIGl0ZW0uaXNIaWRkZW4oKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGlzSGlkZGVuSXRzZWxmKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRGF0YU5hbWVIaWRkZW5CeUFueU9mSXRzUGFyZW50UnVicmljcyhkYXRhTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGRlc2NlbmRhbnRzXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgbG9hZENvbmZpZ0Zvck1vZHVsZShwYXJhbXM6IHN0cmluZ1tdLCBpbnNlcnRSaWdodHM/OiBib29sZWFuKTogUHJvbWlzZTxPYmplY3RDb25maWd1cmF0aW9uW10+O1xyXG5cclxuICAgIHByaXZhdGUgaXNEYXRhTmFtZUhpZGRlbkJ5QW55T2ZJdHNQYXJlbnRSdWJyaWNzKGRhdGFOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5faGFyZENvZGVkQ29uZmlnU3RydWN0dXJlKSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IHBhcmVudENvbmZpZ05hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2hhcmRDb2RlZENvbmZpZ1N0cnVjdHVyZS5nZXRQYXJlbnRDb25maWdOYW1lc09mRmllbGRDb25maWdOYW1lKHRoaXMuX2dldENvbmZpZ05hbWVCeURhdGFOYW1lKGRhdGFOYW1lKSk7XHJcbiAgICAgICAgLy8gICAgIGlmIChwYXJlbnRDb25maWdOYW1lcykge1xyXG4gICAgICAgIC8vICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBwYXJlbnRDb25maWdOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbmZpZ09iajogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcihwYXJlbnRDb25maWdOYW1lc1tpXSk7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHBhcmVudENvbmZpZ09iaiAmJiBwYXJlbnRDb25maWdPYmouaXNIaWRkZW4oKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCBjb25maWcgbmFtZSBmb3IgZ2l2ZW4gZGF0YSBuYW1lXHJcbiAgICBwcml2YXRlIF9nZXRDb25maWdOYW1lQnlEYXRhTmFtZShkYXRhTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBpdHNDb25maWdPYmplY3Q6IE9iamVjdENvbmZpZ3VyYXRpb24gPSB0aGlzLl9nZXRDb25maWdPYmplY3RCeURhdGFOYW1lKGRhdGFOYW1lKTtcclxuICAgICAgICBpZiAoaXRzQ29uZmlnT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdHNDb25maWdPYmplY3QuY29uZmlnTmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCBjb25maWcgb2JqZWN0IHdpdGggZ2l2ZW4gZGF0YSBuYW1lXHJcbiAgICBwcml2YXRlIF9nZXRDb25maWdPYmplY3RCeURhdGFOYW1lKGRhdGFOYW1lOiBzdHJpbmcpOiBPYmplY3RDb25maWd1cmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5GaW5kKHRoaXMuX2NvbmZpZ09iamVjdHMsIChjZmdPYmo6IE9iamVjdENvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmZ09iai5kYXRhTmFtZSA9PT0gZGF0YU5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUFJFOiB0aGlzLmNvbmZpZ09iamVjdHMgaXMgbG9hZGVkLiBQT1NUOiB0aGlzLl9vYmplY3RDb25maWdzTWFwIGNvbnRhaW5zIHRoZSBsYXRlc3QgbWFwIG9mIGNvbmZpZ05hbWUgLT4gdG8gLT4gT2JqZWN0Q29uZmlndXJhdGlvbiBmb3IgYSBsaXZlIHNjcmVlbiBtb2R1bGUuXHJcbiAgICBwcml2YXRlIF9idWlsZFNjcmVlbkNvbmZpZ01hcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vYmplY3RDb25maWdzTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5jb25maWdPYmplY3RzLmZvckVhY2goaXRlbSA9PiB0aGlzLl9vYmplY3RDb25maWdzTWFwLnNldChpdGVtLmNvbmZpZ05hbWUsIGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2NyZWVuQ29uZmlndXJhdGlvbk9iamVjdHNSZWFkT25seSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29uZmlnT2JqZWN0cy5mb3JFYWNoKChvYmplY3Q6IE9iamVjdENvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29weTogT2JqZWN0Q29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24obmV3IE9iamVjdENvbmZpZ3VyYXRpb24oKSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgY29weS52YXJpYWJsZVJlYWRPbmx5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcihvYmplY3QuY29uZmlnTmFtZSwgY29weSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RzUmVkRXJyb3JCYWNrZ3JvdW5kKGVycm9yVmFsaWRhdGlvbjogVmFsaWRhdGlvblJlc3VsdCwgc2V0QWxsRmFsc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzZXRBbGxGYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ09iamVjdHMuZm9yRWFjaCgob2JqZWN0OiBPYmplY3RDb25maWd1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3B5OiBPYmplY3RDb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbihuZXcgT2JqZWN0Q29uZmlndXJhdGlvbigpLCBvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgY29weS5yZWRFcnJvckJhY2tncm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcihvYmplY3QuY29uZmlnTmFtZSwgY29weSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3JWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IFZhbGlkYXRpb25NZXNzYWdlW10gPSBlcnJvclZhbGlkYXRpb24uZ2V0QWxsRXJyb3JNZXNzYWdlc09mTXlWYWxpZGF0aW9uRmllbGRzKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gZXJyb3JNZXNzYWdlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNc2c6IFZhbGlkYXRpb25NZXNzYWdlID0gZXJyb3JNZXNzYWdlc1tpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ09iamVjdDogT2JqZWN0Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlnT2JqZWN0cy5maW5kKG9iamVjdCA9PiBvYmplY3QuY29uZmlnTmFtZSA9PT0gZXJyb3JNc2cuZmllbGRJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weTogT2JqZWN0Q29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24obmV3IE9iamVjdENvbmZpZ3VyYXRpb24oKSwgY29uZmlnT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5LnJlZEVycm9yQmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcihjb25maWdPYmplY3QuY29uZmlnTmFtZSwgY29weSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19