UNPKG

base64-encoding

Version:

Fast Base64 encoding and decoding powered by WebAssembly.

101 lines (60 loc) 3.29 kB
# Base64 Encoding Fast Base64 encoding and decoding powered by WebAssembly. This library is modeled after the WHATWG `TextEncoder` and `TextDecoder` API, providing a `Base64Encoder` and `Base64Decoder` class. The C implementation was chosen based on benchmarks provided by [`gaspardpetit/base64`](https://github.com/gaspardpetit/base64). ## Usage ```js const encoder = await new Base64Encoder().optimize(); encoder.encode(new TextEncoder().encode('foobar')) // => Zm9vYmFy const decoder = await new Base64Decoder().optimize(); new TextDecoder().decode(decoder.decode("Zm9vYmFy")) // => foobar ``` For one-shot usage, you can use the JS implementation without instantiating a WASM instance: ```js new Base64Encoder().encode(new TextEncoder().encode('foobar')) // => Zm9vYmFy new TextDecoder().decode(new Base64Decoder().decode("Zm9vYmFy")) // => foobar ``` ### URL-friendly Encoding This implementation also supports a URL-friendly variant of Base64, where - all `'+'` are mapped to `'-'` - all `'/'` are mapped to `'_'` - the padding characters `'='` are omitted To use this variant, provide the `url` setting when creating the encoder. ```js const encoder = await new Base64Encoder({ url: true }).optimize(); ``` For decoding URL-friendly Base64 no extra steps are required. ## Performance TBD Currently only the encoder provides a significant performance improvement over the pure JS implementation. ## Distribution This module is published on npm under the [`base64-encoding`](https://www.npmjs.com/package/base64-encoding) tag. The package contains the following: - The root folder ([Browse](https://unpkg.com/browse/base64-encoding/)) exports ES modules in ES2018 syntax. All internal module paths are fully qualified, so they can be imported in Deno or the browser directly: ```ts import * as b64 from 'https://unpkg.com/base64-encoding?module'; ``` - The `module` folder ([Browse](https://unpkg.com/browse/base64-encoding/module/)) contains a rolled-up version of the above. ```ts import * as b64 from 'https://unpkg.com/base64-encoding/module'; ``` - The `cjs` folder ([Browse](https://unpkg.com/browse/base64-encoding/cjs/)) exports CommonJS modules in ES2015 syntax for use in node. ```ts require('base64-encoding') ``` - The `src` folder ([Browse](https://unpkg.com/browse/base64-encoding/src/)) contains the TypeScript source code. The root and `cjs` folder include type declarations and source maps, so that IntelliSense works out of the box in VSCode. The `package.json` properly sets the `main`, `module`, `type` and `exports` keys, so that `package.json-`based tools will pick the right version. ## License TBD Currently the C code is licensed under an ancient Apache 1.0 license that comes with some pretty old-school requirements, such as including the following in all promotional materials: > This product includes software > developed by the Apache Group for use in the Apache HTTP server project > (http://www.apache.org/). It is very likely that [`ap_base64.c`](https://github.com/dhamidi/apache-httpd-1.3.42/blob/master/src/ap/ap_base64.c) has been shipped under a Apache-2.0 license somewhere. Once I locate it, this requirement will go away. ## TODO - Figure out why decoding is slow - License