import type { Observable, Observer } from '@trpc/server/observable'; import type { InferrableClientTypes, Maybe, TRPCResultMessage, TRPCSuccessResponse, } from '@trpc/server/unstable-core-do-not-import'; import type { ResponseEsque } from '../internals/types'; import type { TRPCClientError } from '../TRPCClientError'; import type { TRPCConnectionState } from './internals/subscriptions'; export { isNonJsonSerializable, isFormData, isOctetType, } from './internals/contentTypes'; /** * @internal */ export interface OperationContext extends Record {} /** * @internal */ export type Operation = { id: number; type: 'mutation' | 'query' | 'subscription'; input: TInput; path: string; context: OperationContext; signal: Maybe; }; interface HeadersInitEsque { [Symbol.iterator](): IterableIterator<[string, string]>; } /** * @internal */ export type HTTPHeaders = | HeadersInitEsque | Record; /** * The default `fetch` implementation has an overloaded signature. By convention this library * only uses the overload taking a string and options object. */ export type TRPCFetch = ( url: string, options?: RequestInit, ) => Promise; export interface TRPCClientRuntime { // nothing here anymore } /** * @internal */ export interface OperationResultEnvelope { result: | TRPCResultMessage['result'] | TRPCSuccessResponse['result'] | TRPCConnectionState; context?: OperationContext; } /** * @internal */ export type OperationResultObservable< TInferrable extends InferrableClientTypes, TOutput, > = Observable< OperationResultEnvelope>, TRPCClientError >; /** * @internal */ export type OperationResultObserver< TInferrable extends InferrableClientTypes, TOutput, > = Observer< OperationResultEnvelope>, TRPCClientError >; /** * @internal */ export type OperationLink< TInferrable extends InferrableClientTypes, TInput = unknown, TOutput = unknown, > = (opts: { op: Operation; next: ( op: Operation, ) => OperationResultObservable; }) => OperationResultObservable; /** * @public */ export type TRPCLink = ( opts: TRPCClientRuntime, ) => OperationLink;