update socials section
This commit is contained in:
		
							
								
								
									
										90
									
								
								node_modules/ajv/lib/compile/async.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								node_modules/ajv/lib/compile/async.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var MissingRefError = require('./error_classes').MissingRef; | ||||
|  | ||||
| module.exports = compileAsync; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Creates validating function for passed schema with asynchronous loading of missing schemas. | ||||
|  * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema. | ||||
|  * @this  Ajv | ||||
|  * @param {Object}   schema schema object | ||||
|  * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped | ||||
|  * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function. | ||||
|  * @return {Promise} promise that resolves with a validating function. | ||||
|  */ | ||||
| function compileAsync(schema, meta, callback) { | ||||
|   /* eslint no-shadow: 0 */ | ||||
|   /* global Promise */ | ||||
|   /* jshint validthis: true */ | ||||
|   var self = this; | ||||
|   if (typeof this._opts.loadSchema != 'function') | ||||
|     throw new Error('options.loadSchema should be a function'); | ||||
|  | ||||
|   if (typeof meta == 'function') { | ||||
|     callback = meta; | ||||
|     meta = undefined; | ||||
|   } | ||||
|  | ||||
|   var p = loadMetaSchemaOf(schema).then(function () { | ||||
|     var schemaObj = self._addSchema(schema, undefined, meta); | ||||
|     return schemaObj.validate || _compileAsync(schemaObj); | ||||
|   }); | ||||
|  | ||||
|   if (callback) { | ||||
|     p.then( | ||||
|       function(v) { callback(null, v); }, | ||||
|       callback | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   return p; | ||||
|  | ||||
|  | ||||
|   function loadMetaSchemaOf(sch) { | ||||
|     var $schema = sch.$schema; | ||||
|     return $schema && !self.getSchema($schema) | ||||
|             ? compileAsync.call(self, { $ref: $schema }, true) | ||||
|             : Promise.resolve(); | ||||
|   } | ||||
|  | ||||
|  | ||||
|   function _compileAsync(schemaObj) { | ||||
|     try { return self._compile(schemaObj); } | ||||
|     catch(e) { | ||||
|       if (e instanceof MissingRefError) return loadMissingSchema(e); | ||||
|       throw e; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     function loadMissingSchema(e) { | ||||
|       var ref = e.missingSchema; | ||||
|       if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved'); | ||||
|  | ||||
|       var schemaPromise = self._loadingSchemas[ref]; | ||||
|       if (!schemaPromise) { | ||||
|         schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref); | ||||
|         schemaPromise.then(removePromise, removePromise); | ||||
|       } | ||||
|  | ||||
|       return schemaPromise.then(function (sch) { | ||||
|         if (!added(ref)) { | ||||
|           return loadMetaSchemaOf(sch).then(function () { | ||||
|             if (!added(ref)) self.addSchema(sch, ref, undefined, meta); | ||||
|           }); | ||||
|         } | ||||
|       }).then(function() { | ||||
|         return _compileAsync(schemaObj); | ||||
|       }); | ||||
|  | ||||
|       function removePromise() { | ||||
|         delete self._loadingSchemas[ref]; | ||||
|       } | ||||
|  | ||||
|       function added(ref) { | ||||
|         return self._refs[ref] || self._schemas[ref]; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										5
									
								
								node_modules/ajv/lib/compile/equal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								node_modules/ajv/lib/compile/equal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| // do NOT remove this file - it would break pre-compiled schemas | ||||
| // https://github.com/ajv-validator/ajv/issues/889 | ||||
| module.exports = require('fast-deep-equal'); | ||||
							
								
								
									
										34
									
								
								node_modules/ajv/lib/compile/error_classes.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								node_modules/ajv/lib/compile/error_classes.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var resolve = require('./resolve'); | ||||
|  | ||||
| module.exports = { | ||||
|   Validation: errorSubclass(ValidationError), | ||||
|   MissingRef: errorSubclass(MissingRefError) | ||||
| }; | ||||
|  | ||||
|  | ||||
| function ValidationError(errors) { | ||||
|   this.message = 'validation failed'; | ||||
|   this.errors = errors; | ||||
|   this.ajv = this.validation = true; | ||||
| } | ||||
|  | ||||
|  | ||||
| MissingRefError.message = function (baseId, ref) { | ||||
|   return 'can\'t resolve reference ' + ref + ' from id ' + baseId; | ||||
| }; | ||||
|  | ||||
|  | ||||
| function MissingRefError(baseId, ref, message) { | ||||
|   this.message = message || MissingRefError.message(baseId, ref); | ||||
|   this.missingRef = resolve.url(baseId, ref); | ||||
|   this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef)); | ||||
| } | ||||
|  | ||||
|  | ||||
| function errorSubclass(Subclass) { | ||||
|   Subclass.prototype = Object.create(Error.prototype); | ||||
|   Subclass.prototype.constructor = Subclass; | ||||
|   return Subclass; | ||||
| } | ||||
							
								
								
									
										142
									
								
								node_modules/ajv/lib/compile/formats.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								node_modules/ajv/lib/compile/formats.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var util = require('./util'); | ||||
|  | ||||
| var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; | ||||
| var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31]; | ||||
| var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i; | ||||
| var HOSTNAME = /^(?=.{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; | ||||
| var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; | ||||
| var 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; | ||||
| // uri-template: https://tools.ietf.org/html/rfc6570 | ||||
| var 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; | ||||
| // For the source: https://gist.github.com/dperini/729294 | ||||
| // For test cases: https://mathiasbynens.be/demo/url-regex | ||||
| // @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. | ||||
| // var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; | ||||
| var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-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; | ||||
| var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; | ||||
| var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; | ||||
| var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; | ||||
| var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; | ||||
|  | ||||
|  | ||||
| module.exports = formats; | ||||
|  | ||||
| function formats(mode) { | ||||
|   mode = mode == 'full' ? 'full' : 'fast'; | ||||
|   return util.copy(formats[mode]); | ||||
| } | ||||
|  | ||||
|  | ||||
| formats.fast = { | ||||
|   // date: http://tools.ietf.org/html/rfc3339#section-5.6 | ||||
|   date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, | ||||
|   // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 | ||||
|   time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, | ||||
|   'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, | ||||
|   // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js | ||||
|   uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, | ||||
|   'uri-reference': /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, | ||||
|   'uri-template': URITEMPLATE, | ||||
|   url: URL, | ||||
|   // email (sources from jsen validator): | ||||
|   // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 | ||||
|   // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') | ||||
|   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, | ||||
|   hostname: HOSTNAME, | ||||
|   // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html | ||||
|   ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, | ||||
|   // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses | ||||
|   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, | ||||
|   regex: regex, | ||||
|   // uuid: http://tools.ietf.org/html/rfc4122 | ||||
|   uuid: UUID, | ||||
|   // JSON-pointer: https://tools.ietf.org/html/rfc6901 | ||||
|   // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A | ||||
|   'json-pointer': JSON_POINTER, | ||||
|   'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, | ||||
|   // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 | ||||
|   'relative-json-pointer': RELATIVE_JSON_POINTER | ||||
| }; | ||||
|  | ||||
|  | ||||
| formats.full = { | ||||
|   date: date, | ||||
|   time: time, | ||||
|   'date-time': date_time, | ||||
|   uri: uri, | ||||
|   'uri-reference': URIREF, | ||||
|   'uri-template': URITEMPLATE, | ||||
|   url: URL, | ||||
|   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, | ||||
|   hostname: HOSTNAME, | ||||
|   ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, | ||||
|   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, | ||||
|   regex: regex, | ||||
|   uuid: UUID, | ||||
|   'json-pointer': JSON_POINTER, | ||||
|   'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, | ||||
|   'relative-json-pointer': RELATIVE_JSON_POINTER | ||||
| }; | ||||
|  | ||||
|  | ||||
| function isLeapYear(year) { | ||||
|   // https://tools.ietf.org/html/rfc3339#appendix-C | ||||
|   return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); | ||||
| } | ||||
|  | ||||
|  | ||||
| function date(str) { | ||||
|   // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 | ||||
|   var matches = str.match(DATE); | ||||
|   if (!matches) return false; | ||||
|  | ||||
|   var year = +matches[1]; | ||||
|   var month = +matches[2]; | ||||
|   var day = +matches[3]; | ||||
|  | ||||
|   return month >= 1 && month <= 12 && day >= 1 && | ||||
|           day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); | ||||
| } | ||||
|  | ||||
|  | ||||
| function time(str, full) { | ||||
|   var matches = str.match(TIME); | ||||
|   if (!matches) return false; | ||||
|  | ||||
|   var hour = matches[1]; | ||||
|   var minute = matches[2]; | ||||
|   var second = matches[3]; | ||||
|   var timeZone = matches[5]; | ||||
|   return ((hour <= 23 && minute <= 59 && second <= 59) || | ||||
|           (hour == 23 && minute == 59 && second == 60)) && | ||||
|          (!full || timeZone); | ||||
| } | ||||
|  | ||||
|  | ||||
| var DATE_TIME_SEPARATOR = /t|\s/i; | ||||
| function date_time(str) { | ||||
|   // http://tools.ietf.org/html/rfc3339#section-5.6 | ||||
|   var dateTime = str.split(DATE_TIME_SEPARATOR); | ||||
|   return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); | ||||
| } | ||||
|  | ||||
|  | ||||
| var NOT_URI_FRAGMENT = /\/|:/; | ||||
| function uri(str) { | ||||
|   // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." | ||||
|   return NOT_URI_FRAGMENT.test(str) && URI.test(str); | ||||
| } | ||||
|  | ||||
|  | ||||
| var Z_ANCHOR = /[^\\]\\Z/; | ||||
| function regex(str) { | ||||
|   if (Z_ANCHOR.test(str)) return false; | ||||
|   try { | ||||
|     new RegExp(str); | ||||
|     return true; | ||||
|   } catch(e) { | ||||
|     return false; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										387
									
								
								node_modules/ajv/lib/compile/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										387
									
								
								node_modules/ajv/lib/compile/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,387 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var resolve = require('./resolve') | ||||
|   , util = require('./util') | ||||
|   , errorClasses = require('./error_classes') | ||||
|   , stableStringify = require('fast-json-stable-stringify'); | ||||
|  | ||||
| var validateGenerator = require('../dotjs/validate'); | ||||
|  | ||||
| /** | ||||
|  * Functions below are used inside compiled validations function | ||||
|  */ | ||||
|  | ||||
| var ucs2length = util.ucs2length; | ||||
| var equal = require('fast-deep-equal'); | ||||
|  | ||||
| // this error is thrown by async schemas to return validation errors via exception | ||||
| var ValidationError = errorClasses.Validation; | ||||
|  | ||||
| module.exports = compile; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Compiles schema to validation function | ||||
|  * @this   Ajv | ||||
|  * @param  {Object} schema schema object | ||||
|  * @param  {Object} root object with information about the root schema for this schema | ||||
|  * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution | ||||
|  * @param  {String} baseId base ID for IDs in the schema | ||||
|  * @return {Function} validation function | ||||
|  */ | ||||
| function compile(schema, root, localRefs, baseId) { | ||||
|   /* jshint validthis: true, evil: true */ | ||||
|   /* eslint no-shadow: 0 */ | ||||
|   var self = this | ||||
|     , opts = this._opts | ||||
|     , refVal = [ undefined ] | ||||
|     , refs = {} | ||||
|     , patterns = [] | ||||
|     , patternsHash = {} | ||||
|     , defaults = [] | ||||
|     , defaultsHash = {} | ||||
|     , customRules = []; | ||||
|  | ||||
|   root = root || { schema: schema, refVal: refVal, refs: refs }; | ||||
|  | ||||
|   var c = checkCompiling.call(this, schema, root, baseId); | ||||
|   var compilation = this._compilations[c.index]; | ||||
|   if (c.compiling) return (compilation.callValidate = callValidate); | ||||
|  | ||||
|   var formats = this._formats; | ||||
|   var RULES = this.RULES; | ||||
|  | ||||
|   try { | ||||
|     var v = localCompile(schema, root, localRefs, baseId); | ||||
|     compilation.validate = v; | ||||
|     var cv = compilation.callValidate; | ||||
|     if (cv) { | ||||
|       cv.schema = v.schema; | ||||
|       cv.errors = null; | ||||
|       cv.refs = v.refs; | ||||
|       cv.refVal = v.refVal; | ||||
|       cv.root = v.root; | ||||
|       cv.$async = v.$async; | ||||
|       if (opts.sourceCode) cv.source = v.source; | ||||
|     } | ||||
|     return v; | ||||
|   } finally { | ||||
|     endCompiling.call(this, schema, root, baseId); | ||||
|   } | ||||
|  | ||||
|   /* @this   {*} - custom context, see passContext option */ | ||||
|   function callValidate() { | ||||
|     /* jshint validthis: true */ | ||||
|     var validate = compilation.validate; | ||||
|     var result = validate.apply(this, arguments); | ||||
|     callValidate.errors = validate.errors; | ||||
|     return result; | ||||
|   } | ||||
|  | ||||
|   function localCompile(_schema, _root, localRefs, baseId) { | ||||
|     var isRoot = !_root || (_root && _root.schema == _schema); | ||||
|     if (_root.schema != root.schema) | ||||
|       return compile.call(self, _schema, _root, localRefs, baseId); | ||||
|  | ||||
|     var $async = _schema.$async === true; | ||||
|  | ||||
|     var sourceCode = validateGenerator({ | ||||
|       isTop: true, | ||||
|       schema: _schema, | ||||
|       isRoot: isRoot, | ||||
|       baseId: baseId, | ||||
|       root: _root, | ||||
|       schemaPath: '', | ||||
|       errSchemaPath: '#', | ||||
|       errorPath: '""', | ||||
|       MissingRefError: errorClasses.MissingRef, | ||||
|       RULES: RULES, | ||||
|       validate: validateGenerator, | ||||
|       util: util, | ||||
|       resolve: resolve, | ||||
|       resolveRef: resolveRef, | ||||
|       usePattern: usePattern, | ||||
|       useDefault: useDefault, | ||||
|       useCustomRule: useCustomRule, | ||||
|       opts: opts, | ||||
|       formats: formats, | ||||
|       logger: self.logger, | ||||
|       self: self | ||||
|     }); | ||||
|  | ||||
|     sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) | ||||
|                    + vars(defaults, defaultCode) + vars(customRules, customRuleCode) | ||||
|                    + sourceCode; | ||||
|  | ||||
|     if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema); | ||||
|     // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); | ||||
|     var validate; | ||||
|     try { | ||||
|       var makeValidate = new Function( | ||||
|         'self', | ||||
|         'RULES', | ||||
|         'formats', | ||||
|         'root', | ||||
|         'refVal', | ||||
|         'defaults', | ||||
|         'customRules', | ||||
|         'equal', | ||||
|         'ucs2length', | ||||
|         'ValidationError', | ||||
|         sourceCode | ||||
|       ); | ||||
|  | ||||
|       validate = makeValidate( | ||||
|         self, | ||||
|         RULES, | ||||
|         formats, | ||||
|         root, | ||||
|         refVal, | ||||
|         defaults, | ||||
|         customRules, | ||||
|         equal, | ||||
|         ucs2length, | ||||
|         ValidationError | ||||
|       ); | ||||
|  | ||||
|       refVal[0] = validate; | ||||
|     } catch(e) { | ||||
|       self.logger.error('Error compiling schema, function code:', sourceCode); | ||||
|       throw e; | ||||
|     } | ||||
|  | ||||
|     validate.schema = _schema; | ||||
|     validate.errors = null; | ||||
|     validate.refs = refs; | ||||
|     validate.refVal = refVal; | ||||
|     validate.root = isRoot ? validate : _root; | ||||
|     if ($async) validate.$async = true; | ||||
|     if (opts.sourceCode === true) { | ||||
|       validate.source = { | ||||
|         code: sourceCode, | ||||
|         patterns: patterns, | ||||
|         defaults: defaults | ||||
|       }; | ||||
|     } | ||||
|  | ||||
|     return validate; | ||||
|   } | ||||
|  | ||||
|   function resolveRef(baseId, ref, isRoot) { | ||||
|     ref = resolve.url(baseId, ref); | ||||
|     var refIndex = refs[ref]; | ||||
|     var _refVal, refCode; | ||||
|     if (refIndex !== undefined) { | ||||
|       _refVal = refVal[refIndex]; | ||||
|       refCode = 'refVal[' + refIndex + ']'; | ||||
|       return resolvedRef(_refVal, refCode); | ||||
|     } | ||||
|     if (!isRoot && root.refs) { | ||||
|       var rootRefId = root.refs[ref]; | ||||
|       if (rootRefId !== undefined) { | ||||
|         _refVal = root.refVal[rootRefId]; | ||||
|         refCode = addLocalRef(ref, _refVal); | ||||
|         return resolvedRef(_refVal, refCode); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     refCode = addLocalRef(ref); | ||||
|     var v = resolve.call(self, localCompile, root, ref); | ||||
|     if (v === undefined) { | ||||
|       var localSchema = localRefs && localRefs[ref]; | ||||
|       if (localSchema) { | ||||
|         v = resolve.inlineRef(localSchema, opts.inlineRefs) | ||||
|             ? localSchema | ||||
|             : compile.call(self, localSchema, root, localRefs, baseId); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (v === undefined) { | ||||
|       removeLocalRef(ref); | ||||
|     } else { | ||||
|       replaceLocalRef(ref, v); | ||||
|       return resolvedRef(v, refCode); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   function addLocalRef(ref, v) { | ||||
|     var refId = refVal.length; | ||||
|     refVal[refId] = v; | ||||
|     refs[ref] = refId; | ||||
|     return 'refVal' + refId; | ||||
|   } | ||||
|  | ||||
|   function removeLocalRef(ref) { | ||||
|     delete refs[ref]; | ||||
|   } | ||||
|  | ||||
|   function replaceLocalRef(ref, v) { | ||||
|     var refId = refs[ref]; | ||||
|     refVal[refId] = v; | ||||
|   } | ||||
|  | ||||
|   function resolvedRef(refVal, code) { | ||||
|     return typeof refVal == 'object' || typeof refVal == 'boolean' | ||||
|             ? { code: code, schema: refVal, inline: true } | ||||
|             : { code: code, $async: refVal && !!refVal.$async }; | ||||
|   } | ||||
|  | ||||
|   function usePattern(regexStr) { | ||||
|     var index = patternsHash[regexStr]; | ||||
|     if (index === undefined) { | ||||
|       index = patternsHash[regexStr] = patterns.length; | ||||
|       patterns[index] = regexStr; | ||||
|     } | ||||
|     return 'pattern' + index; | ||||
|   } | ||||
|  | ||||
|   function useDefault(value) { | ||||
|     switch (typeof value) { | ||||
|       case 'boolean': | ||||
|       case 'number': | ||||
|         return '' + value; | ||||
|       case 'string': | ||||
|         return util.toQuotedString(value); | ||||
|       case 'object': | ||||
|         if (value === null) return 'null'; | ||||
|         var valueStr = stableStringify(value); | ||||
|         var index = defaultsHash[valueStr]; | ||||
|         if (index === undefined) { | ||||
|           index = defaultsHash[valueStr] = defaults.length; | ||||
|           defaults[index] = value; | ||||
|         } | ||||
|         return 'default' + index; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   function useCustomRule(rule, schema, parentSchema, it) { | ||||
|     if (self._opts.validateSchema !== false) { | ||||
|       var deps = rule.definition.dependencies; | ||||
|       if (deps && !deps.every(function(keyword) { | ||||
|         return Object.prototype.hasOwnProperty.call(parentSchema, keyword); | ||||
|       })) | ||||
|         throw new Error('parent schema must have all required keywords: ' + deps.join(',')); | ||||
|  | ||||
|       var validateSchema = rule.definition.validateSchema; | ||||
|       if (validateSchema) { | ||||
|         var valid = validateSchema(schema); | ||||
|         if (!valid) { | ||||
|           var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); | ||||
|           if (self._opts.validateSchema == 'log') self.logger.error(message); | ||||
|           else throw new Error(message); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     var compile = rule.definition.compile | ||||
|       , inline = rule.definition.inline | ||||
|       , macro = rule.definition.macro; | ||||
|  | ||||
|     var validate; | ||||
|     if (compile) { | ||||
|       validate = compile.call(self, schema, parentSchema, it); | ||||
|     } else if (macro) { | ||||
|       validate = macro.call(self, schema, parentSchema, it); | ||||
|       if (opts.validateSchema !== false) self.validateSchema(validate, true); | ||||
|     } else if (inline) { | ||||
|       validate = inline.call(self, it, rule.keyword, schema, parentSchema); | ||||
|     } else { | ||||
|       validate = rule.definition.validate; | ||||
|       if (!validate) return; | ||||
|     } | ||||
|  | ||||
|     if (validate === undefined) | ||||
|       throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); | ||||
|  | ||||
|     var index = customRules.length; | ||||
|     customRules[index] = validate; | ||||
|  | ||||
|     return { | ||||
|       code: 'customRule' + index, | ||||
|       validate: validate | ||||
|     }; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Checks if the schema is currently compiled | ||||
|  * @this   Ajv | ||||
|  * @param  {Object} schema schema to compile | ||||
|  * @param  {Object} root root object | ||||
|  * @param  {String} baseId base schema ID | ||||
|  * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) | ||||
|  */ | ||||
| function checkCompiling(schema, root, baseId) { | ||||
|   /* jshint validthis: true */ | ||||
|   var index = compIndex.call(this, schema, root, baseId); | ||||
|   if (index >= 0) return { index: index, compiling: true }; | ||||
|   index = this._compilations.length; | ||||
|   this._compilations[index] = { | ||||
|     schema: schema, | ||||
|     root: root, | ||||
|     baseId: baseId | ||||
|   }; | ||||
|   return { index: index, compiling: false }; | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Removes the schema from the currently compiled list | ||||
|  * @this   Ajv | ||||
|  * @param  {Object} schema schema to compile | ||||
|  * @param  {Object} root root object | ||||
|  * @param  {String} baseId base schema ID | ||||
|  */ | ||||
| function endCompiling(schema, root, baseId) { | ||||
|   /* jshint validthis: true */ | ||||
|   var i = compIndex.call(this, schema, root, baseId); | ||||
|   if (i >= 0) this._compilations.splice(i, 1); | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Index of schema compilation in the currently compiled list | ||||
|  * @this   Ajv | ||||
|  * @param  {Object} schema schema to compile | ||||
|  * @param  {Object} root root object | ||||
|  * @param  {String} baseId base schema ID | ||||
|  * @return {Integer} compilation index | ||||
|  */ | ||||
| function compIndex(schema, root, baseId) { | ||||
|   /* jshint validthis: true */ | ||||
|   for (var i=0; i<this._compilations.length; i++) { | ||||
|     var c = this._compilations[i]; | ||||
|     if (c.schema == schema && c.root == root && c.baseId == baseId) return i; | ||||
|   } | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
|  | ||||
| function patternCode(i, patterns) { | ||||
|   return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');'; | ||||
| } | ||||
|  | ||||
|  | ||||
| function defaultCode(i) { | ||||
|   return 'var default' + i + ' = defaults[' + i + '];'; | ||||
| } | ||||
|  | ||||
|  | ||||
| function refValCode(i, refVal) { | ||||
|   return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];'; | ||||
| } | ||||
|  | ||||
|  | ||||
| function customRuleCode(i) { | ||||
|   return 'var customRule' + i + ' = customRules[' + i + '];'; | ||||
| } | ||||
|  | ||||
|  | ||||
| function vars(arr, statement) { | ||||
|   if (!arr.length) return ''; | ||||
|   var code = ''; | ||||
|   for (var i=0; i<arr.length; i++) | ||||
|     code += statement(i, arr); | ||||
|   return code; | ||||
| } | ||||
							
								
								
									
										270
									
								
								node_modules/ajv/lib/compile/resolve.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								node_modules/ajv/lib/compile/resolve.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,270 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var URI = require('uri-js') | ||||
|   , equal = require('fast-deep-equal') | ||||
|   , util = require('./util') | ||||
|   , SchemaObject = require('./schema_obj') | ||||
|   , traverse = require('json-schema-traverse'); | ||||
|  | ||||
| module.exports = resolve; | ||||
|  | ||||
| resolve.normalizeId = normalizeId; | ||||
| resolve.fullPath = getFullPath; | ||||
| resolve.url = resolveUrl; | ||||
| resolve.ids = resolveIds; | ||||
| resolve.inlineRef = inlineRef; | ||||
| resolve.schema = resolveSchema; | ||||
|  | ||||
| /** | ||||
|  * [resolve and compile the references ($ref)] | ||||
|  * @this   Ajv | ||||
|  * @param  {Function} compile reference to schema compilation funciton (localCompile) | ||||
|  * @param  {Object} root object with information about the root schema for the current schema | ||||
|  * @param  {String} ref reference to resolve | ||||
|  * @return {Object|Function} schema object (if the schema can be inlined) or validation function | ||||
|  */ | ||||
| function resolve(compile, root, ref) { | ||||
|   /* jshint validthis: true */ | ||||
|   var refVal = this._refs[ref]; | ||||
|   if (typeof refVal == 'string') { | ||||
|     if (this._refs[refVal]) refVal = this._refs[refVal]; | ||||
|     else return resolve.call(this, compile, root, refVal); | ||||
|   } | ||||
|  | ||||
|   refVal = refVal || this._schemas[ref]; | ||||
|   if (refVal instanceof SchemaObject) { | ||||
|     return inlineRef(refVal.schema, this._opts.inlineRefs) | ||||
|             ? refVal.schema | ||||
|             : refVal.validate || this._compile(refVal); | ||||
|   } | ||||
|  | ||||
|   var res = resolveSchema.call(this, root, ref); | ||||
|   var schema, v, baseId; | ||||
|   if (res) { | ||||
|     schema = res.schema; | ||||
|     root = res.root; | ||||
|     baseId = res.baseId; | ||||
|   } | ||||
|  | ||||
|   if (schema instanceof SchemaObject) { | ||||
|     v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId); | ||||
|   } else if (schema !== undefined) { | ||||
|     v = inlineRef(schema, this._opts.inlineRefs) | ||||
|         ? schema | ||||
|         : compile.call(this, schema, root, undefined, baseId); | ||||
|   } | ||||
|  | ||||
|   return v; | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Resolve schema, its root and baseId | ||||
|  * @this Ajv | ||||
|  * @param  {Object} root root object with properties schema, refVal, refs | ||||
|  * @param  {String} ref  reference to resolve | ||||
|  * @return {Object} object with properties schema, root, baseId | ||||
|  */ | ||||
| function resolveSchema(root, ref) { | ||||
|   /* jshint validthis: true */ | ||||
|   var p = URI.parse(ref) | ||||
|     , refPath = _getFullPath(p) | ||||
|     , baseId = getFullPath(this._getId(root.schema)); | ||||
|   if (Object.keys(root.schema).length === 0 || refPath !== baseId) { | ||||
|     var id = normalizeId(refPath); | ||||
|     var refVal = this._refs[id]; | ||||
|     if (typeof refVal == 'string') { | ||||
|       return resolveRecursive.call(this, root, refVal, p); | ||||
|     } else if (refVal instanceof SchemaObject) { | ||||
|       if (!refVal.validate) this._compile(refVal); | ||||
|       root = refVal; | ||||
|     } else { | ||||
|       refVal = this._schemas[id]; | ||||
|       if (refVal instanceof SchemaObject) { | ||||
|         if (!refVal.validate) this._compile(refVal); | ||||
|         if (id == normalizeId(ref)) | ||||
|           return { schema: refVal, root: root, baseId: baseId }; | ||||
|         root = refVal; | ||||
|       } else { | ||||
|         return; | ||||
|       } | ||||
|     } | ||||
|     if (!root.schema) return; | ||||
|     baseId = getFullPath(this._getId(root.schema)); | ||||
|   } | ||||
|   return getJsonPointer.call(this, p, baseId, root.schema, root); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* @this Ajv */ | ||||
| function resolveRecursive(root, ref, parsedRef) { | ||||
|   /* jshint validthis: true */ | ||||
|   var res = resolveSchema.call(this, root, ref); | ||||
|   if (res) { | ||||
|     var schema = res.schema; | ||||
|     var baseId = res.baseId; | ||||
|     root = res.root; | ||||
|     var id = this._getId(schema); | ||||
|     if (id) baseId = resolveUrl(baseId, id); | ||||
|     return getJsonPointer.call(this, parsedRef, baseId, schema, root); | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']); | ||||
| /* @this Ajv */ | ||||
| function getJsonPointer(parsedRef, baseId, schema, root) { | ||||
|   /* jshint validthis: true */ | ||||
|   parsedRef.fragment = parsedRef.fragment || ''; | ||||
|   if (parsedRef.fragment.slice(0,1) != '/') return; | ||||
|   var parts = parsedRef.fragment.split('/'); | ||||
|  | ||||
|   for (var i = 1; i < parts.length; i++) { | ||||
|     var part = parts[i]; | ||||
|     if (part) { | ||||
|       part = util.unescapeFragment(part); | ||||
|       schema = schema[part]; | ||||
|       if (schema === undefined) break; | ||||
|       var id; | ||||
|       if (!PREVENT_SCOPE_CHANGE[part]) { | ||||
|         id = this._getId(schema); | ||||
|         if (id) baseId = resolveUrl(baseId, id); | ||||
|         if (schema.$ref) { | ||||
|           var $ref = resolveUrl(baseId, schema.$ref); | ||||
|           var res = resolveSchema.call(this, root, $ref); | ||||
|           if (res) { | ||||
|             schema = res.schema; | ||||
|             root = res.root; | ||||
|             baseId = res.baseId; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   if (schema !== undefined && schema !== root.schema) | ||||
|     return { schema: schema, root: root, baseId: baseId }; | ||||
| } | ||||
|  | ||||
|  | ||||
| var SIMPLE_INLINED = util.toHash([ | ||||
|   'type', 'format', 'pattern', | ||||
|   'maxLength', 'minLength', | ||||
|   'maxProperties', 'minProperties', | ||||
|   'maxItems', 'minItems', | ||||
|   'maximum', 'minimum', | ||||
|   'uniqueItems', 'multipleOf', | ||||
|   'required', 'enum' | ||||
| ]); | ||||
| function inlineRef(schema, limit) { | ||||
|   if (limit === false) return false; | ||||
|   if (limit === undefined || limit === true) return checkNoRef(schema); | ||||
|   else if (limit) return countKeys(schema) <= limit; | ||||
| } | ||||
|  | ||||
|  | ||||
| function checkNoRef(schema) { | ||||
|   var item; | ||||
|   if (Array.isArray(schema)) { | ||||
|     for (var i=0; i<schema.length; i++) { | ||||
|       item = schema[i]; | ||||
|       if (typeof item == 'object' && !checkNoRef(item)) return false; | ||||
|     } | ||||
|   } else { | ||||
|     for (var key in schema) { | ||||
|       if (key == '$ref') return false; | ||||
|       item = schema[key]; | ||||
|       if (typeof item == 'object' && !checkNoRef(item)) return false; | ||||
|     } | ||||
|   } | ||||
|   return true; | ||||
| } | ||||
|  | ||||
|  | ||||
| function countKeys(schema) { | ||||
|   var count = 0, item; | ||||
|   if (Array.isArray(schema)) { | ||||
|     for (var i=0; i<schema.length; i++) { | ||||
|       item = schema[i]; | ||||
|       if (typeof item == 'object') count += countKeys(item); | ||||
|       if (count == Infinity) return Infinity; | ||||
|     } | ||||
|   } else { | ||||
|     for (var key in schema) { | ||||
|       if (key == '$ref') return Infinity; | ||||
|       if (SIMPLE_INLINED[key]) { | ||||
|         count++; | ||||
|       } else { | ||||
|         item = schema[key]; | ||||
|         if (typeof item == 'object') count += countKeys(item) + 1; | ||||
|         if (count == Infinity) return Infinity; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return count; | ||||
| } | ||||
|  | ||||
|  | ||||
| function getFullPath(id, normalize) { | ||||
|   if (normalize !== false) id = normalizeId(id); | ||||
|   var p = URI.parse(id); | ||||
|   return _getFullPath(p); | ||||
| } | ||||
|  | ||||
|  | ||||
| function _getFullPath(p) { | ||||
|   return URI.serialize(p).split('#')[0] + '#'; | ||||
| } | ||||
|  | ||||
|  | ||||
| var TRAILING_SLASH_HASH = /#\/?$/; | ||||
| function normalizeId(id) { | ||||
|   return id ? id.replace(TRAILING_SLASH_HASH, '') : ''; | ||||
| } | ||||
|  | ||||
|  | ||||
| function resolveUrl(baseId, id) { | ||||
|   id = normalizeId(id); | ||||
|   return URI.resolve(baseId, id); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* @this Ajv */ | ||||
| function resolveIds(schema) { | ||||
|   var schemaId = normalizeId(this._getId(schema)); | ||||
|   var baseIds = {'': schemaId}; | ||||
|   var fullPaths = {'': getFullPath(schemaId, false)}; | ||||
|   var localRefs = {}; | ||||
|   var self = this; | ||||
|  | ||||
|   traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { | ||||
|     if (jsonPtr === '') return; | ||||
|     var id = self._getId(sch); | ||||
|     var baseId = baseIds[parentJsonPtr]; | ||||
|     var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword; | ||||
|     if (keyIndex !== undefined) | ||||
|       fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex)); | ||||
|  | ||||
|     if (typeof id == 'string') { | ||||
|       id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id); | ||||
|  | ||||
|       var refVal = self._refs[id]; | ||||
|       if (typeof refVal == 'string') refVal = self._refs[refVal]; | ||||
|       if (refVal && refVal.schema) { | ||||
|         if (!equal(sch, refVal.schema)) | ||||
|           throw new Error('id "' + id + '" resolves to more than one schema'); | ||||
|       } else if (id != normalizeId(fullPath)) { | ||||
|         if (id[0] == '#') { | ||||
|           if (localRefs[id] && !equal(sch, localRefs[id])) | ||||
|             throw new Error('id "' + id + '" resolves to more than one schema'); | ||||
|           localRefs[id] = sch; | ||||
|         } else { | ||||
|           self._refs[id] = fullPath; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     baseIds[jsonPtr] = baseId; | ||||
|     fullPaths[jsonPtr] = fullPath; | ||||
|   }); | ||||
|  | ||||
|   return localRefs; | ||||
| } | ||||
							
								
								
									
										66
									
								
								node_modules/ajv/lib/compile/rules.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								node_modules/ajv/lib/compile/rules.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var ruleModules = require('../dotjs') | ||||
|   , toHash = require('./util').toHash; | ||||
|  | ||||
| module.exports = function rules() { | ||||
|   var RULES = [ | ||||
|     { type: 'number', | ||||
|       rules: [ { 'maximum': ['exclusiveMaximum'] }, | ||||
|                { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] }, | ||||
|     { type: 'string', | ||||
|       rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] }, | ||||
|     { type: 'array', | ||||
|       rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] }, | ||||
|     { type: 'object', | ||||
|       rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames', | ||||
|                { 'properties': ['additionalProperties', 'patternProperties'] } ] }, | ||||
|     { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] } | ||||
|   ]; | ||||
|  | ||||
|   var ALL = [ 'type', '$comment' ]; | ||||
|   var KEYWORDS = [ | ||||
|     '$schema', '$id', 'id', '$data', '$async', 'title', | ||||
|     'description', 'default', 'definitions', | ||||
|     'examples', 'readOnly', 'writeOnly', | ||||
|     'contentMediaType', 'contentEncoding', | ||||
|     'additionalItems', 'then', 'else' | ||||
|   ]; | ||||
|   var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ]; | ||||
|   RULES.all = toHash(ALL); | ||||
|   RULES.types = toHash(TYPES); | ||||
|  | ||||
|   RULES.forEach(function (group) { | ||||
|     group.rules = group.rules.map(function (keyword) { | ||||
|       var implKeywords; | ||||
|       if (typeof keyword == 'object') { | ||||
|         var key = Object.keys(keyword)[0]; | ||||
|         implKeywords = keyword[key]; | ||||
|         keyword = key; | ||||
|         implKeywords.forEach(function (k) { | ||||
|           ALL.push(k); | ||||
|           RULES.all[k] = true; | ||||
|         }); | ||||
|       } | ||||
|       ALL.push(keyword); | ||||
|       var rule = RULES.all[keyword] = { | ||||
|         keyword: keyword, | ||||
|         code: ruleModules[keyword], | ||||
|         implements: implKeywords | ||||
|       }; | ||||
|       return rule; | ||||
|     }); | ||||
|  | ||||
|     RULES.all.$comment = { | ||||
|       keyword: '$comment', | ||||
|       code: ruleModules.$comment | ||||
|     }; | ||||
|  | ||||
|     if (group.type) RULES.types[group.type] = group; | ||||
|   }); | ||||
|  | ||||
|   RULES.keywords = toHash(ALL.concat(KEYWORDS)); | ||||
|   RULES.custom = {}; | ||||
|  | ||||
|   return RULES; | ||||
| }; | ||||
							
								
								
									
										9
									
								
								node_modules/ajv/lib/compile/schema_obj.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/ajv/lib/compile/schema_obj.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var util = require('./util'); | ||||
|  | ||||
| module.exports = SchemaObject; | ||||
|  | ||||
| function SchemaObject(obj) { | ||||
|   util.copy(obj, this); | ||||
| } | ||||
							
								
								
									
										20
									
								
								node_modules/ajv/lib/compile/ucs2length.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								node_modules/ajv/lib/compile/ucs2length.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| // https://mathiasbynens.be/notes/javascript-encoding | ||||
| // https://github.com/bestiejs/punycode.js - punycode.ucs2.decode | ||||
| module.exports = function ucs2length(str) { | ||||
|   var length = 0 | ||||
|     , len = str.length | ||||
|     , pos = 0 | ||||
|     , value; | ||||
|   while (pos < len) { | ||||
|     length++; | ||||
|     value = str.charCodeAt(pos++); | ||||
|     if (value >= 0xD800 && value <= 0xDBFF && pos < len) { | ||||
|       // high surrogate, and there is a next character | ||||
|       value = str.charCodeAt(pos); | ||||
|       if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate | ||||
|     } | ||||
|   } | ||||
|   return length; | ||||
| }; | ||||
							
								
								
									
										239
									
								
								node_modules/ajv/lib/compile/util.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								node_modules/ajv/lib/compile/util.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,239 @@ | ||||
| 'use strict'; | ||||
|  | ||||
|  | ||||
| module.exports = { | ||||
|   copy: copy, | ||||
|   checkDataType: checkDataType, | ||||
|   checkDataTypes: checkDataTypes, | ||||
|   coerceToTypes: coerceToTypes, | ||||
|   toHash: toHash, | ||||
|   getProperty: getProperty, | ||||
|   escapeQuotes: escapeQuotes, | ||||
|   equal: require('fast-deep-equal'), | ||||
|   ucs2length: require('./ucs2length'), | ||||
|   varOccurences: varOccurences, | ||||
|   varReplace: varReplace, | ||||
|   schemaHasRules: schemaHasRules, | ||||
|   schemaHasRulesExcept: schemaHasRulesExcept, | ||||
|   schemaUnknownRules: schemaUnknownRules, | ||||
|   toQuotedString: toQuotedString, | ||||
|   getPathExpr: getPathExpr, | ||||
|   getPath: getPath, | ||||
|   getData: getData, | ||||
|   unescapeFragment: unescapeFragment, | ||||
|   unescapeJsonPointer: unescapeJsonPointer, | ||||
|   escapeFragment: escapeFragment, | ||||
|   escapeJsonPointer: escapeJsonPointer | ||||
| }; | ||||
|  | ||||
|  | ||||
| function copy(o, to) { | ||||
|   to = to || {}; | ||||
|   for (var key in o) to[key] = o[key]; | ||||
|   return to; | ||||
| } | ||||
|  | ||||
|  | ||||
| function checkDataType(dataType, data, strictNumbers, negate) { | ||||
|   var EQUAL = negate ? ' !== ' : ' === ' | ||||
|     , AND = negate ? ' || ' : ' && ' | ||||
|     , OK = negate ? '!' : '' | ||||
|     , NOT = negate ? '' : '!'; | ||||
|   switch (dataType) { | ||||
|     case 'null': return data + EQUAL + 'null'; | ||||
|     case 'array': return OK + 'Array.isArray(' + data + ')'; | ||||
|     case 'object': return '(' + OK + data + AND + | ||||
|                           'typeof ' + data + EQUAL + '"object"' + AND + | ||||
|                           NOT + 'Array.isArray(' + data + '))'; | ||||
|     case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + | ||||
|                            NOT + '(' + data + ' % 1)' + | ||||
|                            AND + data + EQUAL + data + | ||||
|                            (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; | ||||
|     case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' + | ||||
|                           (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; | ||||
|     default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| function checkDataTypes(dataTypes, data, strictNumbers) { | ||||
|   switch (dataTypes.length) { | ||||
|     case 1: return checkDataType(dataTypes[0], data, strictNumbers, true); | ||||
|     default: | ||||
|       var code = ''; | ||||
|       var types = toHash(dataTypes); | ||||
|       if (types.array && types.object) { | ||||
|         code = types.null ? '(': '(!' + data + ' || '; | ||||
|         code += 'typeof ' + data + ' !== "object")'; | ||||
|         delete types.null; | ||||
|         delete types.array; | ||||
|         delete types.object; | ||||
|       } | ||||
|       if (types.number) delete types.integer; | ||||
|       for (var t in types) | ||||
|         code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true); | ||||
|  | ||||
|       return code; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); | ||||
| function coerceToTypes(optionCoerceTypes, dataTypes) { | ||||
|   if (Array.isArray(dataTypes)) { | ||||
|     var types = []; | ||||
|     for (var i=0; i<dataTypes.length; i++) { | ||||
|       var t = dataTypes[i]; | ||||
|       if (COERCE_TO_TYPES[t]) types[types.length] = t; | ||||
|       else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t; | ||||
|     } | ||||
|     if (types.length) return types; | ||||
|   } else if (COERCE_TO_TYPES[dataTypes]) { | ||||
|     return [dataTypes]; | ||||
|   } else if (optionCoerceTypes === 'array' && dataTypes === 'array') { | ||||
|     return ['array']; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| function toHash(arr) { | ||||
|   var hash = {}; | ||||
|   for (var i=0; i<arr.length; i++) hash[arr[i]] = true; | ||||
|   return hash; | ||||
| } | ||||
|  | ||||
|  | ||||
| var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; | ||||
| var SINGLE_QUOTE = /'|\\/g; | ||||
| function getProperty(key) { | ||||
|   return typeof key == 'number' | ||||
|           ? '[' + key + ']' | ||||
|           : IDENTIFIER.test(key) | ||||
|             ? '.' + key | ||||
|             : "['" + escapeQuotes(key) + "']"; | ||||
| } | ||||
|  | ||||
|  | ||||
| function escapeQuotes(str) { | ||||
|   return str.replace(SINGLE_QUOTE, '\\$&') | ||||
|             .replace(/\n/g, '\\n') | ||||
|             .replace(/\r/g, '\\r') | ||||
|             .replace(/\f/g, '\\f') | ||||
|             .replace(/\t/g, '\\t'); | ||||
| } | ||||
|  | ||||
|  | ||||
| function varOccurences(str, dataVar) { | ||||
|   dataVar += '[^0-9]'; | ||||
|   var matches = str.match(new RegExp(dataVar, 'g')); | ||||
|   return matches ? matches.length : 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| function varReplace(str, dataVar, expr) { | ||||
|   dataVar += '([^0-9])'; | ||||
|   expr = expr.replace(/\$/g, '$$$$'); | ||||
|   return str.replace(new RegExp(dataVar, 'g'), expr + '$1'); | ||||
| } | ||||
|  | ||||
|  | ||||
| function schemaHasRules(schema, rules) { | ||||
|   if (typeof schema == 'boolean') return !schema; | ||||
|   for (var key in schema) if (rules[key]) return true; | ||||
| } | ||||
|  | ||||
|  | ||||
| function schemaHasRulesExcept(schema, rules, exceptKeyword) { | ||||
|   if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not'; | ||||
|   for (var key in schema) if (key != exceptKeyword && rules[key]) return true; | ||||
| } | ||||
|  | ||||
|  | ||||
| function schemaUnknownRules(schema, rules) { | ||||
|   if (typeof schema == 'boolean') return; | ||||
|   for (var key in schema) if (!rules[key]) return key; | ||||
| } | ||||
|  | ||||
|  | ||||
| function toQuotedString(str) { | ||||
|   return '\'' + escapeQuotes(str) + '\''; | ||||
| } | ||||
|  | ||||
|  | ||||
| function getPathExpr(currentPath, expr, jsonPointers, isNumber) { | ||||
|   var path = jsonPointers // false by default | ||||
|               ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')') | ||||
|               : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\''); | ||||
|   return joinPaths(currentPath, path); | ||||
| } | ||||
|  | ||||
|  | ||||
| function getPath(currentPath, prop, jsonPointers) { | ||||
|   var path = jsonPointers // false by default | ||||
|               ? toQuotedString('/' + escapeJsonPointer(prop)) | ||||
|               : toQuotedString(getProperty(prop)); | ||||
|   return joinPaths(currentPath, path); | ||||
| } | ||||
|  | ||||
|  | ||||
| var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; | ||||
| var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; | ||||
| function getData($data, lvl, paths) { | ||||
|   var up, jsonPointer, data, matches; | ||||
|   if ($data === '') return 'rootData'; | ||||
|   if ($data[0] == '/') { | ||||
|     if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data); | ||||
|     jsonPointer = $data; | ||||
|     data = 'rootData'; | ||||
|   } else { | ||||
|     matches = $data.match(RELATIVE_JSON_POINTER); | ||||
|     if (!matches) throw new Error('Invalid JSON-pointer: ' + $data); | ||||
|     up = +matches[1]; | ||||
|     jsonPointer = matches[2]; | ||||
|     if (jsonPointer == '#') { | ||||
|       if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); | ||||
|       return paths[lvl - up]; | ||||
|     } | ||||
|  | ||||
|     if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); | ||||
|     data = 'data' + ((lvl - up) || ''); | ||||
|     if (!jsonPointer) return data; | ||||
|   } | ||||
|  | ||||
|   var expr = data; | ||||
|   var segments = jsonPointer.split('/'); | ||||
|   for (var i=0; i<segments.length; i++) { | ||||
|     var segment = segments[i]; | ||||
|     if (segment) { | ||||
|       data += getProperty(unescapeJsonPointer(segment)); | ||||
|       expr += ' && ' + data; | ||||
|     } | ||||
|   } | ||||
|   return expr; | ||||
| } | ||||
|  | ||||
|  | ||||
| function joinPaths (a, b) { | ||||
|   if (a == '""') return b; | ||||
|   return (a + ' + ' + b).replace(/([^\\])' \+ '/g, '$1'); | ||||
| } | ||||
|  | ||||
|  | ||||
| function unescapeFragment(str) { | ||||
|   return unescapeJsonPointer(decodeURIComponent(str)); | ||||
| } | ||||
|  | ||||
|  | ||||
| function escapeFragment(str) { | ||||
|   return encodeURIComponent(escapeJsonPointer(str)); | ||||
| } | ||||
|  | ||||
|  | ||||
| function escapeJsonPointer(str) { | ||||
|   return str.replace(/~/g, '~0').replace(/\//g, '~1'); | ||||
| } | ||||
|  | ||||
|  | ||||
| function unescapeJsonPointer(str) { | ||||
|   return str.replace(/~1/g, '/').replace(/~0/g, '~'); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user