UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

113 lines (111 loc) 5.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProcessorFixupLevel = void 0; const IField_1 = require("./IField"); var ProcessorFixupLevel; (function (ProcessorFixupLevel) { ProcessorFixupLevel[ProcessorFixupLevel["none"] = 0] = "none"; ProcessorFixupLevel[ProcessorFixupLevel["perField"] = 1] = "perField"; ProcessorFixupLevel[ProcessorFixupLevel["full"] = 9] = "full"; })(ProcessorFixupLevel = exports.ProcessorFixupLevel || (exports.ProcessorFixupLevel = {})); class DataFormProcessor { static async process(obj, form, fixupLevel, path, issues) { if (path === undefined) { path = ""; } else { path += "."; } if (issues === undefined) { issues = []; } for (const key in obj) { const val = obj[key]; let foundField = false; for (const field of form.fields) { if (field.id === key) { foundField = true; if (field.dataType === IField_1.FieldDataType.objectArray && field.subForm) { if (val && Array.isArray(val)) { for (const obj of val) { await DataFormProcessor.process(obj, field.subForm, fixupLevel, path + key, issues); } } } if (field.dataType === IField_1.FieldDataType.keyedObjectCollection && field.subForm) { if (val && typeof val === "object") { for (const subKey in val) { const subObj = val[subKey]; await DataFormProcessor.process(subObj, field.subForm, fixupLevel, path + key + "." + subKey, issues); } } } else if ((field.dataType === IField_1.FieldDataType.object && field.subForm) || field.dataType === IField_1.FieldDataType.minecraftEventTrigger || field.dataType === IField_1.FieldDataType.minecraftFilter) { if (val && typeof val === "object") { let keyCount = 0; for (const key in obj) { if (key) { keyCount++; } } if (keyCount === 0 && (field.undefinedIfEmpty || field.dataType === IField_1.FieldDataType.minecraftEventTrigger || field.dataType === IField_1.FieldDataType.minecraftFilter)) { issues.push({ subject: key, message: "Object is defined but empty; should be undefined.", path: path, }); if (fixupLevel === ProcessorFixupLevel.perField || fixupLevel === ProcessorFixupLevel.full || field.dataType === IField_1.FieldDataType.minecraftEventTrigger || field.dataType === IField_1.FieldDataType.minecraftFilter) { obj[key] = undefined; } } else if (field.dataType === IField_1.FieldDataType.object && field.subForm) { await DataFormProcessor.process(val, field.subForm, fixupLevel, path + key, issues); } } } else if (field.dataType === IField_1.FieldDataType.keyedStringArrayCollection || field.dataType === IField_1.FieldDataType.keyedKeyedStringArrayCollection) { if (val && typeof val === "object") { let keyCount = 0; for (const key in val) { if (key) { keyCount++; } } if (keyCount === 0 && field.undefinedIfEmpty) { issues.push({ subject: key, message: "Object is defined but empty; should be undefined.", path: path, }); if (fixupLevel === ProcessorFixupLevel.perField || fixupLevel === ProcessorFixupLevel.full) { obj[key] = undefined; } } } } } } if (!foundField) { issues.push({ subject: key, message: "Could not find field in data definition.", path: path, }); if (fixupLevel === ProcessorFixupLevel.full) { obj[key] = undefined; } } } } } exports.default = DataFormProcessor; //# sourceMappingURL=../maps/dataform/DataFormProcessor.js.map