node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »

grunt-tv4

grunt-tv4

npm version Downloads/month Build Status Dependency Status devDependency Status Code Climate

Use grunt and Tiny Validator tv4 to validate values against json-schema draft v4

Getting Started

This plugin requires Grunt >=0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

$ npm install grunt-tv4 --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-tv4');

The "tv4" task

Notes

API change

As of version v0.2.0 the API was changed to follow the Grunt options- and file-selection conventions. The old pattern (which abused the destination-specifier) is no longer supported. The readme for the previous API can be found here.

The root schema must now to be specified as options.root.

Example

Basic usage

Validate from .json files:

grunt.initConfig({
    tv4: {
        options: {
            root: grunt.file.readJSON('schema/main.json')
        },
        myTarget: {
            src: ['data/*.json']
        }
    }
})

Valdiate values:

grunt.initConfig({
    tv4: {
        myTarget: {
            options: {
                root: {
                    type: 'object',
                    properties: { ... }
                }
            },
            values: [
                { ... },
                { ... }
            ]
        }
    }
})

Advanced usage

grunt.initConfig({
    tv4: {
        options: {
            // specify the main schema, one of: 
            // - path to json 
            // - http-url 
            // - schema object 
            // - callback that returns one of the above 
            root: grunt.file.readJSON('schema/main.json'),
 
            // show multiple errors per file (off by default) 
            multi: true,
 
            // create a new tv4 instance for every target (off by default) 
            fresh: true,
 
            // add schemas in bulk (each required to have an 'id' property) (can be a callback) 
            add: [
                 grunt.file.readJSON('schema/apple.json'),
                 grunt.file.readJSON('schema/pear.json')
            ],
 
            // set schemas by URI (can be a callback) 
            schemas: {
                'http://example.com/schema/apple': grunt.file.readJSON('schema/apple.json'),
                'http://example.com/schema/pear': grunt.file.readJSON('schema/pear.json')
            },
 
            // map of custom formats passed to tv4.addFormat() 
            formats: {
                date: function (data, schema) {
                    if (typeof data !== 'string' || !dateRegex.test(data)) {
                        return 'value must be string of the form: YYYY-MM-DD';
                    }
                    return null;
                }
            },
 
            // passed to tv4.validate() 
            checkRecursive: false,
            // passed to tv4.validate() 
            banUnknownProperties: false,
            // passed tv4.language() 
            language: 'de',
            // passed tv4.addLanguage() 
            languages: {
                'de': { ... }
            }
        },
        // load json from disk 
        myFiles: {
            src: ['data/*.json', 'data/fruit/**/*.json']
        },
 
        myValues: {
            // validate values 
            values: [
                grunt.file.readJSON('data/apple.json'),
                grunt.file.readJSON('data/pear.json')
            ],
        },
 
        myValueMap: {
            // alternately pass as object and the keys will be used as labels in the reports 
            values: {
                'apple': grunt.file.readJSON('data/apple.json'),
                'pear': grunt.file.readJSON('data/pear.json')
            },
        },
 
        myCallback: {
            // alternately pass a function() to return a collection of values (array or object) 
            values: function() {
                return {
                    'apple': grunt.file.readJSON('data/apple.json'),
                    'pear': grunt.file.readJSON('data/pear.json')
                }
            }
        }
    }
})

History

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Bitdeli Badge