Files
turso/bindings/javascript/packages/browser/index-vite-dev-hack.ts
Nikita Sivukhin 974feac27b move compute to the main thread for browser and node
- now, most of the work is happening on the main thread
- for database in browser, we still have dedicated WebWorker - but it is used only for OPFS access and only for that
- for syn in browser we still offload sync operations to the WebWorker
2025-09-19 13:19:30 +04:00

42 lines
1.3 KiB
TypeScript

import { isWebWorker, setupMainThread, setupWebWorker } from "@tursodatabase/database-browser-common";
import { tursoWasm } from "./wasm-inline.js";
let napiModule = {
exports: {
Database: {} as any,
Opfs: {} as any,
OpfsFile: {} as any,
Statement: {} as any,
connectDbAsync: {} as any,
initThreadPool: {} as any,
}
};
export let MainWorker = null;
if (isWebWorker()) {
setupWebWorker();
} else {
// Vite has issues with loading wasm modules and worker in dev server: https://github.com/vitejs/vite/issues/8427
// So, the mitigation for dev server only is:
// 1. inline wasm binary in the source code in order to avoid issues with loading it from the file
// 2. use same file as worker entry point
const __wasmFile = await tursoWasm();
napiModule = await setupMainThread(__wasmFile, () => {
const worker = new Worker(import.meta.url, {
name: 'turso-database',
type: 'module',
})
MainWorker = worker;
return worker
});
}
export default napiModule.exports
export const Database = napiModule.exports.Database
export const Opfs = napiModule.exports.Opfs
export const OpfsFile = napiModule.exports.OpfsFile
export const Statement = napiModule.exports.Statement
export const connectDbAsync = napiModule.exports.connectDbAsync
export const initThreadPool = napiModule.exports.initThreadPool