Module that helps you write generated functions in Node
JavaScript
78
30 commits
updated Jun 14, 2024
Module that helps you write generated functions in Node
npm install generate-function
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).
const genfun = require('generate-function')
const { d } = genfun.formats
function addNumber (val) {
const gen = genfun()
gen(`
function add (n) {
return n + ${d(val)} // supports format strings to insert values
}
`)
return gen.toFunction() // will compile the function
}
const 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)
function multiply (a, b) {
return a * b
}
function addAndMultiplyNumber (val) {
const gen = genfun()
gen(`
function (n) {
if (typeof n !== 'number') {
throw new Error('argument should be a number')
}
const result = multiply(${d(val)}, n + ${d(val)})
return result
}
`)
// use gen.toString() if you want to see the generated source
return gen.toFunction({multiply})
}
const addAndMultiply2 = addAndMultiplyNumber(2)
console.log(addAndMultiply2.toString())
console.log('(3 + 2) * 2 =', addAndMultiply2(3))
You can call gen(src) as many times as you want to append more source code to the function.
If you need a unique safe identifier for the scope of the generated function call str = gen.sym('friendlyName').
These are safe to use for variable names etc.
If you need to access an object property use the str = gen.property('objectName', 'propertyName').
This returns 'objectName.propertyName' if propertyName is safe to use as a variable. Otherwise
it returns objectName[propertyNameAsString].
If you only pass gen.property('propertyName') it will only return the propertyName part safely
MIT
Overall
Maintained
Code review
Latest release
Releases this year
Module that helps you write generated functions in Node
JavaScript
78
30 commits
updated Jun 14, 2024
Module that helps you write generated functions in Node
npm install generate-function
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).
const genfun = require('generate-function')
const { d } = genfun.formats
function addNumber (val) {
const gen = genfun()
gen(`
function add (n) {
return n + ${d(val)} // supports format strings to insert values
}
`)
return gen.toFunction() // will compile the function
}
const 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)
function multiply (a, b) {
return a * b
}
function addAndMultiplyNumber (val) {
const gen = genfun()
gen(`
function (n) {
if (typeof n !== 'number') {
throw new Error('argument should be a number')
}
const result = multiply(${d(val)}, n + ${d(val)})
return result
}
`)
// use gen.toString() if you want to see the generated source
return gen.toFunction({multiply})
}
const addAndMultiply2 = addAndMultiplyNumber(2)
console.log(addAndMultiply2.toString())
console.log('(3 + 2) * 2 =', addAndMultiply2(3))
You can call gen(src) as many times as you want to append more source code to the function.
If you need a unique safe identifier for the scope of the generated function call str = gen.sym('friendlyName').
These are safe to use for variable names etc.
If you need to access an object property use the str = gen.property('objectName', 'propertyName').
This returns 'objectName.propertyName' if propertyName is safe to use as a variable. Otherwise
it returns objectName[propertyNameAsString].
If you only pass gen.property('propertyName') it will only return the propertyName part safely
MIT
Overall
Maintained
Code review
Latest release
Releases this year