exstack
Version:
A utility library designed to simplify and enhance express.js applications.
47 lines (46 loc) • 1.47 kB
JavaScript
import { a as HttpError } from "./errors-CuuCGJ3N.mjs";
import { flattenError, prettifyError } from "zod";
//#region src/zod.ts
var Validator = class {
#middleware = (target, schema) => (req, _, next) => {
try {
if (target === "all") {
const schemas = schema;
for (const key of Object.keys(schemas)) {
const zodSchema = schemas[key];
if (!zodSchema) continue;
const result = zodSchema.safeParse(req[key] || {});
if (!result.success) throw new HttpError(400, {
code: "VALIDATION_ERROR",
meta: flattenError(result.error),
cause: prettifyError(result.error),
message: `Invalid data in req.${key}`
});
req._valid ??= {};
req._valid[key] = result.data;
}
} else {
const result = schema.safeParse(req[target] || {});
if (!result.success) throw new HttpError(400, {
code: "VALIDATION_ERROR",
meta: flattenError(result.error),
cause: prettifyError(result.error),
message: `Invalid data in req.${target}`
});
req._valid ??= {};
req._valid[target] = result.data;
}
req.valid = (t) => req._valid?.[t];
next();
} catch (error) {
next(error);
}
};
all = (schema) => this.#middleware("all", schema);
body = (schema) => this.#middleware("body", schema);
query = (schema) => this.#middleware("query", schema);
params = (schema) => this.#middleware("params", schema);
};
const validator = new Validator();
//#endregion
export { validator };