diff --git a/src/loadNode.js b/src/loadNode.js index b4a62513..fa2671d1 100644 --- a/src/loadNode.js +++ b/src/loadNode.js @@ -1,18 +1,28 @@ -var context = require('vm').createContext({ +var fs = require('fs'), + vm = require('vm'), + path = require('path'); + +// Create the context within which we will run the source files: +var context = vm.createContext({ options: { server: true, version: 'dev' }, + // Node Canvas library: https://github.com/learnboost/node-canvas Canvas: require('canvas'), + // Copy over global variables: console: console, require: require, + __dirname: __dirname, + __filename: __filename, + // Used to load and run source files within the same context: include: function(uri) { - var source = require('fs').readFileSync(__dirname + '/' + uri); - // For relative includes, we save the current directory and then add - // the uri directory to __dirname: + var source = fs.readFileSync(path.resolve(__dirname, uri), 'utf8'); + // For relative includes, we save the current directory and then + // add the uri directory to __dirname: var oldDirname = __dirname; - __dirname = __dirname + '/' + uri.replace(/[^/]+$/, ''); - require('vm').runInContext(source, context, uri); + __dirname = path.resolve(__dirname, path.dirname(uri)); + vm.runInContext(source, context, uri); __dirname = oldDirname; } }); @@ -28,4 +38,14 @@ context.Base.each(context, function(val, key) { }); context.PaperScope.prototype['Canvas'] = context.Canvas; +require.extensions['.pjs'] = function(module, uri) { + var source = context.PaperScript.compile(fs.readFileSync(uri, 'utf8')); + var envVars = 'var __dirname = \'' + path.dirname(uri) + '\';' + + 'var __filename = \'' + uri + '\';'; + vm.runInContext(envVars, context); + var scope = new context.PaperScope(); + context.PaperScript.evaluate(source, scope); + module.exports = scope; +}; + module.exports = new context.PaperScope(); \ No newline at end of file