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.
- package/LICENSE +21 -0
- package/dist/constants/analysis/categorizer.d.ts +27 -0
- package/dist/constants/analysis/categorizer.d.ts.map +1 -0
- package/dist/constants/analysis/categorizer.js +364 -0
- package/dist/constants/analysis/categorizer.js.map +1 -0
- package/dist/constants/analysis/consistency-analyzer.d.ts +77 -0
- package/dist/constants/analysis/consistency-analyzer.d.ts.map +1 -0
- package/dist/constants/analysis/consistency-analyzer.js +176 -0
- package/dist/constants/analysis/consistency-analyzer.js.map +1 -0
- package/dist/constants/analysis/dead-constant-detector.d.ts +79 -0
- package/dist/constants/analysis/dead-constant-detector.d.ts.map +1 -0
- package/dist/constants/analysis/dead-constant-detector.js +242 -0
- package/dist/constants/analysis/dead-constant-detector.js.map +1 -0
- package/dist/constants/analysis/magic-detector.d.ts +116 -0
- package/dist/constants/analysis/magic-detector.d.ts.map +1 -0
- package/dist/constants/analysis/magic-detector.js +425 -0
- package/dist/constants/analysis/magic-detector.js.map +1 -0
- package/dist/constants/analysis/reference-finder.d.ts +87 -0
- package/dist/constants/analysis/reference-finder.d.ts.map +1 -0
- package/dist/constants/analysis/reference-finder.js +269 -0
- package/dist/constants/analysis/reference-finder.js.map +1 -0
- package/dist/constants/analysis/security-scanner.d.ts +115 -0
- package/dist/constants/analysis/security-scanner.d.ts.map +1 -0
- package/dist/constants/analysis/security-scanner.js +429 -0
- package/dist/constants/analysis/security-scanner.js.map +1 -0
- package/dist/constants/extractors/base-extractor.d.ts +97 -0
- package/dist/constants/extractors/base-extractor.d.ts.map +1 -0
- package/dist/constants/extractors/base-extractor.js +285 -0
- package/dist/constants/extractors/base-extractor.js.map +1 -0
- package/dist/constants/extractors/regex/base-regex.d.ts +67 -0
- package/dist/constants/extractors/regex/base-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/base-regex.js +209 -0
- package/dist/constants/extractors/regex/base-regex.js.map +1 -0
- package/dist/constants/extractors/regex/csharp-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/csharp-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/csharp-regex.js +316 -0
- package/dist/constants/extractors/regex/csharp-regex.js.map +1 -0
- package/dist/constants/extractors/regex/go-regex.d.ts +40 -0
- package/dist/constants/extractors/regex/go-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/go-regex.js +297 -0
- package/dist/constants/extractors/regex/go-regex.js.map +1 -0
- package/dist/constants/extractors/regex/java-regex.d.ts +43 -0
- package/dist/constants/extractors/regex/java-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/java-regex.js +276 -0
- package/dist/constants/extractors/regex/java-regex.js.map +1 -0
- package/dist/constants/extractors/regex/php-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/php-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/php-regex.js +270 -0
- package/dist/constants/extractors/regex/php-regex.js.map +1 -0
- package/dist/constants/extractors/regex/python-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/python-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/python-regex.js +287 -0
- package/dist/constants/extractors/regex/python-regex.js.map +1 -0
- package/dist/constants/extractors/regex/typescript-regex.d.ts +35 -0
- package/dist/constants/extractors/regex/typescript-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/typescript-regex.js +313 -0
- package/dist/constants/extractors/regex/typescript-regex.js.map +1 -0
- package/dist/constants/index.d.ts +26 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +36 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/integration/callgraph-adapter.d.ts +167 -0
- package/dist/constants/integration/callgraph-adapter.d.ts.map +1 -0
- package/dist/constants/integration/callgraph-adapter.js +287 -0
- package/dist/constants/integration/callgraph-adapter.js.map +1 -0
- package/dist/constants/integration/index.d.ts +10 -0
- package/dist/constants/integration/index.d.ts.map +1 -0
- package/dist/constants/integration/index.js +13 -0
- package/dist/constants/integration/index.js.map +1 -0
- package/dist/constants/integration/pattern-adapter.d.ts +171 -0
- package/dist/constants/integration/pattern-adapter.d.ts.map +1 -0
- package/dist/constants/integration/pattern-adapter.js +331 -0
- package/dist/constants/integration/pattern-adapter.js.map +1 -0
- package/dist/constants/integration/scanner-adapter.d.ts +153 -0
- package/dist/constants/integration/scanner-adapter.d.ts.map +1 -0
- package/dist/constants/integration/scanner-adapter.js +337 -0
- package/dist/constants/integration/scanner-adapter.js.map +1 -0
- package/dist/constants/store/constant-store.d.ts +117 -0
- package/dist/constants/store/constant-store.d.ts.map +1 -0
- package/dist/constants/store/constant-store.js +367 -0
- package/dist/constants/store/constant-store.js.map +1 -0
- package/dist/constants/types.d.ts +423 -0
- package/dist/constants/types.d.ts.map +1 -0
- package/dist/constants/types.js +43 -0
- package/dist/constants/types.js.map +1 -0
- package/dist/constraints/store/constraint-store.d.ts.map +1 -1
- package/dist/constraints/store/constraint-store.js +37 -2
- package/dist/constraints/store/constraint-store.js.map +1 -1
- package/dist/environment/env-scanner.d.ts +53 -0
- package/dist/environment/env-scanner.d.ts.map +1 -0
- package/dist/environment/env-scanner.js +290 -0
- package/dist/environment/env-scanner.js.map +1 -0
- package/dist/environment/env-store.d.ts +70 -0
- package/dist/environment/env-store.d.ts.map +1 -0
- package/dist/environment/env-store.js +201 -0
- package/dist/environment/env-store.js.map +1 -0
- package/dist/environment/extractors/base-env-extractor.d.ts +56 -0
- package/dist/environment/extractors/base-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/base-env-extractor.js +74 -0
- package/dist/environment/extractors/base-env-extractor.js.map +1 -0
- package/dist/environment/extractors/csharp-env-extractor.d.ts +49 -0
- package/dist/environment/extractors/csharp-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/csharp-env-extractor.js +240 -0
- package/dist/environment/extractors/csharp-env-extractor.js.map +1 -0
- package/dist/environment/extractors/go-env-extractor.d.ts +53 -0
- package/dist/environment/extractors/go-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/go-env-extractor.js +267 -0
- package/dist/environment/extractors/go-env-extractor.js.map +1 -0
- package/dist/environment/extractors/index.d.ts +13 -0
- package/dist/environment/extractors/index.d.ts.map +1 -0
- package/dist/environment/extractors/index.js +13 -0
- package/dist/environment/extractors/index.js.map +1 -0
- package/dist/environment/extractors/java-env-extractor.d.ts +58 -0
- package/dist/environment/extractors/java-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/java-env-extractor.js +219 -0
- package/dist/environment/extractors/java-env-extractor.js.map +1 -0
- package/dist/environment/extractors/php-env-extractor.d.ts +58 -0
- package/dist/environment/extractors/php-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/php-env-extractor.js +231 -0
- package/dist/environment/extractors/php-env-extractor.js.map +1 -0
- package/dist/environment/extractors/python-env-extractor.d.ts +50 -0
- package/dist/environment/extractors/python-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/python-env-extractor.js +219 -0
- package/dist/environment/extractors/python-env-extractor.js.map +1 -0
- package/dist/environment/extractors/typescript-env-extractor.d.ts +54 -0
- package/dist/environment/extractors/typescript-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/typescript-env-extractor.js +228 -0
- package/dist/environment/extractors/typescript-env-extractor.js.map +1 -0
- package/dist/environment/index.d.ts +11 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/environment/index.js +15 -0
- package/dist/environment/index.js.map +1 -0
- package/dist/environment/types.d.ts +145 -0
- package/dist/environment/types.d.ts.map +1 -0
- package/dist/environment/types.js +84 -0
- package/dist/environment/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from Go.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - os.Getenv("VAR_NAME")
|
|
8
|
+
* - os.LookupEnv("VAR_NAME")
|
|
9
|
+
* - viper patterns
|
|
10
|
+
* - envconfig patterns
|
|
11
|
+
*/
|
|
12
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
13
|
+
/**
|
|
14
|
+
* Go environment variable extractor
|
|
15
|
+
*/
|
|
16
|
+
export class GoEnvExtractor extends BaseEnvExtractor {
|
|
17
|
+
language = 'go';
|
|
18
|
+
extensions = ['.go'];
|
|
19
|
+
/**
|
|
20
|
+
* Extract environment variable access from Go source
|
|
21
|
+
*/
|
|
22
|
+
extract(source, filePath) {
|
|
23
|
+
const result = this.createEmptyResult(filePath);
|
|
24
|
+
try {
|
|
25
|
+
// Extract os.Getenv patterns
|
|
26
|
+
this.extractOsGetenv(source, filePath, result);
|
|
27
|
+
// Extract os.LookupEnv patterns
|
|
28
|
+
this.extractOsLookupEnv(source, filePath, result);
|
|
29
|
+
// Extract viper patterns
|
|
30
|
+
this.extractViperPatterns(source, filePath, result);
|
|
31
|
+
// Extract envconfig patterns
|
|
32
|
+
this.extractEnvconfigPatterns(source, filePath, result);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
result.errors.push(error instanceof Error ? error.message : 'Unknown parse error');
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Extract os.Getenv("VAR") patterns
|
|
41
|
+
*/
|
|
42
|
+
extractOsGetenv(source, filePath, result) {
|
|
43
|
+
// Pattern: os.Getenv("VAR_NAME")
|
|
44
|
+
const pattern = /os\.Getenv\(\s*"([A-Z_][A-Z0-9_]*)"\s*\)/g;
|
|
45
|
+
let match;
|
|
46
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
47
|
+
const varName = match[1];
|
|
48
|
+
if (!varName)
|
|
49
|
+
continue;
|
|
50
|
+
const pos = this.getPosition(source, match.index);
|
|
51
|
+
const context = this.getContext(source, match.index);
|
|
52
|
+
const { hasDefault, defaultValue } = this.detectDefault(source, match.index, match[0].length);
|
|
53
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
54
|
+
varName,
|
|
55
|
+
method: 'os.Getenv',
|
|
56
|
+
file: filePath,
|
|
57
|
+
line: pos.line,
|
|
58
|
+
column: pos.column,
|
|
59
|
+
context,
|
|
60
|
+
hasDefault,
|
|
61
|
+
defaultValue,
|
|
62
|
+
isRequired: !hasDefault,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Extract os.LookupEnv("VAR") patterns
|
|
68
|
+
*/
|
|
69
|
+
extractOsLookupEnv(source, filePath, result) {
|
|
70
|
+
// Pattern: os.LookupEnv("VAR_NAME")
|
|
71
|
+
const pattern = /os\.LookupEnv\(\s*"([A-Z_][A-Z0-9_]*)"\s*\)/g;
|
|
72
|
+
let match;
|
|
73
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
74
|
+
const varName = match[1];
|
|
75
|
+
if (!varName)
|
|
76
|
+
continue;
|
|
77
|
+
const pos = this.getPosition(source, match.index);
|
|
78
|
+
const context = this.getContext(source, match.index);
|
|
79
|
+
// LookupEnv returns (value, ok) so it's typically used with a check
|
|
80
|
+
// This means it's usually not required (has implicit handling)
|
|
81
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
82
|
+
varName,
|
|
83
|
+
method: 'os.LookupEnv',
|
|
84
|
+
file: filePath,
|
|
85
|
+
line: pos.line,
|
|
86
|
+
column: pos.column,
|
|
87
|
+
context,
|
|
88
|
+
hasDefault: true, // LookupEnv implies handling of missing case
|
|
89
|
+
isRequired: false,
|
|
90
|
+
confidence: 0.9,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract viper patterns
|
|
96
|
+
*/
|
|
97
|
+
extractViperPatterns(source, filePath, result) {
|
|
98
|
+
// Pattern: viper.GetString("VAR") or viper.Get("VAR")
|
|
99
|
+
const getPatterns = [
|
|
100
|
+
/viper\.GetString\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g,
|
|
101
|
+
/viper\.GetInt\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g,
|
|
102
|
+
/viper\.GetBool\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g,
|
|
103
|
+
/viper\.Get\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g,
|
|
104
|
+
/viper\.GetDuration\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g,
|
|
105
|
+
];
|
|
106
|
+
for (const pattern of getPatterns) {
|
|
107
|
+
let match;
|
|
108
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
109
|
+
const varName = match[1];
|
|
110
|
+
if (!varName)
|
|
111
|
+
continue;
|
|
112
|
+
const pos = this.getPosition(source, match.index);
|
|
113
|
+
const context = this.getContext(source, match.index);
|
|
114
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
115
|
+
varName,
|
|
116
|
+
method: 'viper',
|
|
117
|
+
file: filePath,
|
|
118
|
+
line: pos.line,
|
|
119
|
+
column: pos.column,
|
|
120
|
+
context,
|
|
121
|
+
hasDefault: false,
|
|
122
|
+
isRequired: true,
|
|
123
|
+
confidence: 0.9,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Pattern: viper.SetDefault("key", value)
|
|
128
|
+
const setDefaultPattern = /viper\.SetDefault\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*,\s*([^)]+)\s*\)/g;
|
|
129
|
+
let match;
|
|
130
|
+
while ((match = setDefaultPattern.exec(source)) !== null) {
|
|
131
|
+
const varName = match[1];
|
|
132
|
+
if (!varName)
|
|
133
|
+
continue;
|
|
134
|
+
const pos = this.getPosition(source, match.index);
|
|
135
|
+
const context = this.getContext(source, match.index);
|
|
136
|
+
const defaultValue = match[2]?.trim();
|
|
137
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
138
|
+
varName,
|
|
139
|
+
method: 'viper',
|
|
140
|
+
file: filePath,
|
|
141
|
+
line: pos.line,
|
|
142
|
+
column: pos.column,
|
|
143
|
+
context,
|
|
144
|
+
hasDefault: true,
|
|
145
|
+
defaultValue,
|
|
146
|
+
isRequired: false,
|
|
147
|
+
confidence: 0.85,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
// Pattern: viper.BindEnv("key", "ENV_VAR")
|
|
151
|
+
const bindEnvPattern = /viper\.BindEnv\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*(?:,\s*"([A-Z_][A-Z0-9_]*)")?\s*\)/g;
|
|
152
|
+
while ((match = bindEnvPattern.exec(source)) !== null) {
|
|
153
|
+
const configKey = match[1];
|
|
154
|
+
const envVar = match[2] ?? configKey?.toUpperCase().replace(/\./g, '_');
|
|
155
|
+
if (!envVar)
|
|
156
|
+
continue;
|
|
157
|
+
const pos = this.getPosition(source, match.index);
|
|
158
|
+
const context = this.getContext(source, match.index);
|
|
159
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
160
|
+
varName: envVar,
|
|
161
|
+
method: 'viper',
|
|
162
|
+
file: filePath,
|
|
163
|
+
line: pos.line,
|
|
164
|
+
column: pos.column,
|
|
165
|
+
context,
|
|
166
|
+
hasDefault: false,
|
|
167
|
+
isRequired: true,
|
|
168
|
+
confidence: 0.9,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
// Pattern: viper.AutomaticEnv()
|
|
172
|
+
const autoEnvPattern = /viper\.AutomaticEnv\(\)/g;
|
|
173
|
+
while ((match = autoEnvPattern.exec(source)) !== null) {
|
|
174
|
+
const pos = this.getPosition(source, match.index);
|
|
175
|
+
const context = this.getContext(source, match.index);
|
|
176
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
177
|
+
varName: '__VIPER_AUTO_ENV__',
|
|
178
|
+
method: 'viper',
|
|
179
|
+
file: filePath,
|
|
180
|
+
line: pos.line,
|
|
181
|
+
column: pos.column,
|
|
182
|
+
context,
|
|
183
|
+
hasDefault: true,
|
|
184
|
+
isRequired: false,
|
|
185
|
+
confidence: 0.7,
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Extract envconfig patterns
|
|
191
|
+
*/
|
|
192
|
+
extractEnvconfigPatterns(source, filePath, result) {
|
|
193
|
+
// Pattern: envconfig.Process("prefix", &config)
|
|
194
|
+
const processPattern = /envconfig\.Process\(\s*"([a-zA-Z_][a-zA-Z0-9_]*)"\s*,/g;
|
|
195
|
+
let match;
|
|
196
|
+
while ((match = processPattern.exec(source)) !== null) {
|
|
197
|
+
const prefix = match[1];
|
|
198
|
+
if (!prefix)
|
|
199
|
+
continue;
|
|
200
|
+
const pos = this.getPosition(source, match.index);
|
|
201
|
+
const context = this.getContext(source, match.index);
|
|
202
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
203
|
+
varName: `${prefix.toUpperCase()}_*`,
|
|
204
|
+
method: 'envconfig',
|
|
205
|
+
file: filePath,
|
|
206
|
+
line: pos.line,
|
|
207
|
+
column: pos.column,
|
|
208
|
+
context,
|
|
209
|
+
hasDefault: true,
|
|
210
|
+
isRequired: false,
|
|
211
|
+
confidence: 0.8,
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
// Pattern: struct tags `envconfig:"VAR_NAME"`
|
|
215
|
+
const tagPattern = /`[^`]*envconfig:"([A-Z_][A-Z0-9_]*)(?:,([^"]*))?"[^`]*`/g;
|
|
216
|
+
while ((match = tagPattern.exec(source)) !== null) {
|
|
217
|
+
const varName = match[1];
|
|
218
|
+
if (!varName)
|
|
219
|
+
continue;
|
|
220
|
+
const pos = this.getPosition(source, match.index);
|
|
221
|
+
const context = this.getContext(source, match.index);
|
|
222
|
+
const options = match[2] ?? '';
|
|
223
|
+
const isRequired = options.includes('required');
|
|
224
|
+
const hasDefault = options.includes('default');
|
|
225
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
226
|
+
varName,
|
|
227
|
+
method: 'envconfig',
|
|
228
|
+
file: filePath,
|
|
229
|
+
line: pos.line,
|
|
230
|
+
column: pos.column,
|
|
231
|
+
context,
|
|
232
|
+
hasDefault,
|
|
233
|
+
isRequired,
|
|
234
|
+
confidence: 0.95,
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Detect if a default value is provided
|
|
240
|
+
*/
|
|
241
|
+
detectDefault(source, matchIndex, matchLength) {
|
|
242
|
+
const afterMatch = source.slice(matchIndex + matchLength, matchIndex + matchLength + 100);
|
|
243
|
+
// Check for if val == "" { val = "default" } pattern
|
|
244
|
+
const ifEmptyMatch = afterMatch.match(/^\s*\)\s*\n?\s*if\s+\w+\s*==\s*""\s*\{\s*\w+\s*=\s*"([^"]*)"/);
|
|
245
|
+
if (ifEmptyMatch) {
|
|
246
|
+
return { hasDefault: true, defaultValue: ifEmptyMatch[1] };
|
|
247
|
+
}
|
|
248
|
+
// Check for inline default: val := os.Getenv("X"); if val == "" { val = "default" }
|
|
249
|
+
// This is harder to detect without full parsing
|
|
250
|
+
return { hasDefault: false };
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get context around a match
|
|
254
|
+
*/
|
|
255
|
+
getContext(source, index) {
|
|
256
|
+
const start = Math.max(0, index - 20);
|
|
257
|
+
const end = Math.min(source.length, index + 80);
|
|
258
|
+
return source.slice(start, end).replace(/\n/g, ' ').trim();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Create a Go environment extractor
|
|
263
|
+
*/
|
|
264
|
+
export function createGoEnvExtractor() {
|
|
265
|
+
return new GoEnvExtractor();
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=go-env-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-env-extractor.js","sourceRoot":"","sources":["../../../src/environment/extractors/go-env-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Variable Extractors
|
|
3
|
+
*
|
|
4
|
+
* Language-specific extractors for detecting environment variable access patterns.
|
|
5
|
+
*/
|
|
6
|
+
export { BaseEnvExtractor } from './base-env-extractor.js';
|
|
7
|
+
export { TypeScriptEnvExtractor, createTypeScriptEnvExtractor } from './typescript-env-extractor.js';
|
|
8
|
+
export { PythonEnvExtractor, createPythonEnvExtractor } from './python-env-extractor.js';
|
|
9
|
+
export { JavaEnvExtractor, createJavaEnvExtractor } from './java-env-extractor.js';
|
|
10
|
+
export { CSharpEnvExtractor, createCSharpEnvExtractor } from './csharp-env-extractor.js';
|
|
11
|
+
export { PhpEnvExtractor, createPhpEnvExtractor } from './php-env-extractor.js';
|
|
12
|
+
export { GoEnvExtractor, createGoEnvExtractor } from './go-env-extractor.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/environment/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Variable Extractors
|
|
3
|
+
*
|
|
4
|
+
* Language-specific extractors for detecting environment variable access patterns.
|
|
5
|
+
*/
|
|
6
|
+
export { BaseEnvExtractor } from './base-env-extractor.js';
|
|
7
|
+
export { TypeScriptEnvExtractor, createTypeScriptEnvExtractor } from './typescript-env-extractor.js';
|
|
8
|
+
export { PythonEnvExtractor, createPythonEnvExtractor } from './python-env-extractor.js';
|
|
9
|
+
export { JavaEnvExtractor, createJavaEnvExtractor } from './java-env-extractor.js';
|
|
10
|
+
export { CSharpEnvExtractor, createCSharpEnvExtractor } from './csharp-env-extractor.js';
|
|
11
|
+
export { PhpEnvExtractor, createPhpEnvExtractor } from './php-env-extractor.js';
|
|
12
|
+
export { GoEnvExtractor, createGoEnvExtractor } from './go-env-extractor.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/environment/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from Java.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - System.getenv("VAR_NAME")
|
|
8
|
+
* - System.getProperty("VAR_NAME")
|
|
9
|
+
* - @Value("${VAR_NAME}") Spring annotations
|
|
10
|
+
* - @ConfigurationProperties Spring patterns
|
|
11
|
+
* - Environment.getProperty() Spring patterns
|
|
12
|
+
*/
|
|
13
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
14
|
+
import type { EnvLanguage, EnvExtractionResult } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Java environment variable extractor
|
|
17
|
+
*/
|
|
18
|
+
export declare class JavaEnvExtractor extends BaseEnvExtractor {
|
|
19
|
+
readonly language: EnvLanguage;
|
|
20
|
+
readonly extensions: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Extract environment variable access from Java source
|
|
23
|
+
*/
|
|
24
|
+
extract(source: string, filePath: string): EnvExtractionResult;
|
|
25
|
+
/**
|
|
26
|
+
* Extract System.getenv("VAR") patterns
|
|
27
|
+
*/
|
|
28
|
+
private extractSystemGetenv;
|
|
29
|
+
/**
|
|
30
|
+
* Extract System.getProperty("VAR") patterns
|
|
31
|
+
*/
|
|
32
|
+
private extractSystemGetProperty;
|
|
33
|
+
/**
|
|
34
|
+
* Extract Spring @Value("${VAR}") patterns
|
|
35
|
+
*/
|
|
36
|
+
private extractSpringValue;
|
|
37
|
+
/**
|
|
38
|
+
* Extract Spring Environment.getProperty patterns
|
|
39
|
+
*/
|
|
40
|
+
private extractSpringEnvironment;
|
|
41
|
+
/**
|
|
42
|
+
* Extract @ConfigurationProperties patterns
|
|
43
|
+
*/
|
|
44
|
+
private extractConfigurationProperties;
|
|
45
|
+
/**
|
|
46
|
+
* Detect if a default value is provided via Optional or ternary
|
|
47
|
+
*/
|
|
48
|
+
private detectDefault;
|
|
49
|
+
/**
|
|
50
|
+
* Get context around a match
|
|
51
|
+
*/
|
|
52
|
+
private getContext;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a Java environment extractor
|
|
56
|
+
*/
|
|
57
|
+
export declare function createJavaEnvExtractor(): JavaEnvExtractor;
|
|
58
|
+
//# sourceMappingURL=java-env-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-env-extractor.d.ts","sourceRoot":"","sources":["../../../src/environment/extractors/java-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAU;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAa;IAE1C;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IA0B9D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoChC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA0BtC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from Java.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - System.getenv("VAR_NAME")
|
|
8
|
+
* - System.getProperty("VAR_NAME")
|
|
9
|
+
* - @Value("${VAR_NAME}") Spring annotations
|
|
10
|
+
* - @ConfigurationProperties Spring patterns
|
|
11
|
+
* - Environment.getProperty() Spring patterns
|
|
12
|
+
*/
|
|
13
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
14
|
+
/**
|
|
15
|
+
* Java environment variable extractor
|
|
16
|
+
*/
|
|
17
|
+
export class JavaEnvExtractor extends BaseEnvExtractor {
|
|
18
|
+
language = 'java';
|
|
19
|
+
extensions = ['.java'];
|
|
20
|
+
/**
|
|
21
|
+
* Extract environment variable access from Java source
|
|
22
|
+
*/
|
|
23
|
+
extract(source, filePath) {
|
|
24
|
+
const result = this.createEmptyResult(filePath);
|
|
25
|
+
try {
|
|
26
|
+
// Extract System.getenv patterns
|
|
27
|
+
this.extractSystemGetenv(source, filePath, result);
|
|
28
|
+
// Extract System.getProperty patterns
|
|
29
|
+
this.extractSystemGetProperty(source, filePath, result);
|
|
30
|
+
// Extract Spring @Value patterns
|
|
31
|
+
this.extractSpringValue(source, filePath, result);
|
|
32
|
+
// Extract Spring Environment patterns
|
|
33
|
+
this.extractSpringEnvironment(source, filePath, result);
|
|
34
|
+
// Extract @ConfigurationProperties patterns
|
|
35
|
+
this.extractConfigurationProperties(source, filePath, result);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
result.errors.push(error instanceof Error ? error.message : 'Unknown parse error');
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract System.getenv("VAR") patterns
|
|
44
|
+
*/
|
|
45
|
+
extractSystemGetenv(source, filePath, result) {
|
|
46
|
+
// Pattern: System.getenv("VAR_NAME")
|
|
47
|
+
const pattern = /System\.getenv\(\s*"([A-Z_][A-Z0-9_]*)"\s*\)/g;
|
|
48
|
+
let match;
|
|
49
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
50
|
+
const varName = match[1];
|
|
51
|
+
if (!varName)
|
|
52
|
+
continue;
|
|
53
|
+
const pos = this.getPosition(source, match.index);
|
|
54
|
+
const context = this.getContext(source, match.index);
|
|
55
|
+
const { hasDefault, defaultValue } = this.detectDefault(source, match.index, match[0].length);
|
|
56
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
57
|
+
varName,
|
|
58
|
+
method: 'System.getenv',
|
|
59
|
+
file: filePath,
|
|
60
|
+
line: pos.line,
|
|
61
|
+
column: pos.column,
|
|
62
|
+
context,
|
|
63
|
+
hasDefault,
|
|
64
|
+
defaultValue,
|
|
65
|
+
isRequired: !hasDefault,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract System.getProperty("VAR") patterns
|
|
71
|
+
*/
|
|
72
|
+
extractSystemGetProperty(source, filePath, result) {
|
|
73
|
+
// Pattern: System.getProperty("property.name") or System.getProperty("property.name", "default")
|
|
74
|
+
const pattern = /System\.getProperty\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"(?:\s*,\s*"([^"]*)")?\s*\)/g;
|
|
75
|
+
let match;
|
|
76
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
77
|
+
const varName = match[1];
|
|
78
|
+
if (!varName)
|
|
79
|
+
continue;
|
|
80
|
+
const pos = this.getPosition(source, match.index);
|
|
81
|
+
const context = this.getContext(source, match.index);
|
|
82
|
+
const defaultValue = match[2];
|
|
83
|
+
const hasDefault = defaultValue !== undefined;
|
|
84
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
85
|
+
varName,
|
|
86
|
+
method: 'System.getProperty',
|
|
87
|
+
file: filePath,
|
|
88
|
+
line: pos.line,
|
|
89
|
+
column: pos.column,
|
|
90
|
+
context,
|
|
91
|
+
hasDefault,
|
|
92
|
+
defaultValue,
|
|
93
|
+
isRequired: !hasDefault,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Extract Spring @Value("${VAR}") patterns
|
|
99
|
+
*/
|
|
100
|
+
extractSpringValue(source, filePath, result) {
|
|
101
|
+
// Pattern: @Value("${VAR_NAME}") or @Value("${VAR_NAME:default}")
|
|
102
|
+
const pattern = /@Value\(\s*"\$\{([a-zA-Z_][a-zA-Z0-9_.]*)(?::([^}]*))?\}"\s*\)/g;
|
|
103
|
+
let match;
|
|
104
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
105
|
+
const varName = match[1];
|
|
106
|
+
if (!varName)
|
|
107
|
+
continue;
|
|
108
|
+
const pos = this.getPosition(source, match.index);
|
|
109
|
+
const context = this.getContext(source, match.index);
|
|
110
|
+
const defaultValue = match[2];
|
|
111
|
+
const hasDefault = defaultValue !== undefined;
|
|
112
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
113
|
+
varName,
|
|
114
|
+
method: '@Value',
|
|
115
|
+
file: filePath,
|
|
116
|
+
line: pos.line,
|
|
117
|
+
column: pos.column,
|
|
118
|
+
context,
|
|
119
|
+
hasDefault,
|
|
120
|
+
defaultValue,
|
|
121
|
+
isRequired: !hasDefault,
|
|
122
|
+
confidence: 0.95,
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extract Spring Environment.getProperty patterns
|
|
128
|
+
*/
|
|
129
|
+
extractSpringEnvironment(source, filePath, result) {
|
|
130
|
+
// Pattern: environment.getProperty("VAR") or env.getProperty("VAR", "default")
|
|
131
|
+
const patterns = [
|
|
132
|
+
/(?:environment|env)\.getProperty\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"(?:\s*,\s*"([^"]*)")?\s*\)/gi,
|
|
133
|
+
/(?:environment|env)\.getRequiredProperty\(\s*"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/gi,
|
|
134
|
+
];
|
|
135
|
+
for (const pattern of patterns) {
|
|
136
|
+
let match;
|
|
137
|
+
const isRequired = pattern.source.includes('Required');
|
|
138
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
139
|
+
const varName = match[1];
|
|
140
|
+
if (!varName)
|
|
141
|
+
continue;
|
|
142
|
+
const pos = this.getPosition(source, match.index);
|
|
143
|
+
const context = this.getContext(source, match.index);
|
|
144
|
+
const defaultValue = match[2];
|
|
145
|
+
const hasDefault = defaultValue !== undefined && !isRequired;
|
|
146
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
147
|
+
varName,
|
|
148
|
+
method: 'Environment',
|
|
149
|
+
file: filePath,
|
|
150
|
+
line: pos.line,
|
|
151
|
+
column: pos.column,
|
|
152
|
+
context,
|
|
153
|
+
hasDefault,
|
|
154
|
+
defaultValue,
|
|
155
|
+
isRequired: isRequired || !hasDefault,
|
|
156
|
+
confidence: 0.9,
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extract @ConfigurationProperties patterns
|
|
163
|
+
*/
|
|
164
|
+
extractConfigurationProperties(source, filePath, result) {
|
|
165
|
+
// Pattern: @ConfigurationProperties(prefix = "app.config")
|
|
166
|
+
const pattern = /@ConfigurationProperties\(\s*(?:prefix\s*=\s*)?"([a-zA-Z_][a-zA-Z0-9_.]*)"\s*\)/g;
|
|
167
|
+
let match;
|
|
168
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
169
|
+
const prefix = match[1];
|
|
170
|
+
if (!prefix)
|
|
171
|
+
continue;
|
|
172
|
+
const pos = this.getPosition(source, match.index);
|
|
173
|
+
const context = this.getContext(source, match.index);
|
|
174
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
175
|
+
varName: `${prefix}.*`,
|
|
176
|
+
method: '@ConfigurationProperties',
|
|
177
|
+
file: filePath,
|
|
178
|
+
line: pos.line,
|
|
179
|
+
column: pos.column,
|
|
180
|
+
context,
|
|
181
|
+
hasDefault: true,
|
|
182
|
+
isRequired: false,
|
|
183
|
+
confidence: 0.85,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Detect if a default value is provided via Optional or ternary
|
|
189
|
+
*/
|
|
190
|
+
detectDefault(source, matchIndex, matchLength) {
|
|
191
|
+
const afterMatch = source.slice(matchIndex + matchLength, matchIndex + matchLength + 100);
|
|
192
|
+
// Check for Optional.ofNullable(...).orElse("default")
|
|
193
|
+
const orElseMatch = afterMatch.match(/^\s*\)\s*\.orElse\(\s*"([^"]*)"\s*\)/);
|
|
194
|
+
if (orElseMatch) {
|
|
195
|
+
return { hasDefault: true, defaultValue: orElseMatch[1] };
|
|
196
|
+
}
|
|
197
|
+
// Check for ternary: != null ? ... : "default"
|
|
198
|
+
const ternaryMatch = afterMatch.match(/^\s*!=\s*null\s*\?\s*[^:]+\s*:\s*"([^"]*)"/);
|
|
199
|
+
if (ternaryMatch) {
|
|
200
|
+
return { hasDefault: true, defaultValue: ternaryMatch[1] };
|
|
201
|
+
}
|
|
202
|
+
return { hasDefault: false };
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get context around a match
|
|
206
|
+
*/
|
|
207
|
+
getContext(source, index) {
|
|
208
|
+
const start = Math.max(0, index - 20);
|
|
209
|
+
const end = Math.min(source.length, index + 80);
|
|
210
|
+
return source.slice(start, end).replace(/\n/g, ' ').trim();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a Java environment extractor
|
|
215
|
+
*/
|
|
216
|
+
export function createJavaEnvExtractor() {
|
|
217
|
+
return new JavaEnvExtractor();
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=java-env-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-env-extractor.js","sourceRoot":"","sources":["../../../src/environment/extractors/java-env-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHP Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from PHP.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - getenv('VAR_NAME')
|
|
8
|
+
* - $_ENV['VAR_NAME']
|
|
9
|
+
* - $_SERVER['VAR_NAME']
|
|
10
|
+
* - env('VAR_NAME') Laravel helper
|
|
11
|
+
* - config('key') Laravel config
|
|
12
|
+
*/
|
|
13
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
14
|
+
import type { EnvLanguage, EnvExtractionResult } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* PHP environment variable extractor
|
|
17
|
+
*/
|
|
18
|
+
export declare class PhpEnvExtractor extends BaseEnvExtractor {
|
|
19
|
+
readonly language: EnvLanguage;
|
|
20
|
+
readonly extensions: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Extract environment variable access from PHP source
|
|
23
|
+
*/
|
|
24
|
+
extract(source: string, filePath: string): EnvExtractionResult;
|
|
25
|
+
/**
|
|
26
|
+
* Extract getenv('VAR') patterns
|
|
27
|
+
*/
|
|
28
|
+
private extractGetenv;
|
|
29
|
+
/**
|
|
30
|
+
* Extract $_ENV['VAR'] patterns
|
|
31
|
+
*/
|
|
32
|
+
private extractEnvSuperglobal;
|
|
33
|
+
/**
|
|
34
|
+
* Extract $_SERVER['VAR'] patterns (for env vars passed via server)
|
|
35
|
+
*/
|
|
36
|
+
private extractServerSuperglobal;
|
|
37
|
+
/**
|
|
38
|
+
* Extract Laravel env('VAR') patterns
|
|
39
|
+
*/
|
|
40
|
+
private extractLaravelEnv;
|
|
41
|
+
/**
|
|
42
|
+
* Extract Laravel config('key') patterns
|
|
43
|
+
*/
|
|
44
|
+
private extractLaravelConfig;
|
|
45
|
+
/**
|
|
46
|
+
* Detect if a default value is provided via ternary or null coalescing
|
|
47
|
+
*/
|
|
48
|
+
private detectDefault;
|
|
49
|
+
/**
|
|
50
|
+
* Get context around a match
|
|
51
|
+
*/
|
|
52
|
+
private getContext;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a PHP environment extractor
|
|
56
|
+
*/
|
|
57
|
+
export declare function createPhpEnvExtractor(): PhpEnvExtractor;
|
|
58
|
+
//# sourceMappingURL=php-env-extractor.d.ts.map
|