UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

233 lines (231 loc) 8.18 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); const Log_1 = require("../../core/Log"); const ste_events_1 = require("ste-events"); const DocumentedClass_1 = require("./DocumentedClass"); const Project_1 = require("../../app/Project"); const DocumentedScriptEnum_1 = require("./DocumentedScriptEnum"); class DocumentedModule { get isLoaded() { return this._isLoaded; } get unassociatedInfoJsonFiles() { return this._unassociatedInfoJsonFiles; } get isUnassociatedDocsLoaded() { return this._isUnassociatedDocsLoaded; } get docFolder() { return this._docFolder; } get classes() { return this._docClassesAndInterfaces; } get enums() { return this._docEnums; } get file() { return this._file; } set file(newFile) { this._file = newFile; } get onLoaded() { return this._onLoaded.asEvent(); } get uuid() { if (!this.moduleDefinition) { return undefined; } return this.moduleDefinition.uuid; } get moduleType() { if (!this.moduleDefinition) { return undefined; } return this.moduleDefinition.module_type; } get name() { if (this.moduleDefinition) { return this.moduleDefinition.name; } return this._name; } get version() { if (this.moduleDefinition) { return this.moduleDefinition.version; } return this._version; } get id() { return this._id; } set id(newId) { this._id = newId; if (newId) { const underscore = newId.lastIndexOf("_"); if (underscore >= 0 && underscore < newId.length - 2) { this._name = newId.substring(0, underscore); this._version = newId.substring(underscore + 1); } else { this._name = newId; this._version = ""; } } } constructor(docFolder) { this._isLoaded = false; this._isUnassociatedDocsLoaded = false; this._docClassesAndInterfaces = {}; this._docEnums = {}; this._associatedInfoJsonFiles = {}; this._unassociatedInfoJsonFiles = {}; this._onLoaded = new ste_events_1.EventDispatcher(); this._docFolder = docFolder; } associateParentClasses() { for (const docClassName in this.classes) { const docClass = this.classes[docClassName]; docClass.parentClasses = []; const bts = docClass.docClass.base_types; if (bts) { for (const bt of bts) { const parentC = this.classes[bt.name]; if (parentC) { docClass.parentClasses.push(parentC); } } } } } async loadUnassociatedDocumentation(force) { if (this._isUnassociatedDocsLoaded && !force) { return; } this._associatedInfoJsonFiles = {}; this._unassociatedInfoJsonFiles = {}; for (const dcName in this._docClassesAndInterfaces) { const dc = this._docClassesAndInterfaces[dcName]; for (const memberName in dc.infoJsonFiles) { const infoJson = dc.infoJsonFiles[memberName]; if (infoJson) { this._associatedInfoJsonFiles[infoJson.storageRelativePath] = infoJson; } } } for (const dcName in this._docEnums) { const denum = this._docEnums[dcName]; for (const memberName in denum.infoJsonFiles) { const infoJson = denum.infoJsonFiles[memberName]; if (infoJson) { this._associatedInfoJsonFiles[infoJson.storageRelativePath] = infoJson; } } } await this.loadUnassociatedDocumentationFolder(this.docFolder); this._isUnassociatedDocsLoaded = true; } async loadUnassociatedDocumentationFolder(folder) { await folder.load(); for (const fileName in folder.files) { const file = folder.files[fileName]; if (file && file.name === "info.json" && this._associatedInfoJsonFiles[file.storageRelativePath] === undefined) { this._unassociatedInfoJsonFiles[file.storageRelativePath] = file; } } for (const folderName in folder.folders) { const childFolder = folder.folders[folderName]; if (childFolder) { await this.loadUnassociatedDocumentationFolder(childFolder); } } } static async ensureOnFile(file, docFolder, loadHandler) { if (file.manager === undefined) { const dt = new DocumentedModule(docFolder); dt.file = file; file.manager = dt; } if (file.manager !== undefined && file.manager instanceof DocumentedModule) { const dt = file.manager; if (!dt.isLoaded && loadHandler) { dt.onLoaded.subscribe(loadHandler); } await dt.load(); } } ensureDocFolder(docsFolder) { if (!this.name) { return; } let folderName = this.name; folderName = folderName.toLowerCase(); if (Project_1.remappedMinecraftScriptModules[folderName]) { folderName = Project_1.remappedMinecraftScriptModules[folderName]; } const folders = folderName.split("/"); let curFolder = docsFolder; for (let i = 0; i < folders.length; i++) { curFolder = curFolder.ensureFolder(folders[i]); } return curFolder; } async persist() { if (this._file === undefined) { return; } for (const docClassName in this._docClassesAndInterfaces) { const docClass = this._docClassesAndInterfaces[docClassName]; await docClass.persist(); } for (const docEnumName in this._docEnums) { const docEnum = this._docEnums[docEnumName]; await docEnum.persist(); } } async load() { if (this._file === undefined || this._isLoaded) { return; } await this._file.loadContent(); if (this._file.content === null || this._file.content instanceof Uint8Array) { return; } this.id = this._file.name; try { const data = JSON.parse(this._file.content); this.moduleDefinition = data; } catch (e) { Log_1.default.fail("Could not parse documented module JSON " + e); } this._docClassesAndInterfaces = {}; if (this.moduleDefinition && this.moduleDefinition.classes) { for (const docClass of this.moduleDefinition?.classes) { this._docClassesAndInterfaces[docClass.name] = new DocumentedClass_1.default(this, docClass); } for (const docClass of this.moduleDefinition?.interfaces) { const dc = new DocumentedClass_1.default(this, docClass); dc.isInterface = true; this._docClassesAndInterfaces[docClass.name] = dc; } } if (this.moduleDefinition && this.moduleDefinition.errors) { for (const docError of this.moduleDefinition.errors) { this._docClassesAndInterfaces[docError.name] = new DocumentedClass_1.default(this, docError); } } this._docEnums = {}; if (this.moduleDefinition && this.moduleDefinition.enums) { for (const docEnum of this.moduleDefinition.enums) { this._docEnums[docEnum.name] = new DocumentedScriptEnum_1.default(this, docEnum); } } this._isLoaded = true; } } exports.default = DocumentedModule; //# sourceMappingURL=../../maps/minecraft/docs/DocumentedModule.js.map