@hpcc-js/ddl-shim 2.17.23 → 2.17.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es6.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var PKG_NAME = "@hpcc-js/ddl-shim";
2
- var PKG_VERSION = "2.17.23";
3
- var BUILD_VERSION = "2.99.0";
2
+ var PKG_VERSION = "2.17.24";
3
+ var BUILD_VERSION = "2.100.0";
4
4
 
5
5
  function isWorkunitDatasource(ref) {
6
6
  return ref.WUID !== undefined;
@@ -2500,21 +2500,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
2500
2500
 
2501
2501
  unwrapExports(uri_all);
2502
2502
 
2503
- var isArray = Array.isArray;
2504
- var keyList = Object.keys;
2505
- var hasProp = Object.prototype.hasOwnProperty;
2503
+ // do not edit .js files directly - edit src/index.jst
2504
+
2505
+
2506
2506
 
2507
2507
  var fastDeepEqual = function equal(a, b) {
2508
2508
  if (a === b) return true;
2509
2509
 
2510
2510
  if (a && b && typeof a == 'object' && typeof b == 'object') {
2511
- var arrA = isArray(a)
2512
- , arrB = isArray(b)
2513
- , i
2514
- , length
2515
- , key;
2511
+ if (a.constructor !== b.constructor) return false;
2516
2512
 
2517
- if (arrA && arrB) {
2513
+ var length, i, keys;
2514
+ if (Array.isArray(a)) {
2518
2515
  length = a.length;
2519
2516
  if (length != b.length) return false;
2520
2517
  for (i = length; i-- !== 0;)
@@ -2522,35 +2519,29 @@ var fastDeepEqual = function equal(a, b) {
2522
2519
  return true;
2523
2520
  }
2524
2521
 
2525
- if (arrA != arrB) return false;
2526
2522
 
2527
- var dateA = a instanceof Date
2528
- , dateB = b instanceof Date;
2529
- if (dateA != dateB) return false;
2530
- if (dateA && dateB) return a.getTime() == b.getTime();
2531
2523
 
2532
- var regexpA = a instanceof RegExp
2533
- , regexpB = b instanceof RegExp;
2534
- if (regexpA != regexpB) return false;
2535
- if (regexpA && regexpB) return a.toString() == b.toString();
2524
+ if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
2525
+ if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
2526
+ if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
2536
2527
 
2537
- var keys = keyList(a);
2528
+ keys = Object.keys(a);
2538
2529
  length = keys.length;
2539
-
2540
- if (length !== keyList(b).length)
2541
- return false;
2530
+ if (length !== Object.keys(b).length) return false;
2542
2531
 
2543
2532
  for (i = length; i-- !== 0;)
2544
- if (!hasProp.call(b, keys[i])) return false;
2533
+ if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
2545
2534
 
2546
2535
  for (i = length; i-- !== 0;) {
2547
- key = keys[i];
2536
+ var key = keys[i];
2537
+
2548
2538
  if (!equal(a[key], b[key])) return false;
2549
2539
  }
2550
2540
 
2551
2541
  return true;
2552
2542
  }
2553
2543
 
2544
+ // true if both NaN, false otherwise
2554
2545
  return a!==a && b!==b;
2555
2546
  };
2556
2547
 
@@ -2585,8 +2576,6 @@ var util = {
2585
2576
  ucs2length: ucs2length,
2586
2577
  varOccurences: varOccurences,
2587
2578
  varReplace: varReplace,
2588
- cleanUpCode: cleanUpCode,
2589
- finalCleanUpCode: finalCleanUpCode,
2590
2579
  schemaHasRules: schemaHasRules,
2591
2580
  schemaHasRulesExcept: schemaHasRulesExcept,
2592
2581
  schemaUnknownRules: schemaUnknownRules,
@@ -2608,7 +2597,7 @@ function copy(o, to) {
2608
2597
  }
2609
2598
 
2610
2599
 
2611
- function checkDataType(dataType, data, negate) {
2600
+ function checkDataType(dataType, data, strictNumbers, negate) {
2612
2601
  var EQUAL = negate ? ' !== ' : ' === '
2613
2602
  , AND = negate ? ' || ' : ' && '
2614
2603
  , OK = negate ? '!' : ''
@@ -2621,15 +2610,18 @@ function checkDataType(dataType, data, negate) {
2621
2610
  NOT + 'Array.isArray(' + data + '))';
2622
2611
  case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND +
2623
2612
  NOT + '(' + data + ' % 1)' +
2624
- AND + data + EQUAL + data + ')';
2613
+ AND + data + EQUAL + data +
2614
+ (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';
2615
+ case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' +
2616
+ (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';
2625
2617
  default: return 'typeof ' + data + EQUAL + '"' + dataType + '"';
2626
2618
  }
2627
2619
  }
2628
2620
 
2629
2621
 
2630
- function checkDataTypes(dataTypes, data) {
2622
+ function checkDataTypes(dataTypes, data, strictNumbers) {
2631
2623
  switch (dataTypes.length) {
2632
- case 1: return checkDataType(dataTypes[0], data, true);
2624
+ case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);
2633
2625
  default:
2634
2626
  var code = '';
2635
2627
  var types = toHash(dataTypes);
@@ -2642,7 +2634,7 @@ function checkDataTypes(dataTypes, data) {
2642
2634
  }
2643
2635
  if (types.number) delete types.integer;
2644
2636
  for (var t in types)
2645
- code += (code ? ' && ' : '' ) + checkDataType(t, data, true);
2637
+ code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);
2646
2638
 
2647
2639
  return code;
2648
2640
  }
@@ -2708,42 +2700,6 @@ function varReplace(str, dataVar, expr) {
2708
2700
  }
2709
2701
 
2710
2702
 
2711
- var EMPTY_ELSE = /else\s*{\s*}/g
2712
- , EMPTY_IF_NO_ELSE = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g
2713
- , EMPTY_IF_WITH_ELSE = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g;
2714
- function cleanUpCode(out) {
2715
- return out.replace(EMPTY_ELSE, '')
2716
- .replace(EMPTY_IF_NO_ELSE, '')
2717
- .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');
2718
- }
2719
-
2720
-
2721
- var ERRORS_REGEXP = /[^v.]errors/g
2722
- , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g
2723
- , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g
2724
- , RETURN_VALID = 'return errors === 0;'
2725
- , RETURN_TRUE = 'validate.errors = null; return true;'
2726
- , RETURN_ASYNC = /if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/
2727
- , RETURN_DATA_ASYNC = 'return data;'
2728
- , ROOTDATA_REGEXP = /[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g
2729
- , REMOVE_ROOTDATA = /if \(rootData === undefined\) rootData = data;/;
2730
-
2731
- function finalCleanUpCode(out, async) {
2732
- var matches = out.match(ERRORS_REGEXP);
2733
- if (matches && matches.length == 2) {
2734
- out = async
2735
- ? out.replace(REMOVE_ERRORS_ASYNC, '')
2736
- .replace(RETURN_ASYNC, RETURN_DATA_ASYNC)
2737
- : out.replace(REMOVE_ERRORS, '')
2738
- .replace(RETURN_VALID, RETURN_TRUE);
2739
- }
2740
-
2741
- matches = out.match(ROOTDATA_REGEXP);
2742
- if (!matches || matches.length !== 3) return out;
2743
- return out.replace(REMOVE_ROOTDATA, '');
2744
- }
2745
-
2746
-
2747
2703
  function schemaHasRules(schema, rules) {
2748
2704
  if (typeof schema == 'boolean') return !schema;
2749
2705
  for (var key in schema) if (rules[key]) return true;
@@ -2822,7 +2778,7 @@ function getData($data, lvl, paths) {
2822
2778
 
2823
2779
  function joinPaths (a, b) {
2824
2780
  if (a == '""') return b;
2825
- return (a + ' + ' + b).replace(/' \+ '/g, '');
2781
+ return (a + ' + ' + b).replace(/([^\\])' \+ '/g, '$1');
2826
2782
  }
2827
2783
 
2828
2784
 
@@ -3386,7 +3342,7 @@ var validate = function generate_validate(it, $keyword, $ruleType) {
3386
3342
  it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));
3387
3343
  it.baseId = it.baseId || it.rootId;
3388
3344
  delete it.isTop;
3389
- it.dataPathArr = [undefined];
3345
+ it.dataPathArr = [""];
3390
3346
  if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {
3391
3347
  var $defaultMsg = 'default is ignored in the schema root';
3392
3348
  if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
@@ -3444,47 +3400,39 @@ var validate = function generate_validate(it, $keyword, $ruleType) {
3444
3400
  var $schemaPath = it.schemaPath + '.type',
3445
3401
  $errSchemaPath = it.errSchemaPath + '/type',
3446
3402
  $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';
3447
- out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { ';
3403
+ out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';
3448
3404
  if ($coerceToTypes) {
3449
3405
  var $dataType = 'dataType' + $lvl,
3450
3406
  $coerced = 'coerced' + $lvl;
3451
- out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; ';
3407
+ out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';
3452
3408
  if (it.opts.coerceTypes == 'array') {
3453
- out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; ';
3409
+ out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';
3454
3410
  }
3455
- out += ' var ' + ($coerced) + ' = undefined; ';
3456
- var $bracesCoercion = '';
3411
+ out += ' if (' + ($coerced) + ' !== undefined) ; ';
3457
3412
  var arr1 = $coerceToTypes;
3458
3413
  if (arr1) {
3459
3414
  var $type, $i = -1,
3460
3415
  l1 = arr1.length - 1;
3461
3416
  while ($i < l1) {
3462
3417
  $type = arr1[$i += 1];
3463
- if ($i) {
3464
- out += ' if (' + ($coerced) + ' === undefined) { ';
3465
- $bracesCoercion += '}';
3466
- }
3467
- if (it.opts.coerceTypes == 'array' && $type != 'array') {
3468
- out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } ';
3469
- }
3470
3418
  if ($type == 'string') {
3471
- out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; ';
3419
+ out += ' else if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; ';
3472
3420
  } else if ($type == 'number' || $type == 'integer') {
3473
- out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';
3421
+ out += ' else if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';
3474
3422
  if ($type == 'integer') {
3475
3423
  out += ' && !(' + ($data) + ' % 1)';
3476
3424
  }
3477
3425
  out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';
3478
3426
  } else if ($type == 'boolean') {
3479
- out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';
3427
+ out += ' else if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';
3480
3428
  } else if ($type == 'null') {
3481
- out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';
3429
+ out += ' else if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';
3482
3430
  } else if (it.opts.coerceTypes == 'array' && $type == 'array') {
3483
- out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';
3431
+ out += ' else if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';
3484
3432
  }
3485
3433
  }
3486
3434
  }
3487
- out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { ';
3435
+ out += ' else { ';
3488
3436
  var $$outStack = $$outStack || [];
3489
3437
  $$outStack.push(out);
3490
3438
  out = ''; /* istanbul ignore else */
@@ -3524,7 +3472,7 @@ var validate = function generate_validate(it, $keyword, $ruleType) {
3524
3472
  } else {
3525
3473
  out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
3526
3474
  }
3527
- out += ' } else { ';
3475
+ out += ' } if (' + ($coerced) + ' !== undefined) { ';
3528
3476
  var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
3529
3477
  $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
3530
3478
  out += ' ' + ($data) + ' = ' + ($coerced) + '; ';
@@ -3597,7 +3545,7 @@ var validate = function generate_validate(it, $keyword, $ruleType) {
3597
3545
  $rulesGroup = arr2[i2 += 1];
3598
3546
  if ($shouldUseGroup($rulesGroup)) {
3599
3547
  if ($rulesGroup.type) {
3600
- out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { ';
3548
+ out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';
3601
3549
  }
3602
3550
  if (it.opts.useDefaults) {
3603
3551
  if ($rulesGroup.type == 'object' && it.schema.properties) {
@@ -3765,10 +3713,6 @@ var validate = function generate_validate(it, $keyword, $ruleType) {
3765
3713
  } else {
3766
3714
  out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';
3767
3715
  }
3768
- out = it.util.cleanUpCode(out);
3769
- if ($top) {
3770
- out = it.util.finalCleanUpCode(out, $async);
3771
- }
3772
3716
 
3773
3717
  function $shouldUseGroup($rulesGroup) {
3774
3718
  var rules = $rulesGroup.rules;
@@ -3894,7 +3838,7 @@ function compile(schema, root, localRefs, baseId) {
3894
3838
  + vars(defaults, defaultCode) + vars(customRules, customRuleCode)
3895
3839
  + sourceCode;
3896
3840
 
3897
- if (opts.processCode) sourceCode = opts.processCode(sourceCode);
3841
+ if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);
3898
3842
  // console.log('\n\n\n *** \n', JSON.stringify(sourceCode));
3899
3843
  var validate$1;
3900
3844
  try {
@@ -4197,8 +4141,8 @@ Cache.prototype.clear = function Cache_clear() {
4197
4141
 
4198
4142
  var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
4199
4143
  var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];
4200
- var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i;
4201
- var HOSTNAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i;
4144
+ var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;
4145
+ 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;
4202
4146
  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;
4203
4147
  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;
4204
4148
  // uri-template: https://tools.ietf.org/html/rfc6570
@@ -4206,8 +4150,8 @@ var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|
4206
4150
  // For the source: https://gist.github.com/dperini/729294
4207
4151
  // For test cases: https://mathiasbynens.be/demo/url-regex
4208
4152
  // @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.
4209
- // 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;
4210
- var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
4153
+ // 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;
4154
+ 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;
4211
4155
  var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
4212
4156
  var JSON_POINTER$1 = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
4213
4157
  var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
@@ -4226,11 +4170,11 @@ formats.fast = {
4226
4170
  // date: http://tools.ietf.org/html/rfc3339#section-5.6
4227
4171
  date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
4228
4172
  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6
4229
- time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
4230
- '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,
4173
+ time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,
4174
+ '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,
4231
4175
  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
4232
- uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,
4233
- 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
4176
+ uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,
4177
+ 'uri-reference': /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
4234
4178
  'uri-template': URITEMPLATE,
4235
4179
  url: URL,
4236
4180
  // email (sources from jsen validator):
@@ -4263,7 +4207,7 @@ formats.full = {
4263
4207
  'uri-template': URITEMPLATE,
4264
4208
  url: URL,
4265
4209
  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,
4266
- hostname: hostname,
4210
+ hostname: HOSTNAME,
4267
4211
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
4268
4212
  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,
4269
4213
  regex: regex,
@@ -4316,13 +4260,6 @@ function date_time(str) {
4316
4260
  }
4317
4261
 
4318
4262
 
4319
- function hostname(str) {
4320
- // https://tools.ietf.org/html/rfc1034#section-3.5
4321
- // https://tools.ietf.org/html/rfc1123#section-2
4322
- return str.length <= 255 && HOSTNAME.test(str);
4323
- }
4324
-
4325
-
4326
4263
  var NOT_URI_FRAGMENT = /\/|:/;
4327
4264
  function uri(str) {
4328
4265
  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."
@@ -4483,7 +4420,7 @@ var allOf = function generate_allOf(it, $keyword, $ruleType) {
4483
4420
  l1 = arr1.length - 1;
4484
4421
  while ($i < l1) {
4485
4422
  $sch = arr1[$i += 1];
4486
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
4423
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
4487
4424
  $allSchemasEmpty = false;
4488
4425
  $it.schema = $sch;
4489
4426
  $it.schemaPath = $schemaPath + '[' + $i + ']';
@@ -4504,7 +4441,6 @@ var allOf = function generate_allOf(it, $keyword, $ruleType) {
4504
4441
  out += ' ' + ($closingBraces.slice(0, -1)) + ' ';
4505
4442
  }
4506
4443
  }
4507
- out = it.util.cleanUpCode(out);
4508
4444
  return out;
4509
4445
  };
4510
4446
 
@@ -4524,7 +4460,7 @@ var anyOf = function generate_anyOf(it, $keyword, $ruleType) {
4524
4460
  $it.level++;
4525
4461
  var $nextValid = 'valid' + $it.level;
4526
4462
  var $noEmptySchema = $schema.every(function($sch) {
4527
- return it.util.schemaHasRules($sch, it.RULES.all);
4463
+ return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));
4528
4464
  });
4529
4465
  if ($noEmptySchema) {
4530
4466
  var $currentBaseId = $it.baseId;
@@ -4573,7 +4509,6 @@ var anyOf = function generate_anyOf(it, $keyword, $ruleType) {
4573
4509
  if (it.opts.allErrors) {
4574
4510
  out += ' } ';
4575
4511
  }
4576
- out = it.util.cleanUpCode(out);
4577
4512
  } else {
4578
4513
  if ($breakOnError) {
4579
4514
  out += ' if (true) { ';
@@ -4667,7 +4602,7 @@ var contains = function generate_contains(it, $keyword, $ruleType) {
4667
4602
  $dataNxt = $it.dataLevel = it.dataLevel + 1,
4668
4603
  $nextData = 'data' + $dataNxt,
4669
4604
  $currentBaseId = it.baseId,
4670
- $nonEmptySchema = it.util.schemaHasRules($schema, it.RULES.all);
4605
+ $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));
4671
4606
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
4672
4607
  if ($nonEmptySchema) {
4673
4608
  var $wasComposite = it.compositeRule;
@@ -4726,7 +4661,6 @@ var contains = function generate_contains(it, $keyword, $ruleType) {
4726
4661
  if (it.opts.allErrors) {
4727
4662
  out += ' } ';
4728
4663
  }
4729
- out = it.util.cleanUpCode(out);
4730
4664
  return out;
4731
4665
  };
4732
4666
 
@@ -4748,6 +4682,7 @@ var dependencies = function generate_dependencies(it, $keyword, $ruleType) {
4748
4682
  $propertyDeps = {},
4749
4683
  $ownProperties = it.opts.ownProperties;
4750
4684
  for ($property in $schema) {
4685
+ if ($property == '__proto__') continue;
4751
4686
  var $sch = $schema[$property];
4752
4687
  var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;
4753
4688
  $deps[$property] = $sch;
@@ -4873,7 +4808,7 @@ var dependencies = function generate_dependencies(it, $keyword, $ruleType) {
4873
4808
  var $currentBaseId = $it.baseId;
4874
4809
  for (var $property in $schemaDeps) {
4875
4810
  var $sch = $schemaDeps[$property];
4876
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
4811
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
4877
4812
  out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
4878
4813
  if ($ownProperties) {
4879
4814
  out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
@@ -4894,7 +4829,6 @@ var dependencies = function generate_dependencies(it, $keyword, $ruleType) {
4894
4829
  if ($breakOnError) {
4895
4830
  out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
4896
4831
  }
4897
- out = it.util.cleanUpCode(out);
4898
4832
  return out;
4899
4833
  };
4900
4834
 
@@ -5126,8 +5060,8 @@ var _if = function generate_if(it, $keyword, $ruleType) {
5126
5060
  var $nextValid = 'valid' + $it.level;
5127
5061
  var $thenSch = it.schema['then'],
5128
5062
  $elseSch = it.schema['else'],
5129
- $thenPresent = $thenSch !== undefined && it.util.schemaHasRules($thenSch, it.RULES.all),
5130
- $elsePresent = $elseSch !== undefined && it.util.schemaHasRules($elseSch, it.RULES.all),
5063
+ $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),
5064
+ $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),
5131
5065
  $currentBaseId = $it.baseId;
5132
5066
  if ($thenPresent || $elsePresent) {
5133
5067
  var $ifClause;
@@ -5205,7 +5139,6 @@ var _if = function generate_if(it, $keyword, $ruleType) {
5205
5139
  if ($breakOnError) {
5206
5140
  out += ' else { ';
5207
5141
  }
5208
- out = it.util.cleanUpCode(out);
5209
5142
  } else {
5210
5143
  if ($breakOnError) {
5211
5144
  out += ' if (true) { ';
@@ -5281,7 +5214,7 @@ var items = function generate_items(it, $keyword, $ruleType) {
5281
5214
  l1 = arr1.length - 1;
5282
5215
  while ($i < l1) {
5283
5216
  $sch = arr1[$i += 1];
5284
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
5217
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
5285
5218
  out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';
5286
5219
  var $passData = $data + '[' + $i + ']';
5287
5220
  $it.schema = $sch;
@@ -5304,7 +5237,7 @@ var items = function generate_items(it, $keyword, $ruleType) {
5304
5237
  }
5305
5238
  }
5306
5239
  }
5307
- if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {
5240
+ if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {
5308
5241
  $it.schema = $additionalItems;
5309
5242
  $it.schemaPath = it.schemaPath + '.additionalItems';
5310
5243
  $it.errSchemaPath = it.errSchemaPath + '/additionalItems';
@@ -5328,7 +5261,7 @@ var items = function generate_items(it, $keyword, $ruleType) {
5328
5261
  $closingBraces += '}';
5329
5262
  }
5330
5263
  }
5331
- } else if (it.util.schemaHasRules($schema, it.RULES.all)) {
5264
+ } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {
5332
5265
  $it.schema = $schema;
5333
5266
  $it.schemaPath = $schemaPath;
5334
5267
  $it.errSchemaPath = $errSchemaPath;
@@ -5351,7 +5284,6 @@ var items = function generate_items(it, $keyword, $ruleType) {
5351
5284
  if ($breakOnError) {
5352
5285
  out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
5353
5286
  }
5354
- out = it.util.cleanUpCode(out);
5355
5287
  return out;
5356
5288
  };
5357
5289
 
@@ -5380,6 +5312,12 @@ var _limit = function generate__limit(it, $keyword, $ruleType) {
5380
5312
  $op = $isMax ? '<' : '>',
5381
5313
  $notOp = $isMax ? '>' : '<',
5382
5314
  $errorKeyword = undefined;
5315
+ if (!($isData || typeof $schema == 'number' || $schema === undefined)) {
5316
+ throw new Error($keyword + ' must be number');
5317
+ }
5318
+ if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {
5319
+ throw new Error($exclusiveKeyword + ' must be number or boolean');
5320
+ }
5383
5321
  if ($isDataExcl) {
5384
5322
  var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),
5385
5323
  $exclusive = 'exclusive' + $lvl,
@@ -5530,6 +5468,9 @@ var _limitItems = function generate__limitItems(it, $keyword, $ruleType) {
5530
5468
  } else {
5531
5469
  $schemaValue = $schema;
5532
5470
  }
5471
+ if (!($isData || typeof $schema == 'number')) {
5472
+ throw new Error($keyword + ' must be number');
5473
+ }
5533
5474
  var $op = $keyword == 'maxItems' ? '>' : '<';
5534
5475
  out += 'if ( ';
5535
5476
  if ($isData) {
@@ -5607,6 +5548,9 @@ var _limitLength = function generate__limitLength(it, $keyword, $ruleType) {
5607
5548
  } else {
5608
5549
  $schemaValue = $schema;
5609
5550
  }
5551
+ if (!($isData || typeof $schema == 'number')) {
5552
+ throw new Error($keyword + ' must be number');
5553
+ }
5610
5554
  var $op = $keyword == 'maxLength' ? '>' : '<';
5611
5555
  out += 'if ( ';
5612
5556
  if ($isData) {
@@ -5689,6 +5633,9 @@ var _limitProperties = function generate__limitProperties(it, $keyword, $ruleTyp
5689
5633
  } else {
5690
5634
  $schemaValue = $schema;
5691
5635
  }
5636
+ if (!($isData || typeof $schema == 'number')) {
5637
+ throw new Error($keyword + ' must be number');
5638
+ }
5692
5639
  var $op = $keyword == 'maxProperties' ? '>' : '<';
5693
5640
  out += 'if ( ';
5694
5641
  if ($isData) {
@@ -5765,6 +5712,9 @@ var multipleOf = function generate_multipleOf(it, $keyword, $ruleType) {
5765
5712
  } else {
5766
5713
  $schemaValue = $schema;
5767
5714
  }
5715
+ if (!($isData || typeof $schema == 'number')) {
5716
+ throw new Error($keyword + ' must be number');
5717
+ }
5768
5718
  out += 'var division' + ($lvl) + ';if (';
5769
5719
  if ($isData) {
5770
5720
  out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || ';
@@ -5838,7 +5788,7 @@ var not = function generate_not(it, $keyword, $ruleType) {
5838
5788
  var $it = it.util.copy(it);
5839
5789
  $it.level++;
5840
5790
  var $nextValid = 'valid' + $it.level;
5841
- if (it.util.schemaHasRules($schema, it.RULES.all)) {
5791
+ if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {
5842
5792
  $it.schema = $schema;
5843
5793
  $it.schemaPath = $schemaPath;
5844
5794
  $it.errSchemaPath = $errSchemaPath;
@@ -5936,7 +5886,7 @@ var oneOf = function generate_oneOf(it, $keyword, $ruleType) {
5936
5886
  l1 = arr1.length - 1;
5937
5887
  while ($i < l1) {
5938
5888
  $sch = arr1[$i += 1];
5939
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
5889
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
5940
5890
  $it.schema = $sch;
5941
5891
  $it.schemaPath = $schemaPath + '[' + $i + ']';
5942
5892
  $it.errSchemaPath = $errSchemaPath + '/' + $i;
@@ -6076,9 +6026,9 @@ var properties = function generate_properties(it, $keyword, $ruleType) {
6076
6026
  $dataNxt = $it.dataLevel = it.dataLevel + 1,
6077
6027
  $nextData = 'data' + $dataNxt,
6078
6028
  $dataProperties = 'dataProperties' + $lvl;
6079
- var $schemaKeys = Object.keys($schema || {}),
6029
+ var $schemaKeys = Object.keys($schema || {}).filter(notProto),
6080
6030
  $pProperties = it.schema.patternProperties || {},
6081
- $pPropertyKeys = Object.keys($pProperties),
6031
+ $pPropertyKeys = Object.keys($pProperties).filter(notProto),
6082
6032
  $aProperties = it.schema.additionalProperties,
6083
6033
  $someProperties = $schemaKeys.length || $pPropertyKeys.length,
6084
6034
  $noAdditional = $aProperties === false,
@@ -6088,7 +6038,13 @@ var properties = function generate_properties(it, $keyword, $ruleType) {
6088
6038
  $ownProperties = it.opts.ownProperties,
6089
6039
  $currentBaseId = it.baseId;
6090
6040
  var $required = it.schema.required;
6091
- if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);
6041
+ if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {
6042
+ var $requiredHash = it.util.toHash($required);
6043
+ }
6044
+
6045
+ function notProto(p) {
6046
+ return p !== '__proto__';
6047
+ }
6092
6048
  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';
6093
6049
  if ($ownProperties) {
6094
6050
  out += ' var ' + ($dataProperties) + ' = undefined;';
@@ -6241,7 +6197,7 @@ var properties = function generate_properties(it, $keyword, $ruleType) {
6241
6197
  while (i3 < l3) {
6242
6198
  $propertyKey = arr3[i3 += 1];
6243
6199
  var $sch = $schema[$propertyKey];
6244
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
6200
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
6245
6201
  var $prop = it.util.getProperty($propertyKey),
6246
6202
  $passData = $data + $prop,
6247
6203
  $hasDefault = $useDefaults && $sch.default !== undefined;
@@ -6344,7 +6300,7 @@ var properties = function generate_properties(it, $keyword, $ruleType) {
6344
6300
  while (i4 < l4) {
6345
6301
  $pProperty = arr4[i4 += 1];
6346
6302
  var $sch = $pProperties[$pProperty];
6347
- if (it.util.schemaHasRules($sch, it.RULES.all)) {
6303
+ if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {
6348
6304
  $it.schema = $sch;
6349
6305
  $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);
6350
6306
  $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);
@@ -6383,7 +6339,6 @@ var properties = function generate_properties(it, $keyword, $ruleType) {
6383
6339
  if ($breakOnError) {
6384
6340
  out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
6385
6341
  }
6386
- out = it.util.cleanUpCode(out);
6387
6342
  return out;
6388
6343
  };
6389
6344
 
@@ -6402,7 +6357,7 @@ var propertyNames = function generate_propertyNames(it, $keyword, $ruleType) {
6402
6357
  $it.level++;
6403
6358
  var $nextValid = 'valid' + $it.level;
6404
6359
  out += 'var ' + ($errs) + ' = errors;';
6405
- if (it.util.schemaHasRules($schema, it.RULES.all)) {
6360
+ if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {
6406
6361
  $it.schema = $schema;
6407
6362
  $it.schemaPath = $schemaPath;
6408
6363
  $it.errSchemaPath = $errSchemaPath;
@@ -6465,7 +6420,6 @@ var propertyNames = function generate_propertyNames(it, $keyword, $ruleType) {
6465
6420
  if ($breakOnError) {
6466
6421
  out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
6467
6422
  }
6468
- out = it.util.cleanUpCode(out);
6469
6423
  return out;
6470
6424
  };
6471
6425
 
@@ -6494,7 +6448,7 @@ var required = function generate_required(it, $keyword, $ruleType) {
6494
6448
  while (i1 < l1) {
6495
6449
  $property = arr1[i1 += 1];
6496
6450
  var $propertySch = it.schema.properties[$property];
6497
- if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {
6451
+ if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {
6498
6452
  $required[$required.length] = $property;
6499
6453
  }
6500
6454
  }
@@ -6765,7 +6719,7 @@ var uniqueItems = function generate_uniqueItems(it, $keyword, $ruleType) {
6765
6719
  } else {
6766
6720
  out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';
6767
6721
  var $method = 'checkDataType' + ($typeIsArray ? 's' : '');
6768
- out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; ';
6722
+ out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';
6769
6723
  if ($typeIsArray) {
6770
6724
  out += ' if (typeof item == \'string\') item = \'"\' + item; ';
6771
6725
  }
@@ -6955,7 +6909,7 @@ var data = function (metaSchema, keywordsJsonPointers) {
6955
6909
  keywords[key] = {
6956
6910
  anyOf: [
6957
6911
  schema,
6958
- { $ref: 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#' }
6912
+ { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }
6959
6913
  ]
6960
6914
  };
6961
6915
  }
@@ -7547,20 +7501,10 @@ var jsonSchemaDraft07$1 = /*#__PURE__*/Object.freeze({
7547
7501
 
7548
7502
  var require$$2 = getCjsExportFromNamespace(jsonSchemaDraft07$1);
7549
7503
 
7550
- var IDENTIFIER$1 = /^[a-z_$][a-z0-9_$-]*$/i;
7551
-
7552
- var metaSchema = require$$2;
7553
-
7554
- var keyword = {
7555
- add: addKeyword,
7556
- get: getKeyword,
7557
- remove: removeKeyword,
7558
- validate: validateKeyword
7559
- };
7560
-
7561
- var definitionSchema = {
7504
+ var definition_schema = {
7505
+ $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',
7562
7506
  definitions: {
7563
- simpleTypes: metaSchema.definitions.simpleTypes
7507
+ simpleTypes: require$$2.definitions.simpleTypes
7564
7508
  },
7565
7509
  type: 'object',
7566
7510
  dependencies: {
@@ -7570,7 +7514,7 @@ var definitionSchema = {
7570
7514
  valid: {not: {required: ['macro']}}
7571
7515
  },
7572
7516
  properties: {
7573
- type: metaSchema.properties.type,
7517
+ type: require$$2.properties.type,
7574
7518
  schema: {type: 'boolean'},
7575
7519
  statements: {type: 'boolean'},
7576
7520
  dependencies: {
@@ -7591,6 +7535,18 @@ var definitionSchema = {
7591
7535
  }
7592
7536
  };
7593
7537
 
7538
+ var IDENTIFIER$1 = /^[a-z_$][a-z0-9_$-]*$/i;
7539
+
7540
+
7541
+
7542
+ var keyword = {
7543
+ add: addKeyword,
7544
+ get: getKeyword,
7545
+ remove: removeKeyword,
7546
+ validate: validateKeyword
7547
+ };
7548
+
7549
+
7594
7550
  /**
7595
7551
  * Define custom keyword
7596
7552
  * @this Ajv
@@ -7625,7 +7581,7 @@ function addKeyword(keyword, definition) {
7625
7581
  metaSchema = {
7626
7582
  anyOf: [
7627
7583
  metaSchema,
7628
- { '$ref': 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#' }
7584
+ { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }
7629
7585
  ]
7630
7586
  };
7631
7587
  }
@@ -7714,7 +7670,7 @@ function removeKeyword(keyword) {
7714
7670
  function validateKeyword(definition, throwError) {
7715
7671
  validateKeyword.errors = null;
7716
7672
  var v = this._validateKeyword = this._validateKeyword
7717
- || this.compile(definitionSchema, true);
7673
+ || this.compile(definition_schema, true);
7718
7674
 
7719
7675
  if (v(definition)) return true;
7720
7676
  validateKeyword.errors = v.errors;
@@ -7725,7 +7681,7 @@ function validateKeyword(definition, throwError) {
7725
7681
  }
7726
7682
 
7727
7683
  var $schema$1 = "http://json-schema.org/draft-07/schema#";
7728
- var $id$1 = "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#";
7684
+ var $id$1 = "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#";
7729
7685
  var description = "Meta-schema for $data reference (JSON Schema extension proposal)";
7730
7686
  var type$1 = "object";
7731
7687
  var required$1 = [
@@ -7828,6 +7784,7 @@ function Ajv(opts) {
7828
7784
  this._metaOpts = getMetaSchemaOptions(this);
7829
7785
 
7830
7786
  if (opts.formats) addInitialFormats(this);
7787
+ if (opts.keywords) addInitialKeywords(this);
7831
7788
  addDefaultMetaSchema(this);
7832
7789
  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);
7833
7790
  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});
@@ -8226,6 +8183,14 @@ function addInitialFormats(self) {
8226
8183
  }
8227
8184
 
8228
8185
 
8186
+ function addInitialKeywords(self) {
8187
+ for (var name in self._opts.keywords) {
8188
+ var keyword = self._opts.keywords[name];
8189
+ self.addKeyword(name, keyword);
8190
+ }
8191
+ }
8192
+
8193
+
8229
8194
  function checkUnique(self, id) {
8230
8195
  if (self._schemas[id] || self._refs[id])
8231
8196
  throw new Error('schema with key or id "' + id + '" already exists');