-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.js
83 lines (73 loc) · 1.38 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// replace requires for electron builtin node modules with window.require
var through = require('through2')
var path = require('path')
var defaultBlacklist = [
'assert',
'buffer',
'child_process',
'cluster',
'console',
'constants',
'crypto',
'dgram',
'dns',
'domain',
'electron',
'events',
'fs',
'http',
'https',
'module',
'net',
'os',
'path',
'punycode',
'querystring',
'readline',
'repl',
'stream',
'_stream_duplex',
'_stream_passthrough',
'_stream_readable',
'_stream_transform',
'_stream_writable',
'string_decoder',
'sys',
'timers',
'tls',
'tty',
'url',
'util',
'vm',
'zlib',
'_process'
]
module.exports = function (file, opts) {
var data = ''
if (!opts) opts = { windowRequire: [] }
var blacklist = defaultBlacklist.concat(opts.windowRequire)
return (path.extname(file) === '.json')
? through()
: through(ondata, onend)
function ondata (d, enc, cb) {
data += d
cb()
}
function onend (cb) {
var replaced = replace(data)
this.push(replaced)
cb()
}
function blacklisted (mod) {
return blacklist.indexOf(mod.replace(/['"]+/g, '')) !== -1
}
function replace (code) {
return code.replace(/\srequire\(([^\)]+)\)/g, function (match, mod) {
if (blacklisted(mod)) {
return ' window.require(' + mod + ')'
} else {
return match
}
})
}
}