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
JavaScript
"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;
}