UNPKG

1.38 kBtext/coffeescriptView Raw
1BuiltinModule = require 'module'
2assert = (require 'assert').ok
3vm = require 'vm'
4
5NativeModule = do (natives = Object.keys process.binding 'natives') ->
6 exists: (name) -> name in natives
7
8wrapper = require './wrapper'
9Sandbox = require './Sandbox'
10
11class Module extends BuiltinModule
12 require: (path) ->
13 assert typeof path is 'string', 'path must be a string'
14 assert path, 'missing path'
15
16 if path is 'gulp'
17 return wrapper
18
19 if path is 'gulp-util'
20 return wrapper.util
21
22 filename = BuiltinModule._resolveFilename path, @
23 if NativeModule.exists filename
24 return BuiltinModule._load.call @, path, @
25
26 cached = BuiltinModule._cache[filename]
27 if cached
28 return cached.exports
29
30 BuiltinModule._cache[filename] = module = new Module(filename, @)
31
32 hadException = yes
33 try
34 module.load filename
35 hadException = false
36 finally
37 if hadException
38 delete BuiltinModule._cache[filename]
39
40 return module.exports
41
42 load: (filename) ->
43 BuiltinModule.prototype.load.call @, filename
44
45 _compile: (content, filename) ->
46 self = @
47 content = content.replace /^\#\!.*/, ''
48
49 sandbox = new Sandbox({
50 filename
51 module: self
52 imports: {gulp: wrapper}
53 })
54
55 vm.runInNewContext content, sandbox, filename
56
57module.exports = Module
\No newline at end of file