/** * @draft-07 */ import { JsonSchema, JsonValidator } from "../types"; import { Draft } from "../draft"; /** * returns if-then-else as a json schema. does not merge with input * json schema. you probably will need to do so to correctly resolve * references. * * @returns json schema defined by if-then-else or undefined */ export function resolveIfSchema( draft: Draft, schema: JsonSchema, data: unknown ): JsonSchema | undefined { if (schema.if == null) { return undefined; } if (schema.if === false) { return schema.else; } if (schema.if && (schema.then || schema.else)) { const ifErrors = draft.validate(data, draft.resolveRef(schema.if)); if (ifErrors.length === 0 && schema.then) { return draft.resolveRef(schema.then); } if (ifErrors.length !== 0 && schema.else) { return draft.resolveRef(schema.else); } } } /** * @returns validation result of it-then-else schema */ const validateIf: JsonValidator = (draft, schema, value, pointer) => { const resolvedSchema = resolveIfSchema(draft, schema, value); if (resolvedSchema) { return draft.validate(value, resolvedSchema, pointer); } }; export { validateIf };