Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/romeovs/json-schema-empty
deterministically generate simple data from json schema's
https://github.com/romeovs/json-schema-empty
Last synced: 11 days ago
JSON representation
deterministically generate simple data from json schema's
- Host: GitHub
- URL: https://github.com/romeovs/json-schema-empty
- Owner: romeovs
- License: isc
- Created: 2015-05-03T20:02:03.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-06-23T15:27:52.000Z (over 8 years ago)
- Last Synced: 2024-10-04T13:40:01.415Z (about 2 months ago)
- Language: JavaScript
- Size: 21.5 KB
- Stars: 17
- Watchers: 4
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# json-schema-empty
[![Build Status](https://img.shields.io/travis/romeovs/json-schema-empty.svg?style=flat-square)][travis]
[![Coverage Status](https://img.shields.io/coveralls/romeovs/json-schema-empty.svg?style=flat-square)][coveralls]
[![Dependencies](https://img.shields.io/david/romeovs/json-schema-empty.svg?style=flat-square)][david]
[![devDependencies](https://img.shields.io/david/dev/romeovs/json-schema-empty.svg?style=flat-square)][david-dev]
[![license](https://img.shields.io/badge/license-ISC-373737.svg?style=flat-square)][license]
[![gitter](https://img.shields.io/badge/GITTER-join%20chat%20→-00d86e.svg?style=flat-square)][gitter]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](#rules) section for more info on this).## Usage
To install `json-schema-empty`, run:
```sh
npm install json-schema-empty --save
```The api is simple:
```js
import empty from 'json-schema-empty';
// var empty = require('json-schema-empty').default; // when not using es6var 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-empty` tries to satisfy the `minimum`, `maximum`
and `multipleOf` constraints whenever possible wth the additional property
that, when it is possible, `0` is returned.- **number**: just follows the `integer` schema.
- **object**: tries to create a minimal object with as few keys as possible.
Only keys that are in the `required` array are generated.Object size is ignored completely, for the same reason that the
strings are empty: we cannot guess the keys.- **array**: when the `item` type is given, and `minItems` is given,
the shortest array that matches this is generated. It also works
when `items` is a tuple. `maxItems` is 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-empty` merges 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][license][travis]: https://travis-ci.org/romeovs/json-schema-empty
[coveralls]: https://coveralls.io/r/romeovs/json-schema-empty?branch=master
[david]: https://david-dm.org/romeovs/json-schema-empty
[david-dev]: https://david-dm.org/romeovs/json-schema-empty#info=devDependencies
[license]: ./LICENSE
[gitter]: https://gitter.im/romeovs/json-schema-empty?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge