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