UNPKG

@furystack/rest-service

Version:

Repository implementation for FuryStack

47 lines 1.76 kB
import { SchemaValidator } from './schema-validator/schema-validator.js'; export const Validate = (validationOptions) => (action) => { const schema = { ...validationOptions.schema }; Object.values(schema.definitions).forEach((definition) => { if (definition.required && definition.required.includes('result')) { definition.required = definition.required.filter((value) => value !== 'result'); } definition.additionalProperties = true; if (definition.properties?.headers) { definition.properties.headers.additionalProperties = true; } }); const validator = new SchemaValidator(schema, { coerceTypes: true, strict: false }); const wrapped = async (args) => { const anyArgs = args; let body; const { headers } = anyArgs; const query = anyArgs.getQuery?.(); const url = anyArgs.getUrlParams?.(); try { body = await anyArgs.getBody?.(); } catch (error) { // ignore } validator.isValid({ ...(query ? { query } : {}), ...(body ? { body } : {}), ...(url ? { url } : {}), ...(headers ? { headers } : {}), }, { schemaName: validationOptions.schemaName }); // @ts-expect-error return await action({ request: args.request, response: args.response, injector: args.injector, headers, getQuery: () => query, getUrlParams: () => url, getBody: () => Promise.resolve(body), }); }; wrapped.schema = schema; wrapped.schemaName = validationOptions.schemaName; return wrapped; }; //# sourceMappingURL=validate.js.map