@agelum/backend 0.1.0 → 0.1.2
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 +184 -113
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/storage.d.ts +3 -1
- package/dist/client/storage.d.ts.map +1 -1
- package/dist/client.d.ts +8 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/config/schema.d.ts +4 -15
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/driver.d.ts +2 -2
- package/dist/core/driver.d.ts.map +1 -1
- package/dist/core/driver.js +4 -3
- package/dist/core/driver.js.map +1 -1
- package/dist/core/function.d.ts +17 -11
- package/dist/core/function.d.ts.map +1 -1
- package/dist/core/function.js +2 -2
- package/dist/core/function.js.map +1 -1
- package/dist/core/types.d.ts +26 -9
- package/dist/core/types.d.ts.map +1 -1
- package/dist/examples/teamhub-integration.d.ts +1 -1
- package/dist/examples/teamhub-integration.d.ts.map +1 -1
- package/dist/examples/teamhub-integration.js +9 -5
- package/dist/examples/teamhub-integration.js.map +1 -1
- package/dist/index.d.ts +13 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/localStorage.d.ts +1 -1
- package/dist/providers/localStorage.d.ts.map +1 -1
- package/dist/providers/redis.d.ts +1 -1
- package/dist/providers/redis.d.ts.map +1 -1
- package/dist/server.d.ts +13 -12
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/trpc/index.d.ts +9 -0
- package/dist/trpc/index.d.ts.map +1 -0
- package/dist/trpc/index.js +19 -0
- package/dist/trpc/index.js.map +1 -0
- package/dist/trpc/router.d.ts +3 -2
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +21 -4
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/types.d.ts +21 -12
- package/dist/trpc/types.d.ts.map +1 -1
- package/package.json +13 -13
- package/dist/client/hooks.js +0 -339
- package/dist/client/hooks.js.map +0 -1
- package/dist/client/index.js +0 -37
- package/dist/client/index.js.map +0 -1
- package/dist/client/manager.js +0 -292
- package/dist/client/manager.js.map +0 -1
- package/dist/client/provider.js +0 -121
- package/dist/client/provider.js.map +0 -1
- package/dist/client/revalidation.js +0 -313
- package/dist/client/revalidation.js.map +0 -1
- package/dist/client/session.d.ts +0 -84
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -186
- package/dist/client/session.js.map +0 -1
- package/dist/client/sse-client.js +0 -221
- package/dist/client/sse-client.js.map +0 -1
- package/dist/client/storage.js +0 -441
- package/dist/client/storage.js.map +0 -1
- package/dist/client/trpc.js +0 -36
- package/dist/client/trpc.js.map +0 -1
- package/dist/client/types.d.ts +0 -10
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -3
- package/dist/client/types.js.map +0 -1
- package/dist/client.js +0 -26
- package/dist/client.js.map +0 -1
- package/dist/core/analyzer.js +0 -217
- package/dist/core/analyzer.js.map +0 -1
- package/dist/core/sse.js +0 -331
- package/dist/core/sse.js.map +0 -1
- package/dist/providers/localStorage.js +0 -64
- package/dist/providers/localStorage.js.map +0 -1
- package/dist/providers/memory.js +0 -40
- package/dist/providers/memory.js.map +0 -1
- package/dist/providers/redis.js +0 -36
- package/dist/providers/redis.js.map +0 -1
- package/dist/trpc/hooks.d.ts +0 -82
- package/dist/trpc/hooks.d.ts.map +0 -1
- package/dist/trpc/hooks.js +0 -282
- package/dist/trpc/hooks.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @agelum/backend
|
|
2
2
|
|
|
3
3
|
**Zero configuration, maximum intelligence. Reactive everywhere with no boilerplate.**
|
|
4
4
|
|
|
@@ -20,7 +20,7 @@ A reactive database library that transforms any Drizzle + tRPC setup into a reac
|
|
|
20
20
|
### Installation
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
pnpm add @
|
|
23
|
+
pnpm add @agelum/backend drizzle-orm @trpc/server @trpc/client zod
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## 📖 Core Usage Patterns
|
|
@@ -31,65 +31,91 @@ pnpm add @drizzle/reactive drizzle-orm @trpc/server @trpc/client zod
|
|
|
31
31
|
|
|
32
32
|
```typescript
|
|
33
33
|
// server/functions/users.ts
|
|
34
|
-
import { defineReactiveFunction } from
|
|
35
|
-
import { z } from
|
|
34
|
+
import { defineReactiveFunction } from "@agelum/backend/server";
|
|
35
|
+
import { z } from "zod";
|
|
36
36
|
|
|
37
37
|
// 1. Define a reactive function with explicit name
|
|
38
|
-
export const getUsers =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
dependencies: ['user'],
|
|
67
|
-
|
|
68
|
-
handler: async (input, db) => {
|
|
69
|
-
return db.db.insert(users).values(input).returning()
|
|
70
|
-
},
|
|
71
|
-
})
|
|
38
|
+
export const getUsers =
|
|
39
|
+
defineReactiveFunction({
|
|
40
|
+
name: "users.getAll", // 🔑 This becomes the cache key and tRPC procedure name
|
|
41
|
+
|
|
42
|
+
input: z.object({
|
|
43
|
+
companyId: z.string(), // Generic, not hardcoded organizationId
|
|
44
|
+
limit: z
|
|
45
|
+
.number()
|
|
46
|
+
.optional()
|
|
47
|
+
.default(50),
|
|
48
|
+
}),
|
|
49
|
+
|
|
50
|
+
dependencies: ["user"], // What tables this function reads from
|
|
51
|
+
|
|
52
|
+
handler: async (input, db) => {
|
|
53
|
+
// Clean signature: (input, db)
|
|
54
|
+
return db.db.query.users.findMany(
|
|
55
|
+
{
|
|
56
|
+
where: (users, { eq }) =>
|
|
57
|
+
eq(
|
|
58
|
+
users.companyId,
|
|
59
|
+
input.companyId,
|
|
60
|
+
),
|
|
61
|
+
limit: input.limit,
|
|
62
|
+
},
|
|
63
|
+
);
|
|
64
|
+
},
|
|
65
|
+
});
|
|
72
66
|
|
|
73
|
-
export const
|
|
74
|
-
|
|
67
|
+
export const createUser =
|
|
68
|
+
defineReactiveFunction({
|
|
69
|
+
name: "users.create",
|
|
75
70
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
71
|
+
input: z.object({
|
|
72
|
+
name: z.string(),
|
|
73
|
+
email: z.string().email(),
|
|
74
|
+
companyId: z.string(),
|
|
75
|
+
}),
|
|
79
76
|
|
|
80
|
-
|
|
77
|
+
dependencies: ["user"],
|
|
81
78
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
handler: async (input, db) => {
|
|
80
|
+
return db.db
|
|
81
|
+
.insert(users)
|
|
82
|
+
.values(input)
|
|
83
|
+
.returning();
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
export const getUserProfile =
|
|
88
|
+
defineReactiveFunction({
|
|
89
|
+
name: "users.profile.getDetailed", // 🏷️ Nested names work perfectly
|
|
90
|
+
|
|
91
|
+
input: z.object({
|
|
92
|
+
userId: z.string(),
|
|
93
|
+
}),
|
|
94
|
+
|
|
95
|
+
dependencies: [
|
|
96
|
+
"user",
|
|
97
|
+
"profile",
|
|
98
|
+
"preferences",
|
|
99
|
+
],
|
|
100
|
+
|
|
101
|
+
handler: async (input, db) => {
|
|
102
|
+
const user =
|
|
103
|
+
await db.db.query.users.findFirst(
|
|
104
|
+
{
|
|
105
|
+
where: (users, { eq }) =>
|
|
106
|
+
eq(
|
|
107
|
+
users.id,
|
|
108
|
+
input.userId,
|
|
109
|
+
),
|
|
110
|
+
with: {
|
|
111
|
+
profile: true,
|
|
112
|
+
preferences: true,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
);
|
|
116
|
+
return user;
|
|
117
|
+
},
|
|
118
|
+
});
|
|
93
119
|
```
|
|
94
120
|
|
|
95
121
|
### 2. Server-Side Execution (Without tRPC)
|
|
@@ -98,46 +124,67 @@ export const getUserProfile = defineReactiveFunction({
|
|
|
98
124
|
|
|
99
125
|
```typescript
|
|
100
126
|
// server/api/users/route.ts - Next.js API route
|
|
101
|
-
import {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
127
|
+
import {
|
|
128
|
+
getUsers,
|
|
129
|
+
createUser,
|
|
130
|
+
} from "../functions/users";
|
|
131
|
+
import { db } from "../db";
|
|
132
|
+
|
|
133
|
+
export async function GET(
|
|
134
|
+
request: Request,
|
|
135
|
+
) {
|
|
136
|
+
const { searchParams } = new URL(
|
|
137
|
+
request.url,
|
|
138
|
+
);
|
|
139
|
+
const companyId = searchParams.get(
|
|
140
|
+
"companyId",
|
|
141
|
+
)!;
|
|
107
142
|
|
|
108
143
|
// ✅ Execute reactive function directly on server
|
|
109
144
|
const users = await getUsers.execute(
|
|
110
145
|
{ companyId, limit: 20 },
|
|
111
|
-
db // Your reactive database instance
|
|
112
|
-
)
|
|
146
|
+
db, // Your reactive database instance
|
|
147
|
+
);
|
|
113
148
|
|
|
114
|
-
return Response.json({ users })
|
|
149
|
+
return Response.json({ users });
|
|
115
150
|
}
|
|
116
151
|
|
|
117
|
-
export async function POST(
|
|
118
|
-
|
|
152
|
+
export async function POST(
|
|
153
|
+
request: Request,
|
|
154
|
+
) {
|
|
155
|
+
const body = await request.json();
|
|
119
156
|
|
|
120
157
|
// ✅ Execute reactive function directly on server
|
|
121
|
-
const newUser =
|
|
158
|
+
const newUser =
|
|
159
|
+
await createUser.execute(body, db);
|
|
122
160
|
|
|
123
|
-
return Response.json({
|
|
161
|
+
return Response.json({
|
|
162
|
+
user: newUser,
|
|
163
|
+
});
|
|
124
164
|
}
|
|
125
165
|
```
|
|
126
166
|
|
|
127
167
|
```typescript
|
|
128
168
|
// server/jobs/daily-stats.ts - Background job
|
|
129
|
-
import { getUsers } from
|
|
130
|
-
import { db } from
|
|
169
|
+
import { getUsers } from "../functions/users";
|
|
170
|
+
import { db } from "../db";
|
|
131
171
|
|
|
132
172
|
export async function generateDailyStats() {
|
|
133
|
-
const companies =
|
|
173
|
+
const companies =
|
|
174
|
+
await db.db.query.companies.findMany();
|
|
134
175
|
|
|
135
176
|
for (const company of companies) {
|
|
136
177
|
// ✅ Execute reactive function in background job
|
|
137
|
-
const users =
|
|
178
|
+
const users =
|
|
179
|
+
await getUsers.execute(
|
|
180
|
+
{ companyId: company.id },
|
|
181
|
+
db,
|
|
182
|
+
);
|
|
138
183
|
|
|
139
184
|
// Process stats...
|
|
140
|
-
console.log(
|
|
185
|
+
console.log(
|
|
186
|
+
`Company ${company.name} has ${users.length} users`,
|
|
187
|
+
);
|
|
141
188
|
}
|
|
142
189
|
}
|
|
143
190
|
```
|
|
@@ -148,22 +195,28 @@ export async function generateDailyStats() {
|
|
|
148
195
|
|
|
149
196
|
```typescript
|
|
150
197
|
// server/trpc/router.ts
|
|
151
|
-
import { createReactiveRouter } from
|
|
152
|
-
import {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
198
|
+
import { createReactiveRouter } from "@agelum/backend/server";
|
|
199
|
+
import {
|
|
200
|
+
getUsers,
|
|
201
|
+
createUser,
|
|
202
|
+
getUserProfile,
|
|
203
|
+
} from "../functions/users";
|
|
204
|
+
import { db } from "../db";
|
|
205
|
+
|
|
206
|
+
export const appRouter =
|
|
207
|
+
createReactiveRouter({ db })
|
|
208
|
+
.addQuery(getUsers) // 🔄 Creates procedure: users.getAll
|
|
209
|
+
.addMutation(createUser) // 🔄 Creates procedure: users.create
|
|
210
|
+
.addQuery(getUserProfile) // 🔄 Creates procedure: users.profile.getDetailed
|
|
211
|
+
.build();
|
|
160
212
|
|
|
161
213
|
// ✅ Auto-generated procedures from function names:
|
|
162
214
|
// - users.getAll (query)
|
|
163
215
|
// - users.create (mutation)
|
|
164
216
|
// - users.profile.getDetailed (query)
|
|
165
217
|
|
|
166
|
-
export type AppRouter =
|
|
218
|
+
export type AppRouter =
|
|
219
|
+
typeof appRouter;
|
|
167
220
|
```
|
|
168
221
|
|
|
169
222
|
### 4. Client-Side Usage (React Hooks)
|
|
@@ -172,7 +225,7 @@ export type AppRouter = typeof appRouter
|
|
|
172
225
|
|
|
173
226
|
```typescript
|
|
174
227
|
// client/components/UserList.tsx
|
|
175
|
-
import { useReactive } from '@
|
|
228
|
+
import { useReactive } from '@agelum/backend/client'
|
|
176
229
|
|
|
177
230
|
function UserList({ companyId }: { companyId: string }) {
|
|
178
231
|
// ✅ Uses the function name automatically: 'users.getAll'
|
|
@@ -247,49 +300,62 @@ function CreateUserForm({ companyId }: { companyId: string }) {
|
|
|
247
300
|
|
|
248
301
|
```typescript
|
|
249
302
|
// server/db.ts
|
|
250
|
-
import { createReactiveDb } from
|
|
251
|
-
import { drizzle } from
|
|
303
|
+
import { createReactiveDb } from "@agelum/backend/server";
|
|
304
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
252
305
|
|
|
253
306
|
const config = {
|
|
254
307
|
relations: {
|
|
255
308
|
// Relations are table names (not column paths)
|
|
256
309
|
// When user table changes, invalidate these queries
|
|
257
|
-
user: [
|
|
310
|
+
user: ["profile", "preferences"],
|
|
258
311
|
|
|
259
312
|
// When profile table changes, invalidate these queries
|
|
260
|
-
profile: [
|
|
313
|
+
profile: ["user"],
|
|
261
314
|
|
|
262
315
|
// When preferences table changes, invalidate these queries
|
|
263
|
-
preferences: [
|
|
316
|
+
preferences: ["user"],
|
|
264
317
|
},
|
|
265
|
-
}
|
|
318
|
+
};
|
|
266
319
|
|
|
267
|
-
export const db = createReactiveDb(
|
|
320
|
+
export const db = createReactiveDb(
|
|
321
|
+
drizzle(pool),
|
|
322
|
+
config,
|
|
323
|
+
);
|
|
268
324
|
```
|
|
269
325
|
|
|
270
326
|
### 2. SSE Endpoint (Next.js)
|
|
271
327
|
|
|
272
328
|
```typescript
|
|
273
329
|
// app/api/events/route.ts
|
|
274
|
-
import { createSSEStream } from
|
|
275
|
-
|
|
276
|
-
export async function GET(
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
330
|
+
import { createSSEStream } from "@agelum/backend/server";
|
|
331
|
+
|
|
332
|
+
export async function GET(
|
|
333
|
+
request: Request,
|
|
334
|
+
) {
|
|
335
|
+
const { searchParams } = new URL(
|
|
336
|
+
request.url,
|
|
337
|
+
);
|
|
338
|
+
const organizationId =
|
|
339
|
+
searchParams.get("organizationId")!;
|
|
340
|
+
|
|
341
|
+
return createSSEStream(
|
|
342
|
+
organizationId,
|
|
343
|
+
);
|
|
281
344
|
}
|
|
282
345
|
```
|
|
283
346
|
|
|
284
347
|
```typescript
|
|
285
348
|
// app/api/events/ack/route.ts
|
|
286
349
|
// Required for reliable delivery: client acks invalidation events
|
|
287
|
-
import { acknowledgeEvent } from
|
|
288
|
-
|
|
289
|
-
export async function POST(
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
350
|
+
import { acknowledgeEvent } from "@agelum/backend/server";
|
|
351
|
+
|
|
352
|
+
export async function POST(
|
|
353
|
+
request: Request,
|
|
354
|
+
) {
|
|
355
|
+
const { eventId } =
|
|
356
|
+
await request.json();
|
|
357
|
+
acknowledgeEvent(eventId);
|
|
358
|
+
return Response.json({ ok: true });
|
|
293
359
|
}
|
|
294
360
|
```
|
|
295
361
|
|
|
@@ -299,7 +365,7 @@ export async function POST(request: Request) {
|
|
|
299
365
|
// client/providers/ReactiveProvider.tsx
|
|
300
366
|
// Recommended: use the built-in TrpcReactiveProvider to wire revalidation generically
|
|
301
367
|
'use client'
|
|
302
|
-
import { TrpcReactiveProvider } from '@
|
|
368
|
+
import { TrpcReactiveProvider } from '@agelum/backend/client'
|
|
303
369
|
import { createTRPCProxyClient, httpBatchLink } from '@trpc/client'
|
|
304
370
|
import type { AppRouter } from '../server/trpc'
|
|
305
371
|
import { reactiveRelations } from '@your-db-package/reactive-config'
|
|
@@ -332,7 +398,7 @@ If you use `ReactiveProvider` directly, make sure to pass a `revalidateFn` for p
|
|
|
332
398
|
- The hook composes cache keys as `name::JSON(input)`.
|
|
333
399
|
- LocalStorage is sharded per query to avoid large single entries:
|
|
334
400
|
- Index per organization: `reactive_registry_<orgId>` stores metadata (last revalidated, last server change, connection status).
|
|
335
|
-
- Per-query entry key: `@
|
|
401
|
+
- Per-query entry key: `@agelum/backend:entry:<orgId>:<hash>` stores `{ name, input, queryKey, data }`.
|
|
336
402
|
- On initial render, cached data (if present) is shown immediately; background revalidation respects a minimum time window to avoid thrashing on quick navigations/refreshes.
|
|
337
403
|
- Errors during revalidation do not overwrite existing cache (no-write-on-error), keeping previously known-good data.
|
|
338
404
|
- Real-time invalidation uses SSE with client acknowledgments and retry; no heartbeats are sent.
|
|
@@ -345,7 +411,7 @@ If you use `ReactiveProvider` directly, make sure to pass a `revalidateFn` for p
|
|
|
345
411
|
|
|
346
412
|
## 🎯 Key Benefits Over Manual Approach
|
|
347
413
|
|
|
348
|
-
| Feature | Manual tRPC | @
|
|
414
|
+
| Feature | Manual tRPC | @agelum/backend |
|
|
349
415
|
| ----------------------- | ---------------------------------- | ------------------------------- |
|
|
350
416
|
| **Function Definition** | Separate function + tRPC procedure | Single `defineReactiveFunction` |
|
|
351
417
|
| **Cache Keys** | Manual generation | Auto from function name |
|
|
@@ -360,9 +426,14 @@ If you use `ReactiveProvider` directly, make sure to pass a `revalidateFn` for p
|
|
|
360
426
|
|
|
361
427
|
```typescript
|
|
362
428
|
// If you need different tRPC names than function names
|
|
363
|
-
const router = createReactiveRouter({
|
|
364
|
-
|
|
365
|
-
|
|
429
|
+
const router = createReactiveRouter({
|
|
430
|
+
db,
|
|
431
|
+
})
|
|
432
|
+
.addQueryWithName(
|
|
433
|
+
getUsers,
|
|
434
|
+
"getAllUsers",
|
|
435
|
+
) // Custom name
|
|
436
|
+
.addQuery(getUserProfile); // Uses function name: 'users.profile.getDetailed'
|
|
366
437
|
```
|
|
367
438
|
|
|
368
439
|
### Background Revalidation
|
|
@@ -371,9 +442,9 @@ const router = createReactiveRouter({ db })
|
|
|
371
442
|
// client/hooks.ts
|
|
372
443
|
function MyComponent() {
|
|
373
444
|
useReactivePriorities([
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
])
|
|
445
|
+
"users.getAll", // High priority (visible)
|
|
446
|
+
"users.profile.getDetailed", // Medium priority (likely next)
|
|
447
|
+
]);
|
|
377
448
|
|
|
378
449
|
// Component content...
|
|
379
450
|
}
|
package/dist/client/hooks.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* React hooks for @
|
|
2
|
+
* React hooks for @agelum/backend
|
|
3
3
|
* Provides reactive data access with automatic caching and real-time updates
|
|
4
4
|
*/
|
|
5
|
-
import type { ReactiveConfig, InvalidationEvent } from
|
|
5
|
+
import type { ReactiveConfig, InvalidationEvent } from "../core/types";
|
|
6
6
|
/**
|
|
7
7
|
* Initialize the reactive client
|
|
8
8
|
* Call this once at app startup
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/client/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/client/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAkBvB;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,GAAG,CAAC,GAChB,IAAI,CA0CN;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,GAAG,EACX,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA;IACD,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAsNA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,QA2B/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,wBA0BjC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,QAwBnC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,CACR,KAAK,EAAE,iBAAiB,KACrB,IAAI,GACR,IAAI,CAgBN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,GAAG,OAAO,EACf,UAAU,GAAG,OAAO,EAEpB,QAAQ,EAAE,MAAM,GACf;IACD,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,CACP,SAAS,CAAC,EAAE,UAAU,KACnB,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,GAAG,EAAE,CACH,SAAS,EAAE,UAAU,KAClB,OAAO,CAAC,KAAK,CAAC,CAAC;CACrB,CAyFA;AAED;;GAEG;AACH,wBAAgB,qBAAqB;;;;;;EAoCpC"}
|
package/dist/client/storage.d.ts
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Client-side storage management for reactive queries
|
|
3
3
|
* Handles localStorage-based query registry and session persistence
|
|
4
4
|
*/
|
|
5
|
-
import type { QueryRegistry, HookState } from
|
|
5
|
+
import type { QueryRegistry, HookState } from "../core/types";
|
|
6
6
|
export declare class ReactiveStorage {
|
|
7
7
|
private storageKey;
|
|
8
|
+
private legacyStorageKey;
|
|
8
9
|
private indexKey;
|
|
9
10
|
private activeHooks;
|
|
10
11
|
private sessionId;
|
|
@@ -14,6 +15,7 @@ export declare class ReactiveStorage {
|
|
|
14
15
|
private getIndexKey;
|
|
15
16
|
/** Derive per-query entry key */
|
|
16
17
|
private getEntryKey;
|
|
18
|
+
private getLegacyEntryKey;
|
|
17
19
|
/** Simple 32-bit hash for stable short keys */
|
|
18
20
|
private hash;
|
|
19
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/client/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/client/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CACW;IAC7B,OAAO,CAAC,gBAAgB,CACO;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAGf;IACJ,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,EAAE,MAAM;IAYlC,mCAAmC;IACnC,OAAO,CAAC,WAAW;IAInB,iCAAiC;IACjC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,iBAAiB;IAOzB,+CAA+C;IAC/C,OAAO,CAAC,IAAI;IAaZ;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,WAAW,IAAI,aAAa,GAAG,IAAI;IA8BnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,CAAC,EAAE,GAAG,EACV,GAAG,CAAC,EAAE,MAAM,GACX,IAAI;IA4FP;;OAEG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,GACf,IAAI;IAmBP;;OAEG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,GACf,IAAI;IAoBP;;OAEG;IACH,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAClC,IAAI;IA0CP;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAC/B,IAAI,EAAE,GAAG,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB,GAAG,IAAI;IAqER;;OAEG;IACH,gBAAgB,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB;IAgDD;;OAEG;IACH,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI;IAUP;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,MAAM,GACf,IAAI;IAIP;;OAEG;IACH,cAAc,IAAI,SAAS,EAAE;IAM7B;;OAEG;IACH,wBAAwB,IAAI,SAAS,EAAE;IAOvC;;OAEG;IACH,oBAAoB,CAClB,SAAS,EAAE,OAAO,GACjB,IAAI;IAWP;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAQ9B;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAehC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,cAAc;;;;;IAKd;;OAEG;IACH,aAAa,IAAI,IAAI;IAgDrB;;OAEG;IACH,cAAc,IAAI,aAAa,GAAG,IAAI;CAGvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,GACrB,eAAe,CAIjB"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Client-only exports for @
|
|
3
|
-
* Import this with: import { ... } from '@
|
|
2
|
+
* Client-only exports for @agelum/backend
|
|
3
|
+
* Import this with: import { ... } from '@agelum/backend/client'
|
|
4
4
|
*/
|
|
5
|
-
export { ReactiveProvider, useReactiveContext } from
|
|
6
|
-
export { useReactive, useReactiveQuery, initializeReactiveClient } from
|
|
7
|
-
export { ReactiveClientManager } from
|
|
8
|
-
export { TrpcReactiveProvider, createTrpcRevalidateFn } from
|
|
9
|
-
export { LocalStorageProvider } from
|
|
10
|
-
export type { UseReactiveResult } from
|
|
5
|
+
export { ReactiveProvider, useReactiveContext, } from "./client/provider";
|
|
6
|
+
export { useReactive, useReactiveQuery, initializeReactiveClient, } from "./client/hooks";
|
|
7
|
+
export { ReactiveClientManager } from "./client/manager";
|
|
8
|
+
export { TrpcReactiveProvider, createTrpcRevalidateFn, } from "./client/trpc";
|
|
9
|
+
export { LocalStorageProvider } from "./providers/localStorage";
|
|
10
|
+
export type { UseReactiveResult } from "./client/types";
|
|
11
11
|
export declare const version = "0.1.0";
|
|
12
12
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -240,22 +240,11 @@ export declare const cacheStrategySchema: z.ZodObject<{
|
|
|
240
240
|
/**
|
|
241
241
|
* Type exports from schemas
|
|
242
242
|
*/
|
|
243
|
-
export type
|
|
244
|
-
export type
|
|
243
|
+
export type ReactiveConfigSchema = z.infer<typeof reactiveConfigSchema>;
|
|
244
|
+
export type ReactiveFunctionConfigSchema = z.infer<typeof reactiveFunctionConfigSchema>;
|
|
245
245
|
export type InvalidationRule = z.infer<typeof invalidationRuleSchema>;
|
|
246
246
|
export type CacheStrategy = z.infer<typeof cacheStrategySchema>;
|
|
247
247
|
export type RealtimeConfig = z.infer<typeof realtimeConfigSchema>;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
*/
|
|
251
|
-
export interface ReactiveFunction<TInput = any, TOutput = any> {
|
|
252
|
-
id: string;
|
|
253
|
-
input: z.ZodSchema<TInput>;
|
|
254
|
-
dependencies: string[];
|
|
255
|
-
invalidateWhen?: Record<string, (change: any) => boolean>;
|
|
256
|
-
handler: (params: {
|
|
257
|
-
input: TInput;
|
|
258
|
-
db: any;
|
|
259
|
-
}) => Promise<TOutput>;
|
|
260
|
-
}
|
|
248
|
+
export type { ReactiveFunction, ReactiveFunctionConfig, } from '../core/function';
|
|
249
|
+
export type { ReactiveConfig, } from '../core/types';
|
|
261
250
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgBjB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiBpB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI/B,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;EAMvC,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAOjC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgBjB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiBpB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI/B,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;EAMvC,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAOjC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,4BAA4B,CACpC,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,cAAc,GACf,MAAM,eAAe,CAAA"}
|
package/dist/core/driver.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { ReactiveConfig, ReactiveDb } from './types';
|
|
1
|
+
import type { ReactiveConfig, ReactiveDb, DrizzleDatabase } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Create a reactive database instance
|
|
4
4
|
* This is the main entry point for the library
|
|
5
5
|
*/
|
|
6
|
-
export declare function createReactiveDb(drizzleDb:
|
|
6
|
+
export declare function createReactiveDb<TDrizzle extends DrizzleDatabase>(drizzleDb: TDrizzle, config: ReactiveConfig): ReactiveDb<TDrizzle>;
|
|
7
7
|
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,eAAe,EAKhB,MAAM,SAAS,CAAA;AA6ShB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,eAAe,EAC/D,SAAS,EAAE,QAAQ,EACnB,MAAM,EAAE,cAAc,GACrB,UAAU,CAAC,QAAQ,CAAC,CAgBtB"}
|
package/dist/core/driver.js
CHANGED
|
@@ -37,14 +37,15 @@ class ReactiveSqlDriver {
|
|
|
37
37
|
if (this.originalDb.execute) {
|
|
38
38
|
const originalExecute = this.originalDb.execute.bind(this.originalDb);
|
|
39
39
|
this.originalDb.execute = async (query, params) => {
|
|
40
|
-
return this.interceptQuery(query, params, originalExecute);
|
|
40
|
+
return this.interceptQuery(query, params, () => originalExecute(query, params));
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
// Intercept select/insert/update/delete methods
|
|
44
44
|
const methods = ['select', 'insert', 'update', 'delete'];
|
|
45
45
|
methods.forEach((method) => {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
const dbMethod = this.originalDb[method];
|
|
47
|
+
if (dbMethod) {
|
|
48
|
+
const originalMethod = dbMethod.bind(this.originalDb);
|
|
48
49
|
this.originalDb[method] = (...args) => {
|
|
49
50
|
const queryBuilder = originalMethod(...args);
|
|
50
51
|
return this.wrapQueryBuilder(queryBuilder, method.toUpperCase());
|
package/dist/core/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":"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"}
|