mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-20 17:03:42 +00:00
more serialization
This commit is contained in:
33
src/lib/serial/serialization.ts
Normal file
33
src/lib/serial/serialization.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Compress JSON.stringify with gzip
|
||||
*/
|
||||
export async function stringifyCompressed(chords: any): Promise<Blob> {
|
||||
const stream = new Blob([JSON.stringify(chords)]).stream().pipeThrough(new CompressionStream("gzip"))
|
||||
return await new Response(stream).blob()
|
||||
}
|
||||
|
||||
/**
|
||||
* Decompress JSON.parse with gzip
|
||||
*/
|
||||
export async function parseCompressed<T>(blob: Blob): Promise<T> {
|
||||
const stream = blob.stream().pipeThrough(new DecompressionStream("gzip"))
|
||||
return await new Response(stream).json()
|
||||
}
|
||||
|
||||
/**
|
||||
* Share JS object as url query param
|
||||
*/
|
||||
export async function getSharableUrl(name: string, data: any, baseHref = window.location.href): Promise<URL> {
|
||||
return new Promise(async resolve => {
|
||||
const reader = new FileReader()
|
||||
reader.onloadend = function () {
|
||||
const base64String = (reader.result as string)
|
||||
.replace(/^data:application\/octet-stream;base64,/, "")
|
||||
.replace(/==$/, "")
|
||||
const url = new URL(baseHref)
|
||||
url.searchParams.set(name, base64String)
|
||||
resolve(url)
|
||||
}
|
||||
reader.readAsDataURL(await stringifyCompressed(data))
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user