Newer
Older
CVSS_3.0_GUI / dist / CVSS_3.0_Calc-1.0.0-linux-x64 / node_modules / nwjs-builder-phoenix / node_modules / request / node_modules / har-validator / node_modules / ajv / node_modules / json-schema-traverse / index.js
root on 7 May 2019 2 KB Initial commit
  1. 'use strict';
  2.  
  3. var traverse = module.exports = function (schema, opts, cb) {
  4. if (typeof opts == 'function') {
  5. cb = opts;
  6. opts = {};
  7. }
  8. _traverse(opts, cb, schema, '', schema);
  9. };
  10.  
  11.  
  12. traverse.keywords = {
  13. additionalItems: true,
  14. items: true,
  15. contains: true,
  16. additionalProperties: true,
  17. propertyNames: true,
  18. not: true
  19. };
  20.  
  21. traverse.arrayKeywords = {
  22. items: true,
  23. allOf: true,
  24. anyOf: true,
  25. oneOf: true
  26. };
  27.  
  28. traverse.propsKeywords = {
  29. definitions: true,
  30. properties: true,
  31. patternProperties: true,
  32. dependencies: true
  33. };
  34.  
  35. traverse.skipKeywords = {
  36. enum: true,
  37. const: true,
  38. required: true,
  39. maximum: true,
  40. minimum: true,
  41. exclusiveMaximum: true,
  42. exclusiveMinimum: true,
  43. multipleOf: true,
  44. maxLength: true,
  45. minLength: true,
  46. pattern: true,
  47. format: true,
  48. maxItems: true,
  49. minItems: true,
  50. uniqueItems: true,
  51. maxProperties: true,
  52. minProperties: true
  53. };
  54.  
  55.  
  56. function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
  57. if (schema && typeof schema == 'object' && !Array.isArray(schema)) {
  58. cb(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
  59. for (var key in schema) {
  60. var sch = schema[key];
  61. if (Array.isArray(sch)) {
  62. if (key in traverse.arrayKeywords) {
  63. for (var i=0; i<sch.length; i++)
  64. _traverse(opts, cb, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);
  65. }
  66. } else if (key in traverse.propsKeywords) {
  67. if (sch && typeof sch == 'object') {
  68. for (var prop in sch)
  69. _traverse(opts, cb, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);
  70. }
  71. } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {
  72. _traverse(opts, cb, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);
  73. }
  74. }
  75. }
  76. }
  77.  
  78.  
  79. function escapeJsonPtr(str) {
  80. return str.replace(/~/g, '~0').replace(/\//g, '~1');
  81. }
Buy Me A Coffee