UNPKG

graphql-request

Version:

Minimal GraphQL client supporting Node and browsers for scripts or simple apps.

91 lines 5.12 kB
import { Errors } from '../errors/__.js'; import type { Deferred, FindValueAfter, IsLastValue, MaybePromise } from '../prelude.js'; type HookSequence = readonly [string, ...string[]]; type ExtensionOptions = { retrying: boolean; }; export type Extension2<$Core extends Core = Core, $Options extends ExtensionOptions = ExtensionOptions> = (hooks: ExtensionHooks<$Core[PrivateTypesSymbol]['hookSequence'], $Core[PrivateTypesSymbol]['hookMap'], $Core[PrivateTypesSymbol]['result'], $Options>) => Promise<$Core[PrivateTypesSymbol]['result'] | SomeHookEnvelope>; type ExtensionHooks<$HookSequence extends HookSequence, $HookMap extends Record<$HookSequence[number], object> = Record<$HookSequence[number], object>, $Result = unknown, $Options extends ExtensionOptions = ExtensionOptions> = { [$HookName in $HookSequence[number]]: Hook<$HookSequence, $HookMap, $Result, $HookName, $Options>; }; type CoreInitialInput<$Core extends Core> = $Core[PrivateTypesSymbol]['hookMap'][$Core[PrivateTypesSymbol]['hookSequence'][0]]; declare const PrivateTypesSymbol: unique symbol; export type PrivateTypesSymbol = typeof PrivateTypesSymbol; declare const hookSymbol: unique symbol; type HookSymbol = typeof hookSymbol; export type SomeHookEnvelope = { [name: string]: SomeHook; }; export type SomeHook<fn extends (input: any) => any = (input: any) => any> = fn & { [hookSymbol]: HookSymbol; input: Parameters<fn>[0]; }; export type HookMap<$HookSequence extends HookSequence> = Record<$HookSequence[number], any>; type Hook<$HookSequence extends HookSequence, $HookMap extends HookMap<$HookSequence> = HookMap<$HookSequence>, $Result = unknown, $Name extends $HookSequence[number] = $HookSequence[number], $Options extends ExtensionOptions = ExtensionOptions> = (<$$Input extends $HookMap[$Name]>(input?: $$Input) => HookReturn<$HookSequence, $HookMap, $Result, $Name, $Options>) & { [hookSymbol]: HookSymbol; input: $HookMap[$Name]; }; type HookReturn<$HookSequence extends HookSequence, $HookMap extends HookMap<$HookSequence> = HookMap<$HookSequence>, $Result = unknown, $Name extends $HookSequence[number] = $HookSequence[number], $Options extends ExtensionOptions = ExtensionOptions> = ($Options['retrying'] extends true ? Error : never) | (IsLastValue<$Name, $HookSequence> extends true ? $Result : { [$NameNext in FindValueAfter<$Name, $HookSequence>]: Hook<$HookSequence, $HookMap, $Result, $NameNext>; }); export type Core<$HookSequence extends HookSequence = HookSequence, $HookMap extends HookMap<$HookSequence> = HookMap<$HookSequence>, $Result = unknown> = { [PrivateTypesSymbol]: { hookSequence: $HookSequence; hookMap: $HookMap; result: $Result; }; hookNamesOrderedBySequence: $HookSequence; hooks: { [$HookName in $HookSequence[number]]: (input: $HookMap[$HookName]) => MaybePromise<IsLastValue<$HookName, $HookSequence> extends true ? $Result : $HookMap[FindValueAfter<$HookName, $HookSequence>]>; }; }; export type HookName = string; export type Extension = NonRetryingExtension | RetryingExtension; export type NonRetryingExtension = { retrying: false; name: string; entrypoint: string; body: Deferred<unknown>; currentChunk: Deferred<SomeHookEnvelope>; }; export type RetryingExtension = { retrying: true; name: string; entrypoint: string; body: Deferred<unknown>; currentChunk: Deferred<SomeHookEnvelope | Error>; }; export declare const createRetryingExtension: (extension: NonRetryingExtensionInput) => RetryingExtensionInput; export type ExtensionInput<$Input extends object = any> = NonRetryingExtensionInput<$Input> | RetryingExtensionInput<$Input>; export type NonRetryingExtensionInput<$Input extends object = any> = (input: $Input) => MaybePromise<unknown>; export type RetryingExtensionInput<$Input extends object = any> = { retrying: boolean; run: (input: $Input) => MaybePromise<unknown>; }; declare const ResultEnvelopeSymbol: unique symbol; type ResultEnvelopeSymbol = typeof ResultEnvelopeSymbol; export type ResultEnvelop<T = unknown> = { [ResultEnvelopeSymbol]: ResultEnvelopeSymbol; result: T; }; export declare const createResultEnvelope: <T>(result: T) => ResultEnvelop<T>; export type Options = { /** * @defaultValue `true` */ entrypointSelectionMode?: 'optional' | 'required' | 'off'; }; export type Builder<$Core extends Core = Core> = { core: $Core; run: ({ initialInput, extensions, options }: { initialInput: CoreInitialInput<$Core>; extensions: Extension2<$Core>[]; retryingExtension?: Extension2<$Core, { retrying: true; }>; options?: Options; }) => Promise<$Core[PrivateTypesSymbol]['result'] | Errors.ContextualError>; }; export declare const create: <$HookSequence extends HookSequence = HookSequence, $HookMap extends HookMap<$HookSequence> = HookMap<$HookSequence>, $Result = unknown>(coreInput: Omit<Core<$HookSequence, $HookMap, $Result>, PrivateTypesSymbol>) => Builder<Core<$HookSequence, $HookMap, $Result>>; export {}; //# sourceMappingURL=main.d.ts.map