json-schema-everywhere/pajv

View on GitHub
commands/ajv.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

var Ajv = require('ajv');
var options = require('./options');
var util = require('./util');
var path = require('path');


module.exports = function (argv) {
    var opts = options.get(argv);
    if (argv.o) opts.sourceCode = true;
    var ajv = new Ajv(opts);
    var invalid;
    ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json'));
    addSchemas(argv.m, 'addMetaSchema', 'meta-schema');
    addSchemas(argv.r, 'addSchema', 'schema');
    customFormatsKeywords(argv.c);
    if (invalid) process.exit(1);
    return ajv;

    function addSchemas(args, method, fileType) {
        if (!args) return;
        var files = util.getFiles(args);
        files.forEach(function (file) {
            var schema = util.openFile(file, fileType);
            try { ajv[method](schema); }
            catch (err) {
                console.error(fileType, file, 'is invalid');
                console.error('error:', err.message);
                invalid = true;
            }
        });
    }

    function customFormatsKeywords(args) {
        if (!args) return;
        var files = util.getFiles(args);
        files.forEach(function (file) {
            if (file[0] == '.') file = path.resolve(process.cwd(), file);
            try {
                require(file)(ajv);
            } catch (err) {
                console.error('module', file, 'is invalid; it should export function');
                console.error('error:', err.message);
                invalid = true;
            }
        });
    }
};