Isomorphic Base64 implementation
Highly efficient isomorphic implementation of Base64 string encoding and decoding. With the support of Unicode, and non-blocking execution via WebWorker. This library has 100% tests coverage, including speed tests.
Features
- 100% tests coverage
- Isomorphic, same API for Server and Browser
- Blazing fast, see speed tests
- Non-blocking browser experience, via WebWorkers
- No external dependencies
- Could replace default Meteor's
base64
package
Installation
meteor add ostrio:base64
ES6 Import
1import { Base64 } from 'meteor/ostrio:base64';
Native code support
Native code is disabled by default for both NodeJS and browser. Native code represented as atob, btoa
(with extension to support Unicode) in a browser, and Buffer
at NodeJS.
Although native code is 10x times faster, its support is disabled, as natively base64 encoding supports only ASCII symbols in a Browser and Node.js. To enable native code - use constructor in next form:
1// Note - first "b" (lowercase) 2import { base64 } from 'meteor/ostrio:base64'; 3const nativeB64 = new base64({ useNative: true });
Non-blocking via WebWorker
WebWorker is enabled by default, for all encode/decode
calls with the callback. WebWorker is used only if supported by a browser, otherwise, it will fall-back to the main thread. In the real-world application WebWorker, usage will gain you extra FPS, and UI will act more smoothly.
API
.encode()
1Base64.encode(plainString [, callback]);
1import { Base64 } from 'meteor/ostrio:base64'; 2 3Base64.encode('My Plain String'); // Returns 'TXkgUGxhaW4gU3RyaW5n' 4 5// Async, non-blocking via WebWorker (if supported) at browser: 6Base64.encode('My Plain String', (error, b64) => { 7 // b64 === 'TXkgUGxhaW4gU3RyaW5n' 8});
.decode()
1Base64.decode(base64EncodedString [, callback]);
1import { Base64 } from 'meteor/ostrio:base64'; 2 3Base64.decode('TXkgUGxhaW4gU3RyaW5n'); // Returns 'My Plain String' 4 5// Async, non-blocking via WebWorker (if supported) at browser: 6Base64.decode('TXkgUGxhaW4gU3RyaW5n', (error, str) => { 7 // str === 'My Plain String' 8});
Constructor new base64()
1new base64({ allowWebWorker, useNative, supportNonASCII, ejsonCompatible });
opts.allowWebWorker
{Boolean} - Default:true
. Use WebWorker in a Browser if available;opts.useNative
{Boolean} - Default:false
. Use nativeatob
,btoa
andBuffer.from
, if available;opts.supportNonASCII
{Boolean} - Default:true
. Decreases speed, but gives support for whole utf-8 table;opts.ejsonCompatible
{Boolean} - Default:false
. Compatible mode with EJSON "binary" format,.encode()
method will result as Uint8Array ifejsonCompatible
istrue
.
1// Note - first "b" (lowercase) 2import { base64 } from 'meteor/ostrio:base64'; 3// Native with WebWorker 4const nativeB64 = new base64({ allowWebWorker: true, useNative: true }); 5 6// Native without WebWorker 7const mtNativeB64 = new base64({ allowWebWorker: false, useNative: true }); 8 9// Use main thread, no WebWorker 10const mtB64 = new base64({ allowWebWorker: false });
Default base64
package replacement
- Download
base64-replacement
package and place intometeor-app/packages
directory, that's it. Runmeteor update
to make sure new package is applied; - In case of version incompatibility, change
base64-replacement
version, to the latest available on the mainstream channel; - For more info see
base64-replacement
package
100% Tests coverage
- Clone this package
- In Terminal (Console) go to directory where package is cloned
- Then run:
# Default meteor test-packages ./ # With custom port meteor test-packages ./ --port 8888
Tests include synchronous, asynchronous and speed tests for Browser and NodeJS, for cases with/out the Native code and/or WebWorker usage.
Support this project:
- Become a patron — support my open source contributions with monthly donation
- Use ostr.io — Monitoring, Analytics, WebSec, Web-CRON and Pre-rendering for a website