UNPKG

@finos/legend-extension-dsl-data-quality

Version:
95 lines 3.87 kB
/** * 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