@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
@@ -0,0 +1,26 @@
1
+ import type { DiagramResult } from '../analyzers/diagram-builder.js';
2
+ import type { InstallResult } from '../generators/install.js';
3
+ import type { UsageResult } from '../generators/usage.js';
4
+ import type { APIDocsResult } from '../generators/usage.js';
5
+ export interface ThemeData {
6
+ projectName: string;
7
+ tagline: string;
8
+ badgeRow: string;
9
+ description: string;
10
+ diagram: DiagramResult | null;
11
+ keyFeatures: string[];
12
+ useCases: string[];
13
+ installSection: InstallResult;
14
+ usageSection: UsageResult;
15
+ apiDocs: APIDocsResult | null;
16
+ contributingSection: string;
17
+ license: string;
18
+ directoryTree: string;
19
+ }
20
+ export interface Theme {
21
+ name: string;
22
+ render: (data: ThemeData) => string;
23
+ }
24
+ export declare function getTheme(name: string): Theme;
25
+ export declare function listThemes(): string[];
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAO5D,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;CACrC;AAUD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAQ5C;AAED,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAErC"}
@@ -0,0 +1,23 @@
1
+ import { renderDefault } from './default.js';
2
+ import { renderMinimal } from './minimal.js';
3
+ import { renderHacker } from './hacker.js';
4
+ import { renderModern } from './modern.js';
5
+ import { renderAcademic } from './academic.js';
6
+ const themes = {
7
+ default: { name: 'default', render: renderDefault },
8
+ minimal: { name: 'minimal', render: renderMinimal },
9
+ hacker: { name: 'hacker', render: renderHacker },
10
+ modern: { name: 'modern', render: renderModern },
11
+ academic: { name: 'academic', render: renderAcademic },
12
+ };
13
+ export function getTheme(name) {
14
+ const theme = themes[name];
15
+ if (!theme) {
16
+ throw new Error(`Unknown theme: ${name}\nAvailable themes: ${Object.keys(themes).join(', ')}`);
17
+ }
18
+ return theme;
19
+ }
20
+ export function listThemes() {
21
+ return Object.keys(themes);
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAuB/C,MAAM,MAAM,GAA0B;IACpC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;IACnD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;IACnD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;IAChD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;IAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE;CACvD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,uBAAuB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeData } from './index.js';
2
+ export declare function renderMinimal(data: ThemeData): string;
3
+ //# sourceMappingURL=minimal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.d.ts","sourceRoot":"","sources":["../../src/themes/minimal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAkGrD"}
@@ -0,0 +1,85 @@
1
+ export function renderMinimal(data) {
2
+ const sections = [];
3
+ // Header - no emojis, no badges
4
+ sections.push(`# ${data.projectName}
5
+
6
+ ${data.tagline}`);
7
+ // Overview
8
+ sections.push(`## Overview
9
+
10
+ ${data.description}`);
11
+ // Features
12
+ if (data.keyFeatures.length > 0) {
13
+ const cleanFeatures = data.keyFeatures.map(f => f.replace(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}\s]+/u, ''));
14
+ sections.push(`## Features
15
+
16
+ ${cleanFeatures.map(f => `- ${f}`).join('\n')}`);
17
+ }
18
+ // Architecture diagram
19
+ if (data.diagram) {
20
+ sections.push(`## Architecture
21
+
22
+ \`\`\`mermaid
23
+ ${data.diagram.mermaidCode}
24
+ \`\`\``);
25
+ }
26
+ // Project structure
27
+ if (data.directoryTree) {
28
+ sections.push(`## Project Structure
29
+
30
+ \`\`\`
31
+ ${data.directoryTree}
32
+ \`\`\``);
33
+ }
34
+ // Getting Started
35
+ const installLines = ['## Getting Started', ''];
36
+ if (data.installSection.prerequisites.length > 0) {
37
+ installLines.push('### Prerequisites');
38
+ installLines.push('');
39
+ installLines.push(data.installSection.prerequisites.map(p => `- ${p}`).join('\n'));
40
+ installLines.push('');
41
+ }
42
+ installLines.push('### Installation');
43
+ installLines.push('');
44
+ data.installSection.installSteps.forEach((step, i) => {
45
+ installLines.push(`${i + 1}. ${step.title}`);
46
+ installLines.push('');
47
+ installLines.push('```bash');
48
+ installLines.push(step.command);
49
+ installLines.push('```');
50
+ installLines.push('');
51
+ });
52
+ sections.push(installLines.join('\n'));
53
+ // Usage
54
+ if (data.usageSection.examples.length > 0) {
55
+ const usageLines = ['## Usage', ''];
56
+ for (const example of data.usageSection.examples) {
57
+ usageLines.push(`\`\`\`${example.language}`);
58
+ usageLines.push(example.code);
59
+ usageLines.push('```');
60
+ usageLines.push('');
61
+ }
62
+ sections.push(usageLines.join('\n'));
63
+ }
64
+ // API Docs
65
+ if (data.apiDocs && data.apiDocs.entries.length > 0) {
66
+ const apiLines = ['## API', ''];
67
+ for (const entry of data.apiDocs.entries) {
68
+ apiLines.push(`**\`${entry.signature}\`**`);
69
+ if (entry.description)
70
+ apiLines.push(entry.description);
71
+ apiLines.push('');
72
+ }
73
+ sections.push(apiLines.join('\n'));
74
+ }
75
+ // Contributing
76
+ sections.push(`## Contributing
77
+
78
+ ${data.contributingSection}`);
79
+ // License
80
+ sections.push(`## License
81
+
82
+ ${data.license}`);
83
+ return sections.join('\n\n').trim() + '\n';
84
+ }
85
+ //# sourceMappingURL=minimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.js","sourceRoot":"","sources":["../../src/themes/minimal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeData } from './index.js';
2
+ export declare function renderModern(data: ThemeData): string;
3
+ //# sourceMappingURL=modern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modern.d.ts","sourceRoot":"","sources":["../../src/themes/modern.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA+HpD"}
@@ -0,0 +1,114 @@
1
+ export function renderModern(data) {
2
+ const sections = [];
3
+ // Header with lots of emojis and badges
4
+ sections.push(`<div align="center">
5
+
6
+ # 🚀 ${data.projectName}
7
+
8
+ ### ${data.tagline}
9
+
10
+ ${data.badgeRow}
11
+
12
+ ---
13
+
14
+ </div>`);
15
+ // Overview with emoji sections
16
+ sections.push(`## 🌟 About
17
+
18
+ ${data.description}`);
19
+ // Features as a grid-like layout
20
+ if (data.keyFeatures.length > 0) {
21
+ sections.push(`## ⚡ Features
22
+
23
+ ${data.keyFeatures.map(f => `> ${f}`).join('\n>\n')}`);
24
+ }
25
+ // Architecture
26
+ if (data.diagram) {
27
+ sections.push(`## 🏛️ Architecture
28
+
29
+ <details>
30
+ <summary>Click to expand architecture diagram</summary>
31
+
32
+ \`\`\`mermaid
33
+ ${data.diagram.mermaidCode}
34
+ \`\`\`
35
+
36
+ </details>
37
+
38
+ ${data.diagram.description}`);
39
+ }
40
+ // Project structure in collapsible
41
+ if (data.directoryTree) {
42
+ sections.push(`## 📂 Project Structure
43
+
44
+ <details>
45
+ <summary>Click to expand</summary>
46
+
47
+ \`\`\`
48
+ ${data.directoryTree}
49
+ \`\`\`
50
+
51
+ </details>`);
52
+ }
53
+ // Getting Started
54
+ const installLines = ['## 🏁 Quick Start', ''];
55
+ if (data.installSection.prerequisites.length > 0) {
56
+ installLines.push('> **Prerequisites**');
57
+ installLines.push('>');
58
+ installLines.push(data.installSection.prerequisites.map(p => `> - ${p}`).join('\n'));
59
+ installLines.push('');
60
+ }
61
+ data.installSection.installSteps.forEach((step, i) => {
62
+ installLines.push(`**Step ${i + 1}: ${step.title}**`);
63
+ installLines.push('');
64
+ installLines.push('```bash');
65
+ installLines.push(step.command);
66
+ installLines.push('```');
67
+ installLines.push('');
68
+ });
69
+ sections.push(installLines.join('\n'));
70
+ // Usage
71
+ if (data.usageSection.examples.length > 0) {
72
+ const usageLines = ['## 🎯 Usage', ''];
73
+ for (const example of data.usageSection.examples) {
74
+ usageLines.push(`### ${example.title}`);
75
+ usageLines.push('');
76
+ usageLines.push(`> ${example.description}`);
77
+ usageLines.push('');
78
+ usageLines.push(`\`\`\`${example.language}`);
79
+ usageLines.push(example.code);
80
+ usageLines.push('```');
81
+ usageLines.push('');
82
+ }
83
+ sections.push(usageLines.join('\n'));
84
+ }
85
+ // API Docs
86
+ if (data.apiDocs && data.apiDocs.entries.length > 0) {
87
+ const apiLines = ['## 📚 API Reference', ''];
88
+ apiLines.push('| Function | Description | File |');
89
+ apiLines.push('|----------|-------------|------|');
90
+ for (const entry of data.apiDocs.entries) {
91
+ const desc = entry.description || '-';
92
+ apiLines.push(`| \`${entry.name}\` | ${desc} | \`${entry.file}\` |`);
93
+ }
94
+ sections.push(apiLines.join('\n'));
95
+ }
96
+ // Contributing
97
+ sections.push(`## 💪 Contributing
98
+
99
+ ${data.contributingSection}`);
100
+ // License
101
+ sections.push(`## 📝 License
102
+
103
+ ${data.license}`);
104
+ // Footer
105
+ sections.push(`<div align="center">
106
+
107
+ ---
108
+
109
+ Made with ❤️ and AI
110
+
111
+ </div>`);
112
+ return sections.join('\n\n').trim() + '\n';
113
+ }
114
+ //# sourceMappingURL=modern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modern.js","sourceRoot":"","sources":["../../src/themes/modern.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC;;OAET,IAAI,CAAC,WAAW;;MAEjB,IAAI,CAAC,OAAO;;EAEhB,IAAI,CAAC,QAAQ;;;;OAIR,CAAC,CAAC;IAEP,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,CAAC;;EAEd,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAEpB,iCAAiC;IACjC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC;;EAEhB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,eAAe;IACf,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC;;;;;;EAMhB,IAAI,CAAC,OAAO,CAAC,WAAW;;;;;EAKxB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,mCAAmC;IACnC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC;;;;;;EAMhB,IAAI,CAAC,aAAa;;;WAGT,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB;IAClB,MAAM,YAAY,GAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAEzD,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACnD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACtD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvC,QAAQ;IACR,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,WAAW;IACX,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAa,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,eAAe;IACf,QAAQ,CAAC,IAAI,CAAC;;EAEd,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE5B,UAAU;IACV,QAAQ,CAAC,IAAI,CAAC;;EAEd,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhB,SAAS;IACT,QAAQ,CAAC,IAAI,CAAC;;;;;;OAMT,CAAC,CAAC;IAEP,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const DEFAULT_IGNORES: string[];
2
+ export declare function readFileContent(filePath: string): Promise<string>;
3
+ export declare function fileExists(filePath: string): Promise<boolean>;
4
+ export declare function loadIgnorePatterns(repoPath: string): Promise<string[]>;
5
+ export declare function globFiles(repoPath: string, ignores: string[]): Promise<string[]>;
6
+ export declare function generateTree(files: string[], maxDepth?: number): string;
7
+ export declare function getFileExtension(filePath: string): string;
8
+ export declare function getFileName(filePath: string): string;
9
+ //# sourceMappingURL=file-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,UAU3B,CAAC;AAEF,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW5E;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAStF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAuC1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,93 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import fg from 'fast-glob';
4
+ export const DEFAULT_IGNORES = [
5
+ 'node_modules', 'dist', 'build', '.git', 'coverage', '__pycache__',
6
+ '.next', '.nuxt', '.svelte-kit', '.output', '.cache', '.parcel-cache',
7
+ 'target', 'vendor', '.venv', 'venv', 'env',
8
+ '*.lock', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml',
9
+ '*.min.js', '*.min.css', '*.map',
10
+ '*.png', '*.jpg', '*.jpeg', '*.gif', '*.svg', '*.ico', '*.webp',
11
+ '*.woff', '*.woff2', '*.ttf', '*.eot',
12
+ '*.zip', '*.tar.gz', '*.tgz',
13
+ '.DS_Store', 'Thumbs.db',
14
+ ];
15
+ export async function readFileContent(filePath) {
16
+ return fs.readFile(filePath, 'utf-8');
17
+ }
18
+ export async function fileExists(filePath) {
19
+ try {
20
+ await fs.access(filePath);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ export async function loadIgnorePatterns(repoPath) {
28
+ const ignorePath = path.join(repoPath, '.readmeaiignore');
29
+ try {
30
+ const content = await readFileContent(ignorePath);
31
+ const custom = content.split('\n')
32
+ .map(l => l.trim())
33
+ .filter(l => l && !l.startsWith('#'));
34
+ return [...DEFAULT_IGNORES, ...custom];
35
+ }
36
+ catch {
37
+ return DEFAULT_IGNORES;
38
+ }
39
+ }
40
+ export async function globFiles(repoPath, ignores) {
41
+ const ignorePatterns = ignores.map(i => `**/${i}/**`);
42
+ return fg('**/*', {
43
+ cwd: repoPath,
44
+ ignore: ignorePatterns,
45
+ dot: false,
46
+ onlyFiles: true,
47
+ absolute: false,
48
+ });
49
+ }
50
+ export function generateTree(files, maxDepth = 3) {
51
+ const tree = {};
52
+ for (const file of files) {
53
+ const parts = file.split('/');
54
+ if (parts.length > maxDepth + 1)
55
+ continue;
56
+ let current = tree;
57
+ for (const part of parts) {
58
+ if (!current[part])
59
+ current[part] = {};
60
+ current = current[part];
61
+ }
62
+ }
63
+ function render(node, prefix = '') {
64
+ const entries = Object.keys(node).sort((a, b) => {
65
+ const aIsDir = Object.keys(node[a]).length > 0;
66
+ const bIsDir = Object.keys(node[b]).length > 0;
67
+ if (aIsDir && !bIsDir)
68
+ return -1;
69
+ if (!aIsDir && bIsDir)
70
+ return 1;
71
+ return a.localeCompare(b);
72
+ });
73
+ let result = '';
74
+ entries.forEach((name, i) => {
75
+ const isLast = i === entries.length - 1;
76
+ const connector = isLast ? '└── ' : '├── ';
77
+ const childPrefix = isLast ? ' ' : '│ ';
78
+ result += `${prefix}${connector}${name}\n`;
79
+ if (Object.keys(node[name]).length > 0) {
80
+ result += render(node[name], prefix + childPrefix);
81
+ }
82
+ });
83
+ return result;
84
+ }
85
+ return render(tree).trimEnd();
86
+ }
87
+ export function getFileExtension(filePath) {
88
+ return path.extname(filePath).toLowerCase().slice(1);
89
+ }
90
+ export function getFileName(filePath) {
91
+ return path.basename(filePath);
92
+ }
93
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface GitHubMeta {
2
+ owner: string;
3
+ repo: string;
4
+ description: string | null;
5
+ stars: number;
6
+ forks: number;
7
+ topics: string[];
8
+ license: string | null;
9
+ defaultBranch: string;
10
+ language: string | null;
11
+ homepage: string | null;
12
+ }
13
+ export interface GitHubFileEntry {
14
+ path: string;
15
+ size: number;
16
+ type: 'file' | 'dir';
17
+ downloadUrl: string | null;
18
+ }
19
+ export declare function parseGitHubURL(input: string): {
20
+ owner: string;
21
+ repo: string;
22
+ branch?: string;
23
+ } | null;
24
+ export declare function fetchGitHubMeta(owner: string, repo: string): Promise<GitHubMeta>;
25
+ export declare function fetchGitHubTree(owner: string, repo: string, branch?: string): Promise<GitHubFileEntry[]>;
26
+ export declare function fetchGitHubFileContent(owner: string, repo: string, filePath: string, branch?: string): Promise<string>;
27
+ //# sourceMappingURL=github-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../../src/utils/github-api.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAOD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcrG;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtF;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAmB5B;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
@@ -0,0 +1,68 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ import { getGitHubToken } from '../config.js';
3
+ function createOctokit() {
4
+ const token = getGitHubToken();
5
+ return new Octokit(token ? { auth: token } : {});
6
+ }
7
+ export function parseGitHubURL(input) {
8
+ // github:user/repo
9
+ const shortMatch = input.match(/^github:([^/]+)\/([^/]+)$/);
10
+ if (shortMatch) {
11
+ return { owner: shortMatch[1], repo: shortMatch[2] };
12
+ }
13
+ // https://github.com/user/repo or https://github.com/user/repo/tree/branch
14
+ const urlMatch = input.match(/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/([^/]+))?(?:\.git)?$/);
15
+ if (urlMatch) {
16
+ return { owner: urlMatch[1], repo: urlMatch[2], branch: urlMatch[3] };
17
+ }
18
+ return null;
19
+ }
20
+ export async function fetchGitHubMeta(owner, repo) {
21
+ const octokit = createOctokit();
22
+ const { data } = await octokit.repos.get({ owner, repo });
23
+ return {
24
+ owner,
25
+ repo,
26
+ description: data.description,
27
+ stars: data.stargazers_count,
28
+ forks: data.forks_count,
29
+ topics: data.topics || [],
30
+ license: data.license?.spdx_id || null,
31
+ defaultBranch: data.default_branch,
32
+ language: data.language,
33
+ homepage: data.homepage || null,
34
+ };
35
+ }
36
+ export async function fetchGitHubTree(owner, repo, branch) {
37
+ const octokit = createOctokit();
38
+ const ref = branch || (await fetchGitHubMeta(owner, repo)).defaultBranch;
39
+ const { data } = await octokit.git.getTree({
40
+ owner,
41
+ repo,
42
+ tree_sha: ref,
43
+ recursive: 'true',
44
+ });
45
+ return data.tree
46
+ .filter(item => item.type === 'blob' && item.path && item.size !== undefined)
47
+ .map(item => ({
48
+ path: item.path,
49
+ size: item.size || 0,
50
+ type: 'file',
51
+ downloadUrl: `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${item.path}`,
52
+ }));
53
+ }
54
+ export async function fetchGitHubFileContent(owner, repo, filePath, branch) {
55
+ const octokit = createOctokit();
56
+ const ref = branch || (await fetchGitHubMeta(owner, repo)).defaultBranch;
57
+ const { data } = await octokit.repos.getContent({
58
+ owner,
59
+ repo,
60
+ path: filePath,
61
+ ref,
62
+ });
63
+ if ('content' in data && data.encoding === 'base64') {
64
+ return Buffer.from(data.content, 'base64').toString('utf-8');
65
+ }
66
+ throw new Error(`Could not fetch content for ${filePath}`);
67
+ }
68
+ //# sourceMappingURL=github-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../../src/utils/github-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface LanguageStat {
2
+ name: string;
3
+ files: number;
4
+ percentage: number;
5
+ icon: string;
6
+ }
7
+ export declare function detectLanguage(filePath: string): string;
8
+ export declare function getLanguageIcon(filePath: string): string;
9
+ export declare function isConfigFile(filePath: string): boolean;
10
+ export declare function isTestFile(filePath: string): boolean;
11
+ export declare function isEntryPoint(filePath: string): boolean;
12
+ export declare function calculateLanguageStats(files: string[]): LanguageStat[];
13
+ export declare const FRAMEWORK_INDICATORS: Record<string, {
14
+ deps?: string[];
15
+ files?: string[];
16
+ imports?: string[];
17
+ }>;
18
+ //# sourceMappingURL=language-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/utils/language-detector.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAuED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAyBtE;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB1G,CAAC"}