@gravitee/ui-policy-studio-angular 7.8.0 → 7.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog-result.model.mjs +17 -0
- package/esm2020/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.mjs +60 -0
- package/esm2020/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +28 -3
- package/esm2020/lib/gio-policy-studio.component.mjs +15 -4
- package/esm2020/lib/gio-policy-studio.module.mjs +12 -2
- package/esm2020/lib/models/SaveOutput.mjs +1 -1
- package/esm2020/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.mjs +60 -0
- package/esm2020/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +4 -1
- package/esm2020/testing/lib/gio-policy-studio.harness.mjs +8 -1
- package/esm2020/testing/lib/models/SaveOutput.mjs +1 -1
- package/esm2020/testing/lib/models/flow/FlowExecution.fixture.mjs +43 -0
- package/esm2020/testing/lib/models/flow/index-testing.mjs +2 -1
- package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs +99 -1
- package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
- package/fesm2015/gravitee-ui-policy-studio-angular.mjs +98 -11
- package/fesm2015/gravitee-ui-policy-studio-angular.mjs.map +1 -1
- package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs +109 -1
- package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
- package/fesm2020/gravitee-ui-policy-studio-angular.mjs +100 -10
- package/fesm2020/gravitee-ui-policy-studio-angular.mjs.map +1 -1
- package/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog-result.model.d.ts +2 -0
- package/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.d.ts +17 -0
- package/lib/components/flows-menu/gio-ps-flows-menu.component.d.ts +5 -2
- package/lib/gio-policy-studio.component.d.ts +5 -2
- package/lib/gio-policy-studio.module.d.ts +18 -16
- package/lib/models/SaveOutput.d.ts +2 -1
- package/package.json +1 -1
- package/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.d.ts +13 -0
- package/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.d.ts +1 -0
- package/testing/lib/gio-policy-studio.harness.d.ts +2 -1
- package/testing/lib/models/SaveOutput.d.ts +2 -1
- package/testing/lib/models/flow/FlowExecution.fixture.d.ts +3 -0
- package/testing/lib/models/flow/index-testing.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.module.ts","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\n * Copyright (C) 2023 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 * API's flow mode.\n */\nexport type FlowMode = 'BEST_MATCH' | 'DEFAULT';\n\nexport interface FlowExecution {\n mode?: FlowMode;\n /**\n * Is the flow execution match required.\n */\n matchRequired?: boolean;\n}\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\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n\nexport const toHttpMethod: (value: string) => HttpMethod | undefined = (value: string) => {\n switch (value) {\n case 'CONNECT':\n return 'CONNECT';\n case 'DELETE':\n return 'DELETE';\n case 'GET':\n return 'GET';\n case 'HEAD':\n return 'HEAD';\n case 'OPTIONS':\n return 'OPTIONS';\n case 'PATCH':\n return 'PATCH';\n case 'POST':\n return 'POST';\n case 'PUT':\n return 'PUT';\n case 'TRACE':\n return 'TRACE';\n case 'OTHER':\n return 'OTHER';\n default:\n return undefined;\n }\n};\n","/*\n * Copyright (C) 2022 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 */\nexport * from './ApiType';\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\n","/*\n * Copyright (C) 2022 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\nimport { Flow } from '../flow';\n\nexport interface Plan {\n id: string;\n name: string;\n flows: Flow[];\n}\n","/*\n * Copyright (C) 2023 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 */\nexport * from './Plan';\n","/*\n * Copyright (C) 2022 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 */\nexport * from './flow';\nexport * from './plan';\n\nexport * from './ConnectorsInfo';\nexport * from './SaveOutput';\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: string[];\n};\n\n@Component({\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: string[] = [];\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new FormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new FormControl(channelSelector?.channel ?? ''),\n operations: new FormControl(channelSelector?.operations ?? []),\n entrypoints: new FormControl(channelSelector?.entrypoints ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const channelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [channelSelectorToSave, conditionSelectorToSave] : [channelSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\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<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint\">{{ entrypoint }}</mat-option>\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new FormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new FormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new FormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\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<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matPrefix>/</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector, ConnectorsInfo, HttpSelector, Operation } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-info-bar',\n templateUrl: './gio-ps-flow-details-info-bar.component.html',\n styleUrls: ['./gio-ps-flow-details-info-bar.component.scss'],\n})\nexport class GioPolicyStudioDetailsInfoBarComponent {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n public get condition(): string | undefined {\n const conditionSelector = this.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (!conditionSelector) {\n return undefined;\n }\n return conditionSelector?.condition;\n }\n\n // MESSAGE API type\n\n public get operations(): string[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n return channelSelector?.operations?.map(o => operationToBadge[o]).sort();\n }\n\n public get channel(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channel;\n }\n\n public get channelOperator(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channelOperator;\n }\n\n // PROXY API type\n\n public get path(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.path;\n }\n\n public get pathOperator(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.pathOperator;\n }\n\n public get methods(): string[] | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.methods?.length ? httpSelector?.methods : ['ALL'];\n }\n}\n","<!--\n\n Copyright (C) 2023 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<div *ngIf=\"flow?.name\" class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n</div>\n\n<div *ngIf=\"entrypointsInfo\" class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n <span *ngFor=\"let entrypoint of entrypointsInfo\" class=\"info__value gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</span\n >\n</div>\n\n<!-- MESSAGE API type -->\n\n<div *ngIf=\"operations\" class=\"info\">\n <span class=\"info__label\">Operations</span>\n <span *ngFor=\"let operation of operations\" class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n</div>\n\n<div *ngIf=\"channel\" class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n</div>\n\n<div *ngIf=\"channelOperator\" class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n</div>\n\n<!-- PROXY API type -->\n\n<div *ngIf=\"path\" class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n</div>\n\n<div *ngIf=\"pathOperator\" class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n</div>\n\n<div *ngIf=\"methods\" class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n <span *ngFor=\"let method of methods\" class=\"info__value gio-badge-neutral\"> {{ method }}</span>\n</div>\n\n<!-- Condition -->\n\n<div *ngIf=\"condition\" class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral\">{{ condition }}</span>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { ConnectorsInfo, Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase',\n templateUrl: './gio-ps-flow-details-phase.component.html',\n styleUrls: ['./gio-ps-flow-details-phase.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseComponent {\n @Input()\n public steps?: Step[] = undefined;\n\n @Input()\n public name!: string;\n\n @Input()\n public description!: string;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n}\n","<!--\n\n Copyright (C) 2023 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 <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"content\">\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let entrypoint of entrypointsInfo\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</ng-container\n >\n </span>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <button mat-icon-button>\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let endpoint of endpointsInfo\">\n <mat-icon [svgIcon]=\"endpoint.icon\"></mat-icon>\n {{ endpoint.type }}</ng-container\n >\n </span>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType, ConnectorsInfo } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\n@Component({\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public onEditFlow(): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: (this.entrypointsInfo ?? []).map(e => e.type),\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n}\n","<!--\n\n Copyright (C) 2023 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<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>🚧 Work in progress 🚧</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"apiType === 'PROXY'\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </div>\n </div>\n</ng-container>\n\n<ng-template #emptyFlows>\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n</ng-template>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';\nimport { ApiType, ChannelSelector, HttpSelector, Operation } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel: string;\n}\n\n@Component({\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: string[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n public flowsGroupsVMSelected: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\n this.flowsGroupsVMSelected = cloneDeep(this.flowsGroups).map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel = '';\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n const operationBadges = (channelSelector.operations ?? [])\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n return {\n ...flow,\n selected: this.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n };\n }),\n };\n });\n }\n }\n\n public selectFlow(groupId: string, flowId: string): void {\n const flow = this.flowsGroups.find(fg => fg._id === groupId)?.flows.find(f => f._id === flowId);\n if (flow) {\n this.selectedFlowChange.emit(flow);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n}\n","<!--\n\n Copyright (C) 2023 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__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n <div class=\"header__configBtn\">\n <button mat-stroked-button mat-icon-button><mat-icon svgIcon=\"gio:settings\"></mat-icon></button>\n </div>\n</div>\n\n<div class=\"list\">\n <div *ngFor=\"let flowsGroup of flowsGroupsVMSelected\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-icon-button (click)=\"onAddFlow(flowsGroup)\"><mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon></button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">{{ flow.pathOrChannelLabel }}</div>\n </div>\n </div>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { capitalize, cloneDeep, differenceBy, flatten, omit, unionBy, uniqueId } from 'lodash';\n\nimport { ApiType, ConnectorsInfo, Flow, Plan, SaveOutput } from './models';\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\n\n@Component({\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public commonFlows: Flow[] = [];\n\n @Input()\n public plans: Plan[] = [];\n\n /**\n * Return what is needed to save.\n **/\n @Output()\n public save = new EventEmitter<SaveOutput>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public entrypointsType: string[] = [];\n\n public disableSaveButton = true;\n\n // Used to keep track of initial flows groups to know if there are deleted flows\n private initialFlowsGroups: FlowGroupVM[] = [];\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => capitalize(e.type)).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => capitalize(e.type))\n .join(', ')}`;\n\n this.entrypointsType = (this.entrypointsInfo ?? []).map(e => e.type);\n }\n\n if (changes.commonFlows || changes.plans) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n\n // Select first flow by default on first load\n if (changes.commonFlows?.isFirstChange() || changes.plans?.isFirstChange()) {\n this.selectedFlow = this.flowsGroups[0].flows[0];\n }\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = flowsGroups;\n this.disableSaveButton = false;\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlow = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);\n\n // Emit plans only if they have been updated\n const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);\n\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n });\n }\n}\n\nconst getFlowsGroups = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n _planId: plan.id,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n // Check if common flows have been updated\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n // Check if common flows have been deleted\n const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;\n\n return hasChanged || hasDeletedFlow ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n\n // Get plans with changed flows\n const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));\n\n // Get plans with deleted flows\n const plansGroupsWithDeletedFlows: FlowGroupVM[] = [];\n\n // Check if there are deleted flows in initial initialPlansGroups\n initialPlansGroups.forEach(plan => {\n const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);\n if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {\n // If there are deleted flows, we need to return the complete plan with the new flows\n plansGroupsWithDeletedFlows.push(planGroupToCompare);\n }\n });\n\n // Merge plans with changed flows and plans with deleted flows\n const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({\n ...omit(plan, '_id', '_icon', '_planId'),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined\n id: plan._planId!,\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\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\">\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\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsType\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase-policy',\n templateUrl: './gio-ps-flow-details-phase-policy.component.html',\n styleUrls: ['./gio-ps-flow-details-phase-policy.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhasePolicyComponent {\n @Input()\n public step?: Step = undefined;\n}\n","<!--\n\n Copyright (C) 2023 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🚧 Work in progress 🚧\n","/*\n * Copyright (C) 2022 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 */\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioBannerModule, GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { GioPolicyStudioFlowMessageFormDialogComponent } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { GioPolicyStudioDetailsComponent } from './components/flow-details/gio-ps-flow-details.component';\nimport { GioPolicyStudioFlowsMenuComponent } from './components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioComponent } from './gio-policy-studio.component';\nimport { GioPolicyStudioFlowProxyFormDialogComponent } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioDetailsInfoBarComponent } from './components/flow-details-info-bar/gio-ps-flow-details-info-bar.component';\nimport { GioPolicyStudioDetailsPhasePolicyComponent } from './components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component';\nimport { GioPolicyStudioDetailsPhaseComponent } from './components/flow-details-phase/gio-ps-flow-details-phase.component';\n\n@NgModule({\n declarations: [\n GioPolicyStudioComponent,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioDetailsInfoBarComponent,\n GioPolicyStudioDetailsPhaseComponent,\n GioPolicyStudioDetailsPhasePolicyComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n MatTabsModule,\n\n GioIconsModule,\n GioFormTagsInputModule,\n GioBannerModule,\n ],\n exports: [GioPolicyStudioComponent],\n})\nexport class GioPolicyStudioModule {}\n","/*\n * Copyright (C) 2022 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 * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioModule } from './lib/gio-policy-studio.module';\nexport { GioPolicyStudioComponent } from './lib/gio-policy-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;MAgBa,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAW;MAGjH,YAAY,GAA8C,CAAC,KAAa;IACnF,QAAQ,KAAK;QACX,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,SAAS,CAAC;KACpB;AACH;;AC5CA;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;MAkCa,6CAA6C;IAOxD,YACS,SAA2G,EACzF,cAAwD;QAD1E,cAAS,GAAT,SAAS,CAAkG;QAP7G,gBAAW,GAAa,EAAE,CAAC;QAI3B,SAAI,GAAsB,QAAQ,CAAC;QAMxC,IAAI,CAAC,WAAW,GAAG,cAAc,EAAE,WAAW,IAAI,EAAE,CAAC;QAErD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;QAElD,MAAM,eAAe,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAoB,CAAC;QAC5G,MAAM,iBAAiB,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAsB,CAAC;QAElH,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC;YACjC,IAAI,EAAE,IAAI,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACvD,eAAe,EAAE,IAAI,WAAW,CAAC,eAAe,EAAE,eAAe,IAAI,QAAQ,CAAC;YAC9E,OAAO,EAAE,IAAI,WAAW,CAAC,eAAe,EAAE,OAAO,IAAI,EAAE,CAAC;YACxD,UAAU,EAAE,IAAI,WAAW,CAAC,eAAe,EAAE,UAAU,IAAI,EAAE,CAAC;YAC9D,WAAW,EAAE,IAAI,WAAW,CAAC,eAAe,EAAE,WAAW,IAAI,EAAE,CAAC;YAChE,SAAS,EAAE,IAAI,WAAW,CAAC,iBAAiB,EAAE,SAAS,IAAI,EAAE,CAAC;SAC/D,CAAC,CAAC;KACJ;IAEM,QAAQ;QACb,MAAM,qBAAqB,GAAoB;YAC7C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK;YAClD,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK;YAClE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK;YACxD,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK;SAC3D,CAAC;QAEF,MAAM,cAAc,GAAW,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAC3E,MAAM,uBAAuB,GAAkC,cAAc;cACzE;gBACE,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,cAAc;aAC1B;cACD,SAAS,CAAC;QAEd,MAAM,UAAU,GAAW;;YAEzB,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC;;YAEtB,GAAG,IAAI,CAAC,YAAY;;YAEpB,WAAW,EAAE,IAAI;;YAEjB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK;YAC5C,SAAS,EAAE,uBAAuB,GAAG,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,GAAG,CAAC,qBAAqB,CAAC;YAC/G,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACnB,GAAG,UAAU;SACd,CAAC,CAAC;KACJ;;2IA9DU,6CAA6C,8CAS9C,eAAe;+HATd,6CAA6C,uEClC1D,y5GAuFA;4FDrDa,6CAA6C;kBALzD,SAAS;+BACE,iCAAiC;;0BAaxC,MAAM;2BAAC,eAAe;;;AE3C3B;;;;;;;;;;;;;;;AA8BA,MAAM,oBAAoB,GAAmB,CAAC,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC;MAOxD,2CAA2C;IAOtD,YACS,SAAyG,EACvF,cAAsD;QADxE,cAAS,GAAT,SAAS,CAAgG;QAJ3G,SAAI,GAAsB,QAAQ,CAAC;QACnC,YAAO,GAAG,oBAAoB,CAAC;QAMpC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;QAElD,MAAM,YAAY,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAiB,CAAC;QACnG,MAAM,iBAAiB,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAsB,CAAC;QAElH,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC;YACjC,IAAI,EAAE,IAAI,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACvD,YAAY,EAAE,IAAI,WAAW,CAAC,YAAY,EAAE,YAAY,IAAI,QAAQ,CAAC;YACrE,IAAI,EAAE,IAAI,WAAW,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAChE,OAAO,EAAE,IAAI,WAAW,CAAC,uBAAuB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACxE,SAAS,EAAE,IAAI,WAAW,CAAC,iBAAiB,EAAE,SAAS,IAAI,EAAE,CAAC;SAC/D,CAAC,CAAC;KACJ;IAEM,QAAQ;QACb,MAAM,kBAAkB,GAAiB;YACvC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK;YAC5D,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;SACpE,CAAC;QAEF,MAAM,cAAc,GAAW,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAC3E,MAAM,uBAAuB,GAAkC,cAAc;cACzE;gBACE,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,cAAc;aAC1B;cACD,SAAS,CAAC;QAEd,MAAM,UAAU,GAAW;;YAEzB,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC;;YAEtB,GAAG,IAAI,CAAC,YAAY;;YAEpB,WAAW,EAAE,IAAI;;YAEjB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK;YAC5C,SAAS,EAAE,uBAAuB,GAAG,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACzG,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACnB,GAAG,UAAU;SACd,CAAC,CAAC;KACJ;IAEM,iBAAiB,CAAC,GAAW,EAAE,YAA6C;QACjF,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;KACjF;;yIA9DU,2CAA2C,8CAS5C,eAAe;6HATd,2CAA2C,qECrCxD,s9FAiFA;4FD5Ca,2CAA2C;kBALvD,SAAS;+BACE,+BAA+B;;0BAatC,MAAM;2BAAC,eAAe;;AAwD3B,MAAM,eAAe,GAA4C,CAAC,KAAsB;IACtF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,OAAO,KAAqB,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAA+C,CAAC,OAAsB;IACjG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QAClC,OAAO,IAAI,IAAI,EAAE,CAAC;KACnB;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAwB;IACrD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IACD,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;;AE5HD;;;;;;;;;;;;;;;MAyBa,sCAAsC;IALnD;QAOS,SAAI,GAAY,SAAS,CAAC;QAG1B,oBAAe,GAAqB,EAAE,CAAC;KAiE/C;IA/DC,IAAW,SAAS;QAClB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAsB,CAAC;QACvG,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,iBAAiB,EAAE,SAAS,CAAC;KACrC;;IAID,IAAW,UAAU;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAoB,CAAC;QACjG,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,gBAAgB,GAA8B;YAClD,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;SACjB,CAAC;QACF,OAAO,eAAe,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAC1E;IAED,IAAW,OAAO;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAoB,CAAC;QACjG,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,eAAe,EAAE,OAAO,CAAC;KACjC;IAED,IAAW,eAAe;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAoB,CAAC;QACjG,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,eAAe,EAAE,eAAe,CAAC;KACzC;;IAID,IAAW,IAAI;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAiB,CAAC;QACxF,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,YAAY,EAAE,IAAI,CAAC;KAC3B;IAED,IAAW,YAAY;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAiB,CAAC;QACxF,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,YAAY,EAAE,YAAY,CAAC;KACnC;IAED,IAAW,OAAO;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAiB,CAAC;QACxF,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;KACxE;;oIArEU,sCAAsC;wHAAtC,sCAAsC,kICzBnD,q6EAsEA;4FD7Ca,sCAAsC;kBALlD,SAAS;+BACE,8BAA8B;8BAMjC,IAAI;sBADV,KAAK;gBAIC,eAAe;sBADrB,KAAK;;;AE7BR;;;;;;;;;;;;;;;MAwBa,oCAAoC;IALjD;QAOS,UAAK,GAAY,SAAS,CAAC;QAS3B,oBAAe,GAAqB,EAAE,CAAC;QAGvC,kBAAa,GAAqB,EAAE,CAAC;KAC7C;;kIAfY,oCAAoC;sHAApC,oCAAoC,2MCxBjD,4pDAoDA;4FD5Ba,oCAAoC;kBALhD,SAAS;+BACE,2BAA2B;8BAM9B,KAAK;sBADX,KAAK;gBAIC,IAAI;sBADV,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,eAAe;sBADrB,KAAK;gBAIC,aAAa;sBADnB,KAAK;;;AErCR;;;;;;;;;;;;;;;MAoCa,+BAA+B;IAmB1C,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAd1C,SAAI,GAAY,SAAS,CAAC;QAG1B,oBAAe,GAAqB,EAAE,CAAC;QAGvC,kBAAa,GAAqB,EAAE,CAAC;QAGrC,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;QAGxC,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;KAEM;IAE9C,UAAU;QACf,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,KAAK,SAAS;cACtB,IAAI,CAAC,SAAS;iBACX,IAAI,CAIH,6CAA6C,EAAE;gBAC/C,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;iBAC3D;gBACD,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,4BAA4B;aACjC,CAAC;iBACD,WAAW,EAAE;cAChB,IAAI,CAAC,SAAS;iBACX,IAAI,CACH,2CAA2C,EAC3C;gBACE,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB;gBACD,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,0BAA0B;aAC/B,CACF;iBACA,WAAW,EAAE,CAAC;QAEvB,YAAY;aACT,IAAI,CACH,GAAG,CAAC,eAAe;YACjB,IAAI,CAAC,eAAe,EAAE;gBACpB,OAAO;aACR;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACvC,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAEM,YAAY;QACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;;6HAlEU,+BAA+B;iHAA/B,+BAA+B,8OCpC5C,i4HA8FA;4FD1Da,+BAA+B;kBAL3C,SAAS;+BACE,qBAAqB;gGAMxB,OAAO;sBADb,KAAK;gBAIC,IAAI;sBADV,KAAK;gBAIC,eAAe;sBADrB,KAAK;gBAIC,aAAa;sBADnB,KAAK;gBAIC,UAAU;sBADhB,MAAM;gBAIA,UAAU;sBADhB,MAAM;;;AEpDT;;;;;;;;;;;;;;;MAmDa,iCAAiC;IAqB5C,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAhB1C,gBAAW,GAAkB,EAAE,CAAC;QAGhC,iBAAY,GAAY,SAAS,CAAC;QAGlC,gBAAW,GAAa,EAAE,CAAC;QAG3B,uBAAkB,GAAG,IAAI,YAAY,EAAU,CAAC;QAGhD,sBAAiB,GAAG,IAAI,YAAY,EAAiB,CAAC;QAEtD,0BAAqB,GAAsB,EAAE,CAAC;KAEA;IAE9C,WAAW,CAAC,OAAsB;QACvC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE;YAC/C,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS;gBACpE,OAAO;oBACL,GAAG,SAAS;oBACZ,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;wBAC7B,MAAM,MAAM,GAAyB,EAAE,CAAC;wBACxC,IAAI,kBAAkB,GAAG,EAAE,CAAC;wBAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAoB,CAAC;wBAC3F,IAAI,eAAe,EAAE;4BACnB,MAAM,gBAAgB,GAA8B;gCAClD,OAAO,EAAE,KAAK;gCACd,SAAS,EAAE,KAAK;6BACjB,CAAC;4BACF,MAAM,eAAe,GAAG,CAAC,eAAe,CAAC,UAAU,IAAI,EAAE;iCACtD,GAAG,CAAC,SAAS,KAAK;gCACjB,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC;gCAClC,KAAK,EAAE,mBAAmB;6BAC3B,CAAC,CAAC;iCACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;4BAClD,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;4BACnD,kBAAkB,GAAG,GAAG,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,eAAe,KAAK,aAAa,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC;yBACnH;wBAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAiB,CAAC;wBAClF,IAAI,YAAY,EAAE;;4BAEhB,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC5D,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;4BACvD,iBAAiB;gCACf,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC1H,IAAI,iBAAiB,IAAI,iBAAiB,GAAG,CAAC,EAAE;gCAC9C,MAAM,EAAE,IAAI,CAAC;oCACX,KAAK,EAAE,IAAI,iBAAiB,GAAG,CAAC,EAAE;oCAClC,KAAK,EAAE,mBAAmB;iCAC3B,CAAC,CAAC;6BACJ;4BACD,IAAI,iBAAiB,KAAK,CAAC,EAAE;gCAC3B,MAAM,EAAE,IAAI,CAAC;oCACX,KAAK,EAAE,KAAK;oCACZ,KAAK,EAAE,mBAAmB;iCAC3B,CAAC,CAAC;6BACJ;4BAED,kBAAkB,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,YAAY,KAAK,aAAa,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC;yBACxG;wBAED,OAAO;4BACL,GAAG,IAAI;4BACP,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG;4BAC7C,SAAS,EAAE,KAAK;4BAChB,MAAM;4BACN,kBAAkB;yBACnB,CAAC;qBACH,CAAC;iBACH,CAAC;aACH,CAAC,CAAC;SACJ;KACF;IAEM,UAAU,CAAC,OAAe,EAAE,MAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;QAChG,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;KACF;IAEM,SAAS,CAAC,SAAsB;QACrC,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,KAAK,SAAS;cACtB,IAAI,CAAC,SAAS;iBACX,IAAI,CAIH,6CAA6C,EAAE;gBAC/C,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACD,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,qBAAqB;aAC1B,CAAC;iBACD,WAAW,EAAE;cAChB,IAAI,CAAC,SAAS;iBACX,IAAI,CACH,2CAA2C,EAC3C;gBACE,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;iBAChB;gBACD,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,qBAAqB;aAC1B,CACF;iBACA,WAAW,EAAE,CAAC;QAEvB,YAAY;aACT,IAAI,CACH,GAAG,CAAC,eAAe;YACjB,IAAI,CAAC,eAAe,EAAE;gBACpB,OAAO;aACR;YACD,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEtD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;YAChF,IAAI,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC;aAC1D;YACD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC/C,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;;+HA3IU,iCAAiC;mHAAjC,iCAAiC,mSCnD9C,49EA6DA;4FDVa,iCAAiC;kBAL7C,SAAS;+BACE,mBAAmB;gGAMtB,OAAO;sBADb,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,YAAY;sBADlB,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,kBAAkB;sBADxB,MAAM;gBAIA,iBAAiB;sBADvB,MAAM;;;AEnET;;;;;;;;;;;;;;;MA0Ba,wBAAwB;IALrC;;;;QAaS,oBAAe,GAAqB,EAAE,CAAC;;;;QAMvC,kBAAa,GAAqB,EAAE,CAAC;QAGrC,gBAAW,GAAW,EAAE,CAAC;QAGzB,UAAK,GAAW,EAAE,CAAC;;;;QAMnB,SAAI,GAAG,IAAI,YAAY,EAAc,CAAC;QAEtC,sBAAiB,GAAG,EAAE,CAAC;QAEvB,iBAAY,GAAY,SAAS,CAAC;QAElC,gBAAW,GAAkB,EAAE,CAAC;QAEhC,oBAAe,GAAa,EAAE,CAAC;QAE/B,sBAAiB,GAAG,IAAI,CAAC;;QAGxB,uBAAkB,GAAkB,EAAE,CAAC;KAkEhD;IAhEQ,WAAW,CAAC,OAAsB;QACvC,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE;YACpD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3H,IAAI,CAAC,aAAa,IAAI,EAAE;iBAEvB,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAEhB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;SACtE;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE;YACxC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;YAGtD,IAAI,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;gBAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClD;SACF;KACF;IAEM,mBAAmB,CAAC,WAA0B;QACnD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAChC;IAEM,oBAAoB,CAAC,IAAY;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,KAAK;YACpD,GAAG,SAAS;YACZ,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;SACjE,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAChC;IAEM,oBAAoB,CAAC,IAAY;;QAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/F,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,KAAK;YACpD,GAAG,SAAS;YACZ,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;SACvD,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;QAEtH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAChC;IAEM,MAAM;;QAEX,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;QAGpF,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEtF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,IAAI,WAAW,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YACvC,IAAI,aAAa,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;SAC5C,CAAC,CAAC;KACJ;;sHAxGU,wBAAwB;0GAAxB,wBAAwB,yPC1BrC,wlEA6DA;4FDnCa,wBAAwB;kBALpC,SAAS;+BACE,mBAAmB;8BAMtB,OAAO;sBADb,KAAK;gBAOC,eAAe;sBADrB,KAAK;gBAOC,aAAa;sBADnB,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,KAAK;sBADX,KAAK;gBAOC,IAAI;sBADV,MAAM;;AAkFT,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,EAAE,QAAgB,EAAE;IAClE,MAAM,cAAc,GAAgB;QAClC,GAAG,EAAE,uBAAuB;QAC5B,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1F,CAAC;IAEF,OAAO;QACL,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;YACpB,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC;YAC5B,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;SACzF,CAAC,CAAC;QACH,cAAc;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAA0B,EAAE,kBAAiC;IACzF,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;IAClG,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;;IAEhH,MAAM,UAAU,GAAG,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;;IAG1E,MAAM,cAAc,GAAG,YAAY,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3H,OAAO,UAAU,IAAI,cAAc,GAAG,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7H,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAA0B,EAAE,kBAAiC;IACzF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;IAC/F,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;;IAG7G,MAAM,2BAA2B,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;;IAG1G,MAAM,2BAA2B,GAAkB,EAAE,CAAC;;IAGtD,kBAAkB,CAAC,OAAO,CAAC,IAAI;QAC7B,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,kBAAkB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;;YAErG,2BAA2B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACtD;KACF,CAAC,CAAC;;IAGH,MAAM,2BAA2B,GAAG,OAAO,CAAC,CAAC,GAAG,2BAA2B,EAAE,GAAG,2BAA2B,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK;QACpI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;;QAExC,EAAE,EAAE,IAAI,CAAC,OAAQ;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;KAChE,CAAC,CAAC,CAAC;IAEJ,OAAO,2BAA2B,CAAC,MAAM,GAAG,CAAC,GAAG,2BAA2B,GAAG,IAAI,CAAC;AACrF,CAAC;;AEhMD;;;;;;;;;;;;;;;MAwBa,0CAA0C;IALvD;QAOS,SAAI,GAAU,SAAS,CAAC;KAChC;;wIAHY,0CAA0C;4HAA1C,0CAA0C,kGCxBvD,6sBAkBA;4FDMa,0CAA0C;kBALtD,SAAS;+BACE,kCAAkC;8BAMrC,IAAI;sBADV,KAAK;;;AEzBR;;;;;;;;;;;;;;;MAiEa,qBAAqB;;mHAArB,qBAAqB;oHAArB,qBAAqB,iBA3B9B,wBAAwB;QACxB,iCAAiC;QACjC,+BAA+B;QAC/B,6CAA6C;QAC7C,2CAA2C;QAC3C,sCAAsC;QACtC,oCAAoC;QACpC,0CAA0C,aAG1C,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,gBAAgB;QAChB,kBAAkB;QAClB,cAAc;QACd,eAAe;QACf,eAAe;QACf,aAAa;QAEb,cAAc;QACd,sBAAsB;QACtB,eAAe,aAEP,wBAAwB;oHAEvB,qBAAqB,YAlBvB;YACP,YAAY;YACZ,mBAAmB;YAEnB,eAAe;YACf,gBAAgB;YAChB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,aAAa;YAEb,cAAc;YACd,sBAAsB;YACtB,eAAe;SAChB;4FAGU,qBAAqB;kBA7BjC,QAAQ;mBAAC;oBACR,YAAY,EAAE;wBACZ,wBAAwB;wBACxB,iCAAiC;wBACjC,+BAA+B;wBAC/B,6CAA6C;wBAC7C,2CAA2C;wBAC3C,sCAAsC;wBACtC,oCAAoC;wBACpC,0CAA0C;qBAC3C;oBACD,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,aAAa;wBAEb,cAAc;wBACd,sBAAsB;wBACtB,eAAe;qBAChB;oBACD,OAAO,EAAE,CAAC,wBAAwB,CAAC;iBACpC;;;AChED;;;;;;;;;;;;;;;;ACAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.module.ts","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\n * Copyright (C) 2023 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 * API's flow mode.\n */\nexport type FlowMode = 'BEST_MATCH' | 'DEFAULT';\n\nexport interface FlowExecution {\n mode?: FlowMode;\n /**\n * Is the flow execution match required.\n */\n matchRequired?: boolean;\n}\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\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n\nexport const toHttpMethod: (value: string) => HttpMethod | undefined = (value: string) => {\n switch (value) {\n case 'CONNECT':\n return 'CONNECT';\n case 'DELETE':\n return 'DELETE';\n case 'GET':\n return 'GET';\n case 'HEAD':\n return 'HEAD';\n case 'OPTIONS':\n return 'OPTIONS';\n case 'PATCH':\n return 'PATCH';\n case 'POST':\n return 'POST';\n case 'PUT':\n return 'PUT';\n case 'TRACE':\n return 'TRACE';\n case 'OTHER':\n return 'OTHER';\n default:\n return undefined;\n }\n};\n","/*\n * Copyright (C) 2022 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 */\nexport * from './ApiType';\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\n","/*\n * Copyright (C) 2022 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\nimport { Flow } from '../flow';\n\nexport interface Plan {\n id: string;\n name: string;\n flows: Flow[];\n}\n","/*\n * Copyright (C) 2023 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 */\nexport * from './Plan';\n","/*\n * Copyright (C) 2022 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 */\nexport * from './flow';\nexport * from './plan';\n\nexport * from './ConnectorsInfo';\nexport * from './SaveOutput';\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: string[];\n};\n\n@Component({\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: string[] = [];\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new FormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new FormControl(channelSelector?.channel ?? ''),\n operations: new FormControl(channelSelector?.operations ?? []),\n entrypoints: new FormControl(channelSelector?.entrypoints ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const channelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [channelSelectorToSave, conditionSelectorToSave] : [channelSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\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<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint\">{{ entrypoint }}</mat-option>\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new FormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new FormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new FormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\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<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matPrefix>/</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector, ConnectorsInfo, HttpSelector, Operation } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-info-bar',\n templateUrl: './gio-ps-flow-details-info-bar.component.html',\n styleUrls: ['./gio-ps-flow-details-info-bar.component.scss'],\n})\nexport class GioPolicyStudioDetailsInfoBarComponent {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n public get condition(): string | undefined {\n const conditionSelector = this.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (!conditionSelector) {\n return undefined;\n }\n return conditionSelector?.condition;\n }\n\n // MESSAGE API type\n\n public get operations(): string[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n return channelSelector?.operations?.map(o => operationToBadge[o]).sort();\n }\n\n public get channel(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channel;\n }\n\n public get channelOperator(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channelOperator;\n }\n\n // PROXY API type\n\n public get path(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.path;\n }\n\n public get pathOperator(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.pathOperator;\n }\n\n public get methods(): string[] | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.methods?.length ? httpSelector?.methods : ['ALL'];\n }\n}\n","<!--\n\n Copyright (C) 2023 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<div *ngIf=\"flow?.name\" class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n</div>\n\n<div *ngIf=\"entrypointsInfo\" class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n <span *ngFor=\"let entrypoint of entrypointsInfo\" class=\"info__value gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</span\n >\n</div>\n\n<!-- MESSAGE API type -->\n\n<div *ngIf=\"operations\" class=\"info\">\n <span class=\"info__label\">Operations</span>\n <span *ngFor=\"let operation of operations\" class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n</div>\n\n<div *ngIf=\"channel\" class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n</div>\n\n<div *ngIf=\"channelOperator\" class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n</div>\n\n<!-- PROXY API type -->\n\n<div *ngIf=\"path\" class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n</div>\n\n<div *ngIf=\"pathOperator\" class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n</div>\n\n<div *ngIf=\"methods\" class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n <span *ngFor=\"let method of methods\" class=\"info__value gio-badge-neutral\"> {{ method }}</span>\n</div>\n\n<!-- Condition -->\n\n<div *ngIf=\"condition\" class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral\">{{ condition }}</span>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { ConnectorsInfo, Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase',\n templateUrl: './gio-ps-flow-details-phase.component.html',\n styleUrls: ['./gio-ps-flow-details-phase.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseComponent {\n @Input()\n public steps?: Step[] = undefined;\n\n @Input()\n public name!: string;\n\n @Input()\n public description!: string;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n}\n","<!--\n\n Copyright (C) 2023 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 <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"content\">\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let entrypoint of entrypointsInfo\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</ng-container\n >\n </span>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <button mat-icon-button>\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let endpoint of endpointsInfo\">\n <mat-icon [svgIcon]=\"endpoint.icon\"></mat-icon>\n {{ endpoint.type }}</ng-container\n >\n </span>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType, ConnectorsInfo } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\n@Component({\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public onEditFlow(): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: (this.entrypointsInfo ?? []).map(e => e.type),\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n}\n","<!--\n\n Copyright (C) 2023 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<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>🚧 Work in progress 🚧</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"apiType === 'PROXY'\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n ></gio-ps-flow-details-phase>\n </div>\n </div>\n</ng-container>\n\n<ng-template #emptyFlows>\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n</ng-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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\n\nimport { FlowExecution } from '../../models';\n\nimport { GioPolicyStudioFlowExecutionFormDialogResult } from './gio-ps-flow-execution-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowExecutionFormDialogData = {\n flowExecution?: FlowExecution;\n};\n\n@Component({\n selector: 'gio-ps-flow-execution-form-dialog',\n templateUrl: './gio-ps-flow-execution-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-execution-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowExecutionFormDialogComponent {\n public flowExecutionFormGroup?: FormGroup;\n\n public existingFlowExecution?: FlowExecution;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, GioPolicyStudioFlowExecutionFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowExecutionFormDialogData,\n ) {\n this.existingFlowExecution = cloneDeep(flowDialogData?.flowExecution);\n\n this.flowExecutionFormGroup = new FormGroup({\n mode: new FormControl(flowDialogData?.flowExecution?.mode ?? 'DEFAULT'),\n matchRequired: new FormControl(flowDialogData?.flowExecution?.matchRequired ?? false),\n });\n }\n\n public onSubmit(): void {\n const flowExecutionToSave: FlowExecution = {\n ...this.existingFlowExecution,\n mode: this.flowExecutionFormGroup?.get('mode')?.value,\n matchRequired: this.flowExecutionFormGroup?.get('matchRequired')?.value,\n };\n\n this.dialogRef.close({\n ...flowExecutionToSave,\n });\n }\n}\n","<!--\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<h2 mat-dialog-title class=\"title\">\n Flow execution\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowExecutionFormGroup\" class=\"content\" [formGroup]=\"flowExecutionFormGroup\">\n <div class=\"content__row\">\n <gio-banner-info>\n By default, flow selection is based on the operators defined in your flows, either when it “matches with” or “starts with” a path. You\n can choose the \"Best match\" option to select a flow from the closest path.\n </gio-banner-info>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Default flow mode</mat-label>\n <mat-select formControlName=\"mode\">\n <mat-option value=\"BEST_MATCH\">Best Match</mat-option>\n <mat-option value=\"DEFAULT\">Default</mat-option>\n </mat-select>\n <mat-hint>Change how the flow selection is made</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <gio-form-slide-toggle>\n <gio-form-label>Fail on flow mismatch</gio-form-label>\n Respond with an error when requests don’t match any defined flow\n <mat-slide-toggle gioFormSlideToggle formControlName=\"matchRequired\"></mat-slide-toggle>\n </gio-form-slide-toggle>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">Save</button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';\nimport { ApiType, ChannelSelector, FlowExecution, HttpSelector, Operation } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\nimport {\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n} from '../flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component';\nimport { GioPolicyStudioFlowExecutionFormDialogResult } from '../flow-execution-form-dialog/gio-ps-flow-execution-form-dialog-result.model';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel: string;\n}\n\n@Component({\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowExecution!: FlowExecution;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: string[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n @Output()\n public flowExecutionChange = new EventEmitter<FlowExecution>();\n\n public flowsGroupsVMSelected: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\n this.flowsGroupsVMSelected = cloneDeep(this.flowsGroups).map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel = '';\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n const operationBadges = (channelSelector.operations ?? [])\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n return {\n ...flow,\n selected: this.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n };\n }),\n };\n });\n }\n }\n\n public selectFlow(groupId: string, flowId: string): void {\n const flow = this.flowsGroups.find(fg => fg._id === groupId)?.flows.find(f => f._id === flowId);\n if (flow) {\n this.selectedFlowChange.emit(flow);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onConfigureExecution(flowExecution: FlowExecution): void {\n const dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n GioPolicyStudioFlowExecutionFormDialogResult\n >(GioPolicyStudioFlowExecutionFormDialogComponent, {\n data: {\n flowExecution,\n },\n role: 'alertdialog',\n id: 'gioPsFlowExecutionFormDialog',\n })\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(edited => {\n if (!edited) {\n return;\n }\n this.flowExecutionChange.emit(edited);\n }),\n )\n .subscribe();\n }\n}\n","<!--\n\n Copyright (C) 2023 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__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button mat-icon-button (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon svgIcon=\"gio:settings\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"list\">\n <div *ngFor=\"let flowsGroup of flowsGroupsVMSelected\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-icon-button (click)=\"onAddFlow(flowsGroup)\"><mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon></button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">{{ flow.pathOrChannelLabel }}</div>\n </div>\n </div>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { capitalize, cloneDeep, differenceBy, flatten, isEqual, omit, unionBy, uniqueId } from 'lodash';\n\nimport { ApiType, ConnectorsInfo, Flow, FlowExecution, Plan, SaveOutput } from './models';\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\n\n@Component({\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowExecution!: FlowExecution;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public commonFlows: Flow[] = [];\n\n @Input()\n public plans: Plan[] = [];\n\n /**\n * Return what is needed to save.\n **/\n @Output()\n public save = new EventEmitter<SaveOutput>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public entrypointsType: string[] = [];\n\n public disableSaveButton = true;\n\n // Used to keep track of initial flows groups to know if there are deleted flows\n private initialFlowsGroups: FlowGroupVM[] = [];\n\n private hasFlowExecutionChanged = false;\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => capitalize(e.type)).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => capitalize(e.type))\n .join(', ')}`;\n\n this.entrypointsType = (this.entrypointsInfo ?? []).map(e => e.type);\n }\n\n if (changes.commonFlows || changes.plans) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n\n // Select first flow by default on first load\n if (changes.commonFlows?.isFirstChange() || changes.plans?.isFirstChange()) {\n this.selectedFlow = this.flowsGroups[0].flows[0];\n }\n }\n }\n\n public onFlowExecutionChange(flowExecution: FlowExecution): void {\n this.hasFlowExecutionChanged = !isEqual(this.flowExecution, flowExecution);\n if (this.hasFlowExecutionChanged) {\n this.disableSaveButton = false;\n this.flowExecution = flowExecution;\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = flowsGroups;\n this.disableSaveButton = false;\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlow = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);\n\n // Emit plans only if they have been updated\n const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);\n\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n ...(this.hasFlowExecutionChanged ? this.flowExecution : {}),\n });\n }\n}\n\nconst getFlowsGroups = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n _planId: plan.id,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n // Check if common flows have been updated\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n // Check if common flows have been deleted\n const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;\n\n return hasChanged || hasDeletedFlow ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n\n // Get plans with changed flows\n const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));\n\n // Get plans with deleted flows\n const plansGroupsWithDeletedFlows: FlowGroupVM[] = [];\n\n // Check if there are deleted flows in initial initialPlansGroups\n initialPlansGroups.forEach(plan => {\n const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);\n if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {\n // If there are deleted flows, we need to return the complete plan with the new flows\n plansGroupsWithDeletedFlows.push(planGroupToCompare);\n }\n });\n\n // Merge plans with changed flows and plans with deleted flows\n const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({\n ...omit(plan, '_id', '_icon', '_planId'),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined\n id: plan._planId!,\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\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\">\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\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsType\"\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 [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase-policy',\n templateUrl: './gio-ps-flow-details-phase-policy.component.html',\n styleUrls: ['./gio-ps-flow-details-phase-policy.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhasePolicyComponent {\n @Input()\n public step?: Step = undefined;\n}\n","<!--\n\n Copyright (C) 2023 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🚧 Work in progress 🚧\n","/*\n * Copyright (C) 2022 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 */\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioBannerModule, GioFormSlideToggleModule, GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { GioPolicyStudioFlowMessageFormDialogComponent } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { GioPolicyStudioDetailsComponent } from './components/flow-details/gio-ps-flow-details.component';\nimport { GioPolicyStudioFlowsMenuComponent } from './components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioComponent } from './gio-policy-studio.component';\nimport { GioPolicyStudioFlowProxyFormDialogComponent } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioDetailsInfoBarComponent } from './components/flow-details-info-bar/gio-ps-flow-details-info-bar.component';\nimport { GioPolicyStudioDetailsPhasePolicyComponent } from './components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component';\nimport { GioPolicyStudioDetailsPhaseComponent } from './components/flow-details-phase/gio-ps-flow-details-phase.component';\nimport { GioPolicyStudioFlowExecutionFormDialogComponent } from './components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component';\n\n@NgModule({\n declarations: [\n GioPolicyStudioComponent,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioDetailsInfoBarComponent,\n GioPolicyStudioDetailsPhaseComponent,\n GioPolicyStudioDetailsPhasePolicyComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatSlideToggleModule,\n MatDialogModule,\n MatTabsModule,\n\n GioIconsModule,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioBannerModule,\n ],\n exports: [GioPolicyStudioComponent],\n})\nexport class GioPolicyStudioModule {}\n","/*\n * Copyright (C) 2022 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 * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioModule } from './lib/gio-policy-studio.module';\nexport { GioPolicyStudioComponent } from './lib/gio-policy-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MatDialogRef } from '@angular/material/dialog';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { FlowExecution } from '../../models';
|
|
4
|
+
import { GioPolicyStudioFlowExecutionFormDialogResult } from './gio-ps-flow-execution-form-dialog-result.model';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare type GioPolicyStudioFlowExecutionFormDialogData = {
|
|
7
|
+
flowExecution?: FlowExecution;
|
|
8
|
+
};
|
|
9
|
+
export declare class GioPolicyStudioFlowExecutionFormDialogComponent {
|
|
10
|
+
dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, GioPolicyStudioFlowExecutionFormDialogResult>;
|
|
11
|
+
flowExecutionFormGroup?: FormGroup;
|
|
12
|
+
existingFlowExecution?: FlowExecution;
|
|
13
|
+
constructor(dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, GioPolicyStudioFlowExecutionFormDialogResult>, flowDialogData: GioPolicyStudioFlowExecutionFormDialogData);
|
|
14
|
+
onSubmit(): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowExecutionFormDialogComponent, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowExecutionFormDialogComponent, "gio-ps-flow-execution-form-dialog", never, {}, {}, never, never>;
|
|
17
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { MatDialog } from '@angular/material/dialog';
|
|
3
3
|
import { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';
|
|
4
|
-
import { ApiType } from '../../models';
|
|
4
|
+
import { ApiType, FlowExecution } from '../../models';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
interface FlowGroupMenuVM extends FlowGroupVM {
|
|
7
7
|
flows: FlowMenuVM[];
|
|
@@ -18,17 +18,20 @@ interface FlowMenuVM extends FlowVM {
|
|
|
18
18
|
export declare class GioPolicyStudioFlowsMenuComponent implements OnChanges {
|
|
19
19
|
private readonly matDialog;
|
|
20
20
|
apiType: ApiType;
|
|
21
|
+
flowExecution: FlowExecution;
|
|
21
22
|
flowsGroups: FlowGroupVM[];
|
|
22
23
|
selectedFlow?: FlowVM;
|
|
23
24
|
entrypoints: string[];
|
|
24
25
|
selectedFlowChange: EventEmitter<FlowVM>;
|
|
25
26
|
flowsGroupsChange: EventEmitter<FlowGroupVM[]>;
|
|
27
|
+
flowExecutionChange: EventEmitter<FlowExecution>;
|
|
26
28
|
flowsGroupsVMSelected: FlowGroupMenuVM[];
|
|
27
29
|
constructor(matDialog: MatDialog);
|
|
28
30
|
ngOnChanges(changes: SimpleChanges): void;
|
|
29
31
|
selectFlow(groupId: string, flowId: string): void;
|
|
30
32
|
onAddFlow(flowGroup: FlowGroupVM): void;
|
|
33
|
+
onConfigureExecution(flowExecution: FlowExecution): void;
|
|
31
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioFlowsMenuComponent, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowsMenuComponent, "gio-ps-flows-menu", never, { "apiType": "apiType"; "flowsGroups": "flowsGroups"; "selectedFlow": "selectedFlow"; "entrypoints": "entrypoints"; }, { "selectedFlowChange": "selectedFlowChange"; "flowsGroupsChange": "flowsGroupsChange"; }, never, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioFlowsMenuComponent, "gio-ps-flows-menu", never, { "apiType": "apiType"; "flowExecution": "flowExecution"; "flowsGroups": "flowsGroups"; "selectedFlow": "selectedFlow"; "entrypoints": "entrypoints"; }, { "selectedFlowChange": "selectedFlowChange"; "flowsGroupsChange": "flowsGroupsChange"; "flowExecutionChange": "flowExecutionChange"; }, never, never>;
|
|
33
36
|
}
|
|
34
37
|
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
-
import { ApiType, ConnectorsInfo, Flow, Plan, SaveOutput } from './models';
|
|
2
|
+
import { ApiType, ConnectorsInfo, Flow, FlowExecution, Plan, SaveOutput } from './models';
|
|
3
3
|
import { FlowGroupVM, FlowVM } from './gio-policy-studio.model';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class GioPolicyStudioComponent implements OnChanges {
|
|
6
6
|
apiType: ApiType;
|
|
7
|
+
flowExecution: FlowExecution;
|
|
7
8
|
/**
|
|
8
9
|
* List of entrypoints to display
|
|
9
10
|
*/
|
|
@@ -24,11 +25,13 @@ export declare class GioPolicyStudioComponent implements OnChanges {
|
|
|
24
25
|
entrypointsType: string[];
|
|
25
26
|
disableSaveButton: boolean;
|
|
26
27
|
private initialFlowsGroups;
|
|
28
|
+
private hasFlowExecutionChanged;
|
|
27
29
|
ngOnChanges(changes: SimpleChanges): void;
|
|
30
|
+
onFlowExecutionChange(flowExecution: FlowExecution): void;
|
|
28
31
|
onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void;
|
|
29
32
|
onSelectedFlowChange(flow: FlowVM): void;
|
|
30
33
|
onDeleteSelectedFlow(flow: FlowVM): void;
|
|
31
34
|
onSave(): void;
|
|
32
35
|
static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioComponent, "gio-policy-studio", never, { "apiType": "apiType"; "entrypointsInfo": "entrypointsInfo"; "endpointsInfo": "endpointsInfo"; "commonFlows": "commonFlows"; "plans": "plans"; }, { "save": "save"; }, never, never>;
|
|
36
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GioPolicyStudioComponent, "gio-policy-studio", never, { "apiType": "apiType"; "flowExecution": "flowExecution"; "entrypointsInfo": "entrypointsInfo"; "endpointsInfo": "endpointsInfo"; "commonFlows": "commonFlows"; "plans": "plans"; }, { "save": "save"; }, never, never>;
|
|
34
37
|
}
|
|
@@ -2,23 +2,25 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./gio-policy-studio.component";
|
|
3
3
|
import * as i2 from "./components/flows-menu/gio-ps-flows-menu.component";
|
|
4
4
|
import * as i3 from "./components/flow-details/gio-ps-flow-details.component";
|
|
5
|
-
import * as i4 from "./components/flow-
|
|
6
|
-
import * as i5 from "./components/flow-form-dialog/flow-
|
|
7
|
-
import * as i6 from "./components/flow-
|
|
8
|
-
import * as i7 from "./components/flow-details-
|
|
9
|
-
import * as i8 from "./components/flow-details-phase
|
|
10
|
-
import * as i9 from "
|
|
11
|
-
import * as i10 from "@angular/
|
|
12
|
-
import * as i11 from "@angular/
|
|
13
|
-
import * as i12 from "@angular/material/
|
|
14
|
-
import * as i13 from "@angular/material/
|
|
15
|
-
import * as i14 from "@angular/material/
|
|
16
|
-
import * as i15 from "@angular/material/
|
|
17
|
-
import * as i16 from "@angular/material/
|
|
18
|
-
import * as i17 from "@angular/material/
|
|
19
|
-
import * as i18 from "@
|
|
5
|
+
import * as i4 from "./components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component";
|
|
6
|
+
import * as i5 from "./components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component";
|
|
7
|
+
import * as i6 from "./components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component";
|
|
8
|
+
import * as i7 from "./components/flow-details-info-bar/gio-ps-flow-details-info-bar.component";
|
|
9
|
+
import * as i8 from "./components/flow-details-phase/gio-ps-flow-details-phase.component";
|
|
10
|
+
import * as i9 from "./components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component";
|
|
11
|
+
import * as i10 from "@angular/common";
|
|
12
|
+
import * as i11 from "@angular/forms";
|
|
13
|
+
import * as i12 from "@angular/material/button";
|
|
14
|
+
import * as i13 from "@angular/material/tooltip";
|
|
15
|
+
import * as i14 from "@angular/material/form-field";
|
|
16
|
+
import * as i15 from "@angular/material/input";
|
|
17
|
+
import * as i16 from "@angular/material/select";
|
|
18
|
+
import * as i17 from "@angular/material/slide-toggle";
|
|
19
|
+
import * as i18 from "@angular/material/dialog";
|
|
20
|
+
import * as i19 from "@angular/material/tabs";
|
|
21
|
+
import * as i20 from "@gravitee/ui-particles-angular";
|
|
20
22
|
export declare class GioPolicyStudioModule {
|
|
21
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<GioPolicyStudioModule, never>;
|
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<GioPolicyStudioModule, [typeof i1.GioPolicyStudioComponent, typeof i2.GioPolicyStudioFlowsMenuComponent, typeof i3.GioPolicyStudioDetailsComponent, typeof i4.
|
|
24
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GioPolicyStudioModule, [typeof i1.GioPolicyStudioComponent, typeof i2.GioPolicyStudioFlowsMenuComponent, typeof i3.GioPolicyStudioDetailsComponent, typeof i4.GioPolicyStudioFlowExecutionFormDialogComponent, typeof i5.GioPolicyStudioFlowMessageFormDialogComponent, typeof i6.GioPolicyStudioFlowProxyFormDialogComponent, typeof i7.GioPolicyStudioDetailsInfoBarComponent, typeof i8.GioPolicyStudioDetailsPhaseComponent, typeof i9.GioPolicyStudioDetailsPhasePolicyComponent], [typeof i10.CommonModule, typeof i11.ReactiveFormsModule, typeof i12.MatButtonModule, typeof i13.MatTooltipModule, typeof i14.MatFormFieldModule, typeof i15.MatInputModule, typeof i16.MatSelectModule, typeof i17.MatSlideToggleModule, typeof i18.MatDialogModule, typeof i19.MatTabsModule, typeof i20.GioIconsModule, typeof i20.GioFormSlideToggleModule, typeof i20.GioFormTagsInputModule, typeof i20.GioBannerModule], [typeof i1.GioPolicyStudioComponent]>;
|
|
23
25
|
static ɵinj: i0.ɵɵInjectorDeclaration<GioPolicyStudioModule>;
|
|
24
26
|
}
|