@smartbit4all/ng-client 3.3.205 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +17 -0
- package/{esm2020 → esm2022}/lib/component-factory-service/component-factory-service.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/component-factory-service/projects.mjs +5 -5
- package/{esm2020 → esm2022}/lib/session/api/api/api.mjs +3 -3
- package/esm2022/lib/session/api/api/session.service.mjs +306 -0
- package/esm2022/lib/session/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/session/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/session/api/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/session/api/model/accountInfo.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/apiError.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/authenticationProviderData.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
- package/{esm2020 → esm2022}/lib/session/api/model/models.mjs +8 -8
- package/{esm2020 → esm2022}/lib/session/api/model/refreshSessionRequest.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/session.mjs +1 -1
- package/esm2022/lib/session/api/model/sessionInfoData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/session/api/model/userActivityLog.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/session/api/variables.mjs +8 -8
- package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +225 -0
- package/{esm2020 → esm2022}/lib/session/projects.mjs +9 -9
- package/esm2022/lib/session/smart-error-catching.interceptor.mjs +71 -0
- package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +46 -0
- package/{esm2020 → esm2022}/lib/session/smart-session-handler.service.mjs +5 -5
- package/esm2022/lib/session/smart-session.module.mjs +58 -0
- package/esm2022/lib/session/smart-session.service.mjs +225 -0
- package/{esm2020 → esm2022}/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
- package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +58 -0
- package/{esm2020 → esm2022}/lib/shared/projects.mjs +3 -3
- package/esm2022/lib/shared/shared.module.mjs +19 -0
- package/esm2022/lib/shared/smart-tooltip.directive.mjs +58 -0
- package/{esm2020 → esm2022}/lib/shared/smarttable.date-pipe.mjs +43 -43
- package/{esm2020 → esm2022}/lib/smart-client/projects.mjs +4 -4
- package/{esm2020 → esm2022}/lib/smart-client/smart-authentication.service.mjs +21 -21
- package/esm2022/lib/smart-client/smart-component-api-client.mjs +717 -0
- package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +53 -0
- package/{esm2020 → esm2022}/lib/smart-client/smart.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/smart-client/smart.service.mjs +75 -75
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/api/api.mjs +4 -4
- package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +133 -0
- package/esm2022/lib/smart-component-layout/api/api.module.mjs +40 -0
- package/esm2022/lib/smart-component-layout/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/index.mjs +7 -7
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentType.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentWidgetType.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/layoutDirection.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/models.mjs +6 -6
- package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
- package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
- package/esm2022/lib/smart-component-layout/api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/smart-component-layout/projects.mjs +7 -7
- package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +94 -0
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +259 -0
- package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +41 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/projects.mjs +7 -7
- package/esm2022/lib/smart-dialog/smartdialog.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.model.mjs +15 -15
- package/esm2022/lib/smart-dialog/smartdialog.module.mjs +46 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.service.mjs +54 -54
- package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +88 -0
- package/{esm2020 → esm2022}/lib/smart-expandable-section/expandable-section.model.mjs +11 -11
- package/{esm2020 → esm2022}/lib/smart-expandable-section/projects.mjs +7 -7
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +49 -0
- package/{esm2020 → esm2022}/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +17 -17
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +8 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +27 -27
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +32 -32
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/model.mjs +15 -15
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-filter/api/value/model/value.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-filter/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -14
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +165 -0
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -45
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter.model.mjs +12 -12
- package/esm2022/lib/smart-filter/smart-filter.module.mjs +33 -0
- package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +198 -0
- package/esm2022/lib/smart-filter-editor/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +17 -17
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +13 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +8 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +7 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +27 -27
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +32 -32
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/smartFilterType.mjs +17 -17
- package/esm2022/lib/smart-filter-editor/api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-filter-editor/project.mjs +7 -7
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +73 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +40 -40
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +235 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +69 -0
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +47 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +24 -24
- package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +57 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/api/api.mjs +3 -3
- package/esm2022/lib/smart-form/api/api/default.service.mjs +133 -0
- package/esm2022/lib/smart-form/api/api.module.mjs +40 -0
- package/esm2022/lib/smart-form/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-form/api/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-form/api/model/models.mjs +10 -10
- package/{esm2020 → esm2022}/lib/smart-form/api/model/propertyMapping.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-form/api/model/selectionDefinition.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormInputMode.mjs +21 -21
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -44
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
- package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetHint.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-form/api/model/valueChangeMode.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-form/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-form/highlightMacthingString-pipe.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-form/projects.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-form/services/smartform.layout-definition.service.mjs +542 -502
- package/esm2022/lib/smart-form/services/smartform.service.mjs +640 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +14 -14
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
- package/esm2022/lib/smart-form/smartform.component.mjs +178 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartform.form-model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/smartform.model.mjs +37 -37
- package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +84 -0
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +735 -0
- package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
- package/{esm2020 → esm2022}/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -31
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/api/api.mjs +3 -3
- package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +451 -0
- package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
- package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +7 -7
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/models.mjs +13 -13
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -20
- package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +61 -0
- package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +182 -0
- package/{esm2020 → esm2022}/lib/smart-grid/models/model.mjs +28 -28
- package/{esm2020 → esm2022}/lib/smart-grid/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-grid/smart-grid.component.mjs +767 -767
- package/esm2022/lib/smart-grid/smart-grid.module.mjs +76 -0
- package/esm2022/lib/smart-grid/smart-grid.service.mjs +80 -0
- package/{esm2020 → esm2022}/lib/smart-icon/projects.mjs +6 -6
- package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +40 -0
- package/esm2022/lib/smart-icon/smart-icon.module.mjs +22 -0
- package/esm2022/lib/smart-icon/smart-icon.service.mjs +74 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/projects.mjs +7 -7
- package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +61 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.model.mjs +5 -5
- package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +63 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-navigation/projects.mjs +5 -5
- package/{esm2020 → esm2022}/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
- package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +18 -0
- package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +56 -0
- package/esm2022/lib/smart-ng-client.module.mjs +126 -0
- package/{esm2020 → esm2022}/lib/smart-ng-client.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-subject/projects.mjs +4 -4
- package/esm2022/lib/smart-subject/smart-subject.mjs +21 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.component.mjs +43 -43
- package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.service.mjs +14 -14
- package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
- package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/tabTile.model.mjs +1 -1
- package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/smart-table/components/loading/loading.component.mjs +15 -15
- package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +52 -0
- package/{esm2020 → esm2022}/lib/smart-table/projects.mjs +7 -7
- package/esm2022/lib/smart-table/smarttable.component.mjs +98 -0
- package/esm2022/lib/smart-table/smarttable.model.mjs +169 -0
- package/esm2022/lib/smart-table/smarttable.module.mjs +105 -0
- package/{esm2020 → esm2022}/lib/smart-table/smarttable.service.mjs +14 -14
- package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +23 -23
- package/esm2022/lib/smart-table/tables/table.mjs +520 -0
- package/{esm2020 → esm2022}/lib/smart-tree/projects.mjs +8 -8
- package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +288 -0
- package/esm2022/lib/smart-tree/smarttree.component.mjs +181 -0
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.model.mjs +6 -6
- package/esm2022/lib/smart-tree/smarttree.module.mjs +60 -0
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.node.model.mjs +5 -5
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.service.interface.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.service.mjs +47 -0
- package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1190 -0
- package/esm2022/lib/smart-tree/tree-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-tree/tree-api/encoder.mjs +19 -19
- package/esm2022/lib/smart-tree/tree-api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-tree/tree-api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/view-context/api/api/api.mjs +3 -3
- package/esm2022/lib/view-context/api/api/view.service.mjs +903 -0
- package/esm2022/lib/view-context/api/api.module.mjs +40 -0
- package/esm2022/lib/view-context/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/view-context/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/view-context/api/index.mjs +6 -6
- package/esm2022/lib/view-context/api/model/clipboardData.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/closeResult.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentConstraint.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentModelChange.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChange.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeKind.mjs +20 -20
- package/{esm2020 → esm2022}/lib/view-context/api/model/downloadedFile.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/iconPosition.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/imageResource.mjs +7 -7
- package/{esm2020 → esm2022}/lib/view-context/api/model/link.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageOption.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageOptionType.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageResult.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageTextType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageType.mjs +18 -18
- package/{esm2020 → esm2022}/lib/view-context/api/model/models.mjs +52 -52
- package/{esm2020 → esm2022}/lib/view-context/api/model/openPendingData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestType.mjs +23 -23
- package/{esm2020 → esm2022}/lib/view-context/api/model/smartLinkData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/statisticRecord.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/style.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiAction.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonDescriptor.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonType.mjs +26 -26
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionConstraint.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionFeedbackType.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionInputType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionRequest.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionTooltip.mjs +21 -21
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionUploadDescriptor.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uploadedFile.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/valueSet.mjs +1 -1
- package/esm2022/lib/view-context/api/model/view.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewApiError.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewConstraint.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContext.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextChange.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContextData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewEventHandler.mjs +17 -17
- package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewState.mjs +21 -21
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewType.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +19 -19
- package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/view-context/projects.mjs +16 -16
- package/{esm2020 → esm2022}/lib/view-context/property-definition-data.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +56 -56
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +48 -48
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +72 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +53 -53
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +126 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +52 -52
- package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +146 -0
- package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +180 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.model.mjs +6 -6
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.service.mjs +211 -211
- package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +54 -0
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -0
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -0
- package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +39 -0
- package/esm2022/lib/view-context/smart-view-context.model.mjs +2 -0
- package/esm2022/lib/view-context/smart-view-context.module.mjs +221 -0
- package/esm2022/lib/view-context/smart-view-context.service.mjs +685 -0
- package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -0
- package/esm2022/lib/view-context/utility/smart-object-utility.mjs +30 -0
- package/esm2022/lib/view-context/utility/smart-style-utility.mjs +68 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/api/api.mjs +4 -4
- package/esm2022/lib/view-context/value-api/api/value.service.mjs +138 -0
- package/esm2022/lib/view-context/value-api/api.module.mjs +40 -0
- package/esm2022/lib/view-context/value-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/value-api/index.mjs +7 -7
- package/esm2022/lib/view-context/value-api/model/genericValue.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/models.mjs +11 -11
- package/esm2022/lib/view-context/value-api/model/value.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
- package/esm2022/lib/view-context/value-api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/projects.mjs +25 -25
- package/{esm2020 → esm2022}/smartbit4all-ng-client.mjs +4 -4
- package/{fesm2020 → fesm2022}/smartbit4all-ng-client.mjs +15917 -15886
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -0
- package/{smartbit4all-ng-client.d.ts → index.d.ts} +5 -5
- package/lib/component-factory-service/component-factory-service.module.d.ts +6 -6
- package/lib/component-factory-service/component-factory-service.service.d.ts +13 -13
- package/lib/component-factory-service/projects.d.ts +2 -2
- package/lib/session/api/api/api.d.ts +3 -3
- package/lib/session/api/api/session.service.d.ts +107 -107
- package/lib/session/api/configuration.d.ts +104 -104
- package/lib/session/api/encoder.d.ts +11 -11
- package/lib/session/api/index.d.ts +2 -2
- package/lib/session/api/model/accountInfo.d.ts +22 -22
- package/lib/session/api/model/apiError.d.ts +15 -15
- package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
- package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
- package/lib/session/api/model/models.d.ts +8 -8
- package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
- package/lib/session/api/model/session.d.ts +32 -32
- package/lib/session/api/model/sessionInfoData.d.ts +26 -26
- package/lib/session/api/model/userActivityLog.d.ts +33 -33
- package/lib/session/api/param.d.ts +37 -37
- package/lib/session/api/variables.d.ts +8 -8
- package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
- package/lib/session/projects.d.ts +6 -6
- package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
- package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
- package/lib/session/smart-session-handler.service.d.ts +11 -11
- package/lib/session/smart-session.module.d.ts +12 -12
- package/lib/session/smart-session.service.d.ts +54 -54
- package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
- package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
- package/lib/shared/projects.d.ts +3 -3
- package/lib/shared/shared.module.d.ts +9 -9
- package/lib/shared/smart-tooltip.directive.d.ts +16 -16
- package/lib/shared/smarttable.date-pipe.d.ts +18 -18
- package/lib/smart-client/projects.d.ts +4 -4
- package/lib/smart-client/smart-authentication.service.d.ts +15 -15
- package/lib/smart-client/smart-component-api-client.d.ts +111 -111
- package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +18 -18
- package/lib/smart-client/smart.component.d.ts +30 -30
- package/lib/smart-client/smart.service.d.ts +30 -30
- package/lib/smart-component-layout/api/api/api.d.ts +3 -3
- package/lib/smart-component-layout/api/api/default.service.d.ts +33 -33
- package/lib/smart-component-layout/api/api.module.d.ts +11 -11
- package/lib/smart-component-layout/api/configuration.d.ts +104 -104
- package/lib/smart-component-layout/api/encoder.d.ts +11 -11
- package/lib/smart-component-layout/api/index.d.ts +6 -6
- package/lib/smart-component-layout/api/model/componentType.d.ts +16 -16
- package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -17
- package/lib/smart-component-layout/api/model/layoutDirection.d.ts +15 -15
- package/lib/smart-component-layout/api/model/models.d.ts +5 -5
- package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +26 -26
- package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +20 -20
- package/lib/smart-component-layout/api/param.d.ts +37 -37
- package/lib/smart-component-layout/api/variables.d.ts +8 -8
- package/lib/smart-component-layout/projects.d.ts +4 -4
- package/lib/smart-component-layout/smart-component-layout-utility.d.ts +14 -14
- package/lib/smart-component-layout/smart-component-layout.component.d.ts +58 -58
- package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -13
- package/lib/smart-dialog/projects.d.ts +4 -4
- package/lib/smart-dialog/smartdialog.component.d.ts +19 -19
- package/lib/smart-dialog/smartdialog.model.d.ts +67 -67
- package/lib/smart-dialog/smartdialog.module.d.ts +14 -14
- package/lib/smart-dialog/smartdialog.service.d.ts +23 -23
- package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -25
- package/lib/smart-expandable-section/expandable-section.model.d.ts +42 -42
- package/lib/smart-expandable-section/projects.d.ts +4 -4
- package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -15
- package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -6
- package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +15 -15
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +36 -36
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +18 -18
- package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +40 -40
- package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -21
- package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -25
- package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -18
- package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -24
- package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +30 -30
- package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +25 -25
- package/lib/smart-filter/api/filter/model/model.d.ts +15 -15
- package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -19
- package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -18
- package/lib/smart-filter/api/value/model/value.d.ts +29 -29
- package/lib/smart-filter/projects.d.ts +5 -5
- package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -8
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -31
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -18
- package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -15
- package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -16
- package/lib/smart-filter/smart-filter.model.d.ts +25 -25
- package/lib/smart-filter/smart-filter.module.d.ts +15 -15
- package/lib/smart-filter-editor/api/api/filter.service.d.ts +57 -57
- package/lib/smart-filter-editor/api/configuration.d.ts +104 -104
- package/lib/smart-filter-editor/api/encoder.d.ts +11 -11
- package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +15 -15
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +16 -16
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +36 -36
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +38 -38
- package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +18 -18
- package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +40 -40
- package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +17 -17
- package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +21 -21
- package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +25 -25
- package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +18 -18
- package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +24 -24
- package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +30 -30
- package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +28 -28
- package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +15 -15
- package/lib/smart-filter-editor/api/param.d.ts +37 -37
- package/lib/smart-filter-editor/api/variables.d.ts +8 -8
- package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +13 -13
- package/lib/smart-filter-editor/project.d.ts +7 -7
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +19 -19
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +17 -17
- package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +40 -40
- package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +4 -4
- package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +18 -18
- package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +35 -35
- package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +9 -9
- package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +21 -21
- package/lib/smart-form/api/api/api.d.ts +3 -3
- package/lib/smart-form/api/api/default.service.d.ts +33 -33
- package/lib/smart-form/api/api.module.d.ts +11 -11
- package/lib/smart-form/api/configuration.d.ts +104 -104
- package/lib/smart-form/api/encoder.d.ts +11 -11
- package/lib/smart-form/api/index.d.ts +6 -6
- package/lib/smart-form/api/model/models.d.ts +10 -10
- package/lib/smart-form/api/model/propertyMapping.d.ts +24 -24
- package/lib/smart-form/api/model/selectionDefinition.d.ts +41 -41
- package/lib/smart-form/api/model/smartFormInputMode.d.ts +20 -20
- package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +15 -15
- package/lib/smart-form/api/model/smartFormWidgetType.d.ts +43 -43
- package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -15
- package/lib/smart-form/api/model/smartMatrixModel.d.ts +29 -29
- package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +106 -106
- package/lib/smart-form/api/model/smartWidgetHint.d.ts +19 -19
- package/lib/smart-form/api/model/valueChangeMode.d.ts +18 -18
- package/lib/smart-form/api/param.d.ts +37 -37
- package/lib/smart-form/api/variables.d.ts +8 -8
- package/lib/smart-form/highlightMacthingString-pipe.d.ts +7 -7
- package/lib/smart-form/projects.d.ts +9 -9
- package/lib/smart-form/services/smartform.layout-definition.service.d.ts +45 -42
- package/lib/smart-form/services/smartform.service.d.ts +46 -46
- package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -8
- package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -22
- package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -7
- package/lib/smart-form/smartform.component.d.ts +40 -40
- package/lib/smart-form/smartform.form-model.d.ts +631 -631
- package/lib/smart-form/smartform.model.d.ts +120 -120
- package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -29
- package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +132 -132
- package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -20
- package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -9
- package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -3
- package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +161 -161
- package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -11
- package/lib/smart-grid/api/grid-api/configuration.d.ts +104 -104
- package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -11
- package/lib/smart-grid/api/grid-api/index.d.ts +6 -6
- package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +15 -15
- package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +33 -33
- package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +40 -40
- package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +34 -34
- package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -26
- package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +39 -39
- package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +18 -18
- package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +16 -16
- package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +15 -15
- package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +22 -22
- package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +20 -20
- package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -21
- package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +37 -37
- package/lib/smart-grid/api/grid-api/model/models.d.ts +13 -13
- package/lib/smart-grid/api/grid-api/param.d.ts +37 -37
- package/lib/smart-grid/api/grid-api/variables.d.ts +8 -8
- package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -10
- package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +23 -23
- package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +46 -46
- package/lib/smart-grid/models/model.d.ts +71 -71
- package/lib/smart-grid/projects.d.ts +5 -5
- package/lib/smart-grid/smart-grid.component.d.ts +103 -103
- package/lib/smart-grid/smart-grid.module.d.ts +22 -22
- package/lib/smart-grid/smart-grid.service.d.ts +23 -23
- package/lib/smart-icon/projects.d.ts +3 -3
- package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +16 -16
- package/lib/smart-icon/smart-icon.module.d.ts +10 -10
- package/lib/smart-icon/smart-icon.service.d.ts +28 -28
- package/lib/smart-navbar/projects.d.ts +4 -4
- package/lib/smart-navbar/smart-navbar.component.d.ts +20 -20
- package/lib/smart-navbar/smart-navbar.model.d.ts +48 -48
- package/lib/smart-navbar/smart-navbar.module.d.ts +18 -18
- package/lib/smart-navbar/smart-navbar.service.d.ts +6 -6
- package/lib/smart-navigation/projects.d.ts +2 -2
- package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -11
- package/lib/smart-navigation/smart-navigation.module.d.ts +6 -6
- package/lib/smart-navigation/smart-navigation.service.d.ts +18 -18
- package/lib/smart-ng-client.module.d.ts +24 -24
- package/lib/smart-ng-client.service.d.ts +10 -10
- package/lib/smart-subject/projects.d.ts +1 -1
- package/lib/smart-subject/smart-subject.d.ts +6 -6
- package/lib/smart-tab-group/projects.d.ts +5 -5
- package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -21
- package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -13
- package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -6
- package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -14
- package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -29
- package/lib/smart-tab-group/tabTile.model.d.ts +8 -8
- package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +19 -19
- package/lib/smart-table/components/loading/loading.component.d.ts +8 -8
- package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +10 -10
- package/lib/smart-table/projects.d.ts +4 -4
- package/lib/smart-table/smarttable.component.d.ts +34 -34
- package/lib/smart-table/smarttable.model.d.ts +198 -198
- package/lib/smart-table/smarttable.module.d.ts +28 -28
- package/lib/smart-table/smarttable.service.d.ts +6 -6
- package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -8
- package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -8
- package/lib/smart-table/tables/table.d.ts +85 -85
- package/lib/smart-tree/projects.d.ts +5 -5
- package/lib/smart-tree/smarttree-generic.service.d.ts +49 -49
- package/lib/smart-tree/smarttree.component.d.ts +42 -42
- package/lib/smart-tree/smarttree.model.d.ts +41 -41
- package/lib/smart-tree/smarttree.module.d.ts +15 -15
- package/lib/smart-tree/smarttree.node.model.d.ts +13 -13
- package/lib/smart-tree/smarttree.service.d.ts +24 -24
- package/lib/smart-tree/smarttree.service.interface.d.ts +43 -43
- package/lib/smart-tree/tree-api/api/tree.service.d.ts +336 -336
- package/lib/smart-tree/tree-api/configuration.d.ts +104 -104
- package/lib/smart-tree/tree-api/encoder.d.ts +11 -11
- package/lib/smart-tree/tree-api/param.d.ts +37 -37
- package/lib/smart-tree/tree-api/variables.d.ts +8 -8
- package/lib/view-context/api/api/api.d.ts +3 -3
- package/lib/view-context/api/api/view.service.d.ts +331 -331
- package/lib/view-context/api/api.module.d.ts +11 -11
- package/lib/view-context/api/configuration.d.ts +104 -104
- package/lib/view-context/api/encoder.d.ts +11 -11
- package/lib/view-context/api/index.d.ts +6 -6
- package/lib/view-context/api/model/clipboardData.d.ts +20 -20
- package/lib/view-context/api/model/closeResult.d.ts +16 -16
- package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
- package/lib/view-context/api/model/componentModel.d.ts +42 -42
- package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
- package/lib/view-context/api/model/dataChange.d.ts +25 -25
- package/lib/view-context/api/model/dataChangeEvent.d.ts +31 -31
- package/lib/view-context/api/model/dataChangeKind.d.ts +19 -19
- package/lib/view-context/api/model/downloadedFile.d.ts +19 -19
- package/lib/view-context/api/model/iconPosition.d.ts +18 -18
- package/lib/view-context/api/model/imageResource.d.ts +26 -26
- package/lib/view-context/api/model/link.d.ts +35 -35
- package/lib/view-context/api/model/messageData.d.ts +29 -29
- package/lib/view-context/api/model/messageOption.d.ts +18 -18
- package/lib/view-context/api/model/messageOptionType.d.ts +16 -16
- package/lib/view-context/api/model/messageResult.d.ts +16 -16
- package/lib/view-context/api/model/messageTextType.d.ts +15 -15
- package/lib/view-context/api/model/messageType.d.ts +17 -17
- package/lib/view-context/api/model/models.d.ts +51 -51
- package/lib/view-context/api/model/openPendingData.d.ts +29 -29
- package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +40 -40
- package/lib/view-context/api/model/serverRequestTrack.d.ts +60 -60
- package/lib/view-context/api/model/serverRequestType.d.ts +22 -22
- package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
- package/lib/view-context/api/model/statisticRecord.d.ts +36 -36
- package/lib/view-context/api/model/style.d.ts +21 -21
- package/lib/view-context/api/model/uiAction.d.ts +48 -48
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
- package/lib/view-context/api/model/uiActionButtonType.d.ts +25 -25
- package/lib/view-context/api/model/uiActionConstraint.d.ts +22 -22
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +36 -36
- package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
- package/lib/view-context/api/model/uiActionFeedbackType.d.ts +18 -18
- package/lib/view-context/api/model/uiActionInputType.d.ts +19 -19
- package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
- package/lib/view-context/api/model/uiActionTooltip.d.ts +25 -25
- package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +23 -23
- package/lib/view-context/api/model/uploadedFile.d.ts +19 -19
- package/lib/view-context/api/model/valueSet.d.ts +20 -20
- package/lib/view-context/api/model/view.d.ts +80 -80
- package/lib/view-context/api/model/viewApiError.d.ts +18 -18
- package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
- package/lib/view-context/api/model/viewContext.d.ts +30 -30
- package/lib/view-context/api/model/viewContextChange.d.ts +24 -24
- package/lib/view-context/api/model/viewContextData.d.ts +25 -25
- package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
- package/lib/view-context/api/model/viewData.d.ts +25 -25
- package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
- package/lib/view-context/api/model/viewPlaceholder.d.ts +21 -21
- package/lib/view-context/api/model/viewState.d.ts +20 -20
- package/lib/view-context/api/model/viewStateUpdate.d.ts +22 -22
- package/lib/view-context/api/model/viewType.d.ts +16 -16
- package/lib/view-context/api/param.d.ts +37 -37
- package/lib/view-context/api/variables.d.ts +8 -8
- package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +9 -9
- package/lib/view-context/message-dialog/message-dialog.component.d.ts +18 -18
- package/lib/view-context/projects.d.ts +13 -13
- package/lib/view-context/property-definition-data.d.ts +5 -5
- package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +30 -30
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +22 -22
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +36 -36
- package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +23 -23
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +43 -43
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +39 -39
- package/lib/view-context/smart-view-context-dialog.service.d.ts +16 -16
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +19 -19
- package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
- package/lib/view-context/smart-view-context.model.d.ts +31 -31
- package/lib/view-context/smart-view-context.module.d.ts +46 -47
- package/lib/view-context/smart-view-context.service.d.ts +119 -119
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
- package/lib/view-context/utility/smart-object-utility.d.ts +4 -4
- package/lib/view-context/utility/smart-style-utility.d.ts +12 -12
- package/lib/view-context/value-api/api/api.d.ts +3 -3
- package/lib/view-context/value-api/api/value.service.d.ts +35 -35
- package/lib/view-context/value-api/api.module.d.ts +11 -11
- package/lib/view-context/value-api/configuration.d.ts +104 -104
- package/lib/view-context/value-api/encoder.d.ts +11 -11
- package/lib/view-context/value-api/index.d.ts +6 -6
- package/lib/view-context/value-api/model/genericValue.d.ts +33 -33
- package/lib/view-context/value-api/model/models.d.ts +10 -10
- package/lib/view-context/value-api/model/value.d.ts +29 -29
- package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
- package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
- package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +53 -53
- package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +21 -21
- package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +22 -22
- package/lib/view-context/value-api/model/valueSetExpression.d.ts +18 -18
- package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
- package/lib/view-context/value-api/model/valueSetOperation.d.ts +17 -17
- package/lib/view-context/value-api/param.d.ts +37 -37
- package/lib/view-context/value-api/variables.d.ts +8 -8
- package/package.json +14 -20
- package/projects.d.ts +22 -22
- package/smartbit4all-ng-client-4.0.0.tgz +0 -0
- package/esm2020/lib/component-factory-service/component-factory-service.module.mjs +0 -17
- package/esm2020/lib/session/api/api/session.service.mjs +0 -306
- package/esm2020/lib/session/api/configuration.mjs +0 -91
- package/esm2020/lib/session/api/model/sessionInfoData.mjs +0 -2
- package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
- package/esm2020/lib/session/smart-error-catching.interceptor.mjs +0 -71
- package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +0 -46
- package/esm2020/lib/session/smart-session.module.mjs +0 -58
- package/esm2020/lib/session/smart-session.service.mjs +0 -225
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +0 -58
- package/esm2020/lib/shared/shared.module.mjs +0 -19
- package/esm2020/lib/shared/smart-tooltip.directive.mjs +0 -58
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +0 -717
- package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -53
- package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +0 -133
- package/esm2020/lib/smart-component-layout/api/api.module.mjs +0 -40
- package/esm2020/lib/smart-component-layout/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
- package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
- package/esm2020/lib/smart-component-layout/api/param.mjs +0 -2
- package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -94
- package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +0 -259
- package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +0 -43
- package/esm2020/lib/smart-dialog/smartdialog.component.mjs +0 -54
- package/esm2020/lib/smart-dialog/smartdialog.module.mjs +0 -48
- package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +0 -88
- package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -51
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
- package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -165
- package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
- package/esm2020/lib/smart-filter/smart-filter.module.mjs +0 -33
- package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
- package/esm2020/lib/smart-filter-editor/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/param.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -73
- package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -235
- package/esm2020/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -71
- package/esm2020/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -47
- package/esm2020/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
- package/esm2020/lib/smart-form/api/api/default.service.mjs +0 -133
- package/esm2020/lib/smart-form/api/api.module.mjs +0 -40
- package/esm2020/lib/smart-form/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
- package/esm2020/lib/smart-form/services/smartform.service.mjs +0 -640
- package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -78
- package/esm2020/lib/smart-form/smartform.component.mjs +0 -178
- package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -84
- package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -736
- package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -59
- package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -451
- package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
- package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
- package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -61
- package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -182
- package/esm2020/lib/smart-grid/smart-grid.module.mjs +0 -78
- package/esm2020/lib/smart-grid/smart-grid.service.mjs +0 -80
- package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -40
- package/esm2020/lib/smart-icon/smart-icon.module.mjs +0 -22
- package/esm2020/lib/smart-icon/smart-icon.service.mjs +0 -74
- package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +0 -61
- package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +0 -65
- package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +0 -18
- package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +0 -56
- package/esm2020/lib/smart-ng-client.module.mjs +0 -128
- package/esm2020/lib/smart-subject/smart-subject.mjs +0 -21
- package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +0 -25
- package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +0 -31
- package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +0 -66
- package/esm2020/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
- package/esm2020/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
- package/esm2020/lib/smart-table/smarttable.component.mjs +0 -98
- package/esm2020/lib/smart-table/smarttable.model.mjs +0 -169
- package/esm2020/lib/smart-table/smarttable.module.mjs +0 -107
- package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +0 -39
- package/esm2020/lib/smart-table/tables/table.mjs +0 -520
- package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +0 -288
- package/esm2020/lib/smart-tree/smarttree.component.mjs +0 -181
- package/esm2020/lib/smart-tree/smarttree.module.mjs +0 -62
- package/esm2020/lib/smart-tree/smarttree.service.mjs +0 -47
- package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
- package/esm2020/lib/smart-tree/tree-api/configuration.mjs +0 -91
- package/esm2020/lib/smart-tree/tree-api/param.mjs +0 -2
- package/esm2020/lib/view-context/api/api/view.service.mjs +0 -903
- package/esm2020/lib/view-context/api/api.module.mjs +0 -40
- package/esm2020/lib/view-context/api/configuration.mjs +0 -91
- package/esm2020/lib/view-context/api/model/clipboardData.mjs +0 -13
- package/esm2020/lib/view-context/api/model/view.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewContext.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewContextData.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
- package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +0 -66
- package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -72
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -126
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -146
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -180
- package/esm2020/lib/view-context/smart-view-context-dialog.service.mjs +0 -54
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -29
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -69
- package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +0 -39
- package/esm2020/lib/view-context/smart-view-context.model.mjs +0 -2
- package/esm2020/lib/view-context/smart-view-context.module.mjs +0 -222
- package/esm2020/lib/view-context/smart-view-context.service.mjs +0 -685
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -33
- package/esm2020/lib/view-context/utility/smart-object-utility.mjs +0 -30
- package/esm2020/lib/view-context/utility/smart-style-utility.mjs +0 -68
- package/esm2020/lib/view-context/value-api/api/value.service.mjs +0 -138
- package/esm2020/lib/view-context/value-api/api.module.mjs +0 -40
- package/esm2020/lib/view-context/value-api/configuration.mjs +0 -91
- package/esm2020/lib/view-context/value-api/model/genericValue.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/value.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
- package/esm2020/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
- package/esm2020/lib/view-context/value-api/param.mjs +0 -2
- package/fesm2015/smartbit4all-ng-client.mjs +0 -16397
- package/fesm2015/smartbit4all-ng-client.mjs.map +0 -1
- package/fesm2020/smartbit4all-ng-client.mjs.map +0 -1
- package/smartbit4all-ng-client-3.3.205.tgz +0 -0
- package/src/lib/component-factory-service/README.md +0 -99
- package/src/lib/session/api/README.md +0 -226
- package/src/lib/smart-component-layout/README.md +0 -31
- package/src/lib/smart-component-layout/api/README.md +0 -226
- package/src/lib/smart-dialog/README.md +0 -197
- package/src/lib/smart-expandable-section/README.md +0 -249
- package/src/lib/smart-filter/README.md +0 -101
- package/src/lib/smart-filter-editor/api/README.md +0 -226
- package/src/lib/smart-form/README.md +0 -1178
- package/src/lib/smart-form/api/README.md +0 -226
- package/src/lib/smart-grid/README.md +0 -24
- package/src/lib/smart-grid/api/grid-api/README.md +0 -226
- package/src/lib/smart-icon/README.md +0 -116
- package/src/lib/smart-navbar/README.md +0 -119
- package/src/lib/smart-navigation/README.md +0 -141
- package/src/lib/smart-tab-group/README.md +0 -155
- package/src/lib/smart-table/README.md +0 -667
- package/src/lib/smart-tree/tree-api/README.md +0 -226
- package/src/lib/view-context/api/README.md +0 -226
- package/src/lib/view-context/value-api/README.md +0 -226
|
@@ -1,717 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, } from '@angular/core';
|
|
2
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
-
import { SmarttreeGenericService } from '../smart-tree/projects';
|
|
4
|
-
import { DataChangeKind, SmartViewContextService, UiActionDescriptorService, UiActionService, } from '../view-context/projects';
|
|
5
|
-
import { SmartSubject } from '../smart-subject/projects';
|
|
6
|
-
import { SmartGridComponent } from '../smart-grid/projects';
|
|
7
|
-
import { ValueChangeMode, } from '../smart-form/projects';
|
|
8
|
-
import { SmartComponentLayoutUtility, } from '../smart-component-layout/projects';
|
|
9
|
-
import { SmartFilterEditorService } from '../smart-filter-editor/project';
|
|
10
|
-
import { SmartStyleUtility } from '../view-context/utility/smart-style-utility';
|
|
11
|
-
export class SmartComponentApiClient {
|
|
12
|
-
constructor(inject, auth, pageName, _componentName, element, renderer) {
|
|
13
|
-
this.inject = inject;
|
|
14
|
-
this.auth = auth;
|
|
15
|
-
this.pageName = pageName;
|
|
16
|
-
this._componentName = _componentName;
|
|
17
|
-
this.element = element;
|
|
18
|
-
this.renderer = renderer;
|
|
19
|
-
this._destroy$ = new Subject();
|
|
20
|
-
this.detectChange = new SmartSubject(this._destroy$);
|
|
21
|
-
this.componentModelLoaded = false;
|
|
22
|
-
this.uiActionModels = [];
|
|
23
|
-
this.dataChanged = new SmartSubject(this._destroy$);
|
|
24
|
-
// Contained Widgets
|
|
25
|
-
this.widgets = new Map();
|
|
26
|
-
this.formWidgets = new Map();
|
|
27
|
-
this.useQueryLists = false;
|
|
28
|
-
this.sendModelOnWidgetAction = false;
|
|
29
|
-
this.dataChangeKeys = [];
|
|
30
|
-
this.dataChangeActionHandlers = new Map();
|
|
31
|
-
// check and calculate pageName
|
|
32
|
-
if (!this.pageName && !this._componentName) {
|
|
33
|
-
throw new Error('pageName or componentName must be specified!');
|
|
34
|
-
}
|
|
35
|
-
this.viewContext = inject.get(SmartViewContextService);
|
|
36
|
-
if (this._componentName) {
|
|
37
|
-
let pageNameForComponent = this.viewContext.getPageNameOfComponent(this._componentName);
|
|
38
|
-
if (!this.pageName) {
|
|
39
|
-
this.pageName = pageNameForComponent;
|
|
40
|
-
}
|
|
41
|
-
else if (this.pageName !== pageNameForComponent) {
|
|
42
|
-
throw new Error(`pageName (${pageName}) and componentName (${_componentName}) doesn't match!`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// from this point we have this.pageName
|
|
46
|
-
this.detectChange.subscribe((change) => {
|
|
47
|
-
this.handleChanges(change);
|
|
48
|
-
});
|
|
49
|
-
this.uiActionService = inject.get(UiActionService);
|
|
50
|
-
this.uiActionDescriptorService = inject.get(UiActionDescriptorService);
|
|
51
|
-
}
|
|
52
|
-
get uuid() {
|
|
53
|
-
return this._uuid;
|
|
54
|
-
}
|
|
55
|
-
set uuid(uuid) {
|
|
56
|
-
if (this._uuid === uuid) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
let firstUuid = true;
|
|
60
|
-
if (this.uuid) {
|
|
61
|
-
this.viewContext.unfollow(this.uuid);
|
|
62
|
-
firstUuid = false;
|
|
63
|
-
}
|
|
64
|
-
this._uuid = uuid;
|
|
65
|
-
this.getWidgets().forEach((ref, key) => {
|
|
66
|
-
if (ref instanceof SmartGridComponent) {
|
|
67
|
-
ref.uuid = this.componentModelLoaded ? uuid : undefined;
|
|
68
|
-
}
|
|
69
|
-
else if (ref instanceof SmartFilterEditorService) {
|
|
70
|
-
ref.config.uuid = this.componentModelLoaded ? uuid : undefined;
|
|
71
|
-
}
|
|
72
|
-
else if (!ref && !firstUuid) {
|
|
73
|
-
console.error(`Provided reference for ${key} is undefined on uuid change.`);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
if (!this.uuidOfPageHasBeenChangedSubscription) {
|
|
77
|
-
this.uuidOfPageHasBeenChangedSubscription = this.viewContext.uuidOfPageHasBeenChanged
|
|
78
|
-
.pipe(takeUntil(this._destroy$))
|
|
79
|
-
.subscribe((pageName) => {
|
|
80
|
-
if (pageName === this.pageName) {
|
|
81
|
-
this.run();
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
if (uuid) {
|
|
86
|
-
this.viewContext.follow(this._uuid, this.detectChange);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
get model() {
|
|
90
|
-
return this._model;
|
|
91
|
-
}
|
|
92
|
-
set model(model) {
|
|
93
|
-
this._model = model;
|
|
94
|
-
this.initComponentByModel();
|
|
95
|
-
}
|
|
96
|
-
get data() {
|
|
97
|
-
return this._data;
|
|
98
|
-
}
|
|
99
|
-
set data(model) {
|
|
100
|
-
this._data = model;
|
|
101
|
-
this.dataChanged.next();
|
|
102
|
-
}
|
|
103
|
-
get smartTreeService() {
|
|
104
|
-
return this._smartTreeService;
|
|
105
|
-
}
|
|
106
|
-
set smartTreeService(smartTreeService) {
|
|
107
|
-
if (this._smartTreeService !== undefined) {
|
|
108
|
-
throw Error('The default tree has already set up!');
|
|
109
|
-
}
|
|
110
|
-
this._smartTreeService = smartTreeService;
|
|
111
|
-
}
|
|
112
|
-
_ngOnInit() {
|
|
113
|
-
this.run();
|
|
114
|
-
}
|
|
115
|
-
_ngOnDestroy() {
|
|
116
|
-
this.viewContext.unfollow(this.uuid);
|
|
117
|
-
this.widgets.clear();
|
|
118
|
-
this._destroy$.next();
|
|
119
|
-
this._destroy$.complete();
|
|
120
|
-
}
|
|
121
|
-
_ngAfterViewInit() {
|
|
122
|
-
this.changeDetector = this.inject.get(ChangeDetectorRef);
|
|
123
|
-
if (this.useQueryLists) {
|
|
124
|
-
if (!this.getSmartComponentLayoutsQL()) {
|
|
125
|
-
console.warn('SmartComponentLayoutsQL not available!');
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this.handleQueryList(this.getSmartComponentLayoutsQL(), (comp) => {
|
|
129
|
-
if (comp.smartComponentLayout) {
|
|
130
|
-
this.initActions();
|
|
131
|
-
}
|
|
132
|
-
if (this.uuid && this.uuid !== comp.uuid)
|
|
133
|
-
comp.uuid = this.uuid;
|
|
134
|
-
SmartComponentLayoutUtility.getGrids(comp).forEach((grid) => this.setupGridServices(grid));
|
|
135
|
-
});
|
|
136
|
-
// for handling embedded forms
|
|
137
|
-
this.handleQueryList(this.getSmartComponentLayoutsQL(), (form) => {
|
|
138
|
-
this.handleDataChangeSubscriptions();
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
if (!this.getSmartFormsQL()) {
|
|
142
|
-
console.warn('getSmartFormsQL not available!');
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.handleQueryList(this.getSmartFormsQL(), (form) => {
|
|
146
|
-
this.handleDataChangeSubscriptions();
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
if (!this.getSmartGridsQL()) {
|
|
150
|
-
console.warn('SmartGridsQL not available!');
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
this.handleQueryList(this.getSmartGridsQL(), (grid) => {
|
|
154
|
-
if (grid) {
|
|
155
|
-
if (grid.smartGrid) {
|
|
156
|
-
this.setupGridServices(grid);
|
|
157
|
-
grid.setupToolbar();
|
|
158
|
-
if (grid.toolbar) {
|
|
159
|
-
this.initActions();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (this.uuid && this.uuid !== grid.uuid)
|
|
163
|
-
grid.uuid = this.uuid;
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
setupGridServices(grid) {
|
|
170
|
-
if (grid.smartGrid) {
|
|
171
|
-
if (!grid.smartGrid.uiActionService) {
|
|
172
|
-
grid.smartGrid.uiActionService = this.uiActionService;
|
|
173
|
-
}
|
|
174
|
-
if (!grid.smartGrid.uiActionDescriptorService) {
|
|
175
|
-
grid.smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
|
|
176
|
-
}
|
|
177
|
-
if (!grid.smartGrid.serviceToUse) {
|
|
178
|
-
grid.smartGrid.serviceToUse = this;
|
|
179
|
-
}
|
|
180
|
-
if (!grid.smartGrid.viewContextService) {
|
|
181
|
-
grid.smartGrid.viewContextService = this.viewContext;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
handleQueryListSimple(ql, handler) {
|
|
186
|
-
handler();
|
|
187
|
-
ql.changes.pipe(takeUntil(this._destroy$)).subscribe(() => handler());
|
|
188
|
-
}
|
|
189
|
-
handleQueryList(ql, handler) {
|
|
190
|
-
ql.forEach((el) => handler(el));
|
|
191
|
-
ql.changes
|
|
192
|
-
.pipe(takeUntil(this._destroy$))
|
|
193
|
-
.subscribe((list) => list.forEach((el) => handler(el)));
|
|
194
|
-
}
|
|
195
|
-
getWidgets() {
|
|
196
|
-
if (this.useQueryLists) {
|
|
197
|
-
let widgets = new Map();
|
|
198
|
-
this.getAllSmartGridComponents()
|
|
199
|
-
.filter((grid) => (grid?.smartGrid?.gridIdentifier ? true : false))
|
|
200
|
-
.forEach((grid) => widgets.set(grid.smartGrid.gridIdentifier, grid));
|
|
201
|
-
this.getAllSmartTreeComponents()
|
|
202
|
-
.filter((tree) => (tree?.smartTreeModel?.identifier ? true : false))
|
|
203
|
-
.forEach((tree) => widgets.set(tree.smartTreeModel.identifier, tree));
|
|
204
|
-
this.getAllSmartFilterEditorServices()
|
|
205
|
-
.filter((filter) => (filter.config.identifier ? true : false))
|
|
206
|
-
.forEach((filter) => widgets.set(filter.config.identifier, filter));
|
|
207
|
-
return widgets;
|
|
208
|
-
}
|
|
209
|
-
return this.widgets;
|
|
210
|
-
}
|
|
211
|
-
initComponentByModel() {
|
|
212
|
-
SmartStyleUtility.applyStyle(this.model?.style, this.element, this.renderer);
|
|
213
|
-
SmartStyleUtility.applyStyle(this.model?.parentStyle, this.element, this.renderer, true);
|
|
214
|
-
this.initData();
|
|
215
|
-
if (this.useQueryLists) {
|
|
216
|
-
this.getAllSmartFormComponents()?.forEach((form) => {
|
|
217
|
-
if (form.smartForm) {
|
|
218
|
-
form.smartForm.componentModel = this.model;
|
|
219
|
-
// uses data, valueSets, constraints
|
|
220
|
-
form.constructForm();
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
this.changeDetector?.detectChanges();
|
|
225
|
-
this.initActions();
|
|
226
|
-
// TODO: layout, widgets
|
|
227
|
-
}
|
|
228
|
-
getAllSmartFormComponents() {
|
|
229
|
-
let forms = this.getSmartFormsQL()?.toArray() ?? [];
|
|
230
|
-
this.getSmartComponentLayoutsQL()?.forEach((comp) => {
|
|
231
|
-
forms.push(...SmartComponentLayoutUtility.getForms(comp));
|
|
232
|
-
});
|
|
233
|
-
return forms;
|
|
234
|
-
}
|
|
235
|
-
getAllSmartGridComponents() {
|
|
236
|
-
let grids = this.getSmartGridsQL()?.toArray() ?? [];
|
|
237
|
-
this.getSmartComponentLayoutsQL()?.forEach((comp) => {
|
|
238
|
-
grids.push(...SmartComponentLayoutUtility.getGrids(comp));
|
|
239
|
-
});
|
|
240
|
-
return grids;
|
|
241
|
-
}
|
|
242
|
-
getAllSmartTreeComponents() {
|
|
243
|
-
let trees = this.getSmartTreesQL()?.toArray() ?? [];
|
|
244
|
-
this.getSmartComponentLayoutsQL()?.forEach((comp) => {
|
|
245
|
-
trees.push(...SmartComponentLayoutUtility.getTrees(comp));
|
|
246
|
-
});
|
|
247
|
-
return trees;
|
|
248
|
-
}
|
|
249
|
-
getAllSmartFilterEditorServices() {
|
|
250
|
-
let filters = this.getSmartFilterServicesQL()?.toArray() ?? [];
|
|
251
|
-
return filters;
|
|
252
|
-
}
|
|
253
|
-
getAllSmartUiActionToolbars() {
|
|
254
|
-
let toolbars = this.getSmartUiActionToolbarsQL()?.toArray() ?? [];
|
|
255
|
-
this.getAllSmartGridComponents()?.forEach((grid) => {
|
|
256
|
-
if (grid.toolbar) {
|
|
257
|
-
toolbars.push(grid.toolbar);
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
this.getSmartComponentLayoutsQL()?.forEach((comp) => {
|
|
261
|
-
toolbars.push(...SmartComponentLayoutUtility.getToolbars(comp));
|
|
262
|
-
});
|
|
263
|
-
this.getAllSmartFormComponents()
|
|
264
|
-
?.flatMap((form) => form.getToolbars())
|
|
265
|
-
.filter((toolbar) => toolbar !== undefined || toolbar !== null)
|
|
266
|
-
.forEach((toolbar) => toolbars.push(toolbar));
|
|
267
|
-
return toolbars;
|
|
268
|
-
}
|
|
269
|
-
initData() {
|
|
270
|
-
if (this.model?.data) {
|
|
271
|
-
this.data = this.model?.data;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
initActions() {
|
|
275
|
-
if (this.model?.actions) {
|
|
276
|
-
let uiActionModels = this.model?.actions.map((uiAction) => {
|
|
277
|
-
return {
|
|
278
|
-
serviceToUse: this,
|
|
279
|
-
uiAction,
|
|
280
|
-
};
|
|
281
|
-
});
|
|
282
|
-
const allToolbars = this.getAllSmartUiActionToolbars();
|
|
283
|
-
let toolbars = allToolbars.filter((toolbar) => toolbar.id);
|
|
284
|
-
let toolbarsWithoutId = this.getAllSmartUiActionToolbars().filter((toolbar) => toolbar.id === undefined || toolbar.id === null);
|
|
285
|
-
let toolbarModels = new Map();
|
|
286
|
-
toolbars.forEach((toolbar) => {
|
|
287
|
-
toolbarModels.set(toolbar.id, []);
|
|
288
|
-
});
|
|
289
|
-
let globalUiActionModels = [];
|
|
290
|
-
uiActionModels.forEach((action) => {
|
|
291
|
-
let actionModel = globalUiActionModels;
|
|
292
|
-
let toolbarId = action.uiAction.toolbar;
|
|
293
|
-
if (toolbarId && toolbarModels.has(toolbarId)) {
|
|
294
|
-
actionModel = toolbarModels.get(toolbarId);
|
|
295
|
-
}
|
|
296
|
-
if (!actionModel) {
|
|
297
|
-
actionModel = globalUiActionModels;
|
|
298
|
-
}
|
|
299
|
-
actionModel.push(action);
|
|
300
|
-
});
|
|
301
|
-
this.uiActionModels = globalUiActionModels;
|
|
302
|
-
this.setupAllToolbars(toolbars, toolbarsWithoutId, toolbarModels)
|
|
303
|
-
.then(() => {
|
|
304
|
-
this.changeDetector?.detectChanges();
|
|
305
|
-
})
|
|
306
|
-
.catch((error) => {
|
|
307
|
-
console.error('Error during setup:', error);
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
async setupAllToolbars(toolbars, toolbarsWithoutId, toolbarModels) {
|
|
312
|
-
const setupPromises = [];
|
|
313
|
-
toolbars.forEach((toolbar) => {
|
|
314
|
-
toolbar.uiActionModels = toolbarModels.get(toolbar.id);
|
|
315
|
-
setupPromises.push(toolbar.setUp());
|
|
316
|
-
});
|
|
317
|
-
toolbarsWithoutId.forEach((toolbar) => {
|
|
318
|
-
setupPromises.push(toolbar.setUp());
|
|
319
|
-
});
|
|
320
|
-
await Promise.all(setupPromises);
|
|
321
|
-
}
|
|
322
|
-
run() {
|
|
323
|
-
if (this.auth.bffApisHaveBeenSetUp) {
|
|
324
|
-
this.load();
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
this.auth.headersUpdated.subscribe(() => {
|
|
328
|
-
this.load();
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
async load() {
|
|
333
|
-
this.componentModelLoaded = false;
|
|
334
|
-
const uuid = this.viewContext.getUuidOfPage(this.pageName);
|
|
335
|
-
// this.model = await this.viewContext.load(this.uuid);
|
|
336
|
-
const change = await this.viewContext.load2(uuid);
|
|
337
|
-
this.componentModelLoaded = true;
|
|
338
|
-
this.uuid = uuid;
|
|
339
|
-
this.model = change.result;
|
|
340
|
-
if (this.model.widgets) {
|
|
341
|
-
// grids are already loaded in setUuid()
|
|
342
|
-
this.handleChangeWidgets(this.model.widgets, true);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
async executeUiAction(uiAction, options) {
|
|
346
|
-
this.uiActionService.uiActionModel = {
|
|
347
|
-
serviceToUse: this,
|
|
348
|
-
uiAction: uiAction,
|
|
349
|
-
};
|
|
350
|
-
await this.uiActionService.execute(uiAction, options);
|
|
351
|
-
}
|
|
352
|
-
addDataChangeActionHandler(key) {
|
|
353
|
-
if (!this.dataChangeKeys.includes(key)) {
|
|
354
|
-
this.dataChangeKeys.push(key);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
removeDataChangeActionHandler(key) {
|
|
358
|
-
let idx = this.dataChangeKeys.indexOf(key);
|
|
359
|
-
if (idx >= 0) {
|
|
360
|
-
this.dataChangeKeys.splice(idx, 1);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
dataChangeActionHandler(event) {
|
|
364
|
-
if (this.dataChangeKeys.includes(event.key)) {
|
|
365
|
-
this.executeUiAction({
|
|
366
|
-
code: event.key,
|
|
367
|
-
model: true,
|
|
368
|
-
params: {
|
|
369
|
-
item: event.value,
|
|
370
|
-
},
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
handleDataChangeSubscriptions() {
|
|
375
|
-
if (this.useQueryLists) {
|
|
376
|
-
let forms = this.getAllSmartFormComponents();
|
|
377
|
-
// add elements to dataChangeKeys
|
|
378
|
-
forms.forEach((form) => {
|
|
379
|
-
form.smartForm?.widgets.forEach((widget) => {
|
|
380
|
-
if (widget.key) {
|
|
381
|
-
if (widget.valueChangeMode === ValueChangeMode.IMMEDIATE_ACTION) {
|
|
382
|
-
this.addDataChangeActionHandler(widget.key);
|
|
383
|
-
}
|
|
384
|
-
else {
|
|
385
|
-
this.removeDataChangeActionHandler(widget.key);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
// subscribe to new forms
|
|
391
|
-
forms.forEach((component) => {
|
|
392
|
-
if (!this.dataChangeActionHandlers.has(component)) {
|
|
393
|
-
let subs = component.sophisticatedValueChange
|
|
394
|
-
.pipe(takeUntil(this._destroy$))
|
|
395
|
-
.subscribe((event) => this.dataChangeActionHandler(event));
|
|
396
|
-
this.dataChangeActionHandlers.set(component, subs);
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
// unsubscribe from removed forms
|
|
400
|
-
this.dataChangeActionHandlers.forEach((subs, form) => {
|
|
401
|
-
if (!forms.find((c) => c === form)) {
|
|
402
|
-
subs.unsubscribe();
|
|
403
|
-
this.dataChangeActionHandlers.delete(form);
|
|
404
|
-
}
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
getInvalidFields() {
|
|
409
|
-
let aggregatedInvalidFields = {
|
|
410
|
-
invalidFieldKeys: [],
|
|
411
|
-
invalidFieldNames: [],
|
|
412
|
-
};
|
|
413
|
-
if (this.useQueryLists) {
|
|
414
|
-
this.getAllSmartFormComponents()?.forEach((form) => this.validateForm(form, aggregatedInvalidFields));
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
this.formWidgets?.forEach((form) => this.validateForm(form, aggregatedInvalidFields));
|
|
418
|
-
}
|
|
419
|
-
return aggregatedInvalidFields;
|
|
420
|
-
}
|
|
421
|
-
validateForm(form, aggregatedInvalidFields) {
|
|
422
|
-
let invalidFieldsOfForm = form?.getInvalidFields();
|
|
423
|
-
if (invalidFieldsOfForm) {
|
|
424
|
-
invalidFieldsOfForm.invalidFieldKeys.forEach((key) => aggregatedInvalidFields.invalidFieldKeys.push(key));
|
|
425
|
-
invalidFieldsOfForm.invalidFieldNames.forEach((key) => aggregatedInvalidFields.invalidFieldNames.push(key));
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
//#region UseUiAction
|
|
429
|
-
getAdditionalParams(uiAction) {
|
|
430
|
-
return {
|
|
431
|
-
forTextArea: '',
|
|
432
|
-
forTextField: '',
|
|
433
|
-
};
|
|
434
|
-
}
|
|
435
|
-
getModel() {
|
|
436
|
-
return this.data;
|
|
437
|
-
}
|
|
438
|
-
submitForm(validate) {
|
|
439
|
-
this.submitForms(validate);
|
|
440
|
-
}
|
|
441
|
-
async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
|
|
442
|
-
if (uiActionRequest.params['_files']) {
|
|
443
|
-
const param = uiActionRequest.params['param'];
|
|
444
|
-
const files = uiActionRequest.params['_files'];
|
|
445
|
-
const isMultiple = uiActionRequest.params['isMultiple'];
|
|
446
|
-
delete uiActionRequest.params['param'];
|
|
447
|
-
delete uiActionRequest.params['_files'];
|
|
448
|
-
delete uiActionRequest.params['isMultiple'];
|
|
449
|
-
// await this.sendModelToServer();
|
|
450
|
-
if (!isMultiple) {
|
|
451
|
-
await this.viewContext.performUploadAction(this.uuid, uiActionRequest, param, files[0]);
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
await this.viewContext.performUploadMultipleAction(this.uuid, uiActionRequest, param, files);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
else if (widgetId && nodeId) {
|
|
458
|
-
// await this.sendModelToServer();
|
|
459
|
-
this.addModelToWidgetAction(uiActionRequest);
|
|
460
|
-
await this.viewContext.performWidgetAction(this.uuid, widgetId, nodeId, uiActionRequest);
|
|
461
|
-
}
|
|
462
|
-
else if (widgetId) {
|
|
463
|
-
// await this.sendModelToServer();
|
|
464
|
-
this.addModelToWidgetAction(uiActionRequest);
|
|
465
|
-
await this.viewContext.performWidgetMainAction(this.uuid, widgetId, uiActionRequest);
|
|
466
|
-
}
|
|
467
|
-
else {
|
|
468
|
-
await this.viewContext.performAction(this.uuid, uiActionRequest);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
addModelToWidgetAction(uiActionRequest) {
|
|
472
|
-
if (this.sendModelOnWidgetAction) {
|
|
473
|
-
this.submitForm(false);
|
|
474
|
-
// mimic ComponentModel
|
|
475
|
-
uiActionRequest.params['clientPageModel'] = { data: this.getModel() };
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
// private async sendModelToServer() {
|
|
479
|
-
// this.submitForms(false);
|
|
480
|
-
// let dataChange = {
|
|
481
|
-
// kind: DataChangeKind.Widget,
|
|
482
|
-
// source: '',
|
|
483
|
-
// values: [['', this.getModel()]],
|
|
484
|
-
// };
|
|
485
|
-
// await this.viewContext.dataChanged(this.uuid!, dataChange);
|
|
486
|
-
// }
|
|
487
|
-
handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
|
|
488
|
-
throw new Error('handleSpecificDemandsAsynchronously method not implemented.');
|
|
489
|
-
}
|
|
490
|
-
//#endregion
|
|
491
|
-
/**
|
|
492
|
-
* Submits all the registered forms in the SmartComponent
|
|
493
|
-
*/
|
|
494
|
-
submitForms(validate) {
|
|
495
|
-
if (this.useQueryLists) {
|
|
496
|
-
this.getAllSmartFormComponents()?.forEach((form) => {
|
|
497
|
-
form?.submitForm(validate);
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
else {
|
|
501
|
-
this.formWidgets?.forEach((form) => {
|
|
502
|
-
form?.submitForm(validate);
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
addGrid(smartGrid, options, useAsDefaultGrid, componentReference) {
|
|
507
|
-
smartGrid.options = options;
|
|
508
|
-
smartGrid.uiActionService = this.uiActionService;
|
|
509
|
-
smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
|
|
510
|
-
smartGrid.serviceToUse = this;
|
|
511
|
-
smartGrid.viewContextService = this.viewContext;
|
|
512
|
-
if (!this.useQueryLists) {
|
|
513
|
-
this.widgets.set(smartGrid.gridIdentifier, componentReference);
|
|
514
|
-
}
|
|
515
|
-
else {
|
|
516
|
-
console.warn(`Added smartGrid when useQueryLists === true (${smartGrid.gridIdentifier})`);
|
|
517
|
-
}
|
|
518
|
-
if (useAsDefaultGrid) {
|
|
519
|
-
this.smartGrid = smartGrid;
|
|
520
|
-
return this.smartGrid;
|
|
521
|
-
}
|
|
522
|
-
return smartGrid;
|
|
523
|
-
}
|
|
524
|
-
addForm(smartFormId, smartForm, componentReference) {
|
|
525
|
-
if (!this.useQueryLists) {
|
|
526
|
-
this.formWidgets.set(smartFormId, componentReference);
|
|
527
|
-
}
|
|
528
|
-
else {
|
|
529
|
-
console.warn(`Added smartForm when useQueryLists === true (${smartFormId})`);
|
|
530
|
-
}
|
|
531
|
-
// if (this.sendDataChanges && componentReference) {
|
|
532
|
-
// smartForm.useOnValueChangeEvent = true;
|
|
533
|
-
// componentReference.sophisticatedValueChange
|
|
534
|
-
// .pipe(takeUntil(this._destroy$))
|
|
535
|
-
// .subscribe((valueChange: SophisticatedValueChange) => {
|
|
536
|
-
// this.handleValueChanges(valueChange);
|
|
537
|
-
// });
|
|
538
|
-
// }
|
|
539
|
-
return smartForm;
|
|
540
|
-
}
|
|
541
|
-
setUpDefaultTree(treeId) {
|
|
542
|
-
this.smartTreeService = this.createTreeService(treeId);
|
|
543
|
-
}
|
|
544
|
-
createTreeService(treeId) {
|
|
545
|
-
const treeService = new SmarttreeGenericService(this.inject, this.pageName, treeId);
|
|
546
|
-
if (!this.useQueryLists) {
|
|
547
|
-
this.widgets.set(treeId, treeService);
|
|
548
|
-
}
|
|
549
|
-
else {
|
|
550
|
-
console.warn(`Added smartTree when useQueryLists === true (${treeId})`);
|
|
551
|
-
}
|
|
552
|
-
return treeService;
|
|
553
|
-
}
|
|
554
|
-
addFileUploader(uiActionCode, fileFormats, maxSizeMb, isMultiple) {
|
|
555
|
-
return {
|
|
556
|
-
uiActionCode,
|
|
557
|
-
smartComponent: this,
|
|
558
|
-
fileFormats,
|
|
559
|
-
isMultiple,
|
|
560
|
-
maxSizeMb,
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
// #region handle changes
|
|
564
|
-
handleValueChanges(valueChange) {
|
|
565
|
-
let dataChange;
|
|
566
|
-
if (valueChange.key.includes('.')) {
|
|
567
|
-
const source = valueChange.key.split('.')[0];
|
|
568
|
-
const valueKey = valueChange.key.split('.')[1];
|
|
569
|
-
dataChange = {
|
|
570
|
-
kind: valueChange.kind === 'basic' ? DataChangeKind.WIDGET : DataChangeKind.SELECTION,
|
|
571
|
-
source,
|
|
572
|
-
values: [[valueKey, valueChange.value]],
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
|
-
else {
|
|
576
|
-
dataChange = {
|
|
577
|
-
kind: valueChange.kind === 'basic' ? DataChangeKind.WIDGET : DataChangeKind.SELECTION,
|
|
578
|
-
source: valueChange.key,
|
|
579
|
-
values: [[valueChange.key, valueChange.value]],
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
this.viewContext.dataChanged(this.uuid, dataChange);
|
|
583
|
-
}
|
|
584
|
-
handleChanges(change) {
|
|
585
|
-
try {
|
|
586
|
-
if (!this.componentModelLoaded) {
|
|
587
|
-
// initial load
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
if (change.changedWidgets) {
|
|
591
|
-
this.handleChangeWidgets(change.changedWidgets);
|
|
592
|
-
}
|
|
593
|
-
let dataChangeHasBeenNexted = false;
|
|
594
|
-
if (change.changes) {
|
|
595
|
-
const changes = change.changes;
|
|
596
|
-
Object.keys(changes).map((changeKey) => {
|
|
597
|
-
if (changeKey.startsWith('data.')) {
|
|
598
|
-
this.handleDataChange(changes, changeKey);
|
|
599
|
-
}
|
|
600
|
-
else if (changeKey.startsWith('layouts.') && this.model?.layouts) {
|
|
601
|
-
this.handleLayoutChange(changes, changeKey);
|
|
602
|
-
}
|
|
603
|
-
else if (changeKey.startsWith('componentLayouts.') && this.model?.layouts) {
|
|
604
|
-
this.handleComponentLayoutChange(changes, changeKey);
|
|
605
|
-
}
|
|
606
|
-
else if (changeKey.startsWith('valueSets.') && this.model?.valueSets) {
|
|
607
|
-
this.handleValueSetChange(changes, changeKey);
|
|
608
|
-
}
|
|
609
|
-
else if (changeKey === 'actions') {
|
|
610
|
-
this.handleActionChange(changes, changeKey);
|
|
611
|
-
}
|
|
612
|
-
else if (changeKey === 'constraints') {
|
|
613
|
-
this.handleConstraintChange(changes, changeKey);
|
|
614
|
-
}
|
|
615
|
-
else if (changeKey === '') {
|
|
616
|
-
this.model = changes[''];
|
|
617
|
-
dataChangeHasBeenNexted = true;
|
|
618
|
-
}
|
|
619
|
-
});
|
|
620
|
-
if (!dataChangeHasBeenNexted) {
|
|
621
|
-
this.dataChanged.next();
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
catch (error) {
|
|
626
|
-
console.error(error);
|
|
627
|
-
this.model = change.value;
|
|
628
|
-
}
|
|
629
|
-
if (!change.changedWidgets && !change.changes && change.value) {
|
|
630
|
-
this.model = change.value;
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
handleChangeWidgets(changedWidgets, skipLoad = false) {
|
|
634
|
-
let widgets = this.getWidgets();
|
|
635
|
-
changedWidgets.forEach((key) => {
|
|
636
|
-
const reference = widgets.get(key);
|
|
637
|
-
if (reference instanceof SmartGridComponent) {
|
|
638
|
-
this.setupGridServices(reference);
|
|
639
|
-
if (!skipLoad) {
|
|
640
|
-
reference.refresh();
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
else if (reference instanceof SmarttreeGenericService) {
|
|
644
|
-
if (!skipLoad) {
|
|
645
|
-
reference.initialize();
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
else if (reference instanceof SmartFilterEditorService) {
|
|
649
|
-
if (!skipLoad) {
|
|
650
|
-
reference.load();
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
else if (!skipLoad && reference === undefined) {
|
|
654
|
-
console.error(`Provided reference for ${key} is undefined.`);
|
|
655
|
-
}
|
|
656
|
-
});
|
|
657
|
-
}
|
|
658
|
-
setValueDeeply(model, key, value) {
|
|
659
|
-
let splittedKeys = key.split('.');
|
|
660
|
-
let deepModel = [model];
|
|
661
|
-
let tempModel;
|
|
662
|
-
for (let index = 0; index < splittedKeys.length; index++) {
|
|
663
|
-
tempModel = deepModel[index];
|
|
664
|
-
if (typeof tempModel[splittedKeys[index]] !== 'string' &&
|
|
665
|
-
typeof tempModel[splittedKeys[index]] !== 'boolean' &&
|
|
666
|
-
typeof tempModel[splittedKeys[index]] !== 'number' &&
|
|
667
|
-
tempModel[splittedKeys[index]] !== undefined) {
|
|
668
|
-
deepModel.push(tempModel[splittedKeys[index]]);
|
|
669
|
-
}
|
|
670
|
-
if (index === splittedKeys.length - 1) {
|
|
671
|
-
let oldValue = tempModel[splittedKeys[index]];
|
|
672
|
-
// if (value === '' && (oldValue === null || oldValue === undefined) then don't change value.
|
|
673
|
-
if (value !== '' || (oldValue !== null && oldValue !== undefined)) {
|
|
674
|
-
tempModel[splittedKeys[index]] = value;
|
|
675
|
-
}
|
|
676
|
-
break;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
handleDataChange(changes, changeKey) {
|
|
681
|
-
this.setValueDeeply(this.model, changeKey, changes[changeKey]);
|
|
682
|
-
if (this.useQueryLists) {
|
|
683
|
-
this.getAllSmartFormComponents()?.forEach((form) => form.refresh());
|
|
684
|
-
}
|
|
685
|
-
else {
|
|
686
|
-
this.formWidgets.forEach((formComponent, key) => {
|
|
687
|
-
if (formComponent === undefined) {
|
|
688
|
-
console.error(`Provided form reference for ${key} is undefined.`);
|
|
689
|
-
}
|
|
690
|
-
else {
|
|
691
|
-
formComponent.refresh();
|
|
692
|
-
}
|
|
693
|
-
});
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
handleLayoutChange(changes, changeKey) {
|
|
697
|
-
let layoutKey = changeKey.split('.')[1];
|
|
698
|
-
this.model.layouts[layoutKey] = changes[changeKey];
|
|
699
|
-
}
|
|
700
|
-
handleComponentLayoutChange(changes, changeKey) {
|
|
701
|
-
let layoutKey = changeKey.split('.')[1];
|
|
702
|
-
let componentLayouts = this.model.componentLayouts;
|
|
703
|
-
componentLayouts[layoutKey] = changes[changeKey];
|
|
704
|
-
}
|
|
705
|
-
handleValueSetChange(changes, changeKey) {
|
|
706
|
-
let valueSetKey = changeKey.split('.')[1];
|
|
707
|
-
this.model.valueSets[valueSetKey] = changes[changeKey];
|
|
708
|
-
}
|
|
709
|
-
handleActionChange(changes, changeKey) {
|
|
710
|
-
this.model.actions = changes[changeKey];
|
|
711
|
-
this.initActions();
|
|
712
|
-
}
|
|
713
|
-
handleConstraintChange(changes, changeKey) {
|
|
714
|
-
this.model.constraints = changes[changeKey];
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixHQVFsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FJaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFLTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUVMLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRWhGLE1BQU0sT0FBZ0IsdUJBQXVCO0lBNEczQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3pDLFFBQWlCLEVBQ2pCLGNBQXVCLEVBQ3ZCLE9BQW9CLEVBQ3BCLFFBQW9CO1FBTHBCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDekMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixZ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O1FBQ3hDLElBQUksQ0FBQyxLQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUNwRixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksZ0JBQWdCLEdBQThCLElBQUksQ0FBQyxLQUFNLENBQUMsZ0JBRTdELENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDN0UsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBTSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDM0UsSUFBSSxDQUFDLEtBQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUMvRSxJQUFJLENBQUMsS0FBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudE1vZGVsLFxyXG4gIENvbXBvbmVudE1vZGVsQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2UsXHJcbiAgRGF0YUNoYW5nZUtpbmQsXHJcbiAgRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyxcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Nb2RlbCxcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVWlBY3Rpb25TZXJ2aWNlLFxyXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcclxuICBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQsXHJcbiAgVXNlVWlBY3Rpb24yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9zbWFydC1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEdyaWRPcHRpb25zLCBTbWFydEdyaWQsIFNtYXJ0R3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybSxcclxuICBTbWFydEZvcm1JbnZhbGlkRmllbGRzLFxyXG4gIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsXHJcbiAgVmFsdWVDaGFuZ2VNb2RlLFxyXG59IGZyb20gJy4uL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50LFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eSxcclxufSBmcm9tICcuLi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci9wcm9qZWN0JztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uMiB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBwcm90ZWN0ZWQgY29tcG9uZW50TW9kZWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHV1aWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl91dWlkO1xyXG4gIH1cclxuICBzZXQgdXVpZCh1dWlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl91dWlkID09PSB1dWlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaXJzdFV1aWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCk7XHJcbiAgICAgIGZpcnN0VXVpZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXVpZCA9IHV1aWQ7XHJcbiAgICB0aGlzLmdldFdpZGdldHMoKS5mb3JFYWNoKChyZWYsIGtleSkgPT4ge1xyXG4gICAgICBpZiAocmVmIGluc3RhbmNlb2YgU21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgcmVmLnV1aWQgPSB0aGlzLmNvbXBvbmVudE1vZGVsTG9hZGVkID8gdXVpZCA6IHVuZGVmaW5lZDtcclxuICAgICAgfSBlbHNlIGlmIChyZWYgaW5zdGFuY2VvZiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIHtcclxuICAgICAgICByZWYuY29uZmlnLnV1aWQgPSB0aGlzLmNvbXBvbmVudE1vZGVsTG9hZGVkID8gdXVpZCA6IHVuZGVmaW5lZDtcclxuICAgICAgfSBlbHNlIGlmICghcmVmICYmICFmaXJzdFV1aWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQgb24gdXVpZCBjaGFuZ2UuYCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRleHQudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHBhZ2VOYW1lID09PSB0aGlzLnBhZ2VOYW1lISkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHV1aWQpIHtcclxuICAgICAgdGhpcy52aWV3Q29udGV4dC5mb2xsb3codGhpcy5fdXVpZCEsIHRoaXMuZGV0ZWN0Q2hhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG1vZGVsKCk6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcclxuICB9XHJcbiAgc2V0IG1vZGVsKG1vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhPzogVDtcclxuXHJcbiAgZ2V0IGRhdGEoKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcbiAgc2V0IGRhdGEobW9kZWw6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2RhdGEgPSBtb2RlbDtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGRhdGFDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIC8vIEdyaWRcclxuICBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcblxyXG4gIC8vIFNlcnZpY2VzXHJcbiAgcHJvdGVjdGVkIHZpZXdDb250ZXh0OiBTbWFydFZpZXdDb250ZXh0U2VydmljZTtcclxuICBwcm90ZWN0ZWQgdWlBY3Rpb25TZXJ2aWNlOiBVaUFjdGlvblNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZT86IFNtYXJ0VHJhbnNsYXRlU2VydmljZTtcclxuXHJcbiAgLy8gVHJlZVxyXG4gIHByaXZhdGUgX3NtYXJ0VHJlZVNlcnZpY2U/OiBTbWFydHRyZWVHZW5lcmljU2VydmljZTtcclxuXHJcbiAgcHVibGljIGdldCBzbWFydFRyZWVTZXJ2aWNlKCk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zbWFydFRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNtYXJ0VHJlZVNlcnZpY2Uoc21hcnRUcmVlU2VydmljZTogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl9zbWFydFRyZWVTZXJ2aWNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBkZWZhdWx0IHRyZWUgaGFzIGFscmVhZHkgc2V0IHVwIScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc21hcnRUcmVlU2VydmljZSA9IHNtYXJ0VHJlZVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICAvLyBDb250YWluZWQgV2lkZ2V0c1xyXG4gIHdpZGdldHM6IE1hcDxzdHJpbmcsIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZm9ybVdpZGdldHM6IE1hcDxzdHJpbmcsIFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHVzZVF1ZXJ5TGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2VuZE1vZGVsT25XaWRnZXRBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YUNoYW5nZUtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIGRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVycyA9IG5ldyBNYXA8U21hcnRmb3JtQ29tcG9uZW50LCBTdWJzY3JpcHRpb24+KCk7XHJcblxyXG4gIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3Rvcj86IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgcHJvdGVjdGVkIGF1dGg6IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJvdGVjdGVkIHBhZ2VOYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIF9jb21wb25lbnROYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIGVsZW1lbnQ/OiBFbGVtZW50UmVmLFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyPzogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICAvLyBjaGVjayBhbmQgY2FsY3VsYXRlIHBhZ2VOYW1lXHJcbiAgICBpZiAoIXRoaXMucGFnZU5hbWUgJiYgIXRoaXMuX2NvbXBvbmVudE5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWdlTmFtZSBvciBjb21wb25lbnROYW1lIG11c3QgYmUgc3BlY2lmaWVkIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBpbmplY3QuZ2V0KFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlKTtcclxuICAgIGlmICh0aGlzLl9jb21wb25lbnROYW1lKSB7XHJcbiAgICAgIGxldCBwYWdlTmFtZUZvckNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRleHQuZ2V0UGFnZU5hbWVPZkNvbXBvbmVudCh0aGlzLl9jb21wb25lbnROYW1lKTtcclxuICAgICAgaWYgKCF0aGlzLnBhZ2VOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlTmFtZSA9IHBhZ2VOYW1lRm9yQ29tcG9uZW50O1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZU5hbWUgIT09IHBhZ2VOYW1lRm9yQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYHBhZ2VOYW1lICgke3BhZ2VOYW1lfSkgYW5kIGNvbXBvbmVudE5hbWUgKCR7X2NvbXBvbmVudE5hbWV9KSBkb2Vzbid0IG1hdGNoIWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBmcm9tIHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGlzLnBhZ2VOYW1lXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBfbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1bigpO1xyXG4gIH1cclxuICBfbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCEpO1xyXG4gICAgdGhpcy53aWRnZXRzLmNsZWFyKCk7XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIF9uZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gdGhpcy5pbmplY3QuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgaWYgKCF0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NtYXJ0Q29tcG9uZW50TGF5b3V0c1FMIG5vdCBhdmFpbGFibGUhJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUxpc3QodGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpISwgKGNvbXApID0+IHtcclxuICAgICAgICAgIGlmIChjb21wLnNtYXJ0Q29tcG9uZW50TGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy51dWlkICE9PSBjb21wLnV1aWQpIGNvbXAudXVpZCA9IHRoaXMudXVpZDtcclxuICAgICAgICAgIFNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRHcmlkcyhjb21wKS5mb3JFYWNoKChncmlkKSA9PlxyXG4gICAgICAgICAgICB0aGlzLnNldHVwR3JpZFNlcnZpY2VzKGdyaWQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGZvciBoYW5kbGluZyBlbWJlZGRlZCBmb3Jtc1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSEsIChmb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmdldFNtYXJ0Rm9ybXNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdnZXRTbWFydEZvcm1zUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Rm9ybXNRTCgpISwgKGZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZVN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuZ2V0U21hcnRHcmlkc1FMKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NtYXJ0R3JpZHNRTCBub3QgYXZhaWxhYmxlIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRHcmlkc1FMKCkhLCAoZ3JpZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyaWQpIHtcclxuICAgICAgICAgICAgaWYgKGdyaWQuc21hcnRHcmlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cEdyaWRTZXJ2aWNlcyhncmlkKTtcclxuICAgICAgICAgICAgICBncmlkLnNldHVwVG9vbGJhcigpO1xyXG4gICAgICAgICAgICAgIGlmIChncmlkLnRvb2xiYXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudXVpZCAmJiB0aGlzLnV1aWQgIT09IGdyaWQudXVpZCkgZ3JpZC51dWlkID0gdGhpcy51dWlkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZFNlcnZpY2VzKGdyaWQ6IFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgaWYgKGdyaWQuc21hcnRHcmlkKSB7XHJcbiAgICAgIGlmICghZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlID0gdGhpcy51aUFjdGlvblNlcnZpY2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFncmlkLnNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWdyaWQuc21hcnRHcmlkLnNlcnZpY2VUb1VzZSkge1xyXG4gICAgICAgIGdyaWQuc21hcnRHcmlkLnNlcnZpY2VUb1VzZSA9IHRoaXM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFncmlkLnNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UpIHtcclxuICAgICAgICBncmlkLnNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UgPSB0aGlzLnZpZXdDb250ZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0U2ltcGxlPFQ+KHFsOiBRdWVyeUxpc3Q8VD4sIGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcclxuICAgIGhhbmRsZXIoKTtcclxuICAgIHFsLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gaGFuZGxlcigpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYW5kbGVRdWVyeUxpc3Q8VD4ocWw6IFF1ZXJ5TGlzdDxUPiwgaGFuZGxlcjogKGVsOiBUKSA9PiB2b2lkKSB7XHJcbiAgICBxbC5mb3JFYWNoKChlbCkgPT4gaGFuZGxlcihlbCkpO1xyXG4gICAgcWwuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0KSA9PiAobGlzdCBhcyBRdWVyeUxpc3Q8VD4pLmZvckVhY2goKGVsKSA9PiBoYW5kbGVyKGVsKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0Rm9ybXNRTCgpOiBRdWVyeUxpc3Q8U21hcnRmb3JtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0R3JpZHNRTCgpOiBRdWVyeUxpc3Q8U21hcnRHcmlkQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0VHJlZXNRTCgpOiBRdWVyeUxpc3Q8U21hcnR0cmVlR2VuZXJpY1NlcnZpY2U+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRGaWx0ZXJTZXJ2aWNlc1FMKCk6IFF1ZXJ5TGlzdDxTbWFydEZpbHRlckVkaXRvclNlcnZpY2U+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRVaUFjdGlvblRvb2xiYXJzUUwoKTogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpOlxyXG4gICAgfCBRdWVyeUxpc3Q8U21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQ+XHJcbiAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGdldFdpZGdldHMoKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgU21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UgfCB1bmRlZmluZWRcclxuICA+IHtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgbGV0IHdpZGdldHM6IE1hcDxcclxuICAgICAgICBzdHJpbmcsXHJcbiAgICAgICAgU21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UgfCB1bmRlZmluZWRcclxuICAgICAgPiA9IG5ldyBNYXAoKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEdyaWRDb21wb25lbnRzKClcclxuICAgICAgICAuZmlsdGVyKChncmlkKSA9PiAoZ3JpZD8uc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllciA/IHRydWUgOiBmYWxzZSkpXHJcbiAgICAgICAgLmZvckVhY2goKGdyaWQpID0+IHdpZGdldHMuc2V0KGdyaWQuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllciwgZ3JpZCkpO1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0VHJlZUNvbXBvbmVudHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKHRyZWUpID0+ICh0cmVlPy5zbWFydFRyZWVNb2RlbD8uaWRlbnRpZmllciA/IHRydWUgOiBmYWxzZSkpXHJcbiAgICAgICAgLmZvckVhY2goKHRyZWUpID0+IHdpZGdldHMuc2V0KHRyZWUhLnNtYXJ0VHJlZU1vZGVsIS5pZGVudGlmaWVyISwgdHJlZSkpO1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZXMoKVxyXG4gICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gKGZpbHRlci5jb25maWcuaWRlbnRpZmllciA/IHRydWUgOiBmYWxzZSkpXHJcbiAgICAgICAgLmZvckVhY2goKGZpbHRlcikgPT4gd2lkZ2V0cy5zZXQoZmlsdGVyLmNvbmZpZy5pZGVudGlmaWVyLCBmaWx0ZXIpKTtcclxuICAgICAgcmV0dXJuIHdpZGdldHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy53aWRnZXRzO1xyXG4gIH1cclxuXHJcbiAgaW5pdENvbXBvbmVudEJ5TW9kZWwoKTogdm9pZCB7XHJcbiAgICBTbWFydFN0eWxlVXRpbGl0eS5hcHBseVN0eWxlKHRoaXMubW9kZWw/LnN0eWxlLCB0aGlzLmVsZW1lbnQsIHRoaXMucmVuZGVyZXIpO1xyXG4gICAgU21hcnRTdHlsZVV0aWxpdHkuYXBwbHlTdHlsZSh0aGlzLm1vZGVsPy5wYXJlbnRTdHlsZSwgdGhpcy5lbGVtZW50LCB0aGlzLnJlbmRlcmVyLCB0cnVlKTtcclxuICAgIHRoaXMuaW5pdERhdGEoKTtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBpZiAoZm9ybS5zbWFydEZvcm0pIHtcclxuICAgICAgICAgIGZvcm0uc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgICAgIC8vIHVzZXMgZGF0YSwgdmFsdWVTZXRzLCBjb25zdHJhaW50c1xyXG4gICAgICAgICAgZm9ybS5jb25zdHJ1Y3RGb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3I/LmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuICAgIC8vIFRPRE86IGxheW91dCwgd2lkZ2V0c1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTogU21hcnRmb3JtQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGZvcm1zOiBTbWFydGZvcm1Db21wb25lbnRbXSA9IHRoaXMuZ2V0U21hcnRGb3Jtc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICBmb3Jtcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRGb3Jtcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEdyaWRDb21wb25lbnRzKCk6IFNtYXJ0R3JpZENvbXBvbmVudFtdIHtcclxuICAgIGxldCBncmlkczogU21hcnRHcmlkQ29tcG9uZW50W10gPSB0aGlzLmdldFNtYXJ0R3JpZHNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCk/LmZvckVhY2goKGNvbXApID0+IHtcclxuICAgICAgZ3JpZHMucHVzaCguLi5TbWFydENvbXBvbmVudExheW91dFV0aWxpdHkuZ2V0R3JpZHMoY29tcCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JpZHM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRUcmVlQ29tcG9uZW50cygpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZVtdIHtcclxuICAgIGxldCB0cmVlczogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRUcmVlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0cmVlcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUcmVlcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cmVlcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKCk6IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZVtdIHtcclxuICAgIGxldCBmaWx0ZXJzOiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRGaWx0ZXJTZXJ2aWNlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0VWlBY3Rpb25Ub29sYmFycygpOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnRbXSB7XHJcbiAgICBsZXQgdG9vbGJhcnM6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudFtdID0gdGhpcy5nZXRTbWFydFVpQWN0aW9uVG9vbGJhcnNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKT8uZm9yRWFjaCgoZ3JpZCkgPT4ge1xyXG4gICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgdG9vbGJhcnMucHVzaChncmlkLnRvb2xiYXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0b29sYmFycy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUb29sYmFycyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpXHJcbiAgICAgID8uZmxhdE1hcCgoZm9ybSkgPT4gZm9ybS5nZXRUb29sYmFycygpKVxyXG4gICAgICAuZmlsdGVyKCh0b29sYmFyKSA9PiB0b29sYmFyICE9PSB1bmRlZmluZWQgfHwgdG9vbGJhciAhPT0gbnVsbClcclxuICAgICAgLmZvckVhY2goKHRvb2xiYXIpID0+IHRvb2xiYXJzLnB1c2godG9vbGJhciBhcyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpKTtcclxuXHJcbiAgICByZXR1cm4gdG9vbGJhcnM7XHJcbiAgfVxyXG5cclxuICBpbml0RGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWw/LmRhdGEgYXMgYW55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEFjdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uYWN0aW9ucykge1xyXG4gICAgICBsZXQgdWlBY3Rpb25Nb2RlbHMgPSB0aGlzLm1vZGVsPy5hY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBhbGxUb29sYmFycyA9IHRoaXMuZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCk7XHJcbiAgICAgIGxldCB0b29sYmFycyA9IGFsbFRvb2xiYXJzLmZpbHRlcigodG9vbGJhcikgPT4gdG9vbGJhci5pZCk7XHJcbiAgICAgIGxldCB0b29sYmFyc1dpdGhvdXRJZCA9IHRoaXMuZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCkuZmlsdGVyKFxyXG4gICAgICAgICh0b29sYmFyKSA9PiB0b29sYmFyLmlkID09PSB1bmRlZmluZWQgfHwgdG9vbGJhci5pZCA9PT0gbnVsbFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgdG9vbGJhck1vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBVaUFjdGlvbk1vZGVsW10+KCk7XHJcbiAgICAgIHRvb2xiYXJzLmZvckVhY2goKHRvb2xiYXIpID0+IHtcclxuICAgICAgICB0b29sYmFyTW9kZWxzLnNldCh0b29sYmFyLmlkISwgW10pO1xyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGdsb2JhbFVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuICAgICAgdWlBY3Rpb25Nb2RlbHMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgbGV0IGFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsW10gfCB1bmRlZmluZWQgPSBnbG9iYWxVaUFjdGlvbk1vZGVscztcclxuICAgICAgICBsZXQgdG9vbGJhcklkID0gYWN0aW9uLnVpQWN0aW9uLnRvb2xiYXI7XHJcbiAgICAgICAgaWYgKHRvb2xiYXJJZCAmJiB0b29sYmFyTW9kZWxzLmhhcyh0b29sYmFySWQpKSB7XHJcbiAgICAgICAgICBhY3Rpb25Nb2RlbCA9IHRvb2xiYXJNb2RlbHMuZ2V0KHRvb2xiYXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTW9kZWwpIHtcclxuICAgICAgICAgIGFjdGlvbk1vZGVsID0gZ2xvYmFsVWlBY3Rpb25Nb2RlbHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFjdGlvbk1vZGVsLnB1c2goYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSBnbG9iYWxVaUFjdGlvbk1vZGVscztcclxuXHJcbiAgICAgIHRoaXMuc2V0dXBBbGxUb29sYmFycyh0b29sYmFycywgdG9vbGJhcnNXaXRob3V0SWQsIHRvb2xiYXJNb2RlbHMpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvcj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNldHVwOicsIGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNldHVwQWxsVG9vbGJhcnMoXHJcbiAgICB0b29sYmFyczogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50W10sXHJcbiAgICB0b29sYmFyc1dpdGhvdXRJZDogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50W10sXHJcbiAgICB0b29sYmFyTW9kZWxzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbk1vZGVsW10+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBzZXR1cFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcclxuXHJcbiAgICB0b29sYmFycy5mb3JFYWNoKCh0b29sYmFyKSA9PiB7XHJcbiAgICAgIHRvb2xiYXIudWlBY3Rpb25Nb2RlbHMgPSB0b29sYmFyTW9kZWxzLmdldCh0b29sYmFyLmlkISk7XHJcbiAgICAgIHNldHVwUHJvbWlzZXMucHVzaCh0b29sYmFyLnNldFVwKCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdG9vbGJhcnNXaXRob3V0SWQuZm9yRWFjaCgodG9vbGJhcikgPT4ge1xyXG4gICAgICBzZXR1cFByb21pc2VzLnB1c2godG9vbGJhci5zZXRVcCgpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHNldHVwUHJvbWlzZXMpO1xyXG4gIH1cclxuXHJcbiAgcnVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXV0aC5iZmZBcGlzSGF2ZUJlZW5TZXRVcCkge1xyXG4gICAgICB0aGlzLmxvYWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aC5oZWFkZXJzVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudE1vZGVsTG9hZGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIC8vIHRoaXMubW9kZWwgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmxvYWQodGhpcy51dWlkKTtcclxuICAgIGNvbnN0IGNoYW5nZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZDIodXVpZCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudE1vZGVsTG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXVpZCA9IHV1aWQ7XHJcbiAgICB0aGlzLm1vZGVsID0gY2hhbmdlIS5yZXN1bHQhIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgaWYgKHRoaXMubW9kZWwud2lkZ2V0cykge1xyXG4gICAgICAvLyBncmlkcyBhcmUgYWxyZWFkeSBsb2FkZWQgaW4gc2V0VXVpZCgpXHJcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlV2lkZ2V0cyh0aGlzLm1vZGVsLndpZGdldHMsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhlY3V0ZVVpQWN0aW9uKHVpQWN0aW9uOiBVaUFjdGlvbiwgb3B0aW9ucz86IEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgdWlBY3Rpb246IHVpQWN0aW9uLFxyXG4gICAgfTtcclxuICAgIGF3YWl0IHRoaXMudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodWlBY3Rpb24sIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5kYXRhQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZUtleXMucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBpZHggPSB0aGlzLmRhdGFDaGFuZ2VLZXlzLmluZGV4T2Yoa2V5KTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VLZXlzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVyKGV2ZW50OiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpIHtcclxuICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgdGhpcy5leGVjdXRlVWlBY3Rpb24oe1xyXG4gICAgICAgIGNvZGU6IGV2ZW50LmtleSxcclxuICAgICAgICBtb2RlbDogdHJ1ZSxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGl0ZW06IGV2ZW50LnZhbHVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBsZXQgZm9ybXMgPSB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTtcclxuICAgICAgLy8gYWRkIGVsZW1lbnRzIHRvIGRhdGFDaGFuZ2VLZXlzXHJcbiAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtLnNtYXJ0Rm9ybT8ud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgICAgIGlmICh3aWRnZXQua2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVDaGFuZ2VNb2RlID09PSBWYWx1ZUNoYW5nZU1vZGUuSU1NRURJQVRFX0FDVElPTikge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIod2lkZ2V0LmtleSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcih3aWRnZXQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBmb3Jtc1xyXG4gICAgICBmb3Jtcy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmhhcyhjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICBsZXQgc3VicyA9IGNvbXBvbmVudC5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoZXZlbnQpKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIHN1YnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIHJlbW92ZWQgZm9ybXNcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuZm9yRWFjaCgoc3VicywgZm9ybSkgPT4ge1xyXG4gICAgICAgIGlmICghZm9ybXMuZmluZCgoYykgPT4gYyA9PT0gZm9ybSkpIHtcclxuICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmRlbGV0ZShmb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SW52YWxpZEZpZWxkcygpOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzIHtcclxuICAgIGxldCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkczogU21hcnRGb3JtSW52YWxpZEZpZWxkcyA9IHtcclxuICAgICAgaW52YWxpZEZpZWxkS2V5czogW10sXHJcbiAgICAgIGludmFsaWRGaWVsZE5hbWVzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybShmb3JtLCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHRoaXMudmFsaWRhdGVGb3JtKGZvcm0sIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybShcclxuICAgIGZvcm06IFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZCxcclxuICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzXHJcbiAgKSB7XHJcbiAgICBsZXQgaW52YWxpZEZpZWxkc09mRm9ybSA9IGZvcm0/LmdldEludmFsaWRGaWVsZHMoKTtcclxuICAgIGlmIChpbnZhbGlkRmllbGRzT2ZGb3JtKSB7XHJcbiAgICAgIGludmFsaWRGaWVsZHNPZkZvcm0uaW52YWxpZEZpZWxkS2V5cy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkS2V5cy5wdXNoKGtleSlcclxuICAgICAgKTtcclxuICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGROYW1lcy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkTmFtZXMucHVzaChrZXkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1Ym1pdEZvcm1zKHZhbGlkYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHdpZGdldElkPzogc3RyaW5nLFxyXG4gICAgbm9kZUlkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xyXG4gICAgICBjb25zdCBwYXJhbSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGNvbnN0IGZpbGVzID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xyXG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcblxyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVVwbG9hZEFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QsIHBhcmFtLCBmaWxlc1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnV1aWQhLFxyXG4gICAgICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICAgICAgcGFyYW0sXHJcbiAgICAgICAgICBmaWxlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0SWQgJiYgbm9kZUlkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgdGhpcy5hZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldEFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgbm9kZUlkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCkge1xyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIHRoaXMuYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgaWYgKHRoaXMuc2VuZE1vZGVsT25XaWRnZXRBY3Rpb24pIHtcclxuICAgICAgdGhpcy5zdWJtaXRGb3JtKGZhbHNlKTtcclxuICAgICAgLy8gbWltaWMgQ29tcG9uZW50TW9kZWxcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snY2xpZW50UGFnZU1vZGVsJ10gPSB7IGRhdGE6IHRoaXMuZ2V0TW9kZWwoKSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3luYyBzZW5kTW9kZWxUb1NlcnZlcigpIHtcclxuICAvLyAgIHRoaXMuc3VibWl0Rm9ybXMoZmFsc2UpO1xyXG4gIC8vICAgbGV0IGRhdGFDaGFuZ2UgPSB7XHJcbiAgLy8gICAgIGtpbmQ6IERhdGFDaGFuZ2VLaW5kLldpZGdldCxcclxuICAvLyAgICAgc291cmNlOiAnJyxcclxuICAvLyAgICAgdmFsdWVzOiBbWycnLCB0aGlzLmdldE1vZGVsKCldXSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIC8vIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtcyBpbiB0aGUgU21hcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgc3VibWl0Rm9ybXModmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtPy5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzPy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgZm9ybT8uc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEdyaWQoXHJcbiAgICBzbWFydEdyaWQ6IFNtYXJ0R3JpZCxcclxuICAgIG9wdGlvbnM6IEdyaWRPcHRpb25zLFxyXG4gICAgdXNlQXNEZWZhdWx0R3JpZD86IGJvb2xlYW4sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydEdyaWRDb21wb25lbnRcclxuICApOiBTbWFydEdyaWQge1xyXG4gICAgc21hcnRHcmlkLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSA9IHRoaXMudWlBY3Rpb25TZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgICBzbWFydEdyaWQuc2VydmljZVRvVXNlID0gdGhpcztcclxuICAgIHNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UgPSB0aGlzLnZpZXdDb250ZXh0O1xyXG5cclxuICAgIGlmICghdGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5zZXQoc21hcnRHcmlkLmdyaWRJZGVudGlmaWVyLCBjb21wb25lbnRSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydEdyaWQgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3NtYXJ0R3JpZC5ncmlkSWRlbnRpZmllcn0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZUFzRGVmYXVsdEdyaWQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBzbWFydEdyaWQ7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0R3JpZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc21hcnRHcmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZvcm0oXHJcbiAgICBzbWFydEZvcm1JZDogc3RyaW5nLFxyXG4gICAgc21hcnRGb3JtOiBTbWFydEZvcm0sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydGZvcm1Db21wb25lbnRcclxuICApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKCF0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cy5zZXQoc21hcnRGb3JtSWQsIGNvbXBvbmVudFJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0Rm9ybSB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7c21hcnRGb3JtSWR9KWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnNlbmREYXRhQ2hhbmdlcyAmJiBjb21wb25lbnRSZWZlcmVuY2UpIHtcclxuICAgIC8vICAgc21hcnRGb3JtLnVzZU9uVmFsdWVDaGFuZ2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgLy8gICBjb21wb25lbnRSZWZlcmVuY2Uuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXHJcbiAgICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgIC8vICAgICAuc3Vic2NyaWJlKCh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZSk7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHNtYXJ0Rm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcERlZmF1bHRUcmVlKHRyZWVJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0VHJlZVNlcnZpY2UgPSB0aGlzLmNyZWF0ZVRyZWVTZXJ2aWNlKHRyZWVJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSEsIHRyZWVJZCk7XHJcbiAgICBpZiAoIXRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLndpZGdldHMuc2V0KHRyZWVJZCwgdHJlZVNlcnZpY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydFRyZWUgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3RyZWVJZH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZpbGVVcGxvYWRlcihcclxuICAgIHVpQWN0aW9uQ29kZTogc3RyaW5nLFxyXG4gICAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVNYj86IG51bWJlcixcclxuICAgIGlzTXVsdGlwbGU/OiBib29sZWFuXHJcbiAgKTogU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdWlBY3Rpb25Db2RlLFxyXG4gICAgICBzbWFydENvbXBvbmVudDogdGhpcyxcclxuICAgICAgZmlsZUZvcm1hdHMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIG1heFNpemVNYixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGhhbmRsZSBjaGFuZ2VzXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XHJcbiAgICBpZiAodmFsdWVDaGFuZ2Uua2V5LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldJREdFVCA6IERhdGFDaGFuZ2VLaW5kLlNFTEVDVElPTixcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlS2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV0lER0VUIDogRGF0YUNoYW5nZUtpbmQuU0VMRUNUSU9OLFxyXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUNoYW5nZS5rZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5kYXRhQ2hhbmdlZCh0aGlzLnV1aWQhLCBkYXRhQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYW5kbGVDaGFuZ2VzKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21wb25lbnRNb2RlbExvYWRlZCkge1xyXG4gICAgICAgIC8vIGluaXRpYWwgbG9hZFxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdjb21wb25lbnRMYXlvdXRzLicpICYmIHRoaXMubW9kZWw/LmxheW91dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdhY3Rpb25zJykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdjb25zdHJhaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZXNbJyddIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZVdpZGdldHMoY2hhbmdlZFdpZGdldHM6IHN0cmluZ1tdLCBza2lwTG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBsZXQgd2lkZ2V0cyA9IHRoaXMuZ2V0V2lkZ2V0cygpO1xyXG4gICAgY2hhbmdlZFdpZGdldHMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gd2lkZ2V0cy5nZXQoa2V5KTtcclxuXHJcbiAgICAgIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgICB0aGlzLnNldHVwR3JpZFNlcnZpY2VzKHJlZmVyZW5jZSk7XHJcbiAgICAgICAgaWYgKCFza2lwTG9hZCkge1xyXG4gICAgICAgICAgcmVmZXJlbmNlLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNraXBMb2FkKSB7XHJcbiAgICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNraXBMb2FkKSB7XHJcbiAgICAgICAgICByZWZlcmVuY2UubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghc2tpcExvYWQgJiYgcmVmZXJlbmNlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZURlZXBseShtb2RlbDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cclxuICAgIGxldCBkZWVwTW9kZWw6IGFueVtdID0gW21vZGVsXTtcclxuICAgIGxldCB0ZW1wTW9kZWw6IGFueTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3BsaXR0ZWRLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0ZW1wTW9kZWwgPSBkZWVwTW9kZWxbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBkZWVwTW9kZWwucHVzaCh0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPT09IHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dO1xyXG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHRoZW4gZG9uJ3QgY2hhbmdlIHZhbHVlLlxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgfHwgKG9sZFZhbHVlICE9PSBudWxsICYmIG9sZFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRWYWx1ZURlZXBseSh0aGlzLm1vZGVsLCBjaGFuZ2VLZXksIGNoYW5nZXNbY2hhbmdlS2V5XSk7XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5yZWZyZXNoKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cy5mb3JFYWNoKChmb3JtQ29tcG9uZW50OiBTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm1Db21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgZm9ybSByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1Db21wb25lbnQucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGxheW91dEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgdGhpcy5tb2RlbCEubGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIGxldCBjb21wb25lbnRMYXlvdXRzOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9ID0gdGhpcy5tb2RlbCEuY29tcG9uZW50TGF5b3V0cyBhcyB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuICAgIH07XHJcbiAgICBjb21wb25lbnRMYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVZhbHVlU2V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWVTZXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmFjdGlvbnMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q29tcG9uZW50RmlsZVVwbG9hZGVyIHtcclxuICB1aUFjdGlvbkNvZGU6IHN0cmluZztcclxuICBtYXhTaXplTWI/OiBudW1iZXI7XHJcbiAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXTtcclxuICBpc011bHRpcGxlPzogYm9vbGVhbjtcclxuICBzbWFydENvbXBvbmVudDogU21hcnRDb21wb25lbnRBcGlDbGllbnQ8YW55PjtcclxufVxyXG4iXX0=
|