6b58b55c32
- 将单体 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)
36 lines
1.0 KiB
TypeScript
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),
|
|
},
|
|
};
|