sonda 0.2.2 → 0.4.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 +24 -0
- package/README.md +23 -1
- package/dist/bundlers/esbuild.d.ts.map +1 -1
- package/dist/bundlers/rollup.d.ts.map +1 -1
- package/dist/bundlers/webpack.d.ts +2 -3
- package/dist/bundlers/webpack.d.ts.map +1 -1
- package/dist/index.cjs +126 -87
- package/dist/index.cjs.map +1 -1
- package/dist/index.html +2 -3
- package/dist/index.js +125 -86
- package/dist/index.js.map +1 -1
- package/dist/report/generate.d.ts +1 -1
- package/dist/report/generate.d.ts.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/sourcemap/map.d.ts +6 -2
- package/dist/sourcemap/map.d.ts.map +1 -1
- package/dist/utils.d.ts +4 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- ca8322a: Add modal showing list of duplicated modules
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- e20ec92: Rollup plugin: Fix detection of the ES modules when `@rollup/plugin-commonjs` plugin is not installed
|
|
12
|
+
- 52ae692: Update dependencies
|
|
13
|
+
- e20ec92: Webpack plugin: Fix reported files sizes, which sometimes included imported dependencies.
|
|
14
|
+
|
|
15
|
+
## 0.3.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- b7831e3: Update the webpack plugin to make it work with Rspack
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 30ddb2b: Add missing `sourcesContent` to source maps when they are available in the filesystem
|
|
24
|
+
- e825cfa: Configure npm package provenance
|
|
25
|
+
- e825cfa: Fix missing `inputs` in the report created by the esbuild plugin.
|
|
26
|
+
|
|
3
27
|
## 0.2.2
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Sonda works with the following bundlers:
|
|
|
8
8
|
* Rollup
|
|
9
9
|
* esbuild
|
|
10
10
|
* webpack
|
|
11
|
+
* Rspack
|
|
11
12
|
|
|
12
13
|

|
|
13
14
|
|
|
@@ -111,7 +112,27 @@ module.exports = {
|
|
|
111
112
|
};
|
|
112
113
|
```
|
|
113
114
|
|
|
114
|
-
Internally, Sonda changes the default webpack configuration to output
|
|
115
|
+
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]'`).
|
|
116
|
+
|
|
117
|
+
</details>
|
|
118
|
+
|
|
119
|
+
<details>
|
|
120
|
+
<summary>Rspack</summary>
|
|
121
|
+
|
|
122
|
+
```javascript
|
|
123
|
+
// rspack.config.js
|
|
124
|
+
|
|
125
|
+
import { SondaWebpackPlugin } from 'sonda';
|
|
126
|
+
|
|
127
|
+
export default {
|
|
128
|
+
devtool: 'source-map',
|
|
129
|
+
plugins: [
|
|
130
|
+
new SondaWebpackPlugin(),
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
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
136
|
|
|
116
137
|
</details>
|
|
117
138
|
|
|
@@ -123,6 +144,7 @@ Each plugin accepts an optional configuration object with the following options.
|
|
|
123
144
|
SondaRollupPlugin( {
|
|
124
145
|
format: 'html',
|
|
125
146
|
open: true,
|
|
147
|
+
detailed: true,
|
|
126
148
|
gzip: true,
|
|
127
149
|
brotli: true,
|
|
128
150
|
} )
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esbuild.d.ts","sourceRoot":"","sources":["../../src/bundlers/esbuild.ts"],"names":[],"mappings":"
|
|
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;AAEpD,wBAAgB,kBAAkB,CAAE,OAAO,GAAE,OAAO,CAAC,OAAO,CAAM,GAAI,MAAM,CA+C3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/bundlers/rollup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAqD,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/bundlers/rollup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAqD,MAAM,QAAQ,CAAC;AAExF,wBAAgB,iBAAiB,CAAE,OAAO,GAAE,OAAO,CAAC,OAAO,CAAM,GAAI,MAAM,CA6B1E"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
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,
|
|
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;AAElE,qBAAa,kBAAkB;IAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEZ,OAAO,GAAE,OAAO,CAAC,OAAO,CAAM;IAI5C,KAAK,CAAE,QAAQ,EAAE,QAAQ,GAAI,IAAI;CAyCjC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,32 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var path = require('path');
|
|
4
|
+
var remapping = require('@ampproject/remapping');
|
|
4
5
|
var fs = require('fs');
|
|
5
6
|
var url = require('url');
|
|
6
|
-
var
|
|
7
|
+
var sourcemapCodec = require('@jridgewell/sourcemap-codec');
|
|
7
8
|
var zlib = require('zlib');
|
|
8
9
|
|
|
9
10
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
10
|
-
const cwd = /* #__PURE__ */ process.cwd();
|
|
11
|
-
function normalizeOptions(options) {
|
|
12
|
-
const defaultOptions = {
|
|
13
|
-
open: true,
|
|
14
|
-
format: 'html',
|
|
15
|
-
detailed: false,
|
|
16
|
-
gzip: false,
|
|
17
|
-
brotli: false
|
|
18
|
-
};
|
|
19
|
-
return Object.assign({}, defaultOptions, options);
|
|
20
|
-
}
|
|
21
|
-
function normalizePath(path$1) {
|
|
22
|
-
// Unicode escape sequences used by Rollup and Vite to identify virtual modules
|
|
23
|
-
const normalized = path$1.replace(/^\0/, '');
|
|
24
|
-
// Transform absolute paths to relative paths
|
|
25
|
-
const relativized = path.relative(cwd, normalized);
|
|
26
|
-
// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687
|
|
27
|
-
return relativized.replaceAll(path.sep, path.posix.sep);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
11
|
/**
|
|
31
12
|
* Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification),
|
|
32
13
|
* and parses the string as JSON.
|
|
@@ -61,6 +42,7 @@ function loadCodeAndMap(codePath) {
|
|
|
61
42
|
}
|
|
62
43
|
const { map, mapPath } = maybeMap;
|
|
63
44
|
map.sources = normalizeSourcesPaths(map, mapPath);
|
|
45
|
+
map.sourcesContent = loadMissingSourcesContent(map);
|
|
64
46
|
delete map.sourceRoot;
|
|
65
47
|
return {
|
|
66
48
|
code,
|
|
@@ -97,7 +79,9 @@ function parseDataUrl(url) {
|
|
|
97
79
|
throw new Error('Unsupported source map encoding: ' + encoding);
|
|
98
80
|
}
|
|
99
81
|
}
|
|
100
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Normalize the paths of the sources in the source map to be absolute paths.
|
|
84
|
+
*/ function normalizeSourcesPaths(map, mapPath) {
|
|
101
85
|
const mapDir = path.dirname(mapPath);
|
|
102
86
|
return map.sources.map((source)=>{
|
|
103
87
|
if (!source) {
|
|
@@ -106,8 +90,42 @@ function normalizeSourcesPaths(map, mapPath) {
|
|
|
106
90
|
return path.isAbsolute(source) ? source : path.resolve(mapDir, map.sourceRoot ?? '.', source);
|
|
107
91
|
});
|
|
108
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Loop through the sources and try to load missing `sourcesContent` from the file system.
|
|
95
|
+
*/ function loadMissingSourcesContent(map) {
|
|
96
|
+
return map.sources.map((source, index)=>{
|
|
97
|
+
if (map.sourcesContent?.[index]) {
|
|
98
|
+
return map.sourcesContent[index];
|
|
99
|
+
}
|
|
100
|
+
if (source && fs.existsSync(source)) {
|
|
101
|
+
return fs.readFileSync(source, 'utf-8');
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const cjsRegex = /\.c[tj]sx?$/;
|
|
108
|
+
const jsRegexp = /\.[cm]?[tj]s[x]?$/;
|
|
109
|
+
function normalizeOptions(options) {
|
|
110
|
+
const defaultOptions = {
|
|
111
|
+
open: true,
|
|
112
|
+
format: 'html',
|
|
113
|
+
detailed: false,
|
|
114
|
+
gzip: false,
|
|
115
|
+
brotli: false
|
|
116
|
+
};
|
|
117
|
+
return Object.assign({}, defaultOptions, options);
|
|
118
|
+
}
|
|
119
|
+
function normalizePath(pathToNormalize) {
|
|
120
|
+
// Unicode escape sequences used by Rollup and Vite to identify virtual modules
|
|
121
|
+
const normalized = pathToNormalize.replace(/^\0/, '');
|
|
122
|
+
// Transform absolute paths to relative paths
|
|
123
|
+
const relativized = path.relative(process.cwd(), normalized);
|
|
124
|
+
// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687
|
|
125
|
+
return relativized.replaceAll(path.win32.sep, path.posix.sep);
|
|
126
|
+
}
|
|
109
127
|
|
|
110
|
-
function mapSourceMap(map, dirPath, inputs
|
|
128
|
+
function mapSourceMap(map, dirPath, inputs) {
|
|
111
129
|
const alreadyRemapped = new Set();
|
|
112
130
|
const remapped = remapping(map, (file, ctx)=>{
|
|
113
131
|
var _ctx;
|
|
@@ -115,27 +133,10 @@ function mapSourceMap(map, dirPath, inputs, options) {
|
|
|
115
133
|
return;
|
|
116
134
|
}
|
|
117
135
|
alreadyRemapped.add(file);
|
|
118
|
-
const codeMap =
|
|
136
|
+
const codeMap = addSourcesToInputs(path.resolve(dirPath, file), inputs);
|
|
119
137
|
if (!codeMap) {
|
|
120
138
|
return;
|
|
121
139
|
}
|
|
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
140
|
(_ctx = ctx).content ?? (_ctx.content = codeMap.code);
|
|
140
141
|
return codeMap.map;
|
|
141
142
|
}, {
|
|
@@ -143,6 +144,29 @@ function mapSourceMap(map, dirPath, inputs, options) {
|
|
|
143
144
|
});
|
|
144
145
|
return remapped;
|
|
145
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Loads the source map of a given file and adds its "sources" to the given inputs object.
|
|
149
|
+
*/ function addSourcesToInputs(path, inputs) {
|
|
150
|
+
const codeMap = loadCodeAndMap(path);
|
|
151
|
+
if (!codeMap) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const parentPath = normalizePath(path);
|
|
155
|
+
const format = inputs[parentPath]?.format ?? 'unknown';
|
|
156
|
+
codeMap.map?.sources.filter((source)=>source !== null).forEach((source, index)=>{
|
|
157
|
+
const normalizedPath = normalizePath(source);
|
|
158
|
+
if (parentPath === normalizedPath) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
inputs[normalizedPath] = {
|
|
162
|
+
bytes: Buffer.byteLength(codeMap.map.sourcesContent?.[index] ?? ''),
|
|
163
|
+
format,
|
|
164
|
+
imports: [],
|
|
165
|
+
belongsTo: parentPath
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
return codeMap;
|
|
169
|
+
}
|
|
146
170
|
|
|
147
171
|
const UNASSIGNED = '[unassigned]';
|
|
148
172
|
function getBytesPerSource(code, map, assetSizes, options) {
|
|
@@ -257,7 +281,10 @@ function processAsset(asset, inputs, options) {
|
|
|
257
281
|
return;
|
|
258
282
|
}
|
|
259
283
|
const { code, map } = maybeCodeMap;
|
|
260
|
-
const mapped = mapSourceMap(map, path.dirname(asset), inputs
|
|
284
|
+
const mapped = options.detailed ? mapSourceMap(map, path.dirname(asset), inputs) : {
|
|
285
|
+
...map,
|
|
286
|
+
mappings: sourcemapCodec.decode(map.mappings)
|
|
287
|
+
};
|
|
261
288
|
mapped.sources = mapped.sources.map((source)=>normalizePath(source));
|
|
262
289
|
const assetSizes = getSizes(code, options);
|
|
263
290
|
const bytes = getBytesPerSource(code, mapped, assetSizes, options);
|
|
@@ -273,11 +300,18 @@ function hasCodeAndMap(result) {
|
|
|
273
300
|
return Boolean(result && result.code && result.map);
|
|
274
301
|
}
|
|
275
302
|
|
|
276
|
-
async function generateReportFromAssets(assets, inputs,
|
|
277
|
-
const
|
|
303
|
+
async function generateReportFromAssets(assets, inputs, userOptions) {
|
|
304
|
+
const options = normalizeOptions(userOptions);
|
|
278
305
|
const handler = options.format === 'html' ? saveHtml : saveJson;
|
|
279
306
|
const path = handler(assets, inputs, options);
|
|
280
|
-
options.open
|
|
307
|
+
if (!options.open || !path) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* `open` is ESM-only package, so we need to import it
|
|
312
|
+
* dynamically to make it work in CommonJS environment.
|
|
313
|
+
*/ const { default: open } = await import('open');
|
|
314
|
+
open(path);
|
|
281
315
|
}
|
|
282
316
|
function saveHtml(assets, inputs, options) {
|
|
283
317
|
const report = generateHtmlReport(assets, inputs, options);
|
|
@@ -292,40 +326,47 @@ function saveJson(assets, inputs, options) {
|
|
|
292
326
|
return path$1;
|
|
293
327
|
}
|
|
294
328
|
|
|
295
|
-
function SondaEsbuildPlugin(options) {
|
|
329
|
+
function SondaEsbuildPlugin(options = {}) {
|
|
296
330
|
return {
|
|
297
331
|
name: 'sonda',
|
|
298
332
|
setup (build) {
|
|
299
333
|
build.initialOptions.metafile = true;
|
|
334
|
+
// Esbuild already reads the existing source maps, so there's no need to do it again
|
|
335
|
+
options.detailed = false;
|
|
300
336
|
build.onEnd((result)=>{
|
|
301
337
|
if (!result.metafile) {
|
|
302
338
|
return console.error('Metafile is required for SondaEsbuildPlugin to work.');
|
|
303
339
|
}
|
|
304
|
-
const
|
|
305
|
-
|
|
340
|
+
const cwd = process.cwd();
|
|
341
|
+
const inputs = Object.entries(result.metafile.inputs).reduce((acc, [path$1, data])=>{
|
|
342
|
+
acc[path$1] = {
|
|
306
343
|
bytes: data.bytes,
|
|
307
344
|
format: data.format ?? 'unknown',
|
|
308
345
|
imports: data.imports.map((data)=>data.path),
|
|
309
346
|
belongsTo: null
|
|
310
347
|
};
|
|
348
|
+
/**
|
|
349
|
+
* Because esbuild already reads the existing source maps, there may be
|
|
350
|
+
* cases where some report "outputs" include "inputs" don't exist in the
|
|
351
|
+
* main "inputs" object. To avoid this, we parse each esbuild input and
|
|
352
|
+
* add its sources to the "inputs" object.
|
|
353
|
+
*/ addSourcesToInputs(path.resolve(cwd, path$1), acc);
|
|
311
354
|
return acc;
|
|
312
355
|
}, {});
|
|
313
|
-
return generateReportFromAssets(Object.keys(result.metafile.outputs), inputs,
|
|
356
|
+
return generateReportFromAssets(Object.keys(result.metafile.outputs).map((path$1)=>path.resolve(cwd, path$1)), inputs, options);
|
|
314
357
|
});
|
|
315
358
|
}
|
|
316
359
|
};
|
|
317
360
|
}
|
|
318
361
|
|
|
319
|
-
|
|
320
|
-
const cjsRegex = /\.c[tj]sx?$/;
|
|
321
|
-
function SondaRollupPlugin(options) {
|
|
362
|
+
function SondaRollupPlugin(options = {}) {
|
|
322
363
|
let inputs = {};
|
|
323
364
|
return {
|
|
324
365
|
name: 'sonda',
|
|
325
366
|
writeBundle ({ dir, file }, bundle) {
|
|
326
367
|
const outputDir = path.resolve(process.cwd(), dir ?? path.dirname(file));
|
|
327
368
|
const assets = Object.keys(bundle).map((name)=>path.join(outputDir, name));
|
|
328
|
-
return generateReportFromAssets(assets, inputs,
|
|
369
|
+
return generateReportFromAssets(assets, inputs, options);
|
|
329
370
|
},
|
|
330
371
|
moduleParsed (module) {
|
|
331
372
|
inputs[normalizePath(module.id)] = {
|
|
@@ -341,61 +382,59 @@ function getFormat$1(moduleId, isCommonJS) {
|
|
|
341
382
|
if (isCommonJS === true || cjsRegex.test(moduleId)) {
|
|
342
383
|
return 'cjs';
|
|
343
384
|
}
|
|
344
|
-
if (isCommonJS === false ||
|
|
385
|
+
if (isCommonJS === false || jsRegexp.test(moduleId)) {
|
|
345
386
|
return 'esm';
|
|
346
387
|
}
|
|
347
388
|
return 'unknown';
|
|
348
389
|
}
|
|
349
390
|
|
|
350
|
-
const jsRegexp = /\.[c|m]?[t|j]s[x]?$/;
|
|
351
391
|
class SondaWebpackPlugin {
|
|
352
392
|
apply(compiler) {
|
|
353
393
|
compiler.options.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';
|
|
354
|
-
compiler.hooks.
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
394
|
+
compiler.hooks.afterEmit.tapPromise('SondaWebpackPlugin', (compilation)=>{
|
|
395
|
+
const inputs = {};
|
|
396
|
+
const stats = compilation.getStats().toJson({
|
|
397
|
+
modules: true,
|
|
398
|
+
providedExports: true
|
|
399
|
+
});
|
|
400
|
+
const outputPath = stats.outputPath || compiler.outputPath;
|
|
401
|
+
const modules = stats.modules?.flatMap((mod)=>mod.modules ? [
|
|
402
|
+
mod,
|
|
403
|
+
...mod.modules
|
|
404
|
+
] : mod).filter((mod)=>mod.nameForCondition && !mod.codeGenerated).filter((mod, index, self)=>self.findIndex((m)=>m.nameForCondition === mod.nameForCondition) === index) || [];
|
|
405
|
+
modules.forEach((module)=>{
|
|
406
|
+
const imports = modules.reduce((acc, { nameForCondition, issuerName, reasons })=>{
|
|
407
|
+
if (issuerName === module.name || reasons?.some((reason)=>reason.resolvedModule === module.name)) {
|
|
408
|
+
acc.push(normalizePath(nameForCondition));
|
|
359
409
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
bytes: module.size(),
|
|
369
|
-
format: getFormat(module),
|
|
370
|
-
imports,
|
|
371
|
-
belongsTo: null
|
|
372
|
-
};
|
|
373
|
-
});
|
|
410
|
+
return acc;
|
|
411
|
+
}, []);
|
|
412
|
+
inputs[normalizePath(module.nameForCondition)] = {
|
|
413
|
+
bytes: module.size || 0,
|
|
414
|
+
format: getFormat(module),
|
|
415
|
+
imports,
|
|
416
|
+
belongsTo: null
|
|
417
|
+
};
|
|
374
418
|
});
|
|
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());
|
|
419
|
+
return generateReportFromAssets(stats.assets?.map((asset)=>path.join(outputPath, asset.name)) || [], inputs, this.options);
|
|
380
420
|
});
|
|
381
421
|
}
|
|
382
|
-
constructor(options){
|
|
383
|
-
this.options = options
|
|
384
|
-
this.inputs = {};
|
|
422
|
+
constructor(options = {}){
|
|
423
|
+
this.options = options;
|
|
385
424
|
}
|
|
386
425
|
}
|
|
387
426
|
function getFormat(module) {
|
|
388
|
-
if (!jsRegexp.test(module.
|
|
427
|
+
if (!jsRegexp.test(module.nameForCondition)) {
|
|
389
428
|
return 'unknown';
|
|
390
429
|
}
|
|
391
|
-
|
|
430
|
+
/**
|
|
431
|
+
* Sometimes ESM modules have `moduleType` set as `javascript/auto`, so we
|
|
432
|
+
* also need to check if the module has exports to determine if it's ESM.
|
|
433
|
+
*/ if (module.moduleType === 'javascript/esm' || !!module.providedExports?.length) {
|
|
392
434
|
return 'esm';
|
|
393
435
|
}
|
|
394
436
|
return 'cjs';
|
|
395
437
|
}
|
|
396
|
-
function isNormalModule(module) {
|
|
397
|
-
return module !== null && 'resource' in module;
|
|
398
|
-
}
|
|
399
438
|
|
|
400
439
|
exports.SondaEsbuildPlugin = SondaEsbuildPlugin;
|
|
401
440
|
exports.SondaRollupPlugin = SondaRollupPlugin;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":["../../load-source-map/dist/index.js","../src/utils.ts","../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 { 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 { relative, win32, posix } from 'path';\nimport type { Options } from './types';\n\nexport const esmRegex: RegExp = /\\.m[tj]sx?$/;\nexport const cjsRegex: RegExp = /\\.c[tj]sx?$/;\nexport const jsRegexp: RegExp = /\\.[cm]?[tj]s[x]?$/;\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( pathToNormalize: string ): string {\n\t// Unicode escape sequences used by Rollup and Vite to identify virtual modules\n\tconst normalized = pathToNormalize.replace( /^\\0/, '' )\n\n\t// Transform absolute paths to relative paths\n\tconst relativized = relative( process.cwd(), normalized );\n\n\t// Ensure paths are POSIX-compliant - https://stackoverflow.com/a/63251716/4617687\n\treturn relativized.replaceAll( win32.sep, posix.sep );\n}\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 { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, resolve } from 'path';\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';\nimport { normalizeOptions } from '../utils.js';\n\nexport async function generateReportFromAssets(\n\tassets: string[],\n\tinputs: JsonReport[ 'inputs' ],\n\tuserOptions: Partial<Options>\n): Promise<void> {\n\tconst options = normalizeOptions( userOptions );\n\tconst handler = options.format === 'html' ? saveHtml : saveJson;\n\tconst path = handler( assets, inputs, options );\n\n\tif ( !options.open || !path ) {\n\t\treturn;\n\t}\n\n\t/**\n\t * `open` is ESM-only package, so we need to import it\n\t * dynamically to make it work in CommonJS environment.\n\t */\n\tconst { default: open } = await import( 'open' );\n\n\topen( 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 { addSourcesToInputs } from '../sourcemap/map';\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\t// Esbuild already reads the existing source maps, so there's no need to do it again\n\t\t\toptions.detailed = false;\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 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 ).map( path => resolve( cwd, path ) ),\n\t\t\t\t\tinputs,\n\t\t\t\t\toptions\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t};\n}\n","import { join, resolve, dirname } from 'path';\nimport { normalizePath, cjsRegex, jsRegexp } 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\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\toptions\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 || jsRegexp.test( moduleId ) ) {\n\t\treturn 'esm';\n\t}\n\n\treturn'unknown';\n}\n","import { join } from 'path';\nimport { normalizePath, jsRegexp } from '../utils';\nimport { generateReportFromAssets } from '../report/generate';\nimport type { Compiler, StatsModule } from 'webpack';\nimport type { Options, ModuleFormat, JsonReport } from '../types';\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: Array<StatsModule> = stats.modules\n\t\t\t\t?.flatMap( mod => mod.modules ? [ mod, ...mod.modules ] : mod )\n\t\t\t\t.filter( mod => mod.nameForCondition && !mod.codeGenerated )\n\t\t\t\t.filter( ( mod, index, self ) => self.findIndex( m => m.nameForCondition === mod.nameForCondition ) === index )\n\t\t\t\t|| [];\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\tthis.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":["parseSourceMapInput","str","JSON","parse","replace","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","cjsRegex","jsRegexp","normalizeOptions","options","defaultOptions","open","format","detailed","gzip","brotli","Object","assign","normalizePath","pathToNormalize","normalized","relativized","relative","process","cwd","replaceAll","win32","sep","posix","mapSourceMap","dirPath","inputs","alreadyRemapped","Set","remapped","remapping","file","ctx","has","add","codeMap","addSourcesToInputs","content","decodedMappings","path","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","userOptions","handler","saveHtml","saveJson","default","report","writeFileSync","SondaEsbuildPlugin","name","setup","build","initialOptions","metafile","onEnd","console","error","entries","acc","keys","SondaRollupPlugin","writeBundle","dir","bundle","outputDir","moduleParsed","module","id","getFormat","meta","commonjs","isCommonJS","importedIds","moduleId","test","SondaWebpackPlugin","apply","compiler","output","devtoolModuleFilenameTemplate","hooks","afterEmit","tapPromise","compilation","stats","getStats","toJson","modules","providedExports","outputPath","flatMap","mod","nameForCondition","codeGenerated","self","findIndex","m","issuerName","reasons","some","reason","resolvedModule","push","size","constructor","moduleType"],"mappings":"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"}
|