@mediusinc/mng-commons 0.10.1 → 0.10.3-rc

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 (319) 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 +17 -17
  9. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  10. package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
  11. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +67 -67
  12. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
  13. package/esm2020/lib/api/services/index.mjs +3 -3
  14. package/esm2020/lib/api/utils/index.mjs +2 -2
  15. package/esm2020/lib/api/utils/medius-rest.util.mjs +151 -151
  16. package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
  17. package/esm2020/lib/components/action/action.component.mjs +199 -199
  18. package/esm2020/lib/components/action/editor/action-editor.component.mjs +247 -247
  19. package/esm2020/lib/components/action/index.mjs +3 -3
  20. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  21. package/esm2020/lib/components/action/models/action-execution.model.mjs +235 -235
  22. package/esm2020/lib/components/action/models/index.mjs +2 -2
  23. package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
  24. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +277 -277
  25. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +168 -168
  26. package/esm2020/lib/components/form/editor/form-editor.component.mjs +211 -211
  27. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +48 -48
  28. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +43 -43
  29. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
  30. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +101 -101
  31. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +22 -22
  32. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +179 -179
  33. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +173 -173
  34. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +155 -155
  35. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
  36. package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
  37. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
  38. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
  39. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  40. package/esm2020/lib/components/form/index.mjs +3 -3
  41. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  42. package/esm2020/lib/components/form/models/index.mjs +1 -1
  43. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  44. package/esm2020/lib/components/layout/footer.component.mjs +16 -16
  45. package/esm2020/lib/components/layout/index.mjs +7 -7
  46. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  47. package/esm2020/lib/components/layout/menu-item.component.mjs +238 -238
  48. package/esm2020/lib/components/layout/menu.component.mjs +20 -20
  49. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  50. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
  51. package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
  52. package/esm2020/lib/components/layout/version.component.mjs +57 -57
  53. package/esm2020/lib/components/tableview/index.mjs +6 -6
  54. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  55. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  56. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +57 -57
  57. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +60 -60
  58. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +101 -101
  59. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +70 -70
  60. package/esm2020/lib/components/tableview/table/table.component.mjs +497 -497
  61. package/esm2020/lib/components/tableview/tableview.component.mjs +91 -91
  62. package/esm2020/lib/config/formly.config.mjs +180 -180
  63. package/esm2020/lib/config/index.mjs +1 -1
  64. package/esm2020/lib/config/models/index.mjs +1 -1
  65. package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
  66. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  67. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  68. package/esm2020/lib/data-providers/index.mjs +5 -5
  69. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  70. package/esm2020/lib/data-providers/table.data-provider.mjs +16 -16
  71. package/esm2020/lib/data-providers/tableview.data-provider.mjs +16 -16
  72. package/esm2020/lib/descriptors/action.descriptor.mjs +587 -587
  73. package/esm2020/lib/descriptors/column.descriptor.mjs +264 -264
  74. package/esm2020/lib/descriptors/editor.descriptor.mjs +146 -146
  75. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
  76. package/esm2020/lib/descriptors/field.descriptor.mjs +819 -819
  77. package/esm2020/lib/descriptors/filter.descriptor.mjs +288 -288
  78. package/esm2020/lib/descriptors/index.mjs +9 -9
  79. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  80. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  81. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  82. package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
  83. package/esm2020/lib/descriptors/table.descriptor.mjs +197 -197
  84. package/esm2020/lib/descriptors/tableview.descriptor.mjs +134 -134
  85. package/esm2020/lib/descriptors/types/action.type.mjs +52 -52
  86. package/esm2020/lib/descriptors/types/column.type.mjs +10 -10
  87. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  88. package/esm2020/lib/descriptors/types/field.type.mjs +52 -52
  89. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  90. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  91. package/esm2020/lib/descriptors/types/table.type.mjs +16 -16
  92. package/esm2020/lib/directives/component.directive.mjs +43 -43
  93. package/esm2020/lib/directives/index.mjs +2 -2
  94. package/esm2020/lib/directives/template.directive.mjs +27 -27
  95. package/esm2020/lib/mng-commons.module.mjs +441 -441
  96. package/esm2020/lib/models/column-value.model.mjs +1 -1
  97. package/esm2020/lib/models/enum.model.mjs +1 -1
  98. package/esm2020/lib/models/error.model.mjs +1 -1
  99. package/esm2020/lib/models/index.mjs +7 -7
  100. package/esm2020/lib/models/menu.model.mjs +1 -1
  101. package/esm2020/lib/models/user.model.mjs +1 -1
  102. package/esm2020/lib/models/version.model.mjs +1 -1
  103. package/esm2020/lib/models/view-container.model.mjs +1 -1
  104. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  105. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  106. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  107. package/esm2020/lib/pipes/index.mjs +5 -5
  108. package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
  109. package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
  110. package/esm2020/lib/router/index.mjs +2 -2
  111. package/esm2020/lib/router/models/index.mjs +1 -1
  112. package/esm2020/lib/router/models/router.model.mjs +1 -1
  113. package/esm2020/lib/router/route-builder.mjs +425 -425
  114. package/esm2020/lib/router/tableview-route-builder.mjs +159 -159
  115. package/esm2020/lib/security/authorization.guard.mjs +25 -25
  116. package/esm2020/lib/security/authorization.service.mjs +46 -46
  117. package/esm2020/lib/security/authorization.util.mjs +15 -15
  118. package/esm2020/lib/security/index.mjs +3 -3
  119. package/esm2020/lib/security/model/authorization.type.mjs +7 -7
  120. package/esm2020/lib/security/model/index.mjs +3 -3
  121. package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
  122. package/esm2020/lib/security/model/permissions.model.mjs +94 -94
  123. package/esm2020/lib/services/action-executor.service.mjs +535 -535
  124. package/esm2020/lib/services/commons.service.mjs +342 -342
  125. package/esm2020/lib/services/configuration.service.mjs +110 -110
  126. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  127. package/esm2020/lib/services/index.mjs +6 -6
  128. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  129. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  130. package/esm2020/lib/services/internal/index.mjs +2 -2
  131. package/esm2020/lib/services/navigation.service.mjs +47 -47
  132. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  133. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  134. package/esm2020/lib/services/providers/index.mjs +2 -2
  135. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  136. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  137. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  138. package/esm2020/lib/services/tokens/index.mjs +4 -4
  139. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  140. package/esm2020/lib/services/version.service.mjs +38 -38
  141. package/esm2020/lib/services/view-container.component.service.mjs +34 -34
  142. package/esm2020/lib/types/index.mjs +2 -2
  143. package/esm2020/lib/types/type.decorator.mjs +12 -12
  144. package/esm2020/lib/types/type.model.mjs +1 -1
  145. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  146. package/esm2020/lib/utils/editor-formly.util.mjs +242 -242
  147. package/esm2020/lib/utils/enum.util.mjs +81 -81
  148. package/esm2020/lib/utils/i18n.util.mjs +232 -232
  149. package/esm2020/lib/utils/index.mjs +7 -7
  150. package/esm2020/lib/utils/model.util.mjs +59 -59
  151. package/esm2020/lib/utils/notification.util.mjs +45 -45
  152. package/esm2020/lib/utils/route.util.mjs +23 -23
  153. package/esm2020/lib/utils/styles.util.mjs +40 -40
  154. package/esm2020/lib/utils/type.util.mjs +76 -76
  155. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  156. package/esm2020/public-api.mjs +51 -51
  157. package/fesm2015/mediusinc-mng-commons.mjs +10637 -10637
  158. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  159. package/fesm2020/mediusinc-mng-commons.mjs +10486 -10486
  160. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  161. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  162. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  163. package/lib/api/models/filter-param.model.d.ts +23 -23
  164. package/lib/api/models/index.d.ts +8 -8
  165. package/lib/api/models/mappers.d.ts +6 -6
  166. package/lib/api/models/query-mode.model.d.ts +16 -16
  167. package/lib/api/models/query-param.model.d.ts +31 -31
  168. package/lib/api/models/query-result.model.d.ts +23 -23
  169. package/lib/api/models/serialization.model.d.ts +8 -8
  170. package/lib/api/services/api.abstract.service.d.ts +24 -24
  171. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  172. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  173. package/lib/api/services/index.d.ts +3 -3
  174. package/lib/api/utils/index.d.ts +2 -2
  175. package/lib/api/utils/medius-rest.util.d.ts +15 -15
  176. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  177. package/lib/components/action/action.component.d.ts +75 -75
  178. package/lib/components/action/editor/action-editor.component.d.ts +64 -64
  179. package/lib/components/action/index.d.ts +3 -3
  180. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  181. package/lib/components/action/models/action-execution.model.d.ts +129 -129
  182. package/lib/components/action/models/index.d.ts +2 -2
  183. package/lib/components/action/route/action-route.component.d.ts +31 -31
  184. package/lib/components/form/autocomplete/autocomplete.component.d.ts +56 -56
  185. package/lib/components/form/dropdown/dropdown.component.d.ts +47 -47
  186. package/lib/components/form/editor/form-editor.component.d.ts +45 -45
  187. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +15 -15
  188. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
  189. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +13 -13
  190. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +23 -23
  191. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +10 -10
  192. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +45 -45
  193. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +23 -23
  194. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +38 -38
  195. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  196. package/lib/components/form/formly/fields/index.d.ts +9 -9
  197. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
  198. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
  199. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  200. package/lib/components/form/index.d.ts +3 -3
  201. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  202. package/lib/components/form/models/index.d.ts +1 -1
  203. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  204. package/lib/components/layout/footer.component.d.ts +9 -9
  205. package/lib/components/layout/index.d.ts +7 -7
  206. package/lib/components/layout/main-layout.component.d.ts +20 -20
  207. package/lib/components/layout/menu-item.component.d.ts +44 -44
  208. package/lib/components/layout/menu.component.d.ts +10 -10
  209. package/lib/components/layout/services/index.d.ts +1 -1
  210. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  211. package/lib/components/layout/topbar.component.d.ts +24 -24
  212. package/lib/components/layout/version.component.d.ts +19 -19
  213. package/lib/components/tableview/index.d.ts +6 -6
  214. package/lib/components/tableview/models/index.d.ts +1 -1
  215. package/lib/components/tableview/models/table.event.d.ts +17 -17
  216. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +20 -20
  217. package/lib/components/tableview/route/tableview-route.component.d.ts +23 -23
  218. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +32 -32
  219. package/lib/components/tableview/table/column-value/column-value.component.d.ts +29 -29
  220. package/lib/components/tableview/table/table.component.d.ts +108 -108
  221. package/lib/components/tableview/tableview.component.d.ts +41 -41
  222. package/lib/config/formly.config.d.ts +15 -15
  223. package/lib/config/index.d.ts +1 -1
  224. package/lib/config/models/index.d.ts +1 -1
  225. package/lib/config/models/mng-config.model.d.ts +36 -36
  226. package/lib/data-providers/base.data-provider.d.ts +14 -14
  227. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  228. package/lib/data-providers/index.d.ts +5 -5
  229. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  230. package/lib/data-providers/table.data-provider.d.ts +14 -14
  231. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  232. package/lib/descriptors/action.descriptor.d.ts +234 -234
  233. package/lib/descriptors/column.descriptor.d.ts +82 -82
  234. package/lib/descriptors/editor.descriptor.d.ts +37 -37
  235. package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
  236. package/lib/descriptors/field.descriptor.d.ts +294 -294
  237. package/lib/descriptors/filter.descriptor.d.ts +106 -106
  238. package/lib/descriptors/index.d.ts +9 -9
  239. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  240. package/lib/descriptors/interfaces/index.d.ts +2 -2
  241. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  242. package/lib/descriptors/model.descriptor.d.ts +15 -15
  243. package/lib/descriptors/table.descriptor.d.ts +66 -66
  244. package/lib/descriptors/tableview.descriptor.d.ts +42 -42
  245. package/lib/descriptors/types/action.type.d.ts +45 -45
  246. package/lib/descriptors/types/column.type.d.ts +9 -9
  247. package/lib/descriptors/types/editor.type.d.ts +6 -6
  248. package/lib/descriptors/types/field.type.d.ts +44 -44
  249. package/lib/descriptors/types/filter.type.d.ts +27 -27
  250. package/lib/descriptors/types/index.d.ts +6 -6
  251. package/lib/descriptors/types/table.type.d.ts +13 -13
  252. package/lib/directives/component.directive.d.ts +16 -16
  253. package/lib/directives/index.d.ts +2 -2
  254. package/lib/directives/template.directive.d.ts +13 -13
  255. package/lib/mng-commons.module.d.ts +87 -87
  256. package/lib/models/column-value.model.d.ts +4 -4
  257. package/lib/models/enum.model.d.ts +6 -6
  258. package/lib/models/error.model.d.ts +14 -14
  259. package/lib/models/index.d.ts +7 -7
  260. package/lib/models/menu.model.d.ts +27 -27
  261. package/lib/models/user.model.d.ts +8 -8
  262. package/lib/models/version.model.d.ts +18 -18
  263. package/lib/models/view-container.model.d.ts +6 -6
  264. package/lib/pipes/boolean.pipe.d.ts +7 -7
  265. package/lib/pipes/enum.pipe.d.ts +8 -8
  266. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  267. package/lib/pipes/index.d.ts +5 -5
  268. package/lib/pipes/json-path.pipe.d.ts +13 -13
  269. package/lib/pipes/link-formatter.pipe.d.ts +11 -11
  270. package/lib/router/index.d.ts +2 -2
  271. package/lib/router/models/index.d.ts +1 -1
  272. package/lib/router/models/router.model.d.ts +27 -27
  273. package/lib/router/route-builder.d.ts +98 -98
  274. package/lib/router/tableview-route-builder.d.ts +34 -34
  275. package/lib/security/authorization.guard.d.ts +11 -11
  276. package/lib/security/authorization.service.d.ts +19 -19
  277. package/lib/security/authorization.util.d.ts +5 -5
  278. package/lib/security/index.d.ts +3 -3
  279. package/lib/security/model/authorization.type.d.ts +6 -6
  280. package/lib/security/model/index.d.ts +3 -3
  281. package/lib/security/model/permission-service.interface.d.ts +6 -6
  282. package/lib/security/model/permissions.model.d.ts +44 -44
  283. package/lib/services/action-executor.service.d.ts +149 -149
  284. package/lib/services/commons.service.d.ts +78 -78
  285. package/lib/services/configuration.service.d.ts +36 -36
  286. package/lib/services/error-mapper.service.d.ts +7 -7
  287. package/lib/services/index.d.ts +6 -6
  288. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  289. package/lib/services/internal/commons-init.service.d.ts +16 -16
  290. package/lib/services/internal/index.d.ts +2 -2
  291. package/lib/services/navigation.service.d.ts +14 -14
  292. package/lib/services/providers/config-service.provider.d.ts +6 -6
  293. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  294. package/lib/services/providers/index.d.ts +2 -2
  295. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  296. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  297. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  298. package/lib/services/tokens/index.d.ts +4 -4
  299. package/lib/services/tokens/module-config.token.d.ts +3 -3
  300. package/lib/services/version.service.d.ts +13 -13
  301. package/lib/services/view-container.component.service.d.ts +22 -22
  302. package/lib/types/index.d.ts +2 -2
  303. package/lib/types/type.decorator.d.ts +4 -4
  304. package/lib/types/type.model.d.ts +23 -23
  305. package/lib/utils/action-data-provider.util.d.ts +20 -20
  306. package/lib/utils/editor-formly.util.d.ts +11 -11
  307. package/lib/utils/enum.util.d.ts +50 -50
  308. package/lib/utils/i18n.util.d.ts +56 -56
  309. package/lib/utils/index.d.ts +7 -7
  310. package/lib/utils/model.util.d.ts +8 -8
  311. package/lib/utils/notification.util.d.ts +11 -11
  312. package/lib/utils/route.util.d.ts +4 -4
  313. package/lib/utils/styles.util.d.ts +14 -14
  314. package/lib/utils/type.util.d.ts +36 -36
  315. package/mediusinc-mng-commons-0.10.3-rc.tgz +0 -0
  316. package/mediusinc-mng-commons.d.ts +5 -5
  317. package/package.json +1 -1
  318. package/public-api.d.ts +32 -32
  319. package/version-info.json +6 -6
@@ -1,152 +1,152 @@
1
- import { FilterMatchMode } from 'primeng/api';
2
- import { FilterTypeEnum } from '../../descriptors/types';
3
- import { MediusFilterMatchType, MediusQueryParamBuilder } from '../models';
4
- export class MediusRestUtil {
5
- static fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
6
- const offset = params['first'] ? parseInt(params['first']) : defaultOffset;
7
- const itemsPerPage = params['rows'] ? parseInt(params['rows']) : defaultItemsPerPage;
8
- const mediusParamsBuilder = MediusQueryParamBuilder.create(itemsPerPage, offset);
9
- if (params['sort']) {
10
- for (const sort of params['sort'].split(',')) {
11
- const qpSortSplit = sort.split(':');
12
- const field = qpSortSplit[0];
13
- const asc = qpSortSplit.length > 1 ? qpSortSplit[1] === 'asc' : true;
14
- mediusParamsBuilder.withSort(field, asc);
15
- }
16
- }
17
- if (params['filter']) {
18
- const filterSplit = params['filter'].split(',');
19
- for (const filterField of filterSplit) {
20
- const filterFieldSplit = filterField.split(':');
21
- const field = filterFieldSplit[0];
22
- const operator = filterFieldSplit.length > 1 ? filterFieldSplit[1] : 'eq';
23
- // prepare value
24
- let value = filterFieldSplit.length > 2 ? filterFieldSplit.slice(2).join(':') : '';
25
- const valueTo = undefined;
26
- if (value.startsWith("'")) {
27
- value = value.substring(1, value.length - 1);
28
- }
29
- if (value.startsWith('[') && value.endsWith(']')) {
30
- value = value
31
- .substring(1, value.length - 1)
32
- .split(',')
33
- .map((v) => (v.startsWith("'") ? v.substring(1, v.length - 1) : v));
34
- }
35
- const filterDescriptor = filterDescriptors.find(f => f.property === field);
36
- const matchMode = MediusRestUtil.getMapping(operator, filterDescriptor?.filterType, 1);
37
- if (matchMode && filterDescriptor) {
38
- const fieldFilterProperty = filterDescriptor.filterProperty ?? filterDescriptor.property;
39
- mediusParamsBuilder.withFilter(fieldFilterProperty, value, valueTo, MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(matchMode[0]));
40
- }
41
- }
42
- }
43
- return mediusParamsBuilder.build();
44
- }
45
- static fromPrimeLazyLoadEventToAngularQueryParams(event, defaultItemsPerPage = 10, defaultOffset = 0) {
46
- const params = {
47
- first: null,
48
- rows: null,
49
- sort: null,
50
- filter: null
51
- };
52
- if (event.first && event.first !== defaultOffset && event.first > 0) {
53
- params['first'] = event.first;
54
- }
55
- if (event.rows && event.rows !== defaultItemsPerPage && event.rows > 0) {
56
- params['rows'] = event.rows;
57
- }
58
- if (event.multiSortMeta?.length ?? 0 > 0) {
59
- params['sort'] = event.multiSortMeta?.map(s => `${s.field}${s.order === 1 ? '' : ':desc'}`).join(',');
60
- }
61
- if (event.filters) {
62
- const filters = [];
63
- for (const field in event.filters) {
64
- const primeOperator = event.filters[field].matchMode;
65
- let value = event.filters[field].value;
66
- const operatorMapping = primeOperator ? MediusRestUtil.getMapping(primeOperator, undefined, 0) : undefined;
67
- if (operatorMapping && typeof value !== 'undefined' && value !== null) {
68
- let doAddFilter = false;
69
- if (typeof value === 'string' && value.length > 0) {
70
- value = `'${value}'`;
71
- doAddFilter = true;
72
- }
73
- else if (typeof value === 'number') {
74
- doAddFilter = true;
75
- }
76
- else if (Array.isArray(value)) {
77
- value = `[${value.map(v => `'${v}'`).join(',')}]`;
78
- doAddFilter = true;
79
- }
80
- else if (value instanceof Date) {
81
- value = `${value.toISOString()}`;
82
- doAddFilter = true;
83
- }
84
- if (doAddFilter) {
85
- filters.push(`${field}:${operatorMapping[1]}:${value}`);
86
- }
87
- }
88
- }
89
- if (filters.length > 0) {
90
- params['filter'] = filters.join(',');
91
- }
92
- }
93
- return params;
94
- }
95
- static fromPrimeLazyLoadEventToMediusQueryParams(event) {
96
- const queryParamBuilder = MediusQueryParamBuilder.create(event.rows, event.first);
97
- // apply sorting
98
- if (event.multiSortMeta) {
99
- event.multiSortMeta.forEach(msm => queryParamBuilder.withSort(msm.field, msm.order === 1));
100
- }
101
- // apply filtering
102
- if (event.filters) {
103
- for (const key of Object.keys(event.filters)) {
104
- const filterEvent = event.filters[key];
105
- if (Array.isArray(filterEvent)) {
106
- filterEvent.filter(e => e.value).forEach(e => MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
107
- }
108
- else if (typeof filterEvent === 'object') {
109
- if (filterEvent.value) {
110
- MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
111
- }
112
- }
113
- }
114
- }
115
- return queryParamBuilder.build();
116
- }
117
- static addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
118
- const matchType = MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'equals');
119
- queryParamBuilder.withFilter(property, filterMetadata.value, undefined, matchType);
120
- }
121
- static getMediusFilterMatchTypeFromPrimeMatchMode(matchMode, dataType) {
122
- return MediusRestUtil.getMapping(matchMode, dataType)?.[2] ?? MediusFilterMatchType.Equals;
123
- }
124
- static getMapping(matchMode, dataType, idx = 0) {
125
- const mappings = MediusRestUtil.matchModeMapping.filter(m => m[idx] === matchMode && (!dataType || !m[3] || dataType === m[3]));
126
- if (mappings.length === 0) {
127
- return null;
128
- }
129
- else if (mappings.length === 1) {
130
- return mappings[0];
131
- }
132
- else {
133
- return mappings.sort((m1, m2) => (m2[3] ?? -1) - (m1[3] ?? -1))[0];
134
- }
135
- }
136
- }
137
- // first value is from primeNG, second is for use in query params
138
- MediusRestUtil.matchModeMapping = [
139
- [FilterMatchMode.CONTAINS, 'c', MediusFilterMatchType.Contains, null],
140
- [FilterMatchMode.ENDS_WITH, 'ew', MediusFilterMatchType.EndsWith, null],
141
- [FilterMatchMode.EQUALS, 'eq', MediusFilterMatchType.Equals, null],
142
- [FilterMatchMode.GREATER_THAN, 'gt', MediusFilterMatchType.GreaterThan, null],
143
- [FilterMatchMode.LESS_THAN, 'lt', MediusFilterMatchType.SmallerThan, null],
144
- [FilterMatchMode.STARTS_WITH, 'sw', MediusFilterMatchType.StartsWith, null],
145
- [FilterMatchMode.IN, 'in', MediusFilterMatchType.In, null],
146
- [FilterMatchMode.NOT_EQUALS, 'neq', MediusFilterMatchType.NotEquals, null],
147
- [FilterMatchMode.DATE_IS, 'eq', MediusFilterMatchType.Equals, FilterTypeEnum.Date],
148
- [FilterMatchMode.DATE_BEFORE, 'lt', MediusFilterMatchType.SmallerThan, FilterTypeEnum.Date],
149
- [FilterMatchMode.DATE_AFTER, 'gt', MediusFilterMatchType.GreaterThan, FilterTypeEnum.Date],
150
- [FilterMatchMode.DATE_IS_NOT, 'neq', MediusFilterMatchType.NotEquals, FilterTypeEnum.Date]
151
- ];
1
+ import { FilterMatchMode } from 'primeng/api';
2
+ import { FilterTypeEnum } from '../../descriptors/types';
3
+ import { MediusFilterMatchType, MediusQueryParamBuilder } from '../models';
4
+ export class MediusRestUtil {
5
+ static fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
6
+ const offset = params['first'] ? parseInt(params['first']) : defaultOffset;
7
+ const itemsPerPage = params['rows'] ? parseInt(params['rows']) : defaultItemsPerPage;
8
+ const mediusParamsBuilder = MediusQueryParamBuilder.create(itemsPerPage, offset);
9
+ if (params['sort']) {
10
+ for (const sort of params['sort'].split(',')) {
11
+ const qpSortSplit = sort.split(':');
12
+ const field = qpSortSplit[0];
13
+ const asc = qpSortSplit.length > 1 ? qpSortSplit[1] === 'asc' : true;
14
+ mediusParamsBuilder.withSort(field, asc);
15
+ }
16
+ }
17
+ if (params['filter']) {
18
+ const filterSplit = params['filter'].split(',');
19
+ for (const filterField of filterSplit) {
20
+ const filterFieldSplit = filterField.split(':');
21
+ const field = filterFieldSplit[0];
22
+ const operator = filterFieldSplit.length > 1 ? filterFieldSplit[1] : 'eq';
23
+ // prepare value
24
+ let value = filterFieldSplit.length > 2 ? filterFieldSplit.slice(2).join(':') : '';
25
+ const valueTo = undefined;
26
+ if (value.startsWith("'")) {
27
+ value = value.substring(1, value.length - 1);
28
+ }
29
+ if (value.startsWith('[') && value.endsWith(']')) {
30
+ value = value
31
+ .substring(1, value.length - 1)
32
+ .split(',')
33
+ .map((v) => (v.startsWith("'") ? v.substring(1, v.length - 1) : v));
34
+ }
35
+ const filterDescriptor = filterDescriptors.find(f => f.property === field);
36
+ const matchMode = MediusRestUtil.getMapping(operator, filterDescriptor?.filterType, 1);
37
+ if (matchMode && filterDescriptor) {
38
+ const fieldFilterProperty = filterDescriptor.filterProperty ?? filterDescriptor.property;
39
+ mediusParamsBuilder.withFilter(fieldFilterProperty, value, valueTo, MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(matchMode[0]));
40
+ }
41
+ }
42
+ }
43
+ return mediusParamsBuilder.build();
44
+ }
45
+ static fromPrimeLazyLoadEventToAngularQueryParams(event, defaultItemsPerPage = 10, defaultOffset = 0) {
46
+ const params = {
47
+ first: null,
48
+ rows: null,
49
+ sort: null,
50
+ filter: null
51
+ };
52
+ if (event.first && event.first !== defaultOffset && event.first > 0) {
53
+ params['first'] = event.first;
54
+ }
55
+ if (event.rows && event.rows !== defaultItemsPerPage && event.rows > 0) {
56
+ params['rows'] = event.rows;
57
+ }
58
+ if (event.multiSortMeta?.length ?? 0 > 0) {
59
+ params['sort'] = event.multiSortMeta?.map(s => `${s.field}${s.order === 1 ? '' : ':desc'}`).join(',');
60
+ }
61
+ if (event.filters) {
62
+ const filters = [];
63
+ for (const field in event.filters) {
64
+ const primeOperator = event.filters[field].matchMode;
65
+ let value = event.filters[field].value;
66
+ const operatorMapping = primeOperator ? MediusRestUtil.getMapping(primeOperator, undefined, 0) : undefined;
67
+ if (operatorMapping && typeof value !== 'undefined' && value !== null) {
68
+ let doAddFilter = false;
69
+ if (typeof value === 'string' && value.length > 0) {
70
+ value = `'${value}'`;
71
+ doAddFilter = true;
72
+ }
73
+ else if (typeof value === 'number') {
74
+ doAddFilter = true;
75
+ }
76
+ else if (Array.isArray(value)) {
77
+ value = `[${value.map(v => `'${v}'`).join(',')}]`;
78
+ doAddFilter = true;
79
+ }
80
+ else if (value instanceof Date) {
81
+ value = `${value.toISOString()}`;
82
+ doAddFilter = true;
83
+ }
84
+ if (doAddFilter) {
85
+ filters.push(`${field}:${operatorMapping[1]}:${value}`);
86
+ }
87
+ }
88
+ }
89
+ if (filters.length > 0) {
90
+ params['filter'] = filters.join(',');
91
+ }
92
+ }
93
+ return params;
94
+ }
95
+ static fromPrimeLazyLoadEventToMediusQueryParams(event) {
96
+ const queryParamBuilder = MediusQueryParamBuilder.create(event.rows, event.first);
97
+ // apply sorting
98
+ if (event.multiSortMeta) {
99
+ event.multiSortMeta.forEach(msm => queryParamBuilder.withSort(msm.field, msm.order === 1));
100
+ }
101
+ // apply filtering
102
+ if (event.filters) {
103
+ for (const key of Object.keys(event.filters)) {
104
+ const filterEvent = event.filters[key];
105
+ if (Array.isArray(filterEvent)) {
106
+ filterEvent.filter(e => e.value).forEach(e => MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
107
+ }
108
+ else if (typeof filterEvent === 'object') {
109
+ if (filterEvent.value) {
110
+ MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ return queryParamBuilder.build();
116
+ }
117
+ static addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
118
+ const matchType = MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'equals');
119
+ queryParamBuilder.withFilter(property, filterMetadata.value, undefined, matchType);
120
+ }
121
+ static getMediusFilterMatchTypeFromPrimeMatchMode(matchMode, dataType) {
122
+ return MediusRestUtil.getMapping(matchMode, dataType)?.[2] ?? MediusFilterMatchType.Equals;
123
+ }
124
+ static getMapping(matchMode, dataType, idx = 0) {
125
+ const mappings = MediusRestUtil.matchModeMapping.filter(m => m[idx] === matchMode && (!dataType || !m[3] || dataType === m[3]));
126
+ if (mappings.length === 0) {
127
+ return null;
128
+ }
129
+ else if (mappings.length === 1) {
130
+ return mappings[0];
131
+ }
132
+ else {
133
+ return mappings.sort((m1, m2) => (m2[3] ?? -1) - (m1[3] ?? -1))[0];
134
+ }
135
+ }
136
+ }
137
+ // first value is from primeNG, second is for use in query params
138
+ MediusRestUtil.matchModeMapping = [
139
+ [FilterMatchMode.CONTAINS, 'c', MediusFilterMatchType.Contains, null],
140
+ [FilterMatchMode.ENDS_WITH, 'ew', MediusFilterMatchType.EndsWith, null],
141
+ [FilterMatchMode.EQUALS, 'eq', MediusFilterMatchType.Equals, null],
142
+ [FilterMatchMode.GREATER_THAN, 'gt', MediusFilterMatchType.GreaterThan, null],
143
+ [FilterMatchMode.LESS_THAN, 'lt', MediusFilterMatchType.SmallerThan, null],
144
+ [FilterMatchMode.STARTS_WITH, 'sw', MediusFilterMatchType.StartsWith, null],
145
+ [FilterMatchMode.IN, 'in', MediusFilterMatchType.In, null],
146
+ [FilterMatchMode.NOT_EQUALS, 'neq', MediusFilterMatchType.NotEquals, null],
147
+ [FilterMatchMode.DATE_IS, 'eq', MediusFilterMatchType.Equals, FilterTypeEnum.Date],
148
+ [FilterMatchMode.DATE_BEFORE, 'lt', MediusFilterMatchType.SmallerThan, FilterTypeEnum.Date],
149
+ [FilterMatchMode.DATE_AFTER, 'gt', MediusFilterMatchType.GreaterThan, FilterTypeEnum.Date],
150
+ [FilterMatchMode.DATE_IS_NOT, 'neq', MediusFilterMatchType.NotEquals, FilterTypeEnum.Date]
151
+ ];
152
152
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGVBQWUsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFHM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBQyxxQkFBcUIsRUFBb0IsdUJBQXVCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFM0YsTUFBTSxPQUFPLGNBQWM7SUFpQmhCLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FDbkQsTUFBYyxFQUNkLGlCQUErQyxFQUMvQyxtQkFBbUIsR0FBRyxFQUFFLEVBQ3hCLGFBQWEsR0FBRyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDM0UsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1FBRXJGLE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLFdBQVcs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QUMsT0FBTyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNsRixDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDMUYsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztDQUM3RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7RmlsdGVyVHlwZUVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TWF0Y2hNb2RlTWFwVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTWVkaXVzUmVzdFV0aWwge1xuICAgIC8vIGZpcnN0IHZhbHVlIGlzIGZyb20gcHJpbWVORywgc2Vjb25kIGlzIGZvciB1c2UgaW4gcXVlcnkgcGFyYW1zXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbWF0Y2hNb2RlTWFwcGluZzogQXJyYXk8TWF0Y2hNb2RlTWFwVHlwZT4gPSBbXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlMsICdjJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEgsICdldycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTLCAnZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU4sICdndCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOLCAnbHQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW4sIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRILCAnc3cnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuSU4sICdpbicsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5JbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUywgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHMsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVMsICdlcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHMsIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQkVGT1JFLCAnbHQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW4sIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVIsICdndCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbiwgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9JU19OT1QsICduZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90RXF1YWxzLCBGaWx0ZXJUeXBlRW51bS5EYXRlXVxuICAgIF07XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKFxuICAgICAgICBwYXJhbXM6IFBhcmFtcyxcbiAgICAgICAgZmlsdGVyRGVzY3JpcHRvcnM6IEFycmF5PEZpbHRlckRlc2NyaXB0b3I8YW55Pj4sXG4gICAgICAgIGRlZmF1bHRJdGVtc1BlclBhZ2UgPSAxMCxcbiAgICAgICAgZGVmYXVsdE9mZnNldCA9IDBcbiAgICApOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zWydmaXJzdCddID8gcGFyc2VJbnQocGFyYW1zWydmaXJzdCddKSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhcmFtc1sncm93cyddID8gcGFyc2VJbnQocGFyYW1zWydyb3dzJ10pIDogZGVmYXVsdEl0ZW1zUGVyUGFnZTtcblxuICAgICAgICBjb25zdCBtZWRpdXNQYXJhbXNCdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGl0ZW1zUGVyUGFnZSwgb2Zmc2V0KTtcblxuICAgICAgICBpZiAocGFyYW1zWydzb3J0J10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydCBvZiBwYXJhbXNbJ3NvcnQnXS5zcGxpdCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXBTb3J0U3BsaXQgPSBzb3J0LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBxcFNvcnRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2MgPSBxcFNvcnRTcGxpdC5sZW5ndGggPiAxID8gcXBTb3J0U3BsaXRbMV0gPT09ICdhc2MnIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhTb3J0KGZpZWxkLCBhc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXNbJ2ZpbHRlciddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTcGxpdCA9IHBhcmFtc1snZmlsdGVyJ10uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgb2YgZmlsdGVyU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZFNwbGl0ID0gZmlsdGVyRmllbGQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlckZpZWxkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDEgPyBmaWx0ZXJGaWVsZFNwbGl0WzFdIDogJ2VxJztcblxuICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMiA/IGZpbHRlckZpZWxkU3BsaXQuc2xpY2UoMikuam9pbignOicpIDogJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUbzogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBzdHJpbmcpID0+ICh2LnN0YXJ0c1dpdGgoXCInXCIpID8gdi5zdWJzdHJpbmcoMSwgdi5sZW5ndGggLSAxKSA6IHYpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IGZpZWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSBNZWRpdXNSZXN0VXRpbC5nZXRNYXBwaW5nKG9wZXJhdG9yLCBmaWx0ZXJEZXNjcmlwdG9yPy5maWx0ZXJUeXBlLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hNb2RlICYmIGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRGaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlckRlc2NyaXB0b3IuZmlsdGVyUHJvcGVydHkgPz8gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgbWVkaXVzUGFyYW1zQnVpbGRlci53aXRoRmlsdGVyKGZpZWxkRmlsdGVyUHJvcGVydHksIHZhbHVlLCB2YWx1ZVRvLCBNZWRpdXNSZXN0VXRpbC5nZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlWzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lZGl1c1BhcmFtc0J1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCwgZGVmYXVsdEl0ZW1zUGVyUGFnZSA9IDEwLCBkZWZhdWx0T2Zmc2V0ID0gMCk6IFBhcmFtcyB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUGFyYW1zID0ge1xuICAgICAgICAgICAgZmlyc3Q6IG51bGwsXG4gICAgICAgICAgICByb3dzOiBudWxsLFxuICAgICAgICAgICAgc29ydDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChldmVudC5maXJzdCAmJiBldmVudC5maXJzdCAhPT0gZGVmYXVsdE9mZnNldCAmJiBldmVudC5maXJzdCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1snZmlyc3QnXSA9IGV2ZW50LmZpcnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5yb3dzICYmIGV2ZW50LnJvd3MgIT09IGRlZmF1bHRJdGVtc1BlclBhZ2UgJiYgZXZlbnQucm93cyA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1sncm93cyddID0gZXZlbnQucm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5tdWx0aVNvcnRNZXRhPy5sZW5ndGggPz8gMCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1snc29ydCddID0gZXZlbnQubXVsdGlTb3J0TWV0YT8ubWFwKHMgPT4gYCR7cy5maWVsZH0ke3Mub3JkZXIgPT09IDEgPyAnJyA6ICc6ZGVzYyd9YCkuam9pbignLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgaW4gZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1lT3BlcmF0b3IgPSBldmVudC5maWx0ZXJzW2ZpZWxkXS5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQuZmlsdGVyc1tmaWVsZF0udmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JNYXBwaW5nID0gcHJpbWVPcGVyYXRvciA/IE1lZGl1c1Jlc3RVdGlsLmdldE1hcHBpbmcocHJpbWVPcGVyYXRvciwgdW5kZWZpbmVkLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQWRkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBgWyR7dmFsdWUubWFwKHYgPT4gYCcke3Z9J2ApLmpvaW4oJywnKX1dYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUudG9JU09TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvQWRkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goYCR7ZmllbGR9OiR7b3BlcmF0b3JNYXBwaW5nWzFdfToke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1snZmlsdGVyJ10gPSBmaWx0ZXJzLmpvaW4oJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCk6IE1lZGl1c1F1ZXJ5UGFyYW0ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtQnVpbGRlciA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZShldmVudC5yb3dzLCBldmVudC5maXJzdCk7XG5cbiAgICAgICAgLy8gYXBwbHkgc29ydGluZ1xuICAgICAgICBpZiAoZXZlbnQubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YS5mb3JFYWNoKG1zbSA9PiBxdWVyeVBhcmFtQnVpbGRlci53aXRoU29ydChtc20uZmllbGQsIG1zbS5vcmRlciA9PT0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyaW5nXG4gICAgICAgIGlmIChldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckV2ZW50ID0gZXZlbnQuZmlsdGVyc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlckV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyRXZlbnQgYXMgRmlsdGVyTWV0YWRhdGFbXSkuZmlsdGVyKGUgPT4gZS52YWx1ZSkuZm9yRWFjaChlID0+IE1lZGl1c1Jlc3RVdGlsLmFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyLCBrZXksIGUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXJFdmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBNZWRpdXNSZXN0VXRpbC5hZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlciwga2V5LCBmaWx0ZXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyOiBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlciwgcHJvcGVydHk6IHN0cmluZywgZmlsdGVyTWV0YWRhdGE6IEZpbHRlck1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoVHlwZTogTWVkaXVzRmlsdGVyTWF0Y2hUeXBlID0gTWVkaXVzUmVzdFV0aWwuZ2V0TWVkaXVzRmlsdGVyTWF0Y2hUeXBlRnJvbVByaW1lTWF0Y2hNb2RlKGZpbHRlck1ldGFkYXRhLm1hdGNoTW9kZSA/PyAnZXF1YWxzJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIocHJvcGVydHksIGZpbHRlck1ldGFkYXRhLnZhbHVlLCB1bmRlZmluZWQsIG1hdGNoVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcsIGRhdGFUeXBlPzogRmlsdGVyVHlwZUVudW0pOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgICAgICByZXR1cm4gTWVkaXVzUmVzdFV0aWwuZ2V0TWFwcGluZyhtYXRjaE1vZGUsIGRhdGFUeXBlKT8uWzJdID8/IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXBwaW5nKG1hdGNoTW9kZTogc3RyaW5nLCBkYXRhVHlwZT86IEZpbHRlclR5cGVFbnVtLCBpZHggPSAwKTogTWF0Y2hNb2RlTWFwVHlwZSB8IG51bGwge1xuICAgICAgICBjb25zdCBtYXBwaW5ncyA9IE1lZGl1c1Jlc3RVdGlsLm1hdGNoTW9kZU1hcHBpbmcuZmlsdGVyKG0gPT4gbVtpZHhdID09PSBtYXRjaE1vZGUgJiYgKCFkYXRhVHlwZSB8fCAhbVszXSB8fCBkYXRhVHlwZSA9PT0gbVszXSkpO1xuICAgICAgICBpZiAobWFwcGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChtYXBwaW5ncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBwaW5nc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBwaW5ncy5zb3J0KChtMSwgbTIpID0+IChtMlszXSA/PyAtMSkgLSAobTFbM10gPz8gLTEpKVswXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==