UNPKG

middleout.js

Version:

A spoof compression library that pretends to revolutionize data compression using made-up algorithms — inspired by the legendary middle-out compression from Silicon Valley

67 lines (64 loc) 1.66 kB
#!/usr/bin/env node import { decodeMO, encodeMO } from "./chunk-EKQOSSOR.js"; import { getWeissmanScore } from "./chunk-MRISBIOS.js"; // src/algorithms/rle.ts function compressWithRLE(input, config) { const preserveWhitespace = config?.preserveWhitespace ?? true; const cleanedInput = preserveWhitespace ? input : input.replace(/\s+/g, ""); let compressed = ""; let count = 1; for (let i = 0; i < cleanedInput.length; i++) { const current = cleanedInput[i]; const next = cleanedInput[i + 1]; if (current == next) { count++; } else { compressed += current + (count > 1 ? count : ""); count = 1; } } const targetWeissman = config?.targetWeissman || 10; const weissmanScore = getWeissmanScore( "rle", input.length, compressed.length, targetWeissman ); return { original: input, compressed, originalSize: input.length, compressedSize: compressed.length, algorithm: "rle", weissmanScore, encoded: encodeMO("rle", compressed, weissmanScore) }; } function decompressWithRLE(encoded) { const { algorithm, compressedData } = decodeMO(encoded); if (algorithm !== "rle") { throw new Error( `decompressWithRLE expected algorithm 'rle' but got '${algorithm}'` ); } let result = ""; for (let i = 0; i < compressedData.length; i++) { const char = compressedData[i]; let numStr = ""; while (/\d/.test(compressedData[i + 1])) { numStr += compressedData[++i]; } const count = parseInt(numStr || "1", 10); result += char.repeat(count); } return result; } export { compressWithRLE, decompressWithRLE };