ms-data-grid 0.0.65 → 0.0.68
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/esm2022/lib/data-grid/data-grid.component.mjs +76 -30
- package/esm2022/lib/data-grid.module.mjs +4 -3
- package/esm2022/lib/directives/cell-editor.directive.mjs +75 -0
- package/fesm2022/ms-data-grid.mjs +148 -30
- package/fesm2022/ms-data-grid.mjs.map +1 -1
- package/lib/data-grid/data-grid.component.d.ts +2 -0
- package/lib/data-grid.module.d.ts +8 -7
- package/lib/directives/cell-editor.directive.d.ts +18 -0
- package/package.json +1 -1
|
@@ -9,20 +9,21 @@ import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
|
9
9
|
import { CellHostDirective } from './directives/cellHost.directive';
|
|
10
10
|
import { CellRenderInitDirective } from './directives/cell-render-init.directive';
|
|
11
11
|
import { FormatCurrencyPipe } from './pipes/format-currency.pipe';
|
|
12
|
+
import { CellEditorDirective } from './directives/cell-editor.directive';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "ng-inline-svg";
|
|
14
15
|
export class DataGridModule {
|
|
15
16
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, FormatCurrencyPipe], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
|
|
17
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, CellEditorDirective, FormatCurrencyPipe], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
|
|
17
18
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, providers: [FormatCurrencyPipe, DatePipe], imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule] }); }
|
|
18
19
|
}
|
|
19
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, decorators: [{
|
|
20
21
|
type: NgModule,
|
|
21
22
|
args: [{
|
|
22
|
-
declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, FormatCurrencyPipe],
|
|
23
|
+
declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, CellEditorDirective, FormatCurrencyPipe],
|
|
23
24
|
imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule],
|
|
24
25
|
exports: [DataGridComponent],
|
|
25
26
|
providers: [FormatCurrencyPipe, DatePipe],
|
|
26
27
|
}]
|
|
27
28
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFTekUsTUFBTSxPQUFPLGNBQWM7K0dBQWQsY0FBYztnSEFBZCxjQUFjLGlCQUxWLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsYUFDdkgsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLHNCQUE2QixlQUFlLGFBQ3ZGLGlCQUFpQjtnSEFHZCxjQUFjLGFBRmQsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsWUFGL0IsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWU7OzRGQUlwRixjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBRztvQkFDcEksT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQztvQkFDbEcsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzFCLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgSW5saW5lU1ZHTW9kdWxlIH0gZnJvbSAnbmctaW5saW5lLXN2Zyc7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7IFxyXG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgRm9ybWF0Q3VycmVuY3lQaXBlIH0gZnJvbSAnLi9waXBlcy9mb3JtYXQtY3VycmVuY3kucGlwZSc7XHJcbmltcG9ydCB7IENlbGxFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3IuZGlyZWN0aXZlJztcclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0RhdGFHcmlkQ29tcG9uZW50LCBGaWx0ZXJQaXBlLCBDZWxsSG9zdERpcmVjdGl2ZSwgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUsIENlbGxFZGl0b3JEaXJlY3RpdmUsIEZvcm1hdEN1cnJlbmN5UGlwZSAgXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIElubGluZVNWR01vZHVsZS5mb3JSb290KCksIFNjcm9sbGluZ01vZHVsZV0sXHJcbmV4cG9ydHM6IFtEYXRhR3JpZENvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbRm9ybWF0Q3VycmVuY3lQaXBlLCBEYXRlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZE1vZHVsZSB7fVxyXG4iXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Directive, Input, Injector, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CellEditorDirective {
|
|
4
|
+
constructor(vcr, injector) {
|
|
5
|
+
this.vcr = vcr;
|
|
6
|
+
this.injector = injector;
|
|
7
|
+
// Parent component listens using:
|
|
8
|
+
// (editorEvent)="finishEdit($event)"
|
|
9
|
+
this.editorEvent = new EventEmitter();
|
|
10
|
+
}
|
|
11
|
+
ngOnInit() {
|
|
12
|
+
if (!this.componentType)
|
|
13
|
+
return;
|
|
14
|
+
// ✅ Dynamically create the editor component
|
|
15
|
+
const componentRef = this.vcr.createComponent(this.componentType, {
|
|
16
|
+
injector: Injector.create({
|
|
17
|
+
providers: [
|
|
18
|
+
{ provide: 'rowData', useValue: this.rowData },
|
|
19
|
+
{ provide: 'colData', useValue: this.colData },
|
|
20
|
+
{ provide: 'cellValue', useValue: this.cellValue }
|
|
21
|
+
],
|
|
22
|
+
parent: this.injector
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
// -----------------------------------------------
|
|
26
|
+
// 1️⃣ Call custom lifecycle hook if it exists
|
|
27
|
+
// -----------------------------------------------
|
|
28
|
+
if (typeof componentRef.instance.editorInit === 'function') {
|
|
29
|
+
componentRef.instance.editorInit({
|
|
30
|
+
row: this.rowData,
|
|
31
|
+
col: this.colData,
|
|
32
|
+
value: this.cellValue
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// -----------------------------------------------
|
|
36
|
+
// 2️⃣ Auto-detect all @Output() EventEmitters
|
|
37
|
+
// -----------------------------------------------
|
|
38
|
+
for (const key of Object.keys(componentRef.instance)) {
|
|
39
|
+
const property = componentRef.instance[key];
|
|
40
|
+
// Check if any property is an EventEmitter
|
|
41
|
+
if (property instanceof EventEmitter) {
|
|
42
|
+
property.subscribe((value) => {
|
|
43
|
+
this.editorEvent.emit({
|
|
44
|
+
eventName: key,
|
|
45
|
+
data: {
|
|
46
|
+
row: this.rowData,
|
|
47
|
+
col: this.colData,
|
|
48
|
+
value
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellEditorDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
56
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellEditorDirective, selector: "[cellEditor]", inputs: { componentType: ["cellEditor", "componentType"], rowData: "rowData", colData: "colData", cellValue: "cellValue" }, outputs: { editorEvent: "editorEvent" }, ngImport: i0 }); }
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellEditorDirective, decorators: [{
|
|
59
|
+
type: Directive,
|
|
60
|
+
args: [{
|
|
61
|
+
selector: '[cellEditor]'
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { componentType: [{
|
|
64
|
+
type: Input,
|
|
65
|
+
args: ['cellEditor']
|
|
66
|
+
}], rowData: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], colData: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], cellValue: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], editorEvent: [{
|
|
73
|
+
type: Output
|
|
74
|
+
}] } });
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1lZGl0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGlyZWN0aXZlcy9jZWxsLWVkaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUdSLFlBQVksRUFDWixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjlCLFlBQ1UsR0FBcUIsRUFDckIsUUFBa0I7UUFEbEIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVQ1QixrQ0FBa0M7UUFDbEMscUNBQXFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBR3BDLENBQUM7SUFLRixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMsNENBQTRDO1FBQzVDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FDOUQsSUFBSSxDQUFDLGFBQWEsRUFDbEI7WUFDRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ25EO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDO1NBQ0gsQ0FDRixDQUFDO1FBRUYsa0RBQWtEO1FBQ2xELDhDQUE4QztRQUM5QyxrREFBa0Q7UUFDbEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUMxRCxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUVELGtEQUFrRDtRQUNsRCw4Q0FBOEM7UUFDOUMsa0RBQWtEO1FBQ2xELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU1QywyQ0FBMkM7WUFDM0MsSUFBSSxRQUFRLFlBQVksWUFBWSxFQUFFO2dCQUNwQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNwQixTQUFTLEVBQUUsR0FBRzt3QkFDZCxJQUFJLEVBQUU7NEJBQ0osR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2pCLEtBQUs7eUJBQ047cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7K0dBdkVVLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6Qjs4SEFJc0IsYUFBYTtzQkFBakMsS0FBSzt1QkFBQyxZQUFZO2dCQUdWLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIFR5cGUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY2VsbEVkaXRvcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDZWxsRWRpdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLy8gQ29tcG9uZW50IHR5cGVcclxuICBASW5wdXQoJ2NlbGxFZGl0b3InKSBjb21wb25lbnRUeXBlITogVHlwZTxhbnk+O1xyXG5cclxuICAvLyBJbnB1dHMgcGFzc2VkIHRvIHRoZSBlZGl0b3IgY29tcG9uZW50XHJcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbERhdGE6IGFueTtcclxuICBASW5wdXQoKSBjZWxsVmFsdWU6IGFueTtcclxuXHJcbiAgLy8gUGFyZW50IGNvbXBvbmVudCBsaXN0ZW5zIHVzaW5nOlxyXG4gIC8vIChlZGl0b3JFdmVudCk9XCJmaW5pc2hFZGl0KCRldmVudClcIlxyXG4gIEBPdXRwdXQoKSBlZGl0b3JFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZXZlbnROYW1lOiBzdHJpbmc7XHJcbiAgICBkYXRhOiBhbnk7XHJcbiAgfT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRUeXBlKSByZXR1cm47XHJcblxyXG4gICAgLy8g4pyFIER5bmFtaWNhbGx5IGNyZWF0ZSB0aGUgZWRpdG9yIGNvbXBvbmVudFxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMudmNyLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlLFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAncm93RGF0YScsIHVzZVZhbHVlOiB0aGlzLnJvd0RhdGEgfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiB0aGlzLmNvbERhdGEgfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAnY2VsbFZhbHVlJywgdXNlVmFsdWU6IHRoaXMuY2VsbFZhbHVlIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAx77iP4oOjIENhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIGl0IGV4aXN0c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50UmVmLmluc3RhbmNlLmVkaXRvckluaXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmVkaXRvckluaXQoe1xyXG4gICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxyXG4gICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmNlbGxWYWx1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gMu+4j+KDoyBBdXRvLWRldGVjdCBhbGwgQE91dHB1dCgpIEV2ZW50RW1pdHRlcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV07XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBhbnkgcHJvcGVydHkgaXMgYW4gRXZlbnRFbWl0dGVyXHJcbiAgICAgIGlmIChwcm9wZXJ0eSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcikge1xyXG4gICAgICAgIHByb3BlcnR5LnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0b3JFdmVudC5lbWl0KHtcclxuICAgICAgICAgICAgZXZlbnROYW1lOiBrZXksXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICByb3c6IHRoaXMucm93RGF0YSxcclxuICAgICAgICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcclxuICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|