perf: use 'base64url' encoding when available in Node.js runtime

This commit is contained in:
Filip Skokan 2021-01-18 13:22:46 +01:00
parent 02941146c7
commit 808f06cd08

View file

@ -1,12 +1,21 @@
import { decoder } from '../../lib/buffer_utils.js'
export const encode = (input: Uint8Array | string) =>
Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_')
let encodeImpl: (input: Uint8Array | string) => string
export const decode = (input: Uint8Array | string) => {
function normalize(input: string | Uint8Array) {
let encoded = input
if (encoded instanceof Uint8Array) {
encoded = decoder.decode(encoded)
}
return new Uint8Array(Buffer.from(encoded, 'base64'))
return encoded
}
if (Buffer.isEncoding('base64url')) {
encodeImpl = (input) => Buffer.from(input).toString(<BufferEncoding>'base64url')
} else {
encodeImpl = (input) =>
Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_')
}
export const encode = encodeImpl
export const decode = (input: Uint8Array | string) => Buffer.from(normalize(input), 'base64')