@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
172 lines (170 loc) • 6.35 kB
JavaScript
"use strict";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _FileBase_fileContainerStorage;
Object.defineProperty(exports, "__esModule", { value: true });
const StorageUtilities_1 = require("./StorageUtilities");
const js_md5_1 = require("js-md5");
const Log_1 = require("../core/Log");
class FileBase {
get fileContainerStorage() {
return __classPrivateFieldGet(this, _FileBase_fileContainerStorage, "f");
}
set fileContainerStorage(newStorage) {
__classPrivateFieldSet(this, _FileBase_fileContainerStorage, newStorage, "f");
}
get isString() {
return this._content !== null && typeof this._content === "string";
}
get isBinary() {
if (this._content === undefined) {
return false;
}
if (this._content instanceof Uint8Array) {
return true;
}
return false;
}
get content() {
return this._content;
}
get latestModified() {
if (this.modified == null) {
return this.modifiedAtLoad;
}
if (this.modifiedAtLoad == null) {
return null;
}
if (this.modified.getTime() > this.modifiedAtLoad.getTime()) {
return this.modified;
}
return this.modifiedAtLoad;
}
get type() {
return StorageUtilities_1.default.getTypeFromName(this.name);
}
get needsSave() {
if (this.isDisposed) {
Log_1.default.throwIsDisposed();
}
return this.modified != null && (this.lastLoadedOrSaved == null || this.modified >= this.lastLoadedOrSaved);
}
get fullPath() {
return this.storageRelativePath;
}
get extendedPath() {
let start = "";
if (this.parentFolder.storage.storagePath) {
start = this.parentFolder.storage.storagePath;
}
return start + this.fullPath;
}
get storageRelativePath() {
return this.parentFolder.storageRelativePath + this.name;
}
getRootRelativePath() {
if (this.isDisposed) {
Log_1.default.throwIsDisposed();
}
return this.getFolderRelativePath(this.parentFolder.storage.rootFolder);
}
getFolderRelativePath(toFolder) {
if (this.isDisposed) {
Log_1.default.throwIsDisposed();
}
let result = this.parentFolder.getFolderRelativePath(toFolder);
if (result === undefined) {
return undefined;
}
return result + this.name;
}
get coreContentLength() {
if (!this.content) {
return 0;
}
if (this.isBinary || typeof this.content !== "string") {
return this.content.length;
}
return this.content.replace(/\s/g, "").length;
}
constructor() {
this.isDisposed = false;
_FileBase_fileContainerStorage.set(this, null);
this.modified = null;
this.modifiedAtLoad = null;
this.lastLoadedOrSaved = null;
this._content = null;
}
contentWasModified() {
if (this.isDisposed) {
Log_1.default.throwIsDisposed();
}
this.modified = new Date();
if (this.parentFolder.storage) {
this.parentFolder.storage.notifyFileContentsUpdated(this);
}
}
async getHash() {
await this.loadContent(false);
if (this._content === undefined || this._content === null) {
return undefined;
}
return js_md5_1.default.base64(this._content);
}
unload() {
this._content = null;
this.lastLoadedOrSaved = null;
}
dispose() {
this.manager = undefined;
this._content = null;
this.lastLoadedOrSaved = null;
this.isDisposed = true;
}
async exists() {
if (this.isDisposed) {
Log_1.default.throwIsDisposed();
}
await this.loadContent(false);
return this._content !== null;
}
getRelativePathFor(file) {
if (file.parentFolder.storage !== this.parentFolder.storage) {
return undefined;
}
const foldersByPath = {};
let targetParentFolder = file.parentFolder;
while (targetParentFolder) {
foldersByPath[targetParentFolder.storageRelativePath] = targetParentFolder;
targetParentFolder = targetParentFolder.parentFolder;
}
let myParentFolder = this.parentFolder;
let relativePath = "." + myParentFolder.storage.folderDelimiter;
while (myParentFolder && foldersByPath[myParentFolder.storageRelativePath] === undefined) {
relativePath += ".." + myParentFolder.storage.folderDelimiter;
myParentFolder = myParentFolder.parentFolder;
}
if (!myParentFolder) {
return undefined;
}
const folderRelativePath = file.getFolderRelativePath(myParentFolder);
if (!folderRelativePath) {
return undefined;
}
return relativePath + StorageUtilities_1.default.ensureNotStartsWithDelimiter(folderRelativePath);
}
}
exports.default = FileBase;
_FileBase_fileContainerStorage = new WeakMap();
//# sourceMappingURL=../maps/storage/FileBase.js.map