Skip to content

Commit 7a1630b

Browse files
committed
refactor: collapse several array iterators into single reduce
1 parent 2635aac commit 7a1630b

1 file changed

Lines changed: 60 additions & 43 deletions

File tree

lib/SourceMapDevToolPlugin.js

Lines changed: 60 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,37 @@ const basename = (name) => {
1717
return name.substr(name.lastIndexOf("/") + 1);
1818
};
1919

20+
function getTaskForFile(file, chunk, options, compilation) {
21+
const asset = compilation.assets[file];
22+
if(asset.__SourceMapDevToolFile === file && asset.__SourceMapDevToolData) {
23+
const data = asset.__SourceMapDevToolData;
24+
for(const cachedFile in data) {
25+
compilation.assets[cachedFile] = data[cachedFile];
26+
if(cachedFile !== file)
27+
chunk.files.push(cachedFile);
28+
}
29+
return;
30+
}
31+
let source, sourceMap;
32+
if(asset.sourceAndMap) {
33+
const sourceAndMap = asset.sourceAndMap(options);
34+
sourceMap = sourceAndMap.map;
35+
source = sourceAndMap.source;
36+
} else {
37+
sourceMap = asset.map(options);
38+
source = asset.source();
39+
}
40+
if(sourceMap) {
41+
return {
42+
chunk,
43+
file,
44+
asset,
45+
source,
46+
sourceMap
47+
};
48+
}
49+
}
50+
2051
class SourceMapDevToolPlugin {
2152
constructor(options) {
2253
if(arguments.length > 1)
@@ -43,57 +74,43 @@ class SourceMapDevToolPlugin {
4374
const requestShortener = new RequestShortener(compiler.context);
4475
const options = this.options;
4576
options.test = options.test || /\.(js|css)($|\?)/i;
77+
78+
const matchObject = ModuleFilenameHelpers.matchObject.bind(undefined, options);
79+
4680
compiler.plugin("compilation", compilation => {
4781
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
82+
4883
compilation.plugin("after-optimize-chunk-assets", function(chunks) {
4984
const moduleToSourceNameMapping = new Map();
50-
const tasks = [];
85+
let tasks = [];
86+
5187
chunks.forEach(function(chunk) {
52-
chunk.files.filter(ModuleFilenameHelpers.matchObject.bind(undefined, options)).map(function(file) {
53-
const asset = compilation.assets[file];
54-
if(asset.__SourceMapDevToolFile === file && asset.__SourceMapDevToolData) {
55-
const data = asset.__SourceMapDevToolData;
56-
for(const cachedFile in data) {
57-
compilation.assets[cachedFile] = data[cachedFile];
58-
if(cachedFile !== file)
59-
chunk.files.push(cachedFile);
60-
}
61-
return;
62-
}
63-
let source, sourceMap;
64-
if(asset.sourceAndMap) {
65-
const sourceAndMap = asset.sourceAndMap(options);
66-
sourceMap = sourceAndMap.map;
67-
source = sourceAndMap.source;
68-
} else {
69-
sourceMap = asset.map(options);
70-
source = asset.source();
71-
}
72-
if(sourceMap) {
73-
return {
74-
chunk,
75-
file,
76-
asset,
77-
source,
78-
sourceMap
79-
};
80-
}
81-
}).filter(Boolean).map(task => {
82-
const modules = task.sourceMap.sources.map(source => {
83-
const module = compilation.findModule(source);
84-
return module || source;
85-
});
86-
for(const module of modules) {
87-
if(!moduleToSourceNameMapping.get(module)) {
88-
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, moduleFilenameTemplate, requestShortener));
88+
tasks = chunk.files.reduce((queue, file) => {
89+
if(matchObject(file)) {
90+
const task = getTaskForFile(file, chunk, options, compilation);
91+
92+
if(task) {
93+
const modules = task.sourceMap.sources.map(source => {
94+
const module = compilation.findModule(source);
95+
return module || source;
96+
});
97+
98+
for(const module of modules) {
99+
if(!moduleToSourceNameMapping.get(module)) {
100+
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, moduleFilenameTemplate, requestShortener));
101+
}
102+
}
103+
104+
task.modules = modules;
105+
106+
queue.push(task);
89107
}
90108
}
91-
task.modules = modules;
92-
return task;
93-
}).forEach(task => {
94-
tasks.push(task);
95-
});
109+
110+
return queue;
111+
}, tasks);
96112
});
113+
97114
const usedNamesSet = new Set(moduleToSourceNameMapping.values());
98115
const conflictDetectionSet = new Set();
99116

0 commit comments

Comments
 (0)