Skip to content
Base64 encoding, decoding on both modern browser and Node.js
TypeScript JavaScript Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.config
.githooks
.vscode
docs
src
test
test_browser test: for '\u{10121}' Jun 15, 2019
.dockerignore
.editorconfig
.eslintignore
.eslintrc.json
.gitignore
.npmignore
.travis.yml
CHANGELOG.md
LICENSE
README.md
README.zh-CN.md
appveyor.yml
commitlint.config.js
package.json
rollup.config.js
tsconfig.cjs.json
tsconfig.dev.json
tsconfig.json
tslint.json
typedoc.json

README.md

base64

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

Version License Build Status Build status Coverage Status Conventional Commits

Features

  • Supports typeof string, number and bigint
  • Supports ArrayBuffer or Uint8Array
  • Encoding/Decoding via TextEncoder/TextDecoder under browser and Buffer under Node.js
  • Building various modulesESM, UMD and CJS

Browser requirement

Node.js requirement

  • v10.4.0+ for bigint base64 encoding
  • ICU installation for base64 decoding with char encodings other then utf-8 and utf-16le

Installing

npm install @waiting/base64

Usage of Node.js

See the Docs for details

Encoding

import { b64encode, b64fromBuffer, b64urlEncode } from '@waiting/base64'

b64encode('A') === 'QQ=='
b64encode('schöne') === 'c2Now7ZuZQ=='
b64encode(1n) === b64encode(1) // bigint -> 'MQ==' 
b64encode('𠮷') === b64encode('\uD842\uDFB7') === b64encode('\u{20BB7}') // '8KCutw=='

const u8arr = Uint8Array.from([0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87])
b64fromBuffer(u8arr) === b64encode('中文')  // '5Lit5paH'

// URL-safe
b64urlEncode('A') === 'QQ'
b64urlEncode('中文测试') === '5Lit5paH5rWL6K-V'

Decoding

import { b64decode, b64urlDecode } from '@waiting/base64'

b64decode('MQ==') === '1'
b64urlDecode('MQ') === '1'

Transfer

import { b64toURLSafe, b64fromURLSafe } from '@waiting/base64'

// base64 -> URL-safe base64
b64toURLSafe('QQ==') === 'QQ'
b64toURLSafe('5Lit5paH5rWL6K+V') === '5Lit5paH5rWL6K-V'

// URL-safe base64 -> base64
b64fromURLSafe('QQ') === 'QQ=='
b64fromURLSafe('0J_RgNC40LLQtdGCLCDQvNC40YAh') === '0J/RgNC40LLQtdGCLCDQvNC40YAh'

Usage of browser

See the Docs for details

ESM

<script type="module">
  import { b64encode, b64urlEncode } from './base64.esm.min.js' 
  
  console.log( b64encode('A') ) // 'QQ=='
  console.log( b64urlEncode('A') )  // 'QQ'
  console.log( b64encode('\uD842\uDFB7') ) // '8KCutw=='
</script>

UMD

<!-- polyfill for Edge
  Note: text-encoder-lite parse 4-bytes UTF-8 char incorrectly,
  so use text-encoding instead.
  see: https://github.com/solderjs/TextEncoderLite/issues/16
-->
<!--
<script src="https://raw.githubusercontent.com/inexorabletash/text-encoding/master/lib/encoding-indexes.js"></script>
<script src="https://raw.githubusercontent.com/inexorabletash/text-encoding/master/lib/encoding.js"></script>
-->
<script src="./base64.umd.min.js"></script>
<script>
  // global variable base64
  console.log( base64.b64encode('A') )
  console.log( base64.b64urlEncode('A') )
  console.log( base64.b64encode('\uD842\uDFB7') )
</script>

Testing

npm run test

# for browsers FireFox and Chrome
npm run test:browser

# for browsers all available on this client
cd .config && npm i
npm run browser:detect

Demo

License

MIT

Languages

You can’t perform that action at this time.