json-schema-empty
json-schema-empty copied to clipboard
deterministically generate simple data from json schema's
json-schema-empty
Generate simple data that matches a json schema.
All libraries that generate data from a json-schema I could find generate random data that conforms to a json schema. This is nice for testing but is not well-suited for generating default data for forms for example.
json-schema-empty fills another niche. The data it generates
conforms to the following qualities:
- data is generated deterministically, if the schema is the same, the date will be the same.
- the data is as simple as possible
- the data conforms to the form specified in the schema. It will sometimes fail to be valid according to the schema however. The reason for this is simple: you cannot generate all values automatically (see the rules section for more info on this).
Usage
To install json-schema-empty, run:
npm install json-schema-empty --save
The api is simple:
import empty from 'json-schema-empty';
// var empty = require('json-schema-empty').default; // when not using es6
var schema = {
type: 'object'
, properties: {
foo: {
type: 'integer'
, minimum: 12
, multipleOf: 5
}
, bar: {
type: 'array'
, items: { type: 'integer' }
, minItems: 3
}
, baz: {
type: 'string',
minLength: 5
}
}
, required: [ 'foo', 'bar', 'baz' ]
};
console.log(empty(schema));
// logs:
// {
// foo: 15,
// bar: [ 0, 0, 0 ],
// baz: ''
// }
Rules
-
string: because it impossible to guess what the string content should be, even when patterns and length limits are given, a string schema always results in the empty string:
''. -
integer:
json-schema-emptytries to satisfy theminimum,maximumandmultipleOfconstraints whenever possible wth the additional property that, when it is possible,0is returned. -
number: just follows the
integerschema. -
object: tries to create a minimal object with as few keys as possible. Only keys that are in the
requiredarray are generated.Object size is ignored completely, for the same reason that the strings are empty: we cannot guess the keys.
-
array: when the
itemtype is given, andminItemsis given, the shortest array that matches this is generated. It also works whenitemsis a tuple.maxItemsis ignored. Whenever possible, the empty array is returned. -
boolean: always results in
false. -
null: always results in
null. -
oneOf, anyOf: selects one of the accepted types and goes from there.
-
allOf:
json-schema-emptymerges all schemas and works from that schema to generate a value. -
enum: selects the first possible value.
-
$ref: just works!
Whenever specified, json-schema-empty uses the default value (even if it
does not match the schema).
License
This code is licensed under the ISC license