dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
67 lines (66 loc) • 2.61 kB
JavaScript
import { DynamoDBToolboxError } from '../../../../errors/index.js';
import { expressBeginsWithCondition } from './conditions/beginsWith.js';
import { expressBetweenCondition } from './conditions/between.js';
import { expressContainsCondition } from './conditions/contains.js';
import { expressEqCondition, expressNeCondition } from './conditions/eq.js';
import { expressExistsCondition } from './conditions/exists.js';
import { expressInCondition } from './conditions/in.js';
import { expressAndCondition, expressNotCondition, expressOrCondition } from './conditions/logical.js';
import { expressGtCondition, expressGteCondition, expressLtCondition, expressLteCondition } from './conditions/range.js';
import { expressTypeCondition } from './conditions/type.js';
export const expressCondition = (condition, prefix = '', state = {
namesCursor: 1,
valuesCursor: 1,
tokens: {},
ExpressionAttributeNames: {},
ExpressionAttributeValues: {}
}) => {
if ('or' in condition) {
return expressOrCondition(condition, prefix, state);
}
if ('and' in condition) {
return expressAndCondition(condition, prefix, state);
}
if ('not' in condition) {
return expressNotCondition(condition, prefix, state);
}
if ('eq' in condition) {
return expressEqCondition(condition, prefix, state);
}
if ('ne' in condition) {
return expressNeCondition(condition, prefix, state);
}
if ('gte' in condition) {
return expressGteCondition(condition, prefix, state);
}
if ('gt' in condition) {
return expressGtCondition(condition, prefix, state);
}
if ('lte' in condition) {
return expressLteCondition(condition, prefix, state);
}
if ('lt' in condition) {
return expressLtCondition(condition, prefix, state);
}
if ('between' in condition) {
return expressBetweenCondition(condition, prefix, state);
}
if ('beginsWith' in condition) {
return expressBeginsWithCondition(condition, prefix, state);
}
if ('in' in condition) {
return expressInCondition(condition, prefix, state);
}
if ('contains' in condition) {
return expressContainsCondition(condition, prefix, state);
}
if ('exists' in condition) {
return expressExistsCondition(condition, prefix, state);
}
if ('type' in condition) {
return expressTypeCondition(condition, prefix, state);
}
throw new DynamoDBToolboxError('actions.invalidCondition', {
message: 'Invalid condition: Unable to detect valid condition type.'
});
};