@livestore/sqlite-wasm
Version:
51 lines • 1.88 kB
JavaScript
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