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,53 @@
1
+ /**
2
+ * Environment Variable Scanner
3
+ *
4
+ * Unified scanner for detecting environment variable access patterns
5
+ * across all supported languages.
6
+ */
7
+ import type { EnvScanResult } from './types.js';
8
+ export interface EnvScannerConfig {
9
+ rootDir: string;
10
+ verbose?: boolean;
11
+ }
12
+ /**
13
+ * Environment Variable Scanner
14
+ *
15
+ * Scans codebases for environment variable access patterns.
16
+ */
17
+ export declare class EnvScanner {
18
+ private readonly config;
19
+ private readonly extractors;
20
+ constructor(config: EnvScannerConfig);
21
+ /**
22
+ * Scan files for environment variable access patterns
23
+ */
24
+ scanFiles(files: string[]): Promise<EnvScanResult>;
25
+ /**
26
+ * Scan directory with glob patterns
27
+ */
28
+ scanDirectory(options?: {
29
+ patterns?: string[];
30
+ ignorePatterns?: string[];
31
+ }): Promise<EnvScanResult>;
32
+ /**
33
+ * Get the appropriate extractor for a file
34
+ */
35
+ private getExtractor;
36
+ /**
37
+ * Quick check if file might have environment access
38
+ */
39
+ private mightHaveEnvAccess;
40
+ /**
41
+ * Build the access map from extracted access points
42
+ */
43
+ private buildAccessMap;
44
+ /**
45
+ * Find files matching patterns
46
+ */
47
+ private findFiles;
48
+ }
49
+ /**
50
+ * Create a new EnvScanner instance
51
+ */
52
+ export declare function createEnvScanner(config: EnvScannerConfig): EnvScanner;
53
+ //# sourceMappingURL=env-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-scanner.d.ts","sourceRoot":"","sources":["../../src/environment/env-scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAIV,aAAa,EACd,MAAM,YAAY,CAAC;AAapB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,MAAM,EAAE,gBAAgB;IAcpC;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA2DxD;;OAEG;IACG,aAAa,CAAC,OAAO,GAAE;QAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,CAAC;IA+B/B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAwEtB;;OAEG;YACW,SAAS;CAiCxB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAErE"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Environment Variable Scanner
3
+ *
4
+ * Unified scanner for detecting environment variable access patterns
5
+ * across all supported languages.
6
+ */
7
+ import * as fs from 'node:fs/promises';
8
+ import * as path from 'node:path';
9
+ import { minimatch } from 'minimatch';
10
+ import { TypeScriptEnvExtractor } from './extractors/typescript-env-extractor.js';
11
+ import { PythonEnvExtractor } from './extractors/python-env-extractor.js';
12
+ import { JavaEnvExtractor } from './extractors/java-env-extractor.js';
13
+ import { CSharpEnvExtractor } from './extractors/csharp-env-extractor.js';
14
+ import { PhpEnvExtractor } from './extractors/php-env-extractor.js';
15
+ import { GoEnvExtractor } from './extractors/go-env-extractor.js';
16
+ // ============================================================================
17
+ // Environment Scanner
18
+ // ============================================================================
19
+ /**
20
+ * Environment Variable Scanner
21
+ *
22
+ * Scans codebases for environment variable access patterns.
23
+ */
24
+ export class EnvScanner {
25
+ config;
26
+ extractors;
27
+ constructor(config) {
28
+ this.config = config;
29
+ // Initialize all extractors
30
+ this.extractors = [
31
+ new TypeScriptEnvExtractor(),
32
+ new PythonEnvExtractor(),
33
+ new JavaEnvExtractor(),
34
+ new CSharpEnvExtractor(),
35
+ new PhpEnvExtractor(),
36
+ new GoEnvExtractor(),
37
+ ];
38
+ }
39
+ /**
40
+ * Scan files for environment variable access patterns
41
+ */
42
+ async scanFiles(files) {
43
+ const startTime = Date.now();
44
+ const accessPoints = new Map();
45
+ const errors = [];
46
+ const stats = {
47
+ filesScanned: 0,
48
+ variablesFound: 0,
49
+ accessPointsFound: 0,
50
+ secretsFound: 0,
51
+ scanDurationMs: 0,
52
+ };
53
+ for (const file of files) {
54
+ // Skip type definition files
55
+ if (file.endsWith('.d.ts'))
56
+ continue;
57
+ const extractor = this.getExtractor(file);
58
+ if (!extractor)
59
+ continue;
60
+ try {
61
+ const filePath = path.join(this.config.rootDir, file);
62
+ const source = await fs.readFile(filePath, 'utf-8');
63
+ // Quick check if file might have env access
64
+ if (!this.mightHaveEnvAccess(source))
65
+ continue;
66
+ stats.filesScanned++;
67
+ const result = extractor.extract(source, file);
68
+ if (result.accessPoints.length > 0) {
69
+ accessPoints.set(file, result.accessPoints);
70
+ stats.accessPointsFound += result.accessPoints.length;
71
+ }
72
+ if (result.errors.length > 0) {
73
+ for (const error of result.errors) {
74
+ errors.push({ file, error });
75
+ }
76
+ }
77
+ }
78
+ catch (error) {
79
+ const errorMsg = error instanceof Error ? error.message : String(error);
80
+ errors.push({ file, error: errorMsg });
81
+ if (this.config.verbose) {
82
+ console.error(`Error scanning ${file}:`, errorMsg);
83
+ }
84
+ }
85
+ }
86
+ // Build access map
87
+ const accessMap = this.buildAccessMap(accessPoints);
88
+ stats.variablesFound = accessMap.stats.totalVariables;
89
+ stats.secretsFound = accessMap.stats.secretVariables;
90
+ stats.scanDurationMs = Date.now() - startTime;
91
+ return { accessMap, stats };
92
+ }
93
+ /**
94
+ * Scan directory with glob patterns
95
+ */
96
+ async scanDirectory(options = {}) {
97
+ const patterns = options.patterns ?? [
98
+ '**/*.ts',
99
+ '**/*.tsx',
100
+ '**/*.js',
101
+ '**/*.jsx',
102
+ '**/*.py',
103
+ '**/*.cs',
104
+ '**/*.java',
105
+ '**/*.php',
106
+ '**/*.go',
107
+ ];
108
+ const ignorePatterns = options.ignorePatterns ?? [
109
+ 'node_modules',
110
+ '.git',
111
+ 'dist',
112
+ 'build',
113
+ '__pycache__',
114
+ '.drift',
115
+ '.venv',
116
+ 'venv',
117
+ 'bin',
118
+ 'obj',
119
+ 'target',
120
+ 'vendor',
121
+ ];
122
+ const files = await this.findFiles(patterns, ignorePatterns);
123
+ return this.scanFiles(files);
124
+ }
125
+ /**
126
+ * Get the appropriate extractor for a file
127
+ */
128
+ getExtractor(file) {
129
+ for (const extractor of this.extractors) {
130
+ if (extractor.canHandle(file)) {
131
+ return extractor;
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * Quick check if file might have environment access
138
+ */
139
+ mightHaveEnvAccess(content) {
140
+ const patterns = [
141
+ // JavaScript/TypeScript
142
+ 'process.env',
143
+ 'import.meta.env',
144
+ 'dotenv',
145
+ 'config(',
146
+ // Python
147
+ 'os.environ',
148
+ 'os.getenv',
149
+ 'load_dotenv',
150
+ 'BaseSettings',
151
+ // Java
152
+ 'System.getenv',
153
+ 'System.getProperty',
154
+ '@Value',
155
+ 'Environment.',
156
+ '@ConfigurationProperties',
157
+ // C#
158
+ 'Environment.GetEnvironmentVariable',
159
+ 'IConfiguration',
160
+ 'ConfigurationManager',
161
+ 'GetConnectionString',
162
+ // PHP
163
+ 'getenv(',
164
+ '$_ENV',
165
+ '$_SERVER',
166
+ 'env(',
167
+ 'config(',
168
+ // Go
169
+ 'os.Getenv',
170
+ 'os.LookupEnv',
171
+ 'viper.',
172
+ 'envconfig',
173
+ ];
174
+ return patterns.some(p => content.includes(p));
175
+ }
176
+ /**
177
+ * Build the access map from extracted access points
178
+ */
179
+ buildAccessMap(accessPoints) {
180
+ const variables = {};
181
+ const allAccessPoints = {};
182
+ const stats = {
183
+ totalVariables: 0,
184
+ totalAccessPoints: 0,
185
+ secretVariables: 0,
186
+ credentialVariables: 0,
187
+ configVariables: 0,
188
+ byLanguage: {},
189
+ byMethod: {},
190
+ };
191
+ for (const [file, points] of accessPoints) {
192
+ for (const point of points) {
193
+ // Skip internal markers
194
+ if (point.varName.startsWith('__'))
195
+ continue;
196
+ // Add to all access points
197
+ allAccessPoints[point.id] = point;
198
+ stats.totalAccessPoints++;
199
+ // Track by language
200
+ stats.byLanguage[point.language] = (stats.byLanguage[point.language] ?? 0) + 1;
201
+ // Track by method
202
+ stats.byMethod[point.method] = (stats.byMethod[point.method] ?? 0) + 1;
203
+ // Add to variable info
204
+ if (!variables[point.varName]) {
205
+ variables[point.varName] = {
206
+ name: point.varName,
207
+ sensitivity: point.sensitivity,
208
+ accessedBy: [],
209
+ files: [],
210
+ hasDefault: false,
211
+ isRequired: true,
212
+ };
213
+ stats.totalVariables++;
214
+ // Track by sensitivity
215
+ if (point.sensitivity === 'secret')
216
+ stats.secretVariables++;
217
+ else if (point.sensitivity === 'credential')
218
+ stats.credentialVariables++;
219
+ else if (point.sensitivity === 'config')
220
+ stats.configVariables++;
221
+ }
222
+ const varInfo = variables[point.varName];
223
+ if (varInfo) {
224
+ varInfo.accessedBy.push(point);
225
+ if (!varInfo.files.includes(file)) {
226
+ varInfo.files.push(file);
227
+ }
228
+ if (point.hasDefault) {
229
+ varInfo.hasDefault = true;
230
+ }
231
+ if (!point.isRequired) {
232
+ varInfo.isRequired = false;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ return {
238
+ version: '1.0',
239
+ generatedAt: new Date().toISOString(),
240
+ projectRoot: this.config.rootDir,
241
+ variables,
242
+ accessPoints: allAccessPoints,
243
+ stats,
244
+ };
245
+ }
246
+ /**
247
+ * Find files matching patterns
248
+ */
249
+ async findFiles(patterns, ignorePatterns) {
250
+ const files = [];
251
+ const walk = async (dir, relativePath = '') => {
252
+ let entries;
253
+ try {
254
+ entries = await fs.readdir(dir, { withFileTypes: true });
255
+ }
256
+ catch {
257
+ return;
258
+ }
259
+ for (const entry of entries) {
260
+ const fullPath = path.join(dir, entry.name);
261
+ const relPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
262
+ if (entry.isDirectory()) {
263
+ if (!ignorePatterns.includes(entry.name) && !entry.name.startsWith('.')) {
264
+ await walk(fullPath, relPath);
265
+ }
266
+ }
267
+ else if (entry.isFile()) {
268
+ for (const pattern of patterns) {
269
+ if (minimatch(relPath, pattern)) {
270
+ files.push(relPath);
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ }
276
+ };
277
+ await walk(this.config.rootDir);
278
+ return files;
279
+ }
280
+ }
281
+ // ============================================================================
282
+ // Factory Functions
283
+ // ============================================================================
284
+ /**
285
+ * Create a new EnvScanner instance
286
+ */
287
+ export function createEnvScanner(config) {
288
+ return new EnvScanner(config);
289
+ }
290
+ //# sourceMappingURL=env-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-scanner.js","sourceRoot":"","sources":["../../src/environment/env-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Environment Variable Store
3
+ *
4
+ * Persistent storage for environment variable access patterns.
5
+ */
6
+ import type { EnvAccessMap, EnvVarInfo, FileEnvInfo, EnvStoreConfig, EnvSensitivity } from './types.js';
7
+ /**
8
+ * Environment Variable Store
9
+ *
10
+ * Manages persistent storage of environment variable access patterns.
11
+ */
12
+ export declare class EnvStore {
13
+ private readonly config;
14
+ private accessMap;
15
+ private initialized;
16
+ constructor(config: EnvStoreConfig);
17
+ /**
18
+ * Initialize the store
19
+ */
20
+ initialize(): Promise<void>;
21
+ /**
22
+ * Get the current access map
23
+ */
24
+ getAccessMap(): EnvAccessMap;
25
+ /**
26
+ * Update the access map
27
+ */
28
+ updateAccessMap(accessMap: EnvAccessMap): Promise<void>;
29
+ /**
30
+ * Get information about a specific variable
31
+ */
32
+ getVariable(varName: string): EnvVarInfo | null;
33
+ /**
34
+ * Get all variables by sensitivity
35
+ */
36
+ getVariablesBySensitivity(sensitivity: EnvSensitivity): EnvVarInfo[];
37
+ /**
38
+ * Get all secret variables
39
+ */
40
+ getSecrets(): EnvVarInfo[];
41
+ /**
42
+ * Get all credential variables
43
+ */
44
+ getCredentials(): EnvVarInfo[];
45
+ /**
46
+ * Get environment access for a file
47
+ */
48
+ getFileAccess(filePattern: string): FileEnvInfo[];
49
+ /**
50
+ * Get required variables (no default, marked as required)
51
+ */
52
+ getRequiredVariables(): EnvVarInfo[];
53
+ /**
54
+ * Get variables without defaults
55
+ */
56
+ getVariablesWithoutDefaults(): EnvVarInfo[];
57
+ /**
58
+ * Check if store has data
59
+ */
60
+ hasData(): boolean;
61
+ private createEmptyAccessMap;
62
+ private loadAccessMap;
63
+ private saveAccessMap;
64
+ private matchesPattern;
65
+ }
66
+ /**
67
+ * Create a new EnvStore instance
68
+ */
69
+ export declare function createEnvStore(config: EnvStoreConfig): EnvStore;
70
+ //# sourceMappingURL=env-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-store.d.ts","sourceRoot":"","sources":["../../src/environment/env-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAC;AAcpB;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACH,YAAY,IAAI,YAAY;IAO5B;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAK/C;;OAEG;IACH,yBAAyB,CAAC,WAAW,EAAE,cAAc,GAAG,UAAU,EAAE;IAMpE;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,cAAc,IAAI,UAAU,EAAE;IAI9B;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAkCjD;;OAEG;IACH,oBAAoB,IAAI,UAAU,EAAE;IAMpC;;OAEG;IACH,2BAA2B,IAAI,UAAU,EAAE;IAM3C;;OAEG;IACH,OAAO,IAAI,OAAO;IAQlB,OAAO,CAAC,oBAAoB;YAmBd,aAAa;YAMb,aAAa;IAU3B,OAAO,CAAC,cAAc;CAWvB;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAE/D"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Environment Variable Store
3
+ *
4
+ * Persistent storage for environment variable access patterns.
5
+ */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ const DRIFT_DIR = '.drift';
12
+ const ENV_DIR = 'environment';
13
+ const ACCESS_MAP_FILE = 'access-map.json';
14
+ // ============================================================================
15
+ // Environment Store
16
+ // ============================================================================
17
+ /**
18
+ * Environment Variable Store
19
+ *
20
+ * Manages persistent storage of environment variable access patterns.
21
+ */
22
+ export class EnvStore {
23
+ config;
24
+ accessMap = null;
25
+ initialized = false;
26
+ constructor(config) {
27
+ this.config = config;
28
+ }
29
+ /**
30
+ * Initialize the store
31
+ */
32
+ async initialize() {
33
+ if (this.initialized)
34
+ return;
35
+ try {
36
+ await this.loadAccessMap();
37
+ }
38
+ catch {
39
+ // No existing data, start fresh
40
+ this.accessMap = this.createEmptyAccessMap();
41
+ }
42
+ this.initialized = true;
43
+ }
44
+ /**
45
+ * Get the current access map
46
+ */
47
+ getAccessMap() {
48
+ if (!this.accessMap) {
49
+ return this.createEmptyAccessMap();
50
+ }
51
+ return this.accessMap;
52
+ }
53
+ /**
54
+ * Update the access map
55
+ */
56
+ async updateAccessMap(accessMap) {
57
+ this.accessMap = accessMap;
58
+ await this.saveAccessMap();
59
+ }
60
+ /**
61
+ * Get information about a specific variable
62
+ */
63
+ getVariable(varName) {
64
+ if (!this.accessMap)
65
+ return null;
66
+ return this.accessMap.variables[varName] ?? null;
67
+ }
68
+ /**
69
+ * Get all variables by sensitivity
70
+ */
71
+ getVariablesBySensitivity(sensitivity) {
72
+ if (!this.accessMap)
73
+ return [];
74
+ return Object.values(this.accessMap.variables)
75
+ .filter(v => v.sensitivity === sensitivity);
76
+ }
77
+ /**
78
+ * Get all secret variables
79
+ */
80
+ getSecrets() {
81
+ return this.getVariablesBySensitivity('secret');
82
+ }
83
+ /**
84
+ * Get all credential variables
85
+ */
86
+ getCredentials() {
87
+ return this.getVariablesBySensitivity('credential');
88
+ }
89
+ /**
90
+ * Get environment access for a file
91
+ */
92
+ getFileAccess(filePattern) {
93
+ if (!this.accessMap)
94
+ return [];
95
+ const results = [];
96
+ const fileAccessMap = new Map();
97
+ // Group access points by file
98
+ for (const point of Object.values(this.accessMap.accessPoints)) {
99
+ if (this.matchesPattern(point.file, filePattern)) {
100
+ if (!fileAccessMap.has(point.file)) {
101
+ fileAccessMap.set(point.file, []);
102
+ }
103
+ fileAccessMap.get(point.file).push(point);
104
+ }
105
+ }
106
+ // Build file info
107
+ for (const [file, accessPoints] of fileAccessMap) {
108
+ const variables = [...new Set(accessPoints.map(ap => ap.varName))];
109
+ const sensitiveVars = accessPoints
110
+ .filter(ap => ap.sensitivity === 'secret' || ap.sensitivity === 'credential')
111
+ .map(ap => ap.varName);
112
+ results.push({
113
+ file,
114
+ variables,
115
+ accessPoints,
116
+ sensitiveVars: [...new Set(sensitiveVars)],
117
+ });
118
+ }
119
+ return results;
120
+ }
121
+ /**
122
+ * Get required variables (no default, marked as required)
123
+ */
124
+ getRequiredVariables() {
125
+ if (!this.accessMap)
126
+ return [];
127
+ return Object.values(this.accessMap.variables)
128
+ .filter(v => v.isRequired && !v.hasDefault);
129
+ }
130
+ /**
131
+ * Get variables without defaults
132
+ */
133
+ getVariablesWithoutDefaults() {
134
+ if (!this.accessMap)
135
+ return [];
136
+ return Object.values(this.accessMap.variables)
137
+ .filter(v => !v.hasDefault);
138
+ }
139
+ /**
140
+ * Check if store has data
141
+ */
142
+ hasData() {
143
+ return this.accessMap !== null && this.accessMap.stats.totalVariables > 0;
144
+ }
145
+ // ============================================================================
146
+ // Private Methods
147
+ // ============================================================================
148
+ createEmptyAccessMap() {
149
+ return {
150
+ version: '1.0',
151
+ generatedAt: new Date().toISOString(),
152
+ projectRoot: this.config.rootDir,
153
+ variables: {},
154
+ accessPoints: {},
155
+ stats: {
156
+ totalVariables: 0,
157
+ totalAccessPoints: 0,
158
+ secretVariables: 0,
159
+ credentialVariables: 0,
160
+ configVariables: 0,
161
+ byLanguage: {},
162
+ byMethod: {},
163
+ },
164
+ };
165
+ }
166
+ async loadAccessMap() {
167
+ const filePath = path.join(this.config.rootDir, DRIFT_DIR, ENV_DIR, ACCESS_MAP_FILE);
168
+ const content = await fs.readFile(filePath, 'utf-8');
169
+ this.accessMap = JSON.parse(content);
170
+ }
171
+ async saveAccessMap() {
172
+ if (!this.accessMap)
173
+ return;
174
+ const dirPath = path.join(this.config.rootDir, DRIFT_DIR, ENV_DIR);
175
+ await fs.mkdir(dirPath, { recursive: true });
176
+ const filePath = path.join(dirPath, ACCESS_MAP_FILE);
177
+ await fs.writeFile(filePath, JSON.stringify(this.accessMap, null, 2));
178
+ }
179
+ matchesPattern(file, pattern) {
180
+ // Simple pattern matching
181
+ if (pattern === '*' || pattern === '**/*')
182
+ return true;
183
+ if (pattern.startsWith('**/')) {
184
+ return file.includes(pattern.slice(3));
185
+ }
186
+ if (pattern.endsWith('*')) {
187
+ return file.startsWith(pattern.slice(0, -1));
188
+ }
189
+ return file === pattern || file.includes(pattern);
190
+ }
191
+ }
192
+ // ============================================================================
193
+ // Factory Functions
194
+ // ============================================================================
195
+ /**
196
+ * Create a new EnvStore instance
197
+ */
198
+ export function createEnvStore(config) {
199
+ return new EnvStore(config);
200
+ }
201
+ //# sourceMappingURL=env-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-store.js","sourceRoot":"","sources":["../../src/environment/env-store.ts"],"names":[],"mappings":"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"}