/// <reference types="node" /> import * as http from 'http'; import { Config as Args, Env } from '../config/argv'; export interface ServerHooks { onCreateWebpackChain<C>(config: C, dev: boolean, args: Args): void; onPreCreateApp<A>(app: A): void; onCreateApp<A>(app: A): void; onServerListening<S>(server: S): void; } export interface BundlerServer { start(): Promise<http.Server>; } export declare type ConfigFn<C> = (hooks: ServerHooks) => Promise<C>; export declare type BuildFn<C> = (config: C, dist: string, publicDir: string) => void; export declare type ServerFn<C> = (config: C, hooks: ServerHooks) => BundlerServer | Promise<BundlerServer>; export interface BundlerConstructor<Config> { args: Args; config: ConfigFn<Config>; server: ServerFn<Config>; build: BuildFn<Config>; } export interface ConfigObj { [key: string]: any; } export declare class Bundler<C = ConfigObj> { private readonly args; private config; private server; private builder; private hooks; constructor(params: BundlerConstructor<C>); mountConfig(env: Env): Promise<C>; createApp(config: C): Promise<BundlerServer>; build(config: C): Promise<void>; }