devcompass 2.4.0 → 2.5.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/README.md +74 -47
- package/package.json +5 -3
- package/src/alerts/github-tracker.js +647 -11
- package/src/alerts/predictive.js +44 -3
- package/src/commands/analyze.js +22 -5
package/README.md
CHANGED
|
@@ -1,43 +1,52 @@
|
|
|
1
1
|
# 🧭 DevCompass
|
|
2
2
|
|
|
3
|
-
**Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for
|
|
3
|
+
**Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for 500+ popular npm packages**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/devcompass)
|
|
6
6
|
[](https://www.npmjs.com/package/devcompass)
|
|
7
7
|
[](https://opensource.org/licenses/MIT)
|
|
8
8
|
|
|
9
|
-
Analyze your JavaScript projects to find unused dependencies, outdated packages, **detect security vulnerabilities**, **monitor GitHub issues in real-time**, **check bundle sizes**, **verify licenses**, and **automatically fix issues** with a single command. Perfect for **CI/CD pipelines** with JSON output and exit codes.
|
|
9
|
+
Analyze your JavaScript projects to find unused dependencies, outdated packages, **detect security vulnerabilities**, **monitor GitHub issues in real-time for 500+ packages**, **check bundle sizes**, **verify licenses**, and **automatically fix issues** with a single command. Perfect for **CI/CD pipelines** with JSON output and exit codes.
|
|
10
10
|
|
|
11
|
+
> **NEW in v2.5.0:** Expanded to 502 packages across 33 categories! 🎯
|
|
11
12
|
> **NEW in v2.4.0:** Real-time GitHub issue tracking & predictive warnings! 🔮
|
|
12
13
|
> **NEW in v2.3.1:** Fixed all security vulnerabilities! Health score: 2.5/10 → 8/10 🔒
|
|
13
14
|
> **NEW in v2.3:** Security scanning, bundle analysis & license checker! 🔐
|
|
14
|
-
> **NEW in v2.2:** CI/CD integration with JSON output & smart caching! 🚀
|
|
15
|
-
> **NEW in v2.1:** Auto-fix command! 🔧 Fix critical issues automatically!
|
|
16
|
-
> **NEW in v2.0:** Real-time ecosystem alerts for known issues! 🚨
|
|
15
|
+
> **NEW in v2.2:** CI/CD integration with JSON output & smart caching! 🚀
|
|
17
16
|
|
|
18
|
-
## 🎉 Latest Update: v2.
|
|
17
|
+
## 🎉 Latest Update: v2.5.0
|
|
19
18
|
|
|
20
|
-
**
|
|
19
|
+
**500+ package coverage is here!** DevCompass now monitors live GitHub activity across the entire npm ecosystem:
|
|
21
20
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
21
|
+
- 🎯 **502 tracked packages** organized into 33 categories
|
|
22
|
+
- 🌐 **Full ecosystem coverage** - Frontend, backend, build tools, testing, databases, and more
|
|
23
|
+
- ⚡ **Zero performance impact** - Smart filtering only checks installed packages
|
|
24
|
+
- 📊 **Comprehensive monitoring** - React, Vue, Angular, Next.js, Express, and 497+ more
|
|
25
|
+
- 🔧 **Framework-agnostic** - Supports all major JavaScript frameworks and tools
|
|
26
|
+
|
|
27
|
+
**What's tracked:**
|
|
28
|
+
- Web Frameworks (25): react, vue, angular, svelte, preact, solid-js, etc.
|
|
29
|
+
- Backend Frameworks (20): express, koa, fastify, hapi, nest, strapi, etc.
|
|
30
|
+
- Build Tools (25): webpack, vite, rollup, parcel, esbuild, turbopack, etc.
|
|
31
|
+
- Testing (25): jest, mocha, vitest, cypress, playwright, storybook, etc.
|
|
32
|
+
- And 29 more categories covering the entire JavaScript ecosystem!
|
|
27
33
|
|
|
28
|
-
**Example
|
|
34
|
+
**Example output:**
|
|
29
35
|
```
|
|
30
36
|
🔮 PREDICTIVE WARNINGS (1)
|
|
31
37
|
|
|
38
|
+
Based on recent GitHub activity (502+ packages monitored):
|
|
39
|
+
|
|
32
40
|
🟡 express
|
|
33
41
|
Increased issue activity
|
|
34
|
-
|
|
42
|
+
1 issues opened recently
|
|
35
43
|
→ Monitor for stability
|
|
36
44
|
GitHub: https://github.com/expressjs/express
|
|
37
45
|
```
|
|
38
46
|
|
|
39
47
|
## ✨ Features
|
|
40
48
|
|
|
49
|
+
- 🎯 **500+ Package Coverage** (v2.5) - Comprehensive ecosystem monitoring
|
|
41
50
|
- 🔮 **GitHub Issue Tracking** (v2.4) - Real-time monitoring of package health
|
|
42
51
|
- 📈 **Predictive Warnings** (v2.4) - Detect issues before they're announced
|
|
43
52
|
- 🔐 **Security Scanning** (v2.3) - npm audit integration with severity breakdown
|
|
@@ -90,9 +99,9 @@ devcompass analyze --ci
|
|
|
90
99
|
devcompass analyze --silent
|
|
91
100
|
```
|
|
92
101
|
|
|
93
|
-
## 🔮 Predictive Warnings (v2.
|
|
102
|
+
## 🔮 Predictive Warnings (v2.5.0)
|
|
94
103
|
|
|
95
|
-
DevCompass now monitors **real-time GitHub activity** to detect potential issues before they're officially reported!
|
|
104
|
+
DevCompass now monitors **real-time GitHub activity for 500+ packages** to detect potential issues before they're officially reported!
|
|
96
105
|
|
|
97
106
|
### What it tracks:
|
|
98
107
|
- 🐛 **Open bug reports** in the last 7/30 days
|
|
@@ -100,17 +109,40 @@ DevCompass now monitors **real-time GitHub activity** to detect potential issues
|
|
|
100
109
|
- 📈 **Trend analysis** (increasing/stable/decreasing)
|
|
101
110
|
- ⚠️ **Critical issues** flagged by maintainers
|
|
102
111
|
|
|
103
|
-
### Currently tracked packages (
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
|
|
112
|
+
### Currently tracked packages (502+):
|
|
113
|
+
Organized into 33 categories covering the entire JavaScript ecosystem:
|
|
114
|
+
|
|
115
|
+
**Web & UI Frameworks (25):** react, vue, angular, svelte, preact, solid-js, lit, alpine, qwik, astro, etc.
|
|
116
|
+
|
|
117
|
+
**Meta Frameworks (15):** next, nuxt, gatsby, remix, sveltekit, blitz, redwood, docusaurus, etc.
|
|
118
|
+
|
|
119
|
+
**Mobile Frameworks (10):** react-native, ionic, expo, capacitor, cordova, etc.
|
|
120
|
+
|
|
121
|
+
**Backend Frameworks (20):** express, koa, fastify, hapi, nest, strapi, meteor, trpc, apollo-server, etc.
|
|
122
|
+
|
|
123
|
+
**Build Tools (25):** webpack, vite, rollup, parcel, esbuild, turbopack, swc, babel, rome, etc.
|
|
124
|
+
|
|
125
|
+
**Testing Frameworks (25):** jest, mocha, vitest, cypress, playwright, puppeteer, storybook, etc.
|
|
126
|
+
|
|
127
|
+
**Linters & Formatters (15):** eslint, prettier, stylelint, biome, dprint, etc.
|
|
128
|
+
|
|
129
|
+
**TypeScript Tools (15):** typescript, ts-node, tsx, zod, yup, joi, ajv, etc.
|
|
130
|
+
|
|
131
|
+
**State Management (20):** redux, mobx, zustand, jotai, recoil, valtio, xstate, etc.
|
|
132
|
+
|
|
133
|
+
**HTTP Clients (20):** axios, got, ky, superagent, undici, @tanstack/react-query, swr, etc.
|
|
134
|
+
|
|
135
|
+
**Utilities (50):** lodash, moment, dayjs, chalk, ora, commander, uuid, nanoid, etc.
|
|
136
|
+
|
|
137
|
+
**CSS & Styling (25):** tailwindcss, sass, styled-components, emotion, unocss, etc.
|
|
138
|
+
|
|
139
|
+
**Plus 21 more categories:** Documentation, Database & ORM, GraphQL, Authentication, Validation, Reactivity, Animation, Charts, UI Libraries, Forms, Routing, File Upload, Markdown, Image Processing, Email, WebSockets, Compression, Security, CLI Tools, Performance, and Miscellaneous.
|
|
108
140
|
|
|
109
141
|
### Example Output:
|
|
110
142
|
```
|
|
111
143
|
🔮 PREDICTIVE WARNINGS (2)
|
|
112
144
|
|
|
113
|
-
Based on recent GitHub activity:
|
|
145
|
+
Based on recent GitHub activity (502+ packages monitored):
|
|
114
146
|
|
|
115
147
|
🟠 axios
|
|
116
148
|
High bug activity detected
|
|
@@ -131,13 +163,16 @@ DevCompass now monitors **real-time GitHub activity** to detect potential issues
|
|
|
131
163
|
3. Detects critical issues via labels
|
|
132
164
|
4. Calculates risk scores
|
|
133
165
|
5. Provides actionable recommendations
|
|
166
|
+
6. **Smart filtering:** Only checks packages you've actually installed
|
|
134
167
|
|
|
135
168
|
### Performance:
|
|
136
|
-
- **
|
|
169
|
+
- **Smart filtering:** Only checks installed packages from your project
|
|
170
|
+
- **First run:** ~1 second per installed tracked package
|
|
137
171
|
- **Cached runs:** ~0.5 seconds (93% faster!)
|
|
138
172
|
- **Cache duration:** 1 hour
|
|
173
|
+
- **Zero overhead:** Uninstalled packages aren't checked
|
|
139
174
|
|
|
140
|
-
>
|
|
175
|
+
> **Performance Example:** If you have 5 tracked packages installed (e.g., react, axios, lodash, express, webpack), DevCompass only checks those 5, not all 502!
|
|
141
176
|
|
|
142
177
|
## 🔐 Security & Compliance Features
|
|
143
178
|
|
|
@@ -219,7 +254,7 @@ Detect restrictive licenses that may require legal review!
|
|
|
219
254
|
|
|
220
255
|
**Full Output:**
|
|
221
256
|
```
|
|
222
|
-
🔍 DevCompass v2.
|
|
257
|
+
🔍 DevCompass v2.5.0 - Analyzing your project...
|
|
223
258
|
✔ Scanned 25 dependencies in project
|
|
224
259
|
|
|
225
260
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -241,7 +276,7 @@ Detect restrictive licenses that may require legal review!
|
|
|
241
276
|
|
|
242
277
|
🔮 PREDICTIVE WARNINGS (1)
|
|
243
278
|
|
|
244
|
-
Based on recent GitHub activity:
|
|
279
|
+
Based on recent GitHub activity (502+ packages monitored):
|
|
245
280
|
|
|
246
281
|
🟡 express
|
|
247
282
|
Increased issue activity
|
|
@@ -301,7 +336,7 @@ devcompass analyze --json
|
|
|
301
336
|
**Output:**
|
|
302
337
|
```json
|
|
303
338
|
{
|
|
304
|
-
"version": "2.
|
|
339
|
+
"version": "2.5.0",
|
|
305
340
|
"timestamp": "2026-04-04T10:30:00.000Z",
|
|
306
341
|
"summary": {
|
|
307
342
|
"healthScore": 8.5,
|
|
@@ -394,8 +429,8 @@ DevCompass caches results to improve performance:
|
|
|
394
429
|
- **Cache file:** `.devcompass-cache.json` (auto-gitignored)
|
|
395
430
|
|
|
396
431
|
**What gets cached:**
|
|
397
|
-
- GitHub issue data (
|
|
398
|
-
- Predictive warnings (
|
|
432
|
+
- GitHub issue data (v2.4+)
|
|
433
|
+
- Predictive warnings (v2.4+)
|
|
399
434
|
- Security vulnerabilities
|
|
400
435
|
- Ecosystem alerts
|
|
401
436
|
- Unused dependencies
|
|
@@ -475,7 +510,7 @@ DevCompass can **automatically fix issues** in your project!
|
|
|
475
510
|
- 🧹 **Removes unused dependencies** - Cleans up packages you're not using
|
|
476
511
|
- ⬆️ **Safe updates** - Applies patch and minor updates automatically
|
|
477
512
|
- ⚠️ **Skips breaking changes** - Major updates require manual review
|
|
478
|
-
- 🔄 **Clears cache** - Ensures fresh analysis after fixes (
|
|
513
|
+
- 🔄 **Clears cache** - Ensures fresh analysis after fixes (v2.4+)
|
|
479
514
|
|
|
480
515
|
### Usage
|
|
481
516
|
```bash
|
|
@@ -495,7 +530,7 @@ devcompass fix --path /path/to/project
|
|
|
495
530
|
- ✅ Requires confirmation (unless `--yes` flag used)
|
|
496
531
|
- ✅ Skips major updates (may have breaking changes)
|
|
497
532
|
- ✅ Groups actions by priority (critical → cleanup → updates)
|
|
498
|
-
- ✅ Clears cache after fixes (
|
|
533
|
+
- ✅ Clears cache after fixes (v2.4+)
|
|
499
534
|
- ✅ Provides clear summary of changes
|
|
500
535
|
|
|
501
536
|
### Workflow Example
|
|
@@ -512,7 +547,7 @@ devcompass analyze
|
|
|
512
547
|
|
|
513
548
|
## 🚨 Ecosystem Intelligence
|
|
514
549
|
|
|
515
|
-
DevCompass tracks **real-world issues** in popular packages and warns you before they break production!
|
|
550
|
+
DevCompass tracks **real-world issues** in 500+ popular packages and warns you before they break production!
|
|
516
551
|
|
|
517
552
|
### What Gets Detected:
|
|
518
553
|
- 🔴 **Critical security vulnerabilities** - Zero-day exploits, prototype pollution
|
|
@@ -526,20 +561,12 @@ DevCompass tracks **real-world issues** in popular packages and warns you before
|
|
|
526
561
|
- **MEDIUM** - Maintenance concerns, deprecations (−0.5 points per issue)
|
|
527
562
|
- **LOW** - Minor issues (−0.2 points per issue)
|
|
528
563
|
|
|
529
|
-
### Currently Tracked Packages:
|
|
530
|
-
- **axios** - Memory leaks, breaking changes
|
|
531
|
-
- **lodash** - Security vulnerabilities (prototype pollution)
|
|
532
|
-
- **moment** - Deprecation notice
|
|
533
|
-
- **express** - Security issues in dependencies
|
|
534
|
-
- **request** - Package deprecated
|
|
535
|
-
|
|
536
|
-
> More packages being added regularly! [Suggest a package](https://github.com/AjayBThorat-20/devcompass/issues)
|
|
537
|
-
|
|
538
564
|
### How It Works:
|
|
539
565
|
1. Reads your actual installed versions from `node_modules`
|
|
540
566
|
2. Matches against curated issues database
|
|
541
567
|
3. Uses semantic versioning for precise detection
|
|
542
|
-
4.
|
|
568
|
+
4. Checks live GitHub activity for 502+ packages
|
|
569
|
+
5. Shows actionable fix commands
|
|
543
570
|
|
|
544
571
|
## 🎯 What It Detects
|
|
545
572
|
|
|
@@ -710,8 +737,8 @@ If you encounter a false positive, please [report it](https://github.com/AjayBTh
|
|
|
710
737
|
8. **Use JSON output** - Integrate with your monitoring tools
|
|
711
738
|
9. **Review major updates** - Always check changelogs before major version bumps
|
|
712
739
|
10. **Verify before uninstalling** - DevCompass helps identify candidates, but always verify
|
|
713
|
-
11. **Watch predictive warnings** - Monitor packages with increasing issue activity
|
|
714
|
-
12. **Cache for speed** - First run takes ~8s, cached runs ~0.5s
|
|
740
|
+
11. **Watch predictive warnings** - Monitor packages with increasing issue activity
|
|
741
|
+
12. **Cache for speed** - First run takes ~8s, cached runs ~0.5s
|
|
715
742
|
|
|
716
743
|
## 🤝 Contributing
|
|
717
744
|
|
|
@@ -806,9 +833,9 @@ Check out DevCompass stats:
|
|
|
806
833
|
- [x] ~~Fix all security vulnerabilities~~ ✅ **Fixed in v2.3.1!**
|
|
807
834
|
- [x] ~~GitHub Issues API for real-time issue tracking~~ ✅ **Added in v2.4.0!**
|
|
808
835
|
- [x] ~~Predictive warnings based on bug activity~~ ✅ **Added in v2.4.0!**
|
|
809
|
-
- [
|
|
810
|
-
- [ ] Performance optimizations (v2.6.0)
|
|
811
|
-
- [ ] Advanced security features with Snyk (v2.7.0)
|
|
836
|
+
- [x] ~~Expand to top 500 npm packages~~ ✅ **Added in v2.5.0!**
|
|
837
|
+
- [ ] Performance optimizations with parallel processing (v2.6.0)
|
|
838
|
+
- [ ] Advanced security features with Snyk integration (v2.7.0)
|
|
812
839
|
- [ ] Enhanced fix command improvements (v2.8.0)
|
|
813
840
|
- [ ] Dependency graph visualization (v3.0.0)
|
|
814
841
|
- [ ] Web dashboard for team health monitoring (v3.0.0)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devcompass",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for JavaScript/TypeScript projects",
|
|
3
|
+
"version": "2.5.0",
|
|
4
|
+
"description": "Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for JavaScript/TypeScript projects. Monitors 500+ popular npm packages.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"devcompass": "./bin/devcompass.js"
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"predictive-warnings",
|
|
42
42
|
"risk-detection",
|
|
43
43
|
"dependency-monitoring",
|
|
44
|
-
"issue-tracking"
|
|
44
|
+
"issue-tracking",
|
|
45
|
+
"package-health",
|
|
46
|
+
"top-500-packages"
|
|
45
47
|
],
|
|
46
48
|
"author": "Ajay Thorat <ajaythorat988@gmail.com>",
|
|
47
49
|
"license": "MIT",
|
|
@@ -1,22 +1,600 @@
|
|
|
1
1
|
// src/alerts/github-tracker.js
|
|
2
2
|
const https = require('https');
|
|
3
3
|
|
|
4
|
-
//
|
|
4
|
+
// Top 500+ npm packages organized by category
|
|
5
5
|
const TRACKED_REPOS = {
|
|
6
|
-
|
|
7
|
-
'lodash': 'lodash/lodash',
|
|
8
|
-
'moment': 'moment/moment',
|
|
9
|
-
'express': 'expressjs/express',
|
|
6
|
+
// === WEB FRAMEWORKS (25) ===
|
|
10
7
|
'react': 'facebook/react',
|
|
11
8
|
'vue': 'vuejs/core',
|
|
9
|
+
'angular': 'angular/angular',
|
|
10
|
+
'svelte': 'sveltejs/svelte',
|
|
11
|
+
'preact': 'preactjs/preact',
|
|
12
|
+
'solid-js': 'solidjs/solid',
|
|
13
|
+
'lit': 'lit/lit',
|
|
14
|
+
'alpinejs': 'alpinejs/alpine',
|
|
15
|
+
'ember.js': 'emberjs/ember.js',
|
|
16
|
+
'backbone': 'jashkenas/backbone',
|
|
17
|
+
'knockout': 'knockout/knockout',
|
|
18
|
+
'marko': 'marko-js/marko',
|
|
19
|
+
'mithril': 'MithrilJS/mithril.js',
|
|
20
|
+
'hyperapp': 'jorgebucaran/hyperapp',
|
|
21
|
+
'riot': 'riot/riot',
|
|
22
|
+
'inferno': 'infernojs/inferno',
|
|
23
|
+
'aurelia': 'aurelia/framework',
|
|
24
|
+
'polymer': 'Polymer/polymer',
|
|
25
|
+
'stimulus': 'hotwired/stimulus',
|
|
26
|
+
'qwik': 'QwikDev/qwik',
|
|
27
|
+
'astro': 'withastro/astro',
|
|
28
|
+
'fresh': 'denoland/fresh',
|
|
29
|
+
'marko': 'marko-js/marko',
|
|
30
|
+
'htmx': 'bigskysoftware/htmx',
|
|
31
|
+
'alpine': 'alpinejs/alpine',
|
|
32
|
+
|
|
33
|
+
// === META FRAMEWORKS (15) ===
|
|
12
34
|
'next': 'vercel/next.js',
|
|
35
|
+
'nuxt': 'nuxt/nuxt',
|
|
36
|
+
'gatsby': 'gatsbyjs/gatsby',
|
|
37
|
+
'remix': 'remix-run/remix',
|
|
38
|
+
'sveltekit': 'sveltejs/kit',
|
|
39
|
+
'blitz': 'blitz-js/blitz',
|
|
40
|
+
'redwood': 'redwoodjs/redwood',
|
|
41
|
+
'nextra': 'shuding/nextra',
|
|
42
|
+
'docusaurus': 'facebook/docusaurus',
|
|
43
|
+
'vuepress': 'vuejs/vuepress',
|
|
44
|
+
'eleventy': '11ty/eleventy',
|
|
45
|
+
'hexo': 'hexojs/hexo',
|
|
46
|
+
'hugo': 'gohugoio/hugo',
|
|
47
|
+
'jekyll': 'jekyll/jekyll',
|
|
48
|
+
'gridsome': 'gridsome/gridsome',
|
|
49
|
+
|
|
50
|
+
// === MOBILE FRAMEWORKS (10) ===
|
|
51
|
+
'react-native': 'facebook/react-native',
|
|
52
|
+
'ionic': 'ionic-team/ionic-framework',
|
|
53
|
+
'nativescript': 'NativeScript/NativeScript',
|
|
54
|
+
'expo': 'expo/expo',
|
|
55
|
+
'capacitor': 'ionic-team/capacitor',
|
|
56
|
+
'cordova': 'apache/cordova',
|
|
57
|
+
'framework7': 'framework7io/framework7',
|
|
58
|
+
'onsen-ui': 'OnsenUI/OnsenUI',
|
|
59
|
+
'quasar': 'quasarframework/quasar',
|
|
60
|
+
'metro': 'facebook/metro',
|
|
61
|
+
|
|
62
|
+
// === BACKEND FRAMEWORKS (20) ===
|
|
63
|
+
'express': 'expressjs/express',
|
|
64
|
+
'koa': 'koajs/koa',
|
|
65
|
+
'fastify': 'fastify/fastify',
|
|
66
|
+
'hapi': 'hapijs/hapi',
|
|
67
|
+
'nest': 'nestjs/nest',
|
|
68
|
+
'loopback': 'loopbackio/loopback-next',
|
|
69
|
+
'sails': 'balderdashy/sails',
|
|
70
|
+
'feathers': 'feathersjs/feathers',
|
|
71
|
+
'adonis': 'adonisjs/core',
|
|
72
|
+
'strapi': 'strapi/strapi',
|
|
73
|
+
'meteor': 'meteor/meteor',
|
|
74
|
+
'keystone': 'keystonejs/keystone',
|
|
75
|
+
'directus': 'directus/directus',
|
|
76
|
+
'payload': 'payloadcms/payload',
|
|
77
|
+
'ghost': 'TryGhost/Ghost',
|
|
78
|
+
'redwood': 'redwoodjs/redwood',
|
|
79
|
+
'trpc': 'trpc/trpc',
|
|
80
|
+
'graphql-yoga': 'dotansimha/graphql-yoga',
|
|
81
|
+
'apollo-server': 'apollographql/apollo-server',
|
|
82
|
+
'prisma': 'prisma/prisma',
|
|
83
|
+
|
|
84
|
+
// === BUILD TOOLS (25) ===
|
|
13
85
|
'webpack': 'webpack/webpack',
|
|
14
|
-
'
|
|
15
|
-
'
|
|
86
|
+
'vite': 'vitejs/vite',
|
|
87
|
+
'rollup': 'rollup/rollup',
|
|
88
|
+
'parcel': 'parcel-bundler/parcel',
|
|
89
|
+
'esbuild': 'evanw/esbuild',
|
|
90
|
+
'turbopack': 'vercel/turbo',
|
|
91
|
+
'swc': 'swc-project/swc',
|
|
92
|
+
'babel': 'babel/babel',
|
|
93
|
+
'rome': 'rome/tools',
|
|
94
|
+
'tsup': 'egoist/tsup',
|
|
95
|
+
'unbuild': 'unjs/unbuild',
|
|
96
|
+
'microbundle': 'developit/microbundle',
|
|
97
|
+
'tsdx': 'jaredpalmer/tsdx',
|
|
98
|
+
'wmr': 'preactjs/wmr',
|
|
99
|
+
'snowpack': 'FredKSchott/snowpack',
|
|
100
|
+
'gulp': 'gulpjs/gulp',
|
|
101
|
+
'grunt': 'gruntjs/grunt',
|
|
102
|
+
'brunch': 'brunch/brunch',
|
|
103
|
+
'browserify': 'browserify/browserify',
|
|
104
|
+
'fuse-box': 'fuse-box/fuse-box',
|
|
105
|
+
'poi': 'egoist/poi',
|
|
106
|
+
'neutrino': 'neutrinojs/neutrino',
|
|
107
|
+
'backpack': 'jaredpalmer/backpack',
|
|
108
|
+
'ncc': 'vercel/ncc',
|
|
109
|
+
'pkg': 'vercel/pkg',
|
|
110
|
+
|
|
111
|
+
// === TESTING FRAMEWORKS (25) ===
|
|
16
112
|
'jest': 'jestjs/jest',
|
|
113
|
+
'mocha': 'mochajs/mocha',
|
|
114
|
+
'jasmine': 'jasmine/jasmine',
|
|
115
|
+
'vitest': 'vitest-dev/vitest',
|
|
116
|
+
'ava': 'avajs/ava',
|
|
117
|
+
'tape': 'tape-testing/tape',
|
|
118
|
+
'cypress': 'cypress-io/cypress',
|
|
119
|
+
'playwright': 'microsoft/playwright',
|
|
120
|
+
'puppeteer': 'puppeteer/puppeteer',
|
|
121
|
+
'selenium-webdriver': 'SeleniumHQ/selenium',
|
|
122
|
+
'webdriverio': 'webdriverio/webdriverio',
|
|
123
|
+
'nightwatch': 'nightwatchjs/nightwatch',
|
|
124
|
+
'testcafe': 'DevExpress/testcafe',
|
|
125
|
+
'karma': 'karma-runner/karma',
|
|
126
|
+
'protractor': 'angular/protractor',
|
|
127
|
+
'enzyme': 'enzymejs/enzyme',
|
|
128
|
+
'@testing-library/react': 'testing-library/react-testing-library',
|
|
129
|
+
'@testing-library/vue': 'testing-library/vue-testing-library',
|
|
130
|
+
'@testing-library/angular': 'testing-library/angular-testing-library',
|
|
131
|
+
'chai': 'chaijs/chai',
|
|
132
|
+
'sinon': 'sinonjs/sinon',
|
|
133
|
+
'supertest': 'ladjs/supertest',
|
|
134
|
+
'nock': 'nock/nock',
|
|
135
|
+
'mock-service-worker': 'mswjs/msw',
|
|
136
|
+
'storybook': 'storybookjs/storybook',
|
|
137
|
+
|
|
138
|
+
// === LINTERS & FORMATTERS (15) ===
|
|
139
|
+
'eslint': 'eslint/eslint',
|
|
17
140
|
'prettier': 'prettier/prettier',
|
|
141
|
+
'stylelint': 'stylelint/stylelint',
|
|
142
|
+
'tslint': 'palantir/tslint',
|
|
143
|
+
'standard': 'standard/standard',
|
|
144
|
+
'xo': 'xojs/xo',
|
|
145
|
+
'jshint': 'jshint/jshint',
|
|
146
|
+
'jslint': 'jslint-org/jslint',
|
|
147
|
+
'rome': 'rome/tools',
|
|
148
|
+
'dprint': 'dprint/dprint',
|
|
149
|
+
'biome': 'biomejs/biome',
|
|
150
|
+
'oxlint': 'web-infra-dev/oxc',
|
|
151
|
+
'quick-lint-js': 'quick-lint/quick-lint-js',
|
|
152
|
+
'rslint': 'rslint/rslint',
|
|
153
|
+
'deno_lint': 'denoland/deno_lint',
|
|
154
|
+
|
|
155
|
+
// === TYPESCRIPT & TYPE TOOLS (15) ===
|
|
156
|
+
'typescript': 'microsoft/TypeScript',
|
|
157
|
+
'ts-node': 'TypeStrong/ts-node',
|
|
158
|
+
'tsx': 'privatenumber/tsx',
|
|
159
|
+
'tsup': 'egoist/tsup',
|
|
160
|
+
'tsc-watch': 'gilamran/tsc-watch',
|
|
161
|
+
'ttypescript': 'cevek/ttypescript',
|
|
162
|
+
'typedoc': 'TypeStrong/typedoc',
|
|
163
|
+
'api-extractor': 'microsoft/rushstack',
|
|
164
|
+
'type-fest': 'sindresorhus/type-fest',
|
|
165
|
+
'zod': 'colinhacks/zod',
|
|
166
|
+
'yup': 'jquense/yup',
|
|
167
|
+
'joi': 'hapijs/joi',
|
|
168
|
+
'ajv': 'ajv-validator/ajv',
|
|
169
|
+
'superstruct': 'ianstormtaylor/superstruct',
|
|
170
|
+
'runtypes': 'pelotom/runtypes',
|
|
171
|
+
|
|
172
|
+
// === STATE MANAGEMENT (20) ===
|
|
173
|
+
'redux': 'reduxjs/redux',
|
|
174
|
+
'mobx': 'mobxjs/mobx',
|
|
175
|
+
'zustand': 'pmndrs/zustand',
|
|
176
|
+
'jotai': 'pmndrs/jotai',
|
|
177
|
+
'recoil': 'facebookexperimental/Recoil',
|
|
178
|
+
'valtio': 'pmndrs/valtio',
|
|
179
|
+
'xstate': 'statelyai/xstate',
|
|
180
|
+
'effector': 'effector/effector',
|
|
181
|
+
'rematch': 'rematch/rematch',
|
|
182
|
+
'easy-peasy': 'ctrlplusb/easy-peasy',
|
|
183
|
+
'pullstate': 'lostpebble/pullstate',
|
|
184
|
+
'hookstate': 'avkonst/hookstate',
|
|
185
|
+
'storeon': 'storeon/storeon',
|
|
186
|
+
'nano-stores': 'nanostores/nanostores',
|
|
187
|
+
'valtio': 'pmndrs/valtio',
|
|
188
|
+
'signal': 'preactjs/signals',
|
|
189
|
+
'vuex': 'vuejs/vuex',
|
|
190
|
+
'pinia': 'vuejs/pinia',
|
|
191
|
+
'ngxs': 'ngxs/store',
|
|
192
|
+
'akita': 'salesforce/akita',
|
|
193
|
+
|
|
194
|
+
// === HTTP CLIENTS (20) ===
|
|
195
|
+
'axios': 'axios/axios',
|
|
18
196
|
'node-fetch': 'node-fetch/node-fetch',
|
|
19
|
-
'
|
|
197
|
+
'got': 'sindresorhus/got',
|
|
198
|
+
'ky': 'sindresorhus/ky',
|
|
199
|
+
'superagent': 'ladjs/superagent',
|
|
200
|
+
'request': 'request/request',
|
|
201
|
+
'needle': 'tomas/needle',
|
|
202
|
+
'bent': 'mikeal/bent',
|
|
203
|
+
'phin': 'ethanent/phin',
|
|
204
|
+
'undici': 'nodejs/undici',
|
|
205
|
+
'cross-fetch': 'lquixada/cross-fetch',
|
|
206
|
+
'isomorphic-fetch': 'matthew-andrews/isomorphic-fetch',
|
|
207
|
+
'whatwg-fetch': 'github/fetch',
|
|
208
|
+
'unfetch': 'developit/unfetch',
|
|
209
|
+
'redaxios': 'developit/redaxios',
|
|
210
|
+
'@tanstack/react-query': 'TanStack/query',
|
|
211
|
+
'swr': 'vercel/swr',
|
|
212
|
+
'apollo-client': 'apollographql/apollo-client',
|
|
213
|
+
'urql': 'urql-graphql/urql',
|
|
214
|
+
'relay': 'facebook/relay',
|
|
215
|
+
|
|
216
|
+
// === UTILITIES (50) ===
|
|
217
|
+
'lodash': 'lodash/lodash',
|
|
218
|
+
'underscore': 'jashkenas/underscore',
|
|
219
|
+
'ramda': 'ramda/ramda',
|
|
220
|
+
'moment': 'moment/moment',
|
|
221
|
+
'dayjs': 'iamkun/dayjs',
|
|
222
|
+
'date-fns': 'date-fns/date-fns',
|
|
223
|
+
'luxon': 'moment/luxon',
|
|
224
|
+
'chalk': 'chalk/chalk',
|
|
225
|
+
'colors': 'Marak/colors.js',
|
|
226
|
+
'ora': 'sindresorhus/ora',
|
|
227
|
+
'inquirer': 'SBoudrias/Inquirer.js',
|
|
228
|
+
'prompts': 'terkelg/prompts',
|
|
229
|
+
'commander': 'tj/commander.js',
|
|
230
|
+
'yargs': 'yargs/yargs',
|
|
231
|
+
'minimist': 'minimistjs/minimist',
|
|
232
|
+
'dotenv': 'motdotla/dotenv',
|
|
233
|
+
'cross-env': 'kentcdodds/cross-env',
|
|
234
|
+
'uuid': 'uuidjs/uuid',
|
|
235
|
+
'nanoid': 'ai/nanoid',
|
|
236
|
+
'short-uuid': 'oculus42/short-uuid',
|
|
237
|
+
'validator': 'validatorjs/validator.js',
|
|
238
|
+
'is': 'enricomarino/is',
|
|
239
|
+
'debug': 'debug-js/debug',
|
|
240
|
+
'winston': 'winstonjs/winston',
|
|
241
|
+
'pino': 'pinojs/pino',
|
|
242
|
+
'bunyan': 'trentm/node-bunyan',
|
|
243
|
+
'morgan': 'expressjs/morgan',
|
|
244
|
+
'ms': 'vercel/ms',
|
|
245
|
+
'glob': 'isaacs/node-glob',
|
|
246
|
+
'minimatch': 'isaacs/minimatch',
|
|
247
|
+
'micromatch': 'micromatch/micromatch',
|
|
248
|
+
'fast-glob': 'mrmlnc/fast-glob',
|
|
249
|
+
'chokidar': 'paulmillr/chokidar',
|
|
250
|
+
'fs-extra': 'jprichardson/node-fs-extra',
|
|
251
|
+
'rimraf': 'isaacs/rimraf',
|
|
252
|
+
'del': 'sindresorhus/del',
|
|
253
|
+
'make-dir': 'sindresorhus/make-dir',
|
|
254
|
+
'execa': 'sindresorhus/execa',
|
|
255
|
+
'shelljs': 'shelljs/shelljs',
|
|
256
|
+
'cross-spawn': 'moxystudio/node-cross-spawn',
|
|
257
|
+
'concurrently': 'open-cli-tools/concurrently',
|
|
258
|
+
'npm-run-all': 'mysticatea/npm-run-all',
|
|
259
|
+
'nodemon': 'remy/nodemon',
|
|
260
|
+
'pm2': 'Unitech/pm2',
|
|
261
|
+
'forever': 'foreversd/forever',
|
|
262
|
+
'bluebird': 'petkaantonov/bluebird',
|
|
263
|
+
'p-limit': 'sindresorhus/p-limit',
|
|
264
|
+
'p-queue': 'sindresorhus/p-queue',
|
|
265
|
+
'p-retry': 'sindresorhus/p-retry',
|
|
266
|
+
'async': 'caolan/async',
|
|
267
|
+
|
|
268
|
+
// === CSS & STYLING (25) ===
|
|
269
|
+
'tailwindcss': 'tailwindlabs/tailwindcss',
|
|
270
|
+
'sass': 'sass/dart-sass',
|
|
271
|
+
'less': 'less/less.js',
|
|
272
|
+
'stylus': 'stylus/stylus',
|
|
273
|
+
'postcss': 'postcss/postcss',
|
|
274
|
+
'autoprefixer': 'postcss/autoprefixer',
|
|
275
|
+
'cssnano': 'cssnano/cssnano',
|
|
276
|
+
'styled-components': 'styled-components/styled-components',
|
|
277
|
+
'emotion': 'emotion-js/emotion',
|
|
278
|
+
'@emotion/react': 'emotion-js/emotion',
|
|
279
|
+
'styled-jsx': 'vercel/styled-jsx',
|
|
280
|
+
'linaria': 'callstack/linaria',
|
|
281
|
+
'vanilla-extract': 'vanilla-extract-css/vanilla-extract',
|
|
282
|
+
'stitches': 'stitchesjs/stitches',
|
|
283
|
+
'twin.macro': 'ben-rogerson/twin.macro',
|
|
284
|
+
'css-modules': 'css-modules/css-modules',
|
|
285
|
+
'classnames': 'JedWatson/classnames',
|
|
286
|
+
'clsx': 'lukeed/clsx',
|
|
287
|
+
'unocss': 'unocss/unocss',
|
|
288
|
+
'windicss': 'windicss/windicss',
|
|
289
|
+
'twind': 'tw-in-js/twind',
|
|
290
|
+
'goober': 'cristianbote/goober',
|
|
291
|
+
'fela': 'robinweser/fela',
|
|
292
|
+
'aphrodite': 'Khan/aphrodite',
|
|
293
|
+
'jss': 'cssinjs/jss',
|
|
294
|
+
|
|
295
|
+
// === DOCUMENTATION (15) ===
|
|
296
|
+
'jsdoc': 'jsdoc/jsdoc',
|
|
297
|
+
'typedoc': 'TypeStrong/typedoc',
|
|
298
|
+
'documentation': 'documentationjs/documentation',
|
|
299
|
+
'esdoc': 'esdoc/esdoc',
|
|
300
|
+
'docz': 'doczjs/docz',
|
|
301
|
+
'react-docgen': 'reactjs/react-docgen',
|
|
302
|
+
'compodoc': 'compodoc/compodoc',
|
|
303
|
+
'api-documenter': 'microsoft/rushstack',
|
|
304
|
+
'swagger-ui': 'swagger-api/swagger-ui',
|
|
305
|
+
'redoc': 'Redocly/redoc',
|
|
306
|
+
'slate': 'slatedocs/slate',
|
|
307
|
+
'docsify': 'docsifyjs/docsify',
|
|
308
|
+
'gitbook': 'GitbookIO/gitbook',
|
|
309
|
+
'mkdocs': 'mkdocs/mkdocs',
|
|
310
|
+
'sphinx': 'sphinx-doc/sphinx',
|
|
311
|
+
|
|
312
|
+
// === DATABASE & ORM (20) ===
|
|
313
|
+
'mongoose': 'Automattic/mongoose',
|
|
314
|
+
'sequelize': 'sequelize/sequelize',
|
|
315
|
+
'typeorm': 'typeorm/typeorm',
|
|
316
|
+
'knex': 'knex/knex',
|
|
317
|
+
'objection': 'Vincit/objection.js',
|
|
318
|
+
'bookshelf': 'bookshelf/bookshelf',
|
|
319
|
+
'waterline': 'balderdashy/waterline',
|
|
320
|
+
'mikro-orm': 'mikro-orm/mikro-orm',
|
|
321
|
+
'drizzle-orm': 'drizzle-team/drizzle-orm',
|
|
322
|
+
'kysely': 'kysely-org/kysely',
|
|
323
|
+
'mongodb': 'mongodb/node-mongodb-native',
|
|
324
|
+
'pg': 'brianc/node-postgres',
|
|
325
|
+
'mysql': 'mysqljs/mysql',
|
|
326
|
+
'mysql2': 'sidorares/node-mysql2',
|
|
327
|
+
'sqlite3': 'TryGhost/node-sqlite3',
|
|
328
|
+
'better-sqlite3': 'WiseLibs/better-sqlite3',
|
|
329
|
+
'redis': 'redis/node-redis',
|
|
330
|
+
'ioredis': 'redis/ioredis',
|
|
331
|
+
'cassandra-driver': 'datastax/nodejs-driver',
|
|
332
|
+
'neo4j-driver': 'neo4j/neo4j-javascript-driver',
|
|
333
|
+
|
|
334
|
+
// === GRAPHQL (15) ===
|
|
335
|
+
'graphql': 'graphql/graphql-js',
|
|
336
|
+
'@graphql-tools/schema': 'ardatan/graphql-tools',
|
|
337
|
+
'graphql-yoga': 'dotansimha/graphql-yoga',
|
|
338
|
+
'apollo-server-express': 'apollographql/apollo-server',
|
|
339
|
+
'mercurius': 'mercurius-js/mercurius',
|
|
340
|
+
'type-graphql': 'MichalLytek/type-graphql',
|
|
341
|
+
'nexus': 'graphql-nexus/nexus',
|
|
342
|
+
'pothos': 'hayes/pothos',
|
|
343
|
+
'graphql-request': 'jasonkuhrt/graphql-request',
|
|
344
|
+
'graphql-tag': 'apollographql/graphql-tag',
|
|
345
|
+
'dataloader': 'graphql/dataloader',
|
|
346
|
+
'graphql-subscriptions': 'apollographql/graphql-subscriptions',
|
|
347
|
+
'graphql-ws': 'enisdenjo/graphql-ws',
|
|
348
|
+
'subscriptions-transport-ws': 'apollographql/subscriptions-transport-ws',
|
|
349
|
+
'graphql-shield': 'dimatill/graphql-shield',
|
|
350
|
+
|
|
351
|
+
// === AUTHENTICATION (15) ===
|
|
352
|
+
'passport': 'jaredhanson/passport',
|
|
353
|
+
'jsonwebtoken': 'auth0/node-jsonwebtoken',
|
|
354
|
+
'bcrypt': 'kelektiv/node.bcrypt.js',
|
|
355
|
+
'bcryptjs': 'dcodeIO/bcrypt.js',
|
|
356
|
+
'argon2': 'ranisalt/node-argon2',
|
|
357
|
+
'oauth': 'ciaranj/node-oauth',
|
|
358
|
+
'oauth2-server': 'oauthjs/node-oauth2-server',
|
|
359
|
+
'next-auth': 'nextauthjs/next-auth',
|
|
360
|
+
'lucia': 'lucia-auth/lucia',
|
|
361
|
+
'iron-session': 'vvo/iron-session',
|
|
362
|
+
'jose': 'panva/jose',
|
|
363
|
+
'otplib': 'yeojz/otplib',
|
|
364
|
+
'speakeasy': 'speakeasyjs/speakeasy',
|
|
365
|
+
'node-2fa': 'jeremyscalpello/node-2fa',
|
|
366
|
+
'Grant': 'simov/grant',
|
|
367
|
+
|
|
368
|
+
// === VALIDATION (10) ===
|
|
369
|
+
'joi': 'hapijs/joi',
|
|
370
|
+
'yup': 'jquense/yup',
|
|
371
|
+
'zod': 'colinhacks/zod',
|
|
372
|
+
'ajv': 'ajv-validator/ajv',
|
|
373
|
+
'superstruct': 'ianstormtaylor/superstruct',
|
|
374
|
+
'io-ts': 'gcanti/io-ts',
|
|
375
|
+
'runtypes': 'pelotom/runtypes',
|
|
376
|
+
'valibot': 'fabian-hiller/valibot',
|
|
377
|
+
'typia': 'samchon/typia',
|
|
378
|
+
'arktype': 'arktypeio/arktype',
|
|
379
|
+
|
|
380
|
+
// === REACTIVITY & SIGNALS (10) ===
|
|
381
|
+
'@preact/signals': 'preactjs/signals',
|
|
382
|
+
'solid-js': 'solidjs/solid',
|
|
383
|
+
'mobx': 'mobxjs/mobx',
|
|
384
|
+
'vue': 'vuejs/core',
|
|
385
|
+
'rxjs': 'ReactiveX/rxjs',
|
|
386
|
+
'most': 'mostjs/core',
|
|
387
|
+
'kefir': 'kefirjs/kefir',
|
|
388
|
+
'bacon': 'baconjs/bacon.js',
|
|
389
|
+
'flyd': 'paldepind/flyd',
|
|
390
|
+
'callbag': 'callbag/callbag',
|
|
391
|
+
|
|
392
|
+
// === ANIMATION (10) ===
|
|
393
|
+
'gsap': 'greensock/GSAP',
|
|
394
|
+
'framer-motion': 'framer/motion',
|
|
395
|
+
'react-spring': 'pmndrs/react-spring',
|
|
396
|
+
'anime': 'juliangarnier/anime',
|
|
397
|
+
'popmotion': 'Popmotion/popmotion',
|
|
398
|
+
'velocity': 'julianshapiro/velocity',
|
|
399
|
+
'mo-js': 'mojs/mojs',
|
|
400
|
+
'lottie-web': 'airbnb/lottie-web',
|
|
401
|
+
'three': 'mrdoob/three.js',
|
|
402
|
+
'pixi.js': 'pixijs/pixijs',
|
|
403
|
+
|
|
404
|
+
// === CHARTS & DATA VIZ (15) ===
|
|
405
|
+
'chart.js': 'chartjs/Chart.js',
|
|
406
|
+
'd3': 'd3/d3',
|
|
407
|
+
'recharts': 'recharts/recharts',
|
|
408
|
+
'victory': 'FormidableLabs/victory',
|
|
409
|
+
'nivo': 'plouc/nivo',
|
|
410
|
+
'visx': 'airbnb/visx',
|
|
411
|
+
'plotly.js': 'plotly/plotly.js',
|
|
412
|
+
'highcharts': 'highcharts/highcharts',
|
|
413
|
+
'echarts': 'apache/echarts',
|
|
414
|
+
'apexcharts': 'apexcharts/apexcharts.js',
|
|
415
|
+
'react-chartjs-2': 'reactchartjs/react-chartjs-2',
|
|
416
|
+
'vue-chartjs': 'apertureless/vue-chartjs',
|
|
417
|
+
'chartist': 'chartist-js/chartist',
|
|
418
|
+
'c3': 'c3js/c3',
|
|
419
|
+
'billboard.js': 'naver/billboard.js',
|
|
420
|
+
|
|
421
|
+
// === UI COMPONENT LIBRARIES (25) ===
|
|
422
|
+
'@mui/material': 'mui/material-ui',
|
|
423
|
+
'antd': 'ant-design/ant-design',
|
|
424
|
+
'react-bootstrap': 'react-bootstrap/react-bootstrap',
|
|
425
|
+
'semantic-ui-react': 'Semantic-Org/Semantic-UI-React',
|
|
426
|
+
'chakra-ui': 'chakra-ui/chakra-ui',
|
|
427
|
+
'mantine': 'mantinedev/mantine',
|
|
428
|
+
'blueprint': 'palantir/blueprint',
|
|
429
|
+
'evergreen': 'segmentio/evergreen',
|
|
430
|
+
'fluent-ui': 'microsoft/fluentui',
|
|
431
|
+
'carbon-components-react': 'carbon-design-system/carbon',
|
|
432
|
+
'grommet': 'grommet/grommet',
|
|
433
|
+
'rebass': 'rebassjs/rebass',
|
|
434
|
+
'theme-ui': 'system-ui/theme-ui',
|
|
435
|
+
'radix-ui': 'radix-ui/primitives',
|
|
436
|
+
'headlessui': 'tailwindlabs/headlessui',
|
|
437
|
+
'daisyui': 'saadeghi/daisyui',
|
|
438
|
+
'nextui': 'nextui-org/nextui',
|
|
439
|
+
'shadcn-ui': 'shadcn-ui/ui',
|
|
440
|
+
'primereact': 'primefaces/primereact',
|
|
441
|
+
'vuetify': 'vuetifyjs/vuetify',
|
|
442
|
+
'quasar': 'quasarframework/quasar',
|
|
443
|
+
'element-plus': 'element-plus/element-plus',
|
|
444
|
+
'naive-ui': 'tusen-ai/naive-ui',
|
|
445
|
+
'arco-design': 'arco-design/arco-design',
|
|
446
|
+
'semi-design': 'DouyinFE/semi-design',
|
|
447
|
+
|
|
448
|
+
// === FORM LIBRARIES (10) ===
|
|
449
|
+
'react-hook-form': 'react-hook-form/react-hook-form',
|
|
450
|
+
'formik': 'jaredpalmer/formik',
|
|
451
|
+
'final-form': 'final-form/final-form',
|
|
452
|
+
'redux-form': 'redux-form/redux-form',
|
|
453
|
+
'react-final-form': 'final-form/react-final-form',
|
|
454
|
+
'vee-validate': 'logaretm/vee-validate',
|
|
455
|
+
'vue-formulate': 'wearebraid/vue-formulate',
|
|
456
|
+
'unform': 'unform/unform',
|
|
457
|
+
'informed': 'teslamotors/informed',
|
|
458
|
+
'formsy-react': 'formsy/formsy-react',
|
|
459
|
+
|
|
460
|
+
// === ROUTING (10) ===
|
|
461
|
+
'react-router': 'remix-run/react-router',
|
|
462
|
+
'vue-router': 'vuejs/router',
|
|
463
|
+
'wouter': 'molefrog/wouter',
|
|
464
|
+
'reach-router': 'reach/router',
|
|
465
|
+
'universal-router': 'kriasoft/universal-router',
|
|
466
|
+
'navigo': 'krasimir/navigo',
|
|
467
|
+
'page': 'visionmedia/page.js',
|
|
468
|
+
'director': 'flatiron/director',
|
|
469
|
+
'routify': 'roxiness/routify',
|
|
470
|
+
'tanstack-router': 'TanStack/router',
|
|
471
|
+
|
|
472
|
+
// === FILE UPLOAD (8) ===
|
|
473
|
+
'multer': 'expressjs/multer',
|
|
474
|
+
'formidable': 'node-formidable/formidable',
|
|
475
|
+
'busboy': 'mscdex/busboy',
|
|
476
|
+
'multiparty': 'pillarjs/multiparty',
|
|
477
|
+
'express-fileupload': 'richardgirges/express-fileupload',
|
|
478
|
+
'react-dropzone': 'react-dropzone/react-dropzone',
|
|
479
|
+
'uppy': 'transloadit/uppy',
|
|
480
|
+
'filepond': 'pqina/filepond',
|
|
481
|
+
|
|
482
|
+
// === MARKDOWN & RICH TEXT (12) ===
|
|
483
|
+
'markdown-it': 'markdown-it/markdown-it',
|
|
484
|
+
'marked': 'markedjs/marked',
|
|
485
|
+
'remark': 'remarkjs/remark',
|
|
486
|
+
'rehype': 'rehypejs/rehype',
|
|
487
|
+
'gray-matter': 'jonschlinkert/gray-matter',
|
|
488
|
+
'unified': 'unifiedjs/unified',
|
|
489
|
+
'mdx': 'mdx-js/mdx',
|
|
490
|
+
'slate': 'ianstormtaylor/slate',
|
|
491
|
+
'draft-js': 'facebook/draft-js',
|
|
492
|
+
'prosemirror': 'ProseMirror/prosemirror',
|
|
493
|
+
'tiptap': 'ueberdosis/tiptap',
|
|
494
|
+
'quill': 'slab/quill',
|
|
495
|
+
|
|
496
|
+
// === IMAGE PROCESSING (10) ===
|
|
497
|
+
'sharp': 'lovell/sharp',
|
|
498
|
+
'jimp': 'jimp-dev/jimp',
|
|
499
|
+
'canvas': 'Automattic/node-canvas',
|
|
500
|
+
'gm': 'aheckmann/gm',
|
|
501
|
+
'imagemin': 'imagemin/imagemin',
|
|
502
|
+
'pica': 'nodeca/pica',
|
|
503
|
+
'blurhash': 'woltapp/blurhash',
|
|
504
|
+
'qrcode': 'soldair/node-qrcode',
|
|
505
|
+
'svg-captcha': 'produck/svg-captcha',
|
|
506
|
+
'pdf-lib': 'Hopding/pdf-lib',
|
|
507
|
+
|
|
508
|
+
// === EMAIL (8) ===
|
|
509
|
+
'nodemailer': 'nodemailer/nodemailer',
|
|
510
|
+
'emailjs': 'eleith/emailjs',
|
|
511
|
+
'sendgrid': 'sendgrid/sendgrid-nodejs',
|
|
512
|
+
'mailgun-js': 'mailgun/mailgun-js',
|
|
513
|
+
'postmark': 'wildbit/postmark.js',
|
|
514
|
+
'mjml': 'mjmlio/mjml',
|
|
515
|
+
'react-email': 'resend/react-email',
|
|
516
|
+
'handlebars': 'handlebars-lang/handlebars.js',
|
|
517
|
+
|
|
518
|
+
// === WEBSOCKETS (8) ===
|
|
519
|
+
'ws': 'websockets/ws',
|
|
520
|
+
'socket.io': 'socketio/socket.io',
|
|
521
|
+
'sockjs': 'sockjs/sockjs-node',
|
|
522
|
+
'uWebSockets.js': 'uNetworking/uWebSockets.js',
|
|
523
|
+
'faye-websocket': 'faye/faye-websocket-node',
|
|
524
|
+
'websocket': 'theturtle32/WebSocket-Node',
|
|
525
|
+
'reconnecting-websocket': 'pladaria/reconnecting-websocket',
|
|
526
|
+
'pusher-js': 'pusher/pusher-js',
|
|
527
|
+
|
|
528
|
+
// === COMPRESSION (6) ===
|
|
529
|
+
'compression': 'expressjs/compression',
|
|
530
|
+
'pako': 'nodeca/pako',
|
|
531
|
+
'brotli': 'google/brotli',
|
|
532
|
+
'zlib': 'nodejs/node',
|
|
533
|
+
'tar': 'npm/node-tar',
|
|
534
|
+
'archiver': 'archiverjs/node-archiver',
|
|
535
|
+
|
|
536
|
+
// === SECURITY (10) ===
|
|
537
|
+
'helmet': 'helmetjs/helmet',
|
|
538
|
+
'cors': 'expressjs/cors',
|
|
539
|
+
'csurf': 'expressjs/csurf',
|
|
540
|
+
'express-rate-limit': 'express-rate-limit/express-rate-limit',
|
|
541
|
+
'express-validator': 'express-validator/express-validator',
|
|
542
|
+
'sanitize-html': 'apostrophecms/sanitize-html',
|
|
543
|
+
'dompurify': 'cure53/DOMPurify',
|
|
544
|
+
'xss': 'leizongmin/js-xss',
|
|
545
|
+
'hpp': 'analog-nico/hpp',
|
|
546
|
+
'toobusy-js': 'STRML/node-toobusy',
|
|
547
|
+
|
|
548
|
+
// === CLI TOOLS (15) ===
|
|
549
|
+
'commander': 'tj/commander.js',
|
|
550
|
+
'yargs': 'yargs/yargs',
|
|
551
|
+
'inquirer': 'SBoudrias/Inquirer.js',
|
|
552
|
+
'prompts': 'terkelg/prompts',
|
|
553
|
+
'enquirer': 'enquirer/enquirer',
|
|
554
|
+
'ora': 'sindresorhus/ora',
|
|
555
|
+
'chalk': 'chalk/chalk',
|
|
556
|
+
'boxen': 'sindresorhus/boxen',
|
|
557
|
+
'figures': 'sindresorhus/figures',
|
|
558
|
+
'cli-table3': 'cli-table/cli-table3',
|
|
559
|
+
'progress': 'visionmedia/node-progress',
|
|
560
|
+
'listr': 'SamVerschueren/listr',
|
|
561
|
+
'blessed': 'chjj/blessed',
|
|
562
|
+
'ink': 'vadimdemedes/ink',
|
|
563
|
+
'oclif': 'oclif/oclif',
|
|
564
|
+
|
|
565
|
+
// === PERFORMANCE & MONITORING (10) ===
|
|
566
|
+
'clinic': 'clinicjs/node-clinic',
|
|
567
|
+
'autocannon': 'mcollina/autocannon',
|
|
568
|
+
'benchmark': 'bestiejs/benchmark.js',
|
|
569
|
+
'prom-client': 'siimon/prom-client',
|
|
570
|
+
'hot-shots': 'brightcove/hot-shots',
|
|
571
|
+
'node-statsd': 'sivy/node-statsd',
|
|
572
|
+
'lightship': 'gajus/lightship',
|
|
573
|
+
'express-status-monitor': 'RafalWilinski/express-status-monitor',
|
|
574
|
+
'appmetrics': 'RuntimeTools/appmetrics',
|
|
575
|
+
'newrelic': 'newrelic/node-newrelic',
|
|
576
|
+
|
|
577
|
+
// === MISCELLANEOUS POPULAR (20) ===
|
|
578
|
+
'cheerio': 'cheeriojs/cheerio',
|
|
579
|
+
'jsdom': 'jsdom/jsdom',
|
|
580
|
+
'xml2js': 'Leonidas-from-XIV/node-xml2js',
|
|
581
|
+
'csv-parse': 'adaltas/node-csv',
|
|
582
|
+
'papaparse': 'mholt/PapaParse',
|
|
583
|
+
'pdf-parse': 'modesty/pdf-parse',
|
|
584
|
+
'docxtemplater': 'open-xml-templating/docxtemplater',
|
|
585
|
+
'slugify': 'simov/slugify',
|
|
586
|
+
'url-slug': 'stldo/url-slug',
|
|
587
|
+
'helmet': 'helmetjs/helmet',
|
|
588
|
+
'cookie-parser': 'expressjs/cookie-parser',
|
|
589
|
+
'body-parser': 'expressjs/body-parser',
|
|
590
|
+
'serve-static': 'expressjs/serve-static',
|
|
591
|
+
'serve-favicon': 'expressjs/serve-favicon',
|
|
592
|
+
'method-override': 'expressjs/method-override',
|
|
593
|
+
'connect': 'senchalabs/connect',
|
|
594
|
+
'path-to-regexp': 'pillarjs/path-to-regexp',
|
|
595
|
+
'qs': 'ljharb/qs',
|
|
596
|
+
'mime': 'broofa/mime',
|
|
597
|
+
'content-type': 'jshttp/content-type',
|
|
20
598
|
};
|
|
21
599
|
|
|
22
600
|
/**
|
|
@@ -150,13 +728,21 @@ function determineTrend(last7Days, last30Days) {
|
|
|
150
728
|
}
|
|
151
729
|
|
|
152
730
|
/**
|
|
153
|
-
* Check GitHub issues for multiple packages
|
|
731
|
+
* Check GitHub issues for multiple packages (OPTIMIZED)
|
|
154
732
|
*/
|
|
155
733
|
async function checkGitHubIssues(packages) {
|
|
156
734
|
const results = [];
|
|
735
|
+
const packageNames = Object.keys(packages);
|
|
736
|
+
|
|
737
|
+
// Only check packages that are tracked AND installed
|
|
738
|
+
const trackedAndInstalled = packageNames.filter(pkg => TRACKED_REPOS[pkg]);
|
|
739
|
+
|
|
740
|
+
if (trackedAndInstalled.length === 0) {
|
|
741
|
+
return results;
|
|
742
|
+
}
|
|
157
743
|
|
|
158
744
|
// Process in batches to avoid rate limits
|
|
159
|
-
for (const packageName of
|
|
745
|
+
for (const packageName of trackedAndInstalled) {
|
|
160
746
|
const result = await fetchGitHubIssues(packageName);
|
|
161
747
|
|
|
162
748
|
if (result) {
|
|
@@ -170,8 +756,58 @@ async function checkGitHubIssues(packages) {
|
|
|
170
756
|
return results;
|
|
171
757
|
}
|
|
172
758
|
|
|
759
|
+
/**
|
|
760
|
+
* Get total count of tracked packages
|
|
761
|
+
*/
|
|
762
|
+
function getTrackedPackageCount() {
|
|
763
|
+
return Object.keys(TRACKED_REPOS).length;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Get tracked packages by category (for documentation)
|
|
768
|
+
*/
|
|
769
|
+
function getTrackedPackagesByCategory() {
|
|
770
|
+
return {
|
|
771
|
+
'Web Frameworks': 25,
|
|
772
|
+
'Meta Frameworks': 15,
|
|
773
|
+
'Mobile Frameworks': 10,
|
|
774
|
+
'Backend Frameworks': 20,
|
|
775
|
+
'Build Tools': 25,
|
|
776
|
+
'Testing': 25,
|
|
777
|
+
'Linters & Formatters': 15,
|
|
778
|
+
'TypeScript Tools': 15,
|
|
779
|
+
'State Management': 20,
|
|
780
|
+
'HTTP Clients': 20,
|
|
781
|
+
'Utilities': 50,
|
|
782
|
+
'CSS & Styling': 25,
|
|
783
|
+
'Documentation': 15,
|
|
784
|
+
'Database & ORM': 20,
|
|
785
|
+
'GraphQL': 15,
|
|
786
|
+
'Authentication': 15,
|
|
787
|
+
'Validation': 10,
|
|
788
|
+
'Reactivity': 10,
|
|
789
|
+
'Animation': 10,
|
|
790
|
+
'Charts & Visualization': 15,
|
|
791
|
+
'UI Libraries': 25,
|
|
792
|
+
'Forms': 10,
|
|
793
|
+
'Routing': 10,
|
|
794
|
+
'File Upload': 8,
|
|
795
|
+
'Markdown & Rich Text': 12,
|
|
796
|
+
'Image Processing': 10,
|
|
797
|
+
'Email': 8,
|
|
798
|
+
'WebSockets': 8,
|
|
799
|
+
'Compression': 6,
|
|
800
|
+
'Security': 10,
|
|
801
|
+
'CLI Tools': 15,
|
|
802
|
+
'Performance': 10,
|
|
803
|
+
'Miscellaneous': 20
|
|
804
|
+
};
|
|
805
|
+
}
|
|
806
|
+
|
|
173
807
|
module.exports = {
|
|
174
808
|
checkGitHubIssues,
|
|
175
809
|
fetchGitHubIssues,
|
|
176
|
-
TRACKED_REPOS
|
|
810
|
+
TRACKED_REPOS,
|
|
811
|
+
getTrackedPackageCount,
|
|
812
|
+
getTrackedPackagesByCategory
|
|
177
813
|
};
|
package/src/alerts/predictive.js
CHANGED
|
@@ -3,11 +3,19 @@ const { checkGitHubIssues } = require('./github-tracker');
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Generate predictive warnings based on GitHub activity
|
|
6
|
+
* OPTIMIZED: Only checks packages that are actually installed
|
|
6
7
|
*/
|
|
7
8
|
async function generatePredictiveWarnings(packages) {
|
|
8
9
|
try {
|
|
9
|
-
|
|
10
|
-
const
|
|
10
|
+
// Only check packages that are actually installed
|
|
11
|
+
const installedPackages = Object.keys(packages);
|
|
12
|
+
|
|
13
|
+
if (installedPackages.length === 0) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Pass only installed packages to GitHub checker
|
|
18
|
+
const githubData = await checkGitHubIssues(packages);
|
|
11
19
|
|
|
12
20
|
const warnings = [];
|
|
13
21
|
|
|
@@ -40,6 +48,25 @@ async function generatePredictiveWarnings(packages) {
|
|
|
40
48
|
title: 'Increased issue activity',
|
|
41
49
|
description: `${data.last7Days} issues opened recently`,
|
|
42
50
|
recommendation: 'Monitor for stability',
|
|
51
|
+
data: {
|
|
52
|
+
totalIssues: data.totalIssues,
|
|
53
|
+
recentIssues: data.last7Days,
|
|
54
|
+
criticalIssues: data.criticalIssues,
|
|
55
|
+
trend: data.trend,
|
|
56
|
+
repoUrl: data.repoUrl
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Low risk: stable but worth noting
|
|
62
|
+
else if (data.riskScore >= 1) {
|
|
63
|
+
warnings.push({
|
|
64
|
+
package: data.package,
|
|
65
|
+
severity: 'low',
|
|
66
|
+
type: 'predictive',
|
|
67
|
+
title: 'Minor issue activity',
|
|
68
|
+
description: `${data.last7Days} issues in last week`,
|
|
69
|
+
recommendation: 'No immediate action needed',
|
|
43
70
|
data: {
|
|
44
71
|
totalIssues: data.totalIssues,
|
|
45
72
|
recentIssues: data.last7Days,
|
|
@@ -78,7 +105,21 @@ function calculateRiskScore(githubData) {
|
|
|
78
105
|
return score;
|
|
79
106
|
}
|
|
80
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Get statistics about predictive warnings
|
|
110
|
+
*/
|
|
111
|
+
function getPredictiveStats(warnings) {
|
|
112
|
+
return {
|
|
113
|
+
total: warnings.length,
|
|
114
|
+
high: warnings.filter(w => w.severity === 'high').length,
|
|
115
|
+
medium: warnings.filter(w => w.severity === 'medium').length,
|
|
116
|
+
low: warnings.filter(w => w.severity === 'low').length,
|
|
117
|
+
packages: warnings.map(w => w.package)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
81
121
|
module.exports = {
|
|
82
122
|
generatePredictiveWarnings,
|
|
83
|
-
calculateRiskScore
|
|
123
|
+
calculateRiskScore,
|
|
124
|
+
getPredictiveStats
|
|
84
125
|
};
|
package/src/commands/analyze.js
CHANGED
|
@@ -184,8 +184,19 @@ async function analyze(options) {
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
// Check for predictive warnings (GitHub Issues) -
|
|
188
|
-
|
|
187
|
+
// Check for predictive warnings (GitHub Issues) - UPDATED for v2.5.0
|
|
188
|
+
const { getTrackedPackageCount, TRACKED_REPOS } = require('../alerts/github-tracker');
|
|
189
|
+
const totalTracked = getTrackedPackageCount();
|
|
190
|
+
|
|
191
|
+
// Count how many installed packages are tracked
|
|
192
|
+
const installedTrackedCount = Object.keys(dependencies).filter(pkg => TRACKED_REPOS[pkg]).length;
|
|
193
|
+
|
|
194
|
+
if (installedTrackedCount > 0) {
|
|
195
|
+
spinner.text = `Checking GitHub activity (${installedTrackedCount}/${totalTracked} tracked packages)...`;
|
|
196
|
+
} else {
|
|
197
|
+
spinner.text = 'Checking GitHub activity...';
|
|
198
|
+
}
|
|
199
|
+
|
|
189
200
|
let predictiveWarnings = [];
|
|
190
201
|
|
|
191
202
|
if (config.cache) {
|
|
@@ -360,11 +371,14 @@ function displayResults(alerts, unusedDeps, outdatedDeps, score, totalDeps, secu
|
|
|
360
371
|
|
|
361
372
|
logDivider();
|
|
362
373
|
|
|
363
|
-
// PREDICTIVE WARNINGS (
|
|
374
|
+
// PREDICTIVE WARNINGS (UPDATED for v2.5.0)
|
|
364
375
|
if (predictiveWarnings.length > 0) {
|
|
376
|
+
const { getTrackedPackageCount } = require('../alerts/github-tracker');
|
|
377
|
+
const totalTracked = getTrackedPackageCount();
|
|
378
|
+
|
|
365
379
|
logSection('🔮 PREDICTIVE WARNINGS', predictiveWarnings.length);
|
|
366
380
|
|
|
367
|
-
log(chalk.gray(
|
|
381
|
+
log(chalk.gray(` Based on recent GitHub activity (${totalTracked}+ packages monitored):\n`));
|
|
368
382
|
|
|
369
383
|
predictiveWarnings.forEach(warning => {
|
|
370
384
|
const display = getSeverityDisplay(warning.severity);
|
|
@@ -381,8 +395,11 @@ function displayResults(alerts, unusedDeps, outdatedDeps, score, totalDeps, secu
|
|
|
381
395
|
log('');
|
|
382
396
|
});
|
|
383
397
|
} else {
|
|
398
|
+
const { getTrackedPackageCount } = require('../alerts/github-tracker');
|
|
399
|
+
const totalTracked = getTrackedPackageCount();
|
|
400
|
+
|
|
384
401
|
logSection('✅ PREDICTIVE ANALYSIS');
|
|
385
|
-
log(chalk.green(
|
|
402
|
+
log(chalk.green(` No unusual activity detected (${totalTracked}+ packages monitored)!\n`));
|
|
386
403
|
}
|
|
387
404
|
|
|
388
405
|
logDivider();
|