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