Skip to content

Commit f2a6439

Browse files
authored
Merge pull request webpack#4831 from Orlandster98/es6-refactoring
ES6 refactor of NodeSourcePlugin
2 parents 3acaf94 + 5e1cedf commit f2a6439

File tree

1 file changed

+72
-70
lines changed

1 file changed

+72
-70
lines changed

lib/node/NodeSourcePlugin.js

Lines changed: 72 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2,83 +2,85 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var AliasPlugin = require("enhanced-resolve/lib/AliasPlugin");
6-
var ParserHelpers = require("../ParserHelpers");
7-
var nodeLibsBrowser = require("node-libs-browser");
5+
"use strict";
6+
const AliasPlugin = require("enhanced-resolve/lib/AliasPlugin");
7+
const ParserHelpers = require("../ParserHelpers");
8+
const nodeLibsBrowser = require("node-libs-browser");
89

9-
function NodeSourcePlugin(options) {
10-
this.options = options;
11-
}
12-
module.exports = NodeSourcePlugin;
13-
NodeSourcePlugin.prototype.apply = function(compiler) {
14-
var options = this.options;
15-
16-
function getPathToModule(module, type) {
17-
if(type === true || (type === undefined && nodeLibsBrowser[module])) {
18-
if(!nodeLibsBrowser[module]) throw new Error("No browser version for node.js core module '" + module + "' available");
19-
return nodeLibsBrowser[module];
20-
} else if(type === "mock") {
21-
return require.resolve("node-libs-browser/mock/" + module);
22-
} else if(type === "empty") {
23-
return require.resolve("node-libs-browser/mock/empty");
24-
} else return module;
10+
module.exports = class NodeSourcePlugin {
11+
constructor(options) {
12+
this.options = options;
2513
}
14+
apply(compiler) {
15+
const options = this.options;
2616

27-
function addExpression(parser, name, module, type, suffix) {
28-
suffix = suffix || "";
29-
parser.plugin("expression " + name, function() {
30-
if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
31-
var mockModule = ParserHelpers.requireFileAsExpression(this.state.module.context, getPathToModule(module, type));
32-
return ParserHelpers.addParsedVariableToModule(this, name, mockModule + suffix);
33-
});
34-
}
17+
function getPathToModule(module, type) {
18+
if(type === true || (type === undefined && nodeLibsBrowser[module])) {
19+
if(!nodeLibsBrowser[module]) throw new Error(`No browser version for node.js core module ${module} available`);
20+
return nodeLibsBrowser[module];
21+
} else if(type === "mock") {
22+
return require.resolve(`node-libs-browser/mock/${module}`);
23+
} else if(type === "empty") {
24+
return require.resolve("node-libs-browser/mock/empty");
25+
} else return module;
26+
}
3527

36-
compiler.plugin("compilation", function(compilation, params) {
37-
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
28+
function addExpression(parser, name, module, type, suffix) {
29+
suffix = suffix || "";
30+
parser.plugin(`expression ${name}`, function() {
31+
if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
32+
const mockModule = ParserHelpers.requireFileAsExpression(this.state.module.context, getPathToModule(module, type));
33+
return ParserHelpers.addParsedVariableToModule(this, name, mockModule + suffix);
34+
});
35+
}
3836

39-
if(parserOptions.node === false)
40-
return;
37+
compiler.plugin("compilation", function(compilation, params) {
38+
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
4139

42-
var localOptions = options;
43-
if(parserOptions.node)
44-
localOptions = Object.assign({}, localOptions, parserOptions.node);
40+
if(parserOptions.node === false)
41+
return;
4542

46-
if(localOptions.global) {
47-
parser.plugin("expression global", function() {
48-
var retrieveGlobalModule = ParserHelpers.requireFileAsExpression(this.state.module.context, require.resolve("../../buildin/global.js"));
49-
return ParserHelpers.addParsedVariableToModule(this, "global", retrieveGlobalModule);
50-
});
51-
}
52-
if(localOptions.process) {
53-
var processType = localOptions.process;
54-
addExpression(parser, "process", "process", processType);
55-
}
56-
if(localOptions.console) {
57-
var consoleType = localOptions.console;
58-
addExpression(parser, "console", "console", consoleType);
59-
}
60-
var bufferType = localOptions.Buffer;
61-
if(bufferType) {
62-
addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
63-
}
64-
if(localOptions.setImmediate) {
65-
var setImmediateType = localOptions.setImmediate;
66-
addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
67-
addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
68-
}
43+
let localOptions = options;
44+
if(parserOptions.node)
45+
localOptions = Object.assign({}, localOptions, parserOptions.node);
46+
47+
if(localOptions.global) {
48+
parser.plugin("expression global", function() {
49+
const retrieveGlobalModule = ParserHelpers.requireFileAsExpression(this.state.module.context, require.resolve("../../buildin/global.js"));
50+
return ParserHelpers.addParsedVariableToModule(this, "global", retrieveGlobalModule);
51+
});
52+
}
53+
if(localOptions.process) {
54+
const processType = localOptions.process;
55+
addExpression(parser, "process", "process", processType);
56+
}
57+
if(localOptions.console) {
58+
const consoleType = localOptions.console;
59+
addExpression(parser, "console", "console", consoleType);
60+
}
61+
const bufferType = localOptions.Buffer;
62+
if(bufferType) {
63+
addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
64+
}
65+
if(localOptions.setImmediate) {
66+
const setImmediateType = localOptions.setImmediate;
67+
addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
68+
addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
69+
}
70+
});
6971
});
70-
});
71-
compiler.plugin("after-resolvers", function(compiler) {
72-
Object.keys(nodeLibsBrowser).forEach(function(lib) {
73-
if(options[lib] !== false) {
74-
compiler.resolvers.normal.apply(
75-
new AliasPlugin("described-resolve", {
76-
name: lib,
77-
onlyModule: true,
78-
alias: getPathToModule(lib, options[lib])
79-
}, "resolve")
80-
);
81-
}
72+
compiler.plugin("after-resolvers", (compiler) => {
73+
Object.keys(nodeLibsBrowser).forEach((lib) => {
74+
if(options[lib] !== false) {
75+
compiler.resolvers.normal.apply(
76+
new AliasPlugin("described-resolve", {
77+
name: lib,
78+
onlyModule: true,
79+
alias: getPathToModule(lib, options[lib])
80+
}, "resolve")
81+
);
82+
}
83+
});
8284
});
83-
});
85+
}
8486
};

0 commit comments

Comments
 (0)