Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

bytesish

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bytesish

If you're writing a library that needs to work in Node.js and in Browsers, it's quite difficult to figure out what "the right thing" to do with binary is.

  • 0.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
376K
increased by14.95%
Maintainers
1
Weekly downloads
 
Created
Source

bytesish

If you're writing a library that needs to work in Node.js and in Browsers, it's quite difficult to figure out what "the right thing" to do with binary is.

If you want to be compatible with Node.js libraries you'll need to accept and return Buffer instances. If you want to be compatible with Browser API's you'll need to accept and return a number of types, the browser is sort of a mess when it comes to binary with many different "views" of binary data.

The moment you use the Node.js Buffer API in a library that is bundled for use in Browsers the bundler will inject a rather large polyfill for the entire Buffer API. It's quite difficult to accept and return Buffer instances while avoiding this penalty.

However, there is some good news. No matter what the binary type there's an underlying ArrayBuffer associated with the instance. There's also one generic binary view object available in both Node.js and Browsers called DataView. This means that you can take any binary type and do a zero memcopy conversion to a DataView.

But there are some problems with DataView. Not all APIs take it in browsers and almost none accept it in Node.js. It's a great API for reading and writing to an ArrayBuffer but it lacks a lot of other functionality that can be difficult to accomplish cross-platform.

bytesish is here to help. This library helps you accept and convert different binary types into a consistent type, DataView, without loading any polyfills or other dependencies, then convert back into an ideal type for the platform your library is running in.

What bytesish does:

  • Returns an array buffer from any known binary type (mostly zero copy).
  • Creates an ArrayBuffer from a string with any encoding.
  • Converts an ArrayBuffer to a string of any encoding.
  • Converts an ArrayBuffer to an ideal native object (Buffer or Uint8Array).

bytesish does not create a new Binary Type for basic accessing and manipulating of binary data, because you can just use DataView for that. bytesish tries to be a small piece of code that does not contribute any more than necessary to your bundle size. It does this by containing only the binary operations you need that are difficult to do cross-platform (Node.js and Browsers).

let bytes = require('bytesish')
let view = bytes('hello world')

/* zero copy conversions */
view = bytes(Buffer.from('hello world')) // Buffer instance
view = bytes((new TextEncoder()).encode('hello world')) // Uint8Array

/* base64 conversions */
let base64String = bytes.toString(view, 'base64')
base64String = bytes.toString(Buffer.from('hello world'), 'base64')
base64String = bytes.toString('hello world', 'base64')

/* since this is a string conversion it will create a new binary instance */
let viewCopy = bytes(base64String, 'base64')

FAQs

Package last updated on 16 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc