@bhushanpawar/sqldb 1.0.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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +811 -0
  3. package/dist/best-practice-example.d.ts +35 -0
  4. package/dist/best-practice-example.d.ts.map +1 -0
  5. package/dist/best-practice-example.js +171 -0
  6. package/dist/best-practice-example.js.map +1 -0
  7. package/dist/cache/cache-key-builder.d.ts +17 -0
  8. package/dist/cache/cache-key-builder.d.ts.map +1 -0
  9. package/dist/cache/cache-key-builder.js +100 -0
  10. package/dist/cache/cache-key-builder.js.map +1 -0
  11. package/dist/cache/cache-manager.d.ts +22 -0
  12. package/dist/cache/cache-manager.d.ts.map +1 -0
  13. package/dist/cache/cache-manager.js +124 -0
  14. package/dist/cache/cache-manager.js.map +1 -0
  15. package/dist/cache/invalidation.d.ts +15 -0
  16. package/dist/cache/invalidation.d.ts.map +1 -0
  17. package/dist/cache/invalidation.js +59 -0
  18. package/dist/cache/invalidation.js.map +1 -0
  19. package/dist/client.d.ts +40 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +146 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/connection/mariadb.d.ts +17 -0
  24. package/dist/connection/mariadb.d.ts.map +1 -0
  25. package/dist/connection/mariadb.js +116 -0
  26. package/dist/connection/mariadb.js.map +1 -0
  27. package/dist/connection/redis.d.ts +20 -0
  28. package/dist/connection/redis.d.ts.map +1 -0
  29. package/dist/connection/redis.js +168 -0
  30. package/dist/connection/redis.js.map +1 -0
  31. package/dist/demo-debug.d.ts +2 -0
  32. package/dist/demo-debug.d.ts.map +1 -0
  33. package/dist/demo-debug.js +36 -0
  34. package/dist/demo-debug.js.map +1 -0
  35. package/dist/discovery/dependency-graph.d.ts +20 -0
  36. package/dist/discovery/dependency-graph.d.ts.map +1 -0
  37. package/dist/discovery/dependency-graph.js +89 -0
  38. package/dist/discovery/dependency-graph.js.map +1 -0
  39. package/dist/discovery/relationship-parser.d.ts +10 -0
  40. package/dist/discovery/relationship-parser.d.ts.map +1 -0
  41. package/dist/discovery/relationship-parser.js +40 -0
  42. package/dist/discovery/relationship-parser.js.map +1 -0
  43. package/dist/discovery/schema-reader.d.ts +15 -0
  44. package/dist/discovery/schema-reader.d.ts.map +1 -0
  45. package/dist/discovery/schema-reader.js +82 -0
  46. package/dist/discovery/schema-reader.js.map +1 -0
  47. package/dist/hooks/hooks-manager.d.ts +22 -0
  48. package/dist/hooks/hooks-manager.d.ts.map +1 -0
  49. package/dist/hooks/hooks-manager.js +117 -0
  50. package/dist/hooks/hooks-manager.js.map +1 -0
  51. package/dist/index.d.ts +20 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +52 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/query/operations.d.ts +31 -0
  56. package/dist/query/operations.d.ts.map +1 -0
  57. package/dist/query/operations.js +204 -0
  58. package/dist/query/operations.js.map +1 -0
  59. package/dist/query/query-builder.d.ts +15 -0
  60. package/dist/query/query-builder.d.ts.map +1 -0
  61. package/dist/query/query-builder.js +169 -0
  62. package/dist/query/query-builder.js.map +1 -0
  63. package/dist/query/query-tracker.d.ts +13 -0
  64. package/dist/query/query-tracker.d.ts.map +1 -0
  65. package/dist/query/query-tracker.js +84 -0
  66. package/dist/query/query-tracker.js.map +1 -0
  67. package/dist/query/table-proxy.d.ts +11 -0
  68. package/dist/query/table-proxy.d.ts.map +1 -0
  69. package/dist/query/table-proxy.js +25 -0
  70. package/dist/query/table-proxy.js.map +1 -0
  71. package/dist/smart-cache/cache/cache-key-builder.d.ts +17 -0
  72. package/dist/smart-cache/cache/cache-key-builder.d.ts.map +1 -0
  73. package/dist/smart-cache/cache/cache-key-builder.js +100 -0
  74. package/dist/smart-cache/cache/cache-key-builder.js.map +1 -0
  75. package/dist/smart-cache/cache/cache-manager.d.ts +22 -0
  76. package/dist/smart-cache/cache/cache-manager.d.ts.map +1 -0
  77. package/dist/smart-cache/cache/cache-manager.js +124 -0
  78. package/dist/smart-cache/cache/cache-manager.js.map +1 -0
  79. package/dist/smart-cache/cache/invalidation.d.ts +15 -0
  80. package/dist/smart-cache/cache/invalidation.d.ts.map +1 -0
  81. package/dist/smart-cache/cache/invalidation.js +59 -0
  82. package/dist/smart-cache/cache/invalidation.js.map +1 -0
  83. package/dist/smart-cache/client.d.ts +36 -0
  84. package/dist/smart-cache/client.d.ts.map +1 -0
  85. package/dist/smart-cache/client.js +138 -0
  86. package/dist/smart-cache/client.js.map +1 -0
  87. package/dist/smart-cache/connection/mariadb.d.ts +14 -0
  88. package/dist/smart-cache/connection/mariadb.d.ts.map +1 -0
  89. package/dist/smart-cache/connection/mariadb.js +82 -0
  90. package/dist/smart-cache/connection/mariadb.js.map +1 -0
  91. package/dist/smart-cache/connection/redis.d.ts +20 -0
  92. package/dist/smart-cache/connection/redis.d.ts.map +1 -0
  93. package/dist/smart-cache/connection/redis.js +168 -0
  94. package/dist/smart-cache/connection/redis.js.map +1 -0
  95. package/dist/smart-cache/discovery/dependency-graph.d.ts +20 -0
  96. package/dist/smart-cache/discovery/dependency-graph.d.ts.map +1 -0
  97. package/dist/smart-cache/discovery/dependency-graph.js +89 -0
  98. package/dist/smart-cache/discovery/dependency-graph.js.map +1 -0
  99. package/dist/smart-cache/discovery/relationship-parser.d.ts +10 -0
  100. package/dist/smart-cache/discovery/relationship-parser.d.ts.map +1 -0
  101. package/dist/smart-cache/discovery/relationship-parser.js +40 -0
  102. package/dist/smart-cache/discovery/relationship-parser.js.map +1 -0
  103. package/dist/smart-cache/discovery/schema-reader.d.ts +15 -0
  104. package/dist/smart-cache/discovery/schema-reader.d.ts.map +1 -0
  105. package/dist/smart-cache/discovery/schema-reader.js +82 -0
  106. package/dist/smart-cache/discovery/schema-reader.js.map +1 -0
  107. package/dist/smart-cache/examples/basic-usage.d.ts +3 -0
  108. package/dist/smart-cache/examples/basic-usage.d.ts.map +1 -0
  109. package/dist/smart-cache/examples/basic-usage.js +105 -0
  110. package/dist/smart-cache/examples/basic-usage.js.map +1 -0
  111. package/dist/smart-cache/examples/hooks-example.d.ts +3 -0
  112. package/dist/smart-cache/examples/hooks-example.d.ts.map +1 -0
  113. package/dist/smart-cache/examples/hooks-example.js +133 -0
  114. package/dist/smart-cache/examples/hooks-example.js.map +1 -0
  115. package/dist/smart-cache/examples/relationships-example.d.ts +3 -0
  116. package/dist/smart-cache/examples/relationships-example.d.ts.map +1 -0
  117. package/dist/smart-cache/examples/relationships-example.js +88 -0
  118. package/dist/smart-cache/examples/relationships-example.js.map +1 -0
  119. package/dist/smart-cache/hooks/hooks-manager.d.ts +22 -0
  120. package/dist/smart-cache/hooks/hooks-manager.d.ts.map +1 -0
  121. package/dist/smart-cache/hooks/hooks-manager.js +117 -0
  122. package/dist/smart-cache/hooks/hooks-manager.js.map +1 -0
  123. package/dist/smart-cache/index.d.ts +19 -0
  124. package/dist/smart-cache/index.d.ts.map +1 -0
  125. package/dist/smart-cache/index.js +49 -0
  126. package/dist/smart-cache/index.js.map +1 -0
  127. package/dist/smart-cache/query/operations.d.ts +31 -0
  128. package/dist/smart-cache/query/operations.d.ts.map +1 -0
  129. package/dist/smart-cache/query/operations.js +187 -0
  130. package/dist/smart-cache/query/operations.js.map +1 -0
  131. package/dist/smart-cache/query/query-builder.d.ts +15 -0
  132. package/dist/smart-cache/query/query-builder.d.ts.map +1 -0
  133. package/dist/smart-cache/query/query-builder.js +169 -0
  134. package/dist/smart-cache/query/query-builder.js.map +1 -0
  135. package/dist/smart-cache/query/table-proxy.d.ts +11 -0
  136. package/dist/smart-cache/query/table-proxy.d.ts.map +1 -0
  137. package/dist/smart-cache/query/table-proxy.js +25 -0
  138. package/dist/smart-cache/query/table-proxy.js.map +1 -0
  139. package/dist/smart-cache/types/cache.d.ts +29 -0
  140. package/dist/smart-cache/types/cache.d.ts.map +1 -0
  141. package/dist/smart-cache/types/cache.js +10 -0
  142. package/dist/smart-cache/types/cache.js.map +1 -0
  143. package/dist/smart-cache/types/config.d.ts +47 -0
  144. package/dist/smart-cache/types/config.d.ts.map +1 -0
  145. package/dist/smart-cache/types/config.js +27 -0
  146. package/dist/smart-cache/types/config.js.map +1 -0
  147. package/dist/smart-cache/types/query.d.ts +36 -0
  148. package/dist/smart-cache/types/query.d.ts.map +1 -0
  149. package/dist/smart-cache/types/query.js +3 -0
  150. package/dist/smart-cache/types/query.js.map +1 -0
  151. package/dist/smart-cache/types/schema.d.ts +25 -0
  152. package/dist/smart-cache/types/schema.d.ts.map +1 -0
  153. package/dist/smart-cache/types/schema.js +3 -0
  154. package/dist/smart-cache/types/schema.js.map +1 -0
  155. package/dist/trial.d.ts +7 -0
  156. package/dist/trial.d.ts.map +1 -0
  157. package/dist/trial.js +30 -0
  158. package/dist/trial.js.map +1 -0
  159. package/dist/types/cache.d.ts +29 -0
  160. package/dist/types/cache.d.ts.map +1 -0
  161. package/dist/types/cache.js +10 -0
  162. package/dist/types/cache.js.map +1 -0
  163. package/dist/types/config.d.ts +47 -0
  164. package/dist/types/config.d.ts.map +1 -0
  165. package/dist/types/config.js +27 -0
  166. package/dist/types/config.js.map +1 -0
  167. package/dist/types/query.d.ts +55 -0
  168. package/dist/types/query.d.ts.map +1 -0
  169. package/dist/types/query.js +3 -0
  170. package/dist/types/query.js.map +1 -0
  171. package/dist/types/schema.d.ts +25 -0
  172. package/dist/types/schema.d.ts.map +1 -0
  173. package/dist/types/schema.js +3 -0
  174. package/dist/types/schema.js.map +1 -0
  175. package/package.json +71 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependencyGraph = void 0;
4
+ class DependencyGraph {
5
+ constructor(maxDepth = 3) {
6
+ // Adjacency list: table -> set of tables that depend on it (have FK to it)
7
+ this.dependents = new Map();
8
+ // Adjacency list: table -> set of tables it depends on (has FK to)
9
+ this.dependencies = new Map();
10
+ this.maxDepth = maxDepth;
11
+ }
12
+ addRelationship(relationship) {
13
+ const { fromTable, toTable } = relationship;
14
+ // fromTable depends on toTable (fromTable has FK to toTable)
15
+ if (!this.dependencies.has(fromTable)) {
16
+ this.dependencies.set(fromTable, new Set());
17
+ }
18
+ this.dependencies.get(fromTable).add(toTable);
19
+ // toTable has fromTable as dependent (fromTable references toTable)
20
+ if (!this.dependents.has(toTable)) {
21
+ this.dependents.set(toTable, new Set());
22
+ }
23
+ this.dependents.get(toTable).add(fromTable);
24
+ }
25
+ buildFromRelationships(relationships) {
26
+ for (const rel of relationships) {
27
+ this.addRelationship(rel);
28
+ }
29
+ }
30
+ getDependents(table) {
31
+ return Array.from(this.dependents.get(table) || []);
32
+ }
33
+ getDependencies(table) {
34
+ return Array.from(this.dependencies.get(table) || []);
35
+ }
36
+ getInvalidationTargets(table) {
37
+ const visited = new Set();
38
+ const targets = [];
39
+ this.bfsTraversal(table, visited, targets, 0);
40
+ return targets;
41
+ }
42
+ bfsTraversal(table, visited, targets, depth) {
43
+ if (visited.has(table) || depth > this.maxDepth) {
44
+ return;
45
+ }
46
+ visited.add(table);
47
+ targets.push(table);
48
+ // Get all tables that depend on this table
49
+ const dependents = this.getDependents(table);
50
+ for (const dependent of dependents) {
51
+ this.bfsTraversal(dependent, visited, targets, depth + 1);
52
+ }
53
+ // Optionally, also traverse dependencies (tables this table depends on)
54
+ // This is useful for bidirectional invalidation
55
+ const dependencies = this.getDependencies(table);
56
+ for (const dependency of dependencies) {
57
+ if (!visited.has(dependency) && depth < this.maxDepth) {
58
+ this.bfsTraversal(dependency, visited, targets, depth + 1);
59
+ }
60
+ }
61
+ }
62
+ getAllTables() {
63
+ const tables = new Set();
64
+ for (const table of this.dependents.keys()) {
65
+ tables.add(table);
66
+ }
67
+ for (const table of this.dependencies.keys()) {
68
+ tables.add(table);
69
+ }
70
+ return Array.from(tables);
71
+ }
72
+ clear() {
73
+ this.dependents.clear();
74
+ this.dependencies.clear();
75
+ }
76
+ getGraphInfo() {
77
+ const allTables = this.getAllTables();
78
+ let relationshipCount = 0;
79
+ for (const deps of this.dependencies.values()) {
80
+ relationshipCount += deps.size;
81
+ }
82
+ return {
83
+ tables: allTables.length,
84
+ relationships: relationshipCount,
85
+ };
86
+ }
87
+ }
88
+ exports.DependencyGraph = DependencyGraph;
89
+ //# sourceMappingURL=dependency-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/discovery/dependency-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { MariaDBConnectionManager } from '../connection/mariadb';
2
+ import { TableRelationship } from '../types/schema';
3
+ export declare class RelationshipParser {
4
+ private dbManager;
5
+ constructor(dbManager: MariaDBConnectionManager);
6
+ parseRelationships(): Promise<TableRelationship[]>;
7
+ private getCurrentDatabase;
8
+ private getForeignKeyRelationships;
9
+ }
10
+ //# sourceMappingURL=relationship-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-parser.d.ts","sourceRoot":"","sources":["../../src/discovery/relationship-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA2B;gBAEhC,SAAS,EAAE,wBAAwB;IAIzC,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAK1C,kBAAkB;YAKlB,0BAA0B;CA0BzC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelationshipParser = void 0;
4
+ class RelationshipParser {
5
+ constructor(dbManager) {
6
+ this.dbManager = dbManager;
7
+ }
8
+ async parseRelationships() {
9
+ const database = await this.getCurrentDatabase();
10
+ return await this.getForeignKeyRelationships(database);
11
+ }
12
+ async getCurrentDatabase() {
13
+ const result = await this.dbManager.query('SELECT DATABASE() as db');
14
+ return result[0].db;
15
+ }
16
+ async getForeignKeyRelationships(database) {
17
+ const sql = `
18
+ SELECT
19
+ kcu.CONSTRAINT_NAME as constraintName,
20
+ kcu.TABLE_NAME as fromTable,
21
+ kcu.COLUMN_NAME as fromColumn,
22
+ kcu.REFERENCED_TABLE_NAME as toTable,
23
+ kcu.REFERENCED_COLUMN_NAME as toColumn
24
+ FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
25
+ WHERE kcu.TABLE_SCHEMA = ?
26
+ AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
27
+ ORDER BY kcu.TABLE_NAME, kcu.CONSTRAINT_NAME
28
+ `;
29
+ const result = await this.dbManager.query(sql, [database]);
30
+ return result.map((row) => ({
31
+ constraintName: row.constraintName,
32
+ fromTable: row.fromTable,
33
+ fromColumn: row.fromColumn,
34
+ toTable: row.toTable,
35
+ toColumn: row.toColumn,
36
+ }));
37
+ }
38
+ }
39
+ exports.RelationshipParser = RelationshipParser;
40
+ //# sourceMappingURL=relationship-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-parser.js","sourceRoot":"","sources":["../../src/discovery/relationship-parser.ts"],"names":[],"mappings":";;;AAGA,MAAa,kBAAkB;IAG7B,YAAY,SAAmC;QAC7C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,QAAgB;QAEhB,MAAM,GAAG,GAAG;;;;;;;;;;;KAWX,CAAC;QAEF,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAC/B,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AA3CD,gDA2CC"}
@@ -0,0 +1,15 @@
1
+ import { MariaDBConnectionManager } from '../connection/mariadb';
2
+ import { TableSchema } from '../types/schema';
3
+ import { DiscoveryConfig } from '../types/config';
4
+ export declare class SchemaReader {
5
+ private dbManager;
6
+ private config;
7
+ constructor(dbManager: MariaDBConnectionManager, config: DiscoveryConfig);
8
+ discoverTables(): Promise<TableSchema[]>;
9
+ private getCurrentDatabase;
10
+ private getTableNames;
11
+ private filterTables;
12
+ private getTableColumns;
13
+ private findPrimaryKey;
14
+ }
15
+ //# sourceMappingURL=schema-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-reader.d.ts","sourceRoot":"","sources":["../../src/discovery/schema-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAc,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe;IAKlE,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAqBhC,kBAAkB;YAKlB,aAAa;IAa3B,OAAO,CAAC,YAAY;YAoBN,eAAe;IA8B7B,OAAO,CAAC,cAAc;CAIvB"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaReader = void 0;
4
+ class SchemaReader {
5
+ constructor(dbManager, config) {
6
+ this.dbManager = dbManager;
7
+ this.config = config;
8
+ }
9
+ async discoverTables() {
10
+ const database = await this.getCurrentDatabase();
11
+ const tables = await this.getTableNames(database);
12
+ const filteredTables = this.filterTables(tables);
13
+ const tableSchemas = [];
14
+ for (const tableName of filteredTables) {
15
+ const columns = await this.getTableColumns(database, tableName);
16
+ const primaryKey = this.findPrimaryKey(columns);
17
+ tableSchemas.push({
18
+ tableName,
19
+ columns,
20
+ primaryKey,
21
+ });
22
+ }
23
+ return tableSchemas;
24
+ }
25
+ async getCurrentDatabase() {
26
+ const result = await this.dbManager.query('SELECT DATABASE() as db');
27
+ return result[0].db;
28
+ }
29
+ async getTableNames(database) {
30
+ const sql = `
31
+ SELECT TABLE_NAME
32
+ FROM INFORMATION_SCHEMA.TABLES
33
+ WHERE TABLE_SCHEMA = ?
34
+ AND TABLE_TYPE = 'BASE TABLE'
35
+ ORDER BY TABLE_NAME
36
+ `;
37
+ const result = await this.dbManager.query(sql, [database]);
38
+ return result.map((row) => row.TABLE_NAME);
39
+ }
40
+ filterTables(tables) {
41
+ let filtered = tables;
42
+ // Apply include list
43
+ if (this.config.includeTables && this.config.includeTables.length > 0) {
44
+ filtered = filtered.filter((table) => this.config.includeTables.includes(table));
45
+ }
46
+ // Apply exclude list
47
+ if (this.config.excludeTables && this.config.excludeTables.length > 0) {
48
+ filtered = filtered.filter((table) => !this.config.excludeTables.includes(table));
49
+ }
50
+ return filtered;
51
+ }
52
+ async getTableColumns(database, tableName) {
53
+ const sql = `
54
+ SELECT
55
+ COLUMN_NAME as columnName,
56
+ DATA_TYPE as dataType,
57
+ IS_NULLABLE as isNullable,
58
+ COLUMN_KEY as columnKey,
59
+ COLUMN_DEFAULT as columnDefault,
60
+ EXTRA as extra
61
+ FROM INFORMATION_SCHEMA.COLUMNS
62
+ WHERE TABLE_SCHEMA = ?
63
+ AND TABLE_NAME = ?
64
+ ORDER BY ORDINAL_POSITION
65
+ `;
66
+ const result = await this.dbManager.query(sql, [database, tableName]);
67
+ return result.map((row) => ({
68
+ columnName: row.columnName,
69
+ dataType: row.dataType,
70
+ isNullable: row.isNullable === 'YES',
71
+ columnKey: row.columnKey || '',
72
+ columnDefault: row.columnDefault,
73
+ extra: row.extra || '',
74
+ }));
75
+ }
76
+ findPrimaryKey(columns) {
77
+ const pkColumn = columns.find((col) => col.columnKey === 'PRI');
78
+ return pkColumn?.columnName;
79
+ }
80
+ }
81
+ exports.SchemaReader = SchemaReader;
82
+ //# sourceMappingURL=schema-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-reader.js","sourceRoot":"","sources":["../../src/discovery/schema-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ type HookFunction = (...args: any[]) => Promise<any> | any;
2
+ export type HookType = 'before' | 'after';
3
+ export type Operation = 'findOne' | 'findMany' | 'findById' | 'count' | 'insertOne' | 'insertMany' | 'updateOne' | 'updateMany' | 'updateById' | 'deleteOne' | 'deleteMany' | 'deleteById';
4
+ export declare class HooksManager {
5
+ private hooks;
6
+ registerBefore(table: string, operation: Operation, hook: HookFunction): void;
7
+ registerAfter(table: string, operation: Operation, hook: HookFunction): void;
8
+ private registerHook;
9
+ executeBefore(table: string, operation: Operation, data: any): Promise<any>;
10
+ executeAfter(table: string, operation: Operation, result: any, ...args: any[]): Promise<void>;
11
+ private getHooks;
12
+ removeHook(table: string, hookType: HookType, operation: Operation, hook: HookFunction): void;
13
+ clearHooks(table?: string, hookType?: HookType, operation?: Operation): void;
14
+ getRegisteredHooks(): {
15
+ table: string;
16
+ hookType: HookType;
17
+ operation: Operation;
18
+ count: number;
19
+ }[];
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=hooks-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-manager.d.ts","sourceRoot":"","sources":["../../src/hooks/hooks-manager.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1C,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,YAAY,CAAC;AAEjB,qBAAa,YAAY;IAEvB,OAAO,CAAC,KAAK,CACD;IAEZ,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,YAAY,GACjB,IAAI;IAIP,aAAa,CACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,YAAY,GACjB,IAAI;IAIP,OAAO,CAAC,YAAY;IAyBd,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,GAAG,CAAC;IAwBT,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,GAAG,EACX,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IAgBhB,OAAO,CAAC,QAAQ;IAkBhB,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,YAAY,GACjB,IAAI;IASP,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IA2B5E,kBAAkB,IAAI;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE;CAuBJ"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HooksManager = void 0;
4
+ class HooksManager {
5
+ constructor() {
6
+ // Map: table -> hookType -> operation -> hooks[]
7
+ this.hooks = new Map();
8
+ }
9
+ registerBefore(table, operation, hook) {
10
+ this.registerHook(table, 'before', operation, hook);
11
+ }
12
+ registerAfter(table, operation, hook) {
13
+ this.registerHook(table, 'after', operation, hook);
14
+ }
15
+ registerHook(table, hookType, operation, hook) {
16
+ if (!this.hooks.has(table)) {
17
+ this.hooks.set(table, new Map());
18
+ }
19
+ const tableHooks = this.hooks.get(table);
20
+ if (!tableHooks.has(hookType)) {
21
+ tableHooks.set(hookType, new Map());
22
+ }
23
+ const typeHooks = tableHooks.get(hookType);
24
+ if (!typeHooks.has(operation)) {
25
+ typeHooks.set(operation, []);
26
+ }
27
+ typeHooks.get(operation).push(hook);
28
+ }
29
+ async executeBefore(table, operation, data) {
30
+ const hooks = this.getHooks(table, 'before', operation);
31
+ let transformedData = data;
32
+ for (const hook of hooks) {
33
+ try {
34
+ const result = await hook(transformedData);
35
+ // If hook returns something, use it as transformed data
36
+ if (result !== undefined) {
37
+ transformedData = result;
38
+ }
39
+ }
40
+ catch (error) {
41
+ console.error(`[HooksManager] Error in before hook for ${table}.${operation}:`, error);
42
+ throw error;
43
+ }
44
+ }
45
+ return transformedData;
46
+ }
47
+ async executeAfter(table, operation, result, ...args) {
48
+ const hooks = this.getHooks(table, 'after', operation);
49
+ for (const hook of hooks) {
50
+ try {
51
+ await hook(result, ...args);
52
+ }
53
+ catch (error) {
54
+ console.error(`[HooksManager] Error in after hook for ${table}.${operation}:`, error);
55
+ // Don't throw - after hooks shouldn't break the main operation
56
+ }
57
+ }
58
+ }
59
+ getHooks(table, hookType, operation) {
60
+ const tableHooks = this.hooks.get(table);
61
+ if (!tableHooks) {
62
+ return [];
63
+ }
64
+ const typeHooks = tableHooks.get(hookType);
65
+ if (!typeHooks) {
66
+ return [];
67
+ }
68
+ return typeHooks.get(operation) || [];
69
+ }
70
+ removeHook(table, hookType, operation, hook) {
71
+ const hooks = this.getHooks(table, hookType, operation);
72
+ const index = hooks.indexOf(hook);
73
+ if (index !== -1) {
74
+ hooks.splice(index, 1);
75
+ }
76
+ }
77
+ clearHooks(table, hookType, operation) {
78
+ if (!table) {
79
+ this.hooks.clear();
80
+ return;
81
+ }
82
+ if (!hookType) {
83
+ this.hooks.delete(table);
84
+ return;
85
+ }
86
+ const tableHooks = this.hooks.get(table);
87
+ if (!tableHooks) {
88
+ return;
89
+ }
90
+ if (!operation) {
91
+ tableHooks.delete(hookType);
92
+ return;
93
+ }
94
+ const typeHooks = tableHooks.get(hookType);
95
+ if (typeHooks) {
96
+ typeHooks.delete(operation);
97
+ }
98
+ }
99
+ getRegisteredHooks() {
100
+ const result = [];
101
+ for (const [table, tableHooks] of this.hooks.entries()) {
102
+ for (const [hookType, typeHooks] of tableHooks.entries()) {
103
+ for (const [operation, hooks] of typeHooks.entries()) {
104
+ result.push({
105
+ table,
106
+ hookType,
107
+ operation,
108
+ count: hooks.length,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ }
116
+ exports.HooksManager = HooksManager;
117
+ //# sourceMappingURL=hooks-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-manager.js","sourceRoot":"","sources":["../../src/hooks/hooks-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SmartDBClient } from './client';
2
+ import { SmartDBConfig } from './types/config';
3
+ export declare function createSmartDB(config: SmartDBConfig): Promise<SmartDBClient>;
4
+ export { SmartDBClient } from './client';
5
+ export * from './types/config';
6
+ export * from './types/query';
7
+ export * from './types/cache';
8
+ export * from './types/schema';
9
+ export { CacheManager } from './cache/cache-manager';
10
+ export { InvalidationManager } from './cache/invalidation';
11
+ export { DependencyGraph } from './discovery/dependency-graph';
12
+ export { HooksManager } from './hooks/hooks-manager';
13
+ export { QueryBuilder } from './query/query-builder';
14
+ export { InMemoryQueryTracker, generateQueryId } from './query/query-tracker';
15
+ declare const _default: {
16
+ createSmartDB: typeof createSmartDB;
17
+ SmartDBClient: typeof SmartDBClient;
18
+ };
19
+ export default _default;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;;;;;AAG9E,wBAGE"}
package/dist/index.js ADDED
@@ -0,0 +1,52 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.generateQueryId = exports.InMemoryQueryTracker = exports.QueryBuilder = exports.HooksManager = exports.DependencyGraph = exports.InvalidationManager = exports.CacheManager = exports.SmartDBClient = void 0;
18
+ exports.createSmartDB = createSmartDB;
19
+ const client_1 = require("./client");
20
+ async function createSmartDB(config) {
21
+ const client = new client_1.SmartDBClient(config);
22
+ await client.initialize();
23
+ return client;
24
+ }
25
+ // Export main client class
26
+ var client_2 = require("./client");
27
+ Object.defineProperty(exports, "SmartDBClient", { enumerable: true, get: function () { return client_2.SmartDBClient; } });
28
+ // Export all type definitions
29
+ __exportStar(require("./types/config"), exports);
30
+ __exportStar(require("./types/query"), exports);
31
+ __exportStar(require("./types/cache"), exports);
32
+ __exportStar(require("./types/schema"), exports);
33
+ // Export managers for advanced usage
34
+ var cache_manager_1 = require("./cache/cache-manager");
35
+ Object.defineProperty(exports, "CacheManager", { enumerable: true, get: function () { return cache_manager_1.CacheManager; } });
36
+ var invalidation_1 = require("./cache/invalidation");
37
+ Object.defineProperty(exports, "InvalidationManager", { enumerable: true, get: function () { return invalidation_1.InvalidationManager; } });
38
+ var dependency_graph_1 = require("./discovery/dependency-graph");
39
+ Object.defineProperty(exports, "DependencyGraph", { enumerable: true, get: function () { return dependency_graph_1.DependencyGraph; } });
40
+ var hooks_manager_1 = require("./hooks/hooks-manager");
41
+ Object.defineProperty(exports, "HooksManager", { enumerable: true, get: function () { return hooks_manager_1.HooksManager; } });
42
+ var query_builder_1 = require("./query/query-builder");
43
+ Object.defineProperty(exports, "QueryBuilder", { enumerable: true, get: function () { return query_builder_1.QueryBuilder; } });
44
+ var query_tracker_1 = require("./query/query-tracker");
45
+ Object.defineProperty(exports, "InMemoryQueryTracker", { enumerable: true, get: function () { return query_tracker_1.InMemoryQueryTracker; } });
46
+ Object.defineProperty(exports, "generateQueryId", { enumerable: true, get: function () { return query_tracker_1.generateQueryId; } });
47
+ // Default export
48
+ exports.default = {
49
+ createSmartDB,
50
+ SmartDBClient: client_1.SmartDBClient,
51
+ };
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAGA,sCAMC;AATD,qCAAyC;AAGlC,KAAK,UAAU,aAAa,CACjC,MAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,sBAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2BAA2B;AAC3B,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AAEtB,8BAA8B;AAC9B,iDAA+B;AAC/B,gDAA8B;AAC9B,gDAA8B;AAC9B,iDAA+B;AAE/B,qCAAqC;AACrC,uDAAqD;AAA5C,6GAAA,YAAY,OAAA;AACrB,qDAA2D;AAAlD,mHAAA,mBAAmB,OAAA;AAC5B,iEAA+D;AAAtD,mHAAA,eAAe,OAAA;AACxB,uDAAqD;AAA5C,6GAAA,YAAY,OAAA;AACrB,uDAAqD;AAA5C,6GAAA,YAAY,OAAA;AACrB,uDAA8E;AAArE,qHAAA,oBAAoB,OAAA;AAAE,gHAAA,eAAe,OAAA;AAE9C,iBAAiB;AACjB,kBAAe;IACb,aAAa;IACb,aAAa,EAAb,sBAAa;CACd,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { MariaDBConnectionManager } from '../connection/mariadb';
2
+ import { CacheManager } from '../cache/cache-manager';
3
+ import { InvalidationManager } from '../cache/invalidation';
4
+ import { QueryBuilder } from './query-builder';
5
+ import { TableOperations, WhereClause, FindOptions } from '../types/query';
6
+ import { CacheConfig } from '../types/config';
7
+ export declare class TableOperationsImpl<T = any> implements TableOperations<T> {
8
+ private tableName;
9
+ private dbManager;
10
+ private cacheManager;
11
+ private invalidationManager;
12
+ private queryBuilder;
13
+ private cacheConfig;
14
+ constructor(tableName: string, dbManager: MariaDBConnectionManager, cacheManager: CacheManager, invalidationManager: InvalidationManager, queryBuilder: QueryBuilder, cacheConfig: Required<CacheConfig>);
15
+ findOne(where: WhereClause<T>, options?: FindOptions): Promise<T | null>;
16
+ findMany(where?: WhereClause<T>, options?: FindOptions): Promise<T[]>;
17
+ findById(id: string | number, correlationId?: string): Promise<T | null>;
18
+ count(where?: WhereClause<T>, correlationId?: string): Promise<number>;
19
+ insertOne(data: Omit<T, 'id'>, correlationId?: string): Promise<T>;
20
+ insertMany(dataArray: Omit<T, 'id'>[], correlationId?: string): Promise<T[]>;
21
+ updateOne(where: WhereClause<T>, data: Partial<T>, correlationId?: string): Promise<T | null>;
22
+ updateMany(where: WhereClause<T>, data: Partial<T>, correlationId?: string): Promise<number>;
23
+ updateById(id: string | number, data: Partial<T>, correlationId?: string): Promise<T | null>;
24
+ deleteOne(where: WhereClause<T>, correlationId?: string): Promise<boolean>;
25
+ deleteMany(where: WhereClause<T>, correlationId?: string): Promise<number>;
26
+ deleteById(id: string | number, correlationId?: string): Promise<boolean>;
27
+ raw<R = any>(sql: string, params?: any[], correlationId?: string): Promise<R>;
28
+ invalidateCache(): Promise<void>;
29
+ warmCache(where?: WhereClause<T>, correlationId?: string): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/query/operations.ts"],"names":[],"mappings":"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"}