summary refs log tree commit diff
path: root/src/util/Base64.ts
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-05-07 20:03:24 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-05-07 20:03:24 +0200
commit78fa2835abe7ff49995ad82bd28dbb956375b875 (patch)
tree9a1db5eab693c81e01743caa60a2050c3b018dee /src/util/Base64.ts
parent[Route] PATCH /guilds/:id/roles (diff)
downloadserver-78fa2835abe7ff49995ad82bd28dbb956375b875.tar.xz
:art: [Route] templates refactor
Diffstat (limited to 'src/util/Base64.ts')
-rw-r--r--src/util/Base64.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/util/Base64.ts b/src/util/Base64.ts
new file mode 100644

index 00000000..46cff77a --- /dev/null +++ b/src/util/Base64.ts
@@ -0,0 +1,47 @@ +const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+"; + +// binary to string lookup table +const b2s = alphabet.split(""); + +// string to binary lookup table +// 123 == 'z'.charCodeAt(0) + 1 +const s2b = new Array(123); +for (let i = 0; i < alphabet.length; i++) { + s2b[alphabet.charCodeAt(i)] = i; +} + +// number to base64 +export const ntob = (n: number): string => { + if (n < 0) return `-${ntob(-n)}`; + + let lo = n >>> 0; + let hi = (n / 4294967296) >>> 0; + + let right = ""; + while (hi > 0) { + right = b2s[0x3f & lo] + right; + lo >>>= 6; + lo |= (0x3f & hi) << 26; + hi >>>= 6; + } + + let left = ""; + do { + left = b2s[0x3f & lo] + left; + lo >>>= 6; + } while (lo > 0); + + return left + right; +}; + +// base64 to number +export const bton = (base64: string) => { + let number = 0; + const sign = base64.charAt(0) === "-" ? 1 : 0; + + for (let i = sign; i < base64.length; i++) { + number = number * 64 + s2b[base64.charCodeAt(i)]; + } + + return sign ? -number : number; +};