@lonu/stc
Version:
A tool for converting OpenApi/Swagger/Apifox into code.
35 lines (34 loc) • 951 B
JavaScript
// Copyright 2018-2025 the Deno authors. MIT license.
export function runLengthEncode(arr) {
const data = [];
const runLengths = [];
let prev = Symbol("none");
for (const x of arr) {
if (x === prev) {
++runLengths[runLengths.length - 1];
}
else {
prev = x;
data.push(x);
runLengths.push(1);
}
}
for (const r of runLengths) {
if (r >= 0x100) {
throw new Error(`Run length too long: ${r}`);
}
}
return {
d: btoa(String.fromCharCode(...data)),
r: btoa(String.fromCharCode(...runLengths)),
};
}
export function runLengthDecode({ d, r }) {
const data = atob(d);
const runLengths = atob(r);
let out = "";
for (const [i, ch] of [...runLengths].entries()) {
out += data[i].repeat(ch.codePointAt(0));
}
return Uint8Array.from([...out].map((x) => x.codePointAt(0)));
}