Gathering detailed insights and metrics for @minswap/tiny-invariant
Gathering detailed insights and metrics for @minswap/tiny-invariant
Gathering detailed insights and metrics for @minswap/tiny-invariant
Gathering detailed insights and metrics for @minswap/tiny-invariant
npm install @minswap/tiny-invariant
Typescript
Module System
Node Version
NPM Version
TypeScript (69.66%)
JavaScript (30.34%)
Total Downloads
65,315
Last Day
25
Last Week
1,128
Last Month
4,776
Last Year
35,599
MIT License
1,847 Stars
178 Commits
47 Forks
8 Watchers
90 Branches
12 Contributors
Updated on Aug 24, 2025
Latest Version
1.2.0
Package Id
@minswap/tiny-invariant@1.2.0
Unpacked Size
10.47 kB
Size
4.25 kB
File Count
10
NPM Version
6.14.16
Node Version
14.19.0
Cumulative downloads
Total Downloads
Last Day
212.5%
25
Compared to previous day
Last Week
-17.8%
1,128
Compared to previous week
Last Month
0.4%
4,776
Compared to previous month
Last Year
114.5%
35,599
Compared to previous year
A tiny invariant
alternative.
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.
1import invariant from 'tiny-invariant'; 2 3invariant(truthyValue, 'This should not throw!'); 4 5invariant(falsyValue, 'This will throw!'); 6// Error('Invariant violation: This will throw!');
You can also provide a function to generate your message, for when your message is expensive to create
1import invariant from 'tiny-invariant'; 2 3invariant(value, () => getExpensiveMessage());
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?')
tiny-invariant
is useful for correctly narrowing types for flow
and typescript
1const value: Person | null = { name: 'Alex' }; // type of value == 'Person | null' 2invariant(value, 'Expected value to be a person'); 3// type of value has been narrowed to 'Person'
(condition: any, message?: string | (() => string)) => void
condition
is required and can be anythingmessage
optional string
or a function that returns a string
(() => string
)1# yarn 2yarn add tiny-invariant 3 4# npm 5npm install tiny-invariant --save
message
for kb savings!Big idea: you will want your compiler to convert this code:
1invariant(condition, 'My cool message that takes up a lot of kbs');
Into this:
1if (!condition) { 2 if ('production' !== process.env.NODE_ENV) { 3 invariant(false, 'My cool message that takes up a lot of kbs'); 4 } else { 5 invariant(false); 6 } 7}
babel-plugin-dev-expression
tsdx
(or you can run babel-plugin-dev-expression
after TypeScript compiling)Your bundler can then drop the code in the "production" !== process.env.NODE_ENV
block for your production builds to end up with this:
1if (!condition) { 2 invariant(false); 3}
NODE_ENV
to production
and then rollup
will treeshake out the unused codees
(EcmaScript module) buildcjs
(CommonJS) buildumd
(Universal module definition) build in case you needed itWe expect process.env.NODE_ENV
to be available at module compilation. We cache this value
🤘
No vulnerabilities found.