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