UNPKG

hikma-engine

Version:

Code Knowledge Graph Indexer - A sophisticated TypeScript-based indexer that transforms Git repositories into multi-dimensional knowledge stores for AI agents

112 lines (111 loc) 4.81 kB
"use strict"; /** * @file Search routes for all search endpoint types. * Defines routes for semantic, structural, git, hybrid, and comprehensive search. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createSearchRouter = createSearchRouter; const express_1 = require("express"); const search_controller_1 = require("../controllers/search-controller"); const middleware_1 = require("../middleware"); /** * Creates the search router with all search endpoints. */ function createSearchRouter(config) { const router = (0, express_1.Router)(); const searchController = new search_controller_1.SearchController(config); // Initialize the search controller searchController.initialize().catch(error => { console.error('Failed to initialize search controller:', error); }); /** * Task 4: Semantic search endpoint * GET /api/v1/search/semantic * * Query Parameters: * - q: string (required) - Search query * - limit: number (optional, default: 10) - Maximum results * - nodeTypes: string[] (optional) - Filter by node types (comma-separated) * - minSimilarity: number (optional, default: 0.1) - Minimum similarity threshold * - includeMetadata: boolean (optional, default: true) - Include metadata in results */ router.get('/semantic', middleware_1.validateSemanticSearch, (0, middleware_1.asyncErrorHandler)(searchController.semanticSearch.bind(searchController))); /** * Task 5: Structural search endpoint * GET /api/v1/search/structure * * Query Parameters: * - q: string (required) - Search query * - language: string (optional) - Programming language filter * - type: string (optional) - Code element type (function, class, interface, variable) * - filePath: string (optional) - File path pattern * - limit: number (optional, default: 10) - Maximum results */ router.get('/structure', middleware_1.validateStructuralSearch, (0, middleware_1.asyncErrorHandler)(searchController.structuralSearch.bind(searchController))); /** * Task 6: Git history search endpoint * GET /api/v1/search/git * * Query Parameters: * - q: string (required) - Search query * - author: string (optional) - Author filter * - dateFrom: string (optional) - Start date (ISO format) * - dateTo: string (optional) - End date (ISO format) * - limit: number (optional, default: 10) - Maximum results */ router.get('/git', middleware_1.validateGitSearch, (0, middleware_1.asyncErrorHandler)(searchController.gitSearch.bind(searchController))); /** * Task 7: Hybrid search endpoint * GET /api/v1/search/hybrid * * Query Parameters: * - q: string (required) - Search query * - filters: string (optional) - JSON string of metadata filters * - weights: string (optional) - JSON string of search dimension weights * - limit: number (optional, default: 10) - Maximum results */ router.get('/hybrid', middleware_1.validateHybridSearch, (0, middleware_1.asyncErrorHandler)(searchController.hybridSearch.bind(searchController))); /** * Task 8: Comprehensive search endpoint * GET /api/v1/search/comprehensive * * Query Parameters: * - q: string (required) - Search query * - limit: number (optional, default: 20) - Maximum results * - includeTypes: string[] (optional) - Node types to include (comma-separated) */ router.get('/comprehensive', middleware_1.validateComprehensiveSearch, (0, middleware_1.asyncErrorHandler)(searchController.comprehensiveSearch.bind(searchController))); /** * Search statistics endpoint * GET /api/v1/search/stats */ router.get('/stats', (0, middleware_1.asyncErrorHandler)(async (req, res) => { // Get cache statistics const cacheStats = searchController.cacheService.getStats(); res.json({ success: true, data: { cache: cacheStats, endpoints: { semantic: '/api/v1/search/semantic', structural: '/api/v1/search/structure', git: '/api/v1/search/git', hybrid: '/api/v1/search/hybrid', comprehensive: '/api/v1/search/comprehensive', }, supportedNodeTypes: [ 'CodeNode', 'FileNode', 'CommitNode', 'TestNode', 'PullRequestNode', ], }, meta: { timestamp: new Date().toISOString(), requestId: req.context?.requestId || 'unknown', }, }); })); return router; }