You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							2.0 KiB
						
					
					
				'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); | 
						|
  } | 
						|
};
 | 
						|
 |