sonda 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b7831e3: Update the webpack plugin to make it work with Rspack
8
+
9
+ ### Patch Changes
10
+
11
+ - 30ddb2b: Add missing `sourcesContent` to source maps when they are available in the filesystem
12
+ - e825cfa: Configure npm package provenance
13
+ - e825cfa: Fix missing `inputs` in the report created by the esbuild plugin.
14
+
3
15
  ## 0.2.2
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -111,7 +111,27 @@ module.exports = {
111
111
  };
112
112
  ```
113
113
 
114
- Internally, Sonda changes the default webpack configuration to output relative paths in the source maps instead of using the `webpack://` protocol (`devtoolModuleFilenameTemplate: '[absolute-resource-path]'`).
114
+ Internally, Sonda changes the default webpack configuration to output absolute paths in the source maps instead of using the `webpack://` protocol (`devtoolModuleFilenameTemplate: '[absolute-resource-path]'`).
115
+
116
+ </details>
117
+
118
+ <details>
119
+ <summary>Rspack</summary>
120
+
121
+ ```javascript
122
+ // rspack.config.js
123
+
124
+ import { SondaWebpackPlugin } from 'sonda';
125
+
126
+ export default {
127
+ devtool: 'source-map',
128
+ plugins: [
129
+ new SondaWebpackPlugin(),
130
+ ],
131
+ };
132
+ ```
133
+
134
+ Internally, Sonda changes the default Rspack configuration to output absolute paths in the source maps instead of using the `webpack://` protocol (`devtoolModuleFilenameTemplate: '[absolute-resource-path]'`).
115
135
 
116
136
  </details>
117
137
 
@@ -123,6 +143,7 @@ Each plugin accepts an optional configuration object with the following options.
123
143
  SondaRollupPlugin( {
124
144
  format: 'html',
125
145
  open: true,
146
+ detailed: true,
126
147
  gzip: true,
127
148
  brotli: true,
128
149
  } )
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild.d.ts","sourceRoot":"","sources":["../../src/bundlers/esbuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,UAAU,CAAC;AAEpD,wBAAgB,kBAAkB,CAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAI,MAAM,CAiCvE"}
1
+ {"version":3,"file":"esbuild.d.ts","sourceRoot":"","sources":["../../src/bundlers/esbuild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,UAAU,CAAC;AAGpD,wBAAgB,kBAAkB,CAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAI,MAAM,CAiDvE"}
@@ -1,8 +1,7 @@
1
- import type { Options, JsonReport } from '../types';
2
- import { type Compiler } from 'webpack';
1
+ import type { Compiler } from 'webpack';
2
+ import type { Options } from '../types';
3
3
  export declare class SondaWebpackPlugin {
4
4
  options: Partial<Options>;
5
- inputs: JsonReport['inputs'];
6
5
  constructor(options?: Partial<Options>);
7
6
  apply(compiler: Compiler): void;
8
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../../src/bundlers/webpack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAgB,UAAU,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAgB,KAAK,QAAQ,EAAe,MAAM,SAAS,CAAC;AAInE,qBAAa,kBAAkB;IAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAE,QAAQ,CAAE,CAAC;gBAEjB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAKxC,KAAK,CAAE,QAAQ,EAAE,QAAQ,GAAI,IAAI;CA4CjC"}
1
+ {"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../../src/bundlers/webpack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,UAAU,CAAC;AAIlE,qBAAa,kBAAkB;IAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEZ,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAIxC,KAAK,CAAE,QAAQ,EAAE,QAAQ,GAAI,IAAI;CAqCjC"}
package/dist/index.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var path = require('path');
4
4
  var fs = require('fs');
5
5
  var url = require('url');
6
+ var sourcemapCodec = require('@jridgewell/sourcemap-codec');
6
7
  var remapping = require('@ampproject/remapping');
7
8
  var zlib = require('zlib');
8
9
 
@@ -61,6 +62,7 @@ function loadCodeAndMap(codePath) {
61
62
  }
62
63
  const { map, mapPath } = maybeMap;
63
64
  map.sources = normalizeSourcesPaths(map, mapPath);
65
+ map.sourcesContent = loadMissingSourcesContent(map);
64
66
  delete map.sourceRoot;
65
67
  return {
66
68
  code,
@@ -97,7 +99,9 @@ function parseDataUrl(url) {
97
99
  throw new Error('Unsupported source map encoding: ' + encoding);
98
100
  }
99
101
  }
100
- function normalizeSourcesPaths(map, mapPath) {
102
+ /**
103
+ * Normalize the paths of the sources in the source map to be absolute paths.
104
+ */ function normalizeSourcesPaths(map, mapPath) {
101
105
  const mapDir = path.dirname(mapPath);
102
106
  return map.sources.map((source)=>{
103
107
  if (!source) {
@@ -106,8 +110,21 @@ function normalizeSourcesPaths(map, mapPath) {
106
110
  return path.isAbsolute(source) ? source : path.resolve(mapDir, map.sourceRoot ?? '.', source);
107
111
  });
108
112
  }
113
+ /**
114
+ * Loop through the sources and try to load missing `sourcesContent` from the file system.
115
+ */ function loadMissingSourcesContent(map) {
116
+ return map.sources.map((source, index)=>{
117
+ if (map.sourcesContent?.[index]) {
118
+ return map.sourcesContent[index];
119
+ }
120
+ if (source && fs.existsSync(source)) {
121
+ return fs.readFileSync(source, 'utf-8');
122
+ }
123
+ return null;
124
+ });
125
+ }
109
126
 
110
- function mapSourceMap(map, dirPath, inputs, options) {
127
+ function mapSourceMap(map, dirPath, inputs) {
111
128
  const alreadyRemapped = new Set();
112
129
  const remapped = remapping(map, (file, ctx)=>{
113
130
  var _ctx;
@@ -115,27 +132,10 @@ function mapSourceMap(map, dirPath, inputs, options) {
115
132
  return;
116
133
  }
117
134
  alreadyRemapped.add(file);
118
- const codeMap = loadCodeAndMap(path.resolve(dirPath, file));
135
+ const codeMap = addSourcesToInputs(path.resolve(dirPath, file), inputs);
119
136
  if (!codeMap) {
120
137
  return;
121
138
  }
122
- if (!options.detailed) {
123
- return null;
124
- }
125
- const parentPath = normalizePath(file);
126
- const format = inputs[parentPath]?.format ?? 'unknown';
127
- codeMap.map?.sources.filter((source)=>source !== null).forEach((source, index)=>{
128
- const normalizedPath = normalizePath(source);
129
- if (parentPath === normalizedPath) {
130
- return;
131
- }
132
- inputs[normalizedPath] = {
133
- bytes: Buffer.byteLength(codeMap.map.sourcesContent?.[index] ?? ''),
134
- format,
135
- imports: [],
136
- belongsTo: parentPath
137
- };
138
- });
139
139
  (_ctx = ctx).content ?? (_ctx.content = codeMap.code);
140
140
  return codeMap.map;
141
141
  }, {
@@ -143,6 +143,29 @@ function mapSourceMap(map, dirPath, inputs, options) {
143
143
  });
144
144
  return remapped;
145
145
  }
146
+ /**
147
+ * Loads the source map of a given file and adds its "sources" to the given inputs object.
148
+ */ function addSourcesToInputs(path, inputs) {
149
+ const codeMap = loadCodeAndMap(path);
150
+ if (!codeMap) {
151
+ return null;
152
+ }
153
+ const parentPath = normalizePath(path);
154
+ const format = inputs[parentPath]?.format ?? 'unknown';
155
+ codeMap.map?.sources.filter((source)=>source !== null).forEach((source, index)=>{
156
+ const normalizedPath = normalizePath(source);
157
+ if (parentPath === normalizedPath) {
158
+ return;
159
+ }
160
+ inputs[normalizedPath] = {
161
+ bytes: Buffer.byteLength(codeMap.map.sourcesContent?.[index] ?? ''),
162
+ format,
163
+ imports: [],
164
+ belongsTo: parentPath
165
+ };
166
+ });
167
+ return codeMap;
168
+ }
146
169
 
147
170
  const UNASSIGNED = '[unassigned]';
148
171
  function getBytesPerSource(code, map, assetSizes, options) {
@@ -257,7 +280,10 @@ function processAsset(asset, inputs, options) {
257
280
  return;
258
281
  }
259
282
  const { code, map } = maybeCodeMap;
260
- const mapped = mapSourceMap(map, path.dirname(asset), inputs, options);
283
+ const mapped = options.detailed ? mapSourceMap(map, path.dirname(asset), inputs) : {
284
+ ...map,
285
+ mappings: sourcemapCodec.decode(map.mappings)
286
+ };
261
287
  mapped.sources = mapped.sources.map((source)=>normalizePath(source));
262
288
  const assetSizes = getSizes(code, options);
263
289
  const bytes = getBytesPerSource(code, mapped, assetSizes, options);
@@ -301,13 +327,23 @@ function SondaEsbuildPlugin(options) {
301
327
  if (!result.metafile) {
302
328
  return console.error('Metafile is required for SondaEsbuildPlugin to work.');
303
329
  }
304
- const inputs = Object.entries(result.metafile.inputs).reduce((acc, [path, data])=>{
305
- acc[path] = {
330
+ const cwd = process.cwd();
331
+ const normalizedOptions = normalizeOptions(options);
332
+ // Esbuild already reads the existing source maps, so there's no need to do it again
333
+ normalizedOptions.detailed = false;
334
+ const inputs = Object.entries(result.metafile.inputs).reduce((acc, [path$1, data])=>{
335
+ acc[path$1] = {
306
336
  bytes: data.bytes,
307
337
  format: data.format ?? 'unknown',
308
338
  imports: data.imports.map((data)=>data.path),
309
339
  belongsTo: null
310
340
  };
341
+ /**
342
+ * Because esbuild already reads the existing source maps, there may be
343
+ * cases where some report "outputs" include "inputs" don't exist in the
344
+ * main "inputs" object. To avoid this, we parse each esbuild input and
345
+ * add its sources to the "inputs" object.
346
+ */ addSourcesToInputs(path.resolve(cwd, path$1), acc);
311
347
  return acc;
312
348
  }, {});
313
349
  return generateReportFromAssets(Object.keys(result.metafile.outputs), inputs, normalizeOptions(options));
@@ -351,51 +387,47 @@ const jsRegexp = /\.[c|m]?[t|j]s[x]?$/;
351
387
  class SondaWebpackPlugin {
352
388
  apply(compiler) {
353
389
  compiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';
354
- compiler.hooks.compilation.tap('SondaWebpackPlugin', (compilation)=>{
355
- compilation.hooks.optimizeModules.tap('SondaWebpackPlugin', (modules)=>{
356
- Array.from(modules).forEach((module)=>{
357
- if (!isNormalModule(module)) {
358
- return;
390
+ compiler.hooks.afterEmit.tapPromise('SondaWebpackPlugin', (compilation)=>{
391
+ const inputs = {};
392
+ const stats = compilation.getStats().toJson({
393
+ modules: true,
394
+ providedExports: true
395
+ });
396
+ const outputPath = stats.outputPath || compiler.outputPath;
397
+ const modules = stats.modules?.filter((mod)=>mod.nameForCondition && mod.moduleType !== 'asset/inline') || [];
398
+ modules.forEach((module)=>{
399
+ const imports = modules.reduce((acc, { nameForCondition, issuerName, reasons })=>{
400
+ if (issuerName === module.name || reasons?.some((reason)=>reason.resolvedModule === module.name)) {
401
+ acc.push(normalizePath(nameForCondition));
359
402
  }
360
- const imports = module.dependencies.reduce((acc, dependency)=>{
361
- const module = compilation.moduleGraph.getModule(dependency);
362
- if (isNormalModule(module)) {
363
- acc.push(normalizePath(module.resource));
364
- }
365
- return acc;
366
- }, []);
367
- this.inputs[normalizePath(module.resource)] = {
368
- bytes: module.size(),
369
- format: getFormat(module),
370
- imports,
371
- belongsTo: null
372
- };
373
- });
403
+ return acc;
404
+ }, []);
405
+ inputs[normalizePath(module.nameForCondition)] = {
406
+ bytes: module.size || 0,
407
+ format: getFormat(module),
408
+ imports,
409
+ belongsTo: null
410
+ };
374
411
  });
375
- });
376
- compiler.hooks.emit.tapAsync('SondaWebpackPlugin', (compilation, callback)=>{
377
- const outputPath = compiler.options.output.path || compiler.outputPath || process.cwd();
378
- const assets = Object.keys(compilation.assets).map((name)=>path.join(outputPath, name));
379
- generateReportFromAssets(assets, this.inputs, normalizeOptions(this.options)).then(()=>callback());
412
+ return generateReportFromAssets(stats.assets?.map((asset)=>path.join(outputPath, asset.name)) || [], inputs, normalizeOptions(this.options));
380
413
  });
381
414
  }
382
415
  constructor(options){
383
416
  this.options = options || {};
384
- this.inputs = {};
385
417
  }
386
418
  }
387
419
  function getFormat(module) {
388
- if (!jsRegexp.test(module.resource)) {
420
+ if (!jsRegexp.test(module.nameForCondition)) {
389
421
  return 'unknown';
390
422
  }
391
- if (module.type === 'javascript/esm' || module.buildMeta?.exportsType === 'namespace') {
423
+ /**
424
+ * Sometimes ESM modules have `moduleType` set as `javascript/auto`, so we
425
+ * also need to check if the module has exports to determine if it's ESM.
426
+ */ if (module.moduleType === 'javascript/esm' || !!module.providedExports?.length) {
392
427
  return 'esm';
393
428
  }
394
429
  return 'cjs';
395
430
  }
396
- function isNormalModule(module) {
397
- return module !== null && 'resource' in module;
398
- }
399
431
 
400
432
  exports.SondaEsbuildPlugin = SondaEsbuildPlugin;
401
433
  exports.SondaRollupPlugin = SondaRollupPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils.ts","../../load-source-map/dist/index.js","../src/sourcemap/map.ts","../src/sourcemap/bytes.ts","../src/report.ts","../src/report/generate.ts","../src/bundlers/esbuild.ts","../src/bundlers/rollup.ts","../src/bundlers/webpack.ts"],"sourcesContent":["import { relative, posix, sep } from 'path';\nimport type { Options } from './types';\n\nconst cwd = /* #__PURE__ */ process.cwd();\n\nexport function normalizeOptions( options?: Partial<Options> ) {\n\tconst defaultOptions: Options = {\n\t\topen: true,\n\t\tformat: 'html',\n\t\tdetailed: false,\n\t\tgzip: false,\n\t\tbrotli: false,\n\t};\n\n\treturn Object.assign( {}, defaultOptions, options ) as Options;\n}\n\nexport function normalizePath( path: string ): string {\n\t// Unicode escape sequences used by Rollup and Vite to identify virtual modules\n\tconst normalized = path.replace( /^\\0/, '' )\n\n\t// Transform absolute paths to relative paths\n\tconst relativized = relative( cwd, normalized );\n\n\t// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687\n\treturn relativized.replaceAll( sep, posix.sep );\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join, dirname, isAbsolute, resolve } from 'path';\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification),\n * and parses the string as JSON.\n *\n * https://github.com/mozilla/source-map/blob/3cb92cc3b73bfab27c146bae4ef2bc09dbb4e5ed/lib/util.js#L162-L164\n */ function parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, \"\"));\n}\n/**\n\tsourceMappingURL=data:application/json;charset=utf-8;base64,data\n\tsourceMappingURL=data:application/json;base64,data\n\tsourceMappingURL=data:application/json;uri,data\n\tsourceMappingURL=map-file-comment.css.map\n\tsourceMappingURL=map-file-comment.css.map?query=value\n*/ const sourceMappingRegExp = /[@#]\\s*sourceMappingURL=(\\S+)\\b/g;\nfunction loadCodeAndMap(codePath) {\n if (!existsSync(codePath)) {\n return null;\n }\n const code = readFileSync(codePath, 'utf-8');\n const extractedComment = code.includes('sourceMappingURL') && Array.from(code.matchAll(sourceMappingRegExp)).at(-1);\n if (!extractedComment || !extractedComment.length) {\n return {\n code\n };\n }\n const maybeMap = loadMap(codePath, extractedComment[1]);\n if (!maybeMap) {\n return {\n code\n };\n }\n const { map, mapPath } = maybeMap;\n map.sources = normalizeSourcesPaths(map, mapPath);\n delete map.sourceRoot;\n return {\n code,\n map\n };\n}\nfunction loadMap(codePath, sourceMappingURL) {\n if (sourceMappingURL.startsWith('data:')) {\n const map = parseDataUrl(sourceMappingURL);\n return {\n map: parseSourceMapInput(map),\n mapPath: codePath\n };\n }\n const sourceMapFilename = new URL(sourceMappingURL, 'file://').pathname;\n const mapPath = join(dirname(codePath), sourceMapFilename);\n if (!existsSync(mapPath)) {\n return null;\n }\n return {\n map: parseSourceMapInput(readFileSync(mapPath, 'utf-8')),\n mapPath\n };\n}\nfunction parseDataUrl(url) {\n const [prefix, payload] = url.split(',');\n const encoding = prefix.split(';').at(-1);\n switch(encoding){\n case 'base64':\n return Buffer.from(payload, 'base64').toString();\n case 'uri':\n return decodeURIComponent(payload);\n default:\n throw new Error('Unsupported source map encoding: ' + encoding);\n }\n}\nfunction normalizeSourcesPaths(map, mapPath) {\n const mapDir = dirname(mapPath);\n return map.sources.map((source)=>{\n if (!source) {\n return source;\n }\n return isAbsolute(source) ? source : resolve(mapDir, map.sourceRoot ?? '.', source);\n });\n}\n\nexport { loadCodeAndMap };\n//# sourceMappingURL=index.js.map\n","import { default as remapping, type DecodedSourceMap, type EncodedSourceMap } from '@ampproject/remapping';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { resolve } from 'path';\nimport { normalizePath } from '../utils';\nimport type { Options, ReportInput } from '../types';\n\nexport function mapSourceMap(\n\tmap: EncodedSourceMap,\n\tdirPath: string,\n\tinputs: Record<string, ReportInput>,\n\toptions: Options\n): DecodedSourceMap {\n\tconst alreadyRemapped = new Set<string>();\n\tconst remapped = remapping( map, ( file, ctx ) => {\n\t\tif ( alreadyRemapped.has( file ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\talreadyRemapped.add( file );\n\n\t\tconst codeMap = loadCodeAndMap( resolve( dirPath, file ) );\n\n\t\tif ( !codeMap ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !options.detailed ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parentPath = normalizePath( file );\n\t\tconst format = inputs[ parentPath ]?.format ?? 'unknown';\n\n\t\tcodeMap.map?.sources\n\t\t\t.filter( source => source !== null )\n\t\t\t.forEach( ( source, index ) => {\n\t\t\t\tconst normalizedPath = normalizePath( source );\n\n\t\t\t\tif ( parentPath === normalizedPath ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tinputs[ normalizedPath ] = {\n\t\t\t\t\tbytes: Buffer.byteLength( codeMap.map!.sourcesContent?.[ index ] ?? '' ),\n\t\t\t\t\tformat,\n\t\t\t\t\timports: [],\n\t\t\t\t\tbelongsTo: parentPath\n\t\t\t\t};\n\t\t\t} );\n\n\t\tctx.content ??= codeMap.code;\n\n\t\treturn codeMap.map;\n\t}, { decodedMappings: true } );\n\n\treturn remapped as DecodedSourceMap;\n}\n","import { gzipSync, brotliCompressSync } from 'zlib';\nimport type { DecodedSourceMap, SourceMapSegment } from '@ampproject/remapping';\nimport type { Options, Sizes } from '../types';\n\nconst UNASSIGNED = '[unassigned]';\n\nexport function getBytesPerSource(\n\tcode: string,\n\tmap: DecodedSourceMap,\n\tassetSizes: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst contributions = getContributions( map.sources );\n\n\t// Split the code into lines\n\tconst codeLines = code.split( /(?<=\\r?\\n)/ );\n\n\tfor ( let lineIndex = 0; lineIndex < codeLines.length; lineIndex++ ) {\n\t\tconst lineCode = codeLines[ lineIndex ];\n\t\tconst mappings = map.mappings[ lineIndex ] || [];\n\t\tlet currentColumn = 0;\n\n\t\tfor ( let i = 0; i <= mappings.length; i++ ) {\n\t\t\t// 0: generatedColumn\n\t\t\t// 1: sourceIndex\n\t\t\t// 2: originalLine\n\t\t\t// 3: originalColumn\n\t\t\t// 4: nameIndex\n\n\t\t\tconst mapping: SourceMapSegment | undefined = mappings[ i ];\n\t\t\tconst startColumn = mapping?.[ 0 ] ?? lineCode.length;\n\t\t\tconst endColumn = mappings[ i + 1 ]?.[ 0 ] ?? lineCode.length;\n\n\t\t\t// Slice the code from currentColumn to startColumn for unassigned code\n\t\t\tif ( startColumn > currentColumn ) {\n\t\t\t\tcontributions.set( UNASSIGNED, contributions.get( UNASSIGNED ) + lineCode.slice( currentColumn, startColumn ) );\n\t\t\t}\n\n\t\t\tif ( mapping ) {\n\t\t\t\t// Slice the code from startColumn to endColumn for assigned code\n\t\t\t\tconst sourceIndex = mapping?.[ 1 ];\n\t\t\t\tconst codeSlice = lineCode.slice( startColumn, endColumn );\n\t\t\t\tconst source = sourceIndex !== undefined ? map.sources[ sourceIndex ]! : UNASSIGNED;\n\n\t\t\t\tcontributions.set( source, contributions.get( source ) + codeSlice );\n\t\t\t\tcurrentColumn = endColumn;\n\t\t\t} else {\n\t\t\t\tcurrentColumn = startColumn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute sizes for each source\n\tconst sourceSizes = new Map<string, Sizes>();\n\n\tconst contributionsSum: Sizes = {\n\t\tuncompressed: 0,\n\t\tgzip: 0,\n\t\tbrotli: 0\n\t};\n\n\tfor ( const [ source, codeSegment ] of contributions ) {\n\t\tconst sizes = getSizes( codeSegment, options );\n\n\t\tcontributionsSum.uncompressed += sizes.uncompressed;\n\t\tcontributionsSum.gzip += sizes.gzip;\n\t\tcontributionsSum.brotli += sizes.brotli;\n\n\t\tsourceSizes.set( source, sizes );\n\t}\n\n\treturn adjustSizes( sourceSizes, assetSizes, contributionsSum, options );\n}\n\nexport function getSizes(\n\tcode: string,\n\toptions: Options\n): Sizes {\n\treturn {\n\t\tuncompressed: Buffer.byteLength( code ),\n\t\tgzip: options.gzip ? gzipSync( code ).length : 0,\n\t\tbrotli: options.brotli ? brotliCompressSync( code ).length : 0\n\t};\n}\n\nfunction getContributions( sources: Array<string | null> ): Map<string, string> {\n\tconst contributions = new Map<string, string>();\n\n\t// Populate contributions with sources\n\tsources\n\t\t.filter( source => source !== null )\n\t\t.forEach( source => contributions.set( source, '' ) );\n\n\t// Add entry for the code that is not assigned to any source\n\tcontributions.set( UNASSIGNED, '' );\n\n\treturn contributions;\n}\n\n/**\n * Compression efficiency improves with the size of the file.\n *\n * However, what we have is the compressed size of the entire bundle (`actual`),\n * the sum of all files compressed individually (`sum`) and the compressed\n * size of a given file (`content`). The last value is essentially a “worst-case”\n * scenario, and the actual size of the file in the bundle is likely to be smaller.\n *\n * We use this information to estimate the actual size of the file in the bundle\n * after compression.\n */\nfunction adjustSizes(\n\tsources: Map<string, Sizes>,\n\tasset: Sizes,\n\tsums: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst gzipDelta = options.gzip ? asset.gzip / sums.gzip : 0;\n\tconst brotliDelta = options.brotli ? asset.brotli / sums.brotli : 0;\n\n\tfor ( const [ source, sizes ] of sources ) {\n\t\tsources.set( source, {\n\t\t\tuncompressed: sizes.uncompressed,\n\t\t\tgzip: options.gzip ? Math.round( sizes.gzip * gzipDelta ) : 0,\n\t\t\tbrotli: options.brotli ? Math.round( sizes.brotli * brotliDelta ) : 0\n\t\t} );\n\t}\n\n\treturn sources;\n}\n","import { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { readFileSync } from 'fs';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { mapSourceMap } from './sourcemap/map.js';\nimport { getBytesPerSource, getSizes } from './sourcemap/bytes.js';\nimport type {\n JsonReport,\n MaybeCodeMap,\n ReportInput,\n ReportOutput,\n CodeMap,\n ReportOutputInput,\n Options\n} from './types.js';\nimport { normalizePath } from './utils.js';\n\nexport function generateJsonReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): JsonReport {\n const outputs = assets\n .filter( asset => !asset.endsWith( '.map' ) )\n .reduce( ( carry, asset ) => {\n const data = processAsset( asset, inputs, options );\n\n if ( data ) {\n carry[ normalizePath( asset ) ] = data;\n }\n\n return carry;\n }, {} as Record<string, ReportOutput> );\n\n return {\n inputs,\n outputs\n };\n}\n\nexport function generateHtmlReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): string {\n const json = generateJsonReport( assets, inputs, options );\n const __dirname = dirname( fileURLToPath( import.meta.url ) );\n const template = readFileSync( resolve( __dirname, './index.html' ), 'utf-8' );\n\n return template.replace( '__REPORT_DATA__', JSON.stringify( json ) );\n}\n\nfunction processAsset(\n asset: string,\n inputs: Record<string, ReportInput>,\n options: Options\n): ReportOutput | void {\n const maybeCodeMap = loadCodeAndMap( asset );\n\n if ( !hasCodeAndMap( maybeCodeMap ) ) {\n return;\n }\n\n const { code, map } = maybeCodeMap;\n const mapped = mapSourceMap( map, dirname( asset ), inputs, options );\n\n mapped.sources = mapped.sources.map( source => normalizePath( source! ) );\n\n const assetSizes = getSizes( code, options );\n const bytes = getBytesPerSource( code, mapped, assetSizes, options );\n\n return {\n ...assetSizes,\n inputs: Array.from( bytes ).reduce( ( carry, [ source, sizes ] ) => {\n carry[ normalizePath( source ) ] = sizes;\n\n return carry;\n }, {} as Record<string, ReportOutputInput> )\n };\n}\n\nfunction hasCodeAndMap( result: MaybeCodeMap ): result is Required<CodeMap> {\n return Boolean( result && result.code && result.map );\n}\n","import { join } from 'path';\nimport { writeFileSync } from 'fs';\nimport { generateHtmlReport, generateJsonReport } from '../report.js';\nimport type { Options, JsonReport } from '../types.js';\n\nexport async function generateReportFromAssets(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): Promise<void> {\n\tconst { default: open } = await import( 'open' );\n\n\tconst handler = options.format === 'html'\n\t\t? saveHtml\n\t\t: saveJson;\n\n\tconst path = handler( assets, inputs, options );\n\n\toptions.open && path && open( path );\n}\n\nfunction saveHtml(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateHtmlReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.html' );\n\n\twriteFileSync( path, report );\n\n\treturn path;\n}\n\nfunction saveJson(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateJsonReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.json' );\n\n\twriteFileSync( path, JSON.stringify( report, null, 2 ) );\n\n\treturn path;\n}\n","import { normalizeOptions } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Plugin } from 'esbuild';\nimport type { Options, JsonReport } from '../types';\n\nexport function SondaEsbuildPlugin( options?: Partial<Options> ): Plugin {\n\treturn {\n\t\tname: 'sonda',\n\t\tsetup( build ) {\n\t\t\tbuild.initialOptions.metafile = true;\n\n\t\t\tbuild.onEnd( result => {\n\t\t\t\tif ( !result.metafile ) {\n\t\t\t\t\treturn console.error( 'Metafile is required for SondaEsbuildPlugin to work.' );\n\t\t\t\t}\n\n\t\t\t\tconst inputs = Object\n\t\t\t\t\t.entries( result.metafile.inputs )\n\t\t\t\t\t.reduce( ( acc, [ path, data ] ) => {\n\t\t\t\t\t\t\n\t\t\t\t\t\tacc[ path ] = {\n\t\t\t\t\t\t\tbytes: data.bytes,\n\t\t\t\t\t\t\tformat: data.format ?? 'unknown',\n\t\t\t\t\t\t\timports: data.imports.map( data => data.path ),\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, {} as JsonReport[ 'inputs' ] );\n\n\t\t\t\treturn generateReportFromAssets(\n\t\t\t\t\tObject.keys( result.metafile.outputs ),\n\t\t\t\t\tinputs,\n\t\t\t\t\tnormalizeOptions( options )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t};\n}\n","import { join, resolve, dirname } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils.js';\nimport { generateReportFromAssets } from '../report/generate.js';\nimport type { Options, ModuleFormat, JsonReport } from '../types.js';\nimport type { Plugin, ModuleInfo, NormalizedOutputOptions, OutputBundle } from 'rollup';\n\nconst esmRegex = /\\.m[tj]sx?$/;\nconst cjsRegex = /\\.c[tj]sx?$/;\n\nexport function SondaRollupPlugin( options?: Partial<Options> ): Plugin {\n\tlet inputs: JsonReport[ 'inputs' ] = {};\n\n\treturn {\n\t\tname: 'sonda',\n\n\t\twriteBundle(\n\t\t\t{ dir, file }: NormalizedOutputOptions,\n\t\t\tbundle: OutputBundle\n\t\t) {\n\t\t\tconst outputDir = resolve( process.cwd(), dir ?? dirname( file! ) );\n\t\t\tconst assets = Object.keys( bundle ).map( name => join( outputDir, name ) );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( options )\n\t\t\t);\n\t\t},\n\n\t\tmoduleParsed( module: ModuleInfo ) {\n\t\t\tinputs[ normalizePath( module.id ) ] = {\n\t\t\t\tbytes: module.code ? Buffer.byteLength( module.code ) : 0,\n\t\t\t\tformat: getFormat( module.id, module.meta.commonjs?.isCommonJS ),\n\t\t\t\timports: module.importedIds.map( id => normalizePath( id ) ),\n\t\t\t\tbelongsTo: null,\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction getFormat( moduleId: string, isCommonJS: boolean | undefined ): ModuleFormat {\n\tif ( isCommonJS === true || cjsRegex.test( moduleId ) ) {\n\t\treturn 'cjs';\n\t}\n\n\tif ( isCommonJS === false || esmRegex.test( moduleId ) ) {\n\t\treturn 'esm';\n\t}\n\n\treturn'unknown';\n}\n","import { join } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Options, ModuleFormat, JsonReport } from '../types';\nimport { NormalModule, type Compiler, type Module } from 'webpack';\n\nconst jsRegexp = /\\.[c|m]?[t|j]s[x]?$/;\n\nexport class SondaWebpackPlugin {\n\toptions: Partial<Options>;\n\tinputs: JsonReport[ 'inputs' ];\n\n\tconstructor ( options?: Partial<Options> ) {\n\t\tthis.options = options || {};\n\t\tthis.inputs = {};\n\t}\n\n\tapply( compiler: Compiler ): void {\n\t\tcompiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';\n\n\t\tcompiler.hooks.compilation.tap( 'SondaWebpackPlugin', ( compilation ) => {\n\t\t\tcompilation.hooks.optimizeModules.tap( 'SondaWebpackPlugin', ( modules ) => {\n\t\t\t\tArray\n\t\t\t\t\t.from( modules )\n\t\t\t\t\t.forEach( module => {\n\t\t\t\t\t\tif ( !isNormalModule( module ) ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst imports = module.dependencies.reduce( ( acc, dependency ) => {\n\t\t\t\t\t\t\tconst module = compilation.moduleGraph.getModule( dependency );\n\n\t\t\t\t\t\t\tif ( isNormalModule( module ) ) {\n\t\t\t\t\t\t\t\tacc.push( normalizePath( module.resource ) );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, [] as Array<string> );\n\n\t\t\t\t\t\tthis.inputs[ normalizePath( module.resource ) ] = {\n\t\t\t\t\t\t\tbytes: module.size(),\n\t\t\t\t\t\t\tformat: getFormat( module ),\n\t\t\t\t\t\t\timports,\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\t\t\t} );\n\t\t} );\n\n\t\tcompiler.hooks.emit.tapAsync( 'SondaWebpackPlugin', ( compilation, callback ) => {\n\t\t\tconst outputPath = compiler.options.output.path || compiler.outputPath || process.cwd();\n\t\t\tconst assets = Object.keys( compilation.assets ).map( name => join( outputPath, name ) );\n\n\t\t\tgenerateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tthis.inputs,\n\t\t\t\tnormalizeOptions( this.options )\n\t\t\t)\n\t\t\t.then(() => callback());\n\t\t} );\n\t}\n}\n\nfunction getFormat( module: NormalModule ): ModuleFormat {\n\tif ( !jsRegexp.test( module.resource ) ) {\n\t\treturn 'unknown';\n\t}\n\n\tif ( module.type === 'javascript/esm' || module.buildMeta?.exportsType === 'namespace' ) {\n\t\treturn 'esm';\n\t}\n\n\treturn 'cjs';\n}\n\nfunction isNormalModule( module: Module | NormalModule | null ): module is NormalModule {\n\treturn module !== null && 'resource' in module;\n}\n"],"names":["cwd","process","normalizeOptions","options","defaultOptions","open","format","detailed","gzip","brotli","Object","assign","normalizePath","path","normalized","replace","relativized","relative","replaceAll","sep","posix","parseSourceMapInput","str","JSON","parse","sourceMappingRegExp","loadCodeAndMap","codePath","existsSync","code","readFileSync","extractedComment","includes","Array","from","matchAll","at","length","maybeMap","loadMap","map","mapPath","sources","normalizeSourcesPaths","sourceRoot","sourceMappingURL","startsWith","parseDataUrl","sourceMapFilename","URL","pathname","join","dirname","url","prefix","payload","split","encoding","Buffer","toString","decodeURIComponent","Error","mapDir","source","isAbsolute","resolve","mapSourceMap","dirPath","inputs","alreadyRemapped","Set","remapped","remapping","file","ctx","has","add","codeMap","parentPath","filter","forEach","index","normalizedPath","bytes","byteLength","sourcesContent","imports","belongsTo","content","decodedMappings","UNASSIGNED","getBytesPerSource","assetSizes","contributions","getContributions","codeLines","lineIndex","lineCode","mappings","currentColumn","i","mapping","startColumn","endColumn","set","get","slice","sourceIndex","codeSlice","undefined","sourceSizes","Map","contributionsSum","uncompressed","codeSegment","sizes","getSizes","adjustSizes","gzipSync","brotliCompressSync","asset","sums","gzipDelta","brotliDelta","Math","round","generateJsonReport","assets","outputs","endsWith","reduce","carry","data","processAsset","generateHtmlReport","json","__dirname","fileURLToPath","template","stringify","maybeCodeMap","hasCodeAndMap","mapped","result","Boolean","generateReportFromAssets","default","handler","saveHtml","saveJson","report","writeFileSync","SondaEsbuildPlugin","name","setup","build","initialOptions","metafile","onEnd","console","error","entries","acc","keys","esmRegex","cjsRegex","SondaRollupPlugin","writeBundle","dir","bundle","outputDir","moduleParsed","module","id","getFormat","meta","commonjs","isCommonJS","importedIds","moduleId","test","jsRegexp","SondaWebpackPlugin","apply","compiler","output","devtoolModuleFilenameTemplate","hooks","compilation","tap","optimizeModules","modules","isNormalModule","dependencies","dependency","moduleGraph","getModule","push","resource","size","emit","tapAsync","callback","outputPath","then","constructor","type","buildMeta","exportsType"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils.ts","../../load-source-map/dist/index.js","../src/sourcemap/map.ts","../src/sourcemap/bytes.ts","../src/report.ts","../src/report/generate.ts","../src/bundlers/esbuild.ts","../src/bundlers/rollup.ts","../src/bundlers/webpack.ts"],"sourcesContent":["import { relative, posix, sep } from 'path';\nimport type { Options } from './types';\n\nconst cwd = /* #__PURE__ */ process.cwd();\n\nexport function normalizeOptions( options?: Partial<Options> ) {\n\tconst defaultOptions: Options = {\n\t\topen: true,\n\t\tformat: 'html',\n\t\tdetailed: false,\n\t\tgzip: false,\n\t\tbrotli: false,\n\t};\n\n\treturn Object.assign( {}, defaultOptions, options ) as Options;\n}\n\nexport function normalizePath( path: string ): string {\n\t// Unicode escape sequences used by Rollup and Vite to identify virtual modules\n\tconst normalized = path.replace( /^\\0/, '' )\n\n\t// Transform absolute paths to relative paths\n\tconst relativized = relative( cwd, normalized );\n\n\t// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687\n\treturn relativized.replaceAll( sep, posix.sep );\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join, dirname, isAbsolute, resolve } from 'path';\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification),\n * and parses the string as JSON.\n *\n * https://github.com/mozilla/source-map/blob/3cb92cc3b73bfab27c146bae4ef2bc09dbb4e5ed/lib/util.js#L162-L164\n */ function parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, \"\"));\n}\n/**\n\tsourceMappingURL=data:application/json;charset=utf-8;base64,data\n\tsourceMappingURL=data:application/json;base64,data\n\tsourceMappingURL=data:application/json;uri,data\n\tsourceMappingURL=map-file-comment.css.map\n\tsourceMappingURL=map-file-comment.css.map?query=value\n*/ const sourceMappingRegExp = /[@#]\\s*sourceMappingURL=(\\S+)\\b/g;\nfunction loadCodeAndMap(codePath) {\n if (!existsSync(codePath)) {\n return null;\n }\n const code = readFileSync(codePath, 'utf-8');\n const extractedComment = code.includes('sourceMappingURL') && Array.from(code.matchAll(sourceMappingRegExp)).at(-1);\n if (!extractedComment || !extractedComment.length) {\n return {\n code\n };\n }\n const maybeMap = loadMap(codePath, extractedComment[1]);\n if (!maybeMap) {\n return {\n code\n };\n }\n const { map, mapPath } = maybeMap;\n map.sources = normalizeSourcesPaths(map, mapPath);\n map.sourcesContent = loadMissingSourcesContent(map);\n delete map.sourceRoot;\n return {\n code,\n map\n };\n}\nfunction loadMap(codePath, sourceMappingURL) {\n if (sourceMappingURL.startsWith('data:')) {\n const map = parseDataUrl(sourceMappingURL);\n return {\n map: parseSourceMapInput(map),\n mapPath: codePath\n };\n }\n const sourceMapFilename = new URL(sourceMappingURL, 'file://').pathname;\n const mapPath = join(dirname(codePath), sourceMapFilename);\n if (!existsSync(mapPath)) {\n return null;\n }\n return {\n map: parseSourceMapInput(readFileSync(mapPath, 'utf-8')),\n mapPath\n };\n}\nfunction parseDataUrl(url) {\n const [prefix, payload] = url.split(',');\n const encoding = prefix.split(';').at(-1);\n switch(encoding){\n case 'base64':\n return Buffer.from(payload, 'base64').toString();\n case 'uri':\n return decodeURIComponent(payload);\n default:\n throw new Error('Unsupported source map encoding: ' + encoding);\n }\n}\n/**\n * Normalize the paths of the sources in the source map to be absolute paths.\n */ function normalizeSourcesPaths(map, mapPath) {\n const mapDir = dirname(mapPath);\n return map.sources.map((source)=>{\n if (!source) {\n return source;\n }\n return isAbsolute(source) ? source : resolve(mapDir, map.sourceRoot ?? '.', source);\n });\n}\n/**\n * Loop through the sources and try to load missing `sourcesContent` from the file system.\n */ function loadMissingSourcesContent(map) {\n return map.sources.map((source, index)=>{\n if (map.sourcesContent?.[index]) {\n return map.sourcesContent[index];\n }\n if (source && existsSync(source)) {\n return readFileSync(source, 'utf-8');\n }\n return null;\n });\n}\n\nexport { loadCodeAndMap };\n//# sourceMappingURL=index.js.map\n","import { default as remapping, type DecodedSourceMap, type EncodedSourceMap } from '@ampproject/remapping';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { resolve } from 'path';\nimport { normalizePath } from '../utils';\nimport type { CodeMap, ReportInput } from '../types';\n\nexport function mapSourceMap(\n\tmap: EncodedSourceMap,\n\tdirPath: string,\n\tinputs: Record<string, ReportInput>\n): DecodedSourceMap {\n\tconst alreadyRemapped = new Set<string>();\n\tconst remapped = remapping( map, ( file, ctx ) => {\n\t\tif ( alreadyRemapped.has( file ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\talreadyRemapped.add( file );\n\n\t\tconst codeMap = addSourcesToInputs(\n\t\t\tresolve( dirPath, file ),\n\t\t\tinputs\n\t\t);\n\n\t\tif ( !codeMap ) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.content ??= codeMap.code;\n\n\t\treturn codeMap.map;\n\t}, { decodedMappings: true } );\n\n\treturn remapped as DecodedSourceMap;\n}\n\n/**\n * Loads the source map of a given file and adds its \"sources\" to the given inputs object.\n */\nexport function addSourcesToInputs(\n\tpath: string,\n\tinputs: Record<string, ReportInput>\n): CodeMap | null {\n\tconst codeMap = loadCodeAndMap( path );\n\n\tif ( !codeMap ) {\n\t\treturn null;\n\t}\n\n\tconst parentPath = normalizePath( path );\n\tconst format = inputs[ parentPath ]?.format ?? 'unknown';\n\n\tcodeMap.map?.sources\n\t\t.filter( source => source !== null )\n\t\t.forEach( ( source, index ) => {\n\t\t\tconst normalizedPath = normalizePath( source );\n\n\t\t\tif ( parentPath === normalizedPath ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinputs[ normalizedPath ] = {\n\t\t\t\tbytes: Buffer.byteLength( codeMap.map!.sourcesContent?.[ index ] ?? '' ),\n\t\t\t\tformat,\n\t\t\t\timports: [],\n\t\t\t\tbelongsTo: parentPath\n\t\t\t};\n\t\t} );\n\t\n\treturn codeMap;\n}\n","import { gzipSync, brotliCompressSync } from 'zlib';\nimport type { DecodedSourceMap, SourceMapSegment } from '@ampproject/remapping';\nimport type { Options, Sizes } from '../types';\n\nconst UNASSIGNED = '[unassigned]';\n\nexport function getBytesPerSource(\n\tcode: string,\n\tmap: DecodedSourceMap,\n\tassetSizes: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst contributions = getContributions( map.sources );\n\n\t// Split the code into lines\n\tconst codeLines = code.split( /(?<=\\r?\\n)/ );\n\n\tfor ( let lineIndex = 0; lineIndex < codeLines.length; lineIndex++ ) {\n\t\tconst lineCode = codeLines[ lineIndex ];\n\t\tconst mappings = map.mappings[ lineIndex ] || [];\n\t\tlet currentColumn = 0;\n\n\t\tfor ( let i = 0; i <= mappings.length; i++ ) {\n\t\t\t// 0: generatedColumn\n\t\t\t// 1: sourceIndex\n\t\t\t// 2: originalLine\n\t\t\t// 3: originalColumn\n\t\t\t// 4: nameIndex\n\n\t\t\tconst mapping: SourceMapSegment | undefined = mappings[ i ];\n\t\t\tconst startColumn = mapping?.[ 0 ] ?? lineCode.length;\n\t\t\tconst endColumn = mappings[ i + 1 ]?.[ 0 ] ?? lineCode.length;\n\n\t\t\t// Slice the code from currentColumn to startColumn for unassigned code\n\t\t\tif ( startColumn > currentColumn ) {\n\t\t\t\tcontributions.set( UNASSIGNED, contributions.get( UNASSIGNED ) + lineCode.slice( currentColumn, startColumn ) );\n\t\t\t}\n\n\t\t\tif ( mapping ) {\n\t\t\t\t// Slice the code from startColumn to endColumn for assigned code\n\t\t\t\tconst sourceIndex = mapping?.[ 1 ];\n\t\t\t\tconst codeSlice = lineCode.slice( startColumn, endColumn );\n\t\t\t\tconst source = sourceIndex !== undefined ? map.sources[ sourceIndex ]! : UNASSIGNED;\n\n\t\t\t\tcontributions.set( source, contributions.get( source ) + codeSlice );\n\t\t\t\tcurrentColumn = endColumn;\n\t\t\t} else {\n\t\t\t\tcurrentColumn = startColumn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute sizes for each source\n\tconst sourceSizes = new Map<string, Sizes>();\n\n\tconst contributionsSum: Sizes = {\n\t\tuncompressed: 0,\n\t\tgzip: 0,\n\t\tbrotli: 0\n\t};\n\n\tfor ( const [ source, codeSegment ] of contributions ) {\n\t\tconst sizes = getSizes( codeSegment, options );\n\n\t\tcontributionsSum.uncompressed += sizes.uncompressed;\n\t\tcontributionsSum.gzip += sizes.gzip;\n\t\tcontributionsSum.brotli += sizes.brotli;\n\n\t\tsourceSizes.set( source, sizes );\n\t}\n\n\treturn adjustSizes( sourceSizes, assetSizes, contributionsSum, options );\n}\n\nexport function getSizes(\n\tcode: string,\n\toptions: Options\n): Sizes {\n\treturn {\n\t\tuncompressed: Buffer.byteLength( code ),\n\t\tgzip: options.gzip ? gzipSync( code ).length : 0,\n\t\tbrotli: options.brotli ? brotliCompressSync( code ).length : 0\n\t};\n}\n\nfunction getContributions( sources: Array<string | null> ): Map<string, string> {\n\tconst contributions = new Map<string, string>();\n\n\t// Populate contributions with sources\n\tsources\n\t\t.filter( source => source !== null )\n\t\t.forEach( source => contributions.set( source, '' ) );\n\n\t// Add entry for the code that is not assigned to any source\n\tcontributions.set( UNASSIGNED, '' );\n\n\treturn contributions;\n}\n\n/**\n * Compression efficiency improves with the size of the file.\n *\n * However, what we have is the compressed size of the entire bundle (`actual`),\n * the sum of all files compressed individually (`sum`) and the compressed\n * size of a given file (`content`). The last value is essentially a “worst-case”\n * scenario, and the actual size of the file in the bundle is likely to be smaller.\n *\n * We use this information to estimate the actual size of the file in the bundle\n * after compression.\n */\nfunction adjustSizes(\n\tsources: Map<string, Sizes>,\n\tasset: Sizes,\n\tsums: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst gzipDelta = options.gzip ? asset.gzip / sums.gzip : 0;\n\tconst brotliDelta = options.brotli ? asset.brotli / sums.brotli : 0;\n\n\tfor ( const [ source, sizes ] of sources ) {\n\t\tsources.set( source, {\n\t\t\tuncompressed: sizes.uncompressed,\n\t\t\tgzip: options.gzip ? Math.round( sizes.gzip * gzipDelta ) : 0,\n\t\t\tbrotli: options.brotli ? Math.round( sizes.brotli * brotliDelta ) : 0\n\t\t} );\n\t}\n\n\treturn sources;\n}\n","import { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { readFileSync } from 'fs';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { decode } from '@jridgewell/sourcemap-codec';\nimport { mapSourceMap } from './sourcemap/map.js';\nimport { getBytesPerSource, getSizes } from './sourcemap/bytes.js';\nimport type {\n JsonReport,\n MaybeCodeMap,\n ReportInput,\n ReportOutput,\n CodeMap,\n ReportOutputInput,\n Options\n} from './types.js';\nimport { normalizePath } from './utils.js';\n\nexport function generateJsonReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): JsonReport {\n const outputs = assets\n .filter( asset => !asset.endsWith( '.map' ) )\n .reduce( ( carry, asset ) => {\n const data = processAsset( asset, inputs, options );\n\n if ( data ) {\n carry[ normalizePath( asset ) ] = data;\n }\n\n return carry;\n }, {} as Record<string, ReportOutput> );\n\n return {\n inputs,\n outputs\n };\n}\n\nexport function generateHtmlReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): string {\n const json = generateJsonReport( assets, inputs, options );\n const __dirname = dirname( fileURLToPath( import.meta.url ) );\n const template = readFileSync( resolve( __dirname, './index.html' ), 'utf-8' );\n\n return template.replace( '__REPORT_DATA__', JSON.stringify( json ) );\n}\n\nfunction processAsset(\n asset: string,\n inputs: Record<string, ReportInput>,\n options: Options\n): ReportOutput | void {\n const maybeCodeMap = loadCodeAndMap( asset );\n\n if ( !hasCodeAndMap( maybeCodeMap ) ) {\n return;\n }\n\n const { code, map } = maybeCodeMap;\n const mapped = options.detailed\n ? mapSourceMap( map, dirname( asset ), inputs )\n : { ...map, mappings: decode( map.mappings ) };\n\n mapped.sources = mapped.sources.map( source => normalizePath( source! ) );\n\n const assetSizes = getSizes( code, options );\n const bytes = getBytesPerSource( code, mapped, assetSizes, options );\n\n return {\n ...assetSizes,\n inputs: Array.from( bytes ).reduce( ( carry, [ source, sizes ] ) => {\n carry[ normalizePath( source ) ] = sizes;\n\n return carry;\n }, {} as Record<string, ReportOutputInput> )\n };\n}\n\nfunction hasCodeAndMap( result: MaybeCodeMap ): result is Required<CodeMap> {\n return Boolean( result && result.code && result.map );\n}\n","import { join } from 'path';\nimport { writeFileSync } from 'fs';\nimport { generateHtmlReport, generateJsonReport } from '../report.js';\nimport type { Options, JsonReport } from '../types.js';\n\nexport async function generateReportFromAssets(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): Promise<void> {\n\tconst { default: open } = await import( 'open' );\n\n\tconst handler = options.format === 'html'\n\t\t? saveHtml\n\t\t: saveJson;\n\n\tconst path = handler( assets, inputs, options );\n\n\toptions.open && path && open( path );\n}\n\nfunction saveHtml(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateHtmlReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.html' );\n\n\twriteFileSync( path, report );\n\n\treturn path;\n}\n\nfunction saveJson(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateJsonReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.json' );\n\n\twriteFileSync( path, JSON.stringify( report, null, 2 ) );\n\n\treturn path;\n}\n","import { resolve } from 'path';\nimport { normalizeOptions } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Plugin } from 'esbuild';\nimport type { Options, JsonReport } from '../types';\nimport { addSourcesToInputs } from '../sourcemap/map';\n\nexport function SondaEsbuildPlugin( options?: Partial<Options> ): Plugin {\n\treturn {\n\t\tname: 'sonda',\n\t\tsetup( build ) {\n\t\t\tbuild.initialOptions.metafile = true;\n\n\t\t\tbuild.onEnd( result => {\n\t\t\t\tif ( !result.metafile ) {\n\t\t\t\t\treturn console.error( 'Metafile is required for SondaEsbuildPlugin to work.' );\n\t\t\t\t}\n\n\t\t\t\tconst cwd = process.cwd();\n\t\t\t\tconst normalizedOptions = normalizeOptions( options );\n\n\t\t\t\t// Esbuild already reads the existing source maps, so there's no need to do it again\n\t\t\t\tnormalizedOptions.detailed = false;\n\n\t\t\t\tconst inputs = Object\n\t\t\t\t\t.entries( result.metafile.inputs )\n\t\t\t\t\t.reduce( ( acc, [ path, data ] ) => {\n\t\t\t\t\t\tacc[ path ] = {\n\t\t\t\t\t\t\tbytes: data.bytes,\n\t\t\t\t\t\t\tformat: data.format ?? 'unknown',\n\t\t\t\t\t\t\timports: data.imports.map( data => data.path ),\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Because esbuild already reads the existing source maps, there may be\n\t\t\t\t\t\t * cases where some report \"outputs\" include \"inputs\" don't exist in the\n\t\t\t\t\t\t * main \"inputs\" object. To avoid this, we parse each esbuild input and\n\t\t\t\t\t\t * add its sources to the \"inputs\" object.\n\t\t\t\t\t\t */\n\t\t\t\t\t\taddSourcesToInputs(\n\t\t\t\t\t\t\tresolve( cwd, path ),\n\t\t\t\t\t\t\tacc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, {} as JsonReport[ 'inputs' ] );\n\n\t\t\t\treturn generateReportFromAssets(\n\t\t\t\t\tObject.keys( result.metafile.outputs ),\n\t\t\t\t\tinputs,\n\t\t\t\t\tnormalizeOptions( options )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t};\n}\n","import { join, resolve, dirname } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils.js';\nimport { generateReportFromAssets } from '../report/generate.js';\nimport type { Options, ModuleFormat, JsonReport } from '../types.js';\nimport type { Plugin, ModuleInfo, NormalizedOutputOptions, OutputBundle } from 'rollup';\n\nconst esmRegex = /\\.m[tj]sx?$/;\nconst cjsRegex = /\\.c[tj]sx?$/;\n\nexport function SondaRollupPlugin( options?: Partial<Options> ): Plugin {\n\tlet inputs: JsonReport[ 'inputs' ] = {};\n\n\treturn {\n\t\tname: 'sonda',\n\n\t\twriteBundle(\n\t\t\t{ dir, file }: NormalizedOutputOptions,\n\t\t\tbundle: OutputBundle\n\t\t) {\n\t\t\tconst outputDir = resolve( process.cwd(), dir ?? dirname( file! ) );\n\t\t\tconst assets = Object.keys( bundle ).map( name => join( outputDir, name ) );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( options )\n\t\t\t);\n\t\t},\n\n\t\tmoduleParsed( module: ModuleInfo ) {\n\t\t\tinputs[ normalizePath( module.id ) ] = {\n\t\t\t\tbytes: module.code ? Buffer.byteLength( module.code ) : 0,\n\t\t\t\tformat: getFormat( module.id, module.meta.commonjs?.isCommonJS ),\n\t\t\t\timports: module.importedIds.map( id => normalizePath( id ) ),\n\t\t\t\tbelongsTo: null,\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction getFormat( moduleId: string, isCommonJS: boolean | undefined ): ModuleFormat {\n\tif ( isCommonJS === true || cjsRegex.test( moduleId ) ) {\n\t\treturn 'cjs';\n\t}\n\n\tif ( isCommonJS === false || esmRegex.test( moduleId ) ) {\n\t\treturn 'esm';\n\t}\n\n\treturn'unknown';\n}\n","import { join } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Compiler, StatsModule } from 'webpack';\nimport type { Options, ModuleFormat, JsonReport } from '../types';\n\nconst jsRegexp = /\\.[c|m]?[t|j]s[x]?$/;\n\nexport class SondaWebpackPlugin {\n\toptions: Partial<Options>;\n\n\tconstructor ( options?: Partial<Options> ) {\n\t\tthis.options = options || {};\n\t}\n\n\tapply( compiler: Compiler ): void {\n\t\tcompiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';\n\n\t\tcompiler.hooks.afterEmit.tapPromise( 'SondaWebpackPlugin', compilation => {\n\t\t\tconst inputs: JsonReport[ 'inputs' ] = {};\n\t\t\tconst stats = compilation.getStats().toJson( {\n\t\t\t\tmodules: true,\n\t\t\t\tprovidedExports: true\n\t\t\t} );\n\n\t\t\tconst outputPath = stats.outputPath || compiler.outputPath;\n\t\t\tconst modules = stats.modules?.filter( mod => mod.nameForCondition && mod.moduleType !== 'asset/inline' ) || [];\n\n\t\t\tmodules.forEach( module => {\n\t\t\t\tconst imports = modules.reduce( ( acc, { nameForCondition, issuerName, reasons } ) => {\n\t\t\t\t\tif ( issuerName === module.name || reasons?.some( reason => reason.resolvedModule === module.name ) ) {\n\t\t\t\t\t\tacc.push( normalizePath( nameForCondition! ) );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, [] as Array<string> );\n\n\t\t\t\tinputs[ normalizePath( module.nameForCondition! ) ] = {\n\t\t\t\t\tbytes: module.size || 0,\n\t\t\t\t\tformat: getFormat( module ),\n\t\t\t\t\timports,\n\t\t\t\t\tbelongsTo: null\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tstats.assets?.map( asset => join( outputPath, asset.name ) ) || [],\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( this.options )\n\t\t\t);\n\t\t} );\n\t}\n}\n\nfunction getFormat( module: StatsModule ): ModuleFormat {\n\tif ( !jsRegexp.test( module.nameForCondition! ) ) {\n\t\treturn 'unknown';\n\t}\n\n\t/**\n\t * Sometimes ESM modules have `moduleType` set as `javascript/auto`, so we\n\t * also need to check if the module has exports to determine if it's ESM.\n\t */\n\tif ( module.moduleType === 'javascript/esm' || !!module.providedExports?.length ) {\n\t\treturn 'esm';\n\t}\n\n\treturn 'cjs';\n}\n"],"names":["cwd","process","normalizeOptions","options","defaultOptions","open","format","detailed","gzip","brotli","Object","assign","normalizePath","path","normalized","replace","relativized","relative","replaceAll","sep","posix","parseSourceMapInput","str","JSON","parse","sourceMappingRegExp","loadCodeAndMap","codePath","existsSync","code","readFileSync","extractedComment","includes","Array","from","matchAll","at","length","maybeMap","loadMap","map","mapPath","sources","normalizeSourcesPaths","sourcesContent","loadMissingSourcesContent","sourceRoot","sourceMappingURL","startsWith","parseDataUrl","sourceMapFilename","URL","pathname","join","dirname","url","prefix","payload","split","encoding","Buffer","toString","decodeURIComponent","Error","mapDir","source","isAbsolute","resolve","index","mapSourceMap","dirPath","inputs","alreadyRemapped","Set","remapped","remapping","file","ctx","has","add","codeMap","addSourcesToInputs","content","decodedMappings","parentPath","filter","forEach","normalizedPath","bytes","byteLength","imports","belongsTo","UNASSIGNED","getBytesPerSource","assetSizes","contributions","getContributions","codeLines","lineIndex","lineCode","mappings","currentColumn","i","mapping","startColumn","endColumn","set","get","slice","sourceIndex","codeSlice","undefined","sourceSizes","Map","contributionsSum","uncompressed","codeSegment","sizes","getSizes","adjustSizes","gzipSync","brotliCompressSync","asset","sums","gzipDelta","brotliDelta","Math","round","generateJsonReport","assets","outputs","endsWith","reduce","carry","data","processAsset","generateHtmlReport","json","__dirname","fileURLToPath","template","stringify","maybeCodeMap","hasCodeAndMap","mapped","decode","result","Boolean","generateReportFromAssets","default","handler","saveHtml","saveJson","report","writeFileSync","SondaEsbuildPlugin","name","setup","build","initialOptions","metafile","onEnd","console","error","normalizedOptions","entries","acc","keys","esmRegex","cjsRegex","SondaRollupPlugin","writeBundle","dir","bundle","outputDir","moduleParsed","module","id","getFormat","meta","commonjs","isCommonJS","importedIds","moduleId","test","jsRegexp","SondaWebpackPlugin","apply","compiler","output","devtoolModuleFilenameTemplate","hooks","afterEmit","tapPromise","compilation","stats","getStats","toJson","modules","providedExports","outputPath","mod","nameForCondition","moduleType","issuerName","reasons","some","reason","resolvedModule","push","size","constructor"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { relative, sep, posix, join, dirname, isAbsolute, resolve } from 'path';
2
2
  import { existsSync, readFileSync, writeFileSync } from 'fs';
3
3
  import { fileURLToPath } from 'url';
4
+ import { decode } from '@jridgewell/sourcemap-codec';
4
5
  import remapping from '@ampproject/remapping';
5
6
  import { gzipSync, brotliCompressSync } from 'zlib';
6
7
 
@@ -58,6 +59,7 @@ function loadCodeAndMap(codePath) {
58
59
  }
59
60
  const { map, mapPath } = maybeMap;
60
61
  map.sources = normalizeSourcesPaths(map, mapPath);
62
+ map.sourcesContent = loadMissingSourcesContent(map);
61
63
  delete map.sourceRoot;
62
64
  return {
63
65
  code,
@@ -94,7 +96,9 @@ function parseDataUrl(url) {
94
96
  throw new Error('Unsupported source map encoding: ' + encoding);
95
97
  }
96
98
  }
97
- function normalizeSourcesPaths(map, mapPath) {
99
+ /**
100
+ * Normalize the paths of the sources in the source map to be absolute paths.
101
+ */ function normalizeSourcesPaths(map, mapPath) {
98
102
  const mapDir = dirname(mapPath);
99
103
  return map.sources.map((source)=>{
100
104
  if (!source) {
@@ -103,8 +107,21 @@ function normalizeSourcesPaths(map, mapPath) {
103
107
  return isAbsolute(source) ? source : resolve(mapDir, map.sourceRoot ?? '.', source);
104
108
  });
105
109
  }
110
+ /**
111
+ * Loop through the sources and try to load missing `sourcesContent` from the file system.
112
+ */ function loadMissingSourcesContent(map) {
113
+ return map.sources.map((source, index)=>{
114
+ if (map.sourcesContent?.[index]) {
115
+ return map.sourcesContent[index];
116
+ }
117
+ if (source && existsSync(source)) {
118
+ return readFileSync(source, 'utf-8');
119
+ }
120
+ return null;
121
+ });
122
+ }
106
123
 
107
- function mapSourceMap(map, dirPath, inputs, options) {
124
+ function mapSourceMap(map, dirPath, inputs) {
108
125
  const alreadyRemapped = new Set();
109
126
  const remapped = remapping(map, (file, ctx)=>{
110
127
  var _ctx;
@@ -112,27 +129,10 @@ function mapSourceMap(map, dirPath, inputs, options) {
112
129
  return;
113
130
  }
114
131
  alreadyRemapped.add(file);
115
- const codeMap = loadCodeAndMap(resolve(dirPath, file));
132
+ const codeMap = addSourcesToInputs(resolve(dirPath, file), inputs);
116
133
  if (!codeMap) {
117
134
  return;
118
135
  }
119
- if (!options.detailed) {
120
- return null;
121
- }
122
- const parentPath = normalizePath(file);
123
- const format = inputs[parentPath]?.format ?? 'unknown';
124
- codeMap.map?.sources.filter((source)=>source !== null).forEach((source, index)=>{
125
- const normalizedPath = normalizePath(source);
126
- if (parentPath === normalizedPath) {
127
- return;
128
- }
129
- inputs[normalizedPath] = {
130
- bytes: Buffer.byteLength(codeMap.map.sourcesContent?.[index] ?? ''),
131
- format,
132
- imports: [],
133
- belongsTo: parentPath
134
- };
135
- });
136
136
  (_ctx = ctx).content ?? (_ctx.content = codeMap.code);
137
137
  return codeMap.map;
138
138
  }, {
@@ -140,6 +140,29 @@ function mapSourceMap(map, dirPath, inputs, options) {
140
140
  });
141
141
  return remapped;
142
142
  }
143
+ /**
144
+ * Loads the source map of a given file and adds its "sources" to the given inputs object.
145
+ */ function addSourcesToInputs(path, inputs) {
146
+ const codeMap = loadCodeAndMap(path);
147
+ if (!codeMap) {
148
+ return null;
149
+ }
150
+ const parentPath = normalizePath(path);
151
+ const format = inputs[parentPath]?.format ?? 'unknown';
152
+ codeMap.map?.sources.filter((source)=>source !== null).forEach((source, index)=>{
153
+ const normalizedPath = normalizePath(source);
154
+ if (parentPath === normalizedPath) {
155
+ return;
156
+ }
157
+ inputs[normalizedPath] = {
158
+ bytes: Buffer.byteLength(codeMap.map.sourcesContent?.[index] ?? ''),
159
+ format,
160
+ imports: [],
161
+ belongsTo: parentPath
162
+ };
163
+ });
164
+ return codeMap;
165
+ }
143
166
 
144
167
  const UNASSIGNED = '[unassigned]';
145
168
  function getBytesPerSource(code, map, assetSizes, options) {
@@ -254,7 +277,10 @@ function processAsset(asset, inputs, options) {
254
277
  return;
255
278
  }
256
279
  const { code, map } = maybeCodeMap;
257
- const mapped = mapSourceMap(map, dirname(asset), inputs, options);
280
+ const mapped = options.detailed ? mapSourceMap(map, dirname(asset), inputs) : {
281
+ ...map,
282
+ mappings: decode(map.mappings)
283
+ };
258
284
  mapped.sources = mapped.sources.map((source)=>normalizePath(source));
259
285
  const assetSizes = getSizes(code, options);
260
286
  const bytes = getBytesPerSource(code, mapped, assetSizes, options);
@@ -298,6 +324,10 @@ function SondaEsbuildPlugin(options) {
298
324
  if (!result.metafile) {
299
325
  return console.error('Metafile is required for SondaEsbuildPlugin to work.');
300
326
  }
327
+ const cwd = process.cwd();
328
+ const normalizedOptions = normalizeOptions(options);
329
+ // Esbuild already reads the existing source maps, so there's no need to do it again
330
+ normalizedOptions.detailed = false;
301
331
  const inputs = Object.entries(result.metafile.inputs).reduce((acc, [path, data])=>{
302
332
  acc[path] = {
303
333
  bytes: data.bytes,
@@ -305,6 +335,12 @@ function SondaEsbuildPlugin(options) {
305
335
  imports: data.imports.map((data)=>data.path),
306
336
  belongsTo: null
307
337
  };
338
+ /**
339
+ * Because esbuild already reads the existing source maps, there may be
340
+ * cases where some report "outputs" include "inputs" don't exist in the
341
+ * main "inputs" object. To avoid this, we parse each esbuild input and
342
+ * add its sources to the "inputs" object.
343
+ */ addSourcesToInputs(resolve(cwd, path), acc);
308
344
  return acc;
309
345
  }, {});
310
346
  return generateReportFromAssets(Object.keys(result.metafile.outputs), inputs, normalizeOptions(options));
@@ -348,51 +384,47 @@ const jsRegexp = /\.[c|m]?[t|j]s[x]?$/;
348
384
  class SondaWebpackPlugin {
349
385
  apply(compiler) {
350
386
  compiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';
351
- compiler.hooks.compilation.tap('SondaWebpackPlugin', (compilation)=>{
352
- compilation.hooks.optimizeModules.tap('SondaWebpackPlugin', (modules)=>{
353
- Array.from(modules).forEach((module)=>{
354
- if (!isNormalModule(module)) {
355
- return;
387
+ compiler.hooks.afterEmit.tapPromise('SondaWebpackPlugin', (compilation)=>{
388
+ const inputs = {};
389
+ const stats = compilation.getStats().toJson({
390
+ modules: true,
391
+ providedExports: true
392
+ });
393
+ const outputPath = stats.outputPath || compiler.outputPath;
394
+ const modules = stats.modules?.filter((mod)=>mod.nameForCondition && mod.moduleType !== 'asset/inline') || [];
395
+ modules.forEach((module)=>{
396
+ const imports = modules.reduce((acc, { nameForCondition, issuerName, reasons })=>{
397
+ if (issuerName === module.name || reasons?.some((reason)=>reason.resolvedModule === module.name)) {
398
+ acc.push(normalizePath(nameForCondition));
356
399
  }
357
- const imports = module.dependencies.reduce((acc, dependency)=>{
358
- const module = compilation.moduleGraph.getModule(dependency);
359
- if (isNormalModule(module)) {
360
- acc.push(normalizePath(module.resource));
361
- }
362
- return acc;
363
- }, []);
364
- this.inputs[normalizePath(module.resource)] = {
365
- bytes: module.size(),
366
- format: getFormat(module),
367
- imports,
368
- belongsTo: null
369
- };
370
- });
400
+ return acc;
401
+ }, []);
402
+ inputs[normalizePath(module.nameForCondition)] = {
403
+ bytes: module.size || 0,
404
+ format: getFormat(module),
405
+ imports,
406
+ belongsTo: null
407
+ };
371
408
  });
372
- });
373
- compiler.hooks.emit.tapAsync('SondaWebpackPlugin', (compilation, callback)=>{
374
- const outputPath = compiler.options.output.path || compiler.outputPath || process.cwd();
375
- const assets = Object.keys(compilation.assets).map((name)=>join(outputPath, name));
376
- generateReportFromAssets(assets, this.inputs, normalizeOptions(this.options)).then(()=>callback());
409
+ return generateReportFromAssets(stats.assets?.map((asset)=>join(outputPath, asset.name)) || [], inputs, normalizeOptions(this.options));
377
410
  });
378
411
  }
379
412
  constructor(options){
380
413
  this.options = options || {};
381
- this.inputs = {};
382
414
  }
383
415
  }
384
416
  function getFormat(module) {
385
- if (!jsRegexp.test(module.resource)) {
417
+ if (!jsRegexp.test(module.nameForCondition)) {
386
418
  return 'unknown';
387
419
  }
388
- if (module.type === 'javascript/esm' || module.buildMeta?.exportsType === 'namespace') {
420
+ /**
421
+ * Sometimes ESM modules have `moduleType` set as `javascript/auto`, so we
422
+ * also need to check if the module has exports to determine if it's ESM.
423
+ */ if (module.moduleType === 'javascript/esm' || !!module.providedExports?.length) {
389
424
  return 'esm';
390
425
  }
391
426
  return 'cjs';
392
427
  }
393
- function isNormalModule(module) {
394
- return module !== null && 'resource' in module;
395
- }
396
428
 
397
429
  export { SondaEsbuildPlugin, SondaRollupPlugin, SondaWebpackPlugin };
398
430
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils.ts","../../load-source-map/dist/index.js","../src/sourcemap/map.ts","../src/sourcemap/bytes.ts","../src/report.ts","../src/report/generate.ts","../src/bundlers/esbuild.ts","../src/bundlers/rollup.ts","../src/bundlers/webpack.ts"],"sourcesContent":["import { relative, posix, sep } from 'path';\nimport type { Options } from './types';\n\nconst cwd = /* #__PURE__ */ process.cwd();\n\nexport function normalizeOptions( options?: Partial<Options> ) {\n\tconst defaultOptions: Options = {\n\t\topen: true,\n\t\tformat: 'html',\n\t\tdetailed: false,\n\t\tgzip: false,\n\t\tbrotli: false,\n\t};\n\n\treturn Object.assign( {}, defaultOptions, options ) as Options;\n}\n\nexport function normalizePath( path: string ): string {\n\t// Unicode escape sequences used by Rollup and Vite to identify virtual modules\n\tconst normalized = path.replace( /^\\0/, '' )\n\n\t// Transform absolute paths to relative paths\n\tconst relativized = relative( cwd, normalized );\n\n\t// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687\n\treturn relativized.replaceAll( sep, posix.sep );\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join, dirname, isAbsolute, resolve } from 'path';\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification),\n * and parses the string as JSON.\n *\n * https://github.com/mozilla/source-map/blob/3cb92cc3b73bfab27c146bae4ef2bc09dbb4e5ed/lib/util.js#L162-L164\n */ function parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, \"\"));\n}\n/**\n\tsourceMappingURL=data:application/json;charset=utf-8;base64,data\n\tsourceMappingURL=data:application/json;base64,data\n\tsourceMappingURL=data:application/json;uri,data\n\tsourceMappingURL=map-file-comment.css.map\n\tsourceMappingURL=map-file-comment.css.map?query=value\n*/ const sourceMappingRegExp = /[@#]\\s*sourceMappingURL=(\\S+)\\b/g;\nfunction loadCodeAndMap(codePath) {\n if (!existsSync(codePath)) {\n return null;\n }\n const code = readFileSync(codePath, 'utf-8');\n const extractedComment = code.includes('sourceMappingURL') && Array.from(code.matchAll(sourceMappingRegExp)).at(-1);\n if (!extractedComment || !extractedComment.length) {\n return {\n code\n };\n }\n const maybeMap = loadMap(codePath, extractedComment[1]);\n if (!maybeMap) {\n return {\n code\n };\n }\n const { map, mapPath } = maybeMap;\n map.sources = normalizeSourcesPaths(map, mapPath);\n delete map.sourceRoot;\n return {\n code,\n map\n };\n}\nfunction loadMap(codePath, sourceMappingURL) {\n if (sourceMappingURL.startsWith('data:')) {\n const map = parseDataUrl(sourceMappingURL);\n return {\n map: parseSourceMapInput(map),\n mapPath: codePath\n };\n }\n const sourceMapFilename = new URL(sourceMappingURL, 'file://').pathname;\n const mapPath = join(dirname(codePath), sourceMapFilename);\n if (!existsSync(mapPath)) {\n return null;\n }\n return {\n map: parseSourceMapInput(readFileSync(mapPath, 'utf-8')),\n mapPath\n };\n}\nfunction parseDataUrl(url) {\n const [prefix, payload] = url.split(',');\n const encoding = prefix.split(';').at(-1);\n switch(encoding){\n case 'base64':\n return Buffer.from(payload, 'base64').toString();\n case 'uri':\n return decodeURIComponent(payload);\n default:\n throw new Error('Unsupported source map encoding: ' + encoding);\n }\n}\nfunction normalizeSourcesPaths(map, mapPath) {\n const mapDir = dirname(mapPath);\n return map.sources.map((source)=>{\n if (!source) {\n return source;\n }\n return isAbsolute(source) ? source : resolve(mapDir, map.sourceRoot ?? '.', source);\n });\n}\n\nexport { loadCodeAndMap };\n//# sourceMappingURL=index.js.map\n","import { default as remapping, type DecodedSourceMap, type EncodedSourceMap } from '@ampproject/remapping';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { resolve } from 'path';\nimport { normalizePath } from '../utils';\nimport type { Options, ReportInput } from '../types';\n\nexport function mapSourceMap(\n\tmap: EncodedSourceMap,\n\tdirPath: string,\n\tinputs: Record<string, ReportInput>,\n\toptions: Options\n): DecodedSourceMap {\n\tconst alreadyRemapped = new Set<string>();\n\tconst remapped = remapping( map, ( file, ctx ) => {\n\t\tif ( alreadyRemapped.has( file ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\talreadyRemapped.add( file );\n\n\t\tconst codeMap = loadCodeAndMap( resolve( dirPath, file ) );\n\n\t\tif ( !codeMap ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !options.detailed ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parentPath = normalizePath( file );\n\t\tconst format = inputs[ parentPath ]?.format ?? 'unknown';\n\n\t\tcodeMap.map?.sources\n\t\t\t.filter( source => source !== null )\n\t\t\t.forEach( ( source, index ) => {\n\t\t\t\tconst normalizedPath = normalizePath( source );\n\n\t\t\t\tif ( parentPath === normalizedPath ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tinputs[ normalizedPath ] = {\n\t\t\t\t\tbytes: Buffer.byteLength( codeMap.map!.sourcesContent?.[ index ] ?? '' ),\n\t\t\t\t\tformat,\n\t\t\t\t\timports: [],\n\t\t\t\t\tbelongsTo: parentPath\n\t\t\t\t};\n\t\t\t} );\n\n\t\tctx.content ??= codeMap.code;\n\n\t\treturn codeMap.map;\n\t}, { decodedMappings: true } );\n\n\treturn remapped as DecodedSourceMap;\n}\n","import { gzipSync, brotliCompressSync } from 'zlib';\nimport type { DecodedSourceMap, SourceMapSegment } from '@ampproject/remapping';\nimport type { Options, Sizes } from '../types';\n\nconst UNASSIGNED = '[unassigned]';\n\nexport function getBytesPerSource(\n\tcode: string,\n\tmap: DecodedSourceMap,\n\tassetSizes: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst contributions = getContributions( map.sources );\n\n\t// Split the code into lines\n\tconst codeLines = code.split( /(?<=\\r?\\n)/ );\n\n\tfor ( let lineIndex = 0; lineIndex < codeLines.length; lineIndex++ ) {\n\t\tconst lineCode = codeLines[ lineIndex ];\n\t\tconst mappings = map.mappings[ lineIndex ] || [];\n\t\tlet currentColumn = 0;\n\n\t\tfor ( let i = 0; i <= mappings.length; i++ ) {\n\t\t\t// 0: generatedColumn\n\t\t\t// 1: sourceIndex\n\t\t\t// 2: originalLine\n\t\t\t// 3: originalColumn\n\t\t\t// 4: nameIndex\n\n\t\t\tconst mapping: SourceMapSegment | undefined = mappings[ i ];\n\t\t\tconst startColumn = mapping?.[ 0 ] ?? lineCode.length;\n\t\t\tconst endColumn = mappings[ i + 1 ]?.[ 0 ] ?? lineCode.length;\n\n\t\t\t// Slice the code from currentColumn to startColumn for unassigned code\n\t\t\tif ( startColumn > currentColumn ) {\n\t\t\t\tcontributions.set( UNASSIGNED, contributions.get( UNASSIGNED ) + lineCode.slice( currentColumn, startColumn ) );\n\t\t\t}\n\n\t\t\tif ( mapping ) {\n\t\t\t\t// Slice the code from startColumn to endColumn for assigned code\n\t\t\t\tconst sourceIndex = mapping?.[ 1 ];\n\t\t\t\tconst codeSlice = lineCode.slice( startColumn, endColumn );\n\t\t\t\tconst source = sourceIndex !== undefined ? map.sources[ sourceIndex ]! : UNASSIGNED;\n\n\t\t\t\tcontributions.set( source, contributions.get( source ) + codeSlice );\n\t\t\t\tcurrentColumn = endColumn;\n\t\t\t} else {\n\t\t\t\tcurrentColumn = startColumn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute sizes for each source\n\tconst sourceSizes = new Map<string, Sizes>();\n\n\tconst contributionsSum: Sizes = {\n\t\tuncompressed: 0,\n\t\tgzip: 0,\n\t\tbrotli: 0\n\t};\n\n\tfor ( const [ source, codeSegment ] of contributions ) {\n\t\tconst sizes = getSizes( codeSegment, options );\n\n\t\tcontributionsSum.uncompressed += sizes.uncompressed;\n\t\tcontributionsSum.gzip += sizes.gzip;\n\t\tcontributionsSum.brotli += sizes.brotli;\n\n\t\tsourceSizes.set( source, sizes );\n\t}\n\n\treturn adjustSizes( sourceSizes, assetSizes, contributionsSum, options );\n}\n\nexport function getSizes(\n\tcode: string,\n\toptions: Options\n): Sizes {\n\treturn {\n\t\tuncompressed: Buffer.byteLength( code ),\n\t\tgzip: options.gzip ? gzipSync( code ).length : 0,\n\t\tbrotli: options.brotli ? brotliCompressSync( code ).length : 0\n\t};\n}\n\nfunction getContributions( sources: Array<string | null> ): Map<string, string> {\n\tconst contributions = new Map<string, string>();\n\n\t// Populate contributions with sources\n\tsources\n\t\t.filter( source => source !== null )\n\t\t.forEach( source => contributions.set( source, '' ) );\n\n\t// Add entry for the code that is not assigned to any source\n\tcontributions.set( UNASSIGNED, '' );\n\n\treturn contributions;\n}\n\n/**\n * Compression efficiency improves with the size of the file.\n *\n * However, what we have is the compressed size of the entire bundle (`actual`),\n * the sum of all files compressed individually (`sum`) and the compressed\n * size of a given file (`content`). The last value is essentially a “worst-case”\n * scenario, and the actual size of the file in the bundle is likely to be smaller.\n *\n * We use this information to estimate the actual size of the file in the bundle\n * after compression.\n */\nfunction adjustSizes(\n\tsources: Map<string, Sizes>,\n\tasset: Sizes,\n\tsums: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst gzipDelta = options.gzip ? asset.gzip / sums.gzip : 0;\n\tconst brotliDelta = options.brotli ? asset.brotli / sums.brotli : 0;\n\n\tfor ( const [ source, sizes ] of sources ) {\n\t\tsources.set( source, {\n\t\t\tuncompressed: sizes.uncompressed,\n\t\t\tgzip: options.gzip ? Math.round( sizes.gzip * gzipDelta ) : 0,\n\t\t\tbrotli: options.brotli ? Math.round( sizes.brotli * brotliDelta ) : 0\n\t\t} );\n\t}\n\n\treturn sources;\n}\n","import { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { readFileSync } from 'fs';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { mapSourceMap } from './sourcemap/map.js';\nimport { getBytesPerSource, getSizes } from './sourcemap/bytes.js';\nimport type {\n JsonReport,\n MaybeCodeMap,\n ReportInput,\n ReportOutput,\n CodeMap,\n ReportOutputInput,\n Options\n} from './types.js';\nimport { normalizePath } from './utils.js';\n\nexport function generateJsonReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): JsonReport {\n const outputs = assets\n .filter( asset => !asset.endsWith( '.map' ) )\n .reduce( ( carry, asset ) => {\n const data = processAsset( asset, inputs, options );\n\n if ( data ) {\n carry[ normalizePath( asset ) ] = data;\n }\n\n return carry;\n }, {} as Record<string, ReportOutput> );\n\n return {\n inputs,\n outputs\n };\n}\n\nexport function generateHtmlReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): string {\n const json = generateJsonReport( assets, inputs, options );\n const __dirname = dirname( fileURLToPath( import.meta.url ) );\n const template = readFileSync( resolve( __dirname, './index.html' ), 'utf-8' );\n\n return template.replace( '__REPORT_DATA__', JSON.stringify( json ) );\n}\n\nfunction processAsset(\n asset: string,\n inputs: Record<string, ReportInput>,\n options: Options\n): ReportOutput | void {\n const maybeCodeMap = loadCodeAndMap( asset );\n\n if ( !hasCodeAndMap( maybeCodeMap ) ) {\n return;\n }\n\n const { code, map } = maybeCodeMap;\n const mapped = mapSourceMap( map, dirname( asset ), inputs, options );\n\n mapped.sources = mapped.sources.map( source => normalizePath( source! ) );\n\n const assetSizes = getSizes( code, options );\n const bytes = getBytesPerSource( code, mapped, assetSizes, options );\n\n return {\n ...assetSizes,\n inputs: Array.from( bytes ).reduce( ( carry, [ source, sizes ] ) => {\n carry[ normalizePath( source ) ] = sizes;\n\n return carry;\n }, {} as Record<string, ReportOutputInput> )\n };\n}\n\nfunction hasCodeAndMap( result: MaybeCodeMap ): result is Required<CodeMap> {\n return Boolean( result && result.code && result.map );\n}\n","import { join } from 'path';\nimport { writeFileSync } from 'fs';\nimport { generateHtmlReport, generateJsonReport } from '../report.js';\nimport type { Options, JsonReport } from '../types.js';\n\nexport async function generateReportFromAssets(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): Promise<void> {\n\tconst { default: open } = await import( 'open' );\n\n\tconst handler = options.format === 'html'\n\t\t? saveHtml\n\t\t: saveJson;\n\n\tconst path = handler( assets, inputs, options );\n\n\toptions.open && path && open( path );\n}\n\nfunction saveHtml(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateHtmlReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.html' );\n\n\twriteFileSync( path, report );\n\n\treturn path;\n}\n\nfunction saveJson(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateJsonReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.json' );\n\n\twriteFileSync( path, JSON.stringify( report, null, 2 ) );\n\n\treturn path;\n}\n","import { normalizeOptions } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Plugin } from 'esbuild';\nimport type { Options, JsonReport } from '../types';\n\nexport function SondaEsbuildPlugin( options?: Partial<Options> ): Plugin {\n\treturn {\n\t\tname: 'sonda',\n\t\tsetup( build ) {\n\t\t\tbuild.initialOptions.metafile = true;\n\n\t\t\tbuild.onEnd( result => {\n\t\t\t\tif ( !result.metafile ) {\n\t\t\t\t\treturn console.error( 'Metafile is required for SondaEsbuildPlugin to work.' );\n\t\t\t\t}\n\n\t\t\t\tconst inputs = Object\n\t\t\t\t\t.entries( result.metafile.inputs )\n\t\t\t\t\t.reduce( ( acc, [ path, data ] ) => {\n\t\t\t\t\t\t\n\t\t\t\t\t\tacc[ path ] = {\n\t\t\t\t\t\t\tbytes: data.bytes,\n\t\t\t\t\t\t\tformat: data.format ?? 'unknown',\n\t\t\t\t\t\t\timports: data.imports.map( data => data.path ),\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, {} as JsonReport[ 'inputs' ] );\n\n\t\t\t\treturn generateReportFromAssets(\n\t\t\t\t\tObject.keys( result.metafile.outputs ),\n\t\t\t\t\tinputs,\n\t\t\t\t\tnormalizeOptions( options )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t};\n}\n","import { join, resolve, dirname } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils.js';\nimport { generateReportFromAssets } from '../report/generate.js';\nimport type { Options, ModuleFormat, JsonReport } from '../types.js';\nimport type { Plugin, ModuleInfo, NormalizedOutputOptions, OutputBundle } from 'rollup';\n\nconst esmRegex = /\\.m[tj]sx?$/;\nconst cjsRegex = /\\.c[tj]sx?$/;\n\nexport function SondaRollupPlugin( options?: Partial<Options> ): Plugin {\n\tlet inputs: JsonReport[ 'inputs' ] = {};\n\n\treturn {\n\t\tname: 'sonda',\n\n\t\twriteBundle(\n\t\t\t{ dir, file }: NormalizedOutputOptions,\n\t\t\tbundle: OutputBundle\n\t\t) {\n\t\t\tconst outputDir = resolve( process.cwd(), dir ?? dirname( file! ) );\n\t\t\tconst assets = Object.keys( bundle ).map( name => join( outputDir, name ) );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( options )\n\t\t\t);\n\t\t},\n\n\t\tmoduleParsed( module: ModuleInfo ) {\n\t\t\tinputs[ normalizePath( module.id ) ] = {\n\t\t\t\tbytes: module.code ? Buffer.byteLength( module.code ) : 0,\n\t\t\t\tformat: getFormat( module.id, module.meta.commonjs?.isCommonJS ),\n\t\t\t\timports: module.importedIds.map( id => normalizePath( id ) ),\n\t\t\t\tbelongsTo: null,\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction getFormat( moduleId: string, isCommonJS: boolean | undefined ): ModuleFormat {\n\tif ( isCommonJS === true || cjsRegex.test( moduleId ) ) {\n\t\treturn 'cjs';\n\t}\n\n\tif ( isCommonJS === false || esmRegex.test( moduleId ) ) {\n\t\treturn 'esm';\n\t}\n\n\treturn'unknown';\n}\n","import { join } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Options, ModuleFormat, JsonReport } from '../types';\nimport { NormalModule, type Compiler, type Module } from 'webpack';\n\nconst jsRegexp = /\\.[c|m]?[t|j]s[x]?$/;\n\nexport class SondaWebpackPlugin {\n\toptions: Partial<Options>;\n\tinputs: JsonReport[ 'inputs' ];\n\n\tconstructor ( options?: Partial<Options> ) {\n\t\tthis.options = options || {};\n\t\tthis.inputs = {};\n\t}\n\n\tapply( compiler: Compiler ): void {\n\t\tcompiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';\n\n\t\tcompiler.hooks.compilation.tap( 'SondaWebpackPlugin', ( compilation ) => {\n\t\t\tcompilation.hooks.optimizeModules.tap( 'SondaWebpackPlugin', ( modules ) => {\n\t\t\t\tArray\n\t\t\t\t\t.from( modules )\n\t\t\t\t\t.forEach( module => {\n\t\t\t\t\t\tif ( !isNormalModule( module ) ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst imports = module.dependencies.reduce( ( acc, dependency ) => {\n\t\t\t\t\t\t\tconst module = compilation.moduleGraph.getModule( dependency );\n\n\t\t\t\t\t\t\tif ( isNormalModule( module ) ) {\n\t\t\t\t\t\t\t\tacc.push( normalizePath( module.resource ) );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, [] as Array<string> );\n\n\t\t\t\t\t\tthis.inputs[ normalizePath( module.resource ) ] = {\n\t\t\t\t\t\t\tbytes: module.size(),\n\t\t\t\t\t\t\tformat: getFormat( module ),\n\t\t\t\t\t\t\timports,\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\t\t\t} );\n\t\t} );\n\n\t\tcompiler.hooks.emit.tapAsync( 'SondaWebpackPlugin', ( compilation, callback ) => {\n\t\t\tconst outputPath = compiler.options.output.path || compiler.outputPath || process.cwd();\n\t\t\tconst assets = Object.keys( compilation.assets ).map( name => join( outputPath, name ) );\n\n\t\t\tgenerateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tthis.inputs,\n\t\t\t\tnormalizeOptions( this.options )\n\t\t\t)\n\t\t\t.then(() => callback());\n\t\t} );\n\t}\n}\n\nfunction getFormat( module: NormalModule ): ModuleFormat {\n\tif ( !jsRegexp.test( module.resource ) ) {\n\t\treturn 'unknown';\n\t}\n\n\tif ( module.type === 'javascript/esm' || module.buildMeta?.exportsType === 'namespace' ) {\n\t\treturn 'esm';\n\t}\n\n\treturn 'cjs';\n}\n\nfunction isNormalModule( module: Module | NormalModule | null ): module is NormalModule {\n\treturn module !== null && 'resource' in module;\n}\n"],"names":["cwd","process","normalizeOptions","options","defaultOptions","open","format","detailed","gzip","brotli","Object","assign","normalizePath","path","normalized","replace","relativized","relative","replaceAll","sep","posix","parseSourceMapInput","str","JSON","parse","sourceMappingRegExp","loadCodeAndMap","codePath","existsSync","code","readFileSync","extractedComment","includes","Array","from","matchAll","at","length","maybeMap","loadMap","map","mapPath","sources","normalizeSourcesPaths","sourceRoot","sourceMappingURL","startsWith","parseDataUrl","sourceMapFilename","URL","pathname","join","dirname","url","prefix","payload","split","encoding","Buffer","toString","decodeURIComponent","Error","mapDir","source","isAbsolute","resolve","mapSourceMap","dirPath","inputs","alreadyRemapped","Set","remapped","remapping","file","ctx","has","add","codeMap","parentPath","filter","forEach","index","normalizedPath","bytes","byteLength","sourcesContent","imports","belongsTo","content","decodedMappings","UNASSIGNED","getBytesPerSource","assetSizes","contributions","getContributions","codeLines","lineIndex","lineCode","mappings","currentColumn","i","mapping","startColumn","endColumn","set","get","slice","sourceIndex","codeSlice","undefined","sourceSizes","Map","contributionsSum","uncompressed","codeSegment","sizes","getSizes","adjustSizes","gzipSync","brotliCompressSync","asset","sums","gzipDelta","brotliDelta","Math","round","generateJsonReport","assets","outputs","endsWith","reduce","carry","data","processAsset","generateHtmlReport","json","__dirname","fileURLToPath","template","stringify","maybeCodeMap","hasCodeAndMap","mapped","result","Boolean","generateReportFromAssets","default","handler","saveHtml","saveJson","report","writeFileSync","SondaEsbuildPlugin","name","setup","build","initialOptions","metafile","onEnd","console","error","entries","acc","keys","esmRegex","cjsRegex","SondaRollupPlugin","writeBundle","dir","bundle","outputDir","moduleParsed","module","id","getFormat","meta","commonjs","isCommonJS","importedIds","moduleId","test","jsRegexp","SondaWebpackPlugin","apply","compiler","output","devtoolModuleFilenameTemplate","hooks","compilation","tap","optimizeModules","modules","isNormalModule","dependencies","dependency","moduleGraph","getModule","push","resource","size","emit","tapAsync","callback","outputPath","then","constructor","type","buildMeta","exportsType"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils.ts","../../load-source-map/dist/index.js","../src/sourcemap/map.ts","../src/sourcemap/bytes.ts","../src/report.ts","../src/report/generate.ts","../src/bundlers/esbuild.ts","../src/bundlers/rollup.ts","../src/bundlers/webpack.ts"],"sourcesContent":["import { relative, posix, sep } from 'path';\nimport type { Options } from './types';\n\nconst cwd = /* #__PURE__ */ process.cwd();\n\nexport function normalizeOptions( options?: Partial<Options> ) {\n\tconst defaultOptions: Options = {\n\t\topen: true,\n\t\tformat: 'html',\n\t\tdetailed: false,\n\t\tgzip: false,\n\t\tbrotli: false,\n\t};\n\n\treturn Object.assign( {}, defaultOptions, options ) as Options;\n}\n\nexport function normalizePath( path: string ): string {\n\t// Unicode escape sequences used by Rollup and Vite to identify virtual modules\n\tconst normalized = path.replace( /^\\0/, '' )\n\n\t// Transform absolute paths to relative paths\n\tconst relativized = relative( cwd, normalized );\n\n\t// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687\n\treturn relativized.replaceAll( sep, posix.sep );\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join, dirname, isAbsolute, resolve } from 'path';\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification),\n * and parses the string as JSON.\n *\n * https://github.com/mozilla/source-map/blob/3cb92cc3b73bfab27c146bae4ef2bc09dbb4e5ed/lib/util.js#L162-L164\n */ function parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, \"\"));\n}\n/**\n\tsourceMappingURL=data:application/json;charset=utf-8;base64,data\n\tsourceMappingURL=data:application/json;base64,data\n\tsourceMappingURL=data:application/json;uri,data\n\tsourceMappingURL=map-file-comment.css.map\n\tsourceMappingURL=map-file-comment.css.map?query=value\n*/ const sourceMappingRegExp = /[@#]\\s*sourceMappingURL=(\\S+)\\b/g;\nfunction loadCodeAndMap(codePath) {\n if (!existsSync(codePath)) {\n return null;\n }\n const code = readFileSync(codePath, 'utf-8');\n const extractedComment = code.includes('sourceMappingURL') && Array.from(code.matchAll(sourceMappingRegExp)).at(-1);\n if (!extractedComment || !extractedComment.length) {\n return {\n code\n };\n }\n const maybeMap = loadMap(codePath, extractedComment[1]);\n if (!maybeMap) {\n return {\n code\n };\n }\n const { map, mapPath } = maybeMap;\n map.sources = normalizeSourcesPaths(map, mapPath);\n map.sourcesContent = loadMissingSourcesContent(map);\n delete map.sourceRoot;\n return {\n code,\n map\n };\n}\nfunction loadMap(codePath, sourceMappingURL) {\n if (sourceMappingURL.startsWith('data:')) {\n const map = parseDataUrl(sourceMappingURL);\n return {\n map: parseSourceMapInput(map),\n mapPath: codePath\n };\n }\n const sourceMapFilename = new URL(sourceMappingURL, 'file://').pathname;\n const mapPath = join(dirname(codePath), sourceMapFilename);\n if (!existsSync(mapPath)) {\n return null;\n }\n return {\n map: parseSourceMapInput(readFileSync(mapPath, 'utf-8')),\n mapPath\n };\n}\nfunction parseDataUrl(url) {\n const [prefix, payload] = url.split(',');\n const encoding = prefix.split(';').at(-1);\n switch(encoding){\n case 'base64':\n return Buffer.from(payload, 'base64').toString();\n case 'uri':\n return decodeURIComponent(payload);\n default:\n throw new Error('Unsupported source map encoding: ' + encoding);\n }\n}\n/**\n * Normalize the paths of the sources in the source map to be absolute paths.\n */ function normalizeSourcesPaths(map, mapPath) {\n const mapDir = dirname(mapPath);\n return map.sources.map((source)=>{\n if (!source) {\n return source;\n }\n return isAbsolute(source) ? source : resolve(mapDir, map.sourceRoot ?? '.', source);\n });\n}\n/**\n * Loop through the sources and try to load missing `sourcesContent` from the file system.\n */ function loadMissingSourcesContent(map) {\n return map.sources.map((source, index)=>{\n if (map.sourcesContent?.[index]) {\n return map.sourcesContent[index];\n }\n if (source && existsSync(source)) {\n return readFileSync(source, 'utf-8');\n }\n return null;\n });\n}\n\nexport { loadCodeAndMap };\n//# sourceMappingURL=index.js.map\n","import { default as remapping, type DecodedSourceMap, type EncodedSourceMap } from '@ampproject/remapping';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { resolve } from 'path';\nimport { normalizePath } from '../utils';\nimport type { CodeMap, ReportInput } from '../types';\n\nexport function mapSourceMap(\n\tmap: EncodedSourceMap,\n\tdirPath: string,\n\tinputs: Record<string, ReportInput>\n): DecodedSourceMap {\n\tconst alreadyRemapped = new Set<string>();\n\tconst remapped = remapping( map, ( file, ctx ) => {\n\t\tif ( alreadyRemapped.has( file ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\talreadyRemapped.add( file );\n\n\t\tconst codeMap = addSourcesToInputs(\n\t\t\tresolve( dirPath, file ),\n\t\t\tinputs\n\t\t);\n\n\t\tif ( !codeMap ) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.content ??= codeMap.code;\n\n\t\treturn codeMap.map;\n\t}, { decodedMappings: true } );\n\n\treturn remapped as DecodedSourceMap;\n}\n\n/**\n * Loads the source map of a given file and adds its \"sources\" to the given inputs object.\n */\nexport function addSourcesToInputs(\n\tpath: string,\n\tinputs: Record<string, ReportInput>\n): CodeMap | null {\n\tconst codeMap = loadCodeAndMap( path );\n\n\tif ( !codeMap ) {\n\t\treturn null;\n\t}\n\n\tconst parentPath = normalizePath( path );\n\tconst format = inputs[ parentPath ]?.format ?? 'unknown';\n\n\tcodeMap.map?.sources\n\t\t.filter( source => source !== null )\n\t\t.forEach( ( source, index ) => {\n\t\t\tconst normalizedPath = normalizePath( source );\n\n\t\t\tif ( parentPath === normalizedPath ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinputs[ normalizedPath ] = {\n\t\t\t\tbytes: Buffer.byteLength( codeMap.map!.sourcesContent?.[ index ] ?? '' ),\n\t\t\t\tformat,\n\t\t\t\timports: [],\n\t\t\t\tbelongsTo: parentPath\n\t\t\t};\n\t\t} );\n\t\n\treturn codeMap;\n}\n","import { gzipSync, brotliCompressSync } from 'zlib';\nimport type { DecodedSourceMap, SourceMapSegment } from '@ampproject/remapping';\nimport type { Options, Sizes } from '../types';\n\nconst UNASSIGNED = '[unassigned]';\n\nexport function getBytesPerSource(\n\tcode: string,\n\tmap: DecodedSourceMap,\n\tassetSizes: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst contributions = getContributions( map.sources );\n\n\t// Split the code into lines\n\tconst codeLines = code.split( /(?<=\\r?\\n)/ );\n\n\tfor ( let lineIndex = 0; lineIndex < codeLines.length; lineIndex++ ) {\n\t\tconst lineCode = codeLines[ lineIndex ];\n\t\tconst mappings = map.mappings[ lineIndex ] || [];\n\t\tlet currentColumn = 0;\n\n\t\tfor ( let i = 0; i <= mappings.length; i++ ) {\n\t\t\t// 0: generatedColumn\n\t\t\t// 1: sourceIndex\n\t\t\t// 2: originalLine\n\t\t\t// 3: originalColumn\n\t\t\t// 4: nameIndex\n\n\t\t\tconst mapping: SourceMapSegment | undefined = mappings[ i ];\n\t\t\tconst startColumn = mapping?.[ 0 ] ?? lineCode.length;\n\t\t\tconst endColumn = mappings[ i + 1 ]?.[ 0 ] ?? lineCode.length;\n\n\t\t\t// Slice the code from currentColumn to startColumn for unassigned code\n\t\t\tif ( startColumn > currentColumn ) {\n\t\t\t\tcontributions.set( UNASSIGNED, contributions.get( UNASSIGNED ) + lineCode.slice( currentColumn, startColumn ) );\n\t\t\t}\n\n\t\t\tif ( mapping ) {\n\t\t\t\t// Slice the code from startColumn to endColumn for assigned code\n\t\t\t\tconst sourceIndex = mapping?.[ 1 ];\n\t\t\t\tconst codeSlice = lineCode.slice( startColumn, endColumn );\n\t\t\t\tconst source = sourceIndex !== undefined ? map.sources[ sourceIndex ]! : UNASSIGNED;\n\n\t\t\t\tcontributions.set( source, contributions.get( source ) + codeSlice );\n\t\t\t\tcurrentColumn = endColumn;\n\t\t\t} else {\n\t\t\t\tcurrentColumn = startColumn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute sizes for each source\n\tconst sourceSizes = new Map<string, Sizes>();\n\n\tconst contributionsSum: Sizes = {\n\t\tuncompressed: 0,\n\t\tgzip: 0,\n\t\tbrotli: 0\n\t};\n\n\tfor ( const [ source, codeSegment ] of contributions ) {\n\t\tconst sizes = getSizes( codeSegment, options );\n\n\t\tcontributionsSum.uncompressed += sizes.uncompressed;\n\t\tcontributionsSum.gzip += sizes.gzip;\n\t\tcontributionsSum.brotli += sizes.brotli;\n\n\t\tsourceSizes.set( source, sizes );\n\t}\n\n\treturn adjustSizes( sourceSizes, assetSizes, contributionsSum, options );\n}\n\nexport function getSizes(\n\tcode: string,\n\toptions: Options\n): Sizes {\n\treturn {\n\t\tuncompressed: Buffer.byteLength( code ),\n\t\tgzip: options.gzip ? gzipSync( code ).length : 0,\n\t\tbrotli: options.brotli ? brotliCompressSync( code ).length : 0\n\t};\n}\n\nfunction getContributions( sources: Array<string | null> ): Map<string, string> {\n\tconst contributions = new Map<string, string>();\n\n\t// Populate contributions with sources\n\tsources\n\t\t.filter( source => source !== null )\n\t\t.forEach( source => contributions.set( source, '' ) );\n\n\t// Add entry for the code that is not assigned to any source\n\tcontributions.set( UNASSIGNED, '' );\n\n\treturn contributions;\n}\n\n/**\n * Compression efficiency improves with the size of the file.\n *\n * However, what we have is the compressed size of the entire bundle (`actual`),\n * the sum of all files compressed individually (`sum`) and the compressed\n * size of a given file (`content`). The last value is essentially a “worst-case”\n * scenario, and the actual size of the file in the bundle is likely to be smaller.\n *\n * We use this information to estimate the actual size of the file in the bundle\n * after compression.\n */\nfunction adjustSizes(\n\tsources: Map<string, Sizes>,\n\tasset: Sizes,\n\tsums: Sizes,\n\toptions: Options\n): Map<string, Sizes> {\n\tconst gzipDelta = options.gzip ? asset.gzip / sums.gzip : 0;\n\tconst brotliDelta = options.brotli ? asset.brotli / sums.brotli : 0;\n\n\tfor ( const [ source, sizes ] of sources ) {\n\t\tsources.set( source, {\n\t\t\tuncompressed: sizes.uncompressed,\n\t\t\tgzip: options.gzip ? Math.round( sizes.gzip * gzipDelta ) : 0,\n\t\t\tbrotli: options.brotli ? Math.round( sizes.brotli * brotliDelta ) : 0\n\t\t} );\n\t}\n\n\treturn sources;\n}\n","import { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { readFileSync } from 'fs';\nimport { loadCodeAndMap } from 'load-source-map';\nimport { decode } from '@jridgewell/sourcemap-codec';\nimport { mapSourceMap } from './sourcemap/map.js';\nimport { getBytesPerSource, getSizes } from './sourcemap/bytes.js';\nimport type {\n JsonReport,\n MaybeCodeMap,\n ReportInput,\n ReportOutput,\n CodeMap,\n ReportOutputInput,\n Options\n} from './types.js';\nimport { normalizePath } from './utils.js';\n\nexport function generateJsonReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): JsonReport {\n const outputs = assets\n .filter( asset => !asset.endsWith( '.map' ) )\n .reduce( ( carry, asset ) => {\n const data = processAsset( asset, inputs, options );\n\n if ( data ) {\n carry[ normalizePath( asset ) ] = data;\n }\n\n return carry;\n }, {} as Record<string, ReportOutput> );\n\n return {\n inputs,\n outputs\n };\n}\n\nexport function generateHtmlReport(\n assets: Array<string>,\n inputs: Record<string, ReportInput>,\n options: Options\n): string {\n const json = generateJsonReport( assets, inputs, options );\n const __dirname = dirname( fileURLToPath( import.meta.url ) );\n const template = readFileSync( resolve( __dirname, './index.html' ), 'utf-8' );\n\n return template.replace( '__REPORT_DATA__', JSON.stringify( json ) );\n}\n\nfunction processAsset(\n asset: string,\n inputs: Record<string, ReportInput>,\n options: Options\n): ReportOutput | void {\n const maybeCodeMap = loadCodeAndMap( asset );\n\n if ( !hasCodeAndMap( maybeCodeMap ) ) {\n return;\n }\n\n const { code, map } = maybeCodeMap;\n const mapped = options.detailed\n ? mapSourceMap( map, dirname( asset ), inputs )\n : { ...map, mappings: decode( map.mappings ) };\n\n mapped.sources = mapped.sources.map( source => normalizePath( source! ) );\n\n const assetSizes = getSizes( code, options );\n const bytes = getBytesPerSource( code, mapped, assetSizes, options );\n\n return {\n ...assetSizes,\n inputs: Array.from( bytes ).reduce( ( carry, [ source, sizes ] ) => {\n carry[ normalizePath( source ) ] = sizes;\n\n return carry;\n }, {} as Record<string, ReportOutputInput> )\n };\n}\n\nfunction hasCodeAndMap( result: MaybeCodeMap ): result is Required<CodeMap> {\n return Boolean( result && result.code && result.map );\n}\n","import { join } from 'path';\nimport { writeFileSync } from 'fs';\nimport { generateHtmlReport, generateJsonReport } from '../report.js';\nimport type { Options, JsonReport } from '../types.js';\n\nexport async function generateReportFromAssets(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): Promise<void> {\n\tconst { default: open } = await import( 'open' );\n\n\tconst handler = options.format === 'html'\n\t\t? saveHtml\n\t\t: saveJson;\n\n\tconst path = handler( assets, inputs, options );\n\n\toptions.open && path && open( path );\n}\n\nfunction saveHtml(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateHtmlReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.html' );\n\n\twriteFileSync( path, report );\n\n\treturn path;\n}\n\nfunction saveJson(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\toptions: Options\n): string | null {\n\tconst report = generateJsonReport( assets, inputs, options );\n\tconst path = join( process.cwd(), 'sonda-report.json' );\n\n\twriteFileSync( path, JSON.stringify( report, null, 2 ) );\n\n\treturn path;\n}\n","import { resolve } from 'path';\nimport { normalizeOptions } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Plugin } from 'esbuild';\nimport type { Options, JsonReport } from '../types';\nimport { addSourcesToInputs } from '../sourcemap/map';\n\nexport function SondaEsbuildPlugin( options?: Partial<Options> ): Plugin {\n\treturn {\n\t\tname: 'sonda',\n\t\tsetup( build ) {\n\t\t\tbuild.initialOptions.metafile = true;\n\n\t\t\tbuild.onEnd( result => {\n\t\t\t\tif ( !result.metafile ) {\n\t\t\t\t\treturn console.error( 'Metafile is required for SondaEsbuildPlugin to work.' );\n\t\t\t\t}\n\n\t\t\t\tconst cwd = process.cwd();\n\t\t\t\tconst normalizedOptions = normalizeOptions( options );\n\n\t\t\t\t// Esbuild already reads the existing source maps, so there's no need to do it again\n\t\t\t\tnormalizedOptions.detailed = false;\n\n\t\t\t\tconst inputs = Object\n\t\t\t\t\t.entries( result.metafile.inputs )\n\t\t\t\t\t.reduce( ( acc, [ path, data ] ) => {\n\t\t\t\t\t\tacc[ path ] = {\n\t\t\t\t\t\t\tbytes: data.bytes,\n\t\t\t\t\t\t\tformat: data.format ?? 'unknown',\n\t\t\t\t\t\t\timports: data.imports.map( data => data.path ),\n\t\t\t\t\t\t\tbelongsTo: null,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Because esbuild already reads the existing source maps, there may be\n\t\t\t\t\t\t * cases where some report \"outputs\" include \"inputs\" don't exist in the\n\t\t\t\t\t\t * main \"inputs\" object. To avoid this, we parse each esbuild input and\n\t\t\t\t\t\t * add its sources to the \"inputs\" object.\n\t\t\t\t\t\t */\n\t\t\t\t\t\taddSourcesToInputs(\n\t\t\t\t\t\t\tresolve( cwd, path ),\n\t\t\t\t\t\t\tacc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, {} as JsonReport[ 'inputs' ] );\n\n\t\t\t\treturn generateReportFromAssets(\n\t\t\t\t\tObject.keys( result.metafile.outputs ),\n\t\t\t\t\tinputs,\n\t\t\t\t\tnormalizeOptions( options )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t};\n}\n","import { join, resolve, dirname } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils.js';\nimport { generateReportFromAssets } from '../report/generate.js';\nimport type { Options, ModuleFormat, JsonReport } from '../types.js';\nimport type { Plugin, ModuleInfo, NormalizedOutputOptions, OutputBundle } from 'rollup';\n\nconst esmRegex = /\\.m[tj]sx?$/;\nconst cjsRegex = /\\.c[tj]sx?$/;\n\nexport function SondaRollupPlugin( options?: Partial<Options> ): Plugin {\n\tlet inputs: JsonReport[ 'inputs' ] = {};\n\n\treturn {\n\t\tname: 'sonda',\n\n\t\twriteBundle(\n\t\t\t{ dir, file }: NormalizedOutputOptions,\n\t\t\tbundle: OutputBundle\n\t\t) {\n\t\t\tconst outputDir = resolve( process.cwd(), dir ?? dirname( file! ) );\n\t\t\tconst assets = Object.keys( bundle ).map( name => join( outputDir, name ) );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tassets,\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( options )\n\t\t\t);\n\t\t},\n\n\t\tmoduleParsed( module: ModuleInfo ) {\n\t\t\tinputs[ normalizePath( module.id ) ] = {\n\t\t\t\tbytes: module.code ? Buffer.byteLength( module.code ) : 0,\n\t\t\t\tformat: getFormat( module.id, module.meta.commonjs?.isCommonJS ),\n\t\t\t\timports: module.importedIds.map( id => normalizePath( id ) ),\n\t\t\t\tbelongsTo: null,\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction getFormat( moduleId: string, isCommonJS: boolean | undefined ): ModuleFormat {\n\tif ( isCommonJS === true || cjsRegex.test( moduleId ) ) {\n\t\treturn 'cjs';\n\t}\n\n\tif ( isCommonJS === false || esmRegex.test( moduleId ) ) {\n\t\treturn 'esm';\n\t}\n\n\treturn'unknown';\n}\n","import { join } from 'path';\nimport { normalizeOptions, normalizePath } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Compiler, StatsModule } from 'webpack';\nimport type { Options, ModuleFormat, JsonReport } from '../types';\n\nconst jsRegexp = /\\.[c|m]?[t|j]s[x]?$/;\n\nexport class SondaWebpackPlugin {\n\toptions: Partial<Options>;\n\n\tconstructor ( options?: Partial<Options> ) {\n\t\tthis.options = options || {};\n\t}\n\n\tapply( compiler: Compiler ): void {\n\t\tcompiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';\n\n\t\tcompiler.hooks.afterEmit.tapPromise( 'SondaWebpackPlugin', compilation => {\n\t\t\tconst inputs: JsonReport[ 'inputs' ] = {};\n\t\t\tconst stats = compilation.getStats().toJson( {\n\t\t\t\tmodules: true,\n\t\t\t\tprovidedExports: true\n\t\t\t} );\n\n\t\t\tconst outputPath = stats.outputPath || compiler.outputPath;\n\t\t\tconst modules = stats.modules?.filter( mod => mod.nameForCondition && mod.moduleType !== 'asset/inline' ) || [];\n\n\t\t\tmodules.forEach( module => {\n\t\t\t\tconst imports = modules.reduce( ( acc, { nameForCondition, issuerName, reasons } ) => {\n\t\t\t\t\tif ( issuerName === module.name || reasons?.some( reason => reason.resolvedModule === module.name ) ) {\n\t\t\t\t\t\tacc.push( normalizePath( nameForCondition! ) );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, [] as Array<string> );\n\n\t\t\t\tinputs[ normalizePath( module.nameForCondition! ) ] = {\n\t\t\t\t\tbytes: module.size || 0,\n\t\t\t\t\tformat: getFormat( module ),\n\t\t\t\t\timports,\n\t\t\t\t\tbelongsTo: null\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\treturn generateReportFromAssets(\n\t\t\t\tstats.assets?.map( asset => join( outputPath, asset.name ) ) || [],\n\t\t\t\tinputs,\n\t\t\t\tnormalizeOptions( this.options )\n\t\t\t);\n\t\t} );\n\t}\n}\n\nfunction getFormat( module: StatsModule ): ModuleFormat {\n\tif ( !jsRegexp.test( module.nameForCondition! ) ) {\n\t\treturn 'unknown';\n\t}\n\n\t/**\n\t * Sometimes ESM modules have `moduleType` set as `javascript/auto`, so we\n\t * also need to check if the module has exports to determine if it's ESM.\n\t */\n\tif ( module.moduleType === 'javascript/esm' || !!module.providedExports?.length ) {\n\t\treturn 'esm';\n\t}\n\n\treturn 'cjs';\n}\n"],"names":["cwd","process","normalizeOptions","options","defaultOptions","open","format","detailed","gzip","brotli","Object","assign","normalizePath","path","normalized","replace","relativized","relative","replaceAll","sep","posix","parseSourceMapInput","str","JSON","parse","sourceMappingRegExp","loadCodeAndMap","codePath","existsSync","code","readFileSync","extractedComment","includes","Array","from","matchAll","at","length","maybeMap","loadMap","map","mapPath","sources","normalizeSourcesPaths","sourcesContent","loadMissingSourcesContent","sourceRoot","sourceMappingURL","startsWith","parseDataUrl","sourceMapFilename","URL","pathname","join","dirname","url","prefix","payload","split","encoding","Buffer","toString","decodeURIComponent","Error","mapDir","source","isAbsolute","resolve","index","mapSourceMap","dirPath","inputs","alreadyRemapped","Set","remapped","remapping","file","ctx","has","add","codeMap","addSourcesToInputs","content","decodedMappings","parentPath","filter","forEach","normalizedPath","bytes","byteLength","imports","belongsTo","UNASSIGNED","getBytesPerSource","assetSizes","contributions","getContributions","codeLines","lineIndex","lineCode","mappings","currentColumn","i","mapping","startColumn","endColumn","set","get","slice","sourceIndex","codeSlice","undefined","sourceSizes","Map","contributionsSum","uncompressed","codeSegment","sizes","getSizes","adjustSizes","gzipSync","brotliCompressSync","asset","sums","gzipDelta","brotliDelta","Math","round","generateJsonReport","assets","outputs","endsWith","reduce","carry","data","processAsset","generateHtmlReport","json","__dirname","fileURLToPath","template","stringify","maybeCodeMap","hasCodeAndMap","mapped","decode","result","Boolean","generateReportFromAssets","default","handler","saveHtml","saveJson","report","writeFileSync","SondaEsbuildPlugin","name","setup","build","initialOptions","metafile","onEnd","console","error","normalizedOptions","entries","acc","keys","esmRegex","cjsRegex","SondaRollupPlugin","writeBundle","dir","bundle","outputDir","moduleParsed","module","id","getFormat","meta","commonjs","isCommonJS","importedIds","moduleId","test","jsRegexp","SondaWebpackPlugin","apply","compiler","output","devtoolModuleFilenameTemplate","hooks","afterEmit","tapPromise","compilation","stats","getStats","toJson","modules","providedExports","outputPath","mod","nameForCondition","moduleType","issuerName","reasons","some","reason","resolvedModule","push","size","constructor"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAIX,OAAO,EACR,MAAM,YAAY,CAAC;AAGpB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,GACf,UAAU,CAiBZ;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,GACf,MAAM,CAMR"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAIX,OAAO,EACR,MAAM,YAAY,CAAC;AAGpB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,GACf,UAAU,CAiBZ;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,GACf,MAAM,CAMR"}
@@ -1,4 +1,8 @@
1
1
  import { type DecodedSourceMap, type EncodedSourceMap } from '@ampproject/remapping';
2
- import type { Options, ReportInput } from '../types';
3
- export declare function mapSourceMap(map: EncodedSourceMap, dirPath: string, inputs: Record<string, ReportInput>, options: Options): DecodedSourceMap;
2
+ import type { CodeMap, ReportInput } from '../types';
3
+ export declare function mapSourceMap(map: EncodedSourceMap, dirPath: string, inputs: Record<string, ReportInput>): DecodedSourceMap;
4
+ /**
5
+ * Loads the source map of a given file and adds its "sources" to the given inputs object.
6
+ */
7
+ export declare function addSourcesToInputs(path: string, inputs: Record<string, ReportInput>): CodeMap | null;
4
8
  //# sourceMappingURL=map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/sourcemap/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI3G,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAErD,wBAAgB,YAAY,CAC3B,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,GACd,gBAAgB,CA6ClB"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/sourcemap/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI3G,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAErD,wBAAgB,YAAY,CAC3B,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACjC,gBAAgB,CAwBlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACjC,OAAO,GAAG,IAAI,CA4BhB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonda",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Universal visualizer and analyzer for JavaScript and CSS bundles. Works with Vite, Rollup, webpack, and esbuild",
5
5
  "keywords": [
6
6
  "bundle analyzer",
@@ -34,6 +34,7 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "@ampproject/remapping": "^2.3.0",
37
+ "@jridgewell/sourcemap-codec": "^1.5.0",
37
38
  "open": "^10.1.0"
38
39
  }
39
40
  }