12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import _ from 'lodash';
- import gzipSize from 'gzip-size';
- import Module from './Module';
- import BaseFolder from './BaseFolder';
- import ConcatenatedModule from './ConcatenatedModule';
- import {getModulePathParts} from './utils';
- export default class Folder extends BaseFolder {
- get parsedSize() {
- return this.src ? this.src.length : 0;
- }
- get gzipSize() {
- if (!_.has(this, '_gzipSize')) {
- this._gzipSize = this.src ? gzipSize.sync(this.src) : 0;
- }
- return this._gzipSize;
- }
- addModule(moduleData) {
- const pathParts = getModulePathParts(moduleData);
- if (!pathParts) {
- return;
- }
- const [folders, fileName] = [pathParts.slice(0, -1), _.last(pathParts)];
- let currentFolder = this;
- _.each(folders, folderName => {
- let childNode = currentFolder.getChild(folderName);
- if (
- // Folder is not created yet
- !childNode ||
- // In some situations (invalid usage of dynamic `require()`) webpack generates a module with empty require
- // context, but it's moduleId points to a directory in filesystem.
- // In this case we replace this `File` node with `Folder`.
- // See `test/stats/with-invalid-dynamic-require.json` as an example.
- !(childNode instanceof Folder)
- ) {
- childNode = currentFolder.addChildFolder(new Folder(folderName));
- }
- currentFolder = childNode;
- });
- const ModuleConstructor = moduleData.modules ? ConcatenatedModule : Module;
- const module = new ModuleConstructor(fileName, moduleData, this);
- currentFolder.addChildModule(module);
- }
- toChartData() {
- return {
- ...super.toChartData(),
- parsedSize: this.parsedSize,
- gzipSize: this.gzipSize
- };
- }
- };
|