@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
TypeScript
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>;