import { BlobStore, ArtifactSink } from '@nanoesis/engine';

/**
 * Filesystem implementation of the engine's {@link BlobStore} port (DESIGN §11c): get /
 * put / delete over a local directory, the no-cloud storage primitive for local
 * development. Keys are POSIX-style site-relative paths mapped onto files under `root`
 * (e.g. "content/blog/post.json" → `<root>/content/blog/post.json`); the index-backed
 * working store runs on top of this exactly as it does on the blob adapter (LSP).
 */
declare class FsBlobStore implements BlobStore {
    private readonly root;
    constructor(root: string);
    private resolve;
    get(key: string): Promise<Uint8Array | undefined>;
    put(key: string, bytes: Uint8Array): Promise<void>;
    delete(key: string): Promise<void>;
}

/**
 * Filesystem implementation of the engine's {@link ArtifactSink} port (DESIGN §3/§11c):
 * the publish pipeline emits every compiled artifact through {@link write}, here onto a
 * local output directory. It is the no-cloud counterpart of the blob sink, the same
 * behaviour (LSP), used by `@nanoesis/host-mcp` to publish a site locally. Paths are
 * POSIX-style and relative to `root` (e.g. "blog/first/index.html").
 *
 * Publish only writes (DESIGN §11c); clearing the target is the host's job, so {@link wipe}
 * is offered for the host to call before a wipe-and-republish, not part of the port.
 */
declare class FsArtifactSink implements ArtifactSink {
    private readonly root;
    constructor(root: string);
    private resolve;
    write(path: string, contents: string | Uint8Array): Promise<void>;
    /** Empty the output directory before a republish. A missing directory is a no-op. */
    wipe(): Promise<void>;
}

export { FsArtifactSink, FsBlobStore };
