import DataLoader from "dataloader"; import { Knex } from "knex"; import { Knex as KnexOriginal } from "knex"; import { KeyValueCache } from "@apollo/utils.keyvaluecache"; declare module "knex" { namespace Knex { type KnexConfig = { client: string; connection: string | undefined; }; type BatchCallback = (query: Knex.QueryBuilder, keys: readonly any[]) => Promise; interface QueryBuilder { cache(value: number): KnexOriginal.QueryBuilder; batch(callback: BatchCallback): BatchedLoader; } } } export interface DataSourceKnex extends Knex { cache?: Knex.QueryBuilder["cache"]; batch?: Knex.QueryBuilder["batch"]; } export interface BatchedLoader extends DataLoader { } export declare type BatchedSQLDataSourceProps = { knexConfig: Knex.KnexConfig | DataSourceKnex; writeKnexConfig?: Knex.KnexConfig | DataSourceKnex; cache?: KeyValueCache; context?: Context; }; export declare class BatchedSQLDataSource { cache: BatchedSQLDataSourceProps["cache"]; context: BatchedSQLDataSourceProps["context"]; db: { query: DataSourceKnex; write: DataSourceKnex; }; constructor(config: BatchedSQLDataSourceProps); private _extendKnex; private _connectToDatabase; private _batchQuery; private _cacheQuery; }