@adaptabletools/adaptable-cjs
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
101 lines (100 loc) • 4.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExpressionApiImpl = void 0;
const tslib_1 = require("tslib");
const ApiBase_1 = require("./ApiBase");
const parser = tslib_1.__importStar(require("../../parser/src"));
const ExpressionInternalApi_1 = require("../Internal/ExpressionInternalApi");
class ExpressionApiImpl extends ApiBase_1.ApiBase {
constructor(_adaptable) {
super(_adaptable);
this.internalApi = new ExpressionInternalApi_1.ExpressionInternalApi(_adaptable);
}
isValidBooleanExpression(query, module, validationErrorMessage) {
const { isValid, errorMessage } = this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.validateBoolean(query, module, { force: true });
if (!isValid && validationErrorMessage) {
this.logWarn(`${validationErrorMessage} :: ${errorMessage}`);
}
return isValid;
}
isValidObservableExpression(expression, module, validationErrorMessage) {
const { isValid, errorMessage } = this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.validateObservable(expression, module);
if (!isValid && validationErrorMessage) {
this.logWarn(`${validationErrorMessage} :: ${errorMessage}`);
}
return isValid;
}
isValidAggregatedBooleanExpression(expression, module, validationErrorMessage) {
const { isValid, errorMessage } = this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.validateAggregatedBoolean(expression, module);
if (!isValid && validationErrorMessage) {
this.logWarn(`${validationErrorMessage} :: ${errorMessage}`);
}
return isValid;
}
isValidAggregatedScalarExpression(expression, module, validationErrorMessage) {
const { isValid, errorMessage } = this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.validateAggregatedScalar(expression, module);
if (!isValid && validationErrorMessage) {
this.logWarn(`${validationErrorMessage} :: ${errorMessage}`);
}
return isValid;
}
getASTForExpression(query) {
return parser.getAbstractSyntaxTree(query);
}
getColumnsFromExpression(expression) {
try {
const columnIds = this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.getColumnsFromExpression(expression);
columnIds.forEach((columnId) => {
const calculatedColumn = this.getCalculatedColumnApi().getCalculatedColumnForColumnId(columnId);
if (calculatedColumn) {
const transitiveColumnIds = this.getColumnsFromExpression(this.getAdaptableQueryExpression(calculatedColumn.Query));
columnIds.push(...transitiveColumnIds);
}
});
return Array.from(new Set(columnIds));
}
catch (error) {
// defensive programing, this should happen only if someone botched Initial Adaptable State
this.logWarn(`QueryApi.getColumnsFromExpressionInvalid received an invalid expression: ${expression}
Error: ${error}`);
return [];
}
}
isColumnQueryable(abColumn) {
let queryableColumnFn = this.getExpressionOptions().isColumnQueryable;
if (queryableColumnFn) {
const queryableColumnContext = {
column: abColumn,
...this.getAdaptableInternalApi().buildBaseContext(),
};
return queryableColumnFn(queryableColumnContext);
}
return true;
}
getAdaptableQueryExpression(query) {
return (query.BooleanExpression ??
query.ScalarExpression ??
query.ObservableExpression ??
query.AggregatedBooleanExpression ??
query.AggregatedScalarExpression);
}
getAdaptableQueryExpressionWithColumnFriendlyNames(query) {
return this.getAdaptableApi()
.internalApi.getQueryLanguageService()
.getExpressionWithColumnFriendlyNames(this.getAdaptableQueryExpression(query));
}
useCaseSensitivity() {
return this.getExpressionOptions().caseSensitiveExpressions;
}
}
exports.ExpressionApiImpl = ExpressionApiImpl;