Files
ONE-OS/axhub-make/vite-plugins/virtualHtml/handlers/docsMarkdownHandler.ts
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
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>
2026-06-09 18:12:25 +08:00

62 lines
2.3 KiB
TypeScript

import type { IncomingMessage, ServerResponse } from 'http';
import fs from 'fs';
import path from 'path';
import { logVirtualHtmlDebug, logVirtualHtmlError } from '../logger';
export function handleDocsMarkdown(req: IncomingMessage, res: ServerResponse): boolean {
// 处理 /prototypes/*.md 和 /components/*.md
if ((req.url?.includes('/prototypes/') || req.url?.includes('/components/')) && req.url?.endsWith('.md')) {
const urlWithoutQuery = req.url.split('?')[0];
const decodedUrlPath = decodeURIComponent(urlWithoutQuery);
const mdPath = path.resolve(process.cwd(), 'src' + decodedUrlPath);
logVirtualHtmlDebug('请求 page/element markdown:', req.url, '-> 路径:', mdPath, '存在:', fs.existsSync(mdPath));
if (fs.existsSync(mdPath)) {
try {
const content = fs.readFileSync(mdPath, 'utf8');
res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
res.statusCode = 200;
res.end(content);
logVirtualHtmlDebug('返回 page/element markdown:', req.url);
return true;
} catch (err) {
logVirtualHtmlError('读取 page/element markdown 失败:', err);
}
} else {
logVirtualHtmlDebug('page/element markdown 不存在:', mdPath);
}
}
// 处理 /docs/*.md
if (req.url?.startsWith('/docs/') && req.url?.endsWith('.md')) {
const urlWithoutQuery = req.url.split('?')[0];
// 移除 /docs/ 前缀和 .md 后缀
const docPath = urlWithoutQuery.slice(6, -3); // 移除 '/docs/' 和 '.md'
// 对路径进行 URL 解码
const decodedDocPath = decodeURIComponent(docPath);
const mdPath = path.resolve(process.cwd(), 'src/docs', decodedDocPath + '.md');
logVirtualHtmlDebug('请求 docs markdown:', req.url, '-> 路径:', mdPath, '存在:', fs.existsSync(mdPath));
if (fs.existsSync(mdPath)) {
try {
const content = fs.readFileSync(mdPath, 'utf8');
res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
res.statusCode = 200;
res.end(content);
logVirtualHtmlDebug('返回 docs markdown:', req.url);
return true;
} catch (err) {
logVirtualHtmlError('读取 docs markdown 失败:', err);
}
} else {
logVirtualHtmlDebug('docs markdown 不存在:', mdPath);
}
}
return false;
}