| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- 'use strict';
 
- var sequences = {};
 
- var DEFAULTS = {
 
-   timestamp: function() { return Date.now(); },
 
-   datetime: function() { return (new Date).toISOString(); },
 
-   date: function() { return (new Date).toISOString().slice(0, 10); },
 
-   time: function() { return (new Date).toISOString().slice(11); },
 
-   random: function() { return Math.random(); },
 
-   randomint: function (args) {
 
-     var limit = args && args.max || 2;
 
-     return function() { return Math.floor(Math.random() * limit); };
 
-   },
 
-   seq: function (args) {
 
-     var name = args && args.name || '';
 
-     sequences[name] = sequences[name] || 0;
 
-     return function() { return sequences[name]++; };
 
-   }
 
- };
 
- module.exports = function defFunc(ajv) {
 
-   defFunc.definition = {
 
-     compile: function (schema, parentSchema, it) {
 
-       var funcs = {};
 
-       for (var key in schema) {
 
-         var d = schema[key];
 
-         var func = getDefault(typeof d == 'string' ? d : d.func);
 
-         funcs[key] = func.length ? func(d.args) : func;
 
-       }
 
-       return it.opts.useDefaults && !it.compositeRule
 
-               ? assignDefaults
 
-               : noop;
 
-       function assignDefaults(data) {
 
-         for (var prop in schema){
 
-           if (data[prop] === undefined
 
-             || (it.opts.useDefaults == 'empty'
 
-             && (data[prop] === null || data[prop] === '')))
 
-             data[prop] = funcs[prop]();
 
-         }
 
-         return true;
 
-       }
 
-       function noop() { return true; }
 
-     },
 
-     DEFAULTS: DEFAULTS,
 
-     metaSchema: {
 
-       type: 'object',
 
-       additionalProperties: {
 
-         type: ['string', 'object'],
 
-         additionalProperties: false,
 
-         required: ['func', 'args'],
 
-         properties: {
 
-           func: { type: 'string' },
 
-           args: { type: 'object' }
 
-         }
 
-       }
 
-     }
 
-   };
 
-   ajv.addKeyword('dynamicDefaults', defFunc.definition);
 
-   return ajv;
 
-   function getDefault(d) {
 
-     var def = DEFAULTS[d];
 
-     if (def) return def;
 
-     throw new Error('invalid "dynamicDefaults" keyword property value: ' + d);
 
-   }
 
- };
 
 
  |