@agelum/backend 0.1.0
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 +401 -0
- package/dist/client/hooks.d.ts +65 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +339 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +10 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +37 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/manager.d.ts +137 -0
- package/dist/client/manager.d.ts.map +1 -0
- package/dist/client/manager.js +292 -0
- package/dist/client/manager.js.map +1 -0
- package/dist/client/provider.d.ts +25 -0
- package/dist/client/provider.d.ts.map +1 -0
- package/dist/client/provider.js +121 -0
- package/dist/client/provider.js.map +1 -0
- package/dist/client/revalidation.d.ts +101 -0
- package/dist/client/revalidation.d.ts.map +1 -0
- package/dist/client/revalidation.js +313 -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 +186 -0
- package/dist/client/session.js.map +1 -0
- package/dist/client/sse-client.d.ts +81 -0
- package/dist/client/sse-client.d.ts.map +1 -0
- package/dist/client/sse-client.js +221 -0
- package/dist/client/sse-client.js.map +1 -0
- package/dist/client/storage.d.ts +124 -0
- package/dist/client/storage.d.ts.map +1 -0
- package/dist/client/storage.js +441 -0
- package/dist/client/storage.js.map +1 -0
- package/dist/client/trpc.d.ts +12 -0
- package/dist/client/trpc.d.ts.map +1 -0
- package/dist/client/trpc.js +36 -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 +3 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client.d.ts +12 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +26 -0
- package/dist/client.js.map +1 -0
- package/dist/config/schema.d.ts +261 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +69 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/analyzer.d.ts +15 -0
- package/dist/core/analyzer.d.ts.map +1 -0
- package/dist/core/analyzer.js +217 -0
- package/dist/core/analyzer.js.map +1 -0
- package/dist/core/driver.d.ts +7 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +261 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/function.d.ts +97 -0
- package/dist/core/function.d.ts.map +1 -0
- package/dist/core/function.js +252 -0
- package/dist/core/function.js.map +1 -0
- package/dist/core/sse.d.ts +98 -0
- package/dist/core/sse.d.ts.map +1 -0
- package/dist/core/sse.js +331 -0
- package/dist/core/sse.js.map +1 -0
- package/dist/core/types.d.ts +179 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/examples/teamhub-integration.d.ts +56 -0
- package/dist/examples/teamhub-integration.d.ts.map +1 -0
- package/dist/examples/teamhub-integration.js +188 -0
- package/dist/examples/teamhub-integration.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/localStorage.d.ts +13 -0
- package/dist/providers/localStorage.d.ts.map +1 -0
- package/dist/providers/localStorage.js +64 -0
- package/dist/providers/localStorage.js.map +1 -0
- package/dist/providers/memory.d.ts +13 -0
- package/dist/providers/memory.d.ts.map +1 -0
- package/dist/providers/memory.js +40 -0
- package/dist/providers/memory.js.map +1 -0
- package/dist/providers/redis.d.ts +14 -0
- package/dist/providers/redis.d.ts.map +1 -0
- package/dist/providers/redis.js +36 -0
- package/dist/providers/redis.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/trpc/hooks.d.ts +82 -0
- package/dist/trpc/hooks.d.ts.map +1 -0
- package/dist/trpc/hooks.js +282 -0
- package/dist/trpc/hooks.js.map +1 -0
- package/dist/trpc/router.d.ts +75 -0
- package/dist/trpc/router.d.ts.map +1 -0
- package/dist/trpc/router.js +160 -0
- package/dist/trpc/router.js.map +1 -0
- package/dist/trpc/types.d.ts +105 -0
- package/dist/trpc/types.d.ts.map +1 -0
- package/dist/trpc/types.js +6 -0
- package/dist/trpc/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hooks for tRPC reactive integration
|
|
3
|
+
* Provides useReactiveQuery, useReactiveMutation, and useReactiveSubscription
|
|
4
|
+
*/
|
|
5
|
+
import type { TRPCClientError } from '@trpc/client';
|
|
6
|
+
import type { UseReactiveResult } from '../client/types';
|
|
7
|
+
export interface UseReactiveQueryOptions<TData = unknown> {
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
refetchOnMount?: boolean;
|
|
10
|
+
refetchOnWindowFocus?: boolean;
|
|
11
|
+
retry?: number | boolean;
|
|
12
|
+
retryDelay?: number;
|
|
13
|
+
staleTime?: number;
|
|
14
|
+
cacheTime?: number;
|
|
15
|
+
onSuccess?: (data: TData) => void;
|
|
16
|
+
onError?: (error: TRPCClientError<any>) => void;
|
|
17
|
+
initialData?: TData;
|
|
18
|
+
}
|
|
19
|
+
export interface UseReactiveQueryResult<TData = unknown, TError = unknown> extends UseReactiveResult<TData> {
|
|
20
|
+
refetch: () => Promise<void>;
|
|
21
|
+
remove: () => void;
|
|
22
|
+
isFetching: boolean;
|
|
23
|
+
isRefetching: boolean;
|
|
24
|
+
dataUpdatedAt: number;
|
|
25
|
+
errorUpdatedAt: number;
|
|
26
|
+
failureCount: number;
|
|
27
|
+
}
|
|
28
|
+
export interface UseReactiveMutationOptions<TData = unknown, TVariables = unknown> {
|
|
29
|
+
onSuccess?: (data: TData, variables: TVariables) => void;
|
|
30
|
+
onError?: (error: TRPCClientError<any>, variables: TVariables) => void;
|
|
31
|
+
onSettled?: (data: TData | undefined, error: TRPCClientError<any> | null, variables: TVariables) => void;
|
|
32
|
+
retry?: number | boolean;
|
|
33
|
+
retryDelay?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface UseReactiveMutationResult<TData = unknown, TVariables = unknown> {
|
|
36
|
+
mutate: (variables: TVariables) => void;
|
|
37
|
+
mutateAsync: (variables: TVariables) => Promise<TData>;
|
|
38
|
+
reset: () => void;
|
|
39
|
+
data: TData | undefined;
|
|
40
|
+
error: TRPCClientError<any> | null;
|
|
41
|
+
isLoading: boolean;
|
|
42
|
+
isSuccess: boolean;
|
|
43
|
+
isError: boolean;
|
|
44
|
+
isIdle: boolean;
|
|
45
|
+
variables: TVariables | undefined;
|
|
46
|
+
failureCount: number;
|
|
47
|
+
}
|
|
48
|
+
export interface UseReactiveSubscriptionOptions<TData = unknown> {
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
onData?: (data: TData) => void;
|
|
51
|
+
onError?: (error: TRPCClientError<any>) => void;
|
|
52
|
+
onStarted?: () => void;
|
|
53
|
+
onStopped?: () => void;
|
|
54
|
+
}
|
|
55
|
+
export interface UseReactiveSubscriptionResult<TData = unknown> {
|
|
56
|
+
data: TData | undefined;
|
|
57
|
+
error: TRPCClientError<any> | null;
|
|
58
|
+
status: 'loading' | 'error' | 'success' | 'idle';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Hook for reactive tRPC queries with automatic caching and invalidation
|
|
62
|
+
*/
|
|
63
|
+
export declare function useReactiveQuery<TData = unknown, TVariables = unknown>(procedure: string, input?: TVariables, options?: UseReactiveQueryOptions<TData>): UseReactiveQueryResult<TData>;
|
|
64
|
+
/**
|
|
65
|
+
* Hook for reactive tRPC mutations with automatic invalidation
|
|
66
|
+
*/
|
|
67
|
+
export declare function useReactiveMutation<TData = unknown, TVariables = unknown>(procedure: string, options?: UseReactiveMutationOptions<TData, TVariables>): UseReactiveMutationResult<TData, TVariables>;
|
|
68
|
+
/**
|
|
69
|
+
* Hook for reactive tRPC subscriptions with real-time updates
|
|
70
|
+
*/
|
|
71
|
+
export declare function useReactiveSubscription<TData = unknown, TVariables = unknown>(procedure: string, input?: TVariables, options?: UseReactiveSubscriptionOptions<TData>): UseReactiveSubscriptionResult<TData>;
|
|
72
|
+
/**
|
|
73
|
+
* Hook to get reactive router statistics
|
|
74
|
+
*/
|
|
75
|
+
export declare function useReactiveRouterStats(): {
|
|
76
|
+
activeQueries: number;
|
|
77
|
+
activeMutations: number;
|
|
78
|
+
activeSubscriptions: number;
|
|
79
|
+
cacheHitRate: number;
|
|
80
|
+
lastUpdate: number;
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/trpc/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* React hooks for tRPC reactive integration
|
|
4
|
+
* Provides useReactiveQuery, useReactiveMutation, and useReactiveSubscription
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.useReactiveQuery = useReactiveQuery;
|
|
8
|
+
exports.useReactiveMutation = useReactiveMutation;
|
|
9
|
+
exports.useReactiveSubscription = useReactiveSubscription;
|
|
10
|
+
exports.useReactiveRouterStats = useReactiveRouterStats;
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
/**
|
|
13
|
+
* Hook for reactive tRPC queries with automatic caching and invalidation
|
|
14
|
+
*/
|
|
15
|
+
function useReactiveQuery(procedure, input, options = {}) {
|
|
16
|
+
const [data, setData] = (0, react_1.useState)(options.initialData);
|
|
17
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
18
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
19
|
+
const [isFetching, setIsFetching] = (0, react_1.useState)(false);
|
|
20
|
+
const [isRefetching, setIsRefetching] = (0, react_1.useState)(false);
|
|
21
|
+
const [isStale, setIsStale] = (0, react_1.useState)(false);
|
|
22
|
+
const [dataUpdatedAt, setDataUpdatedAt] = (0, react_1.useState)(0);
|
|
23
|
+
const [errorUpdatedAt, setErrorUpdatedAt] = (0, react_1.useState)(0);
|
|
24
|
+
const [failureCount, setFailureCount] = (0, react_1.useState)(0);
|
|
25
|
+
const queryKey = `${procedure}_${JSON.stringify(input)}`;
|
|
26
|
+
const enabledRef = (0, react_1.useRef)(options.enabled !== false);
|
|
27
|
+
const optionsRef = (0, react_1.useRef)(options);
|
|
28
|
+
// Update refs when options change
|
|
29
|
+
(0, react_1.useEffect)(() => {
|
|
30
|
+
enabledRef.current = options.enabled !== false;
|
|
31
|
+
optionsRef.current = options;
|
|
32
|
+
}, [options]);
|
|
33
|
+
const fetchData = (0, react_1.useCallback)(async (isRefetch = false) => {
|
|
34
|
+
if (!enabledRef.current)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
if (isRefetch) {
|
|
38
|
+
setIsRefetching(true);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
setIsLoading(true);
|
|
42
|
+
}
|
|
43
|
+
setIsFetching(true);
|
|
44
|
+
setError(null);
|
|
45
|
+
// In a real implementation, this would call the tRPC client
|
|
46
|
+
// For now, we simulate the behavior
|
|
47
|
+
console.log(`[useReactiveQuery] Fetching ${procedure}`, input);
|
|
48
|
+
// Simulate API call
|
|
49
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
50
|
+
// Simulate successful response
|
|
51
|
+
const mockData = {
|
|
52
|
+
id: '1',
|
|
53
|
+
name: 'Test Data',
|
|
54
|
+
timestamp: Date.now(),
|
|
55
|
+
procedure,
|
|
56
|
+
input,
|
|
57
|
+
};
|
|
58
|
+
setData(mockData);
|
|
59
|
+
setDataUpdatedAt(Date.now());
|
|
60
|
+
setFailureCount(0);
|
|
61
|
+
setIsStale(false);
|
|
62
|
+
optionsRef.current.onSuccess?.(mockData);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const trpcError = err;
|
|
66
|
+
setError(trpcError);
|
|
67
|
+
setErrorUpdatedAt(Date.now());
|
|
68
|
+
setFailureCount((prev) => prev + 1);
|
|
69
|
+
optionsRef.current.onError?.(trpcError);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
setIsLoading(false);
|
|
73
|
+
setIsFetching(false);
|
|
74
|
+
setIsRefetching(false);
|
|
75
|
+
}
|
|
76
|
+
}, [procedure, input]);
|
|
77
|
+
const refetch = (0, react_1.useCallback)(async () => {
|
|
78
|
+
await fetchData(true);
|
|
79
|
+
}, [fetchData]);
|
|
80
|
+
const remove = (0, react_1.useCallback)(() => {
|
|
81
|
+
setData(undefined);
|
|
82
|
+
setError(null);
|
|
83
|
+
setIsStale(false);
|
|
84
|
+
setDataUpdatedAt(0);
|
|
85
|
+
setErrorUpdatedAt(0);
|
|
86
|
+
setFailureCount(0);
|
|
87
|
+
}, []);
|
|
88
|
+
// Initial fetch
|
|
89
|
+
(0, react_1.useEffect)(() => {
|
|
90
|
+
if (enabledRef.current && options.refetchOnMount !== false) {
|
|
91
|
+
fetchData();
|
|
92
|
+
}
|
|
93
|
+
}, [fetchData, queryKey]);
|
|
94
|
+
// Handle window focus refetch
|
|
95
|
+
(0, react_1.useEffect)(() => {
|
|
96
|
+
if (options.refetchOnWindowFocus !== false) {
|
|
97
|
+
const handleFocus = () => {
|
|
98
|
+
if (enabledRef.current && data) {
|
|
99
|
+
fetchData(true);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
window.addEventListener('focus', handleFocus);
|
|
103
|
+
return () => window.removeEventListener('focus', handleFocus);
|
|
104
|
+
}
|
|
105
|
+
}, [fetchData, data, options.refetchOnWindowFocus]);
|
|
106
|
+
return {
|
|
107
|
+
data,
|
|
108
|
+
error,
|
|
109
|
+
isLoading,
|
|
110
|
+
isStale,
|
|
111
|
+
refetch,
|
|
112
|
+
remove,
|
|
113
|
+
isFetching,
|
|
114
|
+
isRefetching,
|
|
115
|
+
dataUpdatedAt,
|
|
116
|
+
errorUpdatedAt,
|
|
117
|
+
failureCount,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Hook for reactive tRPC mutations with automatic invalidation
|
|
122
|
+
*/
|
|
123
|
+
function useReactiveMutation(procedure, options = {}) {
|
|
124
|
+
const [data, setData] = (0, react_1.useState)();
|
|
125
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
126
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
127
|
+
const [variables, setVariables] = (0, react_1.useState)();
|
|
128
|
+
const [failureCount, setFailureCount] = (0, react_1.useState)(0);
|
|
129
|
+
const isSuccess = !isLoading && !error && data !== undefined;
|
|
130
|
+
const isError = !isLoading && error !== null;
|
|
131
|
+
const isIdle = !isLoading && !isSuccess && !isError;
|
|
132
|
+
const reset = (0, react_1.useCallback)(() => {
|
|
133
|
+
setData(undefined);
|
|
134
|
+
setError(null);
|
|
135
|
+
setVariables(undefined);
|
|
136
|
+
setFailureCount(0);
|
|
137
|
+
}, []);
|
|
138
|
+
const mutateAsync = (0, react_1.useCallback)(async (vars) => {
|
|
139
|
+
setIsLoading(true);
|
|
140
|
+
setVariables(vars);
|
|
141
|
+
setError(null);
|
|
142
|
+
try {
|
|
143
|
+
console.log(`[useReactiveMutation] Executing ${procedure}`, vars);
|
|
144
|
+
// Simulate API call
|
|
145
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
146
|
+
// Simulate successful response
|
|
147
|
+
const mockData = {
|
|
148
|
+
id: Math.random().toString(36),
|
|
149
|
+
success: true,
|
|
150
|
+
timestamp: Date.now(),
|
|
151
|
+
procedure,
|
|
152
|
+
input: vars,
|
|
153
|
+
};
|
|
154
|
+
setData(mockData);
|
|
155
|
+
setFailureCount(0);
|
|
156
|
+
options.onSuccess?.(mockData, vars);
|
|
157
|
+
options.onSettled?.(mockData, null, vars);
|
|
158
|
+
return mockData;
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
const trpcError = err;
|
|
162
|
+
setError(trpcError);
|
|
163
|
+
setFailureCount((prev) => prev + 1);
|
|
164
|
+
options.onError?.(trpcError, vars);
|
|
165
|
+
options.onSettled?.(undefined, trpcError, vars);
|
|
166
|
+
throw trpcError;
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
setIsLoading(false);
|
|
170
|
+
}
|
|
171
|
+
}, [procedure, options]);
|
|
172
|
+
const mutate = (0, react_1.useCallback)((vars) => {
|
|
173
|
+
mutateAsync(vars).catch(() => {
|
|
174
|
+
// Error is already handled in mutateAsync
|
|
175
|
+
});
|
|
176
|
+
}, [mutateAsync]);
|
|
177
|
+
return {
|
|
178
|
+
mutate,
|
|
179
|
+
mutateAsync,
|
|
180
|
+
reset,
|
|
181
|
+
data,
|
|
182
|
+
error,
|
|
183
|
+
isLoading,
|
|
184
|
+
isSuccess,
|
|
185
|
+
isError,
|
|
186
|
+
isIdle,
|
|
187
|
+
variables,
|
|
188
|
+
failureCount,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Hook for reactive tRPC subscriptions with real-time updates
|
|
193
|
+
*/
|
|
194
|
+
function useReactiveSubscription(procedure, input, options = {}) {
|
|
195
|
+
const [data, setData] = (0, react_1.useState)();
|
|
196
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
197
|
+
const [status, setStatus] = (0, react_1.useState)('idle');
|
|
198
|
+
const enabledRef = (0, react_1.useRef)(options.enabled !== false);
|
|
199
|
+
const optionsRef = (0, react_1.useRef)(options);
|
|
200
|
+
// Update refs when options change
|
|
201
|
+
(0, react_1.useEffect)(() => {
|
|
202
|
+
enabledRef.current = options.enabled !== false;
|
|
203
|
+
optionsRef.current = options;
|
|
204
|
+
}, [options]);
|
|
205
|
+
(0, react_1.useEffect)(() => {
|
|
206
|
+
if (!enabledRef.current)
|
|
207
|
+
return;
|
|
208
|
+
let cancelled = false;
|
|
209
|
+
let cleanup;
|
|
210
|
+
const startSubscription = async () => {
|
|
211
|
+
try {
|
|
212
|
+
setStatus('loading');
|
|
213
|
+
setError(null);
|
|
214
|
+
console.log(`[useReactiveSubscription] Starting ${procedure}`, input);
|
|
215
|
+
optionsRef.current.onStarted?.();
|
|
216
|
+
// Simulate subscription setup
|
|
217
|
+
let counter = 0;
|
|
218
|
+
const interval = setInterval(() => {
|
|
219
|
+
if (cancelled)
|
|
220
|
+
return;
|
|
221
|
+
const mockData = {
|
|
222
|
+
id: counter++,
|
|
223
|
+
value: `Update ${counter}`,
|
|
224
|
+
timestamp: Date.now(),
|
|
225
|
+
procedure,
|
|
226
|
+
input,
|
|
227
|
+
};
|
|
228
|
+
setData(mockData);
|
|
229
|
+
setStatus('success');
|
|
230
|
+
optionsRef.current.onData?.(mockData);
|
|
231
|
+
}, 2000);
|
|
232
|
+
cleanup = () => {
|
|
233
|
+
clearInterval(interval);
|
|
234
|
+
optionsRef.current.onStopped?.();
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
if (!cancelled) {
|
|
239
|
+
const trpcError = err;
|
|
240
|
+
setError(trpcError);
|
|
241
|
+
setStatus('error');
|
|
242
|
+
optionsRef.current.onError?.(trpcError);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
startSubscription();
|
|
247
|
+
return () => {
|
|
248
|
+
cancelled = true;
|
|
249
|
+
cleanup?.();
|
|
250
|
+
};
|
|
251
|
+
}, [procedure, input]);
|
|
252
|
+
return {
|
|
253
|
+
data,
|
|
254
|
+
error,
|
|
255
|
+
status,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Hook to get reactive router statistics
|
|
260
|
+
*/
|
|
261
|
+
function useReactiveRouterStats() {
|
|
262
|
+
const [stats, setStats] = (0, react_1.useState)({
|
|
263
|
+
activeQueries: 0,
|
|
264
|
+
activeMutations: 0,
|
|
265
|
+
activeSubscriptions: 0,
|
|
266
|
+
cacheHitRate: 0,
|
|
267
|
+
lastUpdate: Date.now(),
|
|
268
|
+
});
|
|
269
|
+
(0, react_1.useEffect)(() => {
|
|
270
|
+
// Simulate stats updates
|
|
271
|
+
const interval = setInterval(() => {
|
|
272
|
+
setStats((prev) => ({
|
|
273
|
+
...prev,
|
|
274
|
+
cacheHitRate: Math.random() * 100,
|
|
275
|
+
lastUpdate: Date.now(),
|
|
276
|
+
}));
|
|
277
|
+
}, 5000);
|
|
278
|
+
return () => clearInterval(interval);
|
|
279
|
+
}, []);
|
|
280
|
+
return stats;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/trpc/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple tRPC router integration for reactive functions
|
|
3
|
+
*
|
|
4
|
+
* This is just a thin wrapper that:
|
|
5
|
+
* 1. Takes reactive functions
|
|
6
|
+
* 2. Exposes them as tRPC procedures
|
|
7
|
+
* 3. That's it!
|
|
8
|
+
*
|
|
9
|
+
* All the reactive logic (caching, invalidation, etc.) is handled
|
|
10
|
+
* by the reactive functions themselves.
|
|
11
|
+
*/
|
|
12
|
+
import type { ReactiveDb } from '../core/types';
|
|
13
|
+
import type { ReactiveFunction } from '../core/function';
|
|
14
|
+
export interface ReactiveRouterConfig {
|
|
15
|
+
db: ReactiveDb;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Simple reactive tRPC router - just exposes reactive functions as tRPC procedures
|
|
19
|
+
*/
|
|
20
|
+
export declare class ReactiveRouter {
|
|
21
|
+
private t;
|
|
22
|
+
private db;
|
|
23
|
+
private procedures;
|
|
24
|
+
constructor(config: ReactiveRouterConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Add a reactive function as a tRPC query
|
|
27
|
+
* Uses the function's name automatically
|
|
28
|
+
*/
|
|
29
|
+
addQuery<TInput, TOutput>(reactiveFunction: ReactiveFunction<TInput, TOutput>): this;
|
|
30
|
+
/**
|
|
31
|
+
* Add a reactive function as a tRPC mutation
|
|
32
|
+
* Uses the function's name automatically
|
|
33
|
+
*/
|
|
34
|
+
addMutation<TInput, TOutput>(reactiveFunction: ReactiveFunction<TInput, TOutput>): this;
|
|
35
|
+
/**
|
|
36
|
+
* Add a reactive function as a tRPC query with custom name (optional override)
|
|
37
|
+
*/
|
|
38
|
+
addQueryWithName<TInput, TOutput>(name: string, reactiveFunction: ReactiveFunction<TInput, TOutput>): this;
|
|
39
|
+
/**
|
|
40
|
+
* Add a reactive function as a tRPC mutation with custom name (optional override)
|
|
41
|
+
*/
|
|
42
|
+
addMutationWithName<TInput, TOutput>(name: string, reactiveFunction: ReactiveFunction<TInput, TOutput>): this;
|
|
43
|
+
/**
|
|
44
|
+
* Build the final tRPC router
|
|
45
|
+
*/
|
|
46
|
+
build(): import("@trpc/server").CreateRouterInner<import("@trpc/server").RootConfig<{
|
|
47
|
+
ctx: object;
|
|
48
|
+
meta: object;
|
|
49
|
+
errorShape: import("@trpc/server").DefaultErrorShape;
|
|
50
|
+
transformer: import("@trpc/server").DefaultDataTransformer;
|
|
51
|
+
}>, Record<string, any>>;
|
|
52
|
+
/**
|
|
53
|
+
* Get registered procedure names
|
|
54
|
+
*/
|
|
55
|
+
getProcedureNames(): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Get router statistics
|
|
58
|
+
*/
|
|
59
|
+
getStats(): {
|
|
60
|
+
totalProcedures: number;
|
|
61
|
+
procedureNames: string[];
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a reactive tRPC router (simple factory function)
|
|
66
|
+
*/
|
|
67
|
+
export declare function createReactiveRouter(config: ReactiveRouterConfig): ReactiveRouter;
|
|
68
|
+
/**
|
|
69
|
+
* Helper to create a router from a collection of reactive functions
|
|
70
|
+
*/
|
|
71
|
+
export declare function createRouterFromFunctions(db: ReactiveDb, functions: Record<string, {
|
|
72
|
+
type: 'query' | 'mutation';
|
|
73
|
+
fn: ReactiveFunction;
|
|
74
|
+
}>): ReactiveRouter;
|
|
75
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/trpc/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,UAAU,CAAA;CACf;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,CAAC,CAAoC;IAC7C,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,UAAU,CAAyB;gBAE/B,MAAM,EAAE,oBAAoB;IAKxC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,EACtB,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAWrD;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,OAAO,EACzB,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAWrD;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAC9B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAUrD;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,OAAO,EACjC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAUrD;;OAEG;IACH,KAAK;;;;;;IAwCL;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,QAAQ;;;;CAMT;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,CACf,MAAM,EACN;IAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAAC,EAAE,EAAE,gBAAgB,CAAA;CAAE,CACrD,GACA,cAAc,CAsBhB"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simple tRPC router integration for reactive functions
|
|
4
|
+
*
|
|
5
|
+
* This is just a thin wrapper that:
|
|
6
|
+
* 1. Takes reactive functions
|
|
7
|
+
* 2. Exposes them as tRPC procedures
|
|
8
|
+
* 3. That's it!
|
|
9
|
+
*
|
|
10
|
+
* All the reactive logic (caching, invalidation, etc.) is handled
|
|
11
|
+
* by the reactive functions themselves.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ReactiveRouter = void 0;
|
|
15
|
+
exports.createReactiveRouter = createReactiveRouter;
|
|
16
|
+
exports.createRouterFromFunctions = createRouterFromFunctions;
|
|
17
|
+
const server_1 = require("@trpc/server");
|
|
18
|
+
/**
|
|
19
|
+
* Simple reactive tRPC router - just exposes reactive functions as tRPC procedures
|
|
20
|
+
*/
|
|
21
|
+
class ReactiveRouter {
|
|
22
|
+
t;
|
|
23
|
+
db;
|
|
24
|
+
procedures = new Map();
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.db = config.db;
|
|
27
|
+
this.t = server_1.initTRPC.context().create();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Add a reactive function as a tRPC query
|
|
31
|
+
* Uses the function's name automatically
|
|
32
|
+
*/
|
|
33
|
+
addQuery(reactiveFunction) {
|
|
34
|
+
const name = reactiveFunction.config.name;
|
|
35
|
+
const procedure = this.t.procedure
|
|
36
|
+
.input(reactiveFunction.config.input)
|
|
37
|
+
.query(reactiveFunction.getTrpcHandler(this.db));
|
|
38
|
+
this.procedures.set(name, procedure);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Add a reactive function as a tRPC mutation
|
|
43
|
+
* Uses the function's name automatically
|
|
44
|
+
*/
|
|
45
|
+
addMutation(reactiveFunction) {
|
|
46
|
+
const name = reactiveFunction.config.name;
|
|
47
|
+
const procedure = this.t.procedure
|
|
48
|
+
.input(reactiveFunction.config.input)
|
|
49
|
+
.mutation(reactiveFunction.getTrpcHandler(this.db));
|
|
50
|
+
this.procedures.set(name, procedure);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Add a reactive function as a tRPC query with custom name (optional override)
|
|
55
|
+
*/
|
|
56
|
+
addQueryWithName(name, reactiveFunction) {
|
|
57
|
+
const procedure = this.t.procedure
|
|
58
|
+
.input(reactiveFunction.config.input)
|
|
59
|
+
.query(reactiveFunction.getTrpcHandler(this.db));
|
|
60
|
+
this.procedures.set(name, procedure);
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Add a reactive function as a tRPC mutation with custom name (optional override)
|
|
65
|
+
*/
|
|
66
|
+
addMutationWithName(name, reactiveFunction) {
|
|
67
|
+
const procedure = this.t.procedure
|
|
68
|
+
.input(reactiveFunction.config.input)
|
|
69
|
+
.mutation(reactiveFunction.getTrpcHandler(this.db));
|
|
70
|
+
this.procedures.set(name, procedure);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build the final tRPC router
|
|
75
|
+
*/
|
|
76
|
+
build() {
|
|
77
|
+
const routerObj = {};
|
|
78
|
+
for (const [name, procedure] of this.procedures) {
|
|
79
|
+
// Support nested router structure (e.g., 'users.getAll' -> { users: { getAll: procedure } })
|
|
80
|
+
const parts = name.split('.');
|
|
81
|
+
let current = routerObj;
|
|
82
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
83
|
+
if (!current[parts[i]]) {
|
|
84
|
+
current[parts[i]] = {};
|
|
85
|
+
}
|
|
86
|
+
current = current[parts[i]];
|
|
87
|
+
}
|
|
88
|
+
current[parts[parts.length - 1]] = procedure;
|
|
89
|
+
}
|
|
90
|
+
// Recursively wrap nested objects into tRPC routers
|
|
91
|
+
const wrapRouters = (node) => {
|
|
92
|
+
const entries = Object.entries(node);
|
|
93
|
+
const built = {};
|
|
94
|
+
for (const [key, value] of entries) {
|
|
95
|
+
// Heuristic: a procedure in tRPC has a _def property; nested routers won't
|
|
96
|
+
const isProcedure = value && typeof value === 'object' && '_def' in value;
|
|
97
|
+
if (!isProcedure && value && typeof value === 'object') {
|
|
98
|
+
// Nested group: wrap its children first, then create a router
|
|
99
|
+
built[key] = this.t.router(wrapRouters(value));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
built[key] = value;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return built;
|
|
106
|
+
};
|
|
107
|
+
const normalized = wrapRouters(routerObj);
|
|
108
|
+
return this.t.router(normalized);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get registered procedure names
|
|
112
|
+
*/
|
|
113
|
+
getProcedureNames() {
|
|
114
|
+
return Array.from(this.procedures.keys());
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get router statistics
|
|
118
|
+
*/
|
|
119
|
+
getStats() {
|
|
120
|
+
return {
|
|
121
|
+
totalProcedures: this.procedures.size,
|
|
122
|
+
procedureNames: this.getProcedureNames(),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.ReactiveRouter = ReactiveRouter;
|
|
127
|
+
/**
|
|
128
|
+
* Create a reactive tRPC router (simple factory function)
|
|
129
|
+
*/
|
|
130
|
+
function createReactiveRouter(config) {
|
|
131
|
+
return new ReactiveRouter(config);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Helper to create a router from a collection of reactive functions
|
|
135
|
+
*/
|
|
136
|
+
function createRouterFromFunctions(db, functions) {
|
|
137
|
+
const router = createReactiveRouter({ db });
|
|
138
|
+
for (const [name, { type, fn }] of Object.entries(functions)) {
|
|
139
|
+
if (type === 'query') {
|
|
140
|
+
// Use custom name if provided, otherwise use function's name
|
|
141
|
+
if (name !== fn.config.name) {
|
|
142
|
+
router.addQueryWithName(name, fn);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
router.addQuery(fn);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Use custom name if provided, otherwise use function's name
|
|
150
|
+
if (name !== fn.config.name) {
|
|
151
|
+
router.addMutationWithName(name, fn);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
router.addMutation(fn);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return router;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/trpc/router.ts"],"names":[],"mappings":"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"}
|