///
import type Route from './router/route.js';
import type Server from './server.js';
import type { AnyArguments, AppOptions, ClientOptions, Decoration, Hook, MojoAction, MojoContext, MojoStash, Plugin, RouteArguments, ServerRequestOptions, TestClientOptions } from './types.js';
import type { IncomingMessage, ServerResponse } from 'http';
import CLI from './cli.js';
import Client from './client.js';
import MockClient from './client/mock.js';
import TestClient from './client/test.js';
import File from './file.js';
import Hooks from './hooks.js';
import Logger from './logger.js';
import Mime from './mime.js';
import Renderer from './renderer.js';
import Router from './router.js';
import Session from './session.js';
import Static from './static.js';
import Ajv from 'ajv';
export default class App {
cli: CLI;
client: Client;
config: MojoStash;
detectImport: boolean;
exceptionFormat: string;
hooks: Hooks;
home: File;
log: Logger;
mime: Mime;
models: MojoStash;
renderer: Renderer;
router: Router;
secrets: string[];
session: Session;
static: Static;
validator: Ajv;
_contextClass: any;
_mode: string;
_server: WeakRef | null;
constructor(options?: AppOptions);
addHelper(name: string, fn: MojoAction): this;
addHook(name: string, fn: Hook): this;
any(...args: AnyArguments): Route;
decorateContext(name: string, fn: Decoration): this;
delete(...args: RouteArguments): Route;
get(...args: RouteArguments): Route;
handleRequest(ctx: MojoContext): Promise;
get mode(): string;
newContext(req: IncomingMessage, res: ServerResponse, options: ServerRequestOptions): MojoContext;
newMockClient(options?: ClientOptions): Promise;
newTestClient(options?: TestClientOptions): Promise;
options(...args: RouteArguments): Route;
patch(...args: RouteArguments): Route;
plugin(plugin: Plugin, options?: MojoStash): any;
post(...args: RouteArguments): Route;
put(...args: RouteArguments): Route;
get server(): Server | null;
set server(server: Server | null);
start(command?: string, ...args: string[]): any;
under(...args: AnyArguments): Route;
warmup(): Promise;
websocket(...args: RouteArguments): Route;
}