@finos/legend-graph 28.0.3 → 28.1.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 (99) hide show
  1. package/lib/graph/BasicModel.d.ts.map +1 -1
  2. package/lib/graph/BasicModel.js +1 -1
  3. package/lib/graph/BasicModel.js.map +1 -1
  4. package/lib/graph/Core_HashUtils.d.ts +1 -0
  5. package/lib/graph/Core_HashUtils.d.ts.map +1 -1
  6. package/lib/graph/Core_HashUtils.js +1 -0
  7. package/lib/graph/Core_HashUtils.js.map +1 -1
  8. package/lib/graph/DependencyManager.d.ts +23 -19
  9. package/lib/graph/DependencyManager.d.ts.map +1 -1
  10. package/lib/graph/DependencyManager.js +16 -4
  11. package/lib/graph/DependencyManager.js.map +1 -1
  12. package/lib/graph/GraphDataOrigin.d.ts +5 -0
  13. package/lib/graph/GraphDataOrigin.d.ts.map +1 -1
  14. package/lib/graph/GraphDataOrigin.js +7 -0
  15. package/lib/graph/GraphDataOrigin.js.map +1 -1
  16. package/lib/graph/MetaModelUtils.d.ts +1 -0
  17. package/lib/graph/MetaModelUtils.d.ts.map +1 -1
  18. package/lib/graph/MetaModelUtils.js +3 -0
  19. package/lib/graph/MetaModelUtils.js.map +1 -1
  20. package/lib/graph/metamodel/pure/packageableElements/store/relational/model/RelationalDataType.d.ts +3 -0
  21. package/lib/graph/metamodel/pure/packageableElements/store/relational/model/RelationalDataType.d.ts.map +1 -1
  22. package/lib/graph/metamodel/pure/packageableElements/store/relational/model/RelationalDataType.js +5 -0
  23. package/lib/graph/metamodel/pure/packageableElements/store/relational/model/RelationalDataType.js.map +1 -1
  24. package/lib/graph-manager/GraphData.d.ts +1 -1
  25. package/lib/graph-manager/GraphData.d.ts.map +1 -1
  26. package/lib/graph-manager/GraphData.js +1 -1
  27. package/lib/graph-manager/GraphData.js.map +1 -1
  28. package/lib/graph-manager/action/changeDetection/STO_Relational_ObserverHelper.d.ts.map +1 -1
  29. package/lib/graph-manager/action/changeDetection/STO_Relational_ObserverHelper.js +3 -2
  30. package/lib/graph-manager/action/changeDetection/STO_Relational_ObserverHelper.js.map +1 -1
  31. package/lib/graph-manager/action/validation/DSL_Service_ValidationHelper.d.ts.map +1 -1
  32. package/lib/graph-manager/action/validation/DSL_Service_ValidationHelper.js +3 -0
  33. package/lib/graph-manager/action/validation/DSL_Service_ValidationHelper.js.map +1 -1
  34. package/lib/graph-manager/protocol/pure/PureProtocolProcessorPlugin.d.ts +1 -9
  35. package/lib/graph-manager/protocol/pure/PureProtocolProcessorPlugin.d.ts.map +1 -1
  36. package/lib/graph-manager/protocol/pure/PureProtocolProcessorPlugin.js.map +1 -1
  37. package/lib/graph-manager/protocol/pure/extensions/DSL_ExternalFormat_PureProtocolProcessorPlugin.d.ts +1 -2
  38. package/lib/graph-manager/protocol/pure/extensions/DSL_ExternalFormat_PureProtocolProcessorPlugin.d.ts.map +1 -1
  39. package/lib/graph-manager/protocol/pure/extensions/DSL_ExternalFormat_PureProtocolProcessorPlugin.js +0 -5
  40. package/lib/graph-manager/protocol/pure/extensions/DSL_ExternalFormat_PureProtocolProcessorPlugin.js.map +1 -1
  41. package/lib/graph-manager/protocol/pure/v1/V1_PureGraphManager.d.ts +3 -5
  42. package/lib/graph-manager/protocol/pure/v1/V1_PureGraphManager.d.ts.map +1 -1
  43. package/lib/graph-manager/protocol/pure/v1/V1_PureGraphManager.js +73 -86
  44. package/lib/graph-manager/protocol/pure/v1/V1_PureGraphManager.js.map +1 -1
  45. package/lib/graph-manager/protocol/pure/v1/engine/execution/V1_ExecuteInput.d.ts.map +1 -1
  46. package/lib/graph-manager/protocol/pure/v1/engine/execution/V1_ExecuteInput.js +3 -4
  47. package/lib/graph-manager/protocol/pure/v1/engine/execution/V1_ExecuteInput.js.map +1 -1
  48. package/lib/graph-manager/protocol/pure/v1/engine/generation/V1_GenerationInput.d.ts +1 -1
  49. package/lib/graph-manager/protocol/pure/v1/engine/generation/V1_GenerationInput.d.ts.map +1 -1
  50. package/lib/graph-manager/protocol/pure/v1/engine/generation/V1_GenerationInput.js +3 -3
  51. package/lib/graph-manager/protocol/pure/v1/engine/generation/V1_GenerationInput.js.map +1 -1
  52. package/lib/graph-manager/protocol/pure/v1/model/context/V1_PureModelContextData.d.ts +7 -0
  53. package/lib/graph-manager/protocol/pure/v1/model/context/V1_PureModelContextData.d.ts.map +1 -1
  54. package/lib/graph-manager/protocol/pure/v1/model/context/V1_PureModelContextData.js +6 -0
  55. package/lib/graph-manager/protocol/pure/v1/model/context/V1_PureModelContextData.js.map +1 -1
  56. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/store/relational/model/V1_RelationalDataType.d.ts +3 -0
  57. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/store/relational/model/V1_RelationalDataType.d.ts.map +1 -1
  58. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/store/relational/model/V1_RelationalDataType.js +5 -0
  59. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/store/relational/model/V1_RelationalDataType.js.map +1 -1
  60. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DatabaseTransformer.d.ts.map +1 -1
  61. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DatabaseTransformer.js +5 -2
  62. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DatabaseTransformer.js.map +1 -1
  63. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_DatabaseBuilderHelper.d.ts.map +1 -1
  64. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_DatabaseBuilderHelper.js +5 -2
  65. package/lib/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_DatabaseBuilderHelper.js.map +1 -1
  66. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_PureProtocolSerialization.d.ts +1 -0
  67. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_PureProtocolSerialization.d.ts.map +1 -1
  68. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_PureProtocolSerialization.js +10 -1
  69. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_PureProtocolSerialization.js.map +1 -1
  70. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DatabaseSerializationHelper.d.ts.map +1 -1
  71. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DatabaseSerializationHelper.js +10 -1
  72. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DatabaseSerializationHelper.js.map +1 -1
  73. package/lib/index.d.ts +1 -1
  74. package/lib/index.d.ts.map +1 -1
  75. package/lib/index.js +1 -1
  76. package/lib/index.js.map +1 -1
  77. package/lib/package.json +1 -1
  78. package/package.json +3 -3
  79. package/src/graph/BasicModel.ts +1 -3
  80. package/src/graph/Core_HashUtils.ts +1 -0
  81. package/src/graph/DependencyManager.ts +39 -21
  82. package/src/graph/GraphDataOrigin.ts +11 -0
  83. package/src/graph/MetaModelUtils.ts +8 -0
  84. package/src/graph/metamodel/pure/packageableElements/store/relational/model/RelationalDataType.ts +6 -0
  85. package/src/graph-manager/GraphData.ts +1 -1
  86. package/src/graph-manager/action/changeDetection/STO_Relational_ObserverHelper.ts +3 -1
  87. package/src/graph-manager/action/validation/DSL_Service_ValidationHelper.ts +2 -0
  88. package/src/graph-manager/protocol/pure/PureProtocolProcessorPlugin.ts +0 -11
  89. package/src/graph-manager/protocol/pure/extensions/DSL_ExternalFormat_PureProtocolProcessorPlugin.ts +0 -17
  90. package/src/graph-manager/protocol/pure/v1/V1_PureGraphManager.ts +110 -145
  91. package/src/graph-manager/protocol/pure/v1/engine/execution/V1_ExecuteInput.ts +5 -4
  92. package/src/graph-manager/protocol/pure/v1/engine/generation/V1_GenerationInput.ts +4 -3
  93. package/src/graph-manager/protocol/pure/v1/model/context/V1_PureModelContextData.ts +7 -0
  94. package/src/graph-manager/protocol/pure/v1/model/packageableElements/store/relational/model/V1_RelationalDataType.ts +6 -0
  95. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/from/V1_DatabaseTransformer.ts +4 -0
  96. package/src/graph-manager/protocol/pure/v1/transformation/pureGraph/to/helpers/V1_DatabaseBuilderHelper.ts +4 -0
  97. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_PureProtocolSerialization.ts +17 -1
  98. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/serializationHelpers/V1_DatabaseSerializationHelper.ts +10 -0
  99. package/src/index.ts +2 -0
@@ -100,9 +100,10 @@ import { V1_LambdaReturnTypeInput } from './engine/compilation/V1_LambdaReturnTy
100
100
  import { MultiExecutionServiceTestResult } from '../../../../graph/metamodel/pure/packageableElements/service/MultiExecutionServiceTestResult.js';
101
101
  import { V1_ExecutionEnvironmentInstance } from './model/packageableElements/service/V1_ExecutionEnvironmentInstance.js';
102
102
  import { V1_EntitlementReportAnalyticsInput, V1_StoreEntitlementAnalysisInput, V1_buildDatasetEntitlementReport, V1_buildDatasetSpecification, V1_transformDatasetSpecification, } from './engine/analytics/V1_StoreEntitlementAnalysis.js';
103
- import { LegendSDLC, } from '../../../../graph/GraphDataOrigin.js';
104
- import { LiveGraphData, GraphDataWithOrigin, } from '../../../GraphData.js';
103
+ import { LegendSDLC, GraphEntities, } from '../../../../graph/GraphDataOrigin.js';
104
+ import { InMemoryGraphData, GraphDataWithOrigin, } from '../../../GraphData.js';
105
105
  import { DEPRECATED__validate_MappingTest } from '../../../action/validation/DSL_Mapping_ValidationHelper.js';
106
+ import { V1_SERVICE_ELEMENT_PROTOCOL_TYPE } from './transformation/pureProtocol/serializationHelpers/V1_ServiceSerializationHelper.js';
106
107
  class V1_PureModelContextDataIndex {
107
108
  elements = [];
108
109
  nativeElements = [];
@@ -128,6 +129,8 @@ const mergePureModelContextData = (...data) => {
128
129
  const mergedData = new V1_PureModelContextData();
129
130
  for (const _data of data) {
130
131
  mergedData.elements = mergedData.elements.concat(_data.elements);
132
+ mergedData.INTERNAL__rawDependencyEntities =
133
+ mergedData.INTERNAL__rawDependencyEntities.concat(_data.INTERNAL__rawDependencyEntities);
131
134
  mergedData.serializer = _data.serializer ?? mergedData.serializer;
132
135
  mergedData.origin = _data.origin ?? mergedData.origin;
133
136
  }
@@ -344,6 +347,12 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
344
347
  }));
345
348
  // build
346
349
  await this.buildGraphFromInputs(graph, buildInputs, report, stopWatch, buildState, options);
350
+ // set dependency manager graph origin to entities
351
+ if (dependencyManager.origin === undefined) {
352
+ dependencyManager.setOrigin(new GraphEntities(Array.from(dependencyEntitiesIndex.values())
353
+ .map((e) => e.entities)
354
+ .flat()));
355
+ }
347
356
  buildState.pass();
348
357
  const totalTime = stopWatch.elapsed;
349
358
  report.timings = {
@@ -389,10 +398,6 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
389
398
  if (!options?.TEMPORARY__preserveSectionIndex) {
390
399
  graph.TEMPORARY__deleteOwnSectionIndex();
391
400
  }
392
- /**
393
- * This sets the SDLC of the graph if there exists a versioned `SDLC` of the graph. This means the graph is immutable and we can easily `refetch`
394
- * the graph with the provided sdlc pointer
395
- */
396
401
  if (options?.origin) {
397
402
  graph.setOrigin(options.origin);
398
403
  }
@@ -958,14 +963,10 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
958
963
  return this.pureModelContextDataToEntities(graphData);
959
964
  };
960
965
  // --------------------------------------------- Execution ---------------------------------------------
961
- createExecutionInput = (graph, mapping, lambda, runtime, clientVersion, parameterValues) => this.buildExecutionInput(graph, mapping, lambda, runtime, clientVersion, new V1_ExecuteInput(), parameterValues);
962
- buildExecutionInput = (graph, mapping, lambda, runtime, clientVersion, executeInput, parameterValues) => {
963
- const pureModelContext = graph.origin
964
- ? this.buildPureModelSDLCPointer(graph.origin, undefined)
965
- : this.buildExecutionInputGraphData(graph, mapping, runtime);
966
- return this.buildExecutionInputWithPureModelContext(pureModelContext, mapping, lambda, runtime, clientVersion, executeInput, parameterValues);
967
- };
968
- buildExecutionInputWithPureModelContext = (pureModelContext, mapping, lambda, runtime, clientVersion, executeInput, parameterValues) => {
966
+ createExecutionInput = (graph, mapping, lambda, runtime, clientVersion, parameterValues) => this.createExecutionInputWithPureModelContext(graph.origin
967
+ ? this.buildPureModelSDLCPointer(graph.origin, undefined)
968
+ : this.buildExecutionInputGraphData(graph), mapping, lambda, runtime, clientVersion, new V1_ExecuteInput(), parameterValues);
969
+ createExecutionInputWithPureModelContext = (data, mapping, lambda, runtime, clientVersion, executeInput, parameterValues) => {
969
970
  // NOTE: for execution, we usually will just assume that we send the connections embedded in the runtime value, since we don't want the user to have to create
970
971
  // packageable runtime and connection just to play with execution.
971
972
  executeInput.clientVersion = clientVersion;
@@ -974,14 +975,14 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
974
975
  executeInput.runtime = runtime
975
976
  ? V1_transformRuntime(runtime, new V1_GraphTransformerContextBuilder(this.pluginManager.getPureProtocolProcessorPlugins()).build())
976
977
  : undefined;
977
- executeInput.model = pureModelContext;
978
+ executeInput.model = data;
978
979
  executeInput.context = new V1_RawBaseExecutionContext(); // TODO: potentially need to support more types
979
980
  if (parameterValues) {
980
- executeInput.parameterValues = parameterValues.map((p) => V1_transformParameterValue(p));
981
+ executeInput.parameterValues = parameterValues.map((parameterValue) => V1_transformParameterValue(parameterValue));
981
982
  }
982
983
  return executeInput;
983
984
  };
984
- buildExecutionInputGraphData(graph, mapping, runtime) {
985
+ buildExecutionInputGraphData(graph) {
985
986
  /**
986
987
  * NOTE: to lessen network load, we might need to think of a way to only include relevant part of the pure model context data here
987
988
  *
@@ -996,13 +997,7 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
996
997
  * for mapping used for execution, but this can generalized if we introduce hierarchy/ranking for model type
997
998
  */
998
999
  const graphData = this.getFullGraphModelData(graph);
999
- const prunedGraphData = new V1_PureModelContextData();
1000
- const extraExecutionElements = this.pluginManager
1001
- .getPureProtocolProcessorPlugins()
1002
- .flatMap((element) => element.V1_getExtraExecutionInputCollectors?.() ?? [])
1003
- .flatMap((getter) => getter(graph, mapping, runtime, graphData));
1004
- prunedGraphData.elements = uniq(graphData.elements
1005
- .filter((element) => element instanceof V1_Class ||
1000
+ const prunedGraphData = this.prunePureModelContextData(graphData, (element) => element instanceof V1_Class ||
1006
1001
  element instanceof V1_Enumeration ||
1007
1002
  element instanceof V1_Profile ||
1008
1003
  element instanceof V1_Association ||
@@ -1011,8 +1006,15 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1011
1006
  element instanceof V1_Store ||
1012
1007
  element instanceof V1_PackageableConnection ||
1013
1008
  element instanceof V1_PackageableRuntime ||
1014
- element instanceof V1_Mapping)
1015
- .concat(extraExecutionElements));
1009
+ element instanceof V1_Mapping, undefined);
1010
+ const extraExecutionElements = this.pluginManager
1011
+ .getPureProtocolProcessorPlugins()
1012
+ .flatMap((element) => element.V1_getExtraExecutionInputCollectors?.() ?? [])
1013
+ .flatMap((getter) => getter(graph, graphData));
1014
+ prunedGraphData.elements = uniq([
1015
+ ...prunedGraphData.elements,
1016
+ ...extraExecutionElements,
1017
+ ]);
1016
1018
  return prunedGraphData;
1017
1019
  }
1018
1020
  async runQuery(lambda, mapping, runtime, graph, options, _report) {
@@ -1033,17 +1035,17 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1033
1035
  const stopWatch = new StopWatch();
1034
1036
  const pureModelContext = graph.origin
1035
1037
  ? this.buildPureModelSDLCPointer(graph.origin, undefined)
1036
- : this.buildExecutionInputGraphData(graph, mapping, undefined);
1038
+ : this.buildExecutionInputGraphData(graph);
1037
1039
  stopWatch.record(GRAPH_MANAGER_EVENT.V1_ENGINE_OPERATION_INPUT__SUCCESS);
1038
1040
  await Promise.all(tests.map((t) => this.DEPRECATED__runLegacyMappingTest(t, mapping, pureModelContext, options, report)));
1039
1041
  }
1040
- async DEPRECATED__runLegacyMappingTest(testInfo, mapping, pureModelContext, options, _report) {
1042
+ async DEPRECATED__runLegacyMappingTest(testInfo, mapping, data, options, _report) {
1041
1043
  const report = _report ?? createGraphManagerOperationReport();
1042
1044
  try {
1043
1045
  const stopWatch = new StopWatch();
1044
1046
  stopWatch.record(GRAPH_MANAGER_EVENT.V1_ENGINE_OPERATION_INPUT__SUCCESS);
1045
1047
  DEPRECATED__validate_MappingTest(testInfo.test);
1046
- const input = this.buildExecutionInputWithPureModelContext(pureModelContext, mapping, testInfo.test.query, testInfo.runtime, V1_PureGraphManager.PROD_PROTOCOL_VERSION, new V1_ExecuteInput(), options?.parameterValues);
1048
+ const input = this.createExecutionInputWithPureModelContext(data, mapping, testInfo.test.query, testInfo.runtime, V1_PureGraphManager.PROD_PROTOCOL_VERSION, new V1_ExecuteInput(), options?.parameterValues);
1047
1049
  const result = V1_buildExecutionResult(await this.engine.executeMapping(input, options));
1048
1050
  stopWatch.record(GRAPH_MANAGER_EVENT.V1_ENGINE_OPERATION_SERVER_CALL__SUCCESS);
1049
1051
  report.timings = {
@@ -1090,7 +1092,9 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1090
1092
  const report = _report ?? createGraphManagerOperationReport();
1091
1093
  const stopWatch = new StopWatch();
1092
1094
  const testDataGenerationExecuteInput = new V1_TestDataGenerationExecutionInput();
1093
- this.buildExecutionInput(graph, mapping, lambda, runtime, V1_PureGraphManager.DEV_PROTOCOL_VERSION, testDataGenerationExecuteInput);
1095
+ this.createExecutionInputWithPureModelContext(graph.origin
1096
+ ? this.buildPureModelSDLCPointer(graph.origin, undefined)
1097
+ : this.buildExecutionInputGraphData(graph), mapping, lambda, runtime, V1_PureGraphManager.DEV_PROTOCOL_VERSION, testDataGenerationExecuteInput);
1094
1098
  testDataGenerationExecuteInput.parameters = parameters;
1095
1099
  testDataGenerationExecuteInput.hashStrings = Boolean(options?.anonymizeGeneratedData);
1096
1100
  stopWatch.record(GRAPH_MANAGER_EVENT.V1_ENGINE_OPERATION_INPUT__SUCCESS);
@@ -1119,7 +1123,8 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1119
1123
  const protocol = new V1_Protocol(V1_PureGraphManager.PURE_PROTOCOL_NAME, serverServiceInfo.services.dependencies.pure);
1120
1124
  switch (executionMode) {
1121
1125
  case ServiceExecutionMode.FULL_INTERACTIVE: {
1122
- const data = this.createServiceRegistrationInput(graph, service);
1126
+ const data = this.createServiceRegistrationInputGraphData(graph);
1127
+ data.elements.push(this.elementToProtocol(service));
1123
1128
  data.origin = new V1_PureModelContextPointer(protocol);
1124
1129
  input = data;
1125
1130
  break;
@@ -1180,8 +1185,9 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1180
1185
  const protocol = new V1_Protocol(V1_PureGraphManager.PURE_PROTOCOL_NAME, serverServiceInfo.services.dependencies.pure);
1181
1186
  switch (executionMode) {
1182
1187
  case ServiceExecutionMode.FULL_INTERACTIVE: {
1183
- const pmcp = this.createBulkServiceRegistrationInput(graph, services);
1184
- pmcp.forEach((data) => {
1188
+ services.forEach((service) => {
1189
+ const data = this.prunePureModelContextData(this.createServiceRegistrationInputGraphData(graph));
1190
+ data.elements.push(this.elementToProtocol(service));
1185
1191
  data.origin = new V1_PureModelContextPointer(protocol);
1186
1192
  input.push(data);
1187
1193
  });
@@ -1264,23 +1270,16 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1264
1270
  const serviceStorage = await this.engine.getServiceVersionInfo(serviceUrl, serviceId);
1265
1271
  await this.engine.activateServiceGeneration(serviceUrl, serviceStorage.getGenerationId());
1266
1272
  }
1267
- createServiceRegistrationInput = (graph, service) => {
1268
- const graphData = this.getFullGraphModelData(graph);
1269
- const prunedGraphData = new V1_PureModelContextData();
1270
- prunedGraphData.elements = graphData.elements.filter((element) => !(element instanceof V1_Service));
1271
- prunedGraphData.elements.push(this.elementToProtocol(service));
1272
- return prunedGraphData;
1273
- };
1274
- createBulkServiceRegistrationInput = (graph, services) => {
1273
+ // NOTE: We almost should never be poking into dependency entities. However for service registration the input
1274
+ // expects only one service in the graph data. Perhaps, the service registration API should be modified to accept
1275
+ // service as a parameter outside the model
1276
+ createServiceRegistrationInputGraphData = (graph) => {
1275
1277
  const graphData = this.getFullGraphModelData(graph);
1276
- const results = [];
1277
- services.forEach((service) => {
1278
- const prunedGraphData = new V1_PureModelContextData();
1279
- prunedGraphData.elements = graphData.elements.filter((element) => !(element instanceof V1_Service));
1280
- prunedGraphData.elements.push(this.elementToProtocol(service));
1281
- results.push(prunedGraphData);
1278
+ const prunedGraphData = this.prunePureModelContextData(graphData, (element) => !(element instanceof V1_Service), (entity) => {
1279
+ const content = entity.content;
1280
+ return content._type !== V1_SERVICE_ELEMENT_PROTOCOL_TYPE;
1282
1281
  });
1283
- return results;
1282
+ return prunedGraphData;
1284
1283
  };
1285
1284
  // --------------------------------------------- Query ---------------------------------------------
1286
1285
  async searchQueries(searchSpecification) {
@@ -1341,44 +1340,13 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1341
1340
  : element.path, element.hashCode))));
1342
1341
  return hashMap;
1343
1342
  }
1344
- // ---------------------------------------- Analysis ----------------------------------------
1345
- buildMappingModelCoverageAnalysisInputContextData = (graph) => {
1346
- /**
1347
- * To lessen network load, we only include relevant part of the pure model context data here
1348
- *
1349
- * Graph data models can be classified based on dependency hieararchy:
1350
- * 1. Building blocks: models that all other models depend on: e.g. domain models, connections, etc.
1351
- * 2. Consumers: models that depends on other models: e.g. mapping, service, etc.
1352
- * 3. Unrelated: models that depends on nothing and vice versa: e.g. text
1353
- *
1354
- * For analyzing mapping, we choose to include some building blocks and mappings.
1355
- */
1356
- const graphData = this.getFullGraphModelData(graph);
1357
- const prunedGraphData = new V1_PureModelContextData();
1358
- const extraElements = this.pluginManager
1359
- .getPureProtocolProcessorPlugins()
1360
- .flatMap((element) => element.V1_getExtraMappingModelCoverageAnalysisInputCollectors?.() ??
1361
- [])
1362
- .flatMap((getter) => getter(graph, graphData));
1363
- prunedGraphData.elements = uniq(graphData.elements
1364
- .filter((element) => element instanceof V1_Class ||
1365
- element instanceof V1_Enumeration ||
1366
- element instanceof V1_Profile ||
1367
- element instanceof V1_Association ||
1368
- element instanceof V1_ConcreteFunctionDefinition ||
1369
- element instanceof V1_Measure ||
1370
- element instanceof V1_Store ||
1371
- element instanceof V1_Mapping)
1372
- .concat(extraElements));
1373
- return prunedGraphData;
1374
- };
1375
1343
  async analyzeMappingModelCoverage(mapping, graph) {
1376
1344
  const input = new V1_MappingModelCoverageAnalysisInput();
1377
1345
  input.clientVersion = V1_PureGraphManager.DEV_PROTOCOL_VERSION;
1378
1346
  input.mapping = mapping.path;
1379
1347
  input.model = graph.origin
1380
1348
  ? this.buildPureModelSDLCPointer(graph.origin, undefined)
1381
- : this.buildMappingModelCoverageAnalysisInputContextData(graph);
1349
+ : this.buildExecutionInputGraphData(graph);
1382
1350
  return V1_buildModelCoverageAnalysisResult(await this.engine.analyzeMappingModelCoverage(input), mapping);
1383
1351
  }
1384
1352
  buildMappingModelCoverageAnalysisResult(input, mapping) {
@@ -1392,8 +1360,8 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1392
1360
  input.query = query
1393
1361
  ? V1_transformRawLambda(query, new V1_GraphTransformerContextBuilder(this.pluginManager.getPureProtocolProcessorPlugins()).build())
1394
1362
  : undefined;
1395
- if (graphData instanceof LiveGraphData) {
1396
- input.model = this.buildExecutionInputGraphData(graphData.graph, mapping, undefined);
1363
+ if (graphData instanceof InMemoryGraphData) {
1364
+ input.model = this.buildExecutionInputGraphData(graphData.graph);
1397
1365
  }
1398
1366
  else if (graphData instanceof GraphDataWithOrigin) {
1399
1367
  input.model = this.buildPureModelSDLCPointer(graphData.origin, V1_PureGraphManager.PROD_PROTOCOL_VERSION);
@@ -1446,6 +1414,13 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1446
1414
  return entity;
1447
1415
  };
1448
1416
  // --------------------------------------------- Shared ---------------------------------------------
1417
+ prunePureModelContextData = (data, elementFilter, entityFilter) => {
1418
+ const prunedGraphData = new V1_PureModelContextData();
1419
+ prunedGraphData.elements = data.elements.filter((element) => elementFilter ? elementFilter(element) : true);
1420
+ prunedGraphData.INTERNAL__rawDependencyEntities =
1421
+ data.INTERNAL__rawDependencyEntities.filter((entity) => entityFilter ? entityFilter(entity) : true);
1422
+ return prunedGraphData;
1423
+ };
1449
1424
  buildPureModelSDLCPointer(origin, clientVersion) {
1450
1425
  if (origin instanceof LegendSDLC) {
1451
1426
  return new V1_PureModelContextPointer(clientVersion
@@ -1534,6 +1509,10 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1534
1509
  ...contextData1.elements,
1535
1510
  ...contextData2.elements,
1536
1511
  ];
1512
+ contextData1.INTERNAL__rawDependencyEntities = [
1513
+ ...contextData1.INTERNAL__rawDependencyEntities,
1514
+ ...contextData2.INTERNAL__rawDependencyEntities,
1515
+ ];
1537
1516
  return contextData1;
1538
1517
  }
1539
1518
  elementProtocolToEntity = (elementProtocol) => ({
@@ -1628,10 +1607,18 @@ class V1_PureGraphManager extends AbstractPureGraphManager {
1628
1607
  const graphData = new V1_PureModelContextData();
1629
1608
  const dependencyManager = graph.dependencyManager;
1630
1609
  const generatedModel = graph.generationModel;
1631
- graphData.elements = [
1632
- ...dependencyManager.allOwnElements,
1633
- ...generatedModel.allOwnElements,
1634
- ].map((element) => this.elementToProtocol(element));
1610
+ let elements = [...generatedModel.allOwnElements];
1611
+ if (dependencyManager.origin instanceof GraphEntities) {
1612
+ // If dependency manager holds the original entities we will just use those to save on transforming/serialization
1613
+ // of dependency elements. This can further be improved by adding support for PureModelContext composite so engine understands
1614
+ // list of pure model context sdlc pointers for dependencies.
1615
+ graphData.INTERNAL__rawDependencyEntities =
1616
+ dependencyManager.origin.entities;
1617
+ }
1618
+ else {
1619
+ elements = [...dependencyManager.allOwnElements, ...elements];
1620
+ }
1621
+ graphData.elements = elements.map((element) => this.elementToProtocol(element));
1635
1622
  this.logService.info(LogEvent.create(GRAPH_MANAGER_EVENT.COLLECT_GRAPH_COMPILE_CONTEXT__SUCCESS), Date.now() - startTime, 'ms');
1636
1623
  return graphData;
1637
1624
  };