-
Notifications
You must be signed in to change notification settings - Fork 0
Description
需求背景
当前 @objectstack/driver-memory 仅支持纯内存数据,无法在开发与浏览器模式下实现数据持久化,导致进程重启、页面刷新或热重载时所有数据丢失。对开发体验和 UED 流程形成阻碍。
主要目标:
- 支持在 Node.js 环境下通过磁盘文件自动保存和恢复内存数据库。
- 支持在浏览器环境下通过 localStorage 自动保存和恢复内存数据库。
- 允许用户无感配置,即"配置字符串"自动切换对应 Adapter。
- 不考虑 IndexDB,后者未来通过单独 driver 实现。
详细需求
-
统一持久化入口:
- 在 InMemoryDriverConfig 增加
persistence配置项。 - 新增 type union:
'file' | 'local' | { type: 'file', path?: string } | { type: 'local', key?: string } | { adapter: PersistenceAdapter }。 - 默认情况下不启用持久化(纯内存,行为不变)。
- 在 InMemoryDriverConfig 增加
-
文件适配器(Node.js 环境):
- 实现
FileSystemPersistenceAdapter:以 JSON 格式序列化this.db,保存到磁盘文件。 - 路径和文件名可配置,默认
.objectstack/data/memory-driver.json。 - 支持原子写(写 temp 文件再 rename)。
- 启动时自动 load 恢复。
- CRUD/批量写时自动 dirty 标记,定时(如 2s) autosave。
- 需有 flush() 方法和 disconnect 生命周期钩子确保安全关闭。
- 实现
-
localStorage 适配器(浏览器环境):
- 实现
LocalStoragePersistenceAdapter:用 localStorage.getItem/setItem/JSON.stringify 保存完整 db。 - key 可配置,默认
objectstack:memory-db。 - 刷新或关闭页面时自动恢复。
- 小于 5MB 上限,超限可警告。
- 不需要异步逻辑或大数据管理。
- 实现
-
接口/配置一致性:
persistence: 'file'自动在 Node.js 下选择 FileSystemAdapter。persistence: 'local'自动在浏览器下选择 localStorageAdapter。- 对调用者完全透明,旧接口代码零破坏。
-
配置示例:
// Node.js new InMemoryDriver({ persistence: 'file' }) // 浏览器 new InMemoryDriver({ persistence: 'local' }) // 纯内存 new InMemoryDriver()
-
兼容性与降级:
- 非 Node.js 环境配置
file时抛出清晰错误。 - 非浏览器环境配置
local时抛出清晰错误。 - 清晰注释/文档
- 非 Node.js 环境配置
-
文档与测���:
- 用例覆盖:纯内存、文件、localStorage 3 种场景。
- 断言数据可恢复、变更可保存。
- 文档/README/TypeDoc 配置说明。
-
不包含:
- IndexedDB 相关实现/适配。
- 持久化跨 Tab 同步能力。
- 多用户隔离/安全。
相关影响
- objectstack.config.ts、MSW/Storybook/browser.ts、CLI 默认使用推荐配置。
- .gitignore 默认忽略
.objectstack/data/
- 核心实现方案评审
- 配置项与 API 设计完成
- Adapter 开发(文件/LocalStorage)
- dev/测试用例/文档
Reactions are currently unavailable