readme.md 2.88 KB
Newer Older
Jaap Karan Singh's avatar
Jaap Karan Singh committed
1
jsonschema EXTRAAA!!!      [![NPM version][npm-image]][npm-url]
Jaap Karan Singh's avatar
Jaap Karan Singh committed
2 3
=====================

Jaap Karan Singh's avatar
Jaap Karan Singh committed
4
**Extends jsonschema validator with some common custom types and attributes**
Jaap Karan Singh's avatar
Jaap Karan Singh committed
5 6


7 8 9
Usage
-----

Jaap Karan Singh's avatar
Jaap Karan Singh committed
10 11
### Installation

12
```bash
Jaap Karan Singh's avatar
Jaap Karan Singh committed
13
npm install jsonschema-extra --save
Jaap Karan Singh's avatar
Jaap Karan Singh committed
14 15
```

Jaap Karan Singh's avatar
Jaap Karan Singh committed
16 17
### Example

18
```js
Jaap Karan Singh's avatar
Jaap Karan Singh committed
19 20 21 22 23
var jsonschema = require('jsonschema');
var extend = require('jsonschema-extra');

var validator = new (jsonschema.Validator)();
extend(validator);
24 25 26 27 28 29 30

// regexp
validator.validate(/abc/, { type: 'regexp' });

// error
validator.validate(new Error(), { type: 'error' });

Jaap Karan Singh's avatar
Jaap Karan Singh committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
// mongodb objectid
validator.validate('123456789012345678901234', { type: 'objectId' });
```


### Details

#### Attributes

See `jsonschema` documentation for more detailed documentation on custom attributes.

##### validate

Custom validator when `jsonschema` just isn't what you are after. This one is my absolute favourite! It comes in handy whenever you are trying to do something complex.

> One of the features of jsonschema is that you can share it across client and server which is exactly what I do! However, if your schema contains a validate attribute it will no longer be valid json. This is not a big issue if you are ok for client side code to not contain all your validation logic if schema is sent from the server. 

```js
var schema = {
	validate: function(instance, schema, options) {
		// do your crazy validation here
			// return an error string if not valid
		return 'is not a valid instance';
	}
};
```


#### Types

Supported types:

- error (instanceof Error)
- regexp (instanceof RegExp)
- function (Function - also works for Generator Function)
- generatorFunction (ES6 Generator Function)
- objectId (MongoDb objectId)
- plainObject (calls _.isPlainObject)

```js
validator.validate(new Error(), { type: 'error' });

validator.validate(/regexp/, { type: 'regexp' });

validator.validate(function() {}, { type: 'function' });

validator.validate(function *() {}, { type: 'generatorFunction' });

79
validator.validate('123456789012345678901234', { type: 'objectId' });
Jaap Karan Singh's avatar
Jaap Karan Singh committed
80 81 82
validator.validate(new ObjectID(), { type: 'objectId' });

validator.validate({ a: 'a', b: 'b' }, { type: 'plainObject' });
83 84 85
```


86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
Testing
-------

Install `mocha` globally

```bash
$ npm install mocha -g
```

Run tests

```bash
$ npm test
```


Jaap Karan Singh's avatar
Jaap Karan Singh committed
102 103 104
Changelog
---------

105 106 107 108
### v1.0.2 (30 Sep 2014)
- Fixed so it works on non-Windows systems
- Removed mongodb dev dependency

Jaap Karan Singh's avatar
Jaap Karan Singh committed
109 110 111 112
### v1.0.1 (27 Sep 2014)
- Updated docs
- Updated package.json

Jaap Karan Singh's avatar
Jaap Karan Singh committed
113
### v1.0.0 (27 Sep 2014)
Jaap Karan Singh's avatar
Jaap Karan Singh committed
114
- Changed public API - jsonschema is no longer a dependency. This lets jsonschema to be updated in userland without this module requiring an update.
Jaap Karan Singh's avatar
Jaap Karan Singh committed
115 116
- Name of module changed to jsonschema-extra
- Removed conditionalEnum custom attribute since this has been fixed in the latest versions of jsonschema
Jaap Karan Singh's avatar
Jaap Karan Singh committed
117
- Removed `speed` type
118

Jaap Karan Singh's avatar
Jaap Karan Singh committed
119

Jaap Karan Singh's avatar
Jaap Karan Singh committed
120 121
[npm-image]: https://img.shields.io/npm/v/jsonschema-extra.svg?style=flat-square
[npm-url]: https://npmjs.org/package/jsonschema-extra