diff options
Diffstat (limited to 'node_modules/json-schema-traverse')
-rw-r--r-- | node_modules/json-schema-traverse/.npmignore | 60 | ||||
-rw-r--r-- | node_modules/json-schema-traverse/README.md | 20 | ||||
-rw-r--r-- | node_modules/json-schema-traverse/index.js | 20 | ||||
-rw-r--r-- | node_modules/json-schema-traverse/package.json | 2 | ||||
-rw-r--r-- | node_modules/json-schema-traverse/spec/index.spec.js | 79 |
5 files changed, 106 insertions, 75 deletions
diff --git a/node_modules/json-schema-traverse/.npmignore b/node_modules/json-schema-traverse/.npmignore deleted file mode 100644 index d09355793..000000000 --- a/node_modules/json-schema-traverse/.npmignore +++ /dev/null @@ -1,60 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -.DS_Store diff --git a/node_modules/json-schema-traverse/README.md b/node_modules/json-schema-traverse/README.md index d4286a23b..d5ccaf450 100644 --- a/node_modules/json-schema-traverse/README.md +++ b/node_modules/json-schema-traverse/README.md @@ -24,14 +24,28 @@ const schema = { } }; -traverse(schema, cb); +traverse(schema, {cb}); // cb is called 3 times with: // 1. root schema // 2. {type: 'string'} // 3. {type: 'integer'} + +// Or: + +traverse(schema, {cb: {pre, post}}); +// pre is called 3 times with: +// 1. root schema +// 2. {type: 'string'} +// 3. {type: 'integer'} +// +// post is called 3 times with: +// 1. {type: 'string'} +// 2. {type: 'integer'} +// 3. root schema + ``` -Callback function is called for each schema object (not including draft-06 boolean schemas), including the root schema. Schema references ($ref) are not resolved, they are passed as is. +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. Callback is passed these parameters: @@ -55,7 +69,7 @@ const schema = { } }; -traverse(schema, {allKeys: true}, cb); +traverse(schema, {allKeys: true, cb}); // cb is called 2 times with: // 1. root schema // 2. mySchema diff --git a/node_modules/json-schema-traverse/index.js b/node_modules/json-schema-traverse/index.js index 79eeb6a05..d4a18dfc7 100644 --- a/node_modules/json-schema-traverse/index.js +++ b/node_modules/json-schema-traverse/index.js @@ -1,11 +1,17 @@ '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 = {}; } - _traverse(opts, cb, schema, '', schema); + + cb = opts.cb || cb; + var pre = (typeof cb == 'function') ? cb : cb.pre || function() {}; + var post = cb.post || function() {}; + + _traverse(opts, pre, post, schema, '', schema); }; @@ -33,6 +39,7 @@ traverse.propsKeywords = { }; traverse.skipKeywords = { + default: true, enum: true, const: true, required: true, @@ -53,25 +60,26 @@ traverse.skipKeywords = { }; -function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { +function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { if (schema && typeof schema == 'object' && !Array.isArray(schema)) { - cb(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + 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, cb, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, 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, cb, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); + _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, cb, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema); + _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema); } } + post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); } } diff --git a/node_modules/json-schema-traverse/package.json b/node_modules/json-schema-traverse/package.json index 843a4ce32..156606327 100644 --- a/node_modules/json-schema-traverse/package.json +++ b/node_modules/json-schema-traverse/package.json @@ -1,6 +1,6 @@ { "name": "json-schema-traverse", - "version": "0.3.1", + "version": "0.4.1", "description": "Traverse JSON Schema passing each schema object to callback", "main": "index.js", "scripts": { diff --git a/node_modules/json-schema-traverse/spec/index.spec.js b/node_modules/json-schema-traverse/spec/index.spec.js index 7e66143d3..c76b64fc8 100644 --- a/node_modules/json-schema-traverse/spec/index.spec.js +++ b/node_modules/json-schema-traverse/spec/index.spec.js @@ -14,10 +14,29 @@ describe('json-schema-traverse', function() { var schema = require('./fixtures/schema').schema; var expectedCalls = require('./fixtures/schema').expectedCalls; - traverse(schema, callback); + traverse(schema, {cb: callback}); assert.deepStrictEqual(calls, expectedCalls); }); + describe('Legacy v0.3.1 API', function() { + it('should traverse all keywords containing schemas recursively', function() { + var schema = require('./fixtures/schema').schema; + var expectedCalls = require('./fixtures/schema').expectedCalls; + + traverse(schema, callback); + assert.deepStrictEqual(calls, expectedCalls); + }); + + it('should work when an options object is provided', function() { + // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex + var schema = require('./fixtures/schema').schema; + var expectedCalls = require('./fixtures/schema').expectedCalls; + + traverse(schema, {}, callback); + assert.deepStrictEqual(calls, expectedCalls); + }); + }); + describe('allKeys option', function() { var schema = { @@ -34,7 +53,7 @@ describe('json-schema-traverse', function() { [schema.someObject, '/someObject', schema, '', 'someObject', schema, undefined] ]; - traverse(schema, {allKeys: true}, callback); + traverse(schema, {allKeys: true, cb: callback}); assert.deepStrictEqual(calls, expectedCalls); }); @@ -45,7 +64,7 @@ describe('json-schema-traverse', function() { [schema, '', schema, undefined, undefined, undefined, undefined] ]; - traverse(schema, {allKeys: false}, callback); + traverse(schema, {allKeys: false, cb: callback}); assert.deepStrictEqual(calls, expectedCalls); }); @@ -56,7 +75,7 @@ describe('json-schema-traverse', function() { [schema, '', schema, undefined, undefined, undefined, undefined] ]; - traverse(schema, callback); + traverse(schema, {cb: callback}); assert.deepStrictEqual(calls, expectedCalls); }); @@ -90,13 +109,63 @@ describe('json-schema-traverse', function() { [schema2.properties.larger, '/properties/larger', schema2, '', 'properties', schema2, 'larger'], ]; - traverse(schema2, {allKeys: true}, callback); + traverse(schema2, {allKeys: true, cb: callback}); assert.deepStrictEqual(calls, expectedCalls); }); }); + describe('pre and post', function() { + var schema = { + type: 'object', + properties: { + name: {type: 'string'}, + age: {type: 'number'} + } + }; + + it('should traverse schema in pre-order', function() { + traverse(schema, {cb: {pre}}); + var expectedCalls = [ + ['pre', schema, '', schema, undefined, undefined, undefined, undefined], + ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'], + ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'], + ]; + assert.deepStrictEqual(calls, expectedCalls); + }); + + it('should traverse schema in post-order', function() { + traverse(schema, {cb: {post}}); + var expectedCalls = [ + ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'], + ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'], + ['post', schema, '', schema, undefined, undefined, undefined, undefined], + ]; + assert.deepStrictEqual(calls, expectedCalls); + }); + + it('should traverse schema in pre- and post-order at the same time', function() { + traverse(schema, {cb: {pre, post}}); + var expectedCalls = [ + ['pre', schema, '', schema, undefined, undefined, undefined, undefined], + ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'], + ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'], + ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'], + ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'], + ['post', schema, '', schema, undefined, undefined, undefined, undefined], + ]; + assert.deepStrictEqual(calls, expectedCalls); + }); + }); function callback() { calls.push(Array.prototype.slice.call(arguments)); } + + function pre() { + calls.push(['pre'].concat(Array.prototype.slice.call(arguments))); + } + + function post() { + calls.push(['post'].concat(Array.prototype.slice.call(arguments))); + } }); |