diff --git a/types/koa-joi-router/index.d.ts b/types/koa-joi-router/index.d.ts index 8ee1563370..c610f0ad11 100644 --- a/types/koa-joi-router/index.d.ts +++ b/types/koa-joi-router/index.d.ts @@ -29,30 +29,33 @@ declare namespace createRouter { interface NestedHandler extends ReadonlyArray {} type Handler = FullHandler | NestedHandler; - type Method = (path: string|RegExp, handlerOrConfig: Handler | object, ...handlers: Handler[]) => Router; + type Method = (path: string|RegExp, handlerOrConfig: Handler | Config, ...handlers: Handler[]) => Router; type OutputValidation = { body: Joi.SchemaLike } | { headers: Joi.SchemaLike }; - interface Spec { + interface Config { + pre?: Handler; + validate?: { + header?: Joi.SchemaLike; + query?: Joi.SchemaLike; + params?: Joi.SchemaLike; + body?: Joi.SchemaLike; + maxBody?: number; + failure?: number; + type?: 'form'|'json'|'multipart'; + formOptions?: CoBody.Options; + jsonOptions?: CoBody.Options; + multipartOptions?: CoBody.Options; + output?: {[status: string]: OutputValidation}; + continueOnError?: boolean; + }; + meta?: any; + } + + interface Spec extends Config { method: string|string[]; path: string|RegExp; handler: Handler; - pre?: Handler; - validate?: { - header?: Joi.SchemaLike; - query?: Joi.SchemaLike; - params?: Joi.SchemaLike; - body?: Joi.SchemaLike; - maxBody?: number; - failure?: number; - type?: 'form'|'json'|'multipart'; - formOptions?: CoBody.Options; - jsonOptions?: CoBody.Options; - multipartOptions?: CoBody.Options; - output?: {[status: string]: OutputValidation}; - continueOnError?: boolean; - }; - meta?: any; } interface Router { diff --git a/types/koa-joi-router/koa-joi-router-tests.ts b/types/koa-joi-router/koa-joi-router-tests.ts index 050ad4d5a1..5f024bc4d3 100644 --- a/types/koa-joi-router/koa-joi-router-tests.ts +++ b/types/koa-joi-router/koa-joi-router-tests.ts @@ -132,6 +132,34 @@ router().get('/', handler1); router().get('/', {meta: {desc: 'desc'}}, handler1); +router().get('/user', { + validate: { + query: { + id: Joi.number(), + name: Joi.string(), + } + } +}, (ctx: koa.Context) => { + ctx.status = 201; + ctx.body = ctx.request.params; +}); + +const spec9: router.Config = { + validate: { + body: { + name: Joi.string(), + }, + type: 'json' + } +}; + +const spec9Handler = (ctx: koa.Context) => { + ctx.status = 201; + ctx.body = ctx.request.params; +}; + +router().get('/user', spec9, spec9Handler); + const middleware1 = async (ctx: koa.Context, next: () => Promise) => { console.log('middleware1'); await next();