Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fix-search-total-size.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"webpack-bundle-analyzer": patch
---

Fix the search results total size counting modules twice when both a directory and modules inside it match the search.
13 changes: 11 additions & 2 deletions client/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,17 @@ export class Store {
}

get foundModulesSize() {
return this.foundModules.reduce(
(summ, module) => summ + module[this.activeSize],
const foundModules = new Set(this.foundModules);
const { activeSize } = this;
// Modules inside a found directory are already included in its size.
const sumFound = (modules) =>
modules.reduce((summ, module) => {
if (foundModules.has(module)) return summ + module[activeSize];
return module.groups ? summ + sumFound(module.groups) : summ;
}, 0);

return this.foundModulesByChunk.reduce(
(summ, { chunk }) => summ + sumFound(chunk.groups),
0,
);
}
Expand Down
53 changes: 53 additions & 0 deletions test/store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
globalThis.matchMedia = () => ({ matches: false });

const { Store } = require("../client/store");

function createStore() {
const store = new Store();

store.setModules([
{
label: "main.js",
statSize: 35,
groups: [
{
label: "lodash",
path: "./node_modules/lodash",
statSize: 30,
groups: [
{
label: "find.js",
path: "./node_modules/lodash/find.js",
statSize: 10,
},
{
label: "map.js",
path: "./node_modules/lodash/map.js",
statSize: 20,
},
],
},
{ label: "index.js", path: "./src/index.js", statSize: 5 },
],
},
]);

return store;
}

describe("Store", () => {
it.each([
["lodash", 30],
["find", 10],
["map|index", 25],
["lodash|find", 30],
])(
"should not count modules inside a found directory twice (%s)",
(query, expectedSize) => {
const store = createStore();
store.setSearchQuery(query);

expect(store.foundModulesSize).toBe(expectedSize);
},
);
});
Loading