UNPKG

1.22 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 exports = module.exports
22 Object.defineProperty @, 'exports',
23 get: () -> exports
24 set: (value) ->
25 exports = value
26 Object.defineProperty @, 'require',
27 value: (id) ->
28 module.require.call module, id
29
30 # Add imported globals if they don't override fixed globals
31 for name, prop of imports
32 if not @hasOwnProperty name
33 Object.defineProperty @, name, value: prop
34
35 # Add true globals if they don't override imports
36 for own name, prop of global
37 blacklisted = name in ['Sandbox', 'Module', 'global']
38 if not (@hasOwnProperty name) and not blacklisted
39 Object.defineProperty @, name, value: prop
\No newline at end of file