UNPKG

thinkjs

Version:

ThinkJS - Use full ES6+ features to develop web applications

507 lines (447 loc) 10.1 kB
import * as Koa from 'koa'; import * as Helper from 'think-helper'; import * as ThinkCluster from 'think-cluster'; import { Think } from 'thinkjs'; declare module 'thinkjs' { export interface Application extends Koa { think: Think; request: Request; response: Response; } export interface Request extends Koa.Request { } export interface Response extends Koa.Response { } interface ThinkCookie { /** * get cookie */ cookie(name: string): string; /** * set cookie */ cookie(name: string, value: string, options?: object): void; /** * * delete cookie */ cookie(name: string, value: null, options?: object): void; } interface ThinkConfig { /** * get config */ config(name: string): any; /** * set config */ config(name: string, value: string): any; /** * get or set config */ config(name: string, value?: string, module?: string): any; /** * set config for all modules */ config(name: string, value: string, module: true): any; } export interface Context extends Koa.Context, ThinkCookie, ThinkConfig { request: Request; response: Response; readonly module: string; readonly controller: string; readonly action: string; /** * get userAgent header * @memberOf Context */ readonly userAgent: string; /** * is get request * @memberOf Context */ readonly isGet: boolean; /** * is post request * @memberOf Context */ readonly isPost: boolean; /** * is command line invoke * @memberOf Context */ readonly isCli: boolean; /** * get referer header * @memberOf Context */ referer(onlyHost: boolean): string; /** * get referer header * @memberOf Context */ referrer(onlyHost: boolean): string; /** * @memberOf Context */ isMethod(method: string): boolean; /** * is ajax request * @memberOf Context */ isAjax(method?: string): boolean; /** * is jsonp request * callbackField default to this.config('jsonpCallbackField') * * @memberOf Context */ isJsonp(callbackField?: string): boolean; /** * send jsonp data, callbackField default to this.config('jsonpCallbackField') * * @memberOf Context */ jsonp(data: any, callbackField?: string): any; /** * send json data * @memberOf Context */ json(data: any): any; /** * send success data * @memberOf Context */ success(data?: object | string, message?: string): any; /** * send fail data * @memberOf Context */ fail(errno: any, errmsg?: object | string, data?: any): any; /** * set expires header * @memberOf Context */ expires(time: any): any /** * get param * * @memberOf Context */ param(): object; /** * get param * name can be slit by comma 'field1,field2' or 'field' * * @memberOf Context */ param(name: string): object; /** * * set param * * @memberOf Context */ param(value: object): this /** * get query data * `query` or `get` is already used in koa * @memberOf Context */ param(name: string, value: any): this /** * get post data * @memberOf Context */ post(): object; /** * set post data * @memberOf Context */ post(value: object): this; /** * get post data, name can be split by comma 'field1,field2' or 'field' * @memberOf Context */ post(name: string): any; /** * * set post value * @memberOf Context */ post(name: string, value: any): this; /** * get file data * * @memberOf Context */ file(): object; /** * set file data * * @memberOf Context */ file(data: object): this; /** * get file data by name * @memberOf Context */ file(name: string): any; /** * get file data * * @memberOf Context */ file(name: string, value: any): this; /** * get service * * @memberOf Context */ service(name: string, module?: string, ...args: any[]): any; /** * download * @memberOf Context */ download(filepath: string, filename?: string): void; } export interface Controller extends ThinkCookie, ThinkConfig { ctx: Context; body: any; readonly ip: string; readonly ips: string[]; status: number | string; type: string; /** * get userAgent header * @memberOf Controller */ readonly userAgent: string; readonly method: string; /** * is get request * @memberOf Controller */ readonly isGet: boolean; /** * is post request * @memberOf Controller */ readonly isPost: boolean; /** * is command line invoke * @memberOf Controller */ readonly isCli: boolean; /** * @memberOf Controller */ isMethod(method: string): boolean; /** * is ajax request * @memberOf Controller */ isAjax(method: string): boolean; /** * is jsonp request * callbackField default to this.config('jsonpCallbackField') * * @memberOf Controller */ isJsonp(callbackField?: string): boolean; /** * send jsonp data, callbackField default to this.config('jsonpCallbackField') * * @memberOf Controller */ jsonp(data: any, callbackField?: string): any; /** * send json data * @memberOf Controller */ json(data: any): any; /** * send success data * @memberOf Controller */ success(data?: object | string, message?: string): any; /** * send fail data * @memberOf Controller */ fail(errno: any, errmsg?: string, data?: any): any; /** * set expires header * @memberOf Controller */ expires(time: any): any /** * get or set param * * @memberOf Controller */ get(name?: string, value?: any): any; /** * get or set param * * @memberOf Controller */ query(name?: string, value?: any): any; /** * get post data * @memberOf Controller */ post(): object; /** * set post data * @memberOf Controller */ post(value: object): this; /** * get post data, name can be split by comma 'field1,field2' or 'field' * @memberOf Controller */ post(name: string): any; /** * * set post value * @memberOf Controller */ post(name: string, value: any): this; /** * get or set file data * * @memberOf Controller */ file(name?: string, value?: any): any; /** * get this.ctx.header[name] * @memberOf Controller */ header(name: string): Promise<string>; /** * get or set headere * @memberOf Controller */ header(name?: string, value?: any): any; /** * this.ctx.set * * @memberOf Controller */ header(keyValues: object): any; /** * get referer header * @memberOf Controller */ referer(onlyHost: boolean): string; /** * get referer header * @memberOf Controller */ referrer(onlyHost: boolean): string; /** * Perform a 302 redirect to `url`. * * The string "back" is special-cased * to provide Referrer support, when Referrer * is not present `alt` or "/" is used. * * Examples: * * this.redirect('back'); * this.redirect('back', '/index.html'); * this.redirect('/login'); * this.redirect('http://google.com'); */ redirect(url: string, alt?: string): void; /** * get controller instance * @memberOf Controller */ controller(name: string, module?: string): this; /** * * set param * * @memberOf Controller */ param(value: object): this /** * get query data * `query` or `get` is already used in koa * @memberOf Controller */ param(name: string, value: any): this /** * get service * * @memberOf Controller */ service(name: string, module?: string, ...args: any[]): any; /** * execute action * * @memberOf Controller */ action(controller: this, actionsName: string, module?: string): Promise<any>; /** * * execute action * * @memberOf Controller */ action(controllerName: string, actionsName: string, module?: string): Promise<any>; /** * download * @memberOf Controller */ download(filepath: string, filename?: string): void; } export interface TController extends Controller { new(ctx: Context): Controller; } export interface Service { new(): Service; } export interface Logger { debug(msg: string): void; info(msg: string): void; warn(msg: string): void; error(msg: string): void; } export interface Logic extends Controller { validate(rules: Object, msgs?: Object): Object; validateErrors?: Object; allowMethods: string; rules: Object; } export interface TLogic extends Logic { new(ctx: Context): Logic; } export interface Think extends Helper.Think, ThinkConfig { app: Application; isCli: boolean; /** * Get thisnk.app.env. */ env: string; version: string; messenger: ThinkCluster.Messenger; ROOT_PATH: string; APP_PATH: string; RUNTIME_PATH: string; logger: Logger; Controller: TController; Logic: TLogic; Service: Service; service(name: string): any; service(name: string, ...args: any[]): any; service(name: string, m: any, ...args: any[]): any; beforeStartServer(fn: Function): Promise<any>; } export var think : Think; } declare global { var think: Think }