@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
42 lines (41 loc) • 5.33 kB
JavaScript
import { PacketCompressionAlgorithm } from "./packet/NetworkSettingsPacket.es.js";
import { inflateRaw, inflateRawSync } from "zlib";
import { promisify } from "node:util";
//#region src/network/CompressionProvider.ts
var asyncInflate = promisify(inflateRaw);
/**
* A provider for decompressing packets.
*/
var CompressionProvider = class {
/**
* 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}`);
}
}
};
//#endregion
export { CompressionProvider };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcHJlc3Npb25Qcm92aWRlci5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9Db21wcmVzc2lvblByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5cbmltcG9ydCB7IGluZmxhdGVSYXcsIGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnemxpYic7XG5pbXBvcnQgeyBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobSB9IGZyb20gJy4vcGFja2V0L05ldHdvcmtTZXR0aW5nc1BhY2tldC5qcyc7XG5cbmNvbnN0IGFzeW5jSW5mbGF0ZSA9IHByb21pc2lmeShpbmZsYXRlUmF3KTtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIGZvciBkZWNvbXByZXNzaW5nIHBhY2tldHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wcmVzc2lvblByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgY29tcHJlc3Npb24gcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobX0gYWxnb3JpdGhtIC0gVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWNvbXByZXNzIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWxnb3JpdGhtKGFsZ29yaXRobTogUGFja2V0Q29tcHJlc3Npb25BbGdvcml0aG0pOiAoYnVmZmVyOiBCdWZmZXIpID0+IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLlpMSUI6XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBabGliQ29tcHJlc3Npb25Qcm92aWRlcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0luZmxhdGU7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLk5PTkU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChidWZmZXI6IEJ1ZmZlcikgPT4gYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5TTkFQUFk6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwcHkgY29tcHJlc3Npb24gaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAke2FsZ29yaXRobX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wcmVzc2lvbiBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIEB0b2RvIE1vdmUgdG8gZnVsbCBhc3luYy4uLiBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kLi4uXG4gICAgICogQHBhcmFtIHtQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobX0gYWxnb3JpdGhtIC0gVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWNvbXByZXNzIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWxnb3JpdGhtU3luYyhhbGdvcml0aG06IFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtKTogKGJ1ZmZlcjogQnVmZmVyKSA9PiBCdWZmZXIge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobSkge1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5aTElCOlxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBuZXcgWmxpYkNvbXByZXNzaW9uUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5mbGF0ZVJhd1N5bmM7XG4gICAgICAgICAgICBjYXNlIFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtLk5PTkU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChidWZmZXI6IEJ1ZmZlcikgPT4gYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5TTkFQUFk6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwcHkgY29tcHJlc3Npb24gaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAke2FsZ29yaXRobX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLElBQU0sZUFBZSxVQUFVLFVBQVU7Ozs7QUFLekMsSUFBYSxzQkFBYixNQUFpQzs7Ozs7O0NBTTdCLE9BQWMsY0FBYyxXQUE0RTtFQUNwRyxRQUFRLFdBQVI7R0FDSSxLQUFLLDJCQUEyQixNQUU1QixPQUFPO0dBQ1gsS0FBSywyQkFBMkIsTUFDNUIsT0FBTyxPQUFPLFdBQW1CO0dBQ3JDLEtBQUssMkJBQTJCLFFBQzVCLE1BQU0sSUFBSSxNQUFNLHVDQUF1QztHQUMzRCxTQUNJLE1BQU0sSUFBSSxNQUFNLHNDQUFzQyxXQUFXO0VBQ3pFO0NBQ0o7Ozs7Ozs7O0NBU0EsT0FBYyxrQkFBa0IsV0FBbUU7RUFDL0YsUUFBUSxXQUFSO0dBQ0ksS0FBSywyQkFBMkIsTUFFNUIsT0FBTztHQUNYLEtBQUssMkJBQTJCLE1BQzVCLFFBQVEsV0FBbUI7R0FDL0IsS0FBSywyQkFBMkIsUUFDNUIsTUFBTSxJQUFJLE1BQU0sdUNBQXVDO0dBQzNELFNBQ0ksTUFBTSxJQUFJLE1BQU0sc0NBQXNDLFdBQVc7RUFDekU7Q0FDSjtBQUNKIn0=