UNPKG

@alinex/datastore

Version:

Read, work and write data structures from and to differents locations and formats.

75 lines 2.7 kB
"use strict"; 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