github_search.ts•1.36 kB
import {
BaseSearchParams,
ErrorType,
ProviderError,
SearchProvider,
SearchResult,
} from '../../common/types.js';
import { GitHubSearchProvider } from '../search/github/index.js';
export type GitHubSearchType = 'code' | 'repositories' | 'users';
export interface UnifiedGitHubSearchParams extends BaseSearchParams {
search_type?: GitHubSearchType;
sort?: 'stars' | 'forks' | 'updated';
}
export class UnifiedGitHubSearchProvider implements SearchProvider {
name = 'github_search';
description =
'Search GitHub for code, repositories, or users. Supports advanced syntax (filename:, path:, repo:, user:, language:, in:file).';
private provider: GitHubSearchProvider;
constructor() {
this.provider = new GitHubSearchProvider();
}
async search(
params: UnifiedGitHubSearchParams,
): Promise<SearchResult[]> {
const { search_type = 'code', sort, ...searchParams } = params;
switch (search_type) {
case 'code':
return this.provider.search_code(searchParams);
case 'repositories':
return this.provider.search_repositories({
...searchParams,
sort,
});
case 'users':
return this.provider.search_users(searchParams);
default:
throw new ProviderError(
ErrorType.INVALID_INPUT,
`Invalid search_type: ${search_type}. Valid options: code, repositories, users`,
this.name,
);
}
}
}