v0.2.0: 全面代码质量优化

- ESLint flat config + Prettier + EditorConfig
- Markdown处理器LRU缓存
- Zustand选择器优化减少重渲染
- CodeMirror Compartment主题热切换
- Preview防抖(150ms) + IndexedDB去抖(500ms)
- 组件拆分: App.tsx 310→104行, Sidebar.tsx 244→90行
- 统一错误处理 errorHandler.ts
- ConfirmDialog替代原生confirm
- LoadingSpinner加载状态
- Toast多条堆叠+类型区分
- 可访问性增强(ARIA属性、键盘导航)
- Vitest测试框架(78个测试用例)
- Git hooks(husky + lint-staged)
- 项目文档(README.md, CONTRIBUTING.md)
This commit is contained in:
thzxx
2026-06-03 22:13:32 +08:00
parent 3cecb0f9eb
commit 7a4e2b0a67
72 changed files with 5103 additions and 894 deletions
+7 -7
View File
@@ -1,28 +1,28 @@
import { db } from './schema'
import { db, type RecentFile } from './schema'
export const recentFilesRepository = {
async add(filePath: string): Promise<void> {
const existing = await db.recentFiles.where('filePath').equals(filePath).first()
const existing: RecentFile | undefined = await db.recentFiles.where('filePath').equals(filePath).first()
if (existing) {
await db.recentFiles.update(existing.id!, { lastOpened: Date.now() })
} else {
await db.recentFiles.add({ filePath, lastOpened: Date.now() })
}
// L-06: 清理超过 50 条的旧记录
const all = await db.recentFiles.orderBy('lastOpened').reverse().toArray()
const all: RecentFile[] = await db.recentFiles.orderBy('lastOpened').reverse().toArray()
if (all.length > 50) {
const toDelete = all.slice(50)
await db.recentFiles.bulkDelete(toDelete.map(f => f.id!))
await db.recentFiles.bulkDelete(toDelete.map((f: RecentFile) => f.id!))
}
},
async getAll(limit = 20): Promise<string[]> {
const files = await db.recentFiles
async getAll(limit: number = 20): Promise<string[]> {
const files: RecentFile[] = await db.recentFiles
.orderBy('lastOpened')
.reverse()
.limit(limit)
.toArray()
return files.map((f: { filePath: string; lastOpened: number }) => f.filePath)
return files.map((f: RecentFile) => f.filePath)
},
async remove(filePath: string): Promise<void> {