in packages/dynamodb-data-marshaller/src/marshallExpression.ts [166:234]
function normalizeConditionExpression(
expression: ConditionExpression,
schema: Schema
): ConditionExpression {
if (FunctionExpression.isFunctionExpression(expression)) {
return normalizeFunctionExpression(expression, schema);
}
switch (expression.type) {
case 'Equals':
case 'NotEquals':
case 'LessThan':
case 'LessThanOrEqualTo':
case 'GreaterThan':
case 'GreaterThanOrEqualTo':
return {
...expression,
subject: toSchemaName(expression.subject, schema),
object: normalizeIfPath(expression.object, schema),
};
case 'Function':
switch (expression.name) {
case 'attribute_exists':
case 'attribute_not_exists':
return {
...expression,
subject: toSchemaName(expression.subject, schema)
};
case 'attribute_type':
case 'begins_with':
case 'contains':
return {
...expression,
subject: toSchemaName(expression.subject, schema)
};
}
case 'Between':
return {
...expression,
subject: toSchemaName(expression.subject, schema),
lowerBound: normalizeIfPath(expression.lowerBound, schema),
upperBound: normalizeIfPath(expression.upperBound, schema),
};
case 'Membership':
return {
...expression,
subject: toSchemaName(expression.subject, schema),
values: expression.values.map(arg => normalizeIfPath(arg, schema)),
};
case 'Not':
return {
...expression,
condition: normalizeConditionExpression(
expression.condition,
schema
),
};
case 'And':
case 'Or':
return {
...expression,
conditions: expression.conditions.map(condition =>
normalizeConditionExpression(condition, schema)
),
};
}
}