Gathering detailed insights and metrics for tiny-invariant
Gathering detailed insights and metrics for tiny-invariant
Gathering detailed insights and metrics for tiny-invariant
Gathering detailed insights and metrics for tiny-invariant
npm install tiny-invariant
Typescript
Module System
Node Version
NPM Version
99.6
Supply Chain
99.5
Quality
76.1
Maintenance
100
Vulnerability
100
License
TypeScript (69.66%)
JavaScript (30.34%)
Total Downloads
2,165,504,233
Last Day
1,025,873
Last Week
18,886,284
Last Month
81,255,092
Last Year
713,792,081
MIT License
1,838 Stars
178 Commits
47 Forks
8 Watchers
90 Branches
12 Contributors
Updated on Jul 01, 2025
Minified
Minified + Gzipped
Latest Version
1.3.3
Package Id
tiny-invariant@1.3.3
Unpacked Size
14.46 kB
Size
4.60 kB
File Count
13
NPM Version
10.2.4
Node Version
21.6.2
Published on
Feb 23, 2024
Cumulative downloads
Total Downloads
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:
1invariant(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.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 4/15 approved changesets -- score normalized to 2
Reason
8 existing vulnerabilities detected
Details
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2025-06-23
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn MoreLast Day
-13.3%
1,025,873
Compared to previous day
Last Week
-8.8%
18,886,284
Compared to previous week
Last Month
-1.1%
81,255,092
Compared to previous month
Last Year
45.2%
713,792,081
Compared to previous year