UNPKG

@runejs/filestore

Version:

Tools for managing the RuneJS filestore.

75 lines (74 loc) 2.77 kB
"use strict"; 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;