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.
58 lines
1.7 KiB
58 lines
1.7 KiB
'use strict'; |
|
|
|
var ruleModules = require('./_rules') |
|
, toHash = require('./util').toHash; |
|
|
|
module.exports = function rules() { |
|
var RULES = [ |
|
{ type: 'number', |
|
rules: [ { 'maximum': ['exclusiveMaximum'] }, |
|
{ 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] }, |
|
{ type: 'string', |
|
rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] }, |
|
{ type: 'array', |
|
rules: [ 'maxItems', 'minItems', 'uniqueItems', 'contains', 'items' ] }, |
|
{ type: 'object', |
|
rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames', |
|
{ 'properties': ['additionalProperties', 'patternProperties'] } ] }, |
|
{ rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] } |
|
]; |
|
|
|
var ALL = [ 'type' ]; |
|
var KEYWORDS = [ |
|
'additionalItems', '$schema', '$id', 'id', 'title', |
|
'description', 'default', 'definitions' |
|
]; |
|
var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ]; |
|
RULES.all = toHash(ALL); |
|
RULES.types = toHash(TYPES); |
|
|
|
RULES.forEach(function (group) { |
|
group.rules = group.rules.map(function (keyword) { |
|
var implKeywords; |
|
if (typeof keyword == 'object') { |
|
var key = Object.keys(keyword)[0]; |
|
implKeywords = keyword[key]; |
|
keyword = key; |
|
implKeywords.forEach(function (k) { |
|
ALL.push(k); |
|
RULES.all[k] = true; |
|
}); |
|
} |
|
ALL.push(keyword); |
|
var rule = RULES.all[keyword] = { |
|
keyword: keyword, |
|
code: ruleModules[keyword], |
|
implements: implKeywords |
|
}; |
|
return rule; |
|
}); |
|
|
|
if (group.type) RULES.types[group.type] = group; |
|
}); |
|
|
|
RULES.keywords = toHash(ALL.concat(KEYWORDS)); |
|
RULES.custom = {}; |
|
|
|
return RULES; |
|
};
|
|
|