@one-grid-core/angular 0.2.0 → 0.2.1
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.
|
@@ -127,6 +127,28 @@ export class OneGridCellService {
|
|
|
127
127
|
// is anything to format, and the formatter must see that same value.
|
|
128
128
|
return column.valueFormatter({ ...this.cellParams(column, node), value });
|
|
129
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* The placeholder for an empty cell, or `undefined` when this row's tree
|
|
132
|
+
* depth may not be edited.
|
|
133
|
+
*
|
|
134
|
+
* `cellRendererParams.placeholder` is a prompt, not data: it renders at half
|
|
135
|
+
* opacity where the value would go, which reads as "click here and fill this
|
|
136
|
+
* in". On the auto group column `editableLevels` decides which depths accept
|
|
137
|
+
* an edit at all, so a depth outside that list was advertising an edit the
|
|
138
|
+
* grid then refuses — the cell offers no input and the prompt never clears.
|
|
139
|
+
*
|
|
140
|
+
* The suppression is scoped to columns that actually declare `editableLevels`.
|
|
141
|
+
* The list is opt-in, and a column without one has no per-level rules rather
|
|
142
|
+
* than no editable levels, so plain grids and untouched tree columns keep
|
|
143
|
+
* showing their placeholder exactly as before.
|
|
144
|
+
*/
|
|
145
|
+
resolvePlaceholder(node, column) {
|
|
146
|
+
const placeholder = column?.cellRendererParams?.placeholder;
|
|
147
|
+
const editableLevels = column?.editableLevels;
|
|
148
|
+
if (!column?.autoGroupField || !Array.isArray(editableLevels))
|
|
149
|
+
return placeholder;
|
|
150
|
+
return editableLevels.includes(node?.level) ? placeholder : undefined;
|
|
151
|
+
}
|
|
130
152
|
/**
|
|
131
153
|
* Generate New Node State Based on Column Field
|
|
132
154
|
*/
|
|
@@ -152,7 +174,7 @@ export class OneGridCellService {
|
|
|
152
174
|
}
|
|
153
175
|
// 1. Cell Group Placeholder
|
|
154
176
|
if (isEmpty && isGroup && isAutoGroup) {
|
|
155
|
-
return { type: 'placeholder', value: column
|
|
177
|
+
return { type: 'placeholder', value: this.resolvePlaceholder(node, column) ?? this._cellValueGetter.transform(node.data, node, column, this._context) ?? '' };
|
|
156
178
|
}
|
|
157
179
|
// 2. Cell Group Text Value
|
|
158
180
|
if (isGroup && isAutoGroup) {
|
|
@@ -171,7 +193,7 @@ export class OneGridCellService {
|
|
|
171
193
|
if (valueGetter) {
|
|
172
194
|
return { type: 'text', value: this.formatValue(node, column, valueGetter) };
|
|
173
195
|
}
|
|
174
|
-
const placeholder = column
|
|
196
|
+
const placeholder = this.resolvePlaceholder(node, column) ?? '';
|
|
175
197
|
return { type: 'placeholder', value: placeholder };
|
|
176
198
|
}
|
|
177
199
|
// 4. Cell Text Value (leaves, including the auto group column — see above)
|
|
@@ -188,4 +210,4 @@ export class OneGridCellService {
|
|
|
188
210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellService, decorators: [{
|
|
189
211
|
type: Injectable
|
|
190
212
|
}] });
|
|
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==
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUlwRSxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBR1UseUJBQW9CLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxvQkFBZSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFzQixJQUFJLENBQUM7UUFxTnZDLDhFQUE4RTtRQUM5RSwrQkFBK0I7UUFDL0IsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSw4RUFBOEU7UUFDOUUsa0VBQWtFO1FBQ2xFLDhFQUE4RTtRQUU5RSw0RUFBNEU7UUFDckUsZUFBVSxHQUFHLENBQUMsTUFBb0IsRUFBRSxJQUFnQixFQUFXLEVBQUUsQ0FDdEUsNEJBQTRCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhGOzs7Ozs7V0FNRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxNQUFvQixF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LFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUU5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxhQUFhO1FBQ2IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7K0dBMU5VLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcywgT25lQ2VsbFN0YXRlLCBPbmVDZWxsU3RhdGVzLCBPbmVDb2x1bW5EZWYgfSBmcm9tICcuLi9tb2RlbHMvb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWwnO1xuaW1wb3J0IHsgQ2VsbEZpZWxkVmFsdWVFbXB0eVBpcGUgfSBmcm9tICcuLi9waXBlcy9jZWxsLWZpZWxkLXZhbHVlLWVtcHR5LnBpcGUnO1xuaW1wb3J0IHsgT25lUm93Tm9kZSB9IGZyb20gJy4uL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zLCByZXNvbHZlT25lVmFsdWVHZXR0ZXJQYXJhbXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL29uZS1jb2x1bW4tZGVmLmhlbHBlcic7XG5pbXBvcnQgeyBDZWxsVmFsdWVHZXR0ZXJQaXBlIH0gZnJvbSAnLi4vcGlwZXMvY2VsbC12YWx1ZS1nZXR0ZXIucGlwZSc7XG5pbXBvcnQgeyBDZWxsRmllbGRWYWx1ZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jZWxsLWZpZWxkLXZhbHVlLnBpcGUnO1xuaW1wb3J0IHR5cGUgeyBPbmVHcmlkQXBpIH0gZnJvbSAnLi4vaW5zdGFudHMvb25lLWdyaWQtYXBpLmNsYXNzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDZWxsU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfY2VsbEZpZWxkVmFsdWVFbXB0eSA9IG5ldyBDZWxsRmllbGRWYWx1ZUVtcHR5UGlwZSgpO1xuICBwcml2YXRlIF9jZWxsVmFsdWVHZXR0ZXIgPSBuZXcgQ2VsbFZhbHVlR2V0dGVyUGlwZSgpO1xuICBwcml2YXRlIF9jZWxsRmllbGRWYWx1ZSA9IG5ldyBDZWxsRmllbGRWYWx1ZVBpcGUoKTtcbiAgcHJpdmF0ZSBfY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xuICBwcml2YXRlIF9hcGk6IE9uZUdyaWRBcGkgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgYXBwbHlDb2x1bW5EZWZzKGNvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdLCBjb250ZXh0OiBhbnkpIHtcblxuICAgIHRoaXMuX2NvbHVtbkRlZnMgPSBjb2x1bW5EZWZzO1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBncmlkIGFwaSwgc28gcHJlZGljYXRlIHBhcmFtcyBjYW4gY2FycnkgaXQuXG4gICAqXG4gICAqIFB1c2hlZCBpbiByYXRoZXIgdGhhbiBpbmplY3RlZDogYE9uZUdyaWRBcGlgIGFscmVhZHkgZGVwZW5kcyBvbiB0aGlzXG4gICAqIHNlcnZpY2UsIGFuZCBpbmplY3RpbmcgaXQgYmFjayB3b3VsZCBjbG9zZSBhIERJIGN5Y2xlLlxuICAgKi9cbiAgcHVibGljIHNldEdyaWRBcGkoYXBpOiBPbmVHcmlkQXBpIHwgbnVsbCk6IHZvaWQge1xuXG4gICAgdGhpcy5fYXBpID0gYXBpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbXMgZXZlcnkgcm93LXNjb3BlZCBjb2x1bW4gY2FsbGJhY2sgcmVjZWl2ZXMuXG4gICAqXG4gICAqIE9uZSBidWlsZGVyLCBkZWxpYmVyYXRlbHk6IGBlZGl0YWJsZWAsIGB1cGRhdGFibGVgLCBgZGlzYWJsZWAsIGByb3dEcmFnYCxcbiAgICogYGhpZGVBY3Rpb25CdXR0b25gLCBgY2VsbENsYXNzYCwgYGNlbGxTdHlsZWAsIGBjZWxsUmVuZGVyZXJgIGFuZFxuICAgKiBgdmFsdWVGb3JtYXR0ZXJgIGFyZSBhbGwgXCJkZWNpZGUgc29tZXRoaW5nIGFib3V0IHRoaXMgY2VsbFwiLCBhbmQgYSBjb25zdW1lclxuICAgKiBzaG91bGQgbm90IGhhdmUgdG8gcmVtZW1iZXIgd2hpY2ggb2YgdGhlbSBoYXBwZW5zIHRvIGJlIGhhbmRlZCBgdmFsdWVgIG9yXG4gICAqIGBmaWVsZGAuIEVhY2ggdXNlZCB0byBiZSBjYWxsZWQgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBzdWJzZXQuXG4gICAqL1xuICBwdWJsaWMgY2VsbFBhcmFtcyhjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENvbHVtbiBjb25maWcgZmlyc3QsIHNvIHRoZSBncmlkJ3Mgb3duIGZpZWxkcyB3aW4gYSBuYW1lIGNvbGxpc2lvbjogYVxuICAgICAgLy8gc3RhbGUgYHZhbHVlYCBsZWZ0IGluIGBjZWxsUmVuZGVyZXJQYXJhbXNgIG11c3Qgbm90IHNoYWRvdyB0aGlzIGNlbGwncy5cbiAgICAgIC4uLihjb2x1bW4/LmNlbGxSZW5kZXJlclBhcmFtcyA/PyB7fSksXG4gICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlVmFsdWUobm9kZSwgY29sdW1uKSxcbiAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgIG5vZGUsXG4gICAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICAgIGZpZWxkOiBjb2x1bW4/LmZpZWxkIGFzIHN0cmluZyxcbiAgICAgIGNvbHVtbkRlZjogY29sdW1uLFxuICAgICAgYXBpOiB0aGlzLl9hcGkgPz8gdW5kZWZpbmVkLFxuICAgICAgY29udGV4dDogdGhpcy5fY29udGV4dCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIE5ldyBOb2RlIFN0YXRlc1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlQ2VsbFN0YXRlcyhub2RlOiBPbmVSb3dOb2RlKTogT25lQ2VsbFN0YXRlcyB8IG51bGwge1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG5ld1N0YXRlczogT25lQ2VsbFN0YXRlcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5fY29sdW1uRGVmcykge1xuXG4gICAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcblxuICAgICAgLy8gQ2VsbCBzdGF0ZSBpcyBrZXllZCBieSBmaWVsZCwgc28gYSBjb2x1bW4gd2l0aG91dCBvbmUgY29udHJpYnV0ZXNcbiAgICAgIC8vIG5vdGhpbmcuIFNraXBwaW5nIGl0IGtlZXBzIGB1bmRlZmluZWRgIG91dCBvZiB0aGUgc3RhdGUgb2JqZWN0OyBzdWNoIGFcbiAgICAgIC8vIGNvbHVtbiBzdGlsbCByZW5kZXJzIGl0cyBhY3Rpb24gYnV0dG9ucywgd2hpY2ggZG8gbm90IHJlYWQgY2VsbCBzdGF0ZS5cbiAgICAgIGlmICghZmllbGQpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoZmllbGQgIT09ICdfb25lUm93TnVtYmVyJykge1xuXG4gICAgICAgIG5ld1N0YXRlc1tmaWVsZF0gPSB0aGlzLmdlbmVyYXRlQ2VsbFN0YXRlKG5vZGUsIGNvbHVtbikgPz8gbm9kZS5jZWxsU3RhdGVzW2ZpZWxkXSA/PyB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG5cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbmV3U3RhdGVzW2ZpZWxkXSA9IG5vZGUuY2VsbFN0YXRlc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0YXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCdzIHZhbHVlOiB0aGUgYHZhbHVlR2V0dGVyYCdzIG91dHB1dCB3aGVyZSB0aGUgY29sdW1uIGRlY2xhcmVzIG9uZSxcbiAgICogdGhlIHJhdyBmaWVsZCBvdGhlcndpc2UuIFRoaXMgaXMgdGhlIHZhbHVlLCBub3QgdGhlIGRpc3BsYXkgdGV4dCDigJQgc2VlXG4gICAqIHtAbGluayBmb3JtYXRWYWx1ZX0uXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVWYWx1ZShub2RlOiBPbmVSb3dOb2RlLCBjb2x1bW46IE9uZUNvbHVtbkRlZik6IGFueSB7XG5cbiAgICByZXR1cm4gY29sdW1uPy52YWx1ZUdldHRlclxuICAgICAgPyB0aGlzLl9jZWxsVmFsdWVHZXR0ZXIudHJhbnNmb3JtKG5vZGUuZGF0YSwgbm9kZSwgY29sdW1uLCB0aGlzLl9jb250ZXh0KVxuICAgICAgOiB0aGlzLl9jZWxsRmllbGRWYWx1ZS50cmFuc2Zvcm0obm9kZS5kYXRhLCBjb2x1bW4uZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBjb2x1bW4ncyBgdmFsdWVGb3JtYXR0ZXJgLlxuICAgKlxuICAgKiBgdmFsdWVGb3JtYXR0ZXJgIHdhcyBkZWNsYXJlZCBvbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYW5kIGNhbGxlZCBmcm9tXG4gICAqIG5vd2hlcmUg4oCUIGEgY29uc3VtZXIgY291bGQgd3JpdGUgb25lLCBnZXQgbm8gZXJyb3IsIGFuZCBzZWUgbm90aGluZyBoYXBwZW4uXG4gICAqIEl0IHJ1bnMgb24gZGlzcGxheWVkIHRleHQgb25seSwgYWZ0ZXIgdGhlIGB2YWx1ZUdldHRlcmAsIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAgICogc2tpcHBlZCBmb3IgcGxhY2Vob2xkZXJzOiBhbiBlbXB0eSBjZWxsIGFscmVhZHkgaGFzIGl0cyBvd24gbWVjaGFuaXNtIGluXG4gICAqIGBjZWxsUmVuZGVyZXJQYXJhbXMucGxhY2Vob2xkZXJgLCBhbmQgdHdvIGZlYXR1cmVzIGNvbXBldGluZyB0byBmaWxsIHRoZVxuICAgKiBzYW1lIGdhcCBpcyB3b3JzZSB0aGFuIG9uZS5cbiAgICpcbiAgICogTm90ZSB0aGF0IHNvcnRpbmcgYW5kIGZpbHRlcmluZyByZWFkIHRoZSB1bmRlcmx5aW5nIHJvdyBkYXRhLCBub3QgdGhpcyDigJRcbiAgICogd2hpY2ggaXMgZXhhY3RseSB3aHkgZm9ybWF0dGluZyBiZWxvbmdzIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGdldHRlci5cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0VmFsdWUobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYsIHZhbHVlOiBhbnkpOiBhbnkge1xuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4/LnZhbHVlRm9ybWF0dGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cbiAgICAvLyBgdmFsdWVgIGlzIHBhc3NlZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuIGxlZnQgdG8gYGNlbGxQYXJhbXNgOiB0aGUgZW1wdHlcbiAgICAvLyAtY2VsbCBicmFuY2ggcmVzb2x2ZXMgaXQgdGhyb3VnaCB0aGUgZ2V0dGVyIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRoZXJlXG4gICAgLy8gaXMgYW55dGhpbmcgdG8gZm9ybWF0LCBhbmQgdGhlIGZvcm1hdHRlciBtdXN0IHNlZSB0aGF0IHNhbWUgdmFsdWUuXG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZUZvcm1hdHRlcih7IC4uLnRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxhY2Vob2xkZXIgZm9yIGFuIGVtcHR5IGNlbGwsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhpcyByb3cncyB0cmVlXG4gICAqIGRlcHRoIG1heSBub3QgYmUgZWRpdGVkLlxuICAgKlxuICAgKiBgY2VsbFJlbmRlcmVyUGFyYW1zLnBsYWNlaG9sZGVyYCBpcyBhIHByb21wdCwgbm90IGRhdGE6IGl0IHJlbmRlcnMgYXQgaGFsZlxuICAgKiBvcGFjaXR5IHdoZXJlIHRoZSB2YWx1ZSB3b3VsZCBnbywgd2hpY2ggcmVhZHMgYXMgXCJjbGljayBoZXJlIGFuZCBmaWxsIHRoaXNcbiAgICogaW5cIi4gT24gdGhlIGF1dG8gZ3JvdXAgY29sdW1uIGBlZGl0YWJsZUxldmVsc2AgZGVjaWRlcyB3aGljaCBkZXB0aHMgYWNjZXB0XG4gICAqIGFuIGVkaXQgYXQgYWxsLCBzbyBhIGRlcHRoIG91dHNpZGUgdGhhdCBsaXN0IHdhcyBhZHZlcnRpc2luZyBhbiBlZGl0IHRoZVxuICAgKiBncmlkIHRoZW4gcmVmdXNlcyDigJQgdGhlIGNlbGwgb2ZmZXJzIG5vIGlucHV0IGFuZCB0aGUgcHJvbXB0IG5ldmVyIGNsZWFycy5cbiAgICpcbiAgICogVGhlIHN1cHByZXNzaW9uIGlzIHNjb3BlZCB0byBjb2x1bW5zIHRoYXQgYWN0dWFsbHkgZGVjbGFyZSBgZWRpdGFibGVMZXZlbHNgLlxuICAgKiBUaGUgbGlzdCBpcyBvcHQtaW4sIGFuZCBhIGNvbHVtbiB3aXRob3V0IG9uZSBoYXMgbm8gcGVyLWxldmVsIHJ1bGVzIHJhdGhlclxuICAgKiB0aGFuIG5vIGVkaXRhYmxlIGxldmVscywgc28gcGxhaW4gZ3JpZHMgYW5kIHVudG91Y2hlZCB0cmVlIGNvbHVtbnMga2VlcFxuICAgKiBzaG93aW5nIHRoZWlyIHBsYWNlaG9sZGVyIGV4YWN0bHkgYXMgYmVmb3JlLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUGxhY2Vob2xkZXIobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjb2x1bW4/LmNlbGxSZW5kZXJlclBhcmFtcz8ucGxhY2Vob2xkZXI7XG4gICAgY29uc3QgZWRpdGFibGVMZXZlbHMgPSBjb2x1bW4/LmVkaXRhYmxlTGV2ZWxzO1xuXG4gICAgaWYgKCFjb2x1bW4/LmF1dG9Hcm91cEZpZWxkIHx8ICFBcnJheS5pc0FycmF5KGVkaXRhYmxlTGV2ZWxzKSkgcmV0dXJuIHBsYWNlaG9sZGVyO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlTGV2ZWxzLmluY2x1ZGVzKG5vZGU/LmxldmVsKSA/IHBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIE5ldyBOb2RlIFN0YXRlIEJhc2VkIG9uIENvbHVtbiBGaWVsZFxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlQ2VsbFN0YXRlKG5vZGU6IE9uZVJvd05vZGUsIGNvbHVtbjogT25lQ29sdW1uRGVmKTogT25lQ2VsbFN0YXRlIHtcblxuICAgIC8vIFRoaXMgd2FzIGBmaWVsZCAhPT0gdW5kZWZpbmVkIHx8IGZpZWxkICE9PSAnJyB8fCBmaWVsZCAhPT0gbnVsbGAsIHdoaWNoIGlzXG4gICAgLy8gdHJ1ZSBmb3IgZXZlcnkgcG9zc2libGUgdmFsdWUgaW5jbHVkaW5nIGFsbCB0aHJlZSBpdCBtZWFudCB0byBleGNsdWRlIOKAlFxuICAgIC8vIGB8fGAgd2hlcmUgYCYmYCB3YXMgaW50ZW5kZWQuIEl0IGdhdGVkIHRoZSBmb3VyIGJyYW5jaGVzIGJlbG93LCBzbyBub25lXG4gICAgLy8gb2YgdGhlbSBjb3VsZCBldmVyIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4gUmVkdWNlZCB0byB0aGUgY2hlY2sgaXRcbiAgICAvLyB3YXMgcmVhY2hpbmcgZm9yOiBhIGNvbHVtbiB3aXRoIG5vIGZpZWxkIGhhcyBubyB2YWx1ZSB0byByZW5kZXIuXG4gICAgY29uc3QgZmllbGQgPSBjb2x1bW4/LmZpZWxkO1xuXG4gICAgaWYgKCFmaWVsZCkge1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLl9jZWxsRmllbGRWYWx1ZUVtcHR5LnRyYW5zZm9ybShub2RlLmRhdGEsIGZpZWxkKTtcbiAgICBjb25zdCBpc0dyb3VwID0gbm9kZS5ncm91cCB8fCBub2RlLmxlYWZHcm91cDtcbiAgICBjb25zdCBpc0F1dG9Hcm91cCA9IGNvbHVtbj8uYXV0b0dyb3VwRmllbGQ7XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5jZWxsUmVuZGVyZXIgJiYgIWlzR3JvdXApIHtcblxuICAgICAgLy8gVGhlIHJlbmRlcmVyIHVzZWQgdG8gYmUgaGFuZGVkIGB7IG5vZGUsIGNvbHVtbkRlZiB9YCBhbmQgbm90aGluZyBlbHNlLFxuICAgICAgLy8gc28gdGhlIG9idmlvdXMgd2F5IHRvIHdyaXRlIG9uZSDigJQgYHBhcmFtcy52YWx1ZWAg4oCUIHByb2R1Y2VkIHRoZSBzdHJpbmdcbiAgICAgIC8vIFwidW5kZWZpbmVkXCIsIGFuZCBgcGFyYW1zLmRhdGEueGAgdGhyZXcuIEl0IG5vdyBnZXRzIGV4YWN0bHkgd2hhdCBldmVyeVxuICAgICAgLy8gb3RoZXIgcm93LXNjb3BlZCBob29rIGdldHMuXG4gICAgICByZXR1cm4geyB0eXBlOiAnaHRtbCcsIHZhbHVlOiBjb2x1bW4uY2VsbFJlbmRlcmVyKHRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpKSB9XG4gICAgfVxuXG4gICAgLy8gMS4gQ2VsbCBHcm91cCBQbGFjZWhvbGRlclxuICAgIGlmIChpc0VtcHR5ICYmIGlzR3JvdXAgJiYgaXNBdXRvR3JvdXApIHtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3BsYWNlaG9sZGVyJywgdmFsdWU6IHRoaXMucmVzb2x2ZVBsYWNlaG9sZGVyKG5vZGUsIGNvbHVtbikgPz8gdGhpcy5fY2VsbFZhbHVlR2V0dGVyLnRyYW5zZm9ybShub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dCkgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyAyLiBDZWxsIEdyb3VwIFRleHQgVmFsdWVcbiAgICBpZiAoaXNHcm91cCAmJiBpc0F1dG9Hcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUobm9kZSwgY29sdW1uLCB0aGlzLnJlc29sdmVWYWx1ZShub2RlLCBjb2x1bW4pKTtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdmFsdWUgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyAzLiBDZWxsIFBsYWNlaG9sZGVyXG4gICAgLy9cbiAgICAvLyBUaGUgYXV0byBncm91cCBjb2x1bW4gaXMgZGVsaWJlcmF0ZWx5IE5PVCBleGNsdWRlZCBoZXJlLiBDYXNlcyAxIGFuZCAyXG4gICAgLy8gYWJvdmUgYWxyZWFkeSBjbGFpbWVkIHRoZSBncm91cCByb3dzLCBzbyB3aGF0IHJlYWNoZXMgdGhpcyBwb2ludCBpcyBhXG4gICAgLy8gbGVhZiDigJQgYW5kIGEgbGVhZiBvbiB0aGUgYXV0byBncm91cCBjb2x1bW4gaGFzIHRvIHJlbmRlciBpdHMgbGFiZWwgdG9vLFxuICAgIC8vIGluZGVudGVkIGJ5IGxldmVsLiBFeGNsdWRpbmcgaXQgZHJvcHBlZCBldmVyeSBsZWFmIHRocm91Z2ggdG8gY2FzZSA1IGFuZFxuICAgIC8vIHJlbmRlcmVkIHRoZSBncm91cCBjb2x1bW4gYmxhbmsgZm9yIHRoZSB3aG9sZSBib3R0b20gcm93IG9mIGEgdHJlZS5cbiAgICBpZiAoaXNFbXB0eSAmJiAhaXNHcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZUdldHRlciA9IHRoaXMuX2NlbGxWYWx1ZUdldHRlci50cmFuc2Zvcm0obm9kZS5kYXRhLCBub2RlLCBjb2x1bW4sIHRoaXMuX2NvbnRleHQpO1xuXG4gICAgICBpZiAodmFsdWVHZXR0ZXIpIHtcblxuICAgICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0aGlzLmZvcm1hdFZhbHVlKG5vZGUsIGNvbHVtbiwgdmFsdWVHZXR0ZXIpIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5yZXNvbHZlUGxhY2Vob2xkZXIobm9kZSwgY29sdW1uKSA/PyAnJztcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3BsYWNlaG9sZGVyJywgdmFsdWU6IHBsYWNlaG9sZGVyIH07XG4gICAgfVxuXG4gICAgLy8gNC4gQ2VsbCBUZXh0IFZhbHVlIChsZWF2ZXMsIGluY2x1ZGluZyB0aGUgYXV0byBncm91cCBjb2x1bW4g4oCUIHNlZSBhYm92ZSlcbiAgICBpZiAoIWlzR3JvdXApIHtcblxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKG5vZGUsIGNvbHVtbiwgdGhpcy5yZXNvbHZlVmFsdWUobm9kZSwgY29sdW1uKSk7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHZhbHVlID8/ICcnIH07XG4gICAgfVxuXG4gICAgLy8gNS4gRGVmYXVsdFxuICAgIHJldHVybiB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUm93LXNjb3BlZCBjb2x1bW4gcHJlZGljYXRlc1xuICAvL1xuICAvLyBFdmVyeSBvbmUgb2YgdGhlc2UgcmVzb2x2ZXMgdGhlIHNhbWUgd2F5IGFuZCByZWNlaXZlcyB0aGUgc2FtZSBwYXJhbXMsIHZpYVxuICAvLyBgY2VsbFBhcmFtc2AuIFRoZXkgdXNlZCB0byBlYWNoIGJ1aWxkIHRoZWlyIG93biBzdWJzZXQgaW5saW5lLCB3aGljaCBpcyBob3dcbiAgLy8gYHZhbHVlYCwgYGZpZWxkYCBhbmQgYGFwaWAgY2FtZSB0byBiZSBtaXNzaW5nIGZyb20gYWxsIG9mIHRoZW0uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY2VsbCBtYXkgYmUgZWRpdGVkIGF0IGFsbC4gQSBjYXBhYmlsaXR5OiB1bnNldCBtZWFucyBuby4gKi9cbiAgcHVibGljIGVkaXRhYmxlRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LmVkaXRhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmQgZWRpdCBnYXRlLCBBTkRlZCB3aXRoIGBlZGl0YWJsZWAuXG4gICAqXG4gICAqIEEgcmVzdHJpY3Rpb24sIHNvIHVuc2V0IG1lYW5zIFwibm8gcmVzdHJpY3Rpb25cIi4gSXQgdXNlZCB0byByZXNvbHZlIHRocm91Z2hcbiAgICogYCEhdW5kZWZpbmVkYCB0byBgZmFsc2VgLCBjbG9zaW5nIHRoZSBnYXRlIG9uIGV2ZXJ5IGNvbHVtbiB0aGF0IGRpZCBub3QgbmFtZVxuICAgKiBpdCDigJQgc28gYGVkaXRhYmxlOiB0cnVlYCBvbiBpdHMgb3duIG1hZGUgbm90aGluZyBlZGl0YWJsZS5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGFibGVGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8udXBkYXRhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSwgdHJ1ZSk7XG5cbiAgLyoqIERpc2FibGVzIHRoaXMgY29sdW1uJ3Mgcm93IGFjdGlvbiBidXR0b25zLiBOb3QgYW4gZWRpdCBnYXRlLiAqL1xuICBwdWJsaWMgZGlzYWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5kaXNhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqIEhpZGVzIHRoaXMgY29sdW1uJ3Mgcm93IGFjdGlvbiBidXR0b25zIGVudGlyZWx5LiAqL1xuICBwdWJsaWMgaGlkZUFjdGlvbkJ1dHRvbkZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5oaWRlQWN0aW9uQnV0dG9uLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjZWxsIGNhcnJpZXMgYSByb3cgZHJhZyBoYW5kbGUuICovXG4gIHB1YmxpYyByb3dEcmFnRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LnJvd0RyYWcsIHRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpKTtcblxuICBwdWJsaWMgdmFsdWVHZXR0ZXJGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSkgPT5cbiAgICByZXNvbHZlT25lVmFsdWVHZXR0ZXJQYXJhbXMoY29sdW1uPy52YWx1ZUdldHRlciwgeyBkYXRhOiBub2RlLmRhdGEsIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LCBub2RlLCBjb250ZXh0OiB0aGlzLl9jb250ZXh0IH0pO1xufVxuIl19
|
|
@@ -872,6 +872,28 @@ class OneGridCellService {
|
|
|
872
872
|
// is anything to format, and the formatter must see that same value.
|
|
873
873
|
return column.valueFormatter({ ...this.cellParams(column, node), value });
|
|
874
874
|
}
|
|
875
|
+
/**
|
|
876
|
+
* The placeholder for an empty cell, or `undefined` when this row's tree
|
|
877
|
+
* depth may not be edited.
|
|
878
|
+
*
|
|
879
|
+
* `cellRendererParams.placeholder` is a prompt, not data: it renders at half
|
|
880
|
+
* opacity where the value would go, which reads as "click here and fill this
|
|
881
|
+
* in". On the auto group column `editableLevels` decides which depths accept
|
|
882
|
+
* an edit at all, so a depth outside that list was advertising an edit the
|
|
883
|
+
* grid then refuses — the cell offers no input and the prompt never clears.
|
|
884
|
+
*
|
|
885
|
+
* The suppression is scoped to columns that actually declare `editableLevels`.
|
|
886
|
+
* The list is opt-in, and a column without one has no per-level rules rather
|
|
887
|
+
* than no editable levels, so plain grids and untouched tree columns keep
|
|
888
|
+
* showing their placeholder exactly as before.
|
|
889
|
+
*/
|
|
890
|
+
resolvePlaceholder(node, column) {
|
|
891
|
+
const placeholder = column?.cellRendererParams?.placeholder;
|
|
892
|
+
const editableLevels = column?.editableLevels;
|
|
893
|
+
if (!column?.autoGroupField || !Array.isArray(editableLevels))
|
|
894
|
+
return placeholder;
|
|
895
|
+
return editableLevels.includes(node?.level) ? placeholder : undefined;
|
|
896
|
+
}
|
|
875
897
|
/**
|
|
876
898
|
* Generate New Node State Based on Column Field
|
|
877
899
|
*/
|
|
@@ -897,7 +919,7 @@ class OneGridCellService {
|
|
|
897
919
|
}
|
|
898
920
|
// 1. Cell Group Placeholder
|
|
899
921
|
if (isEmpty && isGroup && isAutoGroup) {
|
|
900
|
-
return { type: 'placeholder', value: column
|
|
922
|
+
return { type: 'placeholder', value: this.resolvePlaceholder(node, column) ?? this._cellValueGetter.transform(node.data, node, column, this._context) ?? '' };
|
|
901
923
|
}
|
|
902
924
|
// 2. Cell Group Text Value
|
|
903
925
|
if (isGroup && isAutoGroup) {
|
|
@@ -916,7 +938,7 @@ class OneGridCellService {
|
|
|
916
938
|
if (valueGetter) {
|
|
917
939
|
return { type: 'text', value: this.formatValue(node, column, valueGetter) };
|
|
918
940
|
}
|
|
919
|
-
const placeholder = column
|
|
941
|
+
const placeholder = this.resolvePlaceholder(node, column) ?? '';
|
|
920
942
|
return { type: 'placeholder', value: placeholder };
|
|
921
943
|
}
|
|
922
944
|
// 4. Cell Text Value (leaves, including the auto group column — see above)
|