tina4-nodejs 3.10.90 → 3.10.92

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 (49) hide show
  1. package/package.json +1 -1
  2. package/packages/core/src/ai.ts +1 -1
  3. package/packages/core/src/api.ts +6 -6
  4. package/packages/core/src/auth.ts +28 -15
  5. package/packages/core/src/cache.ts +9 -0
  6. package/packages/core/src/devAdmin.ts +85 -7
  7. package/packages/core/src/devMailbox.ts +21 -21
  8. package/packages/core/src/fakeData.ts +24 -14
  9. package/packages/core/src/graphql.ts +37 -1
  10. package/packages/core/src/i18n.ts +1 -1
  11. package/packages/core/src/index.ts +6 -6
  12. package/packages/core/src/mcp.ts +3 -0
  13. package/packages/core/src/messenger.ts +52 -4
  14. package/packages/core/src/middleware.ts +61 -0
  15. package/packages/core/src/queue.ts +103 -30
  16. package/packages/core/src/queueBackends/liteBackend.ts +43 -0
  17. package/packages/core/src/rateLimiter.ts +88 -1
  18. package/packages/core/src/request.ts +24 -1
  19. package/packages/core/src/response.ts +54 -10
  20. package/packages/core/src/router.ts +32 -14
  21. package/packages/core/src/scss.ts +44 -2
  22. package/packages/core/src/server.ts +26 -4
  23. package/packages/core/src/service.ts +7 -0
  24. package/packages/core/src/session.ts +4 -4
  25. package/packages/core/src/testClient.ts +2 -2
  26. package/packages/core/src/testing.ts +6 -6
  27. package/packages/core/src/types.ts +8 -1
  28. package/packages/core/src/watcher.ts +66 -0
  29. package/packages/core/src/websocket.ts +24 -3
  30. package/packages/core/src/websocketConnection.ts +4 -0
  31. package/packages/core/src/wsdl.ts +12 -12
  32. package/packages/frond/src/engine.ts +6 -0
  33. package/packages/orm/src/adapters/firebird.ts +2 -2
  34. package/packages/orm/src/adapters/mssql.ts +2 -2
  35. package/packages/orm/src/adapters/mysql.ts +2 -2
  36. package/packages/orm/src/adapters/postgres.ts +2 -2
  37. package/packages/orm/src/adapters/sqlite.ts +3 -3
  38. package/packages/orm/src/autoCrud.ts +117 -74
  39. package/packages/orm/src/baseModel.ts +44 -7
  40. package/packages/orm/src/database.ts +58 -15
  41. package/packages/orm/src/databaseResult.ts +5 -0
  42. package/packages/orm/src/fakeData.ts +1 -11
  43. package/packages/orm/src/index.ts +1 -1
  44. package/packages/orm/src/migration.ts +78 -5
  45. package/packages/orm/src/queryBuilder.ts +2 -2
  46. package/packages/orm/src/sqlTranslation.ts +20 -3
  47. package/packages/orm/src/types.ts +2 -2
  48. package/packages/swagger/src/generator.ts +2 -2
  49. package/packages/swagger/src/index.ts +1 -1
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Usage:
5
5
  * // Standalone
6
- * const result = QueryBuilder.from("users", db)
6
+ * const result = QueryBuilder.fromTable("users", db)
7
7
  * .select("id", "name")
8
8
  * .where("active = ?", [1])
9
9
  * .orderBy("name ASC")
@@ -49,7 +49,7 @@ export class QueryBuilder {
49
49
  * @param db - Optional database adapter.
50
50
  * @returns A new QueryBuilder instance.
51
51
  */
52
- static from(tableName: string, db?: DatabaseAdapter): QueryBuilder {
52
+ static fromTable(tableName: string, db?: DatabaseAdapter): QueryBuilder {
53
53
  return new QueryBuilder(tableName, db);
54
54
  }
55
55
 
@@ -163,6 +163,7 @@ export class SQLTranslator {
163
163
  interface CacheEntry<T> {
164
164
  value: T;
165
165
  expiresAt: number;
166
+ tags: string[];
166
167
  }
167
168
 
168
169
  /**
@@ -201,11 +202,12 @@ export class QueryCache {
201
202
  }
202
203
 
203
204
  /**
204
- * Set a cached value with optional TTL (seconds).
205
+ * Set a cached value with optional TTL (seconds) and tags for grouped
206
+ * invalidation via clearTag().
205
207
  */
206
- set<T>(key: string, value: T, ttl?: number): void {
208
+ set<T>(key: string, value: T, ttl?: number, tags: string[] = []): void {
207
209
  // Evict oldest entry if at max size
208
- if (this.store.size >= this.maxSize) {
210
+ if (this.store.size >= this.maxSize && !this.store.has(key)) {
209
211
  const firstKey = this.store.keys().next().value;
210
212
  if (firstKey !== undefined) this.store.delete(firstKey);
211
213
  }
@@ -213,9 +215,24 @@ export class QueryCache {
213
215
  this.store.set(key, {
214
216
  value,
215
217
  expiresAt: Date.now() + (ttl ?? this.defaultTtl) * 1000,
218
+ tags,
216
219
  });
217
220
  }
218
221
 
222
+ /**
223
+ * Remove all entries that carry the given tag. Returns the number removed.
224
+ */
225
+ clearTag(tag: string): number {
226
+ let removed = 0;
227
+ for (const [key, entry] of this.store) {
228
+ if (entry.tags.includes(tag)) {
229
+ this.store.delete(key);
230
+ removed++;
231
+ }
232
+ }
233
+ return removed;
234
+ }
235
+
219
236
  /**
220
237
  * Check if a key exists and is not expired.
221
238
  */
@@ -69,10 +69,10 @@ export interface DatabaseAdapter {
69
69
  insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): DatabaseResult;
70
70
 
71
71
  /** Update rows in a table matching filter, returns affected row count. */
72
- update(table: string, data: Record<string, unknown>, filter: Record<string, unknown>): DatabaseResult;
72
+ update(table: string, data: Record<string, unknown>, filter: Record<string, unknown>, params?: unknown[]): DatabaseResult;
73
73
 
74
74
  /** Delete rows from a table matching filter (object, string WHERE, or array of objects). */
75
- delete(table: string, filter: Record<string, unknown> | string | Record<string, unknown>[]): DatabaseResult;
75
+ delete(table: string, filter: Record<string, unknown> | string | Record<string, unknown>[], params?: unknown[]): DatabaseResult;
76
76
 
77
77
  /** Start a transaction. */
78
78
  startTransaction(): void;
@@ -8,9 +8,9 @@ interface OpenAPISpec {
8
8
  components?: { schemas?: Record<string, unknown> };
9
9
  }
10
10
 
11
- export function generateOpenAPISpec(
11
+ export function generate(
12
12
  routes: RouteDefinition[],
13
- models: ModelDefinition[]
13
+ models: ModelDefinition[] = []
14
14
  ): OpenAPISpec {
15
15
  const spec: OpenAPISpec = {
16
16
  openapi: "3.0.3",
@@ -1,2 +1,2 @@
1
- export { generateOpenAPISpec } from "./generator.js";
1
+ export { generate } from "./generator.js";
2
2
  export { createSwaggerRoutes } from "./ui.js";