driftdetect-core 0.4.0 → 0.4.2
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/dist/boundaries/boundary-scanner.d.ts +76 -0
- package/dist/boundaries/boundary-scanner.d.ts.map +1 -0
- package/dist/boundaries/boundary-scanner.js +801 -0
- package/dist/boundaries/boundary-scanner.js.map +1 -0
- package/dist/boundaries/data-access-learner.d.ts +126 -0
- package/dist/boundaries/data-access-learner.d.ts.map +1 -0
- package/dist/boundaries/data-access-learner.js +486 -0
- package/dist/boundaries/data-access-learner.js.map +1 -0
- package/dist/boundaries/index.d.ts +6 -0
- package/dist/boundaries/index.d.ts.map +1 -1
- package/dist/boundaries/index.js +6 -0
- package/dist/boundaries/index.js.map +1 -1
- package/dist/boundaries/security-prioritizer.d.ts +118 -0
- package/dist/boundaries/security-prioritizer.d.ts.map +1 -0
- package/dist/boundaries/security-prioritizer.js +316 -0
- package/dist/boundaries/security-prioritizer.js.map +1 -0
- package/dist/call-graph/analysis/coverage-analyzer.d.ts +201 -0
- package/dist/call-graph/analysis/coverage-analyzer.d.ts.map +1 -0
- package/dist/call-graph/analysis/coverage-analyzer.js +553 -0
- package/dist/call-graph/analysis/coverage-analyzer.js.map +1 -0
- package/dist/call-graph/analysis/dead-code-detector.d.ts +145 -0
- package/dist/call-graph/analysis/dead-code-detector.d.ts.map +1 -0
- package/dist/call-graph/analysis/dead-code-detector.js +391 -0
- package/dist/call-graph/analysis/dead-code-detector.js.map +1 -0
- package/dist/call-graph/analysis/graph-builder.d.ts +142 -0
- package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -0
- package/dist/call-graph/analysis/graph-builder.js +624 -0
- package/dist/call-graph/analysis/graph-builder.js.map +1 -0
- package/dist/call-graph/analysis/impact-analyzer.d.ts +150 -0
- package/dist/call-graph/analysis/impact-analyzer.d.ts.map +1 -0
- package/dist/call-graph/analysis/impact-analyzer.js +329 -0
- package/dist/call-graph/analysis/impact-analyzer.js.map +1 -0
- package/dist/call-graph/analysis/index.d.ts +11 -0
- package/dist/call-graph/analysis/index.d.ts.map +1 -0
- package/dist/call-graph/analysis/index.js +9 -0
- package/dist/call-graph/analysis/index.js.map +1 -0
- package/dist/call-graph/analysis/path-finder.d.ts +117 -0
- package/dist/call-graph/analysis/path-finder.d.ts.map +1 -0
- package/dist/call-graph/analysis/path-finder.js +360 -0
- package/dist/call-graph/analysis/path-finder.js.map +1 -0
- package/dist/call-graph/analysis/reachability.d.ts +56 -0
- package/dist/call-graph/analysis/reachability.d.ts.map +1 -0
- package/dist/call-graph/analysis/reachability.js +357 -0
- package/dist/call-graph/analysis/reachability.js.map +1 -0
- package/dist/call-graph/demo.d.ts +11 -0
- package/dist/call-graph/demo.d.ts.map +1 -0
- package/dist/call-graph/demo.js +339 -0
- package/dist/call-graph/demo.js.map +1 -0
- package/dist/call-graph/enrichment/enrichment-engine.d.ts +126 -0
- package/dist/call-graph/enrichment/enrichment-engine.d.ts.map +1 -0
- package/dist/call-graph/enrichment/enrichment-engine.js +760 -0
- package/dist/call-graph/enrichment/enrichment-engine.js.map +1 -0
- package/dist/call-graph/enrichment/impact-scorer.d.ts +59 -0
- package/dist/call-graph/enrichment/impact-scorer.d.ts.map +1 -0
- package/dist/call-graph/enrichment/impact-scorer.js +328 -0
- package/dist/call-graph/enrichment/impact-scorer.js.map +1 -0
- package/dist/call-graph/enrichment/index.d.ts +12 -0
- package/dist/call-graph/enrichment/index.d.ts.map +1 -0
- package/dist/call-graph/enrichment/index.js +15 -0
- package/dist/call-graph/enrichment/index.js.map +1 -0
- package/dist/call-graph/enrichment/remediation-generator.d.ts +41 -0
- package/dist/call-graph/enrichment/remediation-generator.d.ts.map +1 -0
- package/dist/call-graph/enrichment/remediation-generator.js +609 -0
- package/dist/call-graph/enrichment/remediation-generator.js.map +1 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.d.ts +71 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.d.ts.map +1 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.js +454 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.js.map +1 -0
- package/dist/call-graph/enrichment/types.d.ts +402 -0
- package/dist/call-graph/enrichment/types.d.ts.map +1 -0
- package/dist/call-graph/enrichment/types.js +9 -0
- package/dist/call-graph/enrichment/types.js.map +1 -0
- package/dist/call-graph/extractors/base-extractor.d.ts +112 -0
- package/dist/call-graph/extractors/base-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/base-extractor.js +140 -0
- package/dist/call-graph/extractors/base-extractor.js.map +1 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +76 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.js +387 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/csharp-extractor.d.ts +87 -0
- package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/csharp-extractor.js +470 -0
- package/dist/call-graph/extractors/csharp-extractor.js.map +1 -0
- package/dist/call-graph/extractors/data-access-extractor.d.ts +76 -0
- package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/data-access-extractor.js +234 -0
- package/dist/call-graph/extractors/data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/index.d.ts +26 -0
- package/dist/call-graph/extractors/index.d.ts.map +1 -0
- package/dist/call-graph/extractors/index.js +36 -0
- package/dist/call-graph/extractors/index.js.map +1 -0
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts +101 -0
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/java-data-access-extractor.js +611 -0
- package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/java-extractor.d.ts +87 -0
- package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/java-extractor.js +510 -0
- package/dist/call-graph/extractors/java-extractor.js.map +1 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts +93 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/php-data-access-extractor.js +589 -0
- package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/php-extractor.d.ts +104 -0
- package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/php-extractor.js +619 -0
- package/dist/call-graph/extractors/php-extractor.js.map +1 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts +90 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/python-data-access-extractor.js +537 -0
- package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/python-extractor.d.ts +98 -0
- package/dist/call-graph/extractors/python-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/python-extractor.js +681 -0
- package/dist/call-graph/extractors/python-extractor.js.map +1 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +91 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.js +498 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +122 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.js +788 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/typescript-extractor.d.ts +145 -0
- package/dist/call-graph/extractors/typescript-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/typescript-extractor.js +904 -0
- package/dist/call-graph/extractors/typescript-extractor.js.map +1 -0
- package/dist/call-graph/index.d.ts +127 -0
- package/dist/call-graph/index.d.ts.map +1 -0
- package/dist/call-graph/index.js +247 -0
- package/dist/call-graph/index.js.map +1 -0
- package/dist/call-graph/store/call-graph-store.d.ts +70 -0
- package/dist/call-graph/store/call-graph-store.d.ts.map +1 -0
- package/dist/call-graph/store/call-graph-store.js +210 -0
- package/dist/call-graph/store/call-graph-store.js.map +1 -0
- package/dist/call-graph/store/index.d.ts +7 -0
- package/dist/call-graph/store/index.d.ts.map +1 -0
- package/dist/call-graph/store/index.js +7 -0
- package/dist/call-graph/store/index.js.map +1 -0
- package/dist/call-graph/types.d.ts +376 -0
- package/dist/call-graph/types.d.ts.map +1 -0
- package/dist/call-graph/types.js +8 -0
- package/dist/call-graph/types.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/lake/callgraph-shard-store.d.ts +168 -0
- package/dist/lake/callgraph-shard-store.d.ts.map +1 -0
- package/dist/lake/callgraph-shard-store.js +466 -0
- package/dist/lake/callgraph-shard-store.js.map +1 -0
- package/dist/lake/examples-store.d.ts +127 -0
- package/dist/lake/examples-store.d.ts.map +1 -0
- package/dist/lake/examples-store.js +389 -0
- package/dist/lake/examples-store.js.map +1 -0
- package/dist/lake/index-store.d.ts +82 -0
- package/dist/lake/index-store.d.ts.map +1 -0
- package/dist/lake/index-store.js +359 -0
- package/dist/lake/index-store.js.map +1 -0
- package/dist/lake/index.d.ts +93 -0
- package/dist/lake/index.d.ts.map +1 -0
- package/dist/lake/index.js +138 -0
- package/dist/lake/index.js.map +1 -0
- package/dist/lake/lake.bak/index-store.d.ts +82 -0
- package/dist/lake/lake.bak/index-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/index-store.js +357 -0
- package/dist/lake/lake.bak/index-store.js.map +1 -0
- package/dist/lake/lake.bak/index.d.ts +81 -0
- package/dist/lake/lake.bak/index.d.ts.map +1 -0
- package/dist/lake/lake.bak/index.js +114 -0
- package/dist/lake/lake.bak/index.js.map +1 -0
- package/dist/lake/lake.bak/manifest-store.d.ts +51 -0
- package/dist/lake/lake.bak/manifest-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/manifest-store.js +347 -0
- package/dist/lake/lake.bak/manifest-store.js.map +1 -0
- package/dist/lake/lake.bak/query-engine.d.ts +112 -0
- package/dist/lake/lake.bak/query-engine.d.ts.map +1 -0
- package/dist/lake/lake.bak/query-engine.js +370 -0
- package/dist/lake/lake.bak/query-engine.js.map +1 -0
- package/dist/lake/lake.bak/types.d.ts +428 -0
- package/dist/lake/lake.bak/types.d.ts.map +1 -0
- package/dist/lake/lake.bak/types.js +46 -0
- package/dist/lake/lake.bak/types.js.map +1 -0
- package/dist/lake/lake.bak/view-materializer.d.ts +70 -0
- package/dist/lake/lake.bak/view-materializer.d.ts.map +1 -0
- package/dist/lake/lake.bak/view-materializer.js +314 -0
- package/dist/lake/lake.bak/view-materializer.js.map +1 -0
- package/dist/lake/lake.bak/view-store.d.ts +57 -0
- package/dist/lake/lake.bak/view-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/view-store.js +348 -0
- package/dist/lake/lake.bak/view-store.js.map +1 -0
- package/dist/lake/manifest-store.d.ts +51 -0
- package/dist/lake/manifest-store.d.ts.map +1 -0
- package/dist/lake/manifest-store.js +348 -0
- package/dist/lake/manifest-store.js.map +1 -0
- package/dist/lake/pattern-shard-store.d.ts +87 -0
- package/dist/lake/pattern-shard-store.d.ts.map +1 -0
- package/dist/lake/pattern-shard-store.js +347 -0
- package/dist/lake/pattern-shard-store.js.map +1 -0
- package/dist/lake/query-engine.d.ts +124 -0
- package/dist/lake/query-engine.d.ts.map +1 -0
- package/dist/lake/query-engine.js +453 -0
- package/dist/lake/query-engine.js.map +1 -0
- package/dist/lake/security-shard-store.d.ts +156 -0
- package/dist/lake/security-shard-store.d.ts.map +1 -0
- package/dist/lake/security-shard-store.js +498 -0
- package/dist/lake/security-shard-store.js.map +1 -0
- package/dist/lake/types.d.ts +428 -0
- package/dist/lake/types.d.ts.map +1 -0
- package/dist/lake/types.js +46 -0
- package/dist/lake/types.js.map +1 -0
- package/dist/lake/view-materializer.d.ts +70 -0
- package/dist/lake/view-materializer.d.ts.map +1 -0
- package/dist/lake/view-materializer.js +314 -0
- package/dist/lake/view-materializer.js.map +1 -0
- package/dist/lake/view-store.d.ts +57 -0
- package/dist/lake/view-store.d.ts.map +1 -0
- package/dist/lake/view-store.js +348 -0
- package/dist/lake/view-store.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +1 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
- package/dist/parsers/tree-sitter/index.js +4 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -1
- package/dist/parsers/tree-sitter/typescript-loader.d.ts +58 -0
- package/dist/parsers/tree-sitter/typescript-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/typescript-loader.js +250 -0
- package/dist/parsers/tree-sitter/typescript-loader.js.map +1 -0
- package/dist/store/project-config.d.ts +154 -0
- package/dist/store/project-config.d.ts.map +1 -0
- package/dist/store/project-config.js +235 -0
- package/dist/store/project-config.js.map +1 -0
- package/dist/store/project-registry.d.ts +241 -0
- package/dist/store/project-registry.d.ts.map +1 -0
- package/dist/store/project-registry.js +557 -0
- package/dist/store/project-registry.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Index Store
|
|
3
|
+
*
|
|
4
|
+
* Manages pre-built indexes for fast lookups.
|
|
5
|
+
* Indexes map common query dimensions to IDs for O(1) access.
|
|
6
|
+
*
|
|
7
|
+
* Key indexes:
|
|
8
|
+
* - by-file: file path → pattern/function/access IDs
|
|
9
|
+
* - by-category: category → pattern IDs
|
|
10
|
+
* - by-table: table name → access point/function IDs
|
|
11
|
+
* - by-entry-point: entry point → reachable function IDs
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs/promises';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import { EventEmitter } from 'node:events';
|
|
16
|
+
import { LAKE_DIRS, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Helper Functions
|
|
19
|
+
// ============================================================================
|
|
20
|
+
async function fileExists(filePath) {
|
|
21
|
+
try {
|
|
22
|
+
await fs.access(filePath);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function ensureDir(dirPath) {
|
|
30
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Index Store Class
|
|
34
|
+
// ============================================================================
|
|
35
|
+
export class IndexStore extends EventEmitter {
|
|
36
|
+
config;
|
|
37
|
+
indexesDir;
|
|
38
|
+
// In-memory cache
|
|
39
|
+
fileIndexCache = null;
|
|
40
|
+
categoryIndexCache = null;
|
|
41
|
+
tableIndexCache = null;
|
|
42
|
+
entryPointIndexCache = null;
|
|
43
|
+
constructor(config = {}) {
|
|
44
|
+
super();
|
|
45
|
+
this.config = { ...DEFAULT_DATA_LAKE_CONFIG, ...config };
|
|
46
|
+
this.indexesDir = path.join(this.config.rootDir, LAKE_DIRS.root, LAKE_DIRS.indexes);
|
|
47
|
+
}
|
|
48
|
+
// ==========================================================================
|
|
49
|
+
// Initialization
|
|
50
|
+
// ==========================================================================
|
|
51
|
+
async initialize() {
|
|
52
|
+
await ensureDir(this.indexesDir);
|
|
53
|
+
}
|
|
54
|
+
// ==========================================================================
|
|
55
|
+
// File Index
|
|
56
|
+
// ==========================================================================
|
|
57
|
+
async getFileIndex() {
|
|
58
|
+
if (this.fileIndexCache) {
|
|
59
|
+
return this.fileIndexCache;
|
|
60
|
+
}
|
|
61
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byFile);
|
|
62
|
+
if (!(await fileExists(filePath))) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
67
|
+
this.fileIndexCache = JSON.parse(content);
|
|
68
|
+
return this.fileIndexCache;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async saveFileIndex(index) {
|
|
75
|
+
await ensureDir(this.indexesDir);
|
|
76
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byFile);
|
|
77
|
+
await fs.writeFile(filePath, JSON.stringify(index, null, 2));
|
|
78
|
+
this.fileIndexCache = index;
|
|
79
|
+
this.emit('index:saved', 'byFile', index);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build file index from patterns
|
|
83
|
+
*/
|
|
84
|
+
buildFileIndex(patterns) {
|
|
85
|
+
const patternsByFile = {};
|
|
86
|
+
for (const pattern of patterns) {
|
|
87
|
+
for (const location of pattern.locations) {
|
|
88
|
+
if (!patternsByFile[location.file]) {
|
|
89
|
+
patternsByFile[location.file] = [];
|
|
90
|
+
}
|
|
91
|
+
const filePatterns = patternsByFile[location.file];
|
|
92
|
+
if (filePatterns && !filePatterns.includes(pattern.id)) {
|
|
93
|
+
filePatterns.push(pattern.id);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (const outlier of pattern.outliers) {
|
|
97
|
+
if (!patternsByFile[outlier.file]) {
|
|
98
|
+
patternsByFile[outlier.file] = [];
|
|
99
|
+
}
|
|
100
|
+
const filePatterns = patternsByFile[outlier.file];
|
|
101
|
+
if (filePatterns && !filePatterns.includes(pattern.id)) {
|
|
102
|
+
filePatterns.push(pattern.id);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
generatedAt: new Date().toISOString(),
|
|
108
|
+
patterns: patternsByFile,
|
|
109
|
+
accessPoints: {}, // Populated by boundary scanner
|
|
110
|
+
functions: {}, // Populated by call graph builder
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get pattern IDs for a specific file
|
|
115
|
+
*/
|
|
116
|
+
async getPatternIdsForFile(file) {
|
|
117
|
+
const index = await this.getFileIndex();
|
|
118
|
+
return index?.patterns[file] ?? [];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update file index for specific files (incremental)
|
|
122
|
+
*/
|
|
123
|
+
async updateFileIndex(file, patternIds, accessPointIds, functionIds) {
|
|
124
|
+
let index = await this.getFileIndex();
|
|
125
|
+
if (!index) {
|
|
126
|
+
index = {
|
|
127
|
+
generatedAt: new Date().toISOString(),
|
|
128
|
+
patterns: {},
|
|
129
|
+
accessPoints: {},
|
|
130
|
+
functions: {},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
index.patterns[file] = patternIds;
|
|
134
|
+
if (accessPointIds) {
|
|
135
|
+
index.accessPoints[file] = accessPointIds;
|
|
136
|
+
}
|
|
137
|
+
if (functionIds) {
|
|
138
|
+
index.functions[file] = functionIds;
|
|
139
|
+
}
|
|
140
|
+
index.generatedAt = new Date().toISOString();
|
|
141
|
+
await this.saveFileIndex(index);
|
|
142
|
+
}
|
|
143
|
+
// ==========================================================================
|
|
144
|
+
// Category Index
|
|
145
|
+
// ==========================================================================
|
|
146
|
+
async getCategoryIndex() {
|
|
147
|
+
if (this.categoryIndexCache) {
|
|
148
|
+
return this.categoryIndexCache;
|
|
149
|
+
}
|
|
150
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byCategory);
|
|
151
|
+
if (!(await fileExists(filePath))) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
156
|
+
this.categoryIndexCache = JSON.parse(content);
|
|
157
|
+
return this.categoryIndexCache;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async saveCategoryIndex(index) {
|
|
164
|
+
await ensureDir(this.indexesDir);
|
|
165
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byCategory);
|
|
166
|
+
await fs.writeFile(filePath, JSON.stringify(index, null, 2));
|
|
167
|
+
this.categoryIndexCache = index;
|
|
168
|
+
this.emit('index:saved', 'byCategory', index);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Build category index from patterns
|
|
172
|
+
*/
|
|
173
|
+
buildCategoryIndex(patterns) {
|
|
174
|
+
const patternsByCategory = {};
|
|
175
|
+
const counts = {};
|
|
176
|
+
for (const pattern of patterns) {
|
|
177
|
+
if (!patternsByCategory[pattern.category]) {
|
|
178
|
+
patternsByCategory[pattern.category] = [];
|
|
179
|
+
counts[pattern.category] = 0;
|
|
180
|
+
}
|
|
181
|
+
patternsByCategory[pattern.category].push(pattern.id);
|
|
182
|
+
counts[pattern.category]++;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
generatedAt: new Date().toISOString(),
|
|
186
|
+
patterns: patternsByCategory,
|
|
187
|
+
counts,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get pattern IDs for a specific category
|
|
192
|
+
*/
|
|
193
|
+
async getPatternIdsForCategory(category) {
|
|
194
|
+
const index = await this.getCategoryIndex();
|
|
195
|
+
return index?.patterns[category] ?? [];
|
|
196
|
+
}
|
|
197
|
+
// ==========================================================================
|
|
198
|
+
// Table Index
|
|
199
|
+
// ==========================================================================
|
|
200
|
+
async getTableIndex() {
|
|
201
|
+
if (this.tableIndexCache) {
|
|
202
|
+
return this.tableIndexCache;
|
|
203
|
+
}
|
|
204
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byTable);
|
|
205
|
+
if (!(await fileExists(filePath))) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
210
|
+
this.tableIndexCache = JSON.parse(content);
|
|
211
|
+
return this.tableIndexCache;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async saveTableIndex(index) {
|
|
218
|
+
await ensureDir(this.indexesDir);
|
|
219
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byTable);
|
|
220
|
+
await fs.writeFile(filePath, JSON.stringify(index, null, 2));
|
|
221
|
+
this.tableIndexCache = index;
|
|
222
|
+
this.emit('index:saved', 'byTable', index);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get access point IDs for a specific table
|
|
226
|
+
*/
|
|
227
|
+
async getAccessPointIdsForTable(table) {
|
|
228
|
+
const index = await this.getTableIndex();
|
|
229
|
+
return index?.accessPoints[table] ?? [];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get function IDs that access a specific table
|
|
233
|
+
*/
|
|
234
|
+
async getAccessorIdsForTable(table) {
|
|
235
|
+
const index = await this.getTableIndex();
|
|
236
|
+
return index?.accessors[table] ?? [];
|
|
237
|
+
}
|
|
238
|
+
// ==========================================================================
|
|
239
|
+
// Entry Point Index
|
|
240
|
+
// ==========================================================================
|
|
241
|
+
async getEntryPointIndex() {
|
|
242
|
+
if (this.entryPointIndexCache) {
|
|
243
|
+
return this.entryPointIndexCache;
|
|
244
|
+
}
|
|
245
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byEntryPoint);
|
|
246
|
+
if (!(await fileExists(filePath))) {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
251
|
+
this.entryPointIndexCache = JSON.parse(content);
|
|
252
|
+
return this.entryPointIndexCache;
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async saveEntryPointIndex(index) {
|
|
259
|
+
await ensureDir(this.indexesDir);
|
|
260
|
+
const filePath = path.join(this.indexesDir, INDEX_FILES.byEntryPoint);
|
|
261
|
+
await fs.writeFile(filePath, JSON.stringify(index, null, 2));
|
|
262
|
+
this.entryPointIndexCache = index;
|
|
263
|
+
this.emit('index:saved', 'byEntryPoint', index);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get reachable function IDs from an entry point
|
|
267
|
+
*/
|
|
268
|
+
async getReachableFunctions(entryPointId) {
|
|
269
|
+
const index = await this.getEntryPointIndex();
|
|
270
|
+
return index?.reachable[entryPointId] ?? [];
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get tables reachable from an entry point
|
|
274
|
+
*/
|
|
275
|
+
async getReachableTables(entryPointId) {
|
|
276
|
+
const index = await this.getEntryPointIndex();
|
|
277
|
+
return index?.tables[entryPointId] ?? [];
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get sensitive data reachable from an entry point
|
|
281
|
+
*/
|
|
282
|
+
async getReachableSensitiveData(entryPointId) {
|
|
283
|
+
const index = await this.getEntryPointIndex();
|
|
284
|
+
return index?.sensitiveData[entryPointId] ?? [];
|
|
285
|
+
}
|
|
286
|
+
// ==========================================================================
|
|
287
|
+
// Cache Management
|
|
288
|
+
// ==========================================================================
|
|
289
|
+
invalidateCache(index) {
|
|
290
|
+
if (!index) {
|
|
291
|
+
this.fileIndexCache = null;
|
|
292
|
+
this.categoryIndexCache = null;
|
|
293
|
+
this.tableIndexCache = null;
|
|
294
|
+
this.entryPointIndexCache = null;
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
switch (index) {
|
|
298
|
+
case 'byFile':
|
|
299
|
+
this.fileIndexCache = null;
|
|
300
|
+
break;
|
|
301
|
+
case 'byCategory':
|
|
302
|
+
this.categoryIndexCache = null;
|
|
303
|
+
break;
|
|
304
|
+
case 'byTable':
|
|
305
|
+
this.tableIndexCache = null;
|
|
306
|
+
break;
|
|
307
|
+
case 'byEntryPoint':
|
|
308
|
+
this.entryPointIndexCache = null;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// ==========================================================================
|
|
313
|
+
// Bulk Operations
|
|
314
|
+
// ==========================================================================
|
|
315
|
+
async hasIndex(index) {
|
|
316
|
+
const files = {
|
|
317
|
+
byFile: INDEX_FILES.byFile,
|
|
318
|
+
byCategory: INDEX_FILES.byCategory,
|
|
319
|
+
byTable: INDEX_FILES.byTable,
|
|
320
|
+
byEntryPoint: INDEX_FILES.byEntryPoint,
|
|
321
|
+
};
|
|
322
|
+
const filePath = path.join(this.indexesDir, files[index]);
|
|
323
|
+
return fileExists(filePath);
|
|
324
|
+
}
|
|
325
|
+
async deleteIndex(index) {
|
|
326
|
+
const files = {
|
|
327
|
+
byFile: INDEX_FILES.byFile,
|
|
328
|
+
byCategory: INDEX_FILES.byCategory,
|
|
329
|
+
byTable: INDEX_FILES.byTable,
|
|
330
|
+
byEntryPoint: INDEX_FILES.byEntryPoint,
|
|
331
|
+
};
|
|
332
|
+
const filePath = path.join(this.indexesDir, files[index]);
|
|
333
|
+
try {
|
|
334
|
+
await fs.unlink(filePath);
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
// Ignore if doesn't exist
|
|
338
|
+
}
|
|
339
|
+
this.invalidateCache(index);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Rebuild all indexes from patterns
|
|
343
|
+
*/
|
|
344
|
+
async rebuildAllIndexes(patterns) {
|
|
345
|
+
const fileIndex = this.buildFileIndex(patterns);
|
|
346
|
+
const categoryIndex = this.buildCategoryIndex(patterns);
|
|
347
|
+
await Promise.all([
|
|
348
|
+
this.saveFileIndex(fileIndex),
|
|
349
|
+
this.saveCategoryIndex(categoryIndex),
|
|
350
|
+
]);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// ============================================================================
|
|
354
|
+
// Factory Function
|
|
355
|
+
// ============================================================================
|
|
356
|
+
export function createIndexStore(config = {}) {
|
|
357
|
+
return new IndexStore(config);
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=index-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-store.js","sourceRoot":"","sources":["../../src/lake/index-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Lake Module
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade data storage with materialized views, indexes, and query optimization.
|
|
5
|
+
*
|
|
6
|
+
* Architecture:
|
|
7
|
+
* - ManifestStore: Quick-load index of everything (instant drift_status)
|
|
8
|
+
* - ViewStore: Pre-computed views for common queries
|
|
9
|
+
* - IndexStore: Fast lookups by file, category, table, entry point
|
|
10
|
+
* - QueryEngine: Unified query API with automatic view/index selection
|
|
11
|
+
* - ViewMaterializer: Rebuilds views after scans
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { createDataLake } from './lake';
|
|
16
|
+
*
|
|
17
|
+
* const lake = createDataLake({ rootDir: '/path/to/project' });
|
|
18
|
+
* await lake.initialize();
|
|
19
|
+
*
|
|
20
|
+
* // Instant status (reads pre-computed view)
|
|
21
|
+
* const status = await lake.query.getStatus();
|
|
22
|
+
*
|
|
23
|
+
* // Fast pattern listing (uses index + view)
|
|
24
|
+
* const patterns = await lake.query.getPatterns({ categories: ['api'] });
|
|
25
|
+
*
|
|
26
|
+
* // After scan, materialize views
|
|
27
|
+
* await lake.materializer.materialize(patterns, {}, { lastScan: scanInfo });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export type { DriftManifest, ManifestStats, PatternStats as LakePatternStats, SecurityStats as LakeSecurityStats, CallGraphStats as LakeCallGraphStats, ContractStats as LakeContractStats, DNAStats as LakeDNAStats, LastScanInfo, ViewFreshness, ViewMeta, StatusView, PatternIndexView, PatternSummary as LakePatternSummary, SecuritySummaryView, TrendsView, HealthFactor, TopIssue, SensitiveTableSummary, ViolationSummary, TrendItem, CategoryTrend, FileIndex, CategoryIndex, TableIndex, EntryPointIndex, Shard, PatternShard, PatternShardEntry, PatternLocation as LakePatternLocation, PatternMetadata as LakePatternMetadata, AccessMapShard, SensitiveFieldInfo, AccessPointEntry, CallGraphShard, FunctionEntry, DataAccessRef, PatternExamples, CodeExample, IncrementalUpdate, ViewType, IndexType, DataLakeConfig, } from './types.js';
|
|
31
|
+
export { LAKE_VERSION, LAKE_DIRS, VIEW_FILES, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
|
|
32
|
+
export { ManifestStore as LakeManifestStore, createManifestStore } from './manifest-store.js';
|
|
33
|
+
export { ViewStore, createViewStore } from './view-store.js';
|
|
34
|
+
export { IndexStore, createIndexStore } from './index-store.js';
|
|
35
|
+
export { PatternShardStore, createPatternShardStore } from './pattern-shard-store.js';
|
|
36
|
+
export { SecurityShardStore, createSecurityShardStore, type SecurityIndex, type TableIndexEntry, type SensitiveTableEntry, type ViolationEntry, type SensitiveFieldRegistry, type SensitiveFieldRecord, } from './security-shard-store.js';
|
|
37
|
+
export { ExamplesStore, createExamplesStore, type ExamplesIndex, type ExampleIndexEntry, type ExampleExtractionOptions, } from './examples-store.js';
|
|
38
|
+
export { CallGraphShardStore, createCallGraphShardStore, type CallGraphIndex, type FileIndexEntry as CallGraphFileIndexEntry, type EntryPointSummary, type DataAccessorSummary, type EntryPointsData, type EntryPointDetail, } from './callgraph-shard-store.js';
|
|
39
|
+
export { QueryEngine, createQueryEngine, type PaginationOptions, type PaginatedResult, type PatternQueryOptions, type QueryStats, } from './query-engine.js';
|
|
40
|
+
export { ViewMaterializer, createViewMaterializer, type MaterializeOptions, type MaterializeResult, } from './view-materializer.js';
|
|
41
|
+
import type { DataLakeConfig } from './types.js';
|
|
42
|
+
import { ManifestStore } from './manifest-store.js';
|
|
43
|
+
import { ViewStore } from './view-store.js';
|
|
44
|
+
import { IndexStore } from './index-store.js';
|
|
45
|
+
import { PatternShardStore } from './pattern-shard-store.js';
|
|
46
|
+
import { SecurityShardStore } from './security-shard-store.js';
|
|
47
|
+
import { ExamplesStore } from './examples-store.js';
|
|
48
|
+
import { CallGraphShardStore } from './callgraph-shard-store.js';
|
|
49
|
+
import { QueryEngine } from './query-engine.js';
|
|
50
|
+
import { ViewMaterializer } from './view-materializer.js';
|
|
51
|
+
import type { Pattern } from '../store/types.js';
|
|
52
|
+
/**
|
|
53
|
+
* Data Lake - Unified interface for all data lake operations
|
|
54
|
+
*/
|
|
55
|
+
export declare class DataLake {
|
|
56
|
+
readonly config: DataLakeConfig;
|
|
57
|
+
readonly manifest: ManifestStore;
|
|
58
|
+
readonly views: ViewStore;
|
|
59
|
+
readonly indexes: IndexStore;
|
|
60
|
+
readonly patternShards: PatternShardStore;
|
|
61
|
+
readonly securityShards: SecurityShardStore;
|
|
62
|
+
readonly examples: ExamplesStore;
|
|
63
|
+
readonly callGraphShards: CallGraphShardStore;
|
|
64
|
+
readonly query: QueryEngine;
|
|
65
|
+
readonly materializer: ViewMaterializer;
|
|
66
|
+
private initialized;
|
|
67
|
+
constructor(config?: Partial<DataLakeConfig>);
|
|
68
|
+
/**
|
|
69
|
+
* Initialize the data lake
|
|
70
|
+
*/
|
|
71
|
+
initialize(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Set the raw pattern loader for fallback queries
|
|
74
|
+
*/
|
|
75
|
+
setPatternLoader(loader: () => Promise<Pattern[]>): void;
|
|
76
|
+
/**
|
|
77
|
+
* Check if the data lake has been initialized with data
|
|
78
|
+
*/
|
|
79
|
+
hasData(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Get quick stats (instant, from manifest)
|
|
82
|
+
*/
|
|
83
|
+
getQuickStats(): import("./types.js").ManifestStats;
|
|
84
|
+
/**
|
|
85
|
+
* Invalidate all caches and views
|
|
86
|
+
*/
|
|
87
|
+
invalidateAll(): void;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a new DataLake instance
|
|
91
|
+
*/
|
|
92
|
+
export declare function createDataLake(config?: Partial<DataLakeConfig>): DataLake;
|
|
93
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lake/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Lake Module
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade data storage with materialized views, indexes, and query optimization.
|
|
5
|
+
*
|
|
6
|
+
* Architecture:
|
|
7
|
+
* - ManifestStore: Quick-load index of everything (instant drift_status)
|
|
8
|
+
* - ViewStore: Pre-computed views for common queries
|
|
9
|
+
* - IndexStore: Fast lookups by file, category, table, entry point
|
|
10
|
+
* - QueryEngine: Unified query API with automatic view/index selection
|
|
11
|
+
* - ViewMaterializer: Rebuilds views after scans
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { createDataLake } from './lake';
|
|
16
|
+
*
|
|
17
|
+
* const lake = createDataLake({ rootDir: '/path/to/project' });
|
|
18
|
+
* await lake.initialize();
|
|
19
|
+
*
|
|
20
|
+
* // Instant status (reads pre-computed view)
|
|
21
|
+
* const status = await lake.query.getStatus();
|
|
22
|
+
*
|
|
23
|
+
* // Fast pattern listing (uses index + view)
|
|
24
|
+
* const patterns = await lake.query.getPatterns({ categories: ['api'] });
|
|
25
|
+
*
|
|
26
|
+
* // After scan, materialize views
|
|
27
|
+
* await lake.materializer.materialize(patterns, {}, { lastScan: scanInfo });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export { LAKE_VERSION, LAKE_DIRS, VIEW_FILES, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
|
|
31
|
+
// Stores - Use Lake prefix to avoid conflicts
|
|
32
|
+
export { ManifestStore as LakeManifestStore, createManifestStore } from './manifest-store.js';
|
|
33
|
+
export { ViewStore, createViewStore } from './view-store.js';
|
|
34
|
+
export { IndexStore, createIndexStore } from './index-store.js';
|
|
35
|
+
export { PatternShardStore, createPatternShardStore } from './pattern-shard-store.js';
|
|
36
|
+
export { SecurityShardStore, createSecurityShardStore, } from './security-shard-store.js';
|
|
37
|
+
export { ExamplesStore, createExamplesStore, } from './examples-store.js';
|
|
38
|
+
export { CallGraphShardStore, createCallGraphShardStore, } from './callgraph-shard-store.js';
|
|
39
|
+
// Query Engine
|
|
40
|
+
export { QueryEngine, createQueryEngine, } from './query-engine.js';
|
|
41
|
+
// View Materializer
|
|
42
|
+
export { ViewMaterializer, createViewMaterializer, } from './view-materializer.js';
|
|
43
|
+
import { DEFAULT_DATA_LAKE_CONFIG } from './types.js';
|
|
44
|
+
import { ManifestStore } from './manifest-store.js';
|
|
45
|
+
import { ViewStore } from './view-store.js';
|
|
46
|
+
import { IndexStore } from './index-store.js';
|
|
47
|
+
import { PatternShardStore } from './pattern-shard-store.js';
|
|
48
|
+
import { SecurityShardStore } from './security-shard-store.js';
|
|
49
|
+
import { ExamplesStore } from './examples-store.js';
|
|
50
|
+
import { CallGraphShardStore } from './callgraph-shard-store.js';
|
|
51
|
+
import { QueryEngine } from './query-engine.js';
|
|
52
|
+
import { ViewMaterializer } from './view-materializer.js';
|
|
53
|
+
/**
|
|
54
|
+
* Data Lake - Unified interface for all data lake operations
|
|
55
|
+
*/
|
|
56
|
+
export class DataLake {
|
|
57
|
+
config;
|
|
58
|
+
manifest;
|
|
59
|
+
views;
|
|
60
|
+
indexes;
|
|
61
|
+
patternShards;
|
|
62
|
+
securityShards;
|
|
63
|
+
examples;
|
|
64
|
+
callGraphShards;
|
|
65
|
+
query;
|
|
66
|
+
materializer;
|
|
67
|
+
initialized = false;
|
|
68
|
+
constructor(config = {}) {
|
|
69
|
+
this.config = { ...DEFAULT_DATA_LAKE_CONFIG, ...config };
|
|
70
|
+
// Create stores
|
|
71
|
+
this.manifest = new ManifestStore(this.config);
|
|
72
|
+
this.views = new ViewStore(this.config);
|
|
73
|
+
this.indexes = new IndexStore(this.config);
|
|
74
|
+
this.patternShards = new PatternShardStore(this.config);
|
|
75
|
+
this.securityShards = new SecurityShardStore(this.config);
|
|
76
|
+
this.examples = new ExamplesStore(this.config);
|
|
77
|
+
this.callGraphShards = new CallGraphShardStore(this.config);
|
|
78
|
+
// Create query engine with stores
|
|
79
|
+
this.query = new QueryEngine(this.config, this.manifest, this.views, this.indexes, this.patternShards);
|
|
80
|
+
// Create materializer with stores
|
|
81
|
+
this.materializer = new ViewMaterializer(this.config, this.manifest, this.views, this.indexes);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize the data lake
|
|
85
|
+
*/
|
|
86
|
+
async initialize() {
|
|
87
|
+
if (this.initialized)
|
|
88
|
+
return;
|
|
89
|
+
await Promise.all([
|
|
90
|
+
this.manifest.initialize(),
|
|
91
|
+
this.views.initialize(),
|
|
92
|
+
this.indexes.initialize(),
|
|
93
|
+
this.patternShards.initialize(),
|
|
94
|
+
this.securityShards.initialize(),
|
|
95
|
+
this.examples.initialize(),
|
|
96
|
+
this.callGraphShards.initialize(),
|
|
97
|
+
]);
|
|
98
|
+
this.initialized = true;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Set the raw pattern loader for fallback queries
|
|
102
|
+
*/
|
|
103
|
+
setPatternLoader(loader) {
|
|
104
|
+
this.query.setRawPatternLoader(loader);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if the data lake has been initialized with data
|
|
108
|
+
*/
|
|
109
|
+
hasData() {
|
|
110
|
+
const stats = this.manifest.getStats();
|
|
111
|
+
return stats.patterns.total > 0;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get quick stats (instant, from manifest)
|
|
115
|
+
*/
|
|
116
|
+
getQuickStats() {
|
|
117
|
+
return this.manifest.getStats();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Invalidate all caches and views
|
|
121
|
+
*/
|
|
122
|
+
invalidateAll() {
|
|
123
|
+
this.manifest.markAllViewsStale('full invalidation');
|
|
124
|
+
this.views.invalidateCache();
|
|
125
|
+
this.indexes.invalidateCache();
|
|
126
|
+
this.patternShards.invalidateCache();
|
|
127
|
+
this.securityShards.invalidateCache();
|
|
128
|
+
this.examples.invalidateCache();
|
|
129
|
+
this.callGraphShards.invalidateCache();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a new DataLake instance
|
|
134
|
+
*/
|
|
135
|
+
export function createDataLake(config = {}) {
|
|
136
|
+
return new DataLake(config);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lake/index.ts"],"names":[],"mappings":"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"}
|