@qrvey/formula-lang
Version:
QFormula support for qrvey projects
39 lines • 1.67 kB
JavaScript
import { AST_PRIMITIVES, AST_TYPES } from '../constants';
import { ERROR_DICTIONARY, ERROR_LIST } from '../errors/dictionary';
import { isAggregateFunction } from './isAggregate';
export function isAColumn(context) {
return context.argument.type === AST_TYPES.column;
}
function isAColumnOrExternalFormula(context) {
const isExternalFormula = context.argument.node
.isExternalFormula;
const isRawFunction = !isAggregateFunction(context.argument.node); //Must be a negation of the aggregate scope.
return isAColumn(context) || (isExternalFormula && isRawFunction);
}
export function isAColumnParam(param, _dataType, context) {
let valid = false;
if (param)
valid = isAColumnOrExternalFormula(context);
const baseResponse = { valid };
if (!valid)
return Object.assign(Object.assign(Object.assign({}, baseResponse), { mismatchData: {
type: AST_TYPES.column,
primitive: AST_PRIMITIVES.UNKNOWN,
} }), ERROR_DICTIONARY[ERROR_LIST.missingColumnExpression]);
return baseResponse;
}
export function isANumericColumnParam(param, dataType, context) {
let valid = false;
if (param)
valid =
isAColumnOrExternalFormula(context) &&
dataType === AST_PRIMITIVES.NUMBER;
const baseResponse = { valid };
if (!valid)
return Object.assign(Object.assign(Object.assign({}, baseResponse), { mismatchData: {
type: AST_TYPES.column,
primitive: AST_PRIMITIVES.NUMBER,
} }), ERROR_DICTIONARY[ERROR_LIST.missingColumnExpression]);
return baseResponse;
}
//# sourceMappingURL=isAColumn.js.map