Skip to content

Commit 37f048a

Browse files
authored
Merge pull request #395 from TrySound/avoid-lodash
Avoid lodash where possible
2 parents dae167e + 4abac50 commit 37f048a

7 files changed

Lines changed: 43 additions & 43 deletions

File tree

src/analyzer.js

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function getViewerData(bundleStats, bundleDir, opts) {
4848
}
4949

5050
// Picking only `*.js or *.mjs` assets from bundle that has non-empty `chunks` array
51-
bundleStats.assets = _.filter(bundleStats.assets, asset => {
51+
bundleStats.assets = bundleStats.assets.filter(asset => {
5252
// Filter out non 'asset' type asset if type is provided (Webpack 5 add a type to indicate asset types)
5353
if (asset.type && asset.type !== 'asset') {
5454
return false;
@@ -82,7 +82,7 @@ function getViewerData(bundleStats, bundleDir, opts) {
8282
}
8383

8484
bundlesSources[statAsset.name] = _.pick(bundleInfo, 'src', 'runtimeSrc');
85-
_.assign(parsedModules, bundleInfo.modules);
85+
Object.assign(parsedModules, bundleInfo.modules);
8686
}
8787

8888
if (_.isEmpty(bundlesSources)) {
@@ -92,7 +92,7 @@ function getViewerData(bundleStats, bundleDir, opts) {
9292
}
9393
}
9494

95-
const assets = _.transform(bundleStats.assets, (result, statAsset) => {
95+
const assets = bundleStats.assets.reduce((result, statAsset) => {
9696
// If asset is a childAsset, then calculate appropriate bundle modules by looking through stats.children
9797
const assetBundles = statAsset.isChild ? getChildAssetBundles(bundleStats, statAsset.name) : bundleStats;
9898
const modules = assetBundles ? getBundleModules(assetBundles) : [];
@@ -144,22 +144,21 @@ function getViewerData(bundleStats, bundleDir, opts) {
144144

145145
asset.modules = assetModules;
146146
asset.tree = createModulesTree(asset.modules);
147+
return result;
147148
}, {});
148149

149-
return _.transform(assets, (result, asset, filename) => {
150-
result.push({
151-
label: filename,
152-
isAsset: true,
153-
// Not using `asset.size` here provided by Webpack because it can be very confusing when `UglifyJsPlugin` is used.
154-
// In this case all module sizes from stats file will represent unminified module sizes, but `asset.size` will
155-
// be the size of minified bundle.
156-
// Using `asset.size` only if current asset doesn't contain any modules (resulting size equals 0)
157-
statSize: asset.tree.size || asset.size,
158-
parsedSize: asset.parsedSize,
159-
gzipSize: asset.gzipSize,
160-
groups: _.invokeMap(asset.tree.children, 'toChartData')
161-
});
162-
}, []);
150+
return Object.entries(assets).map(([filename, asset]) => ({
151+
label: filename,
152+
isAsset: true,
153+
// Not using `asset.size` here provided by Webpack because it can be very confusing when `UglifyJsPlugin` is used.
154+
// In this case all module sizes from stats file will represent unminified module sizes, but `asset.size` will
155+
// be the size of minified bundle.
156+
// Using `asset.size` only if current asset doesn't contain any modules (resulting size equals 0)
157+
statSize: asset.tree.size || asset.size,
158+
parsedSize: asset.parsedSize,
159+
gzipSize: asset.gzipSize,
160+
groups: _.invokeMap(asset.tree.children, 'toChartData')
161+
}));
163162
}
164163

165164
function readStatsFromFile(filename) {
@@ -169,7 +168,7 @@ function readStatsFromFile(filename) {
169168
}
170169

171170
function getChildAssetBundles(bundleStats, assetName) {
172-
return _.find(bundleStats.children, (c) =>
171+
return (bundleStats.children || []).find((c) =>
173172
_(c.assetsByChunkName)
174173
.values()
175174
.flatten()
@@ -191,8 +190,8 @@ function getBundleModules(bundleStats) {
191190

192191
function assetHasModule(statAsset, statModule) {
193192
// Checking if this module is the part of asset chunks
194-
return _.some(statModule.chunks, moduleChunk =>
195-
_.includes(statAsset.chunks, moduleChunk)
193+
return statModule.chunks.some(moduleChunk =>
194+
statAsset.chunks.includes(moduleChunk)
196195
);
197196
}
198197

@@ -207,7 +206,7 @@ function isRuntimeModule(statModule) {
207206
function createModulesTree(modules) {
208207
const root = new Folder('.');
209208

210-
_.each(modules, module => root.addModule(module));
209+
modules.forEach(module => root.addModule(module));
211210
root.mergeNestedFolders();
212211

213212
return root;

src/bin/analyzer.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
const {resolve, dirname} = require('path');
44

5-
const _ = require('lodash');
65
const commander = require('commander');
76
const {magenta} = require('chalk');
87

@@ -157,7 +156,7 @@ function showHelp(error) {
157156
}
158157

159158
function br(str) {
160-
return `\n${_.repeat(' ', 28)}${str}`;
159+
return `\n${' '.repeat(28)}${str}`;
161160
}
162161

163162
function array() {

src/parseUtils.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ function parseBundle(bundlePath) {
135135

136136
// Walking into arguments because some of plugins (e.g. `DedupePlugin`) or some Webpack
137137
// features (e.g. `umd` library output) can wrap modules list into additional IIFE.
138-
_.each(args, arg => c(arg, state));
138+
args.forEach(arg => c(arg, state));
139139
}
140140
}
141141
);
@@ -161,9 +161,8 @@ function parseBundle(bundlePath) {
161161
* Returns bundle source except modules
162162
*/
163163
function getBundleRuntime(content, modulesLocations) {
164-
const sortedLocations = _(modulesLocations)
165-
.values()
166-
.sortBy('start');
164+
const sortedLocations = Object.values(modulesLocations || {})
165+
.sort((a, b) => a.start - b.start);
167166

168167
let result = '';
169168
let lastIndex = 0;
@@ -214,16 +213,16 @@ function isSimpleModulesList(node) {
214213
function isModulesHash(node) {
215214
return (
216215
node.type === 'ObjectExpression' &&
217-
_(node.properties)
218-
.map('value')
216+
node.properties
217+
.map(node => node.value)
219218
.every(isModuleWrapper)
220219
);
221220
}
222221

223222
function isModulesArray(node) {
224223
return (
225224
node.type === 'ArrayExpression' &&
226-
_.every(node.elements, elem =>
225+
node.elements.every(elem =>
227226
// Some of array items may be skipped because there is no module with such id
228227
!elem ||
229228
isModuleWrapper(elem)
@@ -276,7 +275,7 @@ function isChunkIds(node) {
276275
// Array of numeric or string ids. Chunk IDs are strings when NamedChunksPlugin is used
277276
return (
278277
node.type === 'ArrayExpression' &&
279-
_.every(node.elements, isModuleId)
278+
node.elements.every(isModuleId)
280279
);
281280
}
282281

@@ -321,10 +320,11 @@ function getModulesLocations(node) {
321320
// Modules hash
322321
const modulesNodes = node.properties;
323322

324-
return _.transform(modulesNodes, (result, moduleNode) => {
323+
return modulesNodes.reduce((result, moduleNode) => {
325324
const moduleId = moduleNode.key.name || moduleNode.key.value;
326325

327326
result[moduleId] = getModuleLocation(moduleNode.value);
327+
return result;
328328
}, {});
329329
}
330330

@@ -342,9 +342,11 @@ function getModulesLocations(node) {
342342
node.arguments[0].elements :
343343
node.elements;
344344

345-
return _.transform(modulesNodes, (result, moduleNode, i) => {
346-
if (!moduleNode) return;
347-
result[i + minId] = getModuleLocation(moduleNode);
345+
return modulesNodes.reduce((result, moduleNode, i) => {
346+
if (moduleNode) {
347+
result[i + minId] = getModuleLocation(moduleNode);
348+
}
349+
return result;
348350
}, {});
349351
}
350352

src/tree/BaseFolder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default class BaseFolder extends Node {
6262
walk(walker, state = {}, deep = true) {
6363
let stopped = false;
6464

65-
_.each(this.children, child => {
65+
Object.values(this.children).forEach(child => {
6666
if (deep && child.walk) {
6767
state = child.walk(walker, state, stop);
6868
} else {

src/tree/ConcatenatedModule.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default class ConcatenatedModule extends Module {
1515
}
1616

1717
fillContentModules() {
18-
_.each(this.data.modules, moduleData => this.addContentModule(moduleData));
18+
this.data.modules.forEach(moduleData => this.addContentModule(moduleData));
1919
}
2020

2121
addContentModule(moduleData) {
@@ -28,7 +28,7 @@ export default class ConcatenatedModule extends Module {
2828
const [folders, fileName] = [pathParts.slice(0, -1), _.last(pathParts)];
2929
let currentFolder = this;
3030

31-
_.each(folders, folderName => {
31+
folders.forEach(folderName => {
3232
let childFolder = currentFolder.getChild(folderName);
3333

3434
if (!childFolder) {

src/tree/Folder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default class Folder extends BaseFolder {
3030
const [folders, fileName] = [pathParts.slice(0, -1), _.last(pathParts)];
3131
let currentFolder = this;
3232

33-
_.each(folders, folderName => {
33+
folders.forEach(folderName => {
3434
let childNode = currentFolder.getChild(folderName);
3535

3636
if (

src/utils.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const {inspect} = require('util');
1+
const {inspect, types} = require('util');
22
const _ = require('lodash');
33
const opener = require('opener');
44

@@ -15,11 +15,11 @@ function createAssetsFilter(excludePatterns) {
1515
pattern = new RegExp(pattern, 'u');
1616
}
1717

18-
if (_.isRegExp(pattern)) {
18+
if (types.isRegExp(pattern)) {
1919
return (asset) => pattern.test(asset);
2020
}
2121

22-
if (!_.isFunction(pattern)) {
22+
if (typeof pattern !== 'function') {
2323
throw new TypeError(
2424
`Pattern should be either string, RegExp or a function, but "${inspect(pattern, {depth: 0})}" got.`
2525
);
@@ -30,7 +30,7 @@ function createAssetsFilter(excludePatterns) {
3030
.value();
3131

3232
if (excludeFunctions.length) {
33-
return (asset) => _.every(excludeFunctions, fn => fn(asset) !== true);
33+
return (asset) => excludeFunctions.every(fn => fn(asset) !== true);
3434
} else {
3535
return () => true;
3636
}

0 commit comments

Comments
 (0)