Skip to content

Commit b33bead

Browse files
authored
Merge pull request webpack#6227 from EugeneHlushko/feature/sourcemapdevtoolplugin-progress
Feature: SourceMapDevToolPlugin progress: wip
2 parents bc7725c + 6d893ad commit b33bead

File tree

1 file changed

+46
-25
lines changed

1 file changed

+46
-25
lines changed

lib/SourceMapDevToolPlugin.js

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,39 +82,58 @@ class SourceMapDevToolPlugin {
8282
compiler.hooks.compilation.tap("SourceMapDevToolPlugin", (compilation) => {
8383
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
8484

85-
compilation.hooks.afterOptimizeChunkAssets.tap("SourceMapDevToolPlugin", chunks => {
85+
compilation.hooks.afterOptimizeChunkAssets.tap({
86+
name: "SourceMapDevToolPlugin",
87+
context: true
88+
}, (context, chunks) => {
8689
const moduleToSourceNameMapping = new Map();
87-
const tasks = [];
90+
const reportProgress = (context && context.reportProgress) ? context.reportProgress : () => {};
8891

92+
const files = [];
8993
chunks.forEach(chunk => {
9094
chunk.files.forEach(file => {
9195
if(matchObject(file)) {
92-
const task = getTaskForFile(file, chunk, options, compilation);
93-
94-
if(task) {
95-
const modules = task.sourceMap.sources.map(source => {
96-
const module = compilation.findModule(source);
97-
return module || source;
98-
});
99-
100-
for(let idx = 0; idx < modules.length; idx++) {
101-
const module = modules[idx];
102-
if(!moduleToSourceNameMapping.get(module)) {
103-
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, {
104-
moduleFilenameTemplate: moduleFilenameTemplate,
105-
namespace: namespace
106-
}, requestShortener));
107-
}
108-
}
109-
110-
task.modules = modules;
111-
112-
tasks.push(task);
113-
}
96+
files.push({
97+
file,
98+
chunk
99+
});
114100
}
115101
});
116102
});
117103

104+
reportProgress(0.0);
105+
const tasks = [];
106+
files.forEach(({
107+
file,
108+
chunk
109+
}, idx) => {
110+
reportProgress(0.5 * idx / files.length, file, "generate SourceMap");
111+
const task = getTaskForFile(file, chunk, options, compilation);
112+
113+
if(task) {
114+
const modules = task.sourceMap.sources.map(source => {
115+
const module = compilation.findModule(source);
116+
return module || source;
117+
});
118+
119+
for(let idx = 0; idx < modules.length; idx++) {
120+
const module = modules[idx];
121+
if(!moduleToSourceNameMapping.get(module)) {
122+
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, {
123+
moduleFilenameTemplate: moduleFilenameTemplate,
124+
namespace: namespace
125+
}, requestShortener));
126+
}
127+
}
128+
129+
task.modules = modules;
130+
131+
tasks.push(task);
132+
}
133+
134+
});
135+
136+
reportProgress(0.5, "resolve sources");
118137
const usedNamesSet = new Set(moduleToSourceNameMapping.values());
119138
const conflictDetectionSet = new Set();
120139

@@ -155,7 +174,8 @@ class SourceMapDevToolPlugin {
155174
moduleToSourceNameMapping.set(module, sourceName);
156175
usedNamesSet.add(sourceName);
157176
}
158-
tasks.forEach(task => {
177+
tasks.forEach((task, index) => {
178+
reportProgress(0.5 + 0.5 * index / tasks.length, task.file, "attach SourceMap");
159179
const chunk = task.chunk;
160180
const file = task.file;
161181
const asset = task.asset;
@@ -208,6 +228,7 @@ class SourceMapDevToolPlugin {
208228
);
209229
}
210230
});
231+
reportProgress(1.0);
211232
});
212233
});
213234
}

0 commit comments

Comments
 (0)