import { ComponentID } from '@teambit/component-id';
import { BitMap as LegacyBitMap, ComponentMap, GetBitMapComponentOptions } from '@teambit/legacy.bit-map';
import { Consumer } from '@teambit/legacy/dist/consumer';
import { LaneId } from '@teambit/lane-id';
import { PathOsBasedAbsolute } from '@teambit/toolbox.path.path';
export type MergeOptions = {
    mergeStrategy?: 'theirs' | 'ours' | 'manual';
};
/**
 * consider extracting to a new component.
 * (pro: making Workspace aspect smaller. con: it's an implementation details of the workspace)
 */
export declare class BitMap {
    private legacyBitMap;
    private consumer;
    constructor(legacyBitMap: LegacyBitMap, consumer: Consumer);
    mergeBitmaps(bitmapContent: string, otherBitmapContent: string, opts?: MergeOptions): string;
    getPath(): PathOsBasedAbsolute;
    getAllRootDirs(): string[];
    /**
     * adds component config to the .bitmap file.
     * later, upon `bit tag`, the data is saved in the scope.
     * returns a boolean indicating whether a change has been made.
     */
    addComponentConfig(id: ComponentID, aspectId: string, config?: Record<string, any>, shouldMergeConfig?: boolean): boolean;
    updateDefaultScope(oldScope: string, newScope: string): ComponentID[];
    markAsChanged(): void;
    removeComponentConfig(id: ComponentID, aspectId: string, markWithMinusIfNotExist: boolean): boolean;
    removeEntireConfig(id: ComponentID): boolean;
    setEntireConfig(id: ComponentID, config: Record<string, any>): void;
    removeDefaultScope(id: ComponentID): void;
    setDefaultScope(id: ComponentID, defaultScope: string): void;
    setLocalOnly(ids: ComponentID[]): void;
    unsetLocalOnly(ids: ComponentID[]): ComponentID[];
    listLocalOnly(): ComponentID[];
    /**
     * write .bitmap object to the filesystem
     * optionally pass a reason for the change to be saved in the local scope `bitmap-history-metadata.txt` file.
     */
    write(reasonForChange?: string): Promise<void>;
    /**
     * get the data saved in the .bitmap file for this component-id.
     * throws if not found
     * @see this.getBitmapEntryIfExist
     */
    getBitmapEntry(id: ComponentID, { ignoreVersion }?: GetBitMapComponentOptions): ComponentMap;
    getBitmapEntryIfExist(id: ComponentID, { ignoreVersion }?: GetBitMapComponentOptions): ComponentMap | undefined;
    getAspectIdFromConfig(componentId: ComponentID, aspectId: ComponentID, ignoreAspectVersion?: boolean): string | undefined;
    /**
     * components that were not tagged yet are safe to rename them from the .bitmap file.
     */
    renameNewComponent(sourceId: ComponentID, targetId: ComponentID): void;
    /**
     * helpful when reaming an aspect and this aspect is used in the config of other components.
     */
    renameAspectInConfig(sourceId: ComponentID, targetId: ComponentID): void;
    removeComponent(id: ComponentID): void;
    /**
     * this is the lane-id of the recently exported lane. in case of a new lane, which was not exported yet, this will be
     * empty.
     */
    getExportedLaneId(): LaneId | undefined;
    makeComponentsAvailableOnMain(ids: ComponentID[]): void;
    /**
     * whether .bitmap file has changed in-memory
     */
    hasChanged(): boolean;
    takeSnapshot(): ComponentMap[];
    restoreFromSnapshot(componentMaps: ComponentMap[]): void;
    /**
     * .bitmap file could be changed by other sources (e.g. manually or by "git pull") not only by bit.
     * this method returns the timestamp when the .bitmap has changed through bit. (e.g. as part of snap/tag/export/merge
     * process)
     */
    getLastModifiedBitmapThroughBit(): Promise<number | undefined>;
}
