babel-plugin-fail-explicit

0.0.6 • Public • Published

babel-plugin-fail-explicit

Build Status Coverage Status NPM version Dependency Status npm

A babel plugin that prevents coercion and silent failure in JavaScript

⚠️ Experimental ⚠️

Roadmap

  • Fail on unsafe coercion
  • Fail on unsafe property access
  • Do not fail inside conditional expressions or default statements (||), on by default
  • Allow unsafe access in if statement by default
  • Allow for configuration of strictness

⚠️ This doesn't work as expected with "transform-es2015-modules-umd" at the moment ⚠️

Installation

npm install --save-dev babel-plugin-fail-explicit
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs

Setup

// .babelrc
{
  "plugins": [
    "transform-es2015-modules-commonjs",
    "fail-explicit"
  ]
}

Examples

// ------------------------------------------------
// Coercion safeguard
// ------------------------------------------------
[] + {}
// TypeError: 'Unexpected coercion of type "Array" and
// type "Object" using "+" operator'
 
NaN + undefined
// TypeError: Unexpected coercion of type "NaN" and type
// "undefined" using "+" operator
 
1 + 'some'
// '1some'
 
 
// ------------------------------------------------
// Safe Comparison
// ------------------------------------------------
new String('12') > 12
// TypeError: Unexpected comparison of type "String" and type
// "number" using ">" operator
 
null > undefined
// TypeError: Unexpected comparison of type "null" and type
// "undefined" using ">" operator
 
 
// ------------------------------------------------
// Usage for better undefined propagation errors
// ------------------------------------------------
const obj = {
  foo: {
    bar: {
      baz: false
    }
  }
}
 
obj.foo.bar._MOO_.baz;
// TypeError: Property "_MOO_" does not exist in "Object.foo._MOO_"
 
 
// ------------------------------------------------
// Usage as out of bounds check
// ------------------------------------------------
const some = new Array(3)
some[10]
// TypeError: '"Array[10]" is out of bounds'
 
// TypeError: '"woo[1]" is out of bounds'
const obj = {
  woo: ['']
}
 
obj.woo[1]
// TypeError: '"woo[1]" is out of bounds'

Package Sidebar

Install

npm i babel-plugin-fail-explicit

Weekly Downloads

4

Version

0.0.6

License

MIT

Last publish

Collaborators

  • amilajack