UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

229 lines (227 loc) 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MarkdownTop = void 0; const Utilities_1 = require("../core/Utilities"); const StorageUtilities_1 = require("../storage/StorageUtilities"); const EntityTypeDefinition_1 = require("../minecraft/EntityTypeDefinition"); const DataFormUtilities_1 = require("../dataform/DataFormUtilities"); const LegacyDocumentationDefinition_1 = require("../minecraft/docs/LegacyDocumentationDefinition"); const Log_1 = require("../core/Log"); exports.MarkdownTop = `--- author: mammerla ms.author: mikeam title: "{0}" description: "{1}" ms.service: minecraft-bedrock-edition ms.date: 02/11/2025 --- `; class DocJsonMarkdownDocumentationGenerator { async generateMarkdown(formJsonInputFolder, outputFolder) { const formsByPath = {}; await this.loadFormJsonFromFolder(formsByPath, formJsonInputFolder, outputFolder); this.exportMarkdownAggregatedPage(formsByPath, outputFolder, "/AnimationsReference/Examples/AnimationController.md", "animations", ["/Animation Controllers/"], "Animation Controllers", "Animation Controllers"); this.exportMarkdownAggregatedPage(formsByPath, outputFolder, "/AnimationsReference/generated/AnimationGettingStarted.md", "animations", [ "/Overview/", "/Names/", "/Getting Started/Adding Animations/", "/Getting Started/Animation Hierarchy/", "/Key Frames/", "/Transforms/", ], "Animation Getting Started", "Animation Getting Started"); this.exportMarkdownAggregatedPage(formsByPath, outputFolder, "/AnimationsReference/generated/AnimationRenderController.md", "animations", ["/Render Controllers/"], "Animation and Render Controllers", "Animation and Render Controllers"); this.exportMarkdownAggregatedPage(formsByPath, outputFolder, "/AnimationsReference/Examples/AnimationUpgrading.md", "animations", [ "/Getting Started/Upgrade from v1.7 Beta to v1.8/", "/Getting Started/Upgrade from v1.8 Beta to v1.10/", "/Getting Started/Upgrade from v1.10 to v1.17.30/", "/Getting Started/Upgrade from v1.17.30 to v1.18.10/", "/Getting Started/Upgrade from v1.18.10 to v1.18.20/", ], "Animation Controllers", "Animation Controllers"); } getFileNameFromBaseName(baseName) { let fileName = baseName; if (fileName.startsWith("minecraft_on_")) { fileName = "minecraftTrigger_" + baseName.substring(10); } else if (fileName.startsWith("minecraft_")) { fileName = "minecraftComponent_" + baseName.substring(10); } return fileName; } async exportMarkdownAggregatedPage(formsByPath, outputFolder, filePath, docCatalogName, docNodePaths, category, categoryExtended) { const targetFile = await outputFolder.ensureFileFromRelativePath(filePath); if (!targetFile) { return; } const docLines = []; docLines.push(Utilities_1.default.stringFormat(exports.MarkdownTop, category + " Documentation - " + category, "A reference document describing all current " + category)); docLines.push("# " + category + "\r\n"); for (const docNodePath of docNodePaths) { const docNode = await LegacyDocumentationDefinition_1.default.loadNode(docCatalogName, docNodePath, true); if (docNode) { if (docNode.nodes) { docLines.push("## " + docNode.name); for (const childNode of docNode.nodes) { if (childNode.description) { docLines.push(""); docLines.push(...childNode.description); } if (childNode.examples) { for (const example of childNode.examples) { if (example.name && example.text) { docLines.push("\r\n### " + example.name); docLines.push(...example.text); } } } } } } else { Log_1.default.debugAlert("Could not find '" + docNodePath + "'"); } } targetFile.setContent(docLines.join("\r\n")); await targetFile.saveContent(); } appendForm(form, content) { if (form.description) { let descrip = form.description.trim(); if (descrip.length > 10 && !descrip.endsWith(".")) { descrip += "."; } content.push(descrip + "\r\n"); } const subContent = []; content.push("\r\n## Properties\r\n"); content.push("|Name |Default Value |Type |Description |Example Values |"); content.push("|:----------|:-------------|:----|:-----------|:------------- |"); form.fields.sort((a, b) => { return a.id.localeCompare(b.id); }); for (const field of form.fields) { let fieldRow = "| " + field.id + " | "; if (field.defaultValue !== undefined) { fieldRow += field.defaultValue; } else { fieldRow += "*not set*"; } fieldRow += " | " + DataFormUtilities_1.default.getFieldTypeDescription(field.dataType) + " | "; if (field.description) { fieldRow += field.description; } fieldRow += " | "; if (field.subForm && field.subForm.fields.length > 0) { subContent.push("\r\n### Sub item: " + field.id + "\r\n"); this.appendForm(field.subForm, subContent); } if (field.samples) { let samplesAdded = 0; const samplesUsed = []; for (const samplePath in field.samples) { let sampleArr = field.samples[samplePath]; if (sampleArr && samplesAdded < 3) { const sampleSet = {}; for (const sample of sampleArr) { const sampleVal = JSON.stringify(sample.content); if (!samplesUsed.includes(sampleVal)) { samplesUsed.push(sampleVal); const baseName = StorageUtilities_1.default.getBaseFromName(StorageUtilities_1.default.getLeafName(samplePath)); samplesAdded++; const key = baseName.substring(0, 1).toUpperCase() + baseName.substring(1); if (!sampleSet[key]) { sampleSet[key] = "`" + sampleVal + "`"; } else { sampleSet[key] = sampleSet[key] + ", `" + sampleVal + "`"; } } } let exampleAdded = false; for (const key in sampleSet) { if (exampleAdded) { fieldRow += ", "; } fieldRow += Utilities_1.default.humanifyMinecraftName(key) + ": " + sampleSet[key]; exampleAdded = true; } } } } fieldRow += " | "; content.push(fieldRow); } content.push(...subContent); } async saveMarkdownDocFromForm(markdownFile, form, baseName, category, categoryExtended) { const content = []; let canonName = EntityTypeDefinition_1.default.getComponentFromBaseFileName(baseName); content.push(Utilities_1.default.stringFormat(exports.MarkdownTop, category + " Documentation - " + canonName, "Describes the " + canonName + " " + categoryExtended)); content.push("# " + category + " Documentation - " + canonName + "\r\n"); this.appendForm(form, content); if (form.samples) { content.push("\r\n## Samples\r\n"); let samplesAdded = 0; for (const samplePath in form.samples) { let sampleArr = form.samples[samplePath]; if (sampleArr && samplesAdded < 3) { const baseName = StorageUtilities_1.default.getBaseFromName(StorageUtilities_1.default.getLeafName(samplePath)); let targetPath = samplePath; if (targetPath.startsWith("/vanilla")) { targetPath = "https://github.com/Mojang/bedrock-samples/tree/preview" + targetPath.substring(8); } content.push("### [" + baseName.substring(0, 1).toUpperCase() + baseName.substring(1) + "](" + targetPath + ")"); for (const sample of sampleArr) { if (sampleArr.length > 1) { content.push("\r\nAt " + sample.path + ": "); } if (typeof sample.content === "object" || Array.isArray(sample.content)) { content.push("\r\n```json\r\n" + JSON.stringify(sample.content, undefined, 2) + "\r\n```\r\n"); } else { content.push("\r\n`" + sample.content + "`\r\n"); } } } } } markdownFile.setContent(content.join("\r\n")); await markdownFile.saveContent(); } getFormsFromFilter(formsByPath, formsPath) { const filteredList = {}; for (const formPath in formsByPath) { if (formPath.toLowerCase().startsWith(formsPath) && formsByPath[formPath] && (formsPath.indexOf("behavior") >= 0 || formPath.indexOf("behavior") < 0) && (formsPath.indexOf("_on") >= 0 || formPath.indexOf("_on") < 0)) { filteredList[formPath] = formsByPath[formPath]; } } return filteredList; } async loadFormJsonFromFolder(formsByPath, inputFolder, outputFolder) { await inputFolder.load(); const fileList = { files: [], folders: [] }; for (const folderName in inputFolder.folders) { const folder = inputFolder.folders[folderName]; if (folder) { await this.loadFormJsonFromFolder(formsByPath, folder, outputFolder.ensureFolder(folderName)); fileList.folders.push(folderName); } } for (const fileName in inputFolder.files) { const file = inputFolder.files[fileName]; if (file) { await file.loadContent(); const jsonO = StorageUtilities_1.default.getJsonObject(file); if (jsonO) { formsByPath[file.storageRelativePath] = jsonO; } } } } } exports.default = DocJsonMarkdownDocumentationGenerator; //# sourceMappingURL=../maps/docgen/DocJsonMarkdownDocumentationGenerator.js.map