@agelum/backend 0.1.2 → 0.1.3
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 +33 -5
- package/dist/client/hooks.d.ts +1 -1
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/hooks.js +343 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +6 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +15 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/manager.d.ts +4 -4
- package/dist/client/manager.d.ts.map +1 -1
- package/dist/client/manager.js +287 -0
- package/dist/client/manager.js.map +1 -0
- package/dist/client/provider.d.ts +1 -1
- package/dist/client/provider.d.ts.map +1 -1
- package/dist/client/provider.js +84 -0
- package/dist/client/provider.js.map +1 -0
- package/dist/client/revalidation.d.ts +2 -2
- package/dist/client/revalidation.d.ts.map +1 -1
- package/dist/client/revalidation.js +308 -0
- package/dist/client/revalidation.js.map +1 -0
- package/dist/client/session.d.ts +84 -0
- package/dist/client/session.d.ts.map +1 -0
- package/dist/client/session.js +180 -0
- package/dist/client/session.js.map +1 -0
- package/dist/client/sse-client.d.ts +1 -1
- package/dist/client/sse-client.d.ts.map +1 -1
- package/dist/client/sse-client.js +217 -0
- package/dist/client/sse-client.js.map +1 -0
- package/dist/client/storage.d.ts +1 -1
- package/dist/client/storage.d.ts.map +1 -1
- package/dist/client/storage.js +489 -0
- package/dist/client/storage.js.map +1 -0
- package/dist/client/trpc.js +29 -0
- package/dist/client/trpc.js.map +1 -0
- package/dist/client/types.d.ts +10 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client.d.ts +6 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +14 -0
- package/dist/client.js.map +1 -0
- package/dist/config/schema.d.ts +2 -2
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +35 -38
- package/dist/config/schema.js.map +1 -1
- package/dist/core/analyzer.d.ts +1 -1
- package/dist/core/analyzer.d.ts.map +1 -1
- package/dist/core/analyzer.js +212 -0
- package/dist/core/analyzer.js.map +1 -0
- package/dist/core/driver.d.ts +1 -1
- package/dist/core/driver.d.ts.map +1 -1
- package/dist/core/driver.js +9 -12
- package/dist/core/driver.js.map +1 -1
- package/dist/core/function.d.ts +1 -1
- package/dist/core/function.d.ts.map +1 -1
- package/dist/core/function.js +4 -11
- package/dist/core/function.js.map +1 -1
- package/dist/core/sse.d.ts +1 -1
- package/dist/core/sse.d.ts.map +1 -1
- package/dist/core/sse.js +323 -0
- package/dist/core/sse.js.map +1 -0
- package/dist/core/types.js +1 -2
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -25
- 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/localStorage.js +66 -0
- package/dist/providers/localStorage.js.map +1 -0
- package/dist/providers/memory.d.ts +1 -1
- package/dist/providers/memory.d.ts.map +1 -1
- package/dist/providers/memory.js +36 -0
- package/dist/providers/memory.js.map +1 -0
- package/dist/providers/redis.d.ts +1 -1
- package/dist/providers/redis.d.ts.map +1 -1
- package/dist/providers/redis.js +32 -0
- package/dist/providers/redis.js.map +1 -0
- package/dist/server.d.ts +11 -11
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -23
- package/dist/server.js.map +1 -1
- package/dist/trpc/hooks.d.ts +82 -0
- package/dist/trpc/hooks.d.ts.map +1 -0
- package/dist/trpc/hooks.js +276 -0
- package/dist/trpc/hooks.js.map +1 -0
- package/dist/trpc/index.d.ts +4 -4
- package/dist/trpc/index.d.ts.map +1 -1
- package/dist/trpc/index.js +2 -12
- package/dist/trpc/index.js.map +1 -1
- package/dist/trpc/router.d.ts +3 -3
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +6 -12
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/types.d.ts +2 -2
- package/dist/trpc/types.d.ts.map +1 -1
- package/dist/trpc/types.js +1 -2
- package/dist/trpc/types.js.map +1 -1
- package/package.json +21 -10
- package/dist/examples/teamhub-integration.d.ts +0 -56
- package/dist/examples/teamhub-integration.d.ts.map +0 -1
- package/dist/examples/teamhub-integration.js +0 -192
- package/dist/examples/teamhub-integration.js.map +0 -1
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ pnpm add @agelum/backend drizzle-orm @trpc/server @trpc/client zod
|
|
|
27
27
|
|
|
28
28
|
### 1. Define Reactive Functions
|
|
29
29
|
|
|
30
|
-
**Key Concept**: Reactive functions work both standalone (server-side) AND via tRPC. The `name` property is crucial for cache keys and tRPC procedures.
|
|
30
|
+
**Key Concept**: Reactive functions work both standalone (server-side) AND via tRPC. The `name` property is crucial for cache keys and tRPC procedures. Handlers receive `{ input, db }` and you can use `db.db` to access the underlying Drizzle instance inside handlers.
|
|
31
31
|
|
|
32
32
|
```typescript
|
|
33
33
|
// server/functions/users.ts
|
|
@@ -49,8 +49,8 @@ export const getUsers =
|
|
|
49
49
|
|
|
50
50
|
dependencies: ["user"], // What tables this function reads from
|
|
51
51
|
|
|
52
|
-
handler: async (input, db) => {
|
|
53
|
-
// Clean signature: (input, db)
|
|
52
|
+
handler: async ({ input, db }) => {
|
|
53
|
+
// Clean signature: ({ input, db })
|
|
54
54
|
return db.db.query.users.findMany(
|
|
55
55
|
{
|
|
56
56
|
where: (users, { eq }) =>
|
|
@@ -76,7 +76,7 @@ export const createUser =
|
|
|
76
76
|
|
|
77
77
|
dependencies: ["user"],
|
|
78
78
|
|
|
79
|
-
handler: async (input, db) => {
|
|
79
|
+
handler: async ({ input, db }) => {
|
|
80
80
|
return db.db
|
|
81
81
|
.insert(users)
|
|
82
82
|
.values(input)
|
|
@@ -98,7 +98,7 @@ export const getUserProfile =
|
|
|
98
98
|
"preferences",
|
|
99
99
|
],
|
|
100
100
|
|
|
101
|
-
handler: async (input, db) => {
|
|
101
|
+
handler: async ({ input, db }) => {
|
|
102
102
|
const user =
|
|
103
103
|
await db.db.query.users.findFirst(
|
|
104
104
|
{
|
|
@@ -118,6 +118,34 @@ export const getUserProfile =
|
|
|
118
118
|
});
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
#### Typing Notes
|
|
122
|
+
|
|
123
|
+
If you want explicit handler typing, use `ReactiveFunctionContext<TInput>` with a Zod-inferred input type:
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import type { ReactiveFunctionContext } from "@agelum/backend/server";
|
|
127
|
+
import { z } from "zod";
|
|
128
|
+
|
|
129
|
+
const getUsersInput = z.object({
|
|
130
|
+
companyId: z.string(),
|
|
131
|
+
limit: z.number().optional(),
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
type GetUsersInput = z.infer<typeof getUsersInput>;
|
|
135
|
+
|
|
136
|
+
export const getUsers = defineReactiveFunction({
|
|
137
|
+
name: "users.getAll",
|
|
138
|
+
input: getUsersInput,
|
|
139
|
+
dependencies: ["user"],
|
|
140
|
+
handler: async ({ input, db }: ReactiveFunctionContext<GetUsersInput>) => {
|
|
141
|
+
return db.db.query.users.findMany({
|
|
142
|
+
where: (users, { eq }) => eq(users.companyId, input.companyId),
|
|
143
|
+
limit: input.limit ?? 50,
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
121
149
|
### 2. Server-Side Execution (Without tRPC)
|
|
122
150
|
|
|
123
151
|
**Use Case**: Background jobs, API routes, server actions, webhooks, etc.
|
package/dist/client/hooks.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
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 "../core/types";
|
|
5
|
+
import type { ReactiveConfig, InvalidationEvent } from "../core/types.js";
|
|
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;AAYH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,
|
|
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,kBAAkB,CAAC;AAkB1B;;;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"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hooks for @agelum/backend
|
|
3
|
+
* Provides reactive data access with automatic caching and real-time updates
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useState, useCallback, useRef, } from "react";
|
|
6
|
+
import { createReactiveClientManager, } from "./manager.js";
|
|
7
|
+
// Global client manager instance
|
|
8
|
+
let globalClientManager = null;
|
|
9
|
+
/**
|
|
10
|
+
* Get or create the global client manager
|
|
11
|
+
*/
|
|
12
|
+
function getClientManager() {
|
|
13
|
+
if (!globalClientManager) {
|
|
14
|
+
throw new Error("Reactive client not initialized. Call initializeReactiveClient first.");
|
|
15
|
+
}
|
|
16
|
+
return globalClientManager;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the reactive client
|
|
20
|
+
* Call this once at app startup
|
|
21
|
+
*/
|
|
22
|
+
export function initializeReactiveClient(organizationId, config, revalidateFn) {
|
|
23
|
+
console.log("🚀 Initializing reactive client for org:", organizationId);
|
|
24
|
+
if (globalClientManager) {
|
|
25
|
+
console.log("⚠️ Client already initialized, cleaning up previous instance");
|
|
26
|
+
globalClientManager.cleanup();
|
|
27
|
+
}
|
|
28
|
+
globalClientManager =
|
|
29
|
+
createReactiveClientManager({
|
|
30
|
+
organizationId,
|
|
31
|
+
config,
|
|
32
|
+
onRevalidate: revalidateFn,
|
|
33
|
+
onInvalidation: (event) => {
|
|
34
|
+
console.log(`[ReactiveClient] Received invalidation for table: ${event.table}`);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
// Expose client manager to window for testing purposes
|
|
38
|
+
if (typeof window !== "undefined") {
|
|
39
|
+
window.__reactiveClientManager =
|
|
40
|
+
globalClientManager;
|
|
41
|
+
console.log("🔧 [ReactiveClient] Client manager exposed to window for testing");
|
|
42
|
+
}
|
|
43
|
+
console.log("✅ Reactive client initialized successfully for org:", organizationId);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Main hook for reactive data access
|
|
47
|
+
* Automatically handles caching, real-time updates, and revalidation
|
|
48
|
+
*/
|
|
49
|
+
export function useReactive(queryKey, input, options) {
|
|
50
|
+
const [data, setData] = useState(undefined);
|
|
51
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
52
|
+
const [isStale, setIsStale] = useState(false);
|
|
53
|
+
const [error, setError] = useState(null);
|
|
54
|
+
const clientManager = getClientManager();
|
|
55
|
+
const isInitialMount = useRef(true);
|
|
56
|
+
// Handle enabled option
|
|
57
|
+
const enabled = options?.enabled !== false;
|
|
58
|
+
// Compose an effective cache key that includes serialized input
|
|
59
|
+
const inputKey = typeof input === "undefined"
|
|
60
|
+
? ""
|
|
61
|
+
: `::${JSON.stringify(input)}`;
|
|
62
|
+
const effectiveKey = `${queryKey}${inputKey}`;
|
|
63
|
+
// Register this hook as active
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!enabled) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const cleanup = clientManager.registerActiveHook(effectiveKey, []);
|
|
69
|
+
return cleanup;
|
|
70
|
+
}, [
|
|
71
|
+
effectiveKey,
|
|
72
|
+
clientManager,
|
|
73
|
+
enabled,
|
|
74
|
+
]);
|
|
75
|
+
// Load data on mount and when queryKey changes
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!enabled) {
|
|
78
|
+
setIsLoading(false);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const loadData = async () => {
|
|
82
|
+
try {
|
|
83
|
+
setIsLoading(true);
|
|
84
|
+
setError(null);
|
|
85
|
+
// Check ReactiveStorage cache first (immediate display)
|
|
86
|
+
const cached = clientManager.getCachedData(effectiveKey);
|
|
87
|
+
// Reduced logging - only log cache misses
|
|
88
|
+
if (!cached) {
|
|
89
|
+
console.log(`🔍 [useReactive] Cache miss for ${queryKey}`);
|
|
90
|
+
}
|
|
91
|
+
if (cached) {
|
|
92
|
+
try {
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
const cacheAge = now -
|
|
95
|
+
cached.lastRevalidated;
|
|
96
|
+
const minRevalidationTime = 5 * 60 * 1000; // 5 minutes minimum between revalidations
|
|
97
|
+
// Reduced logging - only log when cache is stale
|
|
98
|
+
if (cached.isStale) {
|
|
99
|
+
console.log(`📊 [useReactive] Cache is stale for ${queryKey}`);
|
|
100
|
+
}
|
|
101
|
+
// Show cached data immediately
|
|
102
|
+
setData(cached.data);
|
|
103
|
+
setIsStale(cached.isStale || false);
|
|
104
|
+
// Only revalidate if cache is old enough (avoid excessive revalidation)
|
|
105
|
+
if (cacheAge >
|
|
106
|
+
minRevalidationTime) {
|
|
107
|
+
console.log(`🔄 [useReactive] Revalidating stale cache for ${queryKey}`);
|
|
108
|
+
// Trigger revalidation in background
|
|
109
|
+
clientManager
|
|
110
|
+
.revalidateQuery(effectiveKey)
|
|
111
|
+
.then((result) => {
|
|
112
|
+
if (result !== undefined) {
|
|
113
|
+
setData(result);
|
|
114
|
+
setIsStale(false);
|
|
115
|
+
// Update ReactiveStorage with fresh data
|
|
116
|
+
clientManager.registerQuery(effectiveKey, [], result);
|
|
117
|
+
// Reduced logging - only log significant updates
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
.catch((error) => {
|
|
121
|
+
console.warn(`[useReactive] Background revalidation failed:`, error);
|
|
122
|
+
// Keep showing cached data even if revalidation fails
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// Reduced logging - only log when cache is stale
|
|
127
|
+
}
|
|
128
|
+
setIsLoading(false);
|
|
129
|
+
isInitialMount.current = false;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
catch (parseError) {
|
|
133
|
+
console.warn("⚠️ Failed to parse cached data:", parseError);
|
|
134
|
+
// Continue with revalidation if cache is corrupted
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// No cache or corrupted cache - trigger immediate fetch
|
|
138
|
+
console.log(`[useReactive] No cache for ${queryKey}, fetching...`);
|
|
139
|
+
const result = await clientManager.revalidateQuery(effectiveKey);
|
|
140
|
+
if (result !== undefined) {
|
|
141
|
+
setData(result);
|
|
142
|
+
setIsStale(false);
|
|
143
|
+
// Store in ReactiveStorage for future use
|
|
144
|
+
clientManager.registerQuery(effectiveKey, [], result);
|
|
145
|
+
// Reduced logging - only log significant updates
|
|
146
|
+
}
|
|
147
|
+
setIsLoading(false);
|
|
148
|
+
isInitialMount.current = false;
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
// On error, don't register cache; surface error and keep prior cache visible
|
|
152
|
+
setError(err);
|
|
153
|
+
setIsLoading(false);
|
|
154
|
+
isInitialMount.current = false;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
loadData();
|
|
158
|
+
}, [effectiveKey, clientManager]);
|
|
159
|
+
const refetch = useCallback(async () => {
|
|
160
|
+
if (!enabled) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
setIsLoading(true);
|
|
165
|
+
setError(null);
|
|
166
|
+
// Reduced logging - only log when there are issues
|
|
167
|
+
// Trigger manual revalidation
|
|
168
|
+
await clientManager.revalidateQuery(effectiveKey);
|
|
169
|
+
// Update stale state
|
|
170
|
+
setIsStale(false);
|
|
171
|
+
setIsLoading(false);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
setError(err);
|
|
175
|
+
setIsLoading(false);
|
|
176
|
+
}
|
|
177
|
+
}, [
|
|
178
|
+
effectiveKey,
|
|
179
|
+
clientManager,
|
|
180
|
+
enabled,
|
|
181
|
+
]);
|
|
182
|
+
return {
|
|
183
|
+
data,
|
|
184
|
+
isLoading,
|
|
185
|
+
isStale,
|
|
186
|
+
error,
|
|
187
|
+
refetch,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Optional page-level priority hints for better UX
|
|
192
|
+
*/
|
|
193
|
+
export function useReactivePriorities(priorities) {
|
|
194
|
+
useEffect(() => {
|
|
195
|
+
// Reduced logging - only log when there are issues
|
|
196
|
+
// In a full implementation, this would:
|
|
197
|
+
// 1. Pre-warm cache for these queries
|
|
198
|
+
// 2. Subscribe to their invalidation events
|
|
199
|
+
// 3. Set higher revalidation priority
|
|
200
|
+
return () => {
|
|
201
|
+
// Reduced logging - only log when there are issues
|
|
202
|
+
};
|
|
203
|
+
}, [priorities.join(",")]);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Hook to get current session statistics
|
|
207
|
+
*/
|
|
208
|
+
export function useReactiveStats() {
|
|
209
|
+
const [stats, setStats] = useState(null);
|
|
210
|
+
const clientManager = getClientManager();
|
|
211
|
+
useEffect(() => {
|
|
212
|
+
const updateStats = () => {
|
|
213
|
+
setStats(clientManager.getSessionStats());
|
|
214
|
+
};
|
|
215
|
+
// Update stats immediately
|
|
216
|
+
updateStats();
|
|
217
|
+
// Update stats every 5 seconds
|
|
218
|
+
const interval = setInterval(updateStats, 5000);
|
|
219
|
+
return () => clearInterval(interval);
|
|
220
|
+
}, [clientManager]);
|
|
221
|
+
return stats;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Hook to manually trigger cache refresh
|
|
225
|
+
*/
|
|
226
|
+
export function useReactiveRefresh() {
|
|
227
|
+
const clientManager = getClientManager();
|
|
228
|
+
return useCallback(async () => {
|
|
229
|
+
// Trigger revalidation for all active queries
|
|
230
|
+
const activeHooks = clientManager.getStorageStats()
|
|
231
|
+
?.queries || {};
|
|
232
|
+
const activeQueryKeys = Object.keys(activeHooks);
|
|
233
|
+
console.log(`[useReactiveRefresh] Refreshing ${activeQueryKeys.length} active queries`);
|
|
234
|
+
// Revalidate all active queries
|
|
235
|
+
await Promise.allSettled(activeQueryKeys.map((queryKey) => clientManager.revalidateQuery(queryKey)));
|
|
236
|
+
}, [clientManager]);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Hook to get revalidation statistics and performance metrics
|
|
240
|
+
*/
|
|
241
|
+
export function useRevalidationStats() {
|
|
242
|
+
const [stats, setStats] = useState(null);
|
|
243
|
+
const clientManager = getClientManager();
|
|
244
|
+
useEffect(() => {
|
|
245
|
+
const updateStats = () => {
|
|
246
|
+
const revalidationStats = clientManager.getRevalidationStats();
|
|
247
|
+
setStats(revalidationStats);
|
|
248
|
+
};
|
|
249
|
+
updateStats();
|
|
250
|
+
const interval = setInterval(updateStats, 2000);
|
|
251
|
+
return () => clearInterval(interval);
|
|
252
|
+
}, [clientManager]);
|
|
253
|
+
return stats;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Hook to handle invalidation events
|
|
257
|
+
*/
|
|
258
|
+
export function useReactiveInvalidation(callback) {
|
|
259
|
+
const clientManager = getClientManager();
|
|
260
|
+
useEffect(() => {
|
|
261
|
+
// In a full implementation, this would subscribe to invalidation events
|
|
262
|
+
console.log("[useReactiveInvalidation] Setting up invalidation listener");
|
|
263
|
+
return () => {
|
|
264
|
+
console.log("[useReactiveInvalidation] Cleaning up invalidation listener");
|
|
265
|
+
};
|
|
266
|
+
}, [callback, clientManager]);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Hook for manual queries with dynamic parameters
|
|
270
|
+
* Unlike useReactive, this hook doesn't auto-fetch and allows changing parameters on each call
|
|
271
|
+
*/
|
|
272
|
+
export function useReactiveQuery(queryKey) {
|
|
273
|
+
const [data, setData] = useState(undefined);
|
|
274
|
+
const [error, setError] = useState(null);
|
|
275
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
276
|
+
const [lastVariables, setLastVariables,] = useState(undefined);
|
|
277
|
+
const clientManager = getClientManager();
|
|
278
|
+
const executeQuery = useCallback(async (variables) => {
|
|
279
|
+
setIsLoading(true);
|
|
280
|
+
setError(null);
|
|
281
|
+
try {
|
|
282
|
+
console.log(`[useReactiveQuery] Executing ${queryKey}`, variables);
|
|
283
|
+
// Compose cache key with variables
|
|
284
|
+
const inputKey = typeof variables ===
|
|
285
|
+
"undefined"
|
|
286
|
+
? ""
|
|
287
|
+
: `::${JSON.stringify(variables)}`;
|
|
288
|
+
const effectiveKey = `${queryKey}${inputKey}`;
|
|
289
|
+
// Execute the query through the client manager
|
|
290
|
+
const result = await clientManager.revalidateQuery(effectiveKey);
|
|
291
|
+
setData(result);
|
|
292
|
+
setLastVariables(variables);
|
|
293
|
+
console.log(`✅ [useReactiveQuery] ${queryKey} completed successfully`);
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
const error = err;
|
|
298
|
+
setError(error);
|
|
299
|
+
console.error(`❌ [useReactiveQuery] ${queryKey} failed:`, error);
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
setIsLoading(false);
|
|
304
|
+
}
|
|
305
|
+
}, [queryKey, clientManager]);
|
|
306
|
+
const refetch = useCallback(async (variables) => {
|
|
307
|
+
const varsToUse = variables || lastVariables;
|
|
308
|
+
if (!varsToUse) {
|
|
309
|
+
throw new Error("No variables provided for refetch and no previous variables stored");
|
|
310
|
+
}
|
|
311
|
+
return executeQuery(varsToUse);
|
|
312
|
+
}, [executeQuery, lastVariables]);
|
|
313
|
+
return {
|
|
314
|
+
data,
|
|
315
|
+
isLoading,
|
|
316
|
+
error,
|
|
317
|
+
refetch,
|
|
318
|
+
run: executeQuery,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Hook to get connection status
|
|
323
|
+
*/
|
|
324
|
+
export function useReactiveConnection() {
|
|
325
|
+
const [status, setStatus] = useState("disconnected");
|
|
326
|
+
const clientManager = getClientManager();
|
|
327
|
+
useEffect(() => {
|
|
328
|
+
const updateStatus = () => {
|
|
329
|
+
setStatus(clientManager.getConnectionStatus());
|
|
330
|
+
};
|
|
331
|
+
updateStatus();
|
|
332
|
+
const interval = setInterval(updateStatus, 1000);
|
|
333
|
+
return () => clearInterval(interval);
|
|
334
|
+
}, [clientManager]);
|
|
335
|
+
return {
|
|
336
|
+
status,
|
|
337
|
+
isConnected: status === "connected",
|
|
338
|
+
isConnecting: status === "connecting",
|
|
339
|
+
isDisconnected: status === "disconnected",
|
|
340
|
+
reconnect: () => clientManager.reconnectSSE(),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/client/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Client-side reactive database features
|
|
3
3
|
*/
|
|
4
|
-
export { ReactiveStorage, createReactiveStorage } from './storage';
|
|
5
|
-
export { SimpleSessionManager, createSimpleSessionManager, revalidateOnPageLoad, type SessionInfo, type QueryRegistry, type QueryRegistryEntry, } from './session';
|
|
6
|
-
export { ReactiveClientManager, createReactiveClientManager, type ReactiveManagerOptions, } from './manager';
|
|
7
|
-
export { useReactive, useReactiveQuery, useReactivePriorities, useReactiveStats, useReactiveRefresh, useReactiveInvalidation, useRevalidationStats, useReactiveConnection, initializeReactiveClient, } from './hooks';
|
|
8
|
-
export { SmartRevalidationEngine, createSmartRevalidationEngine, type RevalidationStrategy, type RevalidationOptions, type RevalidationResult, } from './revalidation';
|
|
9
|
-
export { ReactiveProvider } from './provider';
|
|
4
|
+
export { ReactiveStorage, createReactiveStorage } from './storage.js';
|
|
5
|
+
export { SimpleSessionManager, createSimpleSessionManager, revalidateOnPageLoad, type SessionInfo, type QueryRegistry, type QueryRegistryEntry, } from './session.js';
|
|
6
|
+
export { ReactiveClientManager, createReactiveClientManager, type ReactiveManagerOptions, } from './manager.js';
|
|
7
|
+
export { useReactive, useReactiveQuery, useReactivePriorities, useReactiveStats, useReactiveRefresh, useReactiveInvalidation, useRevalidationStats, useReactiveConnection, initializeReactiveClient, } from './hooks.js';
|
|
8
|
+
export { SmartRevalidationEngine, createSmartRevalidationEngine, type RevalidationStrategy, type RevalidationOptions, type RevalidationResult, } from './revalidation.js';
|
|
9
|
+
export { ReactiveProvider } from './provider.js';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side reactive database features
|
|
3
|
+
*/
|
|
4
|
+
// Storage and session management
|
|
5
|
+
export { ReactiveStorage, createReactiveStorage } from './storage.js';
|
|
6
|
+
export { SimpleSessionManager, createSimpleSessionManager, revalidateOnPageLoad, } from './session.js';
|
|
7
|
+
// Client manager
|
|
8
|
+
export { ReactiveClientManager, createReactiveClientManager, } from './manager.js';
|
|
9
|
+
// React hooks
|
|
10
|
+
export { useReactive, useReactiveQuery, useReactivePriorities, useReactiveStats, useReactiveRefresh, useReactiveInvalidation, useRevalidationStats, useReactiveConnection, initializeReactiveClient, } from './hooks.js';
|
|
11
|
+
// Smart revalidation
|
|
12
|
+
export { SmartRevalidationEngine, createSmartRevalidationEngine, } from './revalidation.js';
|
|
13
|
+
// Provider and types
|
|
14
|
+
export { ReactiveProvider } from './provider.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GAIrB,MAAM,cAAc,CAAA;AAErB,iBAAiB;AACjB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,cAAc,CAAA;AAErB,cAAc;AACd,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAEnB,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAI9B,MAAM,mBAAmB,CAAA;AAE1B,qBAAqB;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/client/manager.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Client-side reactive manager
|
|
3
3
|
* Coordinates storage, session recovery, and real-time synchronization
|
|
4
4
|
*/
|
|
5
|
-
import { type SSEClientOptions } from './sse-client';
|
|
6
|
-
import type { ReactiveConfig, InvalidationEvent } from '../core/types';
|
|
5
|
+
import { type SSEClientOptions } from './sse-client.js';
|
|
6
|
+
import type { ReactiveConfig, InvalidationEvent } from '../core/types.js';
|
|
7
7
|
export interface ReactiveManagerOptions {
|
|
8
8
|
organizationId: string;
|
|
9
9
|
config: ReactiveConfig;
|
|
@@ -66,7 +66,7 @@ export declare class ReactiveClientManager {
|
|
|
66
66
|
/**
|
|
67
67
|
* Get SSE connection statistics
|
|
68
68
|
*/
|
|
69
|
-
getSSEStats(): import("./sse-client").SSEClientStats | null;
|
|
69
|
+
getSSEStats(): import("./sse-client.js").SSEClientStats | null;
|
|
70
70
|
/**
|
|
71
71
|
* Manually reconnect SSE
|
|
72
72
|
*/
|
|
@@ -98,7 +98,7 @@ export declare class ReactiveClientManager {
|
|
|
98
98
|
/**
|
|
99
99
|
* Get storage statistics
|
|
100
100
|
*/
|
|
101
|
-
getStorageStats(): import("../core/types").QueryRegistry | null;
|
|
101
|
+
getStorageStats(): import("../core/types.js").QueryRegistry | null;
|
|
102
102
|
/**
|
|
103
103
|
* Get session statistics
|
|
104
104
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACnD,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACvC;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAoC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAoC;IAGzD,OAAO,CAAC,kBAAkB,CAAC,CAAY;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAY;gBAE7B,OAAO,EAAE,sBAAsB;IA0B3C;;OAEG;IACH,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,CAAC,EAAE,GAAG,EACV,GAAG,CAAC,EAAE,MAAM,GACX,IAAI;IAIP;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI;IASxE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM;;;;;IAI9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBrD;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,WAAW;IAIX;;OAEG;IACH,YAAY,IAAI,IAAI;IAUpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;YACW,mBAAmB;IAYjC;;OAEG;YACW,sBAAsB;IAOpC;;OAEG;IACH,mBAAmB,IAAI,WAAW,GAAG,YAAY,GAAG,cAAc;IAUlE;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAO5B;;OAEG;IACH,eAAe;IAIf;;OAEG;IACH,eAAe;;;;;;;IAIf;;OAEG;IACH,oBAAoB;;;;;;;;;IAIpB;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAEvB"}
|