/// <reference types="node" />
import { IOManager } from './iomanager.js';
import { Readable, Writable } from 'node:stream';
/**
 * A single database item.
 */
export declare class Item {
    readonly id: string;
    metadata: object;
    private readonly _ioManager;
    /**
     * Construct a new Item.
     *
     * @param id The item id.
     * @param ioManager The IO manager.
     * @param metadata An object containing item metadata.
     */
    constructor(id: string, ioManager: IOManager, metadata: object);
    private _processStreamResult;
    /**
     * Obtain a read stream for this item.
     *
     * @param options Middleware options.
     * @returns A Promise that resolves to a Readable Stream.
     */
    getReadable(options?: object): Promise<Readable>;
    /**
     * Obtain a write stream for this item.
     *
     * @param options Middleware options.
     * @returns A Promise that resolves to a Writable Stream.
     */
    getWritable(options?: object): Promise<Writable>;
    /**
     * Save this item's current metadata.
     *
     * This must be called for the metadata to persist after modifications have been
     * made. Note that the metadata may also be saved on other occurrences (e.g.
     * when modified by middleware), but that is not guaranteed.
     *
     * @returns A Promise that resolves when done.
     */
    saveMetadata(): Promise<void>;
}
