chore: switch to zod for schema validation

This commit is contained in:
Riccardo
2023-08-30 21:18:34 +02:00
parent a36daaaec3
commit ce84aa497f
3 changed files with 26 additions and 20 deletions

View File

@@ -13,7 +13,7 @@
"lint": "eslint --ext .ts . --fix",
"typecheck": "tsc --noEmit",
"format": "prettier --config .prettierrc 'src/**/*.ts' --write",
"test": "jest --runInBand",
"test": "jest --runInBand --detectOpenHandles",
"prepare": "husky install",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate deploy",
@@ -33,10 +33,11 @@
"cors": "^2.8.5",
"express": "^4.18.2",
"helmet": "^7.0.0",
"jsonschema": "^1.4.1",
"prisma": "^5.1.1",
"winston": "^3.10.0",
"winston-daily-rotate-file": "^4.7.1"
"winston-daily-rotate-file": "^4.7.1",
"zod": "^3.22.2",
"zod-validation-error": "^1.5.0"
},
"devDependencies": {
"@commitlint/cli": "^17.6.6",

View File

@@ -2,7 +2,8 @@ import * as bodyParser from 'body-parser';
import cors from 'cors';
import express, { Request, Response } from 'express';
import helmet from 'helmet';
import { Validator } from 'jsonschema';
import { z } from 'zod';
import { fromZodError } from 'zod-validation-error';
import { addition } from '../utils/addition';
import { logger } from '../utils/logger';
@@ -12,20 +13,19 @@ server.use(express.json());
server.use(bodyParser.json());
server.use(helmet());
const validator = new Validator();
const schema = {
id: '/PostRequest',
type: 'object',
properties: {
value: { type: 'number' }
},
required: ['value']
};
const schema = z.object({
value: z.number()
});
server.post('/', async (req: Request, res: Response) => {
logger.info(`POST / with ${JSON.stringify(req.body)}`);
if (!validator.validate(req.body, schema).valid) {
return res.status(400).json({ message: 'Malformed query parameters' });
try {
schema.parse(req.body);
} catch (err) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const validationError = fromZodError(err as any);
return res.status(400).json({ message: validationError.message });
}
const { value } = req.body;

View File

@@ -3318,11 +3318,6 @@ jsonparse@^1.2.0:
resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
jsonschema@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab"
integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==
kind-of@^6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
@@ -4902,3 +4897,13 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zod-validation-error@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-1.5.0.tgz#2b355007a1c3b7fb04fa476bfad4e7b3fd5491e3"
integrity sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==
zod@^3.22.2:
version "3.22.2"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.2.tgz#3add8c682b7077c05ac6f979fea6998b573e157b"
integrity sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==