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 🙏

© 2026 – Pkg Stats / Ryan Hefner

difference-engine

v1.2.4

Published

Difference Engine

Readme

difference-engine

Difference Engine

npm i -P difference-engine

Features are available as static methods on the class:

import DifferenceEngine from 'difference-engine'

And as functions exported from the module:

import {
  inclusive,
  exclusive
} from 'difference-engine'

Examples use the static form.

inclusive

Accepts two arrays. Returns an array containing items which appear in both arrays.

const alpha = ['A', 'B', 'C']
const omega = ['C', 'D', 'E']

const array = DifferenceEngine.inclusive(alpha, omega) // returns ['C']

exclusive

Accepts two arrays. Returns an array containing items which appear in the first array but not the second.

const alpha = ['A', 'B', 'C']
const omega = ['C', 'D', 'E']

const array = DifferenceEngine.exclusive(alpha, omega) // returns ['A', 'B']

ArrayEngine

Features are available as static methods on the class:

import { ArrayEngine } from 'difference-engine'

And as functions exported from the module:

import ArrayEngine, {
  indexOf,
  iterateForward,
  iterateReverse,
  iterateBetween,
  max,
  min,
  bite
} from 'difference-engine/array-engine'

Examples use the static form.

indexOf

const array = ['A', 'B', 'C', 'D', 'E']

const index = ArrayEngine.indexOf(array, 'E') // returns 4

bite

Accepts an array and two indexes. Returns a slice from the array.

Positive

const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 0, 0) // returns ['A']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 0, 4) // returns ['A', 'B', 'C', 'D', 'E']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 4, 0) // returns ['E', 'D', 'C', 'B', 'A']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 4, 4) // returns ['E']

Negative

const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, -4, 0) // returns ['A']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, -4, 4) // returns ['A', 'B', 'C', 'D', 'E']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, -4, -4) // returns ['E', 'D', 'C', 'B', 'A']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 4, -4) // returns ['E', 'D', 'C', 'B', 'A']
const alpha = ['A', 'B', 'C', 'D', 'E']

const omega = ArrayEngine.bite(alpha, 0, -4) // returns ['A']

iterateForward

Accepts an array and a function. Iterates from start to end.

const array = ['A', 'B', 'C', 'D', 'E']

ArrayEngine.iterateForward(array, () => {})

iterateReverse

Accepts an array and a function. Iterates from end to start.

const array = ['A', 'B', 'C', 'D', 'E']

ArrayEngine.iterateReverse(array, () => {})

iterateBetween

Accepts an array, a start index, an end index, and a function.

If the first index is less than the second index, it behaves as iterateForward.

If the first index is greater than the second index, it behaves as iterateReverse.

const array = ['A', 'B', 'C', 'D', 'E']

ArrayEngine.iterateBetween(array, 1, 3, () => {})

max

Accepts an array. Returns the largest item (when compared as a number).

const array = ['A', 'B', 'C', 'D', 'E']

const value = ArrayEngine.max(array) // returns 'E'
const array = [1, 2, 3, 4, 5]

const value = ArrayEngine.max(array) // returns 5

min

Accepts an array. Returns the smallest item (when compared as a number).

const array = ['A', 'B', 'C', 'D', 'E']

const value = ArrayEngine.min(array) // returns 'A'
const array = [1, 2, 3, 4, 5]

const value = ArrayEngine.min(array) // returns 1

NumberEngine

Features are available as static methods on the class:

import { NumberEngine } from 'difference-engine'

And as functions exported from the module:

import NumberEngine, {
  fibonacci,
  haversine,
  fromOctToDec,
  fromHexToDec,
  Weight,
  Temperature,
  Distance
} from 'difference-engine/number-engine'

Examples use the static form.

fibonacci

Accepts an index. Returns the number in a Fibonacci sequence corresponding to the index.

const fibonacci = NumberEngine.fibonacci(0) // returns 0
const fibonacci = NumberEngine.fibonacci(1) // returns 1
const fibonacci = NumberEngine.fibonacci(2) // returns 1
const fibonacci = NumberEngine.fibonacci(3) // returns 2

haversine

Accepts an object with fields describing latitude and longitude points from and to.

Returns a value in kilometres or miles.

const points = { from: { lat: 51.4934, lng: 0.0098 }, to: { lat: 40.7128, lng: 74.0060 } }

const km = NumberEngine.haversine(points).km() // returns the distance in kilometres
const mi = NumberEngine.haversine(points).mi() // returns the distance in miles

fromOctToDec

Accepts a string representing an octal. Returns a decimal.

const dec = NumberEngine.fromOctToDec('20') // returns 16

fromHexToDec

Accepts a string representing a hexadecimal. Returns a decimal.

const dec = NumberEngine.fromHexToDec('10') // returns 16

Weight

Convert a number from one unit to another.

As static methods on the class:

import { NumberEngine: { Weight } } from 'difference-engine'

And as functions exported from the module:

import Weight, {
  fromKgToGr,
  fromKgToMg,
  fromKgToOz,
  fromKgToLb,
  fromKgToSt,

  fromGrToKg,
  fromGrToMg,
  fromGrToOz,
  fromGrToLb,
  fromGrToSt,

  fromMgToKg,
  fromMgToGr,
  fromMgToOz,
  fromMgToLb,
  fromMgToSt,

  fromOzToKg,
  fromOzToGr,
  fromOzToMg,
  fromOzToLb,
  fromOzToSt,

  fromLbToKg,
  fromLbToGr,
  fromLbToMg,
  fromLbToOz,
  fromLbToSt,

  fromStToKg,
  fromStToGr,
  fromStToMg,
  fromStToLb,
  fromStToOz,

  convert
} from 'difference-engine/number-engine/weight'

Examples use the static form.

Kilogram

const gr = Weight.fromKgToGr(10)
const mg = Weight.fromKgToMg(10)
const oz = Weight.fromKgToOz(10)
const lb = Weight.fromKgToLb(10)
const st = Weight.fromKgToSt(10)

Or, using convert.

const gr = Weight.convert(10).fromKg.toGr()
const mg = Weight.convert(10).fromKg.toMg()
const oz = Weight.convert(10).fromKg.toOz()
const lb = Weight.convert(10).fromKg.toLb()
const st = Weight.convert(10).fromKg.toSt()

Gram

const kg = Weight.fromGrToKg(10)
const mg = Weight.fromGrToMg(10)
const oz = Weight.fromGrToOz(10)
const lb = Weight.fromGrToLb(10)
const st = Weight.fromGrToSt(10)

Or, using convert.

const kg = Weight.convert(10).fromGr.toKg()
const mg = Weight.convert(10).fromGr.toMg()
const oz = Weight.convert(10).fromGr.toOz()
const lb = Weight.convert(10).fromGr.toLb()
const st = Weight.convert(10).fromGr.toSt()

Miligram

const kg = Weight.fromMgToKg(10)
const gr = Weight.fromMgToGr(10)
const oz = Weight.fromMgToOz(10)
const lb = Weight.fromMgToLb(10)
const st = Weight.fromMgToSt(10)

Or, using convert.

const kg = Weight.convert(10).fromMg.toKg()
const gr = Weight.convert(10).fromMg.toGr()
const oz = Weight.convert(10).fromMg.toOz()
const lb = Weight.convert(10).fromMg.toLb()
const st = Weight.convert(10).fromMg.toSt()

Ounce

const kg = Weight.fromOzToKg(10)
const gr = Weight.fromOzToGr(10)
const mg = Weight.fromOzToMg(10)
const lb = Weight.fromOzToLb(10)
const st = Weight.fromOzToSt(10)

Or, using convert.

const kg = Weight.convert(10).fromOz.toKg()
const gr = Weight.convert(10).fromOz.toGr()
const mg = Weight.convert(10).fromOz.toMg()
const lb = Weight.convert(10).fromOz.toLb()
const st = Weight.convert(10).fromOz.toSt()

Pound

const kg = Weight.fromLbToKg(10)
const gr = Weight.fromLbToGr(10)
const mg = Weight.fromLbToMg(10)
const oz = Weight.fromLbToOz(10)
const st = Weight.fromLbToSt(10)

Or, using convert.

const kg = Weight.convert(10).fromLb.toKg()
const gr = Weight.convert(10).fromLb.toGr()
const mg = Weight.convert(10).fromLb.toMg()
const oz = Weight.convert(10).fromLb.toOz()
const st = Weight.convert(10).fromLb.toSt()

Stone

const kg = Weight.fromStToKg(10)
const gr = Weight.fromStToGr(10)
const mg = Weight.fromStToMg(10)
const lb = Weight.fromStToLb(10)
const oz = Weight.fromStToOz(10)

Or, using convert.

const kg = Weight.convert(10).fromSt.toKg()
const gr = Weight.convert(10).fromSt.toGr()
const mg = Weight.convert(10).fromSt.toMg()
const lb = Weight.convert(10).fromSt.toLb()
const oz = Weight.convert(10).fromSt.toOz()

Temperature

Convert a number from one unit to another.

As static methods on the class:

import { NumberEngine: { Temperature } } from 'difference-engine'

And as functions exported from the module:

import Temperature, {
  fromCToF,
  fromFToC
} from 'difference-engine/number-engine/temperature'

Examples use the static form.

const value = Temperature.fromCToF(10)
const value = Temperature.fromFToC(10)

Distance

Convert a number from one unit to another.

As static methods on the class:

import { NumberEngine: { Distance } } from 'difference-engine'

And as functions exported from the module:

import Distance, {
  fromKmToMt,
  fromKmToCm,
  fromKmToMm,
  fromKmToIn,
  fromKmToFt,
  fromKmToYd,
  fromKmToMi,

  fromMtToKm,
  fromMtToCm,
  fromMtToMm,
  fromMtToIn,
  fromMtToFt,
  fromMtToYd,
  fromMtToMi,

  fromCmToKm,
  fromCmToMt,
  fromCmToMm,
  fromCmToIn,
  fromCmToFt,
  fromCmToYd,
  fromCmToMi,

  fromMmToKm,
  fromMmToMt,
  fromMmToCm,
  fromMmToIn,
  fromMmToFt,
  fromMmToYd,
  fromMmToMi,

  fromInToKm,
  fromInToMt,
  fromInToCm,
  fromInToMm,
  fromInToFt,
  fromInToYd,
  fromInToMi,

  fromFtToKm,
  fromFtToMt,
  fromFtToCm,
  fromFtToMm,
  fromFtToIn,
  fromFtToYd,
  fromFtToMi,

  fromYdToKm,
  fromYdToMt,
  fromYdToCm,
  fromYdToMm,
  fromYdToIn,
  fromYdToFt,
  fromYdToMi,

  fromMiToKm,
  fromMiToMt,
  fromMiToCm,
  fromMiToMm,
  fromMiToIn,
  fromMiToFt,
  fromMiToYd,

  convert
} from 'difference-engine/number-engine/distance'

Examples use the static form.

Kilometre

const mt = Distance.fromKmToMt(10)
const cm = Distance.fromKmToCm(10)
const mm = Distance.fromKmToMm(10)
const in = Distance.fromKmToIn(10)
const ft = Distance.fromKmToFt(10)
const yd = Distance.fromKmToYd(10)
const mi = Distance.fromKmToMi(10)

Or, using convert.

const mt = Distance.convert(10).fromKm.toMt()
const cm = Distance.convert(10).fromKm.toCm()
const mm = Distance.convert(10).fromKm.toMm()
const in = Distance.convert(10).fromKm.toIn()
const ft = Distance.convert(10).fromKm.toFt()
const yd = Distance.convert(10).fromKm.toYd()
const mi = Distance.convert(10).fromKm.toMi()

Metre

const km = Distance.fromMtToKm(10)
const cm = Distance.fromMtToCm(10)
const mm = Distance.fromMtToMm(10)
const in = Distance.fromMtToIn(10)
const ft = Distance.fromMtToFt(10)
const yd = Distance.fromMtToYd(10)
const mi = Distance.fromMtToMi(10)

Or, using convert.

const km = Distance.convert(10).fromMt.toKm()
const cm = Distance.convert(10).fromMt.toCm()
const mm = Distance.convert(10).fromMt.toMm()
const in = Distance.convert(10).fromMt.toIn()
const ft = Distance.convert(10).fromMt.toFt()
const yd = Distance.convert(10).fromMt.toYd()
const mi = Distance.convert(10).fromMt.toMi()

Centimetre

const km = Distance.fromCmToKm(10)
const mt = Distance.fromCmToMt(10)
const mm = Distance.fromCmToMm(10)
const in = Distance.fromCmToIn(10)
const ft = Distance.fromCmToFt(10)
const yd = Distance.fromCmToYd(10)
const mi = Distance.fromCmToMi(10)

Or, using convert.

const km = Distance.convert(10).fromCm.toKm()
const mt = Distance.convert(10).fromCm.toMt()
const mm = Distance.convert(10).fromCm.toMm()
const in = Distance.convert(10).fromCm.toIn()
const ft = Distance.convert(10).fromCm.toFt()
const yd = Distance.convert(10).fromCm.toYd()
const mi = Distance.convert(10).fromCm.toMi()

Milimetre

const km = Distance.fromMmToKm(10)
const mt = Distance.fromMmToMt(10)
const cm = Distance.fromMmToCm(10)
const in = Distance.fromMmToIn(10)
const ft = Distance.fromMmToFt(10)
const yd = Distance.fromMmToYd(10)
const mi = Distance.fromMmToMi(10)

Or, using convert.

const km = Distance.convert(10).fromMm.toKm()
const mt = Distance.convert(10).fromMm.toMt()
const cm = Distance.convert(10).fromMm.toCm()
const in = Distance.convert(10).fromMm.toIn()
const ft = Distance.convert(10).fromMm.toFt()
const yd = Distance.convert(10).fromMm.toYd()
const mi = Distance.convert(10).fromMm.toMi()

Inch

const km = Distance.fromInToKm(10)
const mt = Distance.fromInToMt(10)
const cm = Distance.fromInToCm(10)
const mm = Distance.fromInToMm(10)
const ft = Distance.fromInToFt(10)
const yd = Distance.fromInToYd(10)
const mi = Distance.fromInToMi(10)

Or, using convert.

const km = Distance.convert(10).fromIn.toKm()
const mt = Distance.convert(10).fromIn.toMt()
const cm = Distance.convert(10).fromIn.toCm()
const mm = Distance.convert(10).fromIn.toMm()
const ft = Distance.convert(10).fromIn.toFt()
const yd = Distance.convert(10).fromIn.toYd()
const mi = Distance.convert(10).fromIn.toMi()

Feet

const km = Distance.fromFtToKm(10)
const mt = Distance.fromFtToMt(10)
const cm = Distance.fromFtToCm(10)
const mm = Distance.fromFtToMm(10)
const in = Distance.fromFtToIn(10)
const yd = Distance.fromFtToYd(10)
const mi = Distance.fromFtToMi(10)

Or, using convert.

const km = Distance.convert(10).fromFt.toKm()
const mt = Distance.convert(10).fromFt.toMt()
const cm = Distance.convert(10).fromFt.toCm()
const mm = Distance.convert(10).fromFt.toMm()
const in = Distance.convert(10).fromFt.toIn()
const yd = Distance.convert(10).fromFt.toYd()
const mi = Distance.convert(10).fromFt.toMi()

Yard

const km = Distance.fromYdToKm(10)
const mt = Distance.fromYdToMt(10)
const cm = Distance.fromYdToCm(10)
const mm = Distance.fromYdToMm(10)
const in = Distance.fromYdToIn(10)
const ft = Distance.fromYdToFt(10)
const mi = Distance.fromYdToMi(10)

Or, using convert.

const km = Distance.convert(10).fromYd.toKm()
const mt = Distance.convert(10).fromYd.toMt()
const cm = Distance.convert(10).fromYd.toCm()
const mm = Distance.convert(10).fromYd.toMm()
const in = Distance.convert(10).fromYd.toIn()
const ft = Distance.convert(10).fromYd.toFt()
const mi = Distance.convert(10).fromYd.toMi()

Mile

const km = Distance.fromMiToKm(10)
const mt = Distance.fromMiToMt(10)
const cm = Distance.fromMiToCm(10)
const mm = Distance.fromMiToMm(10)
const in = Distance.fromMiToIn(10)
const ft = Distance.fromMiToFt(10)
const yd = Distance.fromMiToYd(10)

Or, using convert.

const km = Distance.convert(10).fromMi.toKm()
const mt = Distance.convert(10).fromMi.toMt()
const cm = Distance.convert(10).fromMi.toCm()
const mm = Distance.convert(10).fromMi.toMm()
const in = Distance.convert(10).fromMi.toIn()
const ft = Distance.convert(10).fromMi.toFt()
const yd = Distance.convert(10).fromMi.toYd()

StringEngine

import { StringEngine } from 'difference-engine'

charAt

Accepts a string and a number which is an index. Returns the character for the entity at the index.

const string = StringEngine.charAt('Hello, World', 5) // returns ','
const string = StringEngine.charAt('Hello, World', 5) // returns ','

charCodeAt

Accepts a string and a number which is an index. Returns the character code for the entity at the index.

const number = StringEngine.charCodeAt('Hello, World', 5) // returns 44
const number = StringEngine.charCodeAt('Hello, World', 5) // returns 44

charOf

Accepts a string which is an HTML entity. Returns the character for the entity.

const string = StringEngine.charOf(',') // returns ','
const string = StringEngine.charOf(',') // returns ','

charCodeOf

Accepts a string which is an HTML entity. Returns the character code for the entity.

const number = StringEngine.charCodeOf(',') // returns 44
const number = StringEngine.charCodeOf(',') // returns 44

entityAt

Accepts a string and a number which is an index.

Where the character at the index is an entity, it returns the entity.

const string = StringEngine.entityAt('Hello, World', 5) // returns ','
const string = StringEngine.entityAt('Hello, World', 6) // returns ' '

Where the character at the index has an entity name, it returns the entity name.

const string = StringEngine.entityAt('Hello, World', 5) // returns ','

Where the character at the index has an entity code, it returns the entity code.

const string = StringEngine.entityAt('Hello, World', 6) // returns ' '

entityCodeAt

Accepts a string and a number which is an index.

Where the character at the index has an entity code, it returns the entity code.

const string = StringEngine.entityCodeAt('Hello, World', 5) // returns ','

Where the character at the index is an entity code, it returns the entity code.

const string = StringEngine.entityCodeAt('Hello, World', 5) // returns ','

Where the character at the index is an entity name, it returns the entity code for the char at the index.

const string = StringEngine.entityCodeAt('Hello, World', 5) // returns '&'

entityNameAt

Accepts a string and a number which is an index.

Where the character at the index has an entity name, it returns the entity name.

const string = StringEngine.entityNameAt('Hello, World', 5) // returns ','

Where the character at the index is an entity name, it returns the entity name.

const string = StringEngine.entityNameAt('Hello, World', 5) // returns ','

Where the character at the index is an entity code, it returns the entity name for the char at the index.

const string = StringEngine.entityNameAt('Hello, World', 5) // returns '&'

entityOf

Accepts a string and a number which is an index.

Where the character at the index is an entity, it returns the entity.

const string = StringEngine.entityOf(',') // returns ','
const string = StringEngine.entityOf(' ') // returns ' '

fromCodePoint

Accepts a number which is a character code point. Returns the character for that code point.

const string = StringEngine.fromCodePoint(43) // returns '+'

charFromEntityCode

Accepts a string which is an HTML entity code. Returns the character for that entity.

const string = StringEngine.charFromEntityCode('+') // returns '+'

charFromEntityName

Accepts a string which is an HTML entity name. Returns the character for that entity.

const string = StringEngine.charFromEntityCode('+') // returns '+'

toEntityCode

Accepts a string. Returns a string replaced with the HTML entity code for each character.

const string = StringEngine.toEntityCode('Hello, World') // returns 'Hello, World'

toEntityName

Accepts a string. Returns a string replaced with the HTML entity name for each character where it is known, otherwise the character is not replaced.

const string = StringEngine.toEntityName('Hello, World') // returns 'Hello, World'

entityCodeFromChar

Accepts a single-character string. Returns a string representing the HTML entity code for that character.

const entityCode = StringEngine.entityCodeFromChar('+') // returns '+'

The entity is computed from the character code point.

entityNameFromChar

Accepts a single-character string. Returns a string representing the HTML entity code for that character.

const entityName = StringEngine.entityNameFromChar('+') // returns '+'

Where the character has no entity or the entity is not known it returns the character.

entityCodeOf

See entityCodeFromChar.

entityNameOf

See entityNameFromChar.

fromDecToOct

Accepts number. Returns a string representing an octal.

const oct = StringEngine.fromDecToOct(16) // returns '20'

fromDecToHex

Accepts number. Returns a string representing a hexadecimal.

const hex = StringEngine.fromDecToHex(16) // returns '10'

reverse

Accepts a string. Returns the string with characters in reverse order.

const string = StringEngine.reverse('ABCDE') // returns 'EDCBA'