@malikasadjaved/readme-ai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/analyzers/badge-generator.d.ts +12 -0
  4. package/dist/analyzers/badge-generator.d.ts.map +1 -0
  5. package/dist/analyzers/badge-generator.js +139 -0
  6. package/dist/analyzers/badge-generator.js.map +1 -0
  7. package/dist/analyzers/code-analyzer.d.ts +34 -0
  8. package/dist/analyzers/code-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/code-analyzer.js +210 -0
  10. package/dist/analyzers/code-analyzer.js.map +1 -0
  11. package/dist/analyzers/dependency-analyzer.d.ts +16 -0
  12. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  13. package/dist/analyzers/dependency-analyzer.js +169 -0
  14. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  15. package/dist/analyzers/diagram-builder.d.ts +11 -0
  16. package/dist/analyzers/diagram-builder.d.ts.map +1 -0
  17. package/dist/analyzers/diagram-builder.js +163 -0
  18. package/dist/analyzers/diagram-builder.js.map +1 -0
  19. package/dist/analyzers/file-scanner.d.ts +17 -0
  20. package/dist/analyzers/file-scanner.d.ts.map +1 -0
  21. package/dist/analyzers/file-scanner.js +103 -0
  22. package/dist/analyzers/file-scanner.js.map +1 -0
  23. package/dist/analyzers/index.d.ts +7 -0
  24. package/dist/analyzers/index.d.ts.map +1 -0
  25. package/dist/analyzers/index.js +7 -0
  26. package/dist/analyzers/index.js.map +1 -0
  27. package/dist/analyzers/repo-fetcher.d.ts +22 -0
  28. package/dist/analyzers/repo-fetcher.d.ts.map +1 -0
  29. package/dist/analyzers/repo-fetcher.js +134 -0
  30. package/dist/analyzers/repo-fetcher.js.map +1 -0
  31. package/dist/cli.d.ts +2 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +54 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/commands/generate.d.ts +17 -0
  36. package/dist/commands/generate.d.ts.map +1 -0
  37. package/dist/commands/generate.js +189 -0
  38. package/dist/commands/generate.js.map +1 -0
  39. package/dist/config.d.ts +17 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +28 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/generators/changelog.d.ts +7 -0
  44. package/dist/generators/changelog.d.ts.map +1 -0
  45. package/dist/generators/changelog.js +15 -0
  46. package/dist/generators/changelog.js.map +1 -0
  47. package/dist/generators/contributing.d.ts +5 -0
  48. package/dist/generators/contributing.d.ts.map +1 -0
  49. package/dist/generators/contributing.js +28 -0
  50. package/dist/generators/contributing.js.map +1 -0
  51. package/dist/generators/index.d.ts +6 -0
  52. package/dist/generators/index.d.ts.map +1 -0
  53. package/dist/generators/index.js +6 -0
  54. package/dist/generators/index.js.map +1 -0
  55. package/dist/generators/install.d.ts +14 -0
  56. package/dist/generators/install.d.ts.map +1 -0
  57. package/dist/generators/install.js +95 -0
  58. package/dist/generators/install.js.map +1 -0
  59. package/dist/generators/overview.d.ts +20 -0
  60. package/dist/generators/overview.d.ts.map +1 -0
  61. package/dist/generators/overview.js +87 -0
  62. package/dist/generators/overview.js.map +1 -0
  63. package/dist/generators/usage.d.ts +33 -0
  64. package/dist/generators/usage.d.ts.map +1 -0
  65. package/dist/generators/usage.js +130 -0
  66. package/dist/generators/usage.js.map +1 -0
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +47 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/providers/anthropic.d.ts +3 -0
  72. package/dist/providers/anthropic.d.ts.map +1 -0
  73. package/dist/providers/anthropic.js +47 -0
  74. package/dist/providers/anthropic.js.map +1 -0
  75. package/dist/providers/gemini.d.ts +3 -0
  76. package/dist/providers/gemini.d.ts.map +1 -0
  77. package/dist/providers/gemini.js +28 -0
  78. package/dist/providers/gemini.js.map +1 -0
  79. package/dist/providers/index.d.ts +8 -0
  80. package/dist/providers/index.d.ts.map +1 -0
  81. package/dist/providers/index.js +24 -0
  82. package/dist/providers/index.js.map +1 -0
  83. package/dist/providers/ollama.d.ts +3 -0
  84. package/dist/providers/ollama.d.ts.map +1 -0
  85. package/dist/providers/ollama.js +46 -0
  86. package/dist/providers/ollama.js.map +1 -0
  87. package/dist/providers/openai.d.ts +3 -0
  88. package/dist/providers/openai.d.ts.map +1 -0
  89. package/dist/providers/openai.js +40 -0
  90. package/dist/providers/openai.js.map +1 -0
  91. package/dist/themes/academic.d.ts +3 -0
  92. package/dist/themes/academic.d.ts.map +1 -0
  93. package/dist/themes/academic.js +113 -0
  94. package/dist/themes/academic.js.map +1 -0
  95. package/dist/themes/default.d.ts +3 -0
  96. package/dist/themes/default.d.ts.map +1 -0
  97. package/dist/themes/default.js +114 -0
  98. package/dist/themes/default.js.map +1 -0
  99. package/dist/themes/hacker.d.ts +3 -0
  100. package/dist/themes/hacker.d.ts.map +1 -0
  101. package/dist/themes/hacker.js +100 -0
  102. package/dist/themes/hacker.js.map +1 -0
  103. package/dist/themes/index.d.ts +26 -0
  104. package/dist/themes/index.d.ts.map +1 -0
  105. package/dist/themes/index.js +23 -0
  106. package/dist/themes/index.js.map +1 -0
  107. package/dist/themes/minimal.d.ts +3 -0
  108. package/dist/themes/minimal.d.ts.map +1 -0
  109. package/dist/themes/minimal.js +85 -0
  110. package/dist/themes/minimal.js.map +1 -0
  111. package/dist/themes/modern.d.ts +3 -0
  112. package/dist/themes/modern.d.ts.map +1 -0
  113. package/dist/themes/modern.js +114 -0
  114. package/dist/themes/modern.js.map +1 -0
  115. package/dist/utils/file-utils.d.ts +9 -0
  116. package/dist/utils/file-utils.d.ts.map +1 -0
  117. package/dist/utils/file-utils.js +93 -0
  118. package/dist/utils/file-utils.js.map +1 -0
  119. package/dist/utils/github-api.d.ts +27 -0
  120. package/dist/utils/github-api.d.ts.map +1 -0
  121. package/dist/utils/github-api.js +68 -0
  122. package/dist/utils/github-api.js.map +1 -0
  123. package/dist/utils/language-detector.d.ts +18 -0
  124. package/dist/utils/language-detector.d.ts.map +1 -0
  125. package/dist/utils/language-detector.js +139 -0
  126. package/dist/utils/language-detector.js.map +1 -0
  127. package/dist/utils/markdown-writer.d.ts +5 -0
  128. package/dist/utils/markdown-writer.d.ts.map +1 -0
  129. package/dist/utils/markdown-writer.js +19 -0
  130. package/dist/utils/markdown-writer.js.map +1 -0
  131. package/dist/utils/template-engine.d.ts +9 -0
  132. package/dist/utils/template-engine.d.ts.map +1 -0
  133. package/dist/utils/template-engine.js +29 -0
  134. package/dist/utils/template-engine.js.map +1 -0
  135. package/package.json +60 -0
  136. package/templates/.readmeaiignore.example +41 -0
  137. package/templates/github-action.yml +35 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 readme-ai contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,309 @@
1
+ <div align="center">
2
+
3
+ # readme-ai
4
+
5
+ > Generate stunning, production-quality READMEs from any codebase in seconds
6
+
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.5-3178C6?style=flat-square&logo=typescript)](#)
8
+ [![Node.js](https://img.shields.io/badge/Node.js-%E2%89%A518-5FA04E?style=flat-square&logo=nodedotjs)](#)
9
+ [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](#license)
10
+ [![npm](https://img.shields.io/npm/v/readme-ai?style=flat-square&logo=npm)](https://www.npmjs.com/package/readme-ai)
11
+
12
+ **One command. Zero install. Beautiful READMEs.**
13
+
14
+ [Quick Start](#-quick-start) · [Themes](#-themes) · [Providers](#-ai-providers) · [CLI Options](#-cli-options) · [GitHub Action](#-github-action)
15
+
16
+ </div>
17
+
18
+ ---
19
+
20
+ ## Overview
21
+
22
+ **readme-ai** reads your actual source code — not just directory names — and generates a complete, polished README with architecture diagrams, badges, install instructions, usage examples, and API docs. Point it at any local project or public GitHub repo and get a production-ready README in seconds.
23
+
24
+ Unlike existing tools, readme-ai goes deep: it parses dependencies, detects frameworks, extracts API endpoints and CLI commands, and builds Mermaid architecture diagrams automatically. It supports 5 visual themes and 4 AI providers (including fully local generation via Ollama).
25
+
26
+ ## Key Features
27
+
28
+ - **npx-first** — zero install, works instantly: `npx readme-ai`
29
+ - **Deep code analysis** — reads actual source files, extracts functions, endpoints, and CLI commands
30
+ - **Auto Mermaid diagrams** — generates architecture diagrams from your code structure
31
+ - **5 beautiful themes** — Default, Modern, Hacker, Minimal, Academic
32
+ - **4 AI providers** — Claude, GPT-4o, Gemini, Ollama (free & local)
33
+ - **Smart badge generation** — auto-detects language, frameworks, CI, Docker, license
34
+ - **GitHub URL support** — `npx readme-ai github:user/repo` analyzes any public repo
35
+ - **GitHub Action included** — auto-regenerate your README on every push
36
+
37
+ ## Quick Start
38
+
39
+ ```bash
40
+ # Generate README for current directory
41
+ npx readme-ai
42
+
43
+ # Point at a local project
44
+ npx readme-ai ./my-project
45
+
46
+ # Point at a GitHub repo
47
+ npx readme-ai github:expressjs/express
48
+
49
+ # Interactive mode (guided prompts)
50
+ npx readme-ai --interactive
51
+ ```
52
+
53
+ ## Comparison
54
+
55
+ | Feature | readme-ai | eli64s/readme-ai | readmeX |
56
+ |---------|:---------:|:----------------:|:-------:|
57
+ | npx support (zero install) | **Yes** | No | No |
58
+ | Mermaid architecture diagrams | **Yes** | No | No |
59
+ | GitHub URL analysis | **Yes** | Yes | Yes |
60
+ | Multiple themes | **5** | 3 | No |
61
+ | GitHub Action template | **Yes** | No | No |
62
+ | API docs from code | **Yes** | No | No |
63
+ | Badge auto-generation | **Yes** | Yes | Partial |
64
+ | Local AI (Ollama) | **Yes** | No | No |
65
+
66
+ ## Themes
67
+
68
+ ### Default — Clean & Professional
69
+ The standard theme with a centered header, emoji section headers, and shields.io badges.
70
+
71
+ ### Modern — Emoji-rich & Colorful
72
+ Heavy use of emojis, colorful badge rows, and visual separators for maximum impact.
73
+
74
+ ### Hacker — Terminal Aesthetic
75
+ ASCII art header, monospace styling, `>` prefixed descriptions — for the terminal lovers.
76
+
77
+ ### Minimal — Pure Markdown
78
+ No emojis, no badges, no frills. Just clean, readable markdown.
79
+
80
+ ### Academic — Formal & Structured
81
+ Numbered sections, citation-style references, formal language. Great for research projects.
82
+
83
+ ```bash
84
+ # Use a specific theme
85
+ npx readme-ai --theme modern
86
+ npx readme-ai --theme hacker
87
+ npx readme-ai --theme minimal
88
+ npx readme-ai --theme academic
89
+ ```
90
+
91
+ ## AI Providers
92
+
93
+ ### Claude (Anthropic) — Default
94
+
95
+ ```bash
96
+ export ANTHROPIC_API_KEY=sk-ant-...
97
+ npx readme-ai
98
+ ```
99
+
100
+ ### GPT-4o-mini (OpenAI)
101
+
102
+ ```bash
103
+ export OPENAI_API_KEY=sk-...
104
+ npx readme-ai --provider openai
105
+ ```
106
+
107
+ ### Gemini Flash (Google)
108
+
109
+ ```bash
110
+ export GEMINI_API_KEY=...
111
+ npx readme-ai --provider gemini
112
+ ```
113
+
114
+ ### Ollama (Local, Free)
115
+
116
+ ```bash
117
+ # Make sure Ollama is running locally
118
+ npx readme-ai --provider ollama
119
+ npx readme-ai --provider ollama --model llama3.1
120
+ ```
121
+
122
+ ## CLI Options
123
+
124
+ ```
125
+ Usage: readme-ai [repo] [options]
126
+
127
+ Arguments:
128
+ repo Local path or GitHub URL (github:user/repo)
129
+
130
+ Options:
131
+ -V, --version Output the version number
132
+ -o, --output <file> Output file path (default: "README.md")
133
+ -p, --provider <name> AI provider: anthropic | openai | gemini | ollama (default: "anthropic")
134
+ -m, --model <name> Model name (depends on provider)
135
+ -t, --theme <name> Theme: default | minimal | hacker | modern | academic (default: "default")
136
+ --no-diagram Skip Mermaid architecture diagram
137
+ --no-badges Skip badge generation
138
+ --no-api-docs Skip API documentation section
139
+ --interactive Run in interactive mode
140
+ --action Generate a GitHub Action for auto-updating README
141
+ --overwrite Overwrite existing README without asking
142
+ --dry-run Print README to stdout instead of writing to file
143
+ -h, --help Display help for command
144
+ ```
145
+
146
+ ### Examples
147
+
148
+ ```bash
149
+ # Generate with Modern theme using OpenAI
150
+ npx readme-ai ./my-app --provider openai --theme modern
151
+
152
+ # Dry run (preview without writing)
153
+ npx readme-ai --dry-run
154
+
155
+ # Generate without diagram and badges
156
+ npx readme-ai --no-diagram --no-badges
157
+
158
+ # Overwrite existing README and generate GitHub Action
159
+ npx readme-ai --overwrite --action
160
+
161
+ # Analyze a remote GitHub repository
162
+ npx readme-ai github:tiangolo/fastapi --theme academic
163
+ ```
164
+
165
+ ## GitHub Action
166
+
167
+ Auto-regenerate your README on every push to main:
168
+
169
+ ```bash
170
+ # Generate the action file automatically
171
+ npx readme-ai --action
172
+ ```
173
+
174
+ Or manually create `.github/workflows/readme-update.yml`:
175
+
176
+ ```yaml
177
+ name: Update README
178
+
179
+ on:
180
+ push:
181
+ branches: [main, master]
182
+ paths-ignore:
183
+ - 'README.md'
184
+
185
+ jobs:
186
+ update-readme:
187
+ runs-on: ubuntu-latest
188
+ permissions:
189
+ contents: write
190
+
191
+ steps:
192
+ - uses: actions/checkout@v4
193
+
194
+ - uses: actions/setup-node@v4
195
+ with:
196
+ node-version: '20'
197
+
198
+ - name: Generate README
199
+ run: npx readme-ai@latest --overwrite --no-interactive
200
+ env:
201
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
202
+
203
+ - name: Commit updated README
204
+ uses: stefanzweifel/git-auto-commit-action@v5
205
+ with:
206
+ commit_message: 'docs: auto-update README [skip ci]'
207
+ file_pattern: README.md
208
+ ```
209
+
210
+ ## Architecture
211
+
212
+ ```mermaid
213
+ graph TD
214
+ A[CLI Input] --> B[Command Parser]
215
+ B --> C[Repo Fetcher]
216
+ C -->|Local Path| D[File Scanner]
217
+ C -->|GitHub URL| E[GitHub API]
218
+ E --> D
219
+ D --> F[Code Analyzer]
220
+ D --> G[Dependency Analyzer]
221
+ F --> H[AI Provider]
222
+ G --> H
223
+ H --> I[Section Generators]
224
+ I --> J[Theme Engine]
225
+ J --> K[Markdown Writer]
226
+ K --> L[README.md]
227
+ ```
228
+
229
+ ## Project Structure
230
+
231
+ ```
232
+ readme-ai/
233
+ ├── src/
234
+ │ ├── index.ts # CLI entry point
235
+ │ ├── cli.ts # Interactive mode
236
+ │ ├── config.ts # Configuration management
237
+ │ ├── commands/
238
+ │ │ └── generate.ts # Main generation pipeline
239
+ │ ├── analyzers/
240
+ │ │ ├── repo-fetcher.ts # Fetch from local or GitHub
241
+ │ │ ├── file-scanner.ts # Scan and categorize files
242
+ │ │ ├── code-analyzer.ts # Extract functions, endpoints, exports
243
+ │ │ ├── dependency-analyzer.ts
244
+ │ │ ├── badge-generator.ts
245
+ │ │ └── diagram-builder.ts
246
+ │ ├── generators/
247
+ │ │ ├── overview.ts # Project summary + features
248
+ │ │ ├── install.ts # Install instructions
249
+ │ │ ├── usage.ts # Usage examples + API docs
250
+ │ │ ├── contributing.ts # Contributing guide
251
+ │ │ └── changelog.ts # Changelog section
252
+ │ ├── providers/
253
+ │ │ ├── anthropic.ts # Claude
254
+ │ │ ├── openai.ts # GPT-4o
255
+ │ │ ├── gemini.ts # Gemini Flash
256
+ │ │ └── ollama.ts # Local Ollama
257
+ │ ├── themes/
258
+ │ │ ├── default.ts
259
+ │ │ ├── modern.ts
260
+ │ │ ├── hacker.ts
261
+ │ │ ├── minimal.ts
262
+ │ │ └── academic.ts
263
+ │ └── utils/
264
+ │ ├── file-utils.ts
265
+ │ ├── github-api.ts
266
+ │ ├── language-detector.ts
267
+ │ ├── markdown-writer.ts
268
+ │ └── template-engine.ts
269
+ ├── templates/
270
+ │ ├── github-action.yml
271
+ │ └── .readmeaiignore.example
272
+ └── tests/
273
+ ├── analyzers/
274
+ └── generators/
275
+ ```
276
+
277
+ ## Contributing
278
+
279
+ Contributions are welcome! Here's how to get started:
280
+
281
+ ```bash
282
+ # Clone the repo
283
+ git clone https://github.com/malikasadjaved/readme-ai.git
284
+ cd readme-ai
285
+
286
+ # Install dependencies
287
+ npm install
288
+
289
+ # Run in development mode
290
+ npm run dev
291
+
292
+ # Run tests
293
+ npm test
294
+
295
+ # Build
296
+ npm run build
297
+ ```
298
+
299
+ ## License
300
+
301
+ [MIT](LICENSE)
302
+
303
+ ---
304
+
305
+ <div align="center">
306
+
307
+ Built with readme-ai
308
+
309
+ </div>
@@ -0,0 +1,12 @@
1
+ import type { ScanResult } from './file-scanner.js';
2
+ import type { DependencyAnalysis } from './dependency-analyzer.js';
3
+ import type { GitHubMeta } from '../utils/github-api.js';
4
+ export interface Badge {
5
+ label: string;
6
+ url: string;
7
+ markdown: string;
8
+ category: 'language' | 'framework' | 'tool' | 'status' | 'meta';
9
+ }
10
+ export declare function generateBadges(scan: ScanResult, deps: DependencyAnalysis, githubMeta?: GitHubMeta): Badge[];
11
+ export declare function formatBadgeRow(badges: Badge[]): string;
12
+ //# sourceMappingURL=badge-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-generator.d.ts","sourceRoot":"","sources":["../../src/analyzers/badge-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACjE;AAgDD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,kBAAkB,EACxB,UAAU,CAAC,EAAE,UAAU,GACtB,KAAK,EAAE,CAoGT;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,139 @@
1
+ const STYLE = 'flat-square';
2
+ function shieldsBadge(label, message, color, logo) {
3
+ const encodedLabel = encodeURIComponent(label);
4
+ const encodedMessage = encodeURIComponent(message);
5
+ let url = `https://img.shields.io/badge/${encodedLabel}-${encodedMessage}-${color}?style=${STYLE}`;
6
+ if (logo)
7
+ url += `&logo=${encodeURIComponent(logo)}`;
8
+ return url;
9
+ }
10
+ const LANGUAGE_BADGES = {
11
+ 'TypeScript': { color: '3178C6', logo: 'typescript' },
12
+ 'JavaScript': { color: 'F7DF1E', logo: 'javascript' },
13
+ 'Python': { color: '3776AB', logo: 'python' },
14
+ 'Rust': { color: '000000', logo: 'rust' },
15
+ 'Go': { color: '00ADD8', logo: 'go' },
16
+ 'Java': { color: 'ED8B00', logo: 'openjdk' },
17
+ 'C#': { color: '239120', logo: 'csharp' },
18
+ 'C++': { color: '00599C', logo: 'cplusplus' },
19
+ 'Ruby': { color: 'CC342D', logo: 'ruby' },
20
+ 'PHP': { color: '777BB4', logo: 'php' },
21
+ 'Swift': { color: 'FA7343', logo: 'swift' },
22
+ 'Kotlin': { color: '7F52FF', logo: 'kotlin' },
23
+ 'Dart': { color: '0175C2', logo: 'dart' },
24
+ 'Scala': { color: 'DC322F', logo: 'scala' },
25
+ };
26
+ const FRAMEWORK_BADGES = {
27
+ 'React': { color: '61DAFB', logo: 'react' },
28
+ 'Next.js': { color: '000000', logo: 'nextdotjs' },
29
+ 'Vue': { color: '4FC08D', logo: 'vuedotjs' },
30
+ 'Nuxt': { color: '00DC82', logo: 'nuxtdotjs' },
31
+ 'Angular': { color: 'DD0031', logo: 'angular' },
32
+ 'Svelte': { color: 'FF3E00', logo: 'svelte' },
33
+ 'Express': { color: '000000', logo: 'express' },
34
+ 'Fastify': { color: '000000', logo: 'fastify' },
35
+ 'NestJS': { color: 'E0234E', logo: 'nestjs' },
36
+ 'FastAPI': { color: '009688', logo: 'fastapi' },
37
+ 'Django': { color: '092E20', logo: 'django' },
38
+ 'Flask': { color: '000000', logo: 'flask' },
39
+ 'Prisma': { color: '2D3748', logo: 'prisma' },
40
+ 'Docker': { color: '2496ED', logo: 'docker' },
41
+ 'Tailwind CSS': { color: '06B6D4', logo: 'tailwindcss' },
42
+ 'Vite': { color: '646CFF', logo: 'vite' },
43
+ };
44
+ export function generateBadges(scan, deps, githubMeta) {
45
+ const badges = [];
46
+ // Primary language badge
47
+ if (scan.languages.length > 0) {
48
+ const lang = scan.languages[0];
49
+ const info = LANGUAGE_BADGES[lang.name];
50
+ if (info) {
51
+ const url = shieldsBadge(lang.name, `${lang.percentage}%25`, info.color, info.logo);
52
+ badges.push({
53
+ label: lang.name,
54
+ url,
55
+ markdown: `[![${lang.name}](${url})](#)`,
56
+ category: 'language',
57
+ });
58
+ }
59
+ }
60
+ // Framework badges
61
+ for (const framework of scan.frameworks) {
62
+ const info = FRAMEWORK_BADGES[framework];
63
+ if (info) {
64
+ const url = shieldsBadge(framework, '', info.color, info.logo);
65
+ badges.push({
66
+ label: framework,
67
+ url,
68
+ markdown: `[![${framework}](${url})](#)`,
69
+ category: 'framework',
70
+ });
71
+ }
72
+ }
73
+ // Node version
74
+ if (deps.nodeVersion) {
75
+ const url = shieldsBadge('Node.js', deps.nodeVersion, '5FA04E', 'nodedotjs');
76
+ badges.push({
77
+ label: 'Node.js',
78
+ url,
79
+ markdown: `[![Node.js](${url})](#)`,
80
+ category: 'tool',
81
+ });
82
+ }
83
+ // License badge
84
+ const license = scan.hasLicense;
85
+ if (license) {
86
+ const url = shieldsBadge('License', license, 'yellow');
87
+ badges.push({
88
+ label: 'License',
89
+ url,
90
+ markdown: `[![License](${url})](#)`,
91
+ category: 'meta',
92
+ });
93
+ }
94
+ // Docker badge
95
+ if (scan.hasDocker) {
96
+ const url = shieldsBadge('Docker', 'Ready', '2496ED', 'docker');
97
+ badges.push({
98
+ label: 'Docker',
99
+ url,
100
+ markdown: `[![Docker](${url})](#)`,
101
+ category: 'tool',
102
+ });
103
+ }
104
+ // CI/CD badge
105
+ if (scan.hasCICD) {
106
+ const url = shieldsBadge('CI/CD', 'Configured', 'brightgreen', 'githubactions');
107
+ badges.push({
108
+ label: 'CI/CD',
109
+ url,
110
+ markdown: `[![CI/CD](${url})](#)`,
111
+ category: 'status',
112
+ });
113
+ }
114
+ // Tests badge
115
+ if (scan.hasTests) {
116
+ const url = shieldsBadge('Tests', 'Included', 'brightgreen', 'vitest');
117
+ badges.push({
118
+ label: 'Tests',
119
+ url,
120
+ markdown: `[![Tests](${url})](#)`,
121
+ category: 'status',
122
+ });
123
+ }
124
+ // GitHub badges
125
+ if (githubMeta) {
126
+ const starsUrl = `https://img.shields.io/github/stars/${githubMeta.owner}/${githubMeta.repo}?style=${STYLE}`;
127
+ badges.push({
128
+ label: 'Stars',
129
+ url: starsUrl,
130
+ markdown: `[![Stars](${starsUrl})](https://github.com/${githubMeta.owner}/${githubMeta.repo})`,
131
+ category: 'meta',
132
+ });
133
+ }
134
+ return badges;
135
+ }
136
+ export function formatBadgeRow(badges) {
137
+ return badges.map(b => b.markdown).join(' ');
138
+ }
139
+ //# sourceMappingURL=badge-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-generator.js","sourceRoot":"","sources":["../../src/analyzers/badge-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { FileEntry } from './repo-fetcher.js';
2
+ export interface CodeAnalysis {
3
+ exports: ExportInfo[];
4
+ mainFunctions: FunctionInfo[];
5
+ apiEndpoints: Endpoint[];
6
+ cliCommands: CLICommand[];
7
+ envVariables: string[];
8
+ externalDependencies: string[];
9
+ }
10
+ export interface ExportInfo {
11
+ name: string;
12
+ type: 'function' | 'class' | 'const' | 'type' | 'interface';
13
+ signature: string;
14
+ file: string;
15
+ }
16
+ export interface FunctionInfo {
17
+ name: string;
18
+ signature: string;
19
+ description: string;
20
+ file: string;
21
+ }
22
+ export interface Endpoint {
23
+ method: string;
24
+ path: string;
25
+ handler: string;
26
+ file: string;
27
+ }
28
+ export interface CLICommand {
29
+ name: string;
30
+ description: string;
31
+ file: string;
32
+ }
33
+ export declare function analyzeCode(keyFiles: FileEntry[]): Promise<CodeAnalysis>;
34
+ //# sourceMappingURL=code-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/code-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,YAAY,EAAE,QAAQ,EAAE,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAsC9E"}