import { watch } from "node:fs"; import { runCodegen } from "./run-codegen.js"; export type WatchOptions = { /** App-Wurzel — gleiche Bedeutung wie für `runCodegen`. */ readonly appRoot: string; /** Optional: alle registrierten Write-Handler-QNs. Durchgereicht an * `runCodegen` für die Generierung der `WriteHandlerQn`-Union. * Der Dev-Server extrahiert sie beim Boot aus den Features und * reicht sie hier rein — der Watcher reicht sie bei jedem Re-Run * an `runCodegen` weiter, damit der generated-Type nicht verschwindet. */ readonly handlerQns?: readonly string[]; /** Wartet diese Millisekunden zusätzliche Events ab, bevor codegen * einmal fährt. 50ms catched typische save-bursts (Editor-Saves * feuern oft 2-3 Events: temp-file → rename → cleanup), bleibt aber * unmerklich für den User. */ readonly debounceMs?: number; /** Callback nach jedem erfolgreichen Codegen-Pass. Default: stderr- * Log mit event-count + warnings. Wer den Output strukturiert * konsumieren will (Dev-Server-UI, IDE-Plugin), gibt einen eigenen * Handler. */ readonly onResult?: (result: ReturnType) => void; /** Callback bei runCodegen-Fehlern. Default: stderr-Warning. */ readonly onError?: (err: unknown) => void; /** Event source seam so tests can drive changes without native fs events * (macOS FSEvents starts asynchronously and can drop writes). Default: `node:fs` watch. */ readonly watchDirectory?: typeof watch; }; export type WatchHandle = { /** Beendet den Watcher. Idempotent — mehrfacher Aufruf ist no-op. */ readonly close: () => void; }; /** Whether a change to `filename` (relative to `src/`, posix or windows * separators) can affect codegen output: production .ts/.tsx sources * outside the skipped dirs, excluding .d.ts (mostly written by codegen * itself) and test files. */ export declare function isCodegenRelevantChange(filename: string): boolean; /** * Startet den Watcher. Beim Boot fährt einmalig `runCodegen` (sodass * die generated Files sofort frisch sind), dann hängt sich an `fs.watch` * und re-runs bei file-changes mit Debounce. */ export declare function watchAndRegenerate(opts: WatchOptions): WatchHandle;