@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
73 lines (69 loc) • 3.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const IProjectItemData_1 = require("../../app/IProjectItemData");
const StorageUtilities_1 = __importDefault(require("../../storage/StorageUtilities"));
const TestDefinition_1 = require("../tests/TestDefinition");
const LocalizationCatalog_1 = require("../../app/localization/LocalizationCatalog");
const Tests = {
MissingLanguagesJson: { id: 101, title: "languages.json Not Found" },
PrimaryLangMissing: { id: 102, title: "en_US lang code is required." },
FailedToParseFile: { id: 103, title: "Failed To Parse File" },
LangFileMissing: {
id: 104,
title: "Lang File Missing",
defaultMessage: "All entries in languages.json must have corresponding .lang file.",
},
ExtraLangFile: {
id: 105,
title: "Lang File Without Catalog Entry",
defaultMessage: ".lang file exists in pack but its lang code is not referenced in languages.json",
},
};
/*
Checks languages.json and the various .lang files in a pack to ensure that they match
For each language in languages.json there should be a corresponding .lang file,
and each .lang file should have a corresponding entry in languages.json
There should always be en_US
@see {@link ../../../public/data/forms/mctoolsval/langfiles.form.json} for topic definitions
*/
class CheckLangFilesGenerator {
id = "LANGFILES";
title = "Language Files";
canAlwaysProcess = true;
async generate(project) {
const results = await Promise.all(project.packs.map((pack) => this.validatePack(pack)));
return results.flat();
}
async validatePack(pack) {
const items = pack.getPackItems();
const catalogItem = items.find((item) => item.itemType === IProjectItemData_1.ProjectItemType.languagesCatalogJson);
const langItems = items.filter((item) => item.itemType === IProjectItemData_1.ProjectItemType.lang);
if (!catalogItem) {
return [(0, TestDefinition_1.resultFromTest)(Tests.MissingLanguagesJson, { id: this.id })];
}
const [catalog, parseErrors] = await (0, LocalizationCatalog_1.parseLocalizationCatalogFromItem)(catalogItem);
if (parseErrors) {
return parseErrors
.map((error) => ({ id: this.id, message: error.message, item: catalogItem }))
.map((data) => (0, TestDefinition_1.resultFromTest)(Tests.FailedToParseFile, data));
}
if (!catalog.langs.find((lang) => lang === "en_US")) {
return [(0, TestDefinition_1.resultFromTest)(Tests.PrimaryLangMissing, { id: this.id, item: catalogItem })];
}
const allLangItems = langItems.map((item) => [item, StorageUtilities_1.default.getBaseFromName(item.name)]);
const knownLangFileLangs = new Set(allLangItems.map(([, lang]) => lang));
const knownCatalogLangs = new Set(catalog.langs);
const langFileNotInCatalogResults = allLangItems
.filter(([, lang]) => !knownCatalogLangs.has(lang))
.map(([item]) => (0, TestDefinition_1.resultFromTest)(Tests.ExtraLangFile, { id: this.id, item }));
const catalogLangNotInFile = catalog.langs
.filter((lang) => !knownLangFileLangs.has(lang))
.map((lang) => (0, TestDefinition_1.resultFromTest)(Tests.LangFileMissing, { id: this.id, data: lang, item: catalogItem }));
return [...langFileNotInCatalogResults, ...catalogLangNotInFile];
}
summarize() { }
}
exports.default = CheckLangFilesGenerator;