UNPKG

@mcma/aws-dynamodb

Version:

Node module with code for using DynamoDB as the backing data storage for MCMA API handlers and workers.

36 lines (35 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildFilterExpression = buildFilterExpression; const data_1 = require("@mcma/data"); function addFilterExpression(expression, filterExpression) { if ((0, data_1.isFilterCriteriaGroup)(filterExpression)) { return addFilterCriteriaGroup(expression, filterExpression); } else { return addFilterCriteria(expression, filterExpression); } } function addFilterCriteriaGroup(expression, filterCriteriaGroup) { return filterCriteriaGroup.children && filterCriteriaGroup.children.length ? "(" + filterCriteriaGroup.children.map(x => addFilterExpression(expression, x)).join(` ${filterCriteriaGroup.logicalOperator === "||" ? "or" : "and"} `) + ")" : ""; } function addFilterCriteria(expression, filterCriteria) { let attributeNameKey; if (!expression.expressionAttributeNames[filterCriteria.propertyName]) { attributeNameKey = `#a${Object.keys(expression.expressionAttributeNames).length}`; expression.expressionAttributeNames[attributeNameKey] = filterCriteria.propertyName; } else { attributeNameKey = expression.expressionAttributeNames[filterCriteria.propertyName]; } let attributeValueKey = `:a${Object.keys(expression.expressionAttributeValues).length}`; expression.expressionAttributeValues[attributeValueKey] = filterCriteria.propertyValue; return `#r.${attributeNameKey} ${filterCriteria.operator} ${attributeValueKey}`; } function buildFilterExpression(filterExpression) { const expression = { expressionStatement: "", expressionAttributeNames: { ["#r"]: "resource" }, expressionAttributeValues: {} }; expression.expressionStatement = addFilterExpression(expression, filterExpression); return expression; }