egg-typebox-validate
Advanced tools
Comparing version 2.1.0 to 2.2.0
import { Context } from 'egg'; | ||
import { TSchema } from "@sinclair/typebox"; | ||
export declare type ValidateRule = [TSchema, (ctx: Context, args: unknown[]) => unknown]; | ||
import { ErrorObject } from 'ajv/dist/2019'; | ||
declare type CustomErrorMessage = (ctx: Context, errors: ErrorObject[]) => string; | ||
declare type GetData = (ctx: Context, args: unknown[]) => unknown; | ||
export declare type ValidateRule = [TSchema, GetData, CustomErrorMessage?]; | ||
export declare function Validate(rules: ValidateRule[]): MethodDecorator; |
@@ -8,6 +8,16 @@ "use strict"; | ||
descriptor.value = async function (...args) { | ||
const { ctx } = this; | ||
const { ctx, app } = this; | ||
for (const rule of rules) { | ||
const getData = rule[1]; | ||
ctx.tValidate(rule[0], getData(ctx, args)); | ||
const [schema, getData, customError] = rule; | ||
const data = getData(ctx, args); | ||
const valid = ctx.tValidateWithoutThrow(schema, data); | ||
if (!valid) { | ||
const message = customError ? customError(ctx, app.ajv.errors) : 'Validation Failed'; | ||
ctx.throw(422, message, { | ||
code: 'invalid_param', | ||
errorData: data, | ||
currentSchema: JSON.stringify(schema), | ||
errors: app.ajv.errors, | ||
}); | ||
} | ||
} | ||
@@ -20,2 +30,2 @@ return await fn.apply(this, args); | ||
exports.Validate = Validate; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLFNBQWdCLFFBQVEsQ0FBQyxLQUFxQjtJQUM1QyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUE4QixFQUFzQixFQUFFO1FBQ2pGLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDNUIsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLFdBQVUsR0FBRyxJQUFJO1lBQ3ZDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFiRCw0QkFhQyJ9 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLFNBQWdCLFFBQVEsQ0FBQyxLQUFxQjtJQUM1QyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUE4QixFQUFzQixFQUFFO1FBQ2pGLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDNUIsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLFdBQVUsR0FBRyxJQUFJO1lBQ3ZDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUN4QixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO29CQUNyRixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7d0JBQ3RCLElBQUksRUFBRSxlQUFlO3dCQUNyQixTQUFTLEVBQUUsSUFBSTt3QkFDZixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7d0JBQ3JDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU07cUJBQ3ZCLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUF2QkQsNEJBdUJDIn0= |
{ | ||
"name": "egg-typebox-validate", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"description": "another validate for typescript egg projects", | ||
@@ -5,0 +5,0 @@ "eggPlugin": { |
@@ -324,3 +324,3 @@ # egg-typebox-validate | ||
+ [paramsSchema, ctx => ctx.params], | ||
+ [bodySchema, ctx => ctx.request.body], | ||
+ [bodySchema, ctx => ctx.request.body, (ctx, errors) => 'MyErrorPrefix: ' + errors.map(e => e.message).join(', ')], | ||
+ ]) | ||
@@ -327,0 +327,0 @@ async index() { |
23410
114