ngx-material-entity 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CONTRIBUTING.md +93 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +691 -0
  4. package/classes/entity-model.class.d.ts +9 -0
  5. package/classes/entity-service.class.d.ts +56 -0
  6. package/classes/entity-utilities.class.d.ts +95 -0
  7. package/components/confirm-dialog/confirm-dialog-data.d.ts +41 -0
  8. package/components/confirm-dialog/confirm-dialog.component.d.ts +18 -0
  9. package/components/confirm-dialog/confirm-dialog.module.d.ts +12 -0
  10. package/components/get-validation-error-message.function.d.ts +7 -0
  11. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +35 -0
  12. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.d.ts +12 -0
  13. package/components/input/array-table/array-table.component.d.ts +34 -0
  14. package/components/input/array-table/array-table.module.d.ts +19 -0
  15. package/components/input/input.component.d.ts +73 -0
  16. package/components/input/input.module.d.ts +18 -0
  17. package/components/input/internal-input/internal-input.component.d.ts +57 -0
  18. package/components/input/internal-input/internal-input.module.d.ts +16 -0
  19. package/components/table/create-dialog/create-entity-dialog-data.d.ts +21 -0
  20. package/components/table/create-dialog/create-entity-dialog.component.d.ts +25 -0
  21. package/components/table/create-dialog/create-entity-dialog.module.d.ts +12 -0
  22. package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +25 -0
  23. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +28 -0
  24. package/components/table/edit-dialog/edit-entity-dialog.module.d.ts +13 -0
  25. package/components/table/table-data.d.ts +184 -0
  26. package/components/table/table.component.d.ts +41 -0
  27. package/components/table/table.module.d.ts +17 -0
  28. package/decorators/array.decorator.d.ts +125 -0
  29. package/decorators/base/base-property.decorator.d.ts +9 -0
  30. package/decorators/base/decorator-types.enum.d.ts +28 -0
  31. package/decorators/base/property-decorator-config.interface.d.ts +50 -0
  32. package/decorators/boolean.decorator.d.ts +42 -0
  33. package/decorators/number.decorator.d.ts +40 -0
  34. package/decorators/object.decorator.d.ts +27 -0
  35. package/decorators/string.decorator.d.ts +76 -0
  36. package/esm2020/classes/entity-model.class.mjs +19 -0
  37. package/esm2020/classes/entity-service.class.mjs +70 -0
  38. package/esm2020/classes/entity-utilities.class.mjs +296 -0
  39. package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +2 -0
  40. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +51 -0
  41. package/esm2020/components/confirm-dialog/confirm-dialog.module.mjs +22 -0
  42. package/esm2020/components/get-validation-error-message.function.mjs +32 -0
  43. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +43 -0
  44. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.mjs +22 -0
  45. package/esm2020/components/input/array-table/array-table.component.mjs +116 -0
  46. package/esm2020/components/input/array-table/array-table.module.mjs +66 -0
  47. package/esm2020/components/input/input.component.mjs +158 -0
  48. package/esm2020/components/input/input.module.mjs +62 -0
  49. package/esm2020/components/input/internal-input/internal-input.component.mjs +73 -0
  50. package/esm2020/components/input/internal-input/internal-input.module.mjs +54 -0
  51. package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +2 -0
  52. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +77 -0
  53. package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +22 -0
  54. package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +2 -0
  55. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +112 -0
  56. package/esm2020/components/table/edit-dialog/edit-entity-dialog.module.mjs +42 -0
  57. package/esm2020/components/table/table-data.mjs +2 -0
  58. package/esm2020/components/table/table.component.mjs +232 -0
  59. package/esm2020/components/table/table.module.mjs +58 -0
  60. package/esm2020/decorators/array.decorator.mjs +70 -0
  61. package/esm2020/decorators/base/base-property.decorator.mjs +13 -0
  62. package/esm2020/decorators/base/decorator-types.enum.mjs +20 -0
  63. package/esm2020/decorators/base/property-decorator-config.interface.mjs +31 -0
  64. package/esm2020/decorators/boolean.decorator.mjs +44 -0
  65. package/esm2020/decorators/number.decorator.mjs +36 -0
  66. package/esm2020/decorators/object.decorator.mjs +23 -0
  67. package/esm2020/decorators/string.decorator.mjs +61 -0
  68. package/esm2020/ngx-material-entity.mjs +5 -0
  69. package/esm2020/public-api.mjs +32 -0
  70. package/fesm2015/ngx-material-entity.mjs +1786 -0
  71. package/fesm2015/ngx-material-entity.mjs.map +1 -0
  72. package/fesm2020/ngx-material-entity.mjs +1760 -0
  73. package/fesm2020/ngx-material-entity.mjs.map +1 -0
  74. package/ngx-material-entity.d.ts +5 -0
  75. package/package.json +40 -0
  76. package/public-api.d.ts +25 -0
@@ -0,0 +1,232 @@
1
+ import { Component, Injector, Input, ViewChild } from '@angular/core';
2
+ import { MatPaginator } from '@angular/material/paginator';
3
+ import { MatSort } from '@angular/material/sort';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import { firstValueFrom, Subject, takeUntil } from 'rxjs';
6
+ import { SelectionModel } from '@angular/cdk/collections';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';
9
+ import { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';
10
+ import { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/material/dialog";
13
+ import * as i2 from "@angular/material/form-field";
14
+ import * as i3 from "@angular/material/button";
15
+ import * as i4 from "@angular/material/menu";
16
+ import * as i5 from "@angular/material/table";
17
+ import * as i6 from "@angular/material/checkbox";
18
+ import * as i7 from "@angular/material/paginator";
19
+ import * as i8 from "@angular/material/input";
20
+ import * as i9 from "@angular/common";
21
+ export class NgxMatEntityTableComponent {
22
+ constructor(dialog, injector) {
23
+ this.dialog = dialog;
24
+ this.injector = injector;
25
+ this.onDestroy = new Subject();
26
+ this.dataSource = new MatTableDataSource();
27
+ this.selection = new SelectionModel(true, []);
28
+ }
29
+ ngOnInit() {
30
+ this.validateInput();
31
+ this.entityService = this.injector.get(this.entitiesData.baseData.EntityServiceClass);
32
+ const givenDisplayColumns = this.entitiesData.baseData.displayColumns.map((v) => v.displayName);
33
+ if (this.entitiesData.baseData.multiSelectActions?.length) {
34
+ if (givenDisplayColumns.find((s) => s === 'select')) {
35
+ throw new Error(`The name "select" for a display column is reserved for the multi-select action functionality.
36
+ Please choose a different name.`);
37
+ }
38
+ this.displayedColumns = ['select'].concat(givenDisplayColumns);
39
+ }
40
+ else {
41
+ this.displayedColumns = givenDisplayColumns;
42
+ }
43
+ this.dataSource.sortingDataAccessor = (entity, header) => {
44
+ return this.entitiesData.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity);
45
+ };
46
+ this.dataSource.sort = this.sort;
47
+ if (this.entitiesData.baseData.searchString) {
48
+ this.dataSource.filterPredicate = (entity, filter) => {
49
+ const searchStr = this.entitiesData.baseData.searchString?.(entity);
50
+ const formattedSearchString = searchStr.toLowerCase();
51
+ const formattedFilterString = filter.toLowerCase();
52
+ return formattedSearchString.includes(formattedFilterString);
53
+ };
54
+ }
55
+ this.dataSource.filter = this.filter;
56
+ this.dataSource.paginator = this.paginator;
57
+ this.entityService.entitiesSubject.pipe(takeUntil(this.onDestroy)).subscribe((entities) => {
58
+ this.dataSource.data = entities;
59
+ this.selection.clear();
60
+ });
61
+ this.entityService.read();
62
+ }
63
+ validateInput() {
64
+ if (!this.entitiesData.baseData.displayColumns) {
65
+ throw new Error('Missing required Input data "displayColumns"');
66
+ }
67
+ if (!this.entitiesData.baseData.title) {
68
+ throw new Error('Missing required Input data "title"');
69
+ }
70
+ if (!this.entitiesData.baseData.EntityServiceClass) {
71
+ throw new Error('Missing required Input data "EntityServiceClass"');
72
+ }
73
+ if (this.entitiesData.baseData.allowCreate === undefined) {
74
+ this.entitiesData.baseData.allowCreate = true;
75
+ }
76
+ if (this.entitiesData.baseData.allowEdit === undefined) {
77
+ this.entitiesData.baseData.allowEdit = () => true;
78
+ }
79
+ if (this.entitiesData.baseData.allowDelete === undefined) {
80
+ this.entitiesData.baseData.allowDelete = () => true;
81
+ }
82
+ if ((this.entitiesData.baseData.allowEdit !== (() => false)
83
+ || this.entitiesData.baseData.allowDelete !== (() => false)
84
+ || this.entitiesData.baseData.allowCreate)
85
+ && !this.entitiesData.baseData.EntityClass) {
86
+ throw new Error(`
87
+ Missing required Input data "EntityClass".
88
+ You can only omit this value if you can neither create or update entities.`);
89
+ }
90
+ if (this.entitiesData.baseData.allowCreate && !this.entitiesData.baseData.create && !this.entitiesData.createDialogData) {
91
+ throw new Error(`Missing required Input data "createDialogData".
92
+ You can only omit this value when creation is disallowed or done with a custom create method.`);
93
+ }
94
+ if ((this.entitiesData.baseData.allowEdit !== (() => false)
95
+ || this.entitiesData.baseData.allowDelete !== (() => false))
96
+ && !this.entitiesData.baseData.edit
97
+ && !this.entitiesData.editDialogData) {
98
+ throw new Error(`Missing required Input data "editDialogData".
99
+ You can only omit this value when editing and deleting is disallowed or done with a custom edit method.`);
100
+ }
101
+ }
102
+ editEntity(entity) {
103
+ if (this.entitiesData.baseData.allowEdit?.(entity)) {
104
+ if (this.entitiesData.baseData.edit) {
105
+ this.entitiesData.baseData.edit(new this.entitiesData.baseData.EntityClass(entity));
106
+ }
107
+ else {
108
+ this.editDefault(new this.entitiesData.baseData.EntityClass(entity));
109
+ }
110
+ }
111
+ }
112
+ editDefault(entity) {
113
+ const dialogData = {
114
+ entity: entity,
115
+ EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
116
+ allowDelete: this.entitiesData.baseData.allowDelete,
117
+ editDialogData: this.entitiesData.editDialogData
118
+ };
119
+ firstValueFrom(this.dialog.open(NgxMatEntityEditDialogComponent, {
120
+ data: dialogData,
121
+ minWidth: '60%',
122
+ autoFocus: false,
123
+ restoreFocus: false
124
+ }).afterClosed()).then((res) => {
125
+ if (res === 0) {
126
+ const data = this.dataSource.data;
127
+ data[this.dataSource.data.findIndex((e) => e.id === entity.id)] = entity;
128
+ this.dataSource.data = data;
129
+ this.selection.clear();
130
+ }
131
+ });
132
+ }
133
+ createEntity() {
134
+ if (this.entitiesData.baseData.allowCreate) {
135
+ if (this.entitiesData.baseData.create) {
136
+ this.entitiesData.baseData.create(new this.entitiesData.baseData.EntityClass());
137
+ }
138
+ else {
139
+ this.createDefault(new this.entitiesData.baseData.EntityClass());
140
+ }
141
+ }
142
+ }
143
+ createDefault(entity) {
144
+ const dialogData = {
145
+ entity: entity,
146
+ EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
147
+ createDialogData: this.entitiesData.createDialogData
148
+ };
149
+ this.dialog.open(NgxMatEntityCreateDialogComponent, {
150
+ data: dialogData,
151
+ minWidth: '60%',
152
+ autoFocus: false,
153
+ restoreFocus: false
154
+ });
155
+ }
156
+ runMultiAction(action) {
157
+ if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {
158
+ return this.confirmRunMultiAction(action);
159
+ }
160
+ const dialogData = {
161
+ // eslint-disable-next-line max-len
162
+ text: action.confirmDialogData?.text ? action.confirmDialogData?.text : [`Do you really want to run this action on ${this.selection.selected.length} entries?`],
163
+ type: 'default',
164
+ confirmButtonLabel: action.confirmDialogData?.confirmButtonLabel ? action.confirmDialogData?.confirmButtonLabel : 'Confirm',
165
+ cancelButtonLabel: action.confirmDialogData?.cancelButtonLabel ? action.confirmDialogData?.cancelButtonLabel : 'Cancel',
166
+ title: action.confirmDialogData?.title ? action.confirmDialogData?.title : action.displayName,
167
+ requireConfirmation: action.confirmDialogData?.requireConfirmation ? action.confirmDialogData?.requireConfirmation : false,
168
+ confirmationText: action.confirmDialogData?.confirmationText ? action.confirmDialogData?.confirmationText : undefined
169
+ };
170
+ const dialogref = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
171
+ data: dialogData,
172
+ autoFocus: false,
173
+ restoreFocus: false
174
+ });
175
+ dialogref.afterClosed().subscribe((res) => {
176
+ if (res === 1) {
177
+ this.confirmRunMultiAction(action);
178
+ }
179
+ });
180
+ }
181
+ confirmRunMultiAction(action) {
182
+ action.action(this.selection.selected);
183
+ }
184
+ multiActionDisabled(action) {
185
+ if (!this.selection.selected.length) {
186
+ return true;
187
+ }
188
+ if (action.enabled?.(this.selection.selected) === false) {
189
+ return true;
190
+ }
191
+ return false;
192
+ }
193
+ masterToggle() {
194
+ if (this.isAllSelected()) {
195
+ this.selection.clear();
196
+ }
197
+ else {
198
+ this.dataSource.data.forEach((row) => this.selection.select(row));
199
+ }
200
+ }
201
+ isAllSelected() {
202
+ const numSelected = this.selection.selected.length;
203
+ const numRows = this.dataSource.data.length;
204
+ return numSelected === numRows;
205
+ }
206
+ ngOnDestroy() {
207
+ this.onDestroy.next(undefined);
208
+ this.onDestroy.complete();
209
+ }
210
+ applyFilter(event) {
211
+ const filterValue = event.target.value;
212
+ this.dataSource.filter = filterValue.trim().toLowerCase();
213
+ }
214
+ }
215
+ NgxMatEntityTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, deps: [{ token: i1.MatDialog }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
216
+ NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityTableComponent, selector: "ngx-mat-entity-table", inputs: { entitiesData: "entitiesData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i2.MatLabel, selector: "mat-label" }, { type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5.MatCellDef, selector: "[matCellDef]" }, { type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, decorators: [{
218
+ type: Component,
219
+ args: [{ selector: 'ngx-mat-entity-table', template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"] }]
220
+ }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.Injector }]; }, propDecorators: { entitiesData: [{
221
+ type: Input
222
+ }], paginator: [{
223
+ type: ViewChild,
224
+ args: [MatPaginator, { static: true }]
225
+ }], sort: [{
226
+ type: ViewChild,
227
+ args: [MatSort, { static: true }]
228
+ }], filter: [{
229
+ type: ViewChild,
230
+ args: ['filter', { static: true }]
231
+ }] } });
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTywwQkFBMEI7SUFpQm5DLFlBQTZCLE1BQWlCLEVBQW1CLFFBQWtCO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVJsRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FB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QztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7d0hBek9RLDBCQUEwQjs0R0FBMUIsMEJBQTBCLGlKQVV4QixZQUFZLHFGQUNaLE9BQU8sK0pDakN0Qix3c0hBb0VBOzRGRDlDYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksc0JBQXNCO3VIQVVoQyxZQUFZO3NCQURYLEtBQUs7Z0JBS3FDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVFbnRpdHlEaWFsb2dEYXRhIH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5RWRpdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGlhbG9nRGF0YSB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RBY3Rpb24sIEVudGl0aWVzRGF0YSwgQ3JlYXRlRGlhbG9nRGF0YSwgRWRpdERpYWxvZ0RhdGEgfSBmcm9tICcuL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVudGl0aWVzLWNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW50aXRpZXNEYXRhITogRW50aXRpZXNEYXRhPEVudGl0eVR5cGU+O1xuXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlITogRW50aXR5U2VydmljZTxFbnRpdHlUeXBlPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQhOiBNYXRTb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGZpbHRlciE6IHN0cmluZztcbiAgICBkaXNwbGF5ZWRDb2x1bW5zITogc3RyaW5nW107XG4gICAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPEVudGl0eVR5cGU+ID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4odHJ1ZSwgW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCk7XG5cbiAgICAgICAgdGhpcy5lbnRpdHlTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzKSBhcyBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+O1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnMgPSB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5tYXAoKHYpID0+IHYuZGlzcGxheU5hbWUpO1xuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChnaXZlbkRpc3BsYXlDb2x1bW5zLmZpbmQoKHMpID0+IHMgPT09ICdzZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBuYW1lIFwic2VsZWN0XCIgZm9yIGEgZGlzcGxheSBjb2x1bW4gaXMgcmVzZXJ2ZWQgZm9yIHRoZSBtdWx0aS1zZWxlY3QgYWN0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgbmFtZS5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsnc2VsZWN0J10uY29uY2F0KGdpdmVuRGlzcGxheUNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gZ2l2ZW5EaXNwbGF5Q29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGVudGl0eTogRW50aXR5VHlwZSwgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5maW5kKChkcCkgPT4gZHAuZGlzcGxheU5hbWUgPT09IGhlYWRlcik/LnZhbHVlKGVudGl0eSkgYXMgc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU3RyID0gdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuc2VhcmNoU3RyaW5nPy4oZW50aXR5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkU2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRmlsdGVyU3RyaW5nID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UucmVhZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJkaXNwbGF5Q29sdW1uc1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS50aXRsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJ0aXRsZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiRW50aXR5U2VydmljZUNsYXNzXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dFZGl0ID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPSAoKSA9PiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcIkVudGl0eUNsYXNzXCIuXG4gICAgICAgICAgICAgICAgWW91IGNhbiBvbmx5IG9taXQgdGhpcyB2YWx1ZSBpZiB5b3UgY2FuIG5laXRoZXIgY3JlYXRlIG9yIHVwZGF0ZSBlbnRpdGllcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuY3JlYXRlICYmICF0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcImNyZWF0ZURpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gY3JlYXRpb24gaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gY3JlYXRlIG1ldGhvZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgJiYgIXRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXRcbiAgICAgICAgICAgICYmICF0aGlzLmVudGl0aWVzRGF0YS5lZGl0RGlhbG9nRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiZWRpdERpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gZWRpdGluZyBhbmQgZGVsZXRpbmcgaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gZWRpdCBtZXRob2QuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRFbnRpdHkoZW50aXR5OiBFbnRpdHlUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0RGVmYXVsdChuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBlZGl0RGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogRWRpdEVudGl0eURpYWxvZ0RhdGE8RW50aXR5VHlwZT4gPSB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzLFxuICAgICAgICAgICAgYWxsb3dEZWxldGU6IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlIGFzIChlbnRpdHk6IEVudGl0eVR5cGUpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICBlZGl0RGlhbG9nRGF0YTogdGhpcy5lbnRpdGllc0RhdGEuZWRpdERpYWxvZ0RhdGEgYXMgRWRpdERpYWxvZ0RhdGE8RW50aXR5VHlwZT5cbiAgICAgICAgfTtcbiAgICAgICAgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKCBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9KS5hZnRlckNsb3NlZCgpXG4gICAgICAgICkudGhlbigocmVzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YVt0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGVudGl0eS5pZCldID0gZW50aXR5O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVFbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZShuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ3JlYXRlRW50aXR5RGlhbG9nRGF0YTxFbnRpdHlUeXBlPiA9IHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgRW50aXR5U2VydmljZUNsYXNzOiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MsXG4gICAgICAgICAgICBjcmVhdGVEaWFsb2dEYXRhOiB0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhIGFzIENyZWF0ZURpYWxvZ0RhdGFcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDcmVhdGVEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBydW5NdWx0aUFjdGlvbihhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogdm9pZCB7XG4gICAgICAgIGlmICghYWN0aW9uLnJlcXVpcmVDb25maXJtRGlhbG9nIHx8ICFhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICB0ZXh0OiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgPyBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgOiBbYERvIHlvdSByZWFsbHkgd2FudCB0byBydW4gdGhpcyBhY3Rpb24gb24gJHt0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGh9IGVudHJpZXM/YF0sXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY29uZmlybUJ1dHRvbkxhYmVsID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtQnV0dG9uTGFiZWwgOiAnQ29uZmlybScsXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25MYWJlbDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jYW5jZWxCdXR0b25MYWJlbCA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY2FuY2VsQnV0dG9uTGFiZWwgOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRpdGxlID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy50aXRsZSA6IGFjdGlvbi5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHJlcXVpcmVDb25maXJtYXRpb246IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlybWF0aW9uVGV4dDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0ID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0IDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpYWxvZ3JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dyZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgY29uZmlybVJ1bk11bHRpQWN0aW9uKGFjdGlvbjogTXVsdGlTZWxlY3RBY3Rpb248RW50aXR5VHlwZT4pOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgbXVsdGlBY3Rpb25EaXNhYmxlZChhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uLmVuYWJsZWQ/Lih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbWFzdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxufSIsIjxoMSBjbGFzcz1cInRpdGxlXCI+e3tlbnRpdGllc0RhdGEuYmFzZURhdGEudGl0bGV9fTwvaDE+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtbGctOCBjb2wtbWQtNiBjb2wtc20tMTJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA6ICdTZWFyY2gnfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdExhYmVsID8gZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0TGFiZWwgOiAnQWN0aW9ucyd9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zXCIgW2Rpc2FibGVkXT1cIm11bHRpQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5NdWx0aUFjdGlvbihhY3Rpb24pXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjcmVhdGUtYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZUVudGl0eSgpXCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA6ICdDcmVhdGUnfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8bWF0LXRhYmxlICpuZ0lmPVwiZGF0YVNvdXJjZVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgbW9kdWxlXCIgY2xhc3M9XCJtb2R1bGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUobW9kdWxlKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChtb2R1bGUpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZENvbCBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImRDb2wuZGlzcGxheU5hbWVcIj5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIHt7ZENvbC5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDxtYXQtY2VsbCBjbGFzcz1cImVudGl0eVwiIFtjbGFzcy5lbmFibGVkXT1cImVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpXCIgKGNsaWNrKT1cImVkaXRFbnRpdHkoZW50aXR5KVwiICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIHt7ZENvbC52YWx1ZShlbnRpdHkpfX1cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtcm93PlxuICAgIDwvbWF0LXRhYmxlPlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJkYXRhU291cmNlXCIgaWQ9XCJwYWdpbmF0b3JcIiBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+IDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,58 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgxMatEntityTableComponent } from './table.component';
4
+ import { MatInputModule } from '@angular/material/input';
5
+ import { FormsModule } from '@angular/forms';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatCheckboxModule } from '@angular/material/checkbox';
8
+ import { MatTableModule } from '@angular/material/table';
9
+ import { MatPaginatorModule } from '@angular/material/paginator';
10
+ import { MatButtonModule } from '@angular/material/button';
11
+ import { MatMenuModule } from '@angular/material/menu';
12
+ import { MatDialogModule } from '@angular/material/dialog';
13
+ import * as i0 from "@angular/core";
14
+ export class NgxMatEntityTableModule {
15
+ }
16
+ NgxMatEntityTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
+ NgxMatEntityTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, declarations: [NgxMatEntityTableComponent], imports: [CommonModule,
18
+ MatInputModule,
19
+ FormsModule,
20
+ MatFormFieldModule,
21
+ MatCheckboxModule,
22
+ MatTableModule,
23
+ MatPaginatorModule,
24
+ MatButtonModule,
25
+ MatMenuModule,
26
+ MatDialogModule], exports: [NgxMatEntityTableComponent] });
27
+ NgxMatEntityTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, imports: [[
28
+ CommonModule,
29
+ MatInputModule,
30
+ FormsModule,
31
+ MatFormFieldModule,
32
+ MatCheckboxModule,
33
+ MatTableModule,
34
+ MatPaginatorModule,
35
+ MatButtonModule,
36
+ MatMenuModule,
37
+ MatDialogModule
38
+ ]] });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, decorators: [{
40
+ type: NgModule,
41
+ args: [{
42
+ declarations: [NgxMatEntityTableComponent],
43
+ imports: [
44
+ CommonModule,
45
+ MatInputModule,
46
+ FormsModule,
47
+ MatFormFieldModule,
48
+ MatCheckboxModule,
49
+ MatTableModule,
50
+ MatPaginatorModule,
51
+ MatButtonModule,
52
+ MatMenuModule,
53
+ MatDialogModule
54
+ ],
55
+ exports: [NgxMatEntityTableComponent]
56
+ }]
57
+ }] });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBa0IzRCxNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBZmpCLDBCQUEwQixhQUVyQyxZQUFZO1FBQ1osY0FBYztRQUNkLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGFBQWE7UUFDYixlQUFlLGFBRVQsMEJBQTBCO3NIQUUzQix1QkFBdUIsWUFkdkI7WUFDTCxZQUFZO1lBQ1osY0FBYztZQUNkLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO1NBQ2xCOzRGQUdRLHVCQUF1QjtrQkFoQm5DLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neE1hdEVudGl0eVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVNb2R1bGUge30iXX0=
@@ -0,0 +1,70 @@
1
+ import { baseProperty } from './base/base-property.decorator';
2
+ import { DecoratorTypes } from './base/decorator-types.enum';
3
+ import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';
4
+ /**
5
+ * Decorator for setting and getting array propery metadata
6
+ * @param metadata The metadata of the array property
7
+ */
8
+ export function array(metadata) {
9
+ switch (metadata.itemType) {
10
+ case DecoratorTypes.OBJECT:
11
+ return baseProperty(new EntityArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY);
12
+ case DecoratorTypes.STRING:
13
+ return baseProperty(new StringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_CHIPS);
14
+ case DecoratorTypes.STRING_AUTOCOMPLETE:
15
+ return baseProperty(new AutocompleteStringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS);
16
+ default:
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
18
+ throw new Error(`Unknown itemType ${metadata.itemType}`);
19
+ }
20
+ }
21
+ /**
22
+ * Interface definition for the @array metadata
23
+ */
24
+ class ArrayDecoratorConfig extends PropertyDecoratorConfig {
25
+ }
26
+ /**
27
+ * Definition for an array of Entities
28
+ */
29
+ export class EntityArrayDecoratorConfig extends ArrayDecoratorConfig {
30
+ constructor(metadata) {
31
+ super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
32
+ this.itemType = metadata.itemType;
33
+ this.displayStyle = metadata.displayStyle;
34
+ this.EntityClass = metadata.EntityClass;
35
+ this.createDialogData = metadata.createDialogData;
36
+ this.missingErrorMessage = metadata.missingErrorMessage;
37
+ this.createInline = metadata.createInline;
38
+ this.displayColumns = metadata.displayColumns;
39
+ }
40
+ }
41
+ /**
42
+ * Definition for an array of strings displayed as a chips list
43
+ */
44
+ export class StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {
45
+ constructor(metadata) {
46
+ super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
47
+ this.itemType = metadata.itemType;
48
+ this.displayStyle = metadata.displayStyle;
49
+ this.deleteHtml = metadata.deleteHtml;
50
+ this.minLength = metadata.minLength;
51
+ this.maxLength = metadata.maxLength;
52
+ this.regex = metadata.regex;
53
+ }
54
+ }
55
+ /**
56
+ * Definition for an array of autocomplete strings displayed as a chips list
57
+ */
58
+ export class AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {
59
+ constructor(metadata) {
60
+ super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
61
+ this.itemType = metadata.itemType;
62
+ this.displayStyle = metadata.displayStyle;
63
+ this.deleteHtml = metadata.deleteHtml;
64
+ this.autocompleteValues = metadata.autocompleteValues;
65
+ this.minLength = metadata.minLength;
66
+ this.maxLength = metadata.maxLength;
67
+ this.regex = metadata.regex;
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9hcnJheS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixRQUFnSTtJQUVoSSxRQUFRLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsS0FBSyxjQUFjLENBQUMsTUFBTTtZQUN0QixPQUFPLFlBQVksQ0FBQyxJQUFJLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RixLQUFLLGNBQWMsQ0FBQyxNQUFNO1lBQ3RCLE9BQU8sWUFBWSxDQUFDLElBQUksK0JBQStCLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUcsS0FBSyxjQUFjLENBQUMsbUJBQW1CO1lBQ25DLE9BQU8sWUFBWSxDQUFDLElBQUksMkNBQTJDLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkk7WUFDSSwwR0FBMEc7WUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBcUIsUUFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3pFO0FBQ0wsQ0FBQztBQWFEOztHQUVHO0FBQ0gsTUFBZSxvQkFBcUIsU0FBUSx1QkFBdUI7Q0FlbEU7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBc0QsU0FBUSxvQkFBb0I7SUE0QjNGLFlBQVksUUFBZ0Q7UUFDeEQsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQTtJQUNqRCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxvQkFBb0I7SUF5QnJFLFlBQVksUUFBeUM7UUFDakQsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywyQ0FBNEMsU0FBUSxvQkFBb0I7SUE2QmpGLFlBQVksUUFBcUQ7UUFDN0QsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uL2NsYXNzZXMvZW50aXR5LW1vZGVsLmNsYXNzJztcbmltcG9ydCB7IENyZWF0ZURpYWxvZ0RhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgYmFzZVByb3BlcnR5IH0gZnJvbSAnLi9iYXNlL2Jhc2UtcHJvcGVydHkuZGVjb3JhdG9yJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgYXJyYXkgcHJvcGVyeSBtZXRhZGF0YVxuICogQHBhcmFtIG1ldGFkYXRhIFRoZSBtZXRhZGF0YSBvZiB0aGUgYXJyYXkgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5PEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KFxuICAgIG1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB8IFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcgfCBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnXG4pOiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHZvaWQge1xuICAgIHN3aXRjaCAobWV0YWRhdGEuaXRlbVR5cGUpIHtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICByZXR1cm4gYmFzZVByb3BlcnR5KG5ldyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZyhtZXRhZGF0YSksIERlY29yYXRvclR5cGVzLkFSUkFZKTtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gYmFzZVByb3BlcnR5KG5ldyBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnKG1ldGFkYXRhKSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTKTtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkdfQVVUT0NPTVBMRVRFOlxuICAgICAgICAgICAgcmV0dXJuIGJhc2VQcm9wZXJ0eShuZXcgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyhtZXRhZGF0YSksIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGl0ZW1UeXBlICR7KG1ldGFkYXRhIGFzIGFueSkuaXRlbVR5cGV9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5VGFibGVEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBpbnNpZGUgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRvIGdldCB0aGUgdmFsdWUgaW5zaWRlIGFuIHJvd1xuICAgICAqL1xuICAgIHZhbHVlOiAoZW50aXR5OiBFbnRpdHlUeXBlKSA9PiBzdHJpbmdcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdGhlIEBhcnJheSBtZXRhZGF0YVxuICovXG5hYnN0cmFjdCBjbGFzcyBBcnJheURlY29yYXRvckNvbmZpZyBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBIb3cgdG8gZGlzcGxheSB0aGUgc3RyaW5nXG4gICAgICovXG4gICAgZGlzcGxheVN0eWxlITogJ3RhYmxlJyB8ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW5zaWRlIHRoZSBhcnJheVxuICAgICAqL1xuICAgIGl0ZW1UeXBlITogRGVjb3JhdG9yVHlwZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3ItbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGFycmF5IGlzIHJlcXVpcmVkIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICAgKi9cbiAgICBtaXNzaW5nRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gZm9yIGFuIGFycmF5IG9mIEVudGl0aWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5PiBleHRlbmRzIEFycmF5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICBvdmVycmlkZSBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuT0JKRUNUO1xuICAgIG92ZXJyaWRlIGRpc3BsYXlTdHlsZTogJ3RhYmxlJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBFbnRpdHlDbGFzcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBjcmVhdGUgaW5wdXRzXG4gICAgICovXG4gICAgRW50aXR5Q2xhc3MhOiBuZXcgKGVudGl0eT86IEVudGl0eVR5cGUpID0+IEVudGl0eVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgY29sdW1ucyB0byBkaXNwbGF5LiBDb25zaXN0cyBvZiB0aGUgZGlzcGxheU5hbWUgdG8gc2hvdyBpbiB0aGUgaGVhZGVyIG9mIHRoZSByb3dcbiAgICAgKiBhbmQgdGhlIHZhbHVlLCB3aGljaCBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluc2lkZSBhIGNvbHVtblxuICAgICAqL1xuICAgIGRpc3BsYXlDb2x1bW5zOiBBcnJheVRhYmxlRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPltdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZm9yIHRoZSBhZGQtaXRlbS1kaWFsb2cuXG4gICAgICogQ2FuIGJlIG9taXR0ZWQgd2hlbiBhZGRpbmcgaXRlbXMgaW5saW5lLlxuICAgICAqL1xuICAgIGNyZWF0ZURpYWxvZ0RhdGE/OiBDcmVhdGVEaWFsb2dEYXRhXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBmb3IgYWRkaW5nIGl0ZW1zIHRvIHRoZSBhcnJheVxuICAgICAqIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBjcmVhdGVJbmxpbmU/OiBib29sZWFuXG5cbiAgICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4pIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXksXG4gICAgICAgICAgICBtZXRhZGF0YS5yZXF1aXJlZCxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmYXVsdFdpZHRocyxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9yZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBtZXRhZGF0YS5pdGVtVHlwZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5U3R5bGUgPSBtZXRhZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuRW50aXR5Q2xhc3MgPSBtZXRhZGF0YS5FbnRpdHlDbGFzcztcbiAgICAgICAgdGhpcy5jcmVhdGVEaWFsb2dEYXRhID0gbWV0YWRhdGEuY3JlYXRlRGlhbG9nRGF0YTtcbiAgICAgICAgdGhpcy5taXNzaW5nRXJyb3JNZXNzYWdlID0gbWV0YWRhdGEubWlzc2luZ0Vycm9yTWVzc2FnZTtcbiAgICAgICAgdGhpcy5jcmVhdGVJbmxpbmUgPSBtZXRhZGF0YS5jcmVhdGVJbmxpbmU7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBtZXRhZGF0YS5kaXNwbGF5Q29sdW1uc1xuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIGZvciBhbiBhcnJheSBvZiBzdHJpbmdzIGRpc3BsYXllZCBhcyBhIGNoaXBzIGxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcgZXh0ZW5kcyBBcnJheURlY29yYXRvckNvbmZpZyB7XG4gICAgb3ZlcnJpZGUgaXRlbVR5cGU6IERlY29yYXRvclR5cGVzLlNUUklORztcbiAgICBvdmVycmlkZSBkaXNwbGF5U3R5bGU6ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaHRtbCBpbnNpZGUgdGhlIGRlbGV0ZS1idXR0b24uXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBjdXN0b20gdGFncyBzdWNoIGFzIDxtYXQtaWNvbj48L21hdC1pY29uPlxuICAgICAqIG5lZWQgdG8gYmUgZGVmaW5lZCBhcyBrbm93biBlbGVtZW50cywgb3RoZXJ3aXNlIHRoZSBzYW5pdGl6ZXIgd2lsbCByZW1vdmUgdGhlbS5cbiAgICAgKiBZb3UgY2FuIGhvd2V2ZXIgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPjwvc3Bhbj5gXG4gICAgICogQGRlZmF1bHQgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICovXG4gICAgZGVsZXRlSHRtbD86IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgVGhlIG1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoIG9mIHRoZSBzdHJpbmdcbiAgICAgKi9cbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogKG9wdGlvbmFsKSBUaGUgbWF4aW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZ1xuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIEEgcmVnZXggdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgICAqL1xuICAgIHJlZ2V4PzogUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IobWV0YWRhdGE6IFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXksXG4gICAgICAgICAgICBtZXRhZGF0YS5yZXF1aXJlZCxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmYXVsdFdpZHRocyxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9yZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBtZXRhZGF0YS5pdGVtVHlwZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5U3R5bGUgPSBtZXRhZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuZGVsZXRlSHRtbCA9ICBtZXRhZGF0YS5kZWxldGVIdG1sO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IG1ldGFkYXRhLm1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtZXRhZGF0YS5tYXhMZW5ndGg7XG4gICAgICAgIHRoaXMucmVnZXggPSBtZXRhZGF0YS5yZWdleDtcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBmb3IgYW4gYXJyYXkgb2YgYXV0b2NvbXBsZXRlIHN0cmluZ3MgZGlzcGxheWVkIGFzIGEgY2hpcHMgbGlzdFxuICovXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyBleHRlbmRzIEFycmF5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICBvdmVycmlkZSBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURTtcbiAgICBvdmVycmlkZSBkaXNwbGF5U3R5bGU6ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaHRtbCBpbnNpZGUgdGhlIGRlbGV0ZS1idXR0b24uXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBjdXN0b20gdGFncyBzdWNoIGFzIDxtYXQtaWNvbj48L21hdC1pY29uPlxuICAgICAqIG5lZWQgdG8gYmUgZGVmaW5lZCBhcyBrbm93biBlbGVtZW50cywgb3RoZXJ3aXNlIHRoZSBzYW5pdGl6ZXIgd2lsbCByZW1vdmUgdGhlbS5cbiAgICAgKiBZb3UgY2FuIGhvd2V2ZXIgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPjwvc3Bhbj5gXG4gICAgICogQGRlZmF1bHQgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICovXG4gICAgZGVsZXRlSHRtbD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0b2NvbXBsZXRlIHZhbHVlc1xuICAgICAqL1xuICAgIGF1dG9jb21wbGV0ZVZhbHVlczogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogKG9wdGlvbmFsKSBUaGUgbWluaW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZ1xuICAgICAqL1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIFRoZSBtYXhpbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgc3RyaW5nXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgQSByZWdleCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gICAgICovXG4gICAgcmVnZXg/OiBSZWdFeHA7XG5cbiAgICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGlzcGxheSxcbiAgICAgICAgICAgIG1ldGFkYXRhLnJlcXVpcmVkLFxuICAgICAgICAgICAgbWV0YWRhdGEub21pdEZvckNyZWF0ZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JVcGRhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5kZWZhdWx0V2lkdGhzLFxuICAgICAgICAgICAgbWV0YWRhdGEub3JkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pdGVtVHlwZSA9IG1ldGFkYXRhLml0ZW1UeXBlO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IG1ldGFkYXRhLmRpc3BsYXlTdHlsZTtcbiAgICAgICAgdGhpcy5kZWxldGVIdG1sID0gIG1ldGFkYXRhLmRlbGV0ZUh0bWw7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzID0gbWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IG1ldGFkYXRhLm1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtZXRhZGF0YS5tYXhMZW5ndGg7XG4gICAgICAgIHRoaXMucmVnZXggPSBtZXRhZGF0YS5yZWdleDtcbiAgICB9XG59Il19
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The base decorator for setting metadata on properties
3
+ * @param metadata The metadata to define
4
+ * @param type The type of metadata
5
+ * @returns The function that sets the metadata
6
+ */
7
+ export function baseProperty(metadata, type) {
8
+ return function (target, propertyKey) {
9
+ Reflect.defineMetadata('metadata', metadata, target, propertyKey);
10
+ Reflect.defineMetadata('type', type, target, propertyKey);
11
+ };
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9wZXJ0eS5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvYmFzZS1wcm9wZXJ0eS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWlDLEVBQUUsSUFBb0I7SUFDaEYsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUFtQjtRQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGRlY29yYXRvciBmb3Igc2V0dGluZyBtZXRhZGF0YSBvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gbWV0YWRhdGEgVGhlIG1ldGFkYXRhIHRvIGRlZmluZVxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgbWV0YWRhdGFcbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUHJvcGVydHkobWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnLCB0eXBlOiBEZWNvcmF0b3JUeXBlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCBtZXRhZGF0YSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ3R5cGUnLCB0eXBlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICB9O1xufSJdfQ==
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The enum Values for all the different DecoratorTypes.
3
+ */
4
+ export var DecoratorTypes;
5
+ (function (DecoratorTypes) {
6
+ DecoratorTypes["STRING"] = "string";
7
+ DecoratorTypes["STRING_DROPDOWN"] = "stringDropdown";
8
+ DecoratorTypes["STRING_AUTOCOMPLETE"] = "stringAutocomplete";
9
+ DecoratorTypes["STRING_TEXTBOX"] = "stringTextbox";
10
+ DecoratorTypes["NUMBER"] = "number";
11
+ DecoratorTypes["NUMBER_DROPDOWN"] = "numberDropdown";
12
+ DecoratorTypes["BOOLEAN_CHECKBOX"] = "boolean";
13
+ DecoratorTypes["BOOLEAN_TOGGLE"] = "booleanToggle";
14
+ DecoratorTypes["BOOLEAN_DROPDOWN"] = "booleanDropdown";
15
+ DecoratorTypes["OBJECT"] = "object";
16
+ DecoratorTypes["ARRAY"] = "array";
17
+ DecoratorTypes["ARRAY_STRING_CHIPS"] = "arrayStringChips";
18
+ DecoratorTypes["ARRAY_STRING_AUTOCOMPLETE_CHIPS"] = "arrayStringAutocompleteChips";
19
+ })(DecoratorTypes || (DecoratorTypes = {}));
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLXR5cGVzLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxjQWNYO0FBZEQsV0FBWSxjQUFjO0lBQ3RCLG1DQUFpQixDQUFBO0lBQ2pCLG9EQUFrQyxDQUFBO0lBQ2xDLDREQUEwQyxDQUFBO0lBQzFDLGtEQUFnQyxDQUFBO0lBQ2hDLG1DQUFpQixDQUFBO0lBQ2pCLG9EQUFrQyxDQUFBO0lBQ2xDLDhDQUE0QixDQUFBO0lBQzVCLGtEQUFnQyxDQUFBO0lBQ2hDLHNEQUFvQyxDQUFBO0lBQ3BDLG1DQUFpQixDQUFBO0lBQ2pCLGlDQUFlLENBQUE7SUFDZix5REFBdUMsQ0FBQTtJQUN2QyxrRkFBZ0UsQ0FBQTtBQUNwRSxDQUFDLEVBZFcsY0FBYyxLQUFkLGNBQWMsUUFjekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZywgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2FycmF5LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBDaGVja2JveEJvb2xlYW5EZWNvcmF0b3JDb25maWcsIERyb3Bkb3duQm9vbGVhbkRlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2Jvb2xlYW4uZGVjb3JhdG9yJztcbmltcG9ydCB7IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWcsIERyb3Bkb3duTnVtYmVyRGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vbnVtYmVyLmRlY29yYXRvcic7XG5pbXBvcnQgeyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vb2JqZWN0LmRlY29yYXRvcic7XG5pbXBvcnQgeyBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBEcm9wZG93blN0cmluZ0RlY29yYXRvckNvbmZpZywgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vc3RyaW5nLmRlY29yYXRvcic7XG5cbi8qKlxuICogVGhlIGVudW0gVmFsdWVzIGZvciBhbGwgdGhlIGRpZmZlcmVudCBEZWNvcmF0b3JUeXBlcy5cbiAqL1xuZXhwb3J0IGVudW0gRGVjb3JhdG9yVHlwZXMge1xuICAgIFNUUklORyA9ICdzdHJpbmcnLFxuICAgIFNUUklOR19EUk9QRE9XTiA9ICdzdHJpbmdEcm9wZG93bicsXG4gICAgU1RSSU5HX0FVVE9DT01QTEVURSA9ICdzdHJpbmdBdXRvY29tcGxldGUnLFxuICAgIFNUUklOR19URVhUQk9YID0gJ3N0cmluZ1RleHRib3gnLFxuICAgIE5VTUJFUiA9ICdudW1iZXInLFxuICAgIE5VTUJFUl9EUk9QRE9XTiA9ICdudW1iZXJEcm9wZG93bicsXG4gICAgQk9PTEVBTl9DSEVDS0JPWCA9ICdib29sZWFuJyxcbiAgICBCT09MRUFOX1RPR0dMRSA9ICdib29sZWFuVG9nZ2xlJyxcbiAgICBCT09MRUFOX0RST1BET1dOID0gJ2Jvb2xlYW5Ecm9wZG93bicsXG4gICAgT0JKRUNUID0gJ29iamVjdCcsXG4gICAgQVJSQVkgPSAnYXJyYXknLFxuICAgIEFSUkFZX1NUUklOR19DSElQUyA9ICdhcnJheVN0cmluZ0NoaXBzJyxcbiAgICBBUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTID0gJ2FycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHMnXG59XG5cbi8qKlxuICogR2l2ZXMgdGhlIG1ldGFkYXRhLWNvbmZpZyBUeXBlIGJhc2VkIG9udCB0aGUgRGVjb3JhdG9yVHlwZXMgZW51bVxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JUeXBlPFQ+ID1cbiAgICBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuU1RSSU5HID8gRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YID8gVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLlNUUklOR19EUk9QRE9XTiA/IERyb3Bkb3duU3RyaW5nRGVjb3JhdG9yQ29uZmlnXG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURSA/IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLk5VTUJFUiA/IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfRFJPUERPV04gPyBEcm9wZG93bk51bWJlckRlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkJPT0xFQU5fQ0hFQ0tCT1ggPyBDaGVja2JveEJvb2xlYW5EZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRSA/IENoZWNrYm94Qm9vbGVhbkRlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkJPT0xFQU5fRFJPUERPV04gPyBEcm9wZG93bkJvb2xlYW5EZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5PQkpFQ1QgPyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnXG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuQVJSQVkgPyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHk+XG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTID8gU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFMgPyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnXG4gICAgOiBuZXZlcjsiXX0=
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The base options for all propertyDecorators
3
+ */
4
+ export class PropertyDecoratorConfig {
5
+ /**
6
+ * Defines, Whether or not there should be a line break after this input.
7
+ * Is used inside the default create and edit dialogs.
8
+ */
9
+ // lineBreakAfter?: boolean;
10
+ constructor(displayName, display = true, required = true, omitForCreate = false, omitForUpdate = false, defaultWidths = [6, 6, 12], order
11
+ // lineBreakAfter: boolean = false
12
+ ) {
13
+ this.displayName = displayName;
14
+ this.display = display;
15
+ this.required = required;
16
+ this.omitForCreate = omitForCreate;
17
+ this.omitForUpdate = omitForUpdate;
18
+ this.defaultWidths = defaultWidths;
19
+ if (order) {
20
+ if (order < 0) {
21
+ throw new Error('order must be at least 0');
22
+ }
23
+ this.order = order;
24
+ }
25
+ else {
26
+ this.order = -1;
27
+ }
28
+ // this.lineBreakAfter = lineBreakAfter;
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLHVCQUF1QjtJQXdDekM7OztPQUdHO0lBQ0gsNEJBQTRCO0lBRTVCLFlBQ0ksV0FBbUIsRUFDbkIsVUFBbUIsSUFBSSxFQUN2QixXQUFvQixJQUFJLEVBQ3hCLGdCQUF5QixLQUFLLEVBQzlCLGdCQUF5QixLQUFLLEVBQzlCLGdCQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQzlDLEtBQWM7SUFDZCxrQ0FBa0M7O1FBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQzthQUMvQztZQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO2FBQ0k7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25CO1FBQ0Qsd0NBQXdDO0lBQzVDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgY29scyA9IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOSB8IDEwIHwgMTEgfCAxMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBvcHRpb25zIGZvciBhbGwgcHJvcGVydHlEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIFByb3BlcnR5IGlzIGRpc3BsYXllZCBhdCBhbGwuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGRpc3BsYXk/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB1c2VkIGFzIGEgbGFiZWwgZm9yIGZvcm0gZmllbGRzLlxuICAgICAqL1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIFByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IGdldHMgb21pdHRlZCB3aGVuIGNyZWF0aW5nIG5ldyBFbnRpdGllcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIG9taXRGb3JDcmVhdGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBnZXRzIG9taXR0ZWQgd2hlbiB1cGRhdGluZyBFbnRpdGllcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIG9taXRGb3JVcGRhdGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBpbnB1dCBwcm9wZXJ0eSB3aGVuIHVzZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGNyZWF0ZSBvciBlZGl0IGRpYWxvZy5cbiAgICAgKiBIYXMgMyBib290c3RyYXAgdmFsdWVzIGZvciBkaWZmZXJlbnQgYnJlYWtwb2ludHMgZm9yIHNpbXBsZSByZXNwb25zaXZlIGRlc2lnbi5cbiAgICAgKiBAdmFyIGZpcnN0VmFsdWU6IGNvbC1sZy17e2ZpcnN0VmFsdWV9fVxuICAgICAqIEB2YXIgc2Vjb25kVmFsdWU6IGNvbC1tZC17e3NlY29uZFZhbHVlfX1cbiAgICAgKiBAdmFyIHRoaXJkVmFsdWU6IGNvbC1zbS17e3RoaXJkVmFsdWV9fVxuICAgICAqL1xuICAgIGRlZmF1bHRXaWR0aHM/OiBbY29scywgY29scywgY29sc107XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIG9yZGVyIG9mIHRoZSBpbnB1dCBwcm9wZXJ0eSB3aGVuIHVzZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGNyZWF0ZSBvciBlZGl0IGRpYWxvZy5cbiAgICAgKiBPcmRlcmluZyBpcyBhc2NlbmRpbmdcbiAgICAgKiBAZGVmYXVsdCAtMSAoc2V0cyB0aGlzIHByb3BlcnR5IGF0IHRoZSBlbmQpXG4gICAgICovXG4gICAgb3JkZXI/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzLCBXaGV0aGVyIG9yIG5vdCB0aGVyZSBzaG91bGQgYmUgYSBsaW5lIGJyZWFrIGFmdGVyIHRoaXMgaW5wdXQuXG4gICAgICogSXMgdXNlZCBpbnNpZGUgdGhlIGRlZmF1bHQgY3JlYXRlIGFuZCBlZGl0IGRpYWxvZ3MuXG4gICAgICovXG4gICAgLy8gbGluZUJyZWFrQWZ0ZXI/OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRpc3BsYXk6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgICByZXF1aXJlZDogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIG9taXRGb3JDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgICAgb21pdEZvclVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgICBkZWZhdWx0V2lkdGhzOiBbY29scywgY29scywgY29sc10gPSBbNiwgNiwgMTJdLFxuICAgICAgICBvcmRlcj86IG51bWJlclxuICAgICAgICAvLyBsaW5lQnJlYWtBZnRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ID0gZGlzcGxheTtcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB0aGlzLm9taXRGb3JDcmVhdGUgPSBvbWl0Rm9yQ3JlYXRlO1xuICAgICAgICB0aGlzLm9taXRGb3JVcGRhdGUgPSBvbWl0Rm9yVXBkYXRlO1xuICAgICAgICB0aGlzLmRlZmF1bHRXaWR0aHMgPSBkZWZhdWx0V2lkdGhzO1xuXG4gICAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3JkZXIgbXVzdCBiZSBhdCBsZWFzdCAwJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSBvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmxpbmVCcmVha0FmdGVyID0gbGluZUJyZWFrQWZ0ZXI7XG4gICAgfVxufSJdfQ==