UNPKG

duenamodb

Version:

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

55 lines 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.scanItems = exports.createScanOptions = exports.createScanItems = 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 createScanItems = (options) => { const { tablename } = options; return ({ filter, dynamodbOptions } = {}) => { const scanOptions = (0, exports.createScanOptions)(filter); return (0, exports.scanItems)(tablename, { ...scanOptions, ...dynamodbOptions, }); }; }; exports.createScanItems = createScanItems; const createScanOptions = (filter) => { if (!filter || Object.keys(filter).length === 0) { return {}; } const { attributeNames: filterNames, attributeValues: filterValues, expression: filterExpression, } = (0, expression_1.createConditionExpression)(filter); return { ExpressionAttributeValues: { ...(0, util_dynamodb_1.marshall)(filterValues) }, ExpressionAttributeNames: { ...filterNames }, FilterExpression: filterExpression, }; }; exports.createScanOptions = createScanOptions; const scanItems = async (tablename, options) => { const command = new client_dynamodb_1.ScanCommand({ ...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.scanItems)(tablename, { ...options, ExclusiveStartKey: res.LastEvaluatedKey, }) : []; return [ ...paginatedResults, ...res.Items.map((item) => (0, util_dynamodb_1.unmarshall)(item)), ]; }; exports.scanItems = scanItems; //# sourceMappingURL=scan.js.map