autogit-tool 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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/ai/prompts.d.ts +10 -0
  4. package/dist/ai/prompts.d.ts.map +1 -0
  5. package/dist/ai/prompts.js +169 -0
  6. package/dist/ai/prompts.js.map +1 -0
  7. package/dist/ai/provider.d.ts +24 -0
  8. package/dist/ai/provider.d.ts.map +1 -0
  9. package/dist/ai/provider.js +305 -0
  10. package/dist/ai/provider.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +228 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/analyze.d.ts +4 -0
  16. package/dist/commands/analyze.d.ts.map +1 -0
  17. package/dist/commands/analyze.js +63 -0
  18. package/dist/commands/analyze.js.map +1 -0
  19. package/dist/commands/config.d.ts +8 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +457 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/docs.d.ts +5 -0
  24. package/dist/commands/docs.d.ts.map +1 -0
  25. package/dist/commands/docs.js +22 -0
  26. package/dist/commands/docs.js.map +1 -0
  27. package/dist/commands/doctor.d.ts +2 -0
  28. package/dist/commands/doctor.d.ts.map +1 -0
  29. package/dist/commands/doctor.js +69 -0
  30. package/dist/commands/doctor.js.map +1 -0
  31. package/dist/commands/github.d.ts +5 -0
  32. package/dist/commands/github.d.ts.map +1 -0
  33. package/dist/commands/github.js +46 -0
  34. package/dist/commands/github.js.map +1 -0
  35. package/dist/commands/init.d.ts +2 -0
  36. package/dist/commands/init.d.ts.map +1 -0
  37. package/dist/commands/init.js +38 -0
  38. package/dist/commands/init.js.map +1 -0
  39. package/dist/commands/linkedin.d.ts +4 -0
  40. package/dist/commands/linkedin.d.ts.map +1 -0
  41. package/dist/commands/linkedin.js +42 -0
  42. package/dist/commands/linkedin.js.map +1 -0
  43. package/dist/commands/login.d.ts +2 -0
  44. package/dist/commands/login.d.ts.map +1 -0
  45. package/dist/commands/login.js +301 -0
  46. package/dist/commands/login.js.map +1 -0
  47. package/dist/commands/publish.d.ts +5 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +58 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/readme.d.ts +5 -0
  52. package/dist/commands/readme.d.ts.map +1 -0
  53. package/dist/commands/readme.js +32 -0
  54. package/dist/commands/readme.js.map +1 -0
  55. package/dist/commands/release.d.ts +5 -0
  56. package/dist/commands/release.d.ts.map +1 -0
  57. package/dist/commands/release.js +56 -0
  58. package/dist/commands/release.js.map +1 -0
  59. package/dist/commands/resume.d.ts +8 -0
  60. package/dist/commands/resume.d.ts.map +1 -0
  61. package/dist/commands/resume.js +228 -0
  62. package/dist/commands/resume.js.map +1 -0
  63. package/dist/config/manager.d.ts +67 -0
  64. package/dist/config/manager.d.ts.map +1 -0
  65. package/dist/config/manager.js +78 -0
  66. package/dist/config/manager.js.map +1 -0
  67. package/dist/index.d.ts +6 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +6 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/pipeline/main-pipeline.d.ts +15 -0
  72. package/dist/pipeline/main-pipeline.d.ts.map +1 -0
  73. package/dist/pipeline/main-pipeline.js +279 -0
  74. package/dist/pipeline/main-pipeline.js.map +1 -0
  75. package/dist/scanner/file-scanner.d.ts +21 -0
  76. package/dist/scanner/file-scanner.d.ts.map +1 -0
  77. package/dist/scanner/file-scanner.js +90 -0
  78. package/dist/scanner/file-scanner.js.map +1 -0
  79. package/dist/scanner/project-analyzer.d.ts +26 -0
  80. package/dist/scanner/project-analyzer.d.ts.map +1 -0
  81. package/dist/scanner/project-analyzer.js +454 -0
  82. package/dist/scanner/project-analyzer.js.map +1 -0
  83. package/dist/services/docs-generator.d.ts +11 -0
  84. package/dist/services/docs-generator.d.ts.map +1 -0
  85. package/dist/services/docs-generator.js +172 -0
  86. package/dist/services/docs-generator.js.map +1 -0
  87. package/dist/services/git-service.d.ts +22 -0
  88. package/dist/services/git-service.d.ts.map +1 -0
  89. package/dist/services/git-service.js +162 -0
  90. package/dist/services/git-service.js.map +1 -0
  91. package/dist/services/github-service.d.ts +44 -0
  92. package/dist/services/github-service.d.ts.map +1 -0
  93. package/dist/services/github-service.js +131 -0
  94. package/dist/services/github-service.js.map +1 -0
  95. package/dist/services/insights.d.ts +24 -0
  96. package/dist/services/insights.d.ts.map +1 -0
  97. package/dist/services/insights.js +140 -0
  98. package/dist/services/insights.js.map +1 -0
  99. package/dist/services/readme-manager.d.ts +11 -0
  100. package/dist/services/readme-manager.d.ts.map +1 -0
  101. package/dist/services/readme-manager.js +180 -0
  102. package/dist/services/readme-manager.js.map +1 -0
  103. package/dist/services/resume-manager.d.ts +29 -0
  104. package/dist/services/resume-manager.d.ts.map +1 -0
  105. package/dist/services/resume-manager.js +186 -0
  106. package/dist/services/resume-manager.js.map +1 -0
  107. package/dist/services/social-generator.d.ts +14 -0
  108. package/dist/services/social-generator.d.ts.map +1 -0
  109. package/dist/services/social-generator.js +93 -0
  110. package/dist/services/social-generator.js.map +1 -0
  111. package/dist/utils/logger.d.ts +19 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +81 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/dist/utils/platform.d.ts +8 -0
  116. package/dist/utils/platform.d.ts.map +1 -0
  117. package/dist/utils/platform.js +27 -0
  118. package/dist/utils/platform.js.map +1 -0
  119. package/package.json +74 -0
@@ -0,0 +1,279 @@
1
+ import { resolve } from 'path';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { scanProject } from '../scanner/file-scanner.js';
5
+ import { analyzeProject } from '../scanner/project-analyzer.js';
6
+ import { generateReadme, writeReadme, displayDiff } from '../services/readme-manager.js';
7
+ import { generateDocs, writeDocs } from '../services/docs-generator.js';
8
+ import { getGitStatus, initGit, generateGitignore, stageAll, generateCommitMessage, commit, push, addRemote } from '../services/git-service.js';
9
+ import { createRepo, getAuthenticatedUser, repoExists, generateTopics, isGitHubConfigured } from '../services/github-service.js';
10
+ import { generateSocialContent } from '../services/social-generator.js';
11
+ import { runResumeUpdate } from '../commands/resume.js';
12
+ import { loadConfig } from '../config/manager.js';
13
+ import { logger, spinner } from '../utils/logger.js';
14
+ export async function runMainPipeline(options) {
15
+ const rootDir = resolve(process.cwd());
16
+ logger.header('AutoGit');
17
+ logger.dimmed(`Analyzing: ${rootDir}`);
18
+ logger.blank();
19
+ // Step 1: Scan project
20
+ const scanSpin = spinner('Scanning project...').start();
21
+ const scan = scanProject(rootDir);
22
+ scanSpin.succeed(`Scanned ${scan.totalFiles} files in ${scan.directories.length} directories`);
23
+ if (scan.totalFiles === 0) {
24
+ logger.warn('No files found in this directory. Is this the right project folder?');
25
+ return;
26
+ }
27
+ // Step 2: Analyze project
28
+ const analyzeSpin = spinner('Analyzing project...').start();
29
+ const analysis = analyzeProject(rootDir, scan);
30
+ analyzeSpin.succeed(formatAnalysisSummary(analysis));
31
+ logger.blank();
32
+ displayProjectInfo(analysis);
33
+ logger.blank();
34
+ const useAI = !options.noAI;
35
+ // Step 3: README
36
+ let readmeResult = null;
37
+ if (!options.skipReadme) {
38
+ readmeResult = await handleReadme(rootDir, analysis, useAI, options);
39
+ }
40
+ // Step 4: Additional documentation
41
+ const docs = await handleDocs(rootDir, analysis, scan, useAI, options);
42
+ // Step 5: Resume auto-update
43
+ if (!options.skipResume && !options.dryRun) {
44
+ await handleResume(rootDir, useAI, options);
45
+ }
46
+ else if (options.dryRun) {
47
+ logger.dimmed('[dry-run] Would update resume (if configured)');
48
+ }
49
+ // Step 6: Git operations
50
+ await handleGit(rootDir, analysis, readmeResult, docs, useAI, options);
51
+ // Step 6: GitHub
52
+ if (!options.skipGithub) {
53
+ await handleGitHub(rootDir, analysis, options);
54
+ }
55
+ // Step 7: Social content
56
+ if (!options.skipLinkedin) {
57
+ await handleSocialContent(analysis, useAI, options);
58
+ }
59
+ logger.blank();
60
+ logger.success(chalk.bold('Done! Your project is documented and published. 🎉'));
61
+ }
62
+ function formatAnalysisSummary(analysis) {
63
+ const parts = [];
64
+ if (analysis.languages.length)
65
+ parts.push(analysis.languages.slice(0, 2).join(' + '));
66
+ if (analysis.frameworks.length)
67
+ parts.push(analysis.frameworks[0]);
68
+ return parts.length > 0 ? `Detected: ${parts.join(' / ')}` : 'Project analyzed';
69
+ }
70
+ function displayProjectInfo(analysis) {
71
+ logger.info(`Project: ${chalk.bold(analysis.name)}`);
72
+ if (analysis.languages.length)
73
+ logger.info(`Languages: ${analysis.languages.join(', ')}`);
74
+ if (analysis.frameworks.length)
75
+ logger.info(`Frameworks: ${analysis.frameworks.join(', ')}`);
76
+ if (analysis.packageManager)
77
+ logger.info(`Package Manager: ${analysis.packageManager}`);
78
+ if (analysis.architecture !== 'unknown')
79
+ logger.info(`Architecture: ${analysis.architecture}`);
80
+ }
81
+ async function handleReadme(rootDir, analysis, useAI, options) {
82
+ const result = await generateReadme(rootDir, analysis, useAI);
83
+ if (result.isNew) {
84
+ logger.info('No README found. Generated new README.md');
85
+ }
86
+ else if (result.diff) {
87
+ logger.info('README improvements found');
88
+ if (!options.yes && !options.dryRun) {
89
+ logger.blank();
90
+ logger.dimmed('Proposed changes:');
91
+ displayDiff(result.diff);
92
+ logger.blank();
93
+ const { confirm } = await inquirer.prompt([{
94
+ type: 'confirm',
95
+ name: 'confirm',
96
+ message: 'Update README?',
97
+ default: true,
98
+ }]);
99
+ if (!confirm) {
100
+ logger.dimmed('README update skipped');
101
+ return null;
102
+ }
103
+ }
104
+ }
105
+ if (!options.dryRun) {
106
+ writeReadme(result);
107
+ logger.success('README updated');
108
+ }
109
+ else {
110
+ logger.dimmed('[dry-run] Would update README');
111
+ }
112
+ return result;
113
+ }
114
+ async function handleDocs(rootDir, analysis, scan, useAI, options) {
115
+ const docs = await generateDocs(rootDir, analysis, scan, useAI, options.regenerate);
116
+ if (docs.length === 0) {
117
+ logger.dimmed('No additional documentation needed');
118
+ return [];
119
+ }
120
+ if (!options.yes && !options.dryRun) {
121
+ logger.blank();
122
+ logger.info(`Will create ${docs.length} documentation file(s):`);
123
+ for (const doc of docs) {
124
+ logger.dimmed(` ${doc.exists ? '(update)' : '(new)'} ${doc.name}`);
125
+ }
126
+ const { confirm } = await inquirer.prompt([{
127
+ type: 'confirm',
128
+ name: 'confirm',
129
+ message: 'Generate documentation files?',
130
+ default: true,
131
+ }]);
132
+ if (!confirm) {
133
+ logger.dimmed('Documentation generation skipped');
134
+ return [];
135
+ }
136
+ }
137
+ if (!options.dryRun) {
138
+ writeDocs(docs);
139
+ logger.success(`Generated ${docs.length} documentation file(s)`);
140
+ }
141
+ else {
142
+ logger.dimmed(`[dry-run] Would generate ${docs.length} documentation file(s)`);
143
+ }
144
+ return docs;
145
+ }
146
+ async function handleGit(rootDir, analysis, readmeResult, docs, useAI, options) {
147
+ const status = await getGitStatus(rootDir);
148
+ // Initialize git if needed
149
+ if (!status.isRepo) {
150
+ if (!options.dryRun) {
151
+ await initGit(rootDir);
152
+ await generateGitignore(rootDir, analysis);
153
+ }
154
+ else {
155
+ logger.dimmed('[dry-run] Would initialize Git repository');
156
+ }
157
+ }
158
+ // Stage changes
159
+ if (options.dryRun) {
160
+ logger.dimmed('[dry-run] Would stage and commit changes');
161
+ return;
162
+ }
163
+ await stageAll(rootDir);
164
+ // Generate commit message
165
+ let commitMsg = await generateCommitMessage(rootDir, useAI);
166
+ if (!options.yes) {
167
+ logger.blank();
168
+ logger.info(`Commit message: ${chalk.cyan(commitMsg)}`);
169
+ const { editCommit } = await inquirer.prompt([{
170
+ type: 'confirm',
171
+ name: 'editCommit',
172
+ message: 'Edit commit message?',
173
+ default: false,
174
+ }]);
175
+ if (editCommit) {
176
+ const { newMsg } = await inquirer.prompt([{
177
+ type: 'input',
178
+ name: 'newMsg',
179
+ message: 'Commit message:',
180
+ default: commitMsg,
181
+ }]);
182
+ commitMsg = newMsg;
183
+ }
184
+ }
185
+ await commit(rootDir, commitMsg);
186
+ logger.success(`Committed: ${commitMsg}`);
187
+ }
188
+ async function handleGitHub(rootDir, analysis, options) {
189
+ if (!isGitHubConfigured()) {
190
+ logger.warn('GitHub not configured. Run "autogit login" or set GITHUB_TOKEN');
191
+ return;
192
+ }
193
+ const status = await getGitStatus(rootDir);
194
+ try {
195
+ const user = await getAuthenticatedUser();
196
+ logger.info(`Authenticated as ${chalk.bold(user.login)}`);
197
+ const repoName = analysis.name;
198
+ const exists = await repoExists(user.login, repoName);
199
+ if (!exists) {
200
+ // Create new repository
201
+ const isPrivate = options.private ?? !(options.public ?? false);
202
+ if (!options.yes) {
203
+ logger.blank();
204
+ logger.info(`Will create ${isPrivate ? 'private' : 'public'} repository: ${user.login}/${repoName}`);
205
+ const { confirm } = await inquirer.prompt([{
206
+ type: 'confirm',
207
+ name: 'confirm',
208
+ message: 'Create GitHub repository?',
209
+ default: true,
210
+ }]);
211
+ if (!confirm) {
212
+ logger.dimmed('GitHub repository creation skipped');
213
+ return;
214
+ }
215
+ }
216
+ if (!options.dryRun) {
217
+ const topics = generateTopics(analysis);
218
+ const repo = await createRepo({
219
+ name: repoName,
220
+ description: analysis.description || `${analysis.languages[0] || ''} project`,
221
+ isPrivate,
222
+ topics,
223
+ });
224
+ await addRemote(rootDir, repo.cloneUrl);
225
+ logger.success(`Created repository: ${chalk.underline(repo.htmlUrl)}`);
226
+ }
227
+ else {
228
+ logger.dimmed(`[dry-run] Would create repository: ${user.login}/${repoName}`);
229
+ }
230
+ }
231
+ else {
232
+ logger.info(`Repository exists: ${user.login}/${repoName}`);
233
+ }
234
+ // Push
235
+ if (!options.dryRun) {
236
+ const pushSpin = spinner('Pushing to GitHub...').start();
237
+ try {
238
+ await push(rootDir);
239
+ pushSpin.succeed('Pushed to GitHub');
240
+ }
241
+ catch (error) {
242
+ pushSpin.fail(`Push failed: ${error.message}`);
243
+ }
244
+ }
245
+ }
246
+ catch (error) {
247
+ logger.error(`GitHub error: ${error.message}`);
248
+ }
249
+ }
250
+ async function handleSocialContent(analysis, useAI, options) {
251
+ const content = await generateSocialContent(analysis, useAI);
252
+ logger.blank();
253
+ logger.header('LinkedIn Post (Medium)');
254
+ console.log(content.linkedin.medium);
255
+ logger.blank();
256
+ logger.header('X (Twitter) Post');
257
+ console.log(content.twitter);
258
+ logger.blank();
259
+ logger.dimmed('Tip: Use "autogit linkedin" to see all versions (short/medium/long)');
260
+ }
261
+ async function handleResume(rootDir, useAI, options) {
262
+ const config = loadConfig();
263
+ // Skip silently if resume not configured and --yes is set (non-interactive mode)
264
+ if (!config.resume?.path) {
265
+ if (!options.yes) {
266
+ // Offer setup only in interactive mode
267
+ await runResumeUpdate(rootDir, useAI, true);
268
+ }
269
+ return;
270
+ }
271
+ // Skip if resume auto-update is explicitly disabled in config
272
+ if (config.resume.enabled === false) {
273
+ logger.dimmed('Resume auto-update disabled (run "autogit resume" to update manually)');
274
+ return;
275
+ }
276
+ // Run resume update — interactive unless --yes
277
+ await runResumeUpdate(rootDir, useAI, !options.yes);
278
+ }
279
+ //# sourceMappingURL=main-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-pipeline.js","sourceRoot":"","sources":["../../src/pipeline/main-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface FileEntry {
2
+ path: string;
3
+ relativePath: string;
4
+ name: string;
5
+ extension: string;
6
+ size: number;
7
+ isDirectory: boolean;
8
+ }
9
+ export interface ScanResult {
10
+ root: string;
11
+ files: FileEntry[];
12
+ directories: string[];
13
+ totalFiles: number;
14
+ totalSize: number;
15
+ }
16
+ export declare function scanProject(rootDir: string, maxDepth?: number): ScanResult;
17
+ export declare function readFileContent(filePath: string, maxSize?: number): string | null;
18
+ export declare function getFilesByExtension(scan: ScanResult, ext: string): FileEntry[];
19
+ export declare function findFile(scan: ScanResult, name: string): FileEntry | undefined;
20
+ export declare function findFiles(scan: ScanResult, pattern: RegExp): FileEntry[];
21
+ //# sourceMappingURL=file-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/file-scanner.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,UAAU,CAyDrE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAU,GAAG,MAAM,GAAG,IAAI,CAQlF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAE9E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE9E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAExE"}
@@ -0,0 +1,90 @@
1
+ import { readdirSync, statSync, readFileSync } from 'fs';
2
+ import { join, extname, basename } from 'path';
3
+ const IGNORED_DIRS = new Set([
4
+ 'node_modules', '.git', 'dist', 'build', 'coverage',
5
+ '.next', '.cache', 'vendor', 'target', 'obj', 'bin',
6
+ '__pycache__', '.venv', 'venv', '.env', '.idea', '.vscode',
7
+ '.angular', '.svelte-kit', '.nuxt', '.output', '.turbo',
8
+ 'bower_components', '.gradle', '.mvn', 'packages',
9
+ ]);
10
+ const IGNORED_FILES = new Set([
11
+ '.DS_Store', 'Thumbs.db', '.gitkeep',
12
+ ]);
13
+ export function scanProject(rootDir, maxDepth = 6) {
14
+ const files = [];
15
+ const directories = [];
16
+ let totalSize = 0;
17
+ function walk(dir, depth) {
18
+ if (depth > maxDepth)
19
+ return;
20
+ let entries;
21
+ try {
22
+ entries = readdirSync(dir);
23
+ }
24
+ catch {
25
+ return;
26
+ }
27
+ for (const entry of entries) {
28
+ if (IGNORED_FILES.has(entry))
29
+ continue;
30
+ if (entry.startsWith('.') && IGNORED_DIRS.has(entry))
31
+ continue;
32
+ const fullPath = join(dir, entry);
33
+ let stat;
34
+ try {
35
+ stat = statSync(fullPath);
36
+ }
37
+ catch {
38
+ continue;
39
+ }
40
+ const relativePath = fullPath.slice(rootDir.length + 1).replace(/\\/g, '/');
41
+ if (stat.isDirectory()) {
42
+ if (IGNORED_DIRS.has(entry))
43
+ continue;
44
+ directories.push(relativePath);
45
+ walk(fullPath, depth + 1);
46
+ }
47
+ else {
48
+ const fileEntry = {
49
+ path: fullPath,
50
+ relativePath,
51
+ name: basename(entry),
52
+ extension: extname(entry).toLowerCase(),
53
+ size: stat.size,
54
+ isDirectory: false,
55
+ };
56
+ files.push(fileEntry);
57
+ totalSize += stat.size;
58
+ }
59
+ }
60
+ }
61
+ walk(rootDir, 0);
62
+ return {
63
+ root: rootDir,
64
+ files,
65
+ directories,
66
+ totalFiles: files.length,
67
+ totalSize,
68
+ };
69
+ }
70
+ export function readFileContent(filePath, maxSize = 100_000) {
71
+ try {
72
+ const stat = statSync(filePath);
73
+ if (stat.size > maxSize)
74
+ return null;
75
+ return readFileSync(filePath, 'utf-8');
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ export function getFilesByExtension(scan, ext) {
82
+ return scan.files.filter(f => f.extension === ext);
83
+ }
84
+ export function findFile(scan, name) {
85
+ return scan.files.find(f => f.name.toLowerCase() === name.toLowerCase());
86
+ }
87
+ export function findFiles(scan, pattern) {
88
+ return scan.files.filter(f => pattern.test(f.name));
89
+ }
90
+ //# sourceMappingURL=file-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.js","sourceRoot":"","sources":["../../src/scanner/file-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ScanResult } from './file-scanner.js';
2
+ export interface ProjectAnalysis {
3
+ name: string;
4
+ languages: string[];
5
+ frameworks: string[];
6
+ libraries: string[];
7
+ packageManager: string | null;
8
+ buildSystem: string | null;
9
+ testFramework: string | null;
10
+ entryPoints: string[];
11
+ features: string[];
12
+ architecture: string;
13
+ database: string[];
14
+ apis: string[];
15
+ envVars: string[];
16
+ deployment: string[];
17
+ license: string | null;
18
+ cicd: string[];
19
+ hasGit: boolean;
20
+ hasReadme: boolean;
21
+ readmePath: string | null;
22
+ description: string | null;
23
+ version: string | null;
24
+ }
25
+ export declare function analyzeProject(rootDir: string, scan: ScanResult): ProjectAnalysis;
26
+ //# sourceMappingURL=project-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.d.ts","sourceRoot":"","sources":["../../src/scanner/project-analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAA6C,MAAM,mBAAmB,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,eAAe,CAsEjF"}