UNPKG

@livestore/sqlite-wasm

Version:

51 lines 1.88 kB
import { Effect, Hash } from '@livestore/utils/effect'; import { makeInMemoryDb } from '../in-memory-vfs.js'; import { makeSqliteDb } from '../make-sqlite-db.js'; import { makeOpfsDb } from './opfs/index.js'; export * from './opfs/opfs-sah-pool.js'; export const sqliteDbFactory = ({ sqlite3 }) => (input) => Effect.gen(function* () { if (input._tag === 'in-memory') { const { dbPointer, vfs } = makeInMemoryDb(sqlite3); return makeSqliteDb({ sqlite3, metadata: { _tag: 'in-memory', vfs, dbPointer, deleteDb: () => { }, configureDb: input.configureDb ?? (() => { }), persistenceInfo: { fileName: ':memory:', }, }, }); } // TODO figure out the actual max length const MAX_DB_FILENAME_LENGTH = 60; let dbFilename = input.fileName; if (input.fileName.length > MAX_DB_FILENAME_LENGTH) { yield* Effect.logWarning(`dbFilename too long: '${input.fileName}'. Max ${MAX_DB_FILENAME_LENGTH} chars, got ${input.fileName.length}. Hashing...`); dbFilename = `hash-${Hash.string(input.fileName)}.db`; } const { dbPointer, vfs } = yield* makeOpfsDb({ sqlite3, directory: input.opfsDirectory, fileName: dbFilename, }); return makeSqliteDb({ sqlite3, metadata: { _tag: 'opfs', vfs, dbPointer, deleteDb: () => vfs.resetAccessHandle(input.fileName), configureDb: input.configureDb ?? (() => { }), persistenceInfo: { fileName: dbFilename, opfsDirectory: input.opfsDirectory, opfsFileName: vfs.getOpfsFileName(dbFilename), }, }, }); }); //# sourceMappingURL=mod.js.map