UNPKG

ajv-merge-patch

Version:

$merge and $patch keywords for Ajv JSON-Schema validator to extend schemas

51 lines (47 loc) 1.42 kB
'use strict'; var url = require('url'); module.exports = function (ajv, keyword, jsonPatch, patchSchema) { ajv.addKeyword({ keyword: keyword, macro: function (schema, parentSchema, it) { var source = schema.source; var patch = schema.with; if (source.$ref) source = JSON.parse(JSON.stringify(getSchema(source.$ref))); if (patch.$ref) patch = getSchema(patch.$ref); jsonPatch.call(null, source, patch, true); return source; function getSchema($ref) { var id = it.baseId && it.baseId != '#' ? url.resolve(it.baseId, $ref) : $ref; var validate = ajv.getSchema(id); if (validate) return validate.schema; throw new ajv.constructor.MissingRefError(it.baseId, $ref); } }, metaSchema: { "type": "object", "required": [ "source", "with" ], "additionalProperties": false, "properties": { "source": { "anyOf": [ { "type": "object", "required": [ "$ref" ], "additionalProperties": false, "properties": { "$ref": { "type": "string", "format": "uri" } } }, { "$ref": "http://json-schema.org/draft-07/schema#" } ] }, "with": patchSchema } } }); };