Lines 1-32javascript
1// packages/core/src/storage/index-db.ts
2// 用 createRequire 绕过 Vite 静态分析:`import { DatabaseSync } from "node:sqlite"`
3// 在 vitest 2.x 下会被 Vite resolver 拦截,报 `Failed to load url sqlite`
4// (stripping `node:` prefix)。createRequire 在运行时调用,Vite 无法静态解析,
5// 直接走 Node builtin resolver —— 同 test/storage/node-sqlite-smoke.test.ts 的 workaround。
7// 字符串拼接 `"node:" + "sqlite"` 进一步防止 Vite 把整个 require 调用静态化为
8// bare import 解析。type import 在编译时被擦除,不被 resolver 拦截,可以安全使用。
9import { createRequire } from "node:module";
10import { readFileSync } from "node:fs";
11import { dirname, join } from "node:path";
12import { fileURLToPath } from "node:url";
13const require = createRequire(import.meta.url);
14const SQLITE_MODULE = "node:" + "sqlite";
MediumDynamic Require
Package source references dynamic require/import behavior.
dist/storage/index-db.jsView on unpkg · L12 15const sqliteModule = require(SQLITE_MODULE);
16const DatabaseSync = sqliteModule.DatabaseSync;
17const __dirname = dirname(fileURLToPath(import.meta.url));
18const SCHEMA_PATH = join(__dirname, "index-db-schema.sql");
20 * SQLite 索引库封装:打开 / schema 初始化 / 显式事务。
23 * - WAL 模式:多读单写,显著降低并发读写冲突,适合 engram write-through 场景。
24 * - 显式 BEGIN/COMMIT/ROLLBACK:node:sqlite 默认隐式事务,显式包裹保证多语句原子性。
25 * - schema 通过外部 .sql 文件管理,便于审计和迁移工具比对。