Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions src/databaseWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { createWorkerEndpoint } from "./core/sqlite-db";
*/
function log(level: 'log' | 'warn' | 'error', ...args: unknown[]) {
if (parentPort) {
parentPort.postMessage({ kind: 'log', level, args: args.map(a => a instanceof Error ? a.message : a) });
parentPort.postMessage({ kind: 'log', level, args: args.map(a => a instanceof Error ? a.message : a) }, []);
} else {
console[level](...args);
}
Expand Down Expand Up @@ -55,8 +55,12 @@ if (parentPort) {
const wasHandled = processProtocolMessage(
envelope,
databaseEndpoint as Record<string, (...args: unknown[]) => unknown>,
(response, transfer) => {
parentPort!.postMessage(response, transfer);
(response, transfer?: Transferable[]) => {
if (transfer) {
parentPort!.postMessage(response, transfer as any[]);
} else {
parentPort!.postMessage(response, []);
}
}
);

Expand Down
14 changes: 8 additions & 6 deletions src/platform/threadPool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
* all VS Code runtime environments without conditional imports.
*/

import type * as wt from 'worker_threads';

// ============================================================================
// Type Definitions for Cross-Platform Message Passing
// ============================================================================
Expand All @@ -18,7 +20,7 @@
* Used for communication in Node.js worker_threads.
*/
interface NodeMessagePort {
postMessage(data: unknown, transfer?: unknown[]): void;
postMessage(data: unknown, transfer?: any[]): void;
on(event: string, handler: EventListenerOrEventListenerObject, options?: object): void;
off(event: string, handler: EventListenerOrEventListenerObject, options?: object): void;
}
Expand Down Expand Up @@ -84,11 +86,11 @@ export function createBrowserParentPort(scope: BrowserParentPortScope): NodeMess
// Runtime Detection and API Export
// ============================================================================

let WorkerImpl: any;
let MessageChannelImpl: any;
let MessagePortImpl: any;
let BroadcastChannelImpl: any;
let parentPortImpl: any;
let WorkerImpl: typeof globalThis.Worker | typeof wt.Worker;
let MessageChannelImpl: typeof globalThis.MessageChannel | typeof wt.MessageChannel;
let MessagePortImpl: typeof globalThis.MessagePort | typeof wt.MessagePort;
let BroadcastChannelImpl: typeof globalThis.BroadcastChannel | typeof wt.BroadcastChannel;
let parentPortImpl: typeof wt.parentPort | NodeMessagePort | null;

if (import.meta.env?.VSCODE_BROWSER_EXT) {
WorkerImpl = globalThis.Worker;
Expand Down
3 changes: 2 additions & 1 deletion src/workerFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,8 @@ async function createWorkerBackedWasmDatabaseConnection(
{
postMessage: (data: unknown, transfer?: Transferable[]) => {
if (transfer) {
workerThread.postMessage(data, transfer);
// worker_threads.Worker postMessage needs TransferListItem[], but we can pass it via any if necessary or let it be inferred if we cast it. Transferable in DOM is ArrayBuffer | MessagePort | ImageBitmap, which intersects with node's TransferListItem (ArrayBuffer | MessagePort | FileHandle | X509Certificate | Blob) at ArrayBuffer and MessagePort.
workerThread.postMessage(data, transfer as any);
} else {
workerThread.postMessage(data);
}
Expand Down
Loading