dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
107 lines (106 loc) • 4.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TableRepository = void 0;
const batchDeleteRequest_js_1 = require("../../../entity/actions/batchDelete/batchDeleteRequest.js");
const batchGetRequest_js_1 = require("../../../entity/actions/batchGet/batchGetRequest.js");
const batchPutRequest_js_1 = require("../../../entity/actions/batchPut/batchPutRequest.js");
const index_js_1 = require("../../../errors/index.js");
const index_js_2 = require("../../../table/actions/accessPattern/index.js");
const index_js_3 = require("../../../table/actions/batchGet/index.js");
const index_js_4 = require("../../../table/actions/batchWrite/index.js");
const index_js_5 = require("../../../table/actions/deletePartition/index.js");
const index_js_6 = require("../../../table/actions/parsePrimaryKey/index.js");
const index_js_7 = require("../../../table/actions/query/index.js");
const index_js_8 = require("../../../table/actions/scan/index.js");
const index_js_9 = require("../../../table/index.js");
class TableRepository extends index_js_9.TableAction {
constructor(table, entities = []) {
super(table, entities);
}
entities(...nextEntities) {
return new TableRepository(this.table, nextEntities);
}
parsePrimaryKey(keyInput) {
return new index_js_6.PrimaryKeyParser(this.table).parse(keyInput);
}
async scan(options = {}) {
return new index_js_8.ScanCommand(this.table, this[index_js_9.$entities], options).send();
}
async query(query, options = {}) {
return new index_js_7.QueryCommand(this.table, this[index_js_9.$entities], query, options).send();
}
async deletePartition(query, options = {}) {
return new index_js_5.DeletePartitionCommand(this.table, this[index_js_9.$entities], query, options).send();
}
static executeBatchGet(...commands) {
return (0, index_js_3.execute)(...commands);
}
batchGet(..._requests) {
const [headRequestOrOptions = {}, ...tailRequests] = _requests;
const requests = tailRequests;
let options = {};
if (isBatchGetRequest(headRequestOrOptions)) {
requests.unshift(headRequestOrOptions);
}
else {
options = headRequestOrOptions;
}
const firstRequest = requests[0];
if (firstRequest === undefined) {
throw new index_js_1.DynamoDBToolboxError('actions.incompleteAction', {
message: 'batchGet incomplete: No BatchGetRequest supplied'
});
}
const entities = [];
const entityNames = new Set();
for (const request of requests) {
if (entityNames.has(request.entity.entityName)) {
continue;
}
entities.push(request.entity);
entityNames.add(request.entity.entityName);
}
return new index_js_3.BatchGetCommand(this.table, entities, requests, options);
}
static executeBatchWrite(...commands) {
return (0, index_js_4.execute)(...commands);
}
batchWrite(..._requests) {
const [headRequestOrOptions = {}, ...tailRequests] = _requests;
const requests = tailRequests;
let options = {};
if (isBatchWriteRequest(headRequestOrOptions)) {
requests.unshift(headRequestOrOptions);
}
else {
options = headRequestOrOptions;
}
const firstRequest = requests[0];
if (firstRequest === undefined) {
throw new index_js_1.DynamoDBToolboxError('actions.incompleteAction', {
message: 'batchGet incomplete: No BatchWriteRequest supplied'
});
}
const entities = [];
const entityNames = new Set();
for (const request of requests) {
if (entityNames.has(request.entity.entityName)) {
continue;
}
entities.push(request.entity);
entityNames.add(request.entity.entityName);
}
return new index_js_4.BatchWriteCommand(this.table, entities, requests, options);
}
accessPattern(schema, pattern, options = {}) {
return new index_js_2.AccessPattern(this.table, this[index_js_9.$entities], schema,
/**
* @debt v3 "put query in a 'query' key so it's not polluted by the options"
*/
pattern, options);
}
}
exports.TableRepository = TableRepository;
TableRepository.actionName = 'repository';
const isBatchGetRequest = (input) => input instanceof batchGetRequest_js_1.BatchGetRequest;
const isBatchWriteRequest = (input) => input instanceof batchPutRequest_js_1.BatchPutRequest || input instanceof batchDeleteRequest_js_1.BatchDeleteRequest;