babel-plugin-fail-explicit
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-explicitnpm 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// ------------------------------------------------'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 objfoobar_MOO_baz;// TypeError: Property "_MOO_" does not exist in "Object.foo._MOO_" // ------------------------------------------------// Usage as out of bounds check// ------------------------------------------------const some = 3some10// TypeError: '"Array[10]" is out of bounds' // TypeError: '"woo[1]" is out of bounds'const obj = woo: '' objwoo1// TypeError: '"woo[1]" is out of bounds'