UNPKG

runtypes

Version:

Runtime validation for static types

57 lines (56 loc) 1.54 kB
import ValidationError from "../result/ValidationError.js"; import FAILURE from "../utils-internal/FAILURE.js"; const parseReceived = (received, receives) => { if (!receives) return received; try { return receives.parse(received); } catch (error) { if (error instanceof ValidationError) { const failure = FAILURE.ARGUMENTS_INCORRECT({ expected: receives, received, detail: error.failure, }); throw new ValidationError(failure); } else throw error; } }; const parseReturned = (returned, returns) => { if (!returns) return returned; try { return returns.parse(returned); } catch (error) { if (error instanceof ValidationError) { const failure = FAILURE.RETURN_INCORRECT({ expected: returns, received: returned, detail: error.failure, }); throw new ValidationError(failure); } else throw error; } }; /** * Creates an function contract. * * Possible failures: * * - `ARGUMENTS_INCORRECT` with `detail` reporting the inner failures * - `RETURN_INCORRECT` with `detail` reporting the inner failure */ const Contract = ({ receives, returns }) => { return { receives, returns, enforce: f => (...args) => parseReturned(f(...parseReceived(args, receives)), returns), }; }; export default Contract;