You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
959 B
36 lines
959 B
'use strict'; |
|
|
|
module.exports = function defFunc(ajv) { |
|
defFunc.definition = { |
|
type: 'string', |
|
inline: function (it, keyword, schema) { |
|
return getRegExp() + '.test(data' + (it.dataLevel || '') + ')'; |
|
|
|
function getRegExp() { |
|
try { |
|
if (typeof schema == 'object') |
|
return new RegExp(schema.pattern, schema.flags); |
|
|
|
var rx = schema.match(/^\/(.*)\/([gimuy]*)$/); |
|
if (rx) return new RegExp(rx[1], rx[2]); |
|
throw new Error('cannot parse string into RegExp'); |
|
} catch(e) { |
|
console.error('regular expression', schema, 'is invalid'); |
|
throw e; |
|
} |
|
} |
|
}, |
|
metaSchema: { |
|
type: ['string', 'object'], |
|
properties: { |
|
pattern: { type: 'string' }, |
|
flags: { type: 'string' } |
|
}, |
|
required: ['pattern'], |
|
additionalProperties: false |
|
} |
|
}; |
|
|
|
ajv.addKeyword('regexp', defFunc.definition); |
|
return ajv; |
|
};
|
|
|