@agelum/backend 0.1.3 → 0.1.4
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 +107 -16
- package/dist/config/schema.d.ts +79 -16
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +7 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/driver.d.ts +1 -1
- package/dist/core/driver.d.ts.map +1 -1
- package/dist/core/driver.js +134 -40
- package/dist/core/driver.js.map +1 -1
- package/dist/core/function.d.ts +14 -3
- package/dist/core/function.d.ts.map +1 -1
- package/dist/core/function.js +72 -24
- package/dist/core/function.js.map +1 -1
- package/dist/core/types.d.ts +48 -8
- package/dist/core/types.d.ts.map +1 -1
- package/dist/providers/redis.d.ts +8 -2
- package/dist/providers/redis.d.ts.map +1 -1
- package/dist/providers/redis.js +57 -15
- package/dist/providers/redis.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +11 -10
package/dist/core/driver.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { analyzeSql } from
|
|
2
|
-
import { MemoryProvider } from
|
|
3
|
-
import { RedisProvider } from
|
|
4
|
-
import { broadcastInvalidation } from
|
|
1
|
+
import { analyzeSql } from "./analyzer.js";
|
|
2
|
+
import { MemoryProvider } from "../providers/memory.js";
|
|
3
|
+
import { RedisProvider } from "../providers/redis.js";
|
|
4
|
+
import { broadcastInvalidation } from "./sse.js";
|
|
5
5
|
/**
|
|
6
6
|
* Reactive SQL driver that intercepts all Drizzle operations
|
|
7
7
|
*/
|
|
@@ -15,16 +15,19 @@ class ReactiveSqlDriver {
|
|
|
15
15
|
this.originalDb = originalDb;
|
|
16
16
|
this.config = config;
|
|
17
17
|
// Initialize cache provider based on config
|
|
18
|
-
this.cache =
|
|
18
|
+
this.cache =
|
|
19
|
+
this.initializeCacheProvider();
|
|
19
20
|
// Wrap the original database methods
|
|
20
21
|
this.wrapDrizzleMethods();
|
|
21
22
|
}
|
|
22
23
|
initializeCacheProvider() {
|
|
23
|
-
const provider = this.config.cache?.server
|
|
24
|
+
const provider = this.config.cache?.server
|
|
25
|
+
?.provider || "memory";
|
|
24
26
|
switch (provider) {
|
|
25
|
-
case
|
|
26
|
-
return new RedisProvider(
|
|
27
|
-
|
|
27
|
+
case "redis":
|
|
28
|
+
return new RedisProvider(this.config.cache?.server
|
|
29
|
+
?.redis);
|
|
30
|
+
case "memory":
|
|
28
31
|
default:
|
|
29
32
|
return new MemoryProvider();
|
|
30
33
|
}
|
|
@@ -33,16 +36,24 @@ class ReactiveSqlDriver {
|
|
|
33
36
|
// Intercept the execute method which is the core SQL execution point
|
|
34
37
|
if (this.originalDb.execute) {
|
|
35
38
|
const originalExecute = this.originalDb.execute.bind(this.originalDb);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
this.originalDb.execute =
|
|
41
|
+
async (query, params) => {
|
|
42
|
+
return this.interceptQuery(query, params, () => originalExecute(query, params));
|
|
43
|
+
};
|
|
39
44
|
}
|
|
40
45
|
// Intercept select/insert/update/delete methods
|
|
41
|
-
const methods = [
|
|
46
|
+
const methods = [
|
|
47
|
+
"select",
|
|
48
|
+
"insert",
|
|
49
|
+
"update",
|
|
50
|
+
"delete",
|
|
51
|
+
];
|
|
42
52
|
methods.forEach((method) => {
|
|
43
53
|
const dbMethod = this.originalDb[method];
|
|
44
54
|
if (dbMethod) {
|
|
45
55
|
const originalMethod = dbMethod.bind(this.originalDb);
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
57
|
this.originalDb[method] = (...args) => {
|
|
47
58
|
const queryBuilder = originalMethod(...args);
|
|
48
59
|
return this.wrapQueryBuilder(queryBuilder, method.toUpperCase());
|
|
@@ -54,33 +65,48 @@ class ReactiveSqlDriver {
|
|
|
54
65
|
// Wrap query execution methods
|
|
55
66
|
if (queryBuilder.execute) {
|
|
56
67
|
const originalExecute = queryBuilder.execute.bind(queryBuilder);
|
|
57
|
-
queryBuilder.execute =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
queryBuilder.execute =
|
|
69
|
+
async () => {
|
|
70
|
+
const sql = queryBuilder.toSQL?.() || {
|
|
71
|
+
sql: "unknown",
|
|
72
|
+
params: [],
|
|
73
|
+
};
|
|
74
|
+
return this.interceptQuery(sql, sql.params, originalExecute);
|
|
75
|
+
};
|
|
61
76
|
}
|
|
62
77
|
// Wrap other execution methods like .all(), .get(), etc.
|
|
63
|
-
const execMethods = [
|
|
78
|
+
const execMethods = [
|
|
79
|
+
"all",
|
|
80
|
+
"get",
|
|
81
|
+
"run",
|
|
82
|
+
"values",
|
|
83
|
+
];
|
|
64
84
|
execMethods.forEach((method) => {
|
|
65
85
|
if (queryBuilder[method]) {
|
|
66
86
|
const originalMethod = queryBuilder[method].bind(queryBuilder);
|
|
67
|
-
queryBuilder[method] =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
87
|
+
queryBuilder[method] =
|
|
88
|
+
async () => {
|
|
89
|
+
const sql = queryBuilder.toSQL?.() || {
|
|
90
|
+
sql: "unknown",
|
|
91
|
+
params: [],
|
|
92
|
+
};
|
|
93
|
+
return this.interceptQuery(sql, sql.params, originalMethod);
|
|
94
|
+
};
|
|
71
95
|
}
|
|
72
96
|
});
|
|
73
97
|
return queryBuilder;
|
|
74
98
|
}
|
|
75
99
|
async interceptQuery(query, params = [], originalExecute) {
|
|
76
100
|
// Extract SQL string from query object or use directly
|
|
77
|
-
const sqlString = typeof query ===
|
|
101
|
+
const sqlString = typeof query === "string"
|
|
102
|
+
? query
|
|
103
|
+
: query.sql || "unknown";
|
|
78
104
|
const queryParams = params || query.params || [];
|
|
79
105
|
// Analyze the SQL to understand what it does
|
|
80
106
|
const analysis = analyzeSql(sqlString, queryParams);
|
|
81
107
|
const cacheKey = this.generateCacheKey(analysis, queryParams);
|
|
82
108
|
// Handle SELECT queries with caching
|
|
83
|
-
if (analysis.operation ===
|
|
109
|
+
if (analysis.operation === "SELECT") {
|
|
84
110
|
return this.handleSelectQuery(analysis, cacheKey, originalExecute);
|
|
85
111
|
}
|
|
86
112
|
// Handle mutations (INSERT/UPDATE/DELETE) with invalidation
|
|
@@ -94,7 +120,7 @@ class ReactiveSqlDriver {
|
|
|
94
120
|
JSON.stringify(analysis.whereKeys.sort()),
|
|
95
121
|
JSON.stringify(params),
|
|
96
122
|
];
|
|
97
|
-
return keyParts.join(
|
|
123
|
+
return keyParts.join(":");
|
|
98
124
|
}
|
|
99
125
|
async handleSelectQuery(analysis, cacheKey, originalExecute) {
|
|
100
126
|
// Try to get from cache first
|
|
@@ -131,11 +157,15 @@ class ReactiveSqlDriver {
|
|
|
131
157
|
}
|
|
132
158
|
async invalidateRelatedQueries(analysis) {
|
|
133
159
|
const { table } = analysis;
|
|
134
|
-
const relatedTables = this.config.relations[table] ||
|
|
160
|
+
const relatedTables = this.config.relations[table] ||
|
|
161
|
+
[];
|
|
135
162
|
// Find all queries that depend on this table or related tables
|
|
136
|
-
const tablesToInvalidate = [
|
|
163
|
+
const tablesToInvalidate = [
|
|
164
|
+
table,
|
|
165
|
+
...relatedTables,
|
|
166
|
+
];
|
|
137
167
|
const keysToInvalidate = [];
|
|
138
|
-
for (const [cacheKey, metadata] of this.queryMetadata.entries()) {
|
|
168
|
+
for (const [cacheKey, metadata,] of this.queryMetadata.entries()) {
|
|
139
169
|
const shouldInvalidate = metadata.dependencies.some((dep) => tablesToInvalidate.includes(dep));
|
|
140
170
|
if (shouldInvalidate) {
|
|
141
171
|
keysToInvalidate.push(cacheKey);
|
|
@@ -146,6 +176,33 @@ class ReactiveSqlDriver {
|
|
|
146
176
|
await Promise.all(keysToInvalidate.map((key) => this.cache.del(key)));
|
|
147
177
|
// Remove metadata for invalidated queries
|
|
148
178
|
keysToInvalidate.forEach((key) => this.queryMetadata.delete(key));
|
|
179
|
+
await this.invalidateReactiveFunctionCaches(tablesToInvalidate);
|
|
180
|
+
}
|
|
181
|
+
functionDependencyIndexKey(table) {
|
|
182
|
+
return `@agelum/backend:function-dependency:${table}`;
|
|
183
|
+
}
|
|
184
|
+
async invalidateReactiveFunctionCaches(tablesToInvalidate) {
|
|
185
|
+
const dependencyIndex = new Map();
|
|
186
|
+
const keysToInvalidate = new Set();
|
|
187
|
+
for (const table of tablesToInvalidate) {
|
|
188
|
+
const indexKey = this.functionDependencyIndexKey(table);
|
|
189
|
+
const keys = (await this.cache.get(indexKey)) || [];
|
|
190
|
+
dependencyIndex.set(table, keys);
|
|
191
|
+
keys.forEach((key) => keysToInvalidate.add(key));
|
|
192
|
+
}
|
|
193
|
+
if (keysToInvalidate.size === 0) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
await Promise.all(Array.from(keysToInvalidate).map((key) => this.cache.del(key)));
|
|
197
|
+
await Promise.all(Array.from(dependencyIndex.entries()).map(async ([table, keys]) => {
|
|
198
|
+
const remaining = keys.filter((key) => !keysToInvalidate.has(key));
|
|
199
|
+
const indexKey = this.functionDependencyIndexKey(table);
|
|
200
|
+
if (remaining.length === 0) {
|
|
201
|
+
await this.cache.del(indexKey);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
await this.cache.set(indexKey, remaining);
|
|
205
|
+
}));
|
|
149
206
|
}
|
|
150
207
|
async broadcastInvalidation(analysis) {
|
|
151
208
|
const { table, organizationId } = analysis;
|
|
@@ -156,7 +213,7 @@ class ReactiveSqlDriver {
|
|
|
156
213
|
return;
|
|
157
214
|
// Create invalidation event
|
|
158
215
|
const event = {
|
|
159
|
-
type:
|
|
216
|
+
type: "invalidation",
|
|
160
217
|
table,
|
|
161
218
|
organizationId,
|
|
162
219
|
affectedQueries: Array.from(this.queryMetadata.keys()).filter((key) => {
|
|
@@ -173,13 +230,13 @@ class ReactiveSqlDriver {
|
|
|
173
230
|
callback(event);
|
|
174
231
|
}
|
|
175
232
|
catch (error) {
|
|
176
|
-
console.error(
|
|
233
|
+
console.error("[ReactiveDB] Error in invalidation callback:", error);
|
|
177
234
|
}
|
|
178
235
|
});
|
|
179
236
|
// Broadcast to SSE subscribers for real-time updates
|
|
180
237
|
try {
|
|
181
238
|
await broadcastInvalidation(organizationId, {
|
|
182
|
-
type:
|
|
239
|
+
type: "invalidation",
|
|
183
240
|
table,
|
|
184
241
|
organizationId,
|
|
185
242
|
affectedQueries: event.affectedQueries,
|
|
@@ -190,19 +247,19 @@ class ReactiveSqlDriver {
|
|
|
190
247
|
console.log(`[ReactiveDriver] SSE broadcast sent for org: ${organizationId}, table: ${table}`);
|
|
191
248
|
}
|
|
192
249
|
catch (error) {
|
|
193
|
-
console.warn(
|
|
250
|
+
console.warn("[ReactiveDriver] SSE broadcast failed:", error);
|
|
194
251
|
// Continue execution - local invalidation still works
|
|
195
252
|
}
|
|
196
253
|
}
|
|
197
254
|
getTtlForTable(table) {
|
|
198
255
|
// Smart TTL based on table type
|
|
199
256
|
switch (table) {
|
|
200
|
-
case
|
|
201
|
-
case
|
|
257
|
+
case "agent":
|
|
258
|
+
case "organization":
|
|
202
259
|
return 300; // 5 minutes for relatively stable data
|
|
203
|
-
case
|
|
260
|
+
case "message":
|
|
204
261
|
return 60; // 1 minute for frequently changing data
|
|
205
|
-
case
|
|
262
|
+
case "memory":
|
|
206
263
|
return 180; // 3 minutes for memory data
|
|
207
264
|
default:
|
|
208
265
|
return 120; // 2 minutes default
|
|
@@ -221,7 +278,9 @@ class ReactiveSqlDriver {
|
|
|
221
278
|
if (!this.subscribers.has(organizationId)) {
|
|
222
279
|
this.subscribers.set(organizationId, new Set());
|
|
223
280
|
}
|
|
224
|
-
this.subscribers
|
|
281
|
+
this.subscribers
|
|
282
|
+
.get(organizationId)
|
|
283
|
+
.add(callback);
|
|
225
284
|
// Return unsubscribe function
|
|
226
285
|
return () => {
|
|
227
286
|
const orgSubscribers = this.subscribers.get(organizationId);
|
|
@@ -236,16 +295,50 @@ class ReactiveSqlDriver {
|
|
|
236
295
|
getOriginalDb() {
|
|
237
296
|
return this.originalDb;
|
|
238
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Execute operations within a database transaction (Option 3)
|
|
300
|
+
* Provides fine-grained transaction control with optional replication mode
|
|
301
|
+
*/
|
|
302
|
+
async transaction(options, callback) {
|
|
303
|
+
// Check if the database supports transactions
|
|
304
|
+
const dbTransaction = this.originalDb.transaction;
|
|
305
|
+
if (typeof dbTransaction !== "function") {
|
|
306
|
+
console.warn("[ReactiveDB] Database does not support transactions, executing without transaction wrapper");
|
|
307
|
+
return callback(this.originalDb);
|
|
308
|
+
}
|
|
309
|
+
// Execute within a transaction
|
|
310
|
+
return dbTransaction.call(this.originalDb, async (tx) => {
|
|
311
|
+
// Set replication mode if specified (PostgreSQL specific)
|
|
312
|
+
if (options.replicationMode) {
|
|
313
|
+
try {
|
|
314
|
+
const syncCommitValue = options.replicationMode ===
|
|
315
|
+
"sync"
|
|
316
|
+
? "remote_apply"
|
|
317
|
+
: "local";
|
|
318
|
+
console.log(`[ReactiveDB] Setting synchronous_commit = '${syncCommitValue}' for transaction`);
|
|
319
|
+
// Use SET LOCAL to only affect current transaction
|
|
320
|
+
await tx.execute?.(`SET LOCAL synchronous_commit = '${syncCommitValue}'`);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.warn("[ReactiveDB] Failed to set synchronous_commit (database may not support it):", error);
|
|
324
|
+
// Continue with transaction even if setting fails
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return callback(tx);
|
|
328
|
+
});
|
|
329
|
+
}
|
|
239
330
|
}
|
|
240
331
|
/**
|
|
241
332
|
* Create a reactive database instance
|
|
242
333
|
* This is the main entry point for the library
|
|
243
334
|
*/
|
|
244
335
|
export function createReactiveDb(drizzleDb, config) {
|
|
245
|
-
console.log(
|
|
336
|
+
console.log("[ReactiveDB] Initializing reactive database with config:", {
|
|
246
337
|
relations: Object.keys(config.relations),
|
|
247
|
-
cacheProvider: config.cache?.server
|
|
248
|
-
|
|
338
|
+
cacheProvider: config.cache?.server
|
|
339
|
+
?.provider || "memory",
|
|
340
|
+
realtimeEnabled: config.realtime?.enabled ??
|
|
341
|
+
true,
|
|
249
342
|
});
|
|
250
343
|
const driver = new ReactiveSqlDriver(drizzleDb, config);
|
|
251
344
|
return {
|
|
@@ -254,6 +347,7 @@ export function createReactiveDb(drizzleDb, config) {
|
|
|
254
347
|
query: driver.query.bind(driver),
|
|
255
348
|
getCache: driver.getCache.bind(driver),
|
|
256
349
|
subscribe: driver.subscribe.bind(driver),
|
|
350
|
+
transaction: driver.transaction.bind(driver),
|
|
257
351
|
};
|
|
258
352
|
}
|
|
259
353
|
//# sourceMappingURL=driver.js.map
|
package/dist/core/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/core/driver.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD;;GAEG;AACH,MAAM,iBAAiB;IAcX;IACA;IAZF,KAAK,CAAgB;IACrB,WAAW,GAAG,IAAI,GAAG,EAG1B,CAAC;IACI,aAAa,GAAG,IAAI,GAAG,EAG5B,CAAC;IAEJ,YACU,UAAoB,EACpB,MAAsB;QADtB,eAAU,GAAV,UAAU,CAAU;QACpB,WAAM,GAAN,MAAM,CAAgB;QAE9B,4CAA4C;QAC5C,IAAI,CAAC,KAAK;YACR,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEjC,qCAAqC;QACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,uBAAuB;QAC7B,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM;YACvB,EAAE,QAAQ,IAAI,QAAQ,CAAC;QAE3B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM;oBACvB,EAAE,KAAK,CACV,CAAC;YACJ,KAAK,QAAQ,CAAC;YACd;gBACE,OAAO,IAAI,cAAc,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,qEAAqE;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,eAAe,GACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAC1B,IAAI,CAAC,UAAU,CAII,CAAC;YACxB,8DAA8D;YAC7D,IAAI,CAAC,UAAkB,CAAC,OAAO;gBAC9B,KAAK,EACH,KAAc,EACd,MAAkB,EAClB,EAAE;oBACF,OAAO,IAAI,CAAC,cAAc,CACxB,KAAK,EACL,MAAM,EACN,GAAG,EAAE,CACH,eAAe,CACb,KAAK,EACL,MAAM,CACP,CACJ,CAAC;gBACJ,CAAC,CAAC;QACN,CAAC;QAED,gDAAgD;QAChD,MAAM,OAAO,GAAG;YACd,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;SACA,CAAC;QACX,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,cAAc,GAClB,QAGD,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,8DAA8D;gBAC7D,IAAI,CAAC,UAAkB,CACtB,MAAM,CACP,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;oBACzB,MAAM,YAAY,GAChB,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1B,OAAO,IAAI,CAAC,gBAAgB,CAC1B,YAAY,EACZ,MAAM,CAAC,WAAW,EAAE,CACrB,CAAC;gBACJ,CAAC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CACtB,YAAiB,EACjB,SAAiB;QAEjB,+BAA+B;QAC/B,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,eAAe,GACnB,YAAY,CAAC,OAAO,CAAC,IAAI,CACvB,YAAY,CACb,CAAC;YACJ,YAAY,CAAC,OAAO;gBAClB,KAAK,IAAI,EAAE;oBACT,MAAM,GAAG,GACP,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI;wBACxB,GAAG,EAAE,SAAS;wBACd,MAAM,EAAE,EAAE;qBACX,CAAC;oBACJ,OAAO,IAAI,CAAC,cAAc,CACxB,GAAG,EACH,GAAG,CAAC,MAAM,EACV,eAAe,CAChB,CAAC;gBACJ,CAAC,CAAC;QACN,CAAC;QAED,yDAAyD;QACzD,MAAM,WAAW,GAAG;YAClB,KAAK;YACL,KAAK;YACL,KAAK;YACL,QAAQ;SACT,CAAC;QACF,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CACvB,YAAY,CACb,CAAC;gBACJ,YAAY,CAAC,MAAM,CAAC;oBAClB,KAAK,IAAI,EAAE;wBACT,MAAM,GAAG,GACP,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI;4BACxB,GAAG,EAAE,SAAS;4BACd,MAAM,EAAE,EAAE;yBACX,CAAC;wBACJ,OAAO,IAAI,CAAC,cAAc,CACxB,GAAG,EACH,GAAG,CAAC,MAAM,EACV,cAAc,CACf,CAAC;oBACJ,CAAC,CAAC;YACN,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,KAAU,EACV,SAAgB,EAAE,EAClB,eAAmC;QAEnC,uDAAuD;QACvD,MAAM,SAAS,GACb,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC;QAC7B,MAAM,WAAW,GACf,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAE/B,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,UAAU,CACzB,SAAS,EACT,WAAW,CACZ,CAAC;QACF,MAAM,QAAQ,GACZ,IAAI,CAAC,gBAAgB,CACnB,QAAQ,EACR,WAAW,CACZ,CAAC;QAEJ,qCAAqC;QACrC,IACE,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC,iBAAiB,CAC3B,QAAQ,EACR,QAAQ,EACR,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,4DAA4D;QAC5D,OAAO,IAAI,CAAC,mBAAmB,CAC7B,QAAQ,EACR,eAAe,CAChB,CAAC;IACJ,CAAC;IAEO,gBAAgB,CACtB,QAAqB,EACrB,MAAa;QAEb,kDAAkD;QAClD,MAAM,QAAQ,GAAG;YACf,QAAQ,CAAC,KAAK;YACd,QAAQ,CAAC,SAAS;YAClB,IAAI,CAAC,SAAS,CACZ,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAC1B;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SACvB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,QAAqB,EACrB,QAAgB,EAChB,eAAmC;QAEnC,8BAA8B;QAC9B,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CACT,8BAA8B,QAAQ,CAAC,KAAK,EAAE,CAC/C,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CACT,+CAA+C,QAAQ,CAAC,KAAK,EAAE,CAChE,CAAC;QACF,MAAM,MAAM,GACV,MAAM,eAAe,EAAE,CAAC;QAE1B,mBAAmB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAC7B,QAAQ,CAAC,KAAK,CACf,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,QAAQ,EACR,MAAM,EACN,GAAG,CACJ,CAAC;QAEF,wCAAwC;QACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC/B,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9B,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,GAAG;YACH,cAAc,EACZ,QAAQ,CAAC,cAAc;SAC1B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAqB,EACrB,eAAmC;QAEnC,OAAO,CAAC,GAAG,CACT,sCAAsC,QAAQ,CAAC,SAAS,OAAO,QAAQ,CAAC,KAAK,oCAAoC,CAClH,CAAC;QAEF,uBAAuB;QACvB,MAAM,MAAM,GACV,MAAM,eAAe,EAAE,CAAC;QAE1B,6BAA6B;QAC7B,MAAM,IAAI,CAAC,wBAAwB,CACjC,QAAQ,CACT,CAAC;QAEF,gCAAgC;QAChC,MAAM,IAAI,CAAC,qBAAqB,CAC9B,QAAQ,CACT,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,QAAqB;QAErB,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAC3B,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAC5B,EAAE,CAAC;QAEL,+DAA+D;QAC/D,MAAM,kBAAkB,GAAG;YACzB,KAAK;YACL,GAAG,aAAa;SACjB,CAAC;QACF,MAAM,gBAAgB,GACpB,EAAE,CAAC;QAEL,KAAK,MAAM,CACT,QAAQ,EACR,QAAQ,EACT,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YAClC,MAAM,gBAAgB,GACpB,QAAQ,CAAC,YAAY,CAAC,IAAI,CACxB,CAAC,GAAG,EAAE,EAAE,CACN,kBAAkB,CAAC,QAAQ,CACzB,GAAG,CACJ,CACJ,CAAC;YAEJ,IAAI,gBAAgB,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,OAAO,CAAC,GAAG,CACT,6BAA6B,gBAAgB,CAAC,MAAM,uBAAuB,KAAK,EAAE,CACnF,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CACf,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CACpB,CACF,CAAC;QAEF,0CAA0C;QAC1C,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAC/B,CAAC;QAEF,MAAM,IAAI,CAAC,gCAAgC,CACzC,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAChC,KAAa;QAEb,OAAO,uCAAuC,KAAK,EAAE,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAC5C,kBAA4B;QAE5B,MAAM,eAAe,GAAG,IAAI,GAAG,EAG5B,CAAC;QACJ,MAAM,gBAAgB,GACpB,IAAI,GAAG,EAAU,CAAC;QAEpB,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;YACvC,MAAM,QAAQ,GACZ,IAAI,CAAC,0BAA0B,CAC7B,KAAK,CACN,CAAC;YACJ,MAAM,IAAI,GACR,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,QAAQ,CACT,CAAC,IAAI,EAAE,CAAC;YACX,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACnB,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAC1B,CAAC;QACJ,CAAC;QAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAC7B,CACF,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CACR,eAAe,CAAC,OAAO,EAAE,CAC1B,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAC7B,CAAC;YACF,MAAM,QAAQ,GACZ,IAAI,CAAC,0BAA0B,CAC7B,KAAK,CACN,CAAC;YACJ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,QAAQ,CACT,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,QAAQ,EACR,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,QAAqB;QAErB,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAC7B,QAAQ,CAAC;QAEX,IAAI,CAAC,cAAc;YAAE,OAAO;QAE5B,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,cAAc,CACf,CAAC;QACJ,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,4BAA4B;QAC5B,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,cAAuB;YAC7B,KAAK;YACL,cAAc;YACd,eAAe,EAAE,KAAK,CAAC,IAAI,CACzB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAC1B,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;gBACf,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9B,OAAO,QAAQ,EAAE,YAAY,CAAC,QAAQ,CACpC,KAAK,CACN,CAAC;YACJ,CAAC,CAAC;YACF,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACvE,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,yBAAyB;QACzB,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,8CAA8C,EAC9C,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,CAAC;YACH,MAAM,qBAAqB,CACzB,cAAc,EACd;gBACE,IAAI,EAAE,cAAc;gBACpB,KAAK;gBACL,cAAc;gBACd,eAAe,EACb,KAAK,CAAC,eAAe;gBACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,YAAY,EACV,QAAQ,CAAC,SAAS;aACrB,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,gDAAgD,cAAc,YAAY,KAAK,EAAE,CAClF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,wCAAwC,EACxC,KAAK,CACN,CAAC;YACF,sDAAsD;QACxD,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,KAAa;QAEb,gCAAgC;QAChC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,cAAc;gBACjB,OAAO,GAAG,CAAC,CAAC,uCAAuC;YACrD,KAAK,SAAS;gBACZ,OAAO,EAAE,CAAC,CAAC,wCAAwC;YACrD,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC,CAAC,4BAA4B;YAC1C;gBACE,OAAO,GAAG,CAAC,CAAC,oBAAoB;QACpC,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,KAAK,CACT,GAAW,EACX,MAAc;QAEd,OAAO,IAAI,CAAC,cAAc,CACxB,GAAG,EACH,MAAM,EACN,KAAK,IAAI,EAAE;YACT,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAClC,GAAG,EACH,MAAM,CACP,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS,CACP,cAAsB,EACtB,QAA8B;QAE9B,IACE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACnB,cAAc,CACf,EACD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,cAAc,EACd,IAAI,GAAG,EAAE,CACV,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW;aACb,GAAG,CAAC,cAAc,CAAE;aACpB,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjB,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,cAAc,GAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,cAAc,CACf,CAAC;YACJ,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAChC,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,cAAc,CACf,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,OAA2B,EAC3B,QAEe;QAEf,8CAA8C;QAC9C,MAAM,aAAa,GACjB,IAAI,CAAC,UACN,CAAC,WAAW,CAAC;QACd,IACE,OAAO,aAAa,KAAK,UAAU,EACnC,CAAC;YACD,OAAO,CAAC,IAAI,CACV,4FAA4F,CAC7F,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,+BAA+B;QAC/B,OAAO,aAAa,CAAC,IAAI,CACvB,IAAI,CAAC,UAAU,EACf,KAAK,EAAE,EAAY,EAAE,EAAE;YACrB,0DAA0D;YAC1D,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe;wBACvB,MAAM;wBACJ,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,OAAO,CAAC;oBAEd,OAAO,CAAC,GAAG,CACT,8CAA8C,eAAe,mBAAmB,CACjF,CAAC;oBAEF,mDAAmD;oBACnD,MAAO,EAAU,CAAC,OAAO,EAAE,CACzB,mCAAmC,eAAe,GAAG,CACtD,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CACV,8EAA8E,EAC9E,KAAK,CACN,CAAC;oBACF,kDAAkD;gBACpD,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAG9B,SAAmB,EACnB,MAAsB;IAEtB,OAAO,CAAC,GAAG,CACT,0DAA0D,EAC1D;QACE,SAAS,EAAE,MAAM,CAAC,IAAI,CACpB,MAAM,CAAC,SAAS,CACjB;QACD,aAAa,EACX,MAAM,CAAC,KAAK,EAAE,MAAM;YAClB,EAAE,QAAQ,IAAI,QAAQ;QAC1B,eAAe,EACb,MAAM,CAAC,QAAQ,EAAE,OAAO;YACxB,IAAI;KACP,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAClC,SAAS,EACT,MAAM,CACP,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE;QAC1B,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,QAAQ,EACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,SAAS,EACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,WAAW,EACT,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC"}
|
package/dist/core/function.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Define reactive functions with explicit dependencies
|
|
3
3
|
* Core building block that works both standalone and with tRPC
|
|
4
4
|
*/
|
|
5
|
-
import { z } from
|
|
6
|
-
import type { ReactiveDb, ReactiveFunctionContext } from
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import type { ReactiveDb, ReactiveFunctionContext, TransactionConfig, TransactionReplicationMode } from "./types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Options passed to tRPC handler
|
|
9
9
|
*/
|
|
@@ -19,18 +19,25 @@ export interface ReactiveFunctionConfig<TInput = unknown, TOutput = unknown> {
|
|
|
19
19
|
dependencies: string[];
|
|
20
20
|
/** Optional: Specific invalidation conditions */
|
|
21
21
|
invalidateWhen?: Record<string, (change: InvalidationChange) => boolean>;
|
|
22
|
+
/** Optional: Enable cache for this function */
|
|
23
|
+
cacheEnabled?: boolean;
|
|
22
24
|
/** Cache configuration */
|
|
23
25
|
cache?: {
|
|
24
26
|
enabled?: boolean;
|
|
25
27
|
ttl?: number;
|
|
26
28
|
key?: (input: TInput) => string;
|
|
27
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Optional: Transaction configuration (Option 1 - declarative)
|
|
32
|
+
* When enabled, the handler will be automatically wrapped in a database transaction
|
|
33
|
+
*/
|
|
34
|
+
transaction?: TransactionConfig;
|
|
28
35
|
/** The actual function logic - receives context with input and db */
|
|
29
36
|
handler: (ctx: ReactiveFunctionContext<TInput>) => Promise<TOutput>;
|
|
30
37
|
}
|
|
31
38
|
export interface InvalidationChange {
|
|
32
39
|
table: string;
|
|
33
|
-
operation:
|
|
40
|
+
operation: "INSERT" | "UPDATE" | "DELETE";
|
|
34
41
|
keys: string[];
|
|
35
42
|
timestamp: number;
|
|
36
43
|
}
|
|
@@ -54,6 +61,10 @@ export interface ReactiveFunctionMetadata {
|
|
|
54
61
|
cacheEnabled: boolean;
|
|
55
62
|
cacheTtl: number;
|
|
56
63
|
hasInvalidationRules: boolean;
|
|
64
|
+
/** Whether this function runs in a transaction */
|
|
65
|
+
transactionEnabled: boolean;
|
|
66
|
+
/** Replication mode for transactions */
|
|
67
|
+
transactionReplicationMode?: TransactionReplicationMode;
|
|
57
68
|
}
|
|
58
69
|
/**
|
|
59
70
|
* Define a reactive function - the core building block
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/core/function.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/core/function.ts"],"names":[],"mappings":"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"}
|
package/dist/core/function.js
CHANGED
|
@@ -8,23 +8,27 @@
|
|
|
8
8
|
export function defineReactiveFunction(config) {
|
|
9
9
|
// Validate configuration
|
|
10
10
|
if (!config.name) {
|
|
11
|
-
throw new Error(
|
|
11
|
+
throw new Error("ReactiveFunction requires name");
|
|
12
12
|
}
|
|
13
13
|
if (!config.input) {
|
|
14
|
-
throw new Error(
|
|
14
|
+
throw new Error("ReactiveFunction requires input schema");
|
|
15
15
|
}
|
|
16
|
-
if (!config.dependencies ||
|
|
17
|
-
|
|
16
|
+
if (!config.dependencies ||
|
|
17
|
+
config.dependencies.length === 0) {
|
|
18
|
+
throw new Error("ReactiveFunction requires dependencies array");
|
|
18
19
|
}
|
|
19
20
|
if (!config.handler) {
|
|
20
|
-
throw new Error(
|
|
21
|
+
throw new Error("ReactiveFunction requires handler function");
|
|
21
22
|
}
|
|
23
|
+
const cacheEnabled = config.cacheEnabled ??
|
|
24
|
+
config.cache?.enabled ??
|
|
25
|
+
false;
|
|
22
26
|
// Default cache configuration
|
|
23
27
|
const cacheConfig = {
|
|
24
|
-
enabled: true,
|
|
25
28
|
ttl: 300, // 5 minutes default
|
|
26
29
|
key: (input) => `${config.name}:${JSON.stringify(input)}`,
|
|
27
30
|
...config.cache,
|
|
31
|
+
enabled: cacheEnabled,
|
|
28
32
|
};
|
|
29
33
|
/**
|
|
30
34
|
* Execute the function (standalone server-side execution)
|
|
@@ -39,13 +43,34 @@ export function defineReactiveFunction(config) {
|
|
|
39
43
|
// Check cache if enabled
|
|
40
44
|
if (cacheConfig.enabled) {
|
|
41
45
|
const cached = await getCachedResult(db, cacheKey);
|
|
42
|
-
if (cached &&
|
|
46
|
+
if (cached &&
|
|
47
|
+
!isCacheStale(cached, cacheConfig.ttl)) {
|
|
43
48
|
console.log(`[ReactiveFunction] Cache hit for ${cacheKey}`);
|
|
44
49
|
return cached.data;
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
|
-
// Execute function handler -
|
|
48
|
-
|
|
52
|
+
// Execute function handler - with optional transaction wrapping (Option 1)
|
|
53
|
+
let result;
|
|
54
|
+
if (config.transaction?.enabled) {
|
|
55
|
+
// Wrap handler in a transaction
|
|
56
|
+
console.log(`[ReactiveFunction] Executing ${config.name} in transaction (replicationMode: ${config.transaction.replicationMode ?? "default"})`);
|
|
57
|
+
result = await db.transaction({
|
|
58
|
+
replicationMode: config.transaction
|
|
59
|
+
.replicationMode,
|
|
60
|
+
}, async () => {
|
|
61
|
+
return await config.handler({
|
|
62
|
+
input: validatedInput,
|
|
63
|
+
db,
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Execute without transaction wrapper
|
|
69
|
+
result = await config.handler({
|
|
70
|
+
input: validatedInput,
|
|
71
|
+
db,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
49
74
|
// Cache result if enabled
|
|
50
75
|
if (cacheConfig.enabled) {
|
|
51
76
|
await cacheResult(db, cacheKey, result, cacheConfig.ttl, {
|
|
@@ -75,12 +100,13 @@ export function defineReactiveFunction(config) {
|
|
|
75
100
|
return false;
|
|
76
101
|
}
|
|
77
102
|
// Check custom invalidation rules
|
|
78
|
-
if (config.invalidateWhen &&
|
|
103
|
+
if (config.invalidateWhen &&
|
|
104
|
+
config.invalidateWhen[change.table]) {
|
|
79
105
|
try {
|
|
80
106
|
return config.invalidateWhen[change.table](change);
|
|
81
107
|
}
|
|
82
108
|
catch (error) {
|
|
83
|
-
console.warn(
|
|
109
|
+
console.warn("[ReactiveFunction] Invalidation rule error:", error);
|
|
84
110
|
// Default to invalidate on error for safety
|
|
85
111
|
return true;
|
|
86
112
|
}
|
|
@@ -98,6 +124,10 @@ export function defineReactiveFunction(config) {
|
|
|
98
124
|
cacheEnabled: cacheConfig.enabled,
|
|
99
125
|
cacheTtl: cacheConfig.ttl,
|
|
100
126
|
hasInvalidationRules: !!config.invalidateWhen,
|
|
127
|
+
transactionEnabled: config.transaction?.enabled ??
|
|
128
|
+
false,
|
|
129
|
+
transactionReplicationMode: config.transaction
|
|
130
|
+
?.replicationMode,
|
|
101
131
|
};
|
|
102
132
|
};
|
|
103
133
|
/**
|
|
@@ -157,11 +187,13 @@ export class ReactiveFunctionRegistry {
|
|
|
157
187
|
*/
|
|
158
188
|
getStats() {
|
|
159
189
|
const functionsByDependency = {};
|
|
160
|
-
for (const [name, fn] of this
|
|
190
|
+
for (const [name, fn] of this
|
|
191
|
+
.functions) {
|
|
161
192
|
const metadata = fn.getMetadata();
|
|
162
193
|
for (const dep of metadata.dependencies) {
|
|
163
194
|
if (!functionsByDependency[dep]) {
|
|
164
|
-
functionsByDependency[dep] =
|
|
195
|
+
functionsByDependency[dep] =
|
|
196
|
+
[];
|
|
165
197
|
}
|
|
166
198
|
functionsByDependency[dep].push(name);
|
|
167
199
|
}
|
|
@@ -176,7 +208,7 @@ export class ReactiveFunctionRegistry {
|
|
|
176
208
|
*/
|
|
177
209
|
clear() {
|
|
178
210
|
this.functions.clear();
|
|
179
|
-
console.log(
|
|
211
|
+
console.log("[ReactiveRegistry] Cleared all functions");
|
|
180
212
|
}
|
|
181
213
|
}
|
|
182
214
|
// Global registry instance
|
|
@@ -186,7 +218,8 @@ let globalRegistry = null;
|
|
|
186
218
|
*/
|
|
187
219
|
export function getReactiveFunctionRegistry() {
|
|
188
220
|
if (!globalRegistry) {
|
|
189
|
-
globalRegistry =
|
|
221
|
+
globalRegistry =
|
|
222
|
+
new ReactiveFunctionRegistry();
|
|
190
223
|
}
|
|
191
224
|
return globalRegistry;
|
|
192
225
|
}
|
|
@@ -204,9 +237,12 @@ export function registerReactiveFunction(name, config) {
|
|
|
204
237
|
*/
|
|
205
238
|
async function getCachedResult(db, cacheKey) {
|
|
206
239
|
try {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
240
|
+
const cache = db.getCache();
|
|
241
|
+
const cached = await cache.get(cacheKey);
|
|
242
|
+
if (!cached) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
return cached;
|
|
210
246
|
}
|
|
211
247
|
catch (error) {
|
|
212
248
|
console.warn(`[ReactiveFunction] Cache get error:`, error);
|
|
@@ -225,21 +261,33 @@ function isCacheStale(cached, ttl) {
|
|
|
225
261
|
*/
|
|
226
262
|
async function cacheResult(db, cacheKey, data, ttl, metadata) {
|
|
227
263
|
try {
|
|
228
|
-
// In a real implementation, this would use the cache provider
|
|
229
264
|
console.log(`[ReactiveFunction] Caching result for ${cacheKey} with TTL ${ttl}s`);
|
|
230
|
-
// Store with metadata for invalidation
|
|
231
265
|
const cacheEntry = {
|
|
232
266
|
data,
|
|
233
267
|
timestamp: Date.now(),
|
|
234
|
-
ttl: ttl * 1000,
|
|
235
268
|
metadata,
|
|
236
269
|
};
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
270
|
+
const cache = db.getCache();
|
|
271
|
+
await cache.set(cacheKey, cacheEntry, ttl);
|
|
272
|
+
await updateDependencyIndex(cache, metadata.dependencies, cacheKey);
|
|
240
273
|
}
|
|
241
274
|
catch (error) {
|
|
242
275
|
console.warn(`[ReactiveFunction] Cache set error:`, error);
|
|
243
276
|
}
|
|
244
277
|
}
|
|
278
|
+
const functionDependencyIndexKey = (dependency) => `@agelum/backend:function-dependency:${dependency}`;
|
|
279
|
+
async function updateDependencyIndex(cache, dependencies, cacheKey) {
|
|
280
|
+
await Promise.all(dependencies.map(async (dependency) => {
|
|
281
|
+
const indexKey = functionDependencyIndexKey(dependency);
|
|
282
|
+
const existing = (await cache.get(indexKey)) || [];
|
|
283
|
+
if (existing.includes(cacheKey)) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const next = [
|
|
287
|
+
...existing,
|
|
288
|
+
cacheKey,
|
|
289
|
+
];
|
|
290
|
+
await cache.set(indexKey, next);
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
245
293
|
//# sourceMappingURL=function.js.map
|