--- /dev/null
+'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);
+ }
+};