swc-plugin-dev-expression

Crates.ioswc-plugin-dev-expression
lib.rsswc-plugin-dev-expression
version0.2.11
sourcesrc
created_at2022-12-22 16:44:13.294382
updated_at2023-01-30 08:22:05.888189
descriptionA port for SWC of babel-plugin-dev-expression, which expands __DEV__ and wraps invariant and warning calls
homepage
repositoryhttps://github.com/twnk/swc-plugin-dev-expression
max_upload_size
id744016
size52,138
Angel (twnk)

documentation

README

swc-plugin-dev-expression npm Crates.io GitHub

A port of Facebook's dev-expression Babel plugin.

This plugin gates calls to warning() behind process.env.NODE_ENV !== 'production', modifies calls to invariant() to hoist the condition outside of the function call, and replaces __DEV__ expressions with a NODE_ENV check. Most bundlers will then strip these calls out of production code entirely. The transform applied to warning() and invariant() is identical to the behaviour of babel-plugin-dev-expression. The transformation of __DEV__ differs and is only done in more constrained conditions, for ease of implementation. See note below.

invariant

Replaces

invariant(condition, argument, argument);

with

if (!condition) {
  if ("production" !== process.env.NODE_ENV) {
    invariant(false, argument, argument);
  } else {
    invariant(false);
  }
}

Recommended for use with https://github.com/zertosh/invariant or smaller https://github.com/alexreardon/tiny-invariant.

warning

Replaces

warning(condition, argument, argument);

with

if ("production" !== process.env.NODE_ENV) {
  warning(condition, argument, argument);
}

Recommended for use with https://github.com/r3dm/warning or smaller https://github.com/alexreardon/tiny-warning.

__DEV__

Replaces

if (__DEV__) {}
(__DEV__ ? yes() : no());
!__DEV__;
(__DEV__ && true);
(__DEV__ || false);

with

if(process.env.NODE_ENV !== 'production') {}
(process.env.NODE_ENV !== 'production' ? yes() : no());
!(process.env.NODE_ENV !== 'production');
(process.env.NODE_ENV !== 'production') && true;
(process.env.NODE_ENV !== 'production') || false;

Note: The plugin does not transform every single reference to __DEV__. It will only make this substitution if __DEV__ is the entire condition in an if statement or ? conditional expression, or if __DEV__ is an argument to a logical expression (!, && or ||). If this limitation poses any problems for your usage, please get in touch.

## License This project is Copyright of Angel Wells, licenced under GPL 3.0 or later.

Commit count: 21

cargo fmt