@alinex/datastore
Version:
Read, work and write data structures from and to differents locations and formats.
75 lines • 2.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compress = exports.uncompress = exports.compressions = void 0;
const path_1 = require("path");
const debug_1 = require("debug");
const debug = debug_1.default("datastore:compression");
exports.compressions = ["gzip", "deflate", "brotli", "bzip2", "lzma", "tar", "tgz", "tbz2", "tlz", "zip"];
const alias = {
br: "brotli",
gz: "gzip",
"tar.gz": "tgz",
"tar.bz2": "tbz2",
"tar.lzma": "tlz"
};
function detect(pathname) {
if (!path_1.extname(pathname))
return null;
let ext = path_1.extname(path_1.basename(pathname, path_1.extname(pathname)))
.replace(/^\./, "")
.toLowerCase() + path_1.extname(pathname).toLowerCase();
if (alias[ext])
ext = alias[ext];
if (exports.compressions.indexOf(ext) !== -1)
return ext;
ext = path_1.extname(pathname)
.replace(/^\./, "")
.toLowerCase();
if (alias[ext])
ext = alias[ext];
if (exports.compressions.indexOf(ext) !== -1)
return ext;
return detect(path_1.basename(pathname, path_1.extname(pathname)));
}
const handler = function (parsedUri, options) {
let ext = null;
if (options && options.compression) {
ext = options.compression;
if (ext) {
if (alias[ext])
ext = alias[ext];
if (exports.compressions.indexOf(ext) == -1)
ext = null;
}
}
else {
ext = detect(parsedUri.pathname);
}
if (!ext)
ext = "none";
return Promise.resolve().then(() => require(`./${ext}`));
};
exports.uncompress = async function (parsedUri, buffer, options) {
if (debug.enabled) {
const size = buffer.length;
return handler(parsedUri, options).then(mod => mod.uncompress(parsedUri, buffer).then(buffer => {
if (buffer.length != size)
debug(`size ${size} bytes -> ${buffer.length} bytes`);
return buffer;
}));
}
return handler(parsedUri, options).then(mod => mod.uncompress(parsedUri, buffer));
};
exports.compress = async function (parsedUri, buffer, options) {
if (debug.enabled) {
const size = buffer.length;
return handler(parsedUri, options).then(mod => mod.compress(parsedUri, buffer).then(buffer => {
if (buffer.length != size)
debug(`size ${size} bytes -> ${buffer.length} bytes`);
return buffer;
}));
}
return handler(parsedUri, options).then(mod => mod.compress(parsedUri, buffer));
};
exports.default = { compress: exports.compress, uncompress: exports.uncompress };
//# sourceMappingURL=index.js.map