| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 'use strict';var util = require('./_util');module.exports = function defFunc(ajv) {  defFunc.definition = {    type: 'object',    macro: function (schema) {      var schemas = [];      for (var pointer in schema)        schemas.push(getSchema(pointer, schema[pointer]));      return {'allOf': schemas};    },    metaSchema: {      type: 'object',      propertyNames: {        type: 'string',        format: 'json-pointer'      },      additionalProperties: util.metaSchemaRef(ajv)    }  };  ajv.addKeyword('deepProperties', defFunc.definition);  return ajv;};function getSchema(jsonPointer, schema) {  var segments = jsonPointer.split('/');  var rootSchema = {};  var pointerSchema = rootSchema;  for (var i=1; i<segments.length; i++) {    var segment = segments[i];    var isLast = i == segments.length - 1;    segment = unescapeJsonPointer(segment);    var properties = pointerSchema.properties = {};    var items = undefined;    if (/[0-9]+/.test(segment)) {      var count = +segment;      items = pointerSchema.items = [];      while (count--) items.push({});    }    pointerSchema = isLast ? schema : {};    properties[segment] = pointerSchema;    if (items) items.push(pointerSchema);  }  return rootSchema;}function unescapeJsonPointer(str) {  return str.replace(/~1/g, '/').replace(/~0/g, '~');}
 |