import { type ReviveOptions } from "./contract.js"; import type { ResolveTagFn } from "./options.js"; export interface ResolvedCustomDirective { name: string; entrypoint: string; } export interface ReviveCompileInputs { root: string; directories: string[]; directoryFiles: Set; islandFiles: Set; tagSource?: "registeredTag" | "filename"; resolveTag?: ResolveTagFn; customDirectives?: Array<{ name: string; entrypoint: string; }>; reviveOptions: ReviveOptions; } export interface RevivePlan { runtimePath: string; directoryGlobs: string[]; islandPaths: string[] | null; resolvedTags: Record | null; customDirectives: ResolvedCustomDirective[] | null; reviveOptions: ReviveOptions; /** Maps absoluteFilePath → effective tag. Populated only in registeredTag mode. */ ownershipMap: ReadonlyMap; } export interface ReviveCompilerPorts { toLoadPaths(islandFiles: Set, root: string): string[]; readFile?(path: string): string | null; } export interface ReviveCompileResolvePorts { resolveEntrypoint(entrypoint: string): Promise; } export interface ReviveCompiler { plan(input: ReviveCompileInputs, ports?: ReviveCompileResolvePorts): Promise; emit(plan: RevivePlan): string; compile(input: ReviveCompileInputs, ports?: ReviveCompileResolvePorts): Promise; /** Re-derives the effective tag for one file. Returns null when unreadable or indeterminate. */ recomputeOwnership(absoluteFilePath: string, filePath: string, input: Pick): string | false | null; } export declare function createReviveCompiler(ports: ReviveCompilerPorts, runtimePath: string): ReviveCompiler;