Module that helps you write generated functions in Node
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.gitignore first commit Jul 30, 2014
.travis.yml added travis Jul 30, 2014
LICENSE add full license text Aug 21, 2014 fix example Jul 30, 2014
example.js added example file Jul 30, 2014
package.json 2.0.0 Aug 21, 2014
test.js first commit Jul 30, 2014


Module that helps you write generated functions in Node

npm install generate-function

build status


Writing code that generates code is hard. You should only use this if you really, really, really need this for performance reasons (like schema validators / parsers etc).


var genfun = require('generate-function')

var addNumber = function(val) {
  var fn = genfun()
    ('function add(n) {')
      ('return n + %d', val) // supports format strings to insert values

  return fn.toFunction() // will compile the function

var add2 = addNumber(2)

console.log('1+2=', add2(1))
console.log(add2.toString()) // prints the generated function

If you need to close over variables in your generated function pass them to toFunction(scope)

var multiply = function(a, b) {
  return a * b

var addAndMultiplyNumber = function(val) {
  var fn = genfun()
    ('function(n) {')
      ('if (typeof n !== "number") {') // ending a line with { will indent the source
        ('throw new Error("argument should be a number")')
      ('var result = multiply(%d, n+%d)', val, val)
      ('return result')

  // use fn.toString() if you want to see the generated source

  return fn.toFunction({
    multiply: multiply

var addAndMultiply2 = addAndMultiplyNumber(2)

console.log('(3 + 2) * 2 =', addAndMultiply2(3))


See generate-object-property if you need to safely generate code that can be used to reference an object property