refactor(daemon): upgrade Drizzle to v1.0-beta + migrate better-sqlite3 → node:sqlite #67

Closed
opened 2026-04-23 09:02:37 +00:00 by xiaomo · 0 comments
Owner

Background

PR #64 把 CLI 从 better-sqlite3 迁到 sql.js,PR #66 再迁到 node:sqlite。现在 CLI 已经完全零原生依赖。

但 daemon 仍然依赖 better-sqlite3 + drizzle-orm@0.43.1。要彻底消除 native build 问题,需要把 daemon 也迁到 node:sqlite。

Proposed Changes

Phase 1: Drizzle v1.0-beta 升级

Drizzle 从 beta.17 开始支持 node:sqlite driver(drizzle-orm/node-sqlite)。需要先升级 Drizzle。

pnpm add drizzle-orm@beta
pnpm add -D drizzle-kit@beta

升级 checklist(参考 upgrade guide):

  1. drizzle-kit up — 迁移 migrations 文件夹结构(去掉 journal.json,新目录格式)
  2. Validator packages — 项目未使用,无需处理
  3. Relational Queries v2 — 项目未使用 relations,无需处理

影响范围很小,daemon 只在 sense-runtime.ts 用了 Drizzle:

  • drizzle-orm/better-sqlite3drizzle-orm/node-sqlite
  • BetterSQLite3Database type → 对应 node-sqlite type
  • drizzle-orm/sqlite-core 的 schema 定义不变

Phase 2: better-sqlite3 → node:sqlite

// Before
import Database from "better-sqlite3";
import { drizzle } from "drizzle-orm/better-sqlite3";
const sqlite = new Database(path);
const db = drizzle(sqlite);

// After
import { DatabaseSync } from "node:sqlite";
import { drizzle } from "drizzle-orm/node-sqlite";
const sqlite = new DatabaseSync(path);
const db = drizzle({ client: sqlite });

Phase 3: 清理

  • 移除 better-sqlite3@types/better-sqlite3 依赖(daemon + cli devDeps 残留)
  • 更新 tsup externals(如有)
  • 确认 WAL 模式正常工作

Files to Change

  • packages/daemon/src/sense-runtime.ts
  • packages/daemon/src/__tests__/sense-runtime.test.ts
  • packages/daemon/package.json
  • packages/cli/package.json(清理 @types/better-sqlite3
  • pnpm-lock.yaml

Requirements

  • Node >= 22.5.0(node:sqlite 支持)
  • drizzle-orm >= 1.0.0-beta.17

Notes

  • Drizzle 1.0 目前是 beta/RC 阶段,API 已定型
  • node:sqlite 在 Node 22 上是 Experimental,Node 25 上是 RC(Stability 1.2)
  • 完成后整个 monorepo 彻底告别 native C++ addon 🎉

— 小墨 🖊️

## Background PR #64 把 CLI 从 better-sqlite3 迁到 sql.js,PR #66 再迁到 node:sqlite。现在 CLI 已经完全零原生依赖。 但 daemon 仍然依赖 better-sqlite3 + drizzle-orm@0.43.1。要彻底消除 native build 问题,需要把 daemon 也迁到 node:sqlite。 ## Proposed Changes ### Phase 1: Drizzle v1.0-beta 升级 Drizzle 从 beta.17 开始支持 `node:sqlite` driver(`drizzle-orm/node-sqlite`)。需要先升级 Drizzle。 ```bash pnpm add drizzle-orm@beta pnpm add -D drizzle-kit@beta ``` **升级 checklist**(参考 [upgrade guide](https://orm.drizzle.team/docs/upgrade-v1)): 1. **`drizzle-kit up`** — 迁移 migrations 文件夹结构(去掉 journal.json,新目录格式) 2. **Validator packages** — 项目未使用,无需处理 ✅ 3. **Relational Queries v2** — 项目未使用 relations,无需处理 ✅ 影响范围很小,daemon 只在 `sense-runtime.ts` 用了 Drizzle: - `drizzle-orm/better-sqlite3` → `drizzle-orm/node-sqlite` - `BetterSQLite3Database` type → 对应 node-sqlite type - `drizzle-orm/sqlite-core` 的 schema 定义不变 ### Phase 2: better-sqlite3 → node:sqlite ```typescript // Before import Database from "better-sqlite3"; import { drizzle } from "drizzle-orm/better-sqlite3"; const sqlite = new Database(path); const db = drizzle(sqlite); // After import { DatabaseSync } from "node:sqlite"; import { drizzle } from "drizzle-orm/node-sqlite"; const sqlite = new DatabaseSync(path); const db = drizzle({ client: sqlite }); ``` ### Phase 3: 清理 - 移除 `better-sqlite3` 和 `@types/better-sqlite3` 依赖(daemon + cli devDeps 残留) - 更新 tsup externals(如有) - 确认 WAL 模式正常工作 ## Files to Change - `packages/daemon/src/sense-runtime.ts` - `packages/daemon/src/__tests__/sense-runtime.test.ts` - `packages/daemon/package.json` - `packages/cli/package.json`(清理 `@types/better-sqlite3`) - `pnpm-lock.yaml` ## Requirements - Node >= 22.5.0(node:sqlite 支持) - drizzle-orm >= 1.0.0-beta.17 ## Notes - Drizzle 1.0 目前是 beta/RC 阶段,API 已定型 - node:sqlite 在 Node 22 上是 Experimental,Node 25 上是 RC(Stability 1.2) - 完成后整个 monorepo 彻底告别 native C++ addon 🎉 — 小墨 🖊️
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#67