UNPKG

1.33 kBJavaScriptView Raw
1'use strict';
2
3var CONSTRUCTORS = {
4 Object: Object,
5 Array: Array,
6 Function: Function,
7 Number: Number,
8 String: String,
9 Date: Date,
10 RegExp: RegExp
11};
12
13module.exports = function defFunc(ajv) {
14 /* istanbul ignore else */
15 if (typeof Buffer != 'undefined')
16 CONSTRUCTORS.Buffer = Buffer;
17
18 /* istanbul ignore else */
19 if (typeof Promise != 'undefined')
20 CONSTRUCTORS.Promise = Promise;
21
22 defFunc.definition = {
23 compile: function (schema) {
24 if (typeof schema == 'string') {
25 var Constructor = getConstructor(schema);
26 return function (data) {
27 return data instanceof Constructor;
28 };
29 }
30
31 var constructors = schema.map(getConstructor);
32 return function (data) {
33 for (var i=0; i<constructors.length; i++)
34 if (data instanceof constructors[i]) return true;
35 return false;
36 };
37 },
38 CONSTRUCTORS: CONSTRUCTORS,
39 metaSchema: {
40 anyOf: [
41 { type: 'string' },
42 {
43 type: 'array',
44 items: { type: 'string' }
45 }
46 ]
47 }
48 };
49
50 ajv.addKeyword('instanceof', defFunc.definition);
51 return ajv;
52
53 function getConstructor(c) {
54 var Constructor = CONSTRUCTORS[c];
55 if (Constructor) return Constructor;
56 throw new Error('invalid "instanceof" keyword value ' + c);
57 }
58};