@finos/legend-extension-dsl-data-quality
Version:
Legend extension for Data Quality
95 lines • 3.87 kB
JavaScript
/**
* Copyright (c) 2026-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { DataQualityFunctionDefaults } from './DataQualityFunctionDefaults.js';
import { DataQualityValidationPropertyGuarantee, } from './DataQualityValidationFunction.js';
import { CollectionInstanceValue, PrimitiveInstanceValue, } from '@finos/legend-graph';
export class DataQualityValidationDescriptionGeneratorVisitor {
visitAssertion() {
return '';
}
visitPropertyGuarantee(func) {
return '';
}
visitFilter(func) {
const { parameters } = func;
const { lambda } = parameters;
return lambda.body.accept(this);
}
visitCustomHelper(func) {
const { parameters, name } = func;
const { column, otherParams } = parameters;
const values = [];
const description = DataQualityFunctionDefaults.getFunctionDescriptionTemplate(name);
if (!description) {
return '';
}
if (!column.values[0]) {
return description;
}
otherParams.forEach((param) => {
if (param instanceof PrimitiveInstanceValue) {
values.push(param.values[0]);
}
if (param instanceof CollectionInstanceValue) {
values.push(`${param.values
.map((value) => value.values[0])
.join(',')}`);
}
});
return this.composeDescription(column.values[0].name, values, description);
}
visitFilterCondition(func) {
const { property, otherParams } = func.parameters;
const values = [];
const description = DataQualityFunctionDefaults.getFunctionDescriptionTemplate(func.name);
const columnName = property instanceof DataQualityValidationPropertyGuarantee
? property.parameters.property.func.value.name
: property.func.value.name;
if (!columnName || !description) {
return '';
}
otherParams.forEach((param) => {
if (param instanceof PrimitiveInstanceValue) {
values.push(param.values[0]);
}
if (param instanceof CollectionInstanceValue) {
values.push(param.values
.map((value) => value.values[0])
.join(','));
}
});
return this.composeDescription(columnName, values, description);
}
visitLogicalGroup(func) {
const leftDescription = func.parameters.left.accept(this);
const rightDescription = func.parameters.right.accept(this);
const operator = func.name.toUpperCase();
if (!leftDescription || !rightDescription) {
return '';
}
return `${leftDescription} ${operator} ${rightDescription}`;
}
composeDescription(columnName, params, descriptionPlaceholder) {
let description = descriptionPlaceholder;
description = description.replace(/\[column\]/gi, columnName);
params.forEach((param, index) => {
const placeholder = new RegExp(`\\[param-${index + 1}\\]`, 'gi');
description = description.replace(placeholder, String(param).trim());
});
return description;
}
}
//# sourceMappingURL=DataQualityValidationDescriptionGeneratorVisitor.js.map