prisma-extension-pagination
Version:
Prisma Client extension for pagination
52 lines (51 loc) • 2.69 kB
TypeScript
import type { CursorPaginationMeta, CursorPaginationOptions, GetCursorFunction, PageNumberPaginationMeta, PageNumberPaginationOptions, ParseCursorFunction } from './types';
import { Prisma } from '@prisma/client/extension';
type Paginator<O extends PaginatorOptions> = <T, A>(this: T, args?: Prisma.Exact<A, Omit<Prisma.Args<T, 'findMany'>, 'cursor' | 'take' | 'skip'>>) => {
withPages: O['pages'] extends {
limit: number;
} ? <TOptions extends Omit<P, 'limit'>, P extends PageNumberPaginationOptions>(options?: TOptions & {
limit?: P['limit'];
}) => Promise<[
Prisma.Result<T, A, 'findMany'>,
PageNumberPaginationMeta<TOptions extends {
includePageCount: boolean;
} ? TOptions['includePageCount'] : O['pages'] extends {
includePageCount: boolean;
} ? O['pages']['includePageCount'] : false>
]> : <TOptions extends PageNumberPaginationOptions, P extends PageNumberPaginationOptions>(options: TOptions & {
limit: P['limit'];
}) => Promise<[
Prisma.Result<T, A, 'findMany'>,
PageNumberPaginationMeta<TOptions extends {
includePageCount: boolean;
} ? TOptions['includePageCount'] : O['pages'] extends {
includePageCount: boolean;
} ? O['pages']['includePageCount'] : false>
]>;
withCursor: O['cursor'] extends {
limit: number;
} ? <TOptions extends Omit<P, 'limit'>, P extends CursorPaginationOptions<Prisma.Result<T, A, 'findMany'>[number], NonNullable<Prisma.Args<T, 'findMany'>['cursor']>>>(options?: TOptions & {
limit?: P['limit'];
}) => Promise<[Prisma.Result<T, A, 'findMany'>, CursorPaginationMeta]> : <TOptions extends Omit<P, 'limit'>, P extends CursorPaginationOptions<Prisma.Result<T, A, 'findMany'>[number], NonNullable<Prisma.Args<T, 'findMany'>['cursor']>>>(options: TOptions & {
limit: P['limit'];
}) => Promise<[Prisma.Result<T, A, 'findMany'>, CursorPaginationMeta]>;
};
interface PaginatorOptions {
pages?: {
limit?: number;
includePageCount?: boolean;
};
cursor?: {
limit?: number;
getCursor?: GetCursorFunction<any>;
parseCursor?: ParseCursorFunction<any>;
};
}
export declare function createPaginator<O extends PaginatorOptions>(globalOptions?: O): Paginator<O>;
export declare const paginate: Paginator<PaginatorOptions>;
export declare function extension<O extends PaginatorOptions>(options?: O): (client: any) => import("@prisma/client/extension").PrismaClientExtends<import("@prisma/client/runtime/client").InternalArgs<{}, {
$allModels: {
paginate: Paginator<O>;
};
}, {}, {}>>;
export {};