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
Module System
Min. Node Version
Typescript Support
Node Version
NPM Version
1,717 Stars
178 Commits
48 Forks
9 Watching
90 Branches
12 Contributors
Updated on 27 Nov 2024
Minified
Minified + Gzipped
TypeScript (69.66%)
JavaScript (30.34%)
Cumulative downloads
Total Downloads
Last day
-1.3%
2,623,256
Compared to previous day
Last week
3.6%
13,538,894
Compared to previous week
Last month
11.4%
56,681,766
Compared to previous month
Last year
38.1%
574,538,986
Compared to previous year
tiny-invariant
is a tiny, widely-supported, zero-dependency alternative to invariant
.
tiny-invariant
- when every byte counts!
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!');
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 code for sprintf
logic and instead encourages consumers to leverage template literals for message formatting.
1invariant(condition, `Hello, ${name} - how are you today?`);
tiny-invariant
allows you to pass a string
message, or a function that returns a string
message. Using a function that returns a message is helpful when your message is expensive to create.
1import invariant from 'tiny-invariant'; 2 3invariant(condition, `Hello, ${name} - how are you today?`); 4 5// Using a function is helpful when your message is expensive 6invariant(value, () => getExpensiveMessage());
When process.env.NODE_ENV
is set to production
, the message will be replaced with the generic message Invariant failed
.
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
4 existing vulnerabilities detected
Details
Reason
Found 4/15 approved changesets -- score normalized to 2
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 2024-11-25
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 More