funex

0.2.2 • Public • Published

Funex

Javascript utility for secure evaluation of functional expressions.

Example usage:

result = funex("members[id].name.fullname()", model);

Features

  • Expressions are evaluated and executed in a controlled and secure scope
  • Minified source is around 2k
  • Supports function calls, dot notation, array/object members, strings, numbers
  • Use array of objects to simulate closures.
  • The syntax is a familiar subset of javascript
  • Simple because it is logic-less: no operators, statements or boolean logic.
  • Throws readable syntax errors
  • Runs both in browser and on the server
  • No complex api or configuration, a single function to use
  • Compiled expressions can be cached and reused
  • Minimal overhead compared to native code
  • Extensive test suite and benchmarking
  • Open source and maintained on Github

Usefull for ...

  • Resolving richer but secure expressions in templating engines
  • Scenarios where third parties can customize portion of your apps without compromising security
  • To allow secure macros in extendable apps
  • For computable values in configurable apps

Installation

For now it is a single "funex.js" file, but it should soon be on node npm

Usage

// Declare a context with the allowed data
context = {
	dogs : {
		names: ["fido", "ricky"],
	}
	join: function (a, b) { return a+"-"+b }
}

// Compile the expression into a function
fn = funex("join(dogs.names[0], dogs.name[1])");

// Call the function with a context
var value = fn(context);

Usage with closures

// Declare the context with an array of objects with item 0 being the top most frame
context = [
	{
		dogs : {
			names: ["fido", "ricky"],
		}
	},
	{
		join: function (a, b) { return a+"-"+b }
	}
]

// Compile the expression into a function
fn = funex("join(dogs.names[0], dogs.name[1])");

// Call the function with a context
var value = fn(context);

Roadmap

  • Support evaluation of async expressions with a standard callback
  • npm installation
  • Test coverage report
  • Detailed syntax documentation
  • A pretty web-site

Readme

Keywords

none

Package Sidebar

Install

npm i funex

Weekly Downloads

1

Version

0.2.2

License

none

Last publish

Collaborators

  • masyl
  • pmgodin