npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

integer

v4.0.0

Published

Native 64-bit integers with overflow protection.

Downloads

10,854

Readme

integer Build Status

Native 64-bit signed integers in Node.js.

  • All standard operators (arithmetic, bitwise, logical)
  • Protection from overflow and unsafe numbers
  • Always immutable
  • Other useful utilities

Installation

npm install --save integer

You must be using Node.js v10 or above. Prebuilt binaries are available for LTS versions + Linux/OSX.

Usage

var Integer = require('integer');

var a = Integer('7129837312139827189');
var b = a.subtract(1).shiftRight(3);
assert(b.equals('891229664017478398'));

Overflow protection

We will not let you perform operations that would result in overflow. If you try to create an Integer that cannot be represented in 64-bits (signed), we will throw a RangeError.

// These will each throw a RangeError
var tooBig = Integer(13897283129).multiply(13897283129);
var tooSmall = Integer.MIN_VALUE.subtract(1);
var divideByZero = Integer(123).divide(0);
var alsoTooBig = Integer('4029384203948203948923');

// You are also protected against two's complement overflow (this will throw a RangeError)
var twosComplement = Integer.MIN_VALUE.divide(-1);

Unsafe number protection

It's easy to convert between me and regular JavaScript numbers.

var int = Integer(12345);
assert(int instanceof Integer);

var num = Number(int); // same as int.toNumber()
assert(typeof num === 'number');

However, we will prevent you from converting an Integer to an unsafe number, and vice-versa. To learn more about unsafe numbers, click here.

// This will throw a RangeError
var unsafe = Integer(Number.MAX_SAFE_INTEGER + 1);

// This is okay
var int = Integer(Number.MAX_SAFE_INTEGER).plus(1);

// But this will throw a RangeError
var unsafe = int.toNumber();

API

Integer(value) -> Integer

Casts a value to an Integer. If the value cannot be converted safely and losslessly, a RangeError is thrown.

var a = Integer();
var b = Integer(12345);
var c = Integer('12345');
assert(a.equals(0));
assert(b.equals(c));

Integer.fromNumber(number, [defaultValue]) -> Integer

Casts a regular number to an Integer.

If the number is unsafe the defaultValue is used instead (or a RangeError is thrown if no defaultValue was provided).

Integer.fromNumber(12345, 0); // results in Integer(12345)
Integer.fromNumber(Number.MAX_SAFE_INTEGER + 1, 0); // results in Integer(0)

Integer.fromString(string, [radix, [defaultValue]]) -> Integer

Casts a string to an Integer. The string is assumed to be base-10 unless a different radix is specified.

If conversions fails the defaultValue is used instead (or a RangeError is thrown if no defaultValue was provided).

var hexColor = 'ff55dd';
var int = Integer.fromString(hexColor, 16, 'ffffff');

Integer.fromBits(lowBits, [highBits]) -> Integer

Creates an Integer by concatenating two regular 32-bit signed integers. The highBits are optional and default to 0.

var int = Integer.fromBits(0x40, 0x20);
int.toString(16); // => '2000000040'

Arithmetic operations

    .add/plus(other) -> Integer

    .subtract/sub/minus(other) -> Integer

    .multiply/mul/times(other) -> Integer

    .divide/div/divideBy/dividedBy/over(other) -> Integer

    .modulo/mod(other) -> Integer

Performs the arithmetic operation and returns a new Integer. The argument must either be a number, a base-10 string, or an Integer. If the operation results in overflow, a RangeError is thrown.

    .negate/neg() -> Integer

Returns the unary negation (-value) of the Integer.

    .abs/absoluteValue() -> Integer

Returns the absolute value of the Integer.

Bitwise operations

    .and(other) -> Integer

    .or(other) -> Integer

    .xor(other) -> Integer

    .not() -> Integer

Performs the bitwise operation and returns a new Integer. The argument must either be a number, a base-10 string, or an Integer.

    .shiftLeft/shl(numberOfBits) -> Integer

    .shiftRight/shr(numberOfBits) -> Integer

Shifts the Integer by specified number of bits and returns the result.

Logical operations

    .equals/eq/isEqualTo(other) -> boolean

    .notEquals/neq/isNotEqualTo/doesNotEqual(other) -> boolean

    .greaterThan/gt/isGreaterThan(other) -> boolean

    .lessThan/lt/isLessThan(other) -> boolean

    .greaterThanOrEquals/gte/isGreaterThanOrEqualTo(other) -> boolean

    .lessThanOrEquals/lte/isLessThanOrEqualTo(other) -> boolean

Performs the logical operation and returns true or false. The argument must either be a number, a base-10 string, or an Integer.

    .compare(other) -> number

Compares the value of the Integer and other, resulting in:

  • -1 if this is less than other
  • 1 if this is greater than other
  • 0 if this is equal to other

Converting to other values

    .toString([radix]) -> string

Converts the Integer to a string. A base-10 string is returned unless a different radix is specified.

    .valueOf/toNumber() -> number

Converts the Integer to a regular number. If the Integer is not within the safe range, a RangeError is thrown.

    .toNumberUnsafe() -> number

Converts the Integer to a regular number, even if the conversion would result in a loss of precision. This method will never throw an error.

Other utility

    .bitSizeAbs() -> number

Returns the number of bits necessary to hold the absolute value of the Integer.

Integer(0).bitSizeAbs(); // => 1
Integer(128).bitSizeAbs(); // => 8
Integer(-255).bitSizeAbs(); // => 8
Integer.fromString('4fffffffffff', 16).bitSizeAbs(); // => 47

    .isEven() -> boolean

    .isOdd() -> boolean

    .isPositive() -> boolean

    .isNegative() -> boolean

    .isZero() -> boolean

    .isNonZero/isNotZero() -> boolean

These methods are self-explanatory.

    .isSafe() -> boolean

    .isUnsafe() -> boolean

Returns whether or not the Integer is within the safe range. If it's not within the safe range, trying to convert it to a regular number would result in a RangeError being thrown.

The safe range is defined as n >= Number.MIN_SAFE_INTEGER && n <= Number.MAX_SAFE_INTEGER.

Integer.isInstance(value) -> boolean

Determines if the given value is an Integer object.

Getters

  • .low -> number - the lower 32-bits of the Integer
  • .high -> number - the upper 32-bits of the Integer

Constants

  • Integer.MAX_VALUE - maximum value of an Integer
  • Integer.MIN_VALUE - minimum value of an Integer
  • Integer.ZERO - an Integer with a value of 0
  • Integer.ONE - an Integer with a value of 1
  • Integer.NEG_ONE - an Integer with a value of -1

License

MIT