jsdoc-contracts

Simple design by contracts system expressed using jsdoc.

$ npm install -g jsdoc-contracts

In your code:

/**
 * Decrement a number by a given amount which defaults to 1
 * 
 * @param {Number} i   Number to be decremented
 * @param {Number} [n] How much to take away from i, defaults to 1
 * @pre i > 0
 * 
 * @returns {Number}
 * @post ##out## > 0
 */
function dec(in) {
   n = n || 1;
   return i - n;
}

Would generate:

function dec(in) {
    if (!(typeof i === "number")) {
        throw new Error(...);
    } else if (!== undefined && !(typeof n === "number")) {
        throw new Error(...);
    } else if (!(> 0)) {
        throw new Error(...);
    } else {
        n = n || 1;
        {
            var ___return = i - n;
            if (!(typeof ___return === "number")) {
                throw new Error(...);
            } else if (!(___return > 0)) {
                throw new Error(...);
            } else {
                return ___return;
            }
        }
    }
}
 

To do the transformation execute the following after installing

$ contracts <file>
$ contracts <file> > out.js