@one-grid-core/angular 0.1.0-beta.5 → 0.2.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.
- package/README.md +49 -4
- package/esm2022/lib/components/one-grid/one-grid.component.mjs +67 -16
- package/esm2022/lib/components/one-grid-body/one-grid-body.component.mjs +282 -30
- package/esm2022/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.mjs +10 -7
- package/esm2022/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.mjs +60 -4
- package/esm2022/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.mjs +14 -5
- package/esm2022/lib/components/one-grid-header/one-grid-header.component.mjs +50 -13
- package/esm2022/lib/components/one-grid-pagination/one-grid-pagination.component.mjs +39 -15
- package/esm2022/lib/components/one-grid-row-action/one-grid-row-action.component.mjs +54 -8
- package/esm2022/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.mjs +110 -0
- package/esm2022/lib/core/directives/one-cell-renderer-component.directive.mjs +9 -2
- package/esm2022/lib/core/directives/one-cell-text-expand.directive.mjs +33 -51
- package/esm2022/lib/core/instants/one-grid-api.class.mjs +429 -166
- package/esm2022/lib/core/instants/one-row-node.class.mjs +103 -37
- package/esm2022/lib/core/models/one-column-def-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-event-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-grid-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-row-drag.model.mjs +2 -0
- package/esm2022/lib/core/models/one-row.model.mjs +1 -1
- package/esm2022/lib/core/models/one-tree-data.model.mjs +1 -1
- package/esm2022/lib/core/models/one-validation.model.mjs +1 -1
- package/esm2022/lib/core/pipes/cell-field-value-empty.pipe.mjs +8 -3
- package/esm2022/lib/core/pipes/column-sort-state.pipe.mjs +3 -1
- package/esm2022/lib/core/services/og-column.service.mjs +120 -13
- package/esm2022/lib/core/services/one-grid-cell.service.mjs +123 -20
- package/esm2022/lib/core/services/one-grid-row-drag.service.mjs +351 -0
- package/esm2022/lib/core/services/one-grid-selection.service.mjs +19 -6
- package/esm2022/lib/helpers/one-column-def.helper.mjs +27 -2
- package/esm2022/lib/helpers/one-filter.helper.mjs +71 -12
- package/esm2022/lib/helpers/one-validation.helper.mjs +7 -2
- package/esm2022/lib/index.mjs +8 -1
- package/esm2022/lib/one-grid.module.mjs +7 -16
- package/fesm2022/one-grid-core-angular.mjs +2046 -503
- package/fesm2022/one-grid-core-angular.mjs.map +1 -1
- package/lib/components/one-grid/one-grid.component.d.ts +16 -1
- package/lib/components/one-grid-body/one-grid-body.component.d.ts +132 -5
- package/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.d.ts +6 -1
- package/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.d.ts +19 -2
- package/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.d.ts +5 -2
- package/lib/components/one-grid-header/one-grid-header.component.d.ts +15 -7
- package/lib/components/one-grid-pagination/one-grid-pagination.component.d.ts +24 -5
- package/lib/components/one-grid-row-action/one-grid-row-action.component.d.ts +44 -0
- package/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.d.ts +39 -0
- package/lib/core/directives/one-cell-text-expand.directive.d.ts +21 -9
- package/lib/core/instants/one-grid-api.class.d.ts +212 -26
- package/lib/core/instants/one-row-node.class.d.ts +67 -14
- package/lib/core/models/one-column-def-types.model.d.ts +89 -15
- package/lib/core/models/one-event-types.model.d.ts +24 -1
- package/lib/core/models/one-grid-types.model.d.ts +36 -1
- package/lib/core/models/one-row-drag.model.d.ts +44 -0
- package/lib/core/models/one-row.model.d.ts +0 -5
- package/lib/core/models/one-tree-data.model.d.ts +13 -0
- package/lib/core/models/one-validation.model.d.ts +12 -2
- package/lib/core/pipes/column-sort-state.pipe.d.ts +1 -1
- package/lib/core/services/og-column.service.d.ts +44 -3
- package/lib/core/services/one-grid-cell.service.d.ts +52 -4
- package/lib/core/services/one-grid-row-drag.service.d.ts +113 -0
- package/lib/core/services/one-grid-selection.service.d.ts +9 -0
- package/lib/helpers/one-column-def.helper.d.ts +19 -1
- package/lib/helpers/one-filter.helper.d.ts +29 -4
- package/lib/index.d.ts +7 -0
- package/lib/one-grid.module.d.ts +17 -19
- package/package.json +1 -2
- package/scss/_one-grid.scss +389 -17
- package/esm2022/lib/core/pipes/cell-disable-resolver.pipe.mjs +0 -26
- package/lib/core/pipes/cell-disable-resolver.pipe.d.ts +0 -9
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import lodash from 'lodash';
|
|
4
|
+
import { resolveColumnWidth, resolveOneCellRendererParams } from '../../helpers/one-column-def.helper';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class OgColumnService {
|
|
6
7
|
constructor() {
|
|
7
8
|
this.defaultColumnDef = null;
|
|
9
|
+
/**
|
|
10
|
+
* The grid's `context`, so header callbacks receive the same one cell
|
|
11
|
+
* callbacks do. Set during init; null in a bare service.
|
|
12
|
+
*/
|
|
13
|
+
this.context = null;
|
|
8
14
|
this.columnDefs$ = new BehaviorSubject([]);
|
|
9
15
|
this.groupColumnDefs$ = new BehaviorSubject([]);
|
|
10
16
|
}
|
|
11
|
-
initColumnDefs(defaultColumnDef, columnDefs, groupColumnDefs) {
|
|
17
|
+
initColumnDefs(defaultColumnDef, columnDefs, groupColumnDefs, context = null) {
|
|
12
18
|
this.defaultColumnDef = defaultColumnDef;
|
|
19
|
+
this.context = context;
|
|
13
20
|
this.setGroupColumnDefs(groupColumnDefs);
|
|
14
21
|
this.setColumnDefs(columnDefs);
|
|
15
22
|
}
|
|
@@ -19,7 +26,7 @@ export class OgColumnService {
|
|
|
19
26
|
return { columns, groups };
|
|
20
27
|
}
|
|
21
28
|
setGroupColumnDefs(groupColumnDefs) {
|
|
22
|
-
const groups = groupColumnDefs.map((group) => this.resolveGroupPresentation(group));
|
|
29
|
+
const groups = groupColumnDefs.map((group) => this.resolveGroupPresentation(group, { context: this.context }));
|
|
23
30
|
this.groupColumnDefs$.next(groups);
|
|
24
31
|
}
|
|
25
32
|
setColumnDefs(columnDefs) {
|
|
@@ -29,24 +36,86 @@ export class OgColumnService {
|
|
|
29
36
|
...col,
|
|
30
37
|
id: col?.field ? col.field : lodash.uniqueId('col_'),
|
|
31
38
|
};
|
|
32
|
-
return this.
|
|
39
|
+
return this.resolveHeaderPresentation(column);
|
|
33
40
|
});
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
41
|
+
const ordered = this.applyPinning(columns);
|
|
42
|
+
this.recalculateGroups(ordered);
|
|
43
|
+
this.columnDefs$.next(ordered);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Move pinned columns to their edge and measure how far in each one sits.
|
|
47
|
+
*
|
|
48
|
+
* Display order becomes left-pinned, unpinned, right-pinned, with declared
|
|
49
|
+
* order preserved inside each band. `_pinnedOffset` is the distance from that
|
|
50
|
+
* column's own edge — the sum of the widths of the pinned columns outside it
|
|
51
|
+
* — which is what the sticky `left` / `right` binding needs.
|
|
52
|
+
*
|
|
53
|
+
* With nothing pinned this returns the same array, in the same order, so a
|
|
54
|
+
* grid that does not use the feature is unaffected.
|
|
55
|
+
*/
|
|
56
|
+
applyPinning(columns) {
|
|
57
|
+
const left = columns.filter(column => column.pinned === 'left');
|
|
58
|
+
const right = columns.filter(column => column.pinned === 'right');
|
|
59
|
+
if (!left.length && !right.length) {
|
|
60
|
+
for (const column of columns) {
|
|
61
|
+
column._pinnedOffset = null;
|
|
62
|
+
column._pinnedEdge = false;
|
|
63
|
+
}
|
|
64
|
+
return columns;
|
|
65
|
+
}
|
|
66
|
+
const center = columns.filter(column => column.pinned !== 'left' && column.pinned !== 'right');
|
|
67
|
+
let offset = 0;
|
|
68
|
+
for (const column of left) {
|
|
69
|
+
column._pinnedOffset = offset;
|
|
70
|
+
column._pinnedEdge = false;
|
|
71
|
+
offset += resolveColumnWidth(column);
|
|
72
|
+
}
|
|
73
|
+
// Right-pinned columns are measured from the right edge inwards, so the
|
|
74
|
+
// last declared one sits flush and the earlier ones stack outside it.
|
|
75
|
+
offset = 0;
|
|
76
|
+
for (let index = right.length - 1; index >= 0; index--) {
|
|
77
|
+
right[index]._pinnedOffset = offset;
|
|
78
|
+
right[index]._pinnedEdge = false;
|
|
79
|
+
offset += resolveColumnWidth(right[index]);
|
|
80
|
+
}
|
|
81
|
+
for (const column of center) {
|
|
82
|
+
column._pinnedOffset = null;
|
|
83
|
+
column._pinnedEdge = false;
|
|
84
|
+
}
|
|
85
|
+
// Only the innermost column of each band carries the divider, so stacked
|
|
86
|
+
// pinned columns do not each cast a shadow onto the next.
|
|
87
|
+
if (left.length)
|
|
88
|
+
left[left.length - 1]._pinnedEdge = true;
|
|
89
|
+
if (right.length)
|
|
90
|
+
right[0]._pinnedEdge = true;
|
|
91
|
+
return [...left, ...center, ...right];
|
|
92
|
+
}
|
|
93
|
+
/** Total width of the columns frozen against the given edge. */
|
|
94
|
+
getPinnedWidth(side) {
|
|
95
|
+
return this.columnDefs$.getValue()
|
|
96
|
+
.filter(column => column.pinned === side)
|
|
97
|
+
.reduce((total, column) => total + resolveColumnWidth(column), 0);
|
|
36
98
|
}
|
|
37
99
|
// Update single column
|
|
38
100
|
updateColumnDef(id, changes) {
|
|
39
101
|
const columns = this.getColumnState().columns;
|
|
40
102
|
const updatedColumns = columns.map(col => col.id === id ? { ...col, ...changes } : col);
|
|
41
|
-
|
|
42
|
-
this
|
|
103
|
+
// Re-pinned, not just re-grouped: resizing a pinned column changes where
|
|
104
|
+
// the ones inside it have to sit, and this is the path a column resize
|
|
105
|
+
// takes.
|
|
106
|
+
const ordered = this.applyPinning(updatedColumns);
|
|
107
|
+
this.recalculateGroups(ordered);
|
|
108
|
+
this.columnDefs$.next(ordered);
|
|
43
109
|
}
|
|
44
110
|
// Reorder columns
|
|
45
111
|
reorderColumnDefs(fromIndex, toIndex) {
|
|
46
112
|
const columns = lodash.clone(this.getColumnState().columns);
|
|
47
113
|
const [moved] = columns.splice(fromIndex, 1);
|
|
48
114
|
columns.splice(toIndex, 0, moved);
|
|
49
|
-
|
|
115
|
+
// Dragging can drop a column between two pinned ones; re-pinning puts the
|
|
116
|
+
// bands back in order rather than leaving them interleaved, which would
|
|
117
|
+
// make the computed offsets meaningless.
|
|
118
|
+
this.columnDefs$.next(this.applyPinning(columns));
|
|
50
119
|
}
|
|
51
120
|
/**
|
|
52
121
|
* Group Header Columns
|
|
@@ -55,7 +124,7 @@ export class OgColumnService {
|
|
|
55
124
|
if (this.groupColumnDefs$.getValue().length > 0) {
|
|
56
125
|
const groups = this.groupColumnDefs$.value.map(group => ({
|
|
57
126
|
...group,
|
|
58
|
-
width: columnDefs.filter(c => c.groupId === group.id).reduce((sum, col) => sum + (col
|
|
127
|
+
width: columnDefs.filter(c => c.groupId === group.id).reduce((sum, col) => sum + resolveColumnWidth(col), 0)
|
|
59
128
|
}));
|
|
60
129
|
this.groupColumnDefs$.next(groups);
|
|
61
130
|
}
|
|
@@ -65,17 +134,55 @@ export class OgColumnService {
|
|
|
65
134
|
col._resolvedGroupStyle = typeof col.groupStyle === 'function' ? col.groupStyle(params) : col.groupStyle;
|
|
66
135
|
return col;
|
|
67
136
|
}
|
|
68
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Resolve a column's header presentation. Once per column, when the columns
|
|
139
|
+
* are set — a header is one cell for the whole column, so there is no row to
|
|
140
|
+
* resolve it against and nothing to redo per render.
|
|
141
|
+
*
|
|
142
|
+
* This used to resolve the cell hooks too, from the same call, with no params
|
|
143
|
+
* at all. Two bugs came out of that: any callback touching `params` threw a
|
|
144
|
+
* TypeError at init, and the header's resolved value was then overwritten by
|
|
145
|
+
* every cell that rendered, since the body re-ran the same method per cell
|
|
146
|
+
* with row params. In dev mode the disagreement surfaced as NG0100.
|
|
147
|
+
*/
|
|
148
|
+
resolveHeaderPresentation(col) {
|
|
149
|
+
const params = {
|
|
150
|
+
columnDef: col,
|
|
151
|
+
field: col.field,
|
|
152
|
+
context: this.context,
|
|
153
|
+
};
|
|
69
154
|
col._resolvedHeaderClass = typeof col.headerClass === 'function' ? col.headerClass(params) : col.headerClass;
|
|
70
155
|
col._resolvedHeaderStyle = typeof col.headerStyle === 'function' ? col.headerStyle(params) : col.headerStyle;
|
|
71
|
-
|
|
72
|
-
|
|
156
|
+
// The header's own predicates. Declared as `boolean | ((params) => boolean)`
|
|
157
|
+
// and read straight off the column in the template, where a function is
|
|
158
|
+
// simply truthy — so `sortable: () => false` rendered a sort button that a
|
|
159
|
+
// consumer had explicitly asked not to have. Resolved here to a real
|
|
160
|
+
// boolean, once, because none of them depends on a row.
|
|
161
|
+
col._resolvedSortable = resolveOneCellRendererParams(col.sortable, params);
|
|
162
|
+
col._resolvedResizable = resolveOneCellRendererParams(col.resizable, params);
|
|
163
|
+
col._resolvedDragable = resolveOneCellRendererParams(col.dragable, params);
|
|
164
|
+
col._resolvedSuppressHeaderMenuButton = resolveOneCellRendererParams(col.suppressHeaderMenuButton, params);
|
|
73
165
|
return col;
|
|
74
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolve one cell's class, for one row.
|
|
169
|
+
*
|
|
170
|
+
* Pure: the result is returned rather than written back onto the column def,
|
|
171
|
+
* which every row of that column shares. Writing to it worked only because
|
|
172
|
+
* the template resolved and read in the same expression — one render order
|
|
173
|
+
* away from every row showing the last row's class.
|
|
174
|
+
*/
|
|
175
|
+
resolveCellClass(col, params) {
|
|
176
|
+
return typeof col?.cellClass === 'function' ? col.cellClass(params) : col?.cellClass;
|
|
177
|
+
}
|
|
178
|
+
/** Resolve one cell's inline style, for one row. Pure, as above. */
|
|
179
|
+
resolveCellStyle(col, params) {
|
|
180
|
+
return typeof col?.cellStyle === 'function' ? col.cellStyle(params) : col?.cellStyle;
|
|
181
|
+
}
|
|
75
182
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OgColumnService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
76
183
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OgColumnService }); }
|
|
77
184
|
}
|
|
78
185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OgColumnService, decorators: [{
|
|
79
186
|
type: Injectable
|
|
80
187
|
}] });
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ctY29sdW1uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvc2VydmljZXMvb2ctY29sdW1uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7QUFJNUIsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFHVSxxQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFzQixFQUFFLENBQUMsQ0FBQztLQXVHekU7SUFyR0MsY0FBYyxDQUFDLGdCQUE4QixFQUFFLFVBQTBCLEVBQUUsZUFBb0M7UUFFN0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXpDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBRVosTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBb0M7UUFFckQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FB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QUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNyRyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUVyRyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBMUdVLGVBQWU7bUhBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25lQ2VsbFJlbmRlcmVyUGFyYW1zLCBPbmVDb2x1bW5EZWYsIE9uZUdyb3VwQ29sdW1uRGVmIH0gZnJvbSAnLi4vbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbHVtbkNoYW5nZWRFdmVudCB9IGZyb20gJy4uL21vZGVscy9vbmUtZXZlbnQtdHlwZXMubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2dDb2x1bW5TZXJ2aWNlIHtcblxuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiA9IG51bGw7XG4gIHByaXZhdGUgY29sdW1uRGVmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uZUNvbHVtbkRlZltdPihbXSk7XG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5EZWZzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T25lR3JvdXBDb2x1bW5EZWZbXT4oW10pO1xuXG4gIGluaXRDb2x1bW5EZWZzKGRlZmF1bHRDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiwgY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10sIGdyb3VwQ29sdW1uRGVmczogT25lR3JvdXBDb2x1bW5EZWZbXSk6IHZvaWQge1xuXG4gICAgdGhpcy5kZWZhdWx0Q29sdW1uRGVmID0gZGVmYXVsdENvbHVtbkRlZjtcblxuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5EZWZzKGdyb3VwQ29sdW1uRGVmcyk7XG4gICAgXG4gICAgdGhpcy5zZXRDb2x1bW5EZWZzKGNvbHVtbkRlZnMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uU3RhdGUoKTogQ29sdW1uQ2hhbmdlZEV2ZW50IHtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbkRlZnMkLmdldFZhbHVlKCk7XG5cbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwQ29sdW1uRGVmcyQuZ2V0VmFsdWUoKTtcblxuICAgIHJldHVybiB7IGNvbHVtbnMsIGdyb3VwcyB9O1xuICB9XG5cbiAgc2V0R3JvdXBDb2x1bW5EZWZzKGdyb3VwQ29sdW1uRGVmczogT25lR3JvdXBDb2x1bW5EZWZbXSk6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXBzID0gZ3JvdXBDb2x1bW5EZWZzLm1hcCgoZ3JvdXA6IE9uZUdyb3VwQ29sdW1uRGVmKSA9PiB0aGlzLnJlc29sdmVHcm91cFByZXNlbnRhdGlvbihncm91cCkpO1xuXG4gICAgdGhpcy5ncm91cENvbHVtbkRlZnMkLm5leHQoZ3JvdXBzKTtcbiAgfVxuXG4gIHNldENvbHVtbkRlZnMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10pOiB2b2lkIHtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5EZWZzLm1hcCgoY29sOiBPbmVDb2x1bW5EZWYpID0+IHtcblxuICAgICAgY29uc3QgY29sdW1uID0ge1xuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb2x1bW5EZWYsXG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgaWQ6IGNvbD8uZmllbGQgPyBjb2wuZmllbGQgOiBsb2Rhc2gudW5pcXVlSWQoJ2NvbF8nKSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDZWxsUHJlc2VudGF0aW9uKGNvbHVtbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlR3JvdXBzKGNvbHVtbnMpO1xuXG4gICAgdGhpcy5jb2x1bW5EZWZzJC5uZXh0KGNvbHVtbnMpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHNpbmdsZSBjb2x1bW5cbiAgdXBkYXRlQ29sdW1uRGVmKGlkOiBzdHJpbmcsIGNoYW5nZXM6IFBhcnRpYWw8T25lQ29sdW1uRGVmPik6IHZvaWQge1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uU3RhdGUoKS5jb2x1bW5zO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSBjb2x1bW5zLm1hcChjb2wgPT4gY29sLmlkID09PSBpZCA/IHsgLi4uY29sLCAuLi5jaGFuZ2VzIH0gOiBjb2wpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3Vwcyh1cGRhdGVkQ29sdW1ucyk7XG4gICAgXG4gICAgdGhpcy5jb2x1bW5EZWZzJC5uZXh0KHVwZGF0ZWRDb2x1bW5zKTtcbiAgfVxuXG4gIC8vIFJlb3JkZXIgY29sdW1uc1xuICByZW9yZGVyQ29sdW1uRGVmcyhmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gbG9kYXNoLmNsb25lKHRoaXMuZ2V0Q29sdW1uU3RhdGUoKS5jb2x1bW5zKTtcblxuICAgIGNvbnN0IFttb3ZlZF0gPSBjb2x1bW5zLnNwbGljZShmcm9tSW5kZXgsIDEpO1xuXG4gICAgY29sdW1ucy5zcGxpY2UodG9JbmRleCwgMCwgbW92ZWQpO1xuXG4gICAgdGhpcy5jb2x1bW5EZWZzJC5uZXh0KGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIEhlYWRlciBDb2x1bW5zXG4gICAqL1xuICBwcml2YXRlIHJlY2FsY3VsYXRlR3JvdXBzKGNvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdKSB7XG5cbiAgICBpZiAodGhpcy5ncm91cENvbHVtbkRlZnMkLmdldFZhbHVlKCkubGVuZ3RoID4gMCkge1xuXG4gICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwQ29sdW1uRGVmcyQudmFsdWUubWFwKGdyb3VwID0+ICh7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICB3aWR0aDogY29sdW1uRGVmcy5maWx0ZXIoYyA9PiBjLmdyb3VwSWQgPT09IGdyb3VwLmlkKS5yZWR1Y2UoKHN1bSwgY29sKSA9PiBzdW0gKyAoY29sLndpZHRoID8gY29sLndpZHRoID4gY29sLm1heFdpZHRoID8gY29sLm1heFdpZHRoIDogY29sLndpZHRoIDwgY29sLm1pbldpZHRoID8gY29sLm1pbldpZHRoIDogY29sLndpZHRoIDogY29sLm1pbldpZHRoKSwgMClcbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5ncm91cENvbHVtbkRlZnMkLm5leHQoZ3JvdXBzKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlR3JvdXBQcmVzZW50YXRpb24oY29sOiBPbmVHcm91cENvbHVtbkRlZiwgcGFyYW1zPzogT25lQ2VsbFJlbmRlcmVyUGFyYW1zKTogT25lR3JvdXBDb2x1bW5EZWYge1xuXG4gICAgY29sLl9yZXNvbHZlZEdyb3VwQ2xhc3MgPSB0eXBlb2YgY29sLmdyb3VwQ2xhc3MgPT09ICdmdW5jdGlvbicgPyBjb2wuZ3JvdXBDbGFzcyhwYXJhbXMpIDogY29sLmdyb3VwQ2xhc3M7XG4gICAgY29sLl9yZXNvbHZlZEdyb3VwU3R5bGUgPSB0eXBlb2YgY29sLmdyb3VwU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjb2wuZ3JvdXBTdHlsZShwYXJhbXMpIDogY29sLmdyb3VwU3R5bGU7XG5cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxQcmVzZW50YXRpb24oY29sOiBPbmVDb2x1bW5EZWYsIHBhcmFtcz86IE9uZUNlbGxSZW5kZXJlclBhcmFtcyk6IE9uZUNvbHVtbkRlZiB7XG5cbiAgICBjb2wuX3Jlc29sdmVkSGVhZGVyQ2xhc3MgPSB0eXBlb2YgY29sLmhlYWRlckNsYXNzID09PSAnZnVuY3Rpb24nID8gY29sLmhlYWRlckNsYXNzKHBhcmFtcykgOiBjb2wuaGVhZGVyQ2xhc3M7XG4gICAgY29sLl9yZXNvbHZlZEhlYWRlclN0eWxlID0gdHlwZW9mIGNvbC5oZWFkZXJTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5oZWFkZXJTdHlsZShwYXJhbXMpIDogY29sLmhlYWRlclN0eWxlO1xuXG4gICAgY29sLl9yZXNvbHZlZENlbGxDbGFzcyA9IHR5cGVvZiBjb2wuY2VsbENsYXNzID09PSAnZnVuY3Rpb24nID8gY29sLmNlbGxDbGFzcyhwYXJhbXMpIDogY29sLmNlbGxDbGFzcztcbiAgICBjb2wuX3Jlc29sdmVkQ2VsbFN0eWxlID0gdHlwZW9mIGNvbC5jZWxsU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjb2wuY2VsbFN0eWxlKHBhcmFtcykgOiBjb2wuY2VsbFN0eWxlO1xuXG4gICAgcmV0dXJuIGNvbDtcbiAgfVxufSJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ctY29sdW1uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvc2VydmljZXMvb2ctY29sdW1uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFHdkcsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFHVSxxQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO1FBRTlDOzs7V0FHRztRQUNLLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXNCLEVBQUUsQ0FBQyxDQUFDO0tBdU96RTtJQXJPQyxjQUFjLENBQUMsZ0JBQThCLEVBQUUsVUFBMEIsRUFBRSxlQUFvQyxFQUFFLFVBQW1CLElBQUk7UUFFdEksSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXpDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBRVosTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFF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Q3ZGLENBQUM7K0dBaFBVLGVBQWU7bUhBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcywgT25lQ2VsbFJlbmRlcmVyUGFyYW1zLCBPbmVDb2x1bW5EZWYsIE9uZUdyb3VwQ29sdW1uRGVmLCBPbmVIZWFkZXJQcmVzZW50YXRpb25QYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWwnO1xuaW1wb3J0IGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29sdW1uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL29uZS1ldmVudC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyByZXNvbHZlQ29sdW1uV2lkdGgsIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL29uZS1jb2x1bW4tZGVmLmhlbHBlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPZ0NvbHVtblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGVmYXVsdENvbHVtbkRlZjogT25lQ29sdW1uRGVmID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIGdyaWQncyBgY29udGV4dGAsIHNvIGhlYWRlciBjYWxsYmFja3MgcmVjZWl2ZSB0aGUgc2FtZSBvbmUgY2VsbFxuICAgKiBjYWxsYmFja3MgZG8uIFNldCBkdXJpbmcgaW5pdDsgbnVsbCBpbiBhIGJhcmUgc2VydmljZS5cbiAgICovXG4gIHByaXZhdGUgY29udGV4dDogdW5rbm93biA9IG51bGw7XG4gIHByaXZhdGUgY29sdW1uRGVmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uZUNvbHVtbkRlZltdPihbXSk7XG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5EZWZzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T25lR3JvdXBDb2x1bW5EZWZbXT4oW10pO1xuXG4gIGluaXRDb2x1bW5EZWZzKGRlZmF1bHRDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiwgY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10sIGdyb3VwQ29sdW1uRGVmczogT25lR3JvdXBDb2x1bW5EZWZbXSwgY29udGV4dDogdW5rbm93biA9IG51bGwpOiB2b2lkIHtcblxuICAgIHRoaXMuZGVmYXVsdENvbHVtbkRlZiA9IGRlZmF1bHRDb2x1bW5EZWY7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdGhpcy5zZXRHcm91cENvbHVtbkRlZnMoZ3JvdXBDb2x1bW5EZWZzKTtcbiAgICBcbiAgICB0aGlzLnNldENvbHVtbkRlZnMoY29sdW1uRGVmcyk7XG4gIH1cblxuICBnZXRDb2x1bW5TdGF0ZSgpOiBDb2x1bW5DaGFuZ2VkRXZlbnQge1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcyQuZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBDb2x1bW5EZWZzJC5nZXRWYWx1ZSgpO1xuXG4gICAgcmV0dXJuIHsgY29sdW1ucywgZ3JvdXBzIH07XG4gIH1cblxuICBzZXRHcm91cENvbHVtbkRlZnMoZ3JvdXBDb2x1bW5EZWZzOiBPbmVHcm91cENvbHVtbkRlZltdKTogdm9pZCB7XG5cbiAgICBjb25zdCBncm91cHMgPSBncm91cENvbHVtbkRlZnMubWFwKChncm91cDogT25lR3JvdXBDb2x1bW5EZWYpID0+IHRoaXMucmVzb2x2ZUdyb3VwUHJlc2VudGF0aW9uKGdyb3VwLCB7IGNvbnRleHQ6IHRoaXMuY29udGV4dCB9KSk7XG5cbiAgICB0aGlzLmdyb3VwQ29sdW1uRGVmcyQubmV4dChncm91cHMpO1xuICB9XG5cbiAgc2V0Q29sdW1uRGVmcyhjb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWZbXSk6IHZvaWQge1xuXG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChjb2w6IE9uZUNvbHVtbkRlZikgPT4ge1xuXG4gICAgICBjb25zdCBjb2x1bW4gPSB7XG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbHVtbkRlZixcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBpZDogY29sPy5maWVsZCA/IGNvbC5maWVsZCA6IGxvZGFzaC51bmlxdWVJZCgnY29sXycpLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUhlYWRlclByZXNlbnRhdGlvbihjb2x1bW4pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMuYXBwbHlQaW5uaW5nKGNvbHVtbnMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3VwcyhvcmRlcmVkKTtcblxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dChvcmRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHBpbm5lZCBjb2x1bW5zIHRvIHRoZWlyIGVkZ2UgYW5kIG1lYXN1cmUgaG93IGZhciBpbiBlYWNoIG9uZSBzaXRzLlxuICAgKlxuICAgKiBEaXNwbGF5IG9yZGVyIGJlY29tZXMgbGVmdC1waW5uZWQsIHVucGlubmVkLCByaWdodC1waW5uZWQsIHdpdGggZGVjbGFyZWRcbiAgICogb3JkZXIgcHJlc2VydmVkIGluc2lkZSBlYWNoIGJhbmQuIGBfcGlubmVkT2Zmc2V0YCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGF0XG4gICAqIGNvbHVtbidzIG93biBlZGdlIOKAlCB0aGUgc3VtIG9mIHRoZSB3aWR0aHMgb2YgdGhlIHBpbm5lZCBjb2x1bW5zIG91dHNpZGUgaXRcbiAgICog4oCUIHdoaWNoIGlzIHdoYXQgdGhlIHN0aWNreSBgbGVmdGAgLyBgcmlnaHRgIGJpbmRpbmcgbmVlZHMuXG4gICAqXG4gICAqIFdpdGggbm90aGluZyBwaW5uZWQgdGhpcyByZXR1cm5zIHRoZSBzYW1lIGFycmF5LCBpbiB0aGUgc2FtZSBvcmRlciwgc28gYVxuICAgKiBncmlkIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBmZWF0dXJlIGlzIHVuYWZmZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UGlubmluZyhjb2x1bW5zOiBPbmVDb2x1bW5EZWZbXSk6IE9uZUNvbHVtbkRlZltdIHtcblxuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnBpbm5lZCA9PT0gJ2xlZnQnKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSAncmlnaHQnKTtcblxuICAgIGlmICghbGVmdC5sZW5ndGggJiYgIXJpZ2h0Lmxlbmd0aCkge1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cbiAgICAgICAgY29sdW1uLl9waW5uZWRPZmZzZXQgPSBudWxsO1xuICAgICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgY29uc3QgY2VudGVyID0gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5waW5uZWQgIT09ICdsZWZ0JyAmJiBjb2x1bW4ucGlubmVkICE9PSAncmlnaHQnKTtcblxuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgbGVmdCkge1xuXG4gICAgICBjb2x1bW4uX3Bpbm5lZE9mZnNldCA9IG9mZnNldDtcbiAgICAgIGNvbHVtbi5fcGlubmVkRWRnZSA9IGZhbHNlO1xuXG4gICAgICBvZmZzZXQgKz0gcmVzb2x2ZUNvbHVtbldpZHRoKGNvbHVtbik7XG4gICAgfVxuXG4gICAgLy8gUmlnaHQtcGlubmVkIGNvbHVtbnMgYXJlIG1lYXN1cmVkIGZyb20gdGhlIHJpZ2h0IGVkZ2UgaW53YXJkcywgc28gdGhlXG4gICAgLy8gbGFzdCBkZWNsYXJlZCBvbmUgc2l0cyBmbHVzaCBhbmQgdGhlIGVhcmxpZXIgb25lcyBzdGFjayBvdXRzaWRlIGl0LlxuICAgIG9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IHJpZ2h0Lmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcblxuICAgICAgcmlnaHRbaW5kZXhdLl9waW5uZWRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICByaWdodFtpbmRleF0uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcblxuICAgICAgb2Zmc2V0ICs9IHJlc29sdmVDb2x1bW5XaWR0aChyaWdodFtpbmRleF0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNlbnRlcikge1xuXG4gICAgICBjb2x1bW4uX3Bpbm5lZE9mZnNldCA9IG51bGw7XG4gICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBpbm5lcm1vc3QgY29sdW1uIG9mIGVhY2ggYmFuZCBjYXJyaWVzIHRoZSBkaXZpZGVyLCBzbyBzdGFja2VkXG4gICAgLy8gcGlubmVkIGNvbHVtbnMgZG8gbm90IGVhY2ggY2FzdCBhIHNoYWRvdyBvbnRvIHRoZSBuZXh0LlxuICAgIGlmIChsZWZ0Lmxlbmd0aCkgbGVmdFtsZWZ0Lmxlbmd0aCAtIDFdLl9waW5uZWRFZGdlID0gdHJ1ZTtcbiAgICBpZiAocmlnaHQubGVuZ3RoKSByaWdodFswXS5fcGlubmVkRWRnZSA9IHRydWU7XG5cbiAgICByZXR1cm4gWy4uLmxlZnQsIC4uLmNlbnRlciwgLi4ucmlnaHRdO1xuICB9XG5cbiAgLyoqIFRvdGFsIHdpZHRoIG9mIHRoZSBjb2x1bW5zIGZyb3plbiBhZ2FpbnN0IHRoZSBnaXZlbiBlZGdlLiAqL1xuICBwdWJsaWMgZ2V0UGlubmVkV2lkdGgoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IG51bWJlciB7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzJC5nZXRWYWx1ZSgpXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSBzaWRlKVxuICAgICAgLnJlZHVjZSgodG90YWwsIGNvbHVtbikgPT4gdG90YWwgKyByZXNvbHZlQ29sdW1uV2lkdGgoY29sdW1uKSwgMCk7XG4gIH1cblxuICAvLyBVcGRhdGUgc2luZ2xlIGNvbHVtblxuICB1cGRhdGVDb2x1bW5EZWYoaWQ6IHN0cmluZywgY2hhbmdlczogUGFydGlhbDxPbmVDb2x1bW5EZWY+KTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5TdGF0ZSgpLmNvbHVtbnM7XG5cbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IGNvbHVtbnMubWFwKGNvbCA9PiBjb2wuaWQgPT09IGlkID8geyAuLi5jb2wsIC4uLmNoYW5nZXMgfSA6IGNvbCk7XG5cbiAgICAvLyBSZS1waW5uZWQsIG5vdCBqdXN0IHJlLWdyb3VwZWQ6IHJlc2l6aW5nIGEgcGlubmVkIGNvbHVtbiBjaGFuZ2VzIHdoZXJlXG4gICAgLy8gdGhlIG9uZXMgaW5zaWRlIGl0IGhhdmUgdG8gc2l0LCBhbmQgdGhpcyBpcyB0aGUgcGF0aCBhIGNvbHVtbiByZXNpemVcbiAgICAvLyB0YWtlcy5cbiAgICBjb25zdCBvcmRlcmVkID0gdGhpcy5hcHBseVBpbm5pbmcodXBkYXRlZENvbHVtbnMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3VwcyhvcmRlcmVkKTtcblxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dChvcmRlcmVkKTtcbiAgfVxuXG4gIC8vIFJlb3JkZXIgY29sdW1uc1xuICByZW9yZGVyQ29sdW1uRGVmcyhmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gbG9kYXNoLmNsb25lKHRoaXMuZ2V0Q29sdW1uU3RhdGUoKS5jb2x1bW5zKTtcblxuICAgIGNvbnN0IFttb3ZlZF0gPSBjb2x1bW5zLnNwbGljZShmcm9tSW5kZXgsIDEpO1xuXG4gICAgY29sdW1ucy5zcGxpY2UodG9JbmRleCwgMCwgbW92ZWQpO1xuXG4gICAgLy8gRHJhZ2dpbmcgY2FuIGRyb3AgYSBjb2x1bW4gYmV0d2VlbiB0d28gcGlubmVkIG9uZXM7IHJlLXBpbm5pbmcgcHV0cyB0aGVcbiAgICAvLyBiYW5kcyBiYWNrIGluIG9yZGVyIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBpbnRlcmxlYXZlZCwgd2hpY2ggd291bGRcbiAgICAvLyBtYWtlIHRoZSBjb21wdXRlZCBvZmZzZXRzIG1lYW5pbmdsZXNzLlxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dCh0aGlzLmFwcGx5UGlubmluZyhjb2x1bW5zKSk7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXAgSGVhZGVyIENvbHVtbnNcbiAgICovXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVHcm91cHMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10pIHtcblxuICAgIGlmICh0aGlzLmdyb3VwQ29sdW1uRGVmcyQuZ2V0VmFsdWUoKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBDb2x1bW5EZWZzJC52YWx1ZS5tYXAoZ3JvdXAgPT4gKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIHdpZHRoOiBjb2x1bW5EZWZzLmZpbHRlcihjID0+IGMuZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpLnJlZHVjZSgoc3VtLCBjb2wpID0+IHN1bSArIHJlc29sdmVDb2x1bW5XaWR0aChjb2wpLCAwKVxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLmdyb3VwQ29sdW1uRGVmcyQubmV4dChncm91cHMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVHcm91cFByZXNlbnRhdGlvbihjb2w6IE9uZUdyb3VwQ29sdW1uRGVmLCBwYXJhbXM/OiBPbmVDZWxsUmVuZGVyZXJQYXJhbXMpOiBPbmVHcm91cENvbHVtbkRlZiB7XG5cbiAgICBjb2wuX3Jlc29sdmVkR3JvdXBDbGFzcyA9IHR5cGVvZiBjb2wuZ3JvdXBDbGFzcyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5ncm91cENsYXNzKHBhcmFtcykgOiBjb2wuZ3JvdXBDbGFzcztcbiAgICBjb2wuX3Jlc29sdmVkR3JvdXBTdHlsZSA9IHR5cGVvZiBjb2wuZ3JvdXBTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5ncm91cFN0eWxlKHBhcmFtcykgOiBjb2wuZ3JvdXBTdHlsZTtcblxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIGNvbHVtbidzIGhlYWRlciBwcmVzZW50YXRpb24uIE9uY2UgcGVyIGNvbHVtbiwgd2hlbiB0aGUgY29sdW1uc1xuICAgKiBhcmUgc2V0IOKAlCBhIGhlYWRlciBpcyBvbmUgY2VsbCBmb3IgdGhlIHdob2xlIGNvbHVtbiwgc28gdGhlcmUgaXMgbm8gcm93IHRvXG4gICAqIHJlc29sdmUgaXQgYWdhaW5zdCBhbmQgbm90aGluZyB0byByZWRvIHBlciByZW5kZXIuXG4gICAqXG4gICAqIFRoaXMgdXNlZCB0byByZXNvbHZlIHRoZSBjZWxsIGhvb2tzIHRvbywgZnJvbSB0aGUgc2FtZSBjYWxsLCB3aXRoIG5vIHBhcmFtc1xuICAgKiBhdCBhbGwuIFR3byBidWdzIGNhbWUgb3V0IG9mIHRoYXQ6IGFueSBjYWxsYmFjayB0b3VjaGluZyBgcGFyYW1zYCB0aHJldyBhXG4gICAqIFR5cGVFcnJvciBhdCBpbml0LCBhbmQgdGhlIGhlYWRlcidzIHJlc29sdmVkIHZhbHVlIHdhcyB0aGVuIG92ZXJ3cml0dGVuIGJ5XG4gICAqIGV2ZXJ5IGNlbGwgdGhhdCByZW5kZXJlZCwgc2luY2UgdGhlIGJvZHkgcmUtcmFuIHRoZSBzYW1lIG1ldGhvZCBwZXIgY2VsbFxuICAgKiB3aXRoIHJvdyBwYXJhbXMuIEluIGRldiBtb2RlIHRoZSBkaXNhZ3JlZW1lbnQgc3VyZmFjZWQgYXMgTkcwMTAwLlxuICAgKi9cbiAgcmVzb2x2ZUhlYWRlclByZXNlbnRhdGlvbihjb2w6IE9uZUNvbHVtbkRlZik6IE9uZUNvbHVtbkRlZiB7XG5cbiAgICBjb25zdCBwYXJhbXM6IE9uZUhlYWRlclByZXNlbnRhdGlvblBhcmFtcyA9IHtcbiAgICAgIGNvbHVtbkRlZjogY29sLFxuICAgICAgZmllbGQ6IGNvbC5maWVsZCBhcyBzdHJpbmcsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgfTtcblxuICAgIGNvbC5fcmVzb2x2ZWRIZWFkZXJDbGFzcyA9IHR5cGVvZiBjb2wuaGVhZGVyQ2xhc3MgPT09ICdmdW5jdGlvbicgPyBjb2wuaGVhZGVyQ2xhc3MocGFyYW1zKSA6IGNvbC5oZWFkZXJDbGFzcztcbiAgICBjb2wuX3Jlc29sdmVkSGVhZGVyU3R5bGUgPSB0eXBlb2YgY29sLmhlYWRlclN0eWxlID09PSAnZnVuY3Rpb24nID8gY29sLmhlYWRlclN0eWxlKHBhcmFtcykgOiBjb2wuaGVhZGVyU3R5bGU7XG5cbiAgICAvLyBUaGUgaGVhZGVyJ3Mgb3duIHByZWRpY2F0ZXMuIERlY2xhcmVkIGFzIGBib29sZWFuIHwgKChwYXJhbXMpID0+IGJvb2xlYW4pYFxuICAgIC8vIGFuZCByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgY29sdW1uIGluIHRoZSB0ZW1wbGF0ZSwgd2hlcmUgYSBmdW5jdGlvbiBpc1xuICAgIC8vIHNpbXBseSB0cnV0aHkg4oCUIHNvIGBzb3J0YWJsZTogKCkgPT4gZmFsc2VgIHJlbmRlcmVkIGEgc29ydCBidXR0b24gdGhhdCBhXG4gICAgLy8gY29uc3VtZXIgaGFkIGV4cGxpY2l0bHkgYXNrZWQgbm90IHRvIGhhdmUuIFJlc29sdmVkIGhlcmUgdG8gYSByZWFsXG4gICAgLy8gYm9vbGVhbiwgb25jZSwgYmVjYXVzZSBub25lIG9mIHRoZW0gZGVwZW5kcyBvbiBhIHJvdy5cbiAgICBjb2wuX3Jlc29sdmVkU29ydGFibGUgPSByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbC5zb3J0YWJsZSwgcGFyYW1zKTtcbiAgICBjb2wuX3Jlc29sdmVkUmVzaXphYmxlID0gcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2wucmVzaXphYmxlLCBwYXJhbXMpO1xuICAgIGNvbC5fcmVzb2x2ZWREcmFnYWJsZSA9IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sLmRyYWdhYmxlLCBwYXJhbXMpO1xuICAgIGNvbC5fcmVzb2x2ZWRTdXBwcmVzc0hlYWRlck1lbnVCdXR0b24gPSByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbC5zdXBwcmVzc0hlYWRlck1lbnVCdXR0b24sIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgb25lIGNlbGwncyBjbGFzcywgZm9yIG9uZSByb3cuXG4gICAqXG4gICAqIFB1cmU6IHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiBiYWNrIG9udG8gdGhlIGNvbHVtbiBkZWYsXG4gICAqIHdoaWNoIGV2ZXJ5IHJvdyBvZiB0aGF0IGNvbHVtbiBzaGFyZXMuIFdyaXRpbmcgdG8gaXQgd29ya2VkIG9ubHkgYmVjYXVzZVxuICAgKiB0aGUgdGVtcGxhdGUgcmVzb2x2ZWQgYW5kIHJlYWQgaW4gdGhlIHNhbWUgZXhwcmVzc2lvbiDigJQgb25lIHJlbmRlciBvcmRlclxuICAgKiBhd2F5IGZyb20gZXZlcnkgcm93IHNob3dpbmcgdGhlIGxhc3Qgcm93J3MgY2xhc3MuXG4gICAqL1xuICByZXNvbHZlQ2VsbENsYXNzKGNvbDogT25lQ29sdW1uRGVmLCBwYXJhbXM6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdHlwZW9mIGNvbD8uY2VsbENsYXNzID09PSAnZnVuY3Rpb24nID8gY29sLmNlbGxDbGFzcyhwYXJhbXMpIDogY29sPy5jZWxsQ2xhc3M7XG4gIH1cblxuICAvKiogUmVzb2x2ZSBvbmUgY2VsbCdzIGlubGluZSBzdHlsZSwgZm9yIG9uZSByb3cuIFB1cmUsIGFzIGFib3ZlLiAqL1xuICByZXNvbHZlQ2VsbFN0eWxlKGNvbDogT25lQ29sdW1uRGVmLCBwYXJhbXM6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0eXBlb2YgY29sPy5jZWxsU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjb2wuY2VsbFN0eWxlKHBhcmFtcykgOiBjb2w/LmNlbGxTdHlsZTtcbiAgfVxufSJdfQ==
|
|
@@ -10,19 +10,69 @@ export class OneGridCellService {
|
|
|
10
10
|
this._cellValueGetter = new CellValueGetterPipe();
|
|
11
11
|
this._cellFieldValue = new CellFieldValuePipe();
|
|
12
12
|
this._columnDefs = [];
|
|
13
|
+
this._api = null;
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Row-scoped column predicates
|
|
16
|
+
//
|
|
17
|
+
// Every one of these resolves the same way and receives the same params, via
|
|
18
|
+
// `cellParams`. They used to each build their own subset inline, which is how
|
|
19
|
+
// `value`, `field` and `api` came to be missing from all of them.
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/** Whether this cell may be edited at all. A capability: unset means no. */
|
|
22
|
+
this.editableFn = (column, node) => resolveOneCellRendererParams(column?.editable, this.cellParams(column, node));
|
|
13
23
|
/**
|
|
14
|
-
*
|
|
24
|
+
* The second edit gate, ANDed with `editable`.
|
|
25
|
+
*
|
|
26
|
+
* A restriction, so unset means "no restriction". It used to resolve through
|
|
27
|
+
* `!!undefined` to `false`, closing the gate on every column that did not name
|
|
28
|
+
* it — so `editable: true` on its own made nothing editable.
|
|
15
29
|
*/
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
this.disableFn = (column, node) => resolveOneCellRendererParams(column
|
|
19
|
-
|
|
20
|
-
this.
|
|
30
|
+
this.updatableFn = (column, node) => resolveOneCellRendererParams(column?.updatable, this.cellParams(column, node), true);
|
|
31
|
+
/** Disables this column's row action buttons. Not an edit gate. */
|
|
32
|
+
this.disableFn = (column, node) => resolveOneCellRendererParams(column?.disable, this.cellParams(column, node));
|
|
33
|
+
/** Hides this column's row action buttons entirely. */
|
|
34
|
+
this.hideActionButtonFn = (column, node) => resolveOneCellRendererParams(column?.hideActionButton, this.cellParams(column, node));
|
|
35
|
+
/** Whether this cell carries a row drag handle. */
|
|
36
|
+
this.rowDragFn = (column, node) => resolveOneCellRendererParams(column?.rowDrag, this.cellParams(column, node));
|
|
37
|
+
this.valueGetterFn = (column, node) => resolveOneValueGetterParams(column?.valueGetter, { data: node.data, rowIndex: node.rowIndex, node, context: this._context });
|
|
21
38
|
}
|
|
22
39
|
applyColumnDefs(columnDefs, context) {
|
|
23
40
|
this._columnDefs = columnDefs;
|
|
24
41
|
this._context = context;
|
|
25
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Back-reference to the grid api, so predicate params can carry it.
|
|
45
|
+
*
|
|
46
|
+
* Pushed in rather than injected: `OneGridApi` already depends on this
|
|
47
|
+
* service, and injecting it back would close a DI cycle.
|
|
48
|
+
*/
|
|
49
|
+
setGridApi(api) {
|
|
50
|
+
this._api = api;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The params every row-scoped column callback receives.
|
|
54
|
+
*
|
|
55
|
+
* One builder, deliberately: `editable`, `updatable`, `disable`, `rowDrag`,
|
|
56
|
+
* `hideActionButton`, `cellClass`, `cellStyle`, `cellRenderer` and
|
|
57
|
+
* `valueFormatter` are all "decide something about this cell", and a consumer
|
|
58
|
+
* should not have to remember which of them happens to be handed `value` or
|
|
59
|
+
* `field`. Each used to be called with a slightly different subset.
|
|
60
|
+
*/
|
|
61
|
+
cellParams(column, node) {
|
|
62
|
+
return {
|
|
63
|
+
// Column config first, so the grid's own fields win a name collision: a
|
|
64
|
+
// stale `value` left in `cellRendererParams` must not shadow this cell's.
|
|
65
|
+
...(column?.cellRendererParams ?? {}),
|
|
66
|
+
value: this.resolveValue(node, column),
|
|
67
|
+
data: node.data,
|
|
68
|
+
node,
|
|
69
|
+
rowIndex: node.rowIndex,
|
|
70
|
+
field: column?.field,
|
|
71
|
+
columnDef: column,
|
|
72
|
+
api: this._api ?? undefined,
|
|
73
|
+
context: this._context,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
26
76
|
/**
|
|
27
77
|
* Generate New Node States
|
|
28
78
|
*/
|
|
@@ -32,48 +82,101 @@ export class OneGridCellService {
|
|
|
32
82
|
const newStates = {};
|
|
33
83
|
for (const column of this._columnDefs) {
|
|
34
84
|
const field = column.field;
|
|
85
|
+
// Cell state is keyed by field, so a column without one contributes
|
|
86
|
+
// nothing. Skipping it keeps `undefined` out of the state object; such a
|
|
87
|
+
// column still renders its action buttons, which do not read cell state.
|
|
88
|
+
if (!field)
|
|
89
|
+
continue;
|
|
35
90
|
if (field !== '_oneRowNumber') {
|
|
36
91
|
newStates[field] = this.generateCellState(node, column) ?? node.cellStates[field] ?? { type: 'none', value: '' };
|
|
37
92
|
}
|
|
38
93
|
else {
|
|
39
|
-
newStates[field] = node.cellStates[
|
|
94
|
+
newStates[field] = node.cellStates[field];
|
|
40
95
|
}
|
|
41
96
|
}
|
|
42
97
|
return newStates;
|
|
43
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* The cell's value: the `valueGetter`'s output where the column declares one,
|
|
101
|
+
* the raw field otherwise. This is the value, not the display text — see
|
|
102
|
+
* {@link formatValue}.
|
|
103
|
+
*/
|
|
104
|
+
resolveValue(node, column) {
|
|
105
|
+
return column?.valueGetter
|
|
106
|
+
? this._cellValueGetter.transform(node.data, node, column, this._context)
|
|
107
|
+
: this._cellFieldValue.transform(node.data, column.field);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply the column's `valueFormatter`.
|
|
111
|
+
*
|
|
112
|
+
* `valueFormatter` was declared on the column definition and called from
|
|
113
|
+
* nowhere — a consumer could write one, get no error, and see nothing happen.
|
|
114
|
+
* It runs on displayed text only, after the `valueGetter`, and is deliberately
|
|
115
|
+
* skipped for placeholders: an empty cell already has its own mechanism in
|
|
116
|
+
* `cellRendererParams.placeholder`, and two features competing to fill the
|
|
117
|
+
* same gap is worse than one.
|
|
118
|
+
*
|
|
119
|
+
* Note that sorting and filtering read the underlying row data, not this —
|
|
120
|
+
* which is exactly why formatting belongs here rather than in the getter.
|
|
121
|
+
*/
|
|
122
|
+
formatValue(node, column, value) {
|
|
123
|
+
if (typeof column?.valueFormatter !== 'function')
|
|
124
|
+
return value;
|
|
125
|
+
// `value` is passed explicitly rather than left to `cellParams`: the empty
|
|
126
|
+
// -cell branch resolves it through the getter before deciding whether there
|
|
127
|
+
// is anything to format, and the formatter must see that same value.
|
|
128
|
+
return column.valueFormatter({ ...this.cellParams(column, node), value });
|
|
129
|
+
}
|
|
44
130
|
/**
|
|
45
131
|
* Generate New Node State Based on Column Field
|
|
46
132
|
*/
|
|
47
133
|
generateCellState(node, column) {
|
|
48
|
-
|
|
49
|
-
|
|
134
|
+
// This was `field !== undefined || field !== '' || field !== null`, which is
|
|
135
|
+
// true for every possible value including all three it meant to exclude —
|
|
136
|
+
// `||` where `&&` was intended. It gated the four branches below, so none
|
|
137
|
+
// of them could ever fall through to the default. Reduced to the check it
|
|
138
|
+
// was reaching for: a column with no field has no value to render.
|
|
139
|
+
const field = column?.field;
|
|
140
|
+
if (!field) {
|
|
141
|
+
return { type: 'none', value: '' };
|
|
142
|
+
}
|
|
143
|
+
const isEmpty = this._cellFieldValueEmpty.transform(node.data, field);
|
|
50
144
|
const isGroup = node.group || node.leafGroup;
|
|
51
145
|
const isAutoGroup = column?.autoGroupField;
|
|
52
146
|
if (column && column.cellRenderer && !isGroup) {
|
|
53
|
-
|
|
54
|
-
|
|
147
|
+
// The renderer used to be handed `{ node, columnDef }` and nothing else,
|
|
148
|
+
// so the obvious way to write one — `params.value` — produced the string
|
|
149
|
+
// "undefined", and `params.data.x` threw. It now gets exactly what every
|
|
150
|
+
// other row-scoped hook gets.
|
|
151
|
+
return { type: 'html', value: column.cellRenderer(this.cellParams(column, node)) };
|
|
55
152
|
}
|
|
56
153
|
// 1. Cell Group Placeholder
|
|
57
|
-
if (
|
|
154
|
+
if (isEmpty && isGroup && isAutoGroup) {
|
|
58
155
|
return { type: 'placeholder', value: column?.cellRendererParams?.placeholder ?? this._cellValueGetter.transform(node.data, node, column, this._context) ?? '' };
|
|
59
156
|
}
|
|
60
157
|
// 2. Cell Group Text Value
|
|
61
|
-
if (
|
|
62
|
-
const value =
|
|
158
|
+
if (isGroup && isAutoGroup) {
|
|
159
|
+
const value = this.formatValue(node, column, this.resolveValue(node, column));
|
|
63
160
|
return { type: 'text', value: value ?? '' };
|
|
64
161
|
}
|
|
65
162
|
// 3. Cell Placeholder
|
|
66
|
-
|
|
163
|
+
//
|
|
164
|
+
// The auto group column is deliberately NOT excluded here. Cases 1 and 2
|
|
165
|
+
// above already claimed the group rows, so what reaches this point is a
|
|
166
|
+
// leaf — and a leaf on the auto group column has to render its label too,
|
|
167
|
+
// indented by level. Excluding it dropped every leaf through to case 5 and
|
|
168
|
+
// rendered the group column blank for the whole bottom row of a tree.
|
|
169
|
+
if (isEmpty && !isGroup) {
|
|
67
170
|
const valueGetter = this._cellValueGetter.transform(node.data, node, column, this._context);
|
|
68
171
|
if (valueGetter) {
|
|
69
|
-
return { type: 'text', value: valueGetter };
|
|
172
|
+
return { type: 'text', value: this.formatValue(node, column, valueGetter) };
|
|
70
173
|
}
|
|
71
174
|
const placeholder = column?.cellRendererParams?.placeholder ?? '';
|
|
72
175
|
return { type: 'placeholder', value: placeholder };
|
|
73
176
|
}
|
|
74
|
-
// 4. Cell Text Value
|
|
75
|
-
if (
|
|
76
|
-
const value =
|
|
177
|
+
// 4. Cell Text Value (leaves, including the auto group column — see above)
|
|
178
|
+
if (!isGroup) {
|
|
179
|
+
const value = this.formatValue(node, column, this.resolveValue(node, column));
|
|
77
180
|
return { type: 'text', value: value ?? '' };
|
|
78
181
|
}
|
|
79
182
|
// 5. Default
|
|
@@ -85,4 +188,4 @@ export class OneGridCellService {
|
|
|
85
188
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellService, decorators: [{
|
|
86
189
|
type: Injectable
|
|
87
190
|
}] });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUdwRSxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBR1UseUJBQW9CLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxvQkFBZSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFtQixFQUFFLENBQUM7UUE2RnpDOztXQUVHO1FBQ0ksZUFBVSxHQUFHLENBQUMsTUFBb0IsRUFBRSxJQUFnQixFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRNLGdCQUFXLEdBQUcsQ0FBQyxNQUFvQixFQUFFLElBQWdCLEVBQUUsRUFBRSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxT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LGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9uZUNlbGxTdGF0ZSwgT25lQ2VsbFN0YXRlcywgT25lQ29sdW1uRGVmIH0gZnJvbSAnLi4vbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IENlbGxGaWVsZFZhbHVlRW1wdHlQaXBlIH0gZnJvbSAnLi4vcGlwZXMvY2VsbC1maWVsZC12YWx1ZS1lbXB0eS5waXBlJztcbmltcG9ydCB7IE9uZVJvd05vZGUgfSBmcm9tICcuLi9pbnN0YW50cy9vbmUtcm93LW5vZGUuY2xhc3MnO1xuaW1wb3J0IHsgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcywgcmVzb2x2ZU9uZVZhbHVlR2V0dGVyUGFyYW1zIH0gZnJvbSAnLi4vLi4vaGVscGVycy9vbmUtY29sdW1uLWRlZi5oZWxwZXInO1xuaW1wb3J0IHsgQ2VsbFZhbHVlR2V0dGVyUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NlbGwtdmFsdWUtZ2V0dGVyLnBpcGUnO1xuaW1wb3J0IHsgQ2VsbEZpZWxkVmFsdWVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvY2VsbC1maWVsZC12YWx1ZS5waXBlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDZWxsU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfY2VsbEZpZWxkVmFsdWVFbXB0eSA9IG5ldyBDZWxsRmllbGRWYWx1ZUVtcHR5UGlwZSgpO1xuICBwcml2YXRlIF9jZWxsVmFsdWVHZXR0ZXIgPSBuZXcgQ2VsbFZhbHVlR2V0dGVyUGlwZSgpO1xuICBwcml2YXRlIF9jZWxsRmllbGRWYWx1ZSA9IG5ldyBDZWxsRmllbGRWYWx1ZVBpcGUoKTtcbiAgcHJpdmF0ZSBfY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xuXG4gIHB1YmxpYyBhcHBseUNvbHVtbkRlZnMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10sIGNvbnRleHQ6IGFueSkge1xuXG4gICAgdGhpcy5fY29sdW1uRGVmcyA9IGNvbHVtbkRlZnM7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgTmV3IE5vZGUgU3RhdGVzXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVDZWxsU3RhdGVzKG5vZGU6IE9uZVJvd05vZGUpOiBPbmVDZWxsU3RhdGVzIHwgbnVsbCB7XG5cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbmV3U3RhdGVzOiBPbmVDZWxsU3RhdGVzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLl9jb2x1bW5EZWZzKSB7XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xuXG4gICAgICBpZiAoZmllbGQgIT09ICdfb25lUm93TnVtYmVyJykge1xuXG4gICAgICAgIG5ld1N0YXRlc1tmaWVsZF0gPSB0aGlzLmdlbmVyYXRlQ2VsbFN0YXRlKG5vZGUsIGNvbHVtbikgPz8gbm9kZS5jZWxsU3RhdGVzW2ZpZWxkXSA/PyB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG5cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbmV3U3RhdGVzW2ZpZWxkXSA9IG5vZGUuY2VsbFN0YXRlc1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdTdGF0ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgTmV3IE5vZGUgU3RhdGUgQmFzZWQgb24gQ29sdW1uIEZpZWxkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVDZWxsU3RhdGUobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYpOiBPbmVDZWxsU3RhdGUge1xuXG4gICAgY29uc3QgaXNGaWVsZCA9IGNvbHVtbi5maWVsZCAhPT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWVsZCAhPT0gJycgfHwgY29sdW1uLmZpZWxkICE9PSBudWxsO1xuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLl9jZWxsRmllbGRWYWx1ZUVtcHR5LnRyYW5zZm9ybShub2RlLmRhdGEsIGNvbHVtbi5maWVsZCk7XG4gICAgY29uc3QgaXNHcm91cCA9IG5vZGUuZ3JvdXAgfHwgbm9kZS5sZWFmR3JvdXA7XG4gICAgY29uc3QgaXNBdXRvR3JvdXAgPSBjb2x1bW4/LmF1dG9Hcm91cEZpZWxkO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uY2VsbFJlbmRlcmVyICYmICFpc0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmNlbGxSZW5kZXJlcih7IG5vZGUsIGNvbHVtbkRlZjogY29sdW1uIH0pO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnaHRtbCcsIHZhbHVlOiB2YWx1ZSB9XG4gICAgfVxuXG4gICAgLy8gMS4gQ2VsbCBHcm91cCBQbGFjZWhvbGRlclxuICAgIGlmIChpc0ZpZWxkICYmIGlzRW1wdHkgJiYgaXNHcm91cCAmJiBpc0F1dG9Hcm91cCkge1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAncGxhY2Vob2xkZXInLCB2YWx1ZTogY29sdW1uPy5jZWxsUmVuZGVyZXJQYXJhbXM/LnBsYWNlaG9sZGVyID8/IHRoaXMuX2NlbGxWYWx1ZUdldHRlci50cmFuc2Zvcm0obm9kZS5kYXRhLCBub2RlLCBjb2x1bW4sIHRoaXMuX2NvbnRleHQpID8/ICcnIH07XG4gICAgfVxuXG4gICAgLy8gMi4gQ2VsbCBHcm91cCBUZXh0IFZhbHVlXG4gICAgaWYgKGlzRmllbGQgJiYgaXNHcm91cCAmJiBpc0F1dG9Hcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbj8udmFsdWVHZXR0ZXIgPyB0aGlzLl9jZWxsVmFsdWVHZXR0ZXIudHJhbnNmb3JtKG5vZGUuZGF0YSwgbm9kZSwgY29sdW1uLCB0aGlzLl9jb250ZXh0KSA6IHRoaXMuX2NlbGxGaWVsZFZhbHVlLnRyYW5zZm9ybShub2RlLmRhdGEsIGNvbHVtbi5maWVsZCk7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHZhbHVlID8/ICcnIH07XG4gICAgfVxuXG4gICAgLy8gMy4gQ2VsbCBQbGFjZWhvbGRlclxuICAgIGlmIChpc0ZpZWxkICYmIGlzRW1wdHkgJiYgIWlzR3JvdXAgJiYgIWlzQXV0b0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gdGhpcy5fY2VsbFZhbHVlR2V0dGVyLnRyYW5zZm9ybShub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWx1ZUdldHRlcikge1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHZhbHVlR2V0dGVyIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29sdW1uPy5jZWxsUmVuZGVyZXJQYXJhbXM/LnBsYWNlaG9sZGVyID8/ICcnO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAncGxhY2Vob2xkZXInLCB2YWx1ZTogcGxhY2Vob2xkZXIgfTtcbiAgICB9XG5cbiAgICAvLyA0LiBDZWxsIFRleHQgVmFsdWVcbiAgICBpZiAoaXNGaWVsZCAmJiAhKGlzR3JvdXAgfHwgaXNBdXRvR3JvdXApKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uPy52YWx1ZUdldHRlciA/IHRoaXMuX2NlbGxWYWx1ZUdldHRlci50cmFuc2Zvcm0obm9kZS5kYXRhLCBub2RlLCBjb2x1bW4sIHRoaXMuX2NvbnRleHQpIDogdGhpcy5fY2VsbEZpZWxkVmFsdWUudHJhbnNmb3JtKG5vZGUuZGF0YSwgY29sdW1uLmZpZWxkKTtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdmFsdWUgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyA1LiBEZWZhdWx0XG4gICAgcmV0dXJuIHsgdHlwZTogJ25vbmUnLCB2YWx1ZTogJycgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUgQ29sdW1uIERlZiBQYXJhbXMgUmVzb2x2ZXJcbiAgICovXG4gIHB1YmxpYyBlZGl0YWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKSA9PiByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbi5lZGl0YWJsZSwgeyBub2RlLCBkYXRhOiBub2RlLmRhdGEsIGNvbHVtbkRlZjogY29sdW1uLCByb3dJbmRleDogbm9kZS5yb3dJbmRleCwgY29udGV4dDogdGhpcy5fY29udGV4dCB9KTtcblxuICBwdWJsaWMgdXBkYXRhYmxlRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpID0+IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uLnVwZGF0YWJsZSwgeyBub2RlLCBkYXRhOiBub2RlLmRhdGEsIGNvbHVtbkRlZjogY29sdW1uLCByb3dJbmRleDogbm9kZS5yb3dJbmRleCwgY29udGV4dDogdGhpcy5fY29udGV4dCB9KTtcblxuICBwdWJsaWMgZGlzYWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKSA9PiByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbi5kaXNhYmxlLCB7IG5vZGUsIGRhdGE6IG5vZGUuZGF0YSwgY29sdW1uRGVmOiBjb2x1bW4sIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LCBjb250ZXh0OiB0aGlzLl9jb250ZXh0IH0pO1xuXG4gIHB1YmxpYyBkcmFnYWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKSA9PiByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbi5kcmFnYWJsZSwgeyBub2RlLCBkYXRhOiBub2RlLmRhdGEsIGNvbHVtbkRlZjogY29sdW1uLCByb3dJbmRleDogbm9kZS5yb3dJbmRleCwgY29udGV4dDogdGhpcy5fY29udGV4dCB9KTtcblxuICBwdWJsaWMgdmFsdWVHZXR0ZXJGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSkgPT4gcmVzb2x2ZU9uZVZhbHVlR2V0dGVyUGFyYW1zKGNvbHVtbi52YWx1ZUdldHRlciwgeyBkYXRhOiBub2RlLmRhdGEsIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LCBub2RlOiBub2RlLCBjb250ZXh0OiB0aGlzLl9jb250ZXh0IH0pO1xufVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUlwRSxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBR1UseUJBQW9CLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxvQkFBZSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFzQixJQUFJLENBQUM7UUE0THZDLDhFQUE4RTtRQUM5RSwrQkFBK0I7UUFDL0IsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSw4RUFBOEU7UUFDOUUsa0VBQWtFO1FBQ2xFLDhFQUE4RTtRQUU5RSw0RUFBNEU7UUFDckUsZUFBVSxHQUFHLENBQUMsTUFBb0IsRUFBRSxJQUFnQixFQUFXLEVBQUUsQ0FDdEUsNEJBQTRCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhGOzs7Ozs7V0FNRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxNQUFvQixF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LGFBQWE7UUFDYixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckMsQ0FBQzsrR0FqTVUsa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPbmVDZWxsUHJlc2VudGF0aW9uUGFyYW1zLCBPbmVDZWxsU3RhdGUsIE9uZUNlbGxTdGF0ZXMsIE9uZUNvbHVtbkRlZiB9IGZyb20gJy4uL21vZGVscy9vbmUtY29sdW1uLWRlZi10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBDZWxsRmllbGRWYWx1ZUVtcHR5UGlwZSB9IGZyb20gJy4uL3BpcGVzL2NlbGwtZmllbGQtdmFsdWUtZW1wdHkucGlwZSc7XG5pbXBvcnQgeyBPbmVSb3dOb2RlIH0gZnJvbSAnLi4vaW5zdGFudHMvb25lLXJvdy1ub2RlLmNsYXNzJztcbmltcG9ydCB7IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMsIHJlc29sdmVPbmVWYWx1ZUdldHRlclBhcmFtcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvb25lLWNvbHVtbi1kZWYuaGVscGVyJztcbmltcG9ydCB7IENlbGxWYWx1ZUdldHRlclBpcGUgfSBmcm9tICcuLi9waXBlcy9jZWxsLXZhbHVlLWdldHRlci5waXBlJztcbmltcG9ydCB7IENlbGxGaWVsZFZhbHVlUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NlbGwtZmllbGQtdmFsdWUucGlwZSc7XG5pbXBvcnQgdHlwZSB7IE9uZUdyaWRBcGkgfSBmcm9tICcuLi9pbnN0YW50cy9vbmUtZ3JpZC1hcGkuY2xhc3MnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT25lR3JpZENlbGxTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9jZWxsRmllbGRWYWx1ZUVtcHR5ID0gbmV3IENlbGxGaWVsZFZhbHVlRW1wdHlQaXBlKCk7XG4gIHByaXZhdGUgX2NlbGxWYWx1ZUdldHRlciA9IG5ldyBDZWxsVmFsdWVHZXR0ZXJQaXBlKCk7XG4gIHByaXZhdGUgX2NlbGxGaWVsZFZhbHVlID0gbmV3IENlbGxGaWVsZFZhbHVlUGlwZSgpO1xuICBwcml2YXRlIF9jb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWZbXSA9IFtdO1xuICBwcml2YXRlIF9jb250ZXh0OiBhbnk7XG4gIHByaXZhdGUgX2FwaTogT25lR3JpZEFwaSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBhcHBseUNvbHVtbkRlZnMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10sIGNvbnRleHQ6IGFueSkge1xuXG4gICAgdGhpcy5fY29sdW1uRGVmcyA9IGNvbHVtbkRlZnM7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQmFjay1yZWZlcmVuY2UgdG8gdGhlIGdyaWQgYXBpLCBzbyBwcmVkaWNhdGUgcGFyYW1zIGNhbiBjYXJyeSBpdC5cbiAgICpcbiAgICogUHVzaGVkIGluIHJhdGhlciB0aGFuIGluamVjdGVkOiBgT25lR3JpZEFwaWAgYWxyZWFkeSBkZXBlbmRzIG9uIHRoaXNcbiAgICogc2VydmljZSwgYW5kIGluamVjdGluZyBpdCBiYWNrIHdvdWxkIGNsb3NlIGEgREkgY3ljbGUuXG4gICAqL1xuICBwdWJsaWMgc2V0R3JpZEFwaShhcGk6IE9uZUdyaWRBcGkgfCBudWxsKTogdm9pZCB7XG5cbiAgICB0aGlzLl9hcGkgPSBhcGk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBhcmFtcyBldmVyeSByb3ctc2NvcGVkIGNvbHVtbiBjYWxsYmFjayByZWNlaXZlcy5cbiAgICpcbiAgICogT25lIGJ1aWxkZXIsIGRlbGliZXJhdGVseTogYGVkaXRhYmxlYCwgYHVwZGF0YWJsZWAsIGBkaXNhYmxlYCwgYHJvd0RyYWdgLFxuICAgKiBgaGlkZUFjdGlvbkJ1dHRvbmAsIGBjZWxsQ2xhc3NgLCBgY2VsbFN0eWxlYCwgYGNlbGxSZW5kZXJlcmAgYW5kXG4gICAqIGB2YWx1ZUZvcm1hdHRlcmAgYXJlIGFsbCBcImRlY2lkZSBzb21ldGhpbmcgYWJvdXQgdGhpcyBjZWxsXCIsIGFuZCBhIGNvbnN1bWVyXG4gICAqIHNob3VsZCBub3QgaGF2ZSB0byByZW1lbWJlciB3aGljaCBvZiB0aGVtIGhhcHBlbnMgdG8gYmUgaGFuZGVkIGB2YWx1ZWAgb3JcbiAgICogYGZpZWxkYC4gRWFjaCB1c2VkIHRvIGJlIGNhbGxlZCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN1YnNldC5cbiAgICovXG4gIHB1YmxpYyBjZWxsUGFyYW1zKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcyB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gQ29sdW1uIGNvbmZpZyBmaXJzdCwgc28gdGhlIGdyaWQncyBvd24gZmllbGRzIHdpbiBhIG5hbWUgY29sbGlzaW9uOiBhXG4gICAgICAvLyBzdGFsZSBgdmFsdWVgIGxlZnQgaW4gYGNlbGxSZW5kZXJlclBhcmFtc2AgbXVzdCBub3Qgc2hhZG93IHRoaXMgY2VsbCdzLlxuICAgICAgLi4uKGNvbHVtbj8uY2VsbFJlbmRlcmVyUGFyYW1zID8/IHt9KSxcbiAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVWYWx1ZShub2RlLCBjb2x1bW4pLFxuICAgICAgZGF0YTogbm9kZS5kYXRhLFxuICAgICAgbm9kZSxcbiAgICAgIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LFxuICAgICAgZmllbGQ6IGNvbHVtbj8uZmllbGQgYXMgc3RyaW5nLFxuICAgICAgY29sdW1uRGVmOiBjb2x1bW4sXG4gICAgICBhcGk6IHRoaXMuX2FwaSA/PyB1bmRlZmluZWQsXG4gICAgICBjb250ZXh0OiB0aGlzLl9jb250ZXh0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgTmV3IE5vZGUgU3RhdGVzXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVDZWxsU3RhdGVzKG5vZGU6IE9uZVJvd05vZGUpOiBPbmVDZWxsU3RhdGVzIHwgbnVsbCB7XG5cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbmV3U3RhdGVzOiBPbmVDZWxsU3RhdGVzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLl9jb2x1bW5EZWZzKSB7XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xuXG4gICAgICAvLyBDZWxsIHN0YXRlIGlzIGtleWVkIGJ5IGZpZWxkLCBzbyBhIGNvbHVtbiB3aXRob3V0IG9uZSBjb250cmlidXRlc1xuICAgICAgLy8gbm90aGluZy4gU2tpcHBpbmcgaXQga2VlcHMgYHVuZGVmaW5lZGAgb3V0IG9mIHRoZSBzdGF0ZSBvYmplY3Q7IHN1Y2ggYVxuICAgICAgLy8gY29sdW1uIHN0aWxsIHJlbmRlcnMgaXRzIGFjdGlvbiBidXR0b25zLCB3aGljaCBkbyBub3QgcmVhZCBjZWxsIHN0YXRlLlxuICAgICAgaWYgKCFmaWVsZCkgY29udGludWU7XG5cbiAgICAgIGlmIChmaWVsZCAhPT0gJ19vbmVSb3dOdW1iZXInKSB7XG5cbiAgICAgICAgbmV3U3RhdGVzW2ZpZWxkXSA9IHRoaXMuZ2VuZXJhdGVDZWxsU3RhdGUobm9kZSwgY29sdW1uKSA/PyBub2RlLmNlbGxTdGF0ZXNbZmllbGRdID8/IHsgdHlwZTogJ25vbmUnLCB2YWx1ZTogJycgfTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBuZXdTdGF0ZXNbZmllbGRdID0gbm9kZS5jZWxsU3RhdGVzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3U3RhdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsJ3MgdmFsdWU6IHRoZSBgdmFsdWVHZXR0ZXJgJ3Mgb3V0cHV0IHdoZXJlIHRoZSBjb2x1bW4gZGVjbGFyZXMgb25lLFxuICAgKiB0aGUgcmF3IGZpZWxkIG90aGVyd2lzZS4gVGhpcyBpcyB0aGUgdmFsdWUsIG5vdCB0aGUgZGlzcGxheSB0ZXh0IOKAlCBzZWVcbiAgICoge0BsaW5rIGZvcm1hdFZhbHVlfS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVZhbHVlKG5vZGU6IE9uZVJvd05vZGUsIGNvbHVtbjogT25lQ29sdW1uRGVmKTogYW55IHtcblxuICAgIHJldHVybiBjb2x1bW4/LnZhbHVlR2V0dGVyXG4gICAgICA/IHRoaXMuX2NlbGxWYWx1ZUdldHRlci50cmFuc2Zvcm0obm9kZS5kYXRhLCBub2RlLCBjb2x1bW4sIHRoaXMuX2NvbnRleHQpXG4gICAgICA6IHRoaXMuX2NlbGxGaWVsZFZhbHVlLnRyYW5zZm9ybShub2RlLmRhdGEsIGNvbHVtbi5maWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIGNvbHVtbidzIGB2YWx1ZUZvcm1hdHRlcmAuXG4gICAqXG4gICAqIGB2YWx1ZUZvcm1hdHRlcmAgd2FzIGRlY2xhcmVkIG9uIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhbmQgY2FsbGVkIGZyb21cbiAgICogbm93aGVyZSDigJQgYSBjb25zdW1lciBjb3VsZCB3cml0ZSBvbmUsIGdldCBubyBlcnJvciwgYW5kIHNlZSBub3RoaW5nIGhhcHBlbi5cbiAgICogSXQgcnVucyBvbiBkaXNwbGF5ZWQgdGV4dCBvbmx5LCBhZnRlciB0aGUgYHZhbHVlR2V0dGVyYCwgYW5kIGlzIGRlbGliZXJhdGVseVxuICAgKiBza2lwcGVkIGZvciBwbGFjZWhvbGRlcnM6IGFuIGVtcHR5IGNlbGwgYWxyZWFkeSBoYXMgaXRzIG93biBtZWNoYW5pc20gaW5cbiAgICogYGNlbGxSZW5kZXJlclBhcmFtcy5wbGFjZWhvbGRlcmAsIGFuZCB0d28gZmVhdHVyZXMgY29tcGV0aW5nIHRvIGZpbGwgdGhlXG4gICAqIHNhbWUgZ2FwIGlzIHdvcnNlIHRoYW4gb25lLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgc29ydGluZyBhbmQgZmlsdGVyaW5nIHJlYWQgdGhlIHVuZGVybHlpbmcgcm93IGRhdGEsIG5vdCB0aGlzIOKAlFxuICAgKiB3aGljaCBpcyBleGFjdGx5IHdoeSBmb3JtYXR0aW5nIGJlbG9uZ3MgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgZ2V0dGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZShub2RlOiBPbmVSb3dOb2RlLCBjb2x1bW46IE9uZUNvbHVtbkRlZiwgdmFsdWU6IGFueSk6IGFueSB7XG5cbiAgICBpZiAodHlwZW9mIGNvbHVtbj8udmFsdWVGb3JtYXR0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblxuICAgIC8vIGB2YWx1ZWAgaXMgcGFzc2VkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gbGVmdCB0byBgY2VsbFBhcmFtc2A6IHRoZSBlbXB0eVxuICAgIC8vIC1jZWxsIGJyYW5jaCByZXNvbHZlcyBpdCB0aHJvdWdoIHRoZSBnZXR0ZXIgYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgdGhlcmVcbiAgICAvLyBpcyBhbnl0aGluZyB0byBmb3JtYXQsIGFuZCB0aGUgZm9ybWF0dGVyIG11c3Qgc2VlIHRoYXQgc2FtZSB2YWx1ZS5cbiAgICByZXR1cm4gY29sdW1uLnZhbHVlRm9ybWF0dGVyKHsgLi4udGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSksIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIE5ldyBOb2RlIFN0YXRlIEJhc2VkIG9uIENvbHVtbiBGaWVsZFxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlQ2VsbFN0YXRlKG5vZGU6IE9uZVJvd05vZGUsIGNvbHVtbjogT25lQ29sdW1uRGVmKTogT25lQ2VsbFN0YXRlIHtcblxuICAgIC8vIFRoaXMgd2FzIGBmaWVsZCAhPT0gdW5kZWZpbmVkIHx8IGZpZWxkICE9PSAnJyB8fCBmaWVsZCAhPT0gbnVsbGAsIHdoaWNoIGlzXG4gICAgLy8gdHJ1ZSBmb3IgZXZlcnkgcG9zc2libGUgdmFsdWUgaW5jbHVkaW5nIGFsbCB0aHJlZSBpdCBtZWFudCB0byBleGNsdWRlIOKAlFxuICAgIC8vIGB8fGAgd2hlcmUgYCYmYCB3YXMgaW50ZW5kZWQuIEl0IGdhdGVkIHRoZSBmb3VyIGJyYW5jaGVzIGJlbG93LCBzbyBub25lXG4gICAgLy8gb2YgdGhlbSBjb3VsZCBldmVyIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4gUmVkdWNlZCB0byB0aGUgY2hlY2sgaXRcbiAgICAvLyB3YXMgcmVhY2hpbmcgZm9yOiBhIGNvbHVtbiB3aXRoIG5vIGZpZWxkIGhhcyBubyB2YWx1ZSB0byByZW5kZXIuXG4gICAgY29uc3QgZmllbGQgPSBjb2x1bW4/LmZpZWxkO1xuXG4gICAgaWYgKCFmaWVsZCkge1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLl9jZWxsRmllbGRWYWx1ZUVtcHR5LnRyYW5zZm9ybShub2RlLmRhdGEsIGZpZWxkKTtcbiAgICBjb25zdCBpc0dyb3VwID0gbm9kZS5ncm91cCB8fCBub2RlLmxlYWZHcm91cDtcbiAgICBjb25zdCBpc0F1dG9Hcm91cCA9IGNvbHVtbj8uYXV0b0dyb3VwRmllbGQ7XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5jZWxsUmVuZGVyZXIgJiYgIWlzR3JvdXApIHtcblxuICAgICAgLy8gVGhlIHJlbmRlcmVyIHVzZWQgdG8gYmUgaGFuZGVkIGB7IG5vZGUsIGNvbHVtbkRlZiB9YCBhbmQgbm90aGluZyBlbHNlLFxuICAgICAgLy8gc28gdGhlIG9idmlvdXMgd2F5IHRvIHdyaXRlIG9uZSDigJQgYHBhcmFtcy52YWx1ZWAg4oCUIHByb2R1Y2VkIHRoZSBzdHJpbmdcbiAgICAgIC8vIFwidW5kZWZpbmVkXCIsIGFuZCBgcGFyYW1zLmRhdGEueGAgdGhyZXcuIEl0IG5vdyBnZXRzIGV4YWN0bHkgd2hhdCBldmVyeVxuICAgICAgLy8gb3RoZXIgcm93LXNjb3BlZCBob29rIGdldHMuXG4gICAgICByZXR1cm4geyB0eXBlOiAnaHRtbCcsIHZhbHVlOiBjb2x1bW4uY2VsbFJlbmRlcmVyKHRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpKSB9XG4gICAgfVxuXG4gICAgLy8gMS4gQ2VsbCBHcm91cCBQbGFjZWhvbGRlclxuICAgIGlmIChpc0VtcHR5ICYmIGlzR3JvdXAgJiYgaXNBdXRvR3JvdXApIHtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3BsYWNlaG9sZGVyJywgdmFsdWU6IGNvbHVtbj8uY2VsbFJlbmRlcmVyUGFyYW1zPy5wbGFjZWhvbGRlciA/PyB0aGlzLl9jZWxsVmFsdWVHZXR0ZXIudHJhbnNmb3JtKG5vZGUuZGF0YSwgbm9kZSwgY29sdW1uLCB0aGlzLl9jb250ZXh0KSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDIuIENlbGwgR3JvdXAgVGV4dCBWYWx1ZVxuICAgIGlmIChpc0dyb3VwICYmIGlzQXV0b0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShub2RlLCBjb2x1bW4sIHRoaXMucmVzb2x2ZVZhbHVlKG5vZGUsIGNvbHVtbikpO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB2YWx1ZSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDMuIENlbGwgUGxhY2Vob2xkZXJcbiAgICAvL1xuICAgIC8vIFRoZSBhdXRvIGdyb3VwIGNvbHVtbiBpcyBkZWxpYmVyYXRlbHkgTk9UIGV4Y2x1ZGVkIGhlcmUuIENhc2VzIDEgYW5kIDJcbiAgICAvLyBhYm92ZSBhbHJlYWR5IGNsYWltZWQgdGhlIGdyb3VwIHJvd3MsIHNvIHdoYXQgcmVhY2hlcyB0aGlzIHBvaW50IGlzIGFcbiAgICAvLyBsZWFmIOKAlCBhbmQgYSBsZWFmIG9uIHRoZSBhdXRvIGdyb3VwIGNvbHVtbiBoYXMgdG8gcmVuZGVyIGl0cyBsYWJlbCB0b28sXG4gICAgLy8gaW5kZW50ZWQgYnkgbGV2ZWwuIEV4Y2x1ZGluZyBpdCBkcm9wcGVkIGV2ZXJ5IGxlYWYgdGhyb3VnaCB0byBjYXNlIDUgYW5kXG4gICAgLy8gcmVuZGVyZWQgdGhlIGdyb3VwIGNvbHVtbiBibGFuayBmb3IgdGhlIHdob2xlIGJvdHRvbSByb3cgb2YgYSB0cmVlLlxuICAgIGlmIChpc0VtcHR5ICYmICFpc0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gdGhpcy5fY2VsbFZhbHVlR2V0dGVyLnRyYW5zZm9ybShub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWx1ZUdldHRlcikge1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHRoaXMuZm9ybWF0VmFsdWUobm9kZSwgY29sdW1uLCB2YWx1ZUdldHRlcikgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjb2x1bW4/LmNlbGxSZW5kZXJlclBhcmFtcz8ucGxhY2Vob2xkZXIgPz8gJyc7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdwbGFjZWhvbGRlcicsIHZhbHVlOiBwbGFjZWhvbGRlciB9O1xuICAgIH1cblxuICAgIC8vIDQuIENlbGwgVGV4dCBWYWx1ZSAobGVhdmVzLCBpbmNsdWRpbmcgdGhlIGF1dG8gZ3JvdXAgY29sdW1uIOKAlCBzZWUgYWJvdmUpXG4gICAgaWYgKCFpc0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShub2RlLCBjb2x1bW4sIHRoaXMucmVzb2x2ZVZhbHVlKG5vZGUsIGNvbHVtbikpO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB2YWx1ZSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDUuIERlZmF1bHRcbiAgICByZXR1cm4geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFJvdy1zY29wZWQgY29sdW1uIHByZWRpY2F0ZXNcbiAgLy9cbiAgLy8gRXZlcnkgb25lIG9mIHRoZXNlIHJlc29sdmVzIHRoZSBzYW1lIHdheSBhbmQgcmVjZWl2ZXMgdGhlIHNhbWUgcGFyYW1zLCB2aWFcbiAgLy8gYGNlbGxQYXJhbXNgLiBUaGV5IHVzZWQgdG8gZWFjaCBidWlsZCB0aGVpciBvd24gc3Vic2V0IGlubGluZSwgd2hpY2ggaXMgaG93XG4gIC8vIGB2YWx1ZWAsIGBmaWVsZGAgYW5kIGBhcGlgIGNhbWUgdG8gYmUgbWlzc2luZyBmcm9tIGFsbCBvZiB0aGVtLlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogV2hldGhlciB0aGlzIGNlbGwgbWF5IGJlIGVkaXRlZCBhdCBhbGwuIEEgY2FwYWJpbGl0eTogdW5zZXQgbWVhbnMgbm8uICovXG4gIHB1YmxpYyBlZGl0YWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5lZGl0YWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kIGVkaXQgZ2F0ZSwgQU5EZWQgd2l0aCBgZWRpdGFibGVgLlxuICAgKlxuICAgKiBBIHJlc3RyaWN0aW9uLCBzbyB1bnNldCBtZWFucyBcIm5vIHJlc3RyaWN0aW9uXCIuIEl0IHVzZWQgdG8gcmVzb2x2ZSB0aHJvdWdoXG4gICAqIGAhIXVuZGVmaW5lZGAgdG8gYGZhbHNlYCwgY2xvc2luZyB0aGUgZ2F0ZSBvbiBldmVyeSBjb2x1bW4gdGhhdCBkaWQgbm90IG5hbWVcbiAgICogaXQg4oCUIHNvIGBlZGl0YWJsZTogdHJ1ZWAgb24gaXRzIG93biBtYWRlIG5vdGhpbmcgZWRpdGFibGUuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRhYmxlRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LnVwZGF0YWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSksIHRydWUpO1xuXG4gIC8qKiBEaXNhYmxlcyB0aGlzIGNvbHVtbidzIHJvdyBhY3Rpb24gYnV0dG9ucy4gTm90IGFuIGVkaXQgZ2F0ZS4gKi9cbiAgcHVibGljIGRpc2FibGVGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8uZGlzYWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKiBIaWRlcyB0aGlzIGNvbHVtbidzIHJvdyBhY3Rpb24gYnV0dG9ucyBlbnRpcmVseS4gKi9cbiAgcHVibGljIGhpZGVBY3Rpb25CdXR0b25GbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8uaGlkZUFjdGlvbkJ1dHRvbiwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY2VsbCBjYXJyaWVzIGEgcm93IGRyYWcgaGFuZGxlLiAqL1xuICBwdWJsaWMgcm93RHJhZ0ZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5yb3dEcmFnLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgcHVibGljIHZhbHVlR2V0dGVyRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpID0+XG4gICAgcmVzb2x2ZU9uZVZhbHVlR2V0dGVyUGFyYW1zKGNvbHVtbj8udmFsdWVHZXR0ZXIsIHsgZGF0YTogbm9kZS5kYXRhLCByb3dJbmRleDogbm9kZS5yb3dJbmRleCwgbm9kZSwgY29udGV4dDogdGhpcy5fY29udGV4dCB9KTtcbn1cbiJdfQ==
|