Skip to content

Commit b423a15

Browse files
committed
Refactor(ES6): EvalSourceMapDevToolModuleTemplatePlugin
1 parent 045219e commit b423a15

File tree

1 file changed

+65
-60
lines changed

1 file changed

+65
-60
lines changed

lib/EvalSourceMapDevToolModuleTemplatePlugin.js

Lines changed: 65 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,68 +2,73 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var RawSource = require("webpack-sources").RawSource;
6-
var ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
5+
"use strict";
76

8-
function EvalSourceMapDevToolModuleTemplatePlugin(compilation, options) {
9-
this.compilation = compilation;
10-
this.sourceMapComment = options.append || "//# sourceMappingURL=[url]";
11-
this.moduleFilenameTemplate = options.moduleFilenameTemplate || "webpack:///[resource-path]?[hash]";
12-
this.options = options;
13-
}
14-
module.exports = EvalSourceMapDevToolModuleTemplatePlugin;
7+
const RawSource = require("webpack-sources").RawSource;
8+
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
159

16-
EvalSourceMapDevToolModuleTemplatePlugin.prototype.apply = function(moduleTemplate) {
17-
var self = this;
18-
var options = this.options;
19-
moduleTemplate.plugin("module", function(source, module) {
20-
if(source.__EvalSourceMapDevToolData)
21-
return source.__EvalSourceMapDevToolData;
22-
var sourceMap;
23-
var content;
24-
if(source.sourceAndMap) {
25-
var sourceAndMap = source.sourceAndMap(options);
26-
sourceMap = sourceAndMap.map;
27-
content = sourceAndMap.source;
28-
} else {
29-
sourceMap = source.map(options);
30-
content = source.source();
31-
}
32-
if(!sourceMap) {
33-
return source;
34-
}
10+
class EvalSourceMapDevToolModuleTemplatePlugin {
11+
constructor(compilation, options) {
12+
this.compilation = compilation;
13+
this.sourceMapComment = options.append || "//# sourceMappingURL=[url]";
14+
this.moduleFilenameTemplate = options.moduleFilenameTemplate || "webpack:///[resource-path]?[hash]";
15+
this.options = options;
16+
}
17+
18+
apply(moduleTemplate) {
19+
const self = this;
20+
const options = this.options;
21+
moduleTemplate.plugin("module", function(source, module) {
22+
if(source.__EvalSourceMapDevToolData)
23+
return source.__EvalSourceMapDevToolData;
24+
let sourceMap;
25+
let content;
26+
if(source.sourceAndMap) {
27+
const sourceAndMap = source.sourceAndMap(options);
28+
sourceMap = sourceAndMap.map;
29+
content = sourceAndMap.source;
30+
} else {
31+
sourceMap = source.map(options);
32+
content = source.source();
33+
}
34+
if(!sourceMap) {
35+
return source;
36+
}
37+
38+
// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
39+
sourceMap = Object.keys(sourceMap).reduce(function(obj, key) {
40+
obj[key] = sourceMap[key];
41+
return obj;
42+
}, {});
43+
const modules = sourceMap.sources.map(function(source) {
44+
const module = self.compilation.findModule(source);
45+
return module || source;
46+
});
47+
let moduleFilenames = modules.map(function(module) {
48+
return ModuleFilenameHelpers.createFilename(module, self.moduleFilenameTemplate, this.requestShortener);
49+
}, this);
50+
moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, function(filename, i, n) {
51+
for(let j = 0; j < n; j++)
52+
filename += "*";
53+
return filename;
54+
});
55+
sourceMap.sources = moduleFilenames;
56+
if(sourceMap.sourcesContent) {
57+
sourceMap.sourcesContent = sourceMap.sourcesContent.map(function(content, i) {
58+
return `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], this.requestShortener)}`;
59+
}, this);
60+
}
61+
sourceMap.sourceRoot = options.sourceRoot || "";
62+
sourceMap.file = `${module.id}.js`;
3563

36-
// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
37-
sourceMap = Object.keys(sourceMap).reduce(function(obj, key) {
38-
obj[key] = sourceMap[key];
39-
return obj;
40-
}, {});
41-
var modules = sourceMap.sources.map(function(source) {
42-
var module = self.compilation.findModule(source);
43-
return module || source;
64+
const footer = self.sourceMapComment.replace(/\[url\]/g, `data:application/json;charset=utf-8;base64,${new Buffer(JSON.stringify(sourceMap), "utf8").toString("base64")}`); //eslint-disable-line
65+
source.__EvalSourceMapDevToolData = new RawSource(`eval(${JSON.stringify(content + footer)});`);
66+
return source.__EvalSourceMapDevToolData;
4467
});
45-
var moduleFilenames = modules.map(function(module) {
46-
return ModuleFilenameHelpers.createFilename(module, self.moduleFilenameTemplate, this.requestShortener);
47-
}, this);
48-
moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, function(filename, i, n) {
49-
for(var j = 0; j < n; j++)
50-
filename += "*";
51-
return filename;
68+
moduleTemplate.plugin("hash", function(hash) {
69+
hash.update("eval-source-map");
70+
hash.update("1");
5271
});
53-
sourceMap.sources = moduleFilenames;
54-
if(sourceMap.sourcesContent) {
55-
sourceMap.sourcesContent = sourceMap.sourcesContent.map(function(content, i) {
56-
return content + "\n\n\n" + ModuleFilenameHelpers.createFooter(modules[i], this.requestShortener);
57-
}, this);
58-
}
59-
sourceMap.sourceRoot = options.sourceRoot || "";
60-
sourceMap.file = module.id + ".js";
61-
var footer = self.sourceMapComment.replace(/\[url\]/g, "data:application/json;charset=utf-8;base64," + new Buffer(JSON.stringify(sourceMap), "utf8").toString("base64")); //eslint-disable-line
62-
source.__EvalSourceMapDevToolData = new RawSource("eval(" + JSON.stringify(content + footer) + ");");
63-
return source.__EvalSourceMapDevToolData;
64-
});
65-
moduleTemplate.plugin("hash", function(hash) {
66-
hash.update("eval-source-map");
67-
hash.update("1");
68-
});
69-
};
72+
}
73+
}
74+
module.exports = EvalSourceMapDevToolModuleTemplatePlugin;

0 commit comments

Comments
 (0)