UNPKG

duenamodb

Version:

Simple DynamoDB client written in TypeScript.

57 lines 2.5 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 = (tablename, gsiOptions) => { const { name, partitionKeyName, sortKeyName } = gsiOptions; return (key, options = {}) => { const keyOptions = { [partitionKeyName]: key, ...(0, object_1.maybeMerge)(sortKeyName, options.sortKey), }; const queryOptions = (0, exports.createQueryOptions)(name, keyOptions, options.filterOptions); return (0, exports.queryItems)(tablename, { ...options.dynamodbOptions, ...queryOptions, }); }; }; exports.createQueryItems = createQueryItems; const createQueryOptions = (index, keyOptions, filterOptions) => { const { attributeNames: keyNames, attributeValues: keyValues, expression: keyExpression, } = (0, expression_1.createConditionExpression)(keyOptions); const { attributeNames: filterNames, attributeValues: filterValues, expression: filterExpression, } = (0, expression_1.createConditionExpression)(filterOptions ?? {}); 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