import { ReturnTypeFuncValue } from '@nestjs/graphql'; import { Class, Filter, Query } from '@ptc-org/nestjs-query-core'; import { ConnectionCursorType } from '../cursor.scalar'; import { PagingStrategies } from '../query'; interface BaseConnectionOptions { enableTotalCount?: boolean; connectionName?: string; disableKeySetPagination?: boolean; enableFetchAllWithNegative?: boolean; } export interface CursorConnectionOptions extends BaseConnectionOptions { pagingStrategy?: PagingStrategies.CURSOR; } export interface OffsetConnectionOptions extends BaseConnectionOptions { pagingStrategy?: PagingStrategies.OFFSET; } export interface ArrayConnectionOptions extends BaseConnectionOptions { pagingStrategy?: PagingStrategies.NONE; } export type ConnectionOptions = CursorConnectionOptions | OffsetConnectionOptions | ArrayConnectionOptions; export interface EdgeType { node: DTO; cursor: ConnectionCursorType; } export interface PageInfoType { hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: ConnectionCursorType | undefined; endCursor?: ConnectionCursorType | undefined; } export type CursorConnectionType = { pageInfo: PageInfoType; edges: EdgeType[]; totalCount?: Promise; }; export interface OffsetPageInfoType { hasNextPage: boolean; hasPreviousPage: boolean; } export type OffsetConnectionType = { pageInfo: OffsetPageInfoType; totalCount?: Promise; nodes: DTO[]; }; export type ArrayConnectionType = DTO[]; export type ConnectionType = OffsetConnectionType | CursorConnectionType | ArrayConnectionType; export type InferConnectionTypeFromStrategy = S extends PagingStrategies.NONE ? ArrayConnectionType : S extends PagingStrategies.OFFSET ? OffsetConnectionType : S extends PagingStrategies.CURSOR ? CursorConnectionType : never; export type QueryMany> = (query: Q) => Promise; export type Count = (filter: Filter) => Promise; export type CountFn = () => Promise; export type PagerResult = { totalCount: CountFn; }; export interface Pager { page>(queryMany: QueryMany, query: Q, count: Count): Promise; } export interface StaticConnectionType extends Class> { resolveType: ReturnTypeFuncValue; createFromPromise>(queryMany: QueryMany, query: Q, count?: Count): Promise>; } export {};