UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

42 lines (41 loc) 5.33 kB
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=