@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.
- package/lib/components/DSL_DataQuality_ElementDriver.d.ts.map +1 -1
- package/lib/components/DSL_DataQuality_ElementDriver.js +6 -4
- package/lib/components/DSL_DataQuality_ElementDriver.js.map +1 -1
- package/lib/components/DataQualityDataSpaceBuilder.js +2 -2
- package/lib/components/DataQualityDataSpaceBuilder.js.map +1 -1
- package/lib/components/states/DataQualityClassValidationState.d.ts.map +1 -1
- package/lib/components/states/DataQualityClassValidationState.js +12 -9
- package/lib/components/states/DataQualityClassValidationState.js.map +1 -1
- package/lib/data-quality-custom-selector.css +1 -1
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts +4 -0
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts.map +1 -1
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js +4 -0
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts +2 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js +6 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js.map +1 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts +2 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts.map +1 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js +14 -0
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js.map +1 -1
- package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.d.ts +22 -0
- package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.d.ts.map +1 -0
- package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js +17 -0
- package/lib/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.js.map +1 -0
- package/lib/graph-manager/index.d.ts +4 -3
- package/lib/graph-manager/index.d.ts.map +1 -1
- package/lib/graph-manager/index.js +4 -3
- package/lib/graph-manager/index.js.map +1 -1
- package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js +17 -0
- package/lib/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts +4 -0
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js +4 -0
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts +3 -2
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js +13 -0
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts +3 -2
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js +13 -0
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts +3 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js +22 -0
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/package.json +9 -9
- package/src/components/DSL_DataQuality_ElementDriver.tsx +12 -3
- package/src/components/DataQualityDataSpaceBuilder.tsx +2 -2
- package/src/components/states/DataQualityClassValidationState.ts +30 -8
- package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.ts +6 -0
- package/src/graph-manager/DSL_DataQuality_GraphModifierHelper.ts +15 -0
- package/src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts +28 -0
- package/src/graph-manager/extensions/DSL_DataQuality_PureGraphManagerPlugin_Extension.ts +27 -0
- package/src/graph-manager/index.ts +14 -3
- package/src/graph-manager/protocol/pure/extensions/DSL_DataQuality_PureProtocolProcessorPlugin_Extension.ts +53 -0
- package/src/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.ts +6 -0
- package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.ts +31 -0
- package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.ts +31 -0
- package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.ts +50 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
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 './
|
|
19
|
-
export * from '
|
|
20
|
-
export
|
|
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",
|