UNPKG

@logic-pad/core

Version:
47 lines (46 loc) 1.61 kB
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; }