# libbase64 Encode and decode base64 strings. Written in TypeScript, published with both ES module and CommonJS builds and type declarations. Requires Node.js 20 or newer. ## Usage Install with npm npm install libbase64 Require in your script ```javascript const libbase64 = require('libbase64'); ``` or import it as an ES module ```javascript import libbase64 from 'libbase64'; // or import { encode, decode, wrap, Encoder, Decoder } from 'libbase64'; ``` ### Encode values Encode Buffer objects or unicode strings with libbase64.encode(val) → String Where - **val** is a Buffer, an Uint8Array or an unicode string **Example** ```javascript libbase64.encode('jõgeva'); // asO1Z2V2YQ== ``` ### Decode values Decode base64 strings to a Buffer with libbase64.decode(str) → Buffer Where - **str** is a base64 encoded string. Line breaks and other characters outside of the base64 alphabet are ignored. Input made of several separately padded segments (eg. every line padded on its own) is decoded segment by segment **Example** ```javascript libbase64.decode('asO1Z2V2YQ==').toString(); // jõgeva ``` ### Wrap encoded values To enforce soft line breaks on lines longer than selected amount of characters, use `wrap` libbase64.wrap(str[, lineLength]) → String Where - **str** is a base64 encoded string - **lineLength** (defaults to 76) is the maximum allowed line length **Example** ```javascript libbase64.wrap('asO1Z2V2asO1Z2V2asO1Z2V2YQ==', 10); // asO1Z2V2as\r\n // O1Z2V2asO1\r\n // Z2V2YQ== ``` ### Transform Streams `libbase64` makes it possible to encode and decode streams with `libbase64.Encoder` and `libbase64.Decoder` constructors. ### Encoder Stream Create new Encoder Stream with const encoder = new libbase64.Encoder([options]) Where - **options** is the optional stream options object - **options.lineLength** (Number) if you want to use any other line length than the default 76 characters (or set to `false` to turn the soft wrapping off completely) - **options.skipStartBytes** (Number) Optional. How many bytes to skip from output (default to 0) - **options.limitOutputBytes** (Number) Optional. How many bytes to return (defaults to all bytes). The misspelled `limitOutbutBytes` that earlier versions documented is still accepted - **options.startPadding** (String) Optional. Fills first line with provided padding string. Usually goes together with skipStartBytes to get line folding correct. The output is the same as `libbase64.wrap(libbase64.encode(input), lineLength)`, no matter how the input is split into chunks. **Example** The following example script reads in a file, encodes it to base64 and saves the output to a file. ```javascript const libbase64 = require('libbase64'); const fs = require('fs'); const source = fs.createReadStream('source.txt'); const encoded = fs.createWriteStream('encoded.txt'); const encoder = new libbase64.Encoder(); source.pipe(encoder).pipe(encoded); ``` ### Decoder Stream Create new Decoder Stream with const decoder = new libbase64.Decoder([options]) Where - **options** is the optional stream options object **Example** The following example script reads in a file in base64 encoding, decodes it and saves the output to a file. ```javascript const libbase64 = require('libbase64'); const fs = require('fs'); const encoded = fs.createReadStream('encoded.txt'); const dest = fs.createWriteStream('dest.txt'); const decoder = new libbase64.Decoder(); encoded.pipe(decoder).pipe(dest); ``` ## License **MIT**