@jonahsnider/tmp-01deprecated

The smallest & fastest library for really easy, totally type-safe unit conversions in TypeScript & JavaScript

Usage no npm install needed!

<script type="module">
  import jonahsniderTmp01 from 'https://cdn.skypack.dev/@jonahsnider/tmp-01';
</script>

README

Convert

The smallest & fastest library for really easy, totally type-safe unit conversions in TypeScript & JavaScript.

Codecov CI

npm install convert
# or
yarn add convert

More installation steps below.

convert(5, 'miles').to('km');
convertMany('4d 16h').to('minutes');

Features

  • Full build time and runtime validation of conversions
  • Using a web framework like Next.js or Nuxt.js? You get 0-cost build-time conversions. Convert is totally side-effect free, so conversions will be precalculated at build-time, so absolutely zero conversion code is sent to clients!
  • Works in browsers and Node.js (UMD and ESM builds will work anywhere)
  • Out of the box ES3 backwards-compatibility (CI tests on Node.js v0.9.1)
  • Absolutely tiny bundle size and 0 dependencies
  • Supports bigints without breaking on old engines

Usage

Generated API documentation for the latest version is available online.

View docs.

// ESM:
import convert from 'convert';
// CJS:
const {convert} = require('convert');

// 360 seconds into minutes
convert(360, 'seconds').to('minutes');
// -> 6

// BigInt support
convert(20n, 'hours').to('minutes');
// -> 1200n

// Format to the best unit automatically
convert(5500, 'meters').to('best');
// -> { quantity: 5.5, unit: 'km', toString: () => '5.5km' }

// We also do length, data, volume, mass, temperature, and more
convert(5, 'kilometers').to('nautical miles');
convert(12, 'pounds').to('ounces');
convert(8192, 'bytes').to('KiB');
convert(10, 'atmospheres').to('kPa');
convert(451, 'fahrenheit').to('celsius');

Converting many units

import {convertMany} from 'convert';
const {convertMany} = require('convert');

// Convert 1 day and 8 hours into ms
convertMany('1d8h').to('ms');

Converting to best unit

import convert from 'convert';
const {convert} = require('convert');

// Convert into the best unit
const duration = convert(36, 'h').to('best');
// -> { quantity: 1.5, unit: 'd', toString: () => '1.5d' }

// The toString() method means you can automatically cast the object to a string without any issues
'duration is ' + duration;
// -> duration is 1.5d

ms shorthand

import {ms} from 'convert';
const {ms} = require('convert');

// Convert a duration into milliseconds
ms('1d 2h 30min');
// -> 95400000

Installation

Package maneger

Convert is published as convert on npm.

npm install convert
# or
yarn add convert

CommonJS

// Chooses dev build if NODE_ENV is "development", otherwise uses prod build
const {convert} = require('convert');
const {convert} = require('convert/dev');
const {convert} = require('convert/prod');

ES Modules

// ESM does not have automatic build switching, you must explicitly import the dev build
import convert from 'convert';
import convert from 'convert/dev';
import convert from 'convert/prod';

Browsers

UMD (global)

Pick your favorite CDN:

<script type="module">
    import convert from 'https://unpkg.com/convert@2?module';
    import convert from 'https://cdn.skypack.dev/convert@2';
    import convert from 'https://esm.run/convert@2';
</script>

<!-- or -->

<script src="https://cdn.jsdelivr.net/npm/convert@2"></script>
<script src="https://unpkg.com/convert@2"></script>

Alternatives

Convert is better than other unit conversion libraries because it's faster and smaller than them, while having the same features. Benchmarks of popular unit conversion libraries, including convert are available here.

Convert is the fastest, taking less than a microsecond for all functions. That's a little over 3 million convert() calls per second.

npm bundle size of convert

npm bundle size of uom + npm bundle size of uom-units

npm bundle size of units-converter

npm bundle size of safe-units

npm bundle size of convert-units

npm bundle size of js-quantities

Thanks

Big thanks to @Jdender, @TheAkio, @iCrawl, @p7g, @aequasi, @aetheryx, and the TypeScript Discord server for their help in getting the typesafety working.

Thanks to @MicroDroid for fixing temperature conversion.