| 'use strict'; | 
|   | 
| module.exports = function defFunc(ajv) { | 
|   defFunc.definition = { | 
|     type: 'object', | 
|     inline: function (it, keyword, schema) { | 
|       var expr = ''; | 
|       for (var i=0; i<schema.length; i++) { | 
|         if (i) expr += ' && '; | 
|         expr += '(' + getData(schema[i], it.dataLevel) + ' !== undefined)'; | 
|       } | 
|       return expr; | 
|     }, | 
|     metaSchema: { | 
|       type: 'array', | 
|       items: { | 
|         type: 'string', | 
|         format: 'json-pointer' | 
|       } | 
|     } | 
|   }; | 
|   | 
|   ajv.addKeyword('deepRequired', defFunc.definition); | 
|   return ajv; | 
| }; | 
|   | 
|   | 
| function getData(jsonPointer, lvl) { | 
|   var data = 'data' + (lvl || ''); | 
|   if (!jsonPointer) return data; | 
|   | 
|   var expr = data; | 
|   var segments = jsonPointer.split('/'); | 
|   for (var i=1; i<segments.length; i++) { | 
|     var segment = segments[i]; | 
|     data += getProperty(unescapeJsonPointer(segment)); | 
|     expr += ' && ' + data; | 
|   } | 
|   return expr; | 
| } | 
|   | 
|   | 
| var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; | 
| var INTEGER = /^[0-9]+$/; | 
| var SINGLE_QUOTE = /'|\\/g; | 
| function getProperty(key) { | 
|   return INTEGER.test(key) | 
|           ? '[' + key + ']' | 
|           : IDENTIFIER.test(key) | 
|             ? '.' + key | 
|             : "['" + key.replace(SINGLE_QUOTE, '\\$&') + "']"; | 
| } | 
|   | 
|   | 
| function unescapeJsonPointer(str) { | 
|   return str.replace(/~1/g, '/').replace(/~0/g, '~'); | 
| } |