UNPKG

duenamodb

Version:

Simple DynamoDB client written in TypeScript.

101 lines 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createConditionExpression = exports.IN = exports.NOT = exports.conditionExpression = exports.expressionAttributeValues = exports.expressionAttributeNames = exports.expressionAttributeValueKey = exports.expressionAttributeNameKey = void 0; const expressionAttributeNameKey = (key) => `#${String(key)}`; exports.expressionAttributeNameKey = expressionAttributeNameKey; const expressionAttributeValueKey = (key) => `:${String(key)}`; exports.expressionAttributeValueKey = expressionAttributeValueKey; const expressionAttributeNames = (names) => { if (names.length === 0) { return; } return names.reduce((acc, key) => ({ ...acc, [(0, exports.expressionAttributeNameKey)(key)]: key, }), {}); }; exports.expressionAttributeNames = expressionAttributeNames; const expressionAttributeValues = (options) => { const keys = Object.keys(options); if (keys.length === 0) { return; } const result = {}; for (const key of keys) { const value = options[key]; if (!isDuenamoExpression(value)) { result[(0, exports.expressionAttributeValueKey)(key)] = value; continue; } if (value.duenamoType === 'not') { result[(0, exports.expressionAttributeValueKey)(key)] = value.value; continue; } if (value.duenamoType === 'in') { for (let i = 0; i < value.value.length; i++) { const arrayValue = value.value[i]; result[(0, exports.expressionAttributeValueKey)(`${key}_${i}`)] = arrayValue; } continue; } } return result; }; exports.expressionAttributeValues = expressionAttributeValues; const conditionExpression = (options) => { const keys = Object.keys(options); if (keys.length === 0) { return; } const array = []; for (const key of keys) { const value = options[key]; const nameKey = (0, exports.expressionAttributeNameKey)(key); const valueKey = (0, exports.expressionAttributeValueKey)(key); if (!isDuenamoExpression(value)) { array.push(`${nameKey} = ${valueKey}`); continue; } if (value.duenamoType === 'not') { array.push(`${nameKey} <> ${valueKey}`); continue; } if (value.duenamoType === 'in') { const inArray = []; for (let i = 0; i < value.value.length; i++) { inArray.push((0, exports.expressionAttributeValueKey)(`${key}_${i}`)); } array.push(`${nameKey} IN (${inArray.join(', ')})`); continue; } } return array.join(' and '); }; exports.conditionExpression = conditionExpression; const isDuenamoExpression = (object) => { return Boolean(typeof object === 'object' && object && 'duenamoType' in object); }; const NOT = (value) => { return { duenamoType: 'not', value }; }; exports.NOT = NOT; const IN = (...value) => { return { duenamoType: 'in', value, }; }; exports.IN = IN; const createConditionExpression = (object) => { const keys = Object.keys(object); const attributeValues = (0, exports.expressionAttributeValues)(object); const attributeNames = (0, exports.expressionAttributeNames)(keys); const expression = (0, exports.conditionExpression)(object); return { attributeNames, attributeValues, expression, }; }; exports.createConditionExpression = createConditionExpression; //# sourceMappingURL=expression.js.map