import { LemonEngine } from '../engine/types';
import { LambdaWEBHandler } from '../cores/lambda/lambda-web-handler';
/**
 * type: `ExpressFactory`
 * - factory to create express server.
 */
export interface ExpressFactory {
    ($engine: LemonEngine, $web: LambdaWEBHandler, options?: {
        argv?: string[];
        prefix?: string;
        genRequestId?: () => string;
    }): ExpressFactoryResult;
}
/**
 * type: `ExpressFactoryResult`
 * - result of factory.
 */
export interface ExpressFactoryResult {
    /** function of `express()` from `npm/express` */
    express: () => any;
    /** instance of `express()` */
    app: any;
    /** create server listener */
    createServer: (...args: any[]) => any;
}
/**
 * type: `BuildExpressOptions`
 * - options for `buildExpress()`
 */
export interface BuildExpressOptions {
    /** run arguments */
    argv?: string[];
    /** prefix as ROUTE_PREFIX */
    prefix?: string;
    /** request-id generator */
    genRequestId?: () => string;
    /** (optional) loader of module */
    loadModule?: <T = any>(mod: string) => T;
}
/**
 * create Server Instance.
 *
 * @param $engine - LemonEngine by `buildEngine()`
 * @param $web - LambdaWEBHandler in `$cores`
 */
export declare const buildExpress: ($engine: LemonEngine, $web: LambdaWEBHandler, options?: BuildExpressOptions) => ExpressFactoryResult;
