From f2c6c9ee5d676dcf4ba15e80694f686594dcd615 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:03:41 -0500 Subject: [PATCH] [+] Typed array serialization --- src/utils.ts | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 25a29d3..549a1d2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -18,20 +18,26 @@ export const nStates = { complete: 2 } -export function sty(styles: any) { - return Object.entries(styles) - .map(([key, value]) => `${key}:${value}`) - .join(';'); -} +export const sty = (styles: any) => Object.entries(styles).map(([k, v]) => `${k}:${v}`).join(';') +export const pos = (x: number, y: number) => `top:${y}px;left:${x}px;` +export const randInt = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min +export const range = (n: number) => Array.from({length: n}, (_, i) => i) -export function pos(x: number, y: number) { - return `top:${y}px;left:${x}px;`; -} +// Json with TypedArray serialization +export const JsonTy = { + stringify: (obj: any) => JSON.stringify(obj, (_, v) => { + if (ArrayBuffer.isView(v)) { + // @ts-ignore Check if it's a TypedArray and serialize it + return { __typedArray__: true, type: v.constructor.name, data: Array.from(v) }; + } + return v; // For all other data types, keep it as is + }), -export function randInt(min: number, max: number) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} - -export function range(n: number) { - return Array.from({length: n}, (_, i) => i); + parse: (json: string) => JSON.parse(json, (_, v) => { + if (v && v.__typedArray__) { + // @ts-ignore Deserialize the TypedArray + return new globalThis[v.type](v.data); + } + return v; // For all other data types, keep it as is + }) }