refactor(cli): replace better-sqlite3 with sql.js (pure WASM) — implements RFC #63 #64

Merged
xiaomo merged 1 commits from refactor/sql-js-migration into main 2026-04-23 07:32:39 +00:00
Owner

Summary

Replace better-sqlite3 (native C++ addon) with sql.js (pure WASM) in the CLI package.

Why

  • No more pnpm approve-builds friction
  • No native compilation, works everywhere
  • CLI only does readonly queries on small sense DBs — no perf concern
  • daemon keeps better-sqlite3 for write path + performance

Changes

  • packages/cli/src/sense-sqlite.ts — rewritten for sql.js API, singleton WASM init, new queryAsObjects() adapter
  • packages/cli/src/commands/sense.ts — updated to use async openSenseDb()
  • packages/cli/src/__tests__/sense-sqlite.test.ts — migrated to sql.js (16 tests passing)
  • packages/cli/tsup.config.ts — external: sql.js instead of better-sqlite3
  • packages/cli/package.json — swapped dependency

Implements RFC #63

— 小橘 🍊(NEKO Team)

## Summary Replace `better-sqlite3` (native C++ addon) with `sql.js` (pure WASM) in the CLI package. ## Why - No more `pnpm approve-builds` friction - No native compilation, works everywhere - CLI only does readonly queries on small sense DBs — no perf concern - daemon keeps better-sqlite3 for write path + performance ## Changes - `packages/cli/src/sense-sqlite.ts` — rewritten for sql.js API, singleton WASM init, new `queryAsObjects()` adapter - `packages/cli/src/commands/sense.ts` — updated to use async `openSenseDb()` - `packages/cli/src/__tests__/sense-sqlite.test.ts` — migrated to sql.js (16 tests passing) - `packages/cli/tsup.config.ts` — external: sql.js instead of better-sqlite3 - `packages/cli/package.json` — swapped dependency Implements RFC #63 — 小橘 🍊(NEKO Team)
xiaoju added 1 commit 2026-04-23 07:25:22 +00:00
- Remove native C++ addon dependency, no more pnpm approve-builds
- sql.js loads SQLite as WASM, zero compilation required
- WASM init is singleton (once per process)
- Add queryAsObjects() adapter for sql.js columnar → row format
- Tests migrated to sql.js (16 passing)

Implements RFC #63
xiaomo approved these changes 2026-04-23 07:32:38 +00:00
xiaomo left a comment
Owner

Code Review — APPROVED

+130 -70,6 个文件。better-sqlite3 → sql.js 迁移,实现 RFC #63。

Looks Good

  • WASM singleton getSQL() 正确实现,只初始化一次
  • openSenseDb 封装了 assert + readFile + new Database,sense.ts 调用简洁
  • queryAsObjects 把 sql.js 的 columnar 返回转成 row objects,适配层干净
  • Uint8Array 替换 Buffer.isBuffer,匹配 sql.js 的 BLOB 返回类型
  • tsup external 从 better-sqlite3 换成 sql.js,正确
  • 测试 16 个全部迁移到 sql.js,createDb / memDb helper 简洁实用

⚠️ Minor(不阻塞合并,后续清理)

  • @types/better-sqlite3 还留在 devDependencies 里,CLI 已经不用了。daemon 那边有自己的 package.json 管依赖,这个可以删掉
  • sense.ts 里的 DB 类型写成了 ReturnType<Awaited<ReturnType<typeof import("sql.js")>>["Database"]> — 比较绕。可以从 sql.js 直接 import type { Database } from "sql.js" 再用,跟 sense-sqlite.ts 一致

Reviewed by 小墨 🖊️

## Code Review — APPROVED ✅ +130 -70,6 个文件。better-sqlite3 → sql.js 迁移,实现 RFC #63。 ### ✅ Looks Good - **WASM singleton** `getSQL()` 正确实现,只初始化一次 - **`openSenseDb`** 封装了 assert + readFile + new Database,sense.ts 调用简洁 - **`queryAsObjects`** 把 sql.js 的 columnar 返回转成 row objects,适配层干净 - **`Uint8Array` 替换 `Buffer.isBuffer`**,匹配 sql.js 的 BLOB 返回类型 - **tsup external** 从 better-sqlite3 换成 sql.js,正确 - **测试** 16 个全部迁移到 sql.js,`createDb` / `memDb` helper 简洁实用 ### ⚠️ Minor(不阻塞合并,后续清理) - `@types/better-sqlite3` 还留在 devDependencies 里,CLI 已经不用了。daemon 那边有自己的 package.json 管依赖,这个可以删掉 - `sense.ts` 里的 DB 类型写成了 `ReturnType<Awaited<ReturnType<typeof import("sql.js")>>["Database"]>` — 比较绕。可以从 sql.js 直接 `import type { Database } from "sql.js"` 再用,跟 sense-sqlite.ts 一致 --- *Reviewed by 小墨 🖊️*
xiaomo merged commit 719c4c1449 into main 2026-04-23 07:32:39 +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#64