@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.
- package/LICENSE +21 -0
- package/README.md +309 -0
- package/dist/analyzers/badge-generator.d.ts +12 -0
- package/dist/analyzers/badge-generator.d.ts.map +1 -0
- package/dist/analyzers/badge-generator.js +139 -0
- package/dist/analyzers/badge-generator.js.map +1 -0
- package/dist/analyzers/code-analyzer.d.ts +34 -0
- package/dist/analyzers/code-analyzer.d.ts.map +1 -0
- package/dist/analyzers/code-analyzer.js +210 -0
- package/dist/analyzers/code-analyzer.js.map +1 -0
- package/dist/analyzers/dependency-analyzer.d.ts +16 -0
- package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dependency-analyzer.js +169 -0
- package/dist/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/analyzers/diagram-builder.d.ts +11 -0
- package/dist/analyzers/diagram-builder.d.ts.map +1 -0
- package/dist/analyzers/diagram-builder.js +163 -0
- package/dist/analyzers/diagram-builder.js.map +1 -0
- package/dist/analyzers/file-scanner.d.ts +17 -0
- package/dist/analyzers/file-scanner.d.ts.map +1 -0
- package/dist/analyzers/file-scanner.js +103 -0
- package/dist/analyzers/file-scanner.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +7 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/repo-fetcher.d.ts +22 -0
- package/dist/analyzers/repo-fetcher.d.ts.map +1 -0
- package/dist/analyzers/repo-fetcher.js +134 -0
- package/dist/analyzers/repo-fetcher.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +54 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +189 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/generators/changelog.d.ts +7 -0
- package/dist/generators/changelog.d.ts.map +1 -0
- package/dist/generators/changelog.js +15 -0
- package/dist/generators/changelog.js.map +1 -0
- package/dist/generators/contributing.d.ts +5 -0
- package/dist/generators/contributing.d.ts.map +1 -0
- package/dist/generators/contributing.js +28 -0
- package/dist/generators/contributing.js.map +1 -0
- package/dist/generators/index.d.ts +6 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +6 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/install.d.ts +14 -0
- package/dist/generators/install.d.ts.map +1 -0
- package/dist/generators/install.js +95 -0
- package/dist/generators/install.js.map +1 -0
- package/dist/generators/overview.d.ts +20 -0
- package/dist/generators/overview.d.ts.map +1 -0
- package/dist/generators/overview.js +87 -0
- package/dist/generators/overview.js.map +1 -0
- package/dist/generators/usage.d.ts +33 -0
- package/dist/generators/usage.d.ts.map +1 -0
- package/dist/generators/usage.js +130 -0
- package/dist/generators/usage.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +3 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +47 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +3 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +28 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +24 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +3 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +46 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +40 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/themes/academic.d.ts +3 -0
- package/dist/themes/academic.d.ts.map +1 -0
- package/dist/themes/academic.js +113 -0
- package/dist/themes/academic.js.map +1 -0
- package/dist/themes/default.d.ts +3 -0
- package/dist/themes/default.d.ts.map +1 -0
- package/dist/themes/default.js +114 -0
- package/dist/themes/default.js.map +1 -0
- package/dist/themes/hacker.d.ts +3 -0
- package/dist/themes/hacker.d.ts.map +1 -0
- package/dist/themes/hacker.js +100 -0
- package/dist/themes/hacker.js.map +1 -0
- package/dist/themes/index.d.ts +26 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +23 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/minimal.d.ts +3 -0
- package/dist/themes/minimal.d.ts.map +1 -0
- package/dist/themes/minimal.js +85 -0
- package/dist/themes/minimal.js.map +1 -0
- package/dist/themes/modern.d.ts +3 -0
- package/dist/themes/modern.d.ts.map +1 -0
- package/dist/themes/modern.js +114 -0
- package/dist/themes/modern.js.map +1 -0
- package/dist/utils/file-utils.d.ts +9 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +93 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/github-api.d.ts +27 -0
- package/dist/utils/github-api.d.ts.map +1 -0
- package/dist/utils/github-api.js +68 -0
- package/dist/utils/github-api.js.map +1 -0
- package/dist/utils/language-detector.d.ts +18 -0
- package/dist/utils/language-detector.d.ts.map +1 -0
- package/dist/utils/language-detector.js +139 -0
- package/dist/utils/language-detector.js.map +1 -0
- package/dist/utils/markdown-writer.d.ts +5 -0
- package/dist/utils/markdown-writer.d.ts.map +1 -0
- package/dist/utils/markdown-writer.js +19 -0
- package/dist/utils/markdown-writer.js.map +1 -0
- package/dist/utils/template-engine.d.ts +9 -0
- package/dist/utils/template-engine.d.ts.map +1 -0
- package/dist/utils/template-engine.js +29 -0
- package/dist/utils/template-engine.js.map +1 -0
- package/package.json +60 -0
- package/templates/.readmeaiignore.example +41 -0
- 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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|