node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »


function-to-string Build status

Extract parameters and body of a function into strings

This was built as part of the gifsockets project to pass arbitrary canvas commands with a callback to a rgba generating PhantomJS server.

Getting Started

Install the module with: npm install function-to-string

var functionToString = require('function-to-string');
functionToString(function hello(world) {
  // This is a comment 
  return 'some text';
// Returns: 
  name: 'hello',
  params: ['world'],
  body: '\n  // This is a comment\n  return \'some text\';\n'


We chose to use esprima over regular expression magic. If you are interested in the regular expression route, checkout AngularJS' source code

functionToString exposes a single function

 * Parses function into AST, extracts parameters and body, and returns information
 * @param {Function|String} fn Function/Source code of function to parse
 * @returns {Object} retObj
 * @returns {String} Name of `fn`
 * @returns {String[]} retObj.params Array of parameters for `fn`
 * @returns {String} retObj.body Content of `fn`

Reconstructing a function

Functions can be reconstructed via the Function constructor:

var info = {
  name: 'hello',
  params: ['world'],
  body: '\n  // This is a comment\n  return \'some text\';\n'
var hello = Function.apply({}, info.params.concat([info.body]));
console.log(hello()); // 'some text'


functionToString accepts function source code as well

// Equivalent to `var fn = (function (hello){return 'world';}).toString()` 
var fn = 'function (hello){return \'world\';}';
// Returns: 
  name: '',
  params: ['hello'],
  body: 'return \'world\';'


Support this project and others by twolfson via gittip.

Support via Gittip


In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via grunt and test via npm test.


As of Nov 16 2013, Todd Wolfson has released this repository and its contents to the public domain.

It has been released under the UNLICENSE.