UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

230 lines (229 loc) 11.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OutputType = exports.TaskType = void 0; const CreatorToolsHost_1 = __importDefault(require("../app/CreatorToolsHost")); const Project_1 = __importStar(require("../app/Project")); const Status_1 = require("../app/Status"); const Log_1 = __importDefault(require("../core/Log")); const LocalEnvironment_1 = require("../local/LocalEnvironment"); const NodeStorage_1 = __importDefault(require("../local/NodeStorage")); const Database_1 = __importDefault(require("../minecraft/Database")); const StorageUtilities_1 = __importDefault(require("../storage/StorageUtilities")); const path = __importStar(require("path")); var TaskType; (function (TaskType) { TaskType[TaskType["noCommand"] = 0] = "noCommand"; TaskType[TaskType["runTests"] = 1] = "runTests"; TaskType[TaskType["exportAddon"] = 2] = "exportAddon"; TaskType[TaskType["exportWorld"] = 3] = "exportWorld"; TaskType[TaskType["ensureRefWorld"] = 4] = "ensureRefWorld"; TaskType[TaskType["deploy"] = 5] = "deploy"; TaskType[TaskType["runDedicatedServer"] = 6] = "runDedicatedServer"; TaskType[TaskType["info"] = 7] = "info"; TaskType[TaskType["add"] = 8] = "add"; TaskType[TaskType["create"] = 9] = "create"; TaskType[TaskType["validate"] = 10] = "validate"; TaskType[TaskType["serve"] = 11] = "serve"; TaskType[TaskType["version"] = 12] = "version"; TaskType[TaskType["passcodes"] = 13] = "passcodes"; TaskType[TaskType["setPasscode"] = 14] = "setPasscode"; TaskType[TaskType["setServerProperties"] = 15] = "setServerProperties"; TaskType[TaskType["minecraftEulaAndPrivacyStatement"] = 16] = "minecraftEulaAndPrivacyStatement"; TaskType[TaskType["deployTestWorld"] = 17] = "deployTestWorld"; TaskType[TaskType["world"] = 18] = "world"; TaskType[TaskType["fix"] = 19] = "fix"; TaskType[TaskType["setProjectProperty"] = 20] = "setProjectProperty"; TaskType[TaskType["autoTest"] = 21] = "autoTest"; TaskType[TaskType["aggregateReports"] = 22] = "aggregateReports"; TaskType[TaskType["docsUpdateFormSource"] = 23] = "docsUpdateFormSource"; TaskType[TaskType["docsGenerateFormJson"] = 24] = "docsGenerateFormJson"; TaskType[TaskType["docsGenerateMarkdown"] = 25] = "docsGenerateMarkdown"; TaskType[TaskType["search"] = 26] = "search"; TaskType[TaskType["docsGenerateTypes"] = 27] = "docsGenerateTypes"; TaskType[TaskType["profileValidation"] = 28] = "profileValidation"; TaskType[TaskType["mcp"] = 29] = "mcp"; TaskType[TaskType["docsUpdateMCCat"] = 30] = "docsUpdateMCCat"; TaskType[TaskType["renderModel"] = 31] = "renderModel"; TaskType[TaskType["renderVanilla"] = 32] = "renderVanilla"; TaskType[TaskType["renderStructure"] = 33] = "renderStructure"; TaskType[TaskType["buildStructure"] = 34] = "buildStructure"; TaskType[TaskType["view"] = 35] = "view"; TaskType[TaskType["edit"] = 36] = "edit"; TaskType[TaskType["docsGenerateJsonSchema"] = 37] = "docsGenerateJsonSchema"; TaskType[TaskType["setup"] = 38] = "setup"; TaskType[TaskType["generateSchemaPackage"] = 39] = "generateSchemaPackage"; })(TaskType || (exports.TaskType = TaskType = {})); var OutputType; (function (OutputType) { OutputType[OutputType["normal"] = 0] = "normal"; OutputType[OutputType["noReports"] = 1] = "noReports"; OutputType[OutputType["json"] = 2] = "json"; })(OutputType || (exports.OutputType = OutputType = {})); class ClUtils { static createProject(creatorTools, startInfo) { const proj = new Project_1.default(creatorTools, startInfo.ctorProjectName, null); if (startInfo.localFilePath) { proj.localFilePath = startInfo.localFilePath; } if (startInfo.localFolderPath) { proj.localFolderPath = startInfo.localFolderPath; } if (startInfo.accessoryFiles) { proj.accessoryFilePaths = startInfo.accessoryFiles; } proj.autoDeploymentMode = Project_1.ProjectAutoDeploymentMode.noAutoDeployment; return proj; } static handleStatusAdded(creatorTools, status) { let message = status.message; if (status.type === Status_1.StatusType.operationStarted) { message = LocalEnvironment_1.OperationColors[(status.operationId ? status.operationId : 0) % LocalEnvironment_1.OperationColors.length] + "[[ START: " + message + LocalEnvironment_1.consoleText_reset; } else if (status.type === Status_1.StatusType.operationEndedComplete) { message = LocalEnvironment_1.OperationColors[(status.operationId ? status.operationId : 0) % LocalEnvironment_1.OperationColors.length] + " " + message + " :END ]]" + LocalEnvironment_1.consoleText_reset; } else if (status.type === Status_1.StatusType.operationEndedErrors) { message = LocalEnvironment_1.OperationColors[(status.operationId ? status.operationId : 0) % LocalEnvironment_1.OperationColors.length] + " " + message + " :END - ERRORS ]]" + LocalEnvironment_1.consoleText_reset; } Log_1.default.verbose(message); } static async localFolderExists(path) { const ls = new NodeStorage_1.default(path, ""); return await ls.rootFolder.exists(); } static async localFileExists(path) { const folderPath = StorageUtilities_1.default.getFolderPath(path); const fileName = StorageUtilities_1.default.getLeafName(path); if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) { throw new Error("Could not process file with path: `" + path + "`"); } const ls = new NodeStorage_1.default(folderPath, ""); const file = ls.rootFolder.ensureFile(fileName); return await file.exists(); } static ensureLocalFolder(path) { const ls = new NodeStorage_1.default(path, ""); return ls.rootFolder; } static getIsWriteCommand(taskType) { return (taskType === TaskType.world || taskType === TaskType.create || taskType === TaskType.add || taskType === TaskType.fix); } /** * Returns true for commands that edit content in place (no separate output folder). * These commands: edit, view, add, create, fix */ static getIsEditInPlaceCommand(taskType) { return (taskType === TaskType.edit || taskType === TaskType.view || taskType === TaskType.add || taskType === TaskType.create || taskType === TaskType.fix); } static async getMainWorkFolder(taskType, inputFolder, outputFolder) { // console.log("Using local path: '" + inputFolder + "' from '" + __dirname + "'"); let workFolder; if (!inputFolder && outputFolder && ClUtils.getIsWriteCommand(taskType)) { // Resolve relative output paths against current working directory const resolvedOutput = path.isAbsolute(outputFolder) ? outputFolder : path.resolve(process.cwd(), outputFolder); const outputStorage = new NodeStorage_1.default(resolvedOutput, ""); workFolder = outputStorage.rootFolder; await workFolder.ensureExists(); } if (!workFolder) { if (!inputFolder) { inputFolder = process.cwd(); } else { // Resolve relative input paths against current working directory inputFolder = path.isAbsolute(inputFolder) ? inputFolder : path.resolve(process.cwd(), inputFolder); } const inputStorage = new NodeStorage_1.default(inputFolder, ""); inputStorage.readOnly = true; workFolder = inputStorage.rootFolder; } const exists = await workFolder.exists(); if (!exists) { // Use a CLI-friendly message — referring to the bundled CLI's own // installation directory ("__dirname") only confuses creators who are // pointing at their own project folder. throw new Error(`Input folder does not exist: '${workFolder.fullPath}'. Use -i <path> to specify the project folder, or run from inside the project.`); } await workFolder.load(); return workFolder; } static getCreatorTools(localEnv, basePath) { CreatorToolsHost_1.default.localFolderExists = ClUtils.localFolderExists; CreatorToolsHost_1.default.localFileExists = ClUtils.localFileExists; CreatorToolsHost_1.default.ensureLocalFolder = ClUtils.ensureLocalFolder; CreatorToolsHost_1.default.prefsStorage = new NodeStorage_1.default(path.join(localEnv.utilities.cliWorkingPath, "prefs") + NodeStorage_1.default.platformFolderDelimiter, ""); CreatorToolsHost_1.default.projectsStorage = new NodeStorage_1.default(path.join(localEnv.utilities.cliWorkingPath, "projects") + NodeStorage_1.default.platformFolderDelimiter, ""); CreatorToolsHost_1.default.packStorage = new NodeStorage_1.default(path.join(localEnv.utilities.cliWorkingPath, "packs") + NodeStorage_1.default.platformFolderDelimiter, ""); CreatorToolsHost_1.default.workingStorage = new NodeStorage_1.default(path.join(localEnv.utilities.cliWorkingPath, "working") + NodeStorage_1.default.platformFolderDelimiter, ""); if (localEnv.utilities && basePath) { localEnv.utilities.basePathAdjust = basePath; } const coreStorage = new NodeStorage_1.default(__dirname + "/../data/content/", ""); Database_1.default.contentFolder = coreStorage.rootFolder; Database_1.default.local = localEnv.utilities; CreatorToolsHost_1.default.init(); const ct = CreatorToolsHost_1.default.getCreatorTools(); if (ct) { ct.local = localEnv.utilities; } return ct; } } exports.default = ClUtils;