@mediusinc/mng-commons 1.3.0-1c14fa2b → 2.0.0-rc.0-08f92864
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/assets/i18n/en.json +9 -0
- package/assets/i18n/sl.json +9 -0
- package/esm2020/lib/api/utils/medius-rest.util.mjs +1 -1
- package/esm2020/lib/components/action/action.component.mjs +76 -20
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +12 -12
- package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +6 -6
- package/esm2020/lib/components/action/models/action-component.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +1 -1
- package/esm2020/lib/components/action/route/action-route.component.mjs +6 -5
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +11 -10
- package/esm2020/lib/components/form/date-range/date-range.component.mjs +9 -8
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +13 -11
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +14 -11
- package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +13 -9
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +8 -7
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +8 -7
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +11 -9
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +50 -20
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +5 -5
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +27 -17
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +32 -12
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +21 -12
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +13 -11
- package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +10 -9
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +11 -10
- package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +7 -6
- package/esm2020/lib/components/layout/footer.component.mjs +6 -5
- package/esm2020/lib/components/layout/main-layout.component.mjs +8 -8
- package/esm2020/lib/components/layout/menu-item.component.mjs +43 -23
- package/esm2020/lib/components/layout/menu.component.mjs +24 -13
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +3 -3
- package/esm2020/lib/components/layout/topbar.component.mjs +14 -12
- package/esm2020/lib/components/layout/version.component.mjs +6 -6
- package/esm2020/lib/components/tableview/models/table.event.mjs +1 -1
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +38 -10
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +5 -6
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +14 -13
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +29 -12
- package/esm2020/lib/components/tableview/table/table.component.mjs +33 -17
- package/esm2020/lib/components/tableview/tableview.component.mjs +13 -11
- package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +60 -0
- package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +2 -2
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +579 -0
- package/esm2020/lib/descriptors/action/index.mjs +4 -0
- package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +291 -0
- package/esm2020/lib/descriptors/editor/field-validation.descriptor.mjs +25 -0
- package/esm2020/lib/descriptors/editor/field.descriptor.mjs +990 -0
- package/esm2020/lib/descriptors/editor/index.mjs +4 -0
- package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +370 -0
- package/esm2020/lib/descriptors/filter/index.mjs +2 -0
- package/esm2020/lib/descriptors/index.mjs +1 -11
- package/esm2020/lib/descriptors/table/column.descriptor.mjs +406 -0
- package/esm2020/lib/descriptors/table/index.mjs +3 -0
- package/esm2020/lib/descriptors/table/table.descriptor.mjs +497 -0
- package/esm2020/lib/descriptors/tableview/index.mjs +2 -0
- package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +346 -0
- package/esm2020/lib/directives/component.directive.mjs +5 -4
- package/esm2020/lib/directives/template.directive.mjs +5 -4
- package/esm2020/lib/mng-commons.module.mjs +108 -138
- package/esm2020/lib/models/column-value.model.mjs +1 -1
- package/esm2020/lib/models/config.model.mjs +1 -1
- package/esm2020/lib/models/menu.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/pipes/boolean.pipe.mjs +5 -4
- package/esm2020/lib/pipes/class-map.pipe.mjs +5 -4
- package/esm2020/lib/pipes/enum.pipe.mjs +5 -4
- package/esm2020/lib/pipes/enumerate-async.pipe.mjs +5 -4
- package/esm2020/lib/pipes/enumerate.pipe.mjs +5 -4
- package/esm2020/lib/pipes/getter.pipe.mjs +5 -4
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +5 -4
- package/esm2020/lib/pipes/json-path.pipe.mjs +5 -4
- package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +5 -4
- package/esm2020/lib/pipes/parametrize.pipe.mjs +5 -4
- package/esm2020/lib/pipes/template.pipe.mjs +5 -4
- package/esm2020/lib/provide-commons.mjs +73 -0
- package/esm2020/lib/router/index.mjs +2 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/route-builder.mjs +31 -144
- package/esm2020/lib/router/routes-builder.mjs +67 -0
- package/esm2020/lib/router/tableview-route-builder.mjs +2 -2
- package/esm2020/lib/security/authorization.guard.mjs +8 -5
- package/esm2020/lib/security/authorization.service.mjs +8 -5
- package/esm2020/lib/services/action-executor.service.mjs +13 -7
- package/esm2020/lib/services/commons.service.mjs +15 -10
- package/esm2020/lib/services/configuration.service.mjs +27 -20
- package/esm2020/lib/services/internal/commons-init.service.mjs +13 -7
- package/esm2020/lib/services/navigation.service.mjs +8 -5
- package/esm2020/lib/services/providers/config-service.provider.mjs +5 -4
- package/esm2020/lib/services/router.service.mjs +97 -0
- package/esm2020/lib/services/version.service.mjs +8 -5
- package/esm2020/lib/services/view-container.component.service.mjs +4 -4
- package/esm2020/lib/styles/styles.util.mjs +1 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +1 -1
- package/esm2020/lib/utils/editor-formly.util.mjs +2 -2
- package/esm2020/lib/utils/export.util.mjs +20 -0
- package/esm2020/lib/utils/i18n.util.mjs +1 -1
- package/esm2020/lib/utils/index.mjs +2 -1
- package/esm2020/lib/utils/notification.util.mjs +1 -1
- package/esm2020/lib/utils/route.util.mjs +13 -1
- package/esm2020/lib/utils/tableview.util.mjs +1 -1
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/mediusinc-mng-commons.mjs +6767 -6381
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +6707 -6325
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/utils/medius-rest.util.d.ts +1 -1
- package/lib/components/action/action.component.d.ts +10 -5
- package/lib/components/action/editor/action-editor.component.d.ts +2 -2
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +2 -2
- package/lib/components/action/models/action-component.model.d.ts +1 -1
- package/lib/components/action/models/action-confirmation-service.model.d.ts +1 -1
- package/lib/components/action/models/action-execution.model.d.ts +2 -2
- package/lib/components/action/route/action-route.component.d.ts +2 -2
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -1
- package/lib/components/form/date-range/date-range.component.d.ts +1 -1
- package/lib/components/form/dropdown/dropdown.component.d.ts +1 -1
- package/lib/components/form/editor/form-editor.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +1 -1
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -2
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +2 -2
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +1 -1
- package/lib/components/form/formly/models/formly-field.model.d.ts +2 -2
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +1 -1
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -2
- package/lib/components/form/models/field-action-context.model.d.ts +1 -1
- package/lib/components/layout/breadcrumb.component.d.ts +1 -1
- package/lib/components/layout/footer.component.d.ts +1 -1
- package/lib/components/layout/main-layout.component.d.ts +1 -1
- package/lib/components/layout/menu-item.component.d.ts +6 -2
- package/lib/components/layout/menu.component.d.ts +9 -3
- package/lib/components/layout/topbar.component.d.ts +1 -1
- package/lib/components/layout/version.component.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +1 -1
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +9 -2
- package/lib/components/tableview/route/tableview-route.component.d.ts +3 -2
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +2 -2
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +2 -2
- package/lib/components/tableview/table/table.component.d.ts +4 -2
- package/lib/components/tableview/tableview.component.d.ts +3 -2
- package/lib/descriptors/{action-button.descriptor.d.ts → action/action-button.descriptor.d.ts} +1 -1
- package/lib/descriptors/action/action-confirmation.descriptor.d.ts +2 -2
- package/lib/descriptors/{action.descriptor.d.ts → action/action.descriptor.d.ts} +16 -8
- package/lib/descriptors/action/index.d.ts +3 -0
- package/lib/descriptors/{editor.descriptor.d.ts → editor/editor.descriptor.d.ts} +9 -6
- package/lib/descriptors/{field-validation.descriptor.d.ts → editor/field-validation.descriptor.d.ts} +1 -1
- package/lib/descriptors/{field.descriptor.d.ts → editor/field.descriptor.d.ts} +14 -10
- package/lib/descriptors/editor/index.d.ts +3 -0
- package/lib/descriptors/{filter.descriptor.d.ts → filter/filter.descriptor.d.ts} +11 -9
- package/lib/descriptors/filter/index.d.ts +1 -0
- package/lib/descriptors/index.d.ts +0 -10
- package/lib/descriptors/{column.descriptor.d.ts → table/column.descriptor.d.ts} +4 -4
- package/lib/descriptors/table/index.d.ts +2 -0
- package/lib/descriptors/{table.descriptor.d.ts → table/table.descriptor.d.ts} +12 -7
- package/lib/descriptors/tableview/index.d.ts +1 -0
- package/lib/descriptors/{tableview.descriptor.d.ts → tableview/tableview.descriptor.d.ts} +9 -7
- package/lib/directives/component.directive.d.ts +1 -1
- package/lib/directives/template.directive.d.ts +1 -1
- package/lib/mng-commons.module.d.ts +90 -88
- package/lib/models/column-value.model.d.ts +1 -1
- package/lib/models/config.model.d.ts +1 -0
- package/lib/models/menu.model.d.ts +1 -1
- package/lib/models/version.model.d.ts +1 -1
- package/lib/models/view-container.model.d.ts +1 -1
- package/lib/pipes/boolean.pipe.d.ts +1 -1
- package/lib/pipes/class-map.pipe.d.ts +1 -1
- package/lib/pipes/enum.pipe.d.ts +1 -1
- package/lib/pipes/enumerate-async.pipe.d.ts +1 -1
- package/lib/pipes/enumerate.pipe.d.ts +1 -1
- package/lib/pipes/getter.pipe.d.ts +1 -1
- package/lib/pipes/i18n-property.pipe.d.ts +1 -1
- package/lib/pipes/json-path.pipe.d.ts +1 -1
- package/lib/pipes/locale-default-row-class.pipe.d.ts +2 -2
- package/lib/pipes/parametrize.pipe.d.ts +1 -1
- package/lib/pipes/template.pipe.d.ts +1 -1
- package/lib/provide-commons.d.ts +3 -0
- package/lib/router/index.d.ts +1 -0
- package/lib/router/models/router.model.d.ts +5 -2
- package/lib/router/route-builder.d.ts +12 -48
- package/lib/router/routes-builder.d.ts +29 -0
- package/lib/router/tableview-route-builder.d.ts +2 -1
- package/lib/services/action-executor.service.d.ts +2 -1
- package/lib/services/commons.service.d.ts +3 -3
- package/lib/services/configuration.service.d.ts +4 -1
- package/lib/services/internal/commons-init.service.d.ts +4 -2
- package/lib/services/router.service.d.ts +22 -0
- package/lib/services/view-container.component.service.d.ts +1 -1
- package/lib/styles/styles.util.d.ts +2 -1
- package/lib/types/type.model.d.ts +8 -8
- package/lib/utils/editor-formly.util.d.ts +1 -1
- package/lib/utils/export.util.d.ts +5 -0
- package/lib/utils/i18n.util.d.ts +2 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/notification.util.d.ts +2 -1
- package/lib/utils/route.util.d.ts +55 -0
- package/lib/utils/tableview.util.d.ts +1 -1
- package/package.json +6 -6
- package/public-api.d.ts +6 -0
- package/scss/common/layout/_breadcrumb.scss +12 -2
- package/scss/common/layout/_exception.scss +1 -1
- package/scss/common/layout/_inlinemenu.scss +13 -0
- package/scss/common/layout/_login.scss +1 -0
- package/scss/common/layout/_rightmenu.scss +5 -0
- package/scss/common/layout/menu/_menu_common.scss +1 -1
- package/scss/common/theme/designer/_components.scss +4 -4
- package/scss/common/theme/designer/_mixins.scss +29 -0
- package/scss/common/theme/extensions/_datatable.scss +2 -2
- package/scss/common/variables/layout/_layout_dark.scss +0 -1
- package/scss/common/variables/layout/_layout_light.scss +0 -1
- package/scss/common/variables/theme/_theme_dark.scss +72 -46
- package/scss/common/variables/theme/_theme_light.scss +70 -33
- package/scss/mng-overrides/_layout_menu.scss +4 -0
- package/version-info.json +6 -6
- package/esm2020/lib/descriptors/action-button.descriptor.mjs +0 -60
- package/esm2020/lib/descriptors/action.descriptor.mjs +0 -560
- package/esm2020/lib/descriptors/column.descriptor.mjs +0 -405
- package/esm2020/lib/descriptors/editor.descriptor.mjs +0 -290
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +0 -25
- package/esm2020/lib/descriptors/field.descriptor.mjs +0 -987
- package/esm2020/lib/descriptors/filter.descriptor.mjs +0 -368
- package/esm2020/lib/descriptors/table.descriptor.mjs +0 -482
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +0 -344
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { ObjectSerializer } from '../../api/utils';
|
|
2
|
+
import { ModelUtil } from '../../utils';
|
|
3
|
+
import { TableviewUtil } from '../../utils/tableview.util';
|
|
4
|
+
import { FilterLookupDescriptor } from '../filter';
|
|
5
|
+
import { ModelDescriptor } from '../model.descriptor';
|
|
6
|
+
import { ColumnTypeEnum, TableDynamicColumnsModeEnum, TableFilterDisplayEnum, TableSizeEnum } from '../types';
|
|
7
|
+
import { ColumnDescriptor, ColumnDynamicDescriptor } from './column.descriptor';
|
|
8
|
+
export class TableDescriptor {
|
|
9
|
+
constructor(modelType, idProperty, titleProperty, i18nBaseKey) {
|
|
10
|
+
this._filterDisplay = TableFilterDisplayEnum.Menu;
|
|
11
|
+
this._rowsPerPageOptions = [25, 50, 100];
|
|
12
|
+
this._defaultNumRows = this._rowsPerPageOptions[0];
|
|
13
|
+
this._columns = [];
|
|
14
|
+
this._hideHeader = false;
|
|
15
|
+
this._hasDefaultSort = false;
|
|
16
|
+
this._defaultSortProperty = [];
|
|
17
|
+
this._defaultSortAsc = [];
|
|
18
|
+
// visual
|
|
19
|
+
this._className = '';
|
|
20
|
+
this._size = TableSizeEnum.Large;
|
|
21
|
+
this._hasHover = true;
|
|
22
|
+
this._hasGridlines = false;
|
|
23
|
+
this._hasResizableColumns = false;
|
|
24
|
+
this._columnResizeMode = 'expand';
|
|
25
|
+
this._autoGenerated = false;
|
|
26
|
+
this._isLocalized = false;
|
|
27
|
+
this._modelType = modelType;
|
|
28
|
+
this._model = new ModelDescriptor(modelType, idProperty, titleProperty, i18nBaseKey);
|
|
29
|
+
this._dataKeyProperty = idProperty ?? ModelUtil.findIdAttribute(modelType) ?? undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* generates descriptor based on modelType attribute definition
|
|
33
|
+
* @param modelType class type
|
|
34
|
+
* @param idProperty
|
|
35
|
+
* @param titleProperty
|
|
36
|
+
*/
|
|
37
|
+
static from(modelType, idProperty, titleProperty) {
|
|
38
|
+
return TableDescriptor.fromModelWithAttributes(modelType, TableviewUtil.getAttributeDefMap(modelType), idProperty, titleProperty);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* generates descriptor base on given attribute definition
|
|
42
|
+
* @param modelType class type
|
|
43
|
+
* @param attributes attributes from which descriptor is generated
|
|
44
|
+
* @param idProperty
|
|
45
|
+
* @param titleProperty
|
|
46
|
+
*/
|
|
47
|
+
static fromModelWithAttributes(modelType, attributes, idProperty, titleProperty) {
|
|
48
|
+
const descriptor = new TableDescriptor(modelType, idProperty, titleProperty);
|
|
49
|
+
descriptor._autoGenerated = true;
|
|
50
|
+
attributes.filter(attr => !attr.type.includes('Set') && !attr.type.includes('Array')).forEach(attr => descriptor.upsertColumnFromAttributeDef(attr));
|
|
51
|
+
return descriptor;
|
|
52
|
+
}
|
|
53
|
+
get filterDisplay() {
|
|
54
|
+
return this._filterDisplay;
|
|
55
|
+
}
|
|
56
|
+
get paginationMode() {
|
|
57
|
+
return this._paginationMode;
|
|
58
|
+
}
|
|
59
|
+
get rowsPerPageOptions() {
|
|
60
|
+
return this._rowsPerPageOptions;
|
|
61
|
+
}
|
|
62
|
+
get defaultNumRows() {
|
|
63
|
+
return this._defaultNumRows;
|
|
64
|
+
}
|
|
65
|
+
get columns() {
|
|
66
|
+
return this._columns;
|
|
67
|
+
}
|
|
68
|
+
get title() {
|
|
69
|
+
return this._title;
|
|
70
|
+
}
|
|
71
|
+
get hideHeader() {
|
|
72
|
+
return this._hideHeader;
|
|
73
|
+
}
|
|
74
|
+
get dataKeyProperty() {
|
|
75
|
+
return this._dataKeyProperty;
|
|
76
|
+
}
|
|
77
|
+
get hasDefaultSort() {
|
|
78
|
+
return this._hasDefaultSort;
|
|
79
|
+
}
|
|
80
|
+
get defaultSortProperty() {
|
|
81
|
+
return this._defaultSortProperty;
|
|
82
|
+
}
|
|
83
|
+
get defaultSortAsc() {
|
|
84
|
+
return this._defaultSortAsc;
|
|
85
|
+
}
|
|
86
|
+
get model() {
|
|
87
|
+
return this._model;
|
|
88
|
+
}
|
|
89
|
+
get className() {
|
|
90
|
+
return this._className;
|
|
91
|
+
}
|
|
92
|
+
get size() {
|
|
93
|
+
return this._size;
|
|
94
|
+
}
|
|
95
|
+
get tableFullHeightOffset() {
|
|
96
|
+
return this._tableFullHeightOffset;
|
|
97
|
+
}
|
|
98
|
+
get rowHeight() {
|
|
99
|
+
return this._rowHeight;
|
|
100
|
+
}
|
|
101
|
+
get hasHover() {
|
|
102
|
+
return this._hasHover;
|
|
103
|
+
}
|
|
104
|
+
get hasGridlines() {
|
|
105
|
+
return this._hasGridlines;
|
|
106
|
+
}
|
|
107
|
+
get hasResizableColumns() {
|
|
108
|
+
return this._hasResizableColumns;
|
|
109
|
+
}
|
|
110
|
+
get columnResizeMode() {
|
|
111
|
+
return this._columnResizeMode;
|
|
112
|
+
}
|
|
113
|
+
get rowClassName() {
|
|
114
|
+
return this._rowClassName;
|
|
115
|
+
}
|
|
116
|
+
get rowClassNameMapFn() {
|
|
117
|
+
return this._rowClassNameMapFn;
|
|
118
|
+
}
|
|
119
|
+
get headerClassName() {
|
|
120
|
+
return this._headerClassName;
|
|
121
|
+
}
|
|
122
|
+
get isLocalized() {
|
|
123
|
+
return this._isLocalized;
|
|
124
|
+
}
|
|
125
|
+
get localizationLocaleProperty() {
|
|
126
|
+
return this._localizationLocaleProperty;
|
|
127
|
+
}
|
|
128
|
+
getColumn(property) {
|
|
129
|
+
return this._columns.find(col => col.property === property);
|
|
130
|
+
}
|
|
131
|
+
addColumnDescriptor(column) {
|
|
132
|
+
this._columns.push(column);
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
addColumn(property) {
|
|
136
|
+
const column = new ColumnDescriptor(this, property);
|
|
137
|
+
this._columns.push(column);
|
|
138
|
+
return column;
|
|
139
|
+
}
|
|
140
|
+
addColumnNumber(property, displayFormat) {
|
|
141
|
+
const column = new ColumnDescriptor(this, property);
|
|
142
|
+
column.asNumber(displayFormat);
|
|
143
|
+
this._columns.push(column);
|
|
144
|
+
return column;
|
|
145
|
+
}
|
|
146
|
+
addColumnDate(property, displayFormat) {
|
|
147
|
+
const column = new ColumnDescriptor(this, property);
|
|
148
|
+
column.asDate(displayFormat);
|
|
149
|
+
this._columns.push(column);
|
|
150
|
+
return column;
|
|
151
|
+
}
|
|
152
|
+
addColumnBoolean(property, yes, no, asIcon = false) {
|
|
153
|
+
const column = new ColumnDescriptor(this, property);
|
|
154
|
+
column.asBoolean(yes, no, asIcon);
|
|
155
|
+
this._columns.push(column);
|
|
156
|
+
return column;
|
|
157
|
+
}
|
|
158
|
+
addColumnEnum(property, enumType, nameAsValue = false, titlePath) {
|
|
159
|
+
const column = new ColumnDescriptor(this, property);
|
|
160
|
+
column.asEnum(enumType, nameAsValue, titlePath);
|
|
161
|
+
this._columns.push(column);
|
|
162
|
+
return column;
|
|
163
|
+
}
|
|
164
|
+
addColumnCustomComponent(property, customComponentType) {
|
|
165
|
+
const column = new ColumnDescriptor(this, property);
|
|
166
|
+
column.asCustomComponent(customComponentType);
|
|
167
|
+
this._columns.push(column);
|
|
168
|
+
return column;
|
|
169
|
+
}
|
|
170
|
+
removeColumn(property) {
|
|
171
|
+
const columndIdx = this._columns.findIndex(c => c.property === property);
|
|
172
|
+
this._columns.splice(columndIdx, 1);
|
|
173
|
+
}
|
|
174
|
+
withFilterDisplay(filterDisplayType) {
|
|
175
|
+
this._filterDisplay = filterDisplayType;
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
withPaginationMode(paginationMode) {
|
|
179
|
+
this._paginationMode = paginationMode;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
withRowsPerPage(rows, options) {
|
|
183
|
+
if (options) {
|
|
184
|
+
this._rowsPerPageOptions = options;
|
|
185
|
+
}
|
|
186
|
+
if (!this._rowsPerPageOptions.includes(rows)) {
|
|
187
|
+
this._defaultNumRows = this._rowsPerPageOptions[0];
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this._defaultNumRows = rows;
|
|
191
|
+
}
|
|
192
|
+
return this;
|
|
193
|
+
}
|
|
194
|
+
withTitle(title) {
|
|
195
|
+
this._title = title;
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
withHideHeader(hideHeader = true) {
|
|
199
|
+
this._hideHeader = hideHeader;
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
202
|
+
withDataKeyProperty(property) {
|
|
203
|
+
this._dataKeyProperty = property;
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
withDefaultSort(property, asc = true) {
|
|
207
|
+
this._hasDefaultSort = true;
|
|
208
|
+
this._defaultSortProperty.push(property);
|
|
209
|
+
this._defaultSortAsc.push(asc);
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
withClassName(className) {
|
|
213
|
+
this._className = className;
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
withSize(size = TableSizeEnum.Normal) {
|
|
217
|
+
this._size = size;
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
withTableFullHeightOffset(tableFullHeightOffset) {
|
|
221
|
+
this._tableFullHeightOffset = tableFullHeightOffset;
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
withRowHeight(rowHeight) {
|
|
225
|
+
this._rowHeight = rowHeight;
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
withHover(hover) {
|
|
229
|
+
this._hasHover = hover;
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
withGridlines(gridlines) {
|
|
233
|
+
this._hasGridlines = gridlines;
|
|
234
|
+
return this;
|
|
235
|
+
}
|
|
236
|
+
withResizableColumns(resizableColumns = true, columnResizeMode = 'fit') {
|
|
237
|
+
this._hasResizableColumns = resizableColumns;
|
|
238
|
+
this._columnResizeMode = columnResizeMode;
|
|
239
|
+
return this;
|
|
240
|
+
}
|
|
241
|
+
withRowClassName(rowClassName, classNameMapFn) {
|
|
242
|
+
this._rowClassName = rowClassName;
|
|
243
|
+
this._rowClassNameMapFn = classNameMapFn;
|
|
244
|
+
return this;
|
|
245
|
+
}
|
|
246
|
+
withHeaderClassName(headerClassName) {
|
|
247
|
+
this._headerClassName = headerClassName;
|
|
248
|
+
return this;
|
|
249
|
+
}
|
|
250
|
+
withLocalized() {
|
|
251
|
+
this._isLocalized = true;
|
|
252
|
+
return this;
|
|
253
|
+
}
|
|
254
|
+
withLocalizationLocaleProperty(localizationLocaleProperty) {
|
|
255
|
+
this._isLocalized = true;
|
|
256
|
+
this._localizationLocaleProperty = localizationLocaleProperty;
|
|
257
|
+
return this;
|
|
258
|
+
}
|
|
259
|
+
copyFieldsTo(obj) {
|
|
260
|
+
obj._title = this._title;
|
|
261
|
+
obj._hideHeader = this._hideHeader;
|
|
262
|
+
obj._dataKeyProperty = this._dataKeyProperty;
|
|
263
|
+
obj._hasDefaultSort = this._hasDefaultSort;
|
|
264
|
+
obj._defaultSortProperty = this._defaultSortProperty.map(p => p);
|
|
265
|
+
obj._defaultSortAsc = this._defaultSortAsc.map(p => p);
|
|
266
|
+
obj._filterDisplay = this._filterDisplay;
|
|
267
|
+
obj._className = this._className;
|
|
268
|
+
obj._size = this._size;
|
|
269
|
+
obj._tableFullHeightOffset = this._tableFullHeightOffset;
|
|
270
|
+
obj._rowHeight = this._rowHeight;
|
|
271
|
+
obj._hasHover = this._hasHover;
|
|
272
|
+
obj._hasGridlines = this._hasGridlines;
|
|
273
|
+
obj._hasResizableColumns = this._hasResizableColumns;
|
|
274
|
+
obj._columnResizeMode = this._columnResizeMode;
|
|
275
|
+
obj._isLocalized = this._isLocalized;
|
|
276
|
+
obj._localizationLocaleProperty = this._localizationLocaleProperty;
|
|
277
|
+
}
|
|
278
|
+
copy() {
|
|
279
|
+
const descriptor = new TableDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName);
|
|
280
|
+
this.copyFieldsTo(descriptor);
|
|
281
|
+
descriptor._columns = this.columns.map(c => c.copy());
|
|
282
|
+
return descriptor;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* generates column based on attributes
|
|
286
|
+
* @param attribute attribute map
|
|
287
|
+
* @param column if provided, replaced by new, otherwise new is created
|
|
288
|
+
* @param args additional parameters
|
|
289
|
+
*/
|
|
290
|
+
upsertColumnFromAttributeDef(attribute, column, ...args) {
|
|
291
|
+
if (column == null) {
|
|
292
|
+
column = this.addColumn(attribute.name);
|
|
293
|
+
}
|
|
294
|
+
if (attribute.columnType === ColumnTypeEnum.Enum && args.length === 0) {
|
|
295
|
+
args = [attribute.enumType];
|
|
296
|
+
}
|
|
297
|
+
column = column.asType(attribute.columnType, attribute.columnDisplayType, ...args);
|
|
298
|
+
if (attribute.classType) {
|
|
299
|
+
column.withObjectProperty(attribute.classType).withSort();
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
column.withSort().withFilter();
|
|
303
|
+
}
|
|
304
|
+
return column;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* defines modified type of column
|
|
308
|
+
* DO NOT USE with enum (use withCustomEnumType)
|
|
309
|
+
* @param property column name
|
|
310
|
+
* @param columnType modified type
|
|
311
|
+
* @param args additional attributes
|
|
312
|
+
*/
|
|
313
|
+
withColumnModifiedType(property, columnType, columnDisplayType, ...args) {
|
|
314
|
+
const attributeDef = TableviewUtil.getAttributeDefMap(this._modelType).find(atribute => atribute.name === property);
|
|
315
|
+
if (attributeDef != null) {
|
|
316
|
+
attributeDef.columnType = columnType ?? attributeDef.columnType;
|
|
317
|
+
attributeDef.columnDisplayType = columnDisplayType ?? attributeDef.columnDisplayType;
|
|
318
|
+
this.upsertColumnFromAttributeDef(attributeDef, this.columns.find(col => col.property === attributeDef.name), ...args);
|
|
319
|
+
}
|
|
320
|
+
return this;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* defines custom enum type for column
|
|
324
|
+
* @param property column name
|
|
325
|
+
* @param enumType
|
|
326
|
+
*/
|
|
327
|
+
withColumnModifiedEnum(property, enumType) {
|
|
328
|
+
const attributeDef = TableviewUtil.getAttributeDefMap(this._modelType).find(atribute => atribute.name === property);
|
|
329
|
+
if (attributeDef != null) {
|
|
330
|
+
attributeDef.columnType = ColumnTypeEnum.Enum;
|
|
331
|
+
this.upsertColumnFromAttributeDef(attributeDef, this.columns.find(col => col.property === property), enumType ?? ObjectSerializer.get().findEnum(attributeDef.type));
|
|
332
|
+
}
|
|
333
|
+
return this;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* modifies column with class and lookup provider
|
|
337
|
+
* @param property column name
|
|
338
|
+
* @param lookupProvider lookupProvider for class
|
|
339
|
+
* @param itemsLabelProperty
|
|
340
|
+
* @param filterProperty
|
|
341
|
+
*/
|
|
342
|
+
withColumnModifiedLookup(property, lookupProvider, itemsLabelProperty, filterProperty) {
|
|
343
|
+
const column = this.columns.find(col => col.property === property);
|
|
344
|
+
if (column) {
|
|
345
|
+
column.withFilterLookup().withLookupDataProvider(lookupProvider);
|
|
346
|
+
if (column instanceof FilterLookupDescriptor) {
|
|
347
|
+
if (itemsLabelProperty) {
|
|
348
|
+
column.withItemsLabelProperty(itemsLabelProperty);
|
|
349
|
+
}
|
|
350
|
+
if (filterProperty) {
|
|
351
|
+
column.withFilterProperty(filterProperty);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return this;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
export class TableDynamicDescriptor extends TableDescriptor {
|
|
359
|
+
constructor(idProperty, titleProperty) {
|
|
360
|
+
super({}, idProperty, titleProperty);
|
|
361
|
+
this._excludedColumns = [];
|
|
362
|
+
this._filterColumns = [];
|
|
363
|
+
this._sortColumns = [];
|
|
364
|
+
this._sortColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;
|
|
365
|
+
this._filterColumnMode = TableDynamicColumnsModeEnum.EXCLUDE;
|
|
366
|
+
this._columns = [];
|
|
367
|
+
this.withTitle('Dynamic table');
|
|
368
|
+
}
|
|
369
|
+
get columns() {
|
|
370
|
+
return this._columns;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* defines excluded columns when generating descriptor
|
|
374
|
+
* @param excludedColumn names of excluded columns
|
|
375
|
+
*/
|
|
376
|
+
withColumnsExcluded(excludedColumn) {
|
|
377
|
+
this._excludedColumns = excludedColumn;
|
|
378
|
+
return this;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* defines column properties on which sort is defined or not depending on sortColumnMode
|
|
382
|
+
* @param sortOnColumns column names
|
|
383
|
+
* @param sortColumnMode INCLUDE_ONLY (default) only given columns will have sort, EXCLUDE given columns will NOT have sort
|
|
384
|
+
*/
|
|
385
|
+
withColumnsSort(sortOnColumns, sortColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY) {
|
|
386
|
+
this._sortColumnMode = sortColumnMode;
|
|
387
|
+
this._sortColumns = sortOnColumns;
|
|
388
|
+
return this;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* defines column properties on which filter is defined or not depending on filterColumnMode
|
|
392
|
+
* @param filterOnColumn column names
|
|
393
|
+
* @param filterColumnMode INCLUDE_ONLY (default) only given columns will have filter, EXCLUDE given columns will NOT have filter
|
|
394
|
+
*/
|
|
395
|
+
withColumnsFilter(filterOnColumn, filterColumnMode = TableDynamicColumnsModeEnum.INCLUDE_ONLY) {
|
|
396
|
+
this._filterColumnMode = filterColumnMode;
|
|
397
|
+
this._filterColumns = filterOnColumn;
|
|
398
|
+
return this;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* sets given type to column with given property and returns this table
|
|
402
|
+
* @param property column's property
|
|
403
|
+
* @param type custom type for column
|
|
404
|
+
* @param args addition arguments for column
|
|
405
|
+
*/
|
|
406
|
+
withColumnModifiedType(property, type, displayType, ...args) {
|
|
407
|
+
const column = this._columns.find(col => property === col.property) ?? this.addColumn(property).withTitle(property);
|
|
408
|
+
if (column) {
|
|
409
|
+
column.asType(type, displayType, ...args);
|
|
410
|
+
}
|
|
411
|
+
return this;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* sets title to column with given property and returns this table
|
|
415
|
+
* @param property column's property
|
|
416
|
+
* @param title column's title
|
|
417
|
+
*/
|
|
418
|
+
withColumnTitle(property, title) {
|
|
419
|
+
const column = this._columns.find(col => property === col.property) ?? this.addColumn(property);
|
|
420
|
+
column.withTitle(title, true);
|
|
421
|
+
return this;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* generates columns defined on table based on data fetched from api
|
|
425
|
+
* @param data data from api
|
|
426
|
+
*/
|
|
427
|
+
toTableDescriptorFromData(data) {
|
|
428
|
+
const tableDescriptor = this.toTableDescriptor();
|
|
429
|
+
if (data.pageData == null || data.pageData.length == 0) {
|
|
430
|
+
return tableDescriptor;
|
|
431
|
+
}
|
|
432
|
+
const objectModel = data.pageData[0];
|
|
433
|
+
const entries = Object.entries(objectModel)
|
|
434
|
+
.filter(([key]) => !this._excludedColumns.includes(key))
|
|
435
|
+
.filter(([, value]) => !Array.isArray(value)); //exclude arrays and sets
|
|
436
|
+
for (const [key, value] of entries) {
|
|
437
|
+
const metaColumn = this._columns.find(col => col.property === key);
|
|
438
|
+
let column;
|
|
439
|
+
if (metaColumn) {
|
|
440
|
+
if (!metaColumn.visibility) {
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
column = metaColumn.toColumnDescriptor(tableDescriptor);
|
|
444
|
+
tableDescriptor.addColumnDescriptor(column);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
column = tableDescriptor.addColumn(key).withTitle(key);
|
|
448
|
+
TableviewUtil.stringColumnConverter(column, value);
|
|
449
|
+
}
|
|
450
|
+
const elementOfSortColumns = this._sortColumns.includes(column.property);
|
|
451
|
+
if ((this._sortColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfSortColumns) ||
|
|
452
|
+
(this._sortColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfSortColumns)) {
|
|
453
|
+
column.withSort();
|
|
454
|
+
}
|
|
455
|
+
const elementOfFilterColumns = this._filterColumns.includes(column.property);
|
|
456
|
+
if ((this._filterColumnMode === TableDynamicColumnsModeEnum.EXCLUDE && !elementOfFilterColumns) ||
|
|
457
|
+
(this._filterColumnMode === TableDynamicColumnsModeEnum.INCLUDE_ONLY && elementOfFilterColumns)) {
|
|
458
|
+
column.withFilter();
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
return tableDescriptor;
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* adds ColumnDynamicDescriptor to this table
|
|
465
|
+
* @param property column's property
|
|
466
|
+
*/
|
|
467
|
+
addColumn(property) {
|
|
468
|
+
const column = new ColumnDynamicDescriptor(this, property);
|
|
469
|
+
this._columns.push(column);
|
|
470
|
+
return column;
|
|
471
|
+
}
|
|
472
|
+
removeColumn(property) {
|
|
473
|
+
const column = this.columns.find(col => col.property === property) ?? this.addColumn(property);
|
|
474
|
+
column.withVisibility(false);
|
|
475
|
+
return this;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* creates deep copy of table dynamic descriptor
|
|
479
|
+
*/
|
|
480
|
+
copy() {
|
|
481
|
+
const descriptor = new TableDynamicDescriptor(this.model.idPropertyName, this.model.titlePropertyName);
|
|
482
|
+
this.copyFieldsTo(descriptor);
|
|
483
|
+
descriptor._columns = this.columns.map(c => c.copy());
|
|
484
|
+
descriptor._excludedColumns = [...this._excludedColumns];
|
|
485
|
+
descriptor._filterColumns = [...this._filterColumns];
|
|
486
|
+
descriptor._sortColumns = [...this._sortColumns];
|
|
487
|
+
descriptor._filterColumnMode = this._filterColumnMode;
|
|
488
|
+
descriptor._sortColumnMode = this._sortColumnMode;
|
|
489
|
+
return descriptor;
|
|
490
|
+
}
|
|
491
|
+
toTableDescriptor() {
|
|
492
|
+
const descriptor = new TableDescriptor({}, this.model.idPropertyName, this.model.titlePropertyName);
|
|
493
|
+
this.copyFieldsTo(descriptor);
|
|
494
|
+
return descriptor;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUtqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBd0IsY0FBYyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUEyQixhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUosT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsTUFBTSxPQUFPLGVBQWU7SUFtQ3hCLFlBQVksU0FBdUIsRUFBRSxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBeUM7UUFoQ25ILG1CQUFjLEdBQTJCLHNCQUFzQixDQUFDLElBQUksQ0FBQztRQUVyRSx3QkFBbUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsb0JBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsYUFBUSxHQUFvQyxFQUFFLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLG9CQUFlLEdBQWMsRUFBRSxDQUFDO1FBRXhDLFNBQVM7UUFDRCxlQUFVLEdBQUcsRUFBRSxDQUFD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QU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDbEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFvQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzSCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlSZXN1bHR9IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi8uLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0lDb2x1bW5WYWx1ZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VGFibGV2aWV3QXR0cmlidXRlRGVmfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGV2aWV3LWF0dHIubW9kZWwnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge01vZGVsVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtUYWJsZXZpZXdVdGlsfSBmcm9tICcuLi8uLi91dGlscy90YWJsZXZpZXcudXRpbCc7XG5pbXBvcnQge0ZpbHRlckxvb2t1cERlc2NyaXB0b3J9IGZyb20gJy4uL2ZpbHRlcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi4vbW9kZWwuZGVzY3JpcHRvcic7XG5pbXBvcnQge0NvbHVtbkRpc3BsYXlUeXBlRW51bSwgQ29sdW1uVHlwZUVudW0sIFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bSwgVGFibGVGaWx0ZXJEaXNwbGF5RW51bSwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sIFRhYmxlU2l6ZUVudW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvciwgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+O1xuICAgIHByaXZhdGUgX2ZpbHRlckRpc3BsYXk6IFRhYmxlRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZUZpbHRlckRpc3BsYXlFbnVtLk1lbnU7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU/OiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bTtcbiAgICBwcml2YXRlIF9yb3dzUGVyUGFnZU9wdGlvbnMgPSBbMjUsIDUwLCAxMDBdO1xuICAgIHByaXZhdGUgX2RlZmF1bHROdW1Sb3dzID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2hpZGVIZWFkZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kYXRhS2V5UHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJpdmF0ZSBfc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTGFyZ2U7XG4gICAgcHJpdmF0ZSBfdGFibGVGdWxsSGVpZ2h0T2Zmc2V0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Jvd0hlaWdodD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9oYXNIb3ZlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGFzR3JpZGxpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzUmVzaXphYmxlQ29sdW1ucyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZXhwYW5kJztcblxuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVCkgPT4gc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfYXV0b0dlbmVyYXRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPikge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gaWRQcm9wZXJ0eSA/PyBNb2RlbFV0aWwuZmluZElkQXR0cmlidXRlKG1vZGVsVHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBkZXNjcmlwdG9yIGJhc2VkIG9uIG1vZGVsVHlwZSBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb208VD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICByZXR1cm4gVGFibGVEZXNjcmlwdG9yLmZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzKG1vZGVsVHlwZSwgVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAobW9kZWxUeXBlKSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGRlc2NyaXB0b3IgYmFzZSBvbiBnaXZlbiBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgZnJvbSB3aGljaCBkZXNjcmlwdG9yIGlzIGdlbmVyYXRlZFxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzPFQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBhdHRyaWJ1dGVzOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZbXSwgaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yKG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2F1dG9HZW5lcmF0ZWQgPSB0cnVlO1xuICAgICAgICBhdHRyaWJ1dGVzLmZpbHRlcihhdHRyID0+ICFhdHRyLnR5cGUuaW5jbHVkZXMoJ1NldCcpICYmICFhdHRyLnR5cGUuaW5jbHVkZXMoJ0FycmF5JykpLmZvckVhY2goYXR0ciA9PiBkZXNjcmlwdG9yLnVwc2VydENvbHVtbkZyb21BdHRyaWJ1dGVEZWYoYXR0cikpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBnZXQgcm93c1BlclBhZ2VPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdE51bVJvd3MoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHROdW1Sb3dzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZUhlYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVIZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNEZWZhdWx0U29ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0RlZmF1bHRTb3J0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFNvcnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRTb3J0UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydEFzYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRTb3J0QXNjO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5OdW1iZXIocHJvcGVydHk6IHN0cmluZywgZGlzcGxheUZvcm1hdD86IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8bnVtYmVyLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNOdW1iZXIoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uQm9vbGVhbihwcm9wZXJ0eTogc3RyaW5nLCB5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxib29sZWFuLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0Jvb2xlYW4oeWVzLCBubywgYXNJY29uKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKTogQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNFbnVtKGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgdGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkN1c3RvbUNvbXBvbmVudChwcm9wZXJ0eTogc3RyaW5nLCBjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxUPj4pOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uZElkeCA9IHRoaXMuX2NvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnNwbGljZShjb2x1bW5kSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckRpc3BsYXkoZmlsdGVyRGlzcGxheVR5cGU6IFRhYmxlRmlsdGVyRGlzcGxheUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGlzcGxheSA9IGZpbHRlckRpc3BsYXlUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uTW9kZSA9IHBhZ2luYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd3NQZXJQYWdlKHJvd3M6IG51bWJlciwgb3B0aW9ucz86IEFycmF5PG51bWJlcj4pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXMocm93cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHROdW1Sb3dzID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE51bVJvd3MgPSByb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhpZGVIZWFkZXIoaGlkZUhlYWRlciA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5faGlkZUhlYWRlciA9IGhpZGVIZWFkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQocHJvcGVydHk6IHN0cmluZywgYXNjID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNEZWZhdWx0U29ydCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRTb3J0UHJvcGVydHkucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRTb3J0QXNjLnB1c2goYXNjKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNpemUoc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRnVsbEhlaWdodE9mZnNldCh0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93SGVpZ2h0KHJvd0hlaWdodDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIb3Zlcihob3ZlcjogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNIb3ZlciA9IGhvdmVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdyaWRsaW5lcyhncmlkbGluZXM6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzR3JpZGxpbmVzID0gZ3JpZGxpbmVzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJlc2l6YWJsZUNvbHVtbnMocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93Q2xhc3NOYW1lKHJvd0NsYXNzTmFtZT86IHN0cmluZywgY2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVCkgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZSA9IHJvd0NsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm4gPSBjbGFzc05hbWVNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWFkZXJDbGFzc05hbWUoaGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogVGFibGVEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl9kYXRhS2V5UHJvcGVydHkgPSB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIG9iai5faGFzRGVmYXVsdFNvcnQgPSB0aGlzLl9oYXNEZWZhdWx0U29ydDtcbiAgICAgICAgb2JqLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgb2JqLl9kZWZhdWx0U29ydEFzYyA9IHRoaXMuX2RlZmF1bHRTb3J0QXNjLm1hcChwID0+IHApO1xuICAgICAgICBvYmouX2ZpbHRlckRpc3BsYXkgPSB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIG9iai5fcm93SGVpZ2h0ID0gdGhpcy5fcm93SGVpZ2h0O1xuICAgICAgICBvYmouX2hhc0hvdmVyID0gdGhpcy5faGFzSG92ZXI7XG4gICAgICAgIG9iai5faGFzR3JpZGxpbmVzID0gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgICAgICBvYmouX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgICAgICBvYmouX2NvbHVtblJlc2l6ZU1vZGUgPSB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvcih0aGlzLm1vZGVsLnR5cGUsIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW4gYmFzZWQgb24gYXR0cmlidXRlc1xuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgYXR0cmlidXRlIG1hcFxuICAgICAqIEBwYXJhbSBjb2x1bW4gaWYgcHJvdmlkZWQsIHJlcGxhY2VkIGJ5IG5ldywgb3RoZXJ3aXNlIG5ldyBpcyBjcmVhdGVkXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cHNlcnRDb2x1bW5Gcm9tQXR0cmlidXRlRGVmKGF0dHJpYnV0ZTogVGFibGV2aWV3QXR0cmlidXRlRGVmLCBjb2x1bW4/OiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4sIC4uLmFyZ3M6IGFueVtdKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW4gPSB0aGlzLmFkZENvbHVtbihhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0cmlidXRlLmNvbHVtblR5cGUgPT09IENvbHVtblR5cGVFbnVtLkVudW0gJiYgYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBbYXR0cmlidXRlLmVudW1UeXBlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtbiA9IGNvbHVtbi5hc1R5cGUoYXR0cmlidXRlLmNvbHVtblR5cGUsIGF0dHJpYnV0ZS5jb2x1bW5EaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUuY2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBjb2x1bW4ud2l0aE9iamVjdFByb3BlcnR5KGF0dHJpYnV0ZS5jbGFzc1R5cGUpLndpdGhTb3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2x1bW4ud2l0aFNvcnQoKS53aXRoRmlsdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgbW9kaWZpZWQgdHlwZSBvZiBjb2x1bW5cbiAgICAgKiBETyBOT1QgVVNFIHdpdGggZW51bSAodXNlIHdpdGhDdXN0b21FbnVtVHlwZSlcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uIG5hbWVcbiAgICAgKiBAcGFyYW0gY29sdW1uVHlwZSBtb2RpZmllZCB0eXBlXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb25hbCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5Nb2RpZmllZFR5cGUocHJvcGVydHk6IHN0cmluZywgY29sdW1uVHlwZT86IENvbHVtblR5cGVFbnVtLCBjb2x1bW5EaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5fbW9kZWxUeXBlKS5maW5kKGF0cmlidXRlID0+IGF0cmlidXRlLm5hbWUgPT09IHByb3BlcnR5KTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlRGVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlID0gY29sdW1uVHlwZSA/PyBhdHRyaWJ1dGVEZWYuY29sdW1uVHlwZTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5EaXNwbGF5VHlwZSA9IGNvbHVtbkRpc3BsYXlUeXBlID8/IGF0dHJpYnV0ZURlZi5jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICAgICAgICAgIHRoaXMudXBzZXJ0Q29sdW1uRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEZWYsXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gYXR0cmlidXRlRGVmLm5hbWUpLFxuICAgICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGN1c3RvbSBlbnVtIHR5cGUgZm9yIGNvbHVtblxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4gbmFtZVxuICAgICAqIEBwYXJhbSBlbnVtVHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uTW9kaWZpZWRFbnVtKHByb3BlcnR5OiBzdHJpbmcsIGVudW1UeXBlPzogRW51bVR5cGUpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5fbW9kZWxUeXBlKS5maW5kKGF0cmlidXRlID0+IGF0cmlidXRlLm5hbWUgPT09IHByb3BlcnR5KTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlRGVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRW51bTtcbiAgICAgICAgICAgIHRoaXMudXBzZXJ0Q29sdW1uRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEZWYsXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpLFxuICAgICAgICAgICAgICAgIGVudW1UeXBlID8/IChPYmplY3RTZXJpYWxpemVyLmdldCgpLmZpbmRFbnVtKGF0dHJpYnV0ZURlZi50eXBlKSBhcyBFbnVtVHlwZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtb2RpZmllcyBjb2x1bW4gd2l0aCBjbGFzcyBhbmQgbG9va3VwIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbiBuYW1lXG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyIGxvb2t1cFByb3ZpZGVyIGZvciBjbGFzc1xuICAgICAqIEBwYXJhbSBpdGVtc0xhYmVsUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbk1vZGlmaWVkTG9va3VwKHByb3BlcnR5OiBzdHJpbmcsIGxvb2t1cFByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPGFueSwgYW55PiwgaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nLCBmaWx0ZXJQcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi53aXRoRmlsdGVyTG9va3VwKCkud2l0aExvb2t1cERhdGFQcm92aWRlcihsb29rdXBQcm92aWRlcik7XG4gICAgICAgICAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgRmlsdGVyTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGNvbHVtbiBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KS53aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlclByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW4gYXMgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPikud2l0aEZpbHRlclByb3BlcnR5KGZpbHRlclByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbGVkIG9uIGRhdGEgcmVjZWl2ZWQgdG8gY3VzdG9taXplIFN0cmluZyBwcm9wZXJ0aWVzIHdpdGggZWl0aGVyIERhdGEgb3IgTnVtYmVyIHR5cGVcbiAgICAgKiBAcGFyYW0gZGF0YSBhcGkgcmVzcG9uc2VcbiAgICAgKi9cbiAgICAvLyBwdWJsaWMgb25EYXRhUmVjZWl2ZWRUeXBlQnVpbGRpbmcoZGF0YTogTWVkaXVzUXVlcnlSZXN1bHQ8VD4pOiB0aGlzIHtcbiAgICAvLyAgICAgaWYgKCF0aGlzLl9hdXRvR2VuZXJhdGVkKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcztcbiAgICAvLyAgICAgfSBlbHNlIGlmIChkYXRhLnBhZ2VEYXRhID09IG51bGwgfHwgZGF0YS5wYWdlRGF0YS5sZW5ndGggPT0gMCkge1xuICAgIC8vICAgICAgICAgdGhyb3cgRXJyb3IoJ1BhZ2VEYXRhIGlzIGVtcHR5LCBjYW5ub3QgZ2VuZXJhdGUgZGVzY3JpcHRvcicpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5wYWdlRGF0YVswXTtcbiAgICAvLyAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9iamVjdE1vZGVsKTtcbiAgICAvL1xuICAgIC8vICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYSA9PiBhLm5hbWUgPT09IGtleSk7XG4gICAgLy8gICAgICAgICBpZiAoYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlRW51bS5TdHJpbmcpIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBhdHRyaWJ1dGUubmFtZSk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIFRhYmxldmlld1V0aWwuc3RyaW5nQ29sdW1uQ29udmVydGVyKGNvbHVtbiwgdmFsdWUpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IgZXh0ZW5kcyBUYWJsZURlc2NyaXB0b3I8YW55PiB7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbHVtbnM6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoe30gYXMgQ2xhc3NUeXBlPGFueT4sIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZSgnRHluYW1pYyB0YWJsZScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBleGNsdWRlZCBjb2x1bW5zIHdoZW4gZ2VuZXJhdGluZyBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGV4Y2x1ZGVkQ29sdW1uIG5hbWVzIG9mIGV4Y2x1ZGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNFeGNsdWRlZChleGNsdWRlZENvbHVtbjogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZXhjbHVkZWRDb2x1bW5zID0gZXhjbHVkZWRDb2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggc29ydCBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gc29ydENvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gc29ydE9uQ29sdW1ucyBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gc29ydENvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIHNvcnQsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIHNvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNTb3J0KHNvcnRPbkNvbHVtbnM6IHN0cmluZ1tdLCBzb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbk1vZGUgPSBzb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbnMgPSBzb3J0T25Db2x1bW5zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIGZpbHRlciBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gZmlsdGVyQ29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBmaWx0ZXJPbkNvbHVtbiBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gZmlsdGVyQ29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgZmlsdGVyLCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBmaWx0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNGaWx0ZXIoZmlsdGVyT25Db2x1bW46IHN0cmluZ1tdLCBmaWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID0gZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucyA9IGZpbHRlck9uQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGdpdmVuIHR5cGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlIGN1c3RvbSB0eXBlIGZvciBjb2x1bW5cbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbiBhcmd1bWVudHMgZm9yIGNvbHVtblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoQ29sdW1uTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogTWVkaXVzUXVlcnlSZXN1bHQ8YW55Pik6IFRhYmxlRGVzY3JpcHRvcjxhbnk+IHtcbiAgICAgICAgY29uc3QgdGFibGVEZXNjcmlwdG9yID0gdGhpcy50b1RhYmxlRGVzY3JpcHRvcigpO1xuXG4gICAgICAgIGlmIChkYXRhLnBhZ2VEYXRhID09IG51bGwgfHwgZGF0YS5wYWdlRGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5wYWdlRGF0YVswXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9iamVjdE1vZGVsKVxuICAgICAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLl9leGNsdWRlZENvbHVtbnMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gIUFycmF5LmlzQXJyYXkodmFsdWUpKTsgLy9leGNsdWRlIGFycmF5cyBhbmQgc2V0c1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFDb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0ga2V5KTtcbiAgICAgICAgICAgIGxldCBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+O1xuICAgICAgICAgICAgaWYgKG1ldGFDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFDb2x1bW4udmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uID0gbWV0YUNvbHVtbi50b0NvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3IuYWRkQ29sdW1uRGVzY3JpcHRvcihjb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSB0YWJsZURlc2NyaXB0b3IuYWRkQ29sdW1uKGtleSkud2l0aFRpdGxlKGtleSk7XG4gICAgICAgICAgICAgICAgVGFibGV2aWV3VXRpbC5zdHJpbmdDb2x1bW5Db252ZXJ0ZXIoY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZlNvcnRDb2x1bW5zID0gdGhpcy5fc29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFICYmICFlbGVtZW50T2ZTb3J0Q29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mU29ydENvbHVtbnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2l0aFNvcnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mRmlsdGVyQ29sdW1ucyA9IHRoaXMuX2ZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZkZpbHRlckNvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mRmlsdGVyQ29sdW1ucylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi53aXRoVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgZGVlcCBjb3B5IG9mIHRhYmxlIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IodGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZXhjbHVkZWRDb2x1bW5zID0gWy4uLnRoaXMuX2V4Y2x1ZGVkQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbnMgPSBbLi4udGhpcy5fZmlsdGVyQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5zID0gWy4uLnRoaXMuX3NvcnRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1uTW9kZSA9IHRoaXMuX2ZpbHRlckNvbHVtbk1vZGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5Nb2RlID0gdGhpcy5fc29ydENvbHVtbk1vZGU7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvcigpOiBUYWJsZURlc2NyaXB0b3I8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yPGFueT4oe30gYXMgQ2xhc3NUeXBlPGFueT4sIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './tableview.descriptor';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL3RhYmxldmlldy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG4iXX0=
|