/** * The unified plugin registry contract: one registry, three target kinds. * * `Target` maps each kind to its concrete target shape so `register`/`get` * stay kind-typed at the call site. The concrete storage + singleton live in * `internal.ts`. */ import type { ConnectorTarget, DeployTarget, DriverTarget } from "./targets.js"; /** The three kinds of thing the registry owns. */ export type TargetKind = "driver" | "connector" | "deployTarget"; /** Maps a `TargetKind` to its concrete target interface. */ export type Target = K extends "driver" ? DriverTarget : K extends "connector" ? ConnectorTarget : K extends "deployTarget" ? DeployTarget : never; /** Lightweight metadata row returned by `list()` — enough to populate a picker without loading a module. */ export interface TargetMeta { id: string; displayName: string; } /** The seam third-party plugins target: register a thing by kind+id, look it up later. */ export interface PluginRegistry { readonly apiVersion: 1; register(kind: K, target: Target): void; unregister(kind: K, id: string): boolean; get(kind: K, id: string): Target | undefined; list(kind: K): readonly TargetMeta[]; } //# sourceMappingURL=registry.d.ts.map