duenamodb
Version:
Simple DynamoDB client written in TypeScript.
101 lines • 3.65 kB
JavaScript
;
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