Offload functions to worker threads with shared memory primitives for Node.js.
1import { DatabaseSync } from 'node:sqlite';
2import { mo } from '../../src/index.ts';
3
4export const openDb = mo(import.meta, (filename: string): DatabaseSync => {
5 const db = new DatabaseSync(filename);
6 db.exec(`
7 CREATE TABLE IF NOT EXISTS users (
8 id INTEGER PRIMARY KEY AUTOINCREMENT,
9 name TEXT NOT NULL,
10 email TEXT NOT NULL
11 )
12 `);
13 return db;
14});
15
16export const insertUser = mo(import.meta, (db: DatabaseSync, name: string, email: string): number => {
17 const stmt = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
18 const result = stmt.run(name, email);
19 return Number(result.lastInsertRowid);
20});
21
22export const getUser = mo(
23 import.meta,
24 (db: DatabaseSync, id: number): { id: number; name: string; email: string } | undefined => {
25 const stmt = db.prepare('SELECT id, name, email FROM users WHERE id = ?');
26 return stmt.get(id) as { id: number; name: string; email: string } | undefined;
27 },
28);
29
30export const listUsers = mo(import.meta, (db: DatabaseSync): { id: number; name: string; email: string }[] => {
31 const stmt = db.prepare('SELECT id, name, email FROM users');
32 return stmt.all() as { id: number; name: string; email: string }[];
33});
34
35export const countUsers = mo(import.meta, (db: DatabaseSync): number => {
36 const stmt = db.prepare('SELECT COUNT(*) as count FROM users');
37 const row = stmt.get() as { count: number };
38 return row.count;
39});