@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
JavaScript
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)
}