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.
Files changed (71) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +239 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +111 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/reporters/htmlReporter.d.ts +3 -0
  9. package/dist/reporters/htmlReporter.d.ts.map +1 -0
  10. package/dist/reporters/htmlReporter.js +316 -0
  11. package/dist/reporters/htmlReporter.js.map +1 -0
  12. package/dist/reporters/jsonReporter.d.ts +3 -0
  13. package/dist/reporters/jsonReporter.d.ts.map +1 -0
  14. package/dist/reporters/jsonReporter.js +4 -0
  15. package/dist/reporters/jsonReporter.js.map +1 -0
  16. package/dist/reporters/terminalReporter.d.ts +6 -0
  17. package/dist/reporters/terminalReporter.d.ts.map +1 -0
  18. package/dist/reporters/terminalReporter.js +74 -0
  19. package/dist/reporters/terminalReporter.js.map +1 -0
  20. package/dist/scanner/analyzeDependency.d.ts +3 -0
  21. package/dist/scanner/analyzeDependency.d.ts.map +1 -0
  22. package/dist/scanner/analyzeDependency.js +58 -0
  23. package/dist/scanner/analyzeDependency.js.map +1 -0
  24. package/dist/scanner/fetchNpmMetadata.d.ts +6 -0
  25. package/dist/scanner/fetchNpmMetadata.d.ts.map +1 -0
  26. package/dist/scanner/fetchNpmMetadata.js +148 -0
  27. package/dist/scanner/fetchNpmMetadata.js.map +1 -0
  28. package/dist/scanner/readPackageJson.d.ts +3 -0
  29. package/dist/scanner/readPackageJson.d.ts.map +1 -0
  30. package/dist/scanner/readPackageJson.js +72 -0
  31. package/dist/scanner/readPackageJson.js.map +1 -0
  32. package/dist/scanner/scanProject.d.ts +3 -0
  33. package/dist/scanner/scanProject.d.ts.map +1 -0
  34. package/dist/scanner/scanProject.js +88 -0
  35. package/dist/scanner/scanProject.js.map +1 -0
  36. package/dist/scoring/calculatePackageScore.d.ts +4 -0
  37. package/dist/scoring/calculatePackageScore.d.ts.map +1 -0
  38. package/dist/scoring/calculatePackageScore.js +77 -0
  39. package/dist/scoring/calculatePackageScore.js.map +1 -0
  40. package/dist/scoring/calculateProjectScore.d.ts +3 -0
  41. package/dist/scoring/calculateProjectScore.d.ts.map +1 -0
  42. package/dist/scoring/calculateProjectScore.js +51 -0
  43. package/dist/scoring/calculateProjectScore.js.map +1 -0
  44. package/dist/types/index.d.ts +125 -0
  45. package/dist/types/index.d.ts.map +1 -0
  46. package/dist/types/index.js +2 -0
  47. package/dist/types/index.js.map +1 -0
  48. package/dist/utils/banner.d.ts +9 -0
  49. package/dist/utils/banner.d.ts.map +1 -0
  50. package/dist/utils/banner.js +48 -0
  51. package/dist/utils/banner.js.map +1 -0
  52. package/dist/utils/fileUtils.d.ts +4 -0
  53. package/dist/utils/fileUtils.d.ts.map +1 -0
  54. package/dist/utils/fileUtils.js +31 -0
  55. package/dist/utils/fileUtils.js.map +1 -0
  56. package/dist/utils/formatDate.d.ts +3 -0
  57. package/dist/utils/formatDate.d.ts.map +1 -0
  58. package/dist/utils/formatDate.js +22 -0
  59. package/dist/utils/formatDate.js.map +1 -0
  60. package/dist/utils/logger.d.ts +3 -0
  61. package/dist/utils/logger.d.ts.map +1 -0
  62. package/dist/utils/logger.js +9 -0
  63. package/dist/utils/logger.js.map +1 -0
  64. package/dist/utils/semverUtils.d.ts +6 -0
  65. package/dist/utils/semverUtils.d.ts.map +1 -0
  66. package/dist/utils/semverUtils.js +25 -0
  67. package/dist/utils/semverUtils.js.map +1 -0
  68. package/docs/architecture.md +93 -0
  69. package/docs/interview-explanation.md +74 -0
  70. package/docs/roadmap.md +32 -0
  71. package/package.json +64 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - Initial development version
4
+
5
+ - Added dependency scanning
6
+ - Added npm metadata analysis
7
+ - Added health scoring
8
+ - Added terminal, JSON, and HTML reports
9
+ - Added branded CLI banner
10
+ - Added tests and CI
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
+ [![CI](https://github.com/sripavantejb/npm-package-doctor/actions/workflows/ci.yml/badge.svg)](https://github.com/sripavantejb/npm-package-doctor/actions/workflows/ci.yml)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ScanReport } from "../types/index.js";
2
+ export declare function renderHtmlReport(report: ScanReport): string;
3
+ //# sourceMappingURL=htmlReporter.d.ts.map
@@ -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"}