mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Debug: Inline API logic with error handling and logging
Inlined the file reading logic directly in API handlers to eliminate import issues. Added try/catch with JSON error responses to diagnose the timeout issue. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.5
parent
11f9b284ff
commit
f7b42be23b
+41
-3
@@ -1,7 +1,45 @@
|
||||
import { getCommands } from "../server/lib/api-handlers.js";
|
||||
import { readdir, readFile } from "fs/promises";
|
||||
import { join, dirname } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
const PROJECT_ROOT = join(__dirname, "..");
|
||||
|
||||
export default async function handler(request) {
|
||||
const commands = await getCommands();
|
||||
return Response.json(commands);
|
||||
try {
|
||||
const sourceDir = join(PROJECT_ROOT, "source");
|
||||
const commandsDir = join(sourceDir, "commands");
|
||||
|
||||
console.log("PROJECT_ROOT:", PROJECT_ROOT);
|
||||
console.log("commandsDir:", commandsDir);
|
||||
|
||||
const files = await readdir(commandsDir);
|
||||
const commands = [];
|
||||
|
||||
for (const file of files) {
|
||||
if (file.endsWith(".md")) {
|
||||
const content = await readFile(join(commandsDir, file), "utf-8");
|
||||
const frontmatterMatch = content.match(/^---\n([\s\S]+?)\n---/);
|
||||
|
||||
if (frontmatterMatch) {
|
||||
const frontmatter = frontmatterMatch[1];
|
||||
const nameMatch = frontmatter.match(/name:\s*(.+)/);
|
||||
const descMatch = frontmatter.match(/description:\s*(.+)/);
|
||||
|
||||
commands.push({
|
||||
id: file.replace(".md", ""),
|
||||
name: nameMatch?.[1]?.trim() || file.replace(".md", ""),
|
||||
description: descMatch?.[1]?.trim() || "No description available",
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Response.json(commands);
|
||||
} catch (error) {
|
||||
console.error("Error in /api/commands:", error);
|
||||
return Response.json({ error: error.message, stack: error.stack }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+73
-3
@@ -1,6 +1,76 @@
|
||||
import { getPatterns } from "../server/lib/api-handlers.js";
|
||||
import { readFile } from "fs/promises";
|
||||
import { join, dirname } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
const PROJECT_ROOT = join(__dirname, "..");
|
||||
|
||||
export default async function handler(request) {
|
||||
const patterns = await getPatterns();
|
||||
return Response.json(patterns);
|
||||
try {
|
||||
const sourceDir = join(PROJECT_ROOT, "source");
|
||||
const filePath = join(sourceDir, "patterns.md");
|
||||
|
||||
console.log("Reading patterns from:", filePath);
|
||||
|
||||
const content = await readFile(filePath, "utf-8");
|
||||
const frontmatterMatch = content.match(/^---\n([\s\S]+?)\n---/);
|
||||
|
||||
if (!frontmatterMatch) {
|
||||
return Response.json({ patterns: [], antipatterns: [] });
|
||||
}
|
||||
|
||||
const frontmatterText = frontmatterMatch[1];
|
||||
const patterns = [];
|
||||
const antipatterns = [];
|
||||
const lines = frontmatterText.split('\n');
|
||||
let currentSection = null;
|
||||
let currentCategory = null;
|
||||
let inItems = false;
|
||||
|
||||
for (const line of lines) {
|
||||
const trimmed = line.trim();
|
||||
if (!trimmed) continue;
|
||||
|
||||
const indent = line.length - line.trimStart().length;
|
||||
|
||||
if (indent === 0 && trimmed === 'patterns:') {
|
||||
currentSection = 'patterns';
|
||||
currentCategory = null;
|
||||
inItems = false;
|
||||
continue;
|
||||
}
|
||||
if (indent === 0 && trimmed === 'antipatterns:') {
|
||||
currentSection = 'antipatterns';
|
||||
currentCategory = null;
|
||||
inItems = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (trimmed.startsWith('- name:') && currentSection) {
|
||||
currentCategory = { name: trimmed.slice(7).trim(), items: [] };
|
||||
if (currentSection === 'patterns') {
|
||||
patterns.push(currentCategory);
|
||||
} else {
|
||||
antipatterns.push(currentCategory);
|
||||
}
|
||||
inItems = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (trimmed === 'items:' && currentCategory) {
|
||||
inItems = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (trimmed.startsWith('- ') && inItems && currentCategory && indent >= 6) {
|
||||
currentCategory.items.push(trimmed.slice(2).trim());
|
||||
}
|
||||
}
|
||||
|
||||
return Response.json({ patterns, antipatterns });
|
||||
} catch (error) {
|
||||
console.error("Error in /api/patterns:", error);
|
||||
return Response.json({ error: error.message, stack: error.stack }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user