/[sudobot]/branches/7.x/src/decorators/Validate.ts
ViewVC logotype

Contents of /branches/7.x/src/decorators/Validate.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 577 - (show annotations)
Mon Jul 29 18:52:37 2024 UTC (8 months, 2 weeks ago) by rakinar2
File MIME type: application/typescript
File size: 2201 byte(s)
chore: add old version archive branches (2.x to 9.x-dev)
1 /*
2 * This file is part of SudoBot.
3 *
4 * Copyright (C) 2021-2023 OSN Developers.
5 *
6 * SudoBot is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * SudoBot is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 import { NextFunction, Request, Response } from "express";
21 import { ZodSchema } from "zod";
22 import ValidateMiddleware from "../api/middleware/ValidateMiddleware";
23 import type Client from "../core/Client";
24
25 export function Validate(schema: ZodSchema) {
26 return (
27 originalMethodOrTarget: any,
28 contextOrMethodName: string | ClassMethodDecoratorContext,
29 descriptor?: PropertyDescriptor
30 ) => {
31 if (typeof contextOrMethodName === "string") {
32 const metadata = Reflect.getMetadata("validation_middleware", originalMethodOrTarget) ?? {};
33 const middleware = (client: Client, req: Request, res: Response, next: NextFunction) =>
34 ValidateMiddleware(schema, req, res, next);
35
36 metadata[contextOrMethodName] ??= middleware;
37 Reflect.defineMetadata("validation_middleware", metadata, originalMethodOrTarget);
38 } else {
39 const metadata = (contextOrMethodName.metadata?.validationMiddleware ?? {}) as Record<string | symbol, Function>;
40
41 const middleware = (client: Client, req: Request, res: Response, next: NextFunction) =>
42 ValidateMiddleware(schema, req, res, next);
43
44 metadata[contextOrMethodName.name] ??= middleware;
45 (contextOrMethodName.metadata as unknown) ??= {};
46 contextOrMethodName.metadata.validationMiddleware = metadata;
47 return originalMethodOrTarget;
48 }
49 };
50 }

team@onesoftnet.eu.org
ViewVC Help
Powered by ViewVC 1.1.26