Skip to content

Commit 7dacc12

Browse files
committed
🎉begin: initial commit
0 parents  commit 7dacc12

19 files changed

Lines changed: 2400 additions & 0 deletions

.gitignore

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Dependencies
2+
node_modules/
3+
package-lock.json
4+
yarn.lock
5+
pnpm-lock.yaml
6+
7+
# Build output
8+
dist/
9+
*.tsbuildinfo
10+
11+
# IDE
12+
.vscode/
13+
.idea/
14+
*.swp
15+
*.swo
16+
*~
17+
.DS_Store
18+
19+
# Test
20+
coverage/
21+
.nyc_output/
22+
23+
# Logs
24+
*.log
25+
npm-debug.log*
26+
yarn-debug.log*
27+
yarn-error.log*
28+
29+
# Environment
30+
.env
31+
.env.local
32+
.env.*.local

.prettierrc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"semi": true,
3+
"singleQuote": true,
4+
"useTabs": true,
5+
"tabWidth": 2,
6+
"printWidth": 100,
7+
"trailingComma": "es5",
8+
"bracketSpacing": true,
9+
"endOfLine": "lf",
10+
"proseWrap": "always"
11+
}

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 sqlite-wasm-easy contributors
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

PROJECT_SUMMARY.md

Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,282 @@
1+
# sqlite-wasm-easy - Project Summary
2+
3+
## Overview
4+
5+
**sqlite-wasm-easy** is a zero-configuration wrapper around `@sqlite.org/sqlite-wasm` that simplifies SQLite database usage in the browser.
6+
7+
## ✅ What We Built
8+
9+
### Core Features
10+
1. **Zero Configuration** - Works out of the box with sensible defaults
11+
2. **Fully Configurable** - VFS type, PRAGMA settings, logging options
12+
3. **TypeScript First** - Complete type safety and IntelliSense
13+
4. **Web Worker Based** - Non-blocking database operations
14+
5. **Simple API** - Only high-level methods (exec, query, run, transaction)
15+
6. **Type Hints** - `.table()` method for typed access without CRUD methods
16+
17+
### Package Structure
18+
19+
```
20+
sqlite-wasm-easy/
21+
├── src/
22+
│ ├── index.ts # Main entry point
23+
│ ├── core/
24+
│ │ ├── database.ts # Main SQLiteWASM class
25+
│ │ └── defaults.ts # Default configuration
26+
│ ├── worker/
27+
│ │ └── sqliteWorker.ts # Web Worker for SQLite operations
28+
│ ├── types/
29+
│ │ └── index.ts # All TypeScript type definitions
30+
│ └── utils/ # (Reserved for future utilities)
31+
├── dist/ # Built output
32+
│ ├── index.js # Main bundle (14.5 KB)
33+
│ ├── index.d.ts # TypeScript declarations
34+
│ └── worker/
35+
│ └── sqliteWorker.js # Worker bundle (5 KB)
36+
├── examples/
37+
│ ├── basic.html # Basic CRUD example
38+
│ └── typed-schema.html # TypeScript schema example
39+
├── package.json
40+
├── tsconfig.json
41+
├── vite.config.ts
42+
├── README.md
43+
└── LICENSE
44+
45+
Total bundle size: ~20 KB (gzipped: ~7 KB)
46+
```
47+
48+
## API Design
49+
50+
### Configuration Options
51+
52+
All aspects are configurable with sensible defaults:
53+
54+
```typescript
55+
interface SQLiteWASMConfig {
56+
filename: string;
57+
vfs?: {
58+
type?: 'opfs-sahpool' | 'opfs' | 'memdb';
59+
poolConfig?: {
60+
initialCapacity?: number; // Default: 3
61+
clearOnInit?: boolean; // Default: false
62+
name?: string; // Default: 'sqlite-wasm-pool'
63+
};
64+
};
65+
pragma?: {
66+
journal_mode?: JournalMode; // Default: 'WAL'
67+
synchronous?: SynchronousMode; // Default: 'NORMAL'
68+
temp_store?: TempStoreMode; // Default: 'MEMORY'
69+
cache_size?: number;
70+
page_size?: number;
71+
foreign_keys?: 'ON' | 'OFF';
72+
[key: string]: any; // Any custom PRAGMA
73+
};
74+
worker?: {
75+
path?: string; // Custom worker path
76+
};
77+
logging?: {
78+
filterSqlTrace?: boolean; // Default: true
79+
print?: (msg: string) => void;
80+
printErr?: (msg: string) => void;
81+
};
82+
}
83+
```
84+
85+
### Core Methods
86+
87+
Only high-level methods (no CRUD):
88+
89+
```typescript
90+
class SQLiteWASM<Schema = any> {
91+
ready(): Promise<void>
92+
exec(sql: string, params?: any[]): Promise<void>
93+
query<T>(sql: string, params?: any[]): Promise<T[]>
94+
run(sql: string, params?: any[]): Promise<RunResult>
95+
transaction(callback: (tx: Transaction) => Promise<void>): Promise<void>
96+
table<K extends keyof Schema>(name: K): TypedTable<Schema[K]>
97+
export(): Promise<Uint8Array>
98+
import(filename: string, data: Uint8Array): Promise<void>
99+
close(): Promise<void>
100+
delete(): Promise<void>
101+
}
102+
```
103+
104+
### TypedTable (Type Hints Only)
105+
106+
```typescript
107+
interface TypedTable<T> {
108+
query<R = T>(sql: string, params?: any[]): Promise<R[]>
109+
exec(sql: string, params?: any[]): Promise<void>
110+
run(sql: string, params?: any[]): Promise<RunResult>
111+
}
112+
```
113+
114+
## Usage Examples
115+
116+
### 1. Basic Usage
117+
118+
```typescript
119+
import { SQLiteWASM } from 'sqlite-wasm-easy';
120+
121+
const db = new SQLiteWASM({ filename: 'myapp.db' });
122+
await db.ready();
123+
124+
await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
125+
await db.exec('INSERT INTO users (name) VALUES (?)', ['Alice']);
126+
127+
const users = await db.query('SELECT * FROM users');
128+
```
129+
130+
### 2. Custom Configuration
131+
132+
```typescript
133+
const db = new SQLiteWASM({
134+
filename: 'myapp.db',
135+
vfs: {
136+
type: 'opfs-sahpool',
137+
poolConfig: {
138+
initialCapacity: 5,
139+
clearOnInit: false,
140+
name: 'custom-pool'
141+
}
142+
},
143+
pragma: {
144+
journal_mode: 'WAL',
145+
synchronous: 'FULL',
146+
foreign_keys: 'ON'
147+
},
148+
logging: {
149+
filterSqlTrace: true
150+
}
151+
});
152+
```
153+
154+
### 3. TypeScript Schema
155+
156+
```typescript
157+
interface Schema {
158+
users: { id: number; name: string; email: string };
159+
posts: { id: number; userId: number; title: string };
160+
}
161+
162+
const db = new SQLiteWASM<Schema>({ filename: 'app.db' });
163+
const usersTable = db.table('users');
164+
165+
// Type-safe queries
166+
const users = await usersTable.query('SELECT * FROM users');
167+
// ^? { id: number; name: string; email: string }[]
168+
```
169+
170+
### 4. Transactions
171+
172+
```typescript
173+
await db.transaction(async (tx) => {
174+
await tx.exec('INSERT INTO users (name) VALUES (?)', ['Charlie']);
175+
await tx.exec('UPDATE users SET active = 1 WHERE id = ?', [1]);
176+
});
177+
```
178+
179+
## Key Differences from Your Current Implementation
180+
181+
| Aspect | Current (Supersorted) | sqlite-wasm-easy |
182+
|--------|----------------------|------------------|
183+
| **Scope** | App-specific | General-purpose package |
184+
| **Configuration** | Hardcoded values | Fully configurable |
185+
| **Table API** | Full ORM-like (insert, update, delete, etc.) | Type hints only (query, exec, run) |
186+
| **PRAGMA** | Hardcoded (MEMORY, NORMAL) | User configurable |
187+
| **VFS** | Hardcoded opfs-sahpool | User can choose (opfs-sahpool, opfs, memdb) |
188+
| **Pool Config** | Fixed (initialCapacity: 3) | Configurable |
189+
| **Console Filtering** | Always on | Optional (configurable) |
190+
191+
## What's Configurable (vs Hardcoded Before)
192+
193+
**VFS Method** - User chooses: opfs-sahpool, opfs, or memdb
194+
**Pool Settings** - initialCapacity, clearOnInit, name
195+
**PRAGMA Settings** - journal_mode, synchronous, temp_store, cache_size, etc.
196+
**Logging** - filterSqlTrace, custom print/printErr functions
197+
**Worker Path** - Custom worker location
198+
199+
## Build & Distribution
200+
201+
### Build Output
202+
- Main bundle: `dist/index.js` (14.5 KB, gzipped: 5.5 KB)
203+
- Worker bundle: `dist/worker/sqliteWorker.js` (5 KB, gzipped: 1.6 KB)
204+
- TypeScript declarations: `dist/index.d.ts`
205+
206+
### NPM Package Structure
207+
```json
208+
{
209+
"name": "sqlite-wasm-easy",
210+
"main": "./dist/index.js",
211+
"types": "./dist/index.d.ts",
212+
"exports": {
213+
".": "./dist/index.js",
214+
"./worker": "./dist/worker/sqliteWorker.js"
215+
}
216+
}
217+
```
218+
219+
## Next Steps
220+
221+
### For Development
222+
```bash
223+
cd sqlite-wasm-easy
224+
npm install
225+
npm run build # Build the package
226+
npm run typecheck # Type checking only
227+
```
228+
229+
### For Testing
230+
1. Open `examples/basic.html` in a browser (via dev server)
231+
2. Open `examples/typed-schema.html` for TypeScript examples
232+
233+
### For Publishing
234+
```bash
235+
# Test locally first
236+
npm pack
237+
238+
# Publish to NPM (when ready)
239+
npm publish
240+
```
241+
242+
### Future Enhancements (Optional)
243+
244+
1. **Multi-tab Coordination** - Add BroadcastChannel support (from your tabCoordinator)
245+
2. **Migration Helpers** - Schema versioning utilities
246+
3. **Batch Operations** - Optimize multiple inserts
247+
4. **Query Builder** - Optional fluent query API (as separate package)
248+
5. **IndexedDB Fallback** - For browsers without OPFS support
249+
6. **React Hooks** - `useQuery`, `useMutation` helpers
250+
7. **Performance Monitoring** - Built-in query timing and logging
251+
252+
## Browser Compatibility
253+
254+
✅ Chrome/Edge 102+
255+
✅ Firefox (with OPFS support)
256+
⚠️ Safari (experimental OPFS support)
257+
258+
## Dependencies
259+
260+
**Peer Dependencies:**
261+
- `@sqlite.org/sqlite-wasm`: ^3.49.0
262+
263+
**Dev Dependencies:**
264+
- `typescript`: ^5.7.3
265+
- `vite`: ^6.1.0
266+
267+
## License
268+
269+
MIT License
270+
271+
## Notes
272+
273+
- The package is **framework-agnostic** (works with React, Vue, Svelte, vanilla JS)
274+
- No bundler configuration needed (works with Vite, Webpack, Rollup)
275+
- Fully **tree-shakeable** ES modules
276+
- **Zero runtime dependencies** (except peer dependency on @sqlite.org/sqlite-wasm)
277+
278+
---
279+
280+
**Created:** January 22, 2026
281+
**Status:** ✅ Ready for testing and publishing
282+
**Build:** ✅ Successful (TypeScript compilation and Vite bundling)

0 commit comments

Comments
 (0)