Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vandium-io/joi-json
Builds Joi schemas from JSON
https://github.com/vandium-io/joi-json
joi joi-schemas validation
Last synced: 3 days ago
JSON representation
Builds Joi schemas from JSON
- Host: GitHub
- URL: https://github.com/vandium-io/joi-json
- Owner: vandium-io
- License: bsd-3-clause
- Created: 2016-06-20T23:13:45.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-01-25T01:04:49.000Z (almost 5 years ago)
- Last Synced: 2024-12-09T18:48:45.066Z (30 days ago)
- Topics: joi, joi-schemas, validation
- Language: JavaScript
- Size: 69.3 KB
- Stars: 26
- Watchers: 4
- Forks: 16
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/vandium-io/joi-json.svg?branch=master)](https://travis-ci.org/vandium-io/joi-json)
[![npm version](https://badge.fury.io/js/joi-json.svg)](https://badge.fury.io/js/joi-json)# Joi-JSON
Creates [Joi](https://github.com/hapijs/joi) based object schemas from JSON.
## Features
* Create Joi schemas from JSON data
* Express simple schemas using a single string
* Lightweight with minimal dependencies
* Compatible with most of the Joi API
* Node.js 10.x compatible for use in AWS Lambda environments
* Supports `@hapi/joi` implementation## Installation
Install via npm.
npm install joi-json --save
**Note**: `@hapi/joi` needs to be installed into your project
## Getting Started
```js
const builder = require( 'joi-json' ).builder();let jsonSchema = {
firstName: 'string:min=1,max=60,required', // string using string-based notation
lastName: { // string using object notation
'@type': 'string',
min: 1,
max: 60,
required: true
},address: { // address is an object (i.e. joi.object() )
street: 'string:min=1,max=80,required',
street2: 'string:min=1,max=80',
city: 'string:min=1,max=40,required',
state: 'string:min=1,max=40,required',
postal: 'string:min=1,max=20,required','@required': true // needs the '@' to indicate that "required" is a property
},// alternative values (i.e. joi.alternatives().try() )
favNumberOrWord: ['string:min=1,max=10',
'number:min=0,max=100'
]
};let schema = builder.build( jsonSchema );
```Which would yield the equivalent to the following `joi` schema:
```js
const joi = require( '@hapi/joi' );
let schema = {
firstName: joi.string().min(1).max(60).trim().required(),
lastName: joi.string().min(1).max(60).trim().required(),
address: Object.keys( {
street: joi.string().min(1).max(80).trim().required(),
street2: joi.string().min(1).max(80).trim(),
city: joi.string().min(1).max(40).trim().required(),
state: joi.string().min(1).max(40).trim().required(),
postal: joi.string().min(1).max(20).trim().required()}).required(),
favNumberOrWord: [
joi.string().min(1).max(10).trim(),
joi.number().min(1).max(100)
]
};
```## Documentation
For information on how to use Joi-JSON, please see our [API documentation](docs)
## Feedback
We'd love to get feedback on how to make this tool better. Feel free to contact us at `[email protected]`
## License
[BSD-3-Clause](https://en.wikipedia.org/wiki/BSD_licenses)