@finos/legend-graph 32.0.6 → 32.0.7

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 (118) hide show
  1. package/lib/graph/Core_HashUtils.d.ts +2 -0
  2. package/lib/graph/Core_HashUtils.d.ts.map +1 -1
  3. package/lib/graph/Core_HashUtils.js +2 -0
  4. package/lib/graph/Core_HashUtils.js.map +1 -1
  5. package/lib/graph/helpers/DomainHelper.d.ts +3 -1
  6. package/lib/graph/helpers/DomainHelper.d.ts.map +1 -1
  7. package/lib/graph/helpers/DomainHelper.js +8 -2
  8. package/lib/graph/helpers/DomainHelper.js.map +1 -1
  9. package/lib/graph/helpers/PureLanguageHelper.d.ts +2 -0
  10. package/lib/graph/helpers/PureLanguageHelper.d.ts.map +1 -1
  11. package/lib/graph/helpers/PureLanguageHelper.js +7 -1
  12. package/lib/graph/helpers/PureLanguageHelper.js.map +1 -1
  13. package/lib/graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.d.ts +3 -4
  14. package/lib/graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.d.ts.map +1 -1
  15. package/lib/graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.js +1 -1
  16. package/lib/graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.js.map +1 -1
  17. package/lib/graph/metamodel/pure/packageableElements/mapping/PropertyMapping.d.ts +2 -0
  18. package/lib/graph/metamodel/pure/packageableElements/mapping/PropertyMapping.d.ts.map +1 -1
  19. package/lib/graph/metamodel/pure/packageableElements/mapping/PropertyMapping.js.map +1 -1
  20. package/lib/graph/metamodel/pure/packageableElements/mapping/SetImplementation.d.ts +2 -0
  21. package/lib/graph/metamodel/pure/packageableElements/mapping/SetImplementation.d.ts.map +1 -1
  22. package/lib/graph/metamodel/pure/packageableElements/mapping/SetImplementation.js +1 -1
  23. package/lib/graph/metamodel/pure/packageableElements/mapping/SetImplementation.js.map +1 -1
  24. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.d.ts +40 -0
  25. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.d.ts.map +1 -0
  26. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.js +47 -0
  27. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.js.map +1 -0
  28. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.d.ts +28 -0
  29. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.d.ts.map +1 -0
  30. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.js +51 -0
  31. package/lib/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.js.map +1 -0
  32. package/lib/graph-manager/action/changeDetection/DSL_Mapping_ObserverHelper.d.ts.map +1 -1
  33. package/lib/graph-manager/action/changeDetection/DSL_Mapping_ObserverHelper.js +6 -0
  34. package/lib/graph-manager/action/changeDetection/DSL_Mapping_ObserverHelper.js.map +1 -1
  35. package/lib/graph-manager/action/changeDetection/DomainObserverHelper.js +1 -1
  36. package/lib/graph-manager/action/changeDetection/DomainObserverHelper.js.map +1 -1
  37. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_ClassMapping.d.ts +2 -0
  38. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_ClassMapping.d.ts.map +1 -1
  39. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_ClassMapping.js.map +1 -1
  40. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.d.ts +2 -0
  41. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.d.ts.map +1 -1
  42. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.js.map +1 -1
  43. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.d.ts +26 -0
  44. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.d.ts.map +1 -0
  45. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.js +48 -0
  46. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.js.map +1 -0
  47. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.d.ts +38 -0
  48. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.d.ts.map +1 -0
  49. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.js +47 -0
  50. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.js.map +1 -0
  51. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.d.ts +3 -0
  52. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.d.ts.map +1 -1
  53. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.js +7 -1
  54. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.js.map +1 -1
  55. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.d.ts +2 -0
  56. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.d.ts.map +1 -1
  57. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.js +39 -1
  58. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.js.map +1 -1
  59. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingFirstPassBuilder.d.ts +2 -0
  60. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingFirstPassBuilder.d.ts.map +1 -1
  61. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingFirstPassBuilder.js +6 -0
  62. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingFirstPassBuilder.js.map +1 -1
  63. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingSecondPassBuilder.d.ts +2 -0
  64. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingSecondPassBuilder.d.ts.map +1 -1
  65. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingSecondPassBuilder.js +16 -0
  66. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingSecondPassBuilder.js.map +1 -1
  67. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementFirstPassBuilder.d.ts.map +1 -1
  68. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementFirstPassBuilder.js +3 -1
  69. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementFirstPassBuilder.js.map +1 -1
  70. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementSecondPassBuilder.d.ts.map +1 -1
  71. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementSecondPassBuilder.js +2 -2
  72. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementSecondPassBuilder.js.map +1 -1
  73. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_GraphBuilderContext.d.ts +3 -1
  74. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_GraphBuilderContext.d.ts.map +1 -1
  75. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_GraphBuilderContext.js +9 -2
  76. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_GraphBuilderContext.js.map +1 -1
  77. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_PropertyMappingBuilder.d.ts +2 -0
  78. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_PropertyMappingBuilder.d.ts.map +1 -1
  79. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_PropertyMappingBuilder.js +38 -0
  80. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_PropertyMappingBuilder.js.map +1 -1
  81. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_ValueSpecificationBuilderHelper.d.ts.map +1 -1
  82. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_ValueSpecificationBuilderHelper.js +1 -1
  83. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_ValueSpecificationBuilderHelper.js.map +1 -1
  84. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.d.ts.map +1 -1
  85. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.js +38 -0
  86. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.js.map +1 -1
  87. package/lib/index.d.ts +1 -0
  88. package/lib/index.d.ts.map +1 -1
  89. package/lib/index.js +1 -0
  90. package/lib/index.js.map +1 -1
  91. package/lib/package.json +1 -1
  92. package/package.json +1 -1
  93. package/src/graph/Core_HashUtils.ts +2 -0
  94. package/src/graph/helpers/DomainHelper.ts +13 -3
  95. package/src/graph/helpers/PureLanguageHelper.ts +13 -3
  96. package/src/graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.ts +4 -5
  97. package/src/graph/metamodel/pure/packageableElements/mapping/PropertyMapping.ts +4 -0
  98. package/src/graph/metamodel/pure/packageableElements/mapping/SetImplementation.ts +5 -1
  99. package/src/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.ts +58 -0
  100. package/src/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.ts +72 -0
  101. package/src/graph-manager/action/changeDetection/DSL_Mapping_ObserverHelper.ts +14 -0
  102. package/src/graph-manager/action/changeDetection/DomainObserverHelper.ts +1 -1
  103. package/src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_ClassMapping.ts +4 -0
  104. package/src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.ts +4 -0
  105. package/src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.ts +60 -0
  106. package/src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.ts +57 -0
  107. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DomainTransformer.ts +16 -3
  108. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_MappingTransformer.ts +71 -0
  109. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingFirstPassBuilder.ts +18 -0
  110. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ClassMappingSecondPassBuilder.ts +46 -0
  111. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementFirstPassBuilder.ts +6 -1
  112. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_ElementSecondPassBuilder.ts +3 -6
  113. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_GraphBuilderContext.ts +20 -1
  114. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/V1_PropertyMappingBuilder.ts +91 -0
  115. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_ValueSpecificationBuilderHelper.ts +1 -3
  116. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_MappingSerializationHelper.ts +59 -0
  117. package/src/index.ts +1 -0
  118. package/tsconfig.json +4 -0
@@ -67,6 +67,9 @@ import {
67
67
  import type { DSL_Mapping_PureProtocolProcessorPlugin_Extension } from '../../../../extensions/DSL_Mapping_PureProtocolProcessorPlugin_Extension.js';
68
68
  import type { V1_MergeOperationClassMapping } from '../../../model/packageableElements/mapping/V1_MergeOperationClassMapping.js';
69
69
  import type { V1_INTERNAL__UnknownClassMapping } from '../../../model/packageableElements/mapping/V1_INTERNAL__UnknownClassMapping.js';
70
+ import type { V1_RelationFunctionClassMapping } from '../../../model/packageableElements/mapping/V1_RelationFunctionClassMapping.js';
71
+ import { RelationFunctionInstanceSetImplementation } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.js';
72
+ import { generateFunctionPrettyName } from '../../../../../../../graph/helpers/PureLanguageHelper.js';
70
73
 
71
74
  export class V1_ClassMappingSecondPassBuilder
72
75
  implements V1_ClassMappingVisitor<void>
@@ -365,4 +368,47 @@ export class V1_ClassMappingSecondPassBuilder
365
368
 
366
369
  return aggragetionAwareInstanceSetImplementation;
367
370
  }
371
+
372
+ visit_RelationFunctionClassMapping(
373
+ classMapping: V1_RelationFunctionClassMapping,
374
+ ): SetImplementation {
375
+ assertNonEmptyString(
376
+ classMapping.class,
377
+ `Relation function class mapping 'class' field is missing or empty`,
378
+ );
379
+ const relationFunctionInstanceSetImplementation = guaranteeType(
380
+ getOwnClassMappingById(
381
+ this.parent,
382
+ V1_getInferredClassMappingId(
383
+ this.context.resolveClass(classMapping.class).value,
384
+ classMapping,
385
+ ).value,
386
+ ),
387
+ RelationFunctionInstanceSetImplementation,
388
+ );
389
+ relationFunctionInstanceSetImplementation.relationFunction =
390
+ guaranteeNonNullable(
391
+ this.context.graph.functions.find(
392
+ (fn) =>
393
+ generateFunctionPrettyName(fn, {
394
+ fullPath: true,
395
+ spacing: false,
396
+ notIncludeParamName: true,
397
+ }).replaceAll(/\s/gu, '') ===
398
+ classMapping.relationFunction.path.replaceAll(/\s/gu, ''),
399
+ ),
400
+ );
401
+ relationFunctionInstanceSetImplementation.propertyMappings =
402
+ classMapping.propertyMappings.map((propertyMapping) =>
403
+ propertyMapping.accept_PropertyMappingVisitor(
404
+ new V1_PropertyMappingBuilder(
405
+ this.context,
406
+ relationFunctionInstanceSetImplementation,
407
+ relationFunctionInstanceSetImplementation,
408
+ getAllEnumerationMappings(this.parent),
409
+ ),
410
+ ),
411
+ );
412
+ return relationFunctionInstanceSetImplementation;
413
+ }
368
414
  }
@@ -81,6 +81,8 @@ import { INTERNAL__UnknownElement } from '../../../../../../../graph/metamodel/p
81
81
  import type { V1_HostedService } from '../../../model/packageableElements/function/V1_HostedService.js';
82
82
  import { HostedService } from '../../../../../../../graph/metamodel/pure/packageableElements/function/HostedService.js';
83
83
  import { V1_buildFunctionActivatorActions } from './helpers/V1_LegendLambdaHelper.js';
84
+ import { GenericTypeImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/GenericTypeReference.js';
85
+ import { GenericType } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/GenericType.js';
84
86
 
85
87
  export class V1_ElementFirstPassBuilder
86
88
  implements V1_PackageableElementVisitor<PackageableElement>
@@ -438,7 +440,10 @@ export class V1_ElementFirstPassBuilder
438
440
  const func = new ConcreteFunctionDefinition(
439
441
  name,
440
442
  // This is just a stub to fill in when we first create the function
441
- PackageableElementImplicitReference.create(PrimitiveType.STRING, ''),
443
+ GenericTypeImplicitReference.create(
444
+ PackageableElementImplicitReference.create(PrimitiveType.STRING, ''),
445
+ new GenericType(PrimitiveType.STRING),
446
+ ),
442
447
  Multiplicity.ZERO_MANY,
443
448
  );
444
449
  const path = V1_buildFullPath(element.package, name);
@@ -86,10 +86,7 @@ import { V1_buildEmbeddedData } from './helpers/V1_DataElementBuilderHelper.js';
86
86
  import { V1_buildTestSuite } from './helpers/V1_TestBuilderHelper.js';
87
87
  import { ServiceTestSuite } from '../../../../../../../graph/metamodel/pure/packageableElements/service/ServiceTestSuite.js';
88
88
  import { V1_DataElementReference } from '../../../model/data/V1_EmbeddedData.js';
89
- import {
90
- V1_buildFunctionSignature,
91
- V1_getGenericTypeFullPath,
92
- } from '../../../helpers/V1_DomainHelper.js';
89
+ import { V1_buildFunctionSignature } from '../../../helpers/V1_DomainHelper.js';
93
90
  import { getFunctionName } from '../../../../../../../graph/helpers/DomainHelper.js';
94
91
  import { GraphBuilderError } from '../../../../../../GraphManagerUtils.js';
95
92
  import { PostValidation } from '../../../../../../../graph/metamodel/pure/packageableElements/service/PostValidation.js';
@@ -371,8 +368,8 @@ export class V1_ElementSecondPassBuilder
371
368
  const func = this.context.currentSubGraph.getOwnFunction(
372
369
  V1_buildFullPath(protocol.package, V1_buildFunctionSignature(protocol)),
373
370
  );
374
- func.returnType = this.context.resolveType(
375
- V1_getGenericTypeFullPath(protocol.returnGenericType),
371
+ func.returnType = this.context.resolveGenericTypeFromProtocol(
372
+ protocol.returnGenericType,
376
373
  );
377
374
  func.returnMultiplicity = this.context.graph.getMultiplicity(
378
375
  protocol.returnMultiplicity.lowerBound,
@@ -35,7 +35,10 @@ import {
35
35
  ImportAwareCodeSection,
36
36
  } from '../../../../../../../graph/metamodel/pure/packageableElements/section/Section.js';
37
37
  import { StereotypeImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/StereotypeReference.js';
38
- import { GenericTypeImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/GenericTypeReference.js';
38
+ import {
39
+ GenericTypeImplicitReference,
40
+ type GenericTypeReference,
41
+ } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/GenericTypeReference.js';
39
42
  import type { Type } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Type.js';
40
43
  import type { Class } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Class.js';
41
44
  import type { Enumeration } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Enumeration.js';
@@ -85,6 +88,7 @@ import {
85
88
  getOwnProperty,
86
89
  getStereotype,
87
90
  getTag,
91
+ newGenericType,
88
92
  } from '../../../../../../../graph/helpers/DomainHelper.js';
89
93
  import {
90
94
  getFilter,
@@ -96,6 +100,8 @@ import {
96
100
  } from '../../../../../../../graph/helpers/STO_FlatData_Helper.js';
97
101
  import type { PropertyOwner } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/AbstractProperty.js';
98
102
  import type { DataElement } from '../../../../../../../graph/metamodel/pure/packageableElements/data/DataElement.js';
103
+ import type { V1_GenericType } from '../../../model/packageableElements/type/V1_GenericType.js';
104
+ import { V1_getGenericTypeFullPath } from '../../../helpers/V1_DomainHelper.js';
99
105
 
100
106
  export const V1_buildFullPath = (
101
107
  packagePath: string | undefined,
@@ -315,6 +321,19 @@ export class V1_GraphBuilderContext {
315
321
  return GenericTypeImplicitReference.create(ownerReference, value);
316
322
  };
317
323
 
324
+ resolveGenericTypeFromProtocol = (
325
+ genericType: V1_GenericType,
326
+ ): GenericTypeReference => {
327
+ const ownerReference = this.resolveType(
328
+ V1_getGenericTypeFullPath(genericType),
329
+ );
330
+ const typeArguments = genericType.typeArguments.map((g) =>
331
+ this.resolveGenericTypeFromProtocol(g),
332
+ );
333
+ const value = newGenericType(ownerReference.value, typeArguments);
334
+ return GenericTypeImplicitReference.create(ownerReference, value);
335
+ };
336
+
318
337
  resolveOwnProperty = (
319
338
  pointer: V1_PropertyPointer,
320
339
  ): PropertyImplicitReference => {
@@ -105,6 +105,9 @@ import { FlatDataAssociationPropertyMapping } from '../../../../../../../graph/m
105
105
  import type { V1_INTERNAL__UnknownPropertyMapping } from '../../../model/packageableElements/mapping/V1_INTERNAL__UnknownPropertyMapping.js';
106
106
  import { INTERNAL__UnknownPropertyMapping } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/INTERNAL__UnknownPropertyMapping.js';
107
107
  import { INTERNAL__PseudoMapping } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/INTERNAL__PseudoMapping.js';
108
+ import type { V1_RelationFunctionPropertyMapping } from '../../../model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.js';
109
+ import { RelationFunctionPropertyMapping } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.js';
110
+ import { RelationColumn } from '../../../../../../../graph/metamodel/pure/packageableElements/relation/RelationType.js';
108
111
 
109
112
  const TEMPORARY__resolveSetImplementationByID = (
110
113
  mapping: Mapping,
@@ -1181,4 +1184,92 @@ export class V1_PropertyMappingBuilder
1181
1184
  }
1182
1185
  return aggregationAwarePropertyMapping;
1183
1186
  }
1187
+
1188
+ visit_RelationFunctionPropertyMapping(
1189
+ protocol: V1_RelationFunctionPropertyMapping,
1190
+ ): PropertyMapping {
1191
+ assertNonNullable(
1192
+ protocol.property,
1193
+ `Relation Function property mapping 'property' field is missing`,
1194
+ );
1195
+ assertNonEmptyString(
1196
+ protocol.property.property,
1197
+ `Relation Function property mapping 'property.property' field is missing or empty`,
1198
+ );
1199
+ let propertyOwner: Class | Association;
1200
+ let property: AbstractProperty;
1201
+ let localMapping: LocalMappingPropertyInfo | undefined;
1202
+ if (protocol.localMappingProperty) {
1203
+ const localMappingProperty = protocol.localMappingProperty;
1204
+ const mappingClass = new MappingClass(
1205
+ `${this.topParent?._PARENT.path}_${this.topParent?.id}${protocol.property.property}`,
1206
+ );
1207
+ const _multiplicity = this.context.graph.getMultiplicity(
1208
+ localMappingProperty.multiplicity.lowerBound,
1209
+ localMappingProperty.multiplicity.upperBound,
1210
+ );
1211
+ const _property = new Property(
1212
+ protocol.property.property,
1213
+ _multiplicity,
1214
+ this.context.resolveGenericType(localMappingProperty.type),
1215
+ mappingClass,
1216
+ );
1217
+ property = PropertyImplicitReference.create(
1218
+ PackageableElementImplicitReference.create(
1219
+ mappingClass,
1220
+ protocol.property.class,
1221
+ ),
1222
+ _property,
1223
+ ).value;
1224
+ localMapping = new LocalMappingPropertyInfo();
1225
+ localMapping.localMappingProperty = true;
1226
+ localMapping.localMappingPropertyMultiplicity = _multiplicity;
1227
+ localMapping.localMappingPropertyType = this.context.resolveType(
1228
+ localMappingProperty.type,
1229
+ );
1230
+ propertyOwner = property._OWNER;
1231
+ } else {
1232
+ if (protocol.property.class) {
1233
+ propertyOwner = this.context.resolveClass(
1234
+ protocol.property.class,
1235
+ ).value;
1236
+ } else {
1237
+ throw new GraphBuilderError(
1238
+ `Can't find property owner class for property '${protocol.property.property}'`,
1239
+ );
1240
+ }
1241
+ property =
1242
+ propertyOwner instanceof Class
1243
+ ? getClassProperty(propertyOwner, protocol.property.property)
1244
+ : getOwnProperty(propertyOwner, protocol.property.property);
1245
+ }
1246
+
1247
+ const sourceSetImplementation = guaranteeNonNullable(
1248
+ resolvePropertyMappingSourceImplementation(
1249
+ this.immediateParent,
1250
+ protocol,
1251
+ this.topParent,
1252
+ this.context,
1253
+ ),
1254
+ );
1255
+ const propertyType = property.genericType.value.rawType;
1256
+ const propertyMapping = new RelationFunctionPropertyMapping(
1257
+ this.topParent ?? this.immediateParent,
1258
+ PropertyImplicitReference.create(
1259
+ PackageableElementImplicitReference.create(
1260
+ propertyOwner,
1261
+ protocol.property.class ?? '',
1262
+ ),
1263
+ property,
1264
+ ),
1265
+ SetImplementationImplicitReference.create(
1266
+ sourceSetImplementation,
1267
+ protocol.source,
1268
+ ),
1269
+ undefined,
1270
+ new RelationColumn(protocol.column, propertyType),
1271
+ );
1272
+ propertyMapping.localMappingProperty = localMapping;
1273
+ return propertyMapping;
1274
+ }
1184
1275
  }
@@ -628,9 +628,7 @@ export const V1_buildBaseSimpleFunctionExpression = (
628
628
  expression.func = func;
629
629
  if (func) {
630
630
  const val = func.value;
631
- expression.genericType = GenericTypeExplicitReference.create(
632
- new GenericType(val.returnType.value),
633
- );
631
+ expression.genericType = val.returnType;
634
632
  expression.multiplicity = val.returnMultiplicity;
635
633
  }
636
634
  expression.parametersValues = processedParameters;
@@ -134,6 +134,8 @@ import { V1_MappingTest } from '../../../model/packageableElements/mapping/V1_Ma
134
134
  import type { V1_TestSuite } from '../../../model/test/V1_TestSuite.js';
135
135
  import { V1_INTERNAL__UnknownClassMapping } from '../../../model/packageableElements/mapping/V1_INTERNAL__UnknownClassMapping.js';
136
136
  import { V1_INTERNAL__UnknownMappingInclude } from '../../../model/packageableElements/mapping/V1_INTERNAL__UnknownMappingInclude.js';
137
+ import { V1_RelationFunctionClassMapping } from '../../../model/packageableElements/mapping/V1_RelationFunctionClassMapping.js';
138
+ import { V1_RelationFunctionPropertyMapping } from '../../../model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.js';
137
139
 
138
140
  enum V1_ClassMappingType {
139
141
  OPERATION = 'operation',
@@ -143,6 +145,7 @@ enum V1_ClassMappingType {
143
145
  ROOT_RELATIONAL = 'relational',
144
146
  RELATIONAL = 'embedded',
145
147
  AGGREGATION_AWARE = 'aggregationAware',
148
+ RELATION_FUNCTION = 'relation',
146
149
  }
147
150
 
148
151
  enum V1_PropertyMappingType {
@@ -156,6 +159,7 @@ enum V1_PropertyMappingType {
156
159
  OTHERWISE_EMBEDDED_RELATIONAL = 'otherwiseEmbeddedPropertyMapping',
157
160
  AGGREGATION_AWARE = 'AggregationAwarePropertyMapping',
158
161
  XSTORE = 'xStorePropertyMapping',
162
+ RELATION_FUNCTION = 'relationFunctionPropertyMapping',
159
163
  }
160
164
 
161
165
  // ------------------------------------- Shared -------------------------------------
@@ -658,6 +662,57 @@ const aggregationAwareClassMappingModelSchema = (
658
662
  root: primitive(),
659
663
  });
660
664
 
665
+ // ------------------------------------- Relation Function Mapping -------------------------------------
666
+
667
+ const relationFunctionPropertyMappingModelSchema = createModelSchema(
668
+ V1_RelationFunctionPropertyMapping,
669
+ {
670
+ _type: usingConstantValueSchema(V1_PropertyMappingType.RELATION_FUNCTION),
671
+ localMappingProperty: usingModelSchema(
672
+ V1_localMappingPropertyInfoModelSchema,
673
+ ),
674
+ property: usingModelSchema(V1_propertyPointerModelSchema),
675
+ source: optional(primitive()),
676
+ target: optional(primitive()),
677
+ column: primitive(),
678
+ },
679
+ );
680
+
681
+ function V1_serializeRelationFunctionPropertyMapping(
682
+ protocol: V1_RelationFunctionPropertyMapping,
683
+ ): PlainObject<V1_RelationFunctionPropertyMapping> {
684
+ return serialize(relationFunctionPropertyMappingModelSchema, protocol);
685
+ }
686
+
687
+ function V1_deserializeRelationFunctionPropertyMapping(
688
+ json: PlainObject<V1_RelationFunctionPropertyMapping>,
689
+ ): V1_RelationFunctionPropertyMapping | typeof SKIP {
690
+ switch (json._type) {
691
+ case V1_PropertyMappingType.RELATION_FUNCTION:
692
+ return deserialize(relationFunctionPropertyMappingModelSchema, json);
693
+ default:
694
+ return SKIP;
695
+ }
696
+ }
697
+
698
+ const relationFunctionClassMappingModelSchema = createModelSchema(
699
+ V1_RelationFunctionClassMapping,
700
+ {
701
+ _type: usingConstantValueSchema(V1_ClassMappingType.RELATION_FUNCTION),
702
+ class: primitive(),
703
+ extendsClassMappingId: optional(primitive()),
704
+ id: optional(primitive()),
705
+ propertyMappings: list(
706
+ custom(
707
+ V1_serializeRelationFunctionPropertyMapping,
708
+ V1_deserializeRelationFunctionPropertyMapping,
709
+ ),
710
+ ),
711
+ root: primitive(),
712
+ relationFunction: usingModelSchema(V1_packageableElementPointerModelSchema),
713
+ },
714
+ );
715
+
661
716
  // ------------------------------------- Class Mapping -------------------------------------
662
717
 
663
718
  function V1_serializeClassMapping(
@@ -680,6 +735,8 @@ function V1_serializeClassMapping(
680
735
  return serialize(relationalClassMappingModelSchema, value);
681
736
  } else if (value instanceof V1_AggregationAwareClassMapping) {
682
737
  return serialize(aggregationAwareClassMappingModelSchema(plugins), value);
738
+ } else if (value instanceof V1_RelationFunctionClassMapping) {
739
+ return serialize(relationFunctionClassMappingModelSchema, value);
683
740
  }
684
741
  const extraClassMappingSerializers = plugins.flatMap(
685
742
  (plugin) =>
@@ -730,6 +787,8 @@ function V1_deserializeClassMapping(
730
787
  aggregationAwareClassMappingModelSchema(plugins),
731
788
  json,
732
789
  );
790
+ case V1_ClassMappingType.RELATION_FUNCTION:
791
+ return deserialize(relationFunctionClassMappingModelSchema, json);
733
792
  default: {
734
793
  const extraClassMappingDeserializers = plugins.flatMap(
735
794
  (plugin) =>
package/src/index.ts CHANGED
@@ -645,6 +645,7 @@ export * from './graph/metamodel/pure/packageableElements/mapping/EnumValueMappi
645
645
  export { AssociationImplementation } from './graph/metamodel/pure/packageableElements/mapping/AssociationImplementation.js';
646
646
  export { SetImplementationContainer } from './graph/metamodel/pure/packageableElements/mapping/SetImplementationContainer.js';
647
647
  export { AggregationAwareSetImplementation } from './graph/metamodel/pure/packageableElements/mapping/aggregationAware/AggregationAwareSetImplementation.js';
648
+ export { RelationFunctionInstanceSetImplementation } from './graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.js';
648
649
  export * from './graph/metamodel/pure/packageableElements/mapping/InferableMappingElementId.js';
649
650
  export * from './graph/metamodel/pure/packageableElements/mapping/InferableMappingElementRoot.js';
650
651
  export { SetImplementationExplicitReference } from './graph/metamodel/pure/packageableElements/mapping/SetImplementationReference.js';
package/tsconfig.json CHANGED
@@ -234,6 +234,8 @@
234
234
  "./src/graph/metamodel/pure/packageableElements/mapping/aggregationAware/AggregationAwareSetImplementation.ts",
235
235
  "./src/graph/metamodel/pure/packageableElements/mapping/aggregationAware/AggregationFunctionSpecification.ts",
236
236
  "./src/graph/metamodel/pure/packageableElements/mapping/aggregationAware/GroupByFunctionSpecification.ts",
237
+ "./src/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionInstanceSetImplementation.ts",
238
+ "./src/graph/metamodel/pure/packageableElements/mapping/relationFunction/RelationFunctionPropertyMapping.ts",
237
239
  "./src/graph/metamodel/pure/packageableElements/mapping/xStore/XStoreAssociationImplementation.ts",
238
240
  "./src/graph/metamodel/pure/packageableElements/mapping/xStore/XStorePropertyFetchDetails.ts",
239
241
  "./src/graph/metamodel/pure/packageableElements/mapping/xStore/XStorePropertyMapping.ts",
@@ -601,6 +603,8 @@
601
603
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_MergeOperationClassMapping.ts",
602
604
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_OperationClassMapping.ts",
603
605
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_PropertyMapping.ts",
606
+ "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionClassMapping.ts",
607
+ "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationFunctionPropertyMapping.ts",
604
608
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/V1_RelationalAssociationMapping.ts",
605
609
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/xStore/V1_XStoreAssociationMapping.ts",
606
610
  "./src/graph-manager/protocol/pure/v1/model/packageableElements/mapping/xStore/V1_XStorePropertyFetchDetails.ts",