ajv-cli
Version:
Command line interface for Ajv JSON schema validator
65 lines • 2.33 kB
JavaScript
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
;