Encourage reliable programming by writing assertions in production code, and compiling them away from release.
See: "unassert - encourage reliable programming by writing assertions in production" -- talk at NodeFest 2015.
- unassertify: Browserify transform for unassert
- babel-plugin-unassert: Babel plugin for unassert
- webpack-unassert-loader: Webpack loader for unassert
- gulp-unassert: Gulp plugin for unassert
- unassert-cli: CLI for unassert
$ npm install --save-dev unassert
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;
}Apply unassert then generate modified code to console.
var esprima = require('esprima');
var escodegen = require('escodegen');
var unassert = require('unassert');
var fs = require('fs');
var path = require('path');
var filepath = path.join(__dirname, 'math.js');
var ast = esprima.parse(fs.readFileSync(filepath));
var modifiedAst = unassert(ast);
console.log(escodegen.generate(modifiedAst));Then you will see assert calls disappear.
'use strict';
function add(a, b) {
return a + b;
}Note: unassert supports removal of power-assert declarations (var assert = require('power-assert');) too.
Assertion expressions are removed when they match patterns below. In other words, 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(actual, expected, message, operator)assert.throws(block, [error], [message])assert.doesNotThrow(block, [message])assert.ifError(value)console.assert(value, [message])
unassert also removes assert variable declarations,
var assert = require("assert")var assert = require("power-assert")import assert from "assert"import assert from "power-assert"import * as assert from "assert"import * as assert from "power-assert"
and assignments.
assert = require("assert")assert = require("power-assert")
Licensed under the MIT license.