base256-archive
Version:
Simple archive format that produces a base256-encoded string.
39 lines (38 loc) • 1.14 kB
JavaScript
/* IMPORT */
import Base256 from 'base256-encoding';
import { TYPE_ARRAY, TYPE_OBJECT } from './constants.js';
/* HELPERS */
const Helpers = {
/* API */
getDivider: (values) => {
let length = 0;
while (true) {
length += 3;
const divider = `\n${'-'.repeat(length)}\n`;
if (values.find(value => value.includes(divider)))
continue; // Not unique, skipping
return divider;
}
},
getValues: (packable, encode = true) => {
const encoder = encode ? (value) => Base256.encodeStr(String(value)) : String;
if (Array.isArray(packable)) {
return [TYPE_ARRAY, ...packable.map(encoder)];
}
else {
return [TYPE_OBJECT, ...Object.entries(packable).flat().map(encoder)];
}
}
};
/* MAIN */
const Packer = {
/* API */
pack: (packable, options) => {
const values = Helpers.getValues(packable, options?.encode);
const divider = Helpers.getDivider(values);
const packed = values.join(divider);
return packed;
}
};
/* EXPORT */
export default Packer;