vtf-js
Version:
A javascript IO library for the Valve Texture Format.
40 lines (39 loc) • 1.58 kB
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { deflate, inflate } from 'node:zlib';
// import { zstdCompress, zstdDecompress, constants } from 'node:zlib';
import { setCompressionMethod } from '../../core/utils.js';
import { VCompressionMethods } from '../../core/enums.js';
function wrap(m) {
return (data, arg) => {
return new Promise((resolve, reject) => {
m(data, arg, (error, result) => {
if (error)
return reject(error);
resolve(new Uint8Array(result.buffer));
});
});
};
}
const inflateNode = wrap(inflate);
const deflateNode = wrap(deflate);
// const zstdDecompressNode = wrap(zstdDecompress);
// const zstdCompressNode = wrap(zstdCompress);
function compressNode(data, method, level) {
switch (method) {
case VCompressionMethods.Deflate:
return deflateNode(data, { level: level });
case VCompressionMethods.ZSTD:
throw Error('vtf-js: Node compression backend does not support ZSTD compression!');
// return zstdCompressNode(data, { params: { [constants.ZSTD_c_compressionLevel]: level } });
}
}
async function decompressNode(data, method, level) {
switch (method) {
case VCompressionMethods.Deflate:
return inflateNode(data, {});
case VCompressionMethods.ZSTD:
throw Error('vtf-js: Node compression backend does not support ZSTD decompression!');
// return zstdDecompressNode(data, {});
}
}
setCompressionMethod(compressNode, decompressNode);