diff --git a/src/core/run.js b/src/core/run.js index 46dde8ad29549fcc6943d1b141c6eb201afabaea..5a8b8dec43589b028da583a8f2a7fec2a257308f 100644 --- a/src/core/run.js +++ b/src/core/run.js @@ -97,8 +97,11 @@ function run(refs, schema, container) { } // cleanup - if (sub.id && typeof sub.id === 'string') { + const _id = sub.$id || sub.id; + + if (typeof _id === 'string') { delete sub.id; + delete sub.$id; delete sub.$schema; } diff --git a/src/core/traverse.js b/src/core/traverse.js index 1ed942a59d2d3a9d602ff8051fcb783e039ec0ea..43c100d7b205066e318804024d61197211dec951 100644 --- a/src/core/traverse.js +++ b/src/core/traverse.js @@ -17,7 +17,11 @@ function traverse(schema, path, resolve, rootSchema) { if (path[path.length - 1] !== 'properties') { // example values have highest precedence if (optionAPI('useExamplesValue') && Array.isArray(schema.examples)) { - return utils.typecast(null, schema, () => random.pick(schema.examples)); + // include `default` value as example too + const fixedExamples = schema.examples + .concat('default' in schema ? [schema.default] : []); + + return utils.typecast(null, schema, () => random.pick(fixedExamples)); } if (optionAPI('useDefaultValue') && 'default' in schema) { @@ -33,6 +37,10 @@ function traverse(schema, path, resolve, rootSchema) { schema = utils.notValue(schema.not, utils.omitProps(schema, ['not'])); } + if ('const' in schema) { + return schema.const; + } + if (Array.isArray(schema.enum)) { return utils.typecast(null, schema, () => random.pick(schema.enum)); } diff --git a/src/core/utils.js b/src/core/utils.js index a6530ac7f347da934d53debd045027e579e084c6..e140112f071e14040bb817189d43b90903be4fa8 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -265,7 +265,7 @@ function validate(value, schemas) { } function isKey(prop) { - return prop === 'enum' || prop === 'default' || prop === 'required' || prop === 'definitions'; + return ['enum', 'const', 'default', 'examples', 'required', 'definitions'].indexOf(prop) !== -1; } function omitProps(obj, props) { diff --git a/src/index.js b/src/index.js index 7fd07fe6625ee5f9e1e5fcf552e84694f9d14dda..ed70aba8175f5bb7d7e1d154ab0ff1c05fbe52b5 100644 --- a/src/index.js +++ b/src/index.js @@ -59,7 +59,7 @@ function getRefs(refs) { if (Array.isArray(refs)) { refs.forEach(schema => { - $refs[schema.id] = schema; + $refs[schema.$id || schema.id] = schema; }); } else { $refs = refs || {};