3 var util = require('./_util');
5 module.exports = function defFunc(ajv) {
8 macro: function (schema) {
10 for (var pointer in schema)
11 schemas.push(getSchema(pointer, schema[pointer]));
12 return {'allOf': schemas};
18 format: 'json-pointer'
20 additionalProperties: util.metaSchemaRef(ajv)
24 ajv.addKeyword('deepProperties', defFunc.definition);
29 function getSchema(jsonPointer, schema) {
30 var segments = jsonPointer.split('/');
32 var pointerSchema = rootSchema;
33 for (var i=1; i<segments.length; i++) {
34 var segment = segments[i];
35 var isLast = i == segments.length - 1;
36 segment = unescapeJsonPointer(segment);
37 var properties = pointerSchema.properties = {};
38 var items = undefined;
39 if (/[0-9]+/.test(segment)) {
41 items = pointerSchema.items = [];
42 while (count--) items.push({});
44 pointerSchema = isLast ? schema : {};
45 properties[segment] = pointerSchema;
46 if (items) items.push(pointerSchema);
52 function unescapeJsonPointer(str) {
53 return str.replace(/~1/g, '/').replace(/~0/g, '~');