UNPKG

1.15 kBtext/coffeescriptView Raw
1path = require 'path'
2
3module.exports = class Sandbox
4 constructor: ({filename, module, imports}) ->
5 self = @
6
7 # Include global as reference to self
8 Object.defineProperty @, 'global',
9 get: () -> @
10 ## init magic constants __filename and __dirname
11 Object.defineProperty @, '__filename',
12 value: filename
13 Object.defineProperty @, '__dirname',
14 value: path.dirname filename
15
16 # Set module
17 Object.defineProperty @, 'module',
18 value: module
19
20 # Add aliases to module fields
21 Object.defineProperty @, 'exports',
22 get: () -> module.exports
23 Object.defineProperty @, 'require',
24 value: (id) ->
25 module.require.call module, id
26
27 # Add imported globals if they don't override fixed globals
28 for name, prop of imports
29 if not @hasOwnProperty name
30 Object.defineProperty @, name, value: prop
31
32 # Add true globals if they don't override imports
33 for own name, prop of global
34 blacklisted = name in ['Sandbox', 'Module', 'global']
35 if not (@hasOwnProperty name) and not blacklisted
36 Object.defineProperty @, name, value: prop
\No newline at end of file