diff --git a/packages/kernel-store/src/sqlite/nodejs.test.ts b/packages/kernel-store/src/sqlite/nodejs.test.ts index ea8d63787..36b342401 100644 --- a/packages/kernel-store/src/sqlite/nodejs.test.ts +++ b/packages/kernel-store/src/sqlite/nodejs.test.ts @@ -200,6 +200,14 @@ describe('makeSQLKernelDatabase', () => { recursive: true, }); }); + + it('returns absolute path as-is and ensures parent directory exists', async () => { + const result = await getDBFilename('/home/user/.ocap/store.db'); + expect(result).toBe('/home/user/.ocap/store.db'); + expect(mockMkdir).toHaveBeenCalledWith('/home/user/.ocap', { + recursive: true, + }); + }); }); describe('savepoint functionality', () => { diff --git a/packages/kernel-store/src/sqlite/nodejs.ts b/packages/kernel-store/src/sqlite/nodejs.ts index 421ba8c2c..24d043b0d 100644 --- a/packages/kernel-store/src/sqlite/nodejs.ts +++ b/packages/kernel-store/src/sqlite/nodejs.ts @@ -3,7 +3,7 @@ import type { Database as SqliteDatabase } from 'better-sqlite3'; import Sqlite from 'better-sqlite3'; import { mkdir } from 'node:fs/promises'; import { tmpdir } from 'node:os'; -import { join } from 'node:path'; +import { dirname, isAbsolute, join } from 'node:path'; import { SQL_QUERIES, @@ -334,6 +334,10 @@ export async function getDBFilename(label: string): Promise { if (label.startsWith(':')) { return label; } + if (isAbsolute(label)) { + await mkdir(dirname(label), { recursive: true }); + return label; + } const dbRoot = join(tmpdir(), './ocap-sqlite', getDBFolder()); await mkdir(dbRoot, { recursive: true }); return join(dbRoot, label);