next
Version:
The React Framework
5 lines • 2.42 kB
JavaScript
;exports.__esModule=true;exports.default=void 0;var _fs=_interopRequireDefault(require("fs"));var _path=_interopRequireDefault(require("path"));var _bfj=_interopRequireDefault(require("next/dist/compiled/bfj"));var _profilingPlugin=require("./profiling-plugin");var _tracer=require("../../tracer");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}// @ts-ignore no types package
const STATS_VERSION=0;function reduceSize(stats){stats.chunks=stats.chunks.map(chunk=>{const reducedChunk={id:chunk.id,files:chunk.files,size:chunk.size};for(const module of chunk.modules){if(!module.id){continue;}if(!reducedChunk.modules){reducedChunk.modules=[];}reducedChunk.modules.push(module.id);}return reducedChunk;});stats.modules=stats.modules.map(module=>{const reducedModule={type:module.type,moduleType:module.moduleType,size:module.size,name:module.name};if(module.reasons){for(const reason of module.reasons){if(!reason.moduleName||reason.moduleId===module.id){continue;}if(!reducedModule.reasons){reducedModule.reasons=[];}reducedModule.reasons.push(reason.moduleId);}}return[module.id,reducedModule];});for(const entrypointName in stats.entrypoints){delete stats.entrypoints[entrypointName].assets;}return stats;}// This plugin creates a stats.json for a build when enabled
class BuildStatsPlugin{constructor(options){this.distDir=void 0;this.distDir=options.distDir;}apply(compiler){compiler.hooks.done.tapAsync('NextJsBuildStats',async(stats,callback)=>{_tracer.tracer.withSpan(_profilingPlugin.spans.get(compiler),async()=>{try{const writeStatsSpan=_tracer.tracer.startSpan('NextJsBuildStats');await(0,_tracer.traceAsyncFn)(writeStatsSpan,()=>{return new Promise((resolve,reject)=>{const statsJson=reduceSize(stats.toJson({all:false,cached:true,reasons:true,entrypoints:true,chunks:true,errors:false,warnings:false,maxModules:Infinity,chunkModules:true,modules:true,// @ts-ignore this option exists
ids:true}));const fileStream=_fs.default.createWriteStream(_path.default.join(this.distDir,'next-stats.json'));const jsonStream=_bfj.default.streamify({version:STATS_VERSION,stats:statsJson});jsonStream.pipe(fileStream);jsonStream.on('error',reject);fileStream.on('error',reject);jsonStream.on('dataError',reject);fileStream.on('close',resolve);});});callback();}catch(err){callback(err);}});});}}exports.default=BuildStatsPlugin;
//# sourceMappingURL=build-stats-plugin.js.map