UNPKG

duenamodb

Version:

Simple DynamoDB client written in TypeScript.

51 lines 1.98 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 = (tablename) => { return (options = {}) => { const scanOptions = (0, exports.createScanOptions)(options.filterOptions); return (0, exports.scanItems)(tablename, { ...scanOptions, ...options.dynamodbOptions, }); }; }; exports.createScanItems = createScanItems; const createScanOptions = (filterOptions) => { if (!filterOptions || Object.keys(filterOptions).length === 0) { return {}; } const { attributeNames: filterNames, attributeValues: filterValues, expression: filterExpression, } = (0, expression_1.createConditionExpression)(filterOptions); 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