需求背景
当前 @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 }。
- 默认情况下不启用持久化(纯内存,行为不变)。
-
文件适配器(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 时抛出清晰错误。
- 清晰注释/文档
-
文档与测���:
- 用例覆盖:纯内存、文件、localStorage 3 种场景。
- 断言数据可恢复、变更可保存。
- 文档/README/TypeDoc 配置说明。
-
不包含:
- IndexedDB 相关实现/适配。
- 持久化跨 Tab 同步能力。
- 多用户隔离/安全。
相关影响
- objectstack.config.ts、MSW/Storybook/browser.ts、CLI 默认使用推荐配置。
- .gitignore 默认忽略
.objectstack/data/
需求背景
当前
@objectstack/driver-memory仅支持纯内存数据,无法在开发与浏览器模式下实现数据持久化,导致进程重启、页面刷新或热重载时所有数据丢失。对开发体验和 UED 流程形成阻碍。主要目标:
详细需求
统一持久化入口:
persistence配置项。'file' | 'local' | { type: 'file', path?: string } | { type: 'local', key?: string } | { adapter: PersistenceAdapter }。文件适配器(Node.js 环境):
FileSystemPersistenceAdapter:以 JSON 格式序列化this.db,保存到磁盘文件。.objectstack/data/memory-driver.json。localStorage 适配器(浏览器环境):
LocalStoragePersistenceAdapter:用 localStorage.getItem/setItem/JSON.stringify 保存完整 db。objectstack:memory-db。接口/配置一致性:
persistence: 'file'自动在 Node.js 下选择 FileSystemAdapter。persistence: 'local'自动在浏览器下选择 localStorageAdapter。配置示例:
兼容性与降级:
file时抛出清晰错误。local时抛出清晰错误。文档与测���:
不包含:
相关影响
.objectstack/data/