devcompass 2.4.0 โ†’ 2.6.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 CHANGED
@@ -1,43 +1,54 @@
1
1
  # ๐Ÿงญ DevCompass
2
2
 
3
- **Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for JavaScript/TypeScript projects**
3
+ **Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for 500+ popular npm packages. Features parallel processing for 80% faster analysis.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/devcompass.svg)](https://www.npmjs.com/package/devcompass)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/devcompass.svg)](https://www.npmjs.com/package/devcompass)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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.6.0:** 80% faster with parallel processing! โšก
12
+ > **NEW in v2.5.0:** Expanded to 502 packages across 33 categories! ๐ŸŽฏ
11
13
  > **NEW in v2.4.0:** Real-time GitHub issue tracking & predictive warnings! ๐Ÿ”ฎ
12
14
  > **NEW in v2.3.1:** Fixed all security vulnerabilities! Health score: 2.5/10 โ†’ 8/10 ๐Ÿ”’
13
- > **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.3:** Security scanning, bundle analysis & license checker! ๐Ÿ”
17
16
 
18
- ## ๐ŸŽ‰ Latest Update: v2.4.0
17
+ ## ๐ŸŽ‰ Latest Update: v2.6.0
19
18
 
20
- **Real-time GitHub issue tracking is here!** DevCompass now monitors live GitHub activity for 14+ popular packages:
19
+ **80% faster analysis with parallel processing!** DevCompass now checks multiple packages simultaneously:
21
20
 
22
- - ๐Ÿ”ฎ **Predictive warnings** based on recent bug activity
23
- - ๐Ÿ“Š **Risk scoring** (high/medium/low severity)
24
- - ๐Ÿ“ˆ **Trend analysis** (increasing/stable/decreasing)
25
- - โšก **93% faster** with smart caching (8s โ†’ 0.5s)
26
- - ๐Ÿ”— **Direct links** to GitHub repositories
21
+ - โšก **Parallel GitHub API requests** - Check 5 packages at once (configurable)
22
+ - ๐Ÿ“Š **Real-time progress tracking** - Live updates showing current package
23
+ - ๐Ÿš€ **80% performance improvement** - 5 packages in ~1s instead of ~5s
24
+ - ๐Ÿ“ˆ **Smart batching** - Respects GitHub rate limits automatically
25
+ - โฑ๏ธ **Performance metrics** - Shows time saved after analysis
27
26
 
28
- **Example warning:**
27
+ **Performance Comparison:**
28
+ ```
29
+ v2.5.0 (Sequential): 5 packages ร— 1s = ~5 seconds
30
+ v2.6.0 (Parallel): 5 packages รท 5 = ~1 second (80% faster!)
29
31
  ```
30
- ๐Ÿ”ฎ PREDICTIVE WARNINGS (1)
31
32
 
32
- ๐ŸŸก express
33
- Increased issue activity
34
- 15 new issues in last 7 days
35
- โ†’ Monitor for stability
36
- GitHub: https://github.com/expressjs/express
33
+ **Example output:**
34
+ ```
35
+ โ น Checking GitHub activity (3/5 packages) - express
36
+ โ น Checking GitHub activity (4/5 packages) - webpack
37
+ โ น Checking GitHub activity (5/5 packages) - react
38
+ โœ” Scanned 5 dependencies in project
39
+ โšก GitHub check completed in 1.23s (parallel processing)
37
40
  ```
38
41
 
42
+ **What's tracked:**
43
+ - ๐ŸŽฏ **502 tracked packages** organized into 33 categories
44
+ - ๐ŸŒ **Full ecosystem coverage** - Frontend, backend, build tools, testing, databases
45
+ - โšก **Zero performance impact** - Smart filtering + parallel processing
46
+ - ๐Ÿ“Š **Comprehensive monitoring** - React, Vue, Angular, Next.js, Express, and 497+ more
47
+
39
48
  ## โœจ Features
40
49
 
50
+ - โšก **Parallel Processing** (v2.6) - 80% faster GitHub issue tracking
51
+ - ๐ŸŽฏ **500+ Package Coverage** (v2.5) - Comprehensive ecosystem monitoring
41
52
  - ๐Ÿ”ฎ **GitHub Issue Tracking** (v2.4) - Real-time monitoring of package health
42
53
  - ๐Ÿ“ˆ **Predictive Warnings** (v2.4) - Detect issues before they're announced
43
54
  - ๐Ÿ” **Security Scanning** (v2.3) - npm audit integration with severity breakdown
@@ -90,9 +101,9 @@ devcompass analyze --ci
90
101
  devcompass analyze --silent
91
102
  ```
92
103
 
93
- ## ๐Ÿ”ฎ Predictive Warnings (v2.4.0)
104
+ ## ๐Ÿ”ฎ Predictive Warnings (v2.6.0)
94
105
 
95
- DevCompass now monitors **real-time GitHub activity** to detect potential issues before they're officially reported!
106
+ DevCompass now monitors **real-time GitHub activity for 500+ packages** to detect potential issues before they're officially reported!
96
107
 
97
108
  ### What it tracks:
98
109
  - ๐Ÿ› **Open bug reports** in the last 7/30 days
@@ -100,17 +111,40 @@ DevCompass now monitors **real-time GitHub activity** to detect potential issues
100
111
  - ๐Ÿ“ˆ **Trend analysis** (increasing/stable/decreasing)
101
112
  - โš ๏ธ **Critical issues** flagged by maintainers
102
113
 
103
- ### Currently tracked packages (14+):
104
- - **axios**, **lodash**, **moment**, **express**
105
- - **react**, **vue**, **next**, **webpack**
106
- - **typescript**, **eslint**, **jest**, **prettier**
107
- - **node-fetch**, **chalk**
114
+ ### Currently tracked packages (502+):
115
+ Organized into 33 categories covering the entire JavaScript ecosystem:
116
+
117
+ **Web & UI Frameworks (25):** react, vue, angular, svelte, preact, solid-js, lit, alpine, qwik, astro, etc.
118
+
119
+ **Meta Frameworks (15):** next, nuxt, gatsby, remix, sveltekit, blitz, redwood, docusaurus, etc.
120
+
121
+ **Mobile Frameworks (10):** react-native, ionic, expo, capacitor, cordova, etc.
122
+
123
+ **Backend Frameworks (20):** express, koa, fastify, hapi, nest, strapi, meteor, trpc, apollo-server, etc.
124
+
125
+ **Build Tools (25):** webpack, vite, rollup, parcel, esbuild, turbopack, swc, babel, rome, etc.
126
+
127
+ **Testing Frameworks (25):** jest, mocha, vitest, cypress, playwright, puppeteer, storybook, etc.
128
+
129
+ **Linters & Formatters (15):** eslint, prettier, stylelint, biome, dprint, etc.
130
+
131
+ **TypeScript Tools (15):** typescript, ts-node, tsx, zod, yup, joi, ajv, etc.
132
+
133
+ **State Management (20):** redux, mobx, zustand, jotai, recoil, valtio, xstate, etc.
134
+
135
+ **HTTP Clients (20):** axios, got, ky, superagent, undici, @tanstack/react-query, swr, etc.
136
+
137
+ **Utilities (50):** lodash, moment, dayjs, chalk, ora, commander, uuid, nanoid, etc.
138
+
139
+ **CSS & Styling (25):** tailwindcss, sass, styled-components, emotion, unocss, etc.
140
+
141
+ **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
142
 
109
143
  ### Example Output:
110
144
  ```
111
145
  ๐Ÿ”ฎ PREDICTIVE WARNINGS (2)
112
146
 
113
- Based on recent GitHub activity:
147
+ Based on recent GitHub activity (502+ packages monitored):
114
148
 
115
149
  ๐ŸŸ  axios
116
150
  High bug activity detected
@@ -131,13 +165,26 @@ DevCompass now monitors **real-time GitHub activity** to detect potential issues
131
165
  3. Detects critical issues via labels
132
166
  4. Calculates risk scores
133
167
  5. Provides actionable recommendations
168
+ 6. **Smart filtering:** Only checks packages you've actually installed
169
+ 7. **Parallel processing:** Checks multiple packages simultaneously (v2.6.0)
134
170
 
135
- ### Performance:
136
- - **First run:** ~8 seconds (fetches GitHub data for 14 packages)
171
+ ### Performance (NEW in v2.6.0):
172
+ - **Parallel processing:** Checks 5 packages simultaneously (80% faster!)
173
+ - **Smart filtering:** Only checks installed packages from your project
174
+ - **First run:** ~1 second for 5 packages (was ~5s in v2.5.0)
137
175
  - **Cached runs:** ~0.5 seconds (93% faster!)
138
176
  - **Cache duration:** 1 hour
177
+ - **Zero overhead:** Uninstalled packages aren't checked
139
178
 
140
- > More packages being added in v2.5.0 (expanding to top 500)!
179
+ **Performance Benchmarks:**
180
+ | Packages | v2.5.0 | v2.6.0 | Improvement |
181
+ |----------|--------|--------|-------------|
182
+ | 5 | ~5s | ~1s | 80% faster |
183
+ | 10 | ~10s | ~2s | 80% faster |
184
+ | 20 | ~20s | ~4s | 80% faster |
185
+ | 50 | ~50s | ~10s | 80% faster |
186
+
187
+ > **Performance Example:** If you have 5 tracked packages installed (e.g., react, axios, lodash, express, webpack), DevCompass checks all 5 in parallel, completing in ~1 second instead of ~5 seconds!
141
188
 
142
189
  ## ๐Ÿ” Security & Compliance Features
143
190
 
@@ -219,8 +266,9 @@ Detect restrictive licenses that may require legal review!
219
266
 
220
267
  **Full Output:**
221
268
  ```
222
- ๐Ÿ” DevCompass v2.4.0 - Analyzing your project...
269
+ ๐Ÿ” DevCompass v2.6.0 - Analyzing your project...
223
270
  โœ” Scanned 25 dependencies in project
271
+ โšก GitHub check completed in 1.23s (parallel processing)
224
272
 
225
273
  โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
226
274
 
@@ -241,7 +289,7 @@ Detect restrictive licenses that may require legal review!
241
289
 
242
290
  ๐Ÿ”ฎ PREDICTIVE WARNINGS (1)
243
291
 
244
- Based on recent GitHub activity:
292
+ Based on recent GitHub activity (502+ packages monitored):
245
293
 
246
294
  ๐ŸŸก express
247
295
  Increased issue activity
@@ -301,7 +349,7 @@ devcompass analyze --json
301
349
  **Output:**
302
350
  ```json
303
351
  {
304
- "version": "2.4.0",
352
+ "version": "2.6.0",
305
353
  "timestamp": "2026-04-04T10:30:00.000Z",
306
354
  "summary": {
307
355
  "healthScore": 8.5,
@@ -388,14 +436,14 @@ echo $? # Check exit code
388
436
 
389
437
  DevCompass caches results to improve performance:
390
438
 
391
- - **First run:** ~8 seconds (fetches GitHub + npm data)
439
+ - **First run:** ~2 seconds with parallel processing (fetches GitHub + npm data)
392
440
  - **Cached runs:** ~0.5 seconds (93% faster!)
393
441
  - **Cache duration:** 1 hour
394
442
  - **Cache file:** `.devcompass-cache.json` (auto-gitignored)
395
443
 
396
444
  **What gets cached:**
397
- - GitHub issue data (NEW in v2.4.0)
398
- - Predictive warnings (NEW in v2.4.0)
445
+ - GitHub issue data (v2.4+)
446
+ - Predictive warnings (v2.4+)
399
447
  - Security vulnerabilities
400
448
  - Ecosystem alerts
401
449
  - Unused dependencies
@@ -475,7 +523,7 @@ DevCompass can **automatically fix issues** in your project!
475
523
  - ๐Ÿงน **Removes unused dependencies** - Cleans up packages you're not using
476
524
  - โฌ†๏ธ **Safe updates** - Applies patch and minor updates automatically
477
525
  - โš ๏ธ **Skips breaking changes** - Major updates require manual review
478
- - ๐Ÿ”„ **Clears cache** - Ensures fresh analysis after fixes (NEW in v2.4.0)
526
+ - ๐Ÿ”„ **Clears cache** - Ensures fresh analysis after fixes (v2.4+)
479
527
 
480
528
  ### Usage
481
529
  ```bash
@@ -495,7 +543,7 @@ devcompass fix --path /path/to/project
495
543
  - โœ… Requires confirmation (unless `--yes` flag used)
496
544
  - โœ… Skips major updates (may have breaking changes)
497
545
  - โœ… Groups actions by priority (critical โ†’ cleanup โ†’ updates)
498
- - โœ… Clears cache after fixes (NEW in v2.4.0)
546
+ - โœ… Clears cache after fixes (v2.4+)
499
547
  - โœ… Provides clear summary of changes
500
548
 
501
549
  ### Workflow Example
@@ -512,7 +560,7 @@ devcompass analyze
512
560
 
513
561
  ## ๐Ÿšจ Ecosystem Intelligence
514
562
 
515
- DevCompass tracks **real-world issues** in popular packages and warns you before they break production!
563
+ DevCompass tracks **real-world issues** in 500+ popular packages and warns you before they break production!
516
564
 
517
565
  ### What Gets Detected:
518
566
  - ๐Ÿ”ด **Critical security vulnerabilities** - Zero-day exploits, prototype pollution
@@ -526,20 +574,13 @@ DevCompass tracks **real-world issues** in popular packages and warns you before
526
574
  - **MEDIUM** - Maintenance concerns, deprecations (โˆ’0.5 points per issue)
527
575
  - **LOW** - Minor issues (โˆ’0.2 points per issue)
528
576
 
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
577
  ### How It Works:
539
578
  1. Reads your actual installed versions from `node_modules`
540
579
  2. Matches against curated issues database
541
580
  3. Uses semantic versioning for precise detection
542
- 4. Shows actionable fix commands
581
+ 4. Checks live GitHub activity for 502+ packages
582
+ 5. Uses parallel processing for 80% faster checks (v2.6.0)
583
+ 6. Shows actionable fix commands
543
584
 
544
585
  ## ๐ŸŽฏ What It Detects
545
586
 
@@ -710,8 +751,8 @@ If you encounter a false positive, please [report it](https://github.com/AjayBTh
710
751
  8. **Use JSON output** - Integrate with your monitoring tools
711
752
  9. **Review major updates** - Always check changelogs before major version bumps
712
753
  10. **Verify before uninstalling** - DevCompass helps identify candidates, but always verify
713
- 11. **Watch predictive warnings** - Monitor packages with increasing issue activity (NEW)
714
- 12. **Cache for speed** - First run takes ~8s, cached runs ~0.5s (NEW)
754
+ 11. **Watch predictive warnings** - Monitor packages with increasing issue activity
755
+ 12. **Leverage parallel processing** - First run takes ~2s with v2.6.0 (was ~8s)
715
756
 
716
757
  ## ๐Ÿค Contributing
717
758
 
@@ -806,9 +847,9 @@ Check out DevCompass stats:
806
847
  - [x] ~~Fix all security vulnerabilities~~ โœ… **Fixed in v2.3.1!**
807
848
  - [x] ~~GitHub Issues API for real-time issue tracking~~ โœ… **Added in v2.4.0!**
808
849
  - [x] ~~Predictive warnings based on bug activity~~ โœ… **Added in v2.4.0!**
809
- - [ ] Expand to top 500 npm packages (v2.5.0)
810
- - [ ] Performance optimizations (v2.6.0)
811
- - [ ] Advanced security features with Snyk (v2.7.0)
850
+ - [x] ~~Expand to top 500 npm packages~~ โœ… **Added in v2.5.0!**
851
+ - [x] ~~Performance optimizations with parallel processing~~ โœ… **Added in v2.6.0!**
852
+ - [ ] Advanced security features with Snyk integration (v2.7.0)
812
853
  - [ ] Enhanced fix command improvements (v2.8.0)
813
854
  - [ ] Dependency graph visualization (v3.0.0)
814
855
  - [ ] 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.0",
4
- "description": "Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for JavaScript/TypeScript projects",
3
+ "version": "2.6.0",
4
+ "description": "Dependency health checker with ecosystem intelligence and real-time GitHub issue tracking for 500+ popular npm packages. Features parallel processing for 80% faster analysis.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
7
7
  "devcompass": "./bin/devcompass.js"
@@ -41,7 +41,11 @@
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",
47
+ "parallel-processing",
48
+ "performance-optimization"
45
49
  ],
46
50
  "author": "Ajay Thorat <ajaythorat988@gmail.com>",
47
51
  "license": "MIT",
@@ -1,22 +1,600 @@
1
1
  // src/alerts/github-tracker.js
2
2
  const https = require('https');
3
3
 
4
- // GitHub repos we track (you can expand this)
4
+ // Top 500+ npm packages organized by category
5
5
  const TRACKED_REPOS = {
6
- 'axios': 'axios/axios',
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
- 'typescript': 'microsoft/TypeScript',
15
- 'eslint': 'eslint/eslint',
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
- 'chalk': 'chalk/chalk'
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
  /**
@@ -26,7 +604,7 @@ async function fetchGitHubIssues(packageName) {
26
604
  const repo = TRACKED_REPOS[packageName];
27
605
 
28
606
  if (!repo) {
29
- return null; // Not tracked
607
+ return null;
30
608
  }
31
609
 
32
610
  try {
@@ -94,7 +672,6 @@ function analyzeIssues(issues, packageName) {
94
672
  const now = Date.now();
95
673
  const day = 24 * 60 * 60 * 1000;
96
674
 
97
- // Count issues by recency
98
675
  const last7Days = issues.filter(i =>
99
676
  (now - new Date(i.created_at).getTime()) < 7 * day
100
677
  ).length;
@@ -103,7 +680,6 @@ function analyzeIssues(issues, packageName) {
103
680
  (now - new Date(i.created_at).getTime()) < 30 * day
104
681
  ).length;
105
682
 
106
- // Detect critical issues (high priority labels)
107
683
  const criticalLabels = ['critical', 'security', 'regression', 'breaking'];
108
684
  const criticalIssues = issues.filter(issue =>
109
685
  issue.labels.some(label =>
@@ -113,7 +689,6 @@ function analyzeIssues(issues, packageName) {
113
689
  )
114
690
  );
115
691
 
116
- // Calculate risk score
117
692
  let riskScore = 0;
118
693
  if (last7Days > 15) riskScore += 3;
119
694
  else if (last7Days > 10) riskScore += 2;
@@ -135,7 +710,7 @@ function analyzeIssues(issues, packageName) {
135
710
  }
136
711
 
137
712
  /**
138
- * Determine trend (increasing/stable/decreasing)
713
+ * Determine trend
139
714
  */
140
715
  function determineTrend(last7Days, last30Days) {
141
716
  const weeklyAverage = last30Days / 4;
@@ -150,28 +725,123 @@ function determineTrend(last7Days, last30Days) {
150
725
  }
151
726
 
152
727
  /**
153
- * Check GitHub issues for multiple packages
728
+ * Process packages in parallel batches
729
+ * NEW in v2.6.0: Parallel processing for better performance
154
730
  */
155
- async function checkGitHubIssues(packages) {
731
+ async function processBatch(packages, concurrency = 5, onProgress) {
156
732
  const results = [];
733
+ const batches = [];
157
734
 
158
- // Process in batches to avoid rate limits
159
- for (const packageName of packages) {
160
- const result = await fetchGitHubIssues(packageName);
735
+ // Split into batches
736
+ for (let i = 0; i < packages.length; i += concurrency) {
737
+ batches.push(packages.slice(i, i + concurrency));
738
+ }
739
+
740
+ // Process each batch in parallel
741
+ for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
742
+ const batch = batches[batchIndex];
161
743
 
162
- if (result) {
163
- results.push(result);
164
- }
744
+ // Process batch in parallel
745
+ const batchResults = await Promise.all(
746
+ batch.map(async (packageName) => {
747
+ const result = await fetchGitHubIssues(packageName);
748
+
749
+ // Call progress callback
750
+ if (onProgress) {
751
+ const processed = batchIndex * concurrency + batch.indexOf(packageName) + 1;
752
+ onProgress(processed, packages.length, packageName);
753
+ }
754
+
755
+ return result;
756
+ })
757
+ );
758
+
759
+ results.push(...batchResults.filter(r => r !== null));
165
760
 
166
- // Rate limit: wait 1 second between requests
167
- await new Promise(resolve => setTimeout(resolve, 1000));
761
+ // Small delay between batches to respect rate limits
762
+ if (batchIndex < batches.length - 1) {
763
+ await new Promise(resolve => setTimeout(resolve, 200));
764
+ }
765
+ }
766
+
767
+ return results;
768
+ }
769
+
770
+ /**
771
+ * Check GitHub issues for multiple packages (OPTIMIZED v2.6.0)
772
+ * Now uses parallel processing for 80% faster execution
773
+ */
774
+ async function checkGitHubIssues(packages, options = {}) {
775
+ const { concurrency = 5, onProgress } = options;
776
+ const results = [];
777
+ const packageNames = Object.keys(packages);
778
+
779
+ // Only check packages that are tracked AND installed
780
+ const trackedAndInstalled = packageNames.filter(pkg => TRACKED_REPOS[pkg]);
781
+
782
+ if (trackedAndInstalled.length === 0) {
783
+ return results;
168
784
  }
169
785
 
786
+ // Use parallel processing
787
+ const batchResults = await processBatch(trackedAndInstalled, concurrency, onProgress);
788
+ results.push(...batchResults);
789
+
170
790
  return results;
171
791
  }
172
792
 
793
+ /**
794
+ * Get total count of tracked packages
795
+ */
796
+ function getTrackedPackageCount() {
797
+ return Object.keys(TRACKED_REPOS).length;
798
+ }
799
+
800
+ /**
801
+ * Get tracked packages by category
802
+ */
803
+ function getTrackedPackagesByCategory() {
804
+ return {
805
+ 'Web Frameworks': 25,
806
+ 'Meta Frameworks': 15,
807
+ 'Mobile Frameworks': 10,
808
+ 'Backend Frameworks': 20,
809
+ 'Build Tools': 25,
810
+ 'Testing': 25,
811
+ 'Linters & Formatters': 15,
812
+ 'TypeScript Tools': 15,
813
+ 'State Management': 20,
814
+ 'HTTP Clients': 20,
815
+ 'Utilities': 50,
816
+ 'CSS & Styling': 25,
817
+ 'Documentation': 15,
818
+ 'Database & ORM': 20,
819
+ 'GraphQL': 15,
820
+ 'Authentication': 15,
821
+ 'Validation': 10,
822
+ 'Reactivity': 10,
823
+ 'Animation': 10,
824
+ 'Charts & Visualization': 15,
825
+ 'UI Libraries': 25,
826
+ 'Forms': 10,
827
+ 'Routing': 10,
828
+ 'File Upload': 8,
829
+ 'Markdown & Rich Text': 12,
830
+ 'Image Processing': 10,
831
+ 'Email': 8,
832
+ 'WebSockets': 8,
833
+ 'Compression': 6,
834
+ 'Security': 10,
835
+ 'CLI Tools': 15,
836
+ 'Performance': 10,
837
+ 'Miscellaneous': 20
838
+ };
839
+ }
840
+
173
841
  module.exports = {
174
842
  checkGitHubIssues,
175
843
  fetchGitHubIssues,
176
- TRACKED_REPOS
844
+ TRACKED_REPOS,
845
+ getTrackedPackageCount,
846
+ getTrackedPackagesByCategory
177
847
  };
@@ -3,11 +3,25 @@ const { checkGitHubIssues } = require('./github-tracker');
3
3
 
4
4
  /**
5
5
  * Generate predictive warnings based on GitHub activity
6
+ * ENHANCED v2.6.0: Added progress callback support for parallel processing
6
7
  */
7
- async function generatePredictiveWarnings(packages) {
8
+ async function generatePredictiveWarnings(packages, options = {}) {
9
+ const { onProgress } = options;
10
+
8
11
  try {
9
- const packageNames = Object.keys(packages);
10
- const githubData = await checkGitHubIssues(packageNames);
12
+ // Only check packages that are actually installed
13
+ const installedPackages = Object.keys(packages);
14
+
15
+ if (installedPackages.length === 0) {
16
+ return [];
17
+ }
18
+
19
+ // Pass options to GitHub checker (including progress callback)
20
+ // v2.6.0: Now supports parallel processing with concurrency control
21
+ const githubData = await checkGitHubIssues(packages, {
22
+ concurrency: 5, // Process 5 packages in parallel
23
+ onProgress: onProgress // Pass through progress callback
24
+ });
11
25
 
12
26
  const warnings = [];
13
27
 
@@ -40,6 +54,25 @@ async function generatePredictiveWarnings(packages) {
40
54
  title: 'Increased issue activity',
41
55
  description: `${data.last7Days} issues opened recently`,
42
56
  recommendation: 'Monitor for stability',
57
+ data: {
58
+ totalIssues: data.totalIssues,
59
+ recentIssues: data.last7Days,
60
+ criticalIssues: data.criticalIssues,
61
+ trend: data.trend,
62
+ repoUrl: data.repoUrl
63
+ }
64
+ });
65
+ }
66
+
67
+ // Low risk: stable but worth noting
68
+ else if (data.riskScore >= 1) {
69
+ warnings.push({
70
+ package: data.package,
71
+ severity: 'low',
72
+ type: 'predictive',
73
+ title: 'Minor issue activity',
74
+ description: `${data.last7Days} issues in last week`,
75
+ recommendation: 'No immediate action needed',
43
76
  data: {
44
77
  totalIssues: data.totalIssues,
45
78
  recentIssues: data.last7Days,
@@ -78,7 +111,21 @@ function calculateRiskScore(githubData) {
78
111
  return score;
79
112
  }
80
113
 
114
+ /**
115
+ * Get statistics about predictive warnings
116
+ */
117
+ function getPredictiveStats(warnings) {
118
+ return {
119
+ total: warnings.length,
120
+ high: warnings.filter(w => w.severity === 'high').length,
121
+ medium: warnings.filter(w => w.severity === 'medium').length,
122
+ low: warnings.filter(w => w.severity === 'low').length,
123
+ packages: warnings.map(w => w.package)
124
+ };
125
+ }
126
+
81
127
  module.exports = {
82
128
  generatePredictiveWarnings,
83
- calculateRiskScore
129
+ calculateRiskScore,
130
+ getPredictiveStats
84
131
  };
@@ -184,9 +184,21 @@ async function analyze(options) {
184
184
  }
185
185
  }
186
186
 
187
- // Check for predictive warnings (GitHub Issues) - NEW
188
- spinner.text = 'Checking GitHub activity...';
187
+ // Check for predictive warnings (GitHub Issues) - ENHANCED v2.6.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 (0/${installedTrackedCount} packages)...`;
196
+ } else {
197
+ spinner.text = 'Checking GitHub activity...';
198
+ }
199
+
189
200
  let predictiveWarnings = [];
201
+ let githubCheckTime = 0;
190
202
 
191
203
  if (config.cache) {
192
204
  predictiveWarnings = getCached(projectPath, 'predictive');
@@ -195,7 +207,20 @@ async function analyze(options) {
195
207
  if (!predictiveWarnings) {
196
208
  try {
197
209
  const { generatePredictiveWarnings } = require('../alerts/predictive');
198
- predictiveWarnings = await generatePredictiveWarnings(dependencies);
210
+
211
+ // Track performance - NEW in v2.6.0
212
+ const startTime = Date.now();
213
+
214
+ // Pass progress callback - NEW in v2.6.0
215
+ predictiveWarnings = await generatePredictiveWarnings(dependencies, {
216
+ onProgress: (current, total, packageName) => {
217
+ if (outputMode === 'normal') {
218
+ spinner.text = `Checking GitHub activity (${current}/${total} packages) - ${packageName}`;
219
+ }
220
+ }
221
+ });
222
+
223
+ githubCheckTime = Date.now() - startTime;
199
224
 
200
225
  if (config.cache && predictiveWarnings.length > 0) {
201
226
  setCache(projectPath, 'predictive', predictiveWarnings);
@@ -264,6 +289,12 @@ async function analyze(options) {
264
289
 
265
290
  spinner.succeed(chalk.green(`Scanned ${totalDeps} dependencies in project`));
266
291
 
292
+ // Show performance info if GitHub check was performed - NEW in v2.6.0
293
+ if (githubCheckTime > 0 && outputMode === 'normal' && installedTrackedCount > 0) {
294
+ const timeInSeconds = (githubCheckTime / 1000).toFixed(2);
295
+ console.log(chalk.gray(`โšก GitHub check completed in ${timeInSeconds}s (parallel processing)`));
296
+ }
297
+
267
298
  // Handle different output modes
268
299
  if (outputMode === 'json') {
269
300
  const jsonOutput = formatAsJson(alerts, unusedDeps, outdatedDeps, score, totalDeps, securityData, bundleSizes, licenses, predictiveWarnings);
@@ -360,11 +391,14 @@ function displayResults(alerts, unusedDeps, outdatedDeps, score, totalDeps, secu
360
391
 
361
392
  logDivider();
362
393
 
363
- // PREDICTIVE WARNINGS (NEW SECTION)
394
+ // PREDICTIVE WARNINGS (v2.5.0+)
364
395
  if (predictiveWarnings.length > 0) {
396
+ const { getTrackedPackageCount } = require('../alerts/github-tracker');
397
+ const totalTracked = getTrackedPackageCount();
398
+
365
399
  logSection('๐Ÿ”ฎ PREDICTIVE WARNINGS', predictiveWarnings.length);
366
400
 
367
- log(chalk.gray(' Based on recent GitHub activity:\n'));
401
+ log(chalk.gray(` Based on recent GitHub activity (${totalTracked}+ packages monitored):\n`));
368
402
 
369
403
  predictiveWarnings.forEach(warning => {
370
404
  const display = getSeverityDisplay(warning.severity);
@@ -381,8 +415,11 @@ function displayResults(alerts, unusedDeps, outdatedDeps, score, totalDeps, secu
381
415
  log('');
382
416
  });
383
417
  } else {
418
+ const { getTrackedPackageCount } = require('../alerts/github-tracker');
419
+ const totalTracked = getTrackedPackageCount();
420
+
384
421
  logSection('โœ… PREDICTIVE ANALYSIS');
385
- log(chalk.green(' No unusual activity detected!\n'));
422
+ log(chalk.green(` No unusual activity detected (${totalTracked}+ packages monitored)!\n`));
386
423
  }
387
424
 
388
425
  logDivider();