@cspell/cspell-tools
Version:
Tools to assist with the development of cSpell
42 lines • 1.53 kB
JavaScript
import { readFile, writeFile } from 'node:fs/promises';
import { promisify } from 'node:util';
import { gunzip as gunzipCB, gzip as gz, gzipSync } from 'node:zlib';
const gzip = promisify(gz);
const gunzip = promisify(gunzipCB);
export var OSFlags;
(function (OSFlags) {
OSFlags[OSFlags["auto"] = -1] = "auto";
OSFlags[OSFlags["FAT"] = 0] = "FAT";
OSFlags[OSFlags["Unix"] = 3] = "Unix";
OSFlags[OSFlags["HPFS"] = 6] = "HPFS";
OSFlags[OSFlags["MACOS"] = 7] = "MACOS";
OSFlags[OSFlags["NTFS"] = 11] = "NTFS";
})(OSFlags || (OSFlags = {}));
// https://docs.fileformat.com/compression/gz/#:~:text=A%20GZ%20file%20is%20a,compression%20formats%20on%20UNIX%20systems.
const OSSystemIDOffset = 9;
export async function compressFile(file, os) {
if (file.endsWith('.gz'))
return file;
const targetFile = file + '.gz';
const zBuf = await compress(await readFile(file), os);
await writeFile(targetFile, zBuf);
return targetFile;
}
export async function compress(buf, os) {
return fixOSSystemID(await gzip(buf), os);
}
export function compressSync(buf, os) {
return fixOSSystemID(gzipSync(buf), os);
}
function fixOSSystemID(zBuf, os = OSFlags.Unix) {
const osFlag = os == OSFlags.auto ? zBuf[OSSystemIDOffset] : os;
zBuf[OSSystemIDOffset] = osFlag;
return zBuf;
}
export async function decompress(buf, encoding) {
const dBuf = gunzip(buf);
if (!encoding)
return dBuf;
return (await dBuf).toString(encoding);
}
//# sourceMappingURL=compressFiles.js.map