@finos/legend-extension-dsl-data-quality 2.1.71 → 2.1.73

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 (66) hide show
  1. package/lib/components/DSL_DataQuality_ElementDriver.d.ts.map +1 -1
  2. package/lib/components/DSL_DataQuality_ElementDriver.js +6 -4
  3. package/lib/components/DSL_DataQuality_ElementDriver.js.map +1 -1
  4. package/lib/components/DataQualityDataSpaceBuilder.js +2 -2
  5. package/lib/components/DataQualityDataSpaceBuilder.js.map +1 -1
  6. package/lib/components/states/DataQualityClassValidationState.d.ts.map +1 -1
  7. package/lib/components/states/DataQualityClassValidationState.js +12 -9
  8. package/lib/components/states/DataQualityClassValidationState.js.map +1 -1
  9. package/lib/data-quality-custom-selector.css +1 -1
  10. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts +4 -0
  11. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts.map +1 -1
  12. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js +4 -0
  13. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js.map +1 -1
  14. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts +2 -1
  15. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts.map +1 -1
  16. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js +6 -1
  17. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js.map +1 -1
  18. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts +2 -1
  19. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts.map +1 -1
  20. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js +14 -0
  21. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js.map +1 -1
  22. package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.d.ts +22 -0
  23. package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.d.ts.map +1 -0
  24. package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js +17 -0
  25. package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js.map +1 -0
  26. package/lib/graph-manager/index.d.ts +4 -3
  27. package/lib/graph-manager/index.d.ts.map +1 -1
  28. package/lib/graph-manager/index.js +4 -3
  29. package/lib/graph-manager/index.js.map +1 -1
  30. package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.d.ts +30 -0
  31. package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.d.ts.map +1 -0
  32. package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js +17 -0
  33. package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js.map +1 -0
  34. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts +4 -0
  35. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts.map +1 -1
  36. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js +4 -0
  37. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js.map +1 -1
  38. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts +3 -2
  39. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts.map +1 -1
  40. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js +13 -0
  41. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js.map +1 -1
  42. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts +3 -2
  43. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts.map +1 -1
  44. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js +13 -0
  45. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js.map +1 -1
  46. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts +3 -1
  47. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts.map +1 -1
  48. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js +22 -0
  49. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js.map +1 -1
  50. package/lib/index.css +1 -1
  51. package/lib/package.json +1 -1
  52. package/package.json +9 -9
  53. package/src/components/DSL_DataQuality_ElementDriver.tsx +12 -3
  54. package/src/components/DataQualityDataSpaceBuilder.tsx +2 -2
  55. package/src/components/states/DataQualityClassValidationState.ts +30 -8
  56. package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.ts +6 -0
  57. package/src/graph-manager/DSL_DataQuality_GraphModifierHelper.ts +15 -0
  58. package/src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts +28 -0
  59. package/src/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.ts +27 -0
  60. package/src/graph-manager/index.ts +14 -3
  61. package/src/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.ts +53 -0
  62. package/src/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.ts +6 -0
  63. package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.ts +31 -0
  64. package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.ts +31 -0
  65. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.ts +50 -0
  66. package/tsconfig.json +2 -0
@@ -38,6 +38,7 @@ import {
38
38
  ResolvedDataSpaceEntityWithOrigin,
39
39
  type DataSpaceExecutionContext,
40
40
  DataSpace,
41
+ hasMappingBasedDefaultExecutionContext,
41
42
  resolveUsableDataSpaceClasses,
42
43
  } from '@finos/legend-extension-dsl-data-space/graph';
43
44
  import { CLASS_ELEMENT_CREATION_BASIS } from '../DSL_DataQuality_ElementDriver.js';
@@ -134,13 +135,23 @@ export class DataQualityClassValidationState extends DataQualityState {
134
135
  CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED;
135
136
  this.dataSpace =
136
137
  this.constraintsConfigurationElement.context.dataSpace.value;
137
- this.executionContext = this.dataSpace.defaultExecutionContext;
138
+ const defaultExecutionContext = guaranteeNonNullable(
139
+ this.dataSpace.defaultExecutionContext,
140
+ `Data product '${this.dataSpace.path}' does not have a default execution context`,
141
+ );
142
+ this.executionContext = defaultExecutionContext;
138
143
  this.dataQualityQueryBuilderState.executionContextState.setMapping(
139
- this.dataSpace.defaultExecutionContext.mapping.value,
144
+ guaranteeNonNullable(
145
+ defaultExecutionContext.mapping,
146
+ `Default execution context '${defaultExecutionContext.name}' does not have a mapping`,
147
+ ).value,
140
148
  );
141
149
  this.dataQualityQueryBuilderState.executionContextState.setRuntimeValue(
142
150
  new RuntimePointer(
143
- this.dataSpace.defaultExecutionContext.defaultRuntime,
151
+ guaranteeNonNullable(
152
+ defaultExecutionContext.defaultRuntime,
153
+ `Default execution context '${defaultExecutionContext.name}' does not have a default runtime`,
154
+ ),
144
155
  ),
145
156
  );
146
157
  classOptions = resolveUsableDataSpaceClasses(
@@ -245,10 +256,18 @@ export class DataQualityClassValidationState extends DataQualityState {
245
256
  propagateExecutionContextChange(
246
257
  executionContext: DataSpaceExecutionContext,
247
258
  ): void {
248
- const mapping = executionContext.mapping.value;
259
+ const mapping = guaranteeNonNullable(
260
+ executionContext.mapping,
261
+ `Execution context '${executionContext.name}' does not have a mapping`,
262
+ ).value;
249
263
  this.changeMapping(mapping);
250
264
  this.dataQualityQueryBuilderState.changeRuntime(
251
- new RuntimePointer(executionContext.defaultRuntime),
265
+ new RuntimePointer(
266
+ guaranteeNonNullable(
267
+ executionContext.defaultRuntime,
268
+ `Execution context '${executionContext.name}' does not have a default runtime`,
269
+ ),
270
+ ),
252
271
  );
253
272
  const compatibleClasses = resolveUsableDataSpaceClasses(
254
273
  guaranteeNonNullable(this.dataSpace),
@@ -273,10 +292,12 @@ export class DataQualityClassValidationState extends DataQualityState {
273
292
  this.graphManagerState.graph.getElement(dataSpaceInfo.path),
274
293
  DataSpace,
275
294
  );
276
- this.setExecutionContext(this.dataSpace.defaultExecutionContext);
277
- this.propagateExecutionContextChange(
295
+ const defaultExecutionContext = guaranteeNonNullable(
278
296
  this.dataSpace.defaultExecutionContext,
297
+ `Data product '${this.dataSpace.path}' does not have a default execution context`,
279
298
  );
299
+ this.setExecutionContext(defaultExecutionContext);
300
+ this.propagateExecutionContextChange(defaultExecutionContext);
280
301
  }
281
302
 
282
303
  updateElementOnDataSpaceChange() {
@@ -297,6 +318,7 @@ export class DataQualityClassValidationState extends DataQualityState {
297
318
  *loadDataSpaces(): GeneratorFn<void> {
298
319
  this.dataSpaces = this.graphManagerState.graph.allOwnElements
299
320
  .filter(filterByType(DataSpace))
321
+ .filter(hasMappingBasedDefaultExecutionContext)
300
322
  .map(
301
323
  (e) =>
302
324
  new ResolvedDataSpaceEntityWithOrigin(
@@ -304,7 +326,7 @@ export class DataQualityClassValidationState extends DataQualityState {
304
326
  e.title,
305
327
  e.name,
306
328
  e.path,
307
- e.defaultExecutionContext.name,
329
+ guaranteeNonNullable(e.defaultExecutionContext).name,
308
330
  ),
309
331
  );
310
332
  }
@@ -192,12 +192,14 @@ export class DataQualityRelationValidationConfiguration
192
192
  query!: DataQualityRelationQueryLambda;
193
193
  validations: DataQualityRelationValidation[] = [];
194
194
  runtime?: PackageableElementReference<PackageableRuntime> | undefined;
195
+ persistenceStrategy?: DataQualityPersistenceStrategy | undefined;
195
196
 
196
197
  protected override get _elementHashCode(): string {
197
198
  return hashArray([
198
199
  DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_VALIDATION_CONFIGURATION,
199
200
  this.query,
200
201
  hashArray(this.validations),
202
+ this.persistenceStrategy ?? '',
201
203
  ]);
202
204
  }
203
205
 
@@ -208,6 +210,10 @@ export class DataQualityRelationValidationConfiguration
208
210
  }
209
211
  }
210
212
 
213
+ export abstract class DataQualityPersistenceStrategy implements Hashable {
214
+ abstract get hashCode(): string;
215
+ }
216
+
211
217
  export abstract class ReconStrategy implements Hashable {
212
218
  abstract get hashCode(): string;
213
219
  }
@@ -18,6 +18,7 @@ import { action } from 'mobx';
18
18
  import {
19
19
  type DataQualityClassValidationsConfiguration,
20
20
  type DataQualityExecutionContext,
21
+ type DataQualityPersistenceStrategy,
21
22
  type DataQualityRelationValidation,
22
23
  type DataQualityRelationValidationConfiguration,
23
24
  type DataQualityRelationComparisonConfiguration,
@@ -43,6 +44,7 @@ import {
43
44
  import {
44
45
  observe_DataQualityRootGraphFetchTree,
45
46
  observe_DataQualityRelationValidation,
47
+ observe_DataQualityPersistenceStrategy,
46
48
  observe_DataSpaceDataQualityExecutionContext,
47
49
  observe_MappingAndRuntimeDataQualityExecutionContext,
48
50
  } from './action/changeDetection/DSL_DataQuality_ObserverHelper.js';
@@ -213,6 +215,19 @@ export const dataQualityRelationValidation_swapParameters = action(
213
215
  },
214
216
  );
215
217
 
218
+ export const dataQualityRelationValidationConfig_setPersistenceStrategy =
219
+ action(
220
+ (
221
+ element: DataQualityRelationValidationConfiguration,
222
+ val: DataQualityPersistenceStrategy | undefined,
223
+ observerContext: ObserverContext,
224
+ ): void => {
225
+ element.persistenceStrategy = val
226
+ ? observe_DataQualityPersistenceStrategy(val, observerContext)
227
+ : undefined;
228
+ },
229
+ );
230
+
216
231
  export const dataQualityRelationComparison_setSource = action(
217
232
  (
218
233
  element: DataQualityRelationComparisonConfiguration,
@@ -27,6 +27,7 @@ import {
27
27
  import { computed, makeObservable, observable, override } from 'mobx';
28
28
  import {
29
29
  type DataQualityClassValidationsConfiguration,
30
+ type DataQualityPersistenceStrategy,
30
31
  type DataQualityServiceValidationConfiguration,
31
32
  type DataQualityRelationValidation,
32
33
  type DataQualityRelationValidationConfiguration,
@@ -42,6 +43,7 @@ import {
42
43
  type DataQualityRootGraphFetchTree,
43
44
  DataQualityPropertyGraphFetchTree,
44
45
  } from '../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js';
46
+ import type { DSL_DataQuality_PureGraphManagerPlugin_Extension } from '../../extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js';
45
47
 
46
48
  export const observe_DataSpaceDataQualityExecutionContext = skipObserved(
47
49
  (
@@ -183,6 +185,25 @@ export const observe_DataQualityRelationQueryLambda = skipObserved(
183
185
  }),
184
186
  );
185
187
 
188
+ export const observe_DataQualityPersistenceStrategy = (
189
+ metamodel: DataQualityPersistenceStrategy,
190
+ context: ObserverContext,
191
+ ): DataQualityPersistenceStrategy => {
192
+ const extraObservers = context.plugins.flatMap(
193
+ (plugin) =>
194
+ (
195
+ plugin as DSL_DataQuality_PureGraphManagerPlugin_Extension
196
+ ).getExtraDataQualityPersistenceStrategyObservers?.() ?? [],
197
+ );
198
+ for (const observer of extraObservers) {
199
+ const observed = observer(metamodel);
200
+ if (observed) {
201
+ return observed;
202
+ }
203
+ }
204
+ return metamodel;
205
+ };
206
+
186
207
  export const observe_DataQualityRelationValidationConfiguration =
187
208
  skipObservedWithContext(
188
209
  (
@@ -198,11 +219,18 @@ export const observe_DataQualityRelationValidationConfiguration =
198
219
  _elementHashCode: override,
199
220
  query: observable,
200
221
  validations: observable,
222
+ persistenceStrategy: observable,
201
223
  });
202
224
  metamodel.validations.forEach((value) =>
203
225
  observe_DataQualityRelationValidation(value),
204
226
  );
205
227
  observe_DataQualityRelationQueryLambda(metamodel.query);
228
+ if (metamodel.persistenceStrategy) {
229
+ observe_DataQualityPersistenceStrategy(
230
+ metamodel.persistenceStrategy,
231
+ context,
232
+ );
233
+ }
206
234
  return metamodel;
207
235
  },
208
236
  );
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Copyright (c) 2026-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 type { PureGraphManagerPlugin } from '@finos/legend-graph';
18
+ import type { DataQualityPersistenceStrategy } from '../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
19
+
20
+ export type DataQualityPersistenceStrategyObserver = (
21
+ metamodel: DataQualityPersistenceStrategy,
22
+ ) => DataQualityPersistenceStrategy | undefined;
23
+
24
+ export interface DSL_DataQuality_PureGraphManagerPlugin_Extension
25
+ extends PureGraphManagerPlugin {
26
+ getExtraDataQualityPersistenceStrategyObservers?(): DataQualityPersistenceStrategyObserver[];
27
+ }
@@ -15,6 +15,17 @@
15
15
  */
16
16
 
17
17
  export * from './DSL_DataQuality_GraphManagerPreset.js';
18
- export * from './protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js';
19
- export * from '../graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js';
20
- export * from '../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
18
+ export * from './extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js';
19
+ export * from './protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js';
20
+ export { V1_DataQualityPersistenceStrategy } from './protocol/pure/v1/V1_DataQualityValidationConfiguration.js';
21
+ export {
22
+ DataQualityValidationConfiguration,
23
+ DataQualityClassValidationsConfiguration,
24
+ DataQualityRelationValidationConfiguration,
25
+ DataQualityRelationComparisonConfiguration,
26
+ DataQualityRelationValidation,
27
+ DataQualityRelationQueryLambda,
28
+ DataQualityPersistenceStrategy,
29
+ ReconStrategy,
30
+ MD5HashStrategy,
31
+ } from '../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Copyright (c) 2026-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 type {
18
+ PureProtocolProcessorPlugin,
19
+ V1_GraphBuilderContext,
20
+ V1_GraphTransformerContext,
21
+ } from '@finos/legend-graph';
22
+ import type { PlainObject } from '@finos/legend-shared';
23
+ import type { DataQualityPersistenceStrategy } from '../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
24
+ import type { V1_DataQualityPersistenceStrategy } from '../v1/V1_DataQualityValidationConfiguration.js';
25
+
26
+ export type V1_DataQualityPersistenceStrategyProtocolSerializer = (
27
+ protocol: V1_DataQualityPersistenceStrategy,
28
+ ) => PlainObject<V1_DataQualityPersistenceStrategy> | undefined;
29
+
30
+ export type V1_DataQualityPersistenceStrategyProtocolDeserializer = (
31
+ json: PlainObject<V1_DataQualityPersistenceStrategy>,
32
+ ) => V1_DataQualityPersistenceStrategy | undefined;
33
+
34
+ export type V1_DataQualityPersistenceStrategyBuilder = (
35
+ protocol: V1_DataQualityPersistenceStrategy,
36
+ context: V1_GraphBuilderContext,
37
+ ) => DataQualityPersistenceStrategy | undefined;
38
+
39
+ export type V1_DataQualityPersistenceStrategyTransformer = (
40
+ metamodel: DataQualityPersistenceStrategy,
41
+ context: V1_GraphTransformerContext,
42
+ ) => V1_DataQualityPersistenceStrategy | undefined;
43
+
44
+ export interface DSL_DataQuality_PureProtocolProcessorPlugin_Extension
45
+ extends PureProtocolProcessorPlugin {
46
+ V1_getExtraDataQualityPersistenceStrategyProtocolSerializers?(): V1_DataQualityPersistenceStrategyProtocolSerializer[];
47
+
48
+ V1_getExtraDataQualityPersistenceStrategyProtocolDeserializers?(): V1_DataQualityPersistenceStrategyProtocolDeserializer[];
49
+
50
+ V1_getExtraDataQualityPersistenceStrategyBuilders?(): V1_DataQualityPersistenceStrategyBuilder[];
51
+
52
+ V1_getExtraDataQualityPersistenceStrategyTransformers?(): V1_DataQualityPersistenceStrategyTransformer[];
53
+ }
@@ -148,6 +148,7 @@ export class V1_DataQualityRelationValidationsConfiguration
148
148
  query!: V1_DataQualityRelationQueryLambda;
149
149
  validations: V1_DataQualityRelationValidation[] = [];
150
150
  runtime?: V1_PackageableElementPointer | undefined;
151
+ persistenceStrategy?: V1_DataQualityPersistenceStrategy | undefined;
151
152
  taggedValues: V1_TaggedValue[] = [];
152
153
  stereotypes: V1_StereotypePtr[] = [];
153
154
 
@@ -156,6 +157,7 @@ export class V1_DataQualityRelationValidationsConfiguration
156
157
  DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_VALIDATION_CONFIGURATION,
157
158
  this.query,
158
159
  hashArray(this.validations),
160
+ this.persistenceStrategy ?? '',
159
161
  ]);
160
162
  }
161
163
 
@@ -166,6 +168,10 @@ export class V1_DataQualityRelationValidationsConfiguration
166
168
  }
167
169
  }
168
170
 
171
+ export abstract class V1_DataQualityPersistenceStrategy implements Hashable {
172
+ abstract get hashCode(): string;
173
+ }
174
+
169
175
  export abstract class V1_ReconStrategy implements Hashable {
170
176
  abstract get hashCode(): string;
171
177
  }
@@ -28,6 +28,7 @@ import {
28
28
  import {
29
29
  type V1_DataQualityExecutionContext,
30
30
  type V1_DataQualityClassValidationsConfiguration,
31
+ type V1_DataQualityPersistenceStrategy,
31
32
  type V1_DataQualityRelationValidation,
32
33
  type V1_DataQualityRelationValidationsConfiguration,
33
34
  type V1_DataQualityServiceValidationsConfiguration,
@@ -38,6 +39,7 @@ import {
38
39
  } from '../V1_DataQualityValidationConfiguration.js';
39
40
  import {
40
41
  type DataQualityExecutionContext,
42
+ type DataQualityPersistenceStrategy,
41
43
  DataQualityRelationQueryLambda,
42
44
  DataQualityRelationValidation,
43
45
  DataSpaceDataQualityExecutionContext,
@@ -63,6 +65,7 @@ import {
63
65
  V1_buildFullPath,
64
66
  V1_buildVariable,
65
67
  } from '@finos/legend-graph';
68
+ import type { DSL_DataQuality_PureProtocolProcessorPlugin_Extension } from '../../extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js';
66
69
  import type { DataSpace } from '@finos/legend-extension-dsl-data-space/graph';
67
70
  import {
68
71
  getOwnDataQualityClassValidationsConfiguration,
@@ -334,6 +337,34 @@ export function V1_buildDataQualityRelationValidationConfiguration(
334
337
  false,
335
338
  ) as PackageableElementImplicitReference<PackageableRuntime>)
336
339
  : undefined;
340
+ element.persistenceStrategy = elementProtocol.persistenceStrategy
341
+ ? V1_buildDataQualityPersistenceStrategy(
342
+ elementProtocol.persistenceStrategy,
343
+ context,
344
+ )
345
+ : undefined;
346
+ }
347
+
348
+ export function V1_buildDataQualityPersistenceStrategy(
349
+ protocol: V1_DataQualityPersistenceStrategy,
350
+ context: V1_GraphBuilderContext,
351
+ ): DataQualityPersistenceStrategy {
352
+ const extraBuilders = context.extensions.plugins.flatMap(
353
+ (plugin) =>
354
+ (
355
+ plugin as DSL_DataQuality_PureProtocolProcessorPlugin_Extension
356
+ ).V1_getExtraDataQualityPersistenceStrategyBuilders?.() ?? [],
357
+ );
358
+ for (const builder of extraBuilders) {
359
+ const metamodel = builder(protocol, context);
360
+ if (metamodel) {
361
+ return metamodel;
362
+ }
363
+ }
364
+ throw new UnsupportedOperationError(
365
+ `Can't build data quality persistence strategy: no compatible builder available from plugins`,
366
+ protocol,
367
+ );
337
368
  }
338
369
 
339
370
  export function V1_buildDataQualityServiceValidationConfiguration(
@@ -42,6 +42,7 @@ import {
42
42
  } from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js';
43
43
  import {
44
44
  type DataQualityExecutionContext,
45
+ type DataQualityPersistenceStrategy,
45
46
  type DataQualityRelationValidation,
46
47
  type DataQualityRelationValidationConfiguration,
47
48
  type DataQualityClassValidationsConfiguration,
@@ -53,6 +54,7 @@ import {
53
54
  } from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
54
55
  import {
55
56
  type V1_DataQualityExecutionContext,
57
+ type V1_DataQualityPersistenceStrategy,
56
58
  type V1_ReconStrategy,
57
59
  V1_DataQualityClassValidationsConfiguration,
58
60
  V1_DataQualityRelationValidation,
@@ -63,6 +65,7 @@ import {
63
65
  V1_DataQualityRelationComparisonConfiguration,
64
66
  V1_MD5HashStrategy,
65
67
  } from '../V1_DataQualityValidationConfiguration.js';
68
+ import type { DSL_DataQuality_PureProtocolProcessorPlugin_Extension } from '../../extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js';
66
69
  import { DATA_SPACE_ELEMENT_POINTER } from '@finos/legend-extension-dsl-data-space/graph';
67
70
 
68
71
  export function V1_transformDataQualityGraphFetchTree(
@@ -228,9 +231,37 @@ export function V1_transformDataQualityRelationValidationConfiguration(
228
231
  new V1_RawValueSpecificationTransformer(context),
229
232
  ) as V1_RawVariable,
230
233
  );
234
+ protocol.persistenceStrategy = metamodel.persistenceStrategy
235
+ ? V1_transformDataQualityPersistenceStrategy(
236
+ metamodel.persistenceStrategy,
237
+ context,
238
+ )
239
+ : undefined;
231
240
  return protocol;
232
241
  }
233
242
 
243
+ export function V1_transformDataQualityPersistenceStrategy(
244
+ metamodel: DataQualityPersistenceStrategy,
245
+ context: V1_GraphTransformerContext,
246
+ ): V1_DataQualityPersistenceStrategy {
247
+ const extraTransformers = context.plugins.flatMap(
248
+ (plugin) =>
249
+ (
250
+ plugin as DSL_DataQuality_PureProtocolProcessorPlugin_Extension
251
+ ).V1_getExtraDataQualityPersistenceStrategyTransformers?.() ?? [],
252
+ );
253
+ for (const transformer of extraTransformers) {
254
+ const protocol = transformer(metamodel, context);
255
+ if (protocol) {
256
+ return protocol;
257
+ }
258
+ }
259
+ throw new UnsupportedOperationError(
260
+ `Can't transform data quality persistence strategy: no compatible transformer available from plugins`,
261
+ metamodel,
262
+ );
263
+ }
264
+
234
265
  function V1_transformReconStrategy(value: ReconStrategy): V1_ReconStrategy {
235
266
  if (value instanceof MD5HashStrategy) {
236
267
  const protocol = new V1_MD5HashStrategy();
@@ -28,6 +28,7 @@ import {
28
28
  } from 'serializr';
29
29
  import {
30
30
  type V1_DataQualityExecutionContext,
31
+ type V1_DataQualityPersistenceStrategy,
31
32
  type V1_ReconStrategy,
32
33
  V1_DataQualityClassValidationsConfiguration,
33
34
  V1_DataQualityServiceValidationsConfiguration,
@@ -58,6 +59,7 @@ import {
58
59
  V1_RawValueSpecificationType,
59
60
  V1_rawVariableModelSchema,
60
61
  } from '@finos/legend-graph';
62
+ import type { DSL_DataQuality_PureProtocolProcessorPlugin_Extension } from '../../../extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js';
61
63
 
62
64
  export const V1_DATA_QUALITY_PROTOCOL_TYPE = 'dataQualityValidation';
63
65
  export const V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE =
@@ -193,6 +195,10 @@ const V1_dataQualityRelationValidationModelSchema = (
193
195
  _type: usingConstantValueSchema(V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE),
194
196
  name: primitive(),
195
197
  package: primitive(),
198
+ persistenceStrategy: optionalCustom(
199
+ (val) => V1_serializeDataQualityPersistenceStrategy(val, plugins),
200
+ (val) => V1_deserializeDataQualityPersistenceStrategy(val, plugins),
201
+ ),
196
202
  query: usingModelSchema(V1_rawLambdaModelSchemaParameters),
197
203
  runtime: optionalCustom(
198
204
  (val) => serialize(V1_packageableElementPointerModelSchema, val),
@@ -322,3 +328,47 @@ export const V1_deserializeDataQualityRelationComparison = (
322
328
  plugins: PureProtocolProcessorPlugin[],
323
329
  ): V1_DataQualityRelationComparisonConfiguration =>
324
330
  deserialize(V1_dataQualityRelationComparisonModelSchema(plugins), json);
331
+
332
+ export function V1_serializeDataQualityPersistenceStrategy(
333
+ protocol: V1_DataQualityPersistenceStrategy,
334
+ plugins: PureProtocolProcessorPlugin[],
335
+ ): PlainObject<V1_DataQualityPersistenceStrategy> {
336
+ const extraSerializers = plugins.flatMap(
337
+ (plugin) =>
338
+ (
339
+ plugin as DSL_DataQuality_PureProtocolProcessorPlugin_Extension
340
+ ).V1_getExtraDataQualityPersistenceStrategyProtocolSerializers?.() ?? [],
341
+ );
342
+ for (const serializer of extraSerializers) {
343
+ const json = serializer(protocol);
344
+ if (json) {
345
+ return json;
346
+ }
347
+ }
348
+ throw new UnsupportedOperationError(
349
+ `Can't serialize data quality persistence strategy: no compatible serializer available from plugins`,
350
+ protocol,
351
+ );
352
+ }
353
+
354
+ export function V1_deserializeDataQualityPersistenceStrategy(
355
+ json: PlainObject<V1_DataQualityPersistenceStrategy>,
356
+ plugins: PureProtocolProcessorPlugin[],
357
+ ): V1_DataQualityPersistenceStrategy {
358
+ const extraDeserializers = plugins.flatMap(
359
+ (plugin) =>
360
+ (
361
+ plugin as DSL_DataQuality_PureProtocolProcessorPlugin_Extension
362
+ ).V1_getExtraDataQualityPersistenceStrategyProtocolDeserializers?.() ??
363
+ [],
364
+ );
365
+ for (const deserializer of extraDeserializers) {
366
+ const protocol = deserializer(json);
367
+ if (protocol) {
368
+ return protocol;
369
+ }
370
+ }
371
+ throw new UnsupportedOperationError(
372
+ `Can't deserialize data quality persistence strategy of type '${json._type}': no compatible deserializer available from plugins`,
373
+ );
374
+ }
package/tsconfig.json CHANGED
@@ -122,9 +122,11 @@
122
122
  "./src/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.ts",
123
123
  "./src/graph-manager/index.ts",
124
124
  "./src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts",
125
+ "./src/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.ts",
125
126
  "./src/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.ts",
126
127
  "./src/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.ts",
127
128
  "./src/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.ts",
129
+ "./src/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.ts",
128
130
  "./src/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.ts",
129
131
  "./src/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.ts",
130
132
  "./src/graph-manager/protocol/pure/v1/V1_DataQualityValidationFunctionExpression.ts",