@promakeai/dbreact 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +633 -0
- package/SKILL.md +311 -0
- package/dist/adapters/RestAdapter.d.ts.map +1 -0
- package/dist/adapters/SqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/SqliteAdapter.js +543 -0
- package/dist/core/DataManager.d.ts.map +1 -0
- package/dist/hooks/useDataManager.d.ts.map +1 -0
- package/dist/hooks/useDbHooks.d.ts.map +1 -0
- package/dist/hooks/useDbHooks.js +157 -0
- package/dist/hooks/useDbLang.d.ts.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +648 -0
- package/dist/providers/DbProvider.d.ts.map +1 -0
- package/dist/providers/DbProvider.js +134 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/utils/whereBuilder.d.ts.map +1 -0
- package/package.json +54 -0
- package/providers/DbProvider.tsx +191 -0
package/SKILL.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dbreact
|
|
3
|
+
description: |
|
|
4
|
+
React hooks and providers for schema-driven multi-language databases (@promakeai/dbreact).
|
|
5
|
+
Use when: integrating React apps with SQLite database, using DbProvider setup,
|
|
6
|
+
data hooks (useDbList, useDbGet, useDbCreate, useDbUpdate, useDbDelete),
|
|
7
|
+
language switching (useDbLang), SqliteAdapter for browser, React Query patterns,
|
|
8
|
+
or any @promakeai/dbreact task.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# dbreact - React Database Integration
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @promakeai/dbreact @promakeai/orm @tanstack/react-query sql.js
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Peer dependencies: `react >= 18`, `react-dom >= 18`, `@tanstack/react-query >= 5`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Quick Setup
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { DbProvider, SqliteAdapter, parseJSONSchema } from '@promakeai/dbreact';
|
|
27
|
+
import schema from './db/schema.json';
|
|
28
|
+
|
|
29
|
+
const adapter = new SqliteAdapter({
|
|
30
|
+
storageKey: 'myapp',
|
|
31
|
+
schema: parseJSONSchema(schema),
|
|
32
|
+
defaultLang: 'en',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
function App() {
|
|
36
|
+
return (
|
|
37
|
+
<DbProvider adapter={adapter} lang="en" fallbackLang="en">
|
|
38
|
+
<YourApp />
|
|
39
|
+
</DbProvider>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## DbProvider Props
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
interface DbProviderProps {
|
|
50
|
+
adapter: IDataAdapter; // Required: SqliteAdapter instance
|
|
51
|
+
lang?: string; // Current language (default: 'en')
|
|
52
|
+
fallbackLang?: string; // Fallback if translation missing (default: 'en')
|
|
53
|
+
autoConnect?: boolean; // Auto-connect on mount (default: true)
|
|
54
|
+
queryClient?: QueryClient; // Custom React Query client (optional)
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Language changes automatically invalidate all queries and refetch with new language.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## SqliteAdapter Config
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
const adapter = new SqliteAdapter({
|
|
66
|
+
storageKey: 'myapp', // localStorage key
|
|
67
|
+
schema: parsedSchema, // For translation support
|
|
68
|
+
defaultLang: 'en', // Default language
|
|
69
|
+
initialData?: Uint8Array, // Seed with existing DB
|
|
70
|
+
wasmPath?: string, // Custom sql.js WASM path
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Loading Existing Database
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
// Load from base64 file
|
|
78
|
+
const response = await fetch('/app.db.b64');
|
|
79
|
+
const base64 = await response.text();
|
|
80
|
+
const bytes = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
|
|
81
|
+
|
|
82
|
+
const adapter = new SqliteAdapter({
|
|
83
|
+
storageKey: 'myapp',
|
|
84
|
+
initialData: bytes,
|
|
85
|
+
schema: parseJSONSchema(schema),
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Data Hooks
|
|
92
|
+
|
|
93
|
+
### useDbList<T>(table, options?)
|
|
94
|
+
|
|
95
|
+
Query multiple records.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
interface ListOptions {
|
|
99
|
+
where?: Record<string, unknown>; // MongoDB-style filter
|
|
100
|
+
orderBy?: Array<{ field: string; direction: 'ASC' | 'DESC' }>;
|
|
101
|
+
limit?: number;
|
|
102
|
+
offset?: number;
|
|
103
|
+
enabled?: boolean; // Conditional query
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function ProductList() {
|
|
107
|
+
const { data, isLoading, error } = useDbList<Product>('products', {
|
|
108
|
+
where: { stock: { $gt: 0 } },
|
|
109
|
+
orderBy: [{ field: 'name', direction: 'ASC' }],
|
|
110
|
+
limit: 10,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (isLoading) return <div>Loading...</div>;
|
|
114
|
+
if (error) return <div>Error: {error.message}</div>;
|
|
115
|
+
|
|
116
|
+
return <ul>{data?.map(p => <li key={p.id}>{p.name}</li>)}</ul>;
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### useDbGet<T>(table, id, options?)
|
|
121
|
+
|
|
122
|
+
Fetch single record by ID.
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
function ProductDetail({ id }: { id: number }) {
|
|
126
|
+
const { data: product, isLoading } = useDbGet<Product>('products', id);
|
|
127
|
+
|
|
128
|
+
if (isLoading) return <div>Loading...</div>;
|
|
129
|
+
if (!product) return <div>Not found</div>;
|
|
130
|
+
|
|
131
|
+
return <div>{product.name} - ${product.price}</div>;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### useDbCreate<T>(table)
|
|
136
|
+
|
|
137
|
+
Create new record.
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
function CreateProduct() {
|
|
141
|
+
const mutation = useDbCreate<Product>('products');
|
|
142
|
+
|
|
143
|
+
const handleCreate = () => {
|
|
144
|
+
mutation.mutate({ name: 'New Product', price: 99 });
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<button onClick={handleCreate} disabled={mutation.isPending}>
|
|
149
|
+
{mutation.isPending ? 'Creating...' : 'Create'}
|
|
150
|
+
</button>
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### useDbUpdate<T>(table)
|
|
156
|
+
|
|
157
|
+
Update existing record.
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
function EditProduct({ id }: { id: number }) {
|
|
161
|
+
const mutation = useDbUpdate<Product>('products');
|
|
162
|
+
|
|
163
|
+
const handleUpdate = () => {
|
|
164
|
+
mutation.mutate({ id, data: { price: 149 } });
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
return <button onClick={handleUpdate}>Update Price</button>;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### useDbDelete(table)
|
|
172
|
+
|
|
173
|
+
Delete record by ID.
|
|
174
|
+
|
|
175
|
+
```tsx
|
|
176
|
+
function DeleteProduct({ id }: { id: number }) {
|
|
177
|
+
const mutation = useDbDelete('products');
|
|
178
|
+
|
|
179
|
+
return (
|
|
180
|
+
<button onClick={() => mutation.mutate(id)}>
|
|
181
|
+
{mutation.isPending ? 'Deleting...' : 'Delete'}
|
|
182
|
+
</button>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Language Hook
|
|
190
|
+
|
|
191
|
+
### useDbLang()
|
|
192
|
+
|
|
193
|
+
Access and change current language.
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
function LanguageSwitcher() {
|
|
197
|
+
const { lang, setLang } = useDbLang();
|
|
198
|
+
|
|
199
|
+
return (
|
|
200
|
+
<select value={lang} onChange={(e) => setLang(e.target.value)}>
|
|
201
|
+
<option value="en">English</option>
|
|
202
|
+
<option value="tr">Turkish</option>
|
|
203
|
+
<option value="de">German</option>
|
|
204
|
+
</select>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
When `setLang()` is called:
|
|
210
|
+
1. Provider state updates
|
|
211
|
+
2. All queries invalidated
|
|
212
|
+
3. Queries refetch with new language
|
|
213
|
+
4. UI updates automatically
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Context Hooks
|
|
218
|
+
|
|
219
|
+
### useDb()
|
|
220
|
+
|
|
221
|
+
Access connection state.
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
const { adapter, isConnected, error } = useDb();
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### useAdapter()
|
|
228
|
+
|
|
229
|
+
Direct adapter access for advanced operations.
|
|
230
|
+
|
|
231
|
+
```tsx
|
|
232
|
+
const adapter = useAdapter();
|
|
233
|
+
await adapter.createWithTranslations('products', data, translations);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Query Operators
|
|
239
|
+
|
|
240
|
+
Same MongoDB-style operators as dbcli:
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
useDbList('products', {
|
|
244
|
+
where: {
|
|
245
|
+
$and: [
|
|
246
|
+
{ price: { $between: [50, 500] } },
|
|
247
|
+
{ stock: { $gt: 0 } },
|
|
248
|
+
{ categoryId: { $in: [1, 5, 10] } },
|
|
249
|
+
{ $or: [{ active: true }, { featured: true }] }
|
|
250
|
+
]
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Operators: `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$like`, `$notLike`, `$between`, `$isNull`, `$and`, `$or`, `$nor`, `$not`
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Type Definitions
|
|
260
|
+
|
|
261
|
+
Use generated types from `dbcli generate`:
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
// src/db/types.ts (generated)
|
|
265
|
+
export interface DbProduct {
|
|
266
|
+
id: number;
|
|
267
|
+
name: string;
|
|
268
|
+
price: number;
|
|
269
|
+
stock: number;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Usage
|
|
273
|
+
const { data } = useDbList<DbProduct>('products');
|
|
274
|
+
const mutation = useDbCreate<DbProduct>('products');
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Best Practices
|
|
280
|
+
|
|
281
|
+
1. **Single DbProvider at root** - Don't nest providers
|
|
282
|
+
2. **Use generated types** - Type safety with `DbXxx` interfaces
|
|
283
|
+
3. **Conditional queries** - Use `enabled: false` to prevent unwanted fetches
|
|
284
|
+
4. **Handle all states** - Check `isLoading`, `error`, and empty data
|
|
285
|
+
5. **Language via hook** - Use `setLang()` not prop changes for proper invalidation
|
|
286
|
+
6. **Batch with adapter** - Use `adapter.createMany()` for bulk operations
|
|
287
|
+
7. **Check connection** - Use `useDb().isConnected` before critical operations
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Exports
|
|
292
|
+
|
|
293
|
+
```tsx
|
|
294
|
+
// Provider & Context
|
|
295
|
+
export { DbProvider, useDb, useAdapter, useDbLang };
|
|
296
|
+
|
|
297
|
+
// Data Hooks
|
|
298
|
+
export { useDbList, useDbGet, useDbCreate, useDbUpdate, useDbDelete };
|
|
299
|
+
|
|
300
|
+
// Adapter
|
|
301
|
+
export { SqliteAdapter };
|
|
302
|
+
|
|
303
|
+
// Schema
|
|
304
|
+
export { parseJSONSchema, defineSchema, f };
|
|
305
|
+
|
|
306
|
+
// Query Utilities
|
|
307
|
+
export { buildWhereClause };
|
|
308
|
+
|
|
309
|
+
// Types
|
|
310
|
+
export type { DbProviderConfig, DbContextValue, DbLangContextValue, ListOptions };
|
|
311
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestAdapter.d.ts","sourceRoot":"","sources":["../../adapters/RestAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteAdapter.d.ts","sourceRoot":"","sources":["../../adapters/SqliteAdapter.ts"],"names":[],"mappings":"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"}
|