@mediusinc/mng-commons 0.20.0 → 0.21.0-rc.2
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 +19 -2
- package/assets/i18n/sl.json +18 -1
- package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
- package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
- package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
- package/esm2020/lib/api/models/index.mjs +8 -8
- package/esm2020/lib/api/models/mappers.mjs +12 -12
- package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
- package/esm2020/lib/api/models/query-param.model.mjs +67 -67
- package/esm2020/lib/api/models/query-result.model.mjs +23 -23
- package/esm2020/lib/api/models/serialization.model.mjs +1 -1
- package/esm2020/lib/api/services/api.abstract.service.mjs +57 -57
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +75 -68
- package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +30 -23
- package/esm2020/lib/api/services/index.mjs +3 -3
- package/esm2020/lib/api/utils/index.mjs +2 -2
- package/esm2020/lib/api/utils/medius-rest.util.mjs +212 -212
- package/esm2020/lib/api/utils/object-serializer.util.mjs +247 -247
- package/esm2020/lib/components/action/action.component.mjs +225 -221
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +303 -284
- package/esm2020/lib/components/action/index.mjs +5 -4
- package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +45 -0
- package/esm2020/lib/components/action/models/action-component.model.mjs +2 -0
- package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +249 -245
- package/esm2020/lib/components/action/models/index.mjs +5 -4
- package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
- package/esm2020/lib/components/action/route/action-route.component.mjs +129 -129
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +299 -299
- package/esm2020/lib/components/form/date-range/date-range.component.mjs +108 -108
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +193 -193
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +243 -219
- package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +38 -38
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +49 -49
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +44 -44
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +25 -25
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +149 -149
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +23 -23
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +180 -180
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +167 -167
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +148 -148
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
- package/esm2020/lib/components/form/formly/fields/index.mjs +10 -10
- package/esm2020/lib/components/form/formly/formly.config.mjs +211 -211
- package/esm2020/lib/components/form/formly/index.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/formly-config.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/index.mjs +2 -2
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +79 -15
- package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
- package/esm2020/lib/components/form/index.mjs +4 -4
- package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
- package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
- package/esm2020/lib/components/form/models/form-editor.interface.mjs +1 -1
- package/esm2020/lib/components/form/models/index.mjs +2 -2
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
- package/esm2020/lib/components/layout/footer.component.mjs +16 -16
- package/esm2020/lib/components/layout/index.mjs +7 -7
- package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
- package/esm2020/lib/components/layout/menu-item.component.mjs +271 -271
- package/esm2020/lib/components/layout/menu.component.mjs +20 -20
- package/esm2020/lib/components/layout/services/index.mjs +1 -1
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +194 -194
- package/esm2020/lib/components/layout/topbar.component.mjs +64 -64
- package/esm2020/lib/components/layout/version.component.mjs +57 -57
- package/esm2020/lib/components/tableview/index.mjs +6 -6
- package/esm2020/lib/components/tableview/models/index.mjs +1 -1
- package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +122 -115
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -52
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +119 -119
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +84 -83
- package/esm2020/lib/components/tableview/table/table.component.mjs +594 -590
- package/esm2020/lib/components/tableview/tableview.component.mjs +112 -112
- package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
- package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -37
- package/esm2020/lib/data-providers/index.mjs +6 -6
- package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
- package/esm2020/lib/data-providers/table.data-provider.mjs +38 -38
- package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +24 -24
- package/esm2020/lib/data-providers/tableview.data-provider.mjs +45 -59
- package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +76 -76
- package/esm2020/lib/descriptors/action-button.descriptor.mjs +59 -59
- package/esm2020/lib/descriptors/action.descriptor.mjs +555 -548
- package/esm2020/lib/descriptors/column.descriptor.mjs +405 -386
- package/esm2020/lib/descriptors/editor.descriptor.mjs +290 -251
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +24 -24
- package/esm2020/lib/descriptors/field.descriptor.mjs +979 -937
- package/esm2020/lib/descriptors/filter.descriptor.mjs +320 -320
- package/esm2020/lib/descriptors/index.mjs +11 -11
- package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
- package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
- package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
- package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
- package/esm2020/lib/descriptors/table.descriptor.mjs +482 -464
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +344 -324
- package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
- package/esm2020/lib/descriptors/types/column.type.mjs +20 -20
- package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
- package/esm2020/lib/descriptors/types/field.type.mjs +54 -54
- package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
- package/esm2020/lib/descriptors/types/index.mjs +6 -6
- package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
- package/esm2020/lib/directives/component.directive.mjs +44 -44
- package/esm2020/lib/directives/index.mjs +2 -2
- package/esm2020/lib/directives/template.directive.mjs +27 -27
- package/esm2020/lib/mng-commons.module.mjs +472 -468
- package/esm2020/lib/models/column-value.model.mjs +1 -1
- package/esm2020/lib/models/config.model.mjs +2 -2
- package/esm2020/lib/models/enum.model.mjs +1 -1
- package/esm2020/lib/models/error.model.mjs +1 -1
- package/esm2020/lib/models/index.mjs +9 -9
- package/esm2020/lib/models/menu.model.mjs +1 -1
- package/esm2020/lib/models/tableview-attr.model.mjs +1 -1
- package/esm2020/lib/models/user.model.mjs +1 -1
- package/esm2020/lib/models/version.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
- package/esm2020/lib/pipes/class-map.pipe.mjs +21 -21
- package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
- package/esm2020/lib/pipes/enumerate-async.pipe.mjs +37 -37
- package/esm2020/lib/pipes/enumerate.pipe.mjs +54 -54
- package/esm2020/lib/pipes/getter.pipe.mjs +19 -19
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
- package/esm2020/lib/pipes/index.mjs +12 -11
- package/esm2020/lib/pipes/json-path.pipe.mjs +78 -78
- package/esm2020/lib/pipes/mngLocaleDefaultRowClass.pipe.mjs +26 -0
- package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
- package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
- package/esm2020/lib/pipes/parametrize.pipe.mjs +84 -84
- package/esm2020/lib/pipes/template.pipe.mjs +23 -23
- package/esm2020/lib/router/index.mjs +2 -2
- package/esm2020/lib/router/models/index.mjs +1 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/route-builder.mjs +425 -425
- package/esm2020/lib/router/tableview-route-builder.mjs +186 -186
- package/esm2020/lib/security/authorization.guard.mjs +25 -25
- package/esm2020/lib/security/authorization.service.mjs +46 -46
- package/esm2020/lib/security/authorization.util.mjs +15 -15
- package/esm2020/lib/security/index.mjs +3 -3
- package/esm2020/lib/security/model/authorization.type.mjs +7 -7
- package/esm2020/lib/security/model/index.mjs +3 -3
- package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
- package/esm2020/lib/security/model/permissions.model.mjs +86 -86
- package/esm2020/lib/services/action-executor.service.mjs +552 -552
- package/esm2020/lib/services/commons.service.mjs +446 -420
- package/esm2020/lib/services/configuration.service.mjs +119 -119
- package/esm2020/lib/services/error-mapper.service.mjs +13 -13
- package/esm2020/lib/services/index.mjs +6 -6
- package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
- package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
- package/esm2020/lib/services/internal/index.mjs +2 -2
- package/esm2020/lib/services/navigation.service.mjs +47 -47
- package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
- package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
- package/esm2020/lib/services/providers/index.mjs +2 -2
- package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
- package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
- package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
- package/esm2020/lib/services/tokens/index.mjs +4 -4
- package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
- package/esm2020/lib/services/version.service.mjs +38 -38
- package/esm2020/lib/services/view-container.component.service.mjs +54 -54
- package/esm2020/lib/styles/button-style.builder.mjs +164 -164
- package/esm2020/lib/styles/index.mjs +2 -2
- package/esm2020/lib/styles/models/index.mjs +2 -2
- package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
- package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
- package/esm2020/lib/styles/styles.util.mjs +41 -41
- package/esm2020/lib/types/index.mjs +2 -2
- package/esm2020/lib/types/type.decorator.mjs +21 -21
- package/esm2020/lib/types/type.model.mjs +1 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +145 -145
- package/esm2020/lib/utils/date.util.mjs +117 -117
- package/esm2020/lib/utils/editor-formly.util.mjs +277 -268
- package/esm2020/lib/utils/enum.util.mjs +81 -81
- package/esm2020/lib/utils/i18n.util.mjs +232 -232
- package/esm2020/lib/utils/index.mjs +9 -9
- package/esm2020/lib/utils/model.util.mjs +68 -68
- package/esm2020/lib/utils/notification.util.mjs +51 -46
- package/esm2020/lib/utils/route.util.mjs +23 -23
- package/esm2020/lib/utils/string.util.mjs +26 -26
- package/esm2020/lib/utils/tableview.util.mjs +159 -159
- package/esm2020/lib/utils/type.util.mjs +92 -92
- package/esm2020/mediusinc-mng-commons.mjs +4 -4
- package/esm2020/public-api.mjs +54 -54
- package/fesm2015/mediusinc-mng-commons.mjs +13537 -13170
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +13375 -13014
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/api/models/builders/query-param.builder.d.ts +13 -13
- package/lib/api/models/filter-match-type.model.d.ts +23 -23
- package/lib/api/models/filter-param.model.d.ts +23 -23
- package/lib/api/models/index.d.ts +8 -8
- package/lib/api/models/mappers.d.ts +6 -6
- package/lib/api/models/query-mode.model.d.ts +16 -16
- package/lib/api/models/query-param.model.d.ts +31 -31
- package/lib/api/models/query-result.model.d.ts +24 -24
- package/lib/api/models/serialization.model.d.ts +8 -8
- package/lib/api/services/api.abstract.service.d.ts +24 -24
- package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
- package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
- package/lib/api/services/index.d.ts +3 -3
- package/lib/api/utils/index.d.ts +2 -2
- package/lib/api/utils/medius-rest.util.d.ts +16 -16
- package/lib/api/utils/object-serializer.util.d.ts +33 -33
- package/lib/components/action/action.component.d.ts +74 -72
- package/lib/components/action/editor/action-editor.component.d.ts +69 -69
- package/lib/components/action/index.d.ts +4 -3
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -0
- package/lib/components/action/models/action-component.model.d.ts +15 -0
- package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
- package/lib/components/action/models/action-execution.model.d.ts +135 -133
- package/lib/components/action/models/index.d.ts +4 -3
- package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
- package/lib/components/action/route/action-route.component.d.ts +31 -31
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
- package/lib/components/form/date-range/date-range.component.d.ts +28 -28
- package/lib/components/form/dropdown/dropdown.component.d.ts +52 -52
- package/lib/components/form/editor/form-editor.component.d.ts +52 -45
- package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -13
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -16
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -15
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -14
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +29 -29
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -11
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -46
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +21 -21
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -7
- package/lib/components/form/formly/fields/index.d.ts +10 -10
- package/lib/components/form/formly/formly.config.d.ts +14 -14
- package/lib/components/form/formly/index.d.ts +1 -1
- package/lib/components/form/formly/models/formly-config.model.d.ts +11 -11
- package/lib/components/form/formly/models/formly-field.model.d.ts +16 -16
- package/lib/components/form/formly/models/index.d.ts +2 -2
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +11 -6
- package/lib/components/form/formly/wrappers/index.d.ts +2 -2
- package/lib/components/form/index.d.ts +4 -4
- package/lib/components/form/models/field-action-context.model.d.ts +17 -17
- package/lib/components/form/models/form-editor.event.d.ts +37 -37
- package/lib/components/form/models/form-editor.interface.d.ts +10 -10
- package/lib/components/form/models/index.d.ts +2 -2
- package/lib/components/layout/breadcrumb.component.d.ts +8 -8
- package/lib/components/layout/footer.component.d.ts +9 -9
- package/lib/components/layout/index.d.ts +7 -7
- package/lib/components/layout/main-layout.component.d.ts +20 -20
- package/lib/components/layout/menu-item.component.d.ts +52 -52
- package/lib/components/layout/menu.component.d.ts +10 -10
- package/lib/components/layout/services/index.d.ts +1 -1
- package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
- package/lib/components/layout/topbar.component.d.ts +28 -28
- package/lib/components/layout/version.component.d.ts +19 -19
- package/lib/components/tableview/index.d.ts +6 -6
- package/lib/components/tableview/models/index.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +17 -17
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +29 -28
- package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +35 -35
- package/lib/components/tableview/table/table.component.d.ts +115 -114
- package/lib/components/tableview/tableview.component.d.ts +48 -48
- package/lib/data-providers/base.data-provider.d.ts +14 -14
- package/lib/data-providers/editor.data-provider.d.ts +25 -25
- package/lib/data-providers/index.d.ts +6 -6
- package/lib/data-providers/lookup.data-provider.d.ts +14 -14
- package/lib/data-providers/table.data-provider.d.ts +27 -27
- package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
- package/lib/data-providers/tableview.data-provider.d.ts +33 -37
- package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
- package/lib/descriptors/action-button.descriptor.d.ts +22 -22
- package/lib/descriptors/action.descriptor.d.ts +216 -212
- package/lib/descriptors/column.descriptor.d.ts +130 -125
- package/lib/descriptors/editor.descriptor.d.ts +116 -95
- package/lib/descriptors/field-validation.descriptor.d.ts +19 -19
- package/lib/descriptors/field.descriptor.d.ts +342 -332
- package/lib/descriptors/filter.descriptor.d.ts +112 -112
- package/lib/descriptors/index.d.ts +11 -11
- package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
- package/lib/descriptors/interfaces/index.d.ts +2 -2
- package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
- package/lib/descriptors/model.descriptor.d.ts +18 -18
- package/lib/descriptors/table.descriptor.d.ts +188 -182
- package/lib/descriptors/tableview.descriptor.d.ts +129 -122
- package/lib/descriptors/types/action.type.d.ts +21 -21
- package/lib/descriptors/types/column.type.d.ts +18 -18
- package/lib/descriptors/types/editor.type.d.ts +6 -6
- package/lib/descriptors/types/field.type.d.ts +46 -46
- package/lib/descriptors/types/filter.type.d.ts +27 -27
- package/lib/descriptors/types/index.d.ts +6 -6
- package/lib/descriptors/types/table.type.d.ts +22 -22
- package/lib/directives/component.directive.d.ts +16 -16
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/template.directive.d.ts +13 -13
- package/lib/mng-commons.module.d.ts +97 -95
- package/lib/models/column-value.model.d.ts +4 -4
- package/lib/models/config.model.d.ts +40 -39
- package/lib/models/enum.model.d.ts +6 -6
- package/lib/models/error.model.d.ts +14 -14
- package/lib/models/index.d.ts +9 -9
- package/lib/models/menu.model.d.ts +30 -30
- package/lib/models/tableview-attr.model.d.ts +10 -10
- package/lib/models/user.model.d.ts +8 -8
- package/lib/models/version.model.d.ts +18 -18
- package/lib/models/view-container.model.d.ts +43 -43
- package/lib/pipes/boolean.pipe.d.ts +7 -7
- package/lib/pipes/class-map.pipe.d.ts +7 -7
- package/lib/pipes/enum.pipe.d.ts +8 -8
- package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
- package/lib/pipes/enumerate.pipe.d.ts +21 -21
- package/lib/pipes/getter.pipe.d.ts +7 -7
- package/lib/pipes/i18n-property.pipe.d.ts +8 -8
- package/lib/pipes/index.d.ts +11 -10
- package/lib/pipes/json-path.pipe.d.ts +13 -13
- package/lib/pipes/mngLocaleDefaultRowClass.pipe.d.ts +10 -0
- package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
- package/lib/pipes/models/internal/index.d.ts +1 -1
- package/lib/pipes/parametrize.pipe.d.ts +13 -13
- package/lib/pipes/template.pipe.d.ts +10 -10
- package/lib/router/index.d.ts +2 -2
- package/lib/router/models/index.d.ts +1 -1
- package/lib/router/models/router.model.d.ts +33 -33
- package/lib/router/route-builder.d.ts +98 -98
- package/lib/router/tableview-route-builder.d.ts +37 -37
- package/lib/security/authorization.guard.d.ts +11 -11
- package/lib/security/authorization.service.d.ts +19 -19
- package/lib/security/authorization.util.d.ts +5 -5
- package/lib/security/index.d.ts +3 -3
- package/lib/security/model/authorization.type.d.ts +6 -6
- package/lib/security/model/index.d.ts +3 -3
- package/lib/security/model/permission-service.interface.d.ts +6 -6
- package/lib/security/model/permissions.model.d.ts +37 -37
- package/lib/services/action-executor.service.d.ts +149 -149
- package/lib/services/commons.service.d.ts +89 -84
- package/lib/services/configuration.service.d.ts +45 -45
- package/lib/services/error-mapper.service.d.ts +7 -7
- package/lib/services/index.d.ts +6 -6
- package/lib/services/internal/commons-init.provider.d.ts +3 -3
- package/lib/services/internal/commons-init.service.d.ts +16 -16
- package/lib/services/internal/index.d.ts +2 -2
- package/lib/services/navigation.service.d.ts +14 -14
- package/lib/services/providers/config-service.provider.d.ts +6 -6
- package/lib/services/providers/formly-config.provider.d.ts +4 -4
- package/lib/services/providers/index.d.ts +2 -2
- package/lib/services/tokens/browser-storage.token.d.ts +2 -2
- package/lib/services/tokens/commons-init.token.d.ts +3 -3
- package/lib/services/tokens/default-setting.token.d.ts +2 -2
- package/lib/services/tokens/index.d.ts +4 -4
- package/lib/services/tokens/module-config.token.d.ts +3 -3
- package/lib/services/version.service.d.ts +13 -13
- package/lib/services/view-container.component.service.d.ts +31 -31
- package/lib/styles/button-style.builder.d.ts +67 -67
- package/lib/styles/index.d.ts +2 -2
- package/lib/styles/models/index.d.ts +2 -2
- package/lib/styles/models/style-level.enum.d.ts +10 -10
- package/lib/styles/models/style-size.enum.d.ts +7 -7
- package/lib/styles/styles.util.d.ts +14 -14
- package/lib/types/index.d.ts +2 -2
- package/lib/types/type.decorator.d.ts +4 -4
- package/lib/types/type.model.d.ts +23 -23
- package/lib/utils/action-data-provider.util.d.ts +20 -20
- package/lib/utils/date.util.d.ts +7 -7
- package/lib/utils/editor-formly.util.d.ts +12 -12
- package/lib/utils/enum.util.d.ts +50 -50
- package/lib/utils/i18n.util.d.ts +56 -56
- package/lib/utils/index.d.ts +9 -9
- package/lib/utils/model.util.d.ts +8 -8
- package/lib/utils/notification.util.d.ts +12 -11
- package/lib/utils/route.util.d.ts +4 -4
- package/lib/utils/string.util.d.ts +4 -4
- package/lib/utils/tableview.util.d.ts +40 -40
- package/lib/utils/type.util.d.ts +57 -57
- package/mediusinc-mng-commons-0.21.0-rc.2.tgz +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +34 -34
- package/scss/mng-overrides/_theme_datatable.scss +6 -0
- package/scss/mng-overrides/_theme_forms.scss +8 -0
- package/version-info.json +7 -7
|
@@ -1,386 +1,405 @@
|
|
|
1
|
-
import { ModelUtil, TypeUtil } from '../utils';
|
|
2
|
-
import { DateUtil } from '../utils/date.util';
|
|
3
|
-
import { TableviewUtil } from '../utils/tableview.util';
|
|
4
|
-
import { FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor } from './filter.descriptor';
|
|
5
|
-
import { ColumnDisplayTypeEnum, ColumnTypeEnum, FilterTypeEnum } from './types';
|
|
6
|
-
export class ColumnDescriptor {
|
|
7
|
-
constructor(table, property) {
|
|
8
|
-
this._columnType = ColumnTypeEnum.String;
|
|
9
|
-
this._columnDisplayType = ColumnDisplayTypeEnum.String;
|
|
10
|
-
this._isSortEnabled = false;
|
|
11
|
-
// styling
|
|
12
|
-
this._headerClassName = '';
|
|
13
|
-
this._className = '';
|
|
14
|
-
this._width = null;
|
|
15
|
-
this._minWidth = null;
|
|
16
|
-
this._maxWidth = null;
|
|
17
|
-
this._enumNameAsValue = false;
|
|
18
|
-
// boolean specifics
|
|
19
|
-
this._booleanAsIcon = false;
|
|
20
|
-
// helpers
|
|
21
|
-
this._hasCopyToClipboard = false;
|
|
22
|
-
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
case ColumnTypeEnum.
|
|
131
|
-
return this.
|
|
132
|
-
case ColumnTypeEnum.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.
|
|
147
|
-
this.
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
150
|
-
this
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
this.
|
|
156
|
-
this.
|
|
157
|
-
this.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
this.
|
|
164
|
-
this.
|
|
165
|
-
this.
|
|
166
|
-
return this;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
this._columnType = ColumnTypeEnum.
|
|
170
|
-
this._columnDisplayType = ColumnDisplayTypeEnum.
|
|
171
|
-
this.
|
|
172
|
-
this.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
this.
|
|
191
|
-
this
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
this
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return this;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
this.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
case ColumnTypeEnum.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const filterDescriptor = new
|
|
274
|
-
this._filterDescriptor = filterDescriptor;
|
|
275
|
-
return filterDescriptor;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
this.
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
this.
|
|
283
|
-
return
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
this.
|
|
287
|
-
return this;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
this.
|
|
291
|
-
return this;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
this.
|
|
295
|
-
return this;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
this
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
obj.
|
|
321
|
-
obj.
|
|
322
|
-
obj.
|
|
323
|
-
obj.
|
|
324
|
-
obj.
|
|
325
|
-
obj.
|
|
326
|
-
obj.
|
|
327
|
-
obj.
|
|
328
|
-
obj.
|
|
329
|
-
obj.
|
|
330
|
-
obj.
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
return this;
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* sets
|
|
364
|
-
* @param
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLDBCQUEwQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekcsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUUsTUFBTSxPQUFPLGdCQUFnQjtJQThDekIsWUFBWSxLQUEwQixFQUFFLFFBQWdCO1FBM0NoRCxnQkFBVyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BELHVCQUFrQixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFHekUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPL0IsVUFBVTtRQUNGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBS2hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVqQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQWdCL0IsVUFBVTtRQUNGLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUdoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJ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RSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxlQUFxQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0lDb2x1bW5WYWx1ZUNvbXBvbmVudH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtNb2RlbFV0aWwsIFR5cGVVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge0RhdGVVdGlsfSBmcm9tICcuLi91dGlscy9kYXRlLnV0aWwnO1xuaW1wb3J0IHtUYWJsZXZpZXdVdGlsfSBmcm9tICcuLi91dGlscy90YWJsZXZpZXcudXRpbCc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yfSBmcm9tICcuL2ZpbHRlci5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9yLCBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yfSBmcm9tICcuL3RhYmxlLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJsZTogVGFibGVEZXNjcmlwdG9yPFRUPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uVHlwZTogQ29sdW1uVHlwZUVudW0gPSBDb2x1bW5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uRGlzcGxheVR5cGU6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9qc29uUGF0aD86IHN0cmluZztcbiAgICBwcml2YXRlIF9pc1NvcnRFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZ2V0dGVyPzogKGl0ZW06IFRULCB2YWx1ZT86IFQgfCBudWxsKSA9PiB1bmtub3duO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9taW5XaWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWF4V2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gZW51bSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9lbnVtVHlwZT86IEVudW1UeXBlO1xuICAgIHByaXZhdGUgX2VudW1UaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByaXZhdGUgX2VudW1OYW1lQXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgLy8gYm9vbGVhbiBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9ib29sZWFuQXNJY29uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYm9vbGVhblllcz86IHN0cmluZztcbiAgICBwcml2YXRlIF9ib29sZWFuTm8/OiBzdHJpbmc7XG5cbiAgICAvLyBtb2RlbCBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9vYmplY3RNb2RlbFR5cGU/OiBDbGFzc1R5cGU8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBfb2JqZWN0VGl0bGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8vIGN1cnJlbmN5IHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeUZyb21Qcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJztcblxuICAgIC8vIGN1c3RvbSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXN0b21Db21wb25lbnRUeXBlPzogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8VFQ+PjtcblxuICAgIC8vIGhlbHBlcnNcbiAgICBwcml2YXRlIF9oYXNDb3B5VG9DbGlwYm9hcmQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZURlc2NyaXB0b3I8VFQ+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkRpc3BsYXlUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uRGlzcGxheVR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQganNvblBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uUGF0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU29ydEVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NvcnRFbmFibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1UaXRsZVBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtVGl0bGVQYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bU5hbWVBc1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU5hbWVBc1ZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbkFzSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuWWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhblllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ObygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jvb2xlYW5ObztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9iamVjdE1vZGVsVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdE1vZGVsVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9iamVjdFRpdGxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeURpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUZyb21Qcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzQ29weVRvQ2xpcGJvYXJkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBjb2x1bW4gdG8gZ2l2ZW4gdHlwZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHR5cGUgY29sdW1uIHR5cGUgZW51bVxuICAgICAqIEBwYXJhbSBhcmdzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29sdW1uIChvcHRpb25hbClcbiAgICAgKi9cbiAgICBwdWJsaWMgYXNUeXBlKHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGxheVR5cGUgPT09IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeSA/IHRoaXMuYXNDdXJyZW5jeSguLi5hcmdzKSA6IHRoaXMuYXNOdW1iZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNCb29sZWFuKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRGF0ZSguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0VudW0oYXJnc1swXSBhcyBFbnVtVHlwZSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0N1c3RvbUNvbXBvbmVudChhcmdzWzBdKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc051bWJlcihkaXNwbGF5Rm9ybWF0ID0gJzEuMC0wJywgbG9jYWxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZSA/PyB0aGlzLl9sb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1cnJlbmN5KGN1cnJlbmN5Q29kZT86IHN0cmluZywgY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmcsIGN1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnLCBkaXNwbGF5Rm9ybWF0ID0gJzEuMi0yJywgbG9jYWxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeUNvZGUgPSBjdXJyZW5jeUNvZGUgPz8gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICB0aGlzLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IGN1cnJlbmN5RnJvbVByb3BlcnR5ID8/IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeURpc3BsYXkgPSBjdXJyZW5jeURpc3BsYXkgPz8gdGhpcy5fY3VycmVuY3lEaXNwbGF5O1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdCA/PyBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGUgPz8gdGhpcy5fbG9jYWxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEYXRlKGRpc3BsYXlGb3JtYXQgPSAnZGQuTU0ueXl5eScpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNCb29sZWFuKHllcz86IHN0cmluZywgbm8/OiBzdHJpbmcsIGFzSWNvbiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICB0aGlzLl9ib29sZWFuQXNJY29uID0gYXNJY29uO1xuICAgICAgICB0aGlzLl9ib29sZWFuWWVzID0geWVzO1xuICAgICAgICB0aGlzLl9ib29sZWFuTm8gPSBubztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRW51bShlbnVtVHlwZTogRW51bVR5cGUsIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkVudW07XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgICAgIHRoaXMuX2VudW1UeXBlID0gZW51bVR5cGU7XG4gICAgICAgIHRoaXMuX2VudW1OYW1lQXNWYWx1ZSA9IG5hbWVBc1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHRpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRpdGxlUGF0aCA9IFR5cGVVdGlsLmZpbmRFbnVtTmFtZShlbnVtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW51bVRpdGxlUGF0aCA9IHRpdGxlUGF0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGU6IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFRUPj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ29tcG9uZW50O1xuICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnRUeXBlID0gY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzSHRtbCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uSHRtbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lPzogc3RyaW5nLCBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB0aGlzLl9oZWFkZXJDbGFzc05hbWUgPSBoZWFkZXJDbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoV2lkdGgod2lkdGg/OiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyLCBtYXhXaWR0aD86IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21pbldpZHRoID0gbWluV2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fbWF4V2lkdGggPSBtYXhXaWR0aCA/PyBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9iamVjdFByb3BlcnR5PE1UPihtb2RlbFR5cGU6IENsYXNzVHlwZTxNVD4sIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb2JqZWN0TW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICBpZiAoIXRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHkgPSBNb2RlbFV0aWwuZmluZFRpdGxlQXR0cmlidXRlKG1vZGVsVHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eSA9IHRpdGxlUHJvcGVydHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSnNvblBhdGgocGF0aDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2pzb25QYXRoID0gcGF0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXIoZm9yY2VTaW1wbGUgPSBmYWxzZSk6IEZpbHRlckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8YW55Pih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIGxldCBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bTtcblxuICAgICAgICBpZiAoIWZvcmNlU2ltcGxlICYmIHRoaXMuX29iamVjdE1vZGVsVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlckxvb2t1cCgpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5fY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlU2ltcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJMb29rdXBFbnVtKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3IuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zID0gdGhpcy5fZGlzcGxheUZvcm1hdD8uc3BsaXQoJy4nKT8uWzFdPy5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMgJiYgZGlzcGxheUZvcm1hdEZyYWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvci53aXRoTnVtYmVyRnJhY3Rpb25zKHBhcnNlSW50KGRpc3BsYXlGb3JtYXRGcmFjdGlvbnNbMF0pLCBwYXJzZUludChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zWzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgICAgICAgICBpZiAoZGlzcGxheUZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRpc3BsYXlGb3JtYXQgPSBEYXRlVXRpbC5mcm9tUHJpbWVUb0FuZ3VsYXJEYXRlRm9ybWF0KGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3Iud2l0aERhdGVGb3JtYXQoZmlsdGVyRGlzcGxheUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckxvb2t1cCgpOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPHVua25vd24+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9vYmplY3RNb2RlbFR5cGUgPz8gbnVsbCk7XG4gICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckxvb2t1cEVudW0ob3B0aW9ucz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+KTogRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3Ige1xuICAgICAgICBpZiAodGhpcy5fY29sdW1uVHlwZSAhPT0gQ29sdW1uVHlwZUVudW0uRW51bSB8fCAhdGhpcy5fZW51bVR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7dGhpcy5fcHJvcGVydHl9IGlzIG5vdCBvZiB0eXBlIGVudW0gb3IgZW51bSB0eXBlIGlzIHVuZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtVHlwZSwgb3B0aW9ucywgdGhpcy5fZW51bU5hbWVBc1ZhbHVlLCB0aGlzLl9lbnVtVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydChpc0VuYWJsZWQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzU29ydEVuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQoYXNjID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoRGVmYXVsdFNvcnQodGhpcy5fcHJvcGVydHksIGFzYyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29weVRvQ2xpcGJvYXJkKGhhc0NvcHlUb0NsaWJvYXJkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQgPSBoYXNDb3B5VG9DbGlib2FyZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR2V0dGVyKGdldHRlcj86IChpdGVtOiBUVCwgdmFsdWU/OiBUIHwgbnVsbCkgPT4gdW5rbm93bik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXR0ZXIgPSBnZXR0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KSB7XG4gICAgICAgIG9iai5fanNvblBhdGggPSB0aGlzLl9qc29uUGF0aDtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2lzU29ydEVuYWJsZWQgPSB0aGlzLl9pc1NvcnRFbmFibGVkO1xuICAgICAgICBvYmouX2NvbHVtblR5cGUgPSB0aGlzLl9jb2x1bW5UeXBlO1xuICAgICAgICBvYmouX2NvbHVtbkRpc3BsYXlUeXBlID0gdGhpcy5fY29sdW1uRGlzcGxheVR5cGU7XG4gICAgICAgIG9iai5fZmlsdGVyRGVzY3JpcHRvciA9IHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I/LmNvcHkoKTtcbiAgICAgICAgb2JqLl9lbnVtVHlwZSA9IHRoaXMuX2VudW1UeXBlO1xuICAgICAgICBvYmouX2VudW1UaXRsZVBhdGggPSB0aGlzLl9lbnVtVGl0bGVQYXRoO1xuICAgICAgICBvYmouX2VudW1OYW1lQXNWYWx1ZSA9IHRoaXMuX2VudW1OYW1lQXNWYWx1ZTtcbiAgICAgICAgb2JqLl9ib29sZWFuQXNJY29uID0gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICAgICAgb2JqLl9ib29sZWFuWWVzID0gdGhpcy5fYm9vbGVhblllcztcbiAgICAgICAgb2JqLl9ib29sZWFuTm8gPSB0aGlzLl9ib29sZWFuTm87XG4gICAgICAgIG9iai5fb2JqZWN0TW9kZWxUeXBlID0gdGhpcy5fb2JqZWN0TW9kZWxUeXBlO1xuICAgICAgICBvYmouX29iamVjdFRpdGxlUHJvcGVydHkgPSB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5O1xuICAgICAgICBvYmouX2xvY2FsZSA9IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUNvZGUgPSB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lEaXNwbGF5ID0gdGhpcy5fY3VycmVuY3lEaXNwbGF5O1xuICAgICAgICBvYmouX2N1cnJlbmN5RnJvbVByb3BlcnR5ID0gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgICAgIG9iai5fZGlzcGxheUZvcm1hdCA9IHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgICAgIG9iai5faGVhZGVyQ2xhc3NOYW1lID0gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl93aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgICAgICBvYmouX21pbldpZHRoID0gdGhpcy5fbWluV2lkdGg7XG4gICAgICAgIG9iai5fbWF4V2lkdGggPSB0aGlzLl9tYXhXaWR0aDtcbiAgICAgICAgb2JqLl9jdXN0b21Db21wb25lbnRUeXBlID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICAgICAgb2JqLl9oYXNDb3B5VG9DbGlwYm9hcmQgPSB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgICAgIG9iai5fdGVtcGxhdGUgPSB0aGlzLl90ZW1wbGF0ZTtcbiAgICAgICAgb2JqLl9nZXR0ZXIgPSB0aGlzLl9nZXR0ZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgZXh0ZW5kcyBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF90YWJsZTogVGFibGVEeW5hbWljRGVzY3JpcHRvcjtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBfdmlzaWJpbGl0eSA9IHRydWU7XG4gICAgLy8gcHJpdmF0ZSBfZmlsdGVyU3RhdHVzO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IsIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodGFibGUsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpc2liaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmlsaXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgY29sdW1uJ3MgdGl0bGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdGl0bGUgdGl0bGUgdG8gYmUgc2V0XG4gICAgICogQHBhcmFtIG92ZXJyaWRlIHNob3VsZCBjb2x1bW4gdGl0bGUgaWYgYWxsIHJlYWR5IHNldD9cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcsIG92ZXJyaWRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpdGxlID09IG51bGwgfHwgb3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBhdXRvbWF0aWMgdHlwZSBhbmQgcmV0dXJucyB0aGlzIGNvbHVtblxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQXV0b21hdGljVHlwZSh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIFRhYmxldmlld1V0aWwuc3RyaW5nQ29sdW1uQ29udmVydGVyKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB2aXNpYmlsaXR5IHN0YXRlIGZvciBjb2x1bW4gYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVmlzaWJpbGl0eSh2aXNpYmlsaXR5OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Zpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiBjb2x1bW4gZHluYW1pYyBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHRoaXMuX3RhYmxlLCB0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl92aXNpYmlsaXR5ID0gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ29sdW1uRGVzY3JpcHRvcih0YWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxhbnk+KTogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yLCB0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
|
|
1
|
+
import { ModelUtil, TypeUtil } from '../utils';
|
|
2
|
+
import { DateUtil } from '../utils/date.util';
|
|
3
|
+
import { TableviewUtil } from '../utils/tableview.util';
|
|
4
|
+
import { FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor } from './filter.descriptor';
|
|
5
|
+
import { ColumnDisplayTypeEnum, ColumnTypeEnum, FilterTypeEnum } from './types';
|
|
6
|
+
export class ColumnDescriptor {
|
|
7
|
+
constructor(table, property) {
|
|
8
|
+
this._columnType = ColumnTypeEnum.String;
|
|
9
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.String;
|
|
10
|
+
this._isSortEnabled = false;
|
|
11
|
+
// styling
|
|
12
|
+
this._headerClassName = '';
|
|
13
|
+
this._className = '';
|
|
14
|
+
this._width = null;
|
|
15
|
+
this._minWidth = null;
|
|
16
|
+
this._maxWidth = null;
|
|
17
|
+
this._enumNameAsValue = false;
|
|
18
|
+
// boolean specifics
|
|
19
|
+
this._booleanAsIcon = false;
|
|
20
|
+
// helpers
|
|
21
|
+
this._hasCopyToClipboard = false;
|
|
22
|
+
// localization
|
|
23
|
+
this._isLocalized = false;
|
|
24
|
+
this._table = table;
|
|
25
|
+
this._property = property;
|
|
26
|
+
}
|
|
27
|
+
get columnType() {
|
|
28
|
+
return this._columnType;
|
|
29
|
+
}
|
|
30
|
+
get columnDisplayType() {
|
|
31
|
+
return this._columnDisplayType;
|
|
32
|
+
}
|
|
33
|
+
get title() {
|
|
34
|
+
return this._title;
|
|
35
|
+
}
|
|
36
|
+
get jsonPath() {
|
|
37
|
+
return this._jsonPath;
|
|
38
|
+
}
|
|
39
|
+
get isSortEnabled() {
|
|
40
|
+
return this._isSortEnabled;
|
|
41
|
+
}
|
|
42
|
+
get filterDescriptor() {
|
|
43
|
+
return this._filterDescriptor;
|
|
44
|
+
}
|
|
45
|
+
get displayFormat() {
|
|
46
|
+
return this._displayFormat;
|
|
47
|
+
}
|
|
48
|
+
get table() {
|
|
49
|
+
return this._table;
|
|
50
|
+
}
|
|
51
|
+
get property() {
|
|
52
|
+
return this._property;
|
|
53
|
+
}
|
|
54
|
+
get headerClassName() {
|
|
55
|
+
return this._headerClassName;
|
|
56
|
+
}
|
|
57
|
+
get className() {
|
|
58
|
+
return this._className;
|
|
59
|
+
}
|
|
60
|
+
get width() {
|
|
61
|
+
return this._width;
|
|
62
|
+
}
|
|
63
|
+
get minWidth() {
|
|
64
|
+
return this._minWidth;
|
|
65
|
+
}
|
|
66
|
+
get maxWidth() {
|
|
67
|
+
return this._maxWidth;
|
|
68
|
+
}
|
|
69
|
+
get enumType() {
|
|
70
|
+
return this._enumType;
|
|
71
|
+
}
|
|
72
|
+
get enumTitlePath() {
|
|
73
|
+
return this._enumTitlePath;
|
|
74
|
+
}
|
|
75
|
+
get enumNameAsValue() {
|
|
76
|
+
return this._enumNameAsValue;
|
|
77
|
+
}
|
|
78
|
+
get booleanAsIcon() {
|
|
79
|
+
return this._booleanAsIcon;
|
|
80
|
+
}
|
|
81
|
+
get booleanYes() {
|
|
82
|
+
return this._booleanYes;
|
|
83
|
+
}
|
|
84
|
+
get booleanNo() {
|
|
85
|
+
return this._booleanNo;
|
|
86
|
+
}
|
|
87
|
+
get objectModelType() {
|
|
88
|
+
return this._objectModelType;
|
|
89
|
+
}
|
|
90
|
+
get objectTitleProperty() {
|
|
91
|
+
return this._objectTitleProperty;
|
|
92
|
+
}
|
|
93
|
+
get customComponentType() {
|
|
94
|
+
return this._customComponentType;
|
|
95
|
+
}
|
|
96
|
+
get locale() {
|
|
97
|
+
return this._locale;
|
|
98
|
+
}
|
|
99
|
+
get currencyCode() {
|
|
100
|
+
return this._currencyCode;
|
|
101
|
+
}
|
|
102
|
+
get currencyDisplay() {
|
|
103
|
+
return this._currencyDisplay;
|
|
104
|
+
}
|
|
105
|
+
get currencyFromProperty() {
|
|
106
|
+
return this._currencyFromProperty;
|
|
107
|
+
}
|
|
108
|
+
get hasCopyToClipboard() {
|
|
109
|
+
return this._hasCopyToClipboard;
|
|
110
|
+
}
|
|
111
|
+
get template() {
|
|
112
|
+
return this._template;
|
|
113
|
+
}
|
|
114
|
+
get getter() {
|
|
115
|
+
return this._getter;
|
|
116
|
+
}
|
|
117
|
+
get isLocalized() {
|
|
118
|
+
return this._isLocalized;
|
|
119
|
+
}
|
|
120
|
+
get localizationExistsProperty() {
|
|
121
|
+
return this._localizationExistsProperty;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* converts column to given type with additional arguments
|
|
125
|
+
* @param type column type enum
|
|
126
|
+
* @param args any additional arguments for column (optional)
|
|
127
|
+
*/
|
|
128
|
+
asType(type, displayType, ...args) {
|
|
129
|
+
switch (type) {
|
|
130
|
+
case ColumnTypeEnum.Number:
|
|
131
|
+
return displayType === ColumnDisplayTypeEnum.Currency ? this.asCurrency(...args) : this.asNumber(...args);
|
|
132
|
+
case ColumnTypeEnum.Boolean:
|
|
133
|
+
return this.asBoolean(...args);
|
|
134
|
+
case ColumnTypeEnum.Date:
|
|
135
|
+
return this.asDate(...args);
|
|
136
|
+
case ColumnTypeEnum.Enum:
|
|
137
|
+
return this.asEnum(args[0], args[1], args[2]);
|
|
138
|
+
case ColumnTypeEnum.Custom:
|
|
139
|
+
return this.asCustomComponent(args[0]);
|
|
140
|
+
case ColumnTypeEnum.String:
|
|
141
|
+
default:
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
asNumber(displayFormat = '1.0-0', locale) {
|
|
146
|
+
this._columnType = ColumnTypeEnum.Number;
|
|
147
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Number;
|
|
148
|
+
this._displayFormat = displayFormat;
|
|
149
|
+
this._locale = locale ?? this._locale;
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
asCurrency(currencyCode, currencyFromProperty, currencyDisplay, displayFormat = '1.2-2', locale) {
|
|
153
|
+
this._columnType = ColumnTypeEnum.Number;
|
|
154
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Currency;
|
|
155
|
+
this._currencyCode = currencyCode ?? this._currencyCode;
|
|
156
|
+
this._currencyFromProperty = currencyFromProperty ?? this._currencyFromProperty;
|
|
157
|
+
this._currencyDisplay = currencyDisplay ?? this._currencyDisplay;
|
|
158
|
+
this._displayFormat = displayFormat ?? displayFormat;
|
|
159
|
+
this._locale = locale ?? this._locale;
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
asDate(displayFormat = 'dd.MM.yyyy') {
|
|
163
|
+
this._columnType = ColumnTypeEnum.Date;
|
|
164
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Date;
|
|
165
|
+
this._displayFormat = displayFormat;
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
asBoolean(yes, no, asIcon = false) {
|
|
169
|
+
this._columnType = ColumnTypeEnum.Boolean;
|
|
170
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Boolean;
|
|
171
|
+
this._booleanAsIcon = asIcon;
|
|
172
|
+
this._booleanYes = yes;
|
|
173
|
+
this._booleanNo = no;
|
|
174
|
+
return this;
|
|
175
|
+
}
|
|
176
|
+
asEnum(enumType, nameAsValue = false, titlePath) {
|
|
177
|
+
this._columnType = ColumnTypeEnum.Enum;
|
|
178
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Enum;
|
|
179
|
+
this._enumType = enumType;
|
|
180
|
+
this._enumNameAsValue = nameAsValue;
|
|
181
|
+
if (typeof titlePath === 'undefined') {
|
|
182
|
+
titlePath = TypeUtil.findEnumName(enumType);
|
|
183
|
+
}
|
|
184
|
+
this._enumTitlePath = titlePath;
|
|
185
|
+
return this;
|
|
186
|
+
}
|
|
187
|
+
asCustomComponent(customComponentType) {
|
|
188
|
+
this._columnType = ColumnTypeEnum.Custom;
|
|
189
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Component;
|
|
190
|
+
this._customComponentType = customComponentType;
|
|
191
|
+
return this;
|
|
192
|
+
}
|
|
193
|
+
asHtml() {
|
|
194
|
+
this._columnDisplayType = ColumnDisplayTypeEnum.Html;
|
|
195
|
+
return this;
|
|
196
|
+
}
|
|
197
|
+
withClassName(className, headerClassName) {
|
|
198
|
+
this._className = className ?? '';
|
|
199
|
+
this._headerClassName = headerClassName ?? '';
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
202
|
+
withWidth(width, minWidth, maxWidth) {
|
|
203
|
+
this._width = width ?? null;
|
|
204
|
+
this._minWidth = minWidth ?? null;
|
|
205
|
+
this._maxWidth = maxWidth ?? null;
|
|
206
|
+
return this;
|
|
207
|
+
}
|
|
208
|
+
withObjectProperty(modelType, titleProperty) {
|
|
209
|
+
this._objectModelType = modelType;
|
|
210
|
+
if (!titleProperty) {
|
|
211
|
+
this._objectTitleProperty = ModelUtil.findTitleAttribute(modelType) ?? undefined;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this._objectTitleProperty = titleProperty;
|
|
215
|
+
}
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
218
|
+
withTitle(title) {
|
|
219
|
+
this._title = title;
|
|
220
|
+
return this;
|
|
221
|
+
}
|
|
222
|
+
withJsonPath(path) {
|
|
223
|
+
this._jsonPath = path;
|
|
224
|
+
return this;
|
|
225
|
+
}
|
|
226
|
+
withFilter(forceSimple = false) {
|
|
227
|
+
this._filterDescriptor = new FilterDescriptor(this._property);
|
|
228
|
+
let filterType;
|
|
229
|
+
if (!forceSimple && this._objectModelType) {
|
|
230
|
+
return this.withFilterLookup();
|
|
231
|
+
}
|
|
232
|
+
switch (this._columnType) {
|
|
233
|
+
case ColumnTypeEnum.Number:
|
|
234
|
+
filterType = FilterTypeEnum.Number;
|
|
235
|
+
break;
|
|
236
|
+
case ColumnTypeEnum.Boolean:
|
|
237
|
+
filterType = FilterTypeEnum.Boolean;
|
|
238
|
+
break;
|
|
239
|
+
case ColumnTypeEnum.Date:
|
|
240
|
+
filterType = FilterTypeEnum.Date;
|
|
241
|
+
break;
|
|
242
|
+
case ColumnTypeEnum.Enum:
|
|
243
|
+
if (!forceSimple) {
|
|
244
|
+
return this.withFilterLookupEnum();
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
filterType = FilterTypeEnum.String;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
case ColumnTypeEnum.String:
|
|
251
|
+
case ColumnTypeEnum.Custom:
|
|
252
|
+
default:
|
|
253
|
+
filterType = FilterTypeEnum.String;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
this._filterDescriptor.asFilterType(filterType);
|
|
257
|
+
if (filterType === FilterTypeEnum.Number) {
|
|
258
|
+
const displayFormatFractions = this._displayFormat?.split('.')?.[1]?.split('-');
|
|
259
|
+
if (displayFormatFractions && displayFormatFractions.length > 2) {
|
|
260
|
+
this._filterDescriptor.withNumberFractions(parseInt(displayFormatFractions[0]), parseInt(displayFormatFractions[1]));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else if (filterType === FilterTypeEnum.Date) {
|
|
264
|
+
const displayFormat = this._displayFormat;
|
|
265
|
+
if (displayFormat) {
|
|
266
|
+
const filterDisplayFormat = DateUtil.fromPrimeToAngularDateFormat(displayFormat);
|
|
267
|
+
this._filterDescriptor.withDateFormat(filterDisplayFormat);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return this._filterDescriptor;
|
|
271
|
+
}
|
|
272
|
+
withFilterLookup() {
|
|
273
|
+
const filterDescriptor = new FilterLookupDescriptor(this._property, this._objectModelType ?? null);
|
|
274
|
+
this._filterDescriptor = filterDescriptor;
|
|
275
|
+
return filterDescriptor;
|
|
276
|
+
}
|
|
277
|
+
withFilterLookupEnum(options) {
|
|
278
|
+
if (this._columnType !== ColumnTypeEnum.Enum || !this._enumType) {
|
|
279
|
+
throw new Error(`Column ${this._property} is not of type enum or enum type is undefined.`);
|
|
280
|
+
}
|
|
281
|
+
const filterDescriptor = new FilterLookupEnumDescriptor(this._property, this._enumType, options, this._enumNameAsValue, this._enumTitlePath);
|
|
282
|
+
this._filterDescriptor = filterDescriptor;
|
|
283
|
+
return filterDescriptor;
|
|
284
|
+
}
|
|
285
|
+
withSort(isEnabled = true) {
|
|
286
|
+
this._isSortEnabled = isEnabled;
|
|
287
|
+
return this;
|
|
288
|
+
}
|
|
289
|
+
withDefaultSort(asc = true) {
|
|
290
|
+
this._table.withDefaultSort(this._property, asc);
|
|
291
|
+
return this;
|
|
292
|
+
}
|
|
293
|
+
withCopyToClipboard(hasCopyToCliboard = true) {
|
|
294
|
+
this._hasCopyToClipboard = hasCopyToCliboard;
|
|
295
|
+
return this;
|
|
296
|
+
}
|
|
297
|
+
withTemplate(template) {
|
|
298
|
+
this._template = template;
|
|
299
|
+
return this;
|
|
300
|
+
}
|
|
301
|
+
withGetter(getter) {
|
|
302
|
+
this._getter = getter;
|
|
303
|
+
return this;
|
|
304
|
+
}
|
|
305
|
+
localized(existsProperty) {
|
|
306
|
+
if (existsProperty) {
|
|
307
|
+
this._localizationExistsProperty = existsProperty;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
this._localizationExistsProperty = `${this._property}Localized`;
|
|
311
|
+
}
|
|
312
|
+
return this;
|
|
313
|
+
}
|
|
314
|
+
copy() {
|
|
315
|
+
const descriptor = new ColumnDescriptor(this._table, this._property);
|
|
316
|
+
this.copyFieldsTo(descriptor);
|
|
317
|
+
return descriptor;
|
|
318
|
+
}
|
|
319
|
+
copyFieldsTo(obj) {
|
|
320
|
+
obj._jsonPath = this._jsonPath;
|
|
321
|
+
obj._title = this._title;
|
|
322
|
+
obj._isSortEnabled = this._isSortEnabled;
|
|
323
|
+
obj._columnType = this._columnType;
|
|
324
|
+
obj._columnDisplayType = this._columnDisplayType;
|
|
325
|
+
obj._filterDescriptor = this._filterDescriptor?.copy();
|
|
326
|
+
obj._enumType = this._enumType;
|
|
327
|
+
obj._enumTitlePath = this._enumTitlePath;
|
|
328
|
+
obj._enumNameAsValue = this._enumNameAsValue;
|
|
329
|
+
obj._booleanAsIcon = this._booleanAsIcon;
|
|
330
|
+
obj._booleanYes = this._booleanYes;
|
|
331
|
+
obj._booleanNo = this._booleanNo;
|
|
332
|
+
obj._objectModelType = this._objectModelType;
|
|
333
|
+
obj._objectTitleProperty = this._objectTitleProperty;
|
|
334
|
+
obj._locale = this._locale;
|
|
335
|
+
obj._currencyCode = this._currencyCode;
|
|
336
|
+
obj._currencyDisplay = this._currencyDisplay;
|
|
337
|
+
obj._currencyFromProperty = this._currencyFromProperty;
|
|
338
|
+
obj._displayFormat = this._displayFormat;
|
|
339
|
+
obj._headerClassName = this._headerClassName;
|
|
340
|
+
obj._className = this._className;
|
|
341
|
+
obj._width = this._width;
|
|
342
|
+
obj._minWidth = this._minWidth;
|
|
343
|
+
obj._maxWidth = this._maxWidth;
|
|
344
|
+
obj._customComponentType = this._customComponentType;
|
|
345
|
+
obj._hasCopyToClipboard = this._hasCopyToClipboard;
|
|
346
|
+
obj._template = this._template;
|
|
347
|
+
obj._getter = this._getter;
|
|
348
|
+
obj._isLocalized = this._isLocalized;
|
|
349
|
+
obj._localizationExistsProperty = this._localizationExistsProperty;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
export class ColumnDynamicDescriptor extends ColumnDescriptor {
|
|
353
|
+
// private _filterStatus;
|
|
354
|
+
constructor(table, property) {
|
|
355
|
+
super(table, property);
|
|
356
|
+
this._visibility = true;
|
|
357
|
+
this._table = table;
|
|
358
|
+
}
|
|
359
|
+
get visibility() {
|
|
360
|
+
return this._visibility;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* sets column's title and returns this column
|
|
364
|
+
* @param title title to be set
|
|
365
|
+
* @param override should column title if all ready set?
|
|
366
|
+
*/
|
|
367
|
+
withTitle(title, override = false) {
|
|
368
|
+
if (this._title == null || override) {
|
|
369
|
+
this._title = title;
|
|
370
|
+
}
|
|
371
|
+
return this;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* defines automatic type and returns this column
|
|
375
|
+
* @param value
|
|
376
|
+
*/
|
|
377
|
+
withAutomaticType(value) {
|
|
378
|
+
TableviewUtil.stringColumnConverter(this, value);
|
|
379
|
+
return this;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* sets visibility state for column and returns this column
|
|
383
|
+
* @param visibility
|
|
384
|
+
*/
|
|
385
|
+
withVisibility(visibility) {
|
|
386
|
+
this._visibility = visibility;
|
|
387
|
+
return this;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* creates deep copy of column dynamic descriptor
|
|
391
|
+
*/
|
|
392
|
+
copy() {
|
|
393
|
+
const descriptor = new ColumnDynamicDescriptor(this._table, this._property);
|
|
394
|
+
this.copyFieldsTo(descriptor);
|
|
395
|
+
descriptor._title = this._title;
|
|
396
|
+
descriptor._visibility = this._visibility;
|
|
397
|
+
return descriptor;
|
|
398
|
+
}
|
|
399
|
+
toColumnDescriptor(tableDescriptor) {
|
|
400
|
+
const descriptor = new ColumnDescriptor(tableDescriptor, this._property);
|
|
401
|
+
this.copyFieldsTo(descriptor);
|
|
402
|
+
return descriptor;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLDBCQUEwQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekcsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUUsTUFBTSxPQUFPLGdCQUFnQjtJQWtEekIsWUFBWSxLQUEwQixFQUFFLFFBQWdCO1FBL0NoRCxnQkFBVyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BELHVCQUFrQixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFHekUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPL0IsVUFBVTtRQUNGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBS2hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVqQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQWdCL0IsVUFBVTtRQUNGLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQyxlQUFlO1FBQ1AsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFJekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7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UUFBUSxHQUFHLEtBQUs7UUFDckQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsS0FBYTtRQUNsQyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsVUFBbUI7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ2EsSUFBSTtRQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRU0sa0JBQWtCLENBQUMsZUFBcUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7TW9kZWxVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS51dGlsJztcbmltcG9ydCB7VGFibGV2aWV3VXRpbH0gZnJvbSAnLi4vdXRpbHMvdGFibGV2aWV3LnV0aWwnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcn0gZnJvbSAnLi9maWx0ZXIuZGVzY3JpcHRvcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfdGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2NvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtID0gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgIHByaXZhdGUgX2NvbHVtbkRpc3BsYXlUeXBlOiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uU3RyaW5nO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfanNvblBhdGg/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaXNTb3J0RW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2ZpbHRlckRlc2NyaXB0b3I/OiBGaWx0ZXJEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgX2Rpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RlbXBsYXRlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2dldHRlcj86IChpdGVtOiBUVCwgdmFsdWU/OiBUIHwgbnVsbCkgPT4gdW5rbm93bjtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21heFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIGVudW0gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfZW51bVR5cGU/OiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIF9lbnVtVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbnVtTmFtZUFzVmFsdWUgPSBmYWxzZTtcblxuICAgIC8vIGJvb2xlYW4gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfYm9vbGVhbkFzSWNvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Jvb2xlYW5ZZXM/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYm9vbGVhbk5vPzogc3RyaW5nO1xuXG4gICAgLy8gbW9kZWwgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfb2JqZWN0TW9kZWxUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+O1xuICAgIHByaXZhdGUgX29iamVjdFRpdGxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZSc7XG5cbiAgICAvLyBjdXN0b20gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50VHlwZT86IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFRUPj47XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBfaGFzQ29weVRvQ2xpcGJvYXJkID0gZmFsc2U7XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uRGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25QYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bVRpdGxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UaXRsZVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtTmFtZUFzVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0TW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0TW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0VGl0bGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RnJvbVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydHMgY29sdW1uIHRvIGdpdmVuIHR5cGUgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB0eXBlIGNvbHVtbiB0eXBlIGVudW1cbiAgICAgKiBAcGFyYW0gYXJncyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIGNvbHVtbiAob3B0aW9uYWwpXG4gICAgICovXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlUeXBlID09PSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3kgPyB0aGlzLmFzQ3VycmVuY3koLi4uYXJncykgOiB0aGlzLmFzTnVtYmVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQm9vbGVhbiguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0RhdGUoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNFbnVtKGFyZ3NbMF0gYXMgRW51bVR5cGUsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXN0b21Db21wb25lbnQoYXJnc1swXSk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXNOdW1iZXIoZGlzcGxheUZvcm1hdCA9ICcxLjAtMCcsIGxvY2FsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGUgPz8gdGhpcy5fbG9jYWxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXJyZW5jeShjdXJyZW5jeUNvZGU/OiBzdHJpbmcsIGN1cnJlbmN5RnJvbVByb3BlcnR5Pzogc3RyaW5nLCBjdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJywgZGlzcGxheUZvcm1hdCA9ICcxLjItMicsIGxvY2FsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lDb2RlID0gY3VycmVuY3lDb2RlID8/IHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHkgPSBjdXJyZW5jeUZyb21Qcm9wZXJ0eSA/PyB0aGlzLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lEaXNwbGF5ID0gY3VycmVuY3lEaXNwbGF5ID8/IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQgPz8gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlID8/IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGF0ZShkaXNwbGF5Rm9ybWF0ID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQm9vbGVhbih5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhbkFzSWNvbiA9IGFzSWNvbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhblllcyA9IHllcztcbiAgICAgICAgdGhpcy5fYm9vbGVhbk5vID0gbm87XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0VudW0oZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9lbnVtVHlwZSA9IGVudW1UeXBlO1xuICAgICAgICB0aGlzLl9lbnVtTmFtZUFzVmFsdWUgPSBuYW1lQXNWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VudW1UaXRsZVBhdGggPSB0aXRsZVBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxUVD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5DdXN0b207XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkNvbXBvbmVudDtcbiAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IGN1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0h0bWwoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkh0bWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZT86IHN0cmluZywgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lID8/ICcnO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFdpZHRoKHdpZHRoPzogbnVtYmVyLCBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9taW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gbWF4V2lkdGggPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPYmplY3RQcm9wZXJ0eTxNVD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8TVQ+LCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29iamVjdE1vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgaWYgKCF0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZShtb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29iamVjdFRpdGxlUHJvcGVydHkgPSB0aXRsZVByb3BlcnR5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25QYXRoKHBhdGg6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9qc29uUGF0aCA9IHBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyKGZvcmNlU2ltcGxlID0gZmFsc2UpOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueT4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSAmJiB0aGlzLl9vYmplY3RNb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJMb29rdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2NvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkRhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyTG9va3VwRW51bSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUZvcm1hdEZyYWN0aW9ucyA9IHRoaXMuX2Rpc3BsYXlGb3JtYXQ/LnNwbGl0KCcuJyk/LlsxXT8uc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zICYmIGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3Iud2l0aE51bWJlckZyYWN0aW9ucyhwYXJzZUludChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zWzBdKSwgcGFyc2VJbnQoZGlzcGxheUZvcm1hdEZyYWN0aW9uc1sxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXNwbGF5Rm9ybWF0ID0gRGF0ZVV0aWwuZnJvbVByaW1lVG9Bbmd1bGFyRGF0ZUZvcm1hdChkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLndpdGhEYXRlRm9ybWF0KGZpbHRlckRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXAoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjx1bmtub3duPih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fb2JqZWN0TW9kZWxUeXBlID8/IG51bGwpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXBFbnVtKG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPik6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbHVtblR5cGUgIT09IENvbHVtblR5cGVFbnVtLkVudW0gfHwgIXRoaXMuX2VudW1UeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke3RoaXMuX3Byb3BlcnR5fSBpcyBub3Qgb2YgdHlwZSBlbnVtIG9yIGVudW0gdHlwZSBpcyB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fZW51bVR5cGUsIG9wdGlvbnMsIHRoaXMuX2VudW1OYW1lQXNWYWx1ZSwgdGhpcy5fZW51bVRpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnQoaXNFbmFibGVkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1NvcnRFbmFibGVkID0gaXNFbmFibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KGFzYyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUud2l0aERlZmF1bHRTb3J0KHRoaXMuX3Byb3BlcnR5LCBhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvcHlUb0NsaXBib2FyZChoYXNDb3B5VG9DbGlib2FyZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpYm9hcmQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI/OiAoaXRlbTogVFQsIHZhbHVlPzogVCB8IG51bGwpID0+IHVua25vd24pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jYWxpemVkKGV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmIChleGlzdHNQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBleGlzdHNQcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5ID0gYCR7dGhpcy5fcHJvcGVydHl9TG9jYWxpemVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4odGhpcy5fdGFibGUsIHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPikge1xuICAgICAgICBvYmouX2pzb25QYXRoID0gdGhpcy5fanNvblBhdGg7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9pc1NvcnRFbmFibGVkID0gdGhpcy5faXNTb3J0RW5hYmxlZDtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIG9iai5fZW51bVR5cGUgPSB0aGlzLl9lbnVtVHlwZTtcbiAgICAgICAgb2JqLl9lbnVtVGl0bGVQYXRoID0gdGhpcy5fZW51bVRpdGxlUGF0aDtcbiAgICAgICAgb2JqLl9lbnVtTmFtZUFzVmFsdWUgPSB0aGlzLl9lbnVtTmFtZUFzVmFsdWU7XG4gICAgICAgIG9iai5fYm9vbGVhbkFzSWNvbiA9IHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgICAgIG9iai5fYm9vbGVhblllcyA9IHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgICAgIG9iai5fYm9vbGVhbk5vID0gdGhpcy5fYm9vbGVhbk5vO1xuICAgICAgICBvYmouX29iamVjdE1vZGVsVHlwZSA9IHRoaXMuX29iamVjdE1vZGVsVHlwZTtcbiAgICAgICAgb2JqLl9vYmplY3RUaXRsZVByb3BlcnR5ID0gdGhpcy5fb2JqZWN0VGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICBvYmouX2Rpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICBvYmouX2hlYWRlckNsYXNzTmFtZSA9IHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5faGFzQ29weVRvQ2xpcGJvYXJkID0gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgICAgICBvYmouX3RlbXBsYXRlID0gdGhpcy5fdGVtcGxhdGU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF92aXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8vIHByaXZhdGUgX2ZpbHRlclN0YXR1cztcblxuICAgIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yLCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHRhYmxlLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGNvbHVtbidzIHRpdGxlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIHRvIGJlIHNldFxuICAgICAqIEBwYXJhbSBvdmVycmlkZSBzaG91bGQgY29sdW1uIHRpdGxlIGlmIGFsbCByZWFkeSBzZXQ/XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nLCBvdmVycmlkZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl90aXRsZSA9PSBudWxsIHx8IG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgYXV0b21hdGljIHR5cGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEF1dG9tYXRpY1R5cGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcih0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgY29sdW1uIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgY29sdW1uIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcih0aGlzLl90YWJsZSwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fdmlzaWJpbGl0eSA9IHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NvbHVtbkRlc2NyaXB0b3IodGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8YW55Pik6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yKHRhYmxlRGVzY3JpcHRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
|