@onecx/angular-accelerator 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +7 -0
  2. package/assets/i18n/de.json +130 -0
  3. package/assets/i18n/en.json +130 -0
  4. package/assets/images/placeholder.png +0 -0
  5. package/assets/styles.scss +8 -0
  6. package/esm2020/index.mjs +49 -0
  7. package/esm2020/lib/angular-accelerator-primeng.module.mjs +83 -0
  8. package/esm2020/lib/angular-accelerator.module.mjs +209 -0
  9. package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
  10. package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +108 -0
  11. package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +45 -0
  12. package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +358 -0
  13. package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
  14. package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +110 -0
  15. package/esm2020/lib/components/data-table/data-table.component.mjs +350 -0
  16. package/esm2020/lib/components/data-view/data-view.component.mjs +355 -0
  17. package/esm2020/lib/components/diagram/diagram.component.mjs +136 -0
  18. package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
  19. package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +342 -0
  20. package/esm2020/lib/components/page-header/page-header.component.mjs +189 -0
  21. package/esm2020/lib/components/search-config/search-config.component.mjs +34 -0
  22. package/esm2020/lib/components/search-header/search-header.component.mjs +136 -0
  23. package/esm2020/lib/directives/if-breakpoint.directive.mjs +39 -0
  24. package/esm2020/lib/directives/if-permission.directive.mjs +53 -0
  25. package/esm2020/lib/functions/flatten-object.mjs +20 -0
  26. package/esm2020/lib/model/breadcrumb-menu-item.model.mjs +2 -0
  27. package/esm2020/lib/model/column-type.model.mjs +9 -0
  28. package/esm2020/lib/model/data-action.mjs +2 -0
  29. package/esm2020/lib/model/data-column-name-id.model.mjs +2 -0
  30. package/esm2020/lib/model/data-sort-direction.mjs +2 -0
  31. package/esm2020/lib/model/data-table-column.model.mjs +2 -0
  32. package/esm2020/lib/model/diagram-column.mjs +2 -0
  33. package/esm2020/lib/model/diagram-data.mjs +2 -0
  34. package/esm2020/lib/model/diagram-type.mjs +2 -0
  35. package/esm2020/lib/model/search-config-info.mjs +2 -0
  36. package/esm2020/lib/pipes/dynamic.pipe.mjs +58 -0
  37. package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +15 -0
  38. package/esm2020/lib/services/breadcrumb.service.mjs +79 -0
  39. package/esm2020/lib/services/translation-cache.service.mjs +54 -0
  40. package/esm2020/lib/utils/async-translate-loader.utils.mjs +12 -0
  41. package/esm2020/lib/utils/caching-translate-loader.utils.mjs +15 -0
  42. package/esm2020/lib/utils/colorutils.mjs +19 -0
  43. package/esm2020/lib/utils/create-translate-loader.utils.mjs +23 -0
  44. package/esm2020/lib/utils/dateutils.mjs +32 -0
  45. package/esm2020/lib/utils/objectutils.mjs +30 -0
  46. package/esm2020/lib/utils/ocxtimeagointl.utils.mjs +34 -0
  47. package/esm2020/lib/utils/primeicon.utils.mjs +2 -0
  48. package/esm2020/lib/utils/translate.combined.loader.mjs +36 -0
  49. package/esm2020/onecx-angular-accelerator.mjs +5 -0
  50. package/esm2020/testing/column-group-selection.harness.mjs +10 -0
  51. package/esm2020/testing/custom-group-column-selector.harness.mjs +31 -0
  52. package/esm2020/testing/data-layout-selection.harness.mjs +33 -0
  53. package/esm2020/testing/data-list-grid.harness.mjs +47 -0
  54. package/esm2020/testing/data-table.harness.mjs +57 -0
  55. package/esm2020/testing/data-view.harness.mjs +12 -0
  56. package/esm2020/testing/default-grid-item.harness.mjs +24 -0
  57. package/esm2020/testing/default-list-item.harness.mjs +24 -0
  58. package/esm2020/testing/diagram.harness.mjs +22 -0
  59. package/esm2020/testing/index.mjs +17 -0
  60. package/esm2020/testing/interactive-data-view.harness.mjs +19 -0
  61. package/esm2020/testing/more-actions-menu-button.harness.mjs +35 -0
  62. package/esm2020/testing/onecx-angular-accelerator-testing.mjs +5 -0
  63. package/esm2020/testing/page-header.harness.mjs +36 -0
  64. package/esm2020/testing/search-config.harness.mjs +10 -0
  65. package/fesm2015/onecx-angular-accelerator-testing.mjs +430 -0
  66. package/fesm2015/onecx-angular-accelerator-testing.mjs.map +1 -0
  67. package/fesm2015/onecx-angular-accelerator.mjs +3118 -0
  68. package/fesm2015/onecx-angular-accelerator.mjs.map +1 -0
  69. package/fesm2020/onecx-angular-accelerator-testing.mjs +338 -0
  70. package/fesm2020/onecx-angular-accelerator-testing.mjs.map +1 -0
  71. package/fesm2020/onecx-angular-accelerator.mjs +3085 -0
  72. package/fesm2020/onecx-angular-accelerator.mjs.map +1 -0
  73. package/index.d.ts +38 -0
  74. package/lib/angular-accelerator-primeng.module.d.ts +16 -0
  75. package/lib/angular-accelerator.module.d.ts +32 -0
  76. package/lib/components/column-group-selection/column-group-selection.component.d.ts +28 -0
  77. package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +45 -0
  78. package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +25 -0
  79. package/lib/components/data-list-grid/data-list-grid.component.d.ts +120 -0
  80. package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +30 -0
  81. package/lib/components/data-sort-base/data-sort-base.d.ts +32 -0
  82. package/lib/components/data-table/data-table.component.d.ts +124 -0
  83. package/lib/components/data-view/data-view.component.d.ts +112 -0
  84. package/lib/components/diagram/diagram.component.d.ts +43 -0
  85. package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +39 -0
  86. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +108 -0
  87. package/lib/components/page-header/page-header.component.d.ts +90 -0
  88. package/lib/components/search-config/search-config.component.d.ts +16 -0
  89. package/lib/components/search-header/search-header.component.d.ts +46 -0
  90. package/lib/directives/if-breakpoint.directive.d.ts +12 -0
  91. package/lib/directives/if-permission.directive.d.ts +18 -0
  92. package/lib/functions/flatten-object.d.ts +14 -0
  93. package/lib/model/breadcrumb-menu-item.model.d.ts +60 -0
  94. package/lib/model/column-type.model.d.ts +7 -0
  95. package/lib/model/data-action.d.ts +9 -0
  96. package/lib/model/data-column-name-id.model.d.ts +4 -0
  97. package/lib/model/data-sort-direction.d.ts +5 -0
  98. package/lib/model/data-table-column.model.d.ts +9 -0
  99. package/lib/model/diagram-column.d.ts +5 -0
  100. package/lib/model/diagram-data.d.ts +4 -0
  101. package/lib/model/diagram-type.d.ts +5 -0
  102. package/lib/model/search-config-info.d.ts +4 -0
  103. package/lib/pipes/dynamic.pipe.d.ts +13 -0
  104. package/lib/pipes/ocxtimeago.pipe.d.ts +6 -0
  105. package/lib/services/breadcrumb.service.d.ts +20 -0
  106. package/lib/services/translation-cache.service.d.ts +12 -0
  107. package/lib/utils/async-translate-loader.utils.d.ts +9 -0
  108. package/lib/utils/caching-translate-loader.utils.d.ts +13 -0
  109. package/lib/utils/colorutils.d.ts +12 -0
  110. package/lib/utils/create-translate-loader.utils.d.ts +5 -0
  111. package/lib/utils/dateutils.d.ts +9 -0
  112. package/lib/utils/objectutils.d.ts +4 -0
  113. package/lib/utils/ocxtimeagointl.utils.d.ts +9 -0
  114. package/lib/utils/primeicon.utils.d.ts +5 -0
  115. package/lib/utils/translate.combined.loader.d.ts +9 -0
  116. package/package.json +55 -0
  117. package/testing/column-group-selection.harness.d.ts +6 -0
  118. package/testing/custom-group-column-selector.harness.d.ts +14 -0
  119. package/testing/data-layout-selection.harness.d.ts +11 -0
  120. package/testing/data-list-grid.harness.d.ts +15 -0
  121. package/testing/data-table.harness.d.ts +17 -0
  122. package/testing/data-view.harness.d.ts +8 -0
  123. package/testing/default-grid-item.harness.d.ts +11 -0
  124. package/testing/default-list-item.harness.d.ts +12 -0
  125. package/testing/diagram.harness.d.ts +10 -0
  126. package/testing/index.d.ts +16 -0
  127. package/testing/interactive-data-view.harness.d.ts +15 -0
  128. package/testing/more-actions-menu-button.harness.d.ts +10 -0
  129. package/testing/page-header.harness.d.ts +13 -0
  130. package/testing/search-config.harness.d.ts +6 -0
@@ -0,0 +1,110 @@
1
+ import { map, of } from 'rxjs';
2
+ import { flattenObject } from '../../functions/flatten-object';
3
+ import { ColumnType } from '../../model/column-type.model';
4
+ import { ObjectUtils } from '../../utils/objectutils';
5
+ export class DataSortBase {
6
+ constructor(locale, translateService) {
7
+ this.locale = locale;
8
+ this.translateService = translateService;
9
+ }
10
+ translateItems([items, filters, sortColumn, sortDirection], columns, clientSideFiltering, clientSideSorting) {
11
+ if (clientSideFiltering || clientSideSorting) {
12
+ let translationKeys = [];
13
+ const translatedColumns = columns.filter((c) => c.columnType === ColumnType.TRANSLATION_KEY);
14
+ translatedColumns.forEach((c) => {
15
+ translationKeys = [...translationKeys, ...items.map((i) => ObjectUtils.resolveFieldData(i, c.id)?.toString())];
16
+ });
17
+ if (translationKeys.length) {
18
+ return this.translateService.get(translationKeys).pipe(map((translatedValues) => {
19
+ const translations = {};
20
+ translatedColumns.forEach((c) => {
21
+ translations[c.id] = Object.fromEntries(items.map((i) => [
22
+ ObjectUtils.resolveFieldData(i, c.id)?.toString() || '',
23
+ translatedValues[ObjectUtils.resolveFieldData(i, c.id)?.toString()],
24
+ ]));
25
+ });
26
+ return [items, filters, sortColumn, sortDirection, translations];
27
+ }));
28
+ }
29
+ }
30
+ return of([items, filters, sortColumn, sortDirection, {}]);
31
+ }
32
+ filterItems([items, filters, sortColumn, sortDirection, translations], clientSideFiltering) {
33
+ if (!clientSideFiltering) {
34
+ return [items, filters, sortColumn, sortDirection, translations];
35
+ }
36
+ return [
37
+ items.filter((item) => filters
38
+ .map((filter) => filter.columnId)
39
+ .filter((value, index, self) => self.indexOf(value) === index && value != null)
40
+ .every((filterColumnId) => filters
41
+ .filter((filter) => filter.columnId === filterColumnId)
42
+ .some((filter) => (translations[filter.columnId]?.[ObjectUtils.resolveFieldData(item, filter.columnId).toString()] ||
43
+ ObjectUtils.resolveFieldData(item, filter.columnId)).toString() === filter.value.toString()))),
44
+ filters,
45
+ sortColumn,
46
+ sortDirection,
47
+ translations,
48
+ ];
49
+ }
50
+ sortItems([items, filters, sortColumn, sortDirection, translations], columns, clientSideSorting) {
51
+ if (!clientSideSorting || sortColumn === '') {
52
+ return [items, filters, sortColumn, sortDirection, translations];
53
+ }
54
+ let translatedColValues = Object.fromEntries(items.map((i) => [
55
+ ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
56
+ ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
57
+ ]));
58
+ if (columns.find((h) => h.id === sortColumn)?.columnType === ColumnType.TRANSLATION_KEY) {
59
+ translatedColValues = translations[sortColumn];
60
+ }
61
+ return [
62
+ [...items].sort(this.createCompareFunction(translatedColValues, sortColumn, sortDirection)),
63
+ filters,
64
+ sortColumn,
65
+ sortDirection,
66
+ translations,
67
+ ];
68
+ }
69
+ flattenItems(items) {
70
+ return items.map((i) => flattenObject(i));
71
+ }
72
+ createCompareFunction(translatedColValues, sortColumn, sortDirection) {
73
+ let direction = 0;
74
+ if (sortDirection === "ASCENDING" /* DataSortDirection.ASCENDING */) {
75
+ direction = 1;
76
+ }
77
+ else if (sortDirection === "DESCENDING" /* DataSortDirection.DESCENDING */) {
78
+ direction = -1;
79
+ }
80
+ return (data1, data2) => {
81
+ if (direction === 0) {
82
+ return 0;
83
+ }
84
+ let result;
85
+ const value1 = translatedColValues[ObjectUtils.resolveFieldData(data1, sortColumn)];
86
+ const value2 = translatedColValues[ObjectUtils.resolveFieldData(data2, sortColumn)];
87
+ if (value1 == null && value2 != null)
88
+ result = -1;
89
+ else if (value1 != null && value2 == null)
90
+ result = 1;
91
+ else if (value1 == null && value2 == null)
92
+ result = 0;
93
+ else if (typeof value1 === 'string' && typeof value2 === 'string')
94
+ result = value1.localeCompare(value2, [this.locale, 'en', 'de'], { numeric: true });
95
+ else {
96
+ if (value1 < value2) {
97
+ result = -1;
98
+ }
99
+ else if (value1 > value2) {
100
+ result = 1;
101
+ }
102
+ else {
103
+ result = 0;
104
+ }
105
+ }
106
+ return direction * result;
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFLMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBSXJELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQXNCLE1BQWMsRUFBWSxnQkFBa0M7UUFBNUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRXRGLGNBQWMsQ0FDWixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBMkQsRUFDckcsT0FBMEIsRUFDMUIsbUJBQTRCLEVBQzVCLGlCQUEwQjtRQUUxQixJQUFJLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFO1lBQzVDLElBQUksZUFBZSxHQUFhLEVBQUUsQ0FBQTtZQUNsQyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQzVGLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUM5QixlQUFlLEdBQUcsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFD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QUFNLEVBQUU7b0JBQ25CLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtpQkFDWjtxQkFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLEVBQUU7b0JBQzFCLE1BQU0sR0FBRyxDQUFDLENBQUE7aUJBQ1g7cUJBQU07b0JBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQTtpQkFDWDthQUNGO1lBQ0QsT0FBTyxTQUFTLEdBQUcsTUFBTSxDQUFBO1FBQzNCLENBQUMsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBmbGF0dGVuT2JqZWN0IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2ZsYXR0ZW4tb2JqZWN0J1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2NvbHVtbi10eXBlLm1vZGVsJ1xuaW1wb3J0IHsgRGF0YVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXNvcnQtZGlyZWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBMaXN0R3JpZERhdGEgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdywgRmlsdGVyIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3R1dGlscydcblxudHlwZSBSb3dMaXN0R3JpZERhdGEgPSBMaXN0R3JpZERhdGEgfCBSb3dcblxuZXhwb3J0IGNsYXNzIERhdGFTb3J0QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZywgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgdHJhbnNsYXRlSXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uXTogW1Jvd0xpc3RHcmlkRGF0YVtdLCBGaWx0ZXJbXSwgc3RyaW5nLCBEYXRhU29ydERpcmVjdGlvbl0sXG4gICAgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10sXG4gICAgY2xpZW50U2lkZUZpbHRlcmluZzogYm9vbGVhbixcbiAgICBjbGllbnRTaWRlU29ydGluZzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPFtSb3dMaXN0R3JpZERhdGFbXSwgRmlsdGVyW10sIHN0cmluZywgRGF0YVNvcnREaXJlY3Rpb24sIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XT4ge1xuICAgIGlmIChjbGllbnRTaWRlRmlsdGVyaW5nIHx8IGNsaWVudFNpZGVTb3J0aW5nKSB7XG4gICAgICBsZXQgdHJhbnNsYXRpb25LZXlzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBjb25zdCB0cmFuc2xhdGVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmNvbHVtblR5cGUgPT09IENvbHVtblR5cGUuVFJBTlNMQVRJT05fS0VZKVxuICAgICAgdHJhbnNsYXRlZENvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICB0cmFuc2xhdGlvbktleXMgPSBbLi4udHJhbnNsYXRpb25LZXlzLCAuLi5pdGVtcy5tYXAoKGkpID0+IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgYy5pZCk/LnRvU3RyaW5nKCkpXVxuICAgICAgfSlcbiAgICAgIGlmICh0cmFuc2xhdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRyYW5zbGF0aW9uS2V5cykucGlwZShcbiAgICAgICAgICBtYXAoKHRyYW5zbGF0ZWRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fVxuICAgICAgICAgICAgdHJhbnNsYXRlZENvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2xhdGlvbnNbYy5pZF0gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgaXRlbXMubWFwKChpKSA9PiBbXG4gICAgICAgICAgICAgICAgICBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIGMuaWQpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlc1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIGMuaWQpPy50b1N0cmluZygpXSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mKFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwge31dKVxuICB9XG5cbiAgZmlsdGVySXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdOiBbXG4gICAgICBSb3dMaXN0R3JpZERhdGFbXSxcbiAgICAgIEZpbHRlcltdLFxuICAgICAgc3RyaW5nLFxuICAgICAgRGF0YVNvcnREaXJlY3Rpb24sXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PlxuICAgIF0sXG4gICAgY2xpZW50U2lkZUZpbHRlcmluZzogYm9vbGVhblxuICApOiBbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0ge1xuICAgIGlmICghY2xpZW50U2lkZUZpbHRlcmluZykge1xuICAgICAgcmV0dXJuIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgLm1hcCgoZmlsdGVyKSA9PiBmaWx0ZXIuY29sdW1uSWQpXG4gICAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCAmJiB2YWx1ZSAhPSBudWxsKVxuICAgICAgICAgIC5ldmVyeSgoZmlsdGVyQ29sdW1uSWQpID0+XG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLmNvbHVtbklkID09PSBmaWx0ZXJDb2x1bW5JZClcbiAgICAgICAgICAgICAgLnNvbWUoXG4gICAgICAgICAgICAgICAgKGZpbHRlcikgPT5cbiAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2ZpbHRlci5jb2x1bW5JZF0/LltPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGl0ZW0sIGZpbHRlci5jb2x1bW5JZCkudG9TdHJpbmcoKV0gfHxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBmaWx0ZXIuY29sdW1uSWQpXG4gICAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCkgPT09IGZpbHRlci52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsdGVycyxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIF1cbiAgfVxuXG4gIHNvcnRJdGVtcyhcbiAgICBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc106IFtcbiAgICAgIFJvd0xpc3RHcmlkRGF0YVtdLFxuICAgICAgRmlsdGVyW10sXG4gICAgICBzdHJpbmcsXG4gICAgICBEYXRhU29ydERpcmVjdGlvbixcbiAgICAgIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XG4gICAgXSxcbiAgICBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSxcbiAgICBjbGllbnRTaWRlU29ydGluZzogYm9vbGVhblxuICApOiBbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0ge1xuICAgIGlmICghY2xpZW50U2lkZVNvcnRpbmcgfHwgc29ydENvbHVtbiA9PT0gJycpIHtcbiAgICAgIHJldHVybiBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc11cbiAgICB9XG4gICAgbGV0IHRyYW5zbGF0ZWRDb2xWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBpdGVtcy5tYXAoKGkpID0+IFtcbiAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKT8udG9TdHJpbmcoKSxcbiAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKT8udG9TdHJpbmcoKSxcbiAgICAgIF0pXG4gICAgKVxuICAgIGlmIChjb2x1bW5zLmZpbmQoKGgpID0+IGguaWQgPT09IHNvcnRDb2x1bW4pPy5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSkge1xuICAgICAgdHJhbnNsYXRlZENvbFZhbHVlcyA9IHRyYW5zbGF0aW9uc1tzb3J0Q29sdW1uXVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgWy4uLml0ZW1zXS5zb3J0KHRoaXMuY3JlYXRlQ29tcGFyZUZ1bmN0aW9uKHRyYW5zbGF0ZWRDb2xWYWx1ZXMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24pKSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBzb3J0Q29sdW1uLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICBdXG4gIH1cblxuICBmbGF0dGVuSXRlbXMoaXRlbXM6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaSkgPT4gZmxhdHRlbk9iamVjdChpKSlcbiAgfVxuXG4gIGNyZWF0ZUNvbXBhcmVGdW5jdGlvbihcbiAgICB0cmFuc2xhdGVkQ29sVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcbiAgICBzb3J0RGlyZWN0aW9uOiBEYXRhU29ydERpcmVjdGlvblxuICApOiAoYTogUmVjb3JkPHN0cmluZywgYW55PiwgYjogUmVjb3JkPHN0cmluZywgYW55PikgPT4gbnVtYmVyIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMFxuICAgIGlmIChzb3J0RGlyZWN0aW9uID09PSBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcpIHtcbiAgICAgIGRpcmVjdGlvbiA9IDFcbiAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xXG4gICAgfVxuICAgIHJldHVybiAoZGF0YTEsIGRhdGEyKSA9PiB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBsZXQgcmVzdWx0XG4gICAgICBjb25zdCB2YWx1ZTEgPSB0cmFuc2xhdGVkQ29sVmFsdWVzW09iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZGF0YTEsIHNvcnRDb2x1bW4pXVxuICAgICAgY29uc3QgdmFsdWUyID0gdHJhbnNsYXRlZENvbFZhbHVlc1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGRhdGEyLCBzb3J0Q29sdW1uKV1cblxuICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMVxuICAgICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDFcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwXG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyLCBbdGhpcy5sb2NhbGUsICdlbicsICdkZSddLCB7IG51bWVyaWM6IHRydWUgfSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUxIDwgdmFsdWUyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gLTFcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTEgPiB2YWx1ZTIpIHtcbiAgICAgICAgICByZXN1bHQgPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlyZWN0aW9uICogcmVzdWx0XG4gICAgfVxuICB9XG59XG4iXX0=