{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "query-database", "type": "registry:item", "description": "Execute SQL queries against PostgreSQL database", "dependencies": [ "@vercel/postgres" ], "files": [ { "path": "steps/query-database.ts", "content": "import { FatalError } from \"workflow\"\n\ninterface QueryDatabaseOptions {\n query: string\n params?: any[]\n}\n\n/**\n * Execute SQL queries against PostgreSQL database\n *\n * @example\n * const users = await queryDatabase({\n * query: 'SELECT * FROM users WHERE created_at > $1',\n * params: [new Date('2024-01-01')]\n * });\n */\nexport async function queryDatabase(options: QueryDatabaseOptions) {\n \"use step\"\n\n const { query, params = [] } = options\n const databaseUrl = process.env.DATABASE_URL\n\n if (!databaseUrl) {\n throw new FatalError(\"DATABASE_URL environment variable is required\")\n }\n\n if (!query) {\n throw new FatalError(\"query is required\")\n }\n\n // Use @vercel/postgres for serverless environments\n const { sql } = await import(\"@vercel/postgres\")\n\n try {\n // Execute query with parameters\n const result = await sql.query(query, params)\n\n return {\n rows: result.rows,\n rowCount: result.rowCount,\n fields: result.fields?.map((f) => f.name),\n }\n } catch (error) {\n if (error instanceof Error) {\n // Check if it's a constraint violation or other fatal error\n if (error.message.includes(\"constraint\") || error.message.includes(\"syntax\")) {\n throw new FatalError(`Database error: ${error.message}`)\n }\n throw error\n }\n throw new Error(\"Unknown database error\")\n }\n}\n", "type": "registry:file", "target": "steps/query-database.ts" } ] }