forge-sql-orm 2.1.11 → 2.1.13

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 (73) hide show
  1. package/README.md +800 -541
  2. package/dist/core/ForgeSQLAnalyseOperations.d.ts.map +1 -1
  3. package/dist/core/ForgeSQLAnalyseOperations.js +257 -0
  4. package/dist/core/ForgeSQLAnalyseOperations.js.map +1 -0
  5. package/dist/core/ForgeSQLCacheOperations.js +172 -0
  6. package/dist/core/ForgeSQLCacheOperations.js.map +1 -0
  7. package/dist/core/ForgeSQLCrudOperations.js +349 -0
  8. package/dist/core/ForgeSQLCrudOperations.js.map +1 -0
  9. package/dist/core/ForgeSQLORM.d.ts +1 -1
  10. package/dist/core/ForgeSQLORM.d.ts.map +1 -1
  11. package/dist/core/ForgeSQLORM.js +1191 -0
  12. package/dist/core/ForgeSQLORM.js.map +1 -0
  13. package/dist/core/ForgeSQLQueryBuilder.js +77 -0
  14. package/dist/core/ForgeSQLQueryBuilder.js.map +1 -0
  15. package/dist/core/ForgeSQLSelectOperations.js +81 -0
  16. package/dist/core/ForgeSQLSelectOperations.js.map +1 -0
  17. package/dist/core/SystemTables.js +258 -0
  18. package/dist/core/SystemTables.js.map +1 -0
  19. package/dist/index.js +30 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/lib/drizzle/extensions/additionalActions.d.ts.map +1 -1
  22. package/dist/lib/drizzle/extensions/additionalActions.js +527 -0
  23. package/dist/lib/drizzle/extensions/additionalActions.js.map +1 -0
  24. package/dist/utils/cacheContextUtils.d.ts.map +1 -1
  25. package/dist/utils/cacheContextUtils.js +198 -0
  26. package/dist/utils/cacheContextUtils.js.map +1 -0
  27. package/dist/utils/cacheUtils.d.ts.map +1 -1
  28. package/dist/utils/cacheUtils.js +383 -0
  29. package/dist/utils/cacheUtils.js.map +1 -0
  30. package/dist/utils/forgeDriver.d.ts.map +1 -1
  31. package/dist/utils/forgeDriver.js +139 -0
  32. package/dist/utils/forgeDriver.js.map +1 -0
  33. package/dist/utils/forgeDriverProxy.js +68 -0
  34. package/dist/utils/forgeDriverProxy.js.map +1 -0
  35. package/dist/utils/metadataContextUtils.d.ts.map +1 -1
  36. package/dist/utils/metadataContextUtils.js +28 -0
  37. package/dist/utils/metadataContextUtils.js.map +1 -0
  38. package/dist/utils/requestTypeContextUtils.js +10 -0
  39. package/dist/utils/requestTypeContextUtils.js.map +1 -0
  40. package/dist/utils/sqlHints.js +52 -0
  41. package/dist/utils/sqlHints.js.map +1 -0
  42. package/dist/utils/sqlUtils.d.ts.map +1 -1
  43. package/dist/utils/sqlUtils.js +590 -0
  44. package/dist/utils/sqlUtils.js.map +1 -0
  45. package/dist/webtriggers/applyMigrationsWebTrigger.js +77 -0
  46. package/dist/webtriggers/applyMigrationsWebTrigger.js.map +1 -0
  47. package/dist/webtriggers/clearCacheSchedulerTrigger.js +83 -0
  48. package/dist/webtriggers/clearCacheSchedulerTrigger.js.map +1 -0
  49. package/dist/webtriggers/dropMigrationWebTrigger.js +54 -0
  50. package/dist/webtriggers/dropMigrationWebTrigger.js.map +1 -0
  51. package/dist/webtriggers/dropTablesMigrationWebTrigger.js +54 -0
  52. package/dist/webtriggers/dropTablesMigrationWebTrigger.js.map +1 -0
  53. package/dist/webtriggers/fetchSchemaWebTrigger.js +82 -0
  54. package/dist/webtriggers/fetchSchemaWebTrigger.js.map +1 -0
  55. package/dist/webtriggers/index.js +40 -0
  56. package/dist/webtriggers/index.js.map +1 -0
  57. package/dist/webtriggers/slowQuerySchedulerTrigger.d.ts.map +1 -1
  58. package/dist/webtriggers/slowQuerySchedulerTrigger.js +80 -0
  59. package/dist/webtriggers/slowQuerySchedulerTrigger.js.map +1 -0
  60. package/package.json +28 -23
  61. package/src/core/ForgeSQLAnalyseOperations.ts +3 -2
  62. package/src/core/ForgeSQLORM.ts +33 -27
  63. package/src/lib/drizzle/extensions/additionalActions.ts +11 -0
  64. package/src/utils/cacheContextUtils.ts +9 -6
  65. package/src/utils/cacheUtils.ts +28 -5
  66. package/src/utils/forgeDriver.ts +10 -6
  67. package/src/utils/metadataContextUtils.ts +1 -4
  68. package/src/utils/sqlUtils.ts +136 -125
  69. package/src/webtriggers/slowQuerySchedulerTrigger.ts +40 -33
  70. package/dist/ForgeSQLORM.js +0 -3896
  71. package/dist/ForgeSQLORM.js.map +0 -1
  72. package/dist/ForgeSQLORM.mjs +0 -3879
  73. package/dist/ForgeSQLORM.mjs.map +0 -1
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.localCacheApplicationContext = exports.cacheApplicationContext = void 0;
4
+ exports.saveTableIfInsideCacheContext = saveTableIfInsideCacheContext;
5
+ exports.saveQueryLocalCacheQuery = saveQueryLocalCacheQuery;
6
+ exports.getQueryLocalCacheQuery = getQueryLocalCacheQuery;
7
+ exports.evictLocalCacheQuery = evictLocalCacheQuery;
8
+ exports.isTableContainsTableInCacheContext = isTableContainsTableInCacheContext;
9
+ const node_async_hooks_1 = require("node:async_hooks");
10
+ const table_1 = require("drizzle-orm/table");
11
+ const cacheUtils_1 = require("./cacheUtils");
12
+ function isQuery(obj) {
13
+ return (typeof obj === "object" &&
14
+ obj !== null &&
15
+ typeof obj.sql === "string" &&
16
+ Array.isArray(obj.params));
17
+ }
18
+ /**
19
+ * AsyncLocalStorage instance for managing cache context across async operations.
20
+ * This allows tracking which tables are being processed within a cache context
21
+ * without explicitly passing context through function parameters.
22
+ */
23
+ exports.cacheApplicationContext = new node_async_hooks_1.AsyncLocalStorage();
24
+ /**
25
+ * AsyncLocalStorage instance for managing local cache context across async operations.
26
+ * This allows storing and retrieving cached query results within a local cache context
27
+ * without explicitly passing context through function parameters.
28
+ */
29
+ exports.localCacheApplicationContext = new node_async_hooks_1.AsyncLocalStorage();
30
+ /**
31
+ * Saves a table name to the current cache context if one exists.
32
+ * This function is used to track which tables are being processed within
33
+ * a cache context for proper cache invalidation.
34
+ *
35
+ * @param table - The Drizzle table schema to track
36
+ * @returns Promise that resolves when the table is saved to context
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * await saveTableIfInsideCacheContext(usersTable);
41
+ * ```
42
+ */
43
+ async function saveTableIfInsideCacheContext(table) {
44
+ const context = exports.cacheApplicationContext.getStore();
45
+ if (context) {
46
+ const tableName = (0, table_1.getTableName)(table).toLowerCase();
47
+ context.tables.add(tableName);
48
+ }
49
+ }
50
+ /**
51
+ * Saves a query result to the local cache context.
52
+ * This function stores query results in memory for the duration of the local cache context.
53
+ *
54
+ * @param query - The Drizzle query to cache
55
+ * @param rows - The query result data to cache
56
+ * @param options - ForgeSqlOrm options
57
+ * @returns Promise that resolves when the data is saved to local cache
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const query = db.select({ id: users.id, name: users.name }).from(users);
62
+ * const results = await query.execute();
63
+ * await saveQueryLocalCacheQuery(query, results);
64
+ * ```
65
+ */
66
+ async function saveQueryLocalCacheQuery(query, rows, options) {
67
+ const context = exports.localCacheApplicationContext.getStore();
68
+ if (context) {
69
+ if (!context.cache) {
70
+ context.cache = {};
71
+ }
72
+ let sql;
73
+ if (isQuery(query)) {
74
+ sql = { toSQL: () => query };
75
+ }
76
+ else {
77
+ sql = query;
78
+ }
79
+ const key = (0, cacheUtils_1.hashKey)(sql.toSQL());
80
+ context.cache[key] = {
81
+ sql: sql.toSQL().sql.toLowerCase(),
82
+ data: rows,
83
+ };
84
+ if (options.logCache) {
85
+ const q = sql.toSQL();
86
+ // eslint-disable-next-line no-console
87
+ console.debug(`[forge-sql-orm][local-cache][SAVE] Stored result in cache. sql="${q.sql}", params=${JSON.stringify(q.params)}`);
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Retrieves a query result from the local cache context.
93
+ * This function checks if a query result is already cached in memory.
94
+ *
95
+ * @param query - The Drizzle query to check for cached results
96
+ * @param options - Option Property
97
+ * @returns Promise that resolves to cached data if found, undefined otherwise
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const query = db.select({ id: users.id, name: users.name }).from(users);
102
+ * const cachedResult = await getQueryLocalCacheQuery(query);
103
+ * if (cachedResult) {
104
+ * return cachedResult; // Use cached data
105
+ * }
106
+ * // Execute query and cache result
107
+ * ```
108
+ */
109
+ async function getQueryLocalCacheQuery(query, options) {
110
+ const context = exports.localCacheApplicationContext.getStore();
111
+ if (context) {
112
+ if (!context.cache) {
113
+ context.cache = {};
114
+ }
115
+ let sql;
116
+ if (isQuery(query)) {
117
+ sql = { toSQL: () => query };
118
+ }
119
+ else {
120
+ sql = query;
121
+ }
122
+ const toSQL = sql.toSQL();
123
+ const key = (0, cacheUtils_1.hashKey)(toSQL);
124
+ if (context.cache[key] && context.cache[key].sql === toSQL.sql.toLowerCase()) {
125
+ if (options.logCache) {
126
+ const q = toSQL;
127
+ // eslint-disable-next-line no-console
128
+ console.debug(`[forge-sql-orm][local-cache][HIT] Returned cached result. sql="${q.sql}", params=${JSON.stringify(q.params)}`);
129
+ }
130
+ return context.cache[key].data;
131
+ }
132
+ }
133
+ return undefined;
134
+ }
135
+ /**
136
+ * Evicts cached queries from the local cache context that involve the specified table.
137
+ * This function removes cached query results that contain the given table name.
138
+ *
139
+ * @param table - The Drizzle table schema to evict cache for
140
+ * @param options - ForgeSQL ORM options containing cache configuration
141
+ * @returns Promise that resolves when cache eviction is complete
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * // After inserting/updating/deleting from users table
146
+ * await evictLocalCacheQuery(usersTable, forgeSqlOptions);
147
+ * // All cached queries involving users table are now removed
148
+ * ```
149
+ */
150
+ async function evictLocalCacheQuery(table, options) {
151
+ const context = exports.localCacheApplicationContext.getStore();
152
+ if (context) {
153
+ if (!context.cache) {
154
+ context.cache = {};
155
+ }
156
+ const tableName = (0, table_1.getTableName)(table);
157
+ const searchString = options.cacheWrapTable ? `\`${tableName}\`` : tableName;
158
+ const keyToEvicts = [];
159
+ for (const key of Object.keys(context.cache)) {
160
+ if (context.cache[key].sql.includes(searchString)) {
161
+ keyToEvicts.push(key);
162
+ }
163
+ }
164
+ for (const key of keyToEvicts) {
165
+ delete context.cache[key];
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * Checks if the given SQL query contains any tables that are currently being processed
171
+ * within a cache context. This is used to determine if cache should be bypassed
172
+ * for queries that affect tables being modified within the context.
173
+ *
174
+ * @param sql - The SQL query string to check
175
+ * @param options - ForgeSQL ORM options containing cache configuration
176
+ * @returns Promise that resolves to true if the SQL contains tables in cache context
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * const shouldBypassCache = await isTableContainsTableInCacheContext(
181
+ * "SELECT * FROM users WHERE id = 1",
182
+ * forgeSqlOptions
183
+ * );
184
+ * ```
185
+ */
186
+ async function isTableContainsTableInCacheContext(sql, options) {
187
+ const context = exports.cacheApplicationContext.getStore();
188
+ if (!context) {
189
+ return false;
190
+ }
191
+ const tables = Array.from(context.tables);
192
+ const lowerSql = sql.toLowerCase();
193
+ return tables.some((table) => {
194
+ const tablePattern = options.cacheWrapTable ? `\`${table}\`` : table;
195
+ return lowerSql.includes(tablePattern);
196
+ });
197
+ }
198
+ //# sourceMappingURL=cacheContextUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheContextUtils.js","sourceRoot":"","sources":["../../src/utils/cacheContextUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cacheUtils.d.ts","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AA2ClE;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAK5C;AAmKD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,aAAa,EACtD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoBf;AACD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA6CxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
1
+ {"version":3,"file":"cacheUtils.d.ts","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAkElE;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAK5C;AAmKD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,aAAa,EACtD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoBf;AACD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA6CxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.hashKey = hashKey;
37
+ exports.clearCache = clearCache;
38
+ exports.clearTablesCache = clearTablesCache;
39
+ exports.clearExpiredCache = clearExpiredCache;
40
+ exports.getFromCache = getFromCache;
41
+ exports.setCacheResult = setCacheResult;
42
+ const luxon_1 = require("luxon");
43
+ const crypto = __importStar(require("node:crypto"));
44
+ const table_1 = require("drizzle-orm/table");
45
+ const kvs_1 = require("@forge/kvs");
46
+ const cacheContextUtils_1 = require("./cacheContextUtils");
47
+ // Constants for better maintainability
48
+ const CACHE_CONSTANTS = {
49
+ BATCH_SIZE: 25,
50
+ MAX_RETRY_ATTEMPTS: 3,
51
+ INITIAL_RETRY_DELAY: 1000,
52
+ RETRY_DELAY_MULTIPLIER: 2,
53
+ DEFAULT_ENTITY_QUERY_NAME: "sql",
54
+ DEFAULT_EXPIRATION_NAME: "expiration",
55
+ DEFAULT_DATA_NAME: "data",
56
+ HASH_LENGTH: 32,
57
+ };
58
+ /**
59
+ * Gets the current Unix timestamp in seconds.
60
+ *
61
+ * @returns Current timestamp as integer
62
+ */
63
+ function getCurrentTime() {
64
+ const dt = luxon_1.DateTime.now();
65
+ return Math.floor(dt.toSeconds());
66
+ }
67
+ /**
68
+ * Calculates a future timestamp by adding seconds to the current time.
69
+ * Validates that the result is within 32-bit integer range.
70
+ *
71
+ * @param secondsToAdd - Number of seconds to add to current time
72
+ * @returns Future timestamp in seconds
73
+ * @throws Error if the result is out of 32-bit integer range
74
+ */
75
+ function nowPlusSeconds(secondsToAdd) {
76
+ const dt = luxon_1.DateTime.now().plus({ seconds: secondsToAdd });
77
+ return Math.floor(dt.toSeconds());
78
+ }
79
+ /**
80
+ * Extracts all table/column names between backticks from SQL query and returns them as comma-separated string.
81
+ *
82
+ * @param sql - SQL query string
83
+ * @returns Comma-separated string of unique backticked values
84
+ */
85
+ function extractBacktickedValues(sql) {
86
+ const regex = /`([^`]+)`/g;
87
+ const matches = new Set();
88
+ let match;
89
+ while ((match = regex.exec(sql.toLowerCase())) !== null) {
90
+ if (!match[1].startsWith("a_")) {
91
+ matches.add(`\`${match[1]}\``);
92
+ }
93
+ }
94
+ // Sort to ensure consistent order for the same input
95
+ return Array.from(matches)
96
+ .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base", numeric: true }))
97
+ .join(",");
98
+ }
99
+ /**
100
+ * Generates a hash key for a query based on its SQL and parameters.
101
+ *
102
+ * @param query - The Drizzle query object
103
+ * @returns 32-character hexadecimal hash
104
+ */
105
+ function hashKey(query) {
106
+ const h = crypto.createHash("sha256");
107
+ h.update(query.sql.toLowerCase());
108
+ h.update(JSON.stringify(query.params));
109
+ return "CachedQuery_" + h.digest("hex").slice(0, CACHE_CONSTANTS.HASH_LENGTH);
110
+ }
111
+ /**
112
+ * Deletes cache entries in batches to respect Forge limits and timeouts.
113
+ *
114
+ * @param results - Array of cache entries to delete
115
+ * @param cacheEntityName - Name of the cache entity
116
+ * @returns Promise that resolves when all deletions are complete
117
+ */
118
+ async function deleteCacheEntriesInBatches(results, cacheEntityName) {
119
+ for (let i = 0; i < results.length; i += CACHE_CONSTANTS.BATCH_SIZE) {
120
+ const batch = results.slice(i, i + CACHE_CONSTANTS.BATCH_SIZE);
121
+ let transactionBuilder = kvs_1.kvs.transact();
122
+ for (const result of batch) {
123
+ transactionBuilder = transactionBuilder.delete(result.key, { entityName: cacheEntityName });
124
+ }
125
+ await transactionBuilder.execute();
126
+ }
127
+ }
128
+ /**
129
+ * Clears cache entries for specific tables using cursor-based pagination.
130
+ *
131
+ * @param tables - Array of table names to clear cache for
132
+ * @param cursor - Pagination cursor for large result sets
133
+ * @param options - ForgeSQL ORM options
134
+ * @returns Total number of deleted cache entries
135
+ */
136
+ async function clearCursorCache(tables, cursor, options) {
137
+ const cacheEntityName = options.cacheEntityName;
138
+ if (!cacheEntityName) {
139
+ throw new Error("cacheEntityName is not configured");
140
+ }
141
+ const entityQueryName = options.cacheEntityQueryName ?? CACHE_CONSTANTS.DEFAULT_ENTITY_QUERY_NAME;
142
+ let filters = new kvs_1.Filter();
143
+ for (const table of tables) {
144
+ const wrapIfNeeded = options.cacheWrapTable ? `\`${table}\`` : table;
145
+ filters.or(entityQueryName, kvs_1.FilterConditions.contains(wrapIfNeeded?.toLowerCase()));
146
+ }
147
+ let entityQueryBuilder = kvs_1.kvs
148
+ .entity(cacheEntityName)
149
+ .query()
150
+ .index(entityQueryName)
151
+ .filters(filters);
152
+ if (cursor) {
153
+ entityQueryBuilder = entityQueryBuilder.cursor(cursor);
154
+ }
155
+ const listResult = await entityQueryBuilder.limit(100).getMany();
156
+ if (options.logCache) {
157
+ // eslint-disable-next-line no-console
158
+ console.warn(`clear cache Records: ${JSON.stringify(listResult.results.map((r) => r.key))}`);
159
+ }
160
+ await deleteCacheEntriesInBatches(listResult.results, cacheEntityName);
161
+ if (listResult.nextCursor) {
162
+ return (listResult.results.length + (await clearCursorCache(tables, listResult.nextCursor, options)));
163
+ }
164
+ else {
165
+ return listResult.results.length;
166
+ }
167
+ }
168
+ /**
169
+ * Clears expired cache entries using cursor-based pagination.
170
+ *
171
+ * @param cursor - Pagination cursor for large result sets
172
+ * @param options - ForgeSQL ORM options
173
+ * @returns Total number of deleted expired cache entries
174
+ */
175
+ async function clearExpirationCursorCache(cursor, options) {
176
+ const cacheEntityName = options.cacheEntityName;
177
+ if (!cacheEntityName) {
178
+ throw new Error("cacheEntityName is not configured");
179
+ }
180
+ const entityExpirationName = options.cacheEntityExpirationName ?? CACHE_CONSTANTS.DEFAULT_EXPIRATION_NAME;
181
+ let entityQueryBuilder = kvs_1.kvs
182
+ .entity(cacheEntityName)
183
+ .query()
184
+ .index(entityExpirationName)
185
+ .where(kvs_1.WhereConditions.lessThan(Math.floor(luxon_1.DateTime.now().toSeconds())));
186
+ if (cursor) {
187
+ entityQueryBuilder = entityQueryBuilder.cursor(cursor);
188
+ }
189
+ const listResult = await entityQueryBuilder.limit(100).getMany();
190
+ if (options.logCache) {
191
+ // eslint-disable-next-line no-console
192
+ console.warn(`clear expired Records: ${JSON.stringify(listResult.results.map((r) => r.key))}`);
193
+ }
194
+ await deleteCacheEntriesInBatches(listResult.results, cacheEntityName);
195
+ if (listResult.nextCursor) {
196
+ return (listResult.results.length + (await clearExpirationCursorCache(listResult.nextCursor, options)));
197
+ }
198
+ else {
199
+ return listResult.results.length;
200
+ }
201
+ }
202
+ /**
203
+ * Executes a function with retry logic and exponential backoff.
204
+ *
205
+ * @param operation - Function to execute with retry
206
+ * @param operationName - Name of the operation for logging
207
+ * @param options - ForgeSQL ORM options for logging
208
+ * @returns Promise that resolves to the operation result
209
+ */
210
+ async function executeWithRetry(operation, operationName) {
211
+ let attempt = 0;
212
+ let delay = CACHE_CONSTANTS.INITIAL_RETRY_DELAY;
213
+ while (attempt < CACHE_CONSTANTS.MAX_RETRY_ATTEMPTS) {
214
+ try {
215
+ return await operation();
216
+ }
217
+ catch (err) {
218
+ // eslint-disable-next-line no-console
219
+ console.warn(`Error during ${operationName}: ${err.message}, retry ${attempt}`, err);
220
+ attempt++;
221
+ if (attempt >= CACHE_CONSTANTS.MAX_RETRY_ATTEMPTS) {
222
+ // eslint-disable-next-line no-console
223
+ console.error(`Error during ${operationName}: ${err.message}`, err);
224
+ throw err;
225
+ }
226
+ await new Promise((resolve) => setTimeout(resolve, delay));
227
+ delay *= CACHE_CONSTANTS.RETRY_DELAY_MULTIPLIER;
228
+ }
229
+ }
230
+ throw new Error(`Maximum retry attempts exceeded for ${operationName}`);
231
+ }
232
+ /**
233
+ * Clears cache for a specific table.
234
+ * Uses cache context if available, otherwise clears immediately.
235
+ *
236
+ * @param schema - The table schema to clear cache for
237
+ * @param options - ForgeSQL ORM options
238
+ */
239
+ async function clearCache(schema, options) {
240
+ const tableName = (0, table_1.getTableName)(schema);
241
+ if (cacheContextUtils_1.cacheApplicationContext.getStore()) {
242
+ cacheContextUtils_1.cacheApplicationContext.getStore()?.tables.add(tableName);
243
+ }
244
+ else {
245
+ await clearTablesCache([tableName], options);
246
+ }
247
+ }
248
+ /**
249
+ * Clears cache for multiple tables with retry logic and performance logging.
250
+ *
251
+ * @param tables - Array of table names to clear cache for
252
+ * @param options - ForgeSQL ORM options
253
+ * @returns Promise that resolves when cache clearing is complete
254
+ */
255
+ async function clearTablesCache(tables, options) {
256
+ if (!options.cacheEntityName) {
257
+ throw new Error("cacheEntityName is not configured");
258
+ }
259
+ const startTime = luxon_1.DateTime.now();
260
+ let totalRecords = 0;
261
+ try {
262
+ totalRecords = await executeWithRetry(() => clearCursorCache(tables, "", options), "clearing cache");
263
+ }
264
+ finally {
265
+ if (options.logCache) {
266
+ const duration = luxon_1.DateTime.now().toSeconds() - startTime.toSeconds();
267
+ // eslint-disable-next-line no-console
268
+ console.info(`Cleared ${totalRecords} cache records in ${duration} seconds`);
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * Clears expired cache entries with retry logic and performance logging.
274
+ *
275
+ * @param options - ForgeSQL ORM options
276
+ * @returns Promise that resolves when expired cache clearing is complete
277
+ */
278
+ async function clearExpiredCache(options) {
279
+ if (!options.cacheEntityName) {
280
+ throw new Error("cacheEntityName is not configured");
281
+ }
282
+ const startTime = luxon_1.DateTime.now();
283
+ let totalRecords = 0;
284
+ try {
285
+ totalRecords = await executeWithRetry(() => clearExpirationCursorCache("", options), "clearing expired cache");
286
+ }
287
+ finally {
288
+ const duration = luxon_1.DateTime.now().toSeconds() - startTime.toSeconds();
289
+ if (options?.logCache) {
290
+ // eslint-disable-next-line no-console
291
+ console.debug(`Cleared ${totalRecords} expired cache records in ${duration} seconds`);
292
+ }
293
+ }
294
+ }
295
+ /**
296
+ * Retrieves data from cache if it exists and is not expired.
297
+ *
298
+ * @param query - Query object with toSQL method
299
+ * @param options - ForgeSQL ORM options
300
+ * @returns Cached data if found and valid, undefined otherwise
301
+ */
302
+ async function getFromCache(query, options) {
303
+ if (!options.cacheEntityName) {
304
+ throw new Error("cacheEntityName is not configured");
305
+ }
306
+ const entityQueryName = options.cacheEntityQueryName ?? CACHE_CONSTANTS.DEFAULT_ENTITY_QUERY_NAME;
307
+ const expirationName = options.cacheEntityExpirationName ?? CACHE_CONSTANTS.DEFAULT_EXPIRATION_NAME;
308
+ const dataName = options.cacheEntityDataName ?? CACHE_CONSTANTS.DEFAULT_DATA_NAME;
309
+ const sqlQuery = query.toSQL();
310
+ const key = hashKey(sqlQuery);
311
+ // Skip cache if table is in cache context (will be cleared)
312
+ if (await (0, cacheContextUtils_1.isTableContainsTableInCacheContext)(sqlQuery.sql, options)) {
313
+ if (options.logCache) {
314
+ // eslint-disable-next-line no-console
315
+ console.warn(`Context contains value to clear. Skip getting from cache`);
316
+ }
317
+ return undefined;
318
+ }
319
+ try {
320
+ const cacheResult = (await kvs_1.kvs.entity(options.cacheEntityName).get(key));
321
+ if (cacheResult &&
322
+ cacheResult[expirationName] >= getCurrentTime() &&
323
+ extractBacktickedValues(sqlQuery.sql) === cacheResult[entityQueryName]) {
324
+ if (options.logCache) {
325
+ // eslint-disable-next-line no-console
326
+ console.warn(`Get value from cache, cacheKey: ${key}`);
327
+ }
328
+ const results = cacheResult[dataName];
329
+ return JSON.parse(results);
330
+ }
331
+ }
332
+ catch (error) {
333
+ // eslint-disable-next-line no-console
334
+ console.error(`Error getting from cache: ${error.message}`, error);
335
+ }
336
+ return undefined;
337
+ }
338
+ /**
339
+ * Stores query results in cache with specified TTL.
340
+ *
341
+ * @param query - Query object with toSQL method
342
+ * @param options - ForgeSQL ORM options
343
+ * @param results - Data to cache
344
+ * @param cacheTtl - Time to live in seconds
345
+ * @returns Promise that resolves when data is stored in cache
346
+ */
347
+ async function setCacheResult(query, options, results, cacheTtl) {
348
+ if (!options.cacheEntityName) {
349
+ throw new Error("cacheEntityName is not configured");
350
+ }
351
+ try {
352
+ const entityQueryName = options.cacheEntityQueryName ?? CACHE_CONSTANTS.DEFAULT_ENTITY_QUERY_NAME;
353
+ const expirationName = options.cacheEntityExpirationName ?? CACHE_CONSTANTS.DEFAULT_EXPIRATION_NAME;
354
+ const dataName = options.cacheEntityDataName ?? CACHE_CONSTANTS.DEFAULT_DATA_NAME;
355
+ const sqlQuery = query.toSQL();
356
+ // Skip cache if table is in cache context (will be cleared)
357
+ if (await (0, cacheContextUtils_1.isTableContainsTableInCacheContext)(sqlQuery.sql, options)) {
358
+ if (options.logCache) {
359
+ // eslint-disable-next-line no-console
360
+ console.warn(`Context contains value to clear. Skip setting from cache`);
361
+ }
362
+ return;
363
+ }
364
+ const key = hashKey(sqlQuery);
365
+ await kvs_1.kvs
366
+ .transact()
367
+ .set(key, {
368
+ [entityQueryName]: extractBacktickedValues(sqlQuery.sql),
369
+ [expirationName]: nowPlusSeconds(cacheTtl),
370
+ [dataName]: JSON.stringify(results),
371
+ }, { entityName: options.cacheEntityName })
372
+ .execute();
373
+ if (options.logCache) {
374
+ // eslint-disable-next-line no-console
375
+ console.warn(`Store value to cache, cacheKey: ${key}`);
376
+ }
377
+ }
378
+ catch (error) {
379
+ // eslint-disable-next-line no-console
380
+ console.error(`Error setting cache: ${error.message}`, error);
381
+ }
382
+ }
383
+ //# sourceMappingURL=cacheUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheUtils.js","sourceRoot":"","sources":["../../src/utils/cacheUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"forgeDriver.d.ts","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQtD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAO9E;AA6FD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,MAAM,EACb,QAAQ,OAAO,EAAE,EACjB,QAAQ,WAAW,KAClB,OAAO,CAAC,iBAAiB,CAe3B,CAAC"}
1
+ {"version":3,"file":"forgeDriver.d.ts","sourceRoot":"","sources":["../../src/utils/forgeDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQtD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAO9E;AA6FD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,MAAM,EACb,QAAQ,OAAO,EAAE,EACjB,QAAQ,WAAW,KAClB,OAAO,CAAC,iBAAiB,CAmB3B,CAAC"}