@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
104 lines (103 loc) • 6.22 kB
JavaScript
;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SoundsDefinitionInfoGeneratorTest = void 0;
const ProjectInfoItem_1 = __importDefault(require("../ProjectInfoItem"));
const IInfoItemData_1 = require("../IInfoItemData");
const ProjectInfoUtilities_1 = __importDefault(require("../ProjectInfoUtilities"));
const IProjectItemData_1 = require("../../app/IProjectItemData");
const ISoundDefinitionCatalog_1 = require("../../minecraft/ISoundDefinitionCatalog");
const zod_1 = require("zod");
const StorageUtilities_1 = __importDefault(require("../../storage/StorageUtilities"));
var SoundsDefinitionInfoGeneratorTest;
(function (SoundsDefinitionInfoGeneratorTest) {
SoundsDefinitionInfoGeneratorTest[SoundsDefinitionInfoGeneratorTest["multipleSoundsDefinitionManifests"] = 101] = "multipleSoundsDefinitionManifests";
SoundsDefinitionInfoGeneratorTest[SoundsDefinitionInfoGeneratorTest["invalidSoundsDefinitionManifest"] = 102] = "invalidSoundsDefinitionManifest";
SoundsDefinitionInfoGeneratorTest[SoundsDefinitionInfoGeneratorTest["soundsDefinitionManifestInvalidJson"] = 103] = "soundsDefinitionManifestInvalidJson";
SoundsDefinitionInfoGeneratorTest[SoundsDefinitionInfoGeneratorTest["foundALooseSoundDefinition"] = 104] = "foundALooseSoundDefinition";
})(SoundsDefinitionInfoGeneratorTest || (exports.SoundsDefinitionInfoGeneratorTest = SoundsDefinitionInfoGeneratorTest = {}));
/***********
* Generator for validating Sounds Definition Manifest Files
*
* Will ensure:
* * only one Sounds Definition Manifest exists
* * Sounds Definition Manifest is valid JSON
* * Sounds Definition Manifest is formatted correctly
*
* @see {@link ../../../public/data/forms/mctoolsval/sndsdef.form.json} for topic definitions
*/
class SoundsDefinitionInfoGenerator {
id = "SNDSDEF";
title = "Sound Definitions";
summarize(info, infoSet) {
info.multipleSoundsManifests = infoSet.getSummedDataValue(this.id, SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests);
info.soundsDefinitionManifestFormatIsValid = infoSet.getSummedDataValue(this.id, SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest);
info.soundsDefinitionManifestIsNotValidJson = infoSet.getSummedDataValue(this.id, SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson);
}
async generate(project) {
const items = [];
const projItems = project.getItemsCopy();
const packsWithSoundManifests = {};
for (const item of projItems) {
if (item.itemType !== IProjectItemData_1.ProjectItemType.soundDefinitionCatalog && item.itemType) {
continue;
}
const pack = await item.getPack();
if (!pack || !pack.projectItem.projectPath) {
items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition, ProjectInfoUtilities_1.default.getTitleFromEnum(SoundsDefinitionInfoGeneratorTest, SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition), item));
continue;
}
if (packsWithSoundManifests[pack.projectItem.projectPath]) {
items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests, ProjectInfoUtilities_1.default.getTitleFromEnum(SoundsDefinitionInfoGeneratorTest, SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests), item));
continue;
}
else {
packsWithSoundManifests[pack.projectItem.projectPath] = true;
}
if (!item.isContentLoaded) {
await item.loadContent();
}
if (!item.primaryFile) {
continue;
}
if (!item.primaryFile.isContentLoaded) {
await item.primaryFile.loadContent();
}
const content = item.primaryFile.content;
if (!content || typeof content !== "string") {
continue;
}
const parsedContent = StorageUtilities_1.default.getJsonObject(item.primaryFile);
if (!parsedContent) {
items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson, ProjectInfoUtilities_1.default.getTitleFromEnum(SoundsDefinitionInfoGeneratorTest, SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson), item));
continue;
}
items.push(...this.getIsManifestValidResult(parsedContent));
}
return items;
}
// Uses a union to check for both possible versions of a Sound Manifest (per comment in ISoundDefinitionCatalog)
getIsManifestValidResult(fileContent) {
const results = [];
const parseResult = ISoundDefinitionCatalog_1.SoundDefinitionCatalogSchema.safeParse(fileContent);
if (!parseResult.success) {
const parsedErrors = [];
for (const issue of parseResult.error.issues) {
if (issue.code === zod_1.ZodIssueCode.invalid_union) {
for (const e of issue.unionErrors) {
for (const i of e.issues) {
parsedErrors.push(`${i.message} at ${i.path.join("/")}`);
}
}
}
}
results.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest, `${ProjectInfoUtilities_1.default.getTitleFromEnum(SoundsDefinitionInfoGeneratorTest, SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest)}: ${parsedErrors.join(", ")}`));
}
return results;
}
}
exports.default = SoundsDefinitionInfoGenerator;