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(import.meta, (db: DatabaseSync, id: number): { id: number; name: string; email: string } | undefined => {
23 const stmt = db.prepare('SELECT id, name, email FROM users WHERE id = ?');
24 return stmt.get(id) as { id: number; name: string; email: string } | undefined;
25});
26
27export const listUsers = mo(import.meta, (db: DatabaseSync): { id: number; name: string; email: string }[] => {
28 const stmt = db.prepare('SELECT id, name, email FROM users');
29 return stmt.all() as { id: number; name: string; email: string }[];
30});
31
32export const countUsers = mo(import.meta, (db: DatabaseSync): number => {
33 const stmt = db.prepare('SELECT COUNT(*) as count FROM users');
34 const row = stmt.get() as { count: number };
35 return row.count;
36});