tiny-invariant 🔬💥
Last updated
Last updated
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.
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
(condition: any, message?: string) => void
condition
is required and can be anything
message
is an optional string
message
for kb savings!Big idea: you will want your compiler to convert this code:
Into this:
Babel: recommend babel-plugin-dev-expression
TypeScript: recommend 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:
rollup: use rollup-plugin-replace and set NODE_ENV
to production
and then rollup
will treeshake out the unused code
Webpack: instructions
We have a es
(EcmaScript module) build (because you know you want to deduplicate this super heavy library)
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
🤘