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 babel-plugin-unassert@1.2.0
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").strict
var assert = require("power-assert")
var assert = require("power-assert").strict
import assert from "assert"
import assert from "power-assert"
and assignments.
assert = require("assert")
assert = require("assert").strict
assert = 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.