Files
overleaf-cep/libraries/validation-tools/parseReq.js
Eric Mc Sween 98def949ec Merge pull request #33040 from overleaf/em-parse-req-errors
Replace isZodErrorLike with custom error types in request validation

GitOrigin-RevId: 9cb453a2cde595a00f5049e4829ea9e3dbe17b28
2026-05-06 08:06:37 +00:00

35 lines
924 B
JavaScript

// @ts-check
const { InvalidRequestError, InvalidParamsError } = require('./Errors')
/**
* @typedef {import('zod').ZodType} ZodType
* @typedef {import('express').Request} Request
*/
/**
* @template T
* @typedef {import('zod').output<T>} output<T>
*/
/**
* Parse and validate a request against a Zod schema
*
* @template {ZodType} T
* @param {Request} req - The Express request object
* @param {T} schema - The Zod schema to validate against
* @returns {output<T>} The validated request object
*/
function parseReq(req, schema) {
const parsed = schema.safeParse(req)
if (parsed.success) {
return parsed.data
} else if (parsed.error.issues.some(issue => issue.path[0] === 'params')) {
// Parts of the URL path failed to validate; throw a specific error
throw new InvalidParamsError(parsed.error)
} else {
throw new InvalidRequestError(parsed.error)
}
}
module.exports = { parseReq }