UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

78 lines (77 loc) 3.79 kB
"use strict"; 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); }