import type { EnvService, ExecutionContext, EnvDefinition, Env, EnvContext, ServiceTransformationMap } from '@teambit/envs';
import type { PubsubMain } from '@teambit/pubsub';
import type { DependencyResolverMain } from '@teambit/dependency-resolver';
import type { BrowserRuntimeSlot, DevServerTransformerSlot } from './bundler.main.runtime';
import { ComponentServer } from './component-server';
import type { DevServer } from './dev-server';
import type { DevServerContext } from './dev-server-context';
export type DevServerServiceOptions = {
    dedicatedEnvDevServers?: string[];
};
type DevServiceTransformationMap = ServiceTransformationMap & {
    /**
     * Required for `bit start`
     */
    getDevEnvId?: (context?: any) => string;
    /**
     * Returns and configures the dev server
     * Required for `bit start`
     */
    getDevServer?: (context: DevServerContext) => DevServer | Promise<DevServer>;
};
export type DevServerDescriptor = {
    /**
     * id of the dev server (e.g. webpack)
     */
    id: string;
    /**
     * display name of the dev server (e.g. Webpack dev server)
     */
    displayName: string;
    /**
     * icon of the configured dev server.
     */
    icon: string;
    /**
     * string containing the config for display.
     */
    config: string;
    version?: string;
};
export declare class DevServerService implements EnvService<ComponentServer, DevServerDescriptor> {
    private pubsub;
    private dependencyResolver;
    /**
     * browser runtime slot
     */
    private runtimeSlot;
    private devServerTransformerSlot;
    name: string;
    constructor(pubsub: PubsubMain, dependencyResolver: DependencyResolverMain, 
    /**
     * browser runtime slot
     */
    runtimeSlot: BrowserRuntimeSlot, devServerTransformerSlot: DevServerTransformerSlot);
    render(env: EnvDefinition, context: ExecutionContext[]): Promise<string>;
    getDescriptor(environment: EnvDefinition, context?: ExecutionContext[]): Promise<DevServerDescriptor | undefined>;
    transform(env: Env, envContext: EnvContext): DevServiceTransformationMap | undefined;
    runOnce(contexts: ExecutionContext[], { dedicatedEnvDevServers }: DevServerServiceOptions): Promise<ComponentServer[]>;
    mergeContext(): void;
    private getComponentsFromContexts;
    /**
     * builds the execution context for the dev server.
     */
    private buildContext;
    private transformDevServer;
}
export {};
