Skip to content

Commit 5239eb4

Browse files
authored
Merge pull request #14875 from webpack/fix-14796
limit data url module name in stats printer
2 parents b3871e8 + e2ded57 commit 5239eb4

7 files changed

Lines changed: 99 additions & 12 deletions

File tree

lib/stats/DefaultStatsFactoryPlugin.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2022,6 +2022,8 @@ const MODULES_GROUPERS = type => ({
20222022
getKeys: module => {
20232023
if (!module.name) return;
20242024
const resource = parseResource(module.name.split("!").pop()).path;
2025+
const dataUrl = /^data:[^,;]+/.exec(resource);
2026+
if (dataUrl) return [dataUrl[0]];
20252027
const extensionMatch =
20262028
groupModulesByExtension && /(\.[^.]+)(?:\?.*|$)/.exec(resource);
20272029
const extension = extensionMatch ? extensionMatch[1] : "";
@@ -2046,11 +2048,14 @@ const MODULES_GROUPERS = type => ({
20462048
return keys;
20472049
},
20482050
createGroup: (key, children, modules) => {
2051+
const isDataUrl = key.startsWith("data:");
20492052
return {
2050-
type: groupModulesByPath
2053+
type: isDataUrl
2054+
? "modules by mime type"
2055+
: groupModulesByPath
20512056
? "modules by path"
20522057
: "modules by extension",
2053-
name: key,
2058+
name: isDataUrl ? key.slice(/* 'data:'.length */ 5) : key,
20542059
children,
20552060
...moduleGroup(children, modules)
20562061
};

lib/stats/DefaultStatsPrinterPlugin.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
/** @typedef {import("./StatsPrinter")} StatsPrinter */
1010
/** @typedef {import("./StatsPrinter").StatsPrinterContext} StatsPrinterContext */
1111

12+
const DATA_URI_CONTENT_LENGTH = 16;
13+
1214
const plural = (n, singular, plural) => (n === 1 ? singular : plural);
1315

1416
/**
@@ -26,6 +28,23 @@ const printSizes = (sizes, { formatSize = n => `${n}` }) => {
2628
}
2729
};
2830

31+
const getResourceName = resource => {
32+
const dataUrl = /^data:[^,]+,/.exec(resource);
33+
if (!dataUrl) return resource;
34+
35+
const len = dataUrl[0].length + DATA_URI_CONTENT_LENGTH;
36+
if (resource.length < len) return resource;
37+
return `${resource.slice(
38+
0,
39+
Math.min(resource.length - /* '..'.length */ 2, len)
40+
)}..`;
41+
};
42+
43+
const getModuleName = name => {
44+
const [, prefix, resource] = /^(.*!)?([^!]*)$/.exec(name);
45+
return [prefix, getResourceName(resource)];
46+
};
47+
2948
const mapLines = (str, fn) => str.split("\n").map(fn).join("\n");
3049

3150
/**
@@ -282,8 +301,8 @@ const SIMPLE_PRINTERS = {
282301
"module.id": (id, { formatModuleId }) =>
283302
isValidId(id) ? formatModuleId(id) : undefined,
284303
"module.name": (name, { bold }) => {
285-
const [, prefix, resource] = /^(.*!)?([^!]*)$/.exec(name);
286-
return (prefix || "") + bold(resource);
304+
const [prefix, resource] = getModuleName(name);
305+
return `${prefix || ""}${bold(resource || "")}`;
287306
},
288307
"module.identifier": identifier => undefined,
289308
"module.layer": (layer, { formatLayer }) =>
@@ -388,7 +407,8 @@ const SIMPLE_PRINTERS = {
388407
"moduleIssuer.profile.total": (value, { formatTime }) => formatTime(value),
389408

390409
"moduleReason.type": type => type,
391-
"moduleReason.userRequest": (userRequest, { cyan }) => cyan(userRequest),
410+
"moduleReason.userRequest": (userRequest, { cyan }) =>
411+
cyan(getResourceName(userRequest)),
392412
"moduleReason.moduleId": (moduleId, { formatModuleId }) =>
393413
isValidId(moduleId) ? formatModuleId(moduleId) : undefined,
394414
"moduleReason.module": (module, { magenta }) => magenta(module),

test/__snapshots__/StatsTestCases.basictest.js.snap

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,54 @@ chunk (runtime: main) c5861419d7f3f6ea6c19.js 899 bytes [rendered]
123123
webpack x.x.x compiled successfully in X ms"
124124
`;
125125

126+
exports[`StatsTestCases should print correct stats for all-stats 1`] = `
127+
"PublicPath: auto
128+
asset bundle.js 3.47 KiB {main} [emitted] (name: main)
129+
Entrypoint main 3.47 KiB = bundle.js
130+
chunk {main} (runtime: main) bundle.js (main) 154 bytes (javascript) 274 bytes (runtime) [entry] [rendered]
131+
> ./index.js main
132+
./index.js 82 bytes {main} [depth 0] [built] [code generated]
133+
[no exports]
134+
[used exports unknown]
135+
entry ./index.js main
136+
data:text/plain;base64,szsaAAdsadasdfaf.. 72.2 bytes {main} [depth 1] [dependent] [built] [code generated]
137+
[no exports]
138+
[used exports unknown]
139+
harmony side effect evaluation data:text/plain;base64,szsaAAdsadasdfaf.. [./index.js] 1:0-81
140+
webpack/runtime/make namespace object 274 bytes {main} [code generated]
141+
[no exports]
142+
[used exports unknown]
143+
./index.js 82 bytes {main} [depth 0] [built] [code generated]
144+
[no exports]
145+
[used exports unknown]
146+
entry ./index.js main
147+
data:text/plain;base64,szsaAAdsadasdfaf.. 72.2 bytes {main} [depth 1] [built] [code generated]
148+
[no exports]
149+
[used exports unknown]
150+
harmony side effect evaluation data:text/plain;base64,szsaAAdsadasdfaf.. [./index.js] 1:0-81
151+
webpack/runtime/make namespace object 274 bytes {main} [code generated]
152+
[no exports]
153+
[used exports unknown]
154+
155+
1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (d0d97703a88fdf5418be)"
156+
`;
157+
126158
exports[`StatsTestCases should print correct stats for asset 1`] = `
127159
"asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main)
128-
asset bundle.js 12.4 KiB [emitted] (name: main)
160+
asset bundle.js 13.1 KiB [emitted] (name: main)
129161
asset static/file.html 12 bytes [emitted] [from: static/file.html] (auxiliary name: main)
130162
runtime modules 1.06 KiB 2 modules
131-
asset modules 8.9 KiB (javascript) 14.6 KiB (asset)
132-
./images/file.png 42 bytes (javascript) 14.6 KiB (asset) [built] [code generated]
133-
./images/file.svg 915 bytes [built] [code generated]
134-
./images/file.jpg 7.92 KiB [built] [code generated]
135-
./static/file.html 42 bytes (javascript) 12 bytes (asset) [built] [code generated]
136-
./index.js 150 bytes [built] [code generated]
163+
asset modules 9.07 KiB (javascript) 14.6 KiB (asset)
164+
modules by path ./ 8.9 KiB (javascript) 14.6 KiB (asset)
165+
./images/file.png 42 bytes (javascript) 14.6 KiB (asset) [built] [code generated]
166+
./images/file.svg 915 bytes [built] [code generated]
167+
./images/file.jpg 7.92 KiB [built] [code generated]
168+
./static/file.html 42 bytes (javascript) 12 bytes (asset) [built] [code generated]
169+
modules by mime type text/plain 172 bytes
170+
data:text/plain;base64,szsaAAdsadasdfaf.. 72.2 bytes [built] [code generated]
171+
data:text/plain,asd= 41.4 bytes [built] [code generated]
172+
data:text/plain,XXXXXXXXXXXXXXX.. 58.8 bytes [built] [code generated]
173+
./index.js 339 bytes [built] [code generated]
137174
webpack x.x.x compiled successfully in X ms"
138175
`;
139176

test/statsCases/all-stats/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import text1 from "data:text/plain;base64,szsaAAdsadasdfafasfasAADas123aasdasd=="
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/** @type {import("../../../").Configuration} */
2+
module.exports = {
3+
mode: "development",
4+
entry: "./index.js",
5+
output: {
6+
filename: "bundle.js"
7+
},
8+
module: {
9+
rules: [
10+
{
11+
mimetype: "text/plain",
12+
type: "asset"
13+
}
14+
]
15+
},
16+
stats: { all: true }
17+
};

test/statsCases/asset/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ import png from "./images/file.png";
22
import svg from "./images/file.svg";
33
import jpg from "./images/file.jpg";
44
import html from "./static/file.html";
5+
import text1 from "data:text/plain;base64,szsaAAdsadasdfafasfasAADas123aasdasd=="
6+
import text2 from "data:text/plain,asd="
7+
import text3 from "data:text/plain,XXXXXXXXXXXXXXXXX" // 17 chars

test/statsCases/asset/webpack.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ module.exports = {
1414
generator: {
1515
filename: "static/[name][ext]"
1616
}
17+
},
18+
{
19+
mimetype: "text/plain",
20+
type: "asset"
1721
}
1822
]
1923
},

0 commit comments

Comments
 (0)