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