You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
58 lines
1.3 KiB
'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); |
|
} |
|
};
|
|
|