split Spec into Config & Spec (#34922)

This commit is contained in:
Valerio Coltrè
2019-04-23 13:58:51 -05:00
committed by Pranav Senthilnathan
parent 17d81d04a9
commit f1871a347c
2 changed files with 49 additions and 18 deletions
+21 -18
View File
@@ -29,30 +29,33 @@ declare namespace createRouter {
interface NestedHandler extends ReadonlyArray<Handler> {}
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 {
@@ -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<any>) => {
console.log('middleware1');
await next();