driftdetect-core 0.6.1 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/dist/constants/analysis/categorizer.d.ts +27 -0
  3. package/dist/constants/analysis/categorizer.d.ts.map +1 -0
  4. package/dist/constants/analysis/categorizer.js +364 -0
  5. package/dist/constants/analysis/categorizer.js.map +1 -0
  6. package/dist/constants/analysis/consistency-analyzer.d.ts +77 -0
  7. package/dist/constants/analysis/consistency-analyzer.d.ts.map +1 -0
  8. package/dist/constants/analysis/consistency-analyzer.js +176 -0
  9. package/dist/constants/analysis/consistency-analyzer.js.map +1 -0
  10. package/dist/constants/analysis/dead-constant-detector.d.ts +79 -0
  11. package/dist/constants/analysis/dead-constant-detector.d.ts.map +1 -0
  12. package/dist/constants/analysis/dead-constant-detector.js +242 -0
  13. package/dist/constants/analysis/dead-constant-detector.js.map +1 -0
  14. package/dist/constants/analysis/magic-detector.d.ts +116 -0
  15. package/dist/constants/analysis/magic-detector.d.ts.map +1 -0
  16. package/dist/constants/analysis/magic-detector.js +425 -0
  17. package/dist/constants/analysis/magic-detector.js.map +1 -0
  18. package/dist/constants/analysis/reference-finder.d.ts +87 -0
  19. package/dist/constants/analysis/reference-finder.d.ts.map +1 -0
  20. package/dist/constants/analysis/reference-finder.js +269 -0
  21. package/dist/constants/analysis/reference-finder.js.map +1 -0
  22. package/dist/constants/analysis/security-scanner.d.ts +115 -0
  23. package/dist/constants/analysis/security-scanner.d.ts.map +1 -0
  24. package/dist/constants/analysis/security-scanner.js +429 -0
  25. package/dist/constants/analysis/security-scanner.js.map +1 -0
  26. package/dist/constants/extractors/base-extractor.d.ts +97 -0
  27. package/dist/constants/extractors/base-extractor.d.ts.map +1 -0
  28. package/dist/constants/extractors/base-extractor.js +285 -0
  29. package/dist/constants/extractors/base-extractor.js.map +1 -0
  30. package/dist/constants/extractors/regex/base-regex.d.ts +67 -0
  31. package/dist/constants/extractors/regex/base-regex.d.ts.map +1 -0
  32. package/dist/constants/extractors/regex/base-regex.js +209 -0
  33. package/dist/constants/extractors/regex/base-regex.js.map +1 -0
  34. package/dist/constants/extractors/regex/csharp-regex.d.ts +39 -0
  35. package/dist/constants/extractors/regex/csharp-regex.d.ts.map +1 -0
  36. package/dist/constants/extractors/regex/csharp-regex.js +316 -0
  37. package/dist/constants/extractors/regex/csharp-regex.js.map +1 -0
  38. package/dist/constants/extractors/regex/go-regex.d.ts +40 -0
  39. package/dist/constants/extractors/regex/go-regex.d.ts.map +1 -0
  40. package/dist/constants/extractors/regex/go-regex.js +297 -0
  41. package/dist/constants/extractors/regex/go-regex.js.map +1 -0
  42. package/dist/constants/extractors/regex/java-regex.d.ts +43 -0
  43. package/dist/constants/extractors/regex/java-regex.d.ts.map +1 -0
  44. package/dist/constants/extractors/regex/java-regex.js +276 -0
  45. package/dist/constants/extractors/regex/java-regex.js.map +1 -0
  46. package/dist/constants/extractors/regex/php-regex.d.ts +39 -0
  47. package/dist/constants/extractors/regex/php-regex.d.ts.map +1 -0
  48. package/dist/constants/extractors/regex/php-regex.js +270 -0
  49. package/dist/constants/extractors/regex/php-regex.js.map +1 -0
  50. package/dist/constants/extractors/regex/python-regex.d.ts +39 -0
  51. package/dist/constants/extractors/regex/python-regex.d.ts.map +1 -0
  52. package/dist/constants/extractors/regex/python-regex.js +287 -0
  53. package/dist/constants/extractors/regex/python-regex.js.map +1 -0
  54. package/dist/constants/extractors/regex/typescript-regex.d.ts +35 -0
  55. package/dist/constants/extractors/regex/typescript-regex.d.ts.map +1 -0
  56. package/dist/constants/extractors/regex/typescript-regex.js +313 -0
  57. package/dist/constants/extractors/regex/typescript-regex.js.map +1 -0
  58. package/dist/constants/index.d.ts +26 -0
  59. package/dist/constants/index.d.ts.map +1 -0
  60. package/dist/constants/index.js +36 -0
  61. package/dist/constants/index.js.map +1 -0
  62. package/dist/constants/integration/callgraph-adapter.d.ts +167 -0
  63. package/dist/constants/integration/callgraph-adapter.d.ts.map +1 -0
  64. package/dist/constants/integration/callgraph-adapter.js +287 -0
  65. package/dist/constants/integration/callgraph-adapter.js.map +1 -0
  66. package/dist/constants/integration/index.d.ts +10 -0
  67. package/dist/constants/integration/index.d.ts.map +1 -0
  68. package/dist/constants/integration/index.js +13 -0
  69. package/dist/constants/integration/index.js.map +1 -0
  70. package/dist/constants/integration/pattern-adapter.d.ts +171 -0
  71. package/dist/constants/integration/pattern-adapter.d.ts.map +1 -0
  72. package/dist/constants/integration/pattern-adapter.js +331 -0
  73. package/dist/constants/integration/pattern-adapter.js.map +1 -0
  74. package/dist/constants/integration/scanner-adapter.d.ts +153 -0
  75. package/dist/constants/integration/scanner-adapter.d.ts.map +1 -0
  76. package/dist/constants/integration/scanner-adapter.js +337 -0
  77. package/dist/constants/integration/scanner-adapter.js.map +1 -0
  78. package/dist/constants/store/constant-store.d.ts +117 -0
  79. package/dist/constants/store/constant-store.d.ts.map +1 -0
  80. package/dist/constants/store/constant-store.js +367 -0
  81. package/dist/constants/store/constant-store.js.map +1 -0
  82. package/dist/constants/types.d.ts +423 -0
  83. package/dist/constants/types.d.ts.map +1 -0
  84. package/dist/constants/types.js +43 -0
  85. package/dist/constants/types.js.map +1 -0
  86. package/dist/constraints/store/constraint-store.d.ts.map +1 -1
  87. package/dist/constraints/store/constraint-store.js +37 -2
  88. package/dist/constraints/store/constraint-store.js.map +1 -1
  89. package/dist/environment/env-scanner.d.ts +53 -0
  90. package/dist/environment/env-scanner.d.ts.map +1 -0
  91. package/dist/environment/env-scanner.js +290 -0
  92. package/dist/environment/env-scanner.js.map +1 -0
  93. package/dist/environment/env-store.d.ts +70 -0
  94. package/dist/environment/env-store.d.ts.map +1 -0
  95. package/dist/environment/env-store.js +201 -0
  96. package/dist/environment/env-store.js.map +1 -0
  97. package/dist/environment/extractors/base-env-extractor.d.ts +56 -0
  98. package/dist/environment/extractors/base-env-extractor.d.ts.map +1 -0
  99. package/dist/environment/extractors/base-env-extractor.js +74 -0
  100. package/dist/environment/extractors/base-env-extractor.js.map +1 -0
  101. package/dist/environment/extractors/csharp-env-extractor.d.ts +49 -0
  102. package/dist/environment/extractors/csharp-env-extractor.d.ts.map +1 -0
  103. package/dist/environment/extractors/csharp-env-extractor.js +240 -0
  104. package/dist/environment/extractors/csharp-env-extractor.js.map +1 -0
  105. package/dist/environment/extractors/go-env-extractor.d.ts +53 -0
  106. package/dist/environment/extractors/go-env-extractor.d.ts.map +1 -0
  107. package/dist/environment/extractors/go-env-extractor.js +267 -0
  108. package/dist/environment/extractors/go-env-extractor.js.map +1 -0
  109. package/dist/environment/extractors/index.d.ts +13 -0
  110. package/dist/environment/extractors/index.d.ts.map +1 -0
  111. package/dist/environment/extractors/index.js +13 -0
  112. package/dist/environment/extractors/index.js.map +1 -0
  113. package/dist/environment/extractors/java-env-extractor.d.ts +58 -0
  114. package/dist/environment/extractors/java-env-extractor.d.ts.map +1 -0
  115. package/dist/environment/extractors/java-env-extractor.js +219 -0
  116. package/dist/environment/extractors/java-env-extractor.js.map +1 -0
  117. package/dist/environment/extractors/php-env-extractor.d.ts +58 -0
  118. package/dist/environment/extractors/php-env-extractor.d.ts.map +1 -0
  119. package/dist/environment/extractors/php-env-extractor.js +231 -0
  120. package/dist/environment/extractors/php-env-extractor.js.map +1 -0
  121. package/dist/environment/extractors/python-env-extractor.d.ts +50 -0
  122. package/dist/environment/extractors/python-env-extractor.d.ts.map +1 -0
  123. package/dist/environment/extractors/python-env-extractor.js +219 -0
  124. package/dist/environment/extractors/python-env-extractor.js.map +1 -0
  125. package/dist/environment/extractors/typescript-env-extractor.d.ts +54 -0
  126. package/dist/environment/extractors/typescript-env-extractor.d.ts.map +1 -0
  127. package/dist/environment/extractors/typescript-env-extractor.js +228 -0
  128. package/dist/environment/extractors/typescript-env-extractor.js.map +1 -0
  129. package/dist/environment/index.d.ts +11 -0
  130. package/dist/environment/index.d.ts.map +1 -0
  131. package/dist/environment/index.js +15 -0
  132. package/dist/environment/index.js.map +1 -0
  133. package/dist/environment/types.d.ts +145 -0
  134. package/dist/environment/types.d.ts.map +1 -0
  135. package/dist/environment/types.js +84 -0
  136. package/dist/environment/types.js.map +1 -0
  137. package/dist/index.d.ts +4 -0
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +40 -0
  140. package/dist/index.js.map +1 -1
  141. package/package.json +13 -13
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Scanner Adapter
3
+ *
4
+ * Integrates constant extraction into the main scanning pipeline.
5
+ * Provides parallel extraction support and incremental updates.
6
+ */
7
+ import { createHash } from 'crypto';
8
+ import { ConstantStore } from '../store/constant-store.js';
9
+ import { TypeScriptConstantRegexExtractor } from '../extractors/regex/typescript-regex.js';
10
+ import { PythonConstantRegexExtractor } from '../extractors/regex/python-regex.js';
11
+ import { JavaConstantRegexExtractor } from '../extractors/regex/java-regex.js';
12
+ import { CSharpConstantRegexExtractor } from '../extractors/regex/csharp-regex.js';
13
+ import { PhpConstantRegexExtractor } from '../extractors/regex/php-regex.js';
14
+ import { GoConstantRegexExtractor } from '../extractors/regex/go-regex.js';
15
+ // ============================================================================
16
+ // Language Detection
17
+ // ============================================================================
18
+ const EXTENSION_TO_LANGUAGE = {
19
+ '.ts': 'typescript',
20
+ '.tsx': 'typescript',
21
+ '.js': 'javascript',
22
+ '.jsx': 'javascript',
23
+ '.mjs': 'javascript',
24
+ '.cjs': 'javascript',
25
+ '.py': 'python',
26
+ '.pyw': 'python',
27
+ '.java': 'java',
28
+ '.cs': 'csharp',
29
+ '.php': 'php',
30
+ '.go': 'go',
31
+ };
32
+ /**
33
+ * Get language from file path
34
+ */
35
+ export function getConstantLanguage(filePath) {
36
+ const ext = getExtension(filePath);
37
+ return EXTENSION_TO_LANGUAGE[ext] ?? null;
38
+ }
39
+ /**
40
+ * Get file extension
41
+ */
42
+ function getExtension(filePath) {
43
+ const lastDot = filePath.lastIndexOf('.');
44
+ return lastDot >= 0 ? filePath.slice(lastDot).toLowerCase() : '';
45
+ }
46
+ /**
47
+ * Hash content for change detection
48
+ */
49
+ export function hashContent(content) {
50
+ return createHash('sha256').update(content).digest('hex');
51
+ }
52
+ // ============================================================================
53
+ // Scanner Adapter
54
+ // ============================================================================
55
+ /**
56
+ * Adapter for integrating constant extraction into the scanner pipeline
57
+ */
58
+ export class ConstantScannerAdapter {
59
+ config;
60
+ store;
61
+ extractors;
62
+ initialized = false;
63
+ constructor(config) {
64
+ this.config = {
65
+ rootDir: config.rootDir,
66
+ enabled: config.enabled ?? true,
67
+ incremental: config.incremental ?? true,
68
+ hybridConfig: config.hybridConfig ?? {},
69
+ verbose: config.verbose ?? false,
70
+ };
71
+ this.store = new ConstantStore({ rootDir: config.rootDir });
72
+ this.extractors = new Map();
73
+ }
74
+ /**
75
+ * Initialize the adapter
76
+ */
77
+ async initialize() {
78
+ if (this.initialized)
79
+ return;
80
+ await this.store.initialize();
81
+ // Create extractors for each language
82
+ this.extractors.set('typescript', new TypeScriptConstantRegexExtractor());
83
+ this.extractors.set('javascript', new TypeScriptConstantRegexExtractor()); // Same extractor
84
+ this.extractors.set('python', new PythonConstantRegexExtractor());
85
+ this.extractors.set('java', new JavaConstantRegexExtractor());
86
+ this.extractors.set('csharp', new CSharpConstantRegexExtractor());
87
+ this.extractors.set('php', new PhpConstantRegexExtractor());
88
+ this.extractors.set('go', new GoConstantRegexExtractor());
89
+ this.initialized = true;
90
+ }
91
+ /**
92
+ * Check if constant extraction is enabled
93
+ */
94
+ isEnabled() {
95
+ return this.config.enabled;
96
+ }
97
+ /**
98
+ * Get the constant store
99
+ */
100
+ getStore() {
101
+ return this.store;
102
+ }
103
+ /**
104
+ * Extract constants from a single file
105
+ */
106
+ async extractFile(filePath, content) {
107
+ const startTime = performance.now();
108
+ if (!this.config.enabled) {
109
+ return {
110
+ file: filePath,
111
+ result: null,
112
+ skipped: true,
113
+ duration: performance.now() - startTime,
114
+ };
115
+ }
116
+ const language = getConstantLanguage(filePath);
117
+ if (!language) {
118
+ return {
119
+ file: filePath,
120
+ result: null,
121
+ skipped: true,
122
+ duration: performance.now() - startTime,
123
+ };
124
+ }
125
+ // Check if we can skip (incremental mode)
126
+ const contentHash = hashContent(content);
127
+ if (this.config.incremental) {
128
+ const needsExtraction = await this.store.needsExtraction(filePath, contentHash);
129
+ if (!needsExtraction) {
130
+ return {
131
+ file: filePath,
132
+ result: null,
133
+ skipped: true,
134
+ duration: performance.now() - startTime,
135
+ };
136
+ }
137
+ }
138
+ try {
139
+ const extractor = this.extractors.get(language);
140
+ if (!extractor) {
141
+ return {
142
+ file: filePath,
143
+ result: null,
144
+ skipped: true,
145
+ error: `No extractor for language: ${language}`,
146
+ duration: performance.now() - startTime,
147
+ };
148
+ }
149
+ // Extract constants
150
+ const result = extractor.extract(content, filePath);
151
+ // Save to store
152
+ await this.store.saveFileResult(result, contentHash);
153
+ return {
154
+ file: filePath,
155
+ result,
156
+ skipped: false,
157
+ duration: performance.now() - startTime,
158
+ };
159
+ }
160
+ catch (error) {
161
+ const errorMsg = error instanceof Error ? error.message : String(error);
162
+ return {
163
+ file: filePath,
164
+ result: null,
165
+ skipped: false,
166
+ error: errorMsg,
167
+ duration: performance.now() - startTime,
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Extract constants from multiple files
173
+ */
174
+ async extractFiles(files) {
175
+ const startTime = performance.now();
176
+ const results = [];
177
+ let totalConstants = 0;
178
+ let totalEnums = 0;
179
+ let filesProcessed = 0;
180
+ let filesSkipped = 0;
181
+ let filesWithErrors = 0;
182
+ for (const file of files) {
183
+ const result = await this.extractFile(file.path, file.content);
184
+ results.push(result);
185
+ if (result.skipped) {
186
+ filesSkipped++;
187
+ }
188
+ else if (result.error) {
189
+ filesWithErrors++;
190
+ }
191
+ else if (result.result) {
192
+ filesProcessed++;
193
+ totalConstants += result.result.constants.length;
194
+ totalEnums += result.result.enums.length;
195
+ }
196
+ }
197
+ return {
198
+ files: results,
199
+ totalConstants,
200
+ totalEnums,
201
+ filesProcessed,
202
+ filesSkipped,
203
+ filesWithErrors,
204
+ duration: performance.now() - startTime,
205
+ };
206
+ }
207
+ /**
208
+ * Handle file deletion
209
+ */
210
+ async handleFileDeleted(filePath) {
211
+ await this.store.deleteFileResult(filePath);
212
+ }
213
+ /**
214
+ * Rebuild the index
215
+ */
216
+ async rebuildIndex() {
217
+ await this.store.rebuildIndex();
218
+ }
219
+ /**
220
+ * Clear all constant data
221
+ */
222
+ async clear() {
223
+ await this.store.clear();
224
+ }
225
+ }
226
+ /**
227
+ * Process a constant extraction task (for worker threads)
228
+ */
229
+ export function processConstantTask(task) {
230
+ const startTime = performance.now();
231
+ if (task.type === 'warmup') {
232
+ return {
233
+ file: '',
234
+ language: null,
235
+ result: null,
236
+ contentHash: '',
237
+ duration: performance.now() - startTime,
238
+ };
239
+ }
240
+ if (!task.file || !task.content) {
241
+ return {
242
+ file: task.file ?? '',
243
+ language: null,
244
+ result: null,
245
+ contentHash: '',
246
+ error: 'Missing file or content',
247
+ duration: performance.now() - startTime,
248
+ };
249
+ }
250
+ const language = getConstantLanguage(task.file);
251
+ if (!language) {
252
+ return {
253
+ file: task.file,
254
+ language: null,
255
+ result: null,
256
+ contentHash: hashContent(task.content),
257
+ duration: performance.now() - startTime,
258
+ };
259
+ }
260
+ try {
261
+ // Create extractor based on language
262
+ let extractor;
263
+ switch (language) {
264
+ case 'typescript':
265
+ case 'javascript':
266
+ extractor = new TypeScriptConstantRegexExtractor();
267
+ break;
268
+ case 'python':
269
+ extractor = new PythonConstantRegexExtractor();
270
+ break;
271
+ case 'java':
272
+ extractor = new JavaConstantRegexExtractor();
273
+ break;
274
+ case 'csharp':
275
+ extractor = new CSharpConstantRegexExtractor();
276
+ break;
277
+ case 'php':
278
+ extractor = new PhpConstantRegexExtractor();
279
+ break;
280
+ case 'go':
281
+ extractor = new GoConstantRegexExtractor();
282
+ break;
283
+ default:
284
+ return {
285
+ file: task.file,
286
+ language,
287
+ result: null,
288
+ contentHash: hashContent(task.content),
289
+ error: `Unsupported language: ${language}`,
290
+ duration: performance.now() - startTime,
291
+ };
292
+ }
293
+ const result = extractor.extract(task.content, task.file);
294
+ return {
295
+ file: task.file,
296
+ language,
297
+ result,
298
+ contentHash: hashContent(task.content),
299
+ duration: performance.now() - startTime,
300
+ };
301
+ }
302
+ catch (error) {
303
+ return {
304
+ file: task.file,
305
+ language,
306
+ result: null,
307
+ contentHash: hashContent(task.content),
308
+ error: error instanceof Error ? error.message : String(error),
309
+ duration: performance.now() - startTime,
310
+ };
311
+ }
312
+ }
313
+ // ============================================================================
314
+ // Factory Functions
315
+ // ============================================================================
316
+ /**
317
+ * Create a constant scanner adapter
318
+ */
319
+ export function createConstantScanner(config) {
320
+ return new ConstantScannerAdapter(config);
321
+ }
322
+ /**
323
+ * Create default extraction quality
324
+ */
325
+ export function createDefaultConstantQuality() {
326
+ return {
327
+ method: 'regex',
328
+ confidence: 0.75,
329
+ coveragePercent: 80,
330
+ itemsExtracted: 0,
331
+ parseErrors: 0,
332
+ warnings: [],
333
+ usedFallback: false,
334
+ extractionTimeMs: 0,
335
+ };
336
+ }
337
+ //# sourceMappingURL=scanner-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner-adapter.js","sourceRoot":"","sources":["../../../src/constants/integration/scanner-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Constant Store
3
+ *
4
+ * Persistence layer for constants and enums with sharded storage
5
+ * and fast indexing.
6
+ */
7
+ import type { ConstantFileShard, ConstantIndex, ConstantStats, ConstantExtraction, EnumExtraction, FileConstantResult, ConstantCategory } from '../types.js';
8
+ /**
9
+ * Store configuration
10
+ */
11
+ export interface ConstantStoreConfig {
12
+ /** Root directory for .drift folder */
13
+ rootDir: string;
14
+ }
15
+ /**
16
+ * Constant store for persistence
17
+ */
18
+ export declare class ConstantStore {
19
+ private readonly rootDir;
20
+ private readonly constantsDir;
21
+ private readonly filesDir;
22
+ private readonly indexPath;
23
+ /** In-memory index cache */
24
+ private indexCache;
25
+ /** In-memory shard cache */
26
+ private shardCache;
27
+ constructor(config: ConstantStoreConfig);
28
+ /**
29
+ * Initialize the store (create directories)
30
+ */
31
+ initialize(): Promise<void>;
32
+ /**
33
+ * Save extraction result for a file
34
+ */
35
+ saveFileResult(result: FileConstantResult, contentHash?: string): Promise<void>;
36
+ /**
37
+ * Get extraction result for a file
38
+ */
39
+ getFileResult(filePath: string): Promise<ConstantFileShard | null>;
40
+ /**
41
+ * Check if a file needs re-extraction
42
+ */
43
+ needsExtraction(filePath: string, contentHash: string): Promise<boolean>;
44
+ /**
45
+ * Delete extraction result for a file
46
+ */
47
+ deleteFileResult(filePath: string): Promise<void>;
48
+ /**
49
+ * Get all constants
50
+ */
51
+ getAllConstants(): Promise<ConstantExtraction[]>;
52
+ /**
53
+ * Get all enums
54
+ */
55
+ getAllEnums(): Promise<EnumExtraction[]>;
56
+ /**
57
+ * Get constants by category
58
+ */
59
+ getConstantsByCategory(category: ConstantCategory): Promise<ConstantExtraction[]>;
60
+ /**
61
+ * Get constants by file
62
+ */
63
+ getConstantsByFile(filePath: string): Promise<ConstantExtraction[]>;
64
+ /**
65
+ * Get constant by ID
66
+ */
67
+ getConstantById(id: string): Promise<ConstantExtraction | null>;
68
+ /**
69
+ * Get enum by ID
70
+ */
71
+ getEnumById(id: string): Promise<EnumExtraction | null>;
72
+ /**
73
+ * Search constants by name
74
+ */
75
+ searchByName(query: string): Promise<ConstantExtraction[]>;
76
+ /**
77
+ * Get or rebuild the index
78
+ */
79
+ getIndex(): Promise<ConstantIndex>;
80
+ /**
81
+ * Rebuild the index from all shards
82
+ */
83
+ rebuildIndex(): Promise<ConstantIndex>;
84
+ /**
85
+ * Get statistics
86
+ */
87
+ getStats(): Promise<ConstantStats>;
88
+ /**
89
+ * Clear all data
90
+ */
91
+ clear(): Promise<void>;
92
+ /**
93
+ * Get all shards
94
+ */
95
+ private getAllShards;
96
+ /**
97
+ * Walk directory recursively
98
+ */
99
+ private walkDirectory;
100
+ /**
101
+ * Get shard path for a file
102
+ */
103
+ private getShardPath;
104
+ /**
105
+ * Hash a file path for shard naming
106
+ */
107
+ private hashFilePath;
108
+ /**
109
+ * Create a shard from extraction result
110
+ */
111
+ private createShard;
112
+ /**
113
+ * Hash content for change detection
114
+ */
115
+ private hashContent;
116
+ }
117
+ //# sourceMappingURL=constant-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant-store.d.ts","sourceRoot":"","sources":["../../../src/constants/store/constant-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,4BAA4B;IAC5B,OAAO,CAAC,UAAU,CAA8B;IAEhD,4BAA4B;IAC5B,OAAO,CAAC,UAAU,CAA6C;gBAEnD,MAAM,EAAE,mBAAmB;IAOvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrF;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAkBxE;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9E;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKtD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAK9C;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKvF;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKzE;;OAEG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKrE;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAK7D;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAUhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAgBxC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAwH5C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAKxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;YACW,YAAY;IAwB1B;;OAEG;YACW,aAAa;IAqB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB"}