1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Ajv = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2'use strict'; 3 4 5var Cache = module.exports = function Cache() { 6 this._cache = {}; 7}; 8 9 10Cache.prototype.put = function Cache_put(key, value) { 11 this._cache[key] = value; 12}; 13 14 15Cache.prototype.get = function Cache_get(key) { 16 return this._cache[key]; 17}; 18 19 20Cache.prototype.del = function Cache_del(key) { 21 delete this._cache[key]; 22}; 23 24 25Cache.prototype.clear = function Cache_clear() { 26 this._cache = {}; 27}; 28 29},{}],2:[function(require,module,exports){ 30'use strict'; 31 32var MissingRefError = require('./error_classes').MissingRef; 33 34module.exports = compileAsync; 35 36 37/** 38 * Creates validating function for passed schema with asynchronous loading of missing schemas. 39 * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema. 40 * @this Ajv 41 * @param {Object} schema schema object 42 * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped 43 * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function. 44 * @return {Promise} promise that resolves with a validating function. 45 */ 46function compileAsync(schema, meta, callback) { 47 /* eslint no-shadow: 0 */ 48 /* global Promise */ 49 /* jshint validthis: true */ 50 var self = this; 51 if (typeof this._opts.loadSchema != 'function') 52 throw new Error('options.loadSchema should be a function'); 53 54 if (typeof meta == 'function') { 55 callback = meta; 56 meta = undefined; 57 } 58 59 var p = loadMetaSchemaOf(schema).then(function () { 60 var schemaObj = self._addSchema(schema, undefined, meta); 61 return schemaObj.validate || _compileAsync(schemaObj); 62 }); 63 64 if (callback) { 65 p.then( 66 function(v) { callback(null, v); }, 67 callback 68 ); 69 } 70 71 return p; 72 73 74 function loadMetaSchemaOf(sch) { 75 var $schema = sch.$schema; 76 return $schema && !self.getSchema($schema) 77 ? compileAsync.call(self, { $ref: $schema }, true) 78 : Promise.resolve(); 79 } 80 81 82 function _compileAsync(schemaObj) { 83 try { return self._compile(schemaObj); } 84 catch(e) { 85 if (e instanceof MissingRefError) return loadMissingSchema(e); 86 throw e; 87 } 88 89 90 function loadMissingSchema(e) { 91 var ref = e.missingSchema; 92 if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved'); 93 94 var schemaPromise = self._loadingSchemas[ref]; 95 if (!schemaPromise) { 96 schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref); 97 schemaPromise.then(removePromise, removePromise); 98 } 99 100 return schemaPromise.then(function (sch) { 101 if (!added(ref)) { 102 return loadMetaSchemaOf(sch).then(function () { 103 if (!added(ref)) self.addSchema(sch, ref, undefined, meta); 104 }); 105 } 106 }).then(function() { 107 return _compileAsync(schemaObj); 108 }); 109 110 function removePromise() { 111 delete self._loadingSchemas[ref]; 112 } 113 114 function added(ref) { 115 return self._refs[ref] || self._schemas[ref]; 116 } 117 } 118 } 119} 120 121},{"./error_classes":3}],3:[function(require,module,exports){ 122'use strict'; 123 124var resolve = require('./resolve'); 125 126module.exports = { 127 Validation: errorSubclass(ValidationError), 128 MissingRef: errorSubclass(MissingRefError) 129}; 130 131 132function ValidationError(errors) { 133 this.message = 'validation failed'; 134 this.errors = errors; 135 this.ajv = this.validation = true; 136} 137 138 139MissingRefError.message = function (baseId, ref) { 140 return 'can\'t resolve reference ' + ref + ' from id ' + baseId; 141}; 142 143 144function MissingRefError(baseId, ref, message) { 145 this.message = message || MissingRefError.message(baseId, ref); 146 this.missingRef = resolve.url(baseId, ref); 147 this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef)); 148} 149 150 151function errorSubclass(Subclass) { 152 Subclass.prototype = Object.create(Error.prototype); 153 Subclass.prototype.constructor = Subclass; 154 return Subclass; 155} 156 157},{"./resolve":6}],4:[function(require,module,exports){ 158'use strict'; 159 160var util = require('./util'); 161 162var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; 163var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31]; 164var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i; 165var HOSTNAME = /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i; 166var 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; 167var URIREF = /^(?:[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; 168// uri-template: https://tools.ietf.org/html/rfc6570 169var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; 170// For the source: https://gist.github.com/dperini/729294 171// For test cases: https://mathiasbynens.be/demo/url-regex 172// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. 173// 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; 174var 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-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-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; 175var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; 176var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; 177var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; 178var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; 179 180 181module.exports = formats; 182 183function formats(mode) { 184 mode = mode == 'full' ? 'full' : 'fast'; 185 return util.copy(formats[mode]); 186} 187 188 189formats.fast = { 190 // date: http://tools.ietf.org/html/rfc3339#section-5.6 191 date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, 192 // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 193 time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, 194 '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, 195 // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js 196 uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, 197 'uri-reference': /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, 198 'uri-template': URITEMPLATE, 199 url: URL, 200 // email (sources from jsen validator): 201 // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 202 // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') 203 email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, 204 hostname: HOSTNAME, 205 // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html 206 ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, 207 // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses 208 ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, 209 regex: regex, 210 // uuid: http://tools.ietf.org/html/rfc4122 211 uuid: UUID, 212 // JSON-pointer: https://tools.ietf.org/html/rfc6901 213 // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A 214 'json-pointer': JSON_POINTER, 215 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, 216 // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 217 'relative-json-pointer': RELATIVE_JSON_POINTER 218}; 219 220 221formats.full = { 222 date: date, 223 time: time, 224 'date-time': date_time, 225 uri: uri, 226 'uri-reference': URIREF, 227 'uri-template': URITEMPLATE, 228 url: URL, 229 email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, 230 hostname: HOSTNAME, 231 ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, 232 ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, 233 regex: regex, 234 uuid: UUID, 235 'json-pointer': JSON_POINTER, 236 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, 237 'relative-json-pointer': RELATIVE_JSON_POINTER 238}; 239 240 241function isLeapYear(year) { 242 // https://tools.ietf.org/html/rfc3339#appendix-C 243 return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); 244} 245 246 247function date(str) { 248 // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 249 var matches = str.match(DATE); 250 if (!matches) return false; 251 252 var year = +matches[1]; 253 var month = +matches[2]; 254 var day = +matches[3]; 255 256 return month >= 1 && month <= 12 && day >= 1 && 257 day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); 258} 259 260 261function time(str, full) { 262 var matches = str.match(TIME); 263 if (!matches) return false; 264 265 var hour = matches[1]; 266 var minute = matches[2]; 267 var second = matches[3]; 268 var timeZone = matches[5]; 269 return ((hour <= 23 && minute <= 59 && second <= 59) || 270 (hour == 23 && minute == 59 && second == 60)) && 271 (!full || timeZone); 272} 273 274 275var DATE_TIME_SEPARATOR = /t|\s/i; 276function date_time(str) { 277 // http://tools.ietf.org/html/rfc3339#section-5.6 278 var dateTime = str.split(DATE_TIME_SEPARATOR); 279 return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); 280} 281 282 283var NOT_URI_FRAGMENT = /\/|:/; 284function uri(str) { 285 // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." 286 return NOT_URI_FRAGMENT.test(str) && URI.test(str); 287} 288 289 290var Z_ANCHOR = /[^\\]\\Z/; 291function regex(str) { 292 if (Z_ANCHOR.test(str)) return false; 293 try { 294 new RegExp(str); 295 return true; 296 } catch(e) { 297 return false; 298 } 299} 300 301},{"./util":10}],5:[function(require,module,exports){ 302'use strict'; 303 304var resolve = require('./resolve') 305 , util = require('./util') 306 , errorClasses = require('./error_classes') 307 , stableStringify = require('fast-json-stable-stringify'); 308 309var validateGenerator = require('../dotjs/validate'); 310 311/** 312 * Functions below are used inside compiled validations function 313 */ 314 315var ucs2length = util.ucs2length; 316var equal = require('fast-deep-equal'); 317 318// this error is thrown by async schemas to return validation errors via exception 319var ValidationError = errorClasses.Validation; 320 321module.exports = compile; 322 323 324/** 325 * Compiles schema to validation function 326 * @this Ajv 327 * @param {Object} schema schema object 328 * @param {Object} root object with information about the root schema for this schema 329 * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution 330 * @param {String} baseId base ID for IDs in the schema 331 * @return {Function} validation function 332 */ 333function compile(schema, root, localRefs, baseId) { 334 /* jshint validthis: true, evil: true */ 335 /* eslint no-shadow: 0 */ 336 var self = this 337 , opts = this._opts 338 , refVal = [ undefined ] 339 , refs = {} 340 , patterns = [] 341 , patternsHash = {} 342 , defaults = [] 343 , defaultsHash = {} 344 , customRules = []; 345 346 root = root || { schema: schema, refVal: refVal, refs: refs }; 347 348 var c = checkCompiling.call(this, schema, root, baseId); 349 var compilation = this._compilations[c.index]; 350 if (c.compiling) return (compilation.callValidate = callValidate); 351 352 var formats = this._formats; 353 var RULES = this.RULES; 354 355 try { 356 var v = localCompile(schema, root, localRefs, baseId); 357 compilation.validate = v; 358 var cv = compilation.callValidate; 359 if (cv) { 360 cv.schema = v.schema; 361 cv.errors = null; 362 cv.refs = v.refs; 363 cv.refVal = v.refVal; 364 cv.root = v.root; 365 cv.$async = v.$async; 366 if (opts.sourceCode) cv.source = v.source; 367 } 368 return v; 369 } finally { 370 endCompiling.call(this, schema, root, baseId); 371 } 372 373 /* @this {*} - custom context, see passContext option */ 374 function callValidate() { 375 /* jshint validthis: true */ 376 var validate = compilation.validate; 377 var result = validate.apply(this, arguments); 378 callValidate.errors = validate.errors; 379 return result; 380 } 381 382 function localCompile(_schema, _root, localRefs, baseId) { 383 var isRoot = !_root || (_root && _root.schema == _schema); 384 if (_root.schema != root.schema) 385 return compile.call(self, _schema, _root, localRefs, baseId); 386 387 var $async = _schema.$async === true; 388 389 var sourceCode = validateGenerator({ 390 isTop: true, 391 schema: _schema, 392 isRoot: isRoot, 393 baseId: baseId, 394 root: _root, 395 schemaPath: '', 396 errSchemaPath: '#', 397 errorPath: '""', 398 MissingRefError: errorClasses.MissingRef, 399 RULES: RULES, 400 validate: validateGenerator, 401 util: util, 402 resolve: resolve, 403 resolveRef: resolveRef, 404 usePattern: usePattern, 405 useDefault: useDefault, 406 useCustomRule: useCustomRule, 407 opts: opts, 408 formats: formats, 409 logger: self.logger, 410 self: self 411 }); 412 413 sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) 414 + vars(defaults, defaultCode) + vars(customRules, customRuleCode) 415 + sourceCode; 416 417 if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema); 418 // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); 419 var validate; 420 try { 421 var makeValidate = new Function( 422 'self', 423 'RULES', 424 'formats', 425 'root', 426 'refVal', 427 'defaults', 428 'customRules', 429 'equal', 430 'ucs2length', 431 'ValidationError', 432 sourceCode 433 ); 434 435 validate = makeValidate( 436 self, 437 RULES, 438 formats, 439 root, 440 refVal, 441 defaults, 442 customRules, 443 equal, 444 ucs2length, 445 ValidationError 446 ); 447 448 refVal[0] = validate; 449 } catch(e) { 450 self.logger.error('Error compiling schema, function code:', sourceCode); 451 throw e; 452 } 453 454 validate.schema = _schema; 455 validate.errors = null; 456 validate.refs = refs; 457 validate.refVal = refVal; 458 validate.root = isRoot ? validate : _root; 459 if ($async) validate.$async = true; 460 if (opts.sourceCode === true) { 461 validate.source = { 462 code: sourceCode, 463 patterns: patterns, 464 defaults: defaults 465 }; 466 } 467 468 return validate; 469 } 470 471 function resolveRef(baseId, ref, isRoot) { 472 ref = resolve.url(baseId, ref); 473 var refIndex = refs[ref]; 474 var _refVal, refCode; 475 if (refIndex !== undefined) { 476 _refVal = refVal[refIndex]; 477 refCode = 'refVal[' + refIndex + ']'; 478 return resolvedRef(_refVal, refCode); 479 } 480 if (!isRoot && root.refs) { 481 var rootRefId = root.refs[ref]; 482 if (rootRefId !== undefined) { 483 _refVal = root.refVal[rootRefId]; 484 refCode = addLocalRef(ref, _refVal); 485 return resolvedRef(_refVal, refCode); 486 } 487 } 488 489 refCode = addLocalRef(ref); 490 var v = resolve.call(self, localCompile, root, ref); 491 if (v === undefined) { 492 var localSchema = localRefs && localRefs[ref]; 493 if (localSchema) { 494 v = resolve.inlineRef(localSchema, opts.inlineRefs) 495 ? localSchema 496 : compile.call(self, localSchema, root, localRefs, baseId); 497 } 498 } 499 500 if (v === undefined) { 501 removeLocalRef(ref); 502 } else { 503 replaceLocalRef(ref, v); 504 return resolvedRef(v, refCode); 505 } 506 } 507 508 function addLocalRef(ref, v) { 509 var refId = refVal.length; 510 refVal[refId] = v; 511 refs[ref] = refId; 512 return 'refVal' + refId; 513 } 514 515 function removeLocalRef(ref) { 516 delete refs[ref]; 517 } 518 519 function replaceLocalRef(ref, v) { 520 var refId = refs[ref]; 521 refVal[refId] = v; 522 } 523 524 function resolvedRef(refVal, code) { 525 return typeof refVal == 'object' || typeof refVal == 'boolean' 526 ? { code: code, schema: refVal, inline: true } 527 : { code: code, $async: refVal && !!refVal.$async }; 528 } 529 530 function usePattern(regexStr) { 531 var index = patternsHash[regexStr]; 532 if (index === undefined) { 533 index = patternsHash[regexStr] = patterns.length; 534 patterns[index] = regexStr; 535 } 536 return 'pattern' + index; 537 } 538 539 function useDefault(value) { 540 switch (typeof value) { 541 case 'boolean': 542 case 'number': 543 return '' + value; 544 case 'string': 545 return util.toQuotedString(value); 546 case 'object': 547 if (value === null) return 'null'; 548 var valueStr = stableStringify(value); 549 var index = defaultsHash[valueStr]; 550 if (index === undefined) { 551 index = defaultsHash[valueStr] = defaults.length; 552 defaults[index] = value; 553 } 554 return 'default' + index; 555 } 556 } 557 558 function useCustomRule(rule, schema, parentSchema, it) { 559 if (self._opts.validateSchema !== false) { 560 var deps = rule.definition.dependencies; 561 if (deps && !deps.every(function(keyword) { 562 return Object.prototype.hasOwnProperty.call(parentSchema, keyword); 563 })) 564 throw new Error('parent schema must have all required keywords: ' + deps.join(',')); 565 566 var validateSchema = rule.definition.validateSchema; 567 if (validateSchema) { 568 var valid = validateSchema(schema); 569 if (!valid) { 570 var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); 571 if (self._opts.validateSchema == 'log') self.logger.error(message); 572 else throw new Error(message); 573 } 574 } 575 } 576 577 var compile = rule.definition.compile 578 , inline = rule.definition.inline 579 , macro = rule.definition.macro; 580 581 var validate; 582 if (compile) { 583 validate = compile.call(self, schema, parentSchema, it); 584 } else if (macro) { 585 validate = macro.call(self, schema, parentSchema, it); 586 if (opts.validateSchema !== false) self.validateSchema(validate, true); 587 } else if (inline) { 588 validate = inline.call(self, it, rule.keyword, schema, parentSchema); 589 } else { 590 validate = rule.definition.validate; 591 if (!validate) return; 592 } 593 594 if (validate === undefined) 595 throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); 596 597 var index = customRules.length; 598 customRules[index] = validate; 599 600 return { 601 code: 'customRule' + index, 602 validate: validate 603 }; 604 } 605} 606 607 608/** 609 * Checks if the schema is currently compiled 610 * @this Ajv 611 * @param {Object} schema schema to compile 612 * @param {Object} root root object 613 * @param {String} baseId base schema ID 614 * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) 615 */ 616function checkCompiling(schema, root, baseId) { 617 /* jshint validthis: true */ 618 var index = compIndex.call(this, schema, root, baseId); 619 if (index >= 0) return { index: index, compiling: true }; 620 index = this._compilations.length; 621 this._compilations[index] = { 622 schema: schema, 623 root: root, 624 baseId: baseId 625 }; 626 return { index: index, compiling: false }; 627} 628 629 630/** 631 * Removes the schema from the currently compiled list 632 * @this Ajv 633 * @param {Object} schema schema to compile 634 * @param {Object} root root object 635 * @param {String} baseId base schema ID 636 */ 637function endCompiling(schema, root, baseId) { 638 /* jshint validthis: true */ 639 var i = compIndex.call(this, schema, root, baseId); 640 if (i >= 0) this._compilations.splice(i, 1); 641} 642 643 644/** 645 * Index of schema compilation in the currently compiled list 646 * @this Ajv 647 * @param {Object} schema schema to compile 648 * @param {Object} root root object 649 * @param {String} baseId base schema ID 650 * @return {Integer} compilation index 651 */ 652function compIndex(schema, root, baseId) { 653 /* jshint validthis: true */ 654 for (var i=0; i<this._compilations.length; i++) { 655 var c = this._compilations[i]; 656 if (c.schema == schema && c.root == root && c.baseId == baseId) return i; 657 } 658 return -1; 659} 660 661 662function patternCode(i, patterns) { 663 return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');'; 664} 665 666 667function defaultCode(i) { 668 return 'var default' + i + ' = defaults[' + i + '];'; 669} 670 671 672function refValCode(i, refVal) { 673 return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];'; 674} 675 676 677function customRuleCode(i) { 678 return 'var customRule' + i + ' = customRules[' + i + '];'; 679} 680 681 682function vars(arr, statement) { 683 if (!arr.length) return ''; 684 var code = ''; 685 for (var i=0; i<arr.length; i++) 686 code += statement(i, arr); 687 return code; 688} 689 690},{"../dotjs/validate":38,"./error_classes":3,"./resolve":6,"./util":10,"fast-deep-equal":42,"fast-json-stable-stringify":43}],6:[function(require,module,exports){ 691'use strict'; 692 693var URI = require('uri-js') 694 , equal = require('fast-deep-equal') 695 , util = require('./util') 696 , SchemaObject = require('./schema_obj') 697 , traverse = require('json-schema-traverse'); 698 699module.exports = resolve; 700 701resolve.normalizeId = normalizeId; 702resolve.fullPath = getFullPath; 703resolve.url = resolveUrl; 704resolve.ids = resolveIds; 705resolve.inlineRef = inlineRef; 706resolve.schema = resolveSchema; 707 708/** 709 * [resolve and compile the references ($ref)] 710 * @this Ajv 711 * @param {Function} compile reference to schema compilation funciton (localCompile) 712 * @param {Object} root object with information about the root schema for the current schema 713 * @param {String} ref reference to resolve 714 * @return {Object|Function} schema object (if the schema can be inlined) or validation function 715 */ 716function resolve(compile, root, ref) { 717 /* jshint validthis: true */ 718 var refVal = this._refs[ref]; 719 if (typeof refVal == 'string') { 720 if (this._refs[refVal]) refVal = this._refs[refVal]; 721 else return resolve.call(this, compile, root, refVal); 722 } 723 724 refVal = refVal || this._schemas[ref]; 725 if (refVal instanceof SchemaObject) { 726 return inlineRef(refVal.schema, this._opts.inlineRefs) 727 ? refVal.schema 728 : refVal.validate || this._compile(refVal); 729 } 730 731 var res = resolveSchema.call(this, root, ref); 732 var schema, v, baseId; 733 if (res) { 734 schema = res.schema; 735 root = res.root; 736 baseId = res.baseId; 737 } 738 739 if (schema instanceof SchemaObject) { 740 v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId); 741 } else if (schema !== undefined) { 742 v = inlineRef(schema, this._opts.inlineRefs) 743 ? schema 744 : compile.call(this, schema, root, undefined, baseId); 745 } 746 747 return v; 748} 749 750 751/** 752 * Resolve schema, its root and baseId 753 * @this Ajv 754 * @param {Object} root root object with properties schema, refVal, refs 755 * @param {String} ref reference to resolve 756 * @return {Object} object with properties schema, root, baseId 757 */ 758function resolveSchema(root, ref) { 759 /* jshint validthis: true */ 760 var p = URI.parse(ref) 761 , refPath = _getFullPath(p) 762 , baseId = getFullPath(this._getId(root.schema)); 763 if (Object.keys(root.schema).length === 0 || refPath !== baseId) { 764 var id = normalizeId(refPath); 765 var refVal = this._refs[id]; 766 if (typeof refVal == 'string') { 767 return resolveRecursive.call(this, root, refVal, p); 768 } else if (refVal instanceof SchemaObject) { 769 if (!refVal.validate) this._compile(refVal); 770 root = refVal; 771 } else { 772 refVal = this._schemas[id]; 773 if (refVal instanceof SchemaObject) { 774 if (!refVal.validate) this._compile(refVal); 775 if (id == normalizeId(ref)) 776 return { schema: refVal, root: root, baseId: baseId }; 777 root = refVal; 778 } else { 779 return; 780 } 781 } 782 if (!root.schema) return; 783 baseId = getFullPath(this._getId(root.schema)); 784 } 785 return getJsonPointer.call(this, p, baseId, root.schema, root); 786} 787 788 789/* @this Ajv */ 790function resolveRecursive(root, ref, parsedRef) { 791 /* jshint validthis: true */ 792 var res = resolveSchema.call(this, root, ref); 793 if (res) { 794 var schema = res.schema; 795 var baseId = res.baseId; 796 root = res.root; 797 var id = this._getId(schema); 798 if (id) baseId = resolveUrl(baseId, id); 799 return getJsonPointer.call(this, parsedRef, baseId, schema, root); 800 } 801} 802 803 804var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']); 805/* @this Ajv */ 806function getJsonPointer(parsedRef, baseId, schema, root) { 807 /* jshint validthis: true */ 808 parsedRef.fragment = parsedRef.fragment || ''; 809 if (parsedRef.fragment.slice(0,1) != '/') return; 810 var parts = parsedRef.fragment.split('/'); 811 812 for (var i = 1; i < parts.length; i++) { 813 var part = parts[i]; 814 if (part) { 815 part = util.unescapeFragment(part); 816 schema = schema[part]; 817 if (schema === undefined) break; 818 var id; 819 if (!PREVENT_SCOPE_CHANGE[part]) { 820 id = this._getId(schema); 821 if (id) baseId = resolveUrl(baseId, id); 822 if (schema.$ref) { 823 var $ref = resolveUrl(baseId, schema.$ref); 824 var res = resolveSchema.call(this, root, $ref); 825 if (res) { 826 schema = res.schema; 827 root = res.root; 828 baseId = res.baseId; 829 } 830 } 831 } 832 } 833 } 834 if (schema !== undefined && schema !== root.schema) 835 return { schema: schema, root: root, baseId: baseId }; 836} 837 838 839var SIMPLE_INLINED = util.toHash([ 840 'type', 'format', 'pattern', 841 'maxLength', 'minLength', 842 'maxProperties', 'minProperties', 843 'maxItems', 'minItems', 844 'maximum', 'minimum', 845 'uniqueItems', 'multipleOf', 846 'required', 'enum' 847]); 848function inlineRef(schema, limit) { 849 if (limit === false) return false; 850 if (limit === undefined || limit === true) return checkNoRef(schema); 851 else if (limit) return countKeys(schema) <= limit; 852} 853 854 855function checkNoRef(schema) { 856 var item; 857 if (Array.isArray(schema)) { 858 for (var i=0; i<schema.length; i++) { 859 item = schema[i]; 860 if (typeof item == 'object' && !checkNoRef(item)) return false; 861 } 862 } else { 863 for (var key in schema) { 864 if (key == '$ref') return false; 865 item = schema[key]; 866 if (typeof item == 'object' && !checkNoRef(item)) return false; 867 } 868 } 869 return true; 870} 871 872 873function countKeys(schema) { 874 var count = 0, item; 875 if (Array.isArray(schema)) { 876 for (var i=0; i<schema.length; i++) { 877 item = schema[i]; 878 if (typeof item == 'object') count += countKeys(item); 879 if (count == Infinity) return Infinity; 880 } 881 } else { 882 for (var key in schema) { 883 if (key == '$ref') return Infinity; 884 if (SIMPLE_INLINED[key]) { 885 count++; 886 } else { 887 item = schema[key]; 888 if (typeof item == 'object') count += countKeys(item) + 1; 889 if (count == Infinity) return Infinity; 890 } 891 } 892 } 893 return count; 894} 895 896 897function getFullPath(id, normalize) { 898 if (normalize !== false) id = normalizeId(id); 899 var p = URI.parse(id); 900 return _getFullPath(p); 901} 902 903 904function _getFullPath(p) { 905 return URI.serialize(p).split('#')[0] + '#'; 906} 907 908 909var TRAILING_SLASH_HASH = /#\/?$/; 910function normalizeId(id) { 911 return id ? id.replace(TRAILING_SLASH_HASH, '') : ''; 912} 913 914 915function resolveUrl(baseId, id) { 916 id = normalizeId(id); 917 return URI.resolve(baseId, id); 918} 919 920 921/* @this Ajv */ 922function resolveIds(schema) { 923 var schemaId = normalizeId(this._getId(schema)); 924 var baseIds = {'': schemaId}; 925 var fullPaths = {'': getFullPath(schemaId, false)}; 926 var localRefs = {}; 927 var self = this; 928 929 traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { 930 if (jsonPtr === '') return; 931 var id = self._getId(sch); 932 var baseId = baseIds[parentJsonPtr]; 933 var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword; 934 if (keyIndex !== undefined) 935 fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex)); 936 937 if (typeof id == 'string') { 938 id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id); 939 940 var refVal = self._refs[id]; 941 if (typeof refVal == 'string') refVal = self._refs[refVal]; 942 if (refVal && refVal.schema) { 943 if (!equal(sch, refVal.schema)) 944 throw new Error('id "' + id + '" resolves to more than one schema'); 945 } else if (id != normalizeId(fullPath)) { 946 if (id[0] == '#') { 947 if (localRefs[id] && !equal(sch, localRefs[id])) 948 throw new Error('id "' + id + '" resolves to more than one schema'); 949 localRefs[id] = sch; 950 } else { 951 self._refs[id] = fullPath; 952 } 953 } 954 } 955 baseIds[jsonPtr] = baseId; 956 fullPaths[jsonPtr] = fullPath; 957 }); 958 959 return localRefs; 960} 961 962},{"./schema_obj":8,"./util":10,"fast-deep-equal":42,"json-schema-traverse":44,"uri-js":45}],7:[function(require,module,exports){ 963'use strict'; 964 965var ruleModules = require('../dotjs') 966 , toHash = require('./util').toHash; 967 968module.exports = function rules() { 969 var RULES = [ 970 { type: 'number', 971 rules: [ { 'maximum': ['exclusiveMaximum'] }, 972 { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] }, 973 { type: 'string', 974 rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] }, 975 { type: 'array', 976 rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] }, 977 { type: 'object', 978 rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames', 979 { 'properties': ['additionalProperties', 'patternProperties'] } ] }, 980 { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] } 981 ]; 982 983 var ALL = [ 'type', '$comment' ]; 984 var KEYWORDS = [ 985 '$schema', '$id', 'id', '$data', '$async', 'title', 986 'description', 'default', 'definitions', 987 'examples', 'readOnly', 'writeOnly', 988 'contentMediaType', 'contentEncoding', 989 'additionalItems', 'then', 'else' 990 ]; 991 var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ]; 992 RULES.all = toHash(ALL); 993 RULES.types = toHash(TYPES); 994 995 RULES.forEach(function (group) { 996 group.rules = group.rules.map(function (keyword) { 997 var implKeywords; 998 if (typeof keyword == 'object') { 999 var key = Object.keys(keyword)[0]; 1000 implKeywords = keyword[key]; 1001 keyword = key; 1002 implKeywords.forEach(function (k) { 1003 ALL.push(k); 1004 RULES.all[k] = true; 1005 }); 1006 } 1007 ALL.push(keyword); 1008 var rule = RULES.all[keyword] = { 1009 keyword: keyword, 1010 code: ruleModules[keyword], 1011 implements: implKeywords 1012 }; 1013 return rule; 1014 }); 1015 1016 RULES.all.$comment = { 1017 keyword: '$comment', 1018 code: ruleModules.$comment 1019 }; 1020 1021 if (group.type) RULES.types[group.type] = group; 1022 }); 1023 1024 RULES.keywords = toHash(ALL.concat(KEYWORDS)); 1025 RULES.custom = {}; 1026 1027 return RULES; 1028}; 1029 1030},{"../dotjs":27,"./util":10}],8:[function(require,module,exports){ 1031'use strict'; 1032 1033var util = require('./util'); 1034 1035module.exports = SchemaObject; 1036 1037function SchemaObject(obj) { 1038 util.copy(obj, this); 1039} 1040 1041},{"./util":10}],9:[function(require,module,exports){ 1042'use strict'; 1043 1044// https://mathiasbynens.be/notes/javascript-encoding 1045// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode 1046module.exports = function ucs2length(str) { 1047 var length = 0 1048 , len = str.length 1049 , pos = 0 1050 , value; 1051 while (pos < len) { 1052 length++; 1053 value = str.charCodeAt(pos++); 1054 if (value >= 0xD800 && value <= 0xDBFF && pos < len) { 1055 // high surrogate, and there is a next character 1056 value = str.charCodeAt(pos); 1057 if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate 1058 } 1059 } 1060 return length; 1061}; 1062 1063},{}],10:[function(require,module,exports){ 1064'use strict'; 1065 1066 1067module.exports = { 1068 copy: copy, 1069 checkDataType: checkDataType, 1070 checkDataTypes: checkDataTypes, 1071 coerceToTypes: coerceToTypes, 1072 toHash: toHash, 1073 getProperty: getProperty, 1074 escapeQuotes: escapeQuotes, 1075 equal: require('fast-deep-equal'), 1076 ucs2length: require('./ucs2length'), 1077 varOccurences: varOccurences, 1078 varReplace: varReplace, 1079 schemaHasRules: schemaHasRules, 1080 schemaHasRulesExcept: schemaHasRulesExcept, 1081 schemaUnknownRules: schemaUnknownRules, 1082 toQuotedString: toQuotedString, 1083 getPathExpr: getPathExpr, 1084 getPath: getPath, 1085 getData: getData, 1086 unescapeFragment: unescapeFragment, 1087 unescapeJsonPointer: unescapeJsonPointer, 1088 escapeFragment: escapeFragment, 1089 escapeJsonPointer: escapeJsonPointer 1090}; 1091 1092 1093function copy(o, to) { 1094 to = to || {}; 1095 for (var key in o) to[key] = o[key]; 1096 return to; 1097} 1098 1099 1100function checkDataType(dataType, data, strictNumbers, negate) { 1101 var EQUAL = negate ? ' !== ' : ' === ' 1102 , AND = negate ? ' || ' : ' && ' 1103 , OK = negate ? '!' : '' 1104 , NOT = negate ? '' : '!'; 1105 switch (dataType) { 1106 case 'null': return data + EQUAL + 'null'; 1107 case 'array': return OK + 'Array.isArray(' + data + ')'; 1108 case 'object': return '(' + OK + data + AND + 1109 'typeof ' + data + EQUAL + '"object"' + AND + 1110 NOT + 'Array.isArray(' + data + '))'; 1111 case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + 1112 NOT + '(' + data + ' % 1)' + 1113 AND + data + EQUAL + data + 1114 (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; 1115 case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' + 1116 (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; 1117 default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; 1118 } 1119} 1120 1121 1122function checkDataTypes(dataTypes, data, strictNumbers) { 1123 switch (dataTypes.length) { 1124 case 1: return checkDataType(dataTypes[0], data, strictNumbers, true); 1125 default: 1126 var code = ''; 1127 var types = toHash(dataTypes); 1128 if (types.array && types.object) { 1129 code = types.null ? '(': '(!' + data + ' || '; 1130 code += 'typeof ' + data + ' !== "object")'; 1131 delete types.null; 1132 delete types.array; 1133 delete types.object; 1134 } 1135 if (types.number) delete types.integer; 1136 for (var t in types) 1137 code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true); 1138 1139 return code; 1140 } 1141} 1142 1143 1144var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); 1145function coerceToTypes(optionCoerceTypes, dataTypes) { 1146 if (Array.isArray(dataTypes)) { 1147 var types = []; 1148 for (var i=0; i<dataTypes.length; i++) { 1149 var t = dataTypes[i]; 1150 if (COERCE_TO_TYPES[t]) types[types.length] = t; 1151 else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t; 1152 } 1153 if (types.length) return types; 1154 } else if (COERCE_TO_TYPES[dataTypes]) { 1155 return [dataTypes]; 1156 } else if (optionCoerceTypes === 'array' && dataTypes === 'array') { 1157 return ['array']; 1158 } 1159} 1160 1161 1162function toHash(arr) { 1163 var hash = {}; 1164 for (var i=0; i<arr.length; i++) hash[arr[i]] = true; 1165 return hash; 1166} 1167 1168 1169var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; 1170var SINGLE_QUOTE = /'|\\/g; 1171function getProperty(key) { 1172 return typeof key == 'number' 1173 ? '[' + key + ']' 1174 : IDENTIFIER.test(key) 1175 ? '.' + key 1176 : "['" + escapeQuotes(key) + "']"; 1177} 1178 1179 1180function escapeQuotes(str) { 1181 return str.replace(SINGLE_QUOTE, '\\$&') 1182 .replace(/\n/g, '\\n') 1183 .replace(/\r/g, '\\r') 1184 .replace(/\f/g, '\\f') 1185 .replace(/\t/g, '\\t'); 1186} 1187 1188 1189function varOccurences(str, dataVar) { 1190 dataVar += '[^0-9]'; 1191 var matches = str.match(new RegExp(dataVar, 'g')); 1192 return matches ? matches.length : 0; 1193} 1194 1195 1196function varReplace(str, dataVar, expr) { 1197 dataVar += '([^0-9])'; 1198 expr = expr.replace(/\$/g, '$$$$'); 1199 return str.replace(new RegExp(dataVar, 'g'), expr + '$1'); 1200} 1201 1202 1203function schemaHasRules(schema, rules) { 1204 if (typeof schema == 'boolean') return !schema; 1205 for (var key in schema) if (rules[key]) return true; 1206} 1207 1208 1209function schemaHasRulesExcept(schema, rules, exceptKeyword) { 1210 if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not'; 1211 for (var key in schema) if (key != exceptKeyword && rules[key]) return true; 1212} 1213 1214 1215function schemaUnknownRules(schema, rules) { 1216 if (typeof schema == 'boolean') return; 1217 for (var key in schema) if (!rules[key]) return key; 1218} 1219 1220 1221function toQuotedString(str) { 1222 return '\'' + escapeQuotes(str) + '\''; 1223} 1224 1225 1226function getPathExpr(currentPath, expr, jsonPointers, isNumber) { 1227 var path = jsonPointers // false by default 1228 ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')') 1229 : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\''); 1230 return joinPaths(currentPath, path); 1231} 1232 1233 1234function getPath(currentPath, prop, jsonPointers) { 1235 var path = jsonPointers // false by default 1236 ? toQuotedString('/' + escapeJsonPointer(prop)) 1237 : toQuotedString(getProperty(prop)); 1238 return joinPaths(currentPath, path); 1239} 1240 1241 1242var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; 1243var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; 1244function getData($data, lvl, paths) { 1245 var up, jsonPointer, data, matches; 1246 if ($data === '') return 'rootData'; 1247 if ($data[0] == '/') { 1248 if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data); 1249 jsonPointer = $data; 1250 data = 'rootData'; 1251 } else { 1252 matches = $data.match(RELATIVE_JSON_POINTER); 1253 if (!matches) throw new Error('Invalid JSON-pointer: ' + $data); 1254 up = +matches[1]; 1255 jsonPointer = matches[2]; 1256 if (jsonPointer == '#') { 1257 if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); 1258 return paths[lvl - up]; 1259 } 1260 1261 if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); 1262 data = 'data' + ((lvl - up) || ''); 1263 if (!jsonPointer) return data; 1264 } 1265 1266 var expr = data; 1267 var segments = jsonPointer.split('/'); 1268 for (var i=0; i<segments.length; i++) { 1269 var segment = segments[i]; 1270 if (segment) { 1271 data += getProperty(unescapeJsonPointer(segment)); 1272 expr += ' && ' + data; 1273 } 1274 } 1275 return expr; 1276} 1277 1278 1279function joinPaths (a, b) { 1280 if (a == '""') return b; 1281 return (a + ' + ' + b).replace(/([^\\])' \+ '/g, '$1'); 1282} 1283 1284 1285function unescapeFragment(str) { 1286 return unescapeJsonPointer(decodeURIComponent(str)); 1287} 1288 1289 1290function escapeFragment(str) { 1291 return encodeURIComponent(escapeJsonPointer(str)); 1292} 1293 1294 1295function escapeJsonPointer(str) { 1296 return str.replace(/~/g, '~0').replace(/\//g, '~1'); 1297} 1298 1299 1300function unescapeJsonPointer(str) { 1301 return str.replace(/~1/g, '/').replace(/~0/g, '~'); 1302} 1303 1304},{"./ucs2length":9,"fast-deep-equal":42}],11:[function(require,module,exports){ 1305'use strict'; 1306 1307var KEYWORDS = [ 1308 'multipleOf', 1309 'maximum', 1310 'exclusiveMaximum', 1311 'minimum', 1312 'exclusiveMinimum', 1313 'maxLength', 1314 'minLength', 1315 'pattern', 1316 'additionalItems', 1317 'maxItems', 1318 'minItems', 1319 'uniqueItems', 1320 'maxProperties', 1321 'minProperties', 1322 'required', 1323 'additionalProperties', 1324 'enum', 1325 'format', 1326 'const' 1327]; 1328 1329module.exports = function (metaSchema, keywordsJsonPointers) { 1330 for (var i=0; i<keywordsJsonPointers.length; i++) { 1331 metaSchema = JSON.parse(JSON.stringify(metaSchema)); 1332 var segments = keywordsJsonPointers[i].split('/'); 1333 var keywords = metaSchema; 1334 var j; 1335 for (j=1; j<segments.length; j++) 1336 keywords = keywords[segments[j]]; 1337 1338 for (j=0; j<KEYWORDS.length; j++) { 1339 var key = KEYWORDS[j]; 1340 var schema = keywords[key]; 1341 if (schema) { 1342 keywords[key] = { 1343 anyOf: [ 1344 schema, 1345 { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' } 1346 ] 1347 }; 1348 } 1349 } 1350 } 1351 1352 return metaSchema; 1353}; 1354 1355},{}],12:[function(require,module,exports){ 1356'use strict'; 1357 1358var metaSchema = require('./refs/json-schema-draft-07.json'); 1359 1360module.exports = { 1361 $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js', 1362 definitions: { 1363 simpleTypes: metaSchema.definitions.simpleTypes 1364 }, 1365 type: 'object', 1366 dependencies: { 1367 schema: ['validate'], 1368 $data: ['validate'], 1369 statements: ['inline'], 1370 valid: {not: {required: ['macro']}} 1371 }, 1372 properties: { 1373 type: metaSchema.properties.type, 1374 schema: {type: 'boolean'}, 1375 statements: {type: 'boolean'}, 1376 dependencies: { 1377 type: 'array', 1378 items: {type: 'string'} 1379 }, 1380 metaSchema: {type: 'object'}, 1381 modifying: {type: 'boolean'}, 1382 valid: {type: 'boolean'}, 1383 $data: {type: 'boolean'}, 1384 async: {type: 'boolean'}, 1385 errors: { 1386 anyOf: [ 1387 {type: 'boolean'}, 1388 {const: 'full'} 1389 ] 1390 } 1391 } 1392}; 1393 1394},{"./refs/json-schema-draft-07.json":41}],13:[function(require,module,exports){ 1395'use strict'; 1396module.exports = function generate__limit(it, $keyword, $ruleType) { 1397 var out = ' '; 1398 var $lvl = it.level; 1399 var $dataLvl = it.dataLevel; 1400 var $schema = it.schema[$keyword]; 1401 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1402 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1403 var $breakOnError = !it.opts.allErrors; 1404 var $errorKeyword; 1405 var $data = 'data' + ($dataLvl || ''); 1406 var $isData = it.opts.$data && $schema && $schema.$data, 1407 $schemaValue; 1408 if ($isData) { 1409 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 1410 $schemaValue = 'schema' + $lvl; 1411 } else { 1412 $schemaValue = $schema; 1413 } 1414 var $isMax = $keyword == 'maximum', 1415 $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', 1416 $schemaExcl = it.schema[$exclusiveKeyword], 1417 $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, 1418 $op = $isMax ? '<' : '>', 1419 $notOp = $isMax ? '>' : '<', 1420 $errorKeyword = undefined; 1421 if (!($isData || typeof $schema == 'number' || $schema === undefined)) { 1422 throw new Error($keyword + ' must be number'); 1423 } 1424 if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) { 1425 throw new Error($exclusiveKeyword + ' must be number or boolean'); 1426 } 1427 if ($isDataExcl) { 1428 var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), 1429 $exclusive = 'exclusive' + $lvl, 1430 $exclType = 'exclType' + $lvl, 1431 $exclIsNumber = 'exclIsNumber' + $lvl, 1432 $opExpr = 'op' + $lvl, 1433 $opStr = '\' + ' + $opExpr + ' + \''; 1434 out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; 1435 $schemaValueExcl = 'schemaExcl' + $lvl; 1436 out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; 1437 var $errorKeyword = $exclusiveKeyword; 1438 var $$outStack = $$outStack || []; 1439 $$outStack.push(out); 1440 out = ''; /* istanbul ignore else */ 1441 if (it.createErrors !== false) { 1442 out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 1443 if (it.opts.messages !== false) { 1444 out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; 1445 } 1446 if (it.opts.verbose) { 1447 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1448 } 1449 out += ' } '; 1450 } else { 1451 out += ' {} '; 1452 } 1453 var __err = out; 1454 out = $$outStack.pop(); 1455 if (!it.compositeRule && $breakOnError) { 1456 /* istanbul ignore if */ 1457 if (it.async) { 1458 out += ' throw new ValidationError([' + (__err) + ']); '; 1459 } else { 1460 out += ' validate.errors = [' + (__err) + ']; return false; '; 1461 } 1462 } else { 1463 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1464 } 1465 out += ' } else if ( '; 1466 if ($isData) { 1467 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1468 } 1469 out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; 1470 if ($schema === undefined) { 1471 $errorKeyword = $exclusiveKeyword; 1472 $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; 1473 $schemaValue = $schemaValueExcl; 1474 $isData = $isDataExcl; 1475 } 1476 } else { 1477 var $exclIsNumber = typeof $schemaExcl == 'number', 1478 $opStr = $op; 1479 if ($exclIsNumber && $isData) { 1480 var $opExpr = '\'' + $opStr + '\''; 1481 out += ' if ( '; 1482 if ($isData) { 1483 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1484 } 1485 out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; 1486 } else { 1487 if ($exclIsNumber && $schema === undefined) { 1488 $exclusive = true; 1489 $errorKeyword = $exclusiveKeyword; 1490 $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; 1491 $schemaValue = $schemaExcl; 1492 $notOp += '='; 1493 } else { 1494 if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); 1495 if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { 1496 $exclusive = true; 1497 $errorKeyword = $exclusiveKeyword; 1498 $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; 1499 $notOp += '='; 1500 } else { 1501 $exclusive = false; 1502 $opStr += '='; 1503 } 1504 } 1505 var $opExpr = '\'' + $opStr + '\''; 1506 out += ' if ( '; 1507 if ($isData) { 1508 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1509 } 1510 out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; 1511 } 1512 } 1513 $errorKeyword = $errorKeyword || $keyword; 1514 var $$outStack = $$outStack || []; 1515 $$outStack.push(out); 1516 out = ''; /* istanbul ignore else */ 1517 if (it.createErrors !== false) { 1518 out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; 1519 if (it.opts.messages !== false) { 1520 out += ' , message: \'should be ' + ($opStr) + ' '; 1521 if ($isData) { 1522 out += '\' + ' + ($schemaValue); 1523 } else { 1524 out += '' + ($schemaValue) + '\''; 1525 } 1526 } 1527 if (it.opts.verbose) { 1528 out += ' , schema: '; 1529 if ($isData) { 1530 out += 'validate.schema' + ($schemaPath); 1531 } else { 1532 out += '' + ($schema); 1533 } 1534 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1535 } 1536 out += ' } '; 1537 } else { 1538 out += ' {} '; 1539 } 1540 var __err = out; 1541 out = $$outStack.pop(); 1542 if (!it.compositeRule && $breakOnError) { 1543 /* istanbul ignore if */ 1544 if (it.async) { 1545 out += ' throw new ValidationError([' + (__err) + ']); '; 1546 } else { 1547 out += ' validate.errors = [' + (__err) + ']; return false; '; 1548 } 1549 } else { 1550 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1551 } 1552 out += ' } '; 1553 if ($breakOnError) { 1554 out += ' else { '; 1555 } 1556 return out; 1557} 1558 1559},{}],14:[function(require,module,exports){ 1560'use strict'; 1561module.exports = function generate__limitItems(it, $keyword, $ruleType) { 1562 var out = ' '; 1563 var $lvl = it.level; 1564 var $dataLvl = it.dataLevel; 1565 var $schema = it.schema[$keyword]; 1566 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1567 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1568 var $breakOnError = !it.opts.allErrors; 1569 var $errorKeyword; 1570 var $data = 'data' + ($dataLvl || ''); 1571 var $isData = it.opts.$data && $schema && $schema.$data, 1572 $schemaValue; 1573 if ($isData) { 1574 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 1575 $schemaValue = 'schema' + $lvl; 1576 } else { 1577 $schemaValue = $schema; 1578 } 1579 if (!($isData || typeof $schema == 'number')) { 1580 throw new Error($keyword + ' must be number'); 1581 } 1582 var $op = $keyword == 'maxItems' ? '>' : '<'; 1583 out += 'if ( '; 1584 if ($isData) { 1585 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1586 } 1587 out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; 1588 var $errorKeyword = $keyword; 1589 var $$outStack = $$outStack || []; 1590 $$outStack.push(out); 1591 out = ''; /* istanbul ignore else */ 1592 if (it.createErrors !== false) { 1593 out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; 1594 if (it.opts.messages !== false) { 1595 out += ' , message: \'should NOT have '; 1596 if ($keyword == 'maxItems') { 1597 out += 'more'; 1598 } else { 1599 out += 'fewer'; 1600 } 1601 out += ' than '; 1602 if ($isData) { 1603 out += '\' + ' + ($schemaValue) + ' + \''; 1604 } else { 1605 out += '' + ($schema); 1606 } 1607 out += ' items\' '; 1608 } 1609 if (it.opts.verbose) { 1610 out += ' , schema: '; 1611 if ($isData) { 1612 out += 'validate.schema' + ($schemaPath); 1613 } else { 1614 out += '' + ($schema); 1615 } 1616 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1617 } 1618 out += ' } '; 1619 } else { 1620 out += ' {} '; 1621 } 1622 var __err = out; 1623 out = $$outStack.pop(); 1624 if (!it.compositeRule && $breakOnError) { 1625 /* istanbul ignore if */ 1626 if (it.async) { 1627 out += ' throw new ValidationError([' + (__err) + ']); '; 1628 } else { 1629 out += ' validate.errors = [' + (__err) + ']; return false; '; 1630 } 1631 } else { 1632 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1633 } 1634 out += '} '; 1635 if ($breakOnError) { 1636 out += ' else { '; 1637 } 1638 return out; 1639} 1640 1641},{}],15:[function(require,module,exports){ 1642'use strict'; 1643module.exports = function generate__limitLength(it, $keyword, $ruleType) { 1644 var out = ' '; 1645 var $lvl = it.level; 1646 var $dataLvl = it.dataLevel; 1647 var $schema = it.schema[$keyword]; 1648 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1649 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1650 var $breakOnError = !it.opts.allErrors; 1651 var $errorKeyword; 1652 var $data = 'data' + ($dataLvl || ''); 1653 var $isData = it.opts.$data && $schema && $schema.$data, 1654 $schemaValue; 1655 if ($isData) { 1656 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 1657 $schemaValue = 'schema' + $lvl; 1658 } else { 1659 $schemaValue = $schema; 1660 } 1661 if (!($isData || typeof $schema == 'number')) { 1662 throw new Error($keyword + ' must be number'); 1663 } 1664 var $op = $keyword == 'maxLength' ? '>' : '<'; 1665 out += 'if ( '; 1666 if ($isData) { 1667 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1668 } 1669 if (it.opts.unicode === false) { 1670 out += ' ' + ($data) + '.length '; 1671 } else { 1672 out += ' ucs2length(' + ($data) + ') '; 1673 } 1674 out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; 1675 var $errorKeyword = $keyword; 1676 var $$outStack = $$outStack || []; 1677 $$outStack.push(out); 1678 out = ''; /* istanbul ignore else */ 1679 if (it.createErrors !== false) { 1680 out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; 1681 if (it.opts.messages !== false) { 1682 out += ' , message: \'should NOT be '; 1683 if ($keyword == 'maxLength') { 1684 out += 'longer'; 1685 } else { 1686 out += 'shorter'; 1687 } 1688 out += ' than '; 1689 if ($isData) { 1690 out += '\' + ' + ($schemaValue) + ' + \''; 1691 } else { 1692 out += '' + ($schema); 1693 } 1694 out += ' characters\' '; 1695 } 1696 if (it.opts.verbose) { 1697 out += ' , schema: '; 1698 if ($isData) { 1699 out += 'validate.schema' + ($schemaPath); 1700 } else { 1701 out += '' + ($schema); 1702 } 1703 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1704 } 1705 out += ' } '; 1706 } else { 1707 out += ' {} '; 1708 } 1709 var __err = out; 1710 out = $$outStack.pop(); 1711 if (!it.compositeRule && $breakOnError) { 1712 /* istanbul ignore if */ 1713 if (it.async) { 1714 out += ' throw new ValidationError([' + (__err) + ']); '; 1715 } else { 1716 out += ' validate.errors = [' + (__err) + ']; return false; '; 1717 } 1718 } else { 1719 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1720 } 1721 out += '} '; 1722 if ($breakOnError) { 1723 out += ' else { '; 1724 } 1725 return out; 1726} 1727 1728},{}],16:[function(require,module,exports){ 1729'use strict'; 1730module.exports = function generate__limitProperties(it, $keyword, $ruleType) { 1731 var out = ' '; 1732 var $lvl = it.level; 1733 var $dataLvl = it.dataLevel; 1734 var $schema = it.schema[$keyword]; 1735 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1736 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1737 var $breakOnError = !it.opts.allErrors; 1738 var $errorKeyword; 1739 var $data = 'data' + ($dataLvl || ''); 1740 var $isData = it.opts.$data && $schema && $schema.$data, 1741 $schemaValue; 1742 if ($isData) { 1743 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 1744 $schemaValue = 'schema' + $lvl; 1745 } else { 1746 $schemaValue = $schema; 1747 } 1748 if (!($isData || typeof $schema == 'number')) { 1749 throw new Error($keyword + ' must be number'); 1750 } 1751 var $op = $keyword == 'maxProperties' ? '>' : '<'; 1752 out += 'if ( '; 1753 if ($isData) { 1754 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; 1755 } 1756 out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; 1757 var $errorKeyword = $keyword; 1758 var $$outStack = $$outStack || []; 1759 $$outStack.push(out); 1760 out = ''; /* istanbul ignore else */ 1761 if (it.createErrors !== false) { 1762 out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; 1763 if (it.opts.messages !== false) { 1764 out += ' , message: \'should NOT have '; 1765 if ($keyword == 'maxProperties') { 1766 out += 'more'; 1767 } else { 1768 out += 'fewer'; 1769 } 1770 out += ' than '; 1771 if ($isData) { 1772 out += '\' + ' + ($schemaValue) + ' + \''; 1773 } else { 1774 out += '' + ($schema); 1775 } 1776 out += ' properties\' '; 1777 } 1778 if (it.opts.verbose) { 1779 out += ' , schema: '; 1780 if ($isData) { 1781 out += 'validate.schema' + ($schemaPath); 1782 } else { 1783 out += '' + ($schema); 1784 } 1785 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1786 } 1787 out += ' } '; 1788 } else { 1789 out += ' {} '; 1790 } 1791 var __err = out; 1792 out = $$outStack.pop(); 1793 if (!it.compositeRule && $breakOnError) { 1794 /* istanbul ignore if */ 1795 if (it.async) { 1796 out += ' throw new ValidationError([' + (__err) + ']); '; 1797 } else { 1798 out += ' validate.errors = [' + (__err) + ']; return false; '; 1799 } 1800 } else { 1801 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1802 } 1803 out += '} '; 1804 if ($breakOnError) { 1805 out += ' else { '; 1806 } 1807 return out; 1808} 1809 1810},{}],17:[function(require,module,exports){ 1811'use strict'; 1812module.exports = function generate_allOf(it, $keyword, $ruleType) { 1813 var out = ' '; 1814 var $schema = it.schema[$keyword]; 1815 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1816 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1817 var $breakOnError = !it.opts.allErrors; 1818 var $it = it.util.copy(it); 1819 var $closingBraces = ''; 1820 $it.level++; 1821 var $nextValid = 'valid' + $it.level; 1822 var $currentBaseId = $it.baseId, 1823 $allSchemasEmpty = true; 1824 var arr1 = $schema; 1825 if (arr1) { 1826 var $sch, $i = -1, 1827 l1 = arr1.length - 1; 1828 while ($i < l1) { 1829 $sch = arr1[$i += 1]; 1830 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 1831 $allSchemasEmpty = false; 1832 $it.schema = $sch; 1833 $it.schemaPath = $schemaPath + '[' + $i + ']'; 1834 $it.errSchemaPath = $errSchemaPath + '/' + $i; 1835 out += ' ' + (it.validate($it)) + ' '; 1836 $it.baseId = $currentBaseId; 1837 if ($breakOnError) { 1838 out += ' if (' + ($nextValid) + ') { '; 1839 $closingBraces += '}'; 1840 } 1841 } 1842 } 1843 } 1844 if ($breakOnError) { 1845 if ($allSchemasEmpty) { 1846 out += ' if (true) { '; 1847 } else { 1848 out += ' ' + ($closingBraces.slice(0, -1)) + ' '; 1849 } 1850 } 1851 return out; 1852} 1853 1854},{}],18:[function(require,module,exports){ 1855'use strict'; 1856module.exports = function generate_anyOf(it, $keyword, $ruleType) { 1857 var out = ' '; 1858 var $lvl = it.level; 1859 var $dataLvl = it.dataLevel; 1860 var $schema = it.schema[$keyword]; 1861 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1862 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1863 var $breakOnError = !it.opts.allErrors; 1864 var $data = 'data' + ($dataLvl || ''); 1865 var $valid = 'valid' + $lvl; 1866 var $errs = 'errs__' + $lvl; 1867 var $it = it.util.copy(it); 1868 var $closingBraces = ''; 1869 $it.level++; 1870 var $nextValid = 'valid' + $it.level; 1871 var $noEmptySchema = $schema.every(function($sch) { 1872 return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)); 1873 }); 1874 if ($noEmptySchema) { 1875 var $currentBaseId = $it.baseId; 1876 out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; 1877 var $wasComposite = it.compositeRule; 1878 it.compositeRule = $it.compositeRule = true; 1879 var arr1 = $schema; 1880 if (arr1) { 1881 var $sch, $i = -1, 1882 l1 = arr1.length - 1; 1883 while ($i < l1) { 1884 $sch = arr1[$i += 1]; 1885 $it.schema = $sch; 1886 $it.schemaPath = $schemaPath + '[' + $i + ']'; 1887 $it.errSchemaPath = $errSchemaPath + '/' + $i; 1888 out += ' ' + (it.validate($it)) + ' '; 1889 $it.baseId = $currentBaseId; 1890 out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; 1891 $closingBraces += '}'; 1892 } 1893 } 1894 it.compositeRule = $it.compositeRule = $wasComposite; 1895 out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ 1896 if (it.createErrors !== false) { 1897 out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 1898 if (it.opts.messages !== false) { 1899 out += ' , message: \'should match some schema in anyOf\' '; 1900 } 1901 if (it.opts.verbose) { 1902 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1903 } 1904 out += ' } '; 1905 } else { 1906 out += ' {} '; 1907 } 1908 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1909 if (!it.compositeRule && $breakOnError) { 1910 /* istanbul ignore if */ 1911 if (it.async) { 1912 out += ' throw new ValidationError(vErrors); '; 1913 } else { 1914 out += ' validate.errors = vErrors; return false; '; 1915 } 1916 } 1917 out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; 1918 if (it.opts.allErrors) { 1919 out += ' } '; 1920 } 1921 } else { 1922 if ($breakOnError) { 1923 out += ' if (true) { '; 1924 } 1925 } 1926 return out; 1927} 1928 1929},{}],19:[function(require,module,exports){ 1930'use strict'; 1931module.exports = function generate_comment(it, $keyword, $ruleType) { 1932 var out = ' '; 1933 var $schema = it.schema[$keyword]; 1934 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1935 var $breakOnError = !it.opts.allErrors; 1936 var $comment = it.util.toQuotedString($schema); 1937 if (it.opts.$comment === true) { 1938 out += ' console.log(' + ($comment) + ');'; 1939 } else if (typeof it.opts.$comment == 'function') { 1940 out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; 1941 } 1942 return out; 1943} 1944 1945},{}],20:[function(require,module,exports){ 1946'use strict'; 1947module.exports = function generate_const(it, $keyword, $ruleType) { 1948 var out = ' '; 1949 var $lvl = it.level; 1950 var $dataLvl = it.dataLevel; 1951 var $schema = it.schema[$keyword]; 1952 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 1953 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 1954 var $breakOnError = !it.opts.allErrors; 1955 var $data = 'data' + ($dataLvl || ''); 1956 var $valid = 'valid' + $lvl; 1957 var $isData = it.opts.$data && $schema && $schema.$data, 1958 $schemaValue; 1959 if ($isData) { 1960 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 1961 $schemaValue = 'schema' + $lvl; 1962 } else { 1963 $schemaValue = $schema; 1964 } 1965 if (!$isData) { 1966 out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; 1967 } 1968 out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; 1969 var $$outStack = $$outStack || []; 1970 $$outStack.push(out); 1971 out = ''; /* istanbul ignore else */ 1972 if (it.createErrors !== false) { 1973 out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; 1974 if (it.opts.messages !== false) { 1975 out += ' , message: \'should be equal to constant\' '; 1976 } 1977 if (it.opts.verbose) { 1978 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 1979 } 1980 out += ' } '; 1981 } else { 1982 out += ' {} '; 1983 } 1984 var __err = out; 1985 out = $$outStack.pop(); 1986 if (!it.compositeRule && $breakOnError) { 1987 /* istanbul ignore if */ 1988 if (it.async) { 1989 out += ' throw new ValidationError([' + (__err) + ']); '; 1990 } else { 1991 out += ' validate.errors = [' + (__err) + ']; return false; '; 1992 } 1993 } else { 1994 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 1995 } 1996 out += ' }'; 1997 if ($breakOnError) { 1998 out += ' else { '; 1999 } 2000 return out; 2001} 2002 2003},{}],21:[function(require,module,exports){ 2004'use strict'; 2005module.exports = function generate_contains(it, $keyword, $ruleType) { 2006 var out = ' '; 2007 var $lvl = it.level; 2008 var $dataLvl = it.dataLevel; 2009 var $schema = it.schema[$keyword]; 2010 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2011 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2012 var $breakOnError = !it.opts.allErrors; 2013 var $data = 'data' + ($dataLvl || ''); 2014 var $valid = 'valid' + $lvl; 2015 var $errs = 'errs__' + $lvl; 2016 var $it = it.util.copy(it); 2017 var $closingBraces = ''; 2018 $it.level++; 2019 var $nextValid = 'valid' + $it.level; 2020 var $idx = 'i' + $lvl, 2021 $dataNxt = $it.dataLevel = it.dataLevel + 1, 2022 $nextData = 'data' + $dataNxt, 2023 $currentBaseId = it.baseId, 2024 $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all)); 2025 out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; 2026 if ($nonEmptySchema) { 2027 var $wasComposite = it.compositeRule; 2028 it.compositeRule = $it.compositeRule = true; 2029 $it.schema = $schema; 2030 $it.schemaPath = $schemaPath; 2031 $it.errSchemaPath = $errSchemaPath; 2032 out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; 2033 $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); 2034 var $passData = $data + '[' + $idx + ']'; 2035 $it.dataPathArr[$dataNxt] = $idx; 2036 var $code = it.validate($it); 2037 $it.baseId = $currentBaseId; 2038 if (it.util.varOccurences($code, $nextData) < 2) { 2039 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 2040 } else { 2041 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 2042 } 2043 out += ' if (' + ($nextValid) + ') break; } '; 2044 it.compositeRule = $it.compositeRule = $wasComposite; 2045 out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; 2046 } else { 2047 out += ' if (' + ($data) + '.length == 0) {'; 2048 } 2049 var $$outStack = $$outStack || []; 2050 $$outStack.push(out); 2051 out = ''; /* istanbul ignore else */ 2052 if (it.createErrors !== false) { 2053 out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 2054 if (it.opts.messages !== false) { 2055 out += ' , message: \'should contain a valid item\' '; 2056 } 2057 if (it.opts.verbose) { 2058 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2059 } 2060 out += ' } '; 2061 } else { 2062 out += ' {} '; 2063 } 2064 var __err = out; 2065 out = $$outStack.pop(); 2066 if (!it.compositeRule && $breakOnError) { 2067 /* istanbul ignore if */ 2068 if (it.async) { 2069 out += ' throw new ValidationError([' + (__err) + ']); '; 2070 } else { 2071 out += ' validate.errors = [' + (__err) + ']; return false; '; 2072 } 2073 } else { 2074 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2075 } 2076 out += ' } else { '; 2077 if ($nonEmptySchema) { 2078 out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; 2079 } 2080 if (it.opts.allErrors) { 2081 out += ' } '; 2082 } 2083 return out; 2084} 2085 2086},{}],22:[function(require,module,exports){ 2087'use strict'; 2088module.exports = function generate_custom(it, $keyword, $ruleType) { 2089 var out = ' '; 2090 var $lvl = it.level; 2091 var $dataLvl = it.dataLevel; 2092 var $schema = it.schema[$keyword]; 2093 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2094 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2095 var $breakOnError = !it.opts.allErrors; 2096 var $errorKeyword; 2097 var $data = 'data' + ($dataLvl || ''); 2098 var $valid = 'valid' + $lvl; 2099 var $errs = 'errs__' + $lvl; 2100 var $isData = it.opts.$data && $schema && $schema.$data, 2101 $schemaValue; 2102 if ($isData) { 2103 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 2104 $schemaValue = 'schema' + $lvl; 2105 } else { 2106 $schemaValue = $schema; 2107 } 2108 var $rule = this, 2109 $definition = 'definition' + $lvl, 2110 $rDef = $rule.definition, 2111 $closingBraces = ''; 2112 var $compile, $inline, $macro, $ruleValidate, $validateCode; 2113 if ($isData && $rDef.$data) { 2114 $validateCode = 'keywordValidate' + $lvl; 2115 var $validateSchema = $rDef.validateSchema; 2116 out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; 2117 } else { 2118 $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); 2119 if (!$ruleValidate) return; 2120 $schemaValue = 'validate.schema' + $schemaPath; 2121 $validateCode = $ruleValidate.code; 2122 $compile = $rDef.compile; 2123 $inline = $rDef.inline; 2124 $macro = $rDef.macro; 2125 } 2126 var $ruleErrs = $validateCode + '.errors', 2127 $i = 'i' + $lvl, 2128 $ruleErr = 'ruleErr' + $lvl, 2129 $asyncKeyword = $rDef.async; 2130 if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); 2131 if (!($inline || $macro)) { 2132 out += '' + ($ruleErrs) + ' = null;'; 2133 } 2134 out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; 2135 if ($isData && $rDef.$data) { 2136 $closingBraces += '}'; 2137 out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; 2138 if ($validateSchema) { 2139 $closingBraces += '}'; 2140 out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; 2141 } 2142 } 2143 if ($inline) { 2144 if ($rDef.statements) { 2145 out += ' ' + ($ruleValidate.validate) + ' '; 2146 } else { 2147 out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; 2148 } 2149 } else if ($macro) { 2150 var $it = it.util.copy(it); 2151 var $closingBraces = ''; 2152 $it.level++; 2153 var $nextValid = 'valid' + $it.level; 2154 $it.schema = $ruleValidate.validate; 2155 $it.schemaPath = ''; 2156 var $wasComposite = it.compositeRule; 2157 it.compositeRule = $it.compositeRule = true; 2158 var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); 2159 it.compositeRule = $it.compositeRule = $wasComposite; 2160 out += ' ' + ($code); 2161 } else { 2162 var $$outStack = $$outStack || []; 2163 $$outStack.push(out); 2164 out = ''; 2165 out += ' ' + ($validateCode) + '.call( '; 2166 if (it.opts.passContext) { 2167 out += 'this'; 2168 } else { 2169 out += 'self'; 2170 } 2171 if ($compile || $rDef.schema === false) { 2172 out += ' , ' + ($data) + ' '; 2173 } else { 2174 out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; 2175 } 2176 out += ' , (dataPath || \'\')'; 2177 if (it.errorPath != '""') { 2178 out += ' + ' + (it.errorPath); 2179 } 2180 var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', 2181 $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; 2182 out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; 2183 var def_callRuleValidate = out; 2184 out = $$outStack.pop(); 2185 if ($rDef.errors === false) { 2186 out += ' ' + ($valid) + ' = '; 2187 if ($asyncKeyword) { 2188 out += 'await '; 2189 } 2190 out += '' + (def_callRuleValidate) + '; '; 2191 } else { 2192 if ($asyncKeyword) { 2193 $ruleErrs = 'customErrors' + $lvl; 2194 out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; 2195 } else { 2196 out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; 2197 } 2198 } 2199 } 2200 if ($rDef.modifying) { 2201 out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; 2202 } 2203 out += '' + ($closingBraces); 2204 if ($rDef.valid) { 2205 if ($breakOnError) { 2206 out += ' if (true) { '; 2207 } 2208 } else { 2209 out += ' if ( '; 2210 if ($rDef.valid === undefined) { 2211 out += ' !'; 2212 if ($macro) { 2213 out += '' + ($nextValid); 2214 } else { 2215 out += '' + ($valid); 2216 } 2217 } else { 2218 out += ' ' + (!$rDef.valid) + ' '; 2219 } 2220 out += ') { '; 2221 $errorKeyword = $rule.keyword; 2222 var $$outStack = $$outStack || []; 2223 $$outStack.push(out); 2224 out = ''; 2225 var $$outStack = $$outStack || []; 2226 $$outStack.push(out); 2227 out = ''; /* istanbul ignore else */ 2228 if (it.createErrors !== false) { 2229 out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; 2230 if (it.opts.messages !== false) { 2231 out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; 2232 } 2233 if (it.opts.verbose) { 2234 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2235 } 2236 out += ' } '; 2237 } else { 2238 out += ' {} '; 2239 } 2240 var __err = out; 2241 out = $$outStack.pop(); 2242 if (!it.compositeRule && $breakOnError) { 2243 /* istanbul ignore if */ 2244 if (it.async) { 2245 out += ' throw new ValidationError([' + (__err) + ']); '; 2246 } else { 2247 out += ' validate.errors = [' + (__err) + ']; return false; '; 2248 } 2249 } else { 2250 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2251 } 2252 var def_customError = out; 2253 out = $$outStack.pop(); 2254 if ($inline) { 2255 if ($rDef.errors) { 2256 if ($rDef.errors != 'full') { 2257 out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } '; 2258 if (it.opts.verbose) { 2259 out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; 2260 } 2261 out += ' } '; 2262 } 2263 } else { 2264 if ($rDef.errors === false) { 2265 out += ' ' + (def_customError) + ' '; 2266 } else { 2267 out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else { for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } '; 2268 if (it.opts.verbose) { 2269 out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; 2270 } 2271 out += ' } } '; 2272 } 2273 } 2274 } else if ($macro) { 2275 out += ' var err = '; /* istanbul ignore else */ 2276 if (it.createErrors !== false) { 2277 out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; 2278 if (it.opts.messages !== false) { 2279 out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; 2280 } 2281 if (it.opts.verbose) { 2282 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2283 } 2284 out += ' } '; 2285 } else { 2286 out += ' {} '; 2287 } 2288 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2289 if (!it.compositeRule && $breakOnError) { 2290 /* istanbul ignore if */ 2291 if (it.async) { 2292 out += ' throw new ValidationError(vErrors); '; 2293 } else { 2294 out += ' validate.errors = vErrors; return false; '; 2295 } 2296 } 2297 } else { 2298 if ($rDef.errors === false) { 2299 out += ' ' + (def_customError) + ' '; 2300 } else { 2301 out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length; for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; '; 2302 if (it.opts.verbose) { 2303 out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; 2304 } 2305 out += ' } } else { ' + (def_customError) + ' } '; 2306 } 2307 } 2308 out += ' } '; 2309 if ($breakOnError) { 2310 out += ' else { '; 2311 } 2312 } 2313 return out; 2314} 2315 2316},{}],23:[function(require,module,exports){ 2317'use strict'; 2318module.exports = function generate_dependencies(it, $keyword, $ruleType) { 2319 var out = ' '; 2320 var $lvl = it.level; 2321 var $dataLvl = it.dataLevel; 2322 var $schema = it.schema[$keyword]; 2323 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2324 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2325 var $breakOnError = !it.opts.allErrors; 2326 var $data = 'data' + ($dataLvl || ''); 2327 var $errs = 'errs__' + $lvl; 2328 var $it = it.util.copy(it); 2329 var $closingBraces = ''; 2330 $it.level++; 2331 var $nextValid = 'valid' + $it.level; 2332 var $schemaDeps = {}, 2333 $propertyDeps = {}, 2334 $ownProperties = it.opts.ownProperties; 2335 for ($property in $schema) { 2336 if ($property == '__proto__') continue; 2337 var $sch = $schema[$property]; 2338 var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps; 2339 $deps[$property] = $sch; 2340 } 2341 out += 'var ' + ($errs) + ' = errors;'; 2342 var $currentErrorPath = it.errorPath; 2343 out += 'var missing' + ($lvl) + ';'; 2344 for (var $property in $propertyDeps) { 2345 $deps = $propertyDeps[$property]; 2346 if ($deps.length) { 2347 out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; 2348 if ($ownProperties) { 2349 out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; 2350 } 2351 if ($breakOnError) { 2352 out += ' && ( '; 2353 var arr1 = $deps; 2354 if (arr1) { 2355 var $propertyKey, $i = -1, 2356 l1 = arr1.length - 1; 2357 while ($i < l1) { 2358 $propertyKey = arr1[$i += 1]; 2359 if ($i) { 2360 out += ' || '; 2361 } 2362 var $prop = it.util.getProperty($propertyKey), 2363 $useData = $data + $prop; 2364 out += ' ( ( ' + ($useData) + ' === undefined '; 2365 if ($ownProperties) { 2366 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 2367 } 2368 out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; 2369 } 2370 } 2371 out += ')) { '; 2372 var $propertyPath = 'missing' + $lvl, 2373 $missingProperty = '\' + ' + $propertyPath + ' + \''; 2374 if (it.opts._errorDataPathProperty) { 2375 it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; 2376 } 2377 var $$outStack = $$outStack || []; 2378 $$outStack.push(out); 2379 out = ''; /* istanbul ignore else */ 2380 if (it.createErrors !== false) { 2381 out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } '; 2382 if (it.opts.messages !== false) { 2383 out += ' , message: \'should have '; 2384 if ($deps.length == 1) { 2385 out += 'property ' + (it.util.escapeQuotes($deps[0])); 2386 } else { 2387 out += 'properties ' + (it.util.escapeQuotes($deps.join(", "))); 2388 } 2389 out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' '; 2390 } 2391 if (it.opts.verbose) { 2392 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2393 } 2394 out += ' } '; 2395 } else { 2396 out += ' {} '; 2397 } 2398 var __err = out; 2399 out = $$outStack.pop(); 2400 if (!it.compositeRule && $breakOnError) { 2401 /* istanbul ignore if */ 2402 if (it.async) { 2403 out += ' throw new ValidationError([' + (__err) + ']); '; 2404 } else { 2405 out += ' validate.errors = [' + (__err) + ']; return false; '; 2406 } 2407 } else { 2408 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2409 } 2410 } else { 2411 out += ' ) { '; 2412 var arr2 = $deps; 2413 if (arr2) { 2414 var $propertyKey, i2 = -1, 2415 l2 = arr2.length - 1; 2416 while (i2 < l2) { 2417 $propertyKey = arr2[i2 += 1]; 2418 var $prop = it.util.getProperty($propertyKey), 2419 $missingProperty = it.util.escapeQuotes($propertyKey), 2420 $useData = $data + $prop; 2421 if (it.opts._errorDataPathProperty) { 2422 it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); 2423 } 2424 out += ' if ( ' + ($useData) + ' === undefined '; 2425 if ($ownProperties) { 2426 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 2427 } 2428 out += ') { var err = '; /* istanbul ignore else */ 2429 if (it.createErrors !== false) { 2430 out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } '; 2431 if (it.opts.messages !== false) { 2432 out += ' , message: \'should have '; 2433 if ($deps.length == 1) { 2434 out += 'property ' + (it.util.escapeQuotes($deps[0])); 2435 } else { 2436 out += 'properties ' + (it.util.escapeQuotes($deps.join(", "))); 2437 } 2438 out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' '; 2439 } 2440 if (it.opts.verbose) { 2441 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2442 } 2443 out += ' } '; 2444 } else { 2445 out += ' {} '; 2446 } 2447 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; 2448 } 2449 } 2450 } 2451 out += ' } '; 2452 if ($breakOnError) { 2453 $closingBraces += '}'; 2454 out += ' else { '; 2455 } 2456 } 2457 } 2458 it.errorPath = $currentErrorPath; 2459 var $currentBaseId = $it.baseId; 2460 for (var $property in $schemaDeps) { 2461 var $sch = $schemaDeps[$property]; 2462 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 2463 out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; 2464 if ($ownProperties) { 2465 out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; 2466 } 2467 out += ') { '; 2468 $it.schema = $sch; 2469 $it.schemaPath = $schemaPath + it.util.getProperty($property); 2470 $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); 2471 out += ' ' + (it.validate($it)) + ' '; 2472 $it.baseId = $currentBaseId; 2473 out += ' } '; 2474 if ($breakOnError) { 2475 out += ' if (' + ($nextValid) + ') { '; 2476 $closingBraces += '}'; 2477 } 2478 } 2479 } 2480 if ($breakOnError) { 2481 out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; 2482 } 2483 return out; 2484} 2485 2486},{}],24:[function(require,module,exports){ 2487'use strict'; 2488module.exports = function generate_enum(it, $keyword, $ruleType) { 2489 var out = ' '; 2490 var $lvl = it.level; 2491 var $dataLvl = it.dataLevel; 2492 var $schema = it.schema[$keyword]; 2493 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2494 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2495 var $breakOnError = !it.opts.allErrors; 2496 var $data = 'data' + ($dataLvl || ''); 2497 var $valid = 'valid' + $lvl; 2498 var $isData = it.opts.$data && $schema && $schema.$data, 2499 $schemaValue; 2500 if ($isData) { 2501 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 2502 $schemaValue = 'schema' + $lvl; 2503 } else { 2504 $schemaValue = $schema; 2505 } 2506 var $i = 'i' + $lvl, 2507 $vSchema = 'schema' + $lvl; 2508 if (!$isData) { 2509 out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; 2510 } 2511 out += 'var ' + ($valid) + ';'; 2512 if ($isData) { 2513 out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; 2514 } 2515 out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; 2516 if ($isData) { 2517 out += ' } '; 2518 } 2519 out += ' if (!' + ($valid) + ') { '; 2520 var $$outStack = $$outStack || []; 2521 $$outStack.push(out); 2522 out = ''; /* istanbul ignore else */ 2523 if (it.createErrors !== false) { 2524 out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; 2525 if (it.opts.messages !== false) { 2526 out += ' , message: \'should be equal to one of the allowed values\' '; 2527 } 2528 if (it.opts.verbose) { 2529 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2530 } 2531 out += ' } '; 2532 } else { 2533 out += ' {} '; 2534 } 2535 var __err = out; 2536 out = $$outStack.pop(); 2537 if (!it.compositeRule && $breakOnError) { 2538 /* istanbul ignore if */ 2539 if (it.async) { 2540 out += ' throw new ValidationError([' + (__err) + ']); '; 2541 } else { 2542 out += ' validate.errors = [' + (__err) + ']; return false; '; 2543 } 2544 } else { 2545 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2546 } 2547 out += ' }'; 2548 if ($breakOnError) { 2549 out += ' else { '; 2550 } 2551 return out; 2552} 2553 2554},{}],25:[function(require,module,exports){ 2555'use strict'; 2556module.exports = function generate_format(it, $keyword, $ruleType) { 2557 var out = ' '; 2558 var $lvl = it.level; 2559 var $dataLvl = it.dataLevel; 2560 var $schema = it.schema[$keyword]; 2561 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2562 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2563 var $breakOnError = !it.opts.allErrors; 2564 var $data = 'data' + ($dataLvl || ''); 2565 if (it.opts.format === false) { 2566 if ($breakOnError) { 2567 out += ' if (true) { '; 2568 } 2569 return out; 2570 } 2571 var $isData = it.opts.$data && $schema && $schema.$data, 2572 $schemaValue; 2573 if ($isData) { 2574 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 2575 $schemaValue = 'schema' + $lvl; 2576 } else { 2577 $schemaValue = $schema; 2578 } 2579 var $unknownFormats = it.opts.unknownFormats, 2580 $allowUnknown = Array.isArray($unknownFormats); 2581 if ($isData) { 2582 var $format = 'format' + $lvl, 2583 $isObject = 'isObject' + $lvl, 2584 $formatType = 'formatType' + $lvl; 2585 out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; 2586 if (it.async) { 2587 out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; 2588 } 2589 out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( '; 2590 if ($isData) { 2591 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; 2592 } 2593 out += ' ('; 2594 if ($unknownFormats != 'ignore') { 2595 out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; 2596 if ($allowUnknown) { 2597 out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; 2598 } 2599 out += ') || '; 2600 } 2601 out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; 2602 if (it.async) { 2603 out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; 2604 } else { 2605 out += ' ' + ($format) + '(' + ($data) + ') '; 2606 } 2607 out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; 2608 } else { 2609 var $format = it.formats[$schema]; 2610 if (!$format) { 2611 if ($unknownFormats == 'ignore') { 2612 it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); 2613 if ($breakOnError) { 2614 out += ' if (true) { '; 2615 } 2616 return out; 2617 } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { 2618 if ($breakOnError) { 2619 out += ' if (true) { '; 2620 } 2621 return out; 2622 } else { 2623 throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); 2624 } 2625 } 2626 var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; 2627 var $formatType = $isObject && $format.type || 'string'; 2628 if ($isObject) { 2629 var $async = $format.async === true; 2630 $format = $format.validate; 2631 } 2632 if ($formatType != $ruleType) { 2633 if ($breakOnError) { 2634 out += ' if (true) { '; 2635 } 2636 return out; 2637 } 2638 if ($async) { 2639 if (!it.async) throw new Error('async format in sync schema'); 2640 var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; 2641 out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; 2642 } else { 2643 out += ' if (! '; 2644 var $formatRef = 'formats' + it.util.getProperty($schema); 2645 if ($isObject) $formatRef += '.validate'; 2646 if (typeof $format == 'function') { 2647 out += ' ' + ($formatRef) + '(' + ($data) + ') '; 2648 } else { 2649 out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; 2650 } 2651 out += ') { '; 2652 } 2653 } 2654 var $$outStack = $$outStack || []; 2655 $$outStack.push(out); 2656 out = ''; /* istanbul ignore else */ 2657 if (it.createErrors !== false) { 2658 out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; 2659 if ($isData) { 2660 out += '' + ($schemaValue); 2661 } else { 2662 out += '' + (it.util.toQuotedString($schema)); 2663 } 2664 out += ' } '; 2665 if (it.opts.messages !== false) { 2666 out += ' , message: \'should match format "'; 2667 if ($isData) { 2668 out += '\' + ' + ($schemaValue) + ' + \''; 2669 } else { 2670 out += '' + (it.util.escapeQuotes($schema)); 2671 } 2672 out += '"\' '; 2673 } 2674 if (it.opts.verbose) { 2675 out += ' , schema: '; 2676 if ($isData) { 2677 out += 'validate.schema' + ($schemaPath); 2678 } else { 2679 out += '' + (it.util.toQuotedString($schema)); 2680 } 2681 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2682 } 2683 out += ' } '; 2684 } else { 2685 out += ' {} '; 2686 } 2687 var __err = out; 2688 out = $$outStack.pop(); 2689 if (!it.compositeRule && $breakOnError) { 2690 /* istanbul ignore if */ 2691 if (it.async) { 2692 out += ' throw new ValidationError([' + (__err) + ']); '; 2693 } else { 2694 out += ' validate.errors = [' + (__err) + ']; return false; '; 2695 } 2696 } else { 2697 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2698 } 2699 out += ' } '; 2700 if ($breakOnError) { 2701 out += ' else { '; 2702 } 2703 return out; 2704} 2705 2706},{}],26:[function(require,module,exports){ 2707'use strict'; 2708module.exports = function generate_if(it, $keyword, $ruleType) { 2709 var out = ' '; 2710 var $lvl = it.level; 2711 var $dataLvl = it.dataLevel; 2712 var $schema = it.schema[$keyword]; 2713 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2714 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2715 var $breakOnError = !it.opts.allErrors; 2716 var $data = 'data' + ($dataLvl || ''); 2717 var $valid = 'valid' + $lvl; 2718 var $errs = 'errs__' + $lvl; 2719 var $it = it.util.copy(it); 2720 $it.level++; 2721 var $nextValid = 'valid' + $it.level; 2722 var $thenSch = it.schema['then'], 2723 $elseSch = it.schema['else'], 2724 $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)), 2725 $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)), 2726 $currentBaseId = $it.baseId; 2727 if ($thenPresent || $elsePresent) { 2728 var $ifClause; 2729 $it.createErrors = false; 2730 $it.schema = $schema; 2731 $it.schemaPath = $schemaPath; 2732 $it.errSchemaPath = $errSchemaPath; 2733 out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; 2734 var $wasComposite = it.compositeRule; 2735 it.compositeRule = $it.compositeRule = true; 2736 out += ' ' + (it.validate($it)) + ' '; 2737 $it.baseId = $currentBaseId; 2738 $it.createErrors = true; 2739 out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; 2740 it.compositeRule = $it.compositeRule = $wasComposite; 2741 if ($thenPresent) { 2742 out += ' if (' + ($nextValid) + ') { '; 2743 $it.schema = it.schema['then']; 2744 $it.schemaPath = it.schemaPath + '.then'; 2745 $it.errSchemaPath = it.errSchemaPath + '/then'; 2746 out += ' ' + (it.validate($it)) + ' '; 2747 $it.baseId = $currentBaseId; 2748 out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; 2749 if ($thenPresent && $elsePresent) { 2750 $ifClause = 'ifClause' + $lvl; 2751 out += ' var ' + ($ifClause) + ' = \'then\'; '; 2752 } else { 2753 $ifClause = '\'then\''; 2754 } 2755 out += ' } '; 2756 if ($elsePresent) { 2757 out += ' else { '; 2758 } 2759 } else { 2760 out += ' if (!' + ($nextValid) + ') { '; 2761 } 2762 if ($elsePresent) { 2763 $it.schema = it.schema['else']; 2764 $it.schemaPath = it.schemaPath + '.else'; 2765 $it.errSchemaPath = it.errSchemaPath + '/else'; 2766 out += ' ' + (it.validate($it)) + ' '; 2767 $it.baseId = $currentBaseId; 2768 out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; 2769 if ($thenPresent && $elsePresent) { 2770 $ifClause = 'ifClause' + $lvl; 2771 out += ' var ' + ($ifClause) + ' = \'else\'; '; 2772 } else { 2773 $ifClause = '\'else\''; 2774 } 2775 out += ' } '; 2776 } 2777 out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ 2778 if (it.createErrors !== false) { 2779 out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; 2780 if (it.opts.messages !== false) { 2781 out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; 2782 } 2783 if (it.opts.verbose) { 2784 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2785 } 2786 out += ' } '; 2787 } else { 2788 out += ' {} '; 2789 } 2790 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2791 if (!it.compositeRule && $breakOnError) { 2792 /* istanbul ignore if */ 2793 if (it.async) { 2794 out += ' throw new ValidationError(vErrors); '; 2795 } else { 2796 out += ' validate.errors = vErrors; return false; '; 2797 } 2798 } 2799 out += ' } '; 2800 if ($breakOnError) { 2801 out += ' else { '; 2802 } 2803 } else { 2804 if ($breakOnError) { 2805 out += ' if (true) { '; 2806 } 2807 } 2808 return out; 2809} 2810 2811},{}],27:[function(require,module,exports){ 2812'use strict'; 2813 2814//all requires must be explicit because browserify won't work with dynamic requires 2815module.exports = { 2816 '$ref': require('./ref'), 2817 allOf: require('./allOf'), 2818 anyOf: require('./anyOf'), 2819 '$comment': require('./comment'), 2820 const: require('./const'), 2821 contains: require('./contains'), 2822 dependencies: require('./dependencies'), 2823 'enum': require('./enum'), 2824 format: require('./format'), 2825 'if': require('./if'), 2826 items: require('./items'), 2827 maximum: require('./_limit'), 2828 minimum: require('./_limit'), 2829 maxItems: require('./_limitItems'), 2830 minItems: require('./_limitItems'), 2831 maxLength: require('./_limitLength'), 2832 minLength: require('./_limitLength'), 2833 maxProperties: require('./_limitProperties'), 2834 minProperties: require('./_limitProperties'), 2835 multipleOf: require('./multipleOf'), 2836 not: require('./not'), 2837 oneOf: require('./oneOf'), 2838 pattern: require('./pattern'), 2839 properties: require('./properties'), 2840 propertyNames: require('./propertyNames'), 2841 required: require('./required'), 2842 uniqueItems: require('./uniqueItems'), 2843 validate: require('./validate') 2844}; 2845 2846},{"./_limit":13,"./_limitItems":14,"./_limitLength":15,"./_limitProperties":16,"./allOf":17,"./anyOf":18,"./comment":19,"./const":20,"./contains":21,"./dependencies":23,"./enum":24,"./format":25,"./if":26,"./items":28,"./multipleOf":29,"./not":30,"./oneOf":31,"./pattern":32,"./properties":33,"./propertyNames":34,"./ref":35,"./required":36,"./uniqueItems":37,"./validate":38}],28:[function(require,module,exports){ 2847'use strict'; 2848module.exports = function generate_items(it, $keyword, $ruleType) { 2849 var out = ' '; 2850 var $lvl = it.level; 2851 var $dataLvl = it.dataLevel; 2852 var $schema = it.schema[$keyword]; 2853 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2854 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2855 var $breakOnError = !it.opts.allErrors; 2856 var $data = 'data' + ($dataLvl || ''); 2857 var $valid = 'valid' + $lvl; 2858 var $errs = 'errs__' + $lvl; 2859 var $it = it.util.copy(it); 2860 var $closingBraces = ''; 2861 $it.level++; 2862 var $nextValid = 'valid' + $it.level; 2863 var $idx = 'i' + $lvl, 2864 $dataNxt = $it.dataLevel = it.dataLevel + 1, 2865 $nextData = 'data' + $dataNxt, 2866 $currentBaseId = it.baseId; 2867 out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; 2868 if (Array.isArray($schema)) { 2869 var $additionalItems = it.schema.additionalItems; 2870 if ($additionalItems === false) { 2871 out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; 2872 var $currErrSchemaPath = $errSchemaPath; 2873 $errSchemaPath = it.errSchemaPath + '/additionalItems'; 2874 out += ' if (!' + ($valid) + ') { '; 2875 var $$outStack = $$outStack || []; 2876 $$outStack.push(out); 2877 out = ''; /* istanbul ignore else */ 2878 if (it.createErrors !== false) { 2879 out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; 2880 if (it.opts.messages !== false) { 2881 out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; 2882 } 2883 if (it.opts.verbose) { 2884 out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 2885 } 2886 out += ' } '; 2887 } else { 2888 out += ' {} '; 2889 } 2890 var __err = out; 2891 out = $$outStack.pop(); 2892 if (!it.compositeRule && $breakOnError) { 2893 /* istanbul ignore if */ 2894 if (it.async) { 2895 out += ' throw new ValidationError([' + (__err) + ']); '; 2896 } else { 2897 out += ' validate.errors = [' + (__err) + ']; return false; '; 2898 } 2899 } else { 2900 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 2901 } 2902 out += ' } '; 2903 $errSchemaPath = $currErrSchemaPath; 2904 if ($breakOnError) { 2905 $closingBraces += '}'; 2906 out += ' else { '; 2907 } 2908 } 2909 var arr1 = $schema; 2910 if (arr1) { 2911 var $sch, $i = -1, 2912 l1 = arr1.length - 1; 2913 while ($i < l1) { 2914 $sch = arr1[$i += 1]; 2915 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 2916 out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; 2917 var $passData = $data + '[' + $i + ']'; 2918 $it.schema = $sch; 2919 $it.schemaPath = $schemaPath + '[' + $i + ']'; 2920 $it.errSchemaPath = $errSchemaPath + '/' + $i; 2921 $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); 2922 $it.dataPathArr[$dataNxt] = $i; 2923 var $code = it.validate($it); 2924 $it.baseId = $currentBaseId; 2925 if (it.util.varOccurences($code, $nextData) < 2) { 2926 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 2927 } else { 2928 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 2929 } 2930 out += ' } '; 2931 if ($breakOnError) { 2932 out += ' if (' + ($nextValid) + ') { '; 2933 $closingBraces += '}'; 2934 } 2935 } 2936 } 2937 } 2938 if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) { 2939 $it.schema = $additionalItems; 2940 $it.schemaPath = it.schemaPath + '.additionalItems'; 2941 $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; 2942 out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; 2943 $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); 2944 var $passData = $data + '[' + $idx + ']'; 2945 $it.dataPathArr[$dataNxt] = $idx; 2946 var $code = it.validate($it); 2947 $it.baseId = $currentBaseId; 2948 if (it.util.varOccurences($code, $nextData) < 2) { 2949 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 2950 } else { 2951 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 2952 } 2953 if ($breakOnError) { 2954 out += ' if (!' + ($nextValid) + ') break; '; 2955 } 2956 out += ' } } '; 2957 if ($breakOnError) { 2958 out += ' if (' + ($nextValid) + ') { '; 2959 $closingBraces += '}'; 2960 } 2961 } 2962 } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) { 2963 $it.schema = $schema; 2964 $it.schemaPath = $schemaPath; 2965 $it.errSchemaPath = $errSchemaPath; 2966 out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; 2967 $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); 2968 var $passData = $data + '[' + $idx + ']'; 2969 $it.dataPathArr[$dataNxt] = $idx; 2970 var $code = it.validate($it); 2971 $it.baseId = $currentBaseId; 2972 if (it.util.varOccurences($code, $nextData) < 2) { 2973 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 2974 } else { 2975 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 2976 } 2977 if ($breakOnError) { 2978 out += ' if (!' + ($nextValid) + ') break; '; 2979 } 2980 out += ' }'; 2981 } 2982 if ($breakOnError) { 2983 out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; 2984 } 2985 return out; 2986} 2987 2988},{}],29:[function(require,module,exports){ 2989'use strict'; 2990module.exports = function generate_multipleOf(it, $keyword, $ruleType) { 2991 var out = ' '; 2992 var $lvl = it.level; 2993 var $dataLvl = it.dataLevel; 2994 var $schema = it.schema[$keyword]; 2995 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 2996 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 2997 var $breakOnError = !it.opts.allErrors; 2998 var $data = 'data' + ($dataLvl || ''); 2999 var $isData = it.opts.$data && $schema && $schema.$data, 3000 $schemaValue; 3001 if ($isData) { 3002 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 3003 $schemaValue = 'schema' + $lvl; 3004 } else { 3005 $schemaValue = $schema; 3006 } 3007 if (!($isData || typeof $schema == 'number')) { 3008 throw new Error($keyword + ' must be number'); 3009 } 3010 out += 'var division' + ($lvl) + ';if ('; 3011 if ($isData) { 3012 out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; 3013 } 3014 out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; 3015 if (it.opts.multipleOfPrecision) { 3016 out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; 3017 } else { 3018 out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; 3019 } 3020 out += ' ) '; 3021 if ($isData) { 3022 out += ' ) '; 3023 } 3024 out += ' ) { '; 3025 var $$outStack = $$outStack || []; 3026 $$outStack.push(out); 3027 out = ''; /* istanbul ignore else */ 3028 if (it.createErrors !== false) { 3029 out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; 3030 if (it.opts.messages !== false) { 3031 out += ' , message: \'should be multiple of '; 3032 if ($isData) { 3033 out += '\' + ' + ($schemaValue); 3034 } else { 3035 out += '' + ($schemaValue) + '\''; 3036 } 3037 } 3038 if (it.opts.verbose) { 3039 out += ' , schema: '; 3040 if ($isData) { 3041 out += 'validate.schema' + ($schemaPath); 3042 } else { 3043 out += '' + ($schema); 3044 } 3045 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3046 } 3047 out += ' } '; 3048 } else { 3049 out += ' {} '; 3050 } 3051 var __err = out; 3052 out = $$outStack.pop(); 3053 if (!it.compositeRule && $breakOnError) { 3054 /* istanbul ignore if */ 3055 if (it.async) { 3056 out += ' throw new ValidationError([' + (__err) + ']); '; 3057 } else { 3058 out += ' validate.errors = [' + (__err) + ']; return false; '; 3059 } 3060 } else { 3061 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3062 } 3063 out += '} '; 3064 if ($breakOnError) { 3065 out += ' else { '; 3066 } 3067 return out; 3068} 3069 3070},{}],30:[function(require,module,exports){ 3071'use strict'; 3072module.exports = function generate_not(it, $keyword, $ruleType) { 3073 var out = ' '; 3074 var $lvl = it.level; 3075 var $dataLvl = it.dataLevel; 3076 var $schema = it.schema[$keyword]; 3077 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3078 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3079 var $breakOnError = !it.opts.allErrors; 3080 var $data = 'data' + ($dataLvl || ''); 3081 var $errs = 'errs__' + $lvl; 3082 var $it = it.util.copy(it); 3083 $it.level++; 3084 var $nextValid = 'valid' + $it.level; 3085 if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) { 3086 $it.schema = $schema; 3087 $it.schemaPath = $schemaPath; 3088 $it.errSchemaPath = $errSchemaPath; 3089 out += ' var ' + ($errs) + ' = errors; '; 3090 var $wasComposite = it.compositeRule; 3091 it.compositeRule = $it.compositeRule = true; 3092 $it.createErrors = false; 3093 var $allErrorsOption; 3094 if ($it.opts.allErrors) { 3095 $allErrorsOption = $it.opts.allErrors; 3096 $it.opts.allErrors = false; 3097 } 3098 out += ' ' + (it.validate($it)) + ' '; 3099 $it.createErrors = true; 3100 if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; 3101 it.compositeRule = $it.compositeRule = $wasComposite; 3102 out += ' if (' + ($nextValid) + ') { '; 3103 var $$outStack = $$outStack || []; 3104 $$outStack.push(out); 3105 out = ''; /* istanbul ignore else */ 3106 if (it.createErrors !== false) { 3107 out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 3108 if (it.opts.messages !== false) { 3109 out += ' , message: \'should NOT be valid\' '; 3110 } 3111 if (it.opts.verbose) { 3112 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3113 } 3114 out += ' } '; 3115 } else { 3116 out += ' {} '; 3117 } 3118 var __err = out; 3119 out = $$outStack.pop(); 3120 if (!it.compositeRule && $breakOnError) { 3121 /* istanbul ignore if */ 3122 if (it.async) { 3123 out += ' throw new ValidationError([' + (__err) + ']); '; 3124 } else { 3125 out += ' validate.errors = [' + (__err) + ']; return false; '; 3126 } 3127 } else { 3128 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3129 } 3130 out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; 3131 if (it.opts.allErrors) { 3132 out += ' } '; 3133 } 3134 } else { 3135 out += ' var err = '; /* istanbul ignore else */ 3136 if (it.createErrors !== false) { 3137 out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 3138 if (it.opts.messages !== false) { 3139 out += ' , message: \'should NOT be valid\' '; 3140 } 3141 if (it.opts.verbose) { 3142 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3143 } 3144 out += ' } '; 3145 } else { 3146 out += ' {} '; 3147 } 3148 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3149 if ($breakOnError) { 3150 out += ' if (false) { '; 3151 } 3152 } 3153 return out; 3154} 3155 3156},{}],31:[function(require,module,exports){ 3157'use strict'; 3158module.exports = function generate_oneOf(it, $keyword, $ruleType) { 3159 var out = ' '; 3160 var $lvl = it.level; 3161 var $dataLvl = it.dataLevel; 3162 var $schema = it.schema[$keyword]; 3163 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3164 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3165 var $breakOnError = !it.opts.allErrors; 3166 var $data = 'data' + ($dataLvl || ''); 3167 var $valid = 'valid' + $lvl; 3168 var $errs = 'errs__' + $lvl; 3169 var $it = it.util.copy(it); 3170 var $closingBraces = ''; 3171 $it.level++; 3172 var $nextValid = 'valid' + $it.level; 3173 var $currentBaseId = $it.baseId, 3174 $prevValid = 'prevValid' + $lvl, 3175 $passingSchemas = 'passingSchemas' + $lvl; 3176 out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; 3177 var $wasComposite = it.compositeRule; 3178 it.compositeRule = $it.compositeRule = true; 3179 var arr1 = $schema; 3180 if (arr1) { 3181 var $sch, $i = -1, 3182 l1 = arr1.length - 1; 3183 while ($i < l1) { 3184 $sch = arr1[$i += 1]; 3185 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 3186 $it.schema = $sch; 3187 $it.schemaPath = $schemaPath + '[' + $i + ']'; 3188 $it.errSchemaPath = $errSchemaPath + '/' + $i; 3189 out += ' ' + (it.validate($it)) + ' '; 3190 $it.baseId = $currentBaseId; 3191 } else { 3192 out += ' var ' + ($nextValid) + ' = true; '; 3193 } 3194 if ($i) { 3195 out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; 3196 $closingBraces += '}'; 3197 } 3198 out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; 3199 } 3200 } 3201 it.compositeRule = $it.compositeRule = $wasComposite; 3202 out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ 3203 if (it.createErrors !== false) { 3204 out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; 3205 if (it.opts.messages !== false) { 3206 out += ' , message: \'should match exactly one schema in oneOf\' '; 3207 } 3208 if (it.opts.verbose) { 3209 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3210 } 3211 out += ' } '; 3212 } else { 3213 out += ' {} '; 3214 } 3215 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3216 if (!it.compositeRule && $breakOnError) { 3217 /* istanbul ignore if */ 3218 if (it.async) { 3219 out += ' throw new ValidationError(vErrors); '; 3220 } else { 3221 out += ' validate.errors = vErrors; return false; '; 3222 } 3223 } 3224 out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; 3225 if (it.opts.allErrors) { 3226 out += ' } '; 3227 } 3228 return out; 3229} 3230 3231},{}],32:[function(require,module,exports){ 3232'use strict'; 3233module.exports = function generate_pattern(it, $keyword, $ruleType) { 3234 var out = ' '; 3235 var $lvl = it.level; 3236 var $dataLvl = it.dataLevel; 3237 var $schema = it.schema[$keyword]; 3238 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3239 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3240 var $breakOnError = !it.opts.allErrors; 3241 var $data = 'data' + ($dataLvl || ''); 3242 var $isData = it.opts.$data && $schema && $schema.$data, 3243 $schemaValue; 3244 if ($isData) { 3245 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 3246 $schemaValue = 'schema' + $lvl; 3247 } else { 3248 $schemaValue = $schema; 3249 } 3250 var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); 3251 out += 'if ( '; 3252 if ($isData) { 3253 out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; 3254 } 3255 out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; 3256 var $$outStack = $$outStack || []; 3257 $$outStack.push(out); 3258 out = ''; /* istanbul ignore else */ 3259 if (it.createErrors !== false) { 3260 out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; 3261 if ($isData) { 3262 out += '' + ($schemaValue); 3263 } else { 3264 out += '' + (it.util.toQuotedString($schema)); 3265 } 3266 out += ' } '; 3267 if (it.opts.messages !== false) { 3268 out += ' , message: \'should match pattern "'; 3269 if ($isData) { 3270 out += '\' + ' + ($schemaValue) + ' + \''; 3271 } else { 3272 out += '' + (it.util.escapeQuotes($schema)); 3273 } 3274 out += '"\' '; 3275 } 3276 if (it.opts.verbose) { 3277 out += ' , schema: '; 3278 if ($isData) { 3279 out += 'validate.schema' + ($schemaPath); 3280 } else { 3281 out += '' + (it.util.toQuotedString($schema)); 3282 } 3283 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3284 } 3285 out += ' } '; 3286 } else { 3287 out += ' {} '; 3288 } 3289 var __err = out; 3290 out = $$outStack.pop(); 3291 if (!it.compositeRule && $breakOnError) { 3292 /* istanbul ignore if */ 3293 if (it.async) { 3294 out += ' throw new ValidationError([' + (__err) + ']); '; 3295 } else { 3296 out += ' validate.errors = [' + (__err) + ']; return false; '; 3297 } 3298 } else { 3299 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3300 } 3301 out += '} '; 3302 if ($breakOnError) { 3303 out += ' else { '; 3304 } 3305 return out; 3306} 3307 3308},{}],33:[function(require,module,exports){ 3309'use strict'; 3310module.exports = function generate_properties(it, $keyword, $ruleType) { 3311 var out = ' '; 3312 var $lvl = it.level; 3313 var $dataLvl = it.dataLevel; 3314 var $schema = it.schema[$keyword]; 3315 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3316 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3317 var $breakOnError = !it.opts.allErrors; 3318 var $data = 'data' + ($dataLvl || ''); 3319 var $errs = 'errs__' + $lvl; 3320 var $it = it.util.copy(it); 3321 var $closingBraces = ''; 3322 $it.level++; 3323 var $nextValid = 'valid' + $it.level; 3324 var $key = 'key' + $lvl, 3325 $idx = 'idx' + $lvl, 3326 $dataNxt = $it.dataLevel = it.dataLevel + 1, 3327 $nextData = 'data' + $dataNxt, 3328 $dataProperties = 'dataProperties' + $lvl; 3329 var $schemaKeys = Object.keys($schema || {}).filter(notProto), 3330 $pProperties = it.schema.patternProperties || {}, 3331 $pPropertyKeys = Object.keys($pProperties).filter(notProto), 3332 $aProperties = it.schema.additionalProperties, 3333 $someProperties = $schemaKeys.length || $pPropertyKeys.length, 3334 $noAdditional = $aProperties === false, 3335 $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, 3336 $removeAdditional = it.opts.removeAdditional, 3337 $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, 3338 $ownProperties = it.opts.ownProperties, 3339 $currentBaseId = it.baseId; 3340 var $required = it.schema.required; 3341 if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) { 3342 var $requiredHash = it.util.toHash($required); 3343 } 3344 3345 function notProto(p) { 3346 return p !== '__proto__'; 3347 } 3348 out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; 3349 if ($ownProperties) { 3350 out += ' var ' + ($dataProperties) + ' = undefined;'; 3351 } 3352 if ($checkAdditional) { 3353 if ($ownProperties) { 3354 out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; 3355 } else { 3356 out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; 3357 } 3358 if ($someProperties) { 3359 out += ' var isAdditional' + ($lvl) + ' = !(false '; 3360 if ($schemaKeys.length) { 3361 if ($schemaKeys.length > 8) { 3362 out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; 3363 } else { 3364 var arr1 = $schemaKeys; 3365 if (arr1) { 3366 var $propertyKey, i1 = -1, 3367 l1 = arr1.length - 1; 3368 while (i1 < l1) { 3369 $propertyKey = arr1[i1 += 1]; 3370 out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; 3371 } 3372 } 3373 } 3374 } 3375 if ($pPropertyKeys.length) { 3376 var arr2 = $pPropertyKeys; 3377 if (arr2) { 3378 var $pProperty, $i = -1, 3379 l2 = arr2.length - 1; 3380 while ($i < l2) { 3381 $pProperty = arr2[$i += 1]; 3382 out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; 3383 } 3384 } 3385 } 3386 out += ' ); if (isAdditional' + ($lvl) + ') { '; 3387 } 3388 if ($removeAdditional == 'all') { 3389 out += ' delete ' + ($data) + '[' + ($key) + ']; '; 3390 } else { 3391 var $currentErrorPath = it.errorPath; 3392 var $additionalProperty = '\' + ' + $key + ' + \''; 3393 if (it.opts._errorDataPathProperty) { 3394 it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); 3395 } 3396 if ($noAdditional) { 3397 if ($removeAdditional) { 3398 out += ' delete ' + ($data) + '[' + ($key) + ']; '; 3399 } else { 3400 out += ' ' + ($nextValid) + ' = false; '; 3401 var $currErrSchemaPath = $errSchemaPath; 3402 $errSchemaPath = it.errSchemaPath + '/additionalProperties'; 3403 var $$outStack = $$outStack || []; 3404 $$outStack.push(out); 3405 out = ''; /* istanbul ignore else */ 3406 if (it.createErrors !== false) { 3407 out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; 3408 if (it.opts.messages !== false) { 3409 out += ' , message: \''; 3410 if (it.opts._errorDataPathProperty) { 3411 out += 'is an invalid additional property'; 3412 } else { 3413 out += 'should NOT have additional properties'; 3414 } 3415 out += '\' '; 3416 } 3417 if (it.opts.verbose) { 3418 out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3419 } 3420 out += ' } '; 3421 } else { 3422 out += ' {} '; 3423 } 3424 var __err = out; 3425 out = $$outStack.pop(); 3426 if (!it.compositeRule && $breakOnError) { 3427 /* istanbul ignore if */ 3428 if (it.async) { 3429 out += ' throw new ValidationError([' + (__err) + ']); '; 3430 } else { 3431 out += ' validate.errors = [' + (__err) + ']; return false; '; 3432 } 3433 } else { 3434 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3435 } 3436 $errSchemaPath = $currErrSchemaPath; 3437 if ($breakOnError) { 3438 out += ' break; '; 3439 } 3440 } 3441 } else if ($additionalIsSchema) { 3442 if ($removeAdditional == 'failing') { 3443 out += ' var ' + ($errs) + ' = errors; '; 3444 var $wasComposite = it.compositeRule; 3445 it.compositeRule = $it.compositeRule = true; 3446 $it.schema = $aProperties; 3447 $it.schemaPath = it.schemaPath + '.additionalProperties'; 3448 $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; 3449 $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); 3450 var $passData = $data + '[' + $key + ']'; 3451 $it.dataPathArr[$dataNxt] = $key; 3452 var $code = it.validate($it); 3453 $it.baseId = $currentBaseId; 3454 if (it.util.varOccurences($code, $nextData) < 2) { 3455 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 3456 } else { 3457 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 3458 } 3459 out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; 3460 it.compositeRule = $it.compositeRule = $wasComposite; 3461 } else { 3462 $it.schema = $aProperties; 3463 $it.schemaPath = it.schemaPath + '.additionalProperties'; 3464 $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; 3465 $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); 3466 var $passData = $data + '[' + $key + ']'; 3467 $it.dataPathArr[$dataNxt] = $key; 3468 var $code = it.validate($it); 3469 $it.baseId = $currentBaseId; 3470 if (it.util.varOccurences($code, $nextData) < 2) { 3471 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 3472 } else { 3473 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 3474 } 3475 if ($breakOnError) { 3476 out += ' if (!' + ($nextValid) + ') break; '; 3477 } 3478 } 3479 } 3480 it.errorPath = $currentErrorPath; 3481 } 3482 if ($someProperties) { 3483 out += ' } '; 3484 } 3485 out += ' } '; 3486 if ($breakOnError) { 3487 out += ' if (' + ($nextValid) + ') { '; 3488 $closingBraces += '}'; 3489 } 3490 } 3491 var $useDefaults = it.opts.useDefaults && !it.compositeRule; 3492 if ($schemaKeys.length) { 3493 var arr3 = $schemaKeys; 3494 if (arr3) { 3495 var $propertyKey, i3 = -1, 3496 l3 = arr3.length - 1; 3497 while (i3 < l3) { 3498 $propertyKey = arr3[i3 += 1]; 3499 var $sch = $schema[$propertyKey]; 3500 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 3501 var $prop = it.util.getProperty($propertyKey), 3502 $passData = $data + $prop, 3503 $hasDefault = $useDefaults && $sch.default !== undefined; 3504 $it.schema = $sch; 3505 $it.schemaPath = $schemaPath + $prop; 3506 $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); 3507 $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); 3508 $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); 3509 var $code = it.validate($it); 3510 $it.baseId = $currentBaseId; 3511 if (it.util.varOccurences($code, $nextData) < 2) { 3512 $code = it.util.varReplace($code, $nextData, $passData); 3513 var $useData = $passData; 3514 } else { 3515 var $useData = $nextData; 3516 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; 3517 } 3518 if ($hasDefault) { 3519 out += ' ' + ($code) + ' '; 3520 } else { 3521 if ($requiredHash && $requiredHash[$propertyKey]) { 3522 out += ' if ( ' + ($useData) + ' === undefined '; 3523 if ($ownProperties) { 3524 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 3525 } 3526 out += ') { ' + ($nextValid) + ' = false; '; 3527 var $currentErrorPath = it.errorPath, 3528 $currErrSchemaPath = $errSchemaPath, 3529 $missingProperty = it.util.escapeQuotes($propertyKey); 3530 if (it.opts._errorDataPathProperty) { 3531 it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); 3532 } 3533 $errSchemaPath = it.errSchemaPath + '/required'; 3534 var $$outStack = $$outStack || []; 3535 $$outStack.push(out); 3536 out = ''; /* istanbul ignore else */ 3537 if (it.createErrors !== false) { 3538 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 3539 if (it.opts.messages !== false) { 3540 out += ' , message: \''; 3541 if (it.opts._errorDataPathProperty) { 3542 out += 'is a required property'; 3543 } else { 3544 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 3545 } 3546 out += '\' '; 3547 } 3548 if (it.opts.verbose) { 3549 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3550 } 3551 out += ' } '; 3552 } else { 3553 out += ' {} '; 3554 } 3555 var __err = out; 3556 out = $$outStack.pop(); 3557 if (!it.compositeRule && $breakOnError) { 3558 /* istanbul ignore if */ 3559 if (it.async) { 3560 out += ' throw new ValidationError([' + (__err) + ']); '; 3561 } else { 3562 out += ' validate.errors = [' + (__err) + ']; return false; '; 3563 } 3564 } else { 3565 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3566 } 3567 $errSchemaPath = $currErrSchemaPath; 3568 it.errorPath = $currentErrorPath; 3569 out += ' } else { '; 3570 } else { 3571 if ($breakOnError) { 3572 out += ' if ( ' + ($useData) + ' === undefined '; 3573 if ($ownProperties) { 3574 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 3575 } 3576 out += ') { ' + ($nextValid) + ' = true; } else { '; 3577 } else { 3578 out += ' if (' + ($useData) + ' !== undefined '; 3579 if ($ownProperties) { 3580 out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 3581 } 3582 out += ' ) { '; 3583 } 3584 } 3585 out += ' ' + ($code) + ' } '; 3586 } 3587 } 3588 if ($breakOnError) { 3589 out += ' if (' + ($nextValid) + ') { '; 3590 $closingBraces += '}'; 3591 } 3592 } 3593 } 3594 } 3595 if ($pPropertyKeys.length) { 3596 var arr4 = $pPropertyKeys; 3597 if (arr4) { 3598 var $pProperty, i4 = -1, 3599 l4 = arr4.length - 1; 3600 while (i4 < l4) { 3601 $pProperty = arr4[i4 += 1]; 3602 var $sch = $pProperties[$pProperty]; 3603 if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) { 3604 $it.schema = $sch; 3605 $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); 3606 $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); 3607 if ($ownProperties) { 3608 out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; 3609 } else { 3610 out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; 3611 } 3612 out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; 3613 $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); 3614 var $passData = $data + '[' + $key + ']'; 3615 $it.dataPathArr[$dataNxt] = $key; 3616 var $code = it.validate($it); 3617 $it.baseId = $currentBaseId; 3618 if (it.util.varOccurences($code, $nextData) < 2) { 3619 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 3620 } else { 3621 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 3622 } 3623 if ($breakOnError) { 3624 out += ' if (!' + ($nextValid) + ') break; '; 3625 } 3626 out += ' } '; 3627 if ($breakOnError) { 3628 out += ' else ' + ($nextValid) + ' = true; '; 3629 } 3630 out += ' } '; 3631 if ($breakOnError) { 3632 out += ' if (' + ($nextValid) + ') { '; 3633 $closingBraces += '}'; 3634 } 3635 } 3636 } 3637 } 3638 } 3639 if ($breakOnError) { 3640 out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; 3641 } 3642 return out; 3643} 3644 3645},{}],34:[function(require,module,exports){ 3646'use strict'; 3647module.exports = function generate_propertyNames(it, $keyword, $ruleType) { 3648 var out = ' '; 3649 var $lvl = it.level; 3650 var $dataLvl = it.dataLevel; 3651 var $schema = it.schema[$keyword]; 3652 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3653 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3654 var $breakOnError = !it.opts.allErrors; 3655 var $data = 'data' + ($dataLvl || ''); 3656 var $errs = 'errs__' + $lvl; 3657 var $it = it.util.copy(it); 3658 var $closingBraces = ''; 3659 $it.level++; 3660 var $nextValid = 'valid' + $it.level; 3661 out += 'var ' + ($errs) + ' = errors;'; 3662 if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) { 3663 $it.schema = $schema; 3664 $it.schemaPath = $schemaPath; 3665 $it.errSchemaPath = $errSchemaPath; 3666 var $key = 'key' + $lvl, 3667 $idx = 'idx' + $lvl, 3668 $i = 'i' + $lvl, 3669 $invalidName = '\' + ' + $key + ' + \'', 3670 $dataNxt = $it.dataLevel = it.dataLevel + 1, 3671 $nextData = 'data' + $dataNxt, 3672 $dataProperties = 'dataProperties' + $lvl, 3673 $ownProperties = it.opts.ownProperties, 3674 $currentBaseId = it.baseId; 3675 if ($ownProperties) { 3676 out += ' var ' + ($dataProperties) + ' = undefined; '; 3677 } 3678 if ($ownProperties) { 3679 out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; 3680 } else { 3681 out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; 3682 } 3683 out += ' var startErrs' + ($lvl) + ' = errors; '; 3684 var $passData = $key; 3685 var $wasComposite = it.compositeRule; 3686 it.compositeRule = $it.compositeRule = true; 3687 var $code = it.validate($it); 3688 $it.baseId = $currentBaseId; 3689 if (it.util.varOccurences($code, $nextData) < 2) { 3690 out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; 3691 } else { 3692 out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; 3693 } 3694 it.compositeRule = $it.compositeRule = $wasComposite; 3695 out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; } var err = '; /* istanbul ignore else */ 3696 if (it.createErrors !== false) { 3697 out += ' { keyword: \'' + ('propertyNames') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \'' + ($invalidName) + '\' } '; 3698 if (it.opts.messages !== false) { 3699 out += ' , message: \'property name \\\'' + ($invalidName) + '\\\' is invalid\' '; 3700 } 3701 if (it.opts.verbose) { 3702 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3703 } 3704 out += ' } '; 3705 } else { 3706 out += ' {} '; 3707 } 3708 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3709 if (!it.compositeRule && $breakOnError) { 3710 /* istanbul ignore if */ 3711 if (it.async) { 3712 out += ' throw new ValidationError(vErrors); '; 3713 } else { 3714 out += ' validate.errors = vErrors; return false; '; 3715 } 3716 } 3717 if ($breakOnError) { 3718 out += ' break; '; 3719 } 3720 out += ' } }'; 3721 } 3722 if ($breakOnError) { 3723 out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; 3724 } 3725 return out; 3726} 3727 3728},{}],35:[function(require,module,exports){ 3729'use strict'; 3730module.exports = function generate_ref(it, $keyword, $ruleType) { 3731 var out = ' '; 3732 var $lvl = it.level; 3733 var $dataLvl = it.dataLevel; 3734 var $schema = it.schema[$keyword]; 3735 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3736 var $breakOnError = !it.opts.allErrors; 3737 var $data = 'data' + ($dataLvl || ''); 3738 var $valid = 'valid' + $lvl; 3739 var $async, $refCode; 3740 if ($schema == '#' || $schema == '#/') { 3741 if (it.isRoot) { 3742 $async = it.async; 3743 $refCode = 'validate'; 3744 } else { 3745 $async = it.root.schema.$async === true; 3746 $refCode = 'root.refVal[0]'; 3747 } 3748 } else { 3749 var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); 3750 if ($refVal === undefined) { 3751 var $message = it.MissingRefError.message(it.baseId, $schema); 3752 if (it.opts.missingRefs == 'fail') { 3753 it.logger.error($message); 3754 var $$outStack = $$outStack || []; 3755 $$outStack.push(out); 3756 out = ''; /* istanbul ignore else */ 3757 if (it.createErrors !== false) { 3758 out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } '; 3759 if (it.opts.messages !== false) { 3760 out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' '; 3761 } 3762 if (it.opts.verbose) { 3763 out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3764 } 3765 out += ' } '; 3766 } else { 3767 out += ' {} '; 3768 } 3769 var __err = out; 3770 out = $$outStack.pop(); 3771 if (!it.compositeRule && $breakOnError) { 3772 /* istanbul ignore if */ 3773 if (it.async) { 3774 out += ' throw new ValidationError([' + (__err) + ']); '; 3775 } else { 3776 out += ' validate.errors = [' + (__err) + ']; return false; '; 3777 } 3778 } else { 3779 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3780 } 3781 if ($breakOnError) { 3782 out += ' if (false) { '; 3783 } 3784 } else if (it.opts.missingRefs == 'ignore') { 3785 it.logger.warn($message); 3786 if ($breakOnError) { 3787 out += ' if (true) { '; 3788 } 3789 } else { 3790 throw new it.MissingRefError(it.baseId, $schema, $message); 3791 } 3792 } else if ($refVal.inline) { 3793 var $it = it.util.copy(it); 3794 $it.level++; 3795 var $nextValid = 'valid' + $it.level; 3796 $it.schema = $refVal.schema; 3797 $it.schemaPath = ''; 3798 $it.errSchemaPath = $schema; 3799 var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); 3800 out += ' ' + ($code) + ' '; 3801 if ($breakOnError) { 3802 out += ' if (' + ($nextValid) + ') { '; 3803 } 3804 } else { 3805 $async = $refVal.$async === true || (it.async && $refVal.$async !== false); 3806 $refCode = $refVal.code; 3807 } 3808 } 3809 if ($refCode) { 3810 var $$outStack = $$outStack || []; 3811 $$outStack.push(out); 3812 out = ''; 3813 if (it.opts.passContext) { 3814 out += ' ' + ($refCode) + '.call(this, '; 3815 } else { 3816 out += ' ' + ($refCode) + '( '; 3817 } 3818 out += ' ' + ($data) + ', (dataPath || \'\')'; 3819 if (it.errorPath != '""') { 3820 out += ' + ' + (it.errorPath); 3821 } 3822 var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', 3823 $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; 3824 out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) '; 3825 var __callValidate = out; 3826 out = $$outStack.pop(); 3827 if ($async) { 3828 if (!it.async) throw new Error('async schema referenced by sync schema'); 3829 if ($breakOnError) { 3830 out += ' var ' + ($valid) + '; '; 3831 } 3832 out += ' try { await ' + (__callValidate) + '; '; 3833 if ($breakOnError) { 3834 out += ' ' + ($valid) + ' = true; '; 3835 } 3836 out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; '; 3837 if ($breakOnError) { 3838 out += ' ' + ($valid) + ' = false; '; 3839 } 3840 out += ' } '; 3841 if ($breakOnError) { 3842 out += ' if (' + ($valid) + ') { '; 3843 } 3844 } else { 3845 out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } '; 3846 if ($breakOnError) { 3847 out += ' else { '; 3848 } 3849 } 3850 } 3851 return out; 3852} 3853 3854},{}],36:[function(require,module,exports){ 3855'use strict'; 3856module.exports = function generate_required(it, $keyword, $ruleType) { 3857 var out = ' '; 3858 var $lvl = it.level; 3859 var $dataLvl = it.dataLevel; 3860 var $schema = it.schema[$keyword]; 3861 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 3862 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 3863 var $breakOnError = !it.opts.allErrors; 3864 var $data = 'data' + ($dataLvl || ''); 3865 var $valid = 'valid' + $lvl; 3866 var $isData = it.opts.$data && $schema && $schema.$data, 3867 $schemaValue; 3868 if ($isData) { 3869 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 3870 $schemaValue = 'schema' + $lvl; 3871 } else { 3872 $schemaValue = $schema; 3873 } 3874 var $vSchema = 'schema' + $lvl; 3875 if (!$isData) { 3876 if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) { 3877 var $required = []; 3878 var arr1 = $schema; 3879 if (arr1) { 3880 var $property, i1 = -1, 3881 l1 = arr1.length - 1; 3882 while (i1 < l1) { 3883 $property = arr1[i1 += 1]; 3884 var $propertySch = it.schema.properties[$property]; 3885 if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) { 3886 $required[$required.length] = $property; 3887 } 3888 } 3889 } 3890 } else { 3891 var $required = $schema; 3892 } 3893 } 3894 if ($isData || $required.length) { 3895 var $currentErrorPath = it.errorPath, 3896 $loopRequired = $isData || $required.length >= it.opts.loopRequired, 3897 $ownProperties = it.opts.ownProperties; 3898 if ($breakOnError) { 3899 out += ' var missing' + ($lvl) + '; '; 3900 if ($loopRequired) { 3901 if (!$isData) { 3902 out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; 3903 } 3904 var $i = 'i' + $lvl, 3905 $propertyPath = 'schema' + $lvl + '[' + $i + ']', 3906 $missingProperty = '\' + ' + $propertyPath + ' + \''; 3907 if (it.opts._errorDataPathProperty) { 3908 it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); 3909 } 3910 out += ' var ' + ($valid) + ' = true; '; 3911 if ($isData) { 3912 out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; 3913 } 3914 out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; 3915 if ($ownProperties) { 3916 out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; 3917 } 3918 out += '; if (!' + ($valid) + ') break; } '; 3919 if ($isData) { 3920 out += ' } '; 3921 } 3922 out += ' if (!' + ($valid) + ') { '; 3923 var $$outStack = $$outStack || []; 3924 $$outStack.push(out); 3925 out = ''; /* istanbul ignore else */ 3926 if (it.createErrors !== false) { 3927 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 3928 if (it.opts.messages !== false) { 3929 out += ' , message: \''; 3930 if (it.opts._errorDataPathProperty) { 3931 out += 'is a required property'; 3932 } else { 3933 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 3934 } 3935 out += '\' '; 3936 } 3937 if (it.opts.verbose) { 3938 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3939 } 3940 out += ' } '; 3941 } else { 3942 out += ' {} '; 3943 } 3944 var __err = out; 3945 out = $$outStack.pop(); 3946 if (!it.compositeRule && $breakOnError) { 3947 /* istanbul ignore if */ 3948 if (it.async) { 3949 out += ' throw new ValidationError([' + (__err) + ']); '; 3950 } else { 3951 out += ' validate.errors = [' + (__err) + ']; return false; '; 3952 } 3953 } else { 3954 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 3955 } 3956 out += ' } else { '; 3957 } else { 3958 out += ' if ( '; 3959 var arr2 = $required; 3960 if (arr2) { 3961 var $propertyKey, $i = -1, 3962 l2 = arr2.length - 1; 3963 while ($i < l2) { 3964 $propertyKey = arr2[$i += 1]; 3965 if ($i) { 3966 out += ' || '; 3967 } 3968 var $prop = it.util.getProperty($propertyKey), 3969 $useData = $data + $prop; 3970 out += ' ( ( ' + ($useData) + ' === undefined '; 3971 if ($ownProperties) { 3972 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 3973 } 3974 out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; 3975 } 3976 } 3977 out += ') { '; 3978 var $propertyPath = 'missing' + $lvl, 3979 $missingProperty = '\' + ' + $propertyPath + ' + \''; 3980 if (it.opts._errorDataPathProperty) { 3981 it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; 3982 } 3983 var $$outStack = $$outStack || []; 3984 $$outStack.push(out); 3985 out = ''; /* istanbul ignore else */ 3986 if (it.createErrors !== false) { 3987 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 3988 if (it.opts.messages !== false) { 3989 out += ' , message: \''; 3990 if (it.opts._errorDataPathProperty) { 3991 out += 'is a required property'; 3992 } else { 3993 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 3994 } 3995 out += '\' '; 3996 } 3997 if (it.opts.verbose) { 3998 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 3999 } 4000 out += ' } '; 4001 } else { 4002 out += ' {} '; 4003 } 4004 var __err = out; 4005 out = $$outStack.pop(); 4006 if (!it.compositeRule && $breakOnError) { 4007 /* istanbul ignore if */ 4008 if (it.async) { 4009 out += ' throw new ValidationError([' + (__err) + ']); '; 4010 } else { 4011 out += ' validate.errors = [' + (__err) + ']; return false; '; 4012 } 4013 } else { 4014 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4015 } 4016 out += ' } else { '; 4017 } 4018 } else { 4019 if ($loopRequired) { 4020 if (!$isData) { 4021 out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; 4022 } 4023 var $i = 'i' + $lvl, 4024 $propertyPath = 'schema' + $lvl + '[' + $i + ']', 4025 $missingProperty = '\' + ' + $propertyPath + ' + \''; 4026 if (it.opts._errorDataPathProperty) { 4027 it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); 4028 } 4029 if ($isData) { 4030 out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ 4031 if (it.createErrors !== false) { 4032 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 4033 if (it.opts.messages !== false) { 4034 out += ' , message: \''; 4035 if (it.opts._errorDataPathProperty) { 4036 out += 'is a required property'; 4037 } else { 4038 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 4039 } 4040 out += '\' '; 4041 } 4042 if (it.opts.verbose) { 4043 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4044 } 4045 out += ' } '; 4046 } else { 4047 out += ' {} '; 4048 } 4049 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; 4050 } 4051 out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; 4052 if ($ownProperties) { 4053 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; 4054 } 4055 out += ') { var err = '; /* istanbul ignore else */ 4056 if (it.createErrors !== false) { 4057 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 4058 if (it.opts.messages !== false) { 4059 out += ' , message: \''; 4060 if (it.opts._errorDataPathProperty) { 4061 out += 'is a required property'; 4062 } else { 4063 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 4064 } 4065 out += '\' '; 4066 } 4067 if (it.opts.verbose) { 4068 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4069 } 4070 out += ' } '; 4071 } else { 4072 out += ' {} '; 4073 } 4074 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; 4075 if ($isData) { 4076 out += ' } '; 4077 } 4078 } else { 4079 var arr3 = $required; 4080 if (arr3) { 4081 var $propertyKey, i3 = -1, 4082 l3 = arr3.length - 1; 4083 while (i3 < l3) { 4084 $propertyKey = arr3[i3 += 1]; 4085 var $prop = it.util.getProperty($propertyKey), 4086 $missingProperty = it.util.escapeQuotes($propertyKey), 4087 $useData = $data + $prop; 4088 if (it.opts._errorDataPathProperty) { 4089 it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); 4090 } 4091 out += ' if ( ' + ($useData) + ' === undefined '; 4092 if ($ownProperties) { 4093 out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; 4094 } 4095 out += ') { var err = '; /* istanbul ignore else */ 4096 if (it.createErrors !== false) { 4097 out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; 4098 if (it.opts.messages !== false) { 4099 out += ' , message: \''; 4100 if (it.opts._errorDataPathProperty) { 4101 out += 'is a required property'; 4102 } else { 4103 out += 'should have required property \\\'' + ($missingProperty) + '\\\''; 4104 } 4105 out += '\' '; 4106 } 4107 if (it.opts.verbose) { 4108 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4109 } 4110 out += ' } '; 4111 } else { 4112 out += ' {} '; 4113 } 4114 out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; 4115 } 4116 } 4117 } 4118 } 4119 it.errorPath = $currentErrorPath; 4120 } else if ($breakOnError) { 4121 out += ' if (true) {'; 4122 } 4123 return out; 4124} 4125 4126},{}],37:[function(require,module,exports){ 4127'use strict'; 4128module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { 4129 var out = ' '; 4130 var $lvl = it.level; 4131 var $dataLvl = it.dataLevel; 4132 var $schema = it.schema[$keyword]; 4133 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 4134 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 4135 var $breakOnError = !it.opts.allErrors; 4136 var $data = 'data' + ($dataLvl || ''); 4137 var $valid = 'valid' + $lvl; 4138 var $isData = it.opts.$data && $schema && $schema.$data, 4139 $schemaValue; 4140 if ($isData) { 4141 out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; 4142 $schemaValue = 'schema' + $lvl; 4143 } else { 4144 $schemaValue = $schema; 4145 } 4146 if (($schema || $isData) && it.opts.uniqueItems !== false) { 4147 if ($isData) { 4148 out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; 4149 } 4150 out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; 4151 var $itemType = it.schema.items && it.schema.items.type, 4152 $typeIsArray = Array.isArray($itemType); 4153 if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { 4154 out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; 4155 } else { 4156 out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; 4157 var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); 4158 out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; '; 4159 if ($typeIsArray) { 4160 out += ' if (typeof item == \'string\') item = \'"\' + item; '; 4161 } 4162 out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; 4163 } 4164 out += ' } '; 4165 if ($isData) { 4166 out += ' } '; 4167 } 4168 out += ' if (!' + ($valid) + ') { '; 4169 var $$outStack = $$outStack || []; 4170 $$outStack.push(out); 4171 out = ''; /* istanbul ignore else */ 4172 if (it.createErrors !== false) { 4173 out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; 4174 if (it.opts.messages !== false) { 4175 out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; 4176 } 4177 if (it.opts.verbose) { 4178 out += ' , schema: '; 4179 if ($isData) { 4180 out += 'validate.schema' + ($schemaPath); 4181 } else { 4182 out += '' + ($schema); 4183 } 4184 out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4185 } 4186 out += ' } '; 4187 } else { 4188 out += ' {} '; 4189 } 4190 var __err = out; 4191 out = $$outStack.pop(); 4192 if (!it.compositeRule && $breakOnError) { 4193 /* istanbul ignore if */ 4194 if (it.async) { 4195 out += ' throw new ValidationError([' + (__err) + ']); '; 4196 } else { 4197 out += ' validate.errors = [' + (__err) + ']; return false; '; 4198 } 4199 } else { 4200 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4201 } 4202 out += ' } '; 4203 if ($breakOnError) { 4204 out += ' else { '; 4205 } 4206 } else { 4207 if ($breakOnError) { 4208 out += ' if (true) { '; 4209 } 4210 } 4211 return out; 4212} 4213 4214},{}],38:[function(require,module,exports){ 4215'use strict'; 4216module.exports = function generate_validate(it, $keyword, $ruleType) { 4217 var out = ''; 4218 var $async = it.schema.$async === true, 4219 $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), 4220 $id = it.self._getId(it.schema); 4221 if (it.opts.strictKeywords) { 4222 var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); 4223 if ($unknownKwd) { 4224 var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; 4225 if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); 4226 else throw new Error($keywordsMsg); 4227 } 4228 } 4229 if (it.isTop) { 4230 out += ' var validate = '; 4231 if ($async) { 4232 it.async = true; 4233 out += 'async '; 4234 } 4235 out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; 4236 if ($id && (it.opts.sourceCode || it.opts.processCode)) { 4237 out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; 4238 } 4239 } 4240 if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { 4241 var $keyword = 'false schema'; 4242 var $lvl = it.level; 4243 var $dataLvl = it.dataLevel; 4244 var $schema = it.schema[$keyword]; 4245 var $schemaPath = it.schemaPath + it.util.getProperty($keyword); 4246 var $errSchemaPath = it.errSchemaPath + '/' + $keyword; 4247 var $breakOnError = !it.opts.allErrors; 4248 var $errorKeyword; 4249 var $data = 'data' + ($dataLvl || ''); 4250 var $valid = 'valid' + $lvl; 4251 if (it.schema === false) { 4252 if (it.isTop) { 4253 $breakOnError = true; 4254 } else { 4255 out += ' var ' + ($valid) + ' = false; '; 4256 } 4257 var $$outStack = $$outStack || []; 4258 $$outStack.push(out); 4259 out = ''; /* istanbul ignore else */ 4260 if (it.createErrors !== false) { 4261 out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; 4262 if (it.opts.messages !== false) { 4263 out += ' , message: \'boolean schema is false\' '; 4264 } 4265 if (it.opts.verbose) { 4266 out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4267 } 4268 out += ' } '; 4269 } else { 4270 out += ' {} '; 4271 } 4272 var __err = out; 4273 out = $$outStack.pop(); 4274 if (!it.compositeRule && $breakOnError) { 4275 /* istanbul ignore if */ 4276 if (it.async) { 4277 out += ' throw new ValidationError([' + (__err) + ']); '; 4278 } else { 4279 out += ' validate.errors = [' + (__err) + ']; return false; '; 4280 } 4281 } else { 4282 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4283 } 4284 } else { 4285 if (it.isTop) { 4286 if ($async) { 4287 out += ' return data; '; 4288 } else { 4289 out += ' validate.errors = null; return true; '; 4290 } 4291 } else { 4292 out += ' var ' + ($valid) + ' = true; '; 4293 } 4294 } 4295 if (it.isTop) { 4296 out += ' }; return validate; '; 4297 } 4298 return out; 4299 } 4300 if (it.isTop) { 4301 var $top = it.isTop, 4302 $lvl = it.level = 0, 4303 $dataLvl = it.dataLevel = 0, 4304 $data = 'data'; 4305 it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); 4306 it.baseId = it.baseId || it.rootId; 4307 delete it.isTop; 4308 it.dataPathArr = [""]; 4309 if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { 4310 var $defaultMsg = 'default is ignored in the schema root'; 4311 if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); 4312 else throw new Error($defaultMsg); 4313 } 4314 out += ' var vErrors = null; '; 4315 out += ' var errors = 0; '; 4316 out += ' if (rootData === undefined) rootData = data; '; 4317 } else { 4318 var $lvl = it.level, 4319 $dataLvl = it.dataLevel, 4320 $data = 'data' + ($dataLvl || ''); 4321 if ($id) it.baseId = it.resolve.url(it.baseId, $id); 4322 if ($async && !it.async) throw new Error('async schema in sync schema'); 4323 out += ' var errs_' + ($lvl) + ' = errors;'; 4324 } 4325 var $valid = 'valid' + $lvl, 4326 $breakOnError = !it.opts.allErrors, 4327 $closingBraces1 = '', 4328 $closingBraces2 = ''; 4329 var $errorKeyword; 4330 var $typeSchema = it.schema.type, 4331 $typeIsArray = Array.isArray($typeSchema); 4332 if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { 4333 if ($typeIsArray) { 4334 if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null'); 4335 } else if ($typeSchema != 'null') { 4336 $typeSchema = [$typeSchema, 'null']; 4337 $typeIsArray = true; 4338 } 4339 } 4340 if ($typeIsArray && $typeSchema.length == 1) { 4341 $typeSchema = $typeSchema[0]; 4342 $typeIsArray = false; 4343 } 4344 if (it.schema.$ref && $refKeywords) { 4345 if (it.opts.extendRefs == 'fail') { 4346 throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); 4347 } else if (it.opts.extendRefs !== true) { 4348 $refKeywords = false; 4349 it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); 4350 } 4351 } 4352 if (it.schema.$comment && it.opts.$comment) { 4353 out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); 4354 } 4355 if ($typeSchema) { 4356 if (it.opts.coerceTypes) { 4357 var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); 4358 } 4359 var $rulesGroup = it.RULES.types[$typeSchema]; 4360 if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { 4361 var $schemaPath = it.schemaPath + '.type', 4362 $errSchemaPath = it.errSchemaPath + '/type'; 4363 var $schemaPath = it.schemaPath + '.type', 4364 $errSchemaPath = it.errSchemaPath + '/type', 4365 $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; 4366 out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { '; 4367 if ($coerceToTypes) { 4368 var $dataType = 'dataType' + $lvl, 4369 $coerced = 'coerced' + $lvl; 4370 out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; '; 4371 if (it.opts.coerceTypes == 'array') { 4372 out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } '; 4373 } 4374 out += ' if (' + ($coerced) + ' !== undefined) ; '; 4375 var arr1 = $coerceToTypes; 4376 if (arr1) { 4377 var $type, $i = -1, 4378 l1 = arr1.length - 1; 4379 while ($i < l1) { 4380 $type = arr1[$i += 1]; 4381 if ($type == 'string') { 4382 out += ' else if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; 4383 } else if ($type == 'number' || $type == 'integer') { 4384 out += ' else if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; 4385 if ($type == 'integer') { 4386 out += ' && !(' + ($data) + ' % 1)'; 4387 } 4388 out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; 4389 } else if ($type == 'boolean') { 4390 out += ' else if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; 4391 } else if ($type == 'null') { 4392 out += ' else if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; 4393 } else if (it.opts.coerceTypes == 'array' && $type == 'array') { 4394 out += ' else if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; 4395 } 4396 } 4397 } 4398 out += ' else { '; 4399 var $$outStack = $$outStack || []; 4400 $$outStack.push(out); 4401 out = ''; /* istanbul ignore else */ 4402 if (it.createErrors !== false) { 4403 out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; 4404 if ($typeIsArray) { 4405 out += '' + ($typeSchema.join(",")); 4406 } else { 4407 out += '' + ($typeSchema); 4408 } 4409 out += '\' } '; 4410 if (it.opts.messages !== false) { 4411 out += ' , message: \'should be '; 4412 if ($typeIsArray) { 4413 out += '' + ($typeSchema.join(",")); 4414 } else { 4415 out += '' + ($typeSchema); 4416 } 4417 out += '\' '; 4418 } 4419 if (it.opts.verbose) { 4420 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4421 } 4422 out += ' } '; 4423 } else { 4424 out += ' {} '; 4425 } 4426 var __err = out; 4427 out = $$outStack.pop(); 4428 if (!it.compositeRule && $breakOnError) { 4429 /* istanbul ignore if */ 4430 if (it.async) { 4431 out += ' throw new ValidationError([' + (__err) + ']); '; 4432 } else { 4433 out += ' validate.errors = [' + (__err) + ']; return false; '; 4434 } 4435 } else { 4436 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4437 } 4438 out += ' } if (' + ($coerced) + ' !== undefined) { '; 4439 var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', 4440 $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; 4441 out += ' ' + ($data) + ' = ' + ($coerced) + '; '; 4442 if (!$dataLvl) { 4443 out += 'if (' + ($parentData) + ' !== undefined)'; 4444 } 4445 out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; 4446 } else { 4447 var $$outStack = $$outStack || []; 4448 $$outStack.push(out); 4449 out = ''; /* istanbul ignore else */ 4450 if (it.createErrors !== false) { 4451 out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; 4452 if ($typeIsArray) { 4453 out += '' + ($typeSchema.join(",")); 4454 } else { 4455 out += '' + ($typeSchema); 4456 } 4457 out += '\' } '; 4458 if (it.opts.messages !== false) { 4459 out += ' , message: \'should be '; 4460 if ($typeIsArray) { 4461 out += '' + ($typeSchema.join(",")); 4462 } else { 4463 out += '' + ($typeSchema); 4464 } 4465 out += '\' '; 4466 } 4467 if (it.opts.verbose) { 4468 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4469 } 4470 out += ' } '; 4471 } else { 4472 out += ' {} '; 4473 } 4474 var __err = out; 4475 out = $$outStack.pop(); 4476 if (!it.compositeRule && $breakOnError) { 4477 /* istanbul ignore if */ 4478 if (it.async) { 4479 out += ' throw new ValidationError([' + (__err) + ']); '; 4480 } else { 4481 out += ' validate.errors = [' + (__err) + ']; return false; '; 4482 } 4483 } else { 4484 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4485 } 4486 } 4487 out += ' } '; 4488 } 4489 } 4490 if (it.schema.$ref && !$refKeywords) { 4491 out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; 4492 if ($breakOnError) { 4493 out += ' } if (errors === '; 4494 if ($top) { 4495 out += '0'; 4496 } else { 4497 out += 'errs_' + ($lvl); 4498 } 4499 out += ') { '; 4500 $closingBraces2 += '}'; 4501 } 4502 } else { 4503 var arr2 = it.RULES; 4504 if (arr2) { 4505 var $rulesGroup, i2 = -1, 4506 l2 = arr2.length - 1; 4507 while (i2 < l2) { 4508 $rulesGroup = arr2[i2 += 1]; 4509 if ($shouldUseGroup($rulesGroup)) { 4510 if ($rulesGroup.type) { 4511 out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { '; 4512 } 4513 if (it.opts.useDefaults) { 4514 if ($rulesGroup.type == 'object' && it.schema.properties) { 4515 var $schema = it.schema.properties, 4516 $schemaKeys = Object.keys($schema); 4517 var arr3 = $schemaKeys; 4518 if (arr3) { 4519 var $propertyKey, i3 = -1, 4520 l3 = arr3.length - 1; 4521 while (i3 < l3) { 4522 $propertyKey = arr3[i3 += 1]; 4523 var $sch = $schema[$propertyKey]; 4524 if ($sch.default !== undefined) { 4525 var $passData = $data + it.util.getProperty($propertyKey); 4526 if (it.compositeRule) { 4527 if (it.opts.strictDefaults) { 4528 var $defaultMsg = 'default is ignored for: ' + $passData; 4529 if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); 4530 else throw new Error($defaultMsg); 4531 } 4532 } else { 4533 out += ' if (' + ($passData) + ' === undefined '; 4534 if (it.opts.useDefaults == 'empty') { 4535 out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; 4536 } 4537 out += ' ) ' + ($passData) + ' = '; 4538 if (it.opts.useDefaults == 'shared') { 4539 out += ' ' + (it.useDefault($sch.default)) + ' '; 4540 } else { 4541 out += ' ' + (JSON.stringify($sch.default)) + ' '; 4542 } 4543 out += '; '; 4544 } 4545 } 4546 } 4547 } 4548 } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { 4549 var arr4 = it.schema.items; 4550 if (arr4) { 4551 var $sch, $i = -1, 4552 l4 = arr4.length - 1; 4553 while ($i < l4) { 4554 $sch = arr4[$i += 1]; 4555 if ($sch.default !== undefined) { 4556 var $passData = $data + '[' + $i + ']'; 4557 if (it.compositeRule) { 4558 if (it.opts.strictDefaults) { 4559 var $defaultMsg = 'default is ignored for: ' + $passData; 4560 if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); 4561 else throw new Error($defaultMsg); 4562 } 4563 } else { 4564 out += ' if (' + ($passData) + ' === undefined '; 4565 if (it.opts.useDefaults == 'empty') { 4566 out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; 4567 } 4568 out += ' ) ' + ($passData) + ' = '; 4569 if (it.opts.useDefaults == 'shared') { 4570 out += ' ' + (it.useDefault($sch.default)) + ' '; 4571 } else { 4572 out += ' ' + (JSON.stringify($sch.default)) + ' '; 4573 } 4574 out += '; '; 4575 } 4576 } 4577 } 4578 } 4579 } 4580 } 4581 var arr5 = $rulesGroup.rules; 4582 if (arr5) { 4583 var $rule, i5 = -1, 4584 l5 = arr5.length - 1; 4585 while (i5 < l5) { 4586 $rule = arr5[i5 += 1]; 4587 if ($shouldUseRule($rule)) { 4588 var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); 4589 if ($code) { 4590 out += ' ' + ($code) + ' '; 4591 if ($breakOnError) { 4592 $closingBraces1 += '}'; 4593 } 4594 } 4595 } 4596 } 4597 } 4598 if ($breakOnError) { 4599 out += ' ' + ($closingBraces1) + ' '; 4600 $closingBraces1 = ''; 4601 } 4602 if ($rulesGroup.type) { 4603 out += ' } '; 4604 if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { 4605 out += ' else { '; 4606 var $schemaPath = it.schemaPath + '.type', 4607 $errSchemaPath = it.errSchemaPath + '/type'; 4608 var $$outStack = $$outStack || []; 4609 $$outStack.push(out); 4610 out = ''; /* istanbul ignore else */ 4611 if (it.createErrors !== false) { 4612 out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; 4613 if ($typeIsArray) { 4614 out += '' + ($typeSchema.join(",")); 4615 } else { 4616 out += '' + ($typeSchema); 4617 } 4618 out += '\' } '; 4619 if (it.opts.messages !== false) { 4620 out += ' , message: \'should be '; 4621 if ($typeIsArray) { 4622 out += '' + ($typeSchema.join(",")); 4623 } else { 4624 out += '' + ($typeSchema); 4625 } 4626 out += '\' '; 4627 } 4628 if (it.opts.verbose) { 4629 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; 4630 } 4631 out += ' } '; 4632 } else { 4633 out += ' {} '; 4634 } 4635 var __err = out; 4636 out = $$outStack.pop(); 4637 if (!it.compositeRule && $breakOnError) { 4638 /* istanbul ignore if */ 4639 if (it.async) { 4640 out += ' throw new ValidationError([' + (__err) + ']); '; 4641 } else { 4642 out += ' validate.errors = [' + (__err) + ']; return false; '; 4643 } 4644 } else { 4645 out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; 4646 } 4647 out += ' } '; 4648 } 4649 } 4650 if ($breakOnError) { 4651 out += ' if (errors === '; 4652 if ($top) { 4653 out += '0'; 4654 } else { 4655 out += 'errs_' + ($lvl); 4656 } 4657 out += ') { '; 4658 $closingBraces2 += '}'; 4659 } 4660 } 4661 } 4662 } 4663 } 4664 if ($breakOnError) { 4665 out += ' ' + ($closingBraces2) + ' '; 4666 } 4667 if ($top) { 4668 if ($async) { 4669 out += ' if (errors === 0) return data; '; 4670 out += ' else throw new ValidationError(vErrors); '; 4671 } else { 4672 out += ' validate.errors = vErrors; '; 4673 out += ' return errors === 0; '; 4674 } 4675 out += ' }; return validate;'; 4676 } else { 4677 out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; 4678 } 4679 4680 function $shouldUseGroup($rulesGroup) { 4681 var rules = $rulesGroup.rules; 4682 for (var i = 0; i < rules.length; i++) 4683 if ($shouldUseRule(rules[i])) return true; 4684 } 4685 4686 function $shouldUseRule($rule) { 4687 return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); 4688 } 4689 4690 function $ruleImplementsSomeKeyword($rule) { 4691 var impl = $rule.implements; 4692 for (var i = 0; i < impl.length; i++) 4693 if (it.schema[impl[i]] !== undefined) return true; 4694 } 4695 return out; 4696} 4697 4698},{}],39:[function(require,module,exports){ 4699'use strict'; 4700 4701var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; 4702var customRuleCode = require('./dotjs/custom'); 4703var definitionSchema = require('./definition_schema'); 4704 4705module.exports = { 4706 add: addKeyword, 4707 get: getKeyword, 4708 remove: removeKeyword, 4709 validate: validateKeyword 4710}; 4711 4712 4713/** 4714 * Define custom keyword 4715 * @this Ajv 4716 * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). 4717 * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. 4718 * @return {Ajv} this for method chaining 4719 */ 4720function addKeyword(keyword, definition) { 4721 /* jshint validthis: true */ 4722 /* eslint no-shadow: 0 */ 4723 var RULES = this.RULES; 4724 if (RULES.keywords[keyword]) 4725 throw new Error('Keyword ' + keyword + ' is already defined'); 4726 4727 if (!IDENTIFIER.test(keyword)) 4728 throw new Error('Keyword ' + keyword + ' is not a valid identifier'); 4729 4730 if (definition) { 4731 this.validateKeyword(definition, true); 4732 4733 var dataType = definition.type; 4734 if (Array.isArray(dataType)) { 4735 for (var i=0; i<dataType.length; i++) 4736 _addRule(keyword, dataType[i], definition); 4737 } else { 4738 _addRule(keyword, dataType, definition); 4739 } 4740 4741 var metaSchema = definition.metaSchema; 4742 if (metaSchema) { 4743 if (definition.$data && this._opts.$data) { 4744 metaSchema = { 4745 anyOf: [ 4746 metaSchema, 4747 { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' } 4748 ] 4749 }; 4750 } 4751 definition.validateSchema = this.compile(metaSchema, true); 4752 } 4753 } 4754 4755 RULES.keywords[keyword] = RULES.all[keyword] = true; 4756 4757 4758 function _addRule(keyword, dataType, definition) { 4759 var ruleGroup; 4760 for (var i=0; i<RULES.length; i++) { 4761 var rg = RULES[i]; 4762 if (rg.type == dataType) { 4763 ruleGroup = rg; 4764 break; 4765 } 4766 } 4767 4768 if (!ruleGroup) { 4769 ruleGroup = { type: dataType, rules: [] }; 4770 RULES.push(ruleGroup); 4771 } 4772 4773 var rule = { 4774 keyword: keyword, 4775 definition: definition, 4776 custom: true, 4777 code: customRuleCode, 4778 implements: definition.implements 4779 }; 4780 ruleGroup.rules.push(rule); 4781 RULES.custom[keyword] = rule; 4782 } 4783 4784 return this; 4785} 4786 4787 4788/** 4789 * Get keyword 4790 * @this Ajv 4791 * @param {String} keyword pre-defined or custom keyword. 4792 * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. 4793 */ 4794function getKeyword(keyword) { 4795 /* jshint validthis: true */ 4796 var rule = this.RULES.custom[keyword]; 4797 return rule ? rule.definition : this.RULES.keywords[keyword] || false; 4798} 4799 4800 4801/** 4802 * Remove keyword 4803 * @this Ajv 4804 * @param {String} keyword pre-defined or custom keyword. 4805 * @return {Ajv} this for method chaining 4806 */ 4807function removeKeyword(keyword) { 4808 /* jshint validthis: true */ 4809 var RULES = this.RULES; 4810 delete RULES.keywords[keyword]; 4811 delete RULES.all[keyword]; 4812 delete RULES.custom[keyword]; 4813 for (var i=0; i<RULES.length; i++) { 4814 var rules = RULES[i].rules; 4815 for (var j=0; j<rules.length; j++) { 4816 if (rules[j].keyword == keyword) { 4817 rules.splice(j, 1); 4818 break; 4819 } 4820 } 4821 } 4822 return this; 4823} 4824 4825 4826/** 4827 * Validate keyword definition 4828 * @this Ajv 4829 * @param {Object} definition keyword definition object. 4830 * @param {Boolean} throwError true to throw exception if definition is invalid 4831 * @return {boolean} validation result 4832 */ 4833function validateKeyword(definition, throwError) { 4834 validateKeyword.errors = null; 4835 var v = this._validateKeyword = this._validateKeyword 4836 || this.compile(definitionSchema, true); 4837 4838 if (v(definition)) return true; 4839 validateKeyword.errors = v.errors; 4840 if (throwError) 4841 throw new Error('custom keyword definition is invalid: ' + this.errorsText(v.errors)); 4842 else 4843 return false; 4844} 4845 4846},{"./definition_schema":12,"./dotjs/custom":22}],40:[function(require,module,exports){ 4847module.exports={ 4848 "$schema": "http://json-schema.org/draft-07/schema#", 4849 "$id": "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", 4850 "description": "Meta-schema for $data reference (JSON Schema extension proposal)", 4851 "type": "object", 4852 "required": [ "$data" ], 4853 "properties": { 4854 "$data": { 4855 "type": "string", 4856 "anyOf": [ 4857 { "format": "relative-json-pointer" }, 4858 { "format": "json-pointer" } 4859 ] 4860 } 4861 }, 4862 "additionalProperties": false 4863} 4864 4865},{}],41:[function(require,module,exports){ 4866module.exports={ 4867 "$schema": "http://json-schema.org/draft-07/schema#", 4868 "$id": "http://json-schema.org/draft-07/schema#", 4869 "title": "Core schema meta-schema", 4870 "definitions": { 4871 "schemaArray": { 4872 "type": "array", 4873 "minItems": 1, 4874 "items": { "$ref": "#" } 4875 }, 4876 "nonNegativeInteger": { 4877 "type": "integer", 4878 "minimum": 0 4879 }, 4880 "nonNegativeIntegerDefault0": { 4881 "allOf": [ 4882 { "$ref": "#/definitions/nonNegativeInteger" }, 4883 { "default": 0 } 4884 ] 4885 }, 4886 "simpleTypes": { 4887 "enum": [ 4888 "array", 4889 "boolean", 4890 "integer", 4891 "null", 4892 "number", 4893 "object", 4894 "string" 4895 ] 4896 }, 4897 "stringArray": { 4898 "type": "array", 4899 "items": { "type": "string" }, 4900 "uniqueItems": true, 4901 "default": [] 4902 } 4903 }, 4904 "type": ["object", "boolean"], 4905 "properties": { 4906 "$id": { 4907 "type": "string", 4908 "format": "uri-reference" 4909 }, 4910 "$schema": { 4911 "type": "string", 4912 "format": "uri" 4913 }, 4914 "$ref": { 4915 "type": "string", 4916 "format": "uri-reference" 4917 }, 4918 "$comment": { 4919 "type": "string" 4920 }, 4921 "title": { 4922 "type": "string" 4923 }, 4924 "description": { 4925 "type": "string" 4926 }, 4927 "default": true, 4928 "readOnly": { 4929 "type": "boolean", 4930 "default": false 4931 }, 4932 "examples": { 4933 "type": "array", 4934 "items": true 4935 }, 4936 "multipleOf": { 4937 "type": "number", 4938 "exclusiveMinimum": 0 4939 }, 4940 "maximum": { 4941 "type": "number" 4942 }, 4943 "exclusiveMaximum": { 4944 "type": "number" 4945 }, 4946 "minimum": { 4947 "type": "number" 4948 }, 4949 "exclusiveMinimum": { 4950 "type": "number" 4951 }, 4952 "maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, 4953 "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, 4954 "pattern": { 4955 "type": "string", 4956 "format": "regex" 4957 }, 4958 "additionalItems": { "$ref": "#" }, 4959 "items": { 4960 "anyOf": [ 4961 { "$ref": "#" }, 4962 { "$ref": "#/definitions/schemaArray" } 4963 ], 4964 "default": true 4965 }, 4966 "maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, 4967 "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, 4968 "uniqueItems": { 4969 "type": "boolean", 4970 "default": false 4971 }, 4972 "contains": { "$ref": "#" }, 4973 "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, 4974 "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, 4975 "required": { "$ref": "#/definitions/stringArray" }, 4976 "additionalProperties": { "$ref": "#" }, 4977 "definitions": { 4978 "type": "object", 4979 "additionalProperties": { "$ref": "#" }, 4980 "default": {} 4981 }, 4982 "properties": { 4983 "type": "object", 4984 "additionalProperties": { "$ref": "#" }, 4985 "default": {} 4986 }, 4987 "patternProperties": { 4988 "type": "object", 4989 "additionalProperties": { "$ref": "#" }, 4990 "propertyNames": { "format": "regex" }, 4991 "default": {} 4992 }, 4993 "dependencies": { 4994 "type": "object", 4995 "additionalProperties": { 4996 "anyOf": [ 4997 { "$ref": "#" }, 4998 { "$ref": "#/definitions/stringArray" } 4999 ] 5000 } 5001 }, 5002 "propertyNames": { "$ref": "#" }, 5003 "const": true, 5004 "enum": { 5005 "type": "array", 5006 "items": true, 5007 "minItems": 1, 5008 "uniqueItems": true 5009 }, 5010 "type": { 5011 "anyOf": [ 5012 { "$ref": "#/definitions/simpleTypes" }, 5013 { 5014 "type": "array", 5015 "items": { "$ref": "#/definitions/simpleTypes" }, 5016 "minItems": 1, 5017 "uniqueItems": true 5018 } 5019 ] 5020 }, 5021 "format": { "type": "string" }, 5022 "contentMediaType": { "type": "string" }, 5023 "contentEncoding": { "type": "string" }, 5024 "if": {"$ref": "#"}, 5025 "then": {"$ref": "#"}, 5026 "else": {"$ref": "#"}, 5027 "allOf": { "$ref": "#/definitions/schemaArray" }, 5028 "anyOf": { "$ref": "#/definitions/schemaArray" }, 5029 "oneOf": { "$ref": "#/definitions/schemaArray" }, 5030 "not": { "$ref": "#" } 5031 }, 5032 "default": true 5033} 5034 5035},{}],42:[function(require,module,exports){ 5036'use strict'; 5037 5038// do not edit .js files directly - edit src/index.jst 5039 5040 5041 5042module.exports = function equal(a, b) { 5043 if (a === b) return true; 5044 5045 if (a && b && typeof a == 'object' && typeof b == 'object') { 5046 if (a.constructor !== b.constructor) return false; 5047 5048 var length, i, keys; 5049 if (Array.isArray(a)) { 5050 length = a.length; 5051 if (length != b.length) return false; 5052 for (i = length; i-- !== 0;) 5053 if (!equal(a[i], b[i])) return false; 5054 return true; 5055 } 5056 5057 5058 5059 if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; 5060 if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); 5061 if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); 5062 5063 keys = Object.keys(a); 5064 length = keys.length; 5065 if (length !== Object.keys(b).length) return false; 5066 5067 for (i = length; i-- !== 0;) 5068 if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; 5069 5070 for (i = length; i-- !== 0;) { 5071 var key = keys[i]; 5072 5073 if (!equal(a[key], b[key])) return false; 5074 } 5075 5076 return true; 5077 } 5078 5079 // true if both NaN, false otherwise 5080 return a!==a && b!==b; 5081}; 5082 5083},{}],43:[function(require,module,exports){ 5084'use strict'; 5085 5086module.exports = function (data, opts) { 5087 if (!opts) opts = {}; 5088 if (typeof opts === 'function') opts = { cmp: opts }; 5089 var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false; 5090 5091 var cmp = opts.cmp && (function (f) { 5092 return function (node) { 5093 return function (a, b) { 5094 var aobj = { key: a, value: node[a] }; 5095 var bobj = { key: b, value: node[b] }; 5096 return f(aobj, bobj); 5097 }; 5098 }; 5099 })(opts.cmp); 5100 5101 var seen = []; 5102 return (function stringify (node) { 5103 if (node && node.toJSON && typeof node.toJSON === 'function') { 5104 node = node.toJSON(); 5105 } 5106 5107 if (node === undefined) return; 5108 if (typeof node == 'number') return isFinite(node) ? '' + node : 'null'; 5109 if (typeof node !== 'object') return JSON.stringify(node); 5110 5111 var i, out; 5112 if (Array.isArray(node)) { 5113 out = '['; 5114 for (i = 0; i < node.length; i++) { 5115 if (i) out += ','; 5116 out += stringify(node[i]) || 'null'; 5117 } 5118 return out + ']'; 5119 } 5120 5121 if (node === null) return 'null'; 5122 5123 if (seen.indexOf(node) !== -1) { 5124 if (cycles) return JSON.stringify('__cycle__'); 5125 throw new TypeError('Converting circular structure to JSON'); 5126 } 5127 5128 var seenIndex = seen.push(node) - 1; 5129 var keys = Object.keys(node).sort(cmp && cmp(node)); 5130 out = ''; 5131 for (i = 0; i < keys.length; i++) { 5132 var key = keys[i]; 5133 var value = stringify(node[key]); 5134 5135 if (!value) continue; 5136 if (out) out += ','; 5137 out += JSON.stringify(key) + ':' + value; 5138 } 5139 seen.splice(seenIndex, 1); 5140 return '{' + out + '}'; 5141 })(data); 5142}; 5143 5144},{}],44:[function(require,module,exports){ 5145'use strict'; 5146 5147var traverse = module.exports = function (schema, opts, cb) { 5148 // Legacy support for v0.3.1 and earlier. 5149 if (typeof opts == 'function') { 5150 cb = opts; 5151 opts = {}; 5152 } 5153 5154 cb = opts.cb || cb; 5155 var pre = (typeof cb == 'function') ? cb : cb.pre || function() {}; 5156 var post = cb.post || function() {}; 5157 5158 _traverse(opts, pre, post, schema, '', schema); 5159}; 5160 5161 5162traverse.keywords = { 5163 additionalItems: true, 5164 items: true, 5165 contains: true, 5166 additionalProperties: true, 5167 propertyNames: true, 5168 not: true 5169}; 5170 5171traverse.arrayKeywords = { 5172 items: true, 5173 allOf: true, 5174 anyOf: true, 5175 oneOf: true 5176}; 5177 5178traverse.propsKeywords = { 5179 definitions: true, 5180 properties: true, 5181 patternProperties: true, 5182 dependencies: true 5183}; 5184 5185traverse.skipKeywords = { 5186 default: true, 5187 enum: true, 5188 const: true, 5189 required: true, 5190 maximum: true, 5191 minimum: true, 5192 exclusiveMaximum: true, 5193 exclusiveMinimum: true, 5194 multipleOf: true, 5195 maxLength: true, 5196 minLength: true, 5197 pattern: true, 5198 format: true, 5199 maxItems: true, 5200 minItems: true, 5201 uniqueItems: true, 5202 maxProperties: true, 5203 minProperties: true 5204}; 5205 5206 5207function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { 5208 if (schema && typeof schema == 'object' && !Array.isArray(schema)) { 5209 pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); 5210 for (var key in schema) { 5211 var sch = schema[key]; 5212 if (Array.isArray(sch)) { 5213 if (key in traverse.arrayKeywords) { 5214 for (var i=0; i<sch.length; i++) 5215 _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i); 5216 } 5217 } else if (key in traverse.propsKeywords) { 5218 if (sch && typeof sch == 'object') { 5219 for (var prop in sch) 5220 _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); 5221 } 5222 } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) { 5223 _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema); 5224 } 5225 } 5226 post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); 5227 } 5228} 5229 5230 5231function escapeJsonPtr(str) { 5232 return str.replace(/~/g, '~0').replace(/\//g, '~1'); 5233} 5234 5235},{}],45:[function(require,module,exports){ 5236/** @license URI.js v4.4.0 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ 5237(function (global, factory) { 5238 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 5239 typeof define === 'function' && define.amd ? define(['exports'], factory) : 5240 (factory((global.URI = global.URI || {}))); 5241}(this, (function (exports) { 'use strict'; 5242 5243function merge() { 5244 for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) { 5245 sets[_key] = arguments[_key]; 5246 } 5247 5248 if (sets.length > 1) { 5249 sets[0] = sets[0].slice(0, -1); 5250 var xl = sets.length - 1; 5251 for (var x = 1; x < xl; ++x) { 5252 sets[x] = sets[x].slice(1, -1); 5253 } 5254 sets[xl] = sets[xl].slice(1); 5255 return sets.join(''); 5256 } else { 5257 return sets[0]; 5258 } 5259} 5260function subexp(str) { 5261 return "(?:" + str + ")"; 5262} 5263function typeOf(o) { 5264 return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); 5265} 5266function toUpperCase(str) { 5267 return str.toUpperCase(); 5268} 5269function toArray(obj) { 5270 return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; 5271} 5272function assign(target, source) { 5273 var obj = target; 5274 if (source) { 5275 for (var key in source) { 5276 obj[key] = source[key]; 5277 } 5278 } 5279 return obj; 5280} 5281 5282function buildExps(isIRI) { 5283 var ALPHA$$ = "[A-Za-z]", 5284 CR$ = "[\\x0D]", 5285 DIGIT$$ = "[0-9]", 5286 DQUOTE$$ = "[\\x22]", 5287 HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), 5288 //case-insensitive 5289 LF$$ = "[\\x0A]", 5290 SP$$ = "[\\x20]", 5291 PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), 5292 //expanded 5293 GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", 5294 SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", 5295 RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), 5296 UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", 5297 //subset, excludes bidi control characters 5298 IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", 5299 //subset 5300 UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), 5301 SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), 5302 USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), 5303 DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), 5304 DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), 5305 //relaxed parsing rules 5306 IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), 5307 H16$ = subexp(HEXDIG$$ + "{1,4}"), 5308 LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), 5309 IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), 5310 // 6( h16 ":" ) ls32 5311 IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), 5312 // "::" 5( h16 ":" ) ls32 5313 IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), 5314 //[ h16 ] "::" 4( h16 ":" ) ls32 5315 IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), 5316 //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 5317 IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), 5318 //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 5319 IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), 5320 //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 5321 IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), 5322 //[ *4( h16 ":" ) h16 ] "::" ls32 5323 IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), 5324 //[ *5( h16 ":" ) h16 ] "::" h16 5325 IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), 5326 //[ *6( h16 ":" ) h16 ] "::" 5327 IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), 5328 ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), 5329 //RFC 6874 5330 IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), 5331 //RFC 6874 5332 IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), 5333 //RFC 6874, with relaxed parsing rules 5334 IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), 5335 IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), 5336 //RFC 6874 5337 REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), 5338 HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), 5339 PORT$ = subexp(DIGIT$$ + "*"), 5340 AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), 5341 PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), 5342 SEGMENT$ = subexp(PCHAR$ + "*"), 5343 SEGMENT_NZ$ = subexp(PCHAR$ + "+"), 5344 SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), 5345 PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), 5346 PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), 5347 //simplified 5348 PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), 5349 //simplified 5350 PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), 5351 //simplified 5352 PATH_EMPTY$ = "(?!" + PCHAR$ + ")", 5353 PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), 5354 QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), 5355 FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), 5356 HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), 5357 URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), 5358 RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), 5359 RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), 5360 URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), 5361 ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), 5362 GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", 5363 RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", 5364 ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", 5365 SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", 5366 AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; 5367 return { 5368 NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), 5369 NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), 5370 NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), 5371 NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), 5372 NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), 5373 NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), 5374 NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), 5375 ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), 5376 UNRESERVED: new RegExp(UNRESERVED$$, "g"), 5377 OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), 5378 PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), 5379 IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), 5380 IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules 5381 }; 5382} 5383var URI_PROTOCOL = buildExps(false); 5384 5385var IRI_PROTOCOL = buildExps(true); 5386 5387var slicedToArray = function () { 5388 function sliceIterator(arr, i) { 5389 var _arr = []; 5390 var _n = true; 5391 var _d = false; 5392 var _e = undefined; 5393 5394 try { 5395 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { 5396 _arr.push(_s.value); 5397 5398 if (i && _arr.length === i) break; 5399 } 5400 } catch (err) { 5401 _d = true; 5402 _e = err; 5403 } finally { 5404 try { 5405 if (!_n && _i["return"]) _i["return"](); 5406 } finally { 5407 if (_d) throw _e; 5408 } 5409 } 5410 5411 return _arr; 5412 } 5413 5414 return function (arr, i) { 5415 if (Array.isArray(arr)) { 5416 return arr; 5417 } else if (Symbol.iterator in Object(arr)) { 5418 return sliceIterator(arr, i); 5419 } else { 5420 throw new TypeError("Invalid attempt to destructure non-iterable instance"); 5421 } 5422 }; 5423}(); 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437var toConsumableArray = function (arr) { 5438 if (Array.isArray(arr)) { 5439 for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; 5440 5441 return arr2; 5442 } else { 5443 return Array.from(arr); 5444 } 5445}; 5446 5447/** Highest positive signed 32-bit float value */ 5448 5449var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 5450 5451/** Bootstring parameters */ 5452var base = 36; 5453var tMin = 1; 5454var tMax = 26; 5455var skew = 38; 5456var damp = 700; 5457var initialBias = 72; 5458var initialN = 128; // 0x80 5459var delimiter = '-'; // '\x2D' 5460 5461/** Regular expressions */ 5462var regexPunycode = /^xn--/; 5463var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars 5464var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators 5465 5466/** Error messages */ 5467var errors = { 5468 'overflow': 'Overflow: input needs wider integers to process', 5469 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 5470 'invalid-input': 'Invalid input' 5471}; 5472 5473/** Convenience shortcuts */ 5474var baseMinusTMin = base - tMin; 5475var floor = Math.floor; 5476var stringFromCharCode = String.fromCharCode; 5477 5478/*--------------------------------------------------------------------------*/ 5479 5480/** 5481 * A generic error utility function. 5482 * @private 5483 * @param {String} type The error type. 5484 * @returns {Error} Throws a `RangeError` with the applicable error message. 5485 */ 5486function error$1(type) { 5487 throw new RangeError(errors[type]); 5488} 5489 5490/** 5491 * A generic `Array#map` utility function. 5492 * @private 5493 * @param {Array} array The array to iterate over. 5494 * @param {Function} callback The function that gets called for every array 5495 * item. 5496 * @returns {Array} A new array of values returned by the callback function. 5497 */ 5498function map(array, fn) { 5499 var result = []; 5500 var length = array.length; 5501 while (length--) { 5502 result[length] = fn(array[length]); 5503 } 5504 return result; 5505} 5506 5507/** 5508 * A simple `Array#map`-like wrapper to work with domain name strings or email 5509 * addresses. 5510 * @private 5511 * @param {String} domain The domain name or email address. 5512 * @param {Function} callback The function that gets called for every 5513 * character. 5514 * @returns {Array} A new string of characters returned by the callback 5515 * function. 5516 */ 5517function mapDomain(string, fn) { 5518 var parts = string.split('@'); 5519 var result = ''; 5520 if (parts.length > 1) { 5521 // In email addresses, only the domain name should be punycoded. Leave 5522 // the local part (i.e. everything up to `@`) intact. 5523 result = parts[0] + '@'; 5524 string = parts[1]; 5525 } 5526 // Avoid `split(regex)` for IE8 compatibility. See #17. 5527 string = string.replace(regexSeparators, '\x2E'); 5528 var labels = string.split('.'); 5529 var encoded = map(labels, fn).join('.'); 5530 return result + encoded; 5531} 5532 5533/** 5534 * Creates an array containing the numeric code points of each Unicode 5535 * character in the string. While JavaScript uses UCS-2 internally, 5536 * this function will convert a pair of surrogate halves (each of which 5537 * UCS-2 exposes as separate characters) into a single code point, 5538 * matching UTF-16. 5539 * @see `punycode.ucs2.encode` 5540 * @see <https://mathiasbynens.be/notes/javascript-encoding> 5541 * @memberOf punycode.ucs2 5542 * @name decode 5543 * @param {String} string The Unicode input string (UCS-2). 5544 * @returns {Array} The new array of code points. 5545 */ 5546function ucs2decode(string) { 5547 var output = []; 5548 var counter = 0; 5549 var length = string.length; 5550 while (counter < length) { 5551 var value = string.charCodeAt(counter++); 5552 if (value >= 0xD800 && value <= 0xDBFF && counter < length) { 5553 // It's a high surrogate, and there is a next character. 5554 var extra = string.charCodeAt(counter++); 5555 if ((extra & 0xFC00) == 0xDC00) { 5556 // Low surrogate. 5557 output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); 5558 } else { 5559 // It's an unmatched surrogate; only append this code unit, in case the 5560 // next code unit is the high surrogate of a surrogate pair. 5561 output.push(value); 5562 counter--; 5563 } 5564 } else { 5565 output.push(value); 5566 } 5567 } 5568 return output; 5569} 5570 5571/** 5572 * Creates a string based on an array of numeric code points. 5573 * @see `punycode.ucs2.decode` 5574 * @memberOf punycode.ucs2 5575 * @name encode 5576 * @param {Array} codePoints The array of numeric code points. 5577 * @returns {String} The new Unicode string (UCS-2). 5578 */ 5579var ucs2encode = function ucs2encode(array) { 5580 return String.fromCodePoint.apply(String, toConsumableArray(array)); 5581}; 5582 5583/** 5584 * Converts a basic code point into a digit/integer. 5585 * @see `digitToBasic()` 5586 * @private 5587 * @param {Number} codePoint The basic numeric code point value. 5588 * @returns {Number} The numeric value of a basic code point (for use in 5589 * representing integers) in the range `0` to `base - 1`, or `base` if 5590 * the code point does not represent a value. 5591 */ 5592var basicToDigit = function basicToDigit(codePoint) { 5593 if (codePoint - 0x30 < 0x0A) { 5594 return codePoint - 0x16; 5595 } 5596 if (codePoint - 0x41 < 0x1A) { 5597 return codePoint - 0x41; 5598 } 5599 if (codePoint - 0x61 < 0x1A) { 5600 return codePoint - 0x61; 5601 } 5602 return base; 5603}; 5604 5605/** 5606 * Converts a digit/integer into a basic code point. 5607 * @see `basicToDigit()` 5608 * @private 5609 * @param {Number} digit The numeric value of a basic code point. 5610 * @returns {Number} The basic code point whose value (when used for 5611 * representing integers) is `digit`, which needs to be in the range 5612 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is 5613 * used; else, the lowercase form is used. The behavior is undefined 5614 * if `flag` is non-zero and `digit` has no uppercase form. 5615 */ 5616var digitToBasic = function digitToBasic(digit, flag) { 5617 // 0..25 map to ASCII a..z or A..Z 5618 // 26..35 map to ASCII 0..9 5619 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); 5620}; 5621 5622/** 5623 * Bias adaptation function as per section 3.4 of RFC 3492. 5624 * https://tools.ietf.org/html/rfc3492#section-3.4 5625 * @private 5626 */ 5627var adapt = function adapt(delta, numPoints, firstTime) { 5628 var k = 0; 5629 delta = firstTime ? floor(delta / damp) : delta >> 1; 5630 delta += floor(delta / numPoints); 5631 for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { 5632 delta = floor(delta / baseMinusTMin); 5633 } 5634 return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); 5635}; 5636 5637/** 5638 * Converts a Punycode string of ASCII-only symbols to a string of Unicode 5639 * symbols. 5640 * @memberOf punycode 5641 * @param {String} input The Punycode string of ASCII-only symbols. 5642 * @returns {String} The resulting string of Unicode symbols. 5643 */ 5644var decode = function decode(input) { 5645 // Don't use UCS-2. 5646 var output = []; 5647 var inputLength = input.length; 5648 var i = 0; 5649 var n = initialN; 5650 var bias = initialBias; 5651 5652 // Handle the basic code points: let `basic` be the number of input code 5653 // points before the last delimiter, or `0` if there is none, then copy 5654 // the first basic code points to the output. 5655 5656 var basic = input.lastIndexOf(delimiter); 5657 if (basic < 0) { 5658 basic = 0; 5659 } 5660 5661 for (var j = 0; j < basic; ++j) { 5662 // if it's not a basic code point 5663 if (input.charCodeAt(j) >= 0x80) { 5664 error$1('not-basic'); 5665 } 5666 output.push(input.charCodeAt(j)); 5667 } 5668 5669 // Main decoding loop: start just after the last delimiter if any basic code 5670 // points were copied; start at the beginning otherwise. 5671 5672 for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ 5673 5674 // `index` is the index of the next character to be consumed. 5675 // Decode a generalized variable-length integer into `delta`, 5676 // which gets added to `i`. The overflow checking is easier 5677 // if we increase `i` as we go, then subtract off its starting 5678 // value at the end to obtain `delta`. 5679 var oldi = i; 5680 for (var w = 1, k = base;; /* no condition */k += base) { 5681 5682 if (index >= inputLength) { 5683 error$1('invalid-input'); 5684 } 5685 5686 var digit = basicToDigit(input.charCodeAt(index++)); 5687 5688 if (digit >= base || digit > floor((maxInt - i) / w)) { 5689 error$1('overflow'); 5690 } 5691 5692 i += digit * w; 5693 var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; 5694 5695 if (digit < t) { 5696 break; 5697 } 5698 5699 var baseMinusT = base - t; 5700 if (w > floor(maxInt / baseMinusT)) { 5701 error$1('overflow'); 5702 } 5703 5704 w *= baseMinusT; 5705 } 5706 5707 var out = output.length + 1; 5708 bias = adapt(i - oldi, out, oldi == 0); 5709 5710 // `i` was supposed to wrap around from `out` to `0`, 5711 // incrementing `n` each time, so we'll fix that now: 5712 if (floor(i / out) > maxInt - n) { 5713 error$1('overflow'); 5714 } 5715 5716 n += floor(i / out); 5717 i %= out; 5718 5719 // Insert `n` at position `i` of the output. 5720 output.splice(i++, 0, n); 5721 } 5722 5723 return String.fromCodePoint.apply(String, output); 5724}; 5725 5726/** 5727 * Converts a string of Unicode symbols (e.g. a domain name label) to a 5728 * Punycode string of ASCII-only symbols. 5729 * @memberOf punycode 5730 * @param {String} input The string of Unicode symbols. 5731 * @returns {String} The resulting Punycode string of ASCII-only symbols. 5732 */ 5733var encode = function encode(input) { 5734 var output = []; 5735 5736 // Convert the input in UCS-2 to an array of Unicode code points. 5737 input = ucs2decode(input); 5738 5739 // Cache the length. 5740 var inputLength = input.length; 5741 5742 // Initialize the state. 5743 var n = initialN; 5744 var delta = 0; 5745 var bias = initialBias; 5746 5747 // Handle the basic code points. 5748 var _iteratorNormalCompletion = true; 5749 var _didIteratorError = false; 5750 var _iteratorError = undefined; 5751 5752 try { 5753 for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { 5754 var _currentValue2 = _step.value; 5755 5756 if (_currentValue2 < 0x80) { 5757 output.push(stringFromCharCode(_currentValue2)); 5758 } 5759 } 5760 } catch (err) { 5761 _didIteratorError = true; 5762 _iteratorError = err; 5763 } finally { 5764 try { 5765 if (!_iteratorNormalCompletion && _iterator.return) { 5766 _iterator.return(); 5767 } 5768 } finally { 5769 if (_didIteratorError) { 5770 throw _iteratorError; 5771 } 5772 } 5773 } 5774 5775 var basicLength = output.length; 5776 var handledCPCount = basicLength; 5777 5778 // `handledCPCount` is the number of code points that have been handled; 5779 // `basicLength` is the number of basic code points. 5780 5781 // Finish the basic string with a delimiter unless it's empty. 5782 if (basicLength) { 5783 output.push(delimiter); 5784 } 5785 5786 // Main encoding loop: 5787 while (handledCPCount < inputLength) { 5788 5789 // All non-basic code points < n have been handled already. Find the next 5790 // larger one: 5791 var m = maxInt; 5792 var _iteratorNormalCompletion2 = true; 5793 var _didIteratorError2 = false; 5794 var _iteratorError2 = undefined; 5795 5796 try { 5797 for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { 5798 var currentValue = _step2.value; 5799 5800 if (currentValue >= n && currentValue < m) { 5801 m = currentValue; 5802 } 5803 } 5804 5805 // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, 5806 // but guard against overflow. 5807 } catch (err) { 5808 _didIteratorError2 = true; 5809 _iteratorError2 = err; 5810 } finally { 5811 try { 5812 if (!_iteratorNormalCompletion2 && _iterator2.return) { 5813 _iterator2.return(); 5814 } 5815 } finally { 5816 if (_didIteratorError2) { 5817 throw _iteratorError2; 5818 } 5819 } 5820 } 5821 5822 var handledCPCountPlusOne = handledCPCount + 1; 5823 if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { 5824 error$1('overflow'); 5825 } 5826 5827 delta += (m - n) * handledCPCountPlusOne; 5828 n = m; 5829 5830 var _iteratorNormalCompletion3 = true; 5831 var _didIteratorError3 = false; 5832 var _iteratorError3 = undefined; 5833 5834 try { 5835 for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { 5836 var _currentValue = _step3.value; 5837 5838 if (_currentValue < n && ++delta > maxInt) { 5839 error$1('overflow'); 5840 } 5841 if (_currentValue == n) { 5842 // Represent delta as a generalized variable-length integer. 5843 var q = delta; 5844 for (var k = base;; /* no condition */k += base) { 5845 var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; 5846 if (q < t) { 5847 break; 5848 } 5849 var qMinusT = q - t; 5850 var baseMinusT = base - t; 5851 output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); 5852 q = floor(qMinusT / baseMinusT); 5853 } 5854 5855 output.push(stringFromCharCode(digitToBasic(q, 0))); 5856 bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); 5857 delta = 0; 5858 ++handledCPCount; 5859 } 5860 } 5861 } catch (err) { 5862 _didIteratorError3 = true; 5863 _iteratorError3 = err; 5864 } finally { 5865 try { 5866 if (!_iteratorNormalCompletion3 && _iterator3.return) { 5867 _iterator3.return(); 5868 } 5869 } finally { 5870 if (_didIteratorError3) { 5871 throw _iteratorError3; 5872 } 5873 } 5874 } 5875 5876 ++delta; 5877 ++n; 5878 } 5879 return output.join(''); 5880}; 5881 5882/** 5883 * Converts a Punycode string representing a domain name or an email address 5884 * to Unicode. Only the Punycoded parts of the input will be converted, i.e. 5885 * it doesn't matter if you call it on a string that has already been 5886 * converted to Unicode. 5887 * @memberOf punycode 5888 * @param {String} input The Punycoded domain name or email address to 5889 * convert to Unicode. 5890 * @returns {String} The Unicode representation of the given Punycode 5891 * string. 5892 */ 5893var toUnicode = function toUnicode(input) { 5894 return mapDomain(input, function (string) { 5895 return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; 5896 }); 5897}; 5898 5899/** 5900 * Converts a Unicode string representing a domain name or an email address to 5901 * Punycode. Only the non-ASCII parts of the domain name will be converted, 5902 * i.e. it doesn't matter if you call it with a domain that's already in 5903 * ASCII. 5904 * @memberOf punycode 5905 * @param {String} input The domain name or email address to convert, as a 5906 * Unicode string. 5907 * @returns {String} The Punycode representation of the given domain name or 5908 * email address. 5909 */ 5910var toASCII = function toASCII(input) { 5911 return mapDomain(input, function (string) { 5912 return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; 5913 }); 5914}; 5915 5916/*--------------------------------------------------------------------------*/ 5917 5918/** Define the public API */ 5919var punycode = { 5920 /** 5921 * A string representing the current Punycode.js version number. 5922 * @memberOf punycode 5923 * @type String 5924 */ 5925 'version': '2.1.0', 5926 /** 5927 * An object of methods to convert from JavaScript's internal character 5928 * representation (UCS-2) to Unicode code points, and back. 5929 * @see <https://mathiasbynens.be/notes/javascript-encoding> 5930 * @memberOf punycode 5931 * @type Object 5932 */ 5933 'ucs2': { 5934 'decode': ucs2decode, 5935 'encode': ucs2encode 5936 }, 5937 'decode': decode, 5938 'encode': encode, 5939 'toASCII': toASCII, 5940 'toUnicode': toUnicode 5941}; 5942 5943/** 5944 * URI.js 5945 * 5946 * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. 5947 * @author <a href="mailto:gary.court@gmail.com">Gary Court</a> 5948 * @see http://github.com/garycourt/uri-js 5949 */ 5950/** 5951 * Copyright 2011 Gary Court. All rights reserved. 5952 * 5953 * Redistribution and use in source and binary forms, with or without modification, are 5954 * permitted provided that the following conditions are met: 5955 * 5956 * 1. Redistributions of source code must retain the above copyright notice, this list of 5957 * conditions and the following disclaimer. 5958 * 5959 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 5960 * of conditions and the following disclaimer in the documentation and/or other materials 5961 * provided with the distribution. 5962 * 5963 * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED 5964 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 5965 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR 5966 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 5967 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 5968 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 5969 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 5970 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 5971 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 5972 * 5973 * The views and conclusions contained in the software and documentation are those of the 5974 * authors and should not be interpreted as representing official policies, either expressed 5975 * or implied, of Gary Court. 5976 */ 5977var SCHEMES = {}; 5978function pctEncChar(chr) { 5979 var c = chr.charCodeAt(0); 5980 var e = void 0; 5981 if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); 5982 return e; 5983} 5984function pctDecChars(str) { 5985 var newStr = ""; 5986 var i = 0; 5987 var il = str.length; 5988 while (i < il) { 5989 var c = parseInt(str.substr(i + 1, 2), 16); 5990 if (c < 128) { 5991 newStr += String.fromCharCode(c); 5992 i += 3; 5993 } else if (c >= 194 && c < 224) { 5994 if (il - i >= 6) { 5995 var c2 = parseInt(str.substr(i + 4, 2), 16); 5996 newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); 5997 } else { 5998 newStr += str.substr(i, 6); 5999 } 6000 i += 6; 6001 } else if (c >= 224) { 6002 if (il - i >= 9) { 6003 var _c = parseInt(str.substr(i + 4, 2), 16); 6004 var c3 = parseInt(str.substr(i + 7, 2), 16); 6005 newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); 6006 } else { 6007 newStr += str.substr(i, 9); 6008 } 6009 i += 9; 6010 } else { 6011 newStr += str.substr(i, 3); 6012 i += 3; 6013 } 6014 } 6015 return newStr; 6016} 6017function _normalizeComponentEncoding(components, protocol) { 6018 function decodeUnreserved(str) { 6019 var decStr = pctDecChars(str); 6020 return !decStr.match(protocol.UNRESERVED) ? str : decStr; 6021 } 6022 if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); 6023 if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); 6024 if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); 6025 if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); 6026 if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); 6027 if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); 6028 return components; 6029} 6030 6031function _stripLeadingZeros(str) { 6032 return str.replace(/^0*(.*)/, "$1") || "0"; 6033} 6034function _normalizeIPv4(host, protocol) { 6035 var matches = host.match(protocol.IPV4ADDRESS) || []; 6036 6037 var _matches = slicedToArray(matches, 2), 6038 address = _matches[1]; 6039 6040 if (address) { 6041 return address.split(".").map(_stripLeadingZeros).join("."); 6042 } else { 6043 return host; 6044 } 6045} 6046function _normalizeIPv6(host, protocol) { 6047 var matches = host.match(protocol.IPV6ADDRESS) || []; 6048 6049 var _matches2 = slicedToArray(matches, 3), 6050 address = _matches2[1], 6051 zone = _matches2[2]; 6052 6053 if (address) { 6054 var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), 6055 _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), 6056 last = _address$toLowerCase$2[0], 6057 first = _address$toLowerCase$2[1]; 6058 6059 var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; 6060 var lastFields = last.split(":").map(_stripLeadingZeros); 6061 var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); 6062 var fieldCount = isLastFieldIPv4Address ? 7 : 8; 6063 var lastFieldsStart = lastFields.length - fieldCount; 6064 var fields = Array(fieldCount); 6065 for (var x = 0; x < fieldCount; ++x) { 6066 fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; 6067 } 6068 if (isLastFieldIPv4Address) { 6069 fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); 6070 } 6071 var allZeroFields = fields.reduce(function (acc, field, index) { 6072 if (!field || field === "0") { 6073 var lastLongest = acc[acc.length - 1]; 6074 if (lastLongest && lastLongest.index + lastLongest.length === index) { 6075 lastLongest.length++; 6076 } else { 6077 acc.push({ index: index, length: 1 }); 6078 } 6079 } 6080 return acc; 6081 }, []); 6082 var longestZeroFields = allZeroFields.sort(function (a, b) { 6083 return b.length - a.length; 6084 })[0]; 6085 var newHost = void 0; 6086 if (longestZeroFields && longestZeroFields.length > 1) { 6087 var newFirst = fields.slice(0, longestZeroFields.index); 6088 var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); 6089 newHost = newFirst.join(":") + "::" + newLast.join(":"); 6090 } else { 6091 newHost = fields.join(":"); 6092 } 6093 if (zone) { 6094 newHost += "%" + zone; 6095 } 6096 return newHost; 6097 } else { 6098 return host; 6099 } 6100} 6101var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; 6102var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; 6103function parse(uriString) { 6104 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 6105 6106 var components = {}; 6107 var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; 6108 if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; 6109 var matches = uriString.match(URI_PARSE); 6110 if (matches) { 6111 if (NO_MATCH_IS_UNDEFINED) { 6112 //store each component 6113 components.scheme = matches[1]; 6114 components.userinfo = matches[3]; 6115 components.host = matches[4]; 6116 components.port = parseInt(matches[5], 10); 6117 components.path = matches[6] || ""; 6118 components.query = matches[7]; 6119 components.fragment = matches[8]; 6120 //fix port number 6121 if (isNaN(components.port)) { 6122 components.port = matches[5]; 6123 } 6124 } else { 6125 //IE FIX for improper RegExp matching 6126 //store each component 6127 components.scheme = matches[1] || undefined; 6128 components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; 6129 components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; 6130 components.port = parseInt(matches[5], 10); 6131 components.path = matches[6] || ""; 6132 components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; 6133 components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; 6134 //fix port number 6135 if (isNaN(components.port)) { 6136 components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; 6137 } 6138 } 6139 if (components.host) { 6140 //normalize IP hosts 6141 components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); 6142 } 6143 //determine reference type 6144 if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { 6145 components.reference = "same-document"; 6146 } else if (components.scheme === undefined) { 6147 components.reference = "relative"; 6148 } else if (components.fragment === undefined) { 6149 components.reference = "absolute"; 6150 } else { 6151 components.reference = "uri"; 6152 } 6153 //check for reference errors 6154 if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { 6155 components.error = components.error || "URI is not a " + options.reference + " reference."; 6156 } 6157 //find scheme handler 6158 var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; 6159 //check if scheme can't handle IRIs 6160 if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { 6161 //if host component is a domain name 6162 if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { 6163 //convert Unicode IDN -> ASCII IDN 6164 try { 6165 components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); 6166 } catch (e) { 6167 components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; 6168 } 6169 } 6170 //convert IRI -> URI 6171 _normalizeComponentEncoding(components, URI_PROTOCOL); 6172 } else { 6173 //normalize encodings 6174 _normalizeComponentEncoding(components, protocol); 6175 } 6176 //perform scheme specific parsing 6177 if (schemeHandler && schemeHandler.parse) { 6178 schemeHandler.parse(components, options); 6179 } 6180 } else { 6181 components.error = components.error || "URI can not be parsed."; 6182 } 6183 return components; 6184} 6185 6186function _recomposeAuthority(components, options) { 6187 var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; 6188 var uriTokens = []; 6189 if (components.userinfo !== undefined) { 6190 uriTokens.push(components.userinfo); 6191 uriTokens.push("@"); 6192 } 6193 if (components.host !== undefined) { 6194 //normalize IP hosts, add brackets and escape zone separator for IPv6 6195 uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { 6196 return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; 6197 })); 6198 } 6199 if (typeof components.port === "number" || typeof components.port === "string") { 6200 uriTokens.push(":"); 6201 uriTokens.push(String(components.port)); 6202 } 6203 return uriTokens.length ? uriTokens.join("") : undefined; 6204} 6205 6206var RDS1 = /^\.\.?\//; 6207var RDS2 = /^\/\.(\/|$)/; 6208var RDS3 = /^\/\.\.(\/|$)/; 6209var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; 6210function removeDotSegments(input) { 6211 var output = []; 6212 while (input.length) { 6213 if (input.match(RDS1)) { 6214 input = input.replace(RDS1, ""); 6215 } else if (input.match(RDS2)) { 6216 input = input.replace(RDS2, "/"); 6217 } else if (input.match(RDS3)) { 6218 input = input.replace(RDS3, "/"); 6219 output.pop(); 6220 } else if (input === "." || input === "..") { 6221 input = ""; 6222 } else { 6223 var im = input.match(RDS5); 6224 if (im) { 6225 var s = im[0]; 6226 input = input.slice(s.length); 6227 output.push(s); 6228 } else { 6229 throw new Error("Unexpected dot segment condition"); 6230 } 6231 } 6232 } 6233 return output.join(""); 6234} 6235 6236function serialize(components) { 6237 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 6238 6239 var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; 6240 var uriTokens = []; 6241 //find scheme handler 6242 var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; 6243 //perform scheme specific serialization 6244 if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); 6245 if (components.host) { 6246 //if host component is an IPv6 address 6247 if (protocol.IPV6ADDRESS.test(components.host)) {} 6248 //TODO: normalize IPv6 address as per RFC 5952 6249 6250 //if host component is a domain name 6251 else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { 6252 //convert IDN via punycode 6253 try { 6254 components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); 6255 } catch (e) { 6256 components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; 6257 } 6258 } 6259 } 6260 //normalize encoding 6261 _normalizeComponentEncoding(components, protocol); 6262 if (options.reference !== "suffix" && components.scheme) { 6263 uriTokens.push(components.scheme); 6264 uriTokens.push(":"); 6265 } 6266 var authority = _recomposeAuthority(components, options); 6267 if (authority !== undefined) { 6268 if (options.reference !== "suffix") { 6269 uriTokens.push("//"); 6270 } 6271 uriTokens.push(authority); 6272 if (components.path && components.path.charAt(0) !== "/") { 6273 uriTokens.push("/"); 6274 } 6275 } 6276 if (components.path !== undefined) { 6277 var s = components.path; 6278 if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { 6279 s = removeDotSegments(s); 6280 } 6281 if (authority === undefined) { 6282 s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" 6283 } 6284 uriTokens.push(s); 6285 } 6286 if (components.query !== undefined) { 6287 uriTokens.push("?"); 6288 uriTokens.push(components.query); 6289 } 6290 if (components.fragment !== undefined) { 6291 uriTokens.push("#"); 6292 uriTokens.push(components.fragment); 6293 } 6294 return uriTokens.join(""); //merge tokens into a string 6295} 6296 6297function resolveComponents(base, relative) { 6298 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 6299 var skipNormalization = arguments[3]; 6300 6301 var target = {}; 6302 if (!skipNormalization) { 6303 base = parse(serialize(base, options), options); //normalize base components 6304 relative = parse(serialize(relative, options), options); //normalize relative components 6305 } 6306 options = options || {}; 6307 if (!options.tolerant && relative.scheme) { 6308 target.scheme = relative.scheme; 6309 //target.authority = relative.authority; 6310 target.userinfo = relative.userinfo; 6311 target.host = relative.host; 6312 target.port = relative.port; 6313 target.path = removeDotSegments(relative.path || ""); 6314 target.query = relative.query; 6315 } else { 6316 if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { 6317 //target.authority = relative.authority; 6318 target.userinfo = relative.userinfo; 6319 target.host = relative.host; 6320 target.port = relative.port; 6321 target.path = removeDotSegments(relative.path || ""); 6322 target.query = relative.query; 6323 } else { 6324 if (!relative.path) { 6325 target.path = base.path; 6326 if (relative.query !== undefined) { 6327 target.query = relative.query; 6328 } else { 6329 target.query = base.query; 6330 } 6331 } else { 6332 if (relative.path.charAt(0) === "/") { 6333 target.path = removeDotSegments(relative.path); 6334 } else { 6335 if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { 6336 target.path = "/" + relative.path; 6337 } else if (!base.path) { 6338 target.path = relative.path; 6339 } else { 6340 target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; 6341 } 6342 target.path = removeDotSegments(target.path); 6343 } 6344 target.query = relative.query; 6345 } 6346 //target.authority = base.authority; 6347 target.userinfo = base.userinfo; 6348 target.host = base.host; 6349 target.port = base.port; 6350 } 6351 target.scheme = base.scheme; 6352 } 6353 target.fragment = relative.fragment; 6354 return target; 6355} 6356 6357function resolve(baseURI, relativeURI, options) { 6358 var schemelessOptions = assign({ scheme: 'null' }, options); 6359 return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); 6360} 6361 6362function normalize(uri, options) { 6363 if (typeof uri === "string") { 6364 uri = serialize(parse(uri, options), options); 6365 } else if (typeOf(uri) === "object") { 6366 uri = parse(serialize(uri, options), options); 6367 } 6368 return uri; 6369} 6370 6371function equal(uriA, uriB, options) { 6372 if (typeof uriA === "string") { 6373 uriA = serialize(parse(uriA, options), options); 6374 } else if (typeOf(uriA) === "object") { 6375 uriA = serialize(uriA, options); 6376 } 6377 if (typeof uriB === "string") { 6378 uriB = serialize(parse(uriB, options), options); 6379 } else if (typeOf(uriB) === "object") { 6380 uriB = serialize(uriB, options); 6381 } 6382 return uriA === uriB; 6383} 6384 6385function escapeComponent(str, options) { 6386 return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); 6387} 6388 6389function unescapeComponent(str, options) { 6390 return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); 6391} 6392 6393var handler = { 6394 scheme: "http", 6395 domainHost: true, 6396 parse: function parse(components, options) { 6397 //report missing host 6398 if (!components.host) { 6399 components.error = components.error || "HTTP URIs must have a host."; 6400 } 6401 return components; 6402 }, 6403 serialize: function serialize(components, options) { 6404 var secure = String(components.scheme).toLowerCase() === "https"; 6405 //normalize the default port 6406 if (components.port === (secure ? 443 : 80) || components.port === "") { 6407 components.port = undefined; 6408 } 6409 //normalize the empty path 6410 if (!components.path) { 6411 components.path = "/"; 6412 } 6413 //NOTE: We do not parse query strings for HTTP URIs 6414 //as WWW Form Url Encoded query strings are part of the HTML4+ spec, 6415 //and not the HTTP spec. 6416 return components; 6417 } 6418}; 6419 6420var handler$1 = { 6421 scheme: "https", 6422 domainHost: handler.domainHost, 6423 parse: handler.parse, 6424 serialize: handler.serialize 6425}; 6426 6427function isSecure(wsComponents) { 6428 return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss"; 6429} 6430//RFC 6455 6431var handler$2 = { 6432 scheme: "ws", 6433 domainHost: true, 6434 parse: function parse(components, options) { 6435 var wsComponents = components; 6436 //indicate if the secure flag is set 6437 wsComponents.secure = isSecure(wsComponents); 6438 //construct resouce name 6439 wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : ''); 6440 wsComponents.path = undefined; 6441 wsComponents.query = undefined; 6442 return wsComponents; 6443 }, 6444 serialize: function serialize(wsComponents, options) { 6445 //normalize the default port 6446 if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") { 6447 wsComponents.port = undefined; 6448 } 6449 //ensure scheme matches secure flag 6450 if (typeof wsComponents.secure === 'boolean') { 6451 wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws'; 6452 wsComponents.secure = undefined; 6453 } 6454 //reconstruct path from resource name 6455 if (wsComponents.resourceName) { 6456 var _wsComponents$resourc = wsComponents.resourceName.split('?'), 6457 _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2), 6458 path = _wsComponents$resourc2[0], 6459 query = _wsComponents$resourc2[1]; 6460 6461 wsComponents.path = path && path !== '/' ? path : undefined; 6462 wsComponents.query = query; 6463 wsComponents.resourceName = undefined; 6464 } 6465 //forbid fragment component 6466 wsComponents.fragment = undefined; 6467 return wsComponents; 6468 } 6469}; 6470 6471var handler$3 = { 6472 scheme: "wss", 6473 domainHost: handler$2.domainHost, 6474 parse: handler$2.parse, 6475 serialize: handler$2.serialize 6476}; 6477 6478var O = {}; 6479var isIRI = true; 6480//RFC 3986 6481var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; 6482var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive 6483var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded 6484//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = 6485//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; 6486//const WSP$$ = "[\\x20\\x09]"; 6487//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) 6488//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext 6489//const VCHAR$$ = "[\\x21-\\x7E]"; 6490//const WSP$$ = "[\\x20\\x09]"; 6491//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext 6492//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); 6493//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); 6494//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); 6495var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; 6496var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; 6497var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); 6498var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; 6499var UNRESERVED = new RegExp(UNRESERVED$$, "g"); 6500var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); 6501var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); 6502var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); 6503var NOT_HFVALUE = NOT_HFNAME; 6504function decodeUnreserved(str) { 6505 var decStr = pctDecChars(str); 6506 return !decStr.match(UNRESERVED) ? str : decStr; 6507} 6508var handler$4 = { 6509 scheme: "mailto", 6510 parse: function parse$$1(components, options) { 6511 var mailtoComponents = components; 6512 var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; 6513 mailtoComponents.path = undefined; 6514 if (mailtoComponents.query) { 6515 var unknownHeaders = false; 6516 var headers = {}; 6517 var hfields = mailtoComponents.query.split("&"); 6518 for (var x = 0, xl = hfields.length; x < xl; ++x) { 6519 var hfield = hfields[x].split("="); 6520 switch (hfield[0]) { 6521 case "to": 6522 var toAddrs = hfield[1].split(","); 6523 for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { 6524 to.push(toAddrs[_x]); 6525 } 6526 break; 6527 case "subject": 6528 mailtoComponents.subject = unescapeComponent(hfield[1], options); 6529 break; 6530 case "body": 6531 mailtoComponents.body = unescapeComponent(hfield[1], options); 6532 break; 6533 default: 6534 unknownHeaders = true; 6535 headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); 6536 break; 6537 } 6538 } 6539 if (unknownHeaders) mailtoComponents.headers = headers; 6540 } 6541 mailtoComponents.query = undefined; 6542 for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { 6543 var addr = to[_x2].split("@"); 6544 addr[0] = unescapeComponent(addr[0]); 6545 if (!options.unicodeSupport) { 6546 //convert Unicode IDN -> ASCII IDN 6547 try { 6548 addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); 6549 } catch (e) { 6550 mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; 6551 } 6552 } else { 6553 addr[1] = unescapeComponent(addr[1], options).toLowerCase(); 6554 } 6555 to[_x2] = addr.join("@"); 6556 } 6557 return mailtoComponents; 6558 }, 6559 serialize: function serialize$$1(mailtoComponents, options) { 6560 var components = mailtoComponents; 6561 var to = toArray(mailtoComponents.to); 6562 if (to) { 6563 for (var x = 0, xl = to.length; x < xl; ++x) { 6564 var toAddr = String(to[x]); 6565 var atIdx = toAddr.lastIndexOf("@"); 6566 var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); 6567 var domain = toAddr.slice(atIdx + 1); 6568 //convert IDN via punycode 6569 try { 6570 domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); 6571 } catch (e) { 6572 components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; 6573 } 6574 to[x] = localPart + "@" + domain; 6575 } 6576 components.path = to.join(","); 6577 } 6578 var headers = mailtoComponents.headers = mailtoComponents.headers || {}; 6579 if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; 6580 if (mailtoComponents.body) headers["body"] = mailtoComponents.body; 6581 var fields = []; 6582 for (var name in headers) { 6583 if (headers[name] !== O[name]) { 6584 fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); 6585 } 6586 } 6587 if (fields.length) { 6588 components.query = fields.join("&"); 6589 } 6590 return components; 6591 } 6592}; 6593 6594var URN_PARSE = /^([^\:]+)\:(.*)/; 6595//RFC 2141 6596var handler$5 = { 6597 scheme: "urn", 6598 parse: function parse$$1(components, options) { 6599 var matches = components.path && components.path.match(URN_PARSE); 6600 var urnComponents = components; 6601 if (matches) { 6602 var scheme = options.scheme || urnComponents.scheme || "urn"; 6603 var nid = matches[1].toLowerCase(); 6604 var nss = matches[2]; 6605 var urnScheme = scheme + ":" + (options.nid || nid); 6606 var schemeHandler = SCHEMES[urnScheme]; 6607 urnComponents.nid = nid; 6608 urnComponents.nss = nss; 6609 urnComponents.path = undefined; 6610 if (schemeHandler) { 6611 urnComponents = schemeHandler.parse(urnComponents, options); 6612 } 6613 } else { 6614 urnComponents.error = urnComponents.error || "URN can not be parsed."; 6615 } 6616 return urnComponents; 6617 }, 6618 serialize: function serialize$$1(urnComponents, options) { 6619 var scheme = options.scheme || urnComponents.scheme || "urn"; 6620 var nid = urnComponents.nid; 6621 var urnScheme = scheme + ":" + (options.nid || nid); 6622 var schemeHandler = SCHEMES[urnScheme]; 6623 if (schemeHandler) { 6624 urnComponents = schemeHandler.serialize(urnComponents, options); 6625 } 6626 var uriComponents = urnComponents; 6627 var nss = urnComponents.nss; 6628 uriComponents.path = (nid || options.nid) + ":" + nss; 6629 return uriComponents; 6630 } 6631}; 6632 6633var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; 6634//RFC 4122 6635var handler$6 = { 6636 scheme: "urn:uuid", 6637 parse: function parse(urnComponents, options) { 6638 var uuidComponents = urnComponents; 6639 uuidComponents.uuid = uuidComponents.nss; 6640 uuidComponents.nss = undefined; 6641 if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { 6642 uuidComponents.error = uuidComponents.error || "UUID is not valid."; 6643 } 6644 return uuidComponents; 6645 }, 6646 serialize: function serialize(uuidComponents, options) { 6647 var urnComponents = uuidComponents; 6648 //normalize UUID 6649 urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); 6650 return urnComponents; 6651 } 6652}; 6653 6654SCHEMES[handler.scheme] = handler; 6655SCHEMES[handler$1.scheme] = handler$1; 6656SCHEMES[handler$2.scheme] = handler$2; 6657SCHEMES[handler$3.scheme] = handler$3; 6658SCHEMES[handler$4.scheme] = handler$4; 6659SCHEMES[handler$5.scheme] = handler$5; 6660SCHEMES[handler$6.scheme] = handler$6; 6661 6662exports.SCHEMES = SCHEMES; 6663exports.pctEncChar = pctEncChar; 6664exports.pctDecChars = pctDecChars; 6665exports.parse = parse; 6666exports.removeDotSegments = removeDotSegments; 6667exports.serialize = serialize; 6668exports.resolveComponents = resolveComponents; 6669exports.resolve = resolve; 6670exports.normalize = normalize; 6671exports.equal = equal; 6672exports.escapeComponent = escapeComponent; 6673exports.unescapeComponent = unescapeComponent; 6674 6675Object.defineProperty(exports, '__esModule', { value: true }); 6676 6677}))); 6678 6679 6680},{}],"ajv":[function(require,module,exports){ 6681'use strict'; 6682 6683var compileSchema = require('./compile') 6684 , resolve = require('./compile/resolve') 6685 , Cache = require('./cache') 6686 , SchemaObject = require('./compile/schema_obj') 6687 , stableStringify = require('fast-json-stable-stringify') 6688 , formats = require('./compile/formats') 6689 , rules = require('./compile/rules') 6690 , $dataMetaSchema = require('./data') 6691 , util = require('./compile/util'); 6692 6693module.exports = Ajv; 6694 6695Ajv.prototype.validate = validate; 6696Ajv.prototype.compile = compile; 6697Ajv.prototype.addSchema = addSchema; 6698Ajv.prototype.addMetaSchema = addMetaSchema; 6699Ajv.prototype.validateSchema = validateSchema; 6700Ajv.prototype.getSchema = getSchema; 6701Ajv.prototype.removeSchema = removeSchema; 6702Ajv.prototype.addFormat = addFormat; 6703Ajv.prototype.errorsText = errorsText; 6704 6705Ajv.prototype._addSchema = _addSchema; 6706Ajv.prototype._compile = _compile; 6707 6708Ajv.prototype.compileAsync = require('./compile/async'); 6709var customKeyword = require('./keyword'); 6710Ajv.prototype.addKeyword = customKeyword.add; 6711Ajv.prototype.getKeyword = customKeyword.get; 6712Ajv.prototype.removeKeyword = customKeyword.remove; 6713Ajv.prototype.validateKeyword = customKeyword.validate; 6714 6715var errorClasses = require('./compile/error_classes'); 6716Ajv.ValidationError = errorClasses.Validation; 6717Ajv.MissingRefError = errorClasses.MissingRef; 6718Ajv.$dataMetaSchema = $dataMetaSchema; 6719 6720var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; 6721 6722var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; 6723var META_SUPPORT_DATA = ['/properties']; 6724 6725/** 6726 * Creates validator instance. 6727 * Usage: `Ajv(opts)` 6728 * @param {Object} opts optional options 6729 * @return {Object} ajv instance 6730 */ 6731function Ajv(opts) { 6732 if (!(this instanceof Ajv)) return new Ajv(opts); 6733 opts = this._opts = util.copy(opts) || {}; 6734 setLogger(this); 6735 this._schemas = {}; 6736 this._refs = {}; 6737 this._fragments = {}; 6738 this._formats = formats(opts.format); 6739 6740 this._cache = opts.cache || new Cache; 6741 this._loadingSchemas = {}; 6742 this._compilations = []; 6743 this.RULES = rules(); 6744 this._getId = chooseGetId(opts); 6745 6746 opts.loopRequired = opts.loopRequired || Infinity; 6747 if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; 6748 if (opts.serialize === undefined) opts.serialize = stableStringify; 6749 this._metaOpts = getMetaSchemaOptions(this); 6750 6751 if (opts.formats) addInitialFormats(this); 6752 if (opts.keywords) addInitialKeywords(this); 6753 addDefaultMetaSchema(this); 6754 if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); 6755 if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}}); 6756 addInitialSchemas(this); 6757} 6758 6759 6760 6761/** 6762 * Validate data using schema 6763 * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. 6764 * @this Ajv 6765 * @param {String|Object} schemaKeyRef key, ref or schema object 6766 * @param {Any} data to be validated 6767 * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). 6768 */ 6769function validate(schemaKeyRef, data) { 6770 var v; 6771 if (typeof schemaKeyRef == 'string') { 6772 v = this.getSchema(schemaKeyRef); 6773 if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); 6774 } else { 6775 var schemaObj = this._addSchema(schemaKeyRef); 6776 v = schemaObj.validate || this._compile(schemaObj); 6777 } 6778 6779 var valid = v(data); 6780 if (v.$async !== true) this.errors = v.errors; 6781 return valid; 6782} 6783 6784 6785/** 6786 * Create validating function for passed schema. 6787 * @this Ajv 6788 * @param {Object} schema schema object 6789 * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. 6790 * @return {Function} validating function 6791 */ 6792function compile(schema, _meta) { 6793 var schemaObj = this._addSchema(schema, undefined, _meta); 6794 return schemaObj.validate || this._compile(schemaObj); 6795} 6796 6797 6798/** 6799 * Adds schema to the instance. 6800 * @this Ajv 6801 * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. 6802 * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. 6803 * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. 6804 * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. 6805 * @return {Ajv} this for method chaining 6806 */ 6807function addSchema(schema, key, _skipValidation, _meta) { 6808 if (Array.isArray(schema)){ 6809 for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta); 6810 return this; 6811 } 6812 var id = this._getId(schema); 6813 if (id !== undefined && typeof id != 'string') 6814 throw new Error('schema id must be string'); 6815 key = resolve.normalizeId(key || id); 6816 checkUnique(this, key); 6817 this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true); 6818 return this; 6819} 6820 6821 6822/** 6823 * Add schema that will be used to validate other schemas 6824 * options in META_IGNORE_OPTIONS are alway set to false 6825 * @this Ajv 6826 * @param {Object} schema schema object 6827 * @param {String} key optional schema key 6828 * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema 6829 * @return {Ajv} this for method chaining 6830 */ 6831function addMetaSchema(schema, key, skipValidation) { 6832 this.addSchema(schema, key, skipValidation, true); 6833 return this; 6834} 6835 6836 6837/** 6838 * Validate schema 6839 * @this Ajv 6840 * @param {Object} schema schema to validate 6841 * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid 6842 * @return {Boolean} true if schema is valid 6843 */ 6844function validateSchema(schema, throwOrLogError) { 6845 var $schema = schema.$schema; 6846 if ($schema !== undefined && typeof $schema != 'string') 6847 throw new Error('$schema must be a string'); 6848 $schema = $schema || this._opts.defaultMeta || defaultMeta(this); 6849 if (!$schema) { 6850 this.logger.warn('meta-schema not available'); 6851 this.errors = null; 6852 return true; 6853 } 6854 var valid = this.validate($schema, schema); 6855 if (!valid && throwOrLogError) { 6856 var message = 'schema is invalid: ' + this.errorsText(); 6857 if (this._opts.validateSchema == 'log') this.logger.error(message); 6858 else throw new Error(message); 6859 } 6860 return valid; 6861} 6862 6863 6864function defaultMeta(self) { 6865 var meta = self._opts.meta; 6866 self._opts.defaultMeta = typeof meta == 'object' 6867 ? self._getId(meta) || meta 6868 : self.getSchema(META_SCHEMA_ID) 6869 ? META_SCHEMA_ID 6870 : undefined; 6871 return self._opts.defaultMeta; 6872} 6873 6874 6875/** 6876 * Get compiled schema from the instance by `key` or `ref`. 6877 * @this Ajv 6878 * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). 6879 * @return {Function} schema validating function (with property `schema`). 6880 */ 6881function getSchema(keyRef) { 6882 var schemaObj = _getSchemaObj(this, keyRef); 6883 switch (typeof schemaObj) { 6884 case 'object': return schemaObj.validate || this._compile(schemaObj); 6885 case 'string': return this.getSchema(schemaObj); 6886 case 'undefined': return _getSchemaFragment(this, keyRef); 6887 } 6888} 6889 6890 6891function _getSchemaFragment(self, ref) { 6892 var res = resolve.schema.call(self, { schema: {} }, ref); 6893 if (res) { 6894 var schema = res.schema 6895 , root = res.root 6896 , baseId = res.baseId; 6897 var v = compileSchema.call(self, schema, root, undefined, baseId); 6898 self._fragments[ref] = new SchemaObject({ 6899 ref: ref, 6900 fragment: true, 6901 schema: schema, 6902 root: root, 6903 baseId: baseId, 6904 validate: v 6905 }); 6906 return v; 6907 } 6908} 6909 6910 6911function _getSchemaObj(self, keyRef) { 6912 keyRef = resolve.normalizeId(keyRef); 6913 return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef]; 6914} 6915 6916 6917/** 6918 * Remove cached schema(s). 6919 * If no parameter is passed all schemas but meta-schemas are removed. 6920 * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. 6921 * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. 6922 * @this Ajv 6923 * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object 6924 * @return {Ajv} this for method chaining 6925 */ 6926function removeSchema(schemaKeyRef) { 6927 if (schemaKeyRef instanceof RegExp) { 6928 _removeAllSchemas(this, this._schemas, schemaKeyRef); 6929 _removeAllSchemas(this, this._refs, schemaKeyRef); 6930 return this; 6931 } 6932 switch (typeof schemaKeyRef) { 6933 case 'undefined': 6934 _removeAllSchemas(this, this._schemas); 6935 _removeAllSchemas(this, this._refs); 6936 this._cache.clear(); 6937 return this; 6938 case 'string': 6939 var schemaObj = _getSchemaObj(this, schemaKeyRef); 6940 if (schemaObj) this._cache.del(schemaObj.cacheKey); 6941 delete this._schemas[schemaKeyRef]; 6942 delete this._refs[schemaKeyRef]; 6943 return this; 6944 case 'object': 6945 var serialize = this._opts.serialize; 6946 var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef; 6947 this._cache.del(cacheKey); 6948 var id = this._getId(schemaKeyRef); 6949 if (id) { 6950 id = resolve.normalizeId(id); 6951 delete this._schemas[id]; 6952 delete this._refs[id]; 6953 } 6954 } 6955 return this; 6956} 6957 6958 6959function _removeAllSchemas(self, schemas, regex) { 6960 for (var keyRef in schemas) { 6961 var schemaObj = schemas[keyRef]; 6962 if (!schemaObj.meta && (!regex || regex.test(keyRef))) { 6963 self._cache.del(schemaObj.cacheKey); 6964 delete schemas[keyRef]; 6965 } 6966 } 6967} 6968 6969 6970/* @this Ajv */ 6971function _addSchema(schema, skipValidation, meta, shouldAddSchema) { 6972 if (typeof schema != 'object' && typeof schema != 'boolean') 6973 throw new Error('schema should be object or boolean'); 6974 var serialize = this._opts.serialize; 6975 var cacheKey = serialize ? serialize(schema) : schema; 6976 var cached = this._cache.get(cacheKey); 6977 if (cached) return cached; 6978 6979 shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false; 6980 6981 var id = resolve.normalizeId(this._getId(schema)); 6982 if (id && shouldAddSchema) checkUnique(this, id); 6983 6984 var willValidate = this._opts.validateSchema !== false && !skipValidation; 6985 var recursiveMeta; 6986 if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema))) 6987 this.validateSchema(schema, true); 6988 6989 var localRefs = resolve.ids.call(this, schema); 6990 6991 var schemaObj = new SchemaObject({ 6992 id: id, 6993 schema: schema, 6994 localRefs: localRefs, 6995 cacheKey: cacheKey, 6996 meta: meta 6997 }); 6998 6999 if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj; 7000 this._cache.put(cacheKey, schemaObj); 7001 7002 if (willValidate && recursiveMeta) this.validateSchema(schema, true); 7003 7004 return schemaObj; 7005} 7006 7007 7008/* @this Ajv */ 7009function _compile(schemaObj, root) { 7010 if (schemaObj.compiling) { 7011 schemaObj.validate = callValidate; 7012 callValidate.schema = schemaObj.schema; 7013 callValidate.errors = null; 7014 callValidate.root = root ? root : callValidate; 7015 if (schemaObj.schema.$async === true) 7016 callValidate.$async = true; 7017 return callValidate; 7018 } 7019 schemaObj.compiling = true; 7020 7021 var currentOpts; 7022 if (schemaObj.meta) { 7023 currentOpts = this._opts; 7024 this._opts = this._metaOpts; 7025 } 7026 7027 var v; 7028 try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); } 7029 catch(e) { 7030 delete schemaObj.validate; 7031 throw e; 7032 } 7033 finally { 7034 schemaObj.compiling = false; 7035 if (schemaObj.meta) this._opts = currentOpts; 7036 } 7037 7038 schemaObj.validate = v; 7039 schemaObj.refs = v.refs; 7040 schemaObj.refVal = v.refVal; 7041 schemaObj.root = v.root; 7042 return v; 7043 7044 7045 /* @this {*} - custom context, see passContext option */ 7046 function callValidate() { 7047 /* jshint validthis: true */ 7048 var _validate = schemaObj.validate; 7049 var result = _validate.apply(this, arguments); 7050 callValidate.errors = _validate.errors; 7051 return result; 7052 } 7053} 7054 7055 7056function chooseGetId(opts) { 7057 switch (opts.schemaId) { 7058 case 'auto': return _get$IdOrId; 7059 case 'id': return _getId; 7060 default: return _get$Id; 7061 } 7062} 7063 7064/* @this Ajv */ 7065function _getId(schema) { 7066 if (schema.$id) this.logger.warn('schema $id ignored', schema.$id); 7067 return schema.id; 7068} 7069 7070/* @this Ajv */ 7071function _get$Id(schema) { 7072 if (schema.id) this.logger.warn('schema id ignored', schema.id); 7073 return schema.$id; 7074} 7075 7076 7077function _get$IdOrId(schema) { 7078 if (schema.$id && schema.id && schema.$id != schema.id) 7079 throw new Error('schema $id is different from id'); 7080 return schema.$id || schema.id; 7081} 7082 7083 7084/** 7085 * Convert array of error message objects to string 7086 * @this Ajv 7087 * @param {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used. 7088 * @param {Object} options optional options with properties `separator` and `dataVar`. 7089 * @return {String} human readable string with all errors descriptions 7090 */ 7091function errorsText(errors, options) { 7092 errors = errors || this.errors; 7093 if (!errors) return 'No errors'; 7094 options = options || {}; 7095 var separator = options.separator === undefined ? ', ' : options.separator; 7096 var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; 7097 7098 var text = ''; 7099 for (var i=0; i<errors.length; i++) { 7100 var e = errors[i]; 7101 if (e) text += dataVar + e.dataPath + ' ' + e.message + separator; 7102 } 7103 return text.slice(0, -separator.length); 7104} 7105 7106 7107/** 7108 * Add custom format 7109 * @this Ajv 7110 * @param {String} name format name 7111 * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) 7112 * @return {Ajv} this for method chaining 7113 */ 7114function addFormat(name, format) { 7115 if (typeof format == 'string') format = new RegExp(format); 7116 this._formats[name] = format; 7117 return this; 7118} 7119 7120 7121function addDefaultMetaSchema(self) { 7122 var $dataSchema; 7123 if (self._opts.$data) { 7124 $dataSchema = require('./refs/data.json'); 7125 self.addMetaSchema($dataSchema, $dataSchema.$id, true); 7126 } 7127 if (self._opts.meta === false) return; 7128 var metaSchema = require('./refs/json-schema-draft-07.json'); 7129 if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA); 7130 self.addMetaSchema(metaSchema, META_SCHEMA_ID, true); 7131 self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID; 7132} 7133 7134 7135function addInitialSchemas(self) { 7136 var optsSchemas = self._opts.schemas; 7137 if (!optsSchemas) return; 7138 if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas); 7139 else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key); 7140} 7141 7142 7143function addInitialFormats(self) { 7144 for (var name in self._opts.formats) { 7145 var format = self._opts.formats[name]; 7146 self.addFormat(name, format); 7147 } 7148} 7149 7150 7151function addInitialKeywords(self) { 7152 for (var name in self._opts.keywords) { 7153 var keyword = self._opts.keywords[name]; 7154 self.addKeyword(name, keyword); 7155 } 7156} 7157 7158 7159function checkUnique(self, id) { 7160 if (self._schemas[id] || self._refs[id]) 7161 throw new Error('schema with key or id "' + id + '" already exists'); 7162} 7163 7164 7165function getMetaSchemaOptions(self) { 7166 var metaOpts = util.copy(self._opts); 7167 for (var i=0; i<META_IGNORE_OPTIONS.length; i++) 7168 delete metaOpts[META_IGNORE_OPTIONS[i]]; 7169 return metaOpts; 7170} 7171 7172 7173function setLogger(self) { 7174 var logger = self._opts.logger; 7175 if (logger === false) { 7176 self.logger = {log: noop, warn: noop, error: noop}; 7177 } else { 7178 if (logger === undefined) logger = console; 7179 if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error)) 7180 throw new Error('logger must implement log, warn and error methods'); 7181 self.logger = logger; 7182 } 7183} 7184 7185 7186function noop() {} 7187 7188},{"./cache":1,"./compile":5,"./compile/async":2,"./compile/error_classes":3,"./compile/formats":4,"./compile/resolve":6,"./compile/rules":7,"./compile/schema_obj":8,"./compile/util":10,"./data":11,"./keyword":39,"./refs/data.json":40,"./refs/json-schema-draft-07.json":41,"fast-json-stable-stringify":43}]},{},[])("ajv") 7189}); 7190