tiny-invariant

WebJar for tiny-invariant

License

License

MIT
Categories

Categories

Ant Build Tools
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

tiny-invariant
Last Version

Last Version

1.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

tiny-invariant
WebJar for tiny-invariant
Project URL

Project URL

https://www.webjars.org
Source Code Management

Source Code Management

https://github.com/alexreardon/tiny-invariant

Download tiny-invariant

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/tiny-invariant/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>tiny-invariant</artifactId>
    <version>1.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/tiny-invariant/
implementation 'org.webjars.npm:tiny-invariant:1.1.0'
// https://jarcasting.com/artifacts/org.webjars.npm/tiny-invariant/
implementation ("org.webjars.npm:tiny-invariant:1.1.0")
'org.webjars.npm:tiny-invariant:jar:1.1.0'
<dependency org="org.webjars.npm" name="tiny-invariant" rev="1.1.0">
  <artifact name="tiny-invariant" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='tiny-invariant', version='1.1.0')
)
libraryDependencies += "org.webjars.npm" % "tiny-invariant" % "1.1.0"
[org.webjars.npm/tiny-invariant "1.1.0"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

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!');

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) => void

  • condition is required and can be anything
  • message is an optional string

Installation

# yarn
yarn add tiny-invariant

# npm
npm add 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 (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

That's it!

🤘

Versions

Version
1.1.0
1.0.6
1.0.4
1.0.3