@smartbit4all/ng-client 1.1.29 → 1.1.31
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/README.md +386 -386
- package/esm2020/lib/session/api/api/api.mjs +4 -4
- package/esm2020/lib/session/api/api/session.service.mjs +306 -306
- package/esm2020/lib/session/api/configuration.mjs +91 -91
- package/esm2020/lib/session/api/encoder.mjs +19 -19
- package/esm2020/lib/session/api/index.mjs +3 -3
- package/esm2020/lib/session/api/model/accountInfo.mjs +13 -13
- package/esm2020/lib/session/api/model/apiError.mjs +13 -13
- package/esm2020/lib/session/api/model/authenticationProviderData.mjs +13 -13
- package/esm2020/lib/session/api/model/getAuthenticationProvidersResponse.mjs +2 -2
- package/esm2020/lib/session/api/model/models.mjs +9 -9
- package/esm2020/lib/session/api/model/refreshSessionRequest.mjs +13 -13
- package/esm2020/lib/session/api/model/session.mjs +2 -2
- package/esm2020/lib/session/api/model/sessionInfoData.mjs +2 -2
- package/esm2020/lib/session/api/model/userActivityLog.mjs +13 -13
- package/esm2020/lib/session/api/param.mjs +2 -2
- package/esm2020/lib/session/api/variables.mjs +9 -9
- package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +225 -225
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +90 -90
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +43 -43
- package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +40 -40
- package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +52 -52
- package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +165 -165
- package/esm2020/lib/session/projects.mjs +12 -12
- package/esm2020/lib/session/smart-error-catching.interceptor.mjs +71 -71
- package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +46 -39
- package/esm2020/lib/session/smart-session-handler.service.mjs +6 -6
- package/esm2020/lib/session/smart-session.module.mjs +74 -74
- package/esm2020/lib/session/smart-session.service.mjs +225 -225
- package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +52 -52
- package/esm2020/lib/smart-client/projects.mjs +5 -5
- package/esm2020/lib/smart-client/smart-authentication.service.mjs +21 -21
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +330 -316
- package/esm2020/lib/smart-client/smart.component.mjs +30 -30
- package/esm2020/lib/smart-client/smart.service.mjs +30 -30
- package/esm2020/lib/smart-ng-client.module.mjs +20 -20
- package/esm2020/lib/smart-ng-client.service.mjs +19 -19
- package/esm2020/lib/view-context/api/api/api.mjs +4 -4
- package/esm2020/lib/view-context/api/api/view.service.mjs +859 -701
- package/esm2020/lib/view-context/api/api.module.mjs +40 -40
- package/esm2020/lib/view-context/api/configuration.mjs +91 -91
- package/esm2020/lib/view-context/api/encoder.mjs +19 -19
- package/esm2020/lib/view-context/api/index.mjs +7 -7
- package/esm2020/lib/view-context/api/model/closeResult.mjs +17 -17
- package/esm2020/lib/view-context/api/model/componentConstraint.mjs +2 -2
- package/esm2020/lib/view-context/api/model/componentModel.mjs +2 -2
- package/esm2020/lib/view-context/api/model/componentModelChange.mjs +13 -13
- package/esm2020/lib/view-context/api/model/dataChange.mjs +2 -2
- package/esm2020/lib/view-context/api/model/dataChangeEvent.mjs +2 -2
- package/esm2020/lib/view-context/api/model/dataChangeKind.mjs +17 -17
- package/esm2020/lib/view-context/api/model/messageData.mjs +2 -2
- package/esm2020/lib/view-context/api/model/messageOption.mjs +2 -2
- package/esm2020/lib/view-context/api/model/messageOptionType.mjs +17 -17
- package/esm2020/lib/view-context/api/model/messageResult.mjs +2 -2
- package/esm2020/lib/view-context/api/model/messageType.mjs +18 -18
- package/esm2020/lib/view-context/api/model/models.mjs +40 -37
- package/esm2020/lib/view-context/api/model/openPendingData.mjs +2 -2
- package/esm2020/lib/view-context/api/model/smartLinkData.mjs +2 -2
- package/esm2020/lib/view-context/api/model/uiAction.mjs +2 -2
- package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +13 -13
- package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +16 -16
- package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +21 -21
- package/esm2020/lib/view-context/api/model/uiActionConstraint.mjs +13 -0
- package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +2 -2
- package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +2 -2
- package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +16 -16
- package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +20 -18
- package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +13 -13
- package/esm2020/lib/view-context/api/model/uiActionUploadDescriptor.mjs +13 -0
- package/esm2020/lib/view-context/api/model/uploadedFile.mjs +13 -0
- package/esm2020/lib/view-context/api/model/valueSet.mjs +2 -2
- package/esm2020/lib/view-context/api/model/view.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewApiError.mjs +13 -13
- package/esm2020/lib/view-context/api/model/viewConstraint.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewContext.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewContextChange.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewContextData.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewData.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewEventHandler.mjs +20 -20
- package/esm2020/lib/view-context/api/model/viewState.mjs +21 -21
- package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +2 -2
- package/esm2020/lib/view-context/api/model/viewType.mjs +17 -17
- package/esm2020/lib/view-context/api/param.mjs +2 -2
- package/esm2020/lib/view-context/api/variables.mjs +9 -9
- package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +63 -63
- package/esm2020/lib/view-context/projects.mjs +17 -17
- package/esm2020/lib/view-context/property-definition-data.mjs +2 -2
- package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -30
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +53 -53
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +48 -48
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +68 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +53 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +119 -119
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +52 -52
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +109 -109
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +119 -119
- package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +7 -7
- package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +182 -155
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -29
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -69
- package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +39 -39
- package/esm2020/lib/view-context/smart-view-context.model.mjs +2 -2
- package/esm2020/lib/view-context/smart-view-context.module.mjs +87 -84
- package/esm2020/lib/view-context/smart-view-context.service.mjs +536 -510
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -33
- package/esm2020/lib/view-context/value-api/api/api.mjs +4 -4
- package/esm2020/lib/view-context/value-api/api/value.service.mjs +138 -138
- package/esm2020/lib/view-context/value-api/api.module.mjs +40 -40
- package/esm2020/lib/view-context/value-api/configuration.mjs +91 -91
- package/esm2020/lib/view-context/value-api/encoder.mjs +19 -19
- package/esm2020/lib/view-context/value-api/index.mjs +7 -7
- package/esm2020/lib/view-context/value-api/model/models.mjs +9 -9
- package/esm2020/lib/view-context/value-api/model/value.mjs +13 -13
- package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +13 -13
- package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -2
- package/esm2020/lib/view-context/value-api/model/valueSetDefinitionData.mjs +2 -2
- package/esm2020/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
- package/esm2020/lib/view-context/value-api/model/valueSetExpression.mjs +2 -2
- package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +2 -2
- package/esm2020/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
- package/esm2020/lib/view-context/value-api/param.mjs +2 -2
- package/esm2020/lib/view-context/value-api/variables.mjs +9 -9
- package/esm2020/projects.mjs +9 -9
- package/esm2020/smartbit4all-ng-client.mjs +4 -4
- package/fesm2015/smartbit4all-ng-client.mjs +4688 -4336
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +4668 -4291
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- 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 +22 -22
- 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/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.d.ts +28 -28
- package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +18 -18
- package/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.d.ts +15 -15
- package/lib/session/dev-tool/smart-dev-tool.interceptor.d.ts +18 -18
- package/lib/session/dev-tool/smart-dev-tool.service.d.ts +57 -57
- package/lib/session/projects.d.ts +8 -8
- 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 +15 -15
- 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/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 +71 -71
- package/lib/smart-client/smart.component.d.ts +11 -11
- package/lib/smart-client/smart.service.d.ts +11 -11
- package/lib/smart-ng-client.module.d.ts +8 -8
- package/lib/smart-ng-client.service.d.ts +10 -10
- package/lib/view-context/api/api/api.d.ts +3 -3
- package/lib/view-context/api/api/view.service.d.ts +313 -266
- 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/closeResult.d.ts +17 -17
- package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
- package/lib/view-context/api/model/componentModel.d.ts +35 -31
- package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
- package/lib/view-context/api/model/dataChange.d.ts +27 -27
- package/lib/view-context/api/model/dataChangeEvent.d.ts +33 -33
- package/lib/view-context/api/model/dataChangeKind.d.ts +20 -20
- package/lib/view-context/api/model/messageData.d.ts +29 -29
- package/lib/view-context/api/model/messageOption.d.ts +20 -20
- package/lib/view-context/api/model/messageOptionType.d.ts +17 -17
- package/lib/view-context/api/model/messageResult.d.ts +16 -16
- package/lib/view-context/api/model/messageType.d.ts +18 -18
- package/lib/view-context/api/model/models.d.ts +39 -36
- package/lib/view-context/api/model/openPendingData.d.ts +22 -22
- package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
- package/lib/view-context/api/model/uiAction.d.ts +29 -29
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
- package/lib/view-context/api/model/uiActionButtonIconPos.d.ts +19 -19
- package/lib/view-context/api/model/uiActionButtonType.d.ts +24 -24
- package/lib/view-context/api/model/uiActionConstraint.d.ts +22 -0
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +36 -34
- package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
- package/lib/view-context/api/model/uiActionFeedbackType.d.ts +19 -19
- package/lib/view-context/api/model/uiActionInputType.d.ts +20 -18
- package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
- package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +23 -0
- package/lib/view-context/api/model/uploadedFile.d.ts +19 -0
- package/lib/view-context/api/model/valueSet.d.ts +20 -20
- package/lib/view-context/api/model/view.d.ts +68 -68
- 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 +22 -22
- package/lib/view-context/api/model/viewContextChange.d.ts +20 -20
- package/lib/view-context/api/model/viewContextData.d.ts +19 -19
- package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
- package/lib/view-context/api/model/viewData.d.ts +27 -27
- package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
- package/lib/view-context/api/model/viewState.d.ts +21 -21
- package/lib/view-context/api/model/viewStateUpdate.d.ts +24 -24
- package/lib/view-context/api/model/viewType.d.ts +17 -17
- package/lib/view-context/api/param.d.ts +37 -37
- package/lib/view-context/api/variables.d.ts +8 -8
- package/lib/view-context/message-dialog/message-dialog.component.d.ts +17 -17
- 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 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +22 -0
- 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 +30 -30
- package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +21 -21
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +32 -32
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +37 -34
- 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 +30 -30
- package/lib/view-context/smart-view-context.module.d.ts +21 -20
- package/lib/view-context/smart-view-context.service.d.ts +106 -102
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
- 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/models.d.ts +8 -8
- 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 +55 -55
- package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +23 -23
- package/lib/view-context/value-api/model/valueSetExpression.d.ts +20 -20
- package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
- package/lib/view-context/value-api/model/valueSetOperation.d.ts +18 -18
- 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 +1 -1
- package/projects.d.ts +5 -5
- package/schematics/collection.json +11 -11
- package/schematics/smart-component/index.ts +26 -26
- package/schematics/smart-component/schema.json +20 -20
- package/schematics/smart-component/smart-component.schema.ts +4 -4
- package/schematics/smart-component/templates/__name@dasherize__.component.html.template +2 -2
- package/schematics/smart-component/templates/__name@dasherize__.component.ts.template +26 -26
- package/smartbit4all-ng-client-1.1.31.tgz +0 -0
- package/smartbit4all-ng-client.d.ts +5 -5
- package/src/lib/session/api/README.md +226 -226
- package/src/lib/view-context/api/README.md +226 -226
- package/src/lib/view-context/value-api/README.md +226 -226
- package/smartbit4all-ng-client-1.1.29.tgz +0 -0
|
@@ -1,316 +1,330 @@
|
|
|
1
|
-
import { __decorate, __param } from "tslib";
|
|
2
|
-
import { Inject } from '@angular/core';
|
|
3
|
-
import { SmartGridComponent } from '@smartbit4all/grid';
|
|
4
|
-
import { SmarttreeGenericService } from '@smartbit4all/tree';
|
|
5
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
6
|
-
import { DataChangeKind, SmartViewContextService, UiActionDescriptorService, UiActionService, } from '../view-context/projects';
|
|
7
|
-
import { SmartSubject } from '@smartbit4all/subject';
|
|
8
|
-
let SmartComponentApiClient = class SmartComponentApiClient {
|
|
9
|
-
constructor(inject, auth, pageName) {
|
|
10
|
-
this.inject = inject;
|
|
11
|
-
this.auth = auth;
|
|
12
|
-
this.pageName = pageName;
|
|
13
|
-
this._destroy$ = new Subject();
|
|
14
|
-
this.sendDataChanges = false;
|
|
15
|
-
this.detectChange = new SmartSubject(this._destroy$);
|
|
16
|
-
this.uiActionModels = [];
|
|
17
|
-
this.dataChanged = new SmartSubject(this._destroy$);
|
|
18
|
-
// UseUiAction
|
|
19
|
-
this.submit = new SmartSubject(this._destroy$);
|
|
20
|
-
this.reSubscribeToChange = new SmartSubject(this._destroy$);
|
|
21
|
-
// Contained Widgets
|
|
22
|
-
this.widgets = new WidgetMap();
|
|
23
|
-
this.formWidgets = new WidgetMap();
|
|
24
|
-
this.detectChange.subscribe((change) => {
|
|
25
|
-
this.handleChanges(change);
|
|
26
|
-
});
|
|
27
|
-
this.viewContext = inject.get(SmartViewContextService);
|
|
28
|
-
this.uiActionService = inject.get(UiActionService);
|
|
29
|
-
this.uiActionDescriptorService = inject.get(UiActionDescriptorService);
|
|
30
|
-
}
|
|
31
|
-
get uuid() {
|
|
32
|
-
return this._uuid;
|
|
33
|
-
}
|
|
34
|
-
set uuid(uuid) {
|
|
35
|
-
if (this.uuid) {
|
|
36
|
-
this.viewContext.unfollow(this.uuid);
|
|
37
|
-
}
|
|
38
|
-
this._uuid = uuid;
|
|
39
|
-
if (uuid) {
|
|
40
|
-
this.widgets.widgets.forEach((ref) => {
|
|
41
|
-
if (ref instanceof SmartGridComponent) {
|
|
42
|
-
ref.uuid = uuid;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
this.viewContext.follow(this._uuid, this.detectChange);
|
|
47
|
-
}
|
|
48
|
-
get model() {
|
|
49
|
-
return this._model;
|
|
50
|
-
}
|
|
51
|
-
set model(model) {
|
|
52
|
-
this._model = model;
|
|
53
|
-
this.initComponentByModel();
|
|
54
|
-
}
|
|
55
|
-
get data() {
|
|
56
|
-
return this._data;
|
|
57
|
-
}
|
|
58
|
-
set data(model) {
|
|
59
|
-
this._data = model;
|
|
60
|
-
this.dataChanged.next();
|
|
61
|
-
}
|
|
62
|
-
get smartTreeService() {
|
|
63
|
-
return this._smartTreeService;
|
|
64
|
-
}
|
|
65
|
-
set smartTreeService(smartTreeService) {
|
|
66
|
-
if (this._smartTreeService !== undefined) {
|
|
67
|
-
throw Error('The default tree has already set up!');
|
|
68
|
-
}
|
|
69
|
-
this._smartTreeService = smartTreeService;
|
|
70
|
-
}
|
|
71
|
-
_ngOnInit() {
|
|
72
|
-
this.run();
|
|
73
|
-
}
|
|
74
|
-
_ngOnDestroy() {
|
|
75
|
-
this.viewContext.unfollow(this.uuid);
|
|
76
|
-
this.widgets.clearWidgets();
|
|
77
|
-
this._destroy$.next();
|
|
78
|
-
this._destroy$.complete();
|
|
79
|
-
}
|
|
80
|
-
initComponentByModel() {
|
|
81
|
-
this.initData();
|
|
82
|
-
this.initActions();
|
|
83
|
-
// TODO: layout, valueSet, widgets
|
|
84
|
-
}
|
|
85
|
-
initData() {
|
|
86
|
-
if (this.model?.data) {
|
|
87
|
-
this.data = this.model?.data;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
initActions() {
|
|
91
|
-
if (this.model?.actions) {
|
|
92
|
-
this.uiActionModels = this.model?.actions.map((uiAction) => {
|
|
93
|
-
return {
|
|
94
|
-
serviceToUse: this,
|
|
95
|
-
uiAction,
|
|
96
|
-
};
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
run() {
|
|
101
|
-
if (this.auth.bffApisHaveBeenSetUp) {
|
|
102
|
-
this.load();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.auth.headersUpdated.subscribe(() => {
|
|
106
|
-
this.load();
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
async load() {
|
|
111
|
-
this.uuid = this.viewContext.getUuidOfPage(this.pageName);
|
|
112
|
-
this.model = await this.viewContext.load(this.uuid);
|
|
113
|
-
}
|
|
114
|
-
//#region UseUiAction
|
|
115
|
-
getAdditionalParams(uiAction) {
|
|
116
|
-
return {
|
|
117
|
-
forTextArea: '',
|
|
118
|
-
forTextField: '',
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
getModel() {
|
|
122
|
-
return this.data;
|
|
123
|
-
}
|
|
124
|
-
async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
|
|
125
|
-
if (
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFJTCxjQUFjLEVBQ2QsdUJBQXVCLEVBR3ZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELElBQXNCLHVCQUF1QixHQUE3QyxNQUFzQix1QkFBdUI7SUFrRjNDLFlBQ1ksTUFBZ0IsRUFDaEIsSUFBeUMsRUFDckIsUUFBZ0I7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFxQztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBcEZ0QyxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFekMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFbkMsaUJBQVksR0FBdUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBMkNyRixtQkFBYyxHQUFvQixFQUFFLENBQUM7UUFFckMsZ0JBQVcsR0FBa0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJFLGNBQWM7UUFDZCxXQUFNLEdBQWtCLElB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Q0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFDRCxTQUFTLENBQUMsR0FBVyxFQUFFLFNBQVksRUFBRSxNQUFnQjtRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JpZE9wdGlvbnMsIFNtYXJ0R3JpZCwgU21hcnRHcmlkQ29tcG9uZW50IH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9ncmlkJztcclxuaW1wb3J0IHsgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfSBmcm9tICdAc21hcnRiaXQ0YWxsL3RyZWUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2VLaW5kLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24sXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRBdXRoZW50aWNhdGlvblNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuL3NtYXJ0LWF1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm0sIFNtYXJ0Zm9ybUNvbXBvbmVudCwgU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlIH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9mb3JtJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9zdWJqZWN0JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uIHtcclxuICBwcm90ZWN0ZWQgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJvdGVjdGVkIHNlbmREYXRhQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PENvbXBvbmVudE1vZGVsQ2hhbmdlPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICBwcml2YXRlIF91dWlkPzogc3RyaW5nO1xyXG5cclxuICBnZXQgdXVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3V1aWQ7XHJcbiAgfVxyXG4gIHNldCB1dWlkKHV1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91dWlkID0gdXVpZDtcclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy53aWRnZXRzLmZvckVhY2goKHJlZikgPT4ge1xyXG4gICAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIHJlZi51dWlkID0gdXVpZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5mb2xsb3codGhpcy5fdXVpZCEsIHRoaXMuZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG1vZGVsKCk6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcclxuICB9XHJcbiAgc2V0IG1vZGVsKG1vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhPzogVDtcclxuXHJcbiAgZ2V0IGRhdGEoKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcbiAgc2V0IGRhdGEobW9kZWw6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2RhdGEgPSBtb2RlbDtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGRhdGFDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIC8vIFVzZVVpQWN0aW9uXHJcbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBHcmlkXHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICAvLyBTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dDogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uU2VydmljZTogVWlBY3Rpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG5cclxuICAvLyBUcmVlXHJcbiAgcHJpdmF0ZSBfc21hcnRUcmVlU2VydmljZT86IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNtYXJ0VHJlZVNlcnZpY2UoKTogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc21hcnRUcmVlU2VydmljZShzbWFydFRyZWVTZXJ2aWNlOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGRlZmF1bHQgdHJlZSBoYXMgYWxyZWFkeSBzZXQgdXAhJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zbWFydFRyZWVTZXJ2aWNlID0gc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRhaW5lZCBXaWRnZXRzXHJcbiAgd2lkZ2V0czogV2lkZ2V0TWFwPFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkPiA9IG5ldyBXaWRnZXRNYXAoKTtcclxuXHJcbiAgZm9ybVdpZGdldHM6IFdpZGdldE1hcDxTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IFdpZGdldE1hcCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgcHJvdGVjdGVkIGF1dGg6IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgQEluamVjdCgncGFnZU5hbWUnKSBwcm90ZWN0ZWQgcGFnZU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcyhjaGFuZ2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGluamVjdC5nZXQoU21hcnRWaWV3Q29udGV4dFNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlID0gaW5qZWN0LmdldChVaUFjdGlvblNlcnZpY2UpO1xyXG4gICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gaW5qZWN0LmdldChVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIF9uZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucnVuKCk7XHJcbiAgfVxyXG4gIF9uZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkISk7XHJcbiAgICB0aGlzLndpZGdldHMuY2xlYXJXaWRnZXRzKCk7XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGluaXRDb21wb25lbnRCeU1vZGVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG5cclxuICAgIC8vIFRPRE86IGxheW91dCwgdmFsdWVTZXQsIHdpZGdldHNcclxuICB9XHJcblxyXG4gIGluaXREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZWw/LmRhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbD8uZGF0YSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0QWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5hY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSB0aGlzLm1vZGVsPy5hY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXV0aC5iZmZBcGlzSGF2ZUJlZW5TZXRVcCkge1xyXG4gICAgICB0aGlzLmxvYWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aC5oZWFkZXJzVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcbiAgICB0aGlzLm1vZGVsID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5sb2FkKHRoaXMudXVpZCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICB3aWRnZXRJZD86IHN0cmluZyxcclxuICAgIG5vZGVJZD86IHN0cmluZ1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAod2lkZ2V0SWQgJiYgbm9kZUlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldEFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgbm9kZUlkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTcGVjaWZpY0RlbWFuZHNBc3luY2hyb25vdXNseShcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2U+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBhZGRHcmlkKFxyXG4gICAgc21hcnRHcmlkOiBTbWFydEdyaWQsXHJcbiAgICBvcHRpb25zOiBHcmlkT3B0aW9ucyxcclxuICAgIHVzZUFzRGVmYXVsdEdyaWQ/OiBib29sZWFuLFxyXG4gICAgY29tcG9uZW50UmVmZXJlbmNlPzogU21hcnRHcmlkQ29tcG9uZW50XHJcbiAgKTogU21hcnRHcmlkIHtcclxuICAgIHNtYXJ0R3JpZC5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvblNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uU2VydmljZTtcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnNlcnZpY2VUb1VzZSA9IHRoaXM7XHJcbiAgICBzbWFydEdyaWQudmlld0NvbnRleHRTZXJ2aWNlID0gdGhpcy52aWV3Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllciwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICBpZiAodXNlQXNEZWZhdWx0R3JpZCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRHcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEdyaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRm9ybShcclxuICAgIHNtYXJ0Rm9ybUlkOiBzdHJpbmcsXHJcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0Zm9ybUNvbXBvbmVudFxyXG4gICk6IFNtYXJ0Rm9ybSB7XHJcbiAgICB0aGlzLmZvcm1XaWRnZXRzLmFkZFdpZGdldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZW5kRGF0YUNoYW5nZXMgJiYgY29tcG9uZW50UmVmZXJlbmNlKSB7XHJcbiAgICAgIHNtYXJ0Rm9ybS51c2VPblZhbHVlQ2hhbmdlRXZlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgY29tcG9uZW50UmVmZXJlbmNlLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VXBEZWZhdWx0VHJlZSh0cmVlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFRyZWVTZXJ2aWNlID0gbmV3IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKHRoaXMuaW5qZWN0LCB0aGlzLnBhZ2VOYW1lLCB0cmVlSWQpO1xyXG4gICAgdGhpcy53aWRnZXRzLmFkZFdpZGdldCh0cmVlSWQsIHRoaXMuc21hcnRUcmVlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSwgdHJlZUlkKTtcclxuICAgIHRoaXMud2lkZ2V0cy5hZGRXaWRnZXQodHJlZUlkLCB0cmVlU2VydmljZSk7XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBoYW5kbGUgY2hhbmdlc1xyXG4gIHByaXZhdGUgaGFuZGxlVmFsdWVDaGFuZ2VzKHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhQ2hhbmdlOiBEYXRhQ2hhbmdlO1xyXG4gICAgaWYgKHZhbHVlQ2hhbmdlLmtleS5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHZhbHVlQ2hhbmdlLmtleS5zcGxpdCgnLicpWzBdO1xyXG4gICAgICBjb25zdCB2YWx1ZUtleSA9IHZhbHVlQ2hhbmdlLmtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgICBkYXRhQ2hhbmdlID0ge1xyXG4gICAgICAgIGtpbmQ6IHZhbHVlQ2hhbmdlLmtpbmQgPT09ICdiYXNpYycgPyBEYXRhQ2hhbmdlS2luZC5XaWRnZXQgOiBEYXRhQ2hhbmdlS2luZC5TZWxlY3Rpb24sXHJcbiAgICAgICAgc291cmNlLFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUtleSwgdmFsdWVDaGFuZ2UudmFsdWVdXSxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldpZGdldCA6IERhdGFDaGFuZ2VLaW5kLlNlbGVjdGlvbixcclxuICAgICAgICBzb3VyY2U6IHZhbHVlQ2hhbmdlLmtleSxcclxuICAgICAgICB2YWx1ZXM6IFtbdmFsdWVDaGFuZ2Uua2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQuZGF0YUNoYW5nZWQodGhpcy51dWlkISwgZGF0YUNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNoYW5nZXMoY2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cykge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlV2lkZ2V0cyhjaGFuZ2UuY2hhbmdlZFdpZGdldHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCd2YWx1ZVNldHMuJykgJiYgdGhpcy5tb2RlbD8udmFsdWVTZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVTZXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnYWN0aW9ucycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnY29uc3RyYWludHMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29uc3RyYWludENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZWRXaWRnZXRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY2hhbmdlZFdpZGdldHMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy53aWRnZXRzLmdldChrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cclxuICAgIGxldCBkZWVwTW9kZWw6IGFueVtdID0gW21vZGVsXTtcclxuICAgIGxldCB0ZW1wTW9kZWw6IGFueTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3BsaXR0ZWRLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0ZW1wTW9kZWwgPSBkZWVwTW9kZWxbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBkZWVwTW9kZWwucHVzaCh0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPT09IHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRWYWx1ZURlZXBseSh0aGlzLm1vZGVsLCBjaGFuZ2VLZXksIGNoYW5nZXNbY2hhbmdlS2V5XSk7XHJcblxyXG4gICAgdGhpcy5mb3JtV2lkZ2V0cy53aWRnZXRzLmZvckVhY2goXHJcbiAgICAgIChmb3JtQ29tcG9uZW50OiBTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm1Db21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgZm9ybSByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1Db21wb25lbnQucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgbGF5b3V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICB0aGlzLm1vZGVsIS5sYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVZhbHVlU2V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWVTZXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmFjdGlvbnMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwPFQ+IHtcclxuICBwcml2YXRlIF93aWRnZXRzOiBNYXA8c3RyaW5nLCBUPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZ2V0IHdpZGdldHMoKTogTWFwPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldHM7XHJcbiAgfVxyXG4gIHNldCB3aWRnZXRzKHdpZGdldHM6IE1hcDxzdHJpbmcsIFQ+KSB7XHJcbiAgICB0aGlzLl93aWRnZXRzID0gd2lkZ2V0cztcclxuICB9XHJcbiAgYWRkV2lkZ2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFQsIGlzRm9ybT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3dpZGdldHMuc2V0KGtleSwgcmVmZXJlbmNlKTtcclxuICB9XHJcbiAgcmVtb3ZlV2lkZ2V0KGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmRlbGV0ZShrZXkpO1xyXG4gIH1cclxuICBjbGVhcldpZGdldHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQoa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLndpZGdldHMuZ2V0KGtleSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { Inject } from '@angular/core';
|
|
3
|
+
import { SmartGridComponent } from '@smartbit4all/grid';
|
|
4
|
+
import { SmarttreeGenericService } from '@smartbit4all/tree';
|
|
5
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
6
|
+
import { DataChangeKind, SmartViewContextService, UiActionDescriptorService, UiActionService, } from '../view-context/projects';
|
|
7
|
+
import { SmartSubject } from '@smartbit4all/subject';
|
|
8
|
+
let SmartComponentApiClient = class SmartComponentApiClient {
|
|
9
|
+
constructor(inject, auth, pageName) {
|
|
10
|
+
this.inject = inject;
|
|
11
|
+
this.auth = auth;
|
|
12
|
+
this.pageName = pageName;
|
|
13
|
+
this._destroy$ = new Subject();
|
|
14
|
+
this.sendDataChanges = false;
|
|
15
|
+
this.detectChange = new SmartSubject(this._destroy$);
|
|
16
|
+
this.uiActionModels = [];
|
|
17
|
+
this.dataChanged = new SmartSubject(this._destroy$);
|
|
18
|
+
// UseUiAction
|
|
19
|
+
this.submit = new SmartSubject(this._destroy$);
|
|
20
|
+
this.reSubscribeToChange = new SmartSubject(this._destroy$);
|
|
21
|
+
// Contained Widgets
|
|
22
|
+
this.widgets = new WidgetMap();
|
|
23
|
+
this.formWidgets = new WidgetMap();
|
|
24
|
+
this.detectChange.subscribe((change) => {
|
|
25
|
+
this.handleChanges(change);
|
|
26
|
+
});
|
|
27
|
+
this.viewContext = inject.get(SmartViewContextService);
|
|
28
|
+
this.uiActionService = inject.get(UiActionService);
|
|
29
|
+
this.uiActionDescriptorService = inject.get(UiActionDescriptorService);
|
|
30
|
+
}
|
|
31
|
+
get uuid() {
|
|
32
|
+
return this._uuid;
|
|
33
|
+
}
|
|
34
|
+
set uuid(uuid) {
|
|
35
|
+
if (this.uuid) {
|
|
36
|
+
this.viewContext.unfollow(this.uuid);
|
|
37
|
+
}
|
|
38
|
+
this._uuid = uuid;
|
|
39
|
+
if (uuid) {
|
|
40
|
+
this.widgets.widgets.forEach((ref) => {
|
|
41
|
+
if (ref instanceof SmartGridComponent) {
|
|
42
|
+
ref.uuid = uuid;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
this.viewContext.follow(this._uuid, this.detectChange);
|
|
47
|
+
}
|
|
48
|
+
get model() {
|
|
49
|
+
return this._model;
|
|
50
|
+
}
|
|
51
|
+
set model(model) {
|
|
52
|
+
this._model = model;
|
|
53
|
+
this.initComponentByModel();
|
|
54
|
+
}
|
|
55
|
+
get data() {
|
|
56
|
+
return this._data;
|
|
57
|
+
}
|
|
58
|
+
set data(model) {
|
|
59
|
+
this._data = model;
|
|
60
|
+
this.dataChanged.next();
|
|
61
|
+
}
|
|
62
|
+
get smartTreeService() {
|
|
63
|
+
return this._smartTreeService;
|
|
64
|
+
}
|
|
65
|
+
set smartTreeService(smartTreeService) {
|
|
66
|
+
if (this._smartTreeService !== undefined) {
|
|
67
|
+
throw Error('The default tree has already set up!');
|
|
68
|
+
}
|
|
69
|
+
this._smartTreeService = smartTreeService;
|
|
70
|
+
}
|
|
71
|
+
_ngOnInit() {
|
|
72
|
+
this.run();
|
|
73
|
+
}
|
|
74
|
+
_ngOnDestroy() {
|
|
75
|
+
this.viewContext.unfollow(this.uuid);
|
|
76
|
+
this.widgets.clearWidgets();
|
|
77
|
+
this._destroy$.next();
|
|
78
|
+
this._destroy$.complete();
|
|
79
|
+
}
|
|
80
|
+
initComponentByModel() {
|
|
81
|
+
this.initData();
|
|
82
|
+
this.initActions();
|
|
83
|
+
// TODO: layout, valueSet, widgets
|
|
84
|
+
}
|
|
85
|
+
initData() {
|
|
86
|
+
if (this.model?.data) {
|
|
87
|
+
this.data = this.model?.data;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
initActions() {
|
|
91
|
+
if (this.model?.actions) {
|
|
92
|
+
this.uiActionModels = this.model?.actions.map((uiAction) => {
|
|
93
|
+
return {
|
|
94
|
+
serviceToUse: this,
|
|
95
|
+
uiAction,
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
run() {
|
|
101
|
+
if (this.auth.bffApisHaveBeenSetUp) {
|
|
102
|
+
this.load();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.auth.headersUpdated.subscribe(() => {
|
|
106
|
+
this.load();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async load() {
|
|
111
|
+
this.uuid = this.viewContext.getUuidOfPage(this.pageName);
|
|
112
|
+
this.model = await this.viewContext.load(this.uuid);
|
|
113
|
+
}
|
|
114
|
+
//#region UseUiAction
|
|
115
|
+
getAdditionalParams(uiAction) {
|
|
116
|
+
return {
|
|
117
|
+
forTextArea: '',
|
|
118
|
+
forTextField: '',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
getModel() {
|
|
122
|
+
return this.data;
|
|
123
|
+
}
|
|
124
|
+
async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
|
|
125
|
+
if (uiActionRequest.params['_files']) {
|
|
126
|
+
const param = uiActionRequest.params['param'];
|
|
127
|
+
const files = uiActionRequest.params['_files'];
|
|
128
|
+
const isMultiple = uiActionRequest.params['isMultiple'];
|
|
129
|
+
delete uiActionRequest.params['param'];
|
|
130
|
+
delete uiActionRequest.params['_files'];
|
|
131
|
+
delete uiActionRequest.params['isMultiple'];
|
|
132
|
+
if (!isMultiple) {
|
|
133
|
+
await this.viewContext.performUploadAction(this.uuid, uiActionRequest, param, files);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await this.viewContext.performUploadMultipleAction(this.uuid, uiActionRequest, param, files);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else if (widgetId && nodeId) {
|
|
140
|
+
await this.viewContext.performWidgetAction(this.uuid, widgetId, nodeId, uiActionRequest);
|
|
141
|
+
}
|
|
142
|
+
else if (widgetId) {
|
|
143
|
+
await this.viewContext.performWidgetMainAction(this.uuid, widgetId, uiActionRequest);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
await this.viewContext.performAction(this.uuid, uiActionRequest);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
|
|
150
|
+
throw new Error('handleSpecificDemandsAsynchronously method not implemented.');
|
|
151
|
+
}
|
|
152
|
+
//#endregion
|
|
153
|
+
addGrid(smartGrid, options, useAsDefaultGrid, componentReference) {
|
|
154
|
+
smartGrid.options = options;
|
|
155
|
+
smartGrid.uiActionService = this.uiActionService;
|
|
156
|
+
smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
|
|
157
|
+
smartGrid.serviceToUse = this;
|
|
158
|
+
smartGrid.viewContextService = this.viewContext;
|
|
159
|
+
this.widgets.addWidget(smartGrid.gridIdentifier, componentReference);
|
|
160
|
+
if (useAsDefaultGrid) {
|
|
161
|
+
this.smartGrid = smartGrid;
|
|
162
|
+
return this.smartGrid;
|
|
163
|
+
}
|
|
164
|
+
return smartGrid;
|
|
165
|
+
}
|
|
166
|
+
addForm(smartFormId, smartForm, componentReference) {
|
|
167
|
+
this.formWidgets.addWidget(smartFormId, componentReference);
|
|
168
|
+
if (this.sendDataChanges && componentReference) {
|
|
169
|
+
smartForm.useOnValueChangeEvent = true;
|
|
170
|
+
componentReference.sophisticatedValueChange
|
|
171
|
+
.pipe(takeUntil(this._destroy$))
|
|
172
|
+
.subscribe((valueChange) => {
|
|
173
|
+
this.handleValueChanges(valueChange);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return smartForm;
|
|
177
|
+
}
|
|
178
|
+
setUpDefaultTree(treeId) {
|
|
179
|
+
this.smartTreeService = new SmarttreeGenericService(this.inject, this.pageName, treeId);
|
|
180
|
+
this.widgets.addWidget(treeId, this.smartTreeService);
|
|
181
|
+
}
|
|
182
|
+
createTreeService(treeId) {
|
|
183
|
+
const treeService = new SmarttreeGenericService(this.inject, this.pageName, treeId);
|
|
184
|
+
this.widgets.addWidget(treeId, treeService);
|
|
185
|
+
return treeService;
|
|
186
|
+
}
|
|
187
|
+
// #region handle changes
|
|
188
|
+
handleValueChanges(valueChange) {
|
|
189
|
+
let dataChange;
|
|
190
|
+
if (valueChange.key.includes('.')) {
|
|
191
|
+
const source = valueChange.key.split('.')[0];
|
|
192
|
+
const valueKey = valueChange.key.split('.')[1];
|
|
193
|
+
dataChange = {
|
|
194
|
+
kind: valueChange.kind === 'basic' ? DataChangeKind.Widget : DataChangeKind.Selection,
|
|
195
|
+
source,
|
|
196
|
+
values: [[valueKey, valueChange.value]],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
dataChange = {
|
|
201
|
+
kind: valueChange.kind === 'basic' ? DataChangeKind.Widget : DataChangeKind.Selection,
|
|
202
|
+
source: valueChange.key,
|
|
203
|
+
values: [[valueChange.key, valueChange.value]],
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
this.viewContext.dataChanged(this.uuid, dataChange);
|
|
207
|
+
}
|
|
208
|
+
handleChanges(change) {
|
|
209
|
+
try {
|
|
210
|
+
if (change.changedWidgets) {
|
|
211
|
+
this.handleChangeWidgets(change.changedWidgets);
|
|
212
|
+
}
|
|
213
|
+
if (change.changes) {
|
|
214
|
+
const changes = change.changes;
|
|
215
|
+
Object.keys(changes).map((changeKey) => {
|
|
216
|
+
if (changeKey.startsWith('data.')) {
|
|
217
|
+
this.handleDataChange(changes, changeKey);
|
|
218
|
+
}
|
|
219
|
+
else if (changeKey.startsWith('layouts.') && this.model?.layouts) {
|
|
220
|
+
this.handleLayoutChange(changes, changeKey);
|
|
221
|
+
}
|
|
222
|
+
else if (changeKey.startsWith('valueSets.') && this.model?.valueSets) {
|
|
223
|
+
this.handleValueSetChange(changes, changeKey);
|
|
224
|
+
}
|
|
225
|
+
else if (changeKey === 'actions') {
|
|
226
|
+
this.handleActionChange(changes, changeKey);
|
|
227
|
+
}
|
|
228
|
+
else if (changeKey === 'constraints') {
|
|
229
|
+
this.handleConstraintChange(changes, changeKey);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
this.dataChanged.next();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
console.error(error);
|
|
237
|
+
this.model = change.value;
|
|
238
|
+
}
|
|
239
|
+
if (!change.changedWidgets && !change.changes && change.value) {
|
|
240
|
+
this.model = change.value;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
handleChangeWidgets(changedWidgets) {
|
|
244
|
+
changedWidgets.forEach((key) => {
|
|
245
|
+
const reference = this.widgets.get(key);
|
|
246
|
+
if (reference instanceof SmartGridComponent) {
|
|
247
|
+
reference.refresh();
|
|
248
|
+
}
|
|
249
|
+
else if (reference instanceof SmarttreeGenericService) {
|
|
250
|
+
reference.initialize();
|
|
251
|
+
}
|
|
252
|
+
else if (reference === undefined) {
|
|
253
|
+
console.error(`Provided reference for ${key} is undefined.`);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
setValueDeeply(model, key, value) {
|
|
258
|
+
let splittedKeys = key.split('.');
|
|
259
|
+
let deepModel = [model];
|
|
260
|
+
let tempModel;
|
|
261
|
+
for (let index = 0; index < splittedKeys.length; index++) {
|
|
262
|
+
tempModel = deepModel[index];
|
|
263
|
+
if (typeof tempModel[splittedKeys[index]] !== 'string' &&
|
|
264
|
+
typeof tempModel[splittedKeys[index]] !== 'boolean' &&
|
|
265
|
+
typeof tempModel[splittedKeys[index]] !== 'number' &&
|
|
266
|
+
tempModel[splittedKeys[index]] !== undefined) {
|
|
267
|
+
deepModel.push(tempModel[splittedKeys[index]]);
|
|
268
|
+
}
|
|
269
|
+
if (index === splittedKeys.length - 1) {
|
|
270
|
+
tempModel[splittedKeys[index]] = value;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return model;
|
|
275
|
+
}
|
|
276
|
+
handleDataChange(changes, changeKey) {
|
|
277
|
+
this.setValueDeeply(this.model, changeKey, changes[changeKey]);
|
|
278
|
+
this.formWidgets.widgets.forEach((formComponent, key) => {
|
|
279
|
+
if (formComponent === undefined) {
|
|
280
|
+
console.error(`Provided form reference for ${key} is undefined.`);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
formComponent.refresh();
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
handleLayoutChange(changes, changeKey) {
|
|
288
|
+
let layoutKey = changeKey.split('.')[1];
|
|
289
|
+
this.model.layouts[layoutKey] = changes[changeKey];
|
|
290
|
+
}
|
|
291
|
+
handleValueSetChange(changes, changeKey) {
|
|
292
|
+
let valueSetKey = changeKey.split('.')[1];
|
|
293
|
+
this.model.valueSets[valueSetKey] = changes[changeKey];
|
|
294
|
+
}
|
|
295
|
+
handleActionChange(changes, changeKey) {
|
|
296
|
+
this.model.actions = changes[changeKey];
|
|
297
|
+
this.initActions();
|
|
298
|
+
}
|
|
299
|
+
handleConstraintChange(changes, changeKey) {
|
|
300
|
+
this.model.constraints = changes[changeKey];
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
SmartComponentApiClient = __decorate([
|
|
304
|
+
__param(2, Inject('pageName'))
|
|
305
|
+
], SmartComponentApiClient);
|
|
306
|
+
export { SmartComponentApiClient };
|
|
307
|
+
export class WidgetMap {
|
|
308
|
+
constructor() {
|
|
309
|
+
this._widgets = new Map();
|
|
310
|
+
}
|
|
311
|
+
get widgets() {
|
|
312
|
+
return this._widgets;
|
|
313
|
+
}
|
|
314
|
+
set widgets(widgets) {
|
|
315
|
+
this._widgets = widgets;
|
|
316
|
+
}
|
|
317
|
+
addWidget(key, reference, isForm) {
|
|
318
|
+
this._widgets.set(key, reference);
|
|
319
|
+
}
|
|
320
|
+
removeWidget(key) {
|
|
321
|
+
this._widgets.delete(key);
|
|
322
|
+
}
|
|
323
|
+
clearWidgets() {
|
|
324
|
+
this._widgets.clear();
|
|
325
|
+
}
|
|
326
|
+
get(key) {
|
|
327
|
+
return this.widgets.get(key);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFJTCxjQUFjLEVBQ2QsdUJBQXVCLEVBR3ZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELElBQXNCLHVCQUF1QixHQUE3QyxNQUFzQix1QkFBdUI7SUFrRjNDLFlBQ1ksTUFBZ0IsRUFDaEIsSUFBeUMsRUFDckIsUUFBZ0I7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFxQztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBcEZ0QyxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFekMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFbkMsaUJBQVksR0FBdUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBMkNyRixtQkFBYyxHQUFvQixFQUFFLENBQUM7UUFFckMsZ0JBQVcsR0FBa0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJFLGNBQWM7UUFDZCxXQUFNLEdBQWtCLElB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QUMsR0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZE9wdGlvbnMsIFNtYXJ0R3JpZCwgU21hcnRHcmlkQ29tcG9uZW50IH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9ncmlkJztcbmltcG9ydCB7IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC90cmVlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50TW9kZWwsXG4gIENvbXBvbmVudE1vZGVsQ2hhbmdlLFxuICBEYXRhQ2hhbmdlLFxuICBEYXRhQ2hhbmdlS2luZCxcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXG4gIFVpQWN0aW9uLFxuICBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMsXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXG4gIFVpQWN0aW9uTW9kZWwsXG4gIFVpQWN0aW9uUmVxdWVzdCxcbiAgVWlBY3Rpb25TZXJ2aWNlLFxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXG4gIFVzZVVpQWN0aW9uLFxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xuaW1wb3J0IHsgU21hcnRBdXRoZW50aWNhdGlvblNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuL3NtYXJ0LWF1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU21hcnRGb3JtLCBTbWFydGZvcm1Db21wb25lbnQsIFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSB9IGZyb20gJ0BzbWFydGJpdDRhbGwvZm9ybSc7XG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICdAc21hcnRiaXQ0YWxsL3N1YmplY3QnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21hcnRDb21wb25lbnRBcGlDbGllbnQ8VD4gaW1wbGVtZW50cyBVc2VVaUFjdGlvbiB7XG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByb3RlY3RlZCBzZW5kRGF0YUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PENvbXBvbmVudE1vZGVsQ2hhbmdlPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xuXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XG5cbiAgZ2V0IHV1aWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXVpZDtcbiAgfVxuICBzZXQgdXVpZCh1dWlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy51dWlkKSB7XG4gICAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCk7XG4gICAgfVxuICAgIHRoaXMuX3V1aWQgPSB1dWlkO1xuICAgIGlmICh1dWlkKSB7XG4gICAgICB0aGlzLndpZGdldHMud2lkZ2V0cy5mb3JFYWNoKChyZWYpID0+IHtcbiAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xuICAgICAgICAgIHJlZi51dWlkID0gdXVpZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudmlld0NvbnRleHQuZm9sbG93KHRoaXMuX3V1aWQhLCB0aGlzLmRldGVjdENoYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIF9tb2RlbDogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0IG1vZGVsKCk6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gIH1cbiAgc2V0IG1vZGVsKG1vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG5cbiAgICB0aGlzLmluaXRDb21wb25lbnRCeU1vZGVsKCk7XG4gIH1cblxuICBwcml2YXRlIF9kYXRhPzogVDtcblxuICBnZXQgZGF0YSgpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBzZXQgZGF0YShtb2RlbDogVCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGEgPSBtb2RlbDtcbiAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XG5cbiAgcHVibGljIGRhdGFDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG5cbiAgLy8gVXNlVWlBY3Rpb25cbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XG4gIHJlU3Vic2NyaWJlVG9DaGFuZ2U6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcblxuICAvLyBHcmlkXG4gIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcblxuICAvLyBTZXJ2aWNlc1xuICBwcm90ZWN0ZWQgdmlld0NvbnRleHQ6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdWlBY3Rpb25TZXJ2aWNlOiBVaUFjdGlvblNlcnZpY2U7XG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xuXG4gIC8vIFRyZWVcbiAgcHJpdmF0ZSBfc21hcnRUcmVlU2VydmljZT86IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlO1xuXG4gIHB1YmxpYyBnZXQgc21hcnRUcmVlU2VydmljZSgpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2U7XG4gIH1cbiAgcHVibGljIHNldCBzbWFydFRyZWVTZXJ2aWNlKHNtYXJ0VHJlZVNlcnZpY2U6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBkZWZhdWx0IHRyZWUgaGFzIGFscmVhZHkgc2V0IHVwIScpO1xuICAgIH1cbiAgICB0aGlzLl9zbWFydFRyZWVTZXJ2aWNlID0gc21hcnRUcmVlU2VydmljZTtcbiAgfVxuXG4gIC8vIENvbnRhaW5lZCBXaWRnZXRzXG4gIHdpZGdldHM6IFdpZGdldE1hcDxTbWFydEdyaWRDb21wb25lbnQgfCBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZD4gPSBuZXcgV2lkZ2V0TWFwKCk7XG5cbiAgZm9ybVdpZGdldHM6IFdpZGdldE1hcDxTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IFdpZGdldE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBhdXRoOiBTbWFydEF1dGhlbnRpY2F0aW9uU2VydmljZUludGVyZmFjZSxcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XG5cbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xuICB9XG5cbiAgX25nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucnVuKCk7XG4gIH1cbiAgX25nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkISk7XG4gICAgdGhpcy53aWRnZXRzLmNsZWFyV2lkZ2V0cygpO1xuXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBpbml0Q29tcG9uZW50QnlNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgdGhpcy5pbml0QWN0aW9ucygpO1xuXG4gICAgLy8gVE9ETzogbGF5b3V0LCB2YWx1ZVNldCwgd2lkZ2V0c1xuICB9XG5cbiAgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZWw/LmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWw/LmRhdGEgYXMgYW55O1xuICAgIH1cbiAgfVxuXG4gIGluaXRBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVsPy5hY3Rpb25zKSB7XG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdGhpcy5tb2RlbD8uYWN0aW9ucy5tYXAoKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcbiAgICAgICAgICB1aUFjdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRoLmJmZkFwaXNIYXZlQmVlblNldFVwKSB7XG4gICAgICB0aGlzLmxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRoLmhlYWRlcnNVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XG4gICAgdGhpcy5tb2RlbCA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZCh0aGlzLnV1aWQpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFVzZVVpQWN0aW9uXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9yVGV4dEFyZWE6ICcnLFxuICAgICAgZm9yVGV4dEZpZWxkOiAnJyxcbiAgICB9O1xuICB9XG4gIGdldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBhc3luYyBwZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KFxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxuICAgIHdpZGdldElkPzogc3RyaW5nLFxuICAgIG5vZGVJZD86IHN0cmluZ1xuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xuICAgICAgY29uc3QgcGFyYW0gPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xuICAgICAgY29uc3QgZmlsZXMgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1sncGFyYW0nXTtcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XG5cbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1VcGxvYWRBY3Rpb24odGhpcy51dWlkISwgdWlBY3Rpb25SZXF1ZXN0LCBwYXJhbSwgZmlsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oXG4gICAgICAgICAgdGhpcy51dWlkISxcbiAgICAgICAgICB1aUFjdGlvblJlcXVlc3QsXG4gICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgZmlsZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHdpZGdldElkICYmIG5vZGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0QWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCk7XG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCkge1xuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgdWlBY3Rpb25SZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGVTcGVjaWZpY0RlbWFuZHNBc3luY2hyb25vdXNseSBtZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHB1YmxpYyBhZGRHcmlkKFxuICAgIHNtYXJ0R3JpZDogU21hcnRHcmlkLFxuICAgIG9wdGlvbnM6IEdyaWRPcHRpb25zLFxuICAgIHVzZUFzRGVmYXVsdEdyaWQ/OiBib29sZWFuLFxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0R3JpZENvbXBvbmVudFxuICApOiBTbWFydEdyaWQge1xuICAgIHNtYXJ0R3JpZC5vcHRpb25zID0gb3B0aW9ucztcbiAgICBzbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlID0gdGhpcy51aUFjdGlvblNlcnZpY2U7XG4gICAgc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XG4gICAgc21hcnRHcmlkLnNlcnZpY2VUb1VzZSA9IHRoaXM7XG4gICAgc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSA9IHRoaXMudmlld0NvbnRleHQ7XG5cbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllciwgY29tcG9uZW50UmVmZXJlbmNlKTtcblxuICAgIGlmICh1c2VBc0RlZmF1bHRHcmlkKSB7XG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0R3JpZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRHcmlkO1xuICB9XG5cbiAgcHVibGljIGFkZEZvcm0oXG4gICAgc21hcnRGb3JtSWQ6IHN0cmluZyxcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydGZvcm1Db21wb25lbnRcbiAgKTogU21hcnRGb3JtIHtcbiAgICB0aGlzLmZvcm1XaWRnZXRzLmFkZFdpZGdldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcblxuICAgIGlmICh0aGlzLnNlbmREYXRhQ2hhbmdlcyAmJiBjb21wb25lbnRSZWZlcmVuY2UpIHtcbiAgICAgIHNtYXJ0Rm9ybS51c2VPblZhbHVlQ2hhbmdlRXZlbnQgPSB0cnVlO1xuXG4gICAgICBjb21wb25lbnRSZWZlcmVuY2Uuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzbWFydEZvcm07XG4gIH1cblxuICBwdWJsaWMgc2V0VXBEZWZhdWx0VHJlZSh0cmVlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc21hcnRUcmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSwgdHJlZUlkKTtcbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHRyZWVJZCwgdGhpcy5zbWFydFRyZWVTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVUcmVlU2VydmljZSh0cmVlSWQ6IHN0cmluZyk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHtcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSwgdHJlZUlkKTtcbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHRyZWVJZCwgdHJlZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBoYW5kbGUgY2hhbmdlc1xuICBwcml2YXRlIGhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKTogdm9pZCB7XG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XG4gICAgaWYgKHZhbHVlQ2hhbmdlLmtleS5pbmNsdWRlcygnLicpKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB2YWx1ZUNoYW5nZS5rZXkuc3BsaXQoJy4nKVswXTtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XG4gICAgICBkYXRhQ2hhbmdlID0ge1xuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV2lkZ2V0IDogRGF0YUNoYW5nZUtpbmQuU2VsZWN0aW9uLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUtleSwgdmFsdWVDaGFuZ2UudmFsdWVdXSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XG4gICAgICAgIGtpbmQ6IHZhbHVlQ2hhbmdlLmtpbmQgPT09ICdiYXNpYycgPyBEYXRhQ2hhbmdlS2luZC5XaWRnZXQgOiBEYXRhQ2hhbmdlS2luZC5TZWxlY3Rpb24sXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxuICAgICAgICB2YWx1ZXM6IFtbdmFsdWVDaGFuZ2Uua2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cykge1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZVdpZGdldHMoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSBjaGFuZ2UuY2hhbmdlcztcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnZGF0YS4nKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVTZXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJ2FjdGlvbnMnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnY29uc3RyYWludHMnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xuICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZS52YWx1ZSBhcyBDb21wb25lbnRNb2RlbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNoYW5nZVdpZGdldHMoY2hhbmdlZFdpZGdldHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY2hhbmdlZFdpZGdldHMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMud2lkZ2V0cy5nZXQoa2V5KTtcblxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xuICAgICAgICByZWZlcmVuY2UucmVmcmVzaCgpO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydHRyZWVHZW5lcmljU2VydmljZSkge1xuICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlRGVlcGx5KG1vZGVsOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XG5cbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XG4gICAgbGV0IHRlbXBNb2RlbDogYW55O1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRlbXBNb2RlbCA9IGRlZXBNb2RlbFtpbmRleF07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXG4gICAgICAgIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gPSB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWVEZWVwbHkodGhpcy5tb2RlbCwgY2hhbmdlS2V5LCBjaGFuZ2VzW2NoYW5nZUtleV0pO1xuXG4gICAgdGhpcy5mb3JtV2lkZ2V0cy53aWRnZXRzLmZvckVhY2goXG4gICAgICAoZm9ybUNvbXBvbmVudDogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoZm9ybUNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgZm9ybSByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUNvbXBvbmVudC5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgbGF5b3V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XG4gICAgdGhpcy5tb2RlbCEubGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCB2YWx1ZVNldEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsIS5hY3Rpb25zID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xuICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29uc3RyYWludENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwPFQ+IHtcbiAgcHJpdmF0ZSBfd2lkZ2V0czogTWFwPHN0cmluZywgVD4gPSBuZXcgTWFwKCk7XG5cbiAgZ2V0IHdpZGdldHMoKTogTWFwPHN0cmluZywgVD4ge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRzO1xuICB9XG4gIHNldCB3aWRnZXRzKHdpZGdldHM6IE1hcDxzdHJpbmcsIFQ+KSB7XG4gICAgdGhpcy5fd2lkZ2V0cyA9IHdpZGdldHM7XG4gIH1cbiAgYWRkV2lkZ2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFQsIGlzRm9ybT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl93aWRnZXRzLnNldChrZXksIHJlZmVyZW5jZSk7XG4gIH1cbiAgcmVtb3ZlV2lkZ2V0KGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fd2lkZ2V0cy5kZWxldGUoa2V5KTtcbiAgfVxuICBjbGVhcldpZGdldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fd2lkZ2V0cy5jbGVhcigpO1xuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5nZXQoa2V5KTtcbiAgfVxufVxuIl19
|