ddb-table
Version:
Strongly typed library for querying and modeling DynamoDB documents.
31 lines (30 loc) • 1.2 kB
TypeScript
import DynamoDBDocument, { Item } from './DocumentClient';
import ScanQuery from './queries/ScanQuery';
import QueryQuery from './queries/QueryQuery';
export interface TableIndexOptions<H, S> {
tableName: string;
indexName?: string;
primaryKey: H;
sortKey?: S;
documentClient: DynamoDBDocument;
}
export type TableIndexOptionsArg<H, S> = TableIndexOptions<H, S> & ([S] extends [never] ? {} : {
sortKey: S;
});
export type TableKeyArgs<T, H extends keyof T, S extends keyof T = never> = [
S
] extends [never] ? [T[H], undefined?] : [T[H], T[S]];
export type TableKey<T, H extends keyof T, S extends keyof T = never> = {
[K in keyof T & (H | S)]: [K] extends [H | S] ? T[K] : never;
};
export default class TableIndex<T extends Item, H extends keyof T, S extends keyof T = never> {
readonly name: string;
readonly indexName?: string;
readonly primaryKey: H;
readonly sortKey?: S;
protected readonly client: DynamoDBDocument;
constructor(opts: TableIndexOptionsArg<H, S>);
key(...[primaryKey, sortKey]: TableKeyArgs<T, H, S>): TableKey<T, H, S>;
scan(): ScanQuery<T, TableKey<T, H, S>>;
query(): QueryQuery<T, TableKey<T, H, S>>;
}