export declare type WithWildcards<T> = T & {
    [key: string]: unknown;
};
export declare type BlockMeta = WithWildcards<{
    previous?: Block;
}>;
export declare type BlockData = WithWildcards<{}>;
export declare type History = Block[];
export interface Block {
    key: number;
    type: string;
    meta: BlockMeta;
    data: BlockData;
}
export interface BlockManager {
    add(data: BlockData, meta?: BlockMeta): Promise<number>;
    setAll(blocks: Block[]): Promise<Block[]>;
    getAll(): Promise<Block[]>;
    get(key: number): Promise<Block>;
    remove(key: number): Promise<void>;
    update(key: number, data: BlockData, meta?: BlockMeta): Promise<void>;
    removeAll(): Promise<void>;
}
export declare function createBlock(type: string, meta: BlockMeta, data: BlockData, key?: number): Block;
export declare function blockManager(callback?: (history?: History) => void): {
    getAll: () => History;
    setAll: (blocks: Block[]) => void;
    get: (key: number) => Block;
    add: (block: Block) => number;
    update: (key: number, block: Block) => void;
    remove: (key: number) => void;
    clear: () => void;
};
