generate-function 2.0.0

Module that helps you write generated functions in Node

Homepage: https://github.com/mafintosh/generate-function

Platform: npm

Language: JavaScript

License: MIT

Keywords: generate, code, generation, function, performance

View on registry: https://www.npmjs.com/package/generate-function

Direct download link: https://registry.npmjs.org/generate-function/-/generate-function-2....

Install: npm install [email protected]


generate-function

Module that helps you write generated functions in Node

npm install generate-function

build status

Disclamer

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).

Usage

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))

Related

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

License

MIT

Sustain

Releases

2.0.0 August 21, 2014
1.1.0 August 01, 2014
1.0.3 August 01, 2014
1.0.2 July 30, 2014
1.0.1 July 30, 2014
1.0.0 July 30, 2014
0.0.0 July 30, 2014

Project Statistics

SourceRank 19
Dependencies 0
Dependent projects 40
Dependent repositories 13.8K
Total releases 7
Latest release
First release
Stars 38
Forks 3
Watchers 1
Contributors 1
Repo Size: 168 KB

Top Contributors See all

Mathias Buus

Something wrong with this page? Make a suggestion

Export .ABOUT file for this library

Last synced: 2017-04-21 14:05:30 UTC

Login to resync this project