diff --git a/bindings/javascript/packages/browser-common/index.ts b/bindings/javascript/packages/browser-common/index.ts index 2db8de5a7..e5cbdbffd 100644 --- a/bindings/javascript/packages/browser-common/index.ts +++ b/bindings/javascript/packages/browser-common/index.ts @@ -268,7 +268,7 @@ let workerRequestId = 0; function waitForWorkerResponse(worker: Worker, id: number): Promise { let waitResolve, waitReject; const callback = msg => { - if (msg.data.id == id) { + if (msg.data.__turso__ && msg.data.id == id) { if (msg.data.error != null) { waitReject(msg.data.error) } else { @@ -376,31 +376,31 @@ function setupWebWorker() { if (e.data.__turso__ == 'register') { try { await opfs.registerFile(e.data.path); - self.postMessage({ id: e.data.id }); + self.postMessage({ __turso__: true, id: e.data.id }); } catch (error) { - self.postMessage({ id: e.data.id, error: error }); + self.postMessage({ __turso__: true, id: e.data.id, error: error }); } return; } else if (e.data.__turso__ == 'unregister') { try { await opfs.unregisterFile(e.data.path); - self.postMessage({ id: e.data.id }); + self.postMessage({ __turso__: true, id: e.data.id }); } catch (error) { - self.postMessage({ id: e.data.id, error: error }); + self.postMessage({ __turso__: true, id: e.data.id, error: error }); } return; } else if (e.data.__turso__ == 'read_async') { let result = opfs.read(e.data.handle, getUint8ArrayFromMemory(memory, e.data.ptr, e.data.len), e.data.offset); - self.postMessage({ id: e.data.id, result: result }); + self.postMessage({ __turso__: true, id: e.data.id, result: result }); } else if (e.data.__turso__ == 'write_async') { let result = opfs.write(e.data.handle, getUint8ArrayFromMemory(memory, e.data.ptr, e.data.len), e.data.offset); - self.postMessage({ id: e.data.id, result: result }); + self.postMessage({ __turso__: true, id: e.data.id, result: result }); } else if (e.data.__turso__ == 'sync_async') { let result = opfs.sync(e.data.handle); - self.postMessage({ id: e.data.id, result: result }); + self.postMessage({ __turso__: true, id: e.data.id, result: result }); } else if (e.data.__turso__ == 'truncate_async') { let result = opfs.truncate(e.data.handle, e.data.len); - self.postMessage({ id: e.data.id, result: result }); + self.postMessage({ __turso__: true, id: e.data.id, result: result }); } handler.handle(e) } diff --git a/bindings/javascript/packages/browser/promise-bundle.ts b/bindings/javascript/packages/browser/promise-bundle.ts index cfff570e2..d7c4e0aa5 100644 --- a/bindings/javascript/packages/browser/promise-bundle.ts +++ b/bindings/javascript/packages/browser/promise-bundle.ts @@ -15,6 +15,9 @@ class Database extends DatabasePromise { constructor(path: string, opts: DatabaseOpts = {}) { super(new NativeDatabase(path, opts) as unknown as any) } + /** + * connect database and pre-open necessary files in the OPFS + */ override async connect() { if (!this.memory) { const worker = await init(); @@ -26,6 +29,9 @@ class Database extends DatabasePromise { } await super.connect(); } + /** + * close the database and relevant files + */ async close() { if (this.name != null && this.#worker != null) { await Promise.all([ diff --git a/bindings/javascript/packages/browser/promise-default.ts b/bindings/javascript/packages/browser/promise-default.ts index 7c96e4fbf..55c9019d8 100644 --- a/bindings/javascript/packages/browser/promise-default.ts +++ b/bindings/javascript/packages/browser/promise-default.ts @@ -15,6 +15,9 @@ class Database extends DatabasePromise { constructor(path: string, opts: DatabaseOpts = {}) { super(new NativeDatabase(path, opts) as unknown as any) } + /** + * connect database and pre-open necessary files in the OPFS + */ override async connect() { if (!this.memory) { const worker = await init(); @@ -26,6 +29,9 @@ class Database extends DatabasePromise { } await super.connect(); } + /** + * close the database and relevant files + */ async close() { if (this.name != null && this.#worker != null) { await Promise.all([ diff --git a/bindings/javascript/packages/browser/promise-turbopack-hack.ts b/bindings/javascript/packages/browser/promise-turbopack-hack.ts index 7870b74f5..08ba7c6ef 100644 --- a/bindings/javascript/packages/browser/promise-turbopack-hack.ts +++ b/bindings/javascript/packages/browser/promise-turbopack-hack.ts @@ -15,6 +15,9 @@ class Database extends DatabasePromise { constructor(path: string, opts: DatabaseOpts = {}) { super(new NativeDatabase(path, opts) as unknown as any) } + /** + * connect database and pre-open necessary files in the OPFS + */ override async connect() { if (!this.memory) { const worker = await init(); @@ -26,6 +29,9 @@ class Database extends DatabasePromise { } await super.connect(); } + /** + * close the database and relevant files + */ async close() { if (this.name != null && this.#worker != null) { await Promise.all([ diff --git a/bindings/javascript/packages/browser/promise-vite-dev-hack.ts b/bindings/javascript/packages/browser/promise-vite-dev-hack.ts index 838e253a2..8e4cd0921 100644 --- a/bindings/javascript/packages/browser/promise-vite-dev-hack.ts +++ b/bindings/javascript/packages/browser/promise-vite-dev-hack.ts @@ -15,6 +15,9 @@ class Database extends DatabasePromise { constructor(path: string, opts: DatabaseOpts = {}) { super(new NativeDatabase(path, opts) as unknown as any) } + /** + * connect database and pre-open necessary files in the OPFS + */ override async connect() { if (!this.memory) { const worker = await init(); @@ -26,6 +29,9 @@ class Database extends DatabasePromise { } await super.connect(); } + /** + * close the database and relevant files + */ async close() { if (this.name != null && this.#worker != null) { await Promise.all([ diff --git a/bindings/javascript/packages/browser/promise.test.ts b/bindings/javascript/packages/browser/promise.test.ts index b14ecc205..9f3f210d7 100644 --- a/bindings/javascript/packages/browser/promise.test.ts +++ b/bindings/javascript/packages/browser/promise.test.ts @@ -14,7 +14,7 @@ test('explicit connect', async () => { const db = new Database(':memory:'); expect(() => db.prepare("SELECT 1")).toThrowError(/database must be connected/g); await db.connect(); - db.prepare("SELECT 1"); + expect(await db.prepare("SELECT 1 as x").all()).toEqual([{ x: 1 }]); }) test('on-disk db large inserts', async () => { diff --git a/bindings/javascript/packages/common/promise.ts b/bindings/javascript/packages/common/promise.ts index bf6b1e8dd..bbe67b6cc 100644 --- a/bindings/javascript/packages/common/promise.ts +++ b/bindings/javascript/packages/common/promise.ts @@ -52,6 +52,9 @@ class Database { }); } + /** + * connect database + */ async connect() { await this.db.connectAsync(); } diff --git a/bindings/javascript/packages/native/promise.test.ts b/bindings/javascript/packages/native/promise.test.ts index d9970bfe5..131ab761a 100644 --- a/bindings/javascript/packages/native/promise.test.ts +++ b/bindings/javascript/packages/native/promise.test.ts @@ -61,7 +61,7 @@ test('explicit connect', async () => { const db = new Database(':memory:'); expect(() => db.prepare("SELECT 1")).toThrowError(/database must be connected/g); await db.connect(); - db.prepare("SELECT 1"); + expect(await db.prepare("SELECT 1 as x").all()).toEqual([{ x: 1 }]); }) test('on-disk db', async () => {