Optimized the root .gitignore to exclude virtual environments, node modules, and temp folders to ensure clean and lightweight version tracking. Co-authored-by: Cursor <cursoragent@cursor.com>
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import type { IncomingMessage, ServerResponse } from 'http';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
export function handleHackCssClear(req: IncomingMessage, res: ServerResponse): boolean {
|
|
if (req.method === 'POST' && req.url?.startsWith('/api/hack-css/clear')) {
|
|
let body = '';
|
|
|
|
req.on('data', chunk => {
|
|
body += chunk.toString();
|
|
});
|
|
|
|
req.on('end', () => {
|
|
try {
|
|
const { path: rawTargetPath } = JSON.parse(body);
|
|
const targetPath = decodeURIComponent(String(rawTargetPath || ''));
|
|
|
|
if (!targetPath) {
|
|
res.statusCode = 400;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({ error: 'path is required' }));
|
|
return;
|
|
}
|
|
|
|
const pathParts = targetPath.split('/').filter(Boolean);
|
|
if (pathParts.length < 2 || !['components', 'prototypes'].includes(pathParts[0])) {
|
|
res.statusCode = 400;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({ error: 'Invalid path format. Expected: components/xxx or prototypes/xxx' }));
|
|
return;
|
|
}
|
|
|
|
const hackCssPath = path.resolve(process.cwd(), 'src', targetPath, 'hack.css');
|
|
|
|
if (fs.existsSync(hackCssPath)) {
|
|
fs.unlinkSync(hackCssPath);
|
|
console.log('[API] ✅ 清空 hack.css:', hackCssPath);
|
|
}
|
|
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({ success: true, path: hackCssPath }));
|
|
} catch (err) {
|
|
console.error('[API] ❌ 清空 hack.css 失败:', err);
|
|
res.statusCode = 500;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({ error: 'Failed to clear hack.css' }));
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|