| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 | | 'use strict'; |  |   |  | var traverse = module.exports = function (schema, opts, cb) { |  |   // Legacy support for v0.3.1 and earlier. |  |   if (typeof opts == 'function') { |  |     cb = opts; |  |     opts = {}; |  |   } |  |   |  |   cb = opts.cb || cb; |  |   var pre = (typeof cb == 'function') ? cb : cb.pre || function() {}; |  |   var post = cb.post || function() {}; |  |   |  |   _traverse(opts, pre, post, schema, '', schema); |  | }; |  |   |  |   |  | traverse.keywords = { |  |   additionalItems: true, |  |   items: true, |  |   contains: true, |  |   additionalProperties: true, |  |   propertyNames: true, |  |   not: true |  | }; |  |   |  | traverse.arrayKeywords = { |  |   items: true, |  |   allOf: true, |  |   anyOf: true, |  |   oneOf: true |  | }; |  |   |  | traverse.propsKeywords = { |  |   definitions: true, |  |   properties: true, |  |   patternProperties: true, |  |   dependencies: true |  | }; |  |   |  | traverse.skipKeywords = { |  |   default: true, |  |   enum: true, |  |   const: true, |  |   required: true, |  |   maximum: true, |  |   minimum: true, |  |   exclusiveMaximum: true, |  |   exclusiveMinimum: true, |  |   multipleOf: true, |  |   maxLength: true, |  |   minLength: true, |  |   pattern: true, |  |   format: true, |  |   maxItems: true, |  |   minItems: true, |  |   uniqueItems: true, |  |   maxProperties: true, |  |   minProperties: true |  | }; |  |   |  |   |  | function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { |  |   if (schema && typeof schema == 'object' && !Array.isArray(schema)) { |  |     pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); |  |     for (var key in schema) { |  |       var sch = schema[key]; |  |       if (Array.isArray(sch)) { |  |         if (key in traverse.arrayKeywords) { |  |           for (var i=0; i<sch.length; i++) |  |             _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i); |  |         } |  |       } else if (key in traverse.propsKeywords) { |  |         if (sch && typeof sch == 'object') { |  |           for (var prop in sch) |  |             _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); |  |         } |  |       } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) { |  |         _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema); |  |       } |  |     } |  |     post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); |  |   } |  | } |  |   |  |   |  | function escapeJsonPtr(str) { |  |   return str.replace(/~/g, '~0').replace(/\//g, '~1'); |  | } | 
 |