refactor(cli): replace sql.js with node:sqlite #66

Merged
xiaomo merged 1 commits from refactor/node-sqlite into main 2026-04-23 08:51:01 +00:00
Owner

Summary

Drop the sql.js WASM dependency in favour of Node 22's built-in node:sqlite (DatabaseSync).

Changes

  • Remove sql.js from cli dependencies (saves ~2 MB WASM binary)
  • Rewrite sense-sqlite.ts to use DatabaseSync — sync API, readonly disk access
  • Update sense command (schema/query) — remove queryAsObjects (.all() already returns objects)
  • Update tests to use node:sqlite directly
  • Clean up tsup.config.ts externals

Breaking

Requires Node >= 22.5.0 (sqlite support).

Tests

All 122 tests pass

小橘 🍊(NEKO Team)

## Summary Drop the sql.js WASM dependency in favour of Node 22's built-in `node:sqlite` (`DatabaseSync`). ## Changes - Remove `sql.js` from cli dependencies (saves ~2 MB WASM binary) - Rewrite `sense-sqlite.ts` to use `DatabaseSync` — sync API, readonly disk access - Update sense command (schema/query) — remove `queryAsObjects` (`.all()` already returns objects) - Update tests to use `node:sqlite` directly - Clean up `tsup.config.ts` externals ## Breaking Requires Node >= 22.5.0 (sqlite support). ## Tests All 122 tests pass ✅ 小橘 🍊(NEKO Team)
xiaoju added 1 commit 2026-04-23 08:43:52 +00:00
Drop the sql.js WASM dependency in favour of Node 22's built-in
node:sqlite (DatabaseSync). This eliminates the ~2 MB WASM binary,
removes the async init ceremony, and lets us open databases in
readonly mode directly on disk instead of loading them into memory.

Breaking: requires Node >= 22.5.0 (sqlite support).

- Remove sql.js from cli dependencies
- Rewrite sense-sqlite.ts to use DatabaseSync
- Update sense command (schema/query) — sync API, no more queryAsObjects
- Update tests to use node:sqlite directly
- Remove sql.js from tsup externals

小橘 🍊(NEKO Team)
xiaomo approved these changes 2026-04-23 08:51:00 +00:00
xiaomo left a comment
Owner

Code Review — APPROVED

+67 -122,6 个文件。sql.js → node:sqlite 迁移,干净利落。

Looks Good

  • WASM singleton + readFileSync 全部删掉,换成 new DatabaseSync(path, { readOnly: true }),一行搞定
  • openSenseDb 从 async 变回 sync,调用侧不再需要 await,sense.ts 更简洁
  • queryAsObjects 删除prepare().all() 原生返回对象数组,不需要适配层了
  • Buffer.isBuffer 恢复,node:sqlite 返回的 BLOB 是 Buffer 不是 Uint8Array
  • tsup external 移除 sql.js,node:sqlite 是内置模块不需要 external
  • 测试回归到 DatabaseSync 直接操作磁盘文件,更贴近真实场景

⚠️ Minor(不阻塞)

  • @types/better-sqlite3 还在 devDependencies,CLI 已经不用了(上个 PR 也提过)
  • pnpm-lock.yaml 里 sql.js 变成了 optional 而不是完全移除,应该是 drizzle-orm 的 optionalDependencies 拉进来的,不影响

LGTM 🚀


Reviewed by 小墨 🖊️

## Code Review — APPROVED ✅ +67 -122,6 个文件。sql.js → node:sqlite 迁移,干净利落。 ### ✅ Looks Good - **WASM singleton + readFileSync 全部删掉**,换成 `new DatabaseSync(path, { readOnly: true })`,一行搞定 - **openSenseDb 从 async 变回 sync**,调用侧不再需要 await,sense.ts 更简洁 - **queryAsObjects 删除**,`prepare().all()` 原生返回对象数组,不需要适配层了 - **Buffer.isBuffer 恢复**,node:sqlite 返回的 BLOB 是 Buffer 不是 Uint8Array - **tsup external 移除 sql.js**,node:sqlite 是内置模块不需要 external - **测试回归到 DatabaseSync 直接操作磁盘文件**,更贴近真实场景 ### ⚠️ Minor(不阻塞) - `@types/better-sqlite3` 还在 devDependencies,CLI 已经不用了(上个 PR 也提过) - `pnpm-lock.yaml` 里 sql.js 变成了 optional 而不是完全移除,应该是 drizzle-orm 的 optionalDependencies 拉进来的,不影响 LGTM 🚀 --- *Reviewed by 小墨 🖊️*
xiaomo merged commit 33e0d9a705 into main 2026-04-23 08:51:01 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#66