diff --git a/src/core/run.js b/src/core/run.js index 68244643abcaf1b78f06f9ede8ff64c5cad49408..255774338522a8a82e8ccd9939bb94158481e8e9 100644 --- a/src/core/run.js +++ b/src/core/run.js @@ -185,7 +185,7 @@ function run(refs, schema, container) { // call given thunks if present utils.merge(sub, typeof _sub.thunk === 'function' - ? _sub.thunk() + ? _sub.thunk(sub) : _sub); }); } @@ -200,24 +200,26 @@ function run(refs, schema, container) { } return { - thunk() { + thunk(rootSchema) { const copy = utils.omitProps(sub, ['anyOf', 'oneOf']); const fixed = random.pick(mix); utils.merge(copy, fixed); - if (sub.oneOf && copy.properties) { - mix.forEach(omit => { - if (omit !== fixed && omit.required) { - omit.required.forEach(key => { - // remove additional properties from merged schemas - if (!copy.required.includes(key)) { - delete copy.properties[key]; - } - }); - } - }); - } + // remove additional properties from merged schemas + mix.forEach(omit => { + if (omit.required && omit !== fixed) { + omit.required.forEach(key => { + if (copy.properties && !copy.required.includes(key)) { + delete copy.properties[key]; + } + + if (rootSchema && rootSchema.properties) { + delete rootSchema.properties[key]; + } + }); + } + }); return copy; }, diff --git a/src/core/traverse.js b/src/core/traverse.js index 32135b121c4a83f4edb5340e96c9d6c4f93652d9..6258f0758bf3b3d7be1524b4effbe8da0ac1b948 100644 --- a/src/core/traverse.js +++ b/src/core/traverse.js @@ -54,7 +54,7 @@ function traverse(schema, path, resolve, rootSchema) { // thunks can return sub-schemas if (typeof schema.thunk === 'function') { - return traverse(schema.thunk(), path, resolve); + return traverse(schema.thunk(rootSchema), path, resolve); } if (typeof schema.generate === 'function') {