driftdetect-core 0.1.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/dist/analyzers/ast-analyzer.d.ts +251 -0
- package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ast-analyzer.js +548 -0
- package/dist/analyzers/ast-analyzer.js.map +1 -0
- package/dist/analyzers/flow-analyzer.d.ts +241 -0
- package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
- package/dist/analyzers/flow-analyzer.js +1219 -0
- package/dist/analyzers/flow-analyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +18 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +19 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-analyzer.d.ts +252 -0
- package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
- package/dist/analyzers/semantic-analyzer.js +1182 -0
- package/dist/analyzers/semantic-analyzer.js.map +1 -0
- package/dist/analyzers/type-analyzer.d.ts +289 -0
- package/dist/analyzers/type-analyzer.d.ts.map +1 -0
- package/dist/analyzers/type-analyzer.js +1269 -0
- package/dist/analyzers/type-analyzer.js.map +1 -0
- package/dist/analyzers/types.d.ts +537 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +11 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/config/config-loader.d.ts +166 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +429 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +204 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +632 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/exporter.d.ts +21 -0
- package/dist/manifest/exporter.d.ts.map +1 -0
- package/dist/manifest/exporter.js +339 -0
- package/dist/manifest/exporter.js.map +1 -0
- package/dist/manifest/index.d.ts +14 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +15 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manifest-store.d.ts +111 -0
- package/dist/manifest/manifest-store.d.ts.map +1 -0
- package/dist/manifest/manifest-store.js +418 -0
- package/dist/manifest/manifest-store.js.map +1 -0
- package/dist/manifest/types.d.ts +238 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +11 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/matcher/confidence-scorer.d.ts +188 -0
- package/dist/matcher/confidence-scorer.d.ts.map +1 -0
- package/dist/matcher/confidence-scorer.js +302 -0
- package/dist/matcher/confidence-scorer.js.map +1 -0
- package/dist/matcher/index.d.ts +24 -0
- package/dist/matcher/index.d.ts.map +1 -0
- package/dist/matcher/index.js +26 -0
- package/dist/matcher/index.js.map +1 -0
- package/dist/matcher/outlier-detector.d.ts +252 -0
- package/dist/matcher/outlier-detector.d.ts.map +1 -0
- package/dist/matcher/outlier-detector.js +544 -0
- package/dist/matcher/outlier-detector.js.map +1 -0
- package/dist/matcher/pattern-matcher.d.ts +169 -0
- package/dist/matcher/pattern-matcher.d.ts.map +1 -0
- package/dist/matcher/pattern-matcher.js +692 -0
- package/dist/matcher/pattern-matcher.js.map +1 -0
- package/dist/matcher/types.d.ts +476 -0
- package/dist/matcher/types.d.ts.map +1 -0
- package/dist/matcher/types.js +36 -0
- package/dist/matcher/types.js.map +1 -0
- package/dist/parsers/base-parser.d.ts +282 -0
- package/dist/parsers/base-parser.d.ts.map +1 -0
- package/dist/parsers/base-parser.js +421 -0
- package/dist/parsers/base-parser.js.map +1 -0
- package/dist/parsers/css-parser.d.ts +225 -0
- package/dist/parsers/css-parser.d.ts.map +1 -0
- package/dist/parsers/css-parser.js +477 -0
- package/dist/parsers/css-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +15 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +15 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/json-parser.d.ts +219 -0
- package/dist/parsers/json-parser.d.ts.map +1 -0
- package/dist/parsers/json-parser.js +602 -0
- package/dist/parsers/json-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +276 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +731 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/parsers/parser-manager.d.ts +294 -0
- package/dist/parsers/parser-manager.d.ts.map +1 -0
- package/dist/parsers/parser-manager.js +738 -0
- package/dist/parsers/parser-manager.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +204 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +517 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +43 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +264 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +658 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/rules/evaluator.d.ts +305 -0
- package/dist/rules/evaluator.d.ts.map +1 -0
- package/dist/rules/evaluator.js +579 -0
- package/dist/rules/evaluator.js.map +1 -0
- package/dist/rules/index.d.ts +13 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/quick-fix-generator.d.ts +334 -0
- package/dist/rules/quick-fix-generator.d.ts.map +1 -0
- package/dist/rules/quick-fix-generator.js +1075 -0
- package/dist/rules/quick-fix-generator.js.map +1 -0
- package/dist/rules/rule-engine.d.ts +241 -0
- package/dist/rules/rule-engine.d.ts.map +1 -0
- package/dist/rules/rule-engine.js +585 -0
- package/dist/rules/rule-engine.js.map +1 -0
- package/dist/rules/severity-manager.d.ts +394 -0
- package/dist/rules/severity-manager.d.ts.map +1 -0
- package/dist/rules/severity-manager.js +619 -0
- package/dist/rules/severity-manager.js.map +1 -0
- package/dist/rules/types.d.ts +370 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +133 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/variant-manager.d.ts +388 -0
- package/dist/rules/variant-manager.d.ts.map +1 -0
- package/dist/rules/variant-manager.js +777 -0
- package/dist/rules/variant-manager.js.map +1 -0
- package/dist/scanner/change-detector.d.ts +164 -0
- package/dist/scanner/change-detector.d.ts.map +1 -0
- package/dist/scanner/change-detector.js +263 -0
- package/dist/scanner/change-detector.js.map +1 -0
- package/dist/scanner/dependency-graph.d.ts +270 -0
- package/dist/scanner/dependency-graph.d.ts.map +1 -0
- package/dist/scanner/dependency-graph.js +436 -0
- package/dist/scanner/dependency-graph.js.map +1 -0
- package/dist/scanner/file-walker.d.ts +127 -0
- package/dist/scanner/file-walker.d.ts.map +1 -0
- package/dist/scanner/file-walker.js +526 -0
- package/dist/scanner/file-walker.js.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +12 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +218 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +10 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner/worker-pool.d.ts +317 -0
- package/dist/scanner/worker-pool.d.ts.map +1 -0
- package/dist/scanner/worker-pool.js +571 -0
- package/dist/scanner/worker-pool.js.map +1 -0
- package/dist/store/cache-manager.d.ts +179 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +391 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/history-store.d.ts +314 -0
- package/dist/store/history-store.d.ts.map +1 -0
- package/dist/store/history-store.js +707 -0
- package/dist/store/history-store.js.map +1 -0
- package/dist/store/index.d.ts +20 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +26 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/lock-file-manager.d.ts +202 -0
- package/dist/store/lock-file-manager.d.ts.map +1 -0
- package/dist/store/lock-file-manager.js +475 -0
- package/dist/store/lock-file-manager.js.map +1 -0
- package/dist/store/pattern-store.d.ts +289 -0
- package/dist/store/pattern-store.d.ts.map +1 -0
- package/dist/store/pattern-store.js +936 -0
- package/dist/store/pattern-store.js.map +1 -0
- package/dist/store/schema-validator.d.ts +159 -0
- package/dist/store/schema-validator.d.ts.map +1 -0
- package/dist/store/schema-validator.js +1096 -0
- package/dist/store/schema-validator.js.map +1 -0
- package/dist/store/types.d.ts +585 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +82 -0
- package/dist/store/types.js.map +1 -0
- package/dist/types/analysis.d.ts +19 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +5 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/common.d.ts +7 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/patterns.d.ts +40 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +7 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/violations.d.ts +7 -0
- package/dist/types/violations.d.ts.map +1 -0
- package/dist/types/violations.js +7 -0
- package/dist/types/violations.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManifestStore - Storage and management for the pattern manifest
|
|
3
|
+
*
|
|
4
|
+
* The manifest provides a complete architectural map of a codebase.
|
|
5
|
+
* This store handles:
|
|
6
|
+
* - Loading/saving the manifest
|
|
7
|
+
* - Incremental updates (only re-scan changed files)
|
|
8
|
+
* - Forward and reverse index queries
|
|
9
|
+
*
|
|
10
|
+
* @requirements PATTERN-LOCATION-DISCOVERY.md
|
|
11
|
+
*/
|
|
12
|
+
import type { Manifest, ManifestPattern, ManifestSummary, SemanticLocation, PatternQuery, PatternQueryResult, FileQuery, FileQueryResult } from './types.js';
|
|
13
|
+
import type { PatternCategory } from '../store/types.js';
|
|
14
|
+
/**
|
|
15
|
+
* ManifestStore manages the pattern location manifest
|
|
16
|
+
*/
|
|
17
|
+
export declare class ManifestStore {
|
|
18
|
+
private manifest;
|
|
19
|
+
private manifestPath;
|
|
20
|
+
private projectRoot;
|
|
21
|
+
private dirty;
|
|
22
|
+
constructor(projectRoot: string, manifestPath?: string);
|
|
23
|
+
/**
|
|
24
|
+
* Load manifest from disk
|
|
25
|
+
*/
|
|
26
|
+
load(): Promise<Manifest | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Save manifest to disk (atomic write)
|
|
29
|
+
*/
|
|
30
|
+
save(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new empty manifest
|
|
33
|
+
*/
|
|
34
|
+
create(): Manifest;
|
|
35
|
+
/**
|
|
36
|
+
* Get the current manifest (load if not loaded)
|
|
37
|
+
*/
|
|
38
|
+
get(): Promise<Manifest>;
|
|
39
|
+
/**
|
|
40
|
+
* Check if a file has changed since last scan
|
|
41
|
+
*/
|
|
42
|
+
hasFileChanged(filePath: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Get files that have changed since last scan
|
|
45
|
+
*/
|
|
46
|
+
getChangedFiles(files: string[]): Promise<string[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Update manifest with new pattern data
|
|
49
|
+
*/
|
|
50
|
+
updatePattern(pattern: ManifestPattern): void;
|
|
51
|
+
/**
|
|
52
|
+
* Update manifest with multiple patterns
|
|
53
|
+
*/
|
|
54
|
+
updatePatterns(patterns: ManifestPattern[]): void;
|
|
55
|
+
/**
|
|
56
|
+
* Remove patterns for a file (before re-scanning)
|
|
57
|
+
*/
|
|
58
|
+
clearFilePatterns(filePath: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Query patterns by various criteria
|
|
61
|
+
*/
|
|
62
|
+
queryPatterns(query: PatternQuery): PatternQueryResult[];
|
|
63
|
+
/**
|
|
64
|
+
* Query patterns in a specific file
|
|
65
|
+
*/
|
|
66
|
+
queryFile(query: FileQuery): FileQueryResult | null;
|
|
67
|
+
/**
|
|
68
|
+
* Get pattern by ID
|
|
69
|
+
*/
|
|
70
|
+
getPattern(patternId: string): ManifestPattern | null;
|
|
71
|
+
/**
|
|
72
|
+
* Get all patterns
|
|
73
|
+
*/
|
|
74
|
+
getAllPatterns(): ManifestPattern[];
|
|
75
|
+
/**
|
|
76
|
+
* Get patterns by category
|
|
77
|
+
*/
|
|
78
|
+
getPatternsByCategory(category: PatternCategory): ManifestPattern[];
|
|
79
|
+
/**
|
|
80
|
+
* Check if manifest needs saving
|
|
81
|
+
*/
|
|
82
|
+
isDirty(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get manifest summary
|
|
85
|
+
*/
|
|
86
|
+
getSummary(): ManifestSummary | null;
|
|
87
|
+
private addFilePattern;
|
|
88
|
+
private calculateSummary;
|
|
89
|
+
private calculateCodebaseHash;
|
|
90
|
+
private hashFile;
|
|
91
|
+
private matchGlob;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Hash file content for change detection
|
|
95
|
+
*/
|
|
96
|
+
export declare function hashContent(content: string): string;
|
|
97
|
+
/**
|
|
98
|
+
* Create a semantic location from basic location data
|
|
99
|
+
*/
|
|
100
|
+
export declare function createSemanticLocation(file: string, range: {
|
|
101
|
+
start: number;
|
|
102
|
+
end: number;
|
|
103
|
+
}, type: SemanticLocation['type'], name: string, options?: {
|
|
104
|
+
signature?: string;
|
|
105
|
+
confidence?: number;
|
|
106
|
+
snippet?: string;
|
|
107
|
+
language?: string;
|
|
108
|
+
hash?: string;
|
|
109
|
+
members?: SemanticLocation[];
|
|
110
|
+
}): SemanticLocation;
|
|
111
|
+
//# sourceMappingURL=manifest-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-store.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;gBAEV,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAKtD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAetC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B;;OAEG;IACH,MAAM,IAAI,QAAQ;IAqBlB;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;IAU9B;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBxD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAc7C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI;IAMjD;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA2BzC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB,EAAE;IAsDxD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,GAAG,IAAI;IA+CnD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIrD;;OAEG;IACH,cAAc,IAAI,eAAe,EAAE;IAKnC;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,EAAE;IAKnE;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,UAAU,IAAI,eAAe,GAAG,IAAI;IAQpC,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,qBAAqB;YAYf,QAAQ;IAStB,OAAO,CAAC,SAAS;CAWlB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B,GACA,gBAAgB,CAwBlB"}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManifestStore - Storage and management for the pattern manifest
|
|
3
|
+
*
|
|
4
|
+
* The manifest provides a complete architectural map of a codebase.
|
|
5
|
+
* This store handles:
|
|
6
|
+
* - Loading/saving the manifest
|
|
7
|
+
* - Incremental updates (only re-scan changed files)
|
|
8
|
+
* - Forward and reverse index queries
|
|
9
|
+
*
|
|
10
|
+
* @requirements PATTERN-LOCATION-DISCOVERY.md
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from 'crypto';
|
|
13
|
+
import { promises as fs } from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
/** Current manifest format version */
|
|
16
|
+
const MANIFEST_VERSION = '2.0.0';
|
|
17
|
+
/** Default manifest file path */
|
|
18
|
+
const DEFAULT_MANIFEST_PATH = '.drift/index/manifest.json';
|
|
19
|
+
/**
|
|
20
|
+
* ManifestStore manages the pattern location manifest
|
|
21
|
+
*/
|
|
22
|
+
export class ManifestStore {
|
|
23
|
+
manifest = null;
|
|
24
|
+
manifestPath;
|
|
25
|
+
projectRoot;
|
|
26
|
+
dirty = false;
|
|
27
|
+
constructor(projectRoot, manifestPath) {
|
|
28
|
+
this.projectRoot = projectRoot;
|
|
29
|
+
this.manifestPath = manifestPath || path.join(projectRoot, DEFAULT_MANIFEST_PATH);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load manifest from disk
|
|
33
|
+
*/
|
|
34
|
+
async load() {
|
|
35
|
+
try {
|
|
36
|
+
const content = await fs.readFile(this.manifestPath, 'utf-8');
|
|
37
|
+
this.manifest = JSON.parse(content);
|
|
38
|
+
this.dirty = false;
|
|
39
|
+
return this.manifest;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error.code === 'ENOENT') {
|
|
43
|
+
// File doesn't exist, return null
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Save manifest to disk (atomic write)
|
|
51
|
+
*/
|
|
52
|
+
async save() {
|
|
53
|
+
if (!this.manifest) {
|
|
54
|
+
throw new Error('No manifest to save');
|
|
55
|
+
}
|
|
56
|
+
// Update generated timestamp
|
|
57
|
+
this.manifest.generated = new Date().toISOString();
|
|
58
|
+
// Recalculate summary
|
|
59
|
+
this.manifest.summary = this.calculateSummary();
|
|
60
|
+
// Recalculate codebase hash
|
|
61
|
+
this.manifest.codebaseHash = this.calculateCodebaseHash();
|
|
62
|
+
// Ensure directory exists
|
|
63
|
+
const dir = path.dirname(this.manifestPath);
|
|
64
|
+
await fs.mkdir(dir, { recursive: true });
|
|
65
|
+
// Atomic write: write to temp file, then rename
|
|
66
|
+
const tempPath = `${this.manifestPath}.tmp`;
|
|
67
|
+
const content = JSON.stringify(this.manifest, null, 2);
|
|
68
|
+
await fs.writeFile(tempPath, content, 'utf-8');
|
|
69
|
+
await fs.rename(tempPath, this.manifestPath);
|
|
70
|
+
this.dirty = false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a new empty manifest
|
|
74
|
+
*/
|
|
75
|
+
create() {
|
|
76
|
+
this.manifest = {
|
|
77
|
+
version: MANIFEST_VERSION,
|
|
78
|
+
generated: new Date().toISOString(),
|
|
79
|
+
codebaseHash: '',
|
|
80
|
+
projectRoot: this.projectRoot,
|
|
81
|
+
summary: {
|
|
82
|
+
totalPatterns: 0,
|
|
83
|
+
patternsByStatus: { discovered: 0, approved: 0, ignored: 0 },
|
|
84
|
+
patternsByCategory: {},
|
|
85
|
+
totalFiles: 0,
|
|
86
|
+
totalLocations: 0,
|
|
87
|
+
totalOutliers: 0,
|
|
88
|
+
},
|
|
89
|
+
patterns: {},
|
|
90
|
+
files: {},
|
|
91
|
+
};
|
|
92
|
+
this.dirty = true;
|
|
93
|
+
return this.manifest;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the current manifest (load if not loaded)
|
|
97
|
+
*/
|
|
98
|
+
async get() {
|
|
99
|
+
if (!this.manifest) {
|
|
100
|
+
const loaded = await this.load();
|
|
101
|
+
if (!loaded) {
|
|
102
|
+
return this.create();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return this.manifest;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if a file has changed since last scan
|
|
109
|
+
*/
|
|
110
|
+
async hasFileChanged(filePath) {
|
|
111
|
+
if (!this.manifest) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
const relativePath = path.relative(this.projectRoot, filePath);
|
|
115
|
+
const fileEntry = this.manifest.files[relativePath];
|
|
116
|
+
if (!fileEntry) {
|
|
117
|
+
return true; // New file
|
|
118
|
+
}
|
|
119
|
+
const currentHash = await this.hashFile(filePath);
|
|
120
|
+
return currentHash !== fileEntry.hash;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get files that have changed since last scan
|
|
124
|
+
*/
|
|
125
|
+
async getChangedFiles(files) {
|
|
126
|
+
const changed = [];
|
|
127
|
+
for (const file of files) {
|
|
128
|
+
if (await this.hasFileChanged(file)) {
|
|
129
|
+
changed.push(file);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return changed;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Update manifest with new pattern data
|
|
136
|
+
*/
|
|
137
|
+
updatePattern(pattern) {
|
|
138
|
+
if (!this.manifest) {
|
|
139
|
+
this.create();
|
|
140
|
+
}
|
|
141
|
+
this.manifest.patterns[pattern.id] = pattern;
|
|
142
|
+
this.dirty = true;
|
|
143
|
+
// Update reverse index for each location
|
|
144
|
+
for (const location of pattern.locations) {
|
|
145
|
+
this.addFilePattern(location.file, pattern.id, location.hash);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Update manifest with multiple patterns
|
|
150
|
+
*/
|
|
151
|
+
updatePatterns(patterns) {
|
|
152
|
+
for (const pattern of patterns) {
|
|
153
|
+
this.updatePattern(pattern);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Remove patterns for a file (before re-scanning)
|
|
158
|
+
*/
|
|
159
|
+
clearFilePatterns(filePath) {
|
|
160
|
+
if (!this.manifest)
|
|
161
|
+
return;
|
|
162
|
+
const relativePath = path.relative(this.projectRoot, filePath);
|
|
163
|
+
const fileEntry = this.manifest.files[relativePath];
|
|
164
|
+
if (!fileEntry)
|
|
165
|
+
return;
|
|
166
|
+
// Remove this file's locations from each pattern
|
|
167
|
+
for (const patternId of fileEntry.patterns) {
|
|
168
|
+
const pattern = this.manifest.patterns[patternId];
|
|
169
|
+
if (pattern) {
|
|
170
|
+
pattern.locations = pattern.locations.filter(loc => loc.file !== relativePath);
|
|
171
|
+
pattern.outliers = pattern.outliers.filter(loc => loc.file !== relativePath);
|
|
172
|
+
// Remove pattern if no locations left
|
|
173
|
+
if (pattern.locations.length === 0 && pattern.outliers.length === 0) {
|
|
174
|
+
delete this.manifest.patterns[patternId];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Clear file entry
|
|
179
|
+
delete this.manifest.files[relativePath];
|
|
180
|
+
this.dirty = true;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Query patterns by various criteria
|
|
184
|
+
*/
|
|
185
|
+
queryPatterns(query) {
|
|
186
|
+
if (!this.manifest)
|
|
187
|
+
return [];
|
|
188
|
+
const results = [];
|
|
189
|
+
for (const [id, pattern] of Object.entries(this.manifest.patterns)) {
|
|
190
|
+
// Filter by pattern name/id
|
|
191
|
+
if (query.pattern) {
|
|
192
|
+
const searchTerm = query.pattern.toLowerCase();
|
|
193
|
+
if (!id.toLowerCase().includes(searchTerm) &&
|
|
194
|
+
!pattern.name.toLowerCase().includes(searchTerm)) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Filter by category
|
|
199
|
+
if (query.category && pattern.category !== query.category) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
// Filter by status
|
|
203
|
+
if (query.status && pattern.status !== query.status) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
// Filter by confidence
|
|
207
|
+
if (query.minConfidence !== undefined && pattern.confidence < query.minConfidence) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
// Filter by file path
|
|
211
|
+
let locations = pattern.locations;
|
|
212
|
+
if (query.filePath) {
|
|
213
|
+
const pathPattern = query.filePath;
|
|
214
|
+
locations = locations.filter(loc => this.matchGlob(loc.file, pathPattern));
|
|
215
|
+
}
|
|
216
|
+
if (locations.length === 0)
|
|
217
|
+
continue;
|
|
218
|
+
// Apply limit
|
|
219
|
+
const limitedLocations = query.limit ? locations.slice(0, query.limit) : locations;
|
|
220
|
+
results.push({
|
|
221
|
+
patternId: id,
|
|
222
|
+
patternName: pattern.name,
|
|
223
|
+
category: pattern.category,
|
|
224
|
+
locations: limitedLocations,
|
|
225
|
+
totalCount: locations.length,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return results;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Query patterns in a specific file
|
|
232
|
+
*/
|
|
233
|
+
queryFile(query) {
|
|
234
|
+
if (!this.manifest)
|
|
235
|
+
return null;
|
|
236
|
+
// Handle glob patterns
|
|
237
|
+
const matchingFiles = Object.keys(this.manifest.files).filter(f => this.matchGlob(f, query.path));
|
|
238
|
+
if (matchingFiles.length === 0)
|
|
239
|
+
return null;
|
|
240
|
+
// For now, return first matching file
|
|
241
|
+
const filePath = matchingFiles[0];
|
|
242
|
+
if (!filePath)
|
|
243
|
+
return null;
|
|
244
|
+
const fileEntry = this.manifest.files[filePath];
|
|
245
|
+
if (!fileEntry)
|
|
246
|
+
return null;
|
|
247
|
+
const patterns = [];
|
|
248
|
+
for (const patternId of fileEntry.patterns) {
|
|
249
|
+
const pattern = this.manifest.patterns[patternId];
|
|
250
|
+
if (!pattern)
|
|
251
|
+
continue;
|
|
252
|
+
// Filter by category
|
|
253
|
+
if (query.category && pattern.category !== query.category) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
// Get locations in this file
|
|
257
|
+
const locations = pattern.locations.filter(loc => loc.file === filePath);
|
|
258
|
+
patterns.push({
|
|
259
|
+
id: patternId,
|
|
260
|
+
name: pattern.name,
|
|
261
|
+
category: pattern.category,
|
|
262
|
+
locations,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
file: filePath,
|
|
267
|
+
patterns,
|
|
268
|
+
metadata: fileEntry,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get pattern by ID
|
|
273
|
+
*/
|
|
274
|
+
getPattern(patternId) {
|
|
275
|
+
return this.manifest?.patterns[patternId] || null;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get all patterns
|
|
279
|
+
*/
|
|
280
|
+
getAllPatterns() {
|
|
281
|
+
if (!this.manifest)
|
|
282
|
+
return [];
|
|
283
|
+
return Object.values(this.manifest.patterns);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get patterns by category
|
|
287
|
+
*/
|
|
288
|
+
getPatternsByCategory(category) {
|
|
289
|
+
if (!this.manifest)
|
|
290
|
+
return [];
|
|
291
|
+
return Object.values(this.manifest.patterns).filter(p => p.category === category);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Check if manifest needs saving
|
|
295
|
+
*/
|
|
296
|
+
isDirty() {
|
|
297
|
+
return this.dirty;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get manifest summary
|
|
301
|
+
*/
|
|
302
|
+
getSummary() {
|
|
303
|
+
return this.manifest?.summary || null;
|
|
304
|
+
}
|
|
305
|
+
// ============================================================================
|
|
306
|
+
// Private Methods
|
|
307
|
+
// ============================================================================
|
|
308
|
+
addFilePattern(filePath, patternId, hash) {
|
|
309
|
+
if (!this.manifest)
|
|
310
|
+
return;
|
|
311
|
+
if (!this.manifest.files[filePath]) {
|
|
312
|
+
this.manifest.files[filePath] = {
|
|
313
|
+
hash,
|
|
314
|
+
patterns: [],
|
|
315
|
+
lastScanned: new Date().toISOString(),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
const fileEntry = this.manifest.files[filePath];
|
|
319
|
+
if (!fileEntry.patterns.includes(patternId)) {
|
|
320
|
+
fileEntry.patterns.push(patternId);
|
|
321
|
+
}
|
|
322
|
+
fileEntry.hash = hash;
|
|
323
|
+
fileEntry.lastScanned = new Date().toISOString();
|
|
324
|
+
}
|
|
325
|
+
calculateSummary() {
|
|
326
|
+
if (!this.manifest) {
|
|
327
|
+
return {
|
|
328
|
+
totalPatterns: 0,
|
|
329
|
+
patternsByStatus: { discovered: 0, approved: 0, ignored: 0 },
|
|
330
|
+
patternsByCategory: {},
|
|
331
|
+
totalFiles: 0,
|
|
332
|
+
totalLocations: 0,
|
|
333
|
+
totalOutliers: 0,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
const patterns = Object.values(this.manifest.patterns);
|
|
337
|
+
const patternsByStatus = { discovered: 0, approved: 0, ignored: 0 };
|
|
338
|
+
const patternsByCategory = {};
|
|
339
|
+
let totalLocations = 0;
|
|
340
|
+
let totalOutliers = 0;
|
|
341
|
+
for (const pattern of patterns) {
|
|
342
|
+
patternsByStatus[pattern.status]++;
|
|
343
|
+
patternsByCategory[pattern.category] = (patternsByCategory[pattern.category] || 0) + 1;
|
|
344
|
+
totalLocations += pattern.locations.length;
|
|
345
|
+
totalOutliers += pattern.outliers.length;
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
totalPatterns: patterns.length,
|
|
349
|
+
patternsByStatus,
|
|
350
|
+
patternsByCategory,
|
|
351
|
+
totalFiles: Object.keys(this.manifest.files).length,
|
|
352
|
+
totalLocations,
|
|
353
|
+
totalOutliers,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
calculateCodebaseHash() {
|
|
357
|
+
if (!this.manifest)
|
|
358
|
+
return '';
|
|
359
|
+
// Hash all file hashes together
|
|
360
|
+
const fileHashes = Object.values(this.manifest.files)
|
|
361
|
+
.map(f => f.hash)
|
|
362
|
+
.sort()
|
|
363
|
+
.join('');
|
|
364
|
+
return createHash('sha256').update(fileHashes).digest('hex').substring(0, 12);
|
|
365
|
+
}
|
|
366
|
+
async hashFile(filePath) {
|
|
367
|
+
try {
|
|
368
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
369
|
+
return createHash('sha256').update(content).digest('hex').substring(0, 12);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return '';
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
matchGlob(filePath, pattern) {
|
|
376
|
+
// Simple glob matching (supports * and **)
|
|
377
|
+
const regexPattern = pattern
|
|
378
|
+
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
379
|
+
.replace(/\*/g, '[^/]*')
|
|
380
|
+
.replace(/{{GLOBSTAR}}/g, '.*')
|
|
381
|
+
.replace(/\?/g, '.');
|
|
382
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
383
|
+
return regex.test(filePath);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Hash file content for change detection
|
|
388
|
+
*/
|
|
389
|
+
export function hashContent(content) {
|
|
390
|
+
return createHash('sha256').update(content).digest('hex').substring(0, 12);
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Create a semantic location from basic location data
|
|
394
|
+
*/
|
|
395
|
+
export function createSemanticLocation(file, range, type, name, options) {
|
|
396
|
+
const result = {
|
|
397
|
+
file,
|
|
398
|
+
hash: options?.hash || '',
|
|
399
|
+
range,
|
|
400
|
+
type,
|
|
401
|
+
name,
|
|
402
|
+
confidence: options?.confidence ?? 0.9,
|
|
403
|
+
};
|
|
404
|
+
if (options?.signature) {
|
|
405
|
+
result.signature = options.signature;
|
|
406
|
+
}
|
|
407
|
+
if (options?.snippet) {
|
|
408
|
+
result.snippet = options.snippet;
|
|
409
|
+
}
|
|
410
|
+
if (options?.language) {
|
|
411
|
+
result.language = options.language;
|
|
412
|
+
}
|
|
413
|
+
if (options?.members) {
|
|
414
|
+
result.members = options.members;
|
|
415
|
+
}
|
|
416
|
+
return result;
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=manifest-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-store.js","sourceRoot":"","sources":["../../src/manifest/manifest-store.ts"],"names":[],"mappings":"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"}
|