ajv-cli
Version:
Command line interface for Ajv JSON schema validator
92 lines • 3.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const ajv_1 = require("ajv");
const _2019_1 = require("ajv/dist/2019");
const _2020_1 = require("ajv/dist/2020");
const jtd_1 = require("ajv/dist/jtd");
const options_1 = require("./options");
const util = require("./util");
const path = require("path");
const draft6metaSchema = require("ajv/lib/refs/json-schema-draft-06.json");
// copied from https://github.com/babel/babel/blob/d8da63c929f2d28c401571e2a43166678c555bc4/packages/babel-helpers/src/helpers.js#L602-L606
/* istanbul ignore next */
const interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj };
const importDefault = (moduleName) => interopRequireDefault(require(moduleName)).default;
const AjvClass = {
jtd: jtd_1.default,
draft7: ajv_1.default,
draft2019: _2019_1.default,
draft2020: _2020_1.default,
};
function default_1(argv) {
const opts = options_1.getOptions(argv);
if (argv.o)
opts.code.source = true;
const Ajv = AjvClass[argv.spec] || ajv_1.default;
const ajv = new Ajv(opts);
let invalid;
if (argv.spec !== "jtd")
ajv.addMetaSchema(draft6metaSchema);
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;
const files = util.getFiles(args);
files.forEach((file) => {
const 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;
const files = util.getFiles(args);
files.forEach((file) => {
if (file[0] === ".")
file = path.resolve(process.cwd(), file);
try {
if (file.endsWith(".ts")) {
requireTypeScriptKeyword(file);
}
else {
require(file)(ajv);
}
}
catch (err) {
console.error(`module ${file} is invalid; it should export function`);
console.error(`error: ${err.message}`);
invalid = true;
}
});
}
function requireTypeScriptKeyword(file) {
let registerer;
try {
registerer = require("ts-node").register();
}
catch (err) {
/* istanbul ignore next */
if (err.code === "MODULE_NOT_FOUND") {
throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${err.message}`);
}
throw err;
}
registerer.enabled(true);
importDefault(file)(ajv);
registerer.enabled(false);
}
}
exports.default = default_1;
//# sourceMappingURL=ajv.js.map
;