repomix
Version:
A tool to pack repository contents to single file for AI consumption
37 lines (36 loc) • 1.87 kB
JavaScript
import { RepomixError } from '../../shared/errorHandle.js';
export const buildGitHubArchiveUrl = (repoInfo) => {
const { owner, repo, ref } = repoInfo;
const baseUrl = `https://codeload.github.com/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/tar.gz`;
return `${baseUrl}/${ref ? encodeURIComponent(ref) : 'HEAD'}`;
};
export const buildGitHubMasterArchiveUrl = (repoInfo) => {
const { owner, repo, ref } = repoInfo;
if (ref) {
return null;
}
return `https://codeload.github.com/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/tar.gz/master`;
};
export const buildGitHubTagArchiveUrl = (_repoInfo) => {
return null;
};
export const checkGitHubResponse = (response) => {
if (response.status === 404) {
throw new RepomixError('Repository not found or is private. Please check the repository URL and your access permissions.');
}
if (response.status === 403) {
const rateLimitRemaining = response.headers.get('X-RateLimit-Remaining');
if (rateLimitRemaining === '0') {
const resetTime = response.headers.get('X-RateLimit-Reset');
const resetDate = resetTime ? new Date(Number.parseInt(resetTime, 10) * 1000) : null;
throw new RepomixError(`GitHub API rate limit exceeded. ${resetDate ? `Rate limit resets at ${resetDate.toISOString()}` : 'Please try again later.'}`);
}
throw new RepomixError('Access denied. The repository might be private or you might not have permission to access it.');
}
if (response.status === 500 || response.status === 502 || response.status === 503 || response.status === 504) {
throw new RepomixError('GitHub server error. Please try again later.');
}
if (!response.ok) {
throw new RepomixError(`GitHub API error: ${response.status} ${response.statusText}`);
}
};