import { ResolverFn } from '@statoscope/helpers/dist/entity-resolver'; import { Extension } from '@statoscope/stats/spec/extension'; import { IndexAPI } from '@statoscope/helpers/dist/indexer'; import Graph from '@statoscope/helpers/dist/graph'; import { StatsDescriptor } from '@statoscope/stats'; import { Webpack } from './webpack'; export type CompilationResolvers = { resolveModule: ResolverFn; resolveChunk: ResolverFn; resolveAsset: ResolverFn; resolvePackage: ResolverFn; resolveEntrypoint: ResolverFn; }; export type NormalizedChunk = Omit< Webpack.Chunk, 'modules' | 'files' | 'children' | 'parents' | 'siblings' > & { modules: NormalizedModule[]; files: NormalizedAsset[]; children: NormalizedChunk[]; parents: NormalizedChunk[]; siblings: NormalizedChunk[]; isRuntime?: boolean; }; export type NormalizedEntrypointItem = { name: string; data: NormalizedEntrypoint }; export type NormalizedEntrypoint = Omit & { chunks: NormalizedChunk[]; assets: NormalizedAsset[]; dep?: NormalizedModuleDependency; }; export type NormalizedAsset = Omit & { chunks: NormalizedChunk[]; files: File[]; }; export type NormalizedIssuerPathItem = Webpack.IssuerPathItem & { resolvedModule: NormalizedModule | null; resolvedEntry?: NormalizedEntrypointItem | null; resolvedEntryName?: string | null; }; export type NormalizedReason = Webpack.RawReason & { resolvedModule: NormalizedModule | null; resolvedEntry?: NormalizedEntrypointItem | null; resolvedEntryName?: string | null; }; export type NormalizedModuleDependency = { type: 'module'; module: NormalizedModule; reason: NormalizedReason; }; export type NormalizedModule = Omit< Webpack.RawModule, 'chunks' | 'reasons' | 'modules' | 'issuerPath' > & { resolvedResource: string | null; issuerPath: NormalizedIssuerPathItem[]; chunks: NormalizedChunk[]; reasons: NormalizedReason[]; modules: NormalizedModule[]; deps?: NormalizedModuleDependency[]; }; export type NormalizedPackage = { name: string; instances: NodeModuleInstance[]; }; export type NodeModuleInstance = { path: string; isRoot: boolean; reasons: Array<{ type: 'module'; data: NormalizedModule }>; modules: NormalizedModule[]; version?: string; }; export type NormalizedCompilation = { time?: number; builtAt?: number; name?: string; hash: string; entrypoints: NormalizedEntrypointItem[]; chunks: NormalizedChunk[]; assets: NormalizedAsset[]; modules: NormalizedModule[]; nodeModules: NormalizedPackage[]; children: NormalizedCompilation[]; isChild: boolean; parent: string | null; }; export type NormalizedExtension = { data: Extension; api: TAPI | null; }; export type CompilationIndexes = { modules: IndexAPI; chunks: IndexAPI; assets: IndexAPI; packages: IndexAPI; entrypoints: IndexAPI; }; export type EntrypointItem = { name: string; data: Webpack.Entrypoint; }; export type RawIndexes = { modules: IndexAPI; chunks: IndexAPI; assets: IndexAPI; entrypoints: IndexAPI; }; export type ModuleGraphNodeData = { module: NormalizedModule; entries?: NormalizedEntrypointItem[]; }; export type HandledCompilation = { data: NormalizedCompilation; indexes: CompilationIndexes; resolvers: CompilationResolvers; graph: { module: Graph; }; file: NormalizedFile; }; export type ProcessingContext = { fileContext: HandledFileContext; indexes: CompilationIndexes; rawIndexes: RawIndexes; resolvers: CompilationResolvers; }; export type HandledFileContext = { indexes: { extensions: IndexAPI>; compilation: { byAsset: WeakMap; byChunks: WeakMap; byModule: WeakMap; byEntrypoint: WeakMap; }; }; resolvers: { resolveExtension: ResolverFn>; resolveCompilationByAsset(asset: NormalizedAsset): NormalizedCompilation | null; resolveCompilationByChunk(chunk: NormalizedChunk): NormalizedCompilation | null; resolveCompilationByModule(module: NormalizedModule): NormalizedCompilation | null; resolveCompilationByEntrypoint( entrypoint: NormalizedEntrypointItem, ): NormalizedCompilation | null; }; }; export type RawStatsFileDescriptor = { name: string; data: Webpack.Compilation }; export type NormalizedFile = { name: string; bundler: 'rspack' | 'webpack'; version: string; compilations: NormalizedCompilation[]; __statoscope?: { descriptor?: StatsDescriptor; extensions?: Extension[] }; }; export type HandledStats = { file: NormalizedFile; compilations: HandledCompilation[]; indexes: HandledFileContext['indexes']; resolvers: HandledFileContext['resolvers']; }; export type NormalizeResult = { files: NormalizedFile[]; compilations: HandledCompilation[]; resolvers: Map; indexes: Map; };