tart-vm

Tart behavior sandbox

tart-vm

Stability: 1 - Experimental

Tiny Actor Run-Time in JavaScript behavior sandbox.

Tart behavior sandbox.

To run the below example run:

npm run readme
"use strict";
 
var fs = require('fs');
var path = require('path');
var tart = require('tart');
var vm = require('../index.js');
 
var sponsor = tart.minimal();
 
var ok = sponsor(function okBeh(behavior) {
    var foo = this.sponsor(behavior);
    foo(this.self);
    this.behavior = function printMsg(message) {
        console.log('got message:', message);
    };
});
var ok2 = sponsor(function okBeh(behaviors) {
    var bar = this.sponsor(behaviors.barBeh);
    var baz = this.sponsor(behaviors.bazBeh);
    bar(this.self);
    baz(this.self);
    this.behavior = function printMsg(message) {
        console.log('got message:', message);
    };
});
 
var moduleString = fs.readFileSync(
        path.normalize(path.join(__dirname, 'module.js')));
var module2String = fs.readFileSync(
        path.normalize(path.join(__dirname, 'module2.js')));
 
var sandbox = sponsor(vm.sandboxBeh);
 
sandbox({ok: ok, module: moduleString});
sandbox({ok: ok2, module: module2String});
 
npm test

Public API

Actor behavior that will sandbox behaviors in the module and return them to ok actor.

Message format:

  • fail: Actor function (error) {} Optional actor to receive any errors.
  • module: String Module that exports behaviors using module.exports or exports.
  • ok: Actor function (response) {} Actor to receive created sandboxed behaviors.

Module is a Node.js-like module, except that the only thing available in the global environment is module or exports. Any behavior should be attached to either module.exports or exports. If a single behavior (a function) is exported, that behavior will be sent to ok actor. If module.exports or exports is an object, each key of that object will be treated as a behavior name and the value of that key will be assumed to be a behavior.

For example, given following module:

module.exports = function fooBeh(customer) {
    customer("foo");
};

vm.sandboxBeh will return fooBeh to ok actor.

Given following module:

var behaviors = module.exports = {};
behaviors.foo = function fooBeh(customer) {
    customer("foo");
};
behaviors.bar = function barBeh(customer) {
    customer("bar");
};

vm.sandboxBeh will return an object to ok actor that is structured like:

{
    foo: fooBeh,
    bar: barBeh
}