@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
54 lines (53 loc) • 3.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ProjectItemUtilities_1 = require("../../app/ProjectItemUtilities");
const IProjectItemData_1 = require("../../app/IProjectItemData");
const StorageUtilities_1 = __importDefault(require("../../storage/StorageUtilities"));
const TestDefinition_1 = require("../tests/TestDefinition");
const ArrayUtilities_1 = require("../../core/ArrayUtilities");
var CheckBetaTest;
(function (CheckBetaTest) {
CheckBetaTest["UsingBetaFeatures"] = "UsingBetaFeatures";
CheckBetaTest["FailedToParseJson"] = "FailedToParseJson";
CheckBetaTest["FailedToReadFile"] = "FailedToReadFile";
})(CheckBetaTest || (CheckBetaTest = {}));
const CheckBetaTests = {
FailedToReadFile: { id: 101, title: "Failed to read file" },
FailedToParseJson: { id: 102, title: "Failed to parse Json", defaultMessage: "Failed to parse json in file" },
UsingBetaFeatures: { id: 103, title: "Using beta features flag in custom definitions is not allowed" },
};
const JsonTypesToRead = new Set([
IProjectItemData_1.ProjectItemType.behaviorPackManifestJson,
IProjectItemData_1.ProjectItemType.entityTypeBehavior,
IProjectItemData_1.ProjectItemType.blockTypeBehavior,
IProjectItemData_1.ProjectItemType.itemTypeBehavior,
]);
/**
* Validates that beta features flags are not used in custom definitions.
*
* @see {@link ../../../public/data/forms/mctoolsval/cbfg.form.json} for topic definitions
*/
class CheckBetaFeaturesGenerator {
id = "CBFG";
title = "Beta Features";
canAlwaysProcess = true;
async generate(project) {
const items = project.getItemsCopy();
const [readJsonItems, failedItems] = await (0, ProjectItemUtilities_1.tryEnsureFiles)(items, (item) => JsonTypesToRead.has(item.itemType));
const failedReadResults = failedItems.map((item) => (0, TestDefinition_1.resultFromTest)(CheckBetaTests.FailedToReadFile, { id: this.id, item }));
const jsonObjects = await Promise.all(readJsonItems.map(async (item) => [item, item.primaryFile && (await StorageUtilities_1.default.getJsonObject(item.primaryFile))]));
const [parsedJson, failedToParse] = (0, ArrayUtilities_1.filterAndSeparate)(jsonObjects, ([_item, json]) => !!json);
const jsonParseResults = failedToParse
.map(([item]) => ({ id: this.id, item, data: item.primaryFile?.name }))
.map((testData) => (0, TestDefinition_1.resultFromTest)(CheckBetaTests.FailedToParseJson, testData));
const useBetaResults = parsedJson
.filter(([, json]) => json.use_beta_features === true)
.map(([item]) => (0, TestDefinition_1.resultFromTest)(CheckBetaTests.UsingBetaFeatures, { id: this.id, item }));
return [...failedReadResults, ...jsonParseResults, ...useBetaResults];
}
summarize() { }
}
exports.default = CheckBetaFeaturesGenerator;