@gravitee/ui-policy-studio-angular 12.14.0 → 12.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/esm2022/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.mjs +3 -2
  2. package/esm2022/lib/components/flow-details/gio-ps-flow-details.component.mjs +21 -9
  3. package/esm2022/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.mjs +6 -3
  4. package/esm2022/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +10 -7
  5. package/esm2022/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +10 -7
  6. package/esm2022/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.mjs +24 -7
  7. package/esm2022/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.mjs +27 -8
  8. package/esm2022/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.mjs +28 -8
  9. package/esm2022/lib/components/flow-form-dialog/gio-ps-flow-form-dialog-result.model.mjs +1 -1
  10. package/esm2022/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +11 -8
  11. package/esm2022/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +26 -10
  12. package/esm2022/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.mjs +8 -5
  13. package/esm2022/lib/components/step-form/gio-ps-step-form.component.mjs +20 -8
  14. package/esm2022/lib/policy-studio/gio-policy-studio.component.mjs +251 -0
  15. package/esm2022/lib/policy-studio/gio-policy-studio.model.mjs +17 -0
  16. package/esm2022/lib/policy-studio/gio-policy-studio.service.mjs +74 -0
  17. package/esm2022/public-api.mjs +2 -3
  18. package/esm2022/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +4 -2
  19. package/esm2022/testing/lib/policy-studio/gio-policy-studio.harness.mjs +174 -0
  20. package/esm2022/testing/public-testing-api.mjs +2 -2
  21. package/fesm2022/gravitee-ui-policy-studio-angular-testing.mjs +3 -1
  22. package/fesm2022/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
  23. package/fesm2022/gravitee-ui-policy-studio-angular.mjs +540 -578
  24. package/fesm2022/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  25. package/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.d.ts +1 -1
  26. package/lib/components/flow-details/gio-ps-flow-details.component.d.ts +2 -2
  27. package/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.d.ts +2 -2
  28. package/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.d.ts +1 -1
  29. package/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.d.ts +1 -1
  30. package/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.d.ts +1 -1
  31. package/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.d.ts +3 -3
  32. package/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.d.ts +3 -3
  33. package/lib/components/flow-form-dialog/gio-ps-flow-form-dialog-result.model.d.ts +1 -1
  34. package/lib/components/flows-menu/gio-ps-flows-menu.component.d.ts +2 -2
  35. package/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.d.ts +2 -3
  36. package/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.d.ts +1 -1
  37. package/lib/components/step-form/gio-ps-step-form.component.d.ts +2 -2
  38. package/lib/{gio-policy-studio.component.d.ts → policy-studio/gio-policy-studio.component.d.ts} +2 -2
  39. package/lib/{gio-policy-studio.model.d.ts → policy-studio/gio-policy-studio.model.d.ts} +1 -1
  40. package/lib/{gio-policy-studio.service.d.ts → policy-studio/gio-policy-studio.service.d.ts} +1 -1
  41. package/package.json +1 -1
  42. package/public-api.d.ts +1 -2
  43. package/testing/lib/{gio-policy-studio.harness.d.ts → policy-studio/gio-policy-studio.harness.d.ts} +2 -2
  44. package/testing/public-testing-api.d.ts +1 -1
  45. package/esm2022/lib/gio-policy-studio.component.mjs +0 -240
  46. package/esm2022/lib/gio-policy-studio.model.mjs +0 -17
  47. package/esm2022/lib/gio-policy-studio.module.mjs +0 -140
  48. package/esm2022/lib/gio-policy-studio.service.mjs +0 -74
  49. package/esm2022/testing/lib/gio-policy-studio.harness.mjs +0 -174
  50. package/lib/gio-policy-studio.module.d.ts +0 -33
@@ -4,5 +4,5 @@ import * as i0 from "@angular/core";
4
4
  export declare class GioFilterConnectorsByModePipe implements PipeTransform {
5
5
  transform(items: ConnectorInfo[], mode: ConnectorMode, activeModes?: ConnectorMode[]): ConnectorInfo[];
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<GioFilterConnectorsByModePipe, never>;
7
- static ɵpipe: i0.ɵɵPipeDeclaration<GioFilterConnectorsByModePipe, "gioFilterConnectorsByMode", false>;
7
+ static ɵpipe: i0.ɵɵPipeDeclaration<GioFilterConnectorsByModePipe, "gioFilterConnectorsByMode", true>;
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { MatDialog } from '@angular/material/dialog';
3
- import { FlowVM } from '../../gio-policy-studio.model';
3
+ import { FlowVM } from '../../policy-studio/gio-policy-studio.model';
4
4
  import { ApiType, ConnectorInfo, Operation, Policy, Step } from '../../models';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class GioPolicyStudioDetailsComponent implements OnChanges {
@@ -23,5 +23,5 @@ export declare class GioPolicyStudioDetailsComponent implements OnChanges {
23
23
  onDeleteFlow(): void;
24
24
  onStepsChange(flowPhase: 'request' | 'response' | 'publish' | 'subscribe', steps: Step[]): void;
25
25
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioDetailsComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsComponent, "gio-ps-flow-details", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flow": { "alias": "flow"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; "endpointsInfo": { "alias": "endpointsInfo"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; }, { "flowChange": "flowChange"; "deleteFlow": "deleteFlow"; }, never, never, false, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsComponent, "gio-ps-flow-details", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flow": { "alias": "flow"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; "endpointsInfo": { "alias": "endpointsInfo"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; }, { "flowChange": "flowChange"; "deleteFlow": "deleteFlow"; }, never, never, true, never>;
27
27
  }
@@ -1,5 +1,5 @@
1
- import { FlowVM } from '../../gio-policy-studio.model';
2
1
  import { ConnectorInfo } from '../../models';
2
+ import { FlowVM } from '../../policy-studio/gio-policy-studio.model';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class GioPolicyStudioDetailsInfoBarComponent {
5
5
  flow?: FlowVM;
@@ -16,5 +16,5 @@ export declare class GioPolicyStudioDetailsInfoBarComponent {
16
16
  class: string;
17
17
  }[] | undefined;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioDetailsInfoBarComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsInfoBarComponent, "gio-ps-flow-details-info-bar", never, { "flow": { "alias": "flow"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; }, {}, never, never, false, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsInfoBarComponent, "gio-ps-flow-details-info-bar", never, { "flow": { "alias": "flow"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; }, {}, never, never, true, never>;
20
20
  }
@@ -35,6 +35,6 @@ export declare class GioPolicyStudioDetailsPhaseComponent implements OnChanges {
35
35
  onStepDeleted(index: number): void;
36
36
  onStepDisabled(index: number): void;
37
37
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioDetailsPhaseComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsPhaseComponent, "gio-ps-flow-details-phase", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "steps": { "alias": "steps"; "required": false; }; "name": { "alias": "name"; "required": false; }; "description": { "alias": "description"; "required": false; }; "startConnector": { "alias": "startConnector"; "required": false; }; "endConnector": { "alias": "endConnector"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "policyExecutionPhase": { "alias": "policyExecutionPhase"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; }, { "stepsChange": "stepsChange"; }, never, never, false, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsPhaseComponent, "gio-ps-flow-details-phase", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "steps": { "alias": "steps"; "required": false; }; "name": { "alias": "name"; "required": false; }; "description": { "alias": "description"; "required": false; }; "startConnector": { "alias": "startConnector"; "required": false; }; "endConnector": { "alias": "endConnector"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "policyExecutionPhase": { "alias": "policyExecutionPhase"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; }, { "stepsChange": "stepsChange"; }, never, never, true, never>;
39
39
  }
40
40
  export {};
@@ -18,5 +18,5 @@ export declare class GioPolicyStudioDetailsPhaseStepComponent implements OnChang
18
18
  onDisable(): void;
19
19
  onDelete(): void;
20
20
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioDetailsPhaseStepComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsPhaseStepComponent, "gio-ps-flow-details-phase-step", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "step": { "alias": "step"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "executionPhase": { "alias": "executionPhase"; "required": true; }; }, { "stepChange": "stepChange"; "deleted": "deleted"; "disabled": "disabled"; }, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioDetailsPhaseStepComponent, "gio-ps-flow-details-phase-step", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "step": { "alias": "step"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "executionPhase": { "alias": "executionPhase"; "required": true; }; }, { "stepChange": "stepChange"; "deleted": "deleted"; "disabled": "disabled"; }, never, never, true, never>;
22
22
  }
@@ -14,5 +14,5 @@ export declare class GioPolicyStudioFlowExecutionFormDialogComponent {
14
14
  constructor(dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, FlowExecution | undefined>, flowDialogData: GioPolicyStudioFlowExecutionFormDialogData);
15
15
  onSubmit(): void;
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowExecutionFormDialogComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowExecutionFormDialogComponent, "gio-ps-flow-execution-form-dialog", never, {}, {}, never, never, false, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowExecutionFormDialogComponent, "gio-ps-flow-execution-form-dialog", never, {}, {}, never, never, true, never>;
18
18
  }
@@ -1,8 +1,8 @@
1
1
  import { MatDialogRef } from '@angular/material/dialog';
2
2
  import { UntypedFormGroup } from '@angular/forms';
3
- import { FlowVM } from '../../../gio-policy-studio.model';
4
- import { ConnectorInfo } from '../../../models';
5
3
  import { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';
4
+ import { ConnectorInfo } from '../../../models';
5
+ import { FlowVM } from '../../../policy-studio/gio-policy-studio.model';
6
6
  import * as i0 from "@angular/core";
7
7
  export type GioPolicyStudioFlowMessageFormDialogData = {
8
8
  flow?: FlowVM;
@@ -17,5 +17,5 @@ export declare class GioPolicyStudioFlowMessageFormDialogComponent {
17
17
  constructor(dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>, flowDialogData: GioPolicyStudioFlowMessageFormDialogData);
18
18
  onSubmit(): void;
19
19
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowMessageFormDialogComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowMessageFormDialogComponent, "gio-ps-flow-message-form-dialog", never, {}, {}, never, never, false, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowMessageFormDialogComponent, "gio-ps-flow-message-form-dialog", never, {}, {}, never, never, true, never>;
21
21
  }
@@ -1,8 +1,8 @@
1
1
  import { MatDialogRef } from '@angular/material/dialog';
2
2
  import { UntypedFormGroup } from '@angular/forms';
3
- import { FlowVM } from '../../../gio-policy-studio.model';
4
- import { HttpMethod } from '../../../models';
5
3
  import { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';
4
+ import { HttpMethod } from '../../../models';
5
+ import { FlowVM } from '../../../policy-studio/gio-policy-studio.model';
6
6
  import * as i0 from "@angular/core";
7
7
  export type GioPolicyStudioFlowProxyFormDialogData = {
8
8
  flow?: FlowVM;
@@ -18,7 +18,7 @@ export declare class GioPolicyStudioFlowProxyFormDialogComponent {
18
18
  onSubmit(): void;
19
19
  tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void): void;
20
20
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowProxyFormDialogComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowProxyFormDialogComponent, "gio-ps-flow-proxy-form-dialog", never, {}, {}, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowProxyFormDialogComponent, "gio-ps-flow-proxy-form-dialog", never, {}, {}, never, never, true, never>;
22
22
  }
23
23
  export declare const sanitizePath: (path: string) => string;
24
24
  export {};
@@ -1,2 +1,2 @@
1
- import { FlowVM } from '../../gio-policy-studio.model';
1
+ import { FlowVM } from '../../policy-studio/gio-policy-studio.model';
2
2
  export type GioPolicyStudioFlowFormDialogResult = FlowVM | false;
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { MatDialog } from '@angular/material/dialog';
3
- import { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';
3
+ import { FlowGroupVM, FlowVM } from '../../policy-studio/gio-policy-studio.model';
4
4
  import { ApiType, ConnectorInfo, FlowExecution } from '../../models';
5
5
  import * as i0 from "@angular/core";
6
6
  interface FlowGroupMenuVM extends FlowGroupVM {
@@ -35,6 +35,6 @@ export declare class GioPolicyStudioFlowsMenuComponent implements OnChanges {
35
35
  onAddFlow(flowGroup: FlowGroupVM): void;
36
36
  onConfigureExecution(flowExecution: FlowExecution): void;
37
37
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowsMenuComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowsMenuComponent, "gio-ps-flows-menu", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flowExecution": { "alias": "flowExecution"; "required": false; }; "flowsGroups": { "alias": "flowsGroups"; "required": false; }; "selectedFlow": { "alias": "selectedFlow"; "required": false; }; "entrypoints": { "alias": "entrypoints"; "required": false; }; }, { "selectedFlowChange": "selectedFlowChange"; "flowsGroupsChange": "flowsGroupsChange"; "flowExecutionChange": "flowExecutionChange"; }, never, never, false, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowsMenuComponent, "gio-ps-flows-menu", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flowExecution": { "alias": "flowExecution"; "required": false; }; "flowsGroups": { "alias": "flowsGroups"; "required": false; }; "selectedFlow": { "alias": "selectedFlow"; "required": false; }; "entrypoints": { "alias": "entrypoints"; "required": false; }; }, { "selectedFlowChange": "selectedFlowChange"; "flowsGroupsChange": "flowsGroupsChange"; "flowExecutionChange": "flowExecutionChange"; }, never, never, true, never>;
39
39
  }
40
40
  export {};
@@ -1,6 +1,6 @@
1
1
  import { OnDestroy } from '@angular/core';
2
2
  import { MatDialogRef } from '@angular/material/dialog';
3
- import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
3
+ import { UntypedFormGroup } from '@angular/forms';
4
4
  import { ApiType, ExecutionPhase, Policy, Step } from '../../models';
5
5
  import * as i0 from "@angular/core";
6
6
  export type GioPolicyStudioPoliciesCatalogDialogData = {
@@ -22,7 +22,6 @@ export declare class GioPolicyStudioPoliciesCatalogDialogComponent implements On
22
22
  stepToAdd?: Step;
23
23
  categories: string[];
24
24
  isValid: boolean;
25
- selectedCategoriesControl?: UntypedFormControl;
26
25
  filtersForm: UntypedFormGroup;
27
26
  private allPolicies;
28
27
  private unsubscribe$;
@@ -36,6 +35,6 @@ export declare class GioPolicyStudioPoliciesCatalogDialogComponent implements On
36
35
  onAddPolicy(): void;
37
36
  onGoBack(): void;
38
37
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioPoliciesCatalogDialogComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioPoliciesCatalogDialogComponent, "gio-ps-policies-catalog-dialog", never, {}, {}, never, never, false, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioPoliciesCatalogDialogComponent, "gio-ps-policies-catalog-dialog", never, {}, {}, never, never, true, never>;
40
39
  }
41
40
  export {};
@@ -18,5 +18,5 @@ export declare class GioPolicyStudioStepEditDialogComponent {
18
18
  constructor(dialogRef: MatDialogRef<GioPolicyStudioStepEditDialogComponent, GioPolicyStudioStepEditDialogResult>, flowDialogData: GioPolicyStudioStepEditDialogData);
19
19
  onSave(): void;
20
20
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioStepEditDialogComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioStepEditDialogComponent, "gio-ps-step-edit-dialog", never, {}, {}, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioStepEditDialogComponent, "gio-ps-step-edit-dialog", never, {}, {}, never, never, true, never>;
22
22
  }
@@ -2,8 +2,8 @@ import { EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angu
2
2
  import { UntypedFormGroup } from '@angular/forms';
3
3
  import { Observable } from 'rxjs';
4
4
  import { GioJsonSchema, GioJsonSchemaContext } from '@gravitee/ui-particles-angular';
5
- import { GioPolicyStudioService } from '../../gio-policy-studio.service';
6
5
  import { ExecutionPhase, Policy, Step } from '../../models';
6
+ import { GioPolicyStudioService } from '../../policy-studio/gio-policy-studio.service';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class GioPolicyStudioStepFormComponent implements OnChanges, OnInit, OnDestroy {
9
9
  private readonly policyStudioService;
@@ -26,5 +26,5 @@ export declare class GioPolicyStudioStepFormComponent implements OnChanges, OnIn
26
26
  onJsonSchemaReady(isReady: boolean): void;
27
27
  emitStepChange(): void;
28
28
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioStepFormComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioStepFormComponent, "gio-ps-step-form", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "step": { "alias": "step"; "required": false; }; "executionPhase": { "alias": "executionPhase"; "required": true; }; "policy": { "alias": "policy"; "required": false; }; }, { "stepChange": "stepChange"; "isValid": "isValid"; }, never, never, false, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioStepFormComponent, "gio-ps-step-form", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "step": { "alias": "step"; "required": false; }; "executionPhase": { "alias": "executionPhase"; "required": true; }; "policy": { "alias": "policy"; "required": false; }; }, { "stepChange": "stepChange"; "isValid": "isValid"; }, never, never, true, never>;
30
30
  }
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
- import { ApiType, ConnectorInfo, Flow, FlowExecution, Plan, Policy, PolicyDocumentationFetcher, PolicySchemaFetcher, SaveOutput } from './models';
2
+ import { ApiType, ConnectorInfo, Flow, FlowExecution, Plan, Policy, PolicyDocumentationFetcher, PolicySchemaFetcher, SaveOutput } from '../models';
3
3
  import { FlowGroupVM, FlowVM } from './gio-policy-studio.model';
4
4
  import { GioPolicyStudioService } from './gio-policy-studio.service';
5
5
  import * as i0 from "@angular/core";
@@ -78,5 +78,5 @@ export declare class GioPolicyStudioComponent implements OnChanges, OnDestroy {
78
78
  onDeleteSelectedFlow(flow: FlowVM): void;
79
79
  onSave(): void;
80
80
  static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioComponent, never>;
81
- static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioComponent, "gio-policy-studio", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flowExecution": { "alias": "flowExecution"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; "endpointsInfo": { "alias": "endpointsInfo"; "required": false; }; "commonFlows": { "alias": "commonFlows"; "required": false; }; "plans": { "alias": "plans"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "policySchemaFetcher": { "alias": "policySchemaFetcher"; "required": false; }; "policyDocumentationFetcher": { "alias": "policyDocumentationFetcher"; "required": false; }; }, { "save": "save"; }, never, never, false, never>;
81
+ static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioComponent, "gio-policy-studio", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "apiType": { "alias": "apiType"; "required": false; }; "flowExecution": { "alias": "flowExecution"; "required": false; }; "entrypointsInfo": { "alias": "entrypointsInfo"; "required": false; }; "endpointsInfo": { "alias": "endpointsInfo"; "required": false; }; "commonFlows": { "alias": "commonFlows"; "required": false; }; "plans": { "alias": "plans"; "required": false; }; "policies": { "alias": "policies"; "required": false; }; "trialUrl": { "alias": "trialUrl"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "policySchemaFetcher": { "alias": "policySchemaFetcher"; "required": false; }; "policyDocumentationFetcher": { "alias": "policyDocumentationFetcher"; "required": false; }; }, { "save": "save"; }, never, never, true, never>;
82
82
  }
@@ -1,4 +1,4 @@
1
- import { Flow } from './models';
1
+ import { Flow } from '../models';
2
2
  export interface FlowVM extends Flow {
3
3
  _id: string;
4
4
  _hasChanged: boolean;
@@ -1,5 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
- import { Policy, PolicyDocumentationFetcher, PolicySchemaFetcher } from './models';
2
+ import { Policy, PolicyDocumentationFetcher, PolicySchemaFetcher } from '../models';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class GioPolicyStudioService {
5
5
  private schemasCache;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravitee/ui-policy-studio-angular",
3
- "version": "12.14.0",
3
+ "version": "12.15.0",
4
4
  "description": "Gravitee.io - UI Policy Studio Angular",
5
5
  "repository": {
6
6
  "type": "git",
package/public-api.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './lib/models';
2
- export { GioPolicyStudioModule } from './lib/gio-policy-studio.module';
3
- export { GioPolicyStudioComponent } from './lib/gio-policy-studio.component';
2
+ export { GioPolicyStudioComponent } from './lib/policy-studio/gio-policy-studio.component';
@@ -1,6 +1,6 @@
1
1
  import { ComponentHarness } from '@angular/cdk/testing';
2
- import { Flow, FlowExecution } from './models';
3
- import { GioPolicyStudioDetailsPhaseHarness, PhaseType } from './components/flow-details-phase/gio-ps-flow-details-phase.harness';
2
+ import { Flow, FlowExecution } from '../models';
3
+ import { GioPolicyStudioDetailsPhaseHarness, PhaseType } from '../components/flow-details-phase/gio-ps-flow-details-phase.harness';
4
4
  export declare class GioPolicyStudioHarness extends ComponentHarness {
5
5
  static hostSelector: string;
6
6
  private menuHarness;
@@ -1,2 +1,2 @@
1
1
  export * from './lib/models/index-testing';
2
- export * from './lib/gio-policy-studio.harness';
2
+ export * from './lib/policy-studio/gio-policy-studio.harness';
@@ -1,240 +0,0 @@
1
- /*
2
- * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Component, EventEmitter, Input, Output } from '@angular/core';
17
- import { cloneDeep, differenceBy, flatten, isEqual, omit, unionBy, uniqueId } from 'lodash';
18
- import { EMPTY, timer } from 'rxjs';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "./gio-policy-studio.service";
21
- import * as i2 from "@angular/common";
22
- import * as i3 from "@angular/material/button";
23
- import * as i4 from "@angular/material/tooltip";
24
- import * as i5 from "@angular/material/icon";
25
- import * as i6 from "./components/flows-menu/gio-ps-flows-menu.component";
26
- import * as i7 from "./components/flow-details/gio-ps-flow-details.component";
27
- export class GioPolicyStudioComponent {
28
- constructor(policyStudioService) {
29
- this.policyStudioService = policyStudioService;
30
- /**
31
- * May be set to `true` if the API is not manageable from the UI (e.g. kubernetes operator APIs)
32
- */
33
- this.readOnly = false;
34
- /**
35
- * List of entrypoints to display
36
- */
37
- this.entrypointsInfo = [];
38
- /**
39
- * List of endpoints to display
40
- */
41
- this.endpointsInfo = [];
42
- /**
43
- * List of common flows to add to common flows group
44
- */
45
- this.commonFlows = [];
46
- /**
47
- * List of plans with their flows
48
- */
49
- this.plans = [];
50
- /**
51
- * List of policies usable in the policy studio
52
- */
53
- this.policies = [];
54
- /**
55
- * Loading state
56
- */
57
- this.loading = false;
58
- /**
59
- * Called when Policy Studio needs to fetch the policy schema
60
- * @returns Observable of the policy schema
61
- */
62
- this.policySchemaFetcher = () => EMPTY;
63
- /**
64
- * Called when Policy Studio needs to fetch the policy documentation
65
- * @returns Observable of the policy documentation
66
- */
67
- this.policyDocumentationFetcher = () => EMPTY;
68
- /**
69
- * Return what is needed to save.
70
- **/
71
- this.save = new EventEmitter();
72
- this.connectorsTooltip = '';
73
- this.selectedFlow = undefined;
74
- this.flowsGroups = [];
75
- this.disableSaveButton = true;
76
- this.saving = false;
77
- // Used to keep track of initial flows groups to know if there are deleted flows
78
- this.initialFlowsGroups = [];
79
- this.hasFlowExecutionChanged = false;
80
- this.enableSavingTimer = true;
81
- }
82
- ngOnChanges(changes) {
83
- if (changes.entrypointsInfo || changes.endpointsInfo) {
84
- this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => e.name).join(', ')}\nEndpoints: ${(this.endpointsInfo ?? [])
85
- .map(e => e.name)
86
- .join(', ')}`;
87
- }
88
- if (changes.commonFlows || changes.plans) {
89
- this.disableSaveButton = true;
90
- this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);
91
- this.initialFlowsGroups = cloneDeep(this.flowsGroups);
92
- // Select first flow by default on first load
93
- this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows))[0];
94
- // Reset saving state when flowsGroups are updated
95
- this.saving = false;
96
- this.unSavingButtonSubscription?.unsubscribe();
97
- }
98
- if (changes.policySchemaFetcher) {
99
- this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);
100
- }
101
- if (changes.policyDocumentationFetcher) {
102
- this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);
103
- }
104
- }
105
- ngOnDestroy() {
106
- this.unSavingButtonSubscription?.unsubscribe();
107
- }
108
- onFlowExecutionChange(flowExecution) {
109
- this.hasFlowExecutionChanged = !isEqual(this.flowExecution, flowExecution);
110
- if (this.hasFlowExecutionChanged) {
111
- this.disableSaveButton = false;
112
- this.flowExecution = flowExecution;
113
- }
114
- }
115
- onFlowsGroupsChange(flowsGroups) {
116
- this.flowsGroups = flowsGroups;
117
- this.disableSaveButton = false;
118
- }
119
- onSelectedFlowChange(flow) {
120
- this.flowsGroups = this.flowsGroups.map(flowGroup => ({
121
- ...flowGroup,
122
- flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),
123
- }));
124
- this.selectedFlow = flow;
125
- this.disableSaveButton = false;
126
- }
127
- onDeleteSelectedFlow(flow) {
128
- // Define next selected flow and remove flow from flowsGroups
129
- const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);
130
- const flowToDeleteIndex = allFlowsId.indexOf(flow._id);
131
- const nextSelectedFlow = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];
132
- this.flowsGroups = this.flowsGroups.map(flowGroup => ({
133
- ...flowGroup,
134
- flows: flowGroup.flows.filter(f => f._id !== flow._id),
135
- }));
136
- this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);
137
- this.disableSaveButton = false;
138
- }
139
- onSave() {
140
- // Emit common flows only if they have been updated
141
- const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);
142
- // Emit plans only if they have been updated
143
- const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);
144
- this.save.emit({
145
- ...(commonFlows ? { commonFlows } : {}),
146
- ...(plansToUpdate ? { plansToUpdate } : {}),
147
- ...(this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {}),
148
- });
149
- this.saving = true;
150
- this.unSavingButtonSubscription?.unsubscribe();
151
- if (this.enableSavingTimer) {
152
- this.unSavingButtonSubscription = timer(5000).subscribe(() => {
153
- this.saving = false;
154
- });
155
- }
156
- }
157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: GioPolicyStudioComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: GioPolicyStudioComponent, selector: "gio-policy-studio", inputs: { readOnly: "readOnly", apiType: "apiType", flowExecution: "flowExecution", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", commonFlows: "commonFlows", plans: "plans", policies: "policies", trialUrl: "trialUrl", loading: "loading", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher" }, outputs: { save: "save" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;min-width:230px;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: ["readOnly", "loading", "apiType", "flowExecution", "flowsGroups", "selectedFlow", "entrypoints"], outputs: ["selectedFlowChange", "flowsGroupsChange", "flowExecutionChange"] }, { kind: "component", type: i7.GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: ["readOnly", "loading", "apiType", "flow", "entrypointsInfo", "endpointsInfo", "policies", "trialUrl"], outputs: ["flowChange", "deleteFlow"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] }); }
159
- }
160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: GioPolicyStudioComponent, decorators: [{
161
- type: Component,
162
- args: [{ selector: 'gio-policy-studio', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;min-width:230px;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"] }]
163
- }], ctorParameters: () => [{ type: i1.GioPolicyStudioService }], propDecorators: { readOnly: [{
164
- type: Input
165
- }], apiType: [{
166
- type: Input
167
- }], flowExecution: [{
168
- type: Input
169
- }], entrypointsInfo: [{
170
- type: Input
171
- }], endpointsInfo: [{
172
- type: Input
173
- }], commonFlows: [{
174
- type: Input
175
- }], plans: [{
176
- type: Input
177
- }], policies: [{
178
- type: Input
179
- }], trialUrl: [{
180
- type: Input
181
- }], loading: [{
182
- type: Input
183
- }], policySchemaFetcher: [{
184
- type: Input
185
- }], policyDocumentationFetcher: [{
186
- type: Input
187
- }], save: [{
188
- type: Output
189
- }] } });
190
- const getFlowsGroups = (commonFlows = [], plans = []) => {
191
- const commFlowsGroup = {
192
- _id: 'flowsGroup_commonFlow',
193
- name: 'Common flows',
194
- flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),
195
- };
196
- return [
197
- ...plans.map(plan => ({
198
- _id: uniqueId('flowsGroup_'),
199
- _icon: 'gio:shield',
200
- _planId: plan.id,
201
- name: plan.name,
202
- flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),
203
- })),
204
- commFlowsGroup,
205
- ];
206
- };
207
- const getCommonFlowsOutput = (flowsGroups, initialFlowsGroups) => {
208
- const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');
209
- const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');
210
- // Check if common flows have been updated
211
- const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);
212
- // Check if common flows have been deleted
213
- const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;
214
- return hasChanged || hasDeletedFlow ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : null;
215
- };
216
- const getPlansChangeOutput = (flowsGroups, initialFlowsGroups) => {
217
- const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');
218
- const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');
219
- // Get plans with changed flows
220
- const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));
221
- // Get plans with deleted flows
222
- const plansGroupsWithDeletedFlows = [];
223
- // Check if there are deleted flows in initial initialPlansGroups
224
- initialPlansGroups.forEach(plan => {
225
- const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);
226
- if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {
227
- // If there are deleted flows, we need to return the complete plan with the new flows
228
- plansGroupsWithDeletedFlows.push(planGroupToCompare);
229
- }
230
- });
231
- // Merge plans with changed flows and plans with deleted flows
232
- const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({
233
- ...omit(plan, '_id', '_icon', '_planId'),
234
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined
235
- id: plan._planId,
236
- flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged')),
237
- }));
238
- return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;
239
- };
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1zdHVkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcG9saWN5LXN0dWRpby1hbmd1bGFyL3NyYy9saWIvZ2lvLXBvbGljeS1zdHVkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcG9saWN5LXN0dWRpby1hbmd1bGFyL3NyYy9saWIvZ2lvLXBvbGljeS1zdHVkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQXFCbEQsTUFBTSxPQUFPLHdCQUF3QjtJQW9HbkMsWUFBNkIsbUJBQTJDO1FBQTNDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFuR3hFOztXQUVHO1FBRUksYUFBUSxHQUFHLEtBQUssQ0FBQztRQWN4Qjs7V0FFRztRQUVJLG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztRQUU3Qzs7V0FFRztRQUVJLGtCQUFhLEdBQW9CLEVBQUUsQ0FBQztRQUUzQzs7V0FFRztRQUVJLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRWhDOztXQUVHO1FBRUksVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUUxQjs7V0FFRztRQUVJLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFTL0I7O1dBRUc7UUFFSSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXZCOzs7V0FHRztRQUVJLHdCQUFt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LEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEcscUZBQXFGO1lBQ3JGLDJCQUEyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILDhEQUE4RDtJQUM5RCxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsMkJBQTJCLEVBQUUsR0FBRywyQkFBMkIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO1FBQ3hDLGdHQUFnRztRQUNoRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQVE7UUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDaEUsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAyMiBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBkaWZmZXJlbmNlQnksIGZsYXR0ZW4sIGlzRXF1YWwsIG9taXQsIHVuaW9uQnksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEVNUFRZLCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEFwaVR5cGUsXG4gIENvbm5lY3RvckluZm8sXG4gIEZsb3csXG4gIEZsb3dFeGVjdXRpb24sXG4gIFBsYW4sXG4gIFBvbGljeSxcbiAgUG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIsXG4gIFBvbGljeVNjaGVtYUZldGNoZXIsXG4gIFNhdmVPdXRwdXQsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEZsb3dHcm91cFZNLCBGbG93Vk0gfSBmcm9tICcuL2dpby1wb2xpY3ktc3R1ZGlvLm1vZGVsJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb1NlcnZpY2UgfSBmcm9tICcuL2dpby1wb2xpY3ktc3R1ZGlvLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tcG9saWN5LXN0dWRpbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tcG9saWN5LXN0dWRpby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1wb2xpY3ktc3R1ZGlvLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdpb1BvbGljeVN0dWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIE1heSBiZSBzZXQgdG8gYHRydWVgIGlmIHRoZSBBUEkgaXMgbm90IG1hbmFnZWFibGUgZnJvbSB0aGUgVUkgKGUuZy4ga3ViZXJuZXRlcyBvcGVyYXRvciBBUElzKVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFQSSB0eXBlIChyZXF1aXJlZClcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcGlUeXBlITogQXBpVHlwZTtcblxuICAvKipcbiAgICogRmxvdyBleGVjdXRpb24gY29uZmlnIChyZXF1aXJlZClcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmbG93RXhlY3V0aW9uITogRmxvd0V4ZWN1dGlvbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBlbnRyeXBvaW50cyB0byBkaXNwbGF5XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZW50cnlwb2ludHNJbmZvOiBDb25uZWN0b3JJbmZvW10gPSBbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBlbmRwb2ludHMgdG8gZGlzcGxheVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuZHBvaW50c0luZm86IENvbm5lY3RvckluZm9bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNvbW1vbiBmbG93cyB0byBhZGQgdG8gY29tbW9uIGZsb3dzIGdyb3VwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgY29tbW9uRmxvd3M6IEZsb3dbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBsYW5zIHdpdGggdGhlaXIgZmxvd3NcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwbGFuczogUGxhbltdID0gW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcG9saWNpZXMgdXNhYmxlIGluIHRoZSBwb2xpY3kgc3R1ZGlvXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcG9saWNpZXM6IFBvbGljeVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBwb2xpY3kgaXMgbm90IGF2YWlsYWJsZSB3aXRoIHRoZSBjdXJyZW50IGxpY2Vuc2UsXG4gICAqIHRoaXMgVVJMIGlzIHVzZWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHRyaWFsIHBhZ2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdHJpYWxVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvYWRpbmcgc3RhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIFBvbGljeSBTdHVkaW8gbmVlZHMgdG8gZmV0Y2ggdGhlIHBvbGljeSBzY2hlbWFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcG9saWN5IHNjaGVtYVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBvbGljeVNjaGVtYUZldGNoZXI6IFBvbGljeVNjaGVtYUZldGNoZXIgPSAoKSA9PiBFTVBUWTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gUG9saWN5IFN0dWRpbyBuZWVkcyB0byBmZXRjaCB0aGUgcG9saWN5IGRvY3VtZW50YXRpb25cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcG9saWN5IGRvY3VtZW50YXRpb25cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcjogUG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIgPSAoKSA9PiBFTVBUWTtcblxuICAvKipcbiAgICogUmV0dXJuIHdoYXQgaXMgbmVlZGVkIHRvIHNhdmUuXG4gICAqKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlT3V0cHV0PigpO1xuXG4gIHB1YmxpYyBjb25uZWN0b3JzVG9vbHRpcCA9ICcnO1xuXG4gIHB1YmxpYyBzZWxlY3RlZEZsb3c/OiBGbG93Vk0gPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGZsb3dzR3JvdXBzOiBGbG93R3JvdXBWTVtdID0gW107XG5cbiAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcblxuICBwdWJsaWMgc2F2aW5nID0gZmFsc2U7XG5cbiAgLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGluaXRpYWwgZmxvd3MgZ3JvdXBzIHRvIGtub3cgaWYgdGhlcmUgYXJlIGRlbGV0ZWQgZmxvd3NcbiAgcHJpdmF0ZSBpbml0aWFsRmxvd3NHcm91cHM6IEZsb3dHcm91cFZNW10gPSBbXTtcblxuICBwcml2YXRlIGhhc0Zsb3dFeGVjdXRpb25DaGFuZ2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1blNhdmluZ0J1dHRvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGVuYWJsZVNhdmluZ1RpbWVyID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBvbGljeVN0dWRpb1NlcnZpY2U6IEdpb1BvbGljeVN0dWRpb1NlcnZpY2UpIHt9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5lbnRyeXBvaW50c0luZm8gfHwgY2hhbmdlcy5lbmRwb2ludHNJbmZvKSB7XG4gICAgICB0aGlzLmNvbm5lY3RvcnNUb29sdGlwID0gYEVudHJ5cG9pbnRzOiAkeyh0aGlzLmVudHJ5cG9pbnRzSW5mbyA/PyBbXSkubWFwKGUgPT4gZS5uYW1lKS5qb2luKCcsICcpfVxcbkVuZHBvaW50czogJHsoXG4gICAgICAgIHRoaXMuZW5kcG9pbnRzSW5mbyA/PyBbXVxuICAgICAgKVxuICAgICAgICAubWFwKGUgPT4gZS5uYW1lKVxuICAgICAgICAuam9pbignLCAnKX1gO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmNvbW1vbkZsb3dzIHx8IGNoYW5nZXMucGxhbnMpIHtcbiAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xuICAgICAgdGhpcy5mbG93c0dyb3VwcyA9IGdldEZsb3dzR3JvdXBzKHRoaXMuY29tbW9uRmxvd3MsIHRoaXMucGxhbnMpO1xuICAgICAgdGhpcy5pbml0aWFsRmxvd3NHcm91cHMgPSBjbG9uZURlZXAodGhpcy5mbG93c0dyb3Vwcyk7XG5cbiAgICAgIC8vIFNlbGVjdCBmaXJzdCBmbG93IGJ5IGRlZmF1bHQgb24gZmlyc3QgbG9hZFxuICAgICAgdGhpcy5zZWxlY3RlZEZsb3cgPSBmbGF0dGVuKHRoaXMuZmxvd3NHcm91cHMubWFwKGZsb3dHcm91cCA9PiBmbG93R3JvdXAuZmxvd3MpKVswXTtcblxuICAgICAgLy8gUmVzZXQgc2F2aW5nIHN0YXRlIHdoZW4gZmxvd3NHcm91cHMgYXJlIHVwZGF0ZWRcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnVuU2F2aW5nQnV0dG9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnBvbGljeVNjaGVtYUZldGNoZXIpIHtcbiAgICAgIHRoaXMucG9saWN5U3R1ZGlvU2VydmljZS5zZXRQb2xpY3lTY2hlbWFGZXRjaGVyKHRoaXMucG9saWN5U2NoZW1hRmV0Y2hlcik7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMucG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIpIHtcbiAgICAgIHRoaXMucG9saWN5U3R1ZGlvU2VydmljZS5zZXRQb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcih0aGlzLnBvbGljeURvY3VtZW50YXRpb25GZXRjaGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51blNhdmluZ0J1dHRvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZsb3dFeGVjdXRpb25DaGFuZ2UoZmxvd0V4ZWN1dGlvbjogRmxvd0V4ZWN1dGlvbik6IHZvaWQge1xuICAgIHRoaXMuaGFzRmxvd0V4ZWN1dGlvbkNoYW5nZWQgPSAhaXNFcXVhbCh0aGlzLmZsb3dFeGVjdXRpb24sIGZsb3dFeGVjdXRpb24pO1xuICAgIGlmICh0aGlzLmhhc0Zsb3dFeGVjdXRpb25DaGFuZ2VkKSB7XG4gICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XG4gICAgICB0aGlzLmZsb3dFeGVjdXRpb24gPSBmbG93RXhlY3V0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZsb3dzR3JvdXBzQ2hhbmdlKGZsb3dzR3JvdXBzOiBGbG93R3JvdXBWTVtdKTogdm9pZCB7XG4gICAgdGhpcy5mbG93c0dyb3VwcyA9IGZsb3dzR3JvdXBzO1xuICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGVkRmxvd0NoYW5nZShmbG93OiBGbG93Vk0pOiB2b2lkIHtcbiAgICB0aGlzLmZsb3dzR3JvdXBzID0gdGhpcy5mbG93c0dyb3Vwcy5tYXAoZmxvd0dyb3VwID0+ICh7XG4gICAgICAuLi5mbG93R3JvdXAsXG4gICAgICBmbG93czogZmxvd0dyb3VwLmZsb3dzLm1hcChmID0+IChmLl9pZCA9PT0gZmxvdy5faWQgPyBmbG93IDogZikpLFxuICAgIH0pKTtcbiAgICB0aGlzLnNlbGVjdGVkRmxvdyA9IGZsb3c7XG4gICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlU2VsZWN0ZWRGbG93KGZsb3c6IEZsb3dWTSk6IHZvaWQge1xuICAgIC8vIERlZmluZSBuZXh0IHNlbGVjdGVkIGZsb3cgYW5kIHJlbW92ZSBmbG93IGZyb20gZmxvd3NHcm91cHNcbiAgICBjb25zdCBhbGxGbG93c0lkID0gZmxhdHRlbih0aGlzLmZsb3dzR3JvdXBzLm1hcChmbG93R3JvdXAgPT4gZmxvd0dyb3VwLmZsb3dzKSkubWFwKGYgPT4gZi5faWQpO1xuICAgIGNvbnN0IGZsb3dUb0RlbGV0ZUluZGV4ID0gYWxsRmxvd3NJZC5pbmRleE9mKGZsb3cuX2lkKTtcbiAgICBjb25zdCBuZXh0U2VsZWN0ZWRGbG93ID0gYWxsRmxvd3NJZFtmbG93VG9EZWxldGVJbmRleCArIDFdID8/IGFsbEZsb3dzSWRbZmxvd1RvRGVsZXRlSW5kZXggLSAxXTtcbiAgICB0aGlzLmZsb3dzR3JvdXBzID0gdGhpcy5mbG93c0dyb3Vwcy5tYXAoZmxvd0dyb3VwID0+ICh7XG4gICAgICAuLi5mbG93R3JvdXAsXG4gICAgICBmbG93czogZmxvd0dyb3VwLmZsb3dzLmZpbHRlcihmID0+IGYuX2lkICE9PSBmbG93Ll9pZCksXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZEZsb3cgPSBmbGF0dGVuKHRoaXMuZmxvd3NHcm91cHMubWFwKGZsb3dHcm91cCA9PiBmbG93R3JvdXAuZmxvd3MpKS5maW5kKGYgPT4gZi5faWQgPT09IG5leHRTZWxlY3RlZEZsb3cpO1xuXG4gICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICAvLyBFbWl0IGNvbW1vbiBmbG93cyBvbmx5IGlmIHRoZXkgaGF2ZSBiZWVuIHVwZGF0ZWRcbiAgICBjb25zdCBjb21tb25GbG93cyA9IGdldENvbW1vbkZsb3dzT3V0cHV0KHRoaXMuZmxvd3NHcm91cHMsIHRoaXMuaW5pdGlhbEZsb3dzR3JvdXBzKTtcblxuICAgIC8vIEVtaXQgcGxhbnMgb25seSBpZiB0aGV5IGhhdmUgYmVlbiB1cGRhdGVkXG4gICAgY29uc3QgcGxhbnNUb1VwZGF0ZSA9IGdldFBsYW5zQ2hhbmdlT3V0cHV0KHRoaXMuZmxvd3NHcm91cHMsIHRoaXMuaW5pdGlhbEZsb3dzR3JvdXBzKTtcblxuICAgIHRoaXMuc2F2ZS5lbWl0KHtcbiAgICAgIC4uLihjb21tb25GbG93cyA/IHsgY29tbW9uRmxvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihwbGFuc1RvVXBkYXRlID8geyBwbGFuc1RvVXBkYXRlIH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5oYXNGbG93RXhlY3V0aW9uQ2hhbmdlZCA/IHsgZmxvd0V4ZWN1dGlvbjogdGhpcy5mbG93RXhlY3V0aW9uIH0gOiB7fSksXG4gICAgfSk7XG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy51blNhdmluZ0J1dHRvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVTYXZpbmdUaW1lcikge1xuICAgICAgdGhpcy51blNhdmluZ0J1dHRvblN1YnNjcmlwdGlvbiA9IHRpbWVyKDUwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZ2V0Rmxvd3NHcm91cHMgPSAoY29tbW9uRmxvd3M6IEZsb3dbXSA9IFtdLCBwbGFuczogUGxhbltdID0gW10pOiBGbG93R3JvdXBWTVtdID0+IHtcbiAgY29uc3QgY29tbUZsb3dzR3JvdXA6IEZsb3dHcm91cFZNID0ge1xuICAgIF9pZDogJ2Zsb3dzR3JvdXBfY29tbW9uRmxvdycsXG4gICAgbmFtZTogJ0NvbW1vbiBmbG93cycsXG4gICAgZmxvd3M6IGNvbW1vbkZsb3dzLm1hcChmbG93ID0+ICh7IC4uLmZsb3csIF9pZDogdW5pcXVlSWQoJ2Zsb3dfJyksIF9oYXNDaGFuZ2VkOiBmYWxzZSB9KSksXG4gIH07XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5wbGFucy5tYXAocGxhbiA9PiAoe1xuICAgICAgX2lkOiB1bmlxdWVJZCgnZmxvd3NHcm91cF8nKSxcbiAgICAgIF9pY29uOiAnZ2lvOnNoaWVsZCcsXG4gICAgICBfcGxhbklkOiBwbGFuLmlkLFxuICAgICAgbmFtZTogcGxhbi5uYW1lLFxuICAgICAgZmxvd3M6IHBsYW4uZmxvd3MubWFwKGZsb3cgPT4gKHsgLi4uZmxvdywgX2lkOiB1bmlxdWVJZCgnZmxvd18nKSwgX2hhc0NoYW5nZWQ6IGZhbHNlIH0pKSxcbiAgICB9KSksXG4gICAgY29tbUZsb3dzR3JvdXAsXG4gIF07XG59O1xuXG5jb25zdCBnZXRDb21tb25GbG93c091dHB1dCA9IChmbG93c0dyb3VwczogRmxvd0dyb3VwVk1bXSwgaW5pdGlhbEZsb3dzR3JvdXBzOiBGbG93R3JvdXBWTVtdKTogRmxvd1tdIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNvbW1vbkZsb3dzR3JvdXAgPSBmbG93c0dyb3Vwcy5maW5kKGZsb3dHcm91cCA9PiBmbG93R3JvdXAuX2lkID09PSAnZmxvd3NHcm91cF9jb21tb25GbG93Jyk7XG4gIGNvbnN0IGluaXRpYWxDb21tb25GbG93c0dyb3VwID0gaW5pdGlhbEZsb3dzR3JvdXBzLmZpbmQoZmxvd0dyb3VwID0+IGZsb3dHcm91cC5faWQgPT09ICdmbG93c0dyb3VwX2NvbW1vbkZsb3cnKTtcbiAgLy8gQ2hlY2sgaWYgY29tbW9uIGZsb3dzIGhhdmUgYmVlbiB1cGRhdGVkXG4gIGNvbnN0IGhhc0NoYW5nZWQgPSBjb21tb25GbG93c0dyb3VwPy5mbG93cy5zb21lKGZsb3cgPT4gZmxvdy5faGFzQ2hhbmdlZCk7XG5cbiAgLy8gQ2hlY2sgaWYgY29tbW9uIGZsb3dzIGhhdmUgYmVlbiBkZWxldGVkXG4gIGNvbnN0IGhhc0RlbGV0ZWRGbG93ID0gZGlmZmVyZW5jZUJ5KGluaXRpYWxDb21tb25GbG93c0dyb3VwPy5mbG93cyA/PyBbXSwgY29tbW9uRmxvd3NHcm91cD8uZmxvd3MgPz8gW10sICdfaWQnKS5sZW5ndGggPiAwO1xuXG4gIHJldHVybiBoYXNDaGFuZ2VkIHx8IGhhc0RlbGV0ZWRGbG93ID8gKGNvbW1vbkZsb3dzR3JvdXA/LmZsb3dzID8/IFtdKS5tYXAoZmxvdyA9PiBvbWl0KGZsb3csICdfaWQnLCAnX2hhc0NoYW5nZWQnKSkgOiBudWxsO1xufTtcblxuY29uc3QgZ2V0UGxhbnNDaGFuZ2VPdXRwdXQgPSAoZmxvd3NHcm91cHM6IEZsb3dHcm91cFZNW10sIGluaXRpYWxGbG93c0dyb3VwczogRmxvd0dyb3VwVk1bXSk6IFBsYW5bXSB8IG51bGwgPT4ge1xuICBjb25zdCBwbGFuc0dyb3VwcyA9IGZsb3dzR3JvdXBzLmZpbHRlcihmbG93R3JvdXAgPT4gZmxvd0dyb3VwLl9pZCAhPT0gJ2Zsb3dzR3JvdXBfY29tbW9uRmxvdycpO1xuICBjb25zdCBpbml0aWFsUGxhbnNHcm91cHMgPSBpbml0aWFsRmxvd3NHcm91cHMuZmlsdGVyKGZsb3dHcm91cCA9PiBmbG93R3JvdXAuX2lkICE9PSAnZmxvd3NHcm91cF9jb21tb25GbG93Jyk7XG5cbiAgLy8gR2V0IHBsYW5zIHdpdGggY2hhbmdlZCBmbG93c1xuICBjb25zdCBwbGFuc0dyb3Vwc1dpdGhDaGFuZ2VkRmxvd3MgPSBwbGFuc0dyb3Vwcy5maWx0ZXIocGxhbiA9PiBwbGFuLmZsb3dzLnNvbWUoZmxvdyA9PiBmbG93Ll9oYXNDaGFuZ2VkKSk7XG5cbiAgLy8gR2V0IHBsYW5zIHdpdGggZGVsZXRlZCBmbG93c1xuICBjb25zdCBwbGFuc0dyb3Vwc1dpdGhEZWxldGVkRmxvd3M6IEZsb3dHcm91cFZNW10gPSBbXTtcblxuICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZGVsZXRlZCBmbG93cyBpbiBpbml0aWFsIGluaXRpYWxQbGFuc0dyb3Vwc1xuICBpbml0aWFsUGxhbnNHcm91cHMuZm9yRWFjaChwbGFuID0+IHtcbiAgICBjb25zdCBwbGFuR3JvdXBUb0NvbXBhcmUgPSBwbGFuc0dyb3Vwcy5maW5kKHAgPT4gcC5fcGxhbklkID09PSBwbGFuLl9wbGFuSWQpO1xuICAgIGlmIChwbGFuR3JvdXBUb0NvbXBhcmUgJiYgZGlmZmVyZW5jZUJ5KHBsYW4uZmxvd3MsIHBsYW5Hcm91cFRvQ29tcGFyZT8uZmxvd3MgPz8gW10sICdfaWQnKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgZGVsZXRlZCBmbG93cywgd2UgbmVlZCB0byByZXR1cm4gdGhlIGNvbXBsZXRlIHBsYW4gd2l0aCB0aGUgbmV3IGZsb3dzXG4gICAgICBwbGFuc0dyb3Vwc1dpdGhEZWxldGVkRmxvd3MucHVzaChwbGFuR3JvdXBUb0NvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTWVyZ2UgcGxhbnMgd2l0aCBjaGFuZ2VkIGZsb3dzIGFuZCBwbGFucyB3aXRoIGRlbGV0ZWQgZmxvd3NcbiAgY29uc3QgcGxhbnNXaXRoQ2hhbmdlZEZsb3dzT3V0cHV0ID0gdW5pb25CeShbLi4ucGxhbnNHcm91cHNXaXRoQ2hhbmdlZEZsb3dzLCAuLi5wbGFuc0dyb3Vwc1dpdGhEZWxldGVkRmxvd3NdLCAnX3BsYW5JZCcpLm1hcChwbGFuID0+ICh7XG4gICAgLi4ub21pdChwbGFuLCAnX2lkJywgJ19pY29uJywgJ19wbGFuSWQnKSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiAtLSBwbGFuSWQgaXMgYWx3YXlzIGRlZmluZWRcbiAgICBpZDogcGxhbi5fcGxhbklkISxcbiAgICBmbG93czogcGxhbi5mbG93cy5tYXAoZmxvdyA9PiBvbWl0KGZsb3csICdfaWQnLCAnX2hhc0NoYW5nZWQnKSksXG4gIH0pKTtcblxuICByZXR1cm4gcGxhbnNXaXRoQ2hhbmdlZEZsb3dzT3V0cHV0Lmxlbmd0aCA+IDAgPyBwbGFuc1dpdGhDaGFuZ2VkRmxvd3NPdXRwdXQgOiBudWxsO1xufTtcbiIsIjwhLS1cblxuICAgIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi0tPlxuXG48ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXJfX2FwaUluZm9cIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRpbmdBcGlJbmZvXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnaW8tYmFkZ2UtcHJpbWFyeVwiPlxuICAgICAge3sgYXBpVHlwZSB8IHRpdGxlY2FzZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJnaW8tYmFkZ2UtbmV1dHJhbFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJjb25uZWN0b3JzVG9vbHRpcFwiXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICBtYXRUb29sdGlwQ2xhc3M9XCJnaW8tcG9saWN5LXN0dWRpb19fdG9vbHRpcC1saW5lLWJyZWFrXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gKm5nRm9yPVwibGV0IGVudHJ5cG9pbnQgb2YgZW50cnlwb2ludHNJbmZvXCIgY2xhc3M9XCJnaW8tbGVmdFwiIFtzdmdJY29uXT1cImVudHJ5cG9pbnQuaWNvblwiPjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb24gKm5nRm9yPVwibGV0IGVuZHBvaW50IG9mIGVuZHBvaW50c0luZm9cIiBjbGFzcz1cImdpby1sZWZ0XCIgW3N2Z0ljb25dPVwiZW5kcG9pbnQuaWNvblwiPjwvbWF0LWljb24+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNsb2FkaW5nQXBpSW5mbz5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyX19hcGlJbmZvXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImdpby1iYWRnZS1wcmltYXJ5XCI+Jm5ic3A7PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJnaW8tYmFkZ2UtbmV1dHJhbFwiPiZuYnNwOzwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyX19idG5cIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiIXNhdmluZ1wiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBkaXNhYmxlU2F2ZUJ1dHRvblwiIChjbGljayk9XCJvblNhdmUoKVwiPlNhdmU8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwic2F2aW5nXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGRpc2FibGVkPlNhdmluZy4uLjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICA8ZGl2IGNsYXNzPVwid3JhcHBlcl9fZmxvd3NNZW51XCI+XG4gICAgPGdpby1wcy1mbG93cy1tZW51XG4gICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICBbYXBpVHlwZV09XCJhcGlUeXBlXCJcbiAgICAgIFtmbG93RXhlY3V0aW9uXT1cImZsb3dFeGVjdXRpb25cIlxuICAgICAgW2Zsb3dzR3JvdXBzXT1cImZsb3dzR3JvdXBzXCJcbiAgICAgIFtlbnRyeXBvaW50c109XCJlbnRyeXBvaW50c0luZm9cIlxuICAgICAgKGZsb3dzR3JvdXBzQ2hhbmdlKT1cIm9uRmxvd3NHcm91cHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoZmxvd0V4ZWN1dGlvbkNoYW5nZSk9XCJvbkZsb3dFeGVjdXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbKHNlbGVjdGVkRmxvdyldPVwic2VsZWN0ZWRGbG93XCJcbiAgICA+PC9naW8tcHMtZmxvd3MtbWVudT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIndyYXBwZXJfX2Zsb3dEZXRhaWxzXCI+XG4gICAgPGdpby1wcy1mbG93LWRldGFpbHNcbiAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXG4gICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgIFthcGlUeXBlXT1cImFwaVR5cGVcIlxuICAgICAgW2Zsb3ddPVwic2VsZWN0ZWRGbG93XCJcbiAgICAgIFtlbnRyeXBvaW50c0luZm9dPVwiZW50cnlwb2ludHNJbmZvXCJcbiAgICAgIFtlbmRwb2ludHNJbmZvXT1cImVuZHBvaW50c0luZm9cIlxuICAgICAgW3BvbGljaWVzXT1cInBvbGljaWVzXCJcbiAgICAgIFt0cmlhbFVybF09XCJ0cmlhbFVybFwiXG4gICAgICAoZmxvd0NoYW5nZSk9XCJvblNlbGVjdGVkRmxvd0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChkZWxldGVGbG93KT1cIm9uRGVsZXRlU2VsZWN0ZWRGbG93KCRldmVudClcIlxuICAgID48L2dpby1wcy1mbG93LWRldGFpbHM+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,17 +0,0 @@
1
- /*
2
- * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export {};
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1zdHVkaW8ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wb2xpY3ktc3R1ZGlvLWFuZ3VsYXIvc3JjL2xpYi9naW8tcG9saWN5LXN0dWRpby5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjIgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZsb3cgfSBmcm9tICcuL21vZGVscyc7XG5cbi8vIE1vZGVsIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcG9uZW50IGFuZCBpdCdzIGNoaWxkcmVuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dWTSBleHRlbmRzIEZsb3cge1xuICBfaWQ6IHN0cmluZztcbiAgX2hhc0NoYW5nZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEZsb3dHcm91cFZNIHtcbiAgX2lkOiBzdHJpbmc7XG4gIF9pY29uPzogc3RyaW5nO1xuICBfcGxhbklkPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZsb3dzOiBGbG93Vk1bXTtcbn1cbiJdfQ==