text: '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;
  
    defFunc.definition = {
      compile: function compile(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);
    }
  };