UNPKG

@jitterbit/soql-parser-js

Version:
204 lines (203 loc) 6.88 kB
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; } } }