data-to-jsonschema-to-ts
Version:
Convert plain javascript objects to JSON Schema and TypeScript typings
51 lines • 1.67 kB
JavaScript
import { generateJsonSchemaFromData } from "./json-schema.js";
import * as fs from "fs";
import { createJsonSchemaValidator } from "./validator.js";
import { TEST_DATA } from "./test-data.js";
import { convertJsonSchemaToTs } from "./json-to-ts.js";
const generatedSchema = generateJsonSchemaFromData(TEST_DATA, "TestData", {
additionalProperties: true,
// existingSchema: {
// title: "TestData",
// $schema: "http://json-schema.org/draft-07/schema#",
// type: "object",
// properties: {
// string: { type: "string" },
// number: { type: "number" },
// },
// additionalProperties: false,
// required: ["string", "number"],
// }
});
fs.writeFileSync("schema.json", JSON.stringify(generatedSchema, null, 2));
console.log("--------");
console.log("Write schema.json file " + new Date());
console.log("--------");
const validator = createJsonSchemaValidator(generatedSchema);
const errorsByIndex = new Map();
TEST_DATA.forEach((data, index) => {
const result = validator(data);
if (result.errors) {
errorsByIndex.set(index, result.errors);
}
});
console.log("Validate schema");
if (errorsByIndex.size > 0) {
console.log("Errors:");
console.log(JSON.stringify(Array.from(errorsByIndex.entries()), null, 2));
}
else {
console.log("No errors");
}
console.log("--------");
if (!errorsByIndex.size) {
convertJsonSchemaToTs(generatedSchema, {
additionalProperties: false,
}).then((generatedTs) => {
console.log("TypeScript");
console.log("");
console.log(generatedTs);
});
}
console.log("--------");
//# sourceMappingURL=test.js.map