Babel plugin for unassert: Encourages programming with assertions by providing tools to compile them away.
babel-plugin-unassert removes assertions on build. So you can use assertions to declare preconditions, postconditions and invariants.
- unassert: Encourages programming with assertions by providing tools to compile them away.
- unassertify: Browserify transform for unassert
- webpack-unassert-loader: Webpack loader for unassert
- gulp-unassert: Gulp plugin for unassert
- unassert-cli: CLI for unassert
$ npm install --save-dev babel-plugin-unassert
For Babel 5 or lower, you need to use the 1.2.x release of babel-plugin-unassert.
$ npm install --save-dev [email protected]
via .babelrc (Recommended)
{
"presets": [
...
],
"env": {
"production": {
"plugins": [
"babel-plugin-unassert"
]
}
}
}$ babel /path/to/src/target.js > /path/to/build/target.js
via Babel CLI
$ babel --plugins babel-plugin-unassert /path/to/src/target.js > /path/to/build/target.js
or shortly,
$ babel --plugins unassert /path/to/src/target.js > /path/to/build/target.js
via Babel API
var babel = require('babel-core');
var jsCode = fs.readFileSync('/path/to/src/target.js');
var transformed = babel.transform(jsCode, {
presets: [...],
plugins: ['babel-plugin-unassert']
});
console.log(transformed.code);For given math.js below,
'use strict';
var assert = require('assert');
function add (a, b) {
console.assert(typeof a === 'number');
assert(!isNaN(a));
assert.equal(typeof b, 'number');
assert.ok(!isNaN(b));
return a + b;
}Run babel with --plugins unassert to transform code.
$ babel --plugins unassert /path/to/demo/math.js > /path/to/build/math.js
You will see assert calls and declarations disappear.
'use strict';
function add(a, b) {
return a + b;
}babel-plugin-unassert supports ES6 module syntax and power-assert.
with .babelrc,
{
"presets": [
...
],
"env": {
"development": {
"presets": [
"babel-preset-power-assert"
]
},
"production": {
"plugins": [
"babel-plugin-unassert"
]
}
}
}production code below
import assert from 'assert';
class Calc {
add (a, b) {
assert(!(isNaN(a) || isNaN(b)));
assert(typeof a === 'number');
assert(typeof b === 'number');
return a + b;
}
}becomes
'use strict';
class Calc {
add(a, b) {
return a + b;
}
}in production, and produces power-assert messages like
AssertionError: # example.js:5
assert(!(isNaN(a) || isNaN(b)))
| | | | | |
| | | | true NaN
| false 3 true
false
in development.
Assertion expressions are removed when they match patterns below. In other words, babel-plugin-unassert removes assertion calls that are compatible with Node.js standard assert API (and console.assert).
assert(value, [message])assert.ok(value, [message])assert.equal(actual, expected, [message])assert.notEqual(actual, expected, [message])assert.strictEqual(actual, expected, [message])assert.notStrictEqual(actual, expected, [message])assert.deepEqual(actual, expected, [message])assert.notDeepEqual(actual, expected, [message])assert.deepStrictEqual(actual, expected, [message])assert.notDeepStrictEqual(actual, expected, [message])assert.fail([message])assert.fail(actual, expected, message, operator)assert.throws(block, [error], [message])assert.doesNotThrow(block, [message])assert.rejects(asyncFn, [error], [message])assert.doesNotReject(asyncFn, [error], [message])assert.ifError(value)console.assert(value, [message])
babel-plugin-unassert also removes assert variable declarations,
var assert = require("assert")var assert = require("assert").strictvar assert = require("power-assert")var assert = require("power-assert").strictimport assert from "assert"import assert from "power-assert"
and assignments.
assert = require("assert")assert = require("assert").strictassert = require("power-assert")assert = require("power-assert").strict
We support Node under maintenance. In other words, we stop supporting old Node version when their maintenance ends.
This means that any other environment is not supported.
NOTE: If babel-plugin-unassert works in any of the unsupported environments, it is purely coincidental and has no bearing on future compatibility. Use at your own risk.
Licensed under the MIT license.
