Detalhes do pacote

rfc4648

swansontec7mMIT1.5.4

Encoding and decoding for base64, base32, base16, and friends

Uint8Array, base16, base32, base32hex

readme (leia-me)

rfc4648.js

Build Status JavaScript Style Guide

This library implements encoding and decoding for the data formats specified in rfc4648:

  • base64
  • base64url
  • base32
  • base32hex
  • base16

Each encoding has a simple API inspired by Javascript's built-in JSON object:

import { base32 } from "rfc4648";

base32.stringify([42, 121, 160]); // -> 'FJ42A==='
base32.parse("FJ42A==="); // -> Uint8Array([42, 121, 160])

The library has tree-shaking support, so tools like rollup.js or Webpack 2+ can automatically trim away any encodings you don't use.

  • Zero external dependencies
  • 100% test coverage
  • Built-in types for Typescript & Flow
  • 0.8K minified + gzip (can be even smaller with tree shaking)

API details

The library provides the following top-level modules:

  • base64
  • base64url
  • base32
  • base32hex
  • base16
  • codec

Each module exports a parse and stringify function.

const string = baseXX.stringify(data, opts)

Each stringify function takes array-like object of bytes and returns a string.

If you pass the option { pad: false } in the second parameter, the encoder will not output padding characters (=).

const data = baseXX.parse(string, opts)

Each parse function takes a string and returns a Uint8Array of bytes. If you would like a different return type, such as plain Array or a Node.js Buffer, pass its constructor in the second argument:

base64.parse("AOk=", { out: Array });
base64.parse("AOk=", { out: Buffer.allocUnsafe });

The constructor will be called with new, and should accept a single integer for the output length, in bytes.

If you pass the option { loose: true } in the second parameter, the parser will not validate padding characters (=):

base64.parse("AOk", { loose: true }); // No error

The base32 codec will also fix common typo characters in loose mode:

base32.parse("He1l0==", { loose: true }); // Auto-corrects as 'HELLO==='

Custom encodings

To define your own encodings, use the codec module:

const codec = require("rfc4648").codec;

const myEncoding = {
  chars: "01234567",
  bits: 3
};

codec.stringify([220, 10], myEncoding); // '670050=='
codec.parse("670050", myEncoding, { loose: true }); // [ 220, 10 ]

The encoding structure should have two members, a chars member giving the alphabet and a bits member giving the bits per character. The codec.parse function will extend this with a third member, codes, the first time it's called. The codes member is a lookup table mapping from characters back to numbers.

changelog (log de mudanças)

rfc4648

Unreleased

1.5.4 (2024-12-10)

  • fixed: Merge everything into a single source file, to avoid import errors.

1.5.3 (2022-10-27)

  • fixed: Adjust the Node.js packaging for greater compatibility bundlers and other tools.

1.5.2 (2022-05-30)

  • fixed: Allow Typescript 4.7+ to find the type definitions in "Node16" mode.

1.5.1 (2022-01-04)

  • added: Include a license file in the package.

1.5.0 (2021-05-25)

  • added: Allow modern versions of Node to use named exports along with native modules support.

1.4.0 (2020-07-10)

  • added: Add Flow type definitions.

1.3.0 (2019-09-25)

  • changed: Port the library to TypeScript.

1.2.1 (2019-05-24)

  • changed: Update build & test infrastructure.

1.2.0 (2019-04-05)

  • added: Add an option to skip padding the codec.stringify output

1.1.0

  • added: Automatically fix typo characters in base32 loose mode
  • fixed: Documentation cleanups
  • changed: Size optimizations

1.0.0

  • Use Uint8Array for output
  • Code cleanups & size optimizations

0.9.1

  • Fix packaging bugs

0.9.0

  • Initial release