UNPKG

@dossierhq/core

Version:

The core Dossier library used by clients and server alike, used to interact with schema and entities directly, as well as remotely through a client.

20 lines (19 loc) 1.42 kB
import { type ErrorType, type PromiseResult, type Result } from '../ErrorResult.js'; import type { Logger } from '../Logger.js'; export interface ClientContext { logger: Logger; } export type ContextProvider<TContext extends ClientContext> = () => PromiseResult<{ context: TContext; }, ErrorType>; export interface Operation<TName, TArgs, TOk, TError extends ErrorType | typeof ErrorType.Generic, TModifies extends boolean = boolean> { readonly name: TName; readonly args: TArgs; readonly modifies: TModifies; readonly resolve: (result: Result<TOk, TError>) => void; readonly next: () => Promise<Result<TOk, TError>>; } export type OperationWithoutCallbacks<T> = Omit<T, 'resolve' | 'next'>; export type Middleware<TContext extends ClientContext, TOp> = (context: TContext, operation: TOp) => Promise<void>; export declare function executeOperationPipeline<TContext extends ClientContext, TMiddleware extends Middleware<TContext, any>, TName, TArgs, TOk, TError extends typeof ErrorType.Generic, TOp extends Operation<TName, TArgs, TOk, TError>>(context: TContext, pipeline: TMiddleware[], operation: OperationWithoutCallbacks<TOp>): PromiseResult<TOk, TError>; export declare function LoggingClientMiddleware<TContext extends ClientContext, TOk, TError extends typeof ErrorType.Generic, TOp extends Operation<unknown, unknown, TOk, TError>>(context: TContext, operation: TOp): Promise<void>;