UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

132 lines (130 loc) 4.73 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); const GitHubFile_1 = require("./GitHubFile"); const GitHubStorage_1 = require("./GitHubStorage"); const StorageUtilities_1 = require("../storage/StorageUtilities"); const FolderBase_1 = require("../storage/FolderBase"); const Log_1 = require("../core/Log"); class GitHubFolder extends FolderBase_1.default { get storage() { return this._storage; } get parentFolder() { return this._parentFolder; } get name() { return this._name; } get fullPath() { let path = this._parentPath; if (!path.endsWith(GitHubStorage_1.default.slashFolderDelimiter)) { path += GitHubStorage_1.default.slashFolderDelimiter; } path += this.name; return path; } constructor(storage, parentFolder, parentPath, folderName) { super(); this._storage = storage; this._parentFolder = parentFolder; this._parentPath = parentPath; this._name = folderName; this.folders = {}; this.files = {}; } async exists() { return true; } async ensureExists() { return true; } async moveTo(newStorageRelativePath) { throw new Error("Not implemented."); } async deleteThisFolder() { throw new Error("Deletion of this folder " + this.fullPath + " is not supported."); } async deleteAllFolderContents() { throw new Error("Deletion of all folder contents at " + this.fullPath + " is not supported."); } ensureFile(name) { const nameCanon = StorageUtilities_1.default.canonicalizeName(name); let candFile = this.files[nameCanon]; if (candFile == null) { candFile = new GitHubFile_1.default(this, name); this.files[nameCanon] = candFile; } return candFile; } ensureFolder(name) { const nameCanon = StorageUtilities_1.default.canonicalizeName(name); let candFolder = this.folders[nameCanon]; if (!candFolder) { candFolder = new GitHubFolder(this._storage, this, this.fullPath, name); this.folders[nameCanon] = candFolder; } return candFolder; } async deleteFile(name) { throw new Error("Deletion of files not supported"); } async createFile(name) { throw new Error("Creation of files not supported"); } async load(force) { if (this.lastLoadedOrSaved != null && !force) { return this.lastLoadedOrSaved; } const repos = this.storage.manager.octokit.rest.repos; let pathMinusSlash = this.fullPath; if (pathMinusSlash === "/") { pathMinusSlash = ""; } else if (!pathMinusSlash.startsWith("/")) { pathMinusSlash = "/" + pathMinusSlash; } if (pathMinusSlash.endsWith("/")) { pathMinusSlash = pathMinusSlash.substring(0, pathMinusSlash.length - 1); } // Log.debug("Loading GH folder from '" + pathMinusSlash + "'"); const options = { owner: this.storage.ownerName, repo: this.storage.repoName, path: pathMinusSlash, }; let contentListing = undefined; try { contentListing = await repos.getContent(options); } catch (e) { Log_1.default.debug("Error retrieving repo information: " + this.storage.ownerName + " " + this.storage.repoName + " " + e); } if (contentListing === undefined) { Log_1.default.debug("No data retrieved from repo: " + this.storage.ownerName + " " + this.storage.repoName); this.updateLastLoadedOrSaved(); return this.lastLoadedOrSaved; } const response = contentListing; const fileObjects = response.data; // Log.debug("Retrieved '" + fileObjects.length + "' GitHub objects."); for (const i in fileObjects) { const fso = fileObjects[i]; if (fso.type === "dir") { const childFolder = this.ensureFolder(fso.name); childFolder.sha = fso.sha; } else if (fso.type === "file") { if (StorageUtilities_1.default.isUsableFile(fso.name)) { const childFile = this.ensureFile(fso.name); childFile.sha = fso.sha; } } } this.updateLastLoadedOrSaved(); return this.lastLoadedOrSaved; } } exports.default = GitHubFolder; //# sourceMappingURL=../maps/github/GitHubFolder.js.map