@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.
Files changed (106) hide show
  1. package/README.md +401 -0
  2. package/dist/client/hooks.d.ts +65 -0
  3. package/dist/client/hooks.d.ts.map +1 -0
  4. package/dist/client/hooks.js +339 -0
  5. package/dist/client/hooks.js.map +1 -0
  6. package/dist/client/index.d.ts +10 -0
  7. package/dist/client/index.d.ts.map +1 -0
  8. package/dist/client/index.js +37 -0
  9. package/dist/client/index.js.map +1 -0
  10. package/dist/client/manager.d.ts +137 -0
  11. package/dist/client/manager.d.ts.map +1 -0
  12. package/dist/client/manager.js +292 -0
  13. package/dist/client/manager.js.map +1 -0
  14. package/dist/client/provider.d.ts +25 -0
  15. package/dist/client/provider.d.ts.map +1 -0
  16. package/dist/client/provider.js +121 -0
  17. package/dist/client/provider.js.map +1 -0
  18. package/dist/client/revalidation.d.ts +101 -0
  19. package/dist/client/revalidation.d.ts.map +1 -0
  20. package/dist/client/revalidation.js +313 -0
  21. package/dist/client/revalidation.js.map +1 -0
  22. package/dist/client/session.d.ts +84 -0
  23. package/dist/client/session.d.ts.map +1 -0
  24. package/dist/client/session.js +186 -0
  25. package/dist/client/session.js.map +1 -0
  26. package/dist/client/sse-client.d.ts +81 -0
  27. package/dist/client/sse-client.d.ts.map +1 -0
  28. package/dist/client/sse-client.js +221 -0
  29. package/dist/client/sse-client.js.map +1 -0
  30. package/dist/client/storage.d.ts +124 -0
  31. package/dist/client/storage.d.ts.map +1 -0
  32. package/dist/client/storage.js +441 -0
  33. package/dist/client/storage.js.map +1 -0
  34. package/dist/client/trpc.d.ts +12 -0
  35. package/dist/client/trpc.d.ts.map +1 -0
  36. package/dist/client/trpc.js +36 -0
  37. package/dist/client/trpc.js.map +1 -0
  38. package/dist/client/types.d.ts +10 -0
  39. package/dist/client/types.d.ts.map +1 -0
  40. package/dist/client/types.js +3 -0
  41. package/dist/client/types.js.map +1 -0
  42. package/dist/client.d.ts +12 -0
  43. package/dist/client.d.ts.map +1 -0
  44. package/dist/client.js +26 -0
  45. package/dist/client.js.map +1 -0
  46. package/dist/config/schema.d.ts +261 -0
  47. package/dist/config/schema.d.ts.map +1 -0
  48. package/dist/config/schema.js +69 -0
  49. package/dist/config/schema.js.map +1 -0
  50. package/dist/core/analyzer.d.ts +15 -0
  51. package/dist/core/analyzer.d.ts.map +1 -0
  52. package/dist/core/analyzer.js +217 -0
  53. package/dist/core/analyzer.js.map +1 -0
  54. package/dist/core/driver.d.ts +7 -0
  55. package/dist/core/driver.d.ts.map +1 -0
  56. package/dist/core/driver.js +261 -0
  57. package/dist/core/driver.js.map +1 -0
  58. package/dist/core/function.d.ts +97 -0
  59. package/dist/core/function.d.ts.map +1 -0
  60. package/dist/core/function.js +252 -0
  61. package/dist/core/function.js.map +1 -0
  62. package/dist/core/sse.d.ts +98 -0
  63. package/dist/core/sse.d.ts.map +1 -0
  64. package/dist/core/sse.js +331 -0
  65. package/dist/core/sse.js.map +1 -0
  66. package/dist/core/types.d.ts +179 -0
  67. package/dist/core/types.d.ts.map +1 -0
  68. package/dist/core/types.js +3 -0
  69. package/dist/core/types.js.map +1 -0
  70. package/dist/examples/teamhub-integration.d.ts +56 -0
  71. package/dist/examples/teamhub-integration.d.ts.map +1 -0
  72. package/dist/examples/teamhub-integration.js +188 -0
  73. package/dist/examples/teamhub-integration.js.map +1 -0
  74. package/dist/index.d.ts +39 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +57 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/providers/localStorage.d.ts +13 -0
  79. package/dist/providers/localStorage.d.ts.map +1 -0
  80. package/dist/providers/localStorage.js +64 -0
  81. package/dist/providers/localStorage.js.map +1 -0
  82. package/dist/providers/memory.d.ts +13 -0
  83. package/dist/providers/memory.d.ts.map +1 -0
  84. package/dist/providers/memory.js +40 -0
  85. package/dist/providers/memory.js.map +1 -0
  86. package/dist/providers/redis.d.ts +14 -0
  87. package/dist/providers/redis.d.ts.map +1 -0
  88. package/dist/providers/redis.js +36 -0
  89. package/dist/providers/redis.js.map +1 -0
  90. package/dist/server.d.ts +17 -0
  91. package/dist/server.d.ts.map +1 -0
  92. package/dist/server.js +34 -0
  93. package/dist/server.js.map +1 -0
  94. package/dist/trpc/hooks.d.ts +82 -0
  95. package/dist/trpc/hooks.d.ts.map +1 -0
  96. package/dist/trpc/hooks.js +282 -0
  97. package/dist/trpc/hooks.js.map +1 -0
  98. package/dist/trpc/router.d.ts +75 -0
  99. package/dist/trpc/router.d.ts.map +1 -0
  100. package/dist/trpc/router.js +160 -0
  101. package/dist/trpc/router.js.map +1 -0
  102. package/dist/trpc/types.d.ts +105 -0
  103. package/dist/trpc/types.d.ts.map +1 -0
  104. package/dist/trpc/types.js +6 -0
  105. package/dist/trpc/types.js.map +1 -0
  106. 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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"}