import type { GraphQLResolveInfo } from 'graphql'; import type { Document, ObjectId, StrictFilter } from 'mongodb'; export type Projection = { [K in keyof StrictFilter]?: 0 | 1; }; type Join = K extends number | string ? P extends number | string ? `${K}${'' extends P ? '' : '.'}${P}` : never : never; type Prev = readonly [ never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...readonly 0[] ]; export type Paths = readonly [D] extends readonly [never] ? never : T extends Record ? { readonly [K in keyof T]-?: K extends number | string ? Join> | `${K}` : never; }[keyof T] : ''; export type DbType = Document & { readonly _id: ObjectId; }; export declare function removeDeepFields(projection: Projection): Projection; export declare function handleExtraFields, // GraphQL type DBType extends Record, // Database type DBPath extends Paths = Paths, GQLPath extends Paths = Paths>(fields: Projection, dependencies: Partial>): Projection; declare function projectionFromGraphQLInfo, // Database type GQLType extends Record, // GraphQL type TInfo extends GraphQLResolveInfo | null | undefined = GraphQLResolveInfo, DBPath extends Paths = Paths, GQLPath extends Paths = Paths>(info: TInfo, dependencies?: Partial>>, prefixes?: readonly string[]): TInfo extends GraphQLResolveInfo ? Projection : null; export default projectionFromGraphQLInfo;