UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

50 lines (49 loc) 1.84 kB
import { expressCondition } from '../expressCondition.js'; export const expressOrCondition = (condition, prefix = '', state) => { let ConditionExpression = ''; const { or } = condition; const [orHead, ...orTail] = or; if (orTail.length === 0) { return expressCondition(orHead, prefix, state); } ConditionExpression += '('; ConditionExpression += or .map(cond => expressCondition(cond, prefix, state).ConditionExpression) .join(') OR ('); ConditionExpression += ')'; return { ConditionExpression, ExpressionAttributeNames: state.ExpressionAttributeNames, ExpressionAttributeValues: state.ExpressionAttributeValues }; }; export const expressAndCondition = (condition, prefix = '', state) => { let ConditionExpression = ''; const { and } = condition; const [andHead, ...andTail] = and; if (andTail.length === 0) { return expressCondition(andHead, prefix, state); } ConditionExpression += '('; ConditionExpression += and .map(cond => expressCondition(cond, prefix, state).ConditionExpression) .join(') AND ('); ConditionExpression += ')'; return { ConditionExpression, ExpressionAttributeNames: state.ExpressionAttributeNames, ExpressionAttributeValues: state.ExpressionAttributeValues }; }; export const expressNotCondition = (condition, prefix = '', state) => { let ConditionExpression = ''; const { not } = condition; ConditionExpression += 'NOT ('; ConditionExpression += expressCondition(not, prefix, state).ConditionExpression; ConditionExpression += ')'; return { ConditionExpression, ExpressionAttributeNames: state.ExpressionAttributeNames, ExpressionAttributeValues: state.ExpressionAttributeValues }; };