Skip to content

Commit

Permalink
Fixed issue patriksimek#41
Browse files Browse the repository at this point in the history
  • Loading branch information
bmewj committed Aug 18, 2016
1 parent ea814e5 commit 302e910
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 43 deletions.
22 changes: 22 additions & 0 deletions lib/VMError.js
@@ -0,0 +1,22 @@
/**
* VMError.
*
* @param {String} message Error message.
*
* @class
* @extends {Error}
* @property {String} stack Call stack.
* @property {String} message Error message.
*/

class VMError extends Error {
constructor(message) {
super(message);

this.name = 'VMError';

Error.captureStackTrace(this, this.constructor);
}
}

module.exports = VMError;
32 changes: 32 additions & 0 deletions lib/compileToJS.js
@@ -0,0 +1,32 @@
const VMError = require('./VMError')

/**
* Compile code to JS
*
* @param {String} code Code to compile.
* @param {*} compiler Compiler to use.
* @return {String} The compiled code.
*/

const compileToJS = function(code, compiler) {
if ('function' === typeof compiler) return compiler(code);

switch (compiler) {
case 'coffeescript':
case 'coffee-script':
case 'cs':
case 'text/coffeescript':
return require('coffee-script').compile(code, {header: false, bare: true});

case 'javascript':
case 'java-script':
case 'js':
case 'text/javascript':
return code;

default:
throw new VMError(`Unsupported compiler '${compiler}'.`);
}
};

module.exports = compileToJS;
44 changes: 2 additions & 42 deletions lib/main.js
Expand Up @@ -2,31 +2,12 @@ const fs = require('fs');
const vm = require('vm');
const pa = require('path');
const {EventEmitter} = require('events');
const VMError = require('./VMError');
const _compileToJS = require('./compileToJS');

const sb = fs.readFileSync(`${__dirname}/sandbox.js`, 'utf8');
const cf = fs.readFileSync(`${__dirname}/contextify.js`, 'utf8');

const _compileToJS = function(code, compiler) {
if ('function' === typeof compiler) return compiler(code);

switch (compiler) {
case 'coffeescript':
case 'coffee-script':
case 'cs':
case 'text/coffeescript':
return require('coffee-script').compile(code, {header: false, bare: true});

case 'javascript':
case 'java-script':
case 'js':
case 'text/javascript':
return code;

default:
throw new VMError(`Unsupported compiler '${compiler}'.`);
}
};

/**
* Class VM.
*
Expand Down Expand Up @@ -356,27 +337,6 @@ class NodeVM extends EventEmitter {
}
}

/**
* VMError.
*
* @param {String} message Error message.
*
* @class
* @extends {Error}
* @property {String} stack Call stack.
* @property {String} message Error message.
*/

class VMError extends Error {
constructor(message) {
super(message);

this.name = 'VMError';

Error.captureStackTrace(this, this.constructor);
}
}

exports.VMError = VMError;
exports.NodeVM = NodeVM;
exports.VM = VM;
5 changes: 4 additions & 1 deletion lib/sandbox.js
Expand Up @@ -2,6 +2,7 @@ const {Script} = host.require('vm');
const fs = host.require('fs');
const pa = host.require('path');
const console = host.console;
const compileToJS = host.require('./compileToJS');

const BUILTIN_MODULES = host.process.binding('natives');
const JSON_PARSE = JSON.parse;
Expand Down Expand Up @@ -47,7 +48,9 @@ return ((vm, host) => {
} else {
try {
// Load module
var code = `(function (exports, require, module, __filename, __dirname) { 'use strict'; ${fs.readFileSync(filename, "utf8")} \n});`;
var code = fs.readFileSync(filename, "utf8");
code = compileToJS(code, vm.options.compiler);
code = `(function (exports, require, module, __filename, __dirname) { 'use strict'; ${code} \n});`;

// Precompile script
let script = new Script(code, {
Expand Down

0 comments on commit 302e910

Please sign in to comment.