cps-ui-kit 0.155.0 → 0.156.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.
@@ -1,29 +1,26 @@
1
1
  import { Directive, Host, Self, Optional } from '@angular/core';
2
+ import { ObjectUtils } from 'primeng/utils';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "primeng/table";
4
5
  export class TableUnsortDirective {
5
6
  constructor(pTable) {
6
7
  this.pTable = pTable;
7
- this.defaultSortOrderInitialized = false;
8
- pTable.tableService.valueSource$.subscribe((val) => {
9
- if (val != null && val.length > 0 && !this.defaultSortOrderInitialized) {
10
- let i = 0;
11
- val.forEach((v) => {
12
- v._defaultSortOrder = i++;
13
- });
14
- this.defaultSortOrderInitialized = true;
15
- }
16
- });
8
+ this.resetSorting = false;
9
+ this.sortIndices = [];
17
10
  pTable.sort = (event) => {
18
11
  if (pTable.sortMode === 'single') {
19
12
  if (pTable.sortField === event.field && pTable.sortOrder === -1) {
20
- event.field = '_defaultSortOrder';
13
+ pTable._sortOrder = pTable.defaultSortOrder;
14
+ pTable._sortField = null;
15
+ this.resetSorting = true;
16
+ }
17
+ else {
18
+ pTable._sortOrder =
19
+ pTable.sortField === event.field
20
+ ? pTable.sortOrder * -1
21
+ : pTable.defaultSortOrder;
22
+ pTable._sortField = event.field;
21
23
  }
22
- pTable._sortOrder =
23
- pTable.sortField === event.field
24
- ? pTable.sortOrder * -1
25
- : pTable.defaultSortOrder;
26
- pTable._sortField = event.field;
27
24
  pTable.sortSingle();
28
25
  }
29
26
  if (pTable.sortMode === 'multiple') {
@@ -40,10 +37,8 @@ export class TableUnsortDirective {
40
37
  pTable.multiSortMeta.push(sortMeta);
41
38
  }
42
39
  if (pTable._multiSortMeta?.length === 0) {
43
- pTable.multiSortMeta.push({
44
- field: '_defaultSortOrder',
45
- order: pTable.defaultSortOrder
46
- });
40
+ pTable.multiSortMeta = null;
41
+ this.resetSorting = true;
47
42
  resetIndex = true;
48
43
  }
49
44
  }
@@ -64,16 +59,146 @@ export class TableUnsortDirective {
64
59
  pTable.saveState();
65
60
  }
66
61
  pTable.anchorRowIndex = 0;
62
+ this.resetSorting = false;
63
+ };
64
+ pTable.sortSingle = () => {
65
+ const field = pTable.sortField || pTable.groupRowsBy;
66
+ const order = pTable.sortField
67
+ ? pTable.sortOrder
68
+ : pTable.groupRowsByOrder;
69
+ if (pTable.groupRowsBy &&
70
+ pTable.sortField &&
71
+ pTable.groupRowsBy !== pTable.sortField) {
72
+ pTable._multiSortMeta = [
73
+ pTable.getGroupRowsMeta(),
74
+ { field: pTable.sortField, order: pTable.sortOrder }
75
+ ];
76
+ pTable.sortMultiple();
77
+ return;
78
+ }
79
+ if (order && (field || this.resetSorting)) {
80
+ if (pTable.restoringSort) {
81
+ pTable.restoringSort = false;
82
+ }
83
+ if (pTable.lazy) {
84
+ pTable.onLazyLoad.emit(pTable.createLazyLoadMetadata());
85
+ }
86
+ else if (pTable.value) {
87
+ if (pTable.customSort) {
88
+ pTable.sortFunction.emit({
89
+ data: pTable.value,
90
+ mode: pTable.sortMode,
91
+ field,
92
+ order
93
+ });
94
+ }
95
+ else {
96
+ this._sortData(field, order);
97
+ }
98
+ if (pTable.hasFilter()) {
99
+ pTable._filter();
100
+ }
101
+ }
102
+ const sortMeta = {
103
+ field,
104
+ order
105
+ };
106
+ pTable.onSort.emit(sortMeta);
107
+ pTable.tableService.onSort(sortMeta);
108
+ }
109
+ };
110
+ pTable.sortMultiple = () => {
111
+ if (pTable.groupRowsBy) {
112
+ if (!pTable._multiSortMeta)
113
+ pTable._multiSortMeta = [pTable.getGroupRowsMeta()];
114
+ else if (pTable.multiSortMeta[0].field !== pTable.groupRowsBy)
115
+ pTable._multiSortMeta = [
116
+ pTable.getGroupRowsMeta(),
117
+ ...pTable._multiSortMeta
118
+ ];
119
+ }
120
+ if ((pTable.multiSortMeta && pTable.multiSortMeta.length > 0) ||
121
+ this.resetSorting) {
122
+ if (pTable.lazy) {
123
+ pTable.onLazyLoad.emit(pTable.createLazyLoadMetadata());
124
+ }
125
+ else if (pTable.value) {
126
+ if (pTable.customSort) {
127
+ pTable.sortFunction.emit({
128
+ data: pTable.value,
129
+ mode: pTable.sortMode,
130
+ multiSortMeta: pTable.multiSortMeta
131
+ });
132
+ }
133
+ else {
134
+ this._sortData();
135
+ }
136
+ if (pTable.hasFilter()) {
137
+ pTable._filter();
138
+ }
139
+ }
140
+ pTable.onSort.emit({
141
+ multisortmeta: pTable.multiSortMeta
142
+ });
143
+ pTable.tableService.onSort(pTable.multiSortMeta);
144
+ }
67
145
  };
68
146
  }
147
+ resetDefaultSortOrder() {
148
+ this.sortIndices = [];
149
+ }
150
+ _sortData(field, order) {
151
+ // restore default sort order
152
+ if (this.resetSorting && this.sortIndices.length > 0) {
153
+ this.pTable._value = this.sortIndices.map((index) => this.pTable._value[index]);
154
+ this.resetDefaultSortOrder();
155
+ }
156
+ else {
157
+ const toSort = [];
158
+ if (this.sortIndices.length < 1) {
159
+ this.sortIndices = Array.from({ length: this.pTable.value.length }, (_, index) => index);
160
+ }
161
+ for (let i = 0; i < this.pTable.value.length; i++) {
162
+ toSort.push([this.pTable.value[i], this.sortIndices.indexOf(i)]);
163
+ }
164
+ if (this.pTable.sortMode === 'single') {
165
+ toSort.sort((data1, data2) => {
166
+ const value1 = ObjectUtils.resolveFieldData(data1[0], field);
167
+ const value2 = ObjectUtils.resolveFieldData(data2[0], field);
168
+ return this.pTable.compareValuesOnSort(value1, value2, order);
169
+ });
170
+ }
171
+ else {
172
+ toSort.sort((data1, data2) => {
173
+ return this._multisortField(data1, data2, 0);
174
+ });
175
+ }
176
+ for (let i = 0; i < toSort.length; i++) {
177
+ this.sortIndices[toSort[i][1]] = i;
178
+ this.pTable.value[i] = toSort[i][0];
179
+ }
180
+ }
181
+ this.pTable._value = [...this.pTable.value];
182
+ }
183
+ _multisortField(data1, data2, index) {
184
+ const value1 = ObjectUtils.resolveFieldData(data1[0], this.pTable.multiSortMeta[index].field);
185
+ const value2 = ObjectUtils.resolveFieldData(data2[0], this.pTable.multiSortMeta[index].field);
186
+ if (ObjectUtils.compare(value1, value2, this.pTable.filterLocale) === 0) {
187
+ return this.pTable.multiSortMeta.length - 1 > index
188
+ ? this._multisortField(data1, data2, index + 1)
189
+ : 0;
190
+ }
191
+ return this.pTable.compareValuesOnSort(value1, value2, this.pTable.multiSortMeta[index].order);
192
+ }
69
193
  }
70
194
  TableUnsortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableUnsortDirective, deps: [{ token: i1.Table, host: true, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
71
- TableUnsortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TableUnsortDirective, isStandalone: true, selector: "[tWithUnsort]", ngImport: i0 });
195
+ TableUnsortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TableUnsortDirective, isStandalone: true, selector: "[tWithUnsort]", exportAs: ["tWithUnsort"], ngImport: i0 });
72
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableUnsortDirective, decorators: [{
73
197
  type: Directive,
74
198
  args: [{
75
199
  standalone: true,
76
- selector: '[tWithUnsort]'
200
+ selector: '[tWithUnsort]',
201
+ exportAs: 'tWithUnsort'
77
202
  }]
78
203
  }], ctorParameters: function () { return [{ type: i1.Table, decorators: [{
79
204
  type: Host
@@ -82,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
82
207
  }, {
83
208
  type: Optional
84
209
  }] }]; } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdW5zb3J0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10YWJsZS9kaXJlY3RpdmVzL2ludGVybmFsL3RhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT2hFLE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFBK0MsTUFBYTtRQUFiLFdBQU0sR0FBTixNQUFNLENBQU87UUFGNUQsZ0NBQTJCLEdBQUcsS0FBSyxDQUFDO1FBR2xDLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ3hELElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDaEIsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO2FBQ3pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDL0QsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztpQkFDbkM7Z0JBRUQsTUFBTSxDQUFDLFVBQVU7b0JBQ2YsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsS0FBSzt3QkFDOUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3dCQUN2QixDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QixNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNyQjtZQUNELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7Z0JBQ2xDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWpELElBQUksUUFBUSxFQUFFO29CQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDckQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFOzRCQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ3BDO3FCQUNGO29CQUNELElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7d0JBQ3hCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3JDO29CQUNELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN2QyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzs0QkFDeEIsS0FBSyxFQUFFLG1CQUFtQjs0QkFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7eUJBQy9CLENBQUMsQ0FBQzt3QkFDSCxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUNuQjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTt3QkFDekIsTUFBTSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7cUJBQzVCO29CQUNELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO3dCQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7d0JBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCO3FCQUMvQixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixJQUFJLFVBQVU7b0JBQUUsTUFBTSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7YUFDNUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3BCO1lBRUQsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7aUhBcEVVLG9CQUFvQjtxR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO2lCQUMxQjs7MEJBSWMsSUFBSTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdCwgU2VsZiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t0V2l0aFVuc29ydF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVW5zb3J0RGlyZWN0aXZlIHtcbiAgZGVmYXVsdFNvcnRPcmRlckluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoQEhvc3QoKSBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBwVGFibGU6IFRhYmxlKSB7XG4gICAgcFRhYmxlLnRhYmxlU2VydmljZS52YWx1ZVNvdXJjZSQuc3Vic2NyaWJlKCh2YWw6IGFueVtdKSA9PiB7XG4gICAgICBpZiAodmFsICE9IG51bGwgJiYgdmFsLmxlbmd0aCA+IDAgJiYgIXRoaXMuZGVmYXVsdFNvcnRPcmRlckluaXRpYWxpemVkKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgdmFsLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICB2Ll9kZWZhdWx0U29ydE9yZGVyID0gaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U29ydE9yZGVySW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcFRhYmxlLnNvcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHBUYWJsZS5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKHBUYWJsZS5zb3J0RmllbGQgPT09IGV2ZW50LmZpZWxkICYmIHBUYWJsZS5zb3J0T3JkZXIgPT09IC0xKSB7XG4gICAgICAgICAgZXZlbnQuZmllbGQgPSAnX2RlZmF1bHRTb3J0T3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcFRhYmxlLl9zb3J0T3JkZXIgPVxuICAgICAgICAgIHBUYWJsZS5zb3J0RmllbGQgPT09IGV2ZW50LmZpZWxkXG4gICAgICAgICAgICA/IHBUYWJsZS5zb3J0T3JkZXIgKiAtMVxuICAgICAgICAgICAgOiBwVGFibGUuZGVmYXVsdFNvcnRPcmRlcjtcbiAgICAgICAgcFRhYmxlLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgcFRhYmxlLnNvcnRTaW5nbGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwVGFibGUuc29ydE1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgbGV0IHJlc2V0SW5kZXggPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc29ydE1ldGEgPSBwVGFibGUuZ2V0U29ydE1ldGEoZXZlbnQuZmllbGQpO1xuXG4gICAgICAgIGlmIChzb3J0TWV0YSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcFRhYmxlLl9tdWx0aVNvcnRNZXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocFRhYmxlLl9tdWx0aVNvcnRNZXRhW2ldLmZpZWxkID09PSBzb3J0TWV0YS5maWVsZCkge1xuICAgICAgICAgICAgICBwVGFibGUuX211bHRpU29ydE1ldGEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc29ydE1ldGEub3JkZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHNvcnRNZXRhLm9yZGVyID0gc29ydE1ldGEub3JkZXIgKiAtMTtcbiAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhLnB1c2goc29ydE1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocFRhYmxlLl9tdWx0aVNvcnRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhLnB1c2goe1xuICAgICAgICAgICAgICBmaWVsZDogJ19kZWZhdWx0U29ydE9yZGVyJyxcbiAgICAgICAgICAgICAgb3JkZXI6IHBUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc2V0SW5kZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXBUYWJsZS5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBwVGFibGUuX211bHRpU29ydE1ldGEgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcFRhYmxlLm11bHRpU29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXG4gICAgICAgICAgICBvcmRlcjogcFRhYmxlLmRlZmF1bHRTb3J0T3JkZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBUYWJsZS5zb3J0TXVsdGlwbGUoKTtcbiAgICAgICAgaWYgKHJlc2V0SW5kZXgpIHBUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAocFRhYmxlLmlzU3RhdGVmdWwoKSkge1xuICAgICAgICBwVGFibGUuc2F2ZVN0YXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHBUYWJsZS5hbmNob3JSb3dJbmRleCA9IDA7XG4gICAgfTtcbiAgfVxufVxuIl19
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdW5zb3J0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10YWJsZS9kaXJlY3RpdmVzL2ludGVybmFsL3RhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPNUMsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixZQUErQyxNQUFhO1FBQWIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUg1RCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUd6QixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDL0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNDLE1BQU0sQ0FBQyxVQUFrQixHQUFHLElBQUksQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxVQUFVO3dCQUNmLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQUs7NEJBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzs0QkFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxn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Z3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb3J0TWV0YSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbdFdpdGhVbnNvcnRdJyxcbiAgZXhwb3J0QXM6ICd0V2l0aFVuc29ydCdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVVbnNvcnREaXJlY3RpdmUge1xuICByZXNldFNvcnRpbmcgPSBmYWxzZTtcbiAgc29ydEluZGljZXM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoQEhvc3QoKSBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBwVGFibGU6IFRhYmxlKSB7XG4gICAgcFRhYmxlLnNvcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHBUYWJsZS5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKHBUYWJsZS5zb3J0RmllbGQgPT09IGV2ZW50LmZpZWxkICYmIHBUYWJsZS5zb3J0T3JkZXIgPT09IC0xKSB7XG4gICAgICAgICAgcFRhYmxlLl9zb3J0T3JkZXIgPSBwVGFibGUuZGVmYXVsdFNvcnRPcmRlcjtcbiAgICAgICAgICAocFRhYmxlLl9zb3J0RmllbGQgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZXNldFNvcnRpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBUYWJsZS5fc29ydE9yZGVyID1cbiAgICAgICAgICAgIHBUYWJsZS5zb3J0RmllbGQgPT09IGV2ZW50LmZpZWxkXG4gICAgICAgICAgICAgID8gcFRhYmxlLnNvcnRPcmRlciAqIC0xXG4gICAgICAgICAgICAgIDogcFRhYmxlLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgICAgcFRhYmxlLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgfVxuICAgICAgICBwVGFibGUuc29ydFNpbmdsZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHBUYWJsZS5zb3J0TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICBsZXQgcmVzZXRJbmRleCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzb3J0TWV0YSA9IHBUYWJsZS5nZXRTb3J0TWV0YShldmVudC5maWVsZCk7XG5cbiAgICAgICAgaWYgKHNvcnRNZXRhKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwVGFibGUuX211bHRpU29ydE1ldGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwVGFibGUuX211bHRpU29ydE1ldGFbaV0uZmllbGQgPT09IHNvcnRNZXRhLmZpZWxkKSB7XG4gICAgICAgICAgICAgIHBUYWJsZS5fbXVsdGlTb3J0TWV0YS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3J0TWV0YS5vcmRlciA9PT0gMSkge1xuICAgICAgICAgICAgc29ydE1ldGEub3JkZXIgPSBzb3J0TWV0YS5vcmRlciAqIC0xO1xuICAgICAgICAgICAgcFRhYmxlLm11bHRpU29ydE1ldGEucHVzaChzb3J0TWV0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwVGFibGUuX211bHRpU29ydE1ldGE/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgKHBUYWJsZS5tdWx0aVNvcnRNZXRhIGFzIGFueSkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNvcnRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmVzZXRJbmRleCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghcFRhYmxlLm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgIHBUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwVGFibGUubXVsdGlTb3J0TWV0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBldmVudC5maWVsZCxcbiAgICAgICAgICAgIG9yZGVyOiBwVGFibGUuZGVmYXVsdFNvcnRPcmRlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcFRhYmxlLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICBpZiAocmVzZXRJbmRleCkgcFRhYmxlLl9tdWx0aVNvcnRNZXRhID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmIChwVGFibGUuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgIHBUYWJsZS5zYXZlU3RhdGUoKTtcbiAgICAgIH1cblxuICAgICAgcFRhYmxlLmFuY2hvclJvd0luZGV4ID0gMDtcbiAgICAgIHRoaXMucmVzZXRTb3J0aW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHBUYWJsZS5zb3J0U2luZ2xlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZmllbGQgPSBwVGFibGUuc29ydEZpZWxkIHx8IHBUYWJsZS5ncm91cFJvd3NCeTtcbiAgICAgIGNvbnN0IG9yZGVyID0gcFRhYmxlLnNvcnRGaWVsZFxuICAgICAgICA/IHBUYWJsZS5zb3J0T3JkZXJcbiAgICAgICAgOiBwVGFibGUuZ3JvdXBSb3dzQnlPcmRlcjtcbiAgICAgIGlmIChcbiAgICAgICAgcFRhYmxlLmdyb3VwUm93c0J5ICYmXG4gICAgICAgIHBUYWJsZS5zb3J0RmllbGQgJiZcbiAgICAgICAgcFRhYmxlLmdyb3VwUm93c0J5ICE9PSBwVGFibGUuc29ydEZpZWxkXG4gICAgICApIHtcbiAgICAgICAgcFRhYmxlLl9tdWx0aVNvcnRNZXRhID0gW1xuICAgICAgICAgIHBUYWJsZS5nZXRHcm91cFJvd3NNZXRhKCksXG4gICAgICAgICAgeyBmaWVsZDogcFRhYmxlLnNvcnRGaWVsZCwgb3JkZXI6IHBUYWJsZS5zb3J0T3JkZXIgfVxuICAgICAgICBdO1xuICAgICAgICBwVGFibGUuc29ydE11bHRpcGxlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyICYmIChmaWVsZCB8fCB0aGlzLnJlc2V0U29ydGluZykpIHtcbiAgICAgICAgaWYgKHBUYWJsZS5yZXN0b3JpbmdTb3J0KSB7XG4gICAgICAgICAgcFRhYmxlLnJlc3RvcmluZ1NvcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwVGFibGUubGF6eSkge1xuICAgICAgICAgIHBUYWJsZS5vbkxhenlMb2FkLmVtaXQocFRhYmxlLmNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocFRhYmxlLnZhbHVlKSB7XG4gICAgICAgICAgaWYgKHBUYWJsZS5jdXN0b21Tb3J0KSB7XG4gICAgICAgICAgICBwVGFibGUuc29ydEZ1bmN0aW9uLmVtaXQoe1xuICAgICAgICAgICAgICBkYXRhOiBwVGFibGUudmFsdWUsXG4gICAgICAgICAgICAgIG1vZGU6IHBUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc29ydERhdGEoZmllbGQsIG9yZGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocFRhYmxlLmhhc0ZpbHRlcigpKSB7XG4gICAgICAgICAgICBwVGFibGUuX2ZpbHRlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvcnRNZXRhOiBTb3J0TWV0YSA9IHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBvcmRlclxuICAgICAgICB9O1xuXG4gICAgICAgIHBUYWJsZS5vblNvcnQuZW1pdChzb3J0TWV0YSk7XG4gICAgICAgIHBUYWJsZS50YWJsZVNlcnZpY2Uub25Tb3J0KHNvcnRNZXRhKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcFRhYmxlLnNvcnRNdWx0aXBsZSA9ICgpID0+IHtcbiAgICAgIGlmIChwVGFibGUuZ3JvdXBSb3dzQnkpIHtcbiAgICAgICAgaWYgKCFwVGFibGUuX211bHRpU29ydE1ldGEpXG4gICAgICAgICAgcFRhYmxlLl9tdWx0aVNvcnRNZXRhID0gW3BUYWJsZS5nZXRHcm91cFJvd3NNZXRhKCldO1xuICAgICAgICBlbHNlIGlmIChwVGFibGUubXVsdGlTb3J0TWV0YVswXS5maWVsZCAhPT0gcFRhYmxlLmdyb3VwUm93c0J5KVxuICAgICAgICAgIHBUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtcbiAgICAgICAgICAgIHBUYWJsZS5nZXRHcm91cFJvd3NNZXRhKCksXG4gICAgICAgICAgICAuLi5wVGFibGUuX211bHRpU29ydE1ldGFcbiAgICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChwVGFibGUubXVsdGlTb3J0TWV0YSAmJiBwVGFibGUubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB8fFxuICAgICAgICB0aGlzLnJlc2V0U29ydGluZ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChwVGFibGUubGF6eSkge1xuICAgICAgICAgIHBUYWJsZS5vbkxhenlMb2FkLmVtaXQocFRhYmxlLmNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocFRhYmxlLnZhbHVlKSB7XG4gICAgICAgICAgaWYgKHBUYWJsZS5jdXN0b21Tb3J0KSB7XG4gICAgICAgICAgICBwVGFibGUuc29ydEZ1bmN0aW9uLmVtaXQoe1xuICAgICAgICAgICAgICBkYXRhOiBwVGFibGUudmFsdWUsXG4gICAgICAgICAgICAgIG1vZGU6IHBUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICAgICAgbXVsdGlTb3J0TWV0YTogcFRhYmxlLm11bHRpU29ydE1ldGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0RGF0YSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwVGFibGUuaGFzRmlsdGVyKCkpIHtcbiAgICAgICAgICAgIHBUYWJsZS5fZmlsdGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcFRhYmxlLm9uU29ydC5lbWl0KHtcbiAgICAgICAgICBtdWx0aXNvcnRtZXRhOiBwVGFibGUubXVsdGlTb3J0TWV0YVxuICAgICAgICB9KTtcbiAgICAgICAgcFRhYmxlLnRhYmxlU2VydmljZS5vblNvcnQocFRhYmxlLm11bHRpU29ydE1ldGEpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXNldERlZmF1bHRTb3J0T3JkZXIoKSB7XG4gICAgdGhpcy5zb3J0SW5kaWNlcyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfc29ydERhdGEoZmllbGQ/OiBhbnksIG9yZGVyPzogYW55KSB7XG4gICAgLy8gcmVzdG9yZSBkZWZhdWx0IHNvcnQgb3JkZXJcbiAgICBpZiAodGhpcy5yZXNldFNvcnRpbmcgJiYgdGhpcy5zb3J0SW5kaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBUYWJsZS5fdmFsdWUgPSB0aGlzLnNvcnRJbmRpY2VzLm1hcChcbiAgICAgICAgKGluZGV4KSA9PiB0aGlzLnBUYWJsZS5fdmFsdWVbaW5kZXhdXG4gICAgICApO1xuICAgICAgdGhpcy5yZXNldERlZmF1bHRTb3J0T3JkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9Tb3J0OiBhbnlbXSA9IFtdO1xuICAgICAgaWYgKHRoaXMuc29ydEluZGljZXMubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aGlzLnNvcnRJbmRpY2VzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICB7IGxlbmd0aDogdGhpcy5wVGFibGUudmFsdWUubGVuZ3RoIH0sXG4gICAgICAgICAgKF8sIGluZGV4KSA9PiBpbmRleFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucFRhYmxlLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRvU29ydC5wdXNoKFt0aGlzLnBUYWJsZS52YWx1ZVtpXSwgdGhpcy5zb3J0SW5kaWNlcy5pbmRleE9mKGkpXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBUYWJsZS5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdG9Tb3J0LnNvcnQoKGRhdGExLCBkYXRhMikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZGF0YTFbMF0sIGZpZWxkKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGRhdGEyWzBdLCBmaWVsZCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucFRhYmxlLmNvbXBhcmVWYWx1ZXNPblNvcnQodmFsdWUxLCB2YWx1ZTIsIG9yZGVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b1NvcnQuc29ydCgoZGF0YTEsIGRhdGEyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpc29ydEZpZWxkKGRhdGExLCBkYXRhMiwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvU29ydC5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnNvcnRJbmRpY2VzW3RvU29ydFtpXVsxXV0gPSBpO1xuICAgICAgICB0aGlzLnBUYWJsZS52YWx1ZVtpXSA9IHRvU29ydFtpXVswXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBUYWJsZS5fdmFsdWUgPSBbLi4udGhpcy5wVGFibGUudmFsdWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBfbXVsdGlzb3J0RmllbGQoZGF0YTE6IGFueSwgZGF0YTI6IGFueSwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUxID0gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShcbiAgICAgIGRhdGExWzBdLFxuICAgICAgdGhpcy5wVGFibGUubXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGRcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlMiA9IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoXG4gICAgICBkYXRhMlswXSxcbiAgICAgIHRoaXMucFRhYmxlLm11bHRpU29ydE1ldGFbaW5kZXhdLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoT2JqZWN0VXRpbHMuY29tcGFyZSh2YWx1ZTEsIHZhbHVlMiwgdGhpcy5wVGFibGUuZmlsdGVyTG9jYWxlKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucFRhYmxlLm11bHRpU29ydE1ldGEubGVuZ3RoIC0gMSA+IGluZGV4XG4gICAgICAgID8gdGhpcy5fbXVsdGlzb3J0RmllbGQoZGF0YTEsIGRhdGEyLCBpbmRleCArIDEpXG4gICAgICAgIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucFRhYmxlLmNvbXBhcmVWYWx1ZXNPblNvcnQoXG4gICAgICB2YWx1ZTEsXG4gICAgICB2YWx1ZTIsXG4gICAgICB0aGlzLnBUYWJsZS5tdWx0aVNvcnRNZXRhW2luZGV4XS5vcmRlclxuICAgICk7XG4gIH1cbn1cbiJdfQ==