README.md (2694B)
1 # json-schema-traverse 2 Traverse JSON Schema passing each schema object to callback 3 4 [![Build Status](https://travis-ci.org/epoberezkin/json-schema-traverse.svg?branch=master)](https://travis-ci.org/epoberezkin/json-schema-traverse) 5 [![npm version](https://badge.fury.io/js/json-schema-traverse.svg)](https://www.npmjs.com/package/json-schema-traverse) 6 [![Coverage Status](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master) 7 8 9 ## Install 10 11 ``` 12 npm install json-schema-traverse 13 ``` 14 15 16 ## Usage 17 18 ```javascript 19 const traverse = require('json-schema-traverse'); 20 const schema = { 21 properties: { 22 foo: {type: 'string'}, 23 bar: {type: 'integer'} 24 } 25 }; 26 27 traverse(schema, {cb}); 28 // cb is called 3 times with: 29 // 1. root schema 30 // 2. {type: 'string'} 31 // 3. {type: 'integer'} 32 33 // Or: 34 35 traverse(schema, {cb: {pre, post}}); 36 // pre is called 3 times with: 37 // 1. root schema 38 // 2. {type: 'string'} 39 // 3. {type: 'integer'} 40 // 41 // post is called 3 times with: 42 // 1. {type: 'string'} 43 // 2. {type: 'integer'} 44 // 3. root schema 45 46 ``` 47 48 Callback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is. Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed. 49 50 Callback is passed these parameters: 51 52 - _schema_: the current schema object 53 - _JSON pointer_: from the root schema to the current schema object 54 - _root schema_: the schema passed to `traverse` object 55 - _parent JSON pointer_: from the root schema to the parent schema object (see below) 56 - _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.) 57 - _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema 58 - _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'` 59 60 61 ## Traverse objects in all unknown keywords 62 63 ```javascript 64 const traverse = require('json-schema-traverse'); 65 const schema = { 66 mySchema: { 67 minimum: 1, 68 maximum: 2 69 } 70 }; 71 72 traverse(schema, {allKeys: true, cb}); 73 // cb is called 2 times with: 74 // 1. root schema 75 // 2. mySchema 76 ``` 77 78 Without option `allKeys: true` callback will be called only with root schema. 79 80 81 ## License 82 83 [MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE)