import { Harmony } from '@teambit/harmony';
import { Component } from '@teambit/component';
import { ComponentID } from '@teambit/component-id';
import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';
import { ExtensionsOrigin, Workspace } from './workspace';
import { MergeConflictFile } from './merge-conflict-file';
export declare class AspectsMerger {
    private workspace;
    private harmony;
    readonly mergeConflictFile: MergeConflictFile;
    private mergeConfigDepsResolverDataCache;
    constructor(workspace: Workspace, harmony: Harmony);
    getDepsDataOfMergeConfig(id: ComponentID): Record<string, any>;
    /**
     * Calculate the component config based on:
     * the config property in the .bitmap file
     * the component.json file in the component folder
     * matching pattern in the variants config
     * defaults extensions from workspace config
     * extensions from the model.
     */
    merge(componentId: ComponentID, componentFromScope?: Component, excludeOrigins?: ExtensionsOrigin[]): Promise<{
        extensions: ExtensionDataList;
        beforeMerge: Array<{
            extensions: ExtensionDataList;
            origin: ExtensionsOrigin;
            extraData: any;
        }>;
        errors?: Error[];
    }>;
    /**
     * before version 0.0.882 it was possible to save Version object with the same extension twice.
     */
    private getComponentFromScopeWithoutDuplications;
    /**
     * from the merge-config we get the dep-resolver policy as an array, because it needs to support "force" prop.
     * however, when we save the config, we want to save it as an object, so we need split the data into two:
     * 1. force: true, which gets saved into the config.
     * 2. force: false, which gets saved into the data.dependencies later on. see the workspace.getAutoDetectOverrides()
     */
    private removeAutoDepsFromConfig;
    /**
     * this is needed because if the mergeConfig has a policy, it will be used, and any other policy along the line will be ignored.
     * in case the model has some dependencies that were set explicitly they're gonna be ignored.
     * this makes sure to add them to the policy of the mergeConfig.
     * in a way, this is similar to what we do when a user is running `bit deps set` and the component had previous dependencies set,
     * we copy those dependencies along with the current one to the .bitmap file, so they won't get lost.
     */
    private addConfigDepsFromModelToConfigMerge;
    private getUnmergedData;
    private filterEnvsFromExtensionsIfNeeded;
    /**
     * This will mutate the entries with extensionId prop to have resolved legacy id
     * This should be worked on the extension data list not the new aspect list
     * @param extensionList
     */
    private resolveExtensionListIds;
}
