import type { PubsubMain } from '@teambit/pubsub';
import type { Component } from '@teambit/component';
import type { DependencyResolverMain } from '@teambit/dependency-resolver';
import type { EnvsMain } from '@teambit/envs';
import type { GraphqlMain } from '@teambit/graphql';
import type { SlotRegistry } from '@teambit/harmony';
import type { BrowserRuntime } from './browser-runtime';
import type { ComponentServer } from './component-server';
import type { BundlerContext } from './bundler-context';
import { DevServerService } from './dev-server.service';
import type { DevServer } from './dev-server';
export type DevServerTransformer = (devServer: DevServer, { envId }: {
    envId: string;
}) => DevServer;
export type OnPreDevServerCreated = (newCompsWithoutDevServer: Component[]) => Promise<void>;
export type BrowserRuntimeSlot = SlotRegistry<BrowserRuntime>;
export type DevServerTransformerSlot = SlotRegistry<DevServerTransformer>;
export type OnPreDevServerCreatedSlot = SlotRegistry<OnPreDevServerCreated>;
export type BundlerConfig = {
    dedicatedEnvDevServers: string[];
};
/**
 * bundler extension.
 */
export declare class BundlerMain {
    readonly config: BundlerConfig;
    /**
     * Pubsub extension.
     */
    private pubsub;
    /**
     * environments extension.
     */
    private envs;
    /**
     * dev server service.
     */
    private devService;
    /**
     * browser runtime slot.
     */
    private runtimeSlot;
    /**
     * dev server transformer slot.
     */
    private devServerTransformerSlot;
    /**
     * pre-dev-server operation slot.
     */
    private onPreDevServerCreatedSlot;
    private graphql;
    /**
     * component servers.
     */
    private _componentServers;
    constructor(config: BundlerConfig, 
    /**
     * Pubsub extension.
     */
    pubsub: PubsubMain, 
    /**
     * environments extension.
     */
    envs: EnvsMain, 
    /**
     * dev server service.
     */
    devService: DevServerService, 
    /**
     * browser runtime slot.
     */
    runtimeSlot: BrowserRuntimeSlot, 
    /**
     * dev server transformer slot.
     */
    devServerTransformerSlot: DevServerTransformerSlot, 
    /**
     * pre-dev-server operation slot.
     */
    onPreDevServerCreatedSlot: OnPreDevServerCreatedSlot, graphql: GraphqlMain);
    addNewDevServers(newCompsWithoutDevServers: Component[]): Promise<ComponentServer[]>;
    devServer(components: Component[], opts?: {
        configureProxy?: boolean;
    }): Promise<ComponentServer[]>;
    /**
     * get a dev server instance containing a component.
     * @param component
     */
    getComponentServer(component: Component): undefined | ComponentServer;
    /**
     * compute entry files for bundling components in a given execution context.
     */
    computeEntries(context: BundlerContext): Promise<string[]>;
    /**
     * register a new browser runtime environment.
     * @param browserRuntime
     */
    registerTarget(browserRuntime: BrowserRuntime[]): this;
    /**
     * register a new dev server transformer.
     * @param devServerTransformer
     */
    registerDevServerTransformer(devServerTransformer: DevServerTransformer): this;
    /**
     * register a new pre-dev-server compiler.
     * @param onPreDevServerCreated
     */
    registerOnPreDevServerCreated(onPreDevServerCreated: OnPreDevServerCreated): this;
    private indexByComponent;
    static slots: (((registerFn: () => string) => SlotRegistry<BrowserRuntime>) | ((registerFn: () => string) => SlotRegistry<DevServerTransformerSlot>) | ((registerFn: () => string) => SlotRegistry<OnPreDevServerCreatedSlot>))[];
    static runtime: import("@teambit/harmony").RuntimeDefinition;
    static dependencies: import("@teambit/harmony").Aspect[];
    static defaultConfig: {
        dedicatedEnvDevServers: never[];
    };
    static provider([pubsub, envs, graphql, dependencyResolver]: [PubsubMain, EnvsMain, GraphqlMain, DependencyResolverMain], config: any, [runtimeSlot, devServerTransformerSlot, onPreDevServerCreatedSlot]: [
        BrowserRuntimeSlot,
        DevServerTransformerSlot,
        OnPreDevServerCreatedSlot
    ]): Promise<BundlerMain>;
}
