@jitterbit/soql-parser-js
Version: 
Salesforce.com SOQL parser and composer
204 lines (203 loc) • 6.88 kB
JavaScript
export function isToken(val) {
    val = Array.isArray(val) ? val[0] : val;
    return val.image && true;
}
export function isSubqueryFromFlag(val, isSubquery) {
    return isSubquery;
}
export function isString(val) {
    return typeof val === 'string';
}
export function isStringArray(val) {
    if (!val) {
        return false;
    }
    return val.every(item => isString(item));
}
export function isNumber(val) {
    return Number.isFinite(val);
}
export function isBoolean(val) {
    return typeof val === typeof true;
}
export function isObject(val) {
    return val instanceof Object;
}
export function isNil(val) {
    return val === null || val === undefined;
}
export function get(val, suffix, prefix) {
    return isNil(val) ? '' : `${prefix || ''}${val}${suffix || ''}`;
}
export function getIfTrue(val, returnStr) {
    return isBoolean(val) && val ? returnStr : '';
}
export function getLastItem(arr) {
    return arr[arr.length - 1];
}
export function getAsArrayStr(val, alwaysParens = false) {
    if (Array.isArray(val)) {
        if (val.length > 0) {
            return `(${val.join(', ')})`;
        }
        else {
            return alwaysParens ? '()' : '';
        }
    }
    else {
        return alwaysParens ? `(${val || ''})` : val || '';
    }
}
export function pad(val, len, left = 0) {
    let leftPad = left > 0 ? new Array(left).fill(' ').join('') : '';
    if (val.length > len) {
        return `${leftPad}${val}`;
    }
    else {
        return `${leftPad}${val}${new Array(len - val.length).fill(' ').join('')}`;
    }
}
export function generateParens(count, character, joinCharacter = '') {
    return isNumber(count) && count > 0 ? new Array(count).fill(character).join(joinCharacter) : '';
}
export function getParams(functionFieldExp) {
    if (!functionFieldExp.parameters || functionFieldExp.parameters.length === 0) {
        return [];
    }
    if (isStringArray(functionFieldExp.parameters)) {
        return functionFieldExp.parameters;
    }
    if (isString(functionFieldExp.parameters[0])) {
        return [functionFieldExp.parameters[0]];
    }
    return getParams(functionFieldExp.parameters[0]);
}
export function isNestedParamAggregateFunction(functionFieldExp) {
    if (!functionFieldExp.parameters || functionFieldExp.parameters.length === 0) {
        return false;
    }
    const parameter = functionFieldExp.parameters[0];
    if (isString(parameter)) {
        return false;
    }
    return !!parameter.isAggregateFn;
}
export function hasAlias(value) {
    return value && !isNil(value.alias);
}
export function isComposeField(input) {
    return isString(input.field) && !Array.isArray(input.relationships) && !Array.isArray(input.conditions);
}
export function isComposeFieldFunction(input) {
    return !isNil(input.functionName || input.fn);
}
export function isComposeFieldRelationship(input) {
    return isString(input.field) && Array.isArray(input.relationships);
}
export function isComposeFieldSubquery(input) {
    return !isNil(input.subquery);
}
export function isComposeFieldTypeof(input) {
    return isString(input.field) && Array.isArray(input.conditions);
}
export function isSubquery(query) {
    return isString(query.relationshipName);
}
export function isFieldSubquery(value) {
    return !!value && !!value.type && value.type === 'FieldSubquery';
}
export function isWhereClauseWithRightCondition(value) {
    return !!value && !!value.operator && !!value.right;
}
export function isHavingClauseWithRightCondition(value) {
    return !!value && !!value.operator && !!value.right;
}
export function isWhereOrHavingClauseWithRightCondition(value) {
    return !!value && !!value.operator && !!value.right;
}
export function isValueCondition(value) {
    return value && isString(value.field) && isString(value.operator) && !isNil(value.value);
}
export function isValueWithDateLiteralCondition(value) {
    return (value &&
        isString(value.field) &&
        isString(value.operator) &&
        !isNil(value.value) &&
        (value.literalType === 'DATE_LITERAL' || (Array.isArray(value.literalType) && value.literalType[0] === 'DATE_LITERAL')));
}
export function isValueWithDateNLiteralCondition(value) {
    return value && isString(value.field) && isString(value.operator) && !isNil(value.value) && !isNil(value.dateLiteralVariable);
}
export function isValueFunctionCondition(value) {
    return value && !isNil(value.fn) && isString(value.operator) && !isNil(value.value);
}
export function isNegationCondition(value) {
    return value && isNumber(value.openParen) && isNil(value.operator) && isNil(value.field) && isNil(value.fn) && isNil(value.closeParen);
}
export function isValueQueryCondition(value) {
    return value && isString(value.field) && isString(value.operator) && !isNil(value.valueQuery) && isNil(value.value);
}
export function isOrderByField(value) {
    return value && !isNil(value.field);
}
export function isOrderByFn(value) {
    return value && !isNil(value.fn);
}
export function isGroupByField(value) {
    return value && !isNil(value.field);
}
export function isGroupByFn(value) {
    return value && !isNil(value.fn);
}
export function isArrayOperator(operator) {
    return ['IN', 'NOT IN', 'INCLUDES', 'EXCLUDES'].includes(operator);
}
export function getWhereValue(value, literalType, operator) {
    if (isNil(literalType)) {
        return value;
    }
    if (operator && literalType !== 'APEX_BIND_VARIABLE' && isArrayOperator(operator) && !Array.isArray(value)) {
        value = [value];
        literalType = Array.isArray(literalType) ? literalType : [literalType];
    }
    if (Array.isArray(literalType) && Array.isArray(value)) {
        return value.map((val, i) => {
            return whereValueHelper(val, literalType?.[i]);
        });
    }
    else {
        if (Array.isArray(literalType)) {
            literalType = literalType[0];
        }
        switch (literalType) {
            case 'STRING': {
                if (Array.isArray(value)) {
                    return value.filter(Boolean).map(val => (isString(val) && val.startsWith("'") ? val : `'${val ?? ''}'`));
                }
                else {
                    value = String(value ?? '');
                    return isString(value) && value.startsWith("'") ? value : `'${value ?? ''}'`;
                }
            }
            case 'APEX_BIND_VARIABLE': {
                return `:${value}`;
            }
            case 'JITTERBIT_VARIABLE': {
                return value.text;
            }
            default: {
                return value;
            }
        }
    }
}
function whereValueHelper(value, literalType) {
    switch (literalType) {
        case 'STRING': {
            return isString(value) && value.startsWith("'") ? value : `'${value ?? ''}'`;
        }
        default: {
            return value;
        }
    }
}