import DynamoDBDocument, { Item } from './DocumentClient'; import ScanQuery from './queries/ScanQuery'; import QueryQuery from './queries/QueryQuery'; export interface TableIndexOptions { tableName: string; indexName?: string; primaryKey: H; sortKey?: S; documentClient: DynamoDBDocument; } export type TableIndexOptionsArg = TableIndexOptions & ([S] extends [never] ? {} : { sortKey: S; }); export type TableKeyArgs = [ S ] extends [never] ? [T[H], undefined?] : [T[H], T[S]]; export type TableKey = { [K in keyof T & (H | S)]: [K] extends [H | S] ? T[K] : never; }; export default class TableIndex { readonly name: string; readonly indexName?: string; readonly primaryKey: H; readonly sortKey?: S; protected readonly client: DynamoDBDocument; constructor(opts: TableIndexOptionsArg); key(...[primaryKey, sortKey]: TableKeyArgs): TableKey; scan(): ScanQuery>; query(): QueryQuery>; }