cbor-rn-prereqs

React Native pre-requisites for cbor

Usage no npm install needed!

<script type="module">
  import cborRnPrereqs from 'https://cdn.skypack.dev/cbor-rn-prereqs';
</script>

README

cbor-rn-prereqs

Make it easier to use the cbor package in React Native.

Installation:

$ npm install --save cbor cbor-rn-prereqs

Ensure you have a file named metro.config.js in your project root, and that it contains at least this:

module.exports = {
  resolver: {
    extraNodeModules: {
      stream: require.resolve('stream-browserify'),
    },
  },
}

require this package before importing or requiring cbor:

require('cbor-rn-prereqs')
const cbor = require('cbor')

What this does

This package bundles up a few additions to the JavaScript-like environment that React Native provides. In particular:

  • BigInt support using big-integer, which gets installed globally if React Native's version of JSC is too old to have BigInt support. IMO, this is fixing a React Native bug.
  • process.nextTick() from process. If there is no process in your environment, all of the process package gets installed globally. If there is, but it doesn't have nextTick, just nextTick will be added to the existing global process instance.
  • A small and non-full-featured implementation of TextDecoder from @cto.af/textdecoder, which gets installed globally. IMO this is also a React Native bug.
  • A few dependencies that replace functionality available in node, from buffer, events, and stream-browserify

stream-browserify needs to be made available when packages do require('stream'), which is enabled by the metro.config.js change above.