@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
51 lines (46 loc) • 6.25 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const node_util = require('node:util');
const Zlib = require('zlib');
const network_packet_NetworkSettingsPacket = require('./packet/NetworkSettingsPacket.cjs.cjs');
const asyncInflate = node_util.promisify(Zlib.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 network_packet_NetworkSettingsPacket.PacketCompressionAlgorithm.ZLIB:
return asyncInflate;
case network_packet_NetworkSettingsPacket.PacketCompressionAlgorithm.NONE:
return async (buffer) => buffer;
case network_packet_NetworkSettingsPacket.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 network_packet_NetworkSettingsPacket.PacketCompressionAlgorithm.ZLIB:
return Zlib.inflateRawSync;
case network_packet_NetworkSettingsPacket.PacketCompressionAlgorithm.NONE:
return (buffer) => buffer;
case network_packet_NetworkSettingsPacket.PacketCompressionAlgorithm.SNAPPY:
throw new Error("Snappy compression is not implemented");
default:
throw new Error(`Unsupported compression algorithm: ${algorithm}`);
}
}
}
exports.CompressionProvider = CompressionProvider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcHJlc3Npb25Qcm92aWRlci5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9Db21wcmVzc2lvblByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5cbmltcG9ydCB7IGluZmxhdGVSYXcsIGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnemxpYic7XG5pbXBvcnQgeyBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobSB9IGZyb20gJy4vcGFja2V0L05ldHdvcmtTZXR0aW5nc1BhY2tldC5qcyc7XG5cbmNvbnN0IGFzeW5jSW5mbGF0ZSA9IHByb21pc2lmeShpbmZsYXRlUmF3KTtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIGZvciBkZWNvbXByZXNzaW5nIHBhY2tldHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wcmVzc2lvblByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgY29tcHJlc3Npb24gcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobX0gYWxnb3JpdGhtIC0gVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWNvbXByZXNzIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWxnb3JpdGhtKGFsZ29yaXRobTogUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0pOiAoYnVmZmVyOiBCdWZmZXIpID0+IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLlpMSUI6XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBabGliQ29tcHJlc3Npb25Qcm92aWRlcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0luZmxhdGU7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLk5PTkU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChidWZmZXI6IEJ1ZmZlcikgPT4gYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5TTkFQUFk6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwcHkgY29tcHJlc3Npb24gaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAke2FsZ29yaXRobX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wcmVzc2lvbiBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIEB0b2RvIE1vdmUgdG8gZnVsbCBhc3luYy4uLiBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kLi4uXG4gICAgICogQHBhcmFtIHtQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobX0gYWxnb3JpdGhtIC0gVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWNvbXByZXNzIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWxnb3JpdGhtU3luYyhhbGdvcml0aG06IFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtKTogKGJ1ZmZlcjogQnVmZmVyKSA9PiBCdWZmZXIge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobSkge1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5aTElCOlxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBuZXcgWmxpYkNvbXByZXNzaW9uUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5mbGF0ZVJhd1N5bmM7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLk5PTkU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChidWZmZXI6IEJ1ZmZlcikgPT4gYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5TTkFQUFk6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwcHkgY29tcHJlc3Npb24gaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAke2FsZ29yaXRobX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJwcm9taXNpZnkiLCJpbmZsYXRlUmF3IiwiUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0iLCJpbmZsYXRlUmF3U3luYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxNQUFNLFlBQUEsR0FBZUEsb0JBQVVDLGVBQVUsQ0FBQTtBQUtsQyxNQUFNLG1CQUFvQixDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTdCLE9BQWMsY0FBYyxTQUE0RSxFQUFBO0FBQ3BHLElBQUEsUUFBUSxTQUFXO0FBQUEsTUFDZixLQUFLQywrREFBMkIsQ0FBQSxJQUFBO0FBRTVCLFFBQU8sT0FBQSxZQUFBO0FBQUEsTUFDWCxLQUFLQSwrREFBMkIsQ0FBQSxJQUFBO0FBQzVCLFFBQUEsT0FBTyxPQUFPLE1BQW1CLEtBQUEsTUFBQTtBQUFBLE1BQ3JDLEtBQUtBLCtEQUEyQixDQUFBLE1BQUE7QUFDNUIsUUFBTSxNQUFBLElBQUksTUFBTSx1Q0FBdUMsQ0FBQTtBQUFBLE1BQzNEO0FBQ0ksUUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQXNDLG1DQUFBLEVBQUEsU0FBUyxDQUFFLENBQUEsQ0FBQTtBQUFBO0FBQ3pFO0FBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE9BQWMsa0JBQWtCLFNBQW1FLEVBQUE7QUFDL0YsSUFBQSxRQUFRLFNBQVc7QUFBQSxNQUNmLEtBQUtBLCtEQUEyQixDQUFBLElBQUE7QUFFNUIsUUFBTyxPQUFBQyxtQkFBQTtBQUFBLE1BQ1gsS0FBS0QsK0RBQTJCLENBQUEsSUFBQTtBQUM1QixRQUFBLE9BQU8sQ0FBQyxNQUFtQixLQUFBLE1BQUE7QUFBQSxNQUMvQixLQUFLQSwrREFBMkIsQ0FBQSxNQUFBO0FBQzVCLFFBQU0sTUFBQSxJQUFJLE1BQU0sdUNBQXVDLENBQUE7QUFBQSxNQUMzRDtBQUNJLFFBQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFzQyxtQ0FBQSxFQUFBLFNBQVMsQ0FBRSxDQUFBLENBQUE7QUFBQTtBQUN6RTtBQUVSOzs7OyJ9