added some magic to get scripts to efficiently encoded into the URL. We're using pako to compress the script, but this outputs to a 8bit array. Stringifying this array adds a lot of overhead, because "125" has three characters in it. Instead we're using the character codes to turn these a bit numbers into single characters base64 is used as well because not all of the characters are allowed in a url (and b64 is better than encodeURIComponent).
22 lines
808 B
TypeScript
22 lines
808 B
TypeScript
import { inflate, deflate } from 'pako'
|
|
|
|
/*
|
|
some magic to get scripts to efficiently encoded into the URL.
|
|
We're using pako to compress the script, but this outputs to a 8bit array. Stringifying this array adds a lot of overhead, because "125" has three characters in it
|
|
Instead we're using the character codes to turn these a bit numbers into single characters
|
|
base64 is used as well because not all of the characters are allowed in a url (and b64 is better than encodeURIComponent)
|
|
*/
|
|
|
|
export const encode = (string: string): string =>
|
|
btoa(String.fromCharCode.apply(null, deflate(string)))
|
|
|
|
export const decode = (string: string): string =>
|
|
inflate(
|
|
new Uint8Array(
|
|
atob(string)
|
|
.split('')
|
|
.map((character) => character.charCodeAt(0))
|
|
),
|
|
{ to: 'string' }
|
|
)
|