You can access search results via JSON API by adding format=json
to your query:
https://codesearch.val.run/$1?q=api&page=38&format=json
For typeahead suggestions, use the /typeahead
endpoint:
https://codesearch.val.run/typeahead?q=api
Returns an array of strings in format "username" or "username/projectName"
Found 19780 results for "api"(3280ms)
2930// Health check endpoint
31app.get('/api/health', async (c) => {
32try {
33await initializeDatabase();
3940// Test endpoint for debugging delete operations
41app.get('/api/test-delete', async (c) => {
42await initializeDatabase();
43return c.json({ message: 'Delete test endpoint - check logs for database operations' });
44});
4546// Mount API routes
47app.route('/api/recipes', recipesApp);
48// app.route('/api/parse', parseApp);
49app.route('/api/shopping-lists', shoppingListsApp);
5051// Serve static files
1import { Hono } from "https://esm.sh/hono@3.11.7";
2import type { ShoppingList, ShoppingListItem, CreateShoppingListRequest, ApiResponse } from "../../shared/types.ts";
3import {
4createShoppingList as dbCreateShoppingList,
17try {
18const lists = await getAllShoppingLists();
19return c.json({ success: true, data: lists } as ApiResponse<ShoppingList[]>);
20} catch (error) {
21console.error('Error fetching shopping lists:', error);
22return c.json({ success: false, error: 'Failed to fetch shopping lists' } as ApiResponse, 500);
23}
24});
29const id = parseInt(c.req.param('id'));
30if (isNaN(id)) {
31return c.json({ success: false, error: 'Invalid shopping list ID' } as ApiResponse, 400);
32}
3334const list = await getShoppingListById(id);
35if (!list) {
36return c.json({ success: false, error: 'Shopping list not found' } as ApiResponse, 404);
37}
3839return c.json({ success: true, data: list } as ApiResponse<ShoppingList>);
40} catch (error) {
41console.error('Error fetching shopping list:', error);
42return c.json({ success: false, error: 'Failed to fetch shopping list' } as ApiResponse, 500);
43}
44});
53success: false,
54error: 'At least one recipe ID is required'
55} as ApiResponse, 400);
56}
5762success: false,
63error: 'All recipe IDs must be valid numbers'
64} as ApiResponse, 400);
65}
667475const list = await dbCreateShoppingList(listName, validRecipeIds);
76return c.json({ success: true, data: list } as ApiResponse<ShoppingList>, 201);
77} catch (error) {
78console.error('Error creating shopping list:', error);
79return c.json({ success: false, error: 'Failed to create shopping list' } as ApiResponse, 500);
80}
81});
86const id = parseInt(c.req.param('id'));
87if (isNaN(id)) {
88return c.json({ success: false, error: 'Invalid item ID' } as ApiResponse, 400);
89}
9093const success = await updateShoppingListItem(id, updates);
94if (!success) {
95return c.json({ success: false, error: 'Item not found or no changes made' } as ApiResponse, 404);
96}
9798return c.json({ success: true, data: { updated: true } } as ApiResponse);
99} catch (error) {
100console.error('Error updating shopping list item:', error);
101return c.json({ success: false, error: 'Failed to update item' } as ApiResponse, 500);
102}
103});
108const id = parseInt(c.req.param('id'));
109if (isNaN(id)) {
110return c.json({ success: false, error: 'Invalid shopping list ID' } as ApiResponse, 400);
111}
112113const deleted = await deleteShoppingList(id);
114if (!deleted) {
115return c.json({ success: false, error: 'Shopping list not found' } as ApiResponse, 404);
116}
117118return c.json({ success: true, data: { deleted: true } } as ApiResponse);
119} catch (error) {
120console.error('Error deleting shopping list:', error);
121return c.json({ success: false, error: 'Failed to delete shopping list' } as ApiResponse, 500);
122}
123});