Files
iboard/src/lib/powersync/db.js
T

38 lines
1.0 KiB
JavaScript

// PowerSync 本地库单例 (0.2.1 离线编辑)
// 页面用法: usePowerSyncQuery 等见 src/lib/powersync/react.jsx; 写入用 db.execute/writeTransaction
import { PowerSyncDatabase } from '@powersync/web'
import { AppSchema } from './schema.js'
import { IBoardConnector } from './connector.js'
let dbInstance = null
export function getPowersyncDb() {
if (!dbInstance) {
dbInstance = new PowerSyncDatabase({
schema: AppSchema,
database: {
// 默认 IDBBatchAtomicVFS (IndexedDB), 兼容性最广; WebView2 (Chromium) 后续可切 OPFS 加速
dbFilename: 'iboard-powersync.db',
},
})
}
return dbInstance
}
/** 登录后调用: 建立同步连接 (幂等) */
export async function connectPowersync() {
const db = getPowersyncDb()
db.connect(new IBoardConnector())
return db
}
/** 退出登录时调用: 断开同步并清空本地库 */
export async function disconnectAndClearPowersync() {
if (!dbInstance) return
try {
await dbInstance.disconnectAndClear()
} catch {
/* ignore */
}
}