@finos/legend-application-studio 28.18.148 → 28.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/lib/application/LegendIngestionConfiguration.d.ts +1 -5
  2. package/lib/application/LegendIngestionConfiguration.d.ts.map +1 -1
  3. package/lib/application/LegendIngestionConfiguration.js +1 -8
  4. package/lib/application/LegendIngestionConfiguration.js.map +1 -1
  5. package/lib/components/ElementIconUtils.d.ts.map +1 -1
  6. package/lib/components/ElementIconUtils.js +3 -1
  7. package/lib/components/ElementIconUtils.js.map +1 -1
  8. package/lib/components/editor/editor-group/EditorGroup.d.ts +2 -0
  9. package/lib/components/editor/editor-group/EditorGroup.d.ts.map +1 -1
  10. package/lib/components/editor/editor-group/EditorGroup.js +6 -0
  11. package/lib/components/editor/editor-group/EditorGroup.js.map +1 -1
  12. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.d.ts.map +1 -1
  13. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js +140 -26
  14. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js.map +1 -1
  15. package/lib/components/editor/editor-group/function-activator/FunctionEditor.d.ts +1 -0
  16. package/lib/components/editor/editor-group/function-activator/FunctionEditor.d.ts.map +1 -1
  17. package/lib/components/editor/editor-group/function-activator/FunctionEditor.js +21 -3
  18. package/lib/components/editor/editor-group/function-activator/FunctionEditor.js.map +1 -1
  19. package/lib/{stores/ingestion/AdhocDataProductDeployResponse.js → components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.d.ts} +3 -8
  20. package/lib/components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.d.ts.map +1 -0
  21. package/lib/components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.js +89 -0
  22. package/lib/components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.js.map +1 -0
  23. package/lib/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.js +1 -1
  24. package/lib/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.js.map +1 -1
  25. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  26. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js +1 -2
  27. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  28. package/lib/index.css +2 -2
  29. package/lib/index.css.map +1 -1
  30. package/lib/index.d.ts +2 -0
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +2 -0
  33. package/lib/index.js.map +1 -1
  34. package/lib/package.json +2 -1
  35. package/lib/stores/editor/EditorGraphState.d.ts.map +1 -1
  36. package/lib/stores/editor/EditorGraphState.js +4 -1
  37. package/lib/stores/editor/EditorGraphState.js.map +1 -1
  38. package/lib/stores/editor/EditorStore.d.ts +2 -2
  39. package/lib/stores/editor/EditorStore.d.ts.map +1 -1
  40. package/lib/stores/editor/EditorStore.js +2 -2
  41. package/lib/stores/editor/EditorStore.js.map +1 -1
  42. package/lib/stores/editor/EditorTabManagerState.d.ts.map +1 -1
  43. package/lib/stores/editor/EditorTabManagerState.js +5 -1
  44. package/lib/stores/editor/EditorTabManagerState.js.map +1 -1
  45. package/lib/stores/editor/data-cube/LegendStudioDataCubeHelper.d.ts +2 -2
  46. package/lib/stores/editor/data-cube/LegendStudioDataCubeHelper.d.ts.map +1 -1
  47. package/lib/stores/editor/data-cube/LegendStudioDataCubeHelper.js +4 -3
  48. package/lib/stores/editor/data-cube/LegendStudioDataCubeHelper.js.map +1 -1
  49. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorState.d.ts.map +1 -1
  50. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorState.js +14 -1
  51. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorState.js.map +1 -1
  52. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts +3 -0
  53. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts.map +1 -1
  54. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js +24 -1
  55. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js.map +1 -1
  56. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts +9 -4
  57. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts.map +1 -1
  58. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js +23 -4
  59. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js.map +1 -1
  60. package/lib/stores/editor/editor-state/element-editor-state/function-activator/HostedServiceFunctionActivatorEditorState.js +3 -3
  61. package/lib/stores/editor/editor-state/element-editor-state/function-activator/HostedServiceFunctionActivatorEditorState.js.map +1 -1
  62. package/lib/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.d.ts +33 -0
  63. package/lib/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.d.ts.map +1 -0
  64. package/lib/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.js +86 -0
  65. package/lib/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.js.map +1 -0
  66. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.d.ts.map +1 -1
  67. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.js +28 -2
  68. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.js.map +1 -1
  69. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.d.ts +2 -3
  70. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.d.ts.map +1 -1
  71. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.js.map +1 -1
  72. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.d.ts +4 -1
  73. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.d.ts.map +1 -1
  74. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js +24 -1
  75. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  76. package/lib/stores/editor/utils/ModelClassifierUtils.d.ts +1 -0
  77. package/lib/stores/editor/utils/ModelClassifierUtils.d.ts.map +1 -1
  78. package/lib/stores/editor/utils/ModelClassifierUtils.js +1 -0
  79. package/lib/stores/editor/utils/ModelClassifierUtils.js.map +1 -1
  80. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts +3 -2
  81. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts.map +1 -1
  82. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js +7 -4
  83. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js.map +1 -1
  84. package/package.json +9 -8
  85. package/src/application/LegendIngestionConfiguration.ts +1 -12
  86. package/src/components/ElementIconUtils.tsx +3 -0
  87. package/src/components/editor/editor-group/EditorGroup.tsx +10 -0
  88. package/src/components/editor/editor-group/dataProduct/DataPoductEditor.tsx +375 -65
  89. package/src/components/editor/editor-group/function-activator/FunctionEditor.tsx +40 -2
  90. package/src/components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.tsx +269 -0
  91. package/src/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.tsx +1 -1
  92. package/src/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.tsx +1 -2
  93. package/src/index.ts +2 -0
  94. package/src/stores/editor/EditorGraphState.ts +3 -0
  95. package/src/stores/editor/EditorStore.ts +7 -5
  96. package/src/stores/editor/EditorTabManagerState.ts +4 -0
  97. package/src/stores/editor/data-cube/LegendStudioDataCubeHelper.ts +14 -2
  98. package/src/stores/editor/editor-state/element-editor-state/FunctionActivatorState.ts +15 -0
  99. package/src/stores/editor/editor-state/element-editor-state/FunctionEditorState.ts +50 -0
  100. package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts +31 -5
  101. package/src/stores/editor/editor-state/element-editor-state/function-activator/HostedServiceFunctionActivatorEditorState.ts +3 -3
  102. package/src/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.ts +130 -0
  103. package/src/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.ts +38 -7
  104. package/src/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.ts +3 -3
  105. package/src/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.ts +51 -0
  106. package/src/stores/editor/utils/ModelClassifierUtils.ts +1 -0
  107. package/src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts +10 -4
  108. package/tsconfig.json +2 -5
  109. package/lib/stores/ingestion/AdhocDataProductDeployResponse.d.ts +0 -21
  110. package/lib/stores/ingestion/AdhocDataProductDeployResponse.d.ts.map +0 -1
  111. package/lib/stores/ingestion/AdhocDataProductDeployResponse.js.map +0 -1
  112. package/lib/stores/ingestion/IngestDeploymentServerClient.d.ts +0 -35
  113. package/lib/stores/ingestion/IngestDeploymentServerClient.d.ts.map +0 -1
  114. package/lib/stores/ingestion/IngestDeploymentServerClient.js +0 -58
  115. package/lib/stores/ingestion/IngestDeploymentServerClient.js.map +0 -1
  116. package/lib/stores/ingestion/IngestDiscoveryServerClient.d.ts +0 -26
  117. package/lib/stores/ingestion/IngestDiscoveryServerClient.d.ts.map +0 -1
  118. package/lib/stores/ingestion/IngestDiscoveryServerClient.js +0 -35
  119. package/lib/stores/ingestion/IngestDiscoveryServerClient.js.map +0 -1
  120. package/lib/stores/ingestion/IngestionDeploymentResponse.d.ts +0 -41
  121. package/lib/stores/ingestion/IngestionDeploymentResponse.d.ts.map +0 -1
  122. package/lib/stores/ingestion/IngestionDeploymentResponse.js +0 -56
  123. package/lib/stores/ingestion/IngestionDeploymentResponse.js.map +0 -1
  124. package/lib/stores/ingestion/IngestionManager.d.ts +0 -38
  125. package/lib/stores/ingestion/IngestionManager.d.ts.map +0 -1
  126. package/lib/stores/ingestion/IngestionManager.js +0 -111
  127. package/lib/stores/ingestion/IngestionManager.js.map +0 -1
  128. package/src/stores/ingestion/AdhocDataProductDeployResponse.ts +0 -29
  129. package/src/stores/ingestion/IngestDeploymentServerClient.ts +0 -112
  130. package/src/stores/ingestion/IngestDiscoveryServerClient.ts +0 -52
  131. package/src/stores/ingestion/IngestionDeploymentResponse.ts +0 -74
  132. package/src/stores/ingestion/IngestionManager.ts +0 -219
@@ -44,20 +44,24 @@ import {
44
44
  ActionState,
45
45
  guaranteeNonNullable,
46
46
  assertTrue,
47
+ uuid,
47
48
  } from '@finos/legend-shared';
48
49
  import {
49
50
  dataProduct_addAccessPoint,
50
51
  dataProduct_addAccessPointGroup,
51
52
  dataProduct_deleteAccessPoint,
53
+ dataProduct_deleteAccessPointGroup,
52
54
  } from '../../../../graph-modifier/DSL_DataProduct_GraphModifierHelper.js';
53
55
  import { LambdaEditorState } from '@finos/legend-query-builder';
54
- import type { IngestionManager } from '../../../../ingestion/IngestionManager.js';
55
56
  import {
56
57
  DataProductElementEditorInitialConfiguration,
57
58
  EditorInitialConfiguration,
58
59
  } from '../ElementEditorInitialConfiguration.js';
59
60
  import { EXTERNAL_APPLICATION_NAVIGATION__generateUrlWithEditorConfig } from '../../../../../__lib__/LegendStudioNavigation.js';
60
- import type { AdhocDataProductDeployResponse } from '../../../../ingestion/AdhocDataProductDeployResponse.js';
61
+ import type {
62
+ AdhocDataProductDeployResponse,
63
+ LakehouseIngestionManager,
64
+ } from '@finos/legend-server-lakehouse';
61
65
 
62
66
  export class AccessPointState {
63
67
  readonly state: AccessPointGroupState;
@@ -187,6 +191,7 @@ export class LakehouseAccessPointState extends AccessPointState {
187
191
 
188
192
  export class AccessPointGroupState {
189
193
  readonly state: DataProductEditorState;
194
+ readonly uuid = uuid();
190
195
  value: AccessPointGroup;
191
196
  accessPointStates: AccessPointState[] = [];
192
197
 
@@ -248,11 +253,13 @@ export const generateUrlToDeployOnOpen = (
248
253
 
249
254
  export class DataProductEditorState extends ElementEditorState {
250
255
  accessPointModal = false;
256
+ accessPointGroupModal = false;
251
257
  deploymentState = ActionState.create();
252
258
  accessPointGroupStates: AccessPointGroupState[] = [];
253
259
  isConvertingTransformLambdaObjects = false;
254
260
  deployOnOpen = false;
255
261
  deployResponse: AdhocDataProductDeployResponse | undefined;
262
+ editingGroupState: AccessPointGroupState | undefined;
256
263
 
257
264
  constructor(
258
265
  editorStore: EditorStore,
@@ -264,6 +271,7 @@ export class DataProductEditorState extends ElementEditorState {
264
271
  makeObservable(this, {
265
272
  product: computed,
266
273
  accessPointModal: observable,
274
+ accessPointGroupModal: observable,
267
275
  accessPointGroupStates: observable,
268
276
  isConvertingTransformLambdaObjects: observable,
269
277
  deploy: flow,
@@ -272,8 +280,11 @@ export class DataProductEditorState extends ElementEditorState {
272
280
  setDeployOnOpen: action,
273
281
  setDeployResponse: action,
274
282
  setAccessPointModal: action,
283
+ setAccessPointGroupModal: action,
275
284
  addAccessPoint: action,
276
285
  convertAccessPointsFuncObjects: flow,
286
+ editingGroupState: observable,
287
+ setEditingGroupState: action,
277
288
  });
278
289
  this.accessPointGroupStates = this.product.accessPointGroups.map(
279
290
  (e) => new AccessPointGroupState(e, this),
@@ -336,6 +347,14 @@ export class DataProductEditorState extends ElementEditorState {
336
347
  this.accessPointModal = val;
337
348
  }
338
349
 
350
+ setEditingGroupState(val: AccessPointGroupState | undefined): void {
351
+ this.editingGroupState = val;
352
+ }
353
+
354
+ setAccessPointGroupModal(val: boolean): void {
355
+ this.accessPointGroupModal = val;
356
+ }
357
+
339
358
  addAccessPoint(
340
359
  id: string,
341
360
  description: string | undefined,
@@ -350,12 +369,12 @@ export class DataProductEditorState extends ElementEditorState {
350
369
  const groupState =
351
370
  accessPointGroup instanceof AccessPointGroupState
352
371
  ? accessPointGroup
353
- : this.createBareGroupAndAdd(accessPointGroup);
372
+ : this.createGroupAndAdd(accessPointGroup);
354
373
  groupState.addAccessPoint(accesspoint);
355
374
  addUniqueEntry(this.accessPointGroupStates, groupState);
356
375
  }
357
376
 
358
- createBareGroupAndAdd(id: string): AccessPointGroupState {
377
+ createGroupAndAdd(id: string, description?: string): AccessPointGroupState {
359
378
  const existingGroupState = this.accessPointGroupStates.find(
360
379
  (groupState) => groupState.value.id === id,
361
380
  );
@@ -365,10 +384,17 @@ export class DataProductEditorState extends ElementEditorState {
365
384
  }
366
385
  const group = new AccessPointGroup();
367
386
  group.id = id;
387
+ group.description = description;
368
388
  dataProduct_addAccessPointGroup(this.product, group);
369
389
  return new AccessPointGroupState(group, this);
370
390
  }
371
391
 
392
+ deleteAccessPointGroup(val: AccessPointGroupState): void {
393
+ const state = this.accessPointGroupStates.find((a) => a === val);
394
+ deleteEntry(this.accessPointGroupStates, state);
395
+ dataProduct_deleteAccessPointGroup(this.product, val.value);
396
+ }
397
+
372
398
  *deploy(token: string | undefined): GeneratorFn<void> {
373
399
  try {
374
400
  assertTrue(
@@ -426,7 +452,7 @@ export class DataProductEditorState extends ElementEditorState {
426
452
  return this.product.accessPointGroups.map((e) => e.accessPoints).flat();
427
453
  }
428
454
 
429
- get ingestionManager(): IngestionManager | undefined {
455
+ get ingestionManager(): LakehouseIngestionManager | undefined {
430
456
  return this.editorStore.ingestionManager;
431
457
  }
432
458
 
@@ -201,19 +201,19 @@ export class HostedServiceFunctionActivatorEditorState extends ElementEditorStat
201
201
  .then((response) =>
202
202
  this.editorStore.applicationStore.alertService.setActionAlertInfo({
203
203
  message: `Hosted Service Function Activator has been deployed successfully`,
204
- prompt: response.deploymentLocation
204
+ prompt: response.deployed
205
205
  ? 'You can now launch and monitor the operation of your function activator'
206
206
  : undefined,
207
207
  type: ActionAlertType.STANDARD,
208
208
  actions: [
209
- ...(response.deploymentLocation !== undefined
209
+ ...(response.deployed !== undefined
210
210
  ? [
211
211
  {
212
212
  label: 'Launch Service',
213
213
  type: ActionAlertActionType.PROCEED,
214
214
  handler: (): void => {
215
215
  this.editorStore.applicationStore.navigationService.navigator.visitAddress(
216
- response.deploymentLocation ?? '',
216
+ response.deployed ?? '',
217
217
  );
218
218
  },
219
219
  default: true,
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ type PackageableConnection,
19
+ MemSQLFunction,
20
+ ConnectionPointer,
21
+ InMemoryGraphData,
22
+ PackageableElementExplicitReference,
23
+ observe_MemSQLFunctionDeploymentConfiguration,
24
+ observe_MemSQLFunction,
25
+ DeploymentOwner,
26
+ observe_DeploymentOwnership,
27
+ } from '@finos/legend-graph';
28
+ import {
29
+ type GeneratorFn,
30
+ ActionState,
31
+ assertErrorThrown,
32
+ guaranteeType,
33
+ } from '@finos/legend-shared';
34
+ import { makeObservable, action, flow, computed } from 'mobx';
35
+ import type { EditorStore } from '../../../EditorStore.js';
36
+ import { ElementEditorState } from '../ElementEditorState.js';
37
+
38
+ export class MemSQLFunctionActivatorEditorState extends ElementEditorState {
39
+ readonly validateState = ActionState.create();
40
+ readonly deployState = ActionState.create();
41
+
42
+ constructor(editorStore: EditorStore, element: MemSQLFunction) {
43
+ super(editorStore, element);
44
+
45
+ makeObservable(this, {
46
+ activator: computed,
47
+ reprocess: action,
48
+ updateOwnership: action,
49
+ updateAppDescription: action,
50
+ updateApplicationName: action,
51
+ updateConnection: action,
52
+ validate: flow,
53
+ deployToSandbox: flow,
54
+ });
55
+ }
56
+
57
+ get activator(): MemSQLFunction {
58
+ return observe_MemSQLFunction(
59
+ guaranteeType(
60
+ this.element,
61
+ MemSQLFunction,
62
+ 'Element inside Mem SQL function editor state must be a MemSQLFunction',
63
+ ),
64
+ );
65
+ }
66
+
67
+ updateConnection(val: PackageableConnection): void {
68
+ this.activator.activationConfiguration.activationConnection =
69
+ new ConnectionPointer(PackageableElementExplicitReference.create(val));
70
+ observe_MemSQLFunctionDeploymentConfiguration(
71
+ this.activator.activationConfiguration,
72
+ );
73
+ }
74
+
75
+ updateOwnership(val: string): void {
76
+ this.activator.ownership = new DeploymentOwner(val, this.activator);
77
+ observe_DeploymentOwnership(this.activator.ownership);
78
+ }
79
+
80
+ updateApplicationName(val: string): void {
81
+ this.activator.functionName = val;
82
+ }
83
+
84
+ updateAppDescription(val: string): void {
85
+ this.activator.description = val;
86
+ }
87
+
88
+ *validate(): GeneratorFn<void> {
89
+ this.validateState.inProgress();
90
+ try {
91
+ yield this.editorStore.graphManagerState.graphManager.validateFunctionActivator(
92
+ this.activator,
93
+ new InMemoryGraphData(this.editorStore.graphManagerState.graph),
94
+ );
95
+ this.editorStore.applicationStore.notificationService.notifySuccess(
96
+ `Function activator is valid`,
97
+ );
98
+ } catch (error) {
99
+ assertErrorThrown(error);
100
+ this.editorStore.applicationStore.notificationService.notifyError(error);
101
+ } finally {
102
+ this.validateState.complete();
103
+ }
104
+ }
105
+
106
+ *deployToSandbox(): GeneratorFn<void> {
107
+ this.deployState.inProgress();
108
+ try {
109
+ yield this.editorStore.graphManagerState.graphManager.publishFunctionActivatorToSandbox(
110
+ this.activator,
111
+ new InMemoryGraphData(this.editorStore.graphManagerState.graph),
112
+ );
113
+ this.editorStore.applicationStore.notificationService.notifySuccess(
114
+ 'MemSQL Function Activator has been deployed successfully',
115
+ );
116
+ } catch (error) {
117
+ assertErrorThrown(error);
118
+ this.editorStore.applicationStore.notificationService.notifyError(error);
119
+ } finally {
120
+ this.deployState.complete();
121
+ }
122
+ }
123
+
124
+ reprocess(
125
+ newElement: MemSQLFunction,
126
+ editorStore: EditorStore,
127
+ ): MemSQLFunctionActivatorEditorState {
128
+ return new MemSQLFunctionActivatorEditorState(editorStore, newElement);
129
+ }
130
+ }
@@ -35,6 +35,10 @@ import {
35
35
  import { makeObservable, action, flow, computed } from 'mobx';
36
36
  import type { EditorStore } from '../../../EditorStore.js';
37
37
  import { ElementEditorState } from '../ElementEditorState.js';
38
+ import {
39
+ ActionAlertActionType,
40
+ ActionAlertType,
41
+ } from '@finos/legend-application';
38
42
 
39
43
  export class SnowflakeAppFunctionActivatorEdtiorState extends ElementEditorState {
40
44
  readonly validateState = ActionState.create();
@@ -122,13 +126,40 @@ export class SnowflakeAppFunctionActivatorEdtiorState extends ElementEditorState
122
126
  *deployToSandbox(): GeneratorFn<void> {
123
127
  this.deployState.inProgress();
124
128
  try {
125
- yield this.editorStore.graphManagerState.graphManager.publishFunctionActivatorToSandbox(
126
- this.activator,
127
- new InMemoryGraphData(this.editorStore.graphManagerState.graph),
128
- );
129
- this.editorStore.applicationStore.notificationService.notifySuccess(
130
- 'SnowflakeApp Function Activator has been deployed successfully',
131
- );
129
+ yield this.editorStore.graphManagerState.graphManager
130
+ .publishFunctionActivatorToSandbox(
131
+ this.activator,
132
+ new InMemoryGraphData(this.editorStore.graphManagerState.graph),
133
+ )
134
+ .then((response) =>
135
+ this.editorStore.applicationStore.alertService.setActionAlertInfo({
136
+ message: `Snowflake UDTF has been deployed successfully`,
137
+ prompt: response.deploymentLocation
138
+ ? 'You can now call your UDTF on Snowflake'
139
+ : undefined,
140
+ type: ActionAlertType.STANDARD,
141
+ actions: [
142
+ ...(response.deploymentLocation !== undefined
143
+ ? [
144
+ {
145
+ label: 'Launch Snowflake UDTF',
146
+ type: ActionAlertActionType.PROCEED,
147
+ handler: (): void => {
148
+ this.editorStore.applicationStore.navigationService.navigator.visitAddress(
149
+ response.deploymentLocation ?? '',
150
+ );
151
+ },
152
+ default: true,
153
+ },
154
+ ]
155
+ : []),
156
+ {
157
+ label: 'Close',
158
+ type: ActionAlertActionType.PROCEED_WITH_CAUTION,
159
+ },
160
+ ],
161
+ }),
162
+ );
132
163
  } catch (error) {
133
164
  assertErrorThrown(error);
134
165
  this.editorStore.applicationStore.notificationService.notifyError(error);
@@ -27,7 +27,6 @@ import {
27
27
  removePrefix,
28
28
  type GeneratorFn,
29
29
  } from '@finos/legend-shared';
30
- import type { IngestionManager } from '../../../../ingestion/IngestionManager.js';
31
30
  import {
32
31
  action,
33
32
  computed,
@@ -39,8 +38,9 @@ import {
39
38
  import type {
40
39
  IngestDefinitionDeploymentResponse,
41
40
  IngestDefinitionValidationResponse,
41
+ LakehouseIngestionManager,
42
42
  ValidateAndDeploymentResponse,
43
- } from '../../../../ingestion/IngestionDeploymentResponse.js';
43
+ } from '@finos/legend-server-lakehouse';
44
44
  import {
45
45
  EditorInitialConfiguration,
46
46
  IngestElementEditorInitialConfiguration,
@@ -113,7 +113,7 @@ export class IngestDefinitionEditorState extends ElementEditorState {
113
113
  );
114
114
  }
115
115
 
116
- get ingestionManager(): IngestionManager | undefined {
116
+ get ingestionManager(): LakehouseIngestionManager | undefined {
117
117
  return this.editorStore.ingestionManager;
118
118
  }
119
119
 
@@ -41,6 +41,7 @@ import {
41
41
  type QueryInfo,
42
42
  type LightQuery,
43
43
  type ExecutionResultWithMetadata,
44
+ type Service,
44
45
  PureSingleExecution,
45
46
  PureMultiExecution,
46
47
  KeyedExecutionParameter,
@@ -84,8 +85,10 @@ import {
84
85
  QUERY_BUILDER_EVENT,
85
86
  ExecutionPlanState,
86
87
  QUERY_LOADER_TYPEAHEAD_SEARCH_LIMIT,
88
+ getRawLambdaForLetFuncs,
87
89
  } from '@finos/legend-query-builder';
88
90
  import { DEFAULT_TAB_SIZE } from '@finos/legend-application';
91
+ import { openDataCube } from '../../../data-cube/LegendStudioDataCubeHelper.js';
89
92
 
90
93
  export class ServiceExecutionParametersState extends LambdaParametersState {
91
94
  executionState: ServicePureExecutionState;
@@ -115,6 +118,24 @@ export class ServiceExecutionParametersState extends LambdaParametersState {
115
118
  );
116
119
  }
117
120
 
121
+ openDataCubeModal(
122
+ query: RawLambda,
123
+ element: Service,
124
+ editorStore: EditorStore,
125
+ ): void {
126
+ this.parameterStates = this.build(query);
127
+ this.parameterValuesEditorState.open(
128
+ (): Promise<void> =>
129
+ this.executionState
130
+ .openingDataCube(element, editorStore)
131
+ .catch(
132
+ this.executionState.editorStore.applicationStore
133
+ .alertUnhandledError,
134
+ ),
135
+ PARAMETER_SUBMIT_ACTION.RUN,
136
+ );
137
+ }
138
+
118
139
  build(query: RawLambda): LambdaParameterState[] {
119
140
  const parameters = buildLambdaVariableExpressions(
120
141
  query,
@@ -495,6 +516,36 @@ export abstract class ServicePureExecutionState extends ServiceExecutionState {
495
516
  this.queryRunPromise = promise;
496
517
  };
497
518
 
519
+ async handleOpeningDataCube(
520
+ element: Service,
521
+ editorStore: EditorStore,
522
+ ): Promise<void> {
523
+ const query = this.queryState.query;
524
+ const parameters = (query.parameters ?? []) as object[];
525
+ if (parameters.length) {
526
+ this.parametersState.openDataCubeModal(query, element, editorStore);
527
+ } else {
528
+ await openDataCube(element, editorStore);
529
+ }
530
+ }
531
+
532
+ async openingDataCube(
533
+ element: Service,
534
+ editorStore: EditorStore,
535
+ ): Promise<void> {
536
+ const params = buildExecutionParameterValues(
537
+ this.parametersState.parameterStates,
538
+ this.editorStore.graphManagerState,
539
+ );
540
+
541
+ const letFuncsRawLambda = getRawLambdaForLetFuncs(
542
+ this.parametersState.parameterStates,
543
+ this.editorStore.graphManagerState,
544
+ );
545
+
546
+ await openDataCube(element, editorStore, params, letFuncsRawLambda);
547
+ }
548
+
498
549
  *generatePlan(debug: boolean): GeneratorFn<void> {
499
550
  if (this.isGeneratingPlan) {
500
551
  return;
@@ -71,6 +71,7 @@ export enum PACKAGEABLE_ELEMENT_TYPE {
71
71
  DATA = 'DATA',
72
72
  SNOWFLAKE_APP = 'SNOWFLAKE_APP',
73
73
  HOSTED_SERVICE = 'HOSTED_SERVICE',
74
+ MEM_SQL_FUNCTION = 'MEM_SQL_FUNCTION',
74
75
  // New Strategical Data Product
75
76
  _DATA_PRODUCT = 'BETA_DATA_PRODUCT',
76
77
 
@@ -32,14 +32,20 @@ export const dataProduct_deleteAccessPoint = action(
32
32
  );
33
33
 
34
34
  export const dataProduct_addAccessPoint = action(
35
- (product: AccessPointGroup, accessPoint: AccessPoint) => {
36
- addUniqueEntry(product.accessPoints, observe_AccessPoint(accessPoint));
35
+ (group: AccessPointGroup, accessPoint: AccessPoint) => {
36
+ addUniqueEntry(group.accessPoints, observe_AccessPoint(accessPoint));
37
37
  },
38
38
  );
39
39
 
40
40
  export const accessPointGroup_setDescription = action(
41
- (product: AccessPointGroup, description: string) => {
42
- product.description = description;
41
+ (group: AccessPointGroup, description: string) => {
42
+ group.description = description;
43
+ },
44
+ );
45
+
46
+ export const accessPointGroup_setName = action(
47
+ (group: AccessPointGroup, name: string) => {
48
+ group.id = name;
43
49
  },
44
50
  );
45
51
 
package/tsconfig.json CHANGED
@@ -133,6 +133,7 @@
133
133
  "./src/stores/editor/editor-state/element-editor-state/external-format/DSL_ExternalFormat_SchemaSetEditorState.ts",
134
134
  "./src/stores/editor/editor-state/element-editor-state/function-activator/HostedServiceFunctionActivatorEditorState.ts",
135
135
  "./src/stores/editor/editor-state/element-editor-state/function-activator/INTERNAL__UnknownFunctionActivatorEditorState.ts",
136
+ "./src/stores/editor/editor-state/element-editor-state/function-activator/MemSQLFunctionActivatorEditorState.ts",
136
137
  "./src/stores/editor/editor-state/element-editor-state/function-activator/PostDeploymentActionEditorState.ts",
137
138
  "./src/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.ts",
138
139
  "./src/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.ts",
@@ -205,11 +206,6 @@
205
206
  "./src/stores/graph-modifier/STO_FlatData_GraphModifierHelper.ts",
206
207
  "./src/stores/graph-modifier/STO_Relational_GraphModifierHelper.ts",
207
208
  "./src/stores/graph-modifier/Testable_GraphModifierHelper.ts",
208
- "./src/stores/ingestion/AdhocDataProductDeployResponse.ts",
209
- "./src/stores/ingestion/IngestDeploymentServerClient.ts",
210
- "./src/stores/ingestion/IngestDiscoveryServerClient.ts",
211
- "./src/stores/ingestion/IngestionDeploymentResponse.ts",
212
- "./src/stores/ingestion/IngestionManager.ts",
213
209
  "./src/stores/lazy-text-editor/LazyTextEditorStore.ts",
214
210
  "./src/stores/project-reviewer/ProjectReviewerStore.ts",
215
211
  "./src/stores/project-view/ProjectViewerEditorMode.ts",
@@ -273,6 +269,7 @@
273
269
  "./src/components/editor/editor-group/function-activator/FunctionEditor.tsx",
274
270
  "./src/components/editor/editor-group/function-activator/HostedServiceFunctionActivatorEditor.tsx",
275
271
  "./src/components/editor/editor-group/function-activator/INTERNAL__UnknownFunctionActivatorEdtior.tsx",
272
+ "./src/components/editor/editor-group/function-activator/MemSQLFunctionActivatorEditor.tsx",
276
273
  "./src/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.tsx",
277
274
  "./src/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.tsx",
278
275
  "./src/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.tsx",
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright (c) 2020-present, Goldman Sachs
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import type { PlainObject } from '@finos/legend-shared';
17
- export declare class AdhocDataProductDeployResponse {
18
- content: PlainObject;
19
- }
20
- export declare const createAdhocDataProductDeployResponse: (json: PlainObject<AdhocDataProductDeployResponse>) => AdhocDataProductDeployResponse;
21
- //# sourceMappingURL=AdhocDataProductDeployResponse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdhocDataProductDeployResponse.d.ts","sourceRoot":"","sources":["../../../src/stores/ingestion/AdhocDataProductDeployResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAAa,8BAA8B;IACzC,OAAO,EAAG,WAAW,CAAC;CACvB;AAED,eAAO,MAAM,oCAAoC,GAC/C,MAAM,WAAW,CAAC,8BAA8B,CAAC,KAChD,8BAIF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdhocDataProductDeployResponse.js","sourceRoot":"","sources":["../../../src/stores/ingestion/AdhocDataProductDeployResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,OAAO,8BAA8B;IACzC,OAAO,CAAe;CACvB;AAED,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,IAAiD,EACjB,EAAE;IAClC,MAAM,QAAQ,GAAG,IAAI,8BAA8B,EAAE,CAAC;IACtD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Copyright (c) 2020-present, Goldman Sachs
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { AbstractServerClient, type PlainObject } from '@finos/legend-shared';
17
- import type { IngestDefinitionDeploymentResponse, IngestDefinitionValidationResponse } from './IngestionDeploymentResponse.js';
18
- import type { IngestDeploymentServerConfig } from '../../application/LegendIngestionConfiguration.js';
19
- import type { AdhocDataProductDeployResponse } from './AdhocDataProductDeployResponse.js';
20
- export declare class IngestDeploymentServerClient extends AbstractServerClient {
21
- environmentClassification: string;
22
- private DATA_PRODUCT_URL;
23
- constructor(config: IngestDeploymentServerConfig);
24
- private _token;
25
- private _tokenWithTextPlain;
26
- private _dataProduct;
27
- private _ingestDefinitions;
28
- private _ingest;
29
- changeServer(serverConfig: IngestDeploymentServerConfig): void;
30
- validate(validateGrammar: string, token: string | undefined): Promise<PlainObject<IngestDefinitionValidationResponse>>;
31
- deploy(deployGrammar: string, token: string | undefined): Promise<IngestDefinitionDeploymentResponse>;
32
- write_location(urn: string, token: string | undefined): Promise<PlainObject>;
33
- deployDataProduct(fullGrammar: string, token: string | undefined): Promise<PlainObject<AdhocDataProductDeployResponse>>;
34
- }
35
- //# sourceMappingURL=IngestDeploymentServerClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IngestDeploymentServerClient.d.ts","sourceRoot":"","sources":["../../../src/stores/ingestion/IngestDeploymentServerClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,oBAAoB,EAGpB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACtG,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAE1F,qBAAa,4BAA6B,SAAQ,oBAAoB;IACpE,yBAAyB,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,gBAAgB,CAAkB;gBAC9B,MAAM,EAAE,4BAA4B;IAWhD,OAAO,CAAC,MAAM,CAEX;IAEH,OAAO,CAAC,mBAAmB,CAGxB;IAEH,OAAO,CAAC,YAAY,CACkE;IAEtF,OAAO,CAAC,kBAAkB,CAC6B;IAEvD,OAAO,CAAC,OAAO,CAA8C;IAE7D,YAAY,CAAC,YAAY,EAAE,4BAA4B,GAAG,IAAI;IAK9D,QAAQ,CACN,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAS3D,MAAM,CACJ,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAAC,kCAAkC,CAAC;IAS9C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAS5E,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;CAQxD"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Copyright (c) 2020-present, Goldman Sachs
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { AbstractServerClient, ContentType, HttpHeader, } from '@finos/legend-shared';
17
- import { makeObservable, observable } from 'mobx';
18
- export class IngestDeploymentServerClient extends AbstractServerClient {
19
- environmentClassification;
20
- DATA_PRODUCT_URL = 'data-product';
21
- constructor(config) {
22
- super({
23
- baseUrl: config.ingestServerUrl,
24
- });
25
- this.environmentClassification = config.environmentClassification;
26
- makeObservable(this, {
27
- environmentClassification: observable,
28
- baseUrl: observable,
29
- });
30
- }
31
- _token = (token) => ({
32
- Authorization: `Bearer ${token}`,
33
- });
34
- _tokenWithTextPlain = (token) => ({
35
- [HttpHeader.CONTENT_TYPE]: ContentType.TEXT_PLAIN,
36
- Authorization: `Bearer ${token}`,
37
- });
38
- _dataProduct = () => `${this.baseUrl}/${this.DATA_PRODUCT_URL}/api/entitlements/sdlc/deploy/definitions`;
39
- _ingestDefinitions = () => `${this.baseUrl}/api/ingest/sdlc/deploy/definitions`;
40
- _ingest = () => `${this.baseUrl}/api/ingest`;
41
- changeServer(serverConfig) {
42
- this.baseUrl = serverConfig.ingestServerUrl;
43
- this.environmentClassification = serverConfig.environmentClassification;
44
- }
45
- validate(validateGrammar, token) {
46
- return this.post(`${this._ingestDefinitions()}/validate`, validateGrammar, undefined, this._tokenWithTextPlain(token));
47
- }
48
- deploy(deployGrammar, token) {
49
- return this.post(`${this._ingestDefinitions()}`, deployGrammar, undefined, this._tokenWithTextPlain(token));
50
- }
51
- write_location(urn, token) {
52
- return this.post(`${this._ingest()}/${encodeURIComponent(urn)}/write-location`, undefined, undefined, this._token(token));
53
- }
54
- deployDataProduct(fullGrammar, token) {
55
- return this.post(`${this._dataProduct()}`, fullGrammar, undefined, this._token(token));
56
- }
57
- }
58
- //# sourceMappingURL=IngestDeploymentServerClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IngestDeploymentServerClient.js","sourceRoot":"","sources":["../../../src/stores/ingestion/IngestDeploymentServerClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlD,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IACpE,yBAAyB,CAAS;IAE1B,gBAAgB,GAAG,cAAc,CAAC;IAC1C,YAAY,MAAoC;QAC9C,KAAK,CAAC;YACJ,OAAO,EAAE,MAAM,CAAC,eAAe;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;QAClE,cAAc,CAAC,IAAI,EAAE;YACnB,yBAAyB,EAAE,UAAU;YACrC,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;QACpC,aAAa,EAAE,UAAU,KAAK,EAAE;KACjC,CAAC,CAAC;IAEK,mBAAmB,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,UAAU;QACjD,aAAa,EAAE,UAAU,KAAK,EAAE;KACjC,CAAC,CAAC;IAEK,YAAY,GAAG,GAAW,EAAE,CAClC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,2CAA2C,CAAC;IAE9E,kBAAkB,GAAG,GAAW,EAAE,CACxC,GAAG,IAAI,CAAC,OAAO,qCAAqC,CAAC;IAE/C,OAAO,GAAG,GAAW,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,CAAC;IAE7D,YAAY,CAAC,YAA0C;QACrD,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,YAAY,CAAC,yBAAyB,CAAC;IAC1E,CAAC;IAED,QAAQ,CACN,eAAuB,EACvB,KAAyB;QAEzB,OAAO,IAAI,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,kBAAkB,EAAE,WAAW,EACvC,eAAe,EACf,SAAS,EACT,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,MAAM,CACJ,aAAqB,EACrB,KAAyB;QAEzB,OAAO,IAAI,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAC9B,aAAa,EACb,SAAS,EACT,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,KAAyB;QACnD,OAAO,IAAI,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EAC7D,SAAS,EACT,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACnB,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,WAAmB,EACnB,KAAyB;QAEzB,OAAO,IAAI,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,EACxB,WAAW,EACX,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACnB,CAAC;IACJ,CAAC;CACF"}