///
import Cors from "@koa/cors";
import { ActionResult, Application, BodyParserOption, Class, Configuration, Facility, Invocation, KoaMiddleware, Middleware, PlumierApplication, PlumierConfiguration, RouteInfo } from "@plumjs/core";
import Koa, { Context } from "koa";
import { FileActionResult, ServeStaticOptions } from "./serve-static";
export interface RouteContext extends Koa.Context {
route: Readonly;
parameters: any[];
}
export declare class RedirectActionResult extends ActionResult {
path: string;
constructor(path: string);
execute(ctx: Context): Promise;
}
export declare namespace response {
function json(body: any): ActionResult;
function file(path: string, opt?: ServeStaticOptions): FileActionResult;
function redirect(path: string): RedirectActionResult;
}
export declare function extractDecorators(route: RouteInfo): Middleware[];
export declare class MiddlewareInvocation implements Invocation {
private middleware;
context: Context;
private next;
constructor(middleware: Middleware, context: Context, next: Invocation);
proceed(): Promise;
}
export declare class ActionInvocation implements Invocation {
context: RouteContext;
constructor(context: RouteContext);
proceed(): Promise;
}
export declare function pipe(middleware: Middleware[], context: Context, invocation: Invocation): Invocation;
/**
* Preset configuration for building web api. This facility contains:
*
* body parser: koa-bodyparser
*
* cors: @koa/cors
*/
export declare class WebApiFacility implements Facility {
private opt?;
constructor(opt?: {
controller?: string | Class | Class[] | undefined;
bodyParser?: BodyParserOption | undefined;
cors?: Cors.Options | undefined;
} | undefined);
setup(app: Readonly): Promise;
}
/**
* Preset configuration for building restful style api. This facility contains:
*
* body parser: koa-bodyparser
*
* cors: @koa/cors
*
* default response status: { get: 200, post: 201, put: 204, delete: 204 }
*/
export declare class RestfulApiFacility extends WebApiFacility {
setup(app: Readonly): Promise;
}
export declare class Plumier implements PlumierApplication {
readonly config: Readonly;
readonly koa: Koa;
private globalMiddleware;
constructor();
use(option: KoaMiddleware): Application;
use(option: Middleware): Application;
set(facility: Facility): Application;
set(config: Partial): Application;
private createRoutes;
initialize(): Promise;
}