@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
78 lines (77 loc) • 3.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const SemanticVersion_1 = __importDefault(require("../../core/versioning/SemanticVersion"));
const StorageUtilities_1 = __importDefault(require("../../storage/StorageUtilities"));
const ProjectInfoItem_1 = __importDefault(require("../ProjectInfoItem"));
const IInfoItemData_1 = require("../IInfoItemData");
const IProjectItemData_1 = require("../../app/IProjectItemData");
/* Older versions do not require a check */
const MinVersionForCheck = new SemanticVersion_1.default(1, 20, 60);
/* Used to validate that particle identifier correctly contains a namespace. */
const NamespaceRegexPattern = /^\\w{2,}:\\w+/;
var CheckParticleIdentifier;
(function (CheckParticleIdentifier) {
CheckParticleIdentifier[CheckParticleIdentifier["FailedToReadFile"] = 101] = "FailedToReadFile";
CheckParticleIdentifier[CheckParticleIdentifier["FailedToReadVersion"] = 102] = "FailedToReadVersion";
CheckParticleIdentifier[CheckParticleIdentifier["InvalidParticleIdentifier"] = 103] = "InvalidParticleIdentifier";
})(CheckParticleIdentifier || (CheckParticleIdentifier = {}));
/*
* Generator for validating Particle Identifier
*
* Will ensure particle json files have a particle identifier with a namespace if above version 1.2.6.
*
* @see {@link ../../../public/data/forms/mctoolsval/cparti.form.json} for topic definitions
*/
class CheckParticleIdentifierGenerator {
id = "CPARTI";
title = "Particle Identifiers";
canAlwaysProcess = true;
severity = IInfoItemData_1.InfoItemType.error;
async generate(project) {
const results = [];
const particleItems = project.getItemsByType(IProjectItemData_1.ProjectItemType.particleJson);
for (const particleItem of particleItems) {
if (!particleItem.isContentLoaded) {
await particleItem.loadContent();
}
if (particleItem.primaryFile) {
const packResults = await this.getResultsForFile(particleItem.primaryFile, particleItem);
results.push(...packResults);
}
}
return results;
}
async getResultsForFile(file, particleItem) {
const json = await StorageUtilities_1.default.getJsonObject(file);
if (!json) {
const message = `Failed to read file: ${file.name}`;
return [this.createResult(CheckParticleIdentifier.FailedToReadFile, message, particleItem)];
}
const version = SemanticVersion_1.default.parse(json.format_version);
if (!version) {
const message = `'format_version' expected in json in file: ${file.name}`;
return [this.createResult(CheckParticleIdentifier.FailedToReadVersion, message, particleItem)];
}
const checkNeeded = version.compareTo(MinVersionForCheck) >= 0;
if (!checkNeeded) {
return [];
}
const indentifier = json.particle_effect?.description?.identifier;
if (!isValidParticleIdentifier(indentifier)) {
const message = "Invalid Particle Identifier. Particle identifier requires a namespace.";
return [this.createResult(CheckParticleIdentifier.InvalidParticleIdentifier, message, particleItem)];
}
return [];
}
createResult(test, message, particleItem) {
return new ProjectInfoItem_1.default(this.severity, this.id, test, message, particleItem);
}
summarize() { }
}
exports.default = CheckParticleIdentifierGenerator;
function isValidParticleIdentifier(identifier) {
return identifier && NamespaceRegexPattern.test(identifier);
}