Spaces:
Running
Running
; | |
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); | |
} | |
}; | |