UNPKG

@waiting/base64

Version:

Base64 encoding/decoding in pure JS on both modern Browsers and Node.js. Also supports URL-safe base64

77 lines (69 loc) 2.53 kB
import { browserDecode, browserEncode, fromBuffer as browserFromBuffer, } from './browser' import { defaultConfig } from './config' import { b64toURLSafe, b64PadSuffix, isRunningInNodejs } from './helper' import { fromBuffer as nodeFromBuffer, nodeDecode, nodeEncode, } from './nodejs' import { getLens, _byteLength } from './to_buffer' /** Encode to base64, source from string | number | bigint */ export function b64encode(input, textEncoder) { const ret = isRunningInNodejs() && !defaultConfig.forceBrowser ? nodeEncode(input) : browserEncode(input, textEncoder) return ret } /** Decode base64 to string */ export function b64decode(base64, outputEncoding = 'utf-8', textDecoder) { const ret = isRunningInNodejs() && !defaultConfig.forceBrowser ? nodeDecode(base64, outputEncoding) : browserDecode(base64, outputEncoding, textDecoder) return ret } /** Encode to base64, source from ArrayBuffer or Uint8Array */ export function b64fromBuffer(buffer) { const ret = isRunningInNodejs() && !defaultConfig.forceBrowser ? nodeFromBuffer(buffer) : browserFromBuffer(buffer) return ret } /** * Calculate buffer.byteLength from base64 * * base64 is 4/3 + up to two characters of the original data */ export function b64byteLength(base64) { const lens = getLens(base64) const validLen = lens[0] const placeHoldersLen = lens[1] return _byteLength(validLen, placeHoldersLen) } /** * Encode to URL-safe base64, source from string | number | bigint. * Replace "+" to "-" and "/" to "_", and Remove "=". * * Note: using b64toURLSafe() for converting base64 string to URL-safe base64 string * * @see https://en.wikipedia.org/wiki/Base64#URL_applications */ export function b64urlEncode(input, textEncoder) { const b64 = b64encode(input, textEncoder) return b64toURLSafe(b64) } /** * Encode to URL-safe base64, source from ArrayBuffer or Uint8Array * * @see https://en.wikipedia.org/wiki/Base64#URL_applications */ export function b64urlFromBuffer(buffer) { const b64 = b64fromBuffer(buffer) return b64toURLSafe(b64) } /** * Decode URL-safe base64 to original string. * * Note: using b64fromURLSafe() for converting URL-safe base64 string to base64 string * * @see https://en.wikipedia.org/wiki/Base64#URL_applications */ export function b64urlDecode(input, outputEncoding = 'utf-8', textDecoder) { const str = b64PadSuffix(input) // for URL-safe return b64decode(str, outputEncoding, textDecoder) }