59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
var CONSTRUCTORS = {
 | 
						|
  Object: Object,
 | 
						|
  Array: Array,
 | 
						|
  Function: Function,
 | 
						|
  Number: Number,
 | 
						|
  String: String,
 | 
						|
  Date: Date,
 | 
						|
  RegExp: RegExp
 | 
						|
};
 | 
						|
 | 
						|
module.exports = function defFunc(ajv) {
 | 
						|
  /* istanbul ignore else */
 | 
						|
  if (typeof Buffer != 'undefined')
 | 
						|
    CONSTRUCTORS.Buffer = Buffer;
 | 
						|
 | 
						|
  /* istanbul ignore else */
 | 
						|
  if (typeof Promise != 'undefined')
 | 
						|
    CONSTRUCTORS.Promise = Promise;
 | 
						|
 | 
						|
  defFunc.definition = {
 | 
						|
    compile: function (schema) {
 | 
						|
      if (typeof schema == 'string') {
 | 
						|
        var Constructor = getConstructor(schema);
 | 
						|
        return function (data) {
 | 
						|
          return data instanceof Constructor;
 | 
						|
        };
 | 
						|
      }
 | 
						|
 | 
						|
      var constructors = schema.map(getConstructor);
 | 
						|
      return function (data) {
 | 
						|
        for (var i=0; i<constructors.length; i++)
 | 
						|
          if (data instanceof constructors[i]) return true;
 | 
						|
        return false;
 | 
						|
      };
 | 
						|
    },
 | 
						|
    CONSTRUCTORS: CONSTRUCTORS,
 | 
						|
    metaSchema: {
 | 
						|
      anyOf: [
 | 
						|
        { type: 'string' },
 | 
						|
        {
 | 
						|
          type: 'array',
 | 
						|
          items: { type: 'string' }
 | 
						|
        }
 | 
						|
      ]
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  ajv.addKeyword('instanceof', defFunc.definition);
 | 
						|
  return ajv;
 | 
						|
 | 
						|
  function getConstructor(c) {
 | 
						|
    var Constructor = CONSTRUCTORS[c];
 | 
						|
    if (Constructor) return Constructor;
 | 
						|
    throw new Error('invalid "instanceof" keyword value ' + c);
 | 
						|
  }
 | 
						|
};
 |