UNPKG

base256-archive

Version:

Simple archive format that produces a base256-encoded string.

39 lines (38 loc) 1.14 kB
/* 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;