|
2 | 2 | MIT License http://www.opensource.org/licenses/mit-license.php |
3 | 3 | Author Tobias Koppers @sokra |
4 | 4 | */ |
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"); |
8 | 9 |
|
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; |
25 | 13 | } |
| 14 | + apply(compiler) { |
| 15 | + const options = this.options; |
26 | 16 |
|
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 | + } |
35 | 27 |
|
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 | + } |
38 | 36 |
|
39 | | - if(parserOptions.node === false) |
40 | | - return; |
| 37 | + compiler.plugin("compilation", function(compilation, params) { |
| 38 | + params.normalModuleFactory.plugin("parser", function(parser, parserOptions) { |
41 | 39 |
|
42 | | - var localOptions = options; |
43 | | - if(parserOptions.node) |
44 | | - localOptions = Object.assign({}, localOptions, parserOptions.node); |
| 40 | + if(parserOptions.node === false) |
| 41 | + return; |
45 | 42 |
|
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 | + }); |
69 | 71 | }); |
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 | + }); |
82 | 84 | }); |
83 | | - }); |
| 85 | + } |
84 | 86 | }; |
0 commit comments