Skip to content

Commit 8b42dcf

Browse files
committed
feat: fixed kvvfs & opfs-wl types, added additional demos, expanded test suite
1 parent b2fd2de commit 8b42dcf

23 files changed

Lines changed: 789 additions & 67 deletions

File tree

demos/in-worker-demo/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"preview": "vite preview"
88
},
99
"devDependencies": {
10-
"vite": "^8.0.8"
10+
"vite": "^8.0.9"
1111
}
1212
}

demos/kvvfs-demo/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>kvvfs Demo</title>
7+
</head>
8+
<body>
9+
<div id="app"></div>
10+
<script type="module" src="./src/main.ts"></script>
11+
</body>
12+
</html>

demos/kvvfs-demo/package.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@sqlite.org/kvvfs-demo",
3+
"type": "module",
4+
"scripts": {
5+
"dev": "vite",
6+
"build": "vite build",
7+
"preview": "vite preview"
8+
},
9+
"devDependencies": {
10+
"vite": "^8.0.9"
11+
}
12+
}

demos/kvvfs-demo/src/main.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import sqlite3InitModule from '../../../src/index.js';
2+
3+
const runDemo = async () => {
4+
const sqlite3 = await sqlite3InitModule();
5+
const dbName = 'kvvfs-demo';
6+
7+
sqlite3.kvvfs.unlink(dbName);
8+
9+
const db = new sqlite3.oo1.JsStorageDb('session');
10+
db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
11+
db.exec({
12+
sql: 'INSERT INTO test (name) VALUES (?), (?)',
13+
bind: ['kvvfs 1', 'kvvfs 2'],
14+
});
15+
16+
const rows = db.selectObjects('SELECT * FROM test ORDER BY id');
17+
const size = db.storageSize();
18+
19+
const app = document.getElementById('app');
20+
if (app) {
21+
const sizeInfo = document.createElement('p');
22+
sizeInfo.textContent = `Stored in kvvfs as ${dbName} (${size} bytes)`;
23+
app.appendChild(sizeInfo);
24+
25+
const ul = document.createElement('ul');
26+
rows.forEach((row: any) => {
27+
const li = document.createElement('li');
28+
li.textContent = `${row.id}: ${row.name}`;
29+
ul.appendChild(li);
30+
});
31+
app.appendChild(ul);
32+
}
33+
34+
db.close();
35+
};
36+
37+
runDemo().catch(console.error);

demos/main-thread-demo/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"preview": "vite preview"
88
},
99
"devDependencies": {
10-
"vite": "^8.0.8"
10+
"vite": "^8.0.9"
1111
}
1212
}

demos/opfs-demo/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>OPFS Demo</title>
7+
</head>
8+
<body>
9+
<div id="app"></div>
10+
<script type="module" src="./src/main.ts"></script>
11+
</body>
12+
</html>

demos/opfs-demo/package.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@sqlite.org/opfs-demo",
3+
"type": "module",
4+
"scripts": {
5+
"dev": "vite",
6+
"build": "vite build",
7+
"preview": "vite preview"
8+
},
9+
"devDependencies": {
10+
"vite": "^8.0.9"
11+
}
12+
}

demos/opfs-demo/src/main.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const worker = new Worker(new URL('./workers/worker.ts', import.meta.url), {
2+
type: 'module',
3+
});
4+
5+
worker.onmessage = (e) => {
6+
if (e.data.type === 'success') {
7+
const app = document.getElementById('app');
8+
if (app) {
9+
const file = document.createElement('p');
10+
file.textContent = `Stored in OPFS file ${e.data.filename}`;
11+
app.appendChild(file);
12+
13+
const ul = document.createElement('ul');
14+
e.data.rows.forEach((row: any) => {
15+
const li = document.createElement('li');
16+
li.textContent = `${row.id}: ${row.name}`;
17+
ul.appendChild(li);
18+
});
19+
app.appendChild(ul);
20+
}
21+
} else if (e.data.type === 'error') {
22+
console.error(e.data.message);
23+
}
24+
};
25+
26+
worker.postMessage({ type: 'start' });
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import sqlite3InitModule from '../../../../src/index.js';
2+
3+
self.onmessage = async (e) => {
4+
if (e.data.type === 'start') {
5+
try {
6+
const sqlite3 = await sqlite3InitModule();
7+
const filename = '/opfs-demo.sqlite3';
8+
const db = new sqlite3.oo1.OpfsDb(filename, 'ct');
9+
10+
db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
11+
db.exec({
12+
sql: 'INSERT INTO test (name) VALUES (?), (?)',
13+
bind: ['OPFS 1', 'OPFS 2'],
14+
});
15+
16+
const rows = db.selectObjects('SELECT * FROM test ORDER BY id');
17+
18+
db.close();
19+
20+
self.postMessage({ type: 'success', filename, rows });
21+
} catch (err: any) {
22+
self.postMessage({ type: 'error', message: err.message });
23+
}
24+
}
25+
};

demos/opfs-wl-demo/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>OPFS Web Locks Demo</title>
7+
</head>
8+
<body>
9+
<div id="app"></div>
10+
<script type="module" src="./src/main.ts"></script>
11+
</body>
12+
</html>

0 commit comments

Comments
 (0)