kitcn
Version:
kitcn - React Query integration and CLI tools for Convex
34 lines (33 loc) • 2.44 kB
TypeScript
import { o as MiddlewareBuilder } from "./types-CnTpHR1F.js";
//#region src/plugins/middleware.d.ts
declare const PLUGIN_CONFIG_RESOLVERS: unique symbol;
type PluginConfigureContext<TCtx = unknown> = {
ctx: TCtx;
};
type PluginConfigureResolver<TOptions, TCtx = unknown> = (args: PluginConfigureContext<TCtx>) => TOptions | undefined;
type PluginConfigureInput<TOptions, TCtx = unknown> = TOptions | PluginConfigureResolver<TOptions, TCtx>;
type PluginApiScope<TKey extends string, TApi extends object> = {
api: Record<string, unknown> & Record<TKey, TApi>;
};
type PluginMiddlewareHelpers<TKey extends string, TApi extends object> = {
middleware: () => MiddlewareBuilder<any, any, PluginApiScope<TKey, TApi>, unknown>;
};
type PluginMiddlewareFactory = (...args: never[]) => MiddlewareBuilder<any, any, any, unknown>;
type PluginNamedMiddlewareFactories = Record<string, PluginMiddlewareFactory>;
type PluginExtensionFactories = PluginNamedMiddlewareFactories & {
middleware?: PluginMiddlewareFactory;
};
type Plugin<TKey extends string = string, TOptions = undefined, TApi extends object = {}, TCtx = unknown, TMiddlewares extends PluginNamedMiddlewareFactories = {}> = {
readonly key: TKey;
readonly configure: <TNextCtx = TCtx>(input: PluginConfigureInput<TOptions, TNextCtx>) => Plugin<TKey, TOptions, TApi, TNextCtx, TMiddlewares>;
readonly middleware: () => MiddlewareBuilder<any, any, PluginApiScope<TKey, TApi>, unknown>;
readonly extend: <TNextExtensions extends PluginExtensionFactories>(build: (helpers: PluginMiddlewareHelpers<TKey, TApi>) => TNextExtensions) => Plugin<TKey, TOptions, TApi, TCtx, TMiddlewares & Omit<TNextExtensions, 'middleware'>>;
readonly [PLUGIN_CONFIG_RESOLVERS]?: readonly PluginConfigureResolver<TOptions, TCtx>[];
} & TMiddlewares;
declare function resolvePluginOptions<TPlugin extends Plugin<any, any, any, any>, TCtx = unknown>(plugin: TPlugin, args: PluginConfigureContext<TCtx>): TPlugin extends Plugin<any, infer TOptions, any, any> ? TOptions | undefined : never;
declare function definePlugin<TKey extends string, TOptions = undefined, TApi extends object = {}>(key: TKey, provide: (args: {
ctx: unknown;
options?: TOptions;
}) => TApi): Plugin<TKey, TOptions, TApi, unknown, {}>;
//#endregion
export { PluginConfigureResolver as a, PluginConfigureInput as i, PluginApiScope as n, definePlugin as o, PluginConfigureContext as r, resolvePluginOptions as s, Plugin as t };