.
This commit is contained in:
		
							
								
								
									
										90
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/async.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/equal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/error_classes.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/formats.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										387
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/resolve.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/rules.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/schema_obj.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/ucs2length.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								qwen/nodejs/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
									
								
								qwen/nodejs/node_modules/ajv/lib/compile/util.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								qwen/nodejs/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