import type { SigDbPkgMeta } from './schema';
/** a byte range `[startByte, bytes]` in the plain `.ndjson` */
export type ByteRange = [startByte: number, bytes: number];
/**
 * Everything a reader needs to seek into a plain `.ndjson`: the dictionary's byte range, each package
 * blob's byte range, the package to blob-index map, and per-package metadata. (Line numbers and section
 * bookkeeping the writer used are intentionally not kept -- they bloat the index and are never read.)
 */
export interface SigDbIndex {
    /** total byte size of the plain `.ndjson` */
    byteCount: number;
    /** byte range of the string dictionary section */
    dict: ByteRange;
    /** per package-blob byte range (indexed by blob index) */
    blobs: ByteRange[];
    /** package name to blob index */
    pkgs: Record<string, number>;
    /** package name to metadata */
    meta: Record<string, SigDbPkgMeta>;
}
/** the on-disk (compact) form of a {@link SigDbIndex}: short keys, `meta` optional (hoisted into a manifest) */
export interface SigDbIndexWire {
    n: number;
    d: ByteRange;
    b: ByteRange[];
    p: Record<string, number>;
    m?: Record<string, SigDbPkgMeta>;
}
/** the on-disk (compact) index of a blob-only shard (no dictionary of its own; it shares a dictionary file) */
export interface SigShardIndexWire {
    n: number;
    b: ByteRange[];
    p: Record<string, number>;
}
/** encode an index to its compact on-disk form; omit `meta` when it is hoisted elsewhere (a manifest) */
export declare function encodeIndex(i: SigDbIndex, withMeta?: boolean): SigDbIndexWire;
/** decode a compact index; `meta` falls back to a hoisted map, and `dict` to empty (a blob-only shard) */
export declare function decodeIndex(w: SigDbIndexWire | SigShardIndexWire, meta?: Record<string, SigDbPkgMeta>): SigDbIndex;
/** read a plain bundle's sidecar `.idx` file and decode it */
export declare function readSigDbIndex(plainFile: string): SigDbIndex;
