UNPKG

ddb-table

Version:

Strongly typed library for querying and modeling DynamoDB documents.

24 lines (23 loc) 1.09 kB
import ExpressionAttributeNames from './ExpressionAttributeNames'; export type ProjectionFields<T> = { [P in keyof T]?: [T[P]] extends [object] ? ProjectionFields<T[P]> | true | false | 1 | 0 : true | false | 1 | 0; }; type ProjectionFieldsKeys<T, P extends ProjectionFields<T>> = Exclude<{ [K in keyof T]: [P[K]] extends [true | 1 | object] ? K : never; }[keyof T], undefined>; type ProjectionFieldsMaybeKeys<T, P extends ProjectionFields<T>> = Exclude<{ [K in keyof T]: [P[K]] extends [boolean] ? [P[K]] extends [false] ? never : K : never; }[keyof T], undefined>; export type ItemProjection<T, P extends ProjectionFields<T>> = { [K in ProjectionFieldsKeys<T, P>]: [P[K]] extends [object] ? ItemProjection<T[K], P[K]> : T[K]; } & { [K in ProjectionFieldsMaybeKeys<T, P>]?: T[K]; }; export default class ProjectionExpression<T extends K, K> { private names; private paths; constructor(names: ExpressionAttributeNames<T>, init?: string); add<P extends ProjectionFields<Omit<T, keyof K>>>(fields: P): this; serialize(): string | undefined; } export {};