'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); } };