/** * Core types for the veryfront extension system. * * @module extensions/types */ /** * Declares a system capability an extension requires. * Object-based for extensibility -- scoping fields vary by type. */ import "../../_dnt.polyfills.js"; export interface Capability { type: string; [key: string]: unknown; } /** Public API contract for extension contract metadata. */ export interface ExtensionContractMetadata { /** Contracts this extension registers dynamically during setup(). */ provides?: string[]; /** Contracts this extension needs before setup() runs. */ requires?: string[]; } export type PackageContractMetadata = ExtensionContractMetadata; /** Context for extension. */ export interface ExtensionContext { get(contract: string): T | undefined; require(contract: string): T; /** * Publish a contract declared by this extension through * `contracts.provides` or static `provides`. */ provide(contract: string, impl: T): void; /** Optional lifecycle cancellation supplied by abort-aware orchestrators. */ readonly signal?: AbortSignal; config: Record; logger: ExtensionLogger; } /** Public API contract for extension logger. */ export interface ExtensionLogger { debug(message: string, ...args: unknown[]): void; info(message: string, ...args: unknown[]): void; warn(message: string, ...args: unknown[]): void; error(message: string, ...args: unknown[]): void; } /** Public API contract for extension. */ export interface Extension { name: string; version: string; capabilities: Capability[]; contracts?: ExtensionContractMetadata; setup?(ctx: ExtensionContext): Promise | void; teardown?(): Promise | void; provides?: Record; extends?: Extension[]; } /** Public API contract for extension factory. */ export type ExtensionFactory = (config?: unknown) => Extension; /** Entry shape for extension config. */ export type ExtensionConfigEntry = Extension | { name: string; enabled: false; }; /** Public API contract for extension source. */ export type ExtensionSource = "config" | "package" | "project" | "local-file" | "builtin"; /** Public API contract for resolved extension. */ export interface ResolvedExtension { extension: Extension; source: ExtensionSource; origin: string; } //# sourceMappingURL=types.d.ts.map