@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
47 lines (44 loc) • 5.79 kB
JavaScript
import { promisify } from 'node:util';
import { inflateRaw, inflateRawSync } from 'zlib';
import { PacketCompressionAlgorithm } from './packet/NetworkSettingsPacket.es.js';
const asyncInflate = promisify(inflateRaw);
class CompressionProvider {
/**
* Create a new compression provider.
* @param {PacketCompressionAlgorithm} algorithm - The compression algorithm to use.
* @returns {Function} A function that will decompress the buffer.
*/
static fromAlgorithm(algorithm) {
switch (algorithm) {
case PacketCompressionAlgorithm.ZLIB:
return asyncInflate;
case PacketCompressionAlgorithm.NONE:
return async (buffer) => buffer;
case PacketCompressionAlgorithm.SNAPPY:
throw new Error("Snappy compression is not implemented");
default:
throw new Error(`Unsupported compression algorithm: ${algorithm}`);
}
}
/**
* Create a new compression provider.
*
* @todo Move to full async... and remove this method...
* @param {PacketCompressionAlgorithm} algorithm - The compression algorithm to use.
* @returns {Function} A function that will decompress the buffer.
*/
static fromAlgorithmSync(algorithm) {
switch (algorithm) {
case PacketCompressionAlgorithm.ZLIB:
return inflateRawSync;
case PacketCompressionAlgorithm.NONE:
return (buffer) => buffer;
case PacketCompressionAlgorithm.SNAPPY:
throw new Error("Snappy compression is not implemented");
default:
throw new Error(`Unsupported compression algorithm: ${algorithm}`);
}
}
}
export { CompressionProvider };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcHJlc3Npb25Qcm92aWRlci5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldHdvcmsvQ29tcHJlc3Npb25Qcm92aWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQgeyBpbmZsYXRlUmF3LCBpbmZsYXRlUmF3U3luYyB9IGZyb20gJ3psaWInO1xuaW1wb3J0IHsgUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0gfSBmcm9tICcuL3BhY2tldC9OZXR3b3JrU2V0dGluZ3NQYWNrZXQuanMnO1xuXG5jb25zdCBhc3luY0luZmxhdGUgPSBwcm9taXNpZnkoaW5mbGF0ZVJhdyk7XG5cbi8qKlxuICogQSBwcm92aWRlciBmb3IgZGVjb21wcmVzc2luZyBwYWNrZXRzLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcHJlc3Npb25Qcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGNvbXByZXNzaW9uIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7UGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG19IGFsZ29yaXRobSAtIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgZGVjb21wcmVzcyB0aGUgYnVmZmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFsZ29yaXRobShhbGdvcml0aG06IFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtKTogKGJ1ZmZlcjogQnVmZmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobSkge1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5aTElCOlxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBuZXcgWmxpYkNvbXByZXNzaW9uUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNJbmZsYXRlO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5OT05FOlxuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYyAoYnVmZmVyOiBCdWZmZXIpID0+IGJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0uU05BUFBZOlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU25hcHB5IGNvbXByZXNzaW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbXByZXNzaW9uIGFsZ29yaXRobTogJHthbGdvcml0aG19YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgY29tcHJlc3Npb24gcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAdG9kbyBNb3ZlIHRvIGZ1bGwgYXN5bmMuLi4gYW5kIHJlbW92ZSB0aGlzIG1ldGhvZC4uLlxuICAgICAqIEBwYXJhbSB7UGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG19IGFsZ29yaXRobSAtIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgZGVjb21wcmVzcyB0aGUgYnVmZmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFsZ29yaXRobVN5bmMoYWxnb3JpdGhtOiBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobSk6IChidWZmZXI6IEJ1ZmZlcikgPT4gQnVmZmVyIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGNhc2UgUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0uWkxJQjpcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gbmV3IFpsaWJDb21wcmVzc2lvblByb3ZpZGVyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5OT05FOlxuICAgICAgICAgICAgICAgIHJldHVybiAoYnVmZmVyOiBCdWZmZXIpID0+IGJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0uU05BUFBZOlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU25hcHB5IGNvbXByZXNzaW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbXByZXNzaW9uIGFsZ29yaXRobTogJHthbGdvcml0aG19YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLE1BQU0sWUFBQSxHQUFlLFVBQVUsVUFBVSxDQUFBO0FBS2xDLE1BQU0sbUJBQW9CLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0IsT0FBYyxjQUFjLFNBQTRFLEVBQUE7QUFDcEcsSUFBQSxRQUFRLFNBQVc7QUFBQSxNQUNmLEtBQUssMEJBQTJCLENBQUEsSUFBQTtBQUU1QixRQUFPLE9BQUEsWUFBQTtBQUFBLE1BQ1gsS0FBSywwQkFBMkIsQ0FBQSxJQUFBO0FBQzVCLFFBQUEsT0FBTyxPQUFPLE1BQW1CLEtBQUEsTUFBQTtBQUFBLE1BQ3JDLEtBQUssMEJBQTJCLENBQUEsTUFBQTtBQUM1QixRQUFNLE1BQUEsSUFBSSxNQUFNLHVDQUF1QyxDQUFBO0FBQUEsTUFDM0Q7QUFDSSxRQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBc0MsbUNBQUEsRUFBQSxTQUFTLENBQUUsQ0FBQSxDQUFBO0FBQUE7QUFDekU7QUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsT0FBYyxrQkFBa0IsU0FBbUUsRUFBQTtBQUMvRixJQUFBLFFBQVEsU0FBVztBQUFBLE1BQ2YsS0FBSywwQkFBMkIsQ0FBQSxJQUFBO0FBRTVCLFFBQU8sT0FBQSxjQUFBO0FBQUEsTUFDWCxLQUFLLDBCQUEyQixDQUFBLElBQUE7QUFDNUIsUUFBQSxPQUFPLENBQUMsTUFBbUIsS0FBQSxNQUFBO0FBQUEsTUFDL0IsS0FBSywwQkFBMkIsQ0FBQSxNQUFBO0FBQzVCLFFBQU0sTUFBQSxJQUFJLE1BQU0sdUNBQXVDLENBQUE7QUFBQSxNQUMzRDtBQUNJLFFBQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFzQyxtQ0FBQSxFQUFBLFNBQVMsQ0FBRSxDQUFBLENBQUE7QUFBQTtBQUN6RTtBQUVSOzs7OyJ9