@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.
- package/LICENSE +21 -0
- package/README.md +811 -0
- package/dist/best-practice-example.d.ts +35 -0
- package/dist/best-practice-example.d.ts.map +1 -0
- package/dist/best-practice-example.js +171 -0
- package/dist/best-practice-example.js.map +1 -0
- package/dist/cache/cache-key-builder.d.ts +17 -0
- package/dist/cache/cache-key-builder.d.ts.map +1 -0
- package/dist/cache/cache-key-builder.js +100 -0
- package/dist/cache/cache-key-builder.js.map +1 -0
- package/dist/cache/cache-manager.d.ts +22 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +124 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cache/invalidation.d.ts +15 -0
- package/dist/cache/invalidation.d.ts.map +1 -0
- package/dist/cache/invalidation.js +59 -0
- package/dist/cache/invalidation.js.map +1 -0
- package/dist/client.d.ts +40 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +146 -0
- package/dist/client.js.map +1 -0
- package/dist/connection/mariadb.d.ts +17 -0
- package/dist/connection/mariadb.d.ts.map +1 -0
- package/dist/connection/mariadb.js +116 -0
- package/dist/connection/mariadb.js.map +1 -0
- package/dist/connection/redis.d.ts +20 -0
- package/dist/connection/redis.d.ts.map +1 -0
- package/dist/connection/redis.js +168 -0
- package/dist/connection/redis.js.map +1 -0
- package/dist/demo-debug.d.ts +2 -0
- package/dist/demo-debug.d.ts.map +1 -0
- package/dist/demo-debug.js +36 -0
- package/dist/demo-debug.js.map +1 -0
- package/dist/discovery/dependency-graph.d.ts +20 -0
- package/dist/discovery/dependency-graph.d.ts.map +1 -0
- package/dist/discovery/dependency-graph.js +89 -0
- package/dist/discovery/dependency-graph.js.map +1 -0
- package/dist/discovery/relationship-parser.d.ts +10 -0
- package/dist/discovery/relationship-parser.d.ts.map +1 -0
- package/dist/discovery/relationship-parser.js +40 -0
- package/dist/discovery/relationship-parser.js.map +1 -0
- package/dist/discovery/schema-reader.d.ts +15 -0
- package/dist/discovery/schema-reader.d.ts.map +1 -0
- package/dist/discovery/schema-reader.js +82 -0
- package/dist/discovery/schema-reader.js.map +1 -0
- package/dist/hooks/hooks-manager.d.ts +22 -0
- package/dist/hooks/hooks-manager.d.ts.map +1 -0
- package/dist/hooks/hooks-manager.js +117 -0
- package/dist/hooks/hooks-manager.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/query/operations.d.ts +31 -0
- package/dist/query/operations.d.ts.map +1 -0
- package/dist/query/operations.js +204 -0
- package/dist/query/operations.js.map +1 -0
- package/dist/query/query-builder.d.ts +15 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +169 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-tracker.d.ts +13 -0
- package/dist/query/query-tracker.d.ts.map +1 -0
- package/dist/query/query-tracker.js +84 -0
- package/dist/query/query-tracker.js.map +1 -0
- package/dist/query/table-proxy.d.ts +11 -0
- package/dist/query/table-proxy.d.ts.map +1 -0
- package/dist/query/table-proxy.js +25 -0
- package/dist/query/table-proxy.js.map +1 -0
- package/dist/smart-cache/cache/cache-key-builder.d.ts +17 -0
- package/dist/smart-cache/cache/cache-key-builder.d.ts.map +1 -0
- package/dist/smart-cache/cache/cache-key-builder.js +100 -0
- package/dist/smart-cache/cache/cache-key-builder.js.map +1 -0
- package/dist/smart-cache/cache/cache-manager.d.ts +22 -0
- package/dist/smart-cache/cache/cache-manager.d.ts.map +1 -0
- package/dist/smart-cache/cache/cache-manager.js +124 -0
- package/dist/smart-cache/cache/cache-manager.js.map +1 -0
- package/dist/smart-cache/cache/invalidation.d.ts +15 -0
- package/dist/smart-cache/cache/invalidation.d.ts.map +1 -0
- package/dist/smart-cache/cache/invalidation.js +59 -0
- package/dist/smart-cache/cache/invalidation.js.map +1 -0
- package/dist/smart-cache/client.d.ts +36 -0
- package/dist/smart-cache/client.d.ts.map +1 -0
- package/dist/smart-cache/client.js +138 -0
- package/dist/smart-cache/client.js.map +1 -0
- package/dist/smart-cache/connection/mariadb.d.ts +14 -0
- package/dist/smart-cache/connection/mariadb.d.ts.map +1 -0
- package/dist/smart-cache/connection/mariadb.js +82 -0
- package/dist/smart-cache/connection/mariadb.js.map +1 -0
- package/dist/smart-cache/connection/redis.d.ts +20 -0
- package/dist/smart-cache/connection/redis.d.ts.map +1 -0
- package/dist/smart-cache/connection/redis.js +168 -0
- package/dist/smart-cache/connection/redis.js.map +1 -0
- package/dist/smart-cache/discovery/dependency-graph.d.ts +20 -0
- package/dist/smart-cache/discovery/dependency-graph.d.ts.map +1 -0
- package/dist/smart-cache/discovery/dependency-graph.js +89 -0
- package/dist/smart-cache/discovery/dependency-graph.js.map +1 -0
- package/dist/smart-cache/discovery/relationship-parser.d.ts +10 -0
- package/dist/smart-cache/discovery/relationship-parser.d.ts.map +1 -0
- package/dist/smart-cache/discovery/relationship-parser.js +40 -0
- package/dist/smart-cache/discovery/relationship-parser.js.map +1 -0
- package/dist/smart-cache/discovery/schema-reader.d.ts +15 -0
- package/dist/smart-cache/discovery/schema-reader.d.ts.map +1 -0
- package/dist/smart-cache/discovery/schema-reader.js +82 -0
- package/dist/smart-cache/discovery/schema-reader.js.map +1 -0
- package/dist/smart-cache/examples/basic-usage.d.ts +3 -0
- package/dist/smart-cache/examples/basic-usage.d.ts.map +1 -0
- package/dist/smart-cache/examples/basic-usage.js +105 -0
- package/dist/smart-cache/examples/basic-usage.js.map +1 -0
- package/dist/smart-cache/examples/hooks-example.d.ts +3 -0
- package/dist/smart-cache/examples/hooks-example.d.ts.map +1 -0
- package/dist/smart-cache/examples/hooks-example.js +133 -0
- package/dist/smart-cache/examples/hooks-example.js.map +1 -0
- package/dist/smart-cache/examples/relationships-example.d.ts +3 -0
- package/dist/smart-cache/examples/relationships-example.d.ts.map +1 -0
- package/dist/smart-cache/examples/relationships-example.js +88 -0
- package/dist/smart-cache/examples/relationships-example.js.map +1 -0
- package/dist/smart-cache/hooks/hooks-manager.d.ts +22 -0
- package/dist/smart-cache/hooks/hooks-manager.d.ts.map +1 -0
- package/dist/smart-cache/hooks/hooks-manager.js +117 -0
- package/dist/smart-cache/hooks/hooks-manager.js.map +1 -0
- package/dist/smart-cache/index.d.ts +19 -0
- package/dist/smart-cache/index.d.ts.map +1 -0
- package/dist/smart-cache/index.js +49 -0
- package/dist/smart-cache/index.js.map +1 -0
- package/dist/smart-cache/query/operations.d.ts +31 -0
- package/dist/smart-cache/query/operations.d.ts.map +1 -0
- package/dist/smart-cache/query/operations.js +187 -0
- package/dist/smart-cache/query/operations.js.map +1 -0
- package/dist/smart-cache/query/query-builder.d.ts +15 -0
- package/dist/smart-cache/query/query-builder.d.ts.map +1 -0
- package/dist/smart-cache/query/query-builder.js +169 -0
- package/dist/smart-cache/query/query-builder.js.map +1 -0
- package/dist/smart-cache/query/table-proxy.d.ts +11 -0
- package/dist/smart-cache/query/table-proxy.d.ts.map +1 -0
- package/dist/smart-cache/query/table-proxy.js +25 -0
- package/dist/smart-cache/query/table-proxy.js.map +1 -0
- package/dist/smart-cache/types/cache.d.ts +29 -0
- package/dist/smart-cache/types/cache.d.ts.map +1 -0
- package/dist/smart-cache/types/cache.js +10 -0
- package/dist/smart-cache/types/cache.js.map +1 -0
- package/dist/smart-cache/types/config.d.ts +47 -0
- package/dist/smart-cache/types/config.d.ts.map +1 -0
- package/dist/smart-cache/types/config.js +27 -0
- package/dist/smart-cache/types/config.js.map +1 -0
- package/dist/smart-cache/types/query.d.ts +36 -0
- package/dist/smart-cache/types/query.d.ts.map +1 -0
- package/dist/smart-cache/types/query.js +3 -0
- package/dist/smart-cache/types/query.js.map +1 -0
- package/dist/smart-cache/types/schema.d.ts +25 -0
- package/dist/smart-cache/types/schema.d.ts.map +1 -0
- package/dist/smart-cache/types/schema.js +3 -0
- package/dist/smart-cache/types/schema.js.map +1 -0
- package/dist/trial.d.ts +7 -0
- package/dist/trial.d.ts.map +1 -0
- package/dist/trial.js +30 -0
- package/dist/trial.js.map +1 -0
- package/dist/types/cache.d.ts +29 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +10 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/config.d.ts +47 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +27 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/query.d.ts +55 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +3 -0
- package/dist/types/query.js.map +1 -0
- package/dist/types/schema.d.ts +25 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +3 -0
- package/dist/types/schema.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|