postmanlabs/uniscope

Name: uniscope

Owner: Postman

Description: Evaluate a code within a controlled environment

Created: 2016-10-02 15:11:55.0

Updated: 2018-05-22 19:33:55.0

Pushed: 2018-05-22 19:33:56.0

Homepage: null

Size: 232

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

uniscope

The goal of this module is to provide a uniform execution environment to a JavaScript code between browser and NodeJS. For example, global functions and objects in NodeJS such as setImmediate and global is not easily available to the script. And on the other hand, browser specific global properties such as requestAnimationFrame and window is not available as well.

What this module does NOT do

Please read this carefully to avoid any ambiguity during adopting this module.

Usage
ample inside NodeJS
Scope = require('scope'), // use browserify or requireJS in browser!
myscope;

reate a new scope
ope = new Scope(globals, { // `globals` will be `window` in browser
eval: false, // specify whether eval is available inside sandbox
console: false, // specify whether native console is available
strict: false, // specify whether to run the script in strict mode
ignore: ['require'], // specify a list of global variables to ignore and pass-through to the script
block: ['process'] // specify a list of variables that should be blocked from being accessed
 // provide an object with globals to be made available to the scripts
myGlobalVarName: "sample"


et a specific variable as global
ope.set('logger', function (msg) {
console.log(msg);


ow run a script
ope.exec('logger(myGlobalVarName)', function (err) {
err ? console.error(err.stack || err) : console.log('execution complete');

Running a script that is asynchronous

An asynchronous script will require an explicit call of a global function __exitscope. Note that setTimeout and setInterval are not injected by default. You can easily do it yourself.

ope.set('setTimeout', global.setTimeout); // inject setTimeout

ote the 2nd parameter is set to `true` for async
ope.exec('setTimeout(function () { __exitscope(null); }, 1000)', true, function (err) {
err ? console.error(err.stack || err) : console.log('execution complete');

API
List of allowed Globals

These are the list of globals available to scripts in the scope

'Array', 'ArrayBuffer', 'Buffer', 'Boolean', 'DataView', 'Date', 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'Error', 'escape', 'EvalError', 'Float32Array', 'Float64Array', 'Function', 'Infinity', 'Int8Array', 'Int16Array', 'Int32Array', 'isFinite', 'isNaN', 'JSON', 'Map', 'Math', 'NaN', 'Number', 'Object', 'parseFloat', 'parseInt', 'Proxy', 'Promise', 'RangeError', 'ReferenceError', 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'SyntaxError', 'TypeError', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'undefined', 'unescape', 'URIError', 'WeakMap', 'WeakSet'


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.