dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
28 lines (27 loc) • 1.22 kB
JavaScript
import { $entities, TableAction } from '../../../table/index.js';
export class Registry extends TableAction {
constructor(table, _entities = [], accessPatterns = {}, { entities = registryEntities(_entities), query = registryQueries(accessPatterns) } = {}) {
super(table, _entities);
this.entities = entities;
this.accessPatterns = accessPatterns;
this.query = query;
}
registerEntities(...nextEntities) {
return new Registry(this.table, nextEntities, this.accessPatterns, {
entities: registryEntities(nextEntities),
query: this.query
});
}
registerAccessPatterns(nextAccessPatterns) {
return new Registry(this.table, this[$entities], nextAccessPatterns, { entities: this.entities, query: registryQueries(nextAccessPatterns) });
}
build(Action) {
return new Action(this.table, this[$entities]);
}
}
Registry.actionName = 'registry';
const registryQueries = (accessPatterns) => Object.fromEntries(Object.entries(accessPatterns).map(([key, ap]) => [
key,
input => ap.query(input)
]));
const registryEntities = (entities) => Object.fromEntries(entities.map((entity) => [entity.entityName, entity]));