@mediusinc/mng-commons 1.4.0 → 1.5.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) 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 +57 -57
  11. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +74 -74
  12. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +29 -29
  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 +277 -275
  18. package/esm2020/lib/components/action/editor/action-editor.component.mjs +302 -302
  19. package/esm2020/lib/components/action/index.mjs +4 -4
  20. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +44 -44
  21. package/esm2020/lib/components/action/models/action-component.model.mjs +1 -1
  22. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  23. package/esm2020/lib/components/action/models/action-execution.model.mjs +248 -248
  24. package/esm2020/lib/components/action/models/index.mjs +4 -4
  25. package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
  26. package/esm2020/lib/components/action/route/action-route.component.mjs +129 -129
  27. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +299 -299
  28. package/esm2020/lib/components/form/date-range/date-range.component.mjs +108 -108
  29. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +193 -193
  30. package/esm2020/lib/components/form/editor/form-editor.component.mjs +242 -242
  31. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +38 -38
  32. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +49 -49
  33. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +44 -44
  34. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +25 -25
  35. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +149 -149
  36. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +23 -23
  37. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +185 -185
  38. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +196 -196
  39. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +153 -153
  40. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
  41. package/esm2020/lib/components/form/formly/fields/index.mjs +10 -10
  42. package/esm2020/lib/components/form/formly/formly.config.mjs +211 -211
  43. package/esm2020/lib/components/form/formly/index.mjs +1 -1
  44. package/esm2020/lib/components/form/formly/models/formly-config.model.mjs +1 -1
  45. package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
  46. package/esm2020/lib/components/form/formly/models/index.mjs +2 -2
  47. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +14 -14
  48. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +82 -82
  49. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  50. package/esm2020/lib/components/form/index.mjs +4 -4
  51. package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
  52. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  53. package/esm2020/lib/components/form/models/form-editor.interface.mjs +1 -1
  54. package/esm2020/lib/components/form/models/index.mjs +2 -2
  55. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  56. package/esm2020/lib/components/layout/footer.component.mjs +16 -16
  57. package/esm2020/lib/components/layout/index.mjs +7 -7
  58. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  59. package/esm2020/lib/components/layout/menu-item.component.mjs +271 -271
  60. package/esm2020/lib/components/layout/menu.component.mjs +20 -20
  61. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  62. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +194 -194
  63. package/esm2020/lib/components/layout/topbar.component.mjs +64 -64
  64. package/esm2020/lib/components/layout/version.component.mjs +57 -57
  65. package/esm2020/lib/components/tableview/index.mjs +6 -6
  66. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  67. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  68. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +146 -146
  69. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -52
  70. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +119 -119
  71. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +83 -83
  72. package/esm2020/lib/components/tableview/table/table.component.mjs +594 -594
  73. package/esm2020/lib/components/tableview/tableview.component.mjs +112 -112
  74. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  75. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  76. package/esm2020/lib/data-providers/index.mjs +6 -6
  77. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  78. package/esm2020/lib/data-providers/table.data-provider.mjs +37 -37
  79. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +23 -23
  80. package/esm2020/lib/data-providers/tableview.data-provider.mjs +44 -44
  81. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +76 -76
  82. package/esm2020/lib/descriptors/action-button.descriptor.mjs +59 -59
  83. package/esm2020/lib/descriptors/action.descriptor.mjs +576 -576
  84. package/esm2020/lib/descriptors/column.descriptor.mjs +404 -404
  85. package/esm2020/lib/descriptors/editor.descriptor.mjs +289 -289
  86. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +24 -24
  87. package/esm2020/lib/descriptors/field.descriptor.mjs +986 -986
  88. package/esm2020/lib/descriptors/filter.descriptor.mjs +367 -367
  89. package/esm2020/lib/descriptors/index.mjs +11 -11
  90. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  91. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  92. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  93. package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
  94. package/esm2020/lib/descriptors/table.descriptor.mjs +496 -496
  95. package/esm2020/lib/descriptors/tableview.descriptor.mjs +343 -343
  96. package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
  97. package/esm2020/lib/descriptors/types/column.type.mjs +20 -20
  98. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  99. package/esm2020/lib/descriptors/types/field.type.mjs +55 -55
  100. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  101. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  102. package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
  103. package/esm2020/lib/directives/component.directive.mjs +43 -43
  104. package/esm2020/lib/directives/index.mjs +2 -2
  105. package/esm2020/lib/directives/template.directive.mjs +27 -27
  106. package/esm2020/lib/mng-commons.module.mjs +484 -484
  107. package/esm2020/lib/models/column-value.model.mjs +1 -1
  108. package/esm2020/lib/models/config.model.mjs +1 -1
  109. package/esm2020/lib/models/enum.model.mjs +1 -1
  110. package/esm2020/lib/models/error.model.mjs +1 -1
  111. package/esm2020/lib/models/index.mjs +9 -9
  112. package/esm2020/lib/models/menu.model.mjs +1 -1
  113. package/esm2020/lib/models/tableview-attr.model.mjs +1 -1
  114. package/esm2020/lib/models/user.model.mjs +1 -1
  115. package/esm2020/lib/models/version.model.mjs +1 -1
  116. package/esm2020/lib/models/view-container.model.mjs +1 -1
  117. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  118. package/esm2020/lib/pipes/class-map.pipe.mjs +21 -21
  119. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  120. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +37 -37
  121. package/esm2020/lib/pipes/enumerate.pipe.mjs +54 -54
  122. package/esm2020/lib/pipes/getter.pipe.mjs +19 -19
  123. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  124. package/esm2020/lib/pipes/index.mjs +11 -11
  125. package/esm2020/lib/pipes/json-path.pipe.mjs +78 -78
  126. package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +25 -25
  127. package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
  128. package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
  129. package/esm2020/lib/pipes/parametrize.pipe.mjs +84 -84
  130. package/esm2020/lib/pipes/template.pipe.mjs +23 -23
  131. package/esm2020/lib/router/index.mjs +2 -2
  132. package/esm2020/lib/router/models/index.mjs +1 -1
  133. package/esm2020/lib/router/models/router.model.mjs +1 -1
  134. package/esm2020/lib/router/route-builder.mjs +425 -425
  135. package/esm2020/lib/router/tableview-route-builder.mjs +186 -186
  136. package/esm2020/lib/security/authorization.guard.mjs +25 -25
  137. package/esm2020/lib/security/authorization.service.mjs +46 -46
  138. package/esm2020/lib/security/authorization.util.mjs +15 -15
  139. package/esm2020/lib/security/index.mjs +3 -3
  140. package/esm2020/lib/security/model/authorization.type.mjs +7 -7
  141. package/esm2020/lib/security/model/index.mjs +3 -3
  142. package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
  143. package/esm2020/lib/security/model/permissions.model.mjs +86 -86
  144. package/esm2020/lib/services/action-executor.service.mjs +554 -554
  145. package/esm2020/lib/services/commons.service.mjs +460 -460
  146. package/esm2020/lib/services/configuration.service.mjs +141 -141
  147. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  148. package/esm2020/lib/services/index.mjs +6 -6
  149. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  150. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  151. package/esm2020/lib/services/internal/index.mjs +2 -2
  152. package/esm2020/lib/services/navigation.service.mjs +47 -47
  153. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  154. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  155. package/esm2020/lib/services/providers/index.mjs +2 -2
  156. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  157. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  158. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  159. package/esm2020/lib/services/tokens/index.mjs +4 -4
  160. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  161. package/esm2020/lib/services/version.service.mjs +38 -38
  162. package/esm2020/lib/services/view-container.component.service.mjs +54 -54
  163. package/esm2020/lib/styles/button-style.builder.mjs +164 -164
  164. package/esm2020/lib/styles/index.mjs +2 -2
  165. package/esm2020/lib/styles/models/index.mjs +2 -2
  166. package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
  167. package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
  168. package/esm2020/lib/styles/styles.util.mjs +41 -41
  169. package/esm2020/lib/types/i18n.type.mjs +2 -0
  170. package/esm2020/lib/types/index.mjs +4 -3
  171. package/esm2020/lib/types/type.decorator.mjs +21 -21
  172. package/esm2020/lib/types/type.model.mjs +1 -1
  173. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  174. package/esm2020/lib/utils/date.util.mjs +117 -117
  175. package/esm2020/lib/utils/editor-formly.util.mjs +287 -287
  176. package/esm2020/lib/utils/enum.util.mjs +81 -81
  177. package/esm2020/lib/utils/export.util.mjs +19 -19
  178. package/esm2020/lib/utils/i18n.util.mjs +276 -233
  179. package/esm2020/lib/utils/index.mjs +10 -10
  180. package/esm2020/lib/utils/model.util.mjs +68 -68
  181. package/esm2020/lib/utils/notification.util.mjs +50 -50
  182. package/esm2020/lib/utils/route.util.mjs +23 -23
  183. package/esm2020/lib/utils/string.util.mjs +26 -26
  184. package/esm2020/lib/utils/tableview.util.mjs +159 -159
  185. package/esm2020/lib/utils/type.util.mjs +92 -92
  186. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  187. package/esm2020/public-api.mjs +54 -54
  188. package/fesm2015/mediusinc-mng-commons.mjs +13908 -13863
  189. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  190. package/fesm2020/mediusinc-mng-commons.mjs +13745 -13700
  191. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  192. package/index.d.ts +5 -5
  193. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  194. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  195. package/lib/api/models/filter-param.model.d.ts +23 -23
  196. package/lib/api/models/index.d.ts +8 -8
  197. package/lib/api/models/mappers.d.ts +6 -6
  198. package/lib/api/models/query-mode.model.d.ts +16 -16
  199. package/lib/api/models/query-param.model.d.ts +31 -31
  200. package/lib/api/models/query-result.model.d.ts +24 -24
  201. package/lib/api/models/serialization.model.d.ts +8 -8
  202. package/lib/api/services/api.abstract.service.d.ts +24 -24
  203. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  204. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  205. package/lib/api/services/index.d.ts +3 -3
  206. package/lib/api/utils/index.d.ts +2 -2
  207. package/lib/api/utils/medius-rest.util.d.ts +16 -16
  208. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  209. package/lib/components/action/action.component.d.ts +79 -79
  210. package/lib/components/action/editor/action-editor.component.d.ts +69 -69
  211. package/lib/components/action/index.d.ts +4 -4
  212. package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -25
  213. package/lib/components/action/models/action-component.model.d.ts +15 -15
  214. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  215. package/lib/components/action/models/action-execution.model.d.ts +135 -135
  216. package/lib/components/action/models/index.d.ts +4 -4
  217. package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
  218. package/lib/components/action/route/action-route.component.d.ts +31 -31
  219. package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
  220. package/lib/components/form/date-range/date-range.component.d.ts +28 -28
  221. package/lib/components/form/dropdown/dropdown.component.d.ts +52 -52
  222. package/lib/components/form/editor/form-editor.component.d.ts +52 -52
  223. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -13
  224. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -16
  225. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -15
  226. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -14
  227. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +29 -29
  228. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -11
  229. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -46
  230. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +24 -24
  231. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  232. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -7
  233. package/lib/components/form/formly/fields/index.d.ts +10 -10
  234. package/lib/components/form/formly/formly.config.d.ts +14 -14
  235. package/lib/components/form/formly/index.d.ts +1 -1
  236. package/lib/components/form/formly/models/formly-config.model.d.ts +11 -11
  237. package/lib/components/form/formly/models/formly-field.model.d.ts +16 -16
  238. package/lib/components/form/formly/models/index.d.ts +2 -2
  239. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -6
  240. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +11 -11
  241. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  242. package/lib/components/form/index.d.ts +4 -4
  243. package/lib/components/form/models/field-action-context.model.d.ts +17 -17
  244. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  245. package/lib/components/form/models/form-editor.interface.d.ts +10 -10
  246. package/lib/components/form/models/index.d.ts +2 -2
  247. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  248. package/lib/components/layout/footer.component.d.ts +9 -9
  249. package/lib/components/layout/index.d.ts +7 -7
  250. package/lib/components/layout/main-layout.component.d.ts +20 -20
  251. package/lib/components/layout/menu-item.component.d.ts +52 -52
  252. package/lib/components/layout/menu.component.d.ts +10 -10
  253. package/lib/components/layout/services/index.d.ts +1 -1
  254. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  255. package/lib/components/layout/topbar.component.d.ts +28 -28
  256. package/lib/components/layout/version.component.d.ts +19 -19
  257. package/lib/components/tableview/index.d.ts +6 -6
  258. package/lib/components/tableview/models/index.d.ts +1 -1
  259. package/lib/components/tableview/models/table.event.d.ts +17 -17
  260. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +33 -33
  261. package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
  262. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
  263. package/lib/components/tableview/table/column-value/column-value.component.d.ts +35 -35
  264. package/lib/components/tableview/table/table.component.d.ts +115 -115
  265. package/lib/components/tableview/tableview.component.d.ts +48 -48
  266. package/lib/data-providers/base.data-provider.d.ts +14 -14
  267. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  268. package/lib/data-providers/index.d.ts +6 -6
  269. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  270. package/lib/data-providers/table.data-provider.d.ts +27 -27
  271. package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
  272. package/lib/data-providers/tableview.data-provider.d.ts +33 -33
  273. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
  274. package/lib/descriptors/action-button.descriptor.d.ts +22 -22
  275. package/lib/descriptors/action.descriptor.d.ts +223 -223
  276. package/lib/descriptors/column.descriptor.d.ts +130 -130
  277. package/lib/descriptors/editor.descriptor.d.ts +116 -116
  278. package/lib/descriptors/field-validation.descriptor.d.ts +19 -19
  279. package/lib/descriptors/field.descriptor.d.ts +345 -345
  280. package/lib/descriptors/filter.descriptor.d.ts +118 -118
  281. package/lib/descriptors/index.d.ts +11 -11
  282. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  283. package/lib/descriptors/interfaces/index.d.ts +2 -2
  284. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  285. package/lib/descriptors/model.descriptor.d.ts +18 -18
  286. package/lib/descriptors/table.descriptor.d.ts +193 -193
  287. package/lib/descriptors/tableview.descriptor.d.ts +129 -129
  288. package/lib/descriptors/types/action.type.d.ts +21 -21
  289. package/lib/descriptors/types/column.type.d.ts +18 -18
  290. package/lib/descriptors/types/editor.type.d.ts +6 -6
  291. package/lib/descriptors/types/field.type.d.ts +47 -47
  292. package/lib/descriptors/types/filter.type.d.ts +27 -27
  293. package/lib/descriptors/types/index.d.ts +6 -6
  294. package/lib/descriptors/types/table.type.d.ts +22 -22
  295. package/lib/directives/component.directive.d.ts +16 -16
  296. package/lib/directives/index.d.ts +2 -2
  297. package/lib/directives/template.directive.d.ts +13 -13
  298. package/lib/mng-commons.module.d.ts +99 -99
  299. package/lib/models/column-value.model.d.ts +4 -4
  300. package/lib/models/config.model.d.ts +40 -40
  301. package/lib/models/enum.model.d.ts +6 -6
  302. package/lib/models/error.model.d.ts +14 -14
  303. package/lib/models/index.d.ts +9 -9
  304. package/lib/models/menu.model.d.ts +30 -30
  305. package/lib/models/tableview-attr.model.d.ts +10 -10
  306. package/lib/models/user.model.d.ts +8 -8
  307. package/lib/models/version.model.d.ts +18 -18
  308. package/lib/models/view-container.model.d.ts +43 -43
  309. package/lib/pipes/boolean.pipe.d.ts +7 -7
  310. package/lib/pipes/class-map.pipe.d.ts +7 -7
  311. package/lib/pipes/enum.pipe.d.ts +8 -8
  312. package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
  313. package/lib/pipes/enumerate.pipe.d.ts +21 -21
  314. package/lib/pipes/getter.pipe.d.ts +7 -7
  315. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  316. package/lib/pipes/index.d.ts +11 -11
  317. package/lib/pipes/json-path.pipe.d.ts +13 -13
  318. package/lib/pipes/locale-default-row-class.pipe.d.ts +10 -10
  319. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
  320. package/lib/pipes/models/internal/index.d.ts +1 -1
  321. package/lib/pipes/parametrize.pipe.d.ts +13 -13
  322. package/lib/pipes/template.pipe.d.ts +10 -10
  323. package/lib/router/index.d.ts +2 -2
  324. package/lib/router/models/index.d.ts +1 -1
  325. package/lib/router/models/router.model.d.ts +33 -33
  326. package/lib/router/route-builder.d.ts +98 -98
  327. package/lib/router/tableview-route-builder.d.ts +37 -37
  328. package/lib/security/authorization.guard.d.ts +11 -11
  329. package/lib/security/authorization.service.d.ts +19 -19
  330. package/lib/security/authorization.util.d.ts +5 -5
  331. package/lib/security/index.d.ts +3 -3
  332. package/lib/security/model/authorization.type.d.ts +6 -6
  333. package/lib/security/model/index.d.ts +3 -3
  334. package/lib/security/model/permission-service.interface.d.ts +6 -6
  335. package/lib/security/model/permissions.model.d.ts +37 -37
  336. package/lib/services/action-executor.service.d.ts +149 -149
  337. package/lib/services/commons.service.d.ts +93 -93
  338. package/lib/services/configuration.service.d.ts +57 -57
  339. package/lib/services/error-mapper.service.d.ts +7 -7
  340. package/lib/services/index.d.ts +6 -6
  341. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  342. package/lib/services/internal/commons-init.service.d.ts +16 -16
  343. package/lib/services/internal/index.d.ts +2 -2
  344. package/lib/services/navigation.service.d.ts +14 -14
  345. package/lib/services/providers/config-service.provider.d.ts +6 -6
  346. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  347. package/lib/services/providers/index.d.ts +2 -2
  348. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  349. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  350. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  351. package/lib/services/tokens/index.d.ts +4 -4
  352. package/lib/services/tokens/module-config.token.d.ts +3 -3
  353. package/lib/services/version.service.d.ts +13 -13
  354. package/lib/services/view-container.component.service.d.ts +31 -31
  355. package/lib/styles/button-style.builder.d.ts +67 -67
  356. package/lib/styles/index.d.ts +2 -2
  357. package/lib/styles/models/index.d.ts +2 -2
  358. package/lib/styles/models/style-level.enum.d.ts +10 -10
  359. package/lib/styles/models/style-size.enum.d.ts +7 -7
  360. package/lib/styles/styles.util.d.ts +14 -14
  361. package/lib/types/i18n.type.d.ts +1 -0
  362. package/lib/types/index.d.ts +3 -2
  363. package/lib/types/type.decorator.d.ts +4 -4
  364. package/lib/types/type.model.d.ts +23 -23
  365. package/lib/utils/action-data-provider.util.d.ts +20 -20
  366. package/lib/utils/date.util.d.ts +7 -7
  367. package/lib/utils/editor-formly.util.d.ts +12 -12
  368. package/lib/utils/enum.util.d.ts +50 -50
  369. package/lib/utils/export.util.d.ts +5 -5
  370. package/lib/utils/i18n.util.d.ts +85 -56
  371. package/lib/utils/index.d.ts +10 -10
  372. package/lib/utils/model.util.d.ts +8 -8
  373. package/lib/utils/notification.util.d.ts +12 -12
  374. package/lib/utils/route.util.d.ts +4 -4
  375. package/lib/utils/string.util.d.ts +4 -4
  376. package/lib/utils/tableview.util.d.ts +40 -40
  377. package/lib/utils/type.util.d.ts +57 -57
  378. package/package.json +1 -1
  379. package/public-api.d.ts +34 -34
  380. package/version-info.json +5 -5
  381. package/mediusinc-mng-commons-1.4.0.tgz +0 -0
@@ -1,130 +1,130 @@
1
- import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';
2
- import { ConfirmationService, MessageService } from 'primeng/api';
3
- import { ActionActivationTriggerEnum } from '../../../descriptors/types';
4
- import { ActionInstanceStateEnum, ActionParameters } from '../models';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "primeng/api";
8
- import * as i3 from "../../../services";
9
- import * as i4 from "primeng/confirmdialog";
10
- export class MngActionRouteComponent {
11
- constructor(router, route, confirmationService, navigationService, actionExecutor, viewContainerService) {
12
- this.router = router;
13
- this.route = route;
14
- this.confirmationService = confirmationService;
15
- this.navigationService = navigationService;
16
- this.actionExecutor = actionExecutor;
17
- this.viewContainerService = viewContainerService;
18
- this.cmpId = Math.random().toString(36).substring(2);
19
- this.actions = [];
20
- this.subscriptions = [];
21
- }
22
- ngOnInit() {
23
- this.actions = this.viewContainerService?.getActions().filter(a => a.activationTrigger === ActionActivationTriggerEnum.OnRoute) ?? [];
24
- const subscription = this.route.params.subscribe(p => {
25
- const action = this.findActiveAction(p);
26
- if (action) {
27
- this.activateAction(action, p, this.route.snapshot.queryParams);
28
- }
29
- });
30
- this.subscriptions.push(subscription);
31
- }
32
- ngOnDestroy() {
33
- this.subscriptions.forEach(s => s.unsubscribe());
34
- if (this.dialogRef) {
35
- // unsubscribe first, so that close event does not trigger
36
- this.dialogCloseSubscription?.unsubscribe();
37
- this.dialogRef.close();
38
- }
39
- this.subscriptions.forEach(s => s.unsubscribe());
40
- }
41
- getConfirmationService() {
42
- return this.confirmationService;
43
- }
44
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
- getConfirmationServiceInstanceKey(action) {
46
- return `actionRoute_${this.cmpId}`;
47
- }
48
- activateAction(action, p, qp) {
49
- const itemId = p['itemId'];
50
- const actionData = {};
51
- for (const key in p) {
52
- if (key === 'itemId') {
53
- continue;
54
- }
55
- actionData[key] = p[key];
56
- }
57
- for (const key in qp) {
58
- actionData[key] = p[key];
59
- }
60
- const instance = this.actionExecutor.activateAction(action, new ActionParameters(itemId)
61
- .withActionData(actionData)
62
- .withViewContainer(this.viewContainerService ?? undefined)
63
- .withSourceComponent(this)
64
- .withRoute(this.route));
65
- this.activeActionInstance = instance;
66
- if (instance.activationDialogRef) {
67
- this.dialogRef = instance.activationDialogRef;
68
- this.dialogCloseSubscription = instance.activationDialogRef.onClose.subscribe(e => {
69
- const actionEv = e;
70
- if (instance.state === ActionInstanceStateEnum.FinishSuccess) {
71
- if (!this.viewContainerService) {
72
- console.warn(`View container service could not be found, table reload will not be triggered.`);
73
- }
74
- this.viewContainerService?.reloadTable({ data: { event: actionEv } }); // reload only if no error in action and
75
- }
76
- this.untriggerAction();
77
- });
78
- }
79
- }
80
- untriggerAction() {
81
- if (this.dialogCloseSubscription) {
82
- this.dialogCloseSubscription.unsubscribe();
83
- this.dialogCloseSubscription = undefined;
84
- }
85
- this.actionExecutor.deactivateOnRouteTriggeredAction(this.activeActionInstance);
86
- this.activeActionInstance = undefined;
87
- this.dialogRef = undefined;
88
- }
89
- findActiveAction(params) {
90
- const urlSegments = this.route.snapshot.url;
91
- for (const action of this.actions) {
92
- let actionUrl = action.routeUrl ?? '';
93
- // TODO: dont strip '/', but use it accordingly with Angular's router patterns (/, ./, ../)
94
- if (actionUrl.startsWith('/')) {
95
- actionUrl = actionUrl.substring(1);
96
- }
97
- const actionUrlSegments = actionUrl.split('/');
98
- if (actionUrlSegments.length !== urlSegments.length) {
99
- continue;
100
- }
101
- let isMatch = true;
102
- for (let i = 0; i < actionUrlSegments.length; i++) {
103
- if (actionUrlSegments[i].startsWith(':')) {
104
- const paramName = actionUrlSegments[i].substring(1);
105
- if (!params[paramName]) {
106
- isMatch = false;
107
- break;
108
- }
109
- }
110
- else if (actionUrlSegments[i] !== urlSegments[i].path) {
111
- isMatch = false;
112
- break;
113
- }
114
- }
115
- if (isMatch) {
116
- return action;
117
- }
118
- }
119
- return null;
120
- }
121
- }
122
- MngActionRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionRouteComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ConfirmationService }, { token: i3.MngNavigationService }, { token: i3.MngActionExecutorService }, { token: i3.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
123
- MngActionRouteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionRouteComponent, selector: "mng-action-route", providers: [MessageService, ConfirmationService], ngImport: i0, template: "<p-confirmDialog [key]=\"'actionRoute_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n", dependencies: [{ kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionRouteComponent, decorators: [{
125
- type: Component,
126
- args: [{ selector: 'mng-action-route', changeDetection: ChangeDetectionStrategy.OnPush, providers: [MessageService, ConfirmationService], template: "<p-confirmDialog [key]=\"'actionRoute_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n" }]
127
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ConfirmationService }, { type: i3.MngNavigationService }, { type: i3.MngActionExecutorService }, { type: i3.MngViewContainerComponentService, decorators: [{
128
- type: Optional
129
- }] }]; } });
1
+ import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';
2
+ import { ConfirmationService, MessageService } from 'primeng/api';
3
+ import { ActionActivationTriggerEnum } from '../../../descriptors/types';
4
+ import { ActionInstanceStateEnum, ActionParameters } from '../models';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "primeng/api";
8
+ import * as i3 from "../../../services";
9
+ import * as i4 from "primeng/confirmdialog";
10
+ export class MngActionRouteComponent {
11
+ constructor(router, route, confirmationService, navigationService, actionExecutor, viewContainerService) {
12
+ this.router = router;
13
+ this.route = route;
14
+ this.confirmationService = confirmationService;
15
+ this.navigationService = navigationService;
16
+ this.actionExecutor = actionExecutor;
17
+ this.viewContainerService = viewContainerService;
18
+ this.cmpId = Math.random().toString(36).substring(2);
19
+ this.actions = [];
20
+ this.subscriptions = [];
21
+ }
22
+ ngOnInit() {
23
+ this.actions = this.viewContainerService?.getActions().filter(a => a.activationTrigger === ActionActivationTriggerEnum.OnRoute) ?? [];
24
+ const subscription = this.route.params.subscribe(p => {
25
+ const action = this.findActiveAction(p);
26
+ if (action) {
27
+ this.activateAction(action, p, this.route.snapshot.queryParams);
28
+ }
29
+ });
30
+ this.subscriptions.push(subscription);
31
+ }
32
+ ngOnDestroy() {
33
+ this.subscriptions.forEach(s => s.unsubscribe());
34
+ if (this.dialogRef) {
35
+ // unsubscribe first, so that close event does not trigger
36
+ this.dialogCloseSubscription?.unsubscribe();
37
+ this.dialogRef.close();
38
+ }
39
+ this.subscriptions.forEach(s => s.unsubscribe());
40
+ }
41
+ getConfirmationService() {
42
+ return this.confirmationService;
43
+ }
44
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
+ getConfirmationServiceInstanceKey(action) {
46
+ return `actionRoute_${this.cmpId}`;
47
+ }
48
+ activateAction(action, p, qp) {
49
+ const itemId = p['itemId'];
50
+ const actionData = {};
51
+ for (const key in p) {
52
+ if (key === 'itemId') {
53
+ continue;
54
+ }
55
+ actionData[key] = p[key];
56
+ }
57
+ for (const key in qp) {
58
+ actionData[key] = p[key];
59
+ }
60
+ const instance = this.actionExecutor.activateAction(action, new ActionParameters(itemId)
61
+ .withActionData(actionData)
62
+ .withViewContainer(this.viewContainerService ?? undefined)
63
+ .withSourceComponent(this)
64
+ .withRoute(this.route));
65
+ this.activeActionInstance = instance;
66
+ if (instance.activationDialogRef) {
67
+ this.dialogRef = instance.activationDialogRef;
68
+ this.dialogCloseSubscription = instance.activationDialogRef.onClose.subscribe(e => {
69
+ const actionEv = e;
70
+ if (instance.state === ActionInstanceStateEnum.FinishSuccess) {
71
+ if (!this.viewContainerService) {
72
+ console.warn(`View container service could not be found, table reload will not be triggered.`);
73
+ }
74
+ this.viewContainerService?.reloadTable({ data: { event: actionEv } }); // reload only if no error in action and
75
+ }
76
+ this.untriggerAction();
77
+ });
78
+ }
79
+ }
80
+ untriggerAction() {
81
+ if (this.dialogCloseSubscription) {
82
+ this.dialogCloseSubscription.unsubscribe();
83
+ this.dialogCloseSubscription = undefined;
84
+ }
85
+ this.actionExecutor.deactivateOnRouteTriggeredAction(this.activeActionInstance);
86
+ this.activeActionInstance = undefined;
87
+ this.dialogRef = undefined;
88
+ }
89
+ findActiveAction(params) {
90
+ const urlSegments = this.route.snapshot.url;
91
+ for (const action of this.actions) {
92
+ let actionUrl = action.routeUrl ?? '';
93
+ // TODO: dont strip '/', but use it accordingly with Angular's router patterns (/, ./, ../)
94
+ if (actionUrl.startsWith('/')) {
95
+ actionUrl = actionUrl.substring(1);
96
+ }
97
+ const actionUrlSegments = actionUrl.split('/');
98
+ if (actionUrlSegments.length !== urlSegments.length) {
99
+ continue;
100
+ }
101
+ let isMatch = true;
102
+ for (let i = 0; i < actionUrlSegments.length; i++) {
103
+ if (actionUrlSegments[i].startsWith(':')) {
104
+ const paramName = actionUrlSegments[i].substring(1);
105
+ if (!params[paramName]) {
106
+ isMatch = false;
107
+ break;
108
+ }
109
+ }
110
+ else if (actionUrlSegments[i] !== urlSegments[i].path) {
111
+ isMatch = false;
112
+ break;
113
+ }
114
+ }
115
+ if (isMatch) {
116
+ return action;
117
+ }
118
+ }
119
+ return null;
120
+ }
121
+ }
122
+ MngActionRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionRouteComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ConfirmationService }, { token: i3.MngNavigationService }, { token: i3.MngActionExecutorService }, { token: i3.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
123
+ MngActionRouteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionRouteComponent, selector: "mng-action-route", providers: [MessageService, ConfirmationService], ngImport: i0, template: "<p-confirmDialog [key]=\"'actionRoute_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n", dependencies: [{ kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionRouteComponent, decorators: [{
125
+ type: Component,
126
+ args: [{ selector: 'mng-action-route', changeDetection: ChangeDetectionStrategy.OnPush, providers: [MessageService, ConfirmationService], template: "<p-confirmDialog [key]=\"'actionRoute_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n" }]
127
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ConfirmationService }, { type: i3.MngNavigationService }, { type: i3.MngActionExecutorService }, { type: i3.MngViewContainerComponentService, decorators: [{
128
+ type: Optional
129
+ }] }]; } });
130
130
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUc5RixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBS2hFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXZFLE9BQU8sRUFBNkIsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFRNUgsTUFBTSxPQUFPLHVCQUF1QjtJQVNoQyxZQUNZLE1BQWMsRUFDZCxLQUFxQixFQUNyQixtQkFBd0MsRUFDeEMsaUJBQXVDLEVBQ3ZDLGNBQXdDLEVBQzVCLG9CQUFtRTtRQUwvRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUM1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQStDO1FBZHBGLFVBQUssR0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxZQUFPLEdBQStCLEVBQUUsQ0FBQztRQUt6QyxrQkFBYSxHQUF3QixFQUFFLENB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IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ05hdmlnYXRpb25TZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sIEFjdGlvblBhcmFtZXRlcnMsIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24tcm91dGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tcm91dGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLCBDb25maXJtYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGNtcElkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHJpdmF0ZSBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgYWN0aXZlQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjtcbiAgICBwcml2YXRlIGRpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XG4gICAgcHJpdmF0ZSBkaWFsb2dDbG9zZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy52aWV3Q29udGFpbmVyU2VydmljZT8uZ2V0QWN0aW9ucygpLmZpbHRlcihhID0+IGEuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSA/PyBbXTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHAgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5maW5kQWN0aXZlQWN0aW9uKHApO1xuICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBwLCB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmUgZmlyc3QsIHNvIHRoYXQgY2xvc2UgZXZlbnQgZG9lcyBub3QgdHJpZ2dlclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+KSB7XG4gICAgICAgIHJldHVybiBgYWN0aW9uUm91dGVfJHt0aGlzLmNtcElkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZUFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHA6IFBhcmFtcywgcXA6IFBhcmFtcykge1xuICAgICAgICBjb25zdCBpdGVtSWQgPSBwWydpdGVtSWQnXTtcbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YTogQWN0aW9uRGF0YSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnaXRlbUlkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uRGF0YVtrZXldID0gcFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHFwKSB7XG4gICAgICAgICAgICBhY3Rpb25EYXRhW2tleV0gPSBwW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4oaXRlbUlkKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShhY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKVxuICAgICAgICAgICAgICAgIC53aXRoUm91dGUodGhpcy5yb3V0ZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25JbnN0YW5jZSA9IGluc3RhbmNlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0Nsb3NlU3Vic2NyaXB0aW9uID0gaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FdiA9IGUgYXMgVCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52aWV3Q29udGFpbmVyU2VydmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3IGNvbnRhaW5lciBzZXJ2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgdGFibGUgcmVsb2FkIHdpbGwgbm90IGJlIHRyaWdnZXJlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlPy5yZWxvYWRUYWJsZSh7ZGF0YToge2V2ZW50OiBhY3Rpb25Fdn19KTsgLy8gcmVsb2FkIG9ubHkgaWYgbm8gZXJyb3IgaW4gYWN0aW9uIGFuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVudHJpZ2dlckFjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVudHJpZ2dlckFjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5kZWFjdGl2YXRlT25Sb3V0ZVRyaWdnZXJlZEFjdGlvbih0aGlzLmFjdGl2ZUFjdGlvbkluc3RhbmNlISk7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGl2ZUFjdGlvbihwYXJhbXM6IFBhcmFtcyk6IEFjdGlvbkRlc2NyaXB0b3I8VD4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdXJsU2VnbWVudHMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnVybDtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25VcmxTZWdtZW50cy5sZW5ndGggIT09IHVybFNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb25VcmxTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25VcmxTZWdtZW50c1tpXS5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gYWN0aW9uVXJsU2VnbWVudHNbaV0uc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtc1twYXJhbU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uVXJsU2VnbWVudHNbaV0gIT09IHVybFNlZ21lbnRzW2ldLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwiPHAtY29uZmlybURpYWxvZyBba2V5XT1cIidhY3Rpb25Sb3V0ZV8nICsgY21wSWRcIiBbYmFzZVpJbmRleF09XCI1MFwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1jb25maXJtRGlhbG9nPlxuIl19