import type { Effect, Scope } from "effect" export interface Registration { readonly dispose: Effect.Effect } export interface ModelHookOptions { /** Limits the hook to one provider. Unscoped hooks apply to every provider. */ readonly providerID?: string } export type Hooks = Record> = < Name extends keyof Spec, >( name: Name, callback: (input: Spec[Name]) => Effect.Effect, ) => Effect.Effect export type ModelHooks = Record> = < Name extends keyof Spec, >( name: Name, callback: (input: Spec[Name]) => Effect.Effect, options?: Spec[Name] extends { readonly model: unknown } ? ModelHookOptions : never, ) => Effect.Effect export type Transform = (callback: (input: Input) => void) => Effect.Effect