dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
50 lines (49 loc) • 1.84 kB
JavaScript
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
};
};