@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,20 @@
1
+ import Redis from 'ioredis';
2
+ import { RedisConfig } from '../types/config';
3
+ export declare class RedisConnectionManager {
4
+ private client;
5
+ private config;
6
+ private isHealthy;
7
+ constructor(config: RedisConfig);
8
+ connect(): Promise<Redis>;
9
+ get(key: string): Promise<string | null>;
10
+ set(key: string, value: string, ttlSeconds?: number): Promise<void>;
11
+ del(key: string | string[]): Promise<number>;
12
+ exists(key: string): Promise<boolean>;
13
+ scan(pattern: string): Promise<string[]>;
14
+ deletePattern(pattern: string): Promise<number>;
15
+ healthCheck(): Promise<boolean>;
16
+ close(): Promise<void>;
17
+ isConnected(): boolean;
18
+ getClient(): Redis | null;
19
+ }
20
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/connection/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,EAAE,WAAW;IAIzB,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAsDzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAaxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAc5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BxC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ/C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,KAAK,GAAG,IAAI;CAG1B"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedisConnectionManager = void 0;
7
+ const ioredis_1 = __importDefault(require("ioredis"));
8
+ class RedisConnectionManager {
9
+ constructor(config) {
10
+ this.client = null;
11
+ this.isHealthy = false;
12
+ this.config = config;
13
+ }
14
+ async connect() {
15
+ if (this.client && this.isHealthy) {
16
+ return this.client;
17
+ }
18
+ const options = {
19
+ host: this.config.host,
20
+ port: this.config.port || 6379,
21
+ password: this.config.password,
22
+ db: this.config.db || 0,
23
+ keyPrefix: this.config.keyPrefix || 'sdc:',
24
+ retryStrategy: (times) => {
25
+ const delay = Math.min(times * 50, 2000);
26
+ return delay;
27
+ },
28
+ ...this.config.options,
29
+ };
30
+ this.client = new ioredis_1.default(options);
31
+ this.client.on('connect', () => {
32
+ this.isHealthy = true;
33
+ });
34
+ this.client.on('error', (error) => {
35
+ this.isHealthy = false;
36
+ console.error('[Redis] Connection error:', error.message);
37
+ });
38
+ this.client.on('close', () => {
39
+ this.isHealthy = false;
40
+ });
41
+ // Wait for initial connection
42
+ await new Promise((resolve, reject) => {
43
+ const timeout = setTimeout(() => {
44
+ reject(new Error('Redis connection timeout'));
45
+ }, 10000);
46
+ this.client.once('ready', () => {
47
+ clearTimeout(timeout);
48
+ this.isHealthy = true;
49
+ resolve();
50
+ });
51
+ this.client.once('error', (err) => {
52
+ clearTimeout(timeout);
53
+ reject(err);
54
+ });
55
+ });
56
+ return this.client;
57
+ }
58
+ async get(key) {
59
+ if (!this.isHealthy) {
60
+ return null;
61
+ }
62
+ try {
63
+ const client = await this.connect();
64
+ return await client.get(key);
65
+ }
66
+ catch (error) {
67
+ console.error('[Redis] Get error:', error);
68
+ return null;
69
+ }
70
+ }
71
+ async set(key, value, ttlSeconds) {
72
+ if (!this.isHealthy) {
73
+ return;
74
+ }
75
+ try {
76
+ const client = await this.connect();
77
+ if (ttlSeconds) {
78
+ await client.set(key, value, 'EX', ttlSeconds);
79
+ }
80
+ else {
81
+ await client.set(key, value);
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error('[Redis] Set error:', error);
86
+ }
87
+ }
88
+ async del(key) {
89
+ if (!this.isHealthy) {
90
+ return 0;
91
+ }
92
+ try {
93
+ const client = await this.connect();
94
+ const keys = Array.isArray(key) ? key : [key];
95
+ return await client.del(...keys);
96
+ }
97
+ catch (error) {
98
+ console.error('[Redis] Del error:', error);
99
+ return 0;
100
+ }
101
+ }
102
+ async exists(key) {
103
+ if (!this.isHealthy) {
104
+ return false;
105
+ }
106
+ try {
107
+ const client = await this.connect();
108
+ const result = await client.exists(key);
109
+ return result === 1;
110
+ }
111
+ catch (error) {
112
+ console.error('[Redis] Exists error:', error);
113
+ return false;
114
+ }
115
+ }
116
+ async scan(pattern) {
117
+ if (!this.isHealthy) {
118
+ return [];
119
+ }
120
+ try {
121
+ const client = await this.connect();
122
+ const keys = [];
123
+ let cursor = '0';
124
+ do {
125
+ const [nextCursor, matchedKeys] = await client.scan(cursor, 'MATCH', pattern, 'COUNT', 100);
126
+ cursor = nextCursor;
127
+ keys.push(...matchedKeys);
128
+ } while (cursor !== '0');
129
+ return keys;
130
+ }
131
+ catch (error) {
132
+ console.error('[Redis] Scan error:', error);
133
+ return [];
134
+ }
135
+ }
136
+ async deletePattern(pattern) {
137
+ const keys = await this.scan(pattern);
138
+ if (keys.length === 0) {
139
+ return 0;
140
+ }
141
+ return await this.del(keys);
142
+ }
143
+ async healthCheck() {
144
+ try {
145
+ const client = await this.connect();
146
+ const result = await client.ping();
147
+ return result === 'PONG';
148
+ }
149
+ catch (error) {
150
+ return false;
151
+ }
152
+ }
153
+ async close() {
154
+ if (this.client) {
155
+ await this.client.quit();
156
+ this.client = null;
157
+ this.isHealthy = false;
158
+ }
159
+ }
160
+ isConnected() {
161
+ return this.client !== null && this.isHealthy;
162
+ }
163
+ getClient() {
164
+ return this.client;
165
+ }
166
+ }
167
+ exports.RedisConnectionManager = RedisConnectionManager;
168
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/smart-cache/connection/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TableRelationship } from '../types/schema';
2
+ export declare class DependencyGraph {
3
+ private dependents;
4
+ private dependencies;
5
+ private maxDepth;
6
+ constructor(maxDepth?: number);
7
+ addRelationship(relationship: TableRelationship): void;
8
+ buildFromRelationships(relationships: TableRelationship[]): void;
9
+ getDependents(table: string): string[];
10
+ getDependencies(table: string): string[];
11
+ getInvalidationTargets(table: string): string[];
12
+ private bfsTraversal;
13
+ getAllTables(): string[];
14
+ clear(): void;
15
+ getGraphInfo(): {
16
+ tables: number;
17
+ relationships: number;
18
+ };
19
+ }
20
+ //# sourceMappingURL=dependency-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/discovery/dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,qBAAa,eAAe;IAE1B,OAAO,CAAC,UAAU,CAAuC;IAGzD,OAAO,CAAC,YAAY,CAAuC;IAE3D,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAAU;IAIhC,eAAe,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAgBtD,sBAAsB,CAAC,aAAa,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAMhE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIxC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAS/C,OAAO,CAAC,YAAY;IA+BpB,YAAY,IAAI,MAAM,EAAE;IAcxB,KAAK,IAAI,IAAI;IAKb,YAAY,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAa1D"}
@@ -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/smart-cache/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/smart-cache/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/smart-cache/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/smart-cache/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/smart-cache/discovery/schema-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare function basicUsageExample(): Promise<void>;
2
+ export { basicUsageExample };
3
+ //# sourceMappingURL=basic-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/examples/basic-usage.ts"],"names":[],"mappings":"AAEA,iBAAe,iBAAiB,kBA+H/B;AAOD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.basicUsageExample = basicUsageExample;
4
+ const index_1 = require("../index");
5
+ async function basicUsageExample() {
6
+ // Initialize the smart cache client
7
+ const db = await (0, index_1.createSmartDB)({
8
+ mariadb: {
9
+ host: 'localhost',
10
+ user: 'root',
11
+ password: 'password',
12
+ database: 'mydb',
13
+ },
14
+ redis: {
15
+ host: 'localhost',
16
+ port: 6379,
17
+ },
18
+ cache: {
19
+ enabled: true,
20
+ defaultTTL: 60, // 60 seconds
21
+ maxKeys: 1000,
22
+ invalidateOnWrite: true,
23
+ cascadeInvalidation: true,
24
+ },
25
+ discovery: {
26
+ autoDiscover: true,
27
+ refreshInterval: 0, // manual refresh only
28
+ },
29
+ logging: {
30
+ level: 'info',
31
+ },
32
+ });
33
+ try {
34
+ // === READ OPERATIONS (Cache-first) ===
35
+ // Find one user
36
+ const user = await db.users.findOne({ email: 'john@example.com' });
37
+ console.log('User:', user);
38
+ // Find many users with options
39
+ const activeUsers = await db.users.findMany({ status: 'active' }, { limit: 10, orderBy: { column: 'created_at', direction: 'DESC' } });
40
+ console.log('Active users:', activeUsers.length);
41
+ // Find by ID (optimized cache key)
42
+ const userById = await db.users.findById(1);
43
+ console.log('User by ID:', userById);
44
+ // Count records
45
+ const userCount = await db.users.count({ status: 'active' });
46
+ console.log('Active user count:', userCount);
47
+ // === WRITE OPERATIONS (Auto-invalidates cache) ===
48
+ // Insert one record
49
+ const newUser = await db.users.insertOne({
50
+ name: 'Jane Doe',
51
+ email: 'jane@example.com',
52
+ status: 'active',
53
+ });
54
+ console.log('New user created:', newUser);
55
+ // Insert many records
56
+ const newUsers = await db.users.insertMany([
57
+ { name: 'Alice', email: 'alice@example.com', status: 'active' },
58
+ { name: 'Bob', email: 'bob@example.com', status: 'inactive' },
59
+ ]);
60
+ console.log('Created', newUsers.length, 'users');
61
+ // Update one record
62
+ const updated = await db.users.updateOne({ email: 'jane@example.com' }, { status: 'verified' });
63
+ console.log('Updated user:', updated);
64
+ // Update by ID
65
+ const updatedById = await db.users.updateById(1, {
66
+ last_login: new Date(),
67
+ });
68
+ console.log('Updated user by ID:', updatedById);
69
+ // Update many records
70
+ const updateCount = await db.users.updateMany({ status: 'inactive' }, { status: 'archived' });
71
+ console.log('Updated', updateCount, 'users');
72
+ // Delete one record
73
+ const deleted = await db.users.deleteOne({ email: 'test@example.com' });
74
+ console.log('Deleted:', deleted);
75
+ // Delete by ID
76
+ const deletedById = await db.users.deleteById(999);
77
+ console.log('Deleted by ID:', deletedById);
78
+ // === RAW SQL (Bypass cache) ===
79
+ const customQuery = await db.users.raw('SELECT COUNT(*) as total FROM users WHERE created_at > ?', [new Date('2024-01-01')]);
80
+ console.log('Custom query result:', customQuery);
81
+ // === CACHE MANAGEMENT ===
82
+ // Get cache statistics
83
+ const stats = db.getCacheManager().getStats();
84
+ console.log('Cache stats:', stats);
85
+ // Manually invalidate cache for a table
86
+ await db.users.invalidateCache();
87
+ // Warm cache (pre-populate for common queries)
88
+ await db.users.warmCache({ status: 'active' });
89
+ // === HEALTH CHECK ===
90
+ const health = await db.healthCheck();
91
+ console.log('Health:', health);
92
+ // === DISCOVERED TABLES ===
93
+ const tables = db.getDiscoveredTables();
94
+ console.log('Discovered tables:', tables);
95
+ }
96
+ finally {
97
+ // Close connections
98
+ await db.close();
99
+ }
100
+ }
101
+ // Run the example
102
+ if (require.main === module) {
103
+ basicUsageExample().catch(console.error);
104
+ }
105
+ //# sourceMappingURL=basic-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-usage.js","sourceRoot":"","sources":["../../../src/smart-cache/examples/basic-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare function hooksExample(): Promise<void>;
2
+ export { hooksExample };
3
+ //# sourceMappingURL=hooks-example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-example.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/examples/hooks-example.ts"],"names":[],"mappings":"AAEA,iBAAe,YAAY,kBAgJ1B;AAOD,OAAO,EAAE,YAAY,EAAE,CAAC"}