1.3.3 ā€¢ Published 1 month ago

tiny-invariant v1.3.3

Weekly downloads
4,366,556
License
MIT
Repository
github
Last release
1 month ago

tiny-invariant šŸ”¬šŸ’„

Build Status npm dependencies types minzip Downloads per month

A tiny invariant alternative.

What is invariant?

An invariant function takes a value, and if the value is falsy then the invariant function will throw. If the value is truthy, then the function will not throw.

import invariant from 'tiny-invariant';

invariant(truthyValue, 'This should not throw!');

invariant(falsyValue, 'This will throw!');
// Error('Invariant violation: This will throw!');

You can also provide a function to generate your message, for when your message is expensive to create

import invariant from 'tiny-invariant';

invariant(value, () => getExpensiveMessage());

Why tiny-invariant?

The library: invariant supports passing in arguments to the invariant function in a sprintf style (condition, format, a, b, c, d, e, f). It has internal logic to execute the sprintf substitutions. The sprintf logic is not removed in production builds. tiny-invariant has dropped all of the sprintf logic. tiny-invariant allows you to pass a single string message. With template literals there is really no need for a custom message formatter to be built into the library. If you need a multi part message you can just do this:

invariant(condition, `Hello, ${name} - how are you today?`);

Type narrowing

tiny-invariant is useful for correctly narrowing types for flow and typescript

const value: Person | null = { name: 'Alex' }; // type of value == 'Person | null'
invariant(value, 'Expected value to be a person');
// type of value has been narrowed to 'Person'

API: (condition: any, message?: string | (() => string)) => void

  • condition is required and can be anything
  • message optional string or a function that returns a string (() => string)

Installation

# yarn
yarn add tiny-invariant

# npm
npm install tiny-invariant --save

Dropping your message for kb savings!

Big idea: you will want your compiler to convert this code:

invariant(condition, 'My cool message that takes up a lot of kbs');

Into this:

if (!condition) {
  if ('production' !== process.env.NODE_ENV) {
    invariant(false, 'My cool message that takes up a lot of kbs');
  } else {
    invariant(false);
  }
}

Your bundler can then drop the code in the "production" !== process.env.NODE_ENV block for your production builds to end up with this:

if (!condition) {
  invariant(false);
}

Builds

  • We have a es (EcmaScript module) build
  • We have a cjs (CommonJS) build
  • We have a umd (Universal module definition) build in case you needed it

We expect process.env.NODE_ENV to be available at module compilation. We cache this value

That's it!

šŸ¤˜

recast@storybook/channelsconfidence-sdkconfidence-sdk-v13@conedex/conedex-sdk-core@benboba790111/uniswap-v2-sdk@byteprotocol/sdk@metatime/metaswap-sdk@layerzerolabs/lz-aptos-sdk-v1@layerzerolabs/lz-solana-sdk-v2@proteria/type-graphql@thorswap-lib/multichain-core@thorswap-lib/multichain-sdk@trebodex/sdk@trebodex/trebodex-sdk-core@nekomeowww/uniscam-sdk@nekomeowww/uniswap-earndefi-sdk@muhammadwajidshahid/swap-sdk@exchange-one/sdk@exchange-one/sdk-core@storybook/addon-jest@storybook/addon-storysourceatomss@do-killer/dodo-sdk-v2@furucombo/composable-router-api@furucombo/composable-router-common@furucombo/composable-router-core@furucombo/composable-router-logics@harmony-swoop/sdk@orionprotocol/sdk@commercetools-frontend/application-shell@commercetools-frontend/permissions@thirdweb-dev/react-native@thirdweb-dev/react-core@thirdweb-dev/sdk@thirdweb-dev/react@arthswap/widgets@linbingdefi/sdk@openos.com/uniswaptttswap-sdk@overlay-market/overlay-v1-sdk-test@magic-finance-cards/magic-sdk@roc-protocol/roc-sdk@squirel-seat-map/shared@rowsncolumns/spreadsheetstorybook-performance-addon@craftjs/layers-2@craftjs/core-2react-advanced-context-storemy-deerfi-sdkmodule-react-reduxdw-mx-mask@crisog/uniswap-sdk@harmony-react/core@harmony-react/fortmatic-connector@harmony-react/magic-connector@harmony-react/network-connector@harmony-react/portis-connector@harmony-react/squarelink-connector@harmony-react/walletconnect-connector@harmony-react/frame-connector@batsoft/swappornswap-sdk@pornswap/pornswap-sdkheco-sdk@twswap/sdkcustomsdkttcryptoswap-sdk-core@thismr/bitmindtest-sdk1@aliumswap/sdkgreenteaswap-libs-sdk@baijiahei/slate-react@thecompounder/sdk@theanthill/pancakeswap-libs-sdk@shibance/sdk@saberhq/sdkmorfixdepth-swap@freeswap/sdky-slate@miekassu/any-uni-forked-swap-v2-sdk@zetaswap/sdk@zettaswap/sdk@sonicswap/sdk-devdungnv-sdkztopiauniswaptest@bscsswap/sdk@beswap/sdkcortex-test-sdkfreeswap-sdkfreeswap-sdk2@manekiswap/manekiswap-sdkliger-sdkinmergerswap-sdkokexshibaswap-sdk@predatorswap/v2-sdksphinxsjc-sdkbimswap-sdkhayek-uniswap-sdk@avacadodefi/sdkv1
1.3.3

1 month ago

1.3.2

1 month ago

1.3.1-beta.1

2 years ago

1.3.0-beta.1

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.2.0-beta.1

2 years ago

1.1.0

4 years ago

1.1.0-beta.2

4 years ago

1.1.0-beta.1

4 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago