@runejs/filestore
Version:
Tools for managing the RuneJS filestore.
75 lines (74 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BinaryStore = void 0;
const common_1 = require("@runejs/common");
const node_fs_1 = require("node:fs");
const filestore_1 = require("../filestore");
/**
* Controls misc binary file storage.
*/
class BinaryStore {
fileStore;
constructor(fileStore) {
this.fileStore = fileStore;
}
/**
* Writes the specified file or all binary files to the disk.
* @param binaryFile [optional] The file to write to disk. Writes all stored binary files to disk if not provided.
*/
async writeToDisk(binaryFile) {
if (!binaryFile) {
// Write all files
const binaryFiles = this.decodeBinaryFileStore();
binaryFiles.forEach(async (file) => this.writeToDisk(file));
}
else {
// Write single file
return new Promise((resolve, reject) => {
try {
const fileName = (0, filestore_1.getFileName)(binaryFile.nameHash).replace(/ /g, '_');
if (!(0, node_fs_1.existsSync)('./unpacked/binary')) {
(0, node_fs_1.mkdirSync)('./unpacked/binary');
}
(0, node_fs_1.writeFileSync)(`./unpacked/binary/${binaryFile.fileId}_${fileName}`, Buffer.from(binaryFile.content));
resolve();
}
catch (error) {
reject(error);
}
});
}
}
/**
* Fetches the specified binary file.
* @param nameOrId The name or ID of the binary file.
* @returns The binary FileData object, or null if the file is not found.
*/
getBinaryFile(nameOrId) {
if (!nameOrId) {
return null;
}
const binaryIndex = this.fileStore.getIndex('binary');
return binaryIndex.getFile(nameOrId) || null;
}
/**
* Decodes all binary files within the binary store.
* @returns The list of decoded files from the binary store.
*/
decodeBinaryFileStore() {
const binaryIndex = this.fileStore.getIndex('binary');
const binaryFileCount = binaryIndex.files.size;
const binaryFiles = new Array(binaryFileCount);
for (let binaryFileId = 0; binaryFileId < binaryFileCount; binaryFileId++) {
const fileData = binaryIndex.getFile(binaryFileId);
if (!fileData) {
binaryFiles[binaryFileId] = null;
common_1.logger.warn(`No file found for binary file ID ${binaryFileId}.`);
continue;
}
binaryFiles[binaryFileId] = fileData;
}
return binaryFiles;
}
}
exports.BinaryStore = BinaryStore;