faf-cli 3.2.2 → 3.2.3

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.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * 🏆 GitHub Repository Metadata Extractor
3
3
  *
4
- * Uses Git CLI for cloning (no rate limits) with optional GitHub API enrichment
5
- * Fetches rich metadata via shallow clone + local analysis
4
+ * Port of Chrome Extension GitHub extraction logic for CLI
5
+ * Fetches rich metadata without cloning the repository
6
6
  */
7
7
  export interface GitHubMetadata {
8
8
  owner: string;
@@ -22,7 +22,6 @@ export interface GitHubMetadata {
22
22
  hasPackageJson?: boolean;
23
23
  hasTsConfig?: boolean;
24
24
  hasDockerfile?: boolean;
25
- _clonePath?: string;
26
25
  }
27
26
  export interface GitHubFile {
28
27
  path: string;
@@ -38,19 +37,14 @@ export declare function parseGitHubUrl(url: string): {
38
37
  repo: string;
39
38
  } | null;
40
39
  /**
41
- * Fetch repository metadata using Git CLI (no rate limits!)
42
- * Falls back to GitHub API for enrichment data (stars, topics, etc.)
40
+ * Fetch repository metadata from GitHub API
41
+ * (No auth required for public repos, 60 requests/hour limit)
43
42
  */
44
43
  export declare function fetchGitHubMetadata(owner: string, repo: string, includeFiles?: boolean): Promise<GitHubMetadata>;
45
44
  /**
46
- * Fetch repository file tree from local clone
47
- * Uses the _clonePath from metadata if available
45
+ * Fetch repository file tree
48
46
  */
49
- export declare function fetchGitHubFileTree(owner: string, repo: string, branch?: string, pathPrefix?: string, metadata?: GitHubMetadata): Promise<GitHubFile[]>;
50
- /**
51
- * Cleanup cloned repository after extraction
52
- */
53
- export declare function cleanupClonedRepo(metadata: GitHubMetadata): void;
47
+ export declare function fetchGitHubFileTree(owner: string, repo: string, branch?: string, path?: string): Promise<GitHubFile[]>;
54
48
  /**
55
49
  * Detect framework/stack from repository metadata
56
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"github-extractor.d.ts","sourceRoot":"","sources":["../../src/github/github-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgDlF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,cAAc,CAAC,CA4HzB;AA2KD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAe,EACvB,UAAU,GAAE,MAAW,EACvB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4CvB;AA0DD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAQhE;AAeD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAgD1E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiD1E"}
1
+ {"version":3,"file":"github-extractor.d.ts","sourceRoot":"","sources":["../../src/github/github-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgDlF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,cAAc,CAAC,CAuFzB;AA2BD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAe,EACvB,IAAI,GAAE,MAAW,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC,CA8BvB;AAeD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAgD1E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiD1E"}
@@ -2,20 +2,15 @@
2
2
  /**
3
3
  * 🏆 GitHub Repository Metadata Extractor
4
4
  *
5
- * Uses Git CLI for cloning (no rate limits) with optional GitHub API enrichment
6
- * Fetches rich metadata via shallow clone + local analysis
5
+ * Port of Chrome Extension GitHub extraction logic for CLI
6
+ * Fetches rich metadata without cloning the repository
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.parseGitHubUrl = parseGitHubUrl;
10
10
  exports.fetchGitHubMetadata = fetchGitHubMetadata;
11
11
  exports.fetchGitHubFileTree = fetchGitHubFileTree;
12
- exports.cleanupClonedRepo = cleanupClonedRepo;
13
12
  exports.detectStackFromMetadata = detectStackFromMetadata;
14
13
  exports.calculateRepoQualityScore = calculateRepoQualityScore;
15
- const child_process_1 = require("child_process");
16
- const fs_1 = require("fs");
17
- const path_1 = require("path");
18
- const os_1 = require("os");
19
14
  /**
20
15
  * Parse GitHub URL to extract owner and repo
21
16
  */
@@ -61,122 +56,82 @@ function parseGitHubUrl(url) {
61
56
  }
62
57
  }
63
58
  /**
64
- * Fetch repository metadata using Git CLI (no rate limits!)
65
- * Falls back to GitHub API for enrichment data (stars, topics, etc.)
59
+ * Fetch repository metadata from GitHub API
60
+ * (No auth required for public repos, 60 requests/hour limit)
66
61
  */
67
62
  async function fetchGitHubMetadata(owner, repo, includeFiles = false) {
68
- const repoUrl = `https://github.com/${owner}/${repo}.git`;
69
- const clonePath = (0, path_1.join)((0, os_1.tmpdir)(), `faf-git-${owner}-${repo}-${Date.now()}`);
63
+ const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;
70
64
  try {
71
- // Step 1: Shallow clone with Git CLI (no rate limits!)
72
- const cloneResult = (0, child_process_1.spawnSync)('git', [
73
- 'clone',
74
- '--depth', '1',
75
- '--single-branch',
76
- repoUrl,
77
- clonePath
78
- ], {
79
- encoding: 'utf-8',
80
- timeout: 30000, // 30 second timeout
81
- stdio: ['pipe', 'pipe', 'pipe']
65
+ const response = await fetch(apiUrl, {
66
+ headers: {
67
+ 'Accept': 'application/vnd.github.v3+json',
68
+ 'User-Agent': 'faf-cli'
69
+ }
82
70
  });
83
- if (cloneResult.status !== 0) {
84
- // Check if repo doesn't exist
85
- const stderr = cloneResult.stderr || '';
86
- if (stderr.includes('not found') || stderr.includes('Repository not found') || stderr.includes('does not exist')) {
71
+ if (!response.ok) {
72
+ if (response.status === 404) {
87
73
  throw new Error(`Repository ${owner}/${repo} not found`);
88
74
  }
89
- throw new Error(`Git clone failed: ${stderr}`);
75
+ if (response.status === 403) {
76
+ throw new Error('GitHub API rate limit exceeded. Try again later or set GITHUB_TOKEN.');
77
+ }
78
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
90
79
  }
91
- // Step 2: Extract metadata from cloned repo
80
+ const data = await response.json();
81
+ // Extract metadata
92
82
  const metadata = {
93
83
  owner,
94
84
  repo,
95
85
  url: `https://github.com/${owner}/${repo}`,
96
- _clonePath: clonePath,
86
+ description: data.description || undefined,
87
+ topics: data.topics || undefined,
88
+ stars: formatNumber(data.stargazers_count),
89
+ forks: formatNumber(data.forks_count),
90
+ license: data.license?.spdx_id || data.license?.name || undefined,
91
+ lastUpdated: data.updated_at || data.pushed_at || undefined,
92
+ defaultBranch: data.default_branch || 'main',
93
+ openIssues: data.open_issues_count || 0,
94
+ watchers: data.watchers_count || 0,
97
95
  };
98
- // Get default branch from git
99
- try {
100
- const branchResult = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', {
101
- cwd: clonePath,
102
- encoding: 'utf-8'
103
- }).trim();
104
- metadata.defaultBranch = branchResult || 'main';
105
- }
106
- catch {
107
- metadata.defaultBranch = 'main';
108
- }
109
- // Get last commit date
110
- try {
111
- const dateResult = (0, child_process_1.execSync)('git log -1 --format=%cI', {
112
- cwd: clonePath,
113
- encoding: 'utf-8'
114
- }).trim();
115
- metadata.lastUpdated = dateResult;
116
- }
117
- catch {
118
- // Ignore
119
- }
120
- // Check for common files locally (instant, no API)
121
- metadata.readme = (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'README.md')) ||
122
- (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'readme.md')) ||
123
- (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'Readme.md'));
124
- metadata.hasPackageJson = (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'package.json'));
125
- metadata.hasTsConfig = (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'tsconfig.json'));
126
- metadata.hasDockerfile = (0, fs_1.existsSync)((0, path_1.join)(clonePath, 'Dockerfile'));
127
- // Extract description from package.json if available
128
- if (metadata.hasPackageJson) {
129
- try {
130
- const pkgJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(clonePath, 'package.json'), 'utf-8'));
131
- if (pkgJson.description && !metadata.description) {
132
- metadata.description = pkgJson.description;
133
- }
134
- }
135
- catch {
136
- // Ignore parse errors
137
- }
138
- }
139
- // Detect languages from file extensions (local analysis)
140
- metadata.languages = detectLanguagesFromFiles(clonePath);
141
- // Try to extract license from LICENSE file
142
- const licenseFile = findLicenseFile(clonePath);
143
- if (licenseFile) {
144
- metadata.license = detectLicenseType(licenseFile);
145
- }
146
- // Step 3: Optional API enrichment (stars, topics, forks) - best effort
147
- // This may fail due to rate limits, but core extraction still works
148
- try {
149
- const enrichment = await fetchGitHubApiEnrichment(owner, repo);
150
- if (enrichment) {
151
- metadata.stars = enrichment.stars;
152
- metadata.forks = enrichment.forks;
153
- metadata.topics = enrichment.topics;
154
- metadata.openIssues = enrichment.openIssues;
155
- metadata.watchers = enrichment.watchers;
156
- if (enrichment.description && !metadata.description) {
157
- metadata.description = enrichment.description;
158
- }
159
- if (enrichment.license && !metadata.license) {
160
- metadata.license = enrichment.license;
96
+ // Fetch language breakdown
97
+ if (data.languages_url) {
98
+ const langResponse = await fetch(data.languages_url, {
99
+ headers: {
100
+ 'Accept': 'application/vnd.github.v3+json',
101
+ 'User-Agent': 'faf-cli'
161
102
  }
103
+ });
104
+ if (langResponse.ok) {
105
+ const languages = await langResponse.json();
106
+ const total = Object.values(languages).reduce((sum, bytes) => sum + bytes, 0);
107
+ metadata.languages = Object.entries(languages)
108
+ .map(([lang, bytes]) => {
109
+ const percentage = ((bytes / total) * 100).toFixed(1);
110
+ return `${lang} (${percentage}%)`;
111
+ })
112
+ .sort((a, b) => {
113
+ const aPercent = parseFloat(a.match(/\((.+)%\)/)?.[1] || '0');
114
+ const bPercent = parseFloat(b.match(/\((.+)%\)/)?.[1] || '0');
115
+ return bPercent - aPercent;
116
+ });
162
117
  }
163
118
  }
164
- catch {
165
- // API enrichment failed (rate limit), but core extraction succeeded
166
- // Leave stars/forks/topics as undefined
119
+ // Check for common files (if requested)
120
+ if (includeFiles) {
121
+ const fileChecks = await Promise.allSettled([
122
+ checkFileExists(owner, repo, 'README.md', metadata.defaultBranch),
123
+ checkFileExists(owner, repo, 'package.json', metadata.defaultBranch),
124
+ checkFileExists(owner, repo, 'tsconfig.json', metadata.defaultBranch),
125
+ checkFileExists(owner, repo, 'Dockerfile', metadata.defaultBranch),
126
+ ]);
127
+ metadata.readme = fileChecks[0].status === 'fulfilled' && fileChecks[0].value;
128
+ metadata.hasPackageJson = fileChecks[1].status === 'fulfilled' && fileChecks[1].value;
129
+ metadata.hasTsConfig = fileChecks[2].status === 'fulfilled' && fileChecks[2].value;
130
+ metadata.hasDockerfile = fileChecks[3].status === 'fulfilled' && fileChecks[3].value;
167
131
  }
168
132
  return metadata;
169
133
  }
170
134
  catch (error) {
171
- // Cleanup on error
172
- try {
173
- if ((0, fs_1.existsSync)(clonePath)) {
174
- (0, fs_1.rmSync)(clonePath, { recursive: true, force: true });
175
- }
176
- }
177
- catch {
178
- // Ignore cleanup errors
179
- }
180
135
  if (error instanceof Error) {
181
136
  throw error;
182
137
  }
@@ -184,263 +139,53 @@ async function fetchGitHubMetadata(owner, repo, includeFiles = false) {
184
139
  }
185
140
  }
186
141
  /**
187
- * Fetch optional enrichment data from GitHub API (best effort)
142
+ * Check if a file exists in the repository
188
143
  */
189
- async function fetchGitHubApiEnrichment(owner, repo) {
144
+ async function checkFileExists(owner, repo, path, branch = 'main') {
145
+ const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}?ref=${branch}`;
190
146
  try {
191
- const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;
192
- const response = await fetch(apiUrl, {
147
+ const response = await fetch(url, {
193
148
  headers: {
194
149
  'Accept': 'application/vnd.github.v3+json',
195
150
  'User-Agent': 'faf-cli'
196
151
  }
197
152
  });
198
- if (!response.ok) {
199
- return null; // Don't throw, just return null for enrichment
200
- }
201
- const data = await response.json();
202
- return {
203
- stars: formatNumber(data.stargazers_count),
204
- forks: formatNumber(data.forks_count),
205
- topics: data.topics || undefined,
206
- description: data.description || undefined,
207
- license: data.license?.spdx_id || data.license?.name || undefined,
208
- openIssues: data.open_issues_count || 0,
209
- watchers: data.watchers_count || 0,
210
- };
153
+ return response.ok;
211
154
  }
212
155
  catch {
213
- return null;
214
- }
215
- }
216
- /**
217
- * Detect programming languages from file extensions in cloned repo
218
- */
219
- function detectLanguagesFromFiles(repoPath) {
220
- const extensionMap = {
221
- '.ts': 'TypeScript',
222
- '.tsx': 'TypeScript',
223
- '.js': 'JavaScript',
224
- '.jsx': 'JavaScript',
225
- '.py': 'Python',
226
- '.rs': 'Rust',
227
- '.go': 'Go',
228
- '.java': 'Java',
229
- '.rb': 'Ruby',
230
- '.php': 'PHP',
231
- '.swift': 'Swift',
232
- '.kt': 'Kotlin',
233
- '.cs': 'C#',
234
- '.cpp': 'C++',
235
- '.c': 'C',
236
- '.vue': 'Vue',
237
- '.svelte': 'Svelte',
238
- };
239
- const languageCounts = {};
240
- function scanDirectory(dir, depth = 0) {
241
- if (depth > 5)
242
- return; // Limit depth to avoid deep recursion
243
- try {
244
- const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
245
- for (const entry of entries) {
246
- // Skip hidden directories and node_modules
247
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'vendor') {
248
- continue;
249
- }
250
- const fullPath = (0, path_1.join)(dir, entry.name);
251
- if (entry.isDirectory()) {
252
- scanDirectory(fullPath, depth + 1);
253
- }
254
- else if (entry.isFile()) {
255
- const ext = entry.name.substring(entry.name.lastIndexOf('.'));
256
- const lang = extensionMap[ext];
257
- if (lang) {
258
- try {
259
- const size = (0, fs_1.statSync)(fullPath).size;
260
- languageCounts[lang] = (languageCounts[lang] || 0) + size;
261
- }
262
- catch {
263
- // Ignore stat errors
264
- }
265
- }
266
- }
267
- }
268
- }
269
- catch {
270
- // Ignore directory read errors
271
- }
272
- }
273
- scanDirectory(repoPath);
274
- // Calculate percentages
275
- const total = Object.values(languageCounts).reduce((sum, bytes) => sum + bytes, 0);
276
- if (total === 0)
277
- return [];
278
- return Object.entries(languageCounts)
279
- .map(([lang, bytes]) => {
280
- const percentage = ((bytes / total) * 100).toFixed(1);
281
- return { lang, percentage: parseFloat(percentage), display: `${lang} (${percentage}%)` };
282
- })
283
- .sort((a, b) => b.percentage - a.percentage)
284
- .map(item => item.display);
285
- }
286
- /**
287
- * Find LICENSE file in repository
288
- */
289
- function findLicenseFile(repoPath) {
290
- const licenseNames = ['LICENSE', 'LICENSE.md', 'LICENSE.txt', 'license', 'License'];
291
- for (const name of licenseNames) {
292
- const licensePath = (0, path_1.join)(repoPath, name);
293
- if ((0, fs_1.existsSync)(licensePath)) {
294
- try {
295
- return (0, fs_1.readFileSync)(licensePath, 'utf-8');
296
- }
297
- catch {
298
- return null;
299
- }
300
- }
301
- }
302
- return null;
303
- }
304
- /**
305
- * Detect license type from LICENSE file content
306
- */
307
- function detectLicenseType(content) {
308
- const lowerContent = content.toLowerCase();
309
- if (lowerContent.includes('mit license') || lowerContent.includes('permission is hereby granted, free of charge')) {
310
- return 'MIT';
311
- }
312
- if (lowerContent.includes('apache license') && lowerContent.includes('version 2.0')) {
313
- return 'Apache-2.0';
314
- }
315
- if (lowerContent.includes('gnu general public license') && lowerContent.includes('version 3')) {
316
- return 'GPL-3.0';
317
- }
318
- if (lowerContent.includes('gnu general public license') && lowerContent.includes('version 2')) {
319
- return 'GPL-2.0';
156
+ return false;
320
157
  }
321
- if (lowerContent.includes('bsd 3-clause') || lowerContent.includes('3-clause bsd')) {
322
- return 'BSD-3-Clause';
323
- }
324
- if (lowerContent.includes('bsd 2-clause') || lowerContent.includes('2-clause bsd')) {
325
- return 'BSD-2-Clause';
326
- }
327
- if (lowerContent.includes('isc license')) {
328
- return 'ISC';
329
- }
330
- if (lowerContent.includes('mozilla public license') && lowerContent.includes('2.0')) {
331
- return 'MPL-2.0';
332
- }
333
- return 'Other';
334
158
  }
335
159
  /**
336
- * Fetch repository file tree from local clone
337
- * Uses the _clonePath from metadata if available
160
+ * Fetch repository file tree
338
161
  */
339
- async function fetchGitHubFileTree(owner, repo, branch = 'main', pathPrefix = '', metadata) {
340
- // If we have a local clone path, use it
341
- const clonePath = metadata?._clonePath;
342
- if (clonePath && (0, fs_1.existsSync)(clonePath)) {
343
- return getLocalFileTree(clonePath, pathPrefix);
344
- }
345
- // Fallback: do a fresh shallow clone
346
- const repoUrl = `https://github.com/${owner}/${repo}.git`;
347
- const tempClonePath = (0, path_1.join)((0, os_1.tmpdir)(), `faf-tree-${owner}-${repo}-${Date.now()}`);
162
+ async function fetchGitHubFileTree(owner, repo, branch = 'main', path = '') {
163
+ const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}?ref=${branch}`;
348
164
  try {
349
- const cloneResult = (0, child_process_1.spawnSync)('git', [
350
- 'clone',
351
- '--depth', '1',
352
- '--single-branch',
353
- repoUrl,
354
- tempClonePath
355
- ], {
356
- encoding: 'utf-8',
357
- timeout: 30000,
358
- stdio: ['pipe', 'pipe', 'pipe']
165
+ const response = await fetch(url, {
166
+ headers: {
167
+ 'Accept': 'application/vnd.github.v3+json',
168
+ 'User-Agent': 'faf-cli'
169
+ }
359
170
  });
360
- if (cloneResult.status !== 0) {
361
- console.warn(`Failed to clone for file tree: ${cloneResult.stderr}`);
362
- return [];
363
- }
364
- const files = getLocalFileTree(tempClonePath, pathPrefix);
365
- // Cleanup temp clone
366
- try {
367
- (0, fs_1.rmSync)(tempClonePath, { recursive: true, force: true });
368
- }
369
- catch {
370
- // Ignore cleanup errors
171
+ if (!response.ok) {
172
+ throw new Error(`Failed to fetch file tree: ${response.status}`);
371
173
  }
372
- return files;
174
+ const data = await response.json();
175
+ // API returns an array for directories, object for files
176
+ const items = Array.isArray(data) ? data : [data];
177
+ return items.map((item) => ({
178
+ path: item.path,
179
+ type: item.type === 'dir' ? 'dir' : 'file',
180
+ size: item.size,
181
+ url: item.html_url,
182
+ }));
373
183
  }
374
184
  catch (error) {
375
185
  console.warn(`Failed to fetch file tree: ${error}`);
376
186
  return [];
377
187
  }
378
188
  }
379
- /**
380
- * Get file tree from local directory
381
- */
382
- function getLocalFileTree(repoPath, pathPrefix = '') {
383
- const files = [];
384
- const basePath = pathPrefix ? (0, path_1.join)(repoPath, pathPrefix) : repoPath;
385
- function scanDirectory(dir, relativePath = '', depth = 0) {
386
- if (depth > 3)
387
- return; // Limit depth for performance
388
- try {
389
- const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
390
- for (const entry of entries) {
391
- // Skip hidden files/directories and common excludes
392
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'vendor') {
393
- continue;
394
- }
395
- const fullPath = (0, path_1.join)(dir, entry.name);
396
- const entryRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
397
- if (entry.isDirectory()) {
398
- files.push({
399
- path: entryRelativePath,
400
- type: 'dir',
401
- });
402
- scanDirectory(fullPath, entryRelativePath, depth + 1);
403
- }
404
- else if (entry.isFile()) {
405
- try {
406
- const stats = (0, fs_1.statSync)(fullPath);
407
- files.push({
408
- path: entryRelativePath,
409
- type: 'file',
410
- size: stats.size,
411
- });
412
- }
413
- catch {
414
- files.push({
415
- path: entryRelativePath,
416
- type: 'file',
417
- });
418
- }
419
- }
420
- }
421
- }
422
- catch {
423
- // Ignore directory read errors
424
- }
425
- }
426
- if ((0, fs_1.existsSync)(basePath)) {
427
- scanDirectory(basePath);
428
- }
429
- return files;
430
- }
431
- /**
432
- * Cleanup cloned repository after extraction
433
- */
434
- function cleanupClonedRepo(metadata) {
435
- if (metadata._clonePath && (0, fs_1.existsSync)(metadata._clonePath)) {
436
- try {
437
- (0, fs_1.rmSync)(metadata._clonePath, { recursive: true, force: true });
438
- }
439
- catch {
440
- // Ignore cleanup errors
441
- }
442
- }
443
- }
444
189
  /**
445
190
  * Format large numbers with K/M suffix
446
191
  */
@@ -1 +1 @@
1
- {"version":3,"file":"github-extractor.js","sourceRoot":"","sources":["../../src/github/github-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-extractor.js","sourceRoot":"","sources":["../../src/github/github-extractor.ts"],"names":[],"mappings":"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"}
@@ -291,7 +291,7 @@ function generateFafContent(projectData) {
291
291
  backend: projectData.backend || 'None',
292
292
  runtime: projectData.server || 'None',
293
293
  database: projectData.database || 'None',
294
- build: projectData.buildTool || 'None',
294
+ build: projectData.buildTool || (projectData.projectType === 'static-html' || projectData.projectType === 'landing-page' ? 'Direct HTML (no build step)' : 'None'),
295
295
  package_manager: projectData.packageManager || 'npm',
296
296
  api_type: projectData.apiType || 'REST API',
297
297
  hosting: projectData.hosting || 'None',