Files
pbakaus_impeccable/api/patterns.js
T
Paul BakausandClaude Opus 4.5 f7b42be23b 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>
2025-12-16 14:54:13 -08:00

77 lines
2.2 KiB
JavaScript

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) {
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 });
}
}