UNPKG

duenamodb

Version:

Simple, strongly-typed helpers around the AWS SDK DynamoDB client.

60 lines 2.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.queryItems = exports.createQueryOptions = exports.createQueryItems = void 0; const client_dynamodb_1 = require("@aws-sdk/client-dynamodb"); const util_dynamodb_1 = require("@aws-sdk/util-dynamodb"); const client_1 = require("./client"); const expression_1 = require("./expression"); const object_1 = require("./object"); const createQueryItems = (options) => { const { indexName, skName, pkName, tablename } = options; return ({ pk, sk, dynamodbOptions = {}, filter }) => { const keyOptions = { [pkName]: pk, ...(0, object_1.maybeMerge)(skName, sk), }; const queryOptions = (0, exports.createQueryOptions)(keyOptions, indexName, filter); return (0, exports.queryItems)(tablename, { ...dynamodbOptions, ...queryOptions, }); }; }; exports.createQueryItems = createQueryItems; const createQueryOptions = (keyOptions, index, filter) => { const { attributeNames: keyNames, attributeValues: keyValues, expression: keyExpression, } = (0, expression_1.createConditionExpression)(keyOptions); const { attributeNames: filterNames, attributeValues: filterValues, expression: filterExpression, } = (0, expression_1.createConditionExpression)(filter ?? {}); return { IndexName: index, ExpressionAttributeValues: (0, util_dynamodb_1.marshall)({ ...keyValues, ...filterValues }), ExpressionAttributeNames: { ...keyNames, ...filterNames }, KeyConditionExpression: keyExpression, ...(0, object_1.maybeMerge)("FilterExpression", filterExpression), }; }; exports.createQueryOptions = createQueryOptions; const queryItems = async (tablename, options) => { const command = new client_dynamodb_1.QueryCommand({ ...options, TableName: tablename, }); const res = await client_1.DDBClient.instance.send(command); if (res.$metadata.httpStatusCode !== 200) { throw res; } if (!res.Items) { return []; } const paginatedResults = res.LastEvaluatedKey ? await (0, exports.queryItems)(tablename, { ...options, ExclusiveStartKey: res.LastEvaluatedKey, }) : []; return [ ...paginatedResults, ...res.Items.map((item) => (0, util_dynamodb_1.unmarshall)(item)), ]; }; exports.queryItems = queryItems; //# sourceMappingURL=query.js.map