@mcma/aws-dynamodb
Version:
Node module with code for using DynamoDB as the backing data storage for MCMA API handlers and workers.
44 lines (43 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTableDescription = getTableDescription;
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
const tableDescriptions = {};
function getKeyNames(keySchema) {
let partitionKeyName;
let sortKeyName;
for (const key of keySchema) {
switch (key.KeyType) {
case "HASH":
partitionKeyName = key.AttributeName;
break;
case "RANGE":
sortKeyName = key.AttributeName;
break;
}
}
return {
partition: partitionKeyName,
sort: sortKeyName
};
}
async function getTableDescription(dynamoDBClient, tableName) {
if (tableDescriptions[tableName]) {
return tableDescriptions[tableName];
}
const data = await dynamoDBClient.send(new client_dynamodb_1.DescribeTableCommand({ TableName: tableName }));
const globalSecondaryIndexes = (data.Table.GlobalSecondaryIndexes ?? []).map(i => ({
name: i.IndexName,
keyNames: getKeyNames(i.KeySchema)
}));
const localSecondaryIndexes = (data.Table.LocalSecondaryIndexes ?? []).map(i => ({
name: i.IndexName,
sortKeyName: getKeyNames(i.KeySchema).sort
}));
return {
tableName,
keyNames: getKeyNames(data.Table.KeySchema),
localSecondaryIndexes,
globalSecondaryIndexes
};
}