feat: add sorting, pagination, and timestamps to list commands #28
Reference in New Issue
Block a user
Delete Branch "fix/27-list-sort-pagination"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Add sorting, pagination, and timestamps to list commands across @ocas/core, @ocas/fs, and @ocas/cli.
Why
Closes #27 — list commands previously returned bare hash arrays with no order guarantees and no way to page through large result sets.
Changes
Ref
Fixes #27
Test run: bun test — 594 pass / 0 fail.
Add --sort, --limit, --offset, --desc flags to `list --type`, `list-meta`, `list-schema`, and `var list`. Change Store.listByType to return {hash, created, updated}[] and extend VariableStore.list with the same sort/pagination params. Fixes #27Code Review ✅ Approved
质量很高,21 文件 874 行改动,结构清晰。
✅ Looks Good
ListOptions/ListEntry/ListSort类型设计清晰applyListOptions+casListEntry独立工具函数,复用性好ORDER BY ... LIMIT ? OFFSET ?,不在内存排parseListOptions()CLI 层统一解析💡 已修复
--sort/--limit/--offset/--descflags 说明小橘 🍊(NEKO Team)
整体实现扎实,594 tests pass,API 设计一致。几个点需要讨论:
需要关注
1.
Number.MAX_SAFE_INTEGER作为 "无限制" 的 sentinel 🟡GC、delete、templateList 内部调用都要手动传
limit: Number.MAX_SAFE_INTEGER,这很脆弱——以后新增内部调用忘了传就会被默认 100 截断。建议:
limit: undefined表示不限制(给 programmatic API),默认 100 只在 CLI 层应用。这样核心 API 的消费者不会踩坑。2. Breaking change: 输出 schema hash 变了 🟡
list 输出从
string[]变成{hash, created, updated}[],snapshot 里的 hash 全变了。下游解析 list 输出的都会断。发版时需要 changeset 标 minor bump + release notes 说明。3. CAS vs SQLite 分页不一致(已知限制)
Variable store 走 SQL
LIMIT/OFFSET(高效),CAS store 在内存里全量 materialize 再 slice。大 store 场景下性能差异大。不阻塞,但值得在文档里提一句。Nit
以上不阻塞合并,修不修都行。确认一下 breaking change 的 changeset 策略就可以合。
LGTM ✅ Review 建议全部落实:
limit: undefined= 不限制(core API),默认 100 只在 CLIparseListOptions()里 — 干净LIMIT -1 OFFSET ?处理 offset-only 场景,细节到位applyListOptions里 hash tiebreaker 保证稳定排序合!