@finos/legend-graph 22.1.1 → 22.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/lib/graph/BasicModel.d.ts +1 -2
  2. package/lib/graph/BasicModel.d.ts.map +1 -1
  3. package/lib/graph/BasicModel.js.map +1 -1
  4. package/lib/graph/DependencyManager.d.ts +1 -1
  5. package/lib/graph/DependencyManager.d.ts.map +1 -1
  6. package/lib/graph/DependencyManager.js +5 -4
  7. package/lib/graph/DependencyManager.js.map +1 -1
  8. package/lib/graph/helpers/DomainHelper.d.ts +1 -1
  9. package/lib/graph/helpers/DomainHelper.d.ts.map +1 -1
  10. package/lib/graph/helpers/DomainHelper.js +6 -2
  11. package/lib/graph/helpers/DomainHelper.js.map +1 -1
  12. package/lib/graph/metamodel/pure/packageableElements/mapping/{StoreTestData.d.ts → MappingTestData.d.ts} +2 -2
  13. package/lib/graph/metamodel/pure/packageableElements/mapping/MappingTestData.d.ts.map +1 -0
  14. package/lib/graph/metamodel/pure/packageableElements/mapping/{StoreTestData.js → MappingTestData.js} +3 -3
  15. package/lib/graph/metamodel/pure/packageableElements/mapping/MappingTestData.js.map +1 -0
  16. package/lib/graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.d.ts +2 -2
  17. package/lib/graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.d.ts.map +1 -1
  18. package/lib/graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.js.map +1 -1
  19. package/lib/graphManager/AbstractPureGraphManager.d.ts +5 -3
  20. package/lib/graphManager/AbstractPureGraphManager.d.ts.map +1 -1
  21. package/lib/graphManager/AbstractPureGraphManager.js.map +1 -1
  22. package/lib/graphManager/action/changeDetection/DSL_Mapping_ObserverHelper.d.ts +2 -2
  23. package/lib/graphManager/action/changeDetection/DSL_Mapping_ObserverHelper.d.ts.map +1 -1
  24. package/lib/graphManager/action/changeDetection/DSL_Mapping_ObserverHelper.js.map +1 -1
  25. package/lib/graphManager/action/changeDetection/GraphObserverHelper.js +1 -1
  26. package/lib/graphManager/action/changeDetection/GraphObserverHelper.js.map +1 -1
  27. package/lib/graphManager/protocol/pure/DSL_ExternalFormat_PureProtocolProcessorPlugin.js.map +1 -1
  28. package/lib/graphManager/protocol/pure/PureProtocolProcessorPlugin.d.ts +1 -1
  29. package/lib/graphManager/protocol/pure/PureProtocolProcessorPlugin.d.ts.map +1 -1
  30. package/lib/graphManager/protocol/pure/v1/V1_PureGraphManager.d.ts +10 -7
  31. package/lib/graphManager/protocol/pure/v1/V1_PureGraphManager.d.ts.map +1 -1
  32. package/lib/graphManager/protocol/pure/v1/V1_PureGraphManager.js +28 -4
  33. package/lib/graphManager/protocol/pure/v1/V1_PureGraphManager.js.map +1 -1
  34. package/lib/graphManager/protocol/pure/v1/engine/V1_Engine.d.ts +2 -0
  35. package/lib/graphManager/protocol/pure/v1/engine/V1_Engine.d.ts.map +1 -1
  36. package/lib/graphManager/protocol/pure/v1/engine/V1_Engine.js +4 -0
  37. package/lib/graphManager/protocol/pure/v1/engine/V1_Engine.js.map +1 -1
  38. package/lib/graphManager/protocol/pure/v1/engine/V1_EngineServerClient.d.ts +3 -1
  39. package/lib/graphManager/protocol/pure/v1/engine/V1_EngineServerClient.d.ts.map +1 -1
  40. package/lib/graphManager/protocol/pure/v1/engine/V1_EngineServerClient.js +1 -0
  41. package/lib/graphManager/protocol/pure/v1/engine/V1_EngineServerClient.js.map +1 -1
  42. package/lib/graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.d.ts +2 -2
  43. package/lib/graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.d.ts.map +1 -1
  44. package/lib/graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.js +2 -2
  45. package/lib/graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.js.map +1 -1
  46. package/lib/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.d.ts +29 -0
  47. package/lib/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.d.ts.map +1 -0
  48. package/lib/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.js +42 -0
  49. package/lib/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.js.map +1 -0
  50. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/{V1_StoreTestData.d.ts → V1_MappingTestData.d.ts} +2 -2
  51. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestData.d.ts.map +1 -0
  52. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/{V1_StoreTestData.js → V1_MappingTestData.js} +2 -2
  53. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestData.js.map +1 -0
  54. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestSuite.d.ts +2 -2
  55. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestSuite.d.ts.map +1 -1
  56. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestSuite.js.map +1 -1
  57. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.d.ts +19 -0
  58. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.d.ts.map +1 -0
  59. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.js +30 -0
  60. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.js.map +1 -0
  61. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.d.ts.map +1 -1
  62. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.js +5 -2
  63. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.js.map +1 -1
  64. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_MappingBuilderHelper.js +2 -2
  65. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_MappingBuilderHelper.js.map +1 -1
  66. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_RelationalClassMappingBuilderHelper.d.ts.map +1 -1
  67. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_RelationalClassMappingBuilderHelper.js +1 -4
  68. package/lib/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_RelationalClassMappingBuilderHelper.js.map +1 -1
  69. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.d.ts +2 -0
  70. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.d.ts.map +1 -1
  71. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.js +1 -1
  72. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.js.map +1 -1
  73. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.d.ts +2 -2
  74. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.d.ts.map +1 -1
  75. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.js +2 -2
  76. package/lib/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.js.map +1 -1
  77. package/lib/index.d.ts +3 -0
  78. package/lib/index.d.ts.map +1 -1
  79. package/lib/index.js +3 -0
  80. package/lib/index.js.map +1 -1
  81. package/lib/package.json +2 -2
  82. package/package.json +5 -5
  83. package/src/graph/BasicModel.ts +1 -2
  84. package/src/graph/DependencyManager.ts +5 -4
  85. package/src/graph/helpers/DomainHelper.ts +9 -3
  86. package/src/graph/metamodel/pure/packageableElements/mapping/{StoreTestData.ts → MappingTestData.ts} +2 -2
  87. package/src/graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.ts +2 -2
  88. package/src/graphManager/AbstractPureGraphManager.ts +15 -7
  89. package/src/graphManager/action/changeDetection/DSL_Mapping_ObserverHelper.ts +2 -2
  90. package/src/graphManager/action/changeDetection/GraphObserverHelper.ts +1 -1
  91. package/src/graphManager/protocol/pure/DSL_ExternalFormat_PureProtocolProcessorPlugin.ts +2 -2
  92. package/src/graphManager/protocol/pure/PureProtocolProcessorPlugin.ts +2 -2
  93. package/src/graphManager/protocol/pure/v1/V1_PureGraphManager.ts +65 -19
  94. package/src/graphManager/protocol/pure/v1/engine/V1_Engine.ts +11 -0
  95. package/src/graphManager/protocol/pure/v1/engine/V1_EngineServerClient.ts +15 -1
  96. package/src/graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.ts +4 -4
  97. package/src/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.ts +65 -0
  98. package/src/graphManager/protocol/pure/v1/model/packageableElements/mapping/{V1_StoreTestData.ts → V1_MappingTestData.ts} +1 -1
  99. package/src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestSuite.ts +2 -2
  100. package/src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.ts +36 -0
  101. package/src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.ts +12 -5
  102. package/src/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_MappingBuilderHelper.ts +5 -5
  103. package/src/graphManager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_RelationalClassMappingBuilderHelper.ts +3 -3
  104. package/src/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.ts +1 -1
  105. package/src/graphManager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.ts +3 -3
  106. package/src/index.ts +3 -1
  107. package/tsconfig.json +4 -2
  108. package/lib/graph/metamodel/pure/packageableElements/mapping/StoreTestData.d.ts.map +0 -1
  109. package/lib/graph/metamodel/pure/packageableElements/mapping/StoreTestData.js.map +0 -1
  110. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_StoreTestData.d.ts.map +0 -1
  111. package/lib/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_StoreTestData.js.map +0 -1
@@ -24,7 +24,7 @@ import {
24
24
  type Log,
25
25
  type PlainObject,
26
26
  type ServerClientConfig,
27
- type ActionState,
27
+ ActionState,
28
28
  TracerService,
29
29
  LogEvent,
30
30
  getClass,
@@ -39,6 +39,7 @@ import {
39
39
  deleteEntry,
40
40
  uniq,
41
41
  IllegalStateError,
42
+ filterByType,
42
43
  } from '@finos/legend-shared';
43
44
  import type { TEMPORARY__AbstractEngineConfig } from '../../../../graphManager/action/TEMPORARY__AbstractEngineConfig.js';
44
45
  import {
@@ -210,6 +211,7 @@ import type { QuerySearchSpecification } from '../../../../graphManager/action/q
210
211
  import type { ExternalFormatDescription } from '../../../../graphManager/action/externalFormat/ExternalFormatDescription.js';
211
212
  import type { ConfigurationProperty } from '../../../../graph/metamodel/pure/packageableElements/fileGeneration/ConfigurationProperty.js';
212
213
  import { V1_ExternalFormatModelGenerationInput } from './engine/externalFormat/V1_ExternalFormatModelGeneration.js';
214
+ import { V1_GenerateSchemaInput } from './engine/externalFormat/V1_GenerateSchemaInput.js';
213
215
  import { GraphBuilderReport } from '../../../../graphManager/GraphBuilderReport.js';
214
216
  import type { Package } from '../../../../graph/metamodel/pure/packageableElements/domain/Package.js';
215
217
  import { V1_DataElement } from './model/packageableElements/data/V1_DataElement.js';
@@ -252,13 +254,15 @@ import type {
252
254
  RawMappingModelCoverageAnalysisResult,
253
255
  } from '../../../../graphManager/action/analytics/MappingModelCoverageAnalysis.js';
254
256
  import { deserialize } from 'serializr';
255
- import type { SchemaSet } from '../../../../graph/metamodel/pure/packageableElements/externalFormat/schemaSet/DSL_ExternalFormat_SchemaSet.js';
257
+ import { SchemaSet } from '../../../../graph/metamodel/pure/packageableElements/externalFormat/schemaSet/DSL_ExternalFormat_SchemaSet.js';
256
258
  import type {
257
259
  CompilationResult,
258
260
  TextCompilationResult,
259
261
  } from '../../../action/compilation/CompilationResult.js';
260
262
  import { CompilationWarning } from '../../../action/compilation/CompilationWarning.js';
261
263
  import { V1_transformParameterValue } from './transformation/pureGraph/from/V1_ServiceTransformer.js';
264
+ import { V1_transformModelUnit } from './transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.js';
265
+ import type { ModelUnit } from '../../../../graph/metamodel/pure/packageableElements/externalFormat/store/DSL_ExternalFormat_ModelUnit.js';
262
266
 
263
267
  class V1_PureModelContextDataIndex {
264
268
  elements: V1_PackageableElement[] = [];
@@ -1973,6 +1977,46 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
1973
1977
  return this.engine.generateModel(input);
1974
1978
  }
1975
1979
 
1980
+ async generateSchemaFromExternalFormatConfig(
1981
+ modelUnit: ModelUnit,
1982
+ targetBinding: string | undefined,
1983
+ configurationProperties: ConfigurationProperty[],
1984
+ currentGraph: PureModel,
1985
+ ): Promise<SchemaSet[]> {
1986
+ const config: PlainObject = {};
1987
+ configurationProperties.forEach((property) => {
1988
+ config[property.name] = property.value as PlainObject;
1989
+ });
1990
+ const input = new V1_GenerateSchemaInput(
1991
+ V1_transformModelUnit(modelUnit),
1992
+ this.getFullGraphModelData(currentGraph),
1993
+ Boolean(targetBinding),
1994
+ config,
1995
+ );
1996
+ input.targetBindingPath = targetBinding;
1997
+ const genPMCD = await this.engine.generateSchema(input);
1998
+ const genGraph = await this.createEmptyGraph();
1999
+ const report = new GraphBuilderReport();
2000
+ const mainGraphBuilderInput: V1_PureGraphBuilderInput[] = [
2001
+ {
2002
+ model: genGraph,
2003
+ data: V1_indexPureModelContextData(
2004
+ report,
2005
+ genPMCD,
2006
+ this.graphBuilderExtensions,
2007
+ ),
2008
+ },
2009
+ ];
2010
+ await this.buildGraphFromInputs(
2011
+ genGraph,
2012
+ mainGraphBuilderInput,
2013
+ report,
2014
+ new StopWatch(),
2015
+ ActionState.create(),
2016
+ );
2017
+ return genGraph.allElements.filter(filterByType(SchemaSet));
2018
+ }
2019
+
1976
2020
  // ------------------------------------------- Import -------------------------------------------
1977
2021
 
1978
2022
  getExamplePureProtocolText(): string {
@@ -2016,11 +2060,11 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2016
2060
 
2017
2061
  // --------------------------------------------- Execution ---------------------------------------------
2018
2062
 
2019
- private createExecutionInput = (
2063
+ public createExecutionInput = (
2020
2064
  graph: PureModel,
2021
- mapping: Mapping,
2065
+ mapping: Mapping | undefined,
2022
2066
  lambda: RawLambda,
2023
- runtime: Runtime,
2067
+ runtime: Runtime | undefined,
2024
2068
  clientVersion: string,
2025
2069
  parameterValues?: ParameterValue[],
2026
2070
  ): V1_ExecuteInput =>
@@ -2036,9 +2080,9 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2036
2080
 
2037
2081
  private buildExecutionInput = (
2038
2082
  graph: PureModel,
2039
- mapping: Mapping,
2083
+ mapping: Mapping | undefined,
2040
2084
  lambda: RawLambda,
2041
- runtime: Runtime,
2085
+ runtime: Runtime | undefined,
2042
2086
  clientVersion: string,
2043
2087
  executeInput: V1_ExecuteInput,
2044
2088
  parameterValues?: ParameterValue[],
@@ -2090,13 +2134,15 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2090
2134
  this.pluginManager.getPureProtocolProcessorPlugins(),
2091
2135
  ).build(),
2092
2136
  );
2093
- executeInput.mapping = mapping.path;
2094
- executeInput.runtime = V1_transformRuntime(
2095
- runtime,
2096
- new V1_GraphTransformerContextBuilder(
2097
- this.pluginManager.getPureProtocolProcessorPlugins(),
2098
- ).build(),
2099
- );
2137
+ executeInput.mapping = mapping?.path;
2138
+ executeInput.runtime = runtime
2139
+ ? V1_transformRuntime(
2140
+ runtime,
2141
+ new V1_GraphTransformerContextBuilder(
2142
+ this.pluginManager.getPureProtocolProcessorPlugins(),
2143
+ ).build(),
2144
+ )
2145
+ : undefined;
2100
2146
  executeInput.model = prunedGraphData;
2101
2147
  executeInput.context = new V1_RawBaseExecutionContext(); // TODO: potentially need to support more types
2102
2148
  if (parameterValues) {
@@ -2107,7 +2153,7 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2107
2153
  return executeInput;
2108
2154
  };
2109
2155
 
2110
- async executeMapping(
2156
+ async runQuery(
2111
2157
  lambda: RawLambda,
2112
2158
  mapping: Mapping,
2113
2159
  runtime: Runtime,
@@ -2158,8 +2204,8 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2158
2204
 
2159
2205
  generateExecutionPlan(
2160
2206
  lambda: RawLambda,
2161
- mapping: Mapping,
2162
- runtime: Runtime,
2207
+ mapping: Mapping | undefined,
2208
+ runtime: Runtime | undefined,
2163
2209
  graph: PureModel,
2164
2210
  ): Promise<RawExecutionPlan> {
2165
2211
  return this.engine.generateExecutionPlan(
@@ -2175,8 +2221,8 @@ export class V1_PureGraphManager extends AbstractPureGraphManager {
2175
2221
 
2176
2222
  async debugExecutionPlanGeneration(
2177
2223
  lambda: RawLambda,
2178
- mapping: Mapping,
2179
- runtime: Runtime,
2224
+ mapping: Mapping | undefined,
2225
+ runtime: Runtime | undefined,
2180
2226
  graph: PureModel,
2181
2227
  ): Promise<{ plan: RawExecutionPlan; debug: string }> {
2182
2228
  const result = await this.engine.debugExecutionPlanGeneration(
@@ -97,6 +97,7 @@ import type {
97
97
  V1_TextCompilationResult,
98
98
  } from './compilation/V1_CompilationResult.js';
99
99
  import { V1_CompilationWarning } from './compilation/V1_CompilationWarning.js';
100
+ import { V1_GenerateSchemaInput } from './externalFormat/V1_GenerateSchemaInput.js';
100
101
 
101
102
  class V1_EngineConfig extends TEMPORARY__AbstractEngineConfig {
102
103
  private engine: V1_Engine;
@@ -624,6 +625,16 @@ export class V1_Engine {
624
625
  return pureCode;
625
626
  }
626
627
 
628
+ async generateSchema(
629
+ input: V1_GenerateSchemaInput,
630
+ ): Promise<V1_PureModelContextData> {
631
+ return V1_deserializePureModelContextData(
632
+ (await this.engineServerClient.generateSchema(
633
+ V1_GenerateSchemaInput.serialization.toJson(input),
634
+ )) as unknown as PlainObject<V1_PureModelContextData>,
635
+ );
636
+ }
637
+
627
638
  // ------------------------------------------- Service -------------------------------------------
628
639
 
629
640
  async getServerServiceInfo(): Promise<V1_ServiceConfigurationInfo> {
@@ -43,6 +43,7 @@ import type { V1_QuerySearchSpecification } from './query/V1_QuerySearchSpecific
43
43
  import type { EXECUTION_SERIALIZATION_FORMAT } from '../../../../../graphManager/action/execution/ExecutionResult.js';
44
44
  import type { V1_ExternalFormatDescription } from './externalFormat/V1_ExternalFormatDescription.js';
45
45
  import type { V1_ExternalFormatModelGenerationInput } from './externalFormat/V1_ExternalFormatModelGeneration.js';
46
+ import type { V1_GenerateSchemaInput } from './externalFormat/V1_GenerateSchemaInput.js';
46
47
  import type { V1_RunTestsInput } from './test/V1_RunTestsInput.js';
47
48
  import type { V1_TestResult } from '../model/test/result/V1_TestResult.js';
48
49
  import type { V1_RawRelationalOperationElement } from '../model/packageableElements/store/relational/model/V1_RawRelationalOperationElement.js';
@@ -344,7 +345,7 @@ export class V1_EngineServerClient extends AbstractServerClient {
344
345
 
345
346
  generateModel = (
346
347
  input: PlainObject<V1_ExternalFormatModelGenerationInput>,
347
- ): Promise<PlainObject<V1_GenerationOutput>[]> =>
348
+ ): Promise<PlainObject<V1_PureModelContextData>[]> =>
348
349
  this.postWithTracing(
349
350
  this.getTraceData(CORE_ENGINE_ACTIVITY_TRACE.GENERATE_FILE),
350
351
  `${this._externalFormats()}/generateModel`,
@@ -354,6 +355,19 @@ export class V1_EngineServerClient extends AbstractServerClient {
354
355
  undefined,
355
356
  { enableCompression: true },
356
357
  );
358
+
359
+ generateSchema = (
360
+ input: PlainObject<V1_GenerateSchemaInput>,
361
+ ): Promise<PlainObject<V1_PureModelContextData>[]> =>
362
+ this.postWithTracing(
363
+ this.getTraceData(CORE_ENGINE_ACTIVITY_TRACE.GENERATE_FILE),
364
+ `${this._externalFormats()}/generateSchema`,
365
+ input,
366
+ {},
367
+ undefined,
368
+ undefined,
369
+ { enableCompression: true },
370
+ );
357
371
  // ------------------------------------------- Code Import -------------------------------------------
358
372
 
359
373
  getAvailableCodeImportDescriptions = (): Promise<
@@ -51,9 +51,9 @@ export class V1_ExecuteInput {
51
51
  * @discrepancy model
52
52
  */
53
53
  function!: V1_RawLambda;
54
- mapping!: string;
54
+ mapping: string | undefined;
55
55
  model!: V1_PureModelContextData;
56
- runtime!: V1_Runtime;
56
+ runtime: V1_Runtime | undefined;
57
57
  context!: V1_RawExecutionContext;
58
58
  parameterValues: V1_ParameterValue[] = [];
59
59
 
@@ -61,10 +61,10 @@ export class V1_ExecuteInput {
61
61
  createModelSchema(V1_ExecuteInput, {
62
62
  clientVersion: optional(primitive()),
63
63
  function: usingModelSchema(V1_rawLambdaModelSchema),
64
- mapping: primitive(),
64
+ mapping: optional(primitive()),
65
65
  model: object(V1_PureModelContextData),
66
66
  runtime: custom(
67
- (val) => V1_serializeRuntime(val),
67
+ (val) => (val ? V1_serializeRuntime(val) : SKIP),
68
68
  () => SKIP,
69
69
  ),
70
70
  context: usingModelSchema(V1_rawBaseExecutionContextModelSchema),
@@ -0,0 +1,65 @@
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
+ createModelSchema,
19
+ custom,
20
+ deserialize,
21
+ optional,
22
+ primitive,
23
+ raw,
24
+ serialize,
25
+ } from 'serializr';
26
+ import { type PlainObject, SerializationFactory } from '@finos/legend-shared';
27
+ import type { V1_ModelUnit } from '../../model/packageableElements/externalFormat/store/V1_DSL_ExternalFormat_ModelUnit.js';
28
+ import type { V1_PureModelContext } from '../../model/context/V1_PureModelContext.js';
29
+ import { V1_pureModelContextPropSchema } from '../../transformation/pureProtocol/V1_PureProtocolSerialization.js';
30
+ import { V1_modelUnitModelSchema } from '../../transformation/pureProtocol/serializationHelpers/V1_DSL_ExternalFormat_ProtocolHelper.js';
31
+
32
+ export class V1_GenerateSchemaInput {
33
+ clientVersion?: string | undefined;
34
+ config?: PlainObject | undefined;
35
+ model: V1_PureModelContext;
36
+ generateBinding: boolean;
37
+ targetBindingPath: string | undefined;
38
+ sourceModelUnit: V1_ModelUnit;
39
+
40
+ constructor(
41
+ modelUnit: V1_ModelUnit,
42
+ model: V1_PureModelContext,
43
+ generateBinding: boolean,
44
+ config?: PlainObject,
45
+ ) {
46
+ this.sourceModelUnit = modelUnit;
47
+ this.model = model;
48
+ this.generateBinding = generateBinding;
49
+ this.config = config;
50
+ }
51
+
52
+ static readonly serialization = new SerializationFactory(
53
+ createModelSchema(V1_GenerateSchemaInput, {
54
+ clientVersion: optional(primitive()),
55
+ config: raw(),
56
+ model: V1_pureModelContextPropSchema,
57
+ generateBinding: optional(primitive()),
58
+ targetBindingPath: optional(primitive()),
59
+ sourceModelUnit: custom(
60
+ (val) => serialize(V1_modelUnitModelSchema, val),
61
+ (val) => deserialize(V1_modelUnitModelSchema, val),
62
+ ),
63
+ }),
64
+ );
65
+ }
@@ -18,7 +18,7 @@ import { hashArray, type Hashable } from '@finos/legend-shared';
18
18
  import { CORE_HASH_STRUCTURE } from '../../../../../../../graph/Core_HashUtils.js';
19
19
  import type { V1_EmbeddedData } from '../../data/V1_EmbeddedData.js';
20
20
 
21
- export class V1_StoreTestData implements Hashable {
21
+ export class V1_MappingTestData implements Hashable {
22
22
  store!: string;
23
23
  data!: V1_EmbeddedData;
24
24
 
@@ -17,10 +17,10 @@
17
17
  import { hashArray, type Hashable } from '@finos/legend-shared';
18
18
  import { CORE_HASH_STRUCTURE } from '../../../../../../../graph/Core_HashUtils.js';
19
19
  import { V1_TestSuite } from '../../test/V1_TestSuite.js';
20
- import type { V1_StoreTestData } from './V1_StoreTestData.js';
20
+ import type { V1_MappingTestData } from './V1_MappingTestData.js';
21
21
 
22
22
  export class V1_MappingTestSuite extends V1_TestSuite implements Hashable {
23
- storeTestDatas: V1_StoreTestData[] = [];
23
+ storeTestDatas: V1_MappingTestData[] = [];
24
24
 
25
25
  get hashCode(): string {
26
26
  return hashArray([
@@ -0,0 +1,36 @@
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 { V1_ModelUnit } from '../../../model/packageableElements/externalFormat/store/V1_DSL_ExternalFormat_ModelUnit.js';
18
+ import type { ModelUnit } from '../../../../../../../graph/metamodel/pure/packageableElements/externalFormat/store/DSL_ExternalFormat_ModelUnit.js';
19
+ import { PackageableElementReference } from '../../../../../../../graph/metamodel/pure/packageableElements/PackageableElementReference.js';
20
+
21
+ export const V1_transformModelUnit = (metamodel: ModelUnit): V1_ModelUnit => {
22
+ const modelUnit = new V1_ModelUnit();
23
+ modelUnit.packageableElementExcludes =
24
+ metamodel.packageableElementExcludes.map((path) =>
25
+ path instanceof PackageableElementReference
26
+ ? path.valueForSerialization ?? ''
27
+ : path,
28
+ );
29
+ modelUnit.packageableElementIncludes =
30
+ metamodel.packageableElementIncludes.map((path) =>
31
+ path instanceof PackageableElementReference
32
+ ? path.valueForSerialization ?? ''
33
+ : path,
34
+ );
35
+ return modelUnit;
36
+ };
@@ -161,8 +161,8 @@ import {
161
161
  import type { MappingTest } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/MappingTest.js';
162
162
  import type { MappingTestSuite } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.js';
163
163
  import { V1_MappingTestSuite } from '../../../model/packageableElements/mapping/V1_MappingTestSuite.js';
164
- import type { StoreTestData } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/StoreTestData.js';
165
- import { V1_StoreTestData } from '../../../model/packageableElements/mapping/V1_StoreTestData.js';
164
+ import type { MappingTestData } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/MappingTestData.js';
165
+ import { V1_MappingTestData } from '../../../model/packageableElements/mapping/V1_MappingTestData.js';
166
166
  import { V1_transformEmbeddedData } from './V1_DataElementTransformer.js';
167
167
 
168
168
  export const V1_transformPropertyReference = (
@@ -337,10 +337,10 @@ const transformMappingTestLegacy = (
337
337
  };
338
338
 
339
339
  const transformStoreTestData = (
340
- element: StoreTestData,
340
+ element: MappingTestData,
341
341
  context: V1_GraphTransformerContext,
342
- ): V1_StoreTestData => {
343
- const testData = new V1_StoreTestData();
342
+ ): V1_MappingTestData => {
343
+ const testData = new V1_MappingTestData();
344
344
  testData.data = V1_transformEmbeddedData(element.data, context);
345
345
  testData.store = element.store.valueForSerialization ?? '';
346
346
  return testData;
@@ -950,6 +950,13 @@ const transformRootRelationalSetImpl = (
950
950
  classMapping.primaryKey = element.primaryKey.map((pk) =>
951
951
  V1_transformRelationalOperationElement(pk, context),
952
952
  );
953
+
954
+ if (element.groupBy) {
955
+ classMapping.groupBy = element.groupBy.columns.map((pk) =>
956
+ V1_transformRelationalOperationElement(pk, context),
957
+ );
958
+ }
959
+
953
960
  if (element.filter) {
954
961
  const filter = new V1_FilterMapping();
955
962
  const filterPointer = new V1_FilterPointer();
@@ -77,8 +77,8 @@ import { V1_MappingTest } from '../../../../model/packageableElements/mapping/V1
77
77
  import type { TestSuite } from '../../../../../../../../graph/metamodel/pure/test/Test.js';
78
78
  import { MappingTest } from '../../../../../../../../graph/metamodel/pure/packageableElements/mapping/MappingTest.js';
79
79
  import { V1_buildTestAssertion } from './V1_TestBuilderHelper.js';
80
- import type { V1_StoreTestData } from '../../../../model/packageableElements/mapping/V1_StoreTestData.js';
81
- import { StoreTestData } from '../../../../../../../../graph/metamodel/pure/packageableElements/mapping/StoreTestData.js';
80
+ import type { V1_MappingTestData } from '../../../../model/packageableElements/mapping/V1_MappingTestData.js';
81
+ import { MappingTestData } from '../../../../../../../../graph/metamodel/pure/packageableElements/mapping/MappingTestData.js';
82
82
  import { V1_buildEmbeddedData } from './V1_DataElementBuilderHelper.js';
83
83
  import { ModelStore } from '../../../../../../../../DSL_Mapping_Exports.js';
84
84
 
@@ -210,10 +210,10 @@ export const V1_buildMappingInclude = (
210
210
  };
211
211
 
212
212
  const buildStoreTestData = (
213
- element: V1_StoreTestData,
213
+ element: V1_MappingTestData,
214
214
  context: V1_GraphBuilderContext,
215
- ): StoreTestData => {
216
- const storeTestData = new StoreTestData();
215
+ ): MappingTestData => {
216
+ const storeTestData = new MappingTestData();
217
217
  if (element.store === ModelStore.NAME) {
218
218
  storeTestData.store = PackageableElementExplicitReference.create(
219
219
  ModelStore.INSTANCE,
@@ -53,9 +53,11 @@ export const V1_buildRelationalClassMapping = (
53
53
  ? context.resolveClass(relationalClassMapping.class)
54
54
  : immediateParent.class;
55
55
  // TODO localMappingProperties
56
+
56
57
  immediateParent.primaryKey = relationalClassMapping.primaryKey.map((key) =>
57
58
  V1_buildRelationalOperationElement(key, context, tableAliasIndex, []),
58
59
  );
60
+
59
61
  immediateParent.propertyMappings =
60
62
  relationalClassMapping.propertyMappings.map((propertyMapping) =>
61
63
  propertyMapping.accept_PropertyMappingVisitor(
@@ -76,9 +78,7 @@ export const V1_buildRelationalPrimaryKey = (
76
78
  rootRelational: RootRelationalInstanceSetImplementation,
77
79
  ): void => {
78
80
  // TODO handle distinct
79
- if (rootRelational.groupBy) {
80
- rootRelational.primaryKey = rootRelational.groupBy.columns;
81
- } else if (!rootRelational.primaryKey.length) {
81
+ if (!rootRelational.groupBy && !rootRelational.primaryKey.length) {
82
82
  const relation = rootRelational.mainTableAlias?.relation.value;
83
83
  const mainTable = rootRelational.mainTableAlias;
84
84
  let columns: Column[] = [];
@@ -54,7 +54,7 @@ export const V1_schemaSetModelSchema = createModelSchema(V1_SchemaSet, {
54
54
  schemas: list(usingModelSchema(V1_schemaModelSchema)),
55
55
  });
56
56
 
57
- const V1_modelUnitModelSchema = createModelSchema(V1_ModelUnit, {
57
+ export const V1_modelUnitModelSchema = createModelSchema(V1_ModelUnit, {
58
58
  packageableElementExcludes: list(primitive()),
59
59
  packageableElementIncludes: list(primitive()),
60
60
  });
@@ -118,7 +118,7 @@ import {
118
118
  V1_serializeTestSuite,
119
119
  V1_TestSuiteType,
120
120
  } from './V1_TestSerializationHelper.js';
121
- import { V1_StoreTestData } from '../../../model/packageableElements/mapping/V1_StoreTestData.js';
121
+ import { V1_MappingTestData } from '../../../model/packageableElements/mapping/V1_MappingTestData.js';
122
122
  import {
123
123
  V1_deserializeEmbeddedDataType,
124
124
  V1_serializeEmbeddedDataType,
@@ -861,8 +861,8 @@ const V1_mappingTestModelLegacySchema = createModelSchema(
861
861
 
862
862
  export const V1_storeTestDataModelSchema = (
863
863
  plugins: PureProtocolProcessorPlugin[],
864
- ): ModelSchema<V1_StoreTestData> =>
865
- createModelSchema(V1_StoreTestData, {
864
+ ): ModelSchema<V1_MappingTestData> =>
865
+ createModelSchema(V1_MappingTestData, {
866
866
  data: custom(
867
867
  (val) => V1_serializeEmbeddedDataType(val, plugins),
868
868
  (val) => V1_deserializeEmbeddedDataType(val, plugins),
package/src/index.ts CHANGED
@@ -141,7 +141,9 @@ export { V1_ValueSpecification } from './graphManager/protocol/pure/v1/model/val
141
141
  export { V1_Multiplicity } from './graphManager/protocol/pure/v1/model/packageableElements/domain/V1_Multiplicity.js';
142
142
  export { V1_ExternalFormatDescription } from './graphManager/protocol/pure/v1/engine/externalFormat/V1_ExternalFormatDescription.js';
143
143
  export { V1_ExternalFormatModelGenerationInput } from './graphManager/protocol/pure/v1/engine/externalFormat/V1_ExternalFormatModelGeneration.js';
144
-
144
+ export { V1_ExecuteInput } from './graphManager/protocol/pure/v1/engine/execution/V1_ExecuteInput.js';
145
+ export { V1_buildExecutionResult } from './graphManager/protocol/pure/v1/engine/execution/V1_ExecutionHelper.js';
146
+ export { V1_serializeExecutionResult } from './graphManager/protocol/pure/v1/engine/execution/V1_ExecutionResult.js';
145
147
  // --------------------------------------------- EXECUTION PLAN --------------------------------------------------
146
148
 
147
149
  export * from './graph/metamodel/pure/executionPlan/ExecutionPlan.js';
package/tsconfig.json CHANGED
@@ -140,6 +140,7 @@
140
140
  "./src/graph/metamodel/pure/packageableElements/mapping/MappingInclude.ts",
141
141
  "./src/graph/metamodel/pure/packageableElements/mapping/MappingTest.ts",
142
142
  "./src/graph/metamodel/pure/packageableElements/mapping/MappingTestAssert.ts",
143
+ "./src/graph/metamodel/pure/packageableElements/mapping/MappingTestData.ts",
143
144
  "./src/graph/metamodel/pure/packageableElements/mapping/MappingTestSuite.ts",
144
145
  "./src/graph/metamodel/pure/packageableElements/mapping/MergeOperationSetImplementation.ts",
145
146
  "./src/graph/metamodel/pure/packageableElements/mapping/OperationSetImplementation.ts",
@@ -150,7 +151,6 @@
150
151
  "./src/graph/metamodel/pure/packageableElements/mapping/SetImplementation.ts",
151
152
  "./src/graph/metamodel/pure/packageableElements/mapping/SetImplementationContainer.ts",
152
153
  "./src/graph/metamodel/pure/packageableElements/mapping/SetImplementationReference.ts",
153
- "./src/graph/metamodel/pure/packageableElements/mapping/StoreTestData.ts",
154
154
  "./src/graph/metamodel/pure/packageableElements/mapping/SubstituteStore.ts",
155
155
  "./src/graph/metamodel/pure/packageableElements/mapping/TEMPORARY__UnresolvedSetImplementation.ts",
156
156
  "./src/graph/metamodel/pure/packageableElements/mapping/aggregationAware/AggregateSetImplementationContainer.ts",
@@ -343,6 +343,7 @@
343
343
  "./src/graphManager/protocol/pure/v1/engine/execution/V1_ExecutionResult.ts",
344
344
  "./src/graphManager/protocol/pure/v1/engine/externalFormat/V1_ExternalFormatDescription.ts",
345
345
  "./src/graphManager/protocol/pure/v1/engine/externalFormat/V1_ExternalFormatModelGeneration.ts",
346
+ "./src/graphManager/protocol/pure/v1/engine/externalFormat/V1_GenerateSchemaInput.ts",
346
347
  "./src/graphManager/protocol/pure/v1/engine/generation/V1_DatabaseBuilderInput.ts",
347
348
  "./src/graphManager/protocol/pure/v1/engine/generation/V1_FileGenerationInput.ts",
348
349
  "./src/graphManager/protocol/pure/v1/engine/generation/V1_GenerationConfigurationDescription.ts",
@@ -427,12 +428,12 @@
427
428
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingInclude.ts",
428
429
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTest.ts",
429
430
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestAssert.ts",
431
+ "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestData.ts",
430
432
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MappingTestSuite.ts",
431
433
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_MergeOperationClassMapping.ts",
432
434
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_OperationClassMapping.ts",
433
435
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.ts",
434
436
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationalAssociationMapping.ts",
435
- "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_StoreTestData.ts",
436
437
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/xStore/V1_XStoreAssociationMapping.ts",
437
438
  "./src/graphManager/protocol/pure/v1/model/packageableElements/mapping/xStore/V1_XStorePropertyMapping.ts",
438
439
  "./src/graphManager/protocol/pure/v1/model/packageableElements/runtime/V1_PackageableRuntime.ts",
@@ -575,6 +576,7 @@
575
576
  "./src/graphManager/protocol/pure/v1/model/valueSpecification/raw/executionContext/V1_ExecutionContext.ts",
576
577
  "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_ConnectionTransformer.ts",
577
578
  "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_CoreTransformerHelper.ts",
579
+ "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DSL_ExternalFormat_Transformer.ts",
578
580
  "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DataElementTransformer.ts",
579
581
  "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DatabaseTransformer.ts",
580
582
  "./src/graphManager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"StoreTestData.d.ts","sourceRoot":"","sources":["../../../../../../src/graph/metamodel/pure/packageableElements/mapping/StoreTestData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,qBAAa,aAAc,YAAW,QAAQ;IAC5C,KAAK,EAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,EAAG,YAAY,CAAC;IAEpB,IAAI,QAAQ,IAAI,MAAM,CAMrB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StoreTestData.js","sourceRoot":"","sources":["../../../../../../src/graph/metamodel/pure/packageableElements/mapping/StoreTestData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAK7E,MAAM,OAAO,aAAa;IACxB,KAAK,CAAsC;IAC3C,IAAI,CAAgB;IAEpB,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC;YACf,mBAAmB,CAAC,eAAe;YACnC,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE;YACtC,IAAI,CAAC,IAAI;SACV,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"V1_StoreTestData.d.ts","sourceRoot":"","sources":["../../../../../../../../src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_StoreTestData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,KAAK,EAAG,MAAM,CAAC;IACf,IAAI,EAAG,eAAe,CAAC;IAEvB,IAAI,QAAQ,IAAI,MAAM,CAMrB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"V1_StoreTestData.js","sourceRoot":"","sources":["../../../../../../../../src/graphManager/protocol/pure/v1/model/packageableElements/mapping/V1_StoreTestData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAGnF,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAU;IACf,IAAI,CAAmB;IAEvB,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC;YACf,mBAAmB,CAAC,eAAe;YACnC,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,IAAI;SACV,CAAC,CAAC;IACL,CAAC;CACF"}