UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

122 lines (120 loc) 4.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const IField_1 = require("../dataform/IField"); const Database_1 = require("../minecraft/Database"); class JsonSchemaGenerator { static async convertFormDefinitionToJsonSchema(formDef, parentId) { let id = ""; if (parentId) { id = parentId + "/"; } if (formDef.id) { id += formDef.id; } if (id.length === 0) { if (formDef.title) { id = formDef.title; } } const schema = { $schema: "http://json-schema.org/draft-07/schema#", $id: id, title: formDef.title ? formDef.title : formDef.id, description: formDef.description, type: "object", properties: {}, required: [], }; for (const field of formDef.fields) { schema.properties = schema.properties || {}; schema.properties[field.id] = await JsonSchemaGenerator.convertFieldToJsonSchema(field); if (field.isRequired) { schema.required = schema.required || []; schema.required.push(field.id); } } return schema; } static async convertFieldToJsonSchema(field) { let schema = { title: field.title, description: field.description, }; let subForm = field.subForm; if (!subForm && field.subFormId) { subForm = await Database_1.default.ensureFormLoadedByPath(field.subFormId); } switch (field.dataType) { case IField_1.FieldDataType.int: schema.type = "integer"; break; case IField_1.FieldDataType.boolean: schema.type = "boolean"; break; case IField_1.FieldDataType.string: case IField_1.FieldDataType.localizableString: case IField_1.FieldDataType.molang: case IField_1.FieldDataType.minecraftEventTrigger: schema.type = "string"; break; case IField_1.FieldDataType.stringArray: schema.type = "array"; schema.items = { type: "string" }; break; case IField_1.FieldDataType.object: schema.type = "object"; schema.properties = {}; if (field.subForm) { for (const subField of field.subForm?.fields || []) { schema.properties = schema.properties || {}; schema.properties[subField.id] = await JsonSchemaGenerator.convertFieldToJsonSchema(subField); } } break; case IField_1.FieldDataType.objectArray: schema.type = "array"; schema.items = { type: "object", properties: {}, }; for (const subField of field.subForm?.fields || []) { schema.items.properties = schema.items.properties || {}; schema.items.properties[subField.id] = await JsonSchemaGenerator.convertFieldToJsonSchema(subField); } break; case IField_1.FieldDataType.intRange: case IField_1.FieldDataType.point3: schema.type = "array"; schema.items = { type: "number" }; break; case IField_1.FieldDataType.keyedStringCollection: schema.type = "object"; schema.additionalProperties = { type: "string" }; break; case IField_1.FieldDataType.keyedNumberCollection: schema.type = "object"; schema.additionalProperties = { type: "number" }; break; case IField_1.FieldDataType.keyedObjectCollection: schema.type = "object"; schema.additionalProperties = { type: "object" }; break; case IField_1.FieldDataType.float: case IField_1.FieldDataType.number: schema.type = "number"; break; default: schema.type = "string"; break; } if (field.description) { schema.description = field.description; } if (field.choices && field.choices.length > 0) { schema.enum = field.choices.map((choice) => choice.id); } return schema; } } exports.default = JsonSchemaGenerator; //# sourceMappingURL=../maps/docgen/JsonSchemaGenerator.js.map