UNPKG

ajv-cli

Version:

Command line interface for Ajv JSON schema validator

65 lines 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const util_1 = require("./util"); const ajv_1 = require("./ajv"); const fs = require("fs"); const migrate = require("json-schema-migrate"); const jsonPatch = require("fast-json-patch"); const cmd = { execute, schema: { type: "object", required: ["s"], properties: { s: { $ref: "#/$defs/stringOrArray" }, o: { type: "string" }, indent: { type: "integer", minimum: 1 }, "validate-schema": { type: "boolean" }, spec: { enum: ["draft7", "draft2019", "draft2020"] }, }, }, }; exports.default = cmd; function execute(argv) { const schemaFiles = util_1.getFiles(argv.s); if (argv.o && schemaFiles.length > 1) { console.error("multiple schemas cannot be migrated to a named output file"); return false; } return schemaFiles.map(migrateSchema).every((x) => x); function migrateSchema(file) { const sch = util_1.openFile(file, `schema ${file}`); const migratedSchema = JSON.parse(JSON.stringify(sch)); const spec = (argv.spec || "draft7"); migrate[spec](migratedSchema); if (argv["validate-schema"] !== false) { const ajv = ajv_1.default(argv); const valid = ajv.validateSchema(migratedSchema); if (!valid) { console.error(`schema ${file} is invalid after migration`); console.error("error:", migrate.getAjv().errorsText(ajv.errors)); return false; } } const patch = jsonPatch.compare(sch, migratedSchema); if (patch.length > 0) { if (argv.o) { saveSchema(argv.o, migratedSchema); } else { const backupFile = file + ".bak"; fs.writeFileSync(backupFile, fs.readFileSync(file, "utf8")); saveSchema(file, migratedSchema); } } else { console.log(`no changes in ${file}`); } return true; } function saveSchema(file, sch) { fs.writeFileSync(file, JSON.stringify(sch, null, argv.indent || 2)); console.log(`saved migrated schema to ${file}`); } } //# sourceMappingURL=migrate.js.map