Nemo's Parental Misguidance

    deval

    0.1.1 • Public • Published

    deval

    If eval takes a string representing code, and turns it into actual code, deval takes actual code, and returns a string representation of it.

    Installing

    Browserify/node/commonjs compatible:

    npm install deval
    

    Why?

    Sometimes you're doing fun/evil/interesting things, and you want a block of code as a multiline string. But doing this is super annoying:

     
    var codeString = [
      "var foo = 'bar'",
      "function stuff () {",
      "  console.log('The thing is \"10\"');"
      "}"
    ].join('\n');

    Quotes everywhere, keeping track of indentation is a pian if you want it properly formatted, no syntax highlighting, bleurgh.

    Deval makes it look like this:

    var deval = require('deval');
     
    var codeString = deval(function () {
        var foo = 'bar';
        function stuff () {
            console.log('The thing is "10"');
        }
    });
    //codeString -> "var foo = 'bar';\nfunction stuff () {\n    console.log('The thing is \"10\"');\n}"

    It even figures out what indentation you meant and cleans that up.

    Usage

    Basic

    Call deval with a function containing the code you want to get back as a string. The function wrapper will be removed.

    var deval = require('deval');
     
    var codeString = deval(function () {
        var foo = 'bar';
        function stuff () {
            console.log('The thing is "10"');
        }
    });
     
    //codeString will be:
    //    "var foo = 'bar';
    //    function stuff () {
    //        console.log('The thing is \"10\"');
    //    }"

    Advanced

    Sometimes you want to interpolate strings/numbers/etc into your generated code. You can't just use normal scoping rules, because this code won't be executed in the current scope. So instead you can do a little templating magic.

    To interpolate:

    • Name some positional arguments in the function you pass to deval: deval(function (arg1, arg2) { ...
    • Insert them where you want them in your code by wrapping in dollars: $arg1$
    • Pass the values of those arguments as additional arguments to deval itself. deval(function (arg, arg2) { ... }, "one", 2)

    Example

    var codeString = deval(function (foo, bar) {
        var thing = $bar$;
        console.log('$foo$');
        console.log(thing);
    }, "hi", 5);
     
    //codeString will be:
    //    "var thing = 5;
    //    console.log('hi');
    //    console.log(thing)"

    note: Don't try to be too clever with this, and if you're passing strings, you'll want to wrap them in quotes inside the code block, as shown about for "hi" -> '$foo$'

    License

    MIT

    Keywords

    none

    Install

    npm i deval

    DownloadsWeekly Downloads

    6

    Version

    0.1.1

    License

    MIT

    Last publish

    Collaborators

    • avatar