aboutsummaryrefslogtreecommitdiff
path: root/node_modules/ajv/lib/compile
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/ajv/lib/compile')
-rw-r--r--node_modules/ajv/lib/compile/_rules.js31
-rw-r--r--node_modules/ajv/lib/compile/formats.js36
-rw-r--r--node_modules/ajv/lib/compile/index.js9
-rw-r--r--node_modules/ajv/lib/compile/resolve.js21
-rw-r--r--node_modules/ajv/lib/compile/rules.js20
5 files changed, 53 insertions, 64 deletions
diff --git a/node_modules/ajv/lib/compile/_rules.js b/node_modules/ajv/lib/compile/_rules.js
deleted file mode 100644
index 3fe69973a..000000000
--- a/node_modules/ajv/lib/compile/_rules.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-//all requires must be explicit because browserify won't work with dynamic requires
-module.exports = {
- '$ref': require('../dotjs/ref'),
- allOf: require('../dotjs/allOf'),
- anyOf: require('../dotjs/anyOf'),
- const: require('../dotjs/const'),
- contains: require('../dotjs/contains'),
- dependencies: require('../dotjs/dependencies'),
- 'enum': require('../dotjs/enum'),
- format: require('../dotjs/format'),
- items: require('../dotjs/items'),
- maximum: require('../dotjs/_limit'),
- minimum: require('../dotjs/_limit'),
- maxItems: require('../dotjs/_limitItems'),
- minItems: require('../dotjs/_limitItems'),
- maxLength: require('../dotjs/_limitLength'),
- minLength: require('../dotjs/_limitLength'),
- maxProperties: require('../dotjs/_limitProperties'),
- minProperties: require('../dotjs/_limitProperties'),
- multipleOf: require('../dotjs/multipleOf'),
- not: require('../dotjs/not'),
- oneOf: require('../dotjs/oneOf'),
- pattern: require('../dotjs/pattern'),
- properties: require('../dotjs/properties'),
- propertyNames: require('../dotjs/propertyNames'),
- required: require('../dotjs/required'),
- uniqueItems: require('../dotjs/uniqueItems'),
- validate: require('../dotjs/validate')
-};
diff --git a/node_modules/ajv/lib/compile/formats.js b/node_modules/ajv/lib/compile/formats.js
index b3a1541a6..97aca1a15 100644
--- a/node_modules/ajv/lib/compile/formats.js
+++ b/node_modules/ajv/lib/compile/formats.js
@@ -2,8 +2,8 @@
var util = require('./util');
-var DATE = /^\d\d\d\d-(\d\d)-(\d\d)$/;
-var DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];
+var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
+var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];
var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i;
var HOSTNAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i;
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
@@ -16,7 +16,8 @@ var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|
// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;
var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
-var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$|^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
+var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
+var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;
@@ -32,11 +33,11 @@ formats.fast = {
// date: http://tools.ietf.org/html/rfc3339#section-5.6
date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
// date-time: http://tools.ietf.org/html/rfc3339#section-5.6
- time: /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
- 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,
+ time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
+ 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,
// uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
- uri: /^(?:[a-z][a-z0-9+-.]*)(?::|\/)\/?[^\s]*$/i,
- 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i,
+ uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,
+ 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
'uri-template': URITEMPLATE,
url: URL,
// email (sources from jsen validator):
@@ -54,6 +55,7 @@ formats.fast = {
// JSON-pointer: https://tools.ietf.org/html/rfc6901
// uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
'json-pointer': JSON_POINTER,
+ 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
// relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
'relative-json-pointer': RELATIVE_JSON_POINTER
};
@@ -74,18 +76,28 @@ formats.full = {
regex: regex,
uuid: UUID,
'json-pointer': JSON_POINTER,
+ 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
'relative-json-pointer': RELATIVE_JSON_POINTER
};
+function isLeapYear(year) {
+ // https://tools.ietf.org/html/rfc3339#appendix-C
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
+}
+
+
function date(str) {
// full-date from http://tools.ietf.org/html/rfc3339#section-5.6
var matches = str.match(DATE);
if (!matches) return false;
- var month = +matches[1];
- var day = +matches[2];
- return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];
+ var year = +matches[1];
+ var month = +matches[2];
+ var day = +matches[3];
+
+ return month >= 1 && month <= 12 && day >= 1 &&
+ day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);
}
@@ -97,7 +109,9 @@ function time(str, full) {
var minute = matches[2];
var second = matches[3];
var timeZone = matches[5];
- return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);
+ return ((hour <= 23 && minute <= 59 && second <= 59) ||
+ (hour == 23 && minute == 59 && second == 60)) &&
+ (!full || timeZone);
}
diff --git a/node_modules/ajv/lib/compile/index.js b/node_modules/ajv/lib/compile/index.js
index cf4f5b86b..8e369db3d 100644
--- a/node_modules/ajv/lib/compile/index.js
+++ b/node_modules/ajv/lib/compile/index.js
@@ -11,7 +11,6 @@ var validateGenerator = require('../dotjs/validate');
* Functions below are used inside compiled validations function
*/
-var co = require('co');
var ucs2length = util.ucs2length;
var equal = require('fast-deep-equal');
@@ -70,9 +69,11 @@ function compile(schema, root, localRefs, baseId) {
endCompiling.call(this, schema, root, baseId);
}
+ /* @this {*} - custom context, see passContext option */
function callValidate() {
+ /* jshint validthis: true */
var validate = compilation.validate;
- var result = validate.apply(null, arguments);
+ var result = validate.apply(this, arguments);
callValidate.errors = validate.errors;
return result;
}
@@ -124,7 +125,6 @@ function compile(schema, root, localRefs, baseId) {
'refVal',
'defaults',
'customRules',
- 'co',
'equal',
'ucs2length',
'ValidationError',
@@ -139,7 +139,6 @@ function compile(schema, root, localRefs, baseId) {
refVal,
defaults,
customRules,
- co,
equal,
ucs2length,
ValidationError
@@ -224,7 +223,7 @@ function compile(schema, root, localRefs, baseId) {
function resolvedRef(refVal, code) {
return typeof refVal == 'object' || typeof refVal == 'boolean'
? { code: code, schema: refVal, inline: true }
- : { code: code, $async: refVal && refVal.$async };
+ : { code: code, $async: refVal && !!refVal.$async };
}
function usePattern(regexStr) {
diff --git a/node_modules/ajv/lib/compile/resolve.js b/node_modules/ajv/lib/compile/resolve.js
index 7d06afab8..66f2aee9b 100644
--- a/node_modules/ajv/lib/compile/resolve.js
+++ b/node_modules/ajv/lib/compile/resolve.js
@@ -1,6 +1,6 @@
'use strict';
-var url = require('url')
+var URI = require('uri-js')
, equal = require('fast-deep-equal')
, util = require('./util')
, SchemaObject = require('./schema_obj')
@@ -67,10 +67,10 @@ function resolve(compile, root, ref) {
*/
function resolveSchema(root, ref) {
/* jshint validthis: true */
- var p = url.parse(ref, false, true)
+ var p = URI.parse(ref)
, refPath = _getFullPath(p)
, baseId = getFullPath(this._getId(root.schema));
- if (refPath !== baseId) {
+ if (Object.keys(root.schema).length === 0 || refPath !== baseId) {
var id = normalizeId(refPath);
var refVal = this._refs[id];
if (typeof refVal == 'string') {
@@ -115,9 +115,9 @@ var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum
/* @this Ajv */
function getJsonPointer(parsedRef, baseId, schema, root) {
/* jshint validthis: true */
- parsedRef.hash = parsedRef.hash || '';
- if (parsedRef.hash.slice(0,2) != '#/') return;
- var parts = parsedRef.hash.split('/');
+ parsedRef.fragment = parsedRef.fragment || '';
+ if (parsedRef.fragment.slice(0,1) != '/') return;
+ var parts = parsedRef.fragment.split('/');
for (var i = 1; i < parts.length; i++) {
var part = parts[i];
@@ -206,14 +206,13 @@ function countKeys(schema) {
function getFullPath(id, normalize) {
if (normalize !== false) id = normalizeId(id);
- var p = url.parse(id, false, true);
+ var p = URI.parse(id);
return _getFullPath(p);
}
function _getFullPath(p) {
- var protocolSeparator = p.protocol || p.href.slice(0,2) == '//' ? '//' : '';
- return (p.protocol||'') + protocolSeparator + (p.host||'') + (p.path||'') + '#';
+ return URI.serialize(p).split('#')[0] + '#';
}
@@ -225,7 +224,7 @@ function normalizeId(id) {
function resolveUrl(baseId, id) {
id = normalizeId(id);
- return url.resolve(baseId, id);
+ return URI.resolve(baseId, id);
}
@@ -246,7 +245,7 @@ function resolveIds(schema) {
fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));
if (typeof id == 'string') {
- id = baseId = normalizeId(baseId ? url.resolve(baseId, id) : id);
+ id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);
var refVal = self._refs[id];
if (typeof refVal == 'string') refVal = self._refs[refVal];
diff --git a/node_modules/ajv/lib/compile/rules.js b/node_modules/ajv/lib/compile/rules.js
index 44830ad72..66f196a93 100644
--- a/node_modules/ajv/lib/compile/rules.js
+++ b/node_modules/ajv/lib/compile/rules.js
@@ -1,6 +1,6 @@
'use strict';
-var ruleModules = require('./_rules')
+var ruleModules = require('../dotjs')
, toHash = require('./util').toHash;
module.exports = function rules() {
@@ -11,17 +11,20 @@ module.exports = function rules() {
{ type: 'string',
rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },
{ type: 'array',
- rules: [ 'maxItems', 'minItems', 'uniqueItems', 'contains', 'items' ] },
+ rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },
{ type: 'object',
rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',
{ 'properties': ['additionalProperties', 'patternProperties'] } ] },
- { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }
+ { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }
];
- var ALL = [ 'type' ];
+ var ALL = [ 'type', '$comment' ];
var KEYWORDS = [
- 'additionalItems', '$schema', '$id', 'id', 'title',
- 'description', 'default', 'definitions'
+ '$schema', '$id', 'id', '$data', 'title',
+ 'description', 'default', 'definitions',
+ 'examples', 'readOnly', 'writeOnly',
+ 'contentMediaType', 'contentEncoding',
+ 'additionalItems', 'then', 'else'
];
var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];
RULES.all = toHash(ALL);
@@ -48,6 +51,11 @@ module.exports = function rules() {
return rule;
});
+ RULES.all.$comment = {
+ keyword: '$comment',
+ code: ruleModules.$comment
+ };
+
if (group.type) RULES.types[group.type] = group;
});