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