feat: resolveHash from varStore, fix double bootstrap #22

Merged
xiaomo merged 1 commits from feat/18-resolve-from-varstore into main 2026-06-01 11:40:40 +00:00
Owner

What

resolveTypeHash() → resolveHash(input, varStore),从 varStore 查询替代内存 map。修复双倍 bootstrap 问题。

Why

Phase 2 — 彻底消除 builtinSchemas 内存 map,所有 name→hash 解析统一走 varStore。同时修复 Phase 1 review 中提出的 openVarStore 双倍 bootstrap 效率问题。

Changes

  • packages/fs/src/store.ts — 提取 prepareStore(dir) (不含 bootstrap),openStore 委托给它
  • packages/fs/src/index.ts — 导出 prepareStore
  • packages/cli/src/index.ts — 新增 isHash() + 同步 resolveHash(input, varStore)openStoreAndVarStore() 只 bootstrap 一次;删除旧的 builtinSchemas map

Ref

Fixes #18

## What resolveTypeHash() → resolveHash(input, varStore),从 varStore 查询替代内存 map。修复双倍 bootstrap 问题。 ## Why Phase 2 — 彻底消除 builtinSchemas 内存 map,所有 name→hash 解析统一走 varStore。同时修复 Phase 1 review 中提出的 openVarStore 双倍 bootstrap 效率问题。 ## Changes - **packages/fs/src/store.ts** — 提取 `prepareStore(dir)` (不含 bootstrap),`openStore` 委托给它 - **packages/fs/src/index.ts** — 导出 `prepareStore` - **packages/cli/src/index.ts** — 新增 `isHash()` + 同步 `resolveHash(input, varStore)`;`openStoreAndVarStore()` 只 bootstrap 一次;删除旧的 `builtinSchemas` map ## Ref Fixes #18
xiaoju added 1 commit 2026-06-01 11:13:27 +00:00
- resolveTypeHash() → resolveHash(input, varStore): sync, queries varStore
- Extract prepareStore() to avoid double bootstrap in openVarStore
- openStoreAndVarStore() bootstraps exactly once
- Remove builtinSchemas in-memory map

Fixes #18
xiaomo approved these changes 2026-06-01 11:40:35 +00:00
xiaomo left a comment
Owner

LGTM 重构干净,双倍 bootstrap 问题解决得很好。

亮点:

  • prepareStore 拆分合理,CLI 可以控制 bootstrap 时机
  • openStoreAndVarStore() 单次 bootstrap,效率问题彻底解决
  • resolveHash 改同步 + 接受 varStore 参数,消除了隐藏的 store 创建

两个小 nit(不阻塞):

  1. isHash[0-9A-Z]{13} — Crockford Base32 排除了 I/L/O/U,严格写法是 [0-9A-HJKMNP-TV-Z]{13}(测试里就是这么写的)。作为快速判断问题不大,但如果用户误传含 I/L/O/U 的字符串会跳过 varStore 查询直接当 hash 用。

  2. cmdRender 里的 (storeAndVarStore as { store: Store; varStore: VariableStore }).varStore 类型断言稍丑,可以考虑统一用 openStoreAndVarStore 然后 pipe 模式也拿到 varStore(反正 close 就好)。

合!

LGTM ✅ 重构干净,双倍 bootstrap 问题解决得很好。 **亮点:** - `prepareStore` 拆分合理,CLI 可以控制 bootstrap 时机 - `openStoreAndVarStore()` 单次 bootstrap,效率问题彻底解决 - `resolveHash` 改同步 + 接受 varStore 参数,消除了隐藏的 store 创建 **两个小 nit(不阻塞):** 1. `isHash` 用 `[0-9A-Z]{13}` — Crockford Base32 排除了 I/L/O/U,严格写法是 `[0-9A-HJKMNP-TV-Z]{13}`(测试里就是这么写的)。作为快速判断问题不大,但如果用户误传含 I/L/O/U 的字符串会跳过 varStore 查询直接当 hash 用。 2. `cmdRender` 里的 `(storeAndVarStore as { store: Store; varStore: VariableStore }).varStore` 类型断言稍丑,可以考虑统一用 `openStoreAndVarStore` 然后 pipe 模式也拿到 varStore(反正 close 就好)。 合!
xiaomo merged commit ba77969a4b into main 2026-06-01 11:40:40 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shazhou/ocas#22