ddb-table
Version:
Strongly typed library for querying and modeling DynamoDB documents.
24 lines (23 loc) • 1.09 kB
TypeScript
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 {};