npm-package-doctor 0.1.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 +10 -0
- package/LICENSE +21 -0
- package/README.md +239 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/reporters/htmlReporter.d.ts +3 -0
- package/dist/reporters/htmlReporter.d.ts.map +1 -0
- package/dist/reporters/htmlReporter.js +316 -0
- package/dist/reporters/htmlReporter.js.map +1 -0
- package/dist/reporters/jsonReporter.d.ts +3 -0
- package/dist/reporters/jsonReporter.d.ts.map +1 -0
- package/dist/reporters/jsonReporter.js +4 -0
- package/dist/reporters/jsonReporter.js.map +1 -0
- package/dist/reporters/terminalReporter.d.ts +6 -0
- package/dist/reporters/terminalReporter.d.ts.map +1 -0
- package/dist/reporters/terminalReporter.js +74 -0
- package/dist/reporters/terminalReporter.js.map +1 -0
- package/dist/scanner/analyzeDependency.d.ts +3 -0
- package/dist/scanner/analyzeDependency.d.ts.map +1 -0
- package/dist/scanner/analyzeDependency.js +58 -0
- package/dist/scanner/analyzeDependency.js.map +1 -0
- package/dist/scanner/fetchNpmMetadata.d.ts +6 -0
- package/dist/scanner/fetchNpmMetadata.d.ts.map +1 -0
- package/dist/scanner/fetchNpmMetadata.js +148 -0
- package/dist/scanner/fetchNpmMetadata.js.map +1 -0
- package/dist/scanner/readPackageJson.d.ts +3 -0
- package/dist/scanner/readPackageJson.d.ts.map +1 -0
- package/dist/scanner/readPackageJson.js +72 -0
- package/dist/scanner/readPackageJson.js.map +1 -0
- package/dist/scanner/scanProject.d.ts +3 -0
- package/dist/scanner/scanProject.d.ts.map +1 -0
- package/dist/scanner/scanProject.js +88 -0
- package/dist/scanner/scanProject.js.map +1 -0
- package/dist/scoring/calculatePackageScore.d.ts +4 -0
- package/dist/scoring/calculatePackageScore.d.ts.map +1 -0
- package/dist/scoring/calculatePackageScore.js +77 -0
- package/dist/scoring/calculatePackageScore.js.map +1 -0
- package/dist/scoring/calculateProjectScore.d.ts +3 -0
- package/dist/scoring/calculateProjectScore.d.ts.map +1 -0
- package/dist/scoring/calculateProjectScore.js +51 -0
- package/dist/scoring/calculateProjectScore.js.map +1 -0
- package/dist/types/index.d.ts +125 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/banner.d.ts +9 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +48 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +4 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +31 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/dist/utils/formatDate.d.ts +3 -0
- package/dist/utils/formatDate.d.ts.map +1 -0
- package/dist/utils/formatDate.js +22 -0
- package/dist/utils/formatDate.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +9 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/semverUtils.d.ts +6 -0
- package/dist/utils/semverUtils.d.ts.map +1 -0
- package/dist/utils/semverUtils.js +25 -0
- package/dist/utils/semverUtils.js.map +1 -0
- package/docs/architecture.md +93 -0
- package/docs/interview-explanation.md +74 -0
- package/docs/roadmap.md +32 -0
- package/package.json +64 -0
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sri Pavan Tej Balam
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# npm-package-doctor
|
|
2
|
+
|
|
3
|
+
[](https://github.com/sripavantejb/npm-package-doctor/actions/workflows/ci.yml)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
|
|
6
|
+
A CLI that scans npm dependencies and generates package health, security, and maintainability reports.
|
|
7
|
+
|
|
8
|
+
`npm-package-doctor` is an independent open-source CLI for the npm ecosystem. It is not official npm software.
|
|
9
|
+
|
|
10
|
+
## Problem Statement
|
|
11
|
+
|
|
12
|
+
Modern JavaScript projects often depend on dozens or hundreds of packages. A single dependency can introduce maintenance risk, license uncertainty, lifecycle scripts, stale releases, or supply-chain exposure. Developers need a quick way to inspect dependency health before upgrades, releases, and reviews.
|
|
13
|
+
|
|
14
|
+
## Why This Exists
|
|
15
|
+
|
|
16
|
+
`npm-package-doctor` turns dependency metadata into a readable health report. It combines package.json data, npm registry metadata, simple scoring rules, and professional report formats so teams can make better dependency decisions without digging through registry pages one package at a time.
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- Scans `dependencies`, `devDependencies`, `optionalDependencies`, and `peerDependencies`
|
|
21
|
+
- Supports custom project paths
|
|
22
|
+
- Fetches npm registry metadata for each dependency
|
|
23
|
+
- Scores package health from 0 to 100
|
|
24
|
+
- Flags deprecated packages, missing licenses, missing repositories, stale publish dates, single-maintainer packages, high dependency counts, metadata failures, and install lifecycle scripts
|
|
25
|
+
- Calculates an overall project score and risk level
|
|
26
|
+
- Prints a polished terminal report
|
|
27
|
+
- Writes valid JSON reports for scripts and dashboards
|
|
28
|
+
- Creates a self-contained HTML report with inline CSS
|
|
29
|
+
- Includes an interactive CLI banner for terminal reports
|
|
30
|
+
- Ships with TypeScript types, tests, CI, and open-source project files
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
Run with npx:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx npm-package-doctor scan
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Install globally:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install -g npm-package-doctor
|
|
44
|
+
npm-package-doctor scan
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For local development:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install
|
|
51
|
+
npm run build
|
|
52
|
+
node dist/cli.js scan --path .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Usage
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm-package-doctor scan
|
|
59
|
+
npm-package-doctor scan --path ./some-project
|
|
60
|
+
npm-package-doctor scan --json
|
|
61
|
+
npm-package-doctor scan --html
|
|
62
|
+
npm-package-doctor scan --output report.json
|
|
63
|
+
npm-package-doctor scan --output report.html
|
|
64
|
+
npm-package-doctor scan --include-dev
|
|
65
|
+
npm-package-doctor scan --only production
|
|
66
|
+
npm-package-doctor scan --only development
|
|
67
|
+
npm-package-doctor scan --no-banner
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## CLI Options
|
|
71
|
+
|
|
72
|
+
| Option | Description |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `--path <path>` | Scan a project directory or a direct `package.json` path. Defaults to the current directory. |
|
|
75
|
+
| `--json` | Print valid JSON to stdout, or write JSON when used with `--output`. |
|
|
76
|
+
| `--html` | Generate a self-contained HTML report. |
|
|
77
|
+
| `--output <file>` | Write the selected report to a file. `.json` and `.html` extensions are detected when no format flag is supplied. |
|
|
78
|
+
| `--include-dev` | Compatibility alias. The default scan already includes development dependencies. |
|
|
79
|
+
| `--only <scope>` | Limit the scan to `production` or `development` dependencies. |
|
|
80
|
+
| `--no-banner` | Hide the interactive terminal banner. |
|
|
81
|
+
|
|
82
|
+
## Example Terminal Output
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
npm-package-doctor report
|
|
86
|
+
|
|
87
|
+
Project: my-node-app
|
|
88
|
+
Packages scanned: 42
|
|
89
|
+
Overall score: 78/100
|
|
90
|
+
Risk level: Medium
|
|
91
|
+
|
|
92
|
+
Summary:
|
|
93
|
+
- Deprecated packages: 2
|
|
94
|
+
- Packages with install scripts: 3
|
|
95
|
+
- Packages with missing licenses: 1
|
|
96
|
+
- Inactive packages: 5
|
|
97
|
+
|
|
98
|
+
High risk packages:
|
|
99
|
+
|
|
100
|
+
old-package (production)
|
|
101
|
+
Score: 42/100
|
|
102
|
+
Reasons:
|
|
103
|
+
- Package is deprecated.
|
|
104
|
+
- Last published more than 3 years ago.
|
|
105
|
+
Recommendations:
|
|
106
|
+
- Replace deprecated packages with maintained alternatives.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## JSON Report Usage
|
|
110
|
+
|
|
111
|
+
Print JSON only:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm-package-doctor scan --json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Write JSON:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm-package-doctor scan --json --output report.json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
JSON mode never prints the banner or colored terminal text, which makes it safe for scripts.
|
|
124
|
+
|
|
125
|
+
## HTML Report Usage
|
|
126
|
+
|
|
127
|
+
Generate the default HTML report:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm-package-doctor scan --html
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Choose the output file:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm-package-doctor scan --html --output package-health-report.html
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The HTML report is self-contained and includes the project summary, overall score, risk badges, dependency table, reasons, recommendations, author details, and timestamp.
|
|
140
|
+
|
|
141
|
+
## Scoring Explanation
|
|
142
|
+
|
|
143
|
+
Each package starts at 100 points. The score is reduced for clear, explainable signals:
|
|
144
|
+
|
|
145
|
+
- Deprecated package
|
|
146
|
+
- Metadata fetch failure
|
|
147
|
+
- Missing license
|
|
148
|
+
- Missing repository
|
|
149
|
+
- Last publish date older than 1, 2, or 3 years
|
|
150
|
+
- Requested version at least one major version behind latest
|
|
151
|
+
- Single maintainer or no listed maintainers
|
|
152
|
+
- High runtime dependency count
|
|
153
|
+
- Install lifecycle scripts
|
|
154
|
+
|
|
155
|
+
The project score is based on the average package score, with an additional penalty when critical-risk packages are present.
|
|
156
|
+
|
|
157
|
+
## Risk Levels
|
|
158
|
+
|
|
159
|
+
| Score | Risk level |
|
|
160
|
+
| --- | --- |
|
|
161
|
+
| 80 to 100 | Low |
|
|
162
|
+
| 60 to 79 | Medium |
|
|
163
|
+
| 40 to 59 | High |
|
|
164
|
+
| 0 to 39 | Critical |
|
|
165
|
+
|
|
166
|
+
## Example Use Cases
|
|
167
|
+
|
|
168
|
+
- Review dependency health before a release
|
|
169
|
+
- Compare risk before adding a new package
|
|
170
|
+
- Produce a JSON report for internal dashboards
|
|
171
|
+
- Attach an HTML report to a dependency review
|
|
172
|
+
- Spot deprecated or inactive packages during maintenance
|
|
173
|
+
- Review lifecycle scripts before running installs in sensitive environments
|
|
174
|
+
|
|
175
|
+
## CLI Banner
|
|
176
|
+
|
|
177
|
+
By default, npm-package-doctor shows a short interactive banner when printing terminal reports.
|
|
178
|
+
|
|
179
|
+
Disable it with:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm-package-doctor scan --no-banner
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The banner is hidden for JSON output, CI environments, and non-interactive terminals.
|
|
186
|
+
|
|
187
|
+
## Publishing Checklist
|
|
188
|
+
|
|
189
|
+
Do not publish until final review.
|
|
190
|
+
|
|
191
|
+
Before publishing:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
npm install
|
|
195
|
+
npm run typecheck
|
|
196
|
+
npm test
|
|
197
|
+
npm run build
|
|
198
|
+
npm pack --dry-run
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
When ready:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
npm login
|
|
205
|
+
npm version patch
|
|
206
|
+
npm publish --access public
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Use `npm version minor` or `npm version major` when the release size calls for it.
|
|
210
|
+
|
|
211
|
+
## Roadmap
|
|
212
|
+
|
|
213
|
+
- GitHub Action integration
|
|
214
|
+
- Lockfile analysis
|
|
215
|
+
- npm audit integration
|
|
216
|
+
- SBOM generation
|
|
217
|
+
- Package replacement suggestions
|
|
218
|
+
- Web dashboard
|
|
219
|
+
- Monorepo and workspaces support
|
|
220
|
+
- Trusted publishing and provenance checks
|
|
221
|
+
- Dependency diff between branches
|
|
222
|
+
- Organization-level dependency reports
|
|
223
|
+
|
|
224
|
+
## Contributing
|
|
225
|
+
|
|
226
|
+
Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, workflow, and pull request guidance.
|
|
227
|
+
|
|
228
|
+
## Security Note
|
|
229
|
+
|
|
230
|
+
This project provides risk signals from package metadata. It is not a complete security audit and should be used alongside code review, lockfile review, and vulnerability scanning. See [SECURITY.md](SECURITY.md).
|
|
231
|
+
|
|
232
|
+
## License
|
|
233
|
+
|
|
234
|
+
MIT License. See [LICENSE](LICENSE).
|
|
235
|
+
|
|
236
|
+
## Author
|
|
237
|
+
|
|
238
|
+
Created by Sri Pavan Tej Balam
|
|
239
|
+
GitHub: [@sripavantejb](https://github.com/sripavantejb)
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Command, InvalidArgumentError } from "commander";
|
|
4
|
+
import { renderHtmlReport } from "./reporters/htmlReporter.js";
|
|
5
|
+
import { renderJsonReport } from "./reporters/jsonReporter.js";
|
|
6
|
+
import { renderTerminalReport } from "./reporters/terminalReporter.js";
|
|
7
|
+
import { scanProject } from "./scanner/scanProject.js";
|
|
8
|
+
import { showBanner } from "./utils/banner.js";
|
|
9
|
+
import { writeTextFile } from "./utils/fileUtils.js";
|
|
10
|
+
import { formatError, writeError } from "./utils/logger.js";
|
|
11
|
+
const packageVersion = "0.1.0";
|
|
12
|
+
const program = new Command();
|
|
13
|
+
program
|
|
14
|
+
.name("npm-package-doctor")
|
|
15
|
+
.description("Analyze npm dependencies and generate package health, security, and maintainability reports.")
|
|
16
|
+
.version(packageVersion);
|
|
17
|
+
program
|
|
18
|
+
.command("scan")
|
|
19
|
+
.description("Scan npm dependencies in a Node.js project.")
|
|
20
|
+
.option("--path <path>", "Project path to scan.", process.cwd())
|
|
21
|
+
.option("--json", "Print or write a JSON report.")
|
|
22
|
+
.option("--html", "Generate an HTML report.")
|
|
23
|
+
.option("--output <file>", "Write the selected report to a file.")
|
|
24
|
+
.option("--include-dev", "Include development dependencies. Kept for compatibility; default scans all dependency sections.")
|
|
25
|
+
.option("--only <scope>", "Limit scan to production or development dependencies.", parseOnly)
|
|
26
|
+
.option("--no-banner", "Disable the interactive CLI banner.")
|
|
27
|
+
.action(async (options) => {
|
|
28
|
+
await runScan(options);
|
|
29
|
+
});
|
|
30
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
31
|
+
writeError(formatError(error), false);
|
|
32
|
+
process.exitCode = 1;
|
|
33
|
+
});
|
|
34
|
+
async function runScan(options) {
|
|
35
|
+
const format = determineReportFormat(options);
|
|
36
|
+
try {
|
|
37
|
+
const report = await scanProject({
|
|
38
|
+
projectPath: options.path,
|
|
39
|
+
only: options.only,
|
|
40
|
+
includeDev: options.includeDev
|
|
41
|
+
});
|
|
42
|
+
if (format === "json") {
|
|
43
|
+
const json = renderJsonReport(report);
|
|
44
|
+
if (options.output) {
|
|
45
|
+
await writeTextFile(options.output, json);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
process.stdout.write(json);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (format === "html") {
|
|
52
|
+
const outputPath = options.output ?? "package-health-report.html";
|
|
53
|
+
const writtenPath = await writeTextFile(outputPath, renderHtmlReport(report));
|
|
54
|
+
process.stdout.write(`HTML report written to ${writtenPath}\n`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const terminalReport = renderTerminalReport(report);
|
|
58
|
+
if (options.output) {
|
|
59
|
+
const writtenPath = await writeTextFile(options.output, terminalReport);
|
|
60
|
+
process.stdout.write(`Terminal report written to ${writtenPath}\n`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
showBanner({
|
|
64
|
+
disabled: options.banner === false,
|
|
65
|
+
json: false,
|
|
66
|
+
silent: format !== "terminal"
|
|
67
|
+
});
|
|
68
|
+
process.stdout.write(`${terminalReport}\n`);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (format === "json") {
|
|
72
|
+
process.stderr.write(`${formatError(error)}\n`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
writeError(formatError(error));
|
|
76
|
+
}
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function determineReportFormat(options) {
|
|
81
|
+
if (options.json && options.html) {
|
|
82
|
+
throw new InvalidArgumentError("Choose either --json or --html, not both.");
|
|
83
|
+
}
|
|
84
|
+
const outputExtension = options.output ? path.extname(options.output).toLowerCase() : "";
|
|
85
|
+
if (options.json) {
|
|
86
|
+
if (outputExtension && outputExtension !== ".json") {
|
|
87
|
+
throw new InvalidArgumentError("--json output files should use a .json extension.");
|
|
88
|
+
}
|
|
89
|
+
return "json";
|
|
90
|
+
}
|
|
91
|
+
if (options.html) {
|
|
92
|
+
if (outputExtension && outputExtension !== ".html" && outputExtension !== ".htm") {
|
|
93
|
+
throw new InvalidArgumentError("--html output files should use a .html extension.");
|
|
94
|
+
}
|
|
95
|
+
return "html";
|
|
96
|
+
}
|
|
97
|
+
if (outputExtension === ".json") {
|
|
98
|
+
return "json";
|
|
99
|
+
}
|
|
100
|
+
if (outputExtension === ".html" || outputExtension === ".htm") {
|
|
101
|
+
return "html";
|
|
102
|
+
}
|
|
103
|
+
return "terminal";
|
|
104
|
+
}
|
|
105
|
+
function parseOnly(value) {
|
|
106
|
+
if (value === "production" || value === "development") {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
throw new InvalidArgumentError("--only must be either production or development.");
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/htmlReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGnF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkS3D"}
|