Skip to content

Commit 6bdd18b

Browse files
committed
refactor(utils): Extract packages - use forEach instead of reduce
1 parent 86337c3 commit 6bdd18b

File tree

1 file changed

+63
-71
lines changed

1 file changed

+63
-71
lines changed

packages/utils/src/webpack/extract/modules-packages.ts

Lines changed: 63 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -79,79 +79,71 @@ export const extractModulesPackages = (
7979
currentExtractedData?: MetricsModules,
8080
): MetricsPackages => {
8181
const modules = Object.entries(currentExtractedData?.metrics?.modules || {});
82+
const packages: Record<string, Package> = {};
8283

83-
const packages = modules.reduce(
84-
(agg, [modulePath, { value }]) => {
85-
const packageMeta = getPackageMetaFromModulePath(modulePath);
86-
87-
if (!packageMeta) {
88-
return agg;
89-
}
90-
91-
const existingPackageData = agg[packageMeta.id];
92-
93-
// New package data
94-
if (!existingPackageData) {
95-
return {
96-
...agg,
97-
[packageMeta.id]: {
98-
name: packageMeta.name,
99-
path: packageMeta.path,
100-
value,
101-
},
102-
};
103-
}
104-
105-
// Existing package info
106-
if (existingPackageData.path === packageMeta.path) {
107-
return {
108-
...agg,
109-
[packageMeta.id]: {
110-
...existingPackageData,
111-
value: existingPackageData.value + value,
112-
},
113-
};
114-
}
115-
116-
// Same package name, but different paths (eg: symlinks)
117-
const existingPackageWithEqualPath = Object.entries(agg).find(
118-
([__, packageData]) => packageData.path === packageMeta.path,
119-
);
120-
121-
if (existingPackageWithEqualPath) {
122-
const [name, data] = existingPackageWithEqualPath;
123-
124-
return {
125-
...agg,
126-
[name]: {
127-
...data,
128-
value: data.value + value,
129-
},
130-
};
131-
}
132-
133-
// New package name & data
134-
const lastIndex =
135-
max(
136-
Object.keys(agg)
137-
.map((id) => id.split('~'))
138-
.filter(([id]) => id === packageMeta.id)
139-
.map(([__, index]) => parseInt(index, 10)),
140-
) || 0;
141-
142-
const packageName = [packageMeta.id, lastIndex + 1].join(PACKAGE_ID_SEPARATOR);
143-
144-
return {
145-
...agg,
146-
[packageName]: {
147-
name: packageMeta.name,
148-
path: packageMeta.path,
149-
value,
150-
},
84+
modules.forEach(([modulePath, entry]) => {
85+
const packageMeta = getPackageMetaFromModulePath(modulePath);
86+
87+
if (!packageMeta) {
88+
return;
89+
}
90+
91+
const existingPackageData = packages[packageMeta.id];
92+
93+
// New package data
94+
if (!existingPackageData) {
95+
packages[packageMeta.id] = {
96+
name: packageMeta.name,
97+
path: packageMeta.path,
98+
value: entry.value,
15199
};
152-
},
153-
{} as Record<string, Package>,
154-
);
100+
101+
return;
102+
}
103+
104+
// Existing package info
105+
if (existingPackageData.path === packageMeta.path) {
106+
packages[packageMeta.id] = {
107+
...existingPackageData,
108+
value: existingPackageData.value + entry.value,
109+
};
110+
111+
return;
112+
}
113+
114+
// Same package name, but different paths (eg: symlinks)
115+
const existingPackageWithEqualPath = Object.entries(packages).find(
116+
([__, packageData]) => packageData.path === packageMeta.path,
117+
);
118+
119+
if (existingPackageWithEqualPath) {
120+
const [name, data] = existingPackageWithEqualPath;
121+
122+
packages[name] = {
123+
...data,
124+
value: data.value + entry.value,
125+
};
126+
127+
return;
128+
}
129+
130+
// New package name & data
131+
const lastIndex =
132+
max(
133+
Object.keys(packages)
134+
.map((id) => id.split('~'))
135+
.filter(([id]) => id === packageMeta.id)
136+
.map(([__, index]) => parseInt(index, 10)),
137+
) || 0;
138+
139+
const packageName = [packageMeta.id, lastIndex + 1].join(PACKAGE_ID_SEPARATOR);
140+
141+
packages[packageName] = {
142+
name: packageMeta.name,
143+
path: packageMeta.path,
144+
value: entry.value,
145+
};
146+
});
155147

156148
return { metrics: { packages } };
157149
};

0 commit comments

Comments
 (0)