21 lines
684 B
TypeScript
21 lines
684 B
TypeScript
const encode = (obj: Record<string, any>): string => {
|
|
const jsonStr = JSON.stringify(obj);
|
|
const utf8Bytes = new TextEncoder().encode(jsonStr);
|
|
const binary = String.fromCharCode(...utf8Bytes);
|
|
const base64 = btoa(binary);
|
|
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
}
|
|
|
|
const decode = (str: string): object => {
|
|
const base64 = str
|
|
.replace(/-/g, '+')
|
|
.replace(/_/g, '/')
|
|
.padEnd(str.length + (4 - str.length % 4) % 4, '=');
|
|
|
|
const binary = atob(base64);
|
|
const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
|
|
const jsonStr = new TextDecoder().decode(bytes);
|
|
return JSON.parse(jsonStr);
|
|
}
|
|
|
|
export { encode, decode }
|