-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplugin.cjs
107 lines (99 loc) · 3.86 KB
/
plugin.cjs
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
"use strict";
const { ProvidePlugin } = require("webpack");
const filterObject = require("filter-obj");
const path = require("path");
const excludeObjectKeys = (object, excludeKeys) =>
filterObject(object, (key) => !excludeKeys.includes(key));
const resolves = {
//TODO God willing: port child_process, cluster, dns, http2, perf_hooks, v8, worker_threads
buffer: path.resolve(__dirname, "./src/reexports/buffer.js"),
console: path.resolve(__dirname, "./src/reexports/console.js"),
constants: path.resolve(__dirname, "./src/constants.js"),
crypto: path.resolve(__dirname, "./src/crypto.js"),
domain: path.resolve(__dirname, "./src/reexports/domain.js"),
//Events apparently isn't cjs compatible since it's a constructor
events: path.resolve(__dirname, "./src/reexports/events.cjs"),
fs: path.resolve(__dirname, "./src/fs.js"),
http: path.resolve(__dirname, "./src/reexports/http.js"),
https: path.resolve(__dirname, "./src/reexports/https.js"),
//module: path.resolve(__dirname, "./src/module.js"),
net: path.resolve(__dirname, "./src/reexports/net.js"),
os: path.resolve(__dirname, "./src/os.js"),
path: path.resolve(__dirname, "./src/reexports/path.js"),
punycode: path.resolve(__dirname, "./src/reexports/punycode.js"),
process: path.resolve(__dirname, "./src/process.js"),
querystring: path.resolve(__dirname, "./src/reexports/querystring.js"),
readline: path.resolve(__dirname, "./src/readline.js"),
repl: path.resolve(__dirname, "./src/repl.js"),
stream: path.resolve(__dirname, "./src/reexports/stream.cjs"),
_stream_duplex: path.resolve(__dirname, "./src/reexports/_stream_duplex.js"),
_stream_passthrough: path.resolve(
__dirname,
"./src/reexports/_stream_passthrough.js"
),
_stream_readable: path.resolve(
__dirname,
"./src/reexports/_stream_readable.js"
),
_stream_transform: path.resolve(
__dirname,
"./src/reexports/_stream_transform.js"
),
_stream_writable: path.resolve(
__dirname,
"./src/reexports/_stream_writable.js"
),
string_decoder: path.resolve(__dirname, "./src/reexports/string_decoder.js"),
sys: path.resolve(__dirname, "./src/reexports/util.js"),
timers: path.resolve(__dirname, "./src/reexports/timers.js"),
tls: path.resolve(__dirname, "./src/reexports/tls.js"),
tty: path.resolve(__dirname, "./src/reexports/tty.js"),
url: path.resolve(__dirname, "./src/url.js"),
util: path.resolve(__dirname, "./src/reexports/util.js"),
vm: path.resolve(__dirname, "./src/reexports/vm.js"),
zlib: path.resolve(__dirname, "./src/reexports/zlib.js"),
child_process: false,
cluster: false,
dns: false,
http2: false,
perf_hooks: false,
v8: false,
worker_threads: false,
"util_browserify": require.resolve('util/'),
"url_browserify": require.resolve('url/'),
"string_decoder_browserify": require.resolve('string_decoder/'),
"punycode_browserify": require.resolve('punycode/'),
"process_browserify": require.resolve('process/browser'),
"events_browserify": require.resolve('events/'),
"buffer_browserify": require.resolve('buffer/'),
};
module.exports = class NodePolyfillPlugin {
constructor(options = {}) {
this.options = {
excludeAliases: [],
...options,
};
}
apply(compiler) {
compiler.options.plugins.push(
new ProvidePlugin(
excludeObjectKeys(
{
Buffer: [path.resolve(__dirname, "src/buffer/"), "Buffer"],
console: require.resolve("console-browserify"),
process: path.resolve(__dirname, "src/process"),
},
this.options.excludeAliases
)
)
);
compiler.options.resolve.alias = {
...excludeObjectKeys(resolves, this.options.excludeAliases),
...compiler.options.resolve.alias,
};
compiler.options.resolve.fallback = {
...excludeObjectKeys(resolves, this.options.excludeAliases),
...compiler.options.resolve.fallback,
};
}
};