@mediusinc/mng-commons 0.2.0 → 0.2.6

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 (235) hide show
  1. package/esm2020/lib/api/models/builders/query-param.builder.mjs +48 -48
  2. package/esm2020/lib/api/models/filter-match-type.model.mjs +26 -26
  3. package/esm2020/lib/api/models/filter-param.model.mjs +46 -46
  4. package/esm2020/lib/api/models/index.mjs +9 -9
  5. package/esm2020/lib/api/models/mappers.mjs +17 -17
  6. package/esm2020/lib/api/models/query-mode.model.mjs +19 -19
  7. package/esm2020/lib/api/models/query-param.model.mjs +69 -69
  8. package/esm2020/lib/api/models/query-result.model.mjs +45 -45
  9. package/esm2020/lib/api/models/serialization.model.mjs +2 -2
  10. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +72 -72
  11. package/esm2020/lib/api/services/index.mjs +2 -2
  12. package/esm2020/lib/api/utils/index.mjs +3 -3
  13. package/esm2020/lib/api/utils/medius-rest.util.mjs +122 -122
  14. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -226
  15. package/esm2020/lib/components/action/action.component.mjs +65 -65
  16. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -148
  17. package/esm2020/lib/components/action/index.mjs +4 -4
  18. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -2
  19. package/esm2020/lib/components/action/models/action-execution.model.mjs +58 -58
  20. package/esm2020/lib/components/action/models/index.mjs +3 -3
  21. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -144
  22. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +114 -114
  23. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +113 -113
  24. package/esm2020/lib/components/form/editor/form-editor.component.mjs +141 -141
  25. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +19 -19
  26. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +19 -19
  27. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -16
  28. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +30 -26
  29. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +108 -109
  30. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +122 -122
  31. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -17
  32. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -8
  33. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -17
  34. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -16
  35. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -3
  36. package/esm2020/lib/components/form/index.mjs +4 -4
  37. package/esm2020/lib/components/form/models/form-editor.event.mjs +7 -7
  38. package/esm2020/lib/components/form/models/index.mjs +2 -2
  39. package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -17
  40. package/esm2020/lib/components/layout/footer.component.mjs +17 -17
  41. package/esm2020/lib/components/layout/index.mjs +7 -7
  42. package/esm2020/lib/components/layout/main-layout.component.mjs +54 -54
  43. package/esm2020/lib/components/layout/menu-item.component.mjs +173 -173
  44. package/esm2020/lib/components/layout/menu.component.mjs +20 -20
  45. package/esm2020/lib/components/layout/services/index.mjs +2 -2
  46. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -190
  47. package/esm2020/lib/components/layout/topbar.component.mjs +59 -59
  48. package/esm2020/lib/components/tableview/index.mjs +7 -6
  49. package/esm2020/lib/components/tableview/models/index.mjs +2 -2
  50. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -16
  51. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +24 -24
  52. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +33 -0
  53. package/esm2020/lib/components/tableview/services/index.mjs +2 -2
  54. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +16 -17
  55. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +85 -74
  56. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -25
  57. package/esm2020/lib/components/tableview/table/table.component.mjs +307 -307
  58. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -82
  59. package/esm2020/lib/config/formly.config.mjs +136 -136
  60. package/esm2020/lib/config/index.mjs +2 -2
  61. package/esm2020/lib/config/models/index.mjs +2 -2
  62. package/esm2020/lib/config/models/mng-config.model.mjs +2 -2
  63. package/esm2020/lib/data-providers/base.data-provider.mjs +24 -24
  64. package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -37
  65. package/esm2020/lib/data-providers/index.mjs +6 -6
  66. package/esm2020/lib/data-providers/lookup.data-provider.mjs +16 -16
  67. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -2
  68. package/esm2020/lib/data-providers/tableview.data-provider.mjs +17 -17
  69. package/esm2020/lib/descriptors/action.descriptor.mjs +332 -332
  70. package/esm2020/lib/descriptors/editor.descriptor.mjs +670 -670
  71. package/esm2020/lib/descriptors/field.validator.mjs +21 -21
  72. package/esm2020/lib/descriptors/index.mjs +8 -8
  73. package/esm2020/lib/descriptors/lookup.descriptor.mjs +2 -2
  74. package/esm2020/lib/descriptors/model.descriptor.mjs +34 -34
  75. package/esm2020/lib/descriptors/table.descriptor.mjs +427 -401
  76. package/esm2020/lib/descriptors/tableview.descriptor.mjs +131 -131
  77. package/esm2020/lib/directives/component.directive.mjs +23 -23
  78. package/esm2020/lib/directives/index.mjs +3 -3
  79. package/esm2020/lib/directives/template.directive.mjs +29 -29
  80. package/esm2020/lib/mng-commons.module.mjs +412 -410
  81. package/esm2020/lib/models/index.mjs +2 -3
  82. package/esm2020/lib/models/user.model.mjs +2 -2
  83. package/esm2020/lib/pipes/boolean.pipe.mjs +22 -22
  84. package/esm2020/lib/pipes/index.mjs +3 -3
  85. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -36
  86. package/esm2020/lib/router/index.mjs +2 -0
  87. package/esm2020/lib/router/models/index.mjs +2 -0
  88. package/esm2020/lib/router/models/router.model.mjs +2 -0
  89. package/esm2020/lib/router/route-builder.mjs +288 -0
  90. package/esm2020/lib/services/action.service.mjs +269 -269
  91. package/esm2020/lib/services/commons.service.mjs +354 -353
  92. package/esm2020/lib/services/configuration.service.mjs +78 -78
  93. package/esm2020/lib/services/index.mjs +5 -5
  94. package/esm2020/lib/services/navigation.service.mjs +48 -48
  95. package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -4
  96. package/esm2020/lib/services/providers/config-service.provider.mjs +20 -20
  97. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -31
  98. package/esm2020/lib/services/providers/index.mjs +4 -4
  99. package/esm2020/lib/services/tokens/browser-storage.token.mjs +6 -6
  100. package/esm2020/lib/services/tokens/index.mjs +3 -3
  101. package/esm2020/lib/services/tokens/module-config.token.mjs +3 -3
  102. package/esm2020/lib/types/index.mjs +3 -3
  103. package/esm2020/lib/types/type.decorator.mjs +7 -7
  104. package/esm2020/lib/types/type.model.mjs +2 -2
  105. package/esm2020/lib/utils/editor-formly.util.mjs +176 -176
  106. package/esm2020/lib/utils/i18n.util.mjs +125 -125
  107. package/esm2020/lib/utils/index.mjs +6 -6
  108. package/esm2020/lib/utils/model.util.mjs +57 -57
  109. package/esm2020/lib/utils/route.util.mjs +24 -0
  110. package/esm2020/lib/utils/toast.util.mjs +39 -39
  111. package/esm2020/lib/utils/type.util.mjs +39 -39
  112. package/esm2020/mediusinc-mng-commons.mjs +5 -5
  113. package/esm2020/public-api.mjs +37 -36
  114. package/fesm2015/mediusinc-mng-commons.mjs +6407 -6024
  115. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  116. package/fesm2020/mediusinc-mng-commons.mjs +6329 -5950
  117. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  118. package/lib/api/models/builders/query-param.builder.d.ts +11 -11
  119. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  120. package/lib/api/models/filter-param.model.d.ts +23 -23
  121. package/lib/api/models/index.d.ts +8 -8
  122. package/lib/api/models/mappers.d.ts +6 -6
  123. package/lib/api/models/query-mode.model.d.ts +16 -16
  124. package/lib/api/models/query-param.model.d.ts +31 -31
  125. package/lib/api/models/query-result.model.d.ts +36 -36
  126. package/lib/api/models/serialization.model.d.ts +8 -8
  127. package/lib/api/services/crud-api.abstract.service.d.ts +23 -23
  128. package/lib/api/services/index.d.ts +1 -1
  129. package/lib/api/utils/index.d.ts +2 -2
  130. package/lib/api/utils/medius-rest.util.d.ts +12 -12
  131. package/lib/api/utils/object-serializer.util.d.ts +30 -30
  132. package/lib/components/action/action.component.d.ts +36 -36
  133. package/lib/components/action/dialog/action-dialog.component.d.ts +46 -46
  134. package/lib/components/action/index.d.ts +3 -3
  135. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  136. package/lib/components/action/models/action-execution.model.d.ts +53 -53
  137. package/lib/components/action/models/index.d.ts +2 -2
  138. package/lib/components/action/route/action-route.component.d.ts +32 -32
  139. package/lib/components/form/autocomplete/autocomplete.component.d.ts +36 -36
  140. package/lib/components/form/dropdown/dropdown.component.d.ts +34 -34
  141. package/lib/components/form/editor/form-editor.component.d.ts +39 -39
  142. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +11 -11
  143. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +11 -11
  144. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -6
  145. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -12
  146. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -17
  147. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -36
  148. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  149. package/lib/components/form/formly/fields/index.d.ts +7 -7
  150. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -8
  151. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -8
  152. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  153. package/lib/components/form/index.d.ts +3 -3
  154. package/lib/components/form/models/form-editor.event.d.ts +5 -5
  155. package/lib/components/form/models/index.d.ts +1 -1
  156. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  157. package/lib/components/layout/footer.component.d.ts +9 -9
  158. package/lib/components/layout/index.d.ts +6 -6
  159. package/lib/components/layout/main-layout.component.d.ts +21 -21
  160. package/lib/components/layout/menu-item.component.d.ts +29 -29
  161. package/lib/components/layout/menu.component.d.ts +10 -10
  162. package/lib/components/layout/services/index.d.ts +1 -1
  163. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  164. package/lib/components/layout/topbar.component.d.ts +25 -25
  165. package/lib/components/tableview/index.d.ts +6 -5
  166. package/lib/components/tableview/models/index.d.ts +1 -1
  167. package/lib/components/tableview/models/table.event.d.ts +17 -17
  168. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +15 -14
  169. package/lib/components/tableview/route/tableview-route.component.d.ts +15 -0
  170. package/lib/components/tableview/services/index.d.ts +1 -1
  171. package/lib/components/tableview/services/tableview.component.service.d.ts +13 -13
  172. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +27 -22
  173. package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -12
  174. package/lib/components/tableview/table/table.component.d.ts +79 -79
  175. package/lib/components/tableview/tableview.component.d.ts +35 -35
  176. package/lib/config/formly.config.d.ts +14 -14
  177. package/lib/config/index.d.ts +1 -1
  178. package/lib/config/models/index.d.ts +1 -1
  179. package/lib/config/models/mng-config.model.d.ts +34 -34
  180. package/lib/data-providers/base.data-provider.d.ts +17 -17
  181. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  182. package/lib/data-providers/index.d.ts +5 -5
  183. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  184. package/lib/data-providers/table.data-provider.d.ts +6 -6
  185. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  186. package/lib/descriptors/action.descriptor.d.ts +148 -148
  187. package/lib/descriptors/editor.descriptor.d.ts +255 -255
  188. package/lib/descriptors/field.validator.d.ts +18 -18
  189. package/lib/descriptors/index.d.ts +7 -7
  190. package/lib/descriptors/lookup.descriptor.d.ts +17 -17
  191. package/lib/descriptors/model.descriptor.d.ts +15 -15
  192. package/lib/descriptors/table.descriptor.d.ts +184 -164
  193. package/lib/descriptors/tableview.descriptor.d.ts +39 -39
  194. package/lib/directives/component.directive.d.ts +11 -11
  195. package/lib/directives/index.d.ts +2 -2
  196. package/lib/directives/template.directive.d.ts +13 -13
  197. package/lib/mng-commons.module.d.ts +80 -79
  198. package/lib/models/index.d.ts +1 -2
  199. package/lib/models/user.model.d.ts +8 -8
  200. package/lib/pipes/boolean.pipe.d.ts +7 -7
  201. package/lib/pipes/index.d.ts +2 -2
  202. package/lib/pipes/property-path.pipe.d.ts +7 -7
  203. package/lib/router/index.d.ts +1 -0
  204. package/lib/router/models/index.d.ts +1 -0
  205. package/lib/router/models/router.model.d.ts +22 -0
  206. package/lib/router/route-builder.d.ts +66 -0
  207. package/lib/services/action.service.d.ts +92 -92
  208. package/lib/services/commons.service.d.ts +72 -72
  209. package/lib/services/configuration.service.d.ts +35 -35
  210. package/lib/services/index.d.ts +4 -4
  211. package/lib/services/navigation.service.d.ts +14 -14
  212. package/lib/services/providers/commons-init.provider.d.ts +2 -2
  213. package/lib/services/providers/config-service.provider.d.ts +5 -5
  214. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  215. package/lib/services/providers/index.d.ts +3 -3
  216. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  217. package/lib/services/tokens/index.d.ts +2 -2
  218. package/lib/services/tokens/module-config.token.d.ts +3 -3
  219. package/lib/types/index.d.ts +2 -2
  220. package/lib/types/type.decorator.d.ts +2 -2
  221. package/lib/types/type.model.d.ts +10 -10
  222. package/lib/utils/editor-formly.util.d.ts +9 -9
  223. package/lib/utils/i18n.util.d.ts +18 -18
  224. package/lib/utils/index.d.ts +5 -5
  225. package/lib/utils/model.util.d.ts +7 -7
  226. package/lib/utils/route.util.d.ts +4 -0
  227. package/lib/utils/toast.util.d.ts +13 -13
  228. package/lib/utils/type.util.d.ts +15 -15
  229. package/mediusinc-mng-commons.d.ts +5 -5
  230. package/package.json +4 -4
  231. package/public-api.d.ts +26 -25
  232. package/scss/common/layout/_exception.scss +1 -1
  233. package/esm2020/lib/models/router.model.mjs +0 -2
  234. package/lib/models/router.model.d.ts +0 -14
  235. package/mediusinc-mng-commons-0.2.0.tgz +0 -0
@@ -1,122 +1,122 @@
1
- import { MediusFilterMatchType, MediusQueryParamBuilder } from '../models';
2
- export class MediusRestUtil {
3
- static fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
4
- const offset = params['first'] ? parseInt(params['first']) : defaultOffset;
5
- const itemsPerPage = params['rows'] ? parseInt(params['rows']) : defaultItemsPerPage;
6
- const mediusParamsBuilder = MediusQueryParamBuilder.create(itemsPerPage, offset);
7
- if (params['sort']) {
8
- for (const sort of params['sort'].split(',')) {
9
- const qpSortSplit = sort.split(':');
10
- const field = qpSortSplit[0];
11
- const asc = qpSortSplit.length > 1 ? qpSortSplit[1] === 'asc' : true;
12
- mediusParamsBuilder.withSort(field, asc);
13
- }
14
- }
15
- if (params['filter']) {
16
- const filterSplit = params['filter'].split(',');
17
- for (const filterField of filterSplit) {
18
- const filterFieldSplit = filterField.split(':');
19
- const field = filterFieldSplit[0];
20
- const operator = filterFieldSplit.length > 1 ? filterFieldSplit[1] : 'eq';
21
- // prepare value
22
- let value = filterFieldSplit.length > 2 ? filterFieldSplit[2] : '';
23
- let valueTo = undefined;
24
- if (value.startsWith('\'')) {
25
- value = value.substring(1, value.length - 1);
26
- }
27
- if (value.startsWith('[') && value.endsWith(']')) {
28
- value = value.substring(1, value.length - 1).split(',').map((v) => v.startsWith('\'') ? v.substring(1, v.length - 1) : v);
29
- }
30
- const operatorMapping = MediusRestUtil.matchModeMapping.find(mapping => mapping[1] === operator);
31
- const filterDescriptor = filterDescriptors.find(f => f.property === field);
32
- if (operatorMapping && filterDescriptor) {
33
- const fieldFilterProperty = filterDescriptor.filterProperty ?? filterDescriptor.property;
34
- mediusParamsBuilder.withFilter(fieldFilterProperty, value, valueTo, MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(operatorMapping[0]));
35
- }
36
- }
37
- }
38
- return mediusParamsBuilder.build();
39
- }
40
- static fromPrimeLazyLoadEventToAngularQueryParams(event, defaultItemsPerPage = 10, defaultOffset = 0) {
41
- const params = {
42
- first: null,
43
- rows: null,
44
- sort: null,
45
- filter: null
46
- };
47
- if (event.first && event.first !== defaultOffset && event.first > 0) {
48
- params['first'] = event.first;
49
- }
50
- if (event.rows && event.rows !== defaultItemsPerPage && event.rows > 0) {
51
- params['rows'] = event.rows;
52
- }
53
- if (event.multiSortMeta?.length ?? 0 > 0) {
54
- params['sort'] = event.multiSortMeta?.map(s => `${s.field}${s.order === 1 ? '' : ':desc'}`).join(',');
55
- }
56
- if (event.filters) {
57
- const filters = [];
58
- for (const field in event.filters) {
59
- const primeOperator = event.filters[field].matchMode;
60
- let value = event.filters[field].value;
61
- const operatorMapping = MediusRestUtil.matchModeMapping.find(mapping => mapping[0] === primeOperator);
62
- if (operatorMapping && typeof value !== 'undefined' && value !== null &&
63
- ((typeof value === 'string' && value.length > 0) || (Array.isArray(value) && value.length > 0))) {
64
- if (Array.isArray(value)) {
65
- value = `[${value.map(v => `'${v}'`).join(',')}]`;
66
- }
67
- else {
68
- value = `'${value}'`;
69
- }
70
- filters.push(`${field}:${operatorMapping[1]}:${value}`);
71
- }
72
- }
73
- if (filters.length > 0) {
74
- params['filter'] = filters.join(',');
75
- }
76
- }
77
- return params;
78
- }
79
- static fromPrimeLazyLoadEventToMediusQueryParams(event) {
80
- const queryParamBuilder = MediusQueryParamBuilder.create(event.rows, event.first);
81
- // apply sorting
82
- if (event.multiSortMeta) {
83
- event.multiSortMeta.forEach(msm => queryParamBuilder.withSort(msm.field, msm.order === 1));
84
- }
85
- // apply filtering
86
- if (event.filters) {
87
- for (const key of Object.keys(event.filters)) {
88
- const filterEvent = event.filters[key];
89
- if (Array.isArray(filterEvent)) {
90
- filterEvent.filter(e => e.value)
91
- .forEach(e => MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
92
- }
93
- else if (typeof filterEvent === 'object') {
94
- if (filterEvent.value) {
95
- MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
96
- }
97
- }
98
- }
99
- }
100
- return queryParamBuilder.build();
101
- }
102
- static addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
103
- const matchType = MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'contains');
104
- queryParamBuilder.withFilter(property, filterMetadata.value, undefined, matchType);
105
- }
106
- static getMediusFilterMatchTypeFromPrimeMatchMode(matchMode) {
107
- const mapping = MediusRestUtil.matchModeMapping.find(m => m[0] === matchMode);
108
- return mapping?.[2] ?? MediusFilterMatchType.Contains;
109
- }
110
- }
111
- // first value is from primeNG, second is for use in query params
112
- MediusRestUtil.matchModeMapping = [
113
- ['contains', 'c', MediusFilterMatchType.Contains],
114
- ['endsWith', 'ew', MediusFilterMatchType.EndsWith],
115
- ['equals', 'eq', MediusFilterMatchType.Equals],
116
- ['gte', 'gte', MediusFilterMatchType.GreaterThan],
117
- ['leq', 'leq', MediusFilterMatchType.SmallerThan],
118
- ['startsWith', 'sw', MediusFilterMatchType.StartsWith],
119
- ['in', 'in', MediusFilterMatchType.In],
120
- ['notEquals', 'neq', MediusFilterMatchType.NotEquals]
121
- ];
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUczRixNQUFNLE9BQU8sY0FBYztJQWNoQixNQUFNLENBQUMseUNBQXlDLENBQUMsTUFBYyxFQUFFLGlCQUErQyxFQUFFLG1CQUFtQixHQUFHLEVBQUUsRUFBRSxhQUFhLEdBQUUsQ0FBQztRQUMvSixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUVyRixNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FB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QUMzSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxNQUFNLENBQUMsMENBQTBDLENBQUMsU0FBaUI7UUFDdEUsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUM5RSxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUMxRCxDQUFDOztBQXZJRCxpRUFBaUU7QUFDMUMsK0JBQWdCLEdBQW1EO0lBQ3RGLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7SUFDakQsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUNsRCxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7SUFDakQsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztJQUNqRCxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsVUFBVSxDQUFDO0lBQ3RELENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztDQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7RmlsdGVyTWV0YWRhdGEsIExhenlMb2FkRXZlbnR9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBNZWRpdXNSZXN0VXRpbCB7XG5cbiAgICAvLyBmaXJzdCB2YWx1ZSBpcyBmcm9tIHByaW1lTkcsIHNlY29uZCBpcyBmb3IgdXNlIGluIHF1ZXJ5IHBhcmFtc1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgbWF0Y2hNb2RlTWFwcGluZzogQXJyYXk8W3N0cmluZywgc3RyaW5nLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGVdPiA9IFtcbiAgICAgICAgWydjb250YWlucycsICdjJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zXSxcbiAgICAgICAgWydlbmRzV2l0aCcsICdldycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aF0sXG4gICAgICAgIFsnZXF1YWxzJywgJ2VxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFsc10sXG4gICAgICAgIFsnZ3RlJywgJ2d0ZScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbl0sXG4gICAgICAgIFsnbGVxJywgJ2xlcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbl0sXG4gICAgICAgIFsnc3RhcnRzV2l0aCcsICdzdycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoXSxcbiAgICAgICAgWydpbicsICdpbicsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbl0sXG4gICAgICAgIFsnbm90RXF1YWxzJywgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHNdXG4gICAgXTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFuZ3VsYXJRdWVyeVBhcmFtc1RvTWVkaXVzUXVlcnlQYXJhbXMocGFyYW1zOiBQYXJhbXMsIGZpbHRlckRlc2NyaXB0b3JzOiBBcnJheTxGaWx0ZXJEZXNjcmlwdG9yPGFueT4+LCBkZWZhdWx0SXRlbXNQZXJQYWdlID0gMTAsIGRlZmF1bHRPZmZzZXQ9IDApOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zWydmaXJzdCddID8gcGFyc2VJbnQocGFyYW1zWydmaXJzdCddKSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhcmFtc1sncm93cyddID8gcGFyc2VJbnQocGFyYW1zWydyb3dzJ10pIDogZGVmYXVsdEl0ZW1zUGVyUGFnZTtcblxuICAgICAgICBjb25zdCBtZWRpdXNQYXJhbXNCdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGl0ZW1zUGVyUGFnZSwgb2Zmc2V0KTtcblxuICAgICAgICBpZiAocGFyYW1zWydzb3J0J10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydCBvZiBwYXJhbXNbJ3NvcnQnXS5zcGxpdCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXBTb3J0U3BsaXQgPSBzb3J0LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBxcFNvcnRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2MgPSBxcFNvcnRTcGxpdC5sZW5ndGggPiAxID8gcXBTb3J0U3BsaXRbMV0gPT09ICdhc2MnIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhTb3J0KGZpZWxkLCBhc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXNbJ2ZpbHRlciddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTcGxpdCA9IHBhcmFtc1snZmlsdGVyJ10uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgb2YgZmlsdGVyU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZFNwbGl0ID0gZmlsdGVyRmllbGQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlckZpZWxkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDEgPyBmaWx0ZXJGaWVsZFNwbGl0WzFdIDogJ2VxJztcblxuICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMiA/IGZpbHRlckZpZWxkU3BsaXRbMl0gOiAnJztcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUbzogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcXCcnKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpICA9PiB2LnN0YXJ0c1dpdGgoJ1xcJycpID8gdi5zdWJzdHJpbmcoMSwgdi5sZW5ndGggLSAxKSA6IHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yTWFwcGluZyA9IE1lZGl1c1Jlc3RVdGlsLm1hdGNoTW9kZU1hcHBpbmcuZmluZChtYXBwaW5nID0+IG1hcHBpbmdbMV0gPT09IG9wZXJhdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IGZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRGaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlckRlc2NyaXB0b3IuZmlsdGVyUHJvcGVydHkgPz8gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgbWVkaXVzUGFyYW1zQnVpbGRlci53aXRoRmlsdGVyKGZpZWxkRmlsdGVyUHJvcGVydHksIHZhbHVlLCB2YWx1ZVRvLCBNZWRpdXNSZXN0VXRpbC5nZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUob3BlcmF0b3JNYXBwaW5nWzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lZGl1c1BhcmFtc0J1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCwgZGVmYXVsdEl0ZW1zUGVyUGFnZSA9IDEwLCBkZWZhdWx0T2Zmc2V0PSAwKTogUGFyYW1zIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7XG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIHJvd3M6IG51bGwsXG4gICAgICAgICAgICBzb3J0OiBudWxsLFxuICAgICAgICAgICAgZmlsdGVyOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50LmZpcnN0ICYmIGV2ZW50LmZpcnN0ICE9PSBkZWZhdWx0T2Zmc2V0ICYmIGV2ZW50LmZpcnN0ID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydmaXJzdCddID0gZXZlbnQuZmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJvd3MgJiYgZXZlbnQucm93cyAhPT0gZGVmYXVsdEl0ZW1zUGVyUGFnZSAmJiBldmVudC5yb3dzID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydyb3dzJ10gPSBldmVudC5yb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGE/Lmxlbmd0aCA/PyAwID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydzb3J0J10gPSBldmVudC5tdWx0aVNvcnRNZXRhPy5tYXAocyA9PiBgJHtzLmZpZWxkfSR7cy5vcmRlciA9PT0gMSA/ICcnIDogJzpkZXNjJ31gKS5qb2luKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWVPcGVyYXRvciA9IGV2ZW50LmZpbHRlcnNbZmllbGRdLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBldmVudC5maWx0ZXJzW2ZpZWxkXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvck1hcHBpbmcgPSBNZWRpdXNSZXN0VXRpbC5tYXRjaE1vZGVNYXBwaW5nLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nWzBdID09PSBwcmltZU9wZXJhdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDApIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYFske3ZhbHVlLm1hcCh2ID0+IGAnJHt2fSdgKS5qb2luKCcsJyl9XWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChgJHtmaWVsZH06JHtvcGVyYXRvck1hcHBpbmdbMV19OiR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1snZmlsdGVyJ10gPSBmaWx0ZXJzLmpvaW4oJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCk6IE1lZGl1c1F1ZXJ5UGFyYW0ge1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGV2ZW50LnJvd3MsIGV2ZW50LmZpcnN0KTtcblxuICAgICAgICAvLyBhcHBseSBzb3J0aW5nXG4gICAgICAgIGlmIChldmVudC5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBldmVudC5tdWx0aVNvcnRNZXRhLmZvckVhY2gobXNtID0+IHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhTb3J0KG1zbS5maWVsZCwgbXNtLm9yZGVyID09PSAxKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBseSBmaWx0ZXJpbmdcbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV2ZW50LmZpbHRlcnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRXZlbnQgPSBldmVudC5maWx0ZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJFdmVudCBhcyBGaWx0ZXJNZXRhZGF0YVtdKS5maWx0ZXIoZSA9PiBlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZSA9PiBNZWRpdXNSZXN0VXRpbC5hZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlciwga2V5LCBlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyRXZlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJFdmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVzUmVzdFV0aWwuYWRkTWVkaXVzRmlsdGVyRnJvbVByaW1lRmlsdGVyTWV0YWRhdGEocXVlcnlQYXJhbUJ1aWxkZXIsIGtleSwgZmlsdGVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1CdWlsZGVyLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlcjogTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlck1ldGFkYXRhOiBGaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBtYXRjaFR5cGU6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSA9IE1lZGl1c1Jlc3RVdGlsLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShmaWx0ZXJNZXRhZGF0YS5tYXRjaE1vZGUgPz8gJ2NvbnRhaW5zJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIocHJvcGVydHksIGZpbHRlck1ldGFkYXRhLnZhbHVlLCB1bmRlZmluZWQsIG1hdGNoVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcpOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgICAgICBjb25zdCBtYXBwaW5nID0gTWVkaXVzUmVzdFV0aWwubWF0Y2hNb2RlTWFwcGluZy5maW5kKG0gPT4gbVswXSA9PT0gbWF0Y2hNb2RlKTtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmc/LlsyXSA/PyBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnM7XG4gICAgfVxufVxuIl19
1
+ import { MediusFilterMatchType, MediusQueryParamBuilder } from '../models';
2
+ export class MediusRestUtil {
3
+ static fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
4
+ const offset = params['first'] ? parseInt(params['first']) : defaultOffset;
5
+ const itemsPerPage = params['rows'] ? parseInt(params['rows']) : defaultItemsPerPage;
6
+ const mediusParamsBuilder = MediusQueryParamBuilder.create(itemsPerPage, offset);
7
+ if (params['sort']) {
8
+ for (const sort of params['sort'].split(',')) {
9
+ const qpSortSplit = sort.split(':');
10
+ const field = qpSortSplit[0];
11
+ const asc = qpSortSplit.length > 1 ? qpSortSplit[1] === 'asc' : true;
12
+ mediusParamsBuilder.withSort(field, asc);
13
+ }
14
+ }
15
+ if (params['filter']) {
16
+ const filterSplit = params['filter'].split(',');
17
+ for (const filterField of filterSplit) {
18
+ const filterFieldSplit = filterField.split(':');
19
+ const field = filterFieldSplit[0];
20
+ const operator = filterFieldSplit.length > 1 ? filterFieldSplit[1] : 'eq';
21
+ // prepare value
22
+ let value = filterFieldSplit.length > 2 ? filterFieldSplit[2] : '';
23
+ let valueTo = undefined;
24
+ if (value.startsWith('\'')) {
25
+ value = value.substring(1, value.length - 1);
26
+ }
27
+ if (value.startsWith('[') && value.endsWith(']')) {
28
+ value = value.substring(1, value.length - 1).split(',').map((v) => v.startsWith('\'') ? v.substring(1, v.length - 1) : v);
29
+ }
30
+ const operatorMapping = MediusRestUtil.matchModeMapping.find(mapping => mapping[1] === operator);
31
+ const filterDescriptor = filterDescriptors.find(f => f.property === field);
32
+ if (operatorMapping && filterDescriptor) {
33
+ const fieldFilterProperty = filterDescriptor.filterProperty ?? filterDescriptor.property;
34
+ mediusParamsBuilder.withFilter(fieldFilterProperty, value, valueTo, MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(operatorMapping[0]));
35
+ }
36
+ }
37
+ }
38
+ return mediusParamsBuilder.build();
39
+ }
40
+ static fromPrimeLazyLoadEventToAngularQueryParams(event, defaultItemsPerPage = 10, defaultOffset = 0) {
41
+ const params = {
42
+ first: null,
43
+ rows: null,
44
+ sort: null,
45
+ filter: null
46
+ };
47
+ if (event.first && event.first !== defaultOffset && event.first > 0) {
48
+ params['first'] = event.first;
49
+ }
50
+ if (event.rows && event.rows !== defaultItemsPerPage && event.rows > 0) {
51
+ params['rows'] = event.rows;
52
+ }
53
+ if (event.multiSortMeta?.length ?? 0 > 0) {
54
+ params['sort'] = event.multiSortMeta?.map(s => `${s.field}${s.order === 1 ? '' : ':desc'}`).join(',');
55
+ }
56
+ if (event.filters) {
57
+ const filters = [];
58
+ for (const field in event.filters) {
59
+ const primeOperator = event.filters[field].matchMode;
60
+ let value = event.filters[field].value;
61
+ const operatorMapping = MediusRestUtil.matchModeMapping.find(mapping => mapping[0] === primeOperator);
62
+ if (operatorMapping && typeof value !== 'undefined' && value !== null &&
63
+ ((typeof value === 'string' && value.length > 0) || (Array.isArray(value) && value.length > 0))) {
64
+ if (Array.isArray(value)) {
65
+ value = `[${value.map(v => `'${v}'`).join(',')}]`;
66
+ }
67
+ else {
68
+ value = `'${value}'`;
69
+ }
70
+ filters.push(`${field}:${operatorMapping[1]}:${value}`);
71
+ }
72
+ }
73
+ if (filters.length > 0) {
74
+ params['filter'] = filters.join(',');
75
+ }
76
+ }
77
+ return params;
78
+ }
79
+ static fromPrimeLazyLoadEventToMediusQueryParams(event) {
80
+ const queryParamBuilder = MediusQueryParamBuilder.create(event.rows, event.first);
81
+ // apply sorting
82
+ if (event.multiSortMeta) {
83
+ event.multiSortMeta.forEach(msm => queryParamBuilder.withSort(msm.field, msm.order === 1));
84
+ }
85
+ // apply filtering
86
+ if (event.filters) {
87
+ for (const key of Object.keys(event.filters)) {
88
+ const filterEvent = event.filters[key];
89
+ if (Array.isArray(filterEvent)) {
90
+ filterEvent.filter(e => e.value)
91
+ .forEach(e => MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
92
+ }
93
+ else if (typeof filterEvent === 'object') {
94
+ if (filterEvent.value) {
95
+ MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ return queryParamBuilder.build();
101
+ }
102
+ static addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
103
+ const matchType = MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'contains');
104
+ queryParamBuilder.withFilter(property, filterMetadata.value, undefined, matchType);
105
+ }
106
+ static getMediusFilterMatchTypeFromPrimeMatchMode(matchMode) {
107
+ const mapping = MediusRestUtil.matchModeMapping.find(m => m[0] === matchMode);
108
+ return mapping?.[2] ?? MediusFilterMatchType.Contains;
109
+ }
110
+ }
111
+ // first value is from primeNG, second is for use in query params
112
+ MediusRestUtil.matchModeMapping = [
113
+ ['contains', 'c', MediusFilterMatchType.Contains],
114
+ ['endsWith', 'ew', MediusFilterMatchType.EndsWith],
115
+ ['equals', 'eq', MediusFilterMatchType.Equals],
116
+ ['gte', 'gte', MediusFilterMatchType.GreaterThan],
117
+ ['leq', 'leq', MediusFilterMatchType.SmallerThan],
118
+ ['startsWith', 'sw', MediusFilterMatchType.StartsWith],
119
+ ['in', 'in', MediusFilterMatchType.In],
120
+ ['notEquals', 'neq', MediusFilterMatchType.NotEquals]
121
+ ];
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUczRixNQUFNLE9BQU8sY0FBYztJQWNoQixNQUFNLENBQUMseUNBQXlDLENBQUMsTUFBYyxFQUFFLGlCQUErQyxFQUFFLG1CQUFtQixHQUFHLEVBQUUsRUFBRSxhQUFhLEdBQUUsQ0FBQztRQUMvSixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUVyRixNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENB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QUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxNQUFNLENBQUMsMENBQTBDLENBQUMsU0FBaUI7UUFDdEUsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUM5RSxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUMxRCxDQUFDOztBQXZJRCxpRUFBaUU7QUFDMUMsK0JBQWdCLEdBQW1EO0lBQ3RGLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7SUFDakQsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUNsRCxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7SUFDakQsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztJQUNqRCxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsVUFBVSxDQUFDO0lBQ3RELENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztDQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7RmlsdGVyTWV0YWRhdGEsIExhenlMb2FkRXZlbnR9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBNZWRpdXNSZXN0VXRpbCB7XG5cbiAgICAvLyBmaXJzdCB2YWx1ZSBpcyBmcm9tIHByaW1lTkcsIHNlY29uZCBpcyBmb3IgdXNlIGluIHF1ZXJ5IHBhcmFtc1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgbWF0Y2hNb2RlTWFwcGluZzogQXJyYXk8W3N0cmluZywgc3RyaW5nLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGVdPiA9IFtcbiAgICAgICAgWydjb250YWlucycsICdjJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zXSxcbiAgICAgICAgWydlbmRzV2l0aCcsICdldycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aF0sXG4gICAgICAgIFsnZXF1YWxzJywgJ2VxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFsc10sXG4gICAgICAgIFsnZ3RlJywgJ2d0ZScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbl0sXG4gICAgICAgIFsnbGVxJywgJ2xlcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbl0sXG4gICAgICAgIFsnc3RhcnRzV2l0aCcsICdzdycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoXSxcbiAgICAgICAgWydpbicsICdpbicsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbl0sXG4gICAgICAgIFsnbm90RXF1YWxzJywgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHNdXG4gICAgXTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFuZ3VsYXJRdWVyeVBhcmFtc1RvTWVkaXVzUXVlcnlQYXJhbXMocGFyYW1zOiBQYXJhbXMsIGZpbHRlckRlc2NyaXB0b3JzOiBBcnJheTxGaWx0ZXJEZXNjcmlwdG9yPGFueT4+LCBkZWZhdWx0SXRlbXNQZXJQYWdlID0gMTAsIGRlZmF1bHRPZmZzZXQ9IDApOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zWydmaXJzdCddID8gcGFyc2VJbnQocGFyYW1zWydmaXJzdCddKSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhcmFtc1sncm93cyddID8gcGFyc2VJbnQocGFyYW1zWydyb3dzJ10pIDogZGVmYXVsdEl0ZW1zUGVyUGFnZTtcblxuICAgICAgICBjb25zdCBtZWRpdXNQYXJhbXNCdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGl0ZW1zUGVyUGFnZSwgb2Zmc2V0KTtcblxuICAgICAgICBpZiAocGFyYW1zWydzb3J0J10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydCBvZiBwYXJhbXNbJ3NvcnQnXS5zcGxpdCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXBTb3J0U3BsaXQgPSBzb3J0LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBxcFNvcnRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2MgPSBxcFNvcnRTcGxpdC5sZW5ndGggPiAxID8gcXBTb3J0U3BsaXRbMV0gPT09ICdhc2MnIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhTb3J0KGZpZWxkLCBhc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXNbJ2ZpbHRlciddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTcGxpdCA9IHBhcmFtc1snZmlsdGVyJ10uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgb2YgZmlsdGVyU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZFNwbGl0ID0gZmlsdGVyRmllbGQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlckZpZWxkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDEgPyBmaWx0ZXJGaWVsZFNwbGl0WzFdIDogJ2VxJztcblxuICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMiA/IGZpbHRlckZpZWxkU3BsaXRbMl0gOiAnJztcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUbzogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcXCcnKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpICA9PiB2LnN0YXJ0c1dpdGgoJ1xcJycpID8gdi5zdWJzdHJpbmcoMSwgdi5sZW5ndGggLSAxKSA6IHYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yTWFwcGluZyA9IE1lZGl1c1Jlc3RVdGlsLm1hdGNoTW9kZU1hcHBpbmcuZmluZChtYXBwaW5nID0+IG1hcHBpbmdbMV0gPT09IG9wZXJhdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IGZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRGaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlckRlc2NyaXB0b3IuZmlsdGVyUHJvcGVydHkgPz8gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgbWVkaXVzUGFyYW1zQnVpbGRlci53aXRoRmlsdGVyKGZpZWxkRmlsdGVyUHJvcGVydHksIHZhbHVlLCB2YWx1ZVRvLCBNZWRpdXNSZXN0VXRpbC5nZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUob3BlcmF0b3JNYXBwaW5nWzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lZGl1c1BhcmFtc0J1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCwgZGVmYXVsdEl0ZW1zUGVyUGFnZSA9IDEwLCBkZWZhdWx0T2Zmc2V0PSAwKTogUGFyYW1zIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7XG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIHJvd3M6IG51bGwsXG4gICAgICAgICAgICBzb3J0OiBudWxsLFxuICAgICAgICAgICAgZmlsdGVyOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50LmZpcnN0ICYmIGV2ZW50LmZpcnN0ICE9PSBkZWZhdWx0T2Zmc2V0ICYmIGV2ZW50LmZpcnN0ID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydmaXJzdCddID0gZXZlbnQuZmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJvd3MgJiYgZXZlbnQucm93cyAhPT0gZGVmYXVsdEl0ZW1zUGVyUGFnZSAmJiBldmVudC5yb3dzID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydyb3dzJ10gPSBldmVudC5yb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGE/Lmxlbmd0aCA/PyAwID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydzb3J0J10gPSBldmVudC5tdWx0aVNvcnRNZXRhPy5tYXAocyA9PiBgJHtzLmZpZWxkfSR7cy5vcmRlciA9PT0gMSA/ICcnIDogJzpkZXNjJ31gKS5qb2luKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWVPcGVyYXRvciA9IGV2ZW50LmZpbHRlcnNbZmllbGRdLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBldmVudC5maWx0ZXJzW2ZpZWxkXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvck1hcHBpbmcgPSBNZWRpdXNSZXN0VXRpbC5tYXRjaE1vZGVNYXBwaW5nLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nWzBdID09PSBwcmltZU9wZXJhdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDApIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYFske3ZhbHVlLm1hcCh2ID0+IGAnJHt2fSdgKS5qb2luKCcsJyl9XWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChgJHtmaWVsZH06JHtvcGVyYXRvck1hcHBpbmdbMV19OiR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1snZmlsdGVyJ10gPSBmaWx0ZXJzLmpvaW4oJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCk6IE1lZGl1c1F1ZXJ5UGFyYW0ge1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGV2ZW50LnJvd3MsIGV2ZW50LmZpcnN0KTtcblxuICAgICAgICAvLyBhcHBseSBzb3J0aW5nXG4gICAgICAgIGlmIChldmVudC5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBldmVudC5tdWx0aVNvcnRNZXRhLmZvckVhY2gobXNtID0+IHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhTb3J0KG1zbS5maWVsZCwgbXNtLm9yZGVyID09PSAxKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBseSBmaWx0ZXJpbmdcbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV2ZW50LmZpbHRlcnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRXZlbnQgPSBldmVudC5maWx0ZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJFdmVudCBhcyBGaWx0ZXJNZXRhZGF0YVtdKS5maWx0ZXIoZSA9PiBlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZSA9PiBNZWRpdXNSZXN0VXRpbC5hZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlciwga2V5LCBlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyRXZlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJFdmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVzUmVzdFV0aWwuYWRkTWVkaXVzRmlsdGVyRnJvbVByaW1lRmlsdGVyTWV0YWRhdGEocXVlcnlQYXJhbUJ1aWxkZXIsIGtleSwgZmlsdGVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1CdWlsZGVyLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlcjogTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlck1ldGFkYXRhOiBGaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBtYXRjaFR5cGU6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSA9IE1lZGl1c1Jlc3RVdGlsLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShmaWx0ZXJNZXRhZGF0YS5tYXRjaE1vZGUgPz8gJ2NvbnRhaW5zJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIocHJvcGVydHksIGZpbHRlck1ldGFkYXRhLnZhbHVlLCB1bmRlZmluZWQsIG1hdGNoVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcpOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgICAgICBjb25zdCBtYXBwaW5nID0gTWVkaXVzUmVzdFV0aWwubWF0Y2hNb2RlTWFwcGluZy5maW5kKG0gPT4gbVswXSA9PT0gbWF0Y2hNb2RlKTtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmc/LlsyXSA/PyBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnM7XG4gICAgfVxufVxuIl19