function-to-string

Extract parameters and body of a function into strings

Usage no npm install needed!

<script type="module">
  import functionToString from 'https://cdn.skypack.dev/function-to-string';
</script>

README

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'
}

Documentation

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

functionToString(fn)
/**
 * Parses function into AST, extracts parameters and body, and returns information
 * @param {Function} fn Function to parse
 * @returns {Object} retObj
 * @returns {String} retObj.name 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'

Donating

Support this project and others by twolfson via gittip.

Support via Gittip

Contributing

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.

Unlicense

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.