key-value-compress
Version:
Key-Value interface to deflate, split, concatenate and inflate storage.
62 lines (61 loc) • 1.68 kB
JavaScript
;
/**
* _util.ts
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.base64KVS = exports.concatBuffer = exports.splitBuffer = exports.digestBuffer = void 0;
const crypto = require("crypto");
const _transform_1 = require("./_transform");
/**
* generate digest hash string for Buffer
*/
function digestBuffer(algorithm, chunk) {
return crypto.createHash(algorithm).update(chunk).digest("hex");
}
exports.digestBuffer = digestBuffer;
/**
* split a large Buffer to smaller chunks
*/
function splitBuffer(buffer, chunkSize) {
const chunks = [];
let start = 0;
const total = buffer.length;
if (total < chunkSize)
return [buffer];
while (start < total) {
const end = Math.min(start + chunkSize, total);
const chunk = buffer.slice(start, end);
chunks.push(chunk);
start = end;
}
return chunks;
}
exports.splitBuffer = splitBuffer;
/**
* concatenate Buffer chunks to a single Buffer
*/
function concatBuffer(chunks) {
if (!chunks)
return;
if (chunks.length === 1) {
return chunks[0]; // single chunk
}
else {
return Buffer.concat(chunks); // multiple chunks
}
}
exports.concatBuffer = concatBuffer;
/**
* transform key-value storage to encode Buffer to base64 string, and vice versa
*/
function base64KVS(storage, encoding) {
if (!encoding)
encoding = "base64";
return (0, _transform_1.encodeKVS)(storage, {
// Buffer to base64
encode: buf => buf.toString(encoding),
// base64 to Buffer
decode: str => Buffer.from(str || "", encoding),
});
}
exports.base64KVS = base64KVS;