graphile-config
Version:
Standard plugin interface and helpers to be used across the Graphile stack.
21 lines • 2.23 kB
TypeScript
import type { CallbackOrDescriptor, FunctionalityObject } from "./interfaces.js";
export interface MiddlewareNext<TRawResult> {
(): TRawResult;
callback(callback: (error: object | null, result: Awaited<TRawResult>) => TRawResult | Awaited<TRawResult>): TRawResult;
}
type ActivityFn<TActivities extends FunctionalityObject<TActivities>, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor<infer UFn> ? UFn : never;
type ActivityParameter<TActivities extends FunctionalityObject<TActivities>, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor<(arg: infer UArg) => any> ? UArg : never;
type RealActivityFn<TActivities extends FunctionalityObject<TActivities>, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor<(arg: infer UArg) => infer UResult> ? (next: MiddlewareNext<UResult>, arg: UArg) => UResult : never;
export declare class Middleware<TActivities extends FunctionalityObject<TActivities>> {
middleware: {
[key in keyof TActivities]?: Array<RealActivityFn<TActivities, key>>;
};
register<TActivityName extends keyof TActivities>(activityName: TActivityName, fn: RealActivityFn<TActivities, TActivityName>): void;
run<TActivityName extends keyof TActivities>(activityName: TActivityName, arg: ActivityParameter<TActivities, TActivityName>, activity: (arg: ActivityParameter<TActivities, TActivityName>) => ReturnType<ActivityFn<TActivities, TActivityName>>): ReturnType<ActivityFn<TActivities, TActivityName>>;
runSync<TActivityName extends keyof TActivities>(activityName: TActivityName, arg: ActivityParameter<TActivities, TActivityName>, activity: (arg: ActivityParameter<TActivities, TActivityName>) => ReturnType<ActivityFn<TActivities, TActivityName>>): ReturnType<ActivityFn<TActivities, TActivityName>>;
}
export type MiddlewareHandlers<TActivities extends FunctionalityObject<TActivities>> = {
[key in keyof TActivities]?: CallbackOrDescriptor<TActivities[key] extends (...args: infer UArgs) => infer UResult ? (next: MiddlewareNext<UResult>, ...args: UArgs) => UResult : never>;
};
export {};
//# sourceMappingURL=middleware.d.ts.map