@logic-pad/core
Version:
47 lines (46 loc) • 1.61 kB
JavaScript
import { Serializer } from '../src/data/serializer/allSerializers.js';
import { encode, decode } from 'uint8-to-base64';
import CompressorBase from '../src/data/serializer/compressor/compressorBase.js';
const decoder = new TextDecoder();
const encoder = new TextEncoder();
class BunCompressor extends CompressorBase {
get id() {
return 'dfl';
}
compress(input) {
const data = Bun.deflateSync(encoder.encode(input), {
library: 'libdeflate',
level: 12,
});
return Promise.resolve(`${this.id}_${encode(data).replace(/\+/g, '-').replace(/\//g, '_')}`);
}
decompress(input) {
const data = decode(input.replace(`${this.id}_`, '').replace(/-/g, '+').replace(/_/g, '/'));
const result = Bun.inflateSync(data, {
library: 'libdeflate',
level: 12,
});
return Promise.resolve(decoder.decode(result));
}
}
export const bunCompressor = new BunCompressor();
export async function parseLink(link) {
const url = new URL(link);
const data = url.searchParams.get('d');
if (data === null) {
throw new Error('Missing data parameter');
}
return Serializer.parsePuzzle(await bunCompressor.decompress(data));
}
export function shuffleArray(array) {
let currentIndex = array.length;
while (currentIndex !== 0) {
const randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
[array[currentIndex], array[randomIndex]] = [
array[randomIndex],
array[currentIndex],
];
}
return array;
}