diff options
Diffstat (limited to 'node_modules/ajv-keywords/keywords/instanceof.js')
| -rw-r--r-- | node_modules/ajv-keywords/keywords/instanceof.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/node_modules/ajv-keywords/keywords/instanceof.js b/node_modules/ajv-keywords/keywords/instanceof.js new file mode 100644 index 00000000..ea88f5ca --- /dev/null +++ b/node_modules/ajv-keywords/keywords/instanceof.js @@ -0,0 +1,58 @@ +'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); + } +}; |
