Files
software-workspace/src/data/loader.ts
T
shenjianZ 6b58b55c32 feat: 全面重构网站工程化体系与 UI 架构
- 将单体 style.css 拆分为 tokens/reset/fonts/layout/responsive/组件级 CSS 模块
- 从 Google Fonts CDN 迁移至本地自托管字体(JetBrainsMono、NotoSansSC)
- 引入 Vitest + Testing Library 测试体系,新增单元测试
- 添加 GitHub Actions CI 流水线(lint → build → test)
- 新增 Prettier 格式化与 ESLint 规则强化
- 重构全部 YAML 数据文件,完善项目详情页(截图轮播、更新日志)
- 新增项目文档编写指南(docs/create-project.md)
2026-05-22 13:34:41 +08:00

36 lines
1.0 KiB
TypeScript

import { parse as yamlParse } from 'yaml';
import type { SiteData, Project } from '../types';
import brandRaw from './brand.yaml?raw';
import navRaw from './nav.yaml?raw';
import categoriesRaw from './categories.yaml?raw';
import statusesRaw from './statuses.yaml?raw';
import platformsRaw from './platforms.yaml?raw';
import aboutRaw from './about.yaml?raw';
import zhRaw from './i18n/zh.yaml?raw';
import enRaw from './i18n/en.yaml?raw';
const projectFiles = import.meta.glob('./projects/*.yaml', {
eager: true,
query: '?raw',
import: 'default',
}) as Record<string, string>;
const projects: Project[] = Object.values(projectFiles)
.map((raw) => yamlParse(raw) as Project)
.sort((a, b) => a.order - b.order);
export const siteData: SiteData = {
brand: yamlParse(brandRaw),
nav: yamlParse(navRaw),
categories: yamlParse(categoriesRaw),
statuses: yamlParse(statusesRaw),
platforms: yamlParse(platformsRaw),
projects,
about: yamlParse(aboutRaw),
i18n: {
zh: yamlParse(zhRaw),
en: yamlParse(enRaw),
},
};