Skip to content

definePlugin

definePlugin<TName, TProvides, TClient>(config): CfastPlugin<TName, Awaited<TProvides>, unknown, TClient>

Defined in: packages/core/src/define-plugin.ts:39

Defines a cfast plugin for use with createApp().use().

Has two call signatures:

  • Direct form (no dependencies): definePlugin({ name, setup, ... }) — types are fully inferred.
  • Curried form (with dependencies): definePlugin<TRequires>()({ name, setup, ... }) — specify TRequires explicitly so setup(ctx) receives typed prior-plugin context.

TName extends string

TProvides

TClient = unknown

Plugin configuration with name, setup, and optional Provider/client.

TClient

TName

ComponentType<{ children: ReactNode; }>

(ctx) => TProvides | Promise<TProvides>

CfastPlugin<TName, Awaited<TProvides>, unknown, TClient>

A CfastPlugin instance ready to pass to app.use().

// Leaf plugin (no dependencies)
const analyticsPlugin = definePlugin({
name: 'analytics',
setup(ctx) {
return { track: (event: string) => {} };
},
});
// Plugin with dependencies (curried)
import type { AuthPluginProvides } from '@cfast/auth';
const dbPlugin = definePlugin<AuthPluginProvides>()({
name: 'db',
setup(ctx) {
ctx.auth.user; // typed from AuthPluginProvides
return { client: createDb({}) };
},
});

definePlugin<TRequires>(): <TName, TProvides, TClient>(config) => CfastPlugin<TName, Awaited<TProvides>, TRequires, TClient>

Defined in: packages/core/src/define-plugin.ts:51

Defines a cfast plugin for use with createApp().use().

Has two call signatures:

  • Direct form (no dependencies): definePlugin({ name, setup, ... }) — types are fully inferred.
  • Curried form (with dependencies): definePlugin<TRequires>()({ name, setup, ... }) — specify TRequires explicitly so setup(ctx) receives typed prior-plugin context.

TRequires

A CfastPlugin instance ready to pass to app.use().

<TName, TProvides, TClient>(config): CfastPlugin<TName, Awaited<TProvides>, TRequires, TClient>

TName extends string

TProvides

TClient = unknown

TClient

TName

ComponentType<{ children: ReactNode; }>

(ctx) => TProvides | Promise<TProvides>

CfastPlugin<TName, Awaited<TProvides>, TRequires, TClient>

// Leaf plugin (no dependencies)
const analyticsPlugin = definePlugin({
name: 'analytics',
setup(ctx) {
return { track: (event: string) => {} };
},
});
// Plugin with dependencies (curried)
import type { AuthPluginProvides } from '@cfast/auth';
const dbPlugin = definePlugin<AuthPluginProvides>()({
name: 'db',
setup(ctx) {
ctx.auth.user; // typed from AuthPluginProvides
return { client: createDb({}) };
},
});