@graphql-mesh/types
Version:
142 lines (141 loc) • 5.73 kB
TypeScript
import { IResolvers, Executor } from '@graphql-tools/utils';
import { GraphQLSchema, GraphQLResolveInfo, DocumentNode, SelectionSetNode } from 'graphql';
import * as YamlConfig from './config';
import { Transform, MergedTypeConfig, SubschemaConfig } from '@graphql-tools/delegate';
import { TypedDocumentNode } from '@graphql-typed-document-node/core';
import { MeshStore } from '@graphql-mesh/store';
import type { Plugin } from '@envelop/core';
export declare const jsonSchema: any;
export { YamlConfig };
export declare type MeshSource = {
schema: GraphQLSchema;
executor?: Executor;
contextVariables?: Record<string, string>;
batch?: boolean;
};
declare type FetchFn = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
export interface KeyValueCacheSetOptions {
/**
* Specified in **seconds**, the time-to-live (TTL) value limits the lifespan
* of the data being stored in the cache.
*/
ttl?: number | null;
}
export interface KeyValueCache<V = any> {
get(key: string): Promise<V | undefined>;
set(key: string, value: V, options?: KeyValueCacheSetOptions): Promise<void>;
delete(key: string): Promise<boolean | void>;
getKeysByPrefix(prefix: string): Promise<string[]>;
}
export declare type GetMeshSourceOptions<THandlerConfig> = {
name: string;
config: THandlerConfig;
baseDir: string;
cache: KeyValueCache;
pubsub: MeshPubSub;
store: MeshStore;
logger: Logger;
importFn: ImportFn;
fetchFn: FetchFn;
};
export interface MeshHandler {
getMeshSource: () => Promise<MeshSource>;
}
export interface MeshHandlerLibrary<TConfig = any> {
new (options: GetMeshSourceOptions<TConfig>): MeshHandler;
}
export declare type AllHooks = {
destroy: void;
[key: string]: any;
};
export declare type HookName = keyof AllHooks & string;
export interface MeshPubSub {
publish<THook extends HookName>(triggerName: THook, payload: AllHooks[THook]): void;
subscribe<THook extends HookName>(triggerName: THook, onMessage: (data: AllHooks[THook]) => void, options?: any): number;
unsubscribe(subId: number): void;
asyncIterator<THook extends HookName>(triggers: THook): AsyncIterable<AllHooks[THook]>;
}
export interface MeshTransformOptions<Config = any> {
apiName: string;
config: Config;
baseDir: string;
cache: KeyValueCache;
pubsub: MeshPubSub;
importFn: ImportFn;
}
export interface MeshTransformLibrary<Config = any> {
new (options: MeshTransformOptions<Config>): MeshTransform;
}
export interface MeshTransform<T = any> extends Transform<T> {
noWrap?: boolean;
}
export declare type Maybe<T> = null | undefined | T;
export interface MeshMergerOptions {
cache: KeyValueCache;
pubsub: MeshPubSub;
logger: Logger;
store: MeshStore;
}
export interface MeshMergerLibrary {
new (options: MeshMergerOptions): MeshMerger;
}
export interface MeshMergerContext {
rawSources: RawSourceOutput[];
typeDefs?: DocumentNode[];
resolvers?: IResolvers | IResolvers[];
}
export interface MeshMerger {
name: string;
getUnifiedSchema(mergerContext: MeshMergerContext): SubschemaConfig | Promise<SubschemaConfig>;
}
export declare type MeshPluginOptions<TConfig> = TConfig & {
logger: Logger;
cache: KeyValueCache;
pubsub: MeshPubSub;
};
export declare type MeshPluginFactory<TConfig> = (options: MeshPluginOptions<TConfig>) => Plugin;
export declare type RawSourceOutput = {
name: string;
schema: GraphQLSchema;
executor?: Executor;
transforms: MeshTransform[];
contextVariables: Record<string, string>;
handler: MeshHandler;
batch: boolean;
merge?: Record<string, MergedTypeConfig>;
};
export declare type GraphQLOperation<TData, TVariables> = TypedDocumentNode<TData, TVariables> | string;
export declare type ImportFn = <T = any>(moduleId: string, noCache?: boolean) => Promise<T>;
export declare type LazyLoggerMessage = (() => any | any[]) | any;
export declare type Logger = {
name?: string;
log: (...args: any[]) => void;
warn: (...args: any[]) => void;
info: (...args: any[]) => void;
error: (...args: any[]) => void;
debug: (...lazyArgs: LazyLoggerMessage[]) => void;
child: (name: string) => Logger;
};
export declare type SelectionSetParam = SelectionSetNode | DocumentNode | string | SelectionSetNode;
export declare type SelectionSetParamOrFactory = ((subtree: SelectionSetNode) => SelectionSetParam) | SelectionSetParam;
export declare type InContextSdkMethodBatchingParams<TDefaultReturn, TArgs, TKey, TReturn> = {
key: TKey;
argsFromKeys: (keys: TKey[]) => TArgs;
valuesFromResults?: (results: TDefaultReturn, keys: TKey[]) => TReturn | TReturn[];
};
export declare type InContextSdkMethodRegularParams<TDefaultReturn, TArgs, TReturn> = {
args?: TArgs;
valuesFromResults?: (results: TDefaultReturn) => TReturn | TReturn[];
};
export declare type InContextSdkMethodCustomSelectionSetParams = {
selectionSet: SelectionSetParamOrFactory;
info?: GraphQLResolveInfo;
};
export declare type InContextSdkMethodInfoParams = {
info: GraphQLResolveInfo;
};
export declare type InContextSdkMethodParams<TDefaultReturn, TArgs, TContext, TKey, TReturn> = {
root?: any;
context: TContext;
} & (InContextSdkMethodCustomSelectionSetParams | InContextSdkMethodInfoParams) & (InContextSdkMethodBatchingParams<TDefaultReturn, TArgs, TKey, TReturn> | InContextSdkMethodRegularParams<TDefaultReturn, TArgs, TReturn>);
export declare type InContextSdkMethod<TDefaultReturn = any, TArgs = any, TContext = any> = <TKey, TReturn = TDefaultReturn>(params: InContextSdkMethodParams<TDefaultReturn, TArgs, TContext, TKey, TReturn>) => Promise<TReturn>;