/** * Console output service for CLI display operations * * Abstracts console output to enable testing and maintain * explicit effect tracking for all IO operations. */ import { Effect } from "effect"; /** Spinner control handle with effectful operations */ export type SpinnerHandle = { readonly start: (message?: string) => Effect.Effect; readonly stop: (message?: string) => Effect.Effect; readonly message: (message: string) => Effect.Effect; }; /** Captured output for testing */ export type CapturedOutput = { readonly intros: ReadonlyArray; readonly outros: ReadonlyArray; readonly cancels: ReadonlyArray; readonly notes: ReadonlyArray<{ readonly content: string; readonly title: string | undefined; }>; readonly logs: { readonly success: ReadonlyArray; readonly error: ReadonlyArray; readonly warning: ReadonlyArray; readonly info: ReadonlyArray; readonly message: ReadonlyArray; readonly step: ReadonlyArray; }; readonly spinnerMessages: ReadonlyArray; }; /** Service API interface for documentation and extension */ export interface ConsoleServiceApi { readonly intro: (message: string) => Effect.Effect; readonly outro: (message: string) => Effect.Effect; readonly cancel: (message: string) => Effect.Effect; readonly note: (content: string, title?: string) => Effect.Effect; readonly log: { readonly success: (message: string) => Effect.Effect; readonly error: (message: string) => Effect.Effect; readonly warning: (message: string) => Effect.Effect; readonly info: (message: string) => Effect.Effect; readonly message: (message: string) => Effect.Effect; readonly step: (message: string) => Effect.Effect; }; readonly spinner: () => Effect.Effect; readonly getCaptured: () => Effect.Effect; } declare const ConsoleService_base: Effect.Service.Class Effect.Effect; /** Display outro message */ outro: (message: string) => Effect.Effect; /** Display cancellation message */ cancel: (message: string) => Effect.Effect; /** Display a note with optional title */ note: (content: string, title?: string) => Effect.Effect; /** Log operations by level */ log: { success: (message: string) => Effect.Effect; error: (message: string) => Effect.Effect; warning: (message: string) => Effect.Effect; info: (message: string) => Effect.Effect; message: (message: string) => Effect.Effect; step: (message: string) => Effect.Effect; }; /** Create a spinner with effectful operations */ spinner: () => Effect.Effect<{ start: (msg: string | undefined) => Effect.Effect; stop: (msg: string | undefined) => Effect.Effect; message: (msg: string) => Effect.Effect; }, never, never>; /** Get captured output (only available in Test layer) */ getCaptured: () => Effect.Effect; }, never, never>; }>; /** * A service for handling console output operations with support for both real and test implementations. * * This service provides a functional interface for console operations using the Effect library * and clack UI primitives. It includes methods for displaying messages, managing spinners, * and logging at various levels. * * The service has two implementations: * - **Default**: Uses clack to display actual console output * - **Test**: Captures all output in memory for testing purposes */ export declare class ConsoleService extends ConsoleService_base { /** * Test layer that captures all output for assertions */ static readonly Test: import("effect/Layer").Layer; } export {}; //# sourceMappingURL=ConsoleService.d.ts.map