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,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for language-specific environment variable extractors.
|
|
5
|
+
*/
|
|
6
|
+
import type { EnvLanguage, EnvAccessMethod, EnvAccessPoint, EnvExtractionResult, EnvSensitivity } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Base class for environment variable extractors
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class BaseEnvExtractor {
|
|
11
|
+
/** Language this extractor handles */
|
|
12
|
+
abstract readonly language: EnvLanguage;
|
|
13
|
+
/** File extensions this extractor handles */
|
|
14
|
+
abstract readonly extensions: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Check if this extractor can handle a file
|
|
17
|
+
*/
|
|
18
|
+
canHandle(filePath: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Extract environment variable access from source code
|
|
21
|
+
*/
|
|
22
|
+
abstract extract(source: string, filePath: string): EnvExtractionResult;
|
|
23
|
+
/**
|
|
24
|
+
* Create an empty extraction result
|
|
25
|
+
*/
|
|
26
|
+
protected createEmptyResult(filePath: string): EnvExtractionResult;
|
|
27
|
+
/**
|
|
28
|
+
* Create an environment access point
|
|
29
|
+
*/
|
|
30
|
+
protected createAccessPoint(params: {
|
|
31
|
+
varName: string;
|
|
32
|
+
method: EnvAccessMethod;
|
|
33
|
+
file: string;
|
|
34
|
+
line: number;
|
|
35
|
+
column: number;
|
|
36
|
+
context: string;
|
|
37
|
+
hasDefault?: boolean | undefined;
|
|
38
|
+
defaultValue?: string | undefined;
|
|
39
|
+
isRequired?: boolean | undefined;
|
|
40
|
+
containingFunction?: string | undefined;
|
|
41
|
+
confidence?: number | undefined;
|
|
42
|
+
sensitivity?: EnvSensitivity | undefined;
|
|
43
|
+
}): EnvAccessPoint;
|
|
44
|
+
/**
|
|
45
|
+
* Extract string value from quotes
|
|
46
|
+
*/
|
|
47
|
+
protected extractStringValue(text: string): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Get line and column from position in source
|
|
50
|
+
*/
|
|
51
|
+
protected getPosition(source: string, offset: number): {
|
|
52
|
+
line: number;
|
|
53
|
+
column: number;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=base-env-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-env-extractor.d.ts","sourceRoot":"","sources":["../../../src/environment/extractors/base-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,8BAAsB,gBAAgB;IACpC,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAExC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKpC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAEvE;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IASlE;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,eAAe,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACxC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,WAAW,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;KAC1C,GAAG,cAAc;IAsBlB;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASzD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAOxF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for language-specific environment variable extractors.
|
|
5
|
+
*/
|
|
6
|
+
import { classifyEnvSensitivity } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Base class for environment variable extractors
|
|
9
|
+
*/
|
|
10
|
+
export class BaseEnvExtractor {
|
|
11
|
+
/**
|
|
12
|
+
* Check if this extractor can handle a file
|
|
13
|
+
*/
|
|
14
|
+
canHandle(filePath) {
|
|
15
|
+
const lower = filePath.toLowerCase();
|
|
16
|
+
return this.extensions.some(ext => lower.endsWith(ext));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create an empty extraction result
|
|
20
|
+
*/
|
|
21
|
+
createEmptyResult(filePath) {
|
|
22
|
+
return {
|
|
23
|
+
file: filePath,
|
|
24
|
+
language: this.language,
|
|
25
|
+
accessPoints: [],
|
|
26
|
+
errors: [],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create an environment access point
|
|
31
|
+
*/
|
|
32
|
+
createAccessPoint(params) {
|
|
33
|
+
const sensitivity = params.sensitivity ?? classifyEnvSensitivity(params.varName);
|
|
34
|
+
const id = `${params.file}:${params.line}:${params.column}:${params.varName}`;
|
|
35
|
+
return {
|
|
36
|
+
id,
|
|
37
|
+
varName: params.varName,
|
|
38
|
+
method: params.method,
|
|
39
|
+
file: params.file,
|
|
40
|
+
line: params.line,
|
|
41
|
+
column: params.column,
|
|
42
|
+
context: params.context.slice(0, 200),
|
|
43
|
+
language: this.language,
|
|
44
|
+
sensitivity,
|
|
45
|
+
confidence: params.confidence ?? 0.9,
|
|
46
|
+
hasDefault: params.hasDefault ?? false,
|
|
47
|
+
defaultValue: params.defaultValue,
|
|
48
|
+
isRequired: params.isRequired ?? !params.hasDefault,
|
|
49
|
+
containingFunction: params.containingFunction,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Extract string value from quotes
|
|
54
|
+
*/
|
|
55
|
+
extractStringValue(text) {
|
|
56
|
+
// Match single, double, or backtick quotes
|
|
57
|
+
const match = text.match(/^['"`](.*)['"`]$/);
|
|
58
|
+
if (match && match[1] !== undefined) {
|
|
59
|
+
return match[1];
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get line and column from position in source
|
|
65
|
+
*/
|
|
66
|
+
getPosition(source, offset) {
|
|
67
|
+
const lines = source.slice(0, offset).split('\n');
|
|
68
|
+
return {
|
|
69
|
+
line: lines.length,
|
|
70
|
+
column: (lines[lines.length - 1]?.length ?? 0) + 1,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=base-env-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-env-extractor.js","sourceRoot":"","sources":["../../../src/environment/extractors/base-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,MAAM,OAAgB,gBAAgB;IAOpC;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAOD;;OAEG;IACO,iBAAiB,CAAC,QAAgB;QAC1C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,iBAAiB,CAAC,MAa3B;QACC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9E,OAAO;YACL,EAAE;YACF,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW;YACX,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG;YACpC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;YACtC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU;YACnD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;SAC9C,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,IAAY;QACvC,2CAA2C;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,MAAc,EAAE,MAAc;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;SACnD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from C#.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Environment.GetEnvironmentVariable("VAR")
|
|
8
|
+
* - IConfiguration["VAR"] and IConfiguration.GetValue<T>("VAR")
|
|
9
|
+
* - ConfigurationManager.AppSettings["VAR"]
|
|
10
|
+
* - appsettings.json patterns
|
|
11
|
+
*/
|
|
12
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
13
|
+
import type { EnvLanguage, EnvExtractionResult } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* C# environment variable extractor
|
|
16
|
+
*/
|
|
17
|
+
export declare class CSharpEnvExtractor extends BaseEnvExtractor {
|
|
18
|
+
readonly language: EnvLanguage;
|
|
19
|
+
readonly extensions: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Extract environment variable access from C# source
|
|
22
|
+
*/
|
|
23
|
+
extract(source: string, filePath: string): EnvExtractionResult;
|
|
24
|
+
/**
|
|
25
|
+
* Extract Environment.GetEnvironmentVariable patterns
|
|
26
|
+
*/
|
|
27
|
+
private extractEnvironmentGetEnv;
|
|
28
|
+
/**
|
|
29
|
+
* Extract IConfiguration patterns
|
|
30
|
+
*/
|
|
31
|
+
private extractIConfiguration;
|
|
32
|
+
/**
|
|
33
|
+
* Extract ConfigurationManager patterns
|
|
34
|
+
*/
|
|
35
|
+
private extractConfigurationManager;
|
|
36
|
+
/**
|
|
37
|
+
* Detect if a default value is provided via null-coalescing or ternary
|
|
38
|
+
*/
|
|
39
|
+
private detectDefault;
|
|
40
|
+
/**
|
|
41
|
+
* Get context around a match
|
|
42
|
+
*/
|
|
43
|
+
private getContext;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a C# environment extractor
|
|
47
|
+
*/
|
|
48
|
+
export declare function createCSharpEnvExtractor(): CSharpEnvExtractor;
|
|
49
|
+
//# sourceMappingURL=csharp-env-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp-env-extractor.d.ts","sourceRoot":"","sources":["../../../src/environment/extractors/csharp-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAY;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAW;IAExC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAoB9D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2BhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoG7B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmDnC;;OAEG;IACH,OAAO,CAAC,aAAa;IA2BrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# Environment Variable Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts environment variable access patterns from C#.
|
|
5
|
+
*
|
|
6
|
+
* Supports:
|
|
7
|
+
* - Environment.GetEnvironmentVariable("VAR")
|
|
8
|
+
* - IConfiguration["VAR"] and IConfiguration.GetValue<T>("VAR")
|
|
9
|
+
* - ConfigurationManager.AppSettings["VAR"]
|
|
10
|
+
* - appsettings.json patterns
|
|
11
|
+
*/
|
|
12
|
+
import { BaseEnvExtractor } from './base-env-extractor.js';
|
|
13
|
+
/**
|
|
14
|
+
* C# environment variable extractor
|
|
15
|
+
*/
|
|
16
|
+
export class CSharpEnvExtractor extends BaseEnvExtractor {
|
|
17
|
+
language = 'csharp';
|
|
18
|
+
extensions = ['.cs'];
|
|
19
|
+
/**
|
|
20
|
+
* Extract environment variable access from C# source
|
|
21
|
+
*/
|
|
22
|
+
extract(source, filePath) {
|
|
23
|
+
const result = this.createEmptyResult(filePath);
|
|
24
|
+
try {
|
|
25
|
+
// Extract Environment.GetEnvironmentVariable patterns
|
|
26
|
+
this.extractEnvironmentGetEnv(source, filePath, result);
|
|
27
|
+
// Extract IConfiguration patterns
|
|
28
|
+
this.extractIConfiguration(source, filePath, result);
|
|
29
|
+
// Extract ConfigurationManager patterns
|
|
30
|
+
this.extractConfigurationManager(source, filePath, result);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
result.errors.push(error instanceof Error ? error.message : 'Unknown parse error');
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract Environment.GetEnvironmentVariable patterns
|
|
39
|
+
*/
|
|
40
|
+
extractEnvironmentGetEnv(source, filePath, result) {
|
|
41
|
+
// Pattern: Environment.GetEnvironmentVariable("VAR_NAME")
|
|
42
|
+
const pattern = /Environment\.GetEnvironmentVariable\(\s*"([A-Z_][A-Z0-9_]*)"\s*\)/g;
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
45
|
+
const varName = match[1];
|
|
46
|
+
if (!varName)
|
|
47
|
+
continue;
|
|
48
|
+
const pos = this.getPosition(source, match.index);
|
|
49
|
+
const context = this.getContext(source, match.index);
|
|
50
|
+
const { hasDefault, defaultValue } = this.detectDefault(source, match.index, match[0].length);
|
|
51
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
52
|
+
varName,
|
|
53
|
+
method: 'Environment.GetEnvironmentVariable',
|
|
54
|
+
file: filePath,
|
|
55
|
+
line: pos.line,
|
|
56
|
+
column: pos.column,
|
|
57
|
+
context,
|
|
58
|
+
hasDefault,
|
|
59
|
+
defaultValue,
|
|
60
|
+
isRequired: !hasDefault,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract IConfiguration patterns
|
|
66
|
+
*/
|
|
67
|
+
extractIConfiguration(source, filePath, result) {
|
|
68
|
+
// Pattern: _configuration["Section:Key"] or configuration["Key"]
|
|
69
|
+
const bracketPattern = /(?:_?configuration|config|settings)\["([a-zA-Z_][a-zA-Z0-9_:.]*)"\]/gi;
|
|
70
|
+
let match;
|
|
71
|
+
while ((match = bracketPattern.exec(source)) !== null) {
|
|
72
|
+
const varName = match[1];
|
|
73
|
+
if (!varName)
|
|
74
|
+
continue;
|
|
75
|
+
const pos = this.getPosition(source, match.index);
|
|
76
|
+
const context = this.getContext(source, match.index);
|
|
77
|
+
const { hasDefault, defaultValue } = this.detectDefault(source, match.index, match[0].length);
|
|
78
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
79
|
+
varName,
|
|
80
|
+
method: 'IConfiguration',
|
|
81
|
+
file: filePath,
|
|
82
|
+
line: pos.line,
|
|
83
|
+
column: pos.column,
|
|
84
|
+
context,
|
|
85
|
+
hasDefault,
|
|
86
|
+
defaultValue,
|
|
87
|
+
isRequired: !hasDefault,
|
|
88
|
+
confidence: 0.9,
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
// Pattern: configuration.GetValue<T>("Key") or configuration.GetValue<T>("Key", defaultValue)
|
|
92
|
+
const getValuePattern = /(?:_?configuration|config|settings)\.GetValue<[^>]+>\(\s*"([a-zA-Z_][a-zA-Z0-9_:.]*)"(?:\s*,\s*([^)]+))?\s*\)/gi;
|
|
93
|
+
while ((match = getValuePattern.exec(source)) !== null) {
|
|
94
|
+
const varName = match[1];
|
|
95
|
+
if (!varName)
|
|
96
|
+
continue;
|
|
97
|
+
const pos = this.getPosition(source, match.index);
|
|
98
|
+
const context = this.getContext(source, match.index);
|
|
99
|
+
const defaultArg = match[2];
|
|
100
|
+
const hasDefault = defaultArg !== undefined && defaultArg.trim() !== '';
|
|
101
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
102
|
+
varName,
|
|
103
|
+
method: 'IConfiguration',
|
|
104
|
+
file: filePath,
|
|
105
|
+
line: pos.line,
|
|
106
|
+
column: pos.column,
|
|
107
|
+
context,
|
|
108
|
+
hasDefault,
|
|
109
|
+
defaultValue: hasDefault ? defaultArg?.trim() : undefined,
|
|
110
|
+
isRequired: !hasDefault,
|
|
111
|
+
confidence: 0.9,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
// Pattern: configuration.GetSection("Section").Bind(options)
|
|
115
|
+
const getSectionPattern = /(?:_?configuration|config|settings)\.GetSection\(\s*"([a-zA-Z_][a-zA-Z0-9_:.]*)"\s*\)/gi;
|
|
116
|
+
while ((match = getSectionPattern.exec(source)) !== null) {
|
|
117
|
+
const varName = match[1];
|
|
118
|
+
if (!varName)
|
|
119
|
+
continue;
|
|
120
|
+
const pos = this.getPosition(source, match.index);
|
|
121
|
+
const context = this.getContext(source, match.index);
|
|
122
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
123
|
+
varName: `${varName}:*`,
|
|
124
|
+
method: 'IConfiguration',
|
|
125
|
+
file: filePath,
|
|
126
|
+
line: pos.line,
|
|
127
|
+
column: pos.column,
|
|
128
|
+
context,
|
|
129
|
+
hasDefault: true,
|
|
130
|
+
isRequired: false,
|
|
131
|
+
confidence: 0.85,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
// Pattern: configuration.GetConnectionString("Name")
|
|
135
|
+
const connStringPattern = /(?:_?configuration|config|settings)\.GetConnectionString\(\s*"([a-zA-Z_][a-zA-Z0-9_]*)"\s*\)/gi;
|
|
136
|
+
while ((match = connStringPattern.exec(source)) !== null) {
|
|
137
|
+
const varName = match[1];
|
|
138
|
+
if (!varName)
|
|
139
|
+
continue;
|
|
140
|
+
const pos = this.getPosition(source, match.index);
|
|
141
|
+
const context = this.getContext(source, match.index);
|
|
142
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
143
|
+
varName: `ConnectionStrings:${varName}`,
|
|
144
|
+
method: 'IConfiguration',
|
|
145
|
+
file: filePath,
|
|
146
|
+
line: pos.line,
|
|
147
|
+
column: pos.column,
|
|
148
|
+
context,
|
|
149
|
+
hasDefault: false,
|
|
150
|
+
isRequired: true,
|
|
151
|
+
confidence: 0.95,
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Extract ConfigurationManager patterns
|
|
157
|
+
*/
|
|
158
|
+
extractConfigurationManager(source, filePath, result) {
|
|
159
|
+
// Pattern: ConfigurationManager.AppSettings["Key"]
|
|
160
|
+
const appSettingsPattern = /ConfigurationManager\.AppSettings\["([a-zA-Z_][a-zA-Z0-9_]*)"\]/g;
|
|
161
|
+
let match;
|
|
162
|
+
while ((match = appSettingsPattern.exec(source)) !== null) {
|
|
163
|
+
const varName = match[1];
|
|
164
|
+
if (!varName)
|
|
165
|
+
continue;
|
|
166
|
+
const pos = this.getPosition(source, match.index);
|
|
167
|
+
const context = this.getContext(source, match.index);
|
|
168
|
+
const { hasDefault, defaultValue } = this.detectDefault(source, match.index, match[0].length);
|
|
169
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
170
|
+
varName,
|
|
171
|
+
method: 'ConfigurationManager',
|
|
172
|
+
file: filePath,
|
|
173
|
+
line: pos.line,
|
|
174
|
+
column: pos.column,
|
|
175
|
+
context,
|
|
176
|
+
hasDefault,
|
|
177
|
+
defaultValue,
|
|
178
|
+
isRequired: !hasDefault,
|
|
179
|
+
confidence: 0.9,
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
// Pattern: ConfigurationManager.ConnectionStrings["Name"]
|
|
183
|
+
const connStringsPattern = /ConfigurationManager\.ConnectionStrings\["([a-zA-Z_][a-zA-Z0-9_]*)"\]/g;
|
|
184
|
+
while ((match = connStringsPattern.exec(source)) !== null) {
|
|
185
|
+
const varName = match[1];
|
|
186
|
+
if (!varName)
|
|
187
|
+
continue;
|
|
188
|
+
const pos = this.getPosition(source, match.index);
|
|
189
|
+
const context = this.getContext(source, match.index);
|
|
190
|
+
result.accessPoints.push(this.createAccessPoint({
|
|
191
|
+
varName: `ConnectionStrings:${varName}`,
|
|
192
|
+
method: 'ConfigurationManager',
|
|
193
|
+
file: filePath,
|
|
194
|
+
line: pos.line,
|
|
195
|
+
column: pos.column,
|
|
196
|
+
context,
|
|
197
|
+
hasDefault: false,
|
|
198
|
+
isRequired: true,
|
|
199
|
+
confidence: 0.95,
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Detect if a default value is provided via null-coalescing or ternary
|
|
205
|
+
*/
|
|
206
|
+
detectDefault(source, matchIndex, matchLength) {
|
|
207
|
+
const afterMatch = source.slice(matchIndex + matchLength, matchIndex + matchLength + 100);
|
|
208
|
+
// Check for null-coalescing: ?? "default"
|
|
209
|
+
const nullCoalesceMatch = afterMatch.match(/^\s*\?\?\s*"([^"]*)"/);
|
|
210
|
+
if (nullCoalesceMatch) {
|
|
211
|
+
return { hasDefault: true, defaultValue: nullCoalesceMatch[1] };
|
|
212
|
+
}
|
|
213
|
+
// Check for ternary: != null ? ... : "default"
|
|
214
|
+
const ternaryMatch = afterMatch.match(/^\s*!=\s*null\s*\?\s*[^:]+\s*:\s*"([^"]*)"/);
|
|
215
|
+
if (ternaryMatch) {
|
|
216
|
+
return { hasDefault: true, defaultValue: ternaryMatch[1] };
|
|
217
|
+
}
|
|
218
|
+
// Check for string.IsNullOrEmpty pattern
|
|
219
|
+
const isNullOrEmptyMatch = afterMatch.match(/^\s*\)\s*\?\s*"([^"]*)"\s*:/);
|
|
220
|
+
if (isNullOrEmptyMatch) {
|
|
221
|
+
return { hasDefault: true, defaultValue: isNullOrEmptyMatch[1] };
|
|
222
|
+
}
|
|
223
|
+
return { hasDefault: false };
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get context around a match
|
|
227
|
+
*/
|
|
228
|
+
getContext(source, index) {
|
|
229
|
+
const start = Math.max(0, index - 20);
|
|
230
|
+
const end = Math.min(source.length, index + 80);
|
|
231
|
+
return source.slice(start, end).replace(/\n/g, ' ').trim();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Create a C# environment extractor
|
|
236
|
+
*/
|
|
237
|
+
export function createCSharpEnvExtractor() {
|
|
238
|
+
return new CSharpEnvExtractor();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=csharp-env-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp-env-extractor.js","sourceRoot":"","sources":["../../../src/environment/extractors/csharp-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IAC7C,QAAQ,GAAgB,QAAQ,CAAC;IACjC,UAAU,GAAa,CAAC,KAAK,CAAC,CAAC;IAExC;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,QAAgB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,sDAAsD;YACtD,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAExD,kCAAkC;YAClC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAErD,wCAAwC;YACxC,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,MAAc,EAAE,QAAgB,EAAE,MAA2B;QAC5F,0DAA0D;QAC1D,MAAM,OAAO,GAAG,oEAAoE,CAAC;QACrF,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAE9F,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO;gBACP,MAAM,EAAE,oCAAoC;gBAC5C,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU;gBACV,YAAY;gBACZ,UAAU,EAAE,CAAC,UAAU;aACxB,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,MAAc,EAAE,QAAgB,EAAE,MAA2B;QACzF,iEAAiE;QACjE,MAAM,cAAc,GAAG,uEAAuE,CAAC;QAC/F,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAE9F,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO;gBACP,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU;gBACV,YAAY;gBACZ,UAAU,EAAE,CAAC,UAAU;gBACvB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,8FAA8F;QAC9F,MAAM,eAAe,GAAG,iHAAiH,CAAC;QAE1I,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAExE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO;gBACP,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU;gBACV,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gBACzD,UAAU,EAAE,CAAC,UAAU;gBACvB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,yFAAyF,CAAC;QAEpH,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO,EAAE,GAAG,OAAO,IAAI;gBACvB,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,qDAAqD;QACrD,MAAM,iBAAiB,GAAG,gGAAgG,CAAC;QAE3H,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO,EAAE,qBAAqB,OAAO,EAAE;gBACvC,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,MAAc,EAAE,QAAgB,EAAE,MAA2B;QAC/F,mDAAmD;QACnD,MAAM,kBAAkB,GAAG,kEAAkE,CAAC;QAC9F,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAE9F,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO;gBACP,MAAM,EAAE,sBAAsB;gBAC9B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU;gBACV,YAAY;gBACZ,UAAU,EAAE,CAAC,UAAU;gBACvB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,0DAA0D;QAC1D,MAAM,kBAAkB,GAAG,wEAAwE,CAAC;QAEpG,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,OAAO,EAAE,qBAAqB,OAAO,EAAE;gBACvC,MAAM,EAAE,sBAAsB;gBAC9B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc,EAAE,UAAkB,EAAE,WAAmB;QAI3E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,EAAE,UAAU,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC;QAE1F,0CAA0C;QAC1C,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACnE,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC;QAED,+CAA+C;QAC/C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACpF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;QAED,yCAAyC;QACzC,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3E,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,MAAc,EAAE,KAAa;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
import type { EnvLanguage, EnvExtractionResult } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Go environment variable extractor
|
|
16
|
+
*/
|
|
17
|
+
export declare class GoEnvExtractor extends BaseEnvExtractor {
|
|
18
|
+
readonly language: EnvLanguage;
|
|
19
|
+
readonly extensions: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Extract environment variable access from Go source
|
|
22
|
+
*/
|
|
23
|
+
extract(source: string, filePath: string): EnvExtractionResult;
|
|
24
|
+
/**
|
|
25
|
+
* Extract os.Getenv("VAR") patterns
|
|
26
|
+
*/
|
|
27
|
+
private extractOsGetenv;
|
|
28
|
+
/**
|
|
29
|
+
* Extract os.LookupEnv("VAR") patterns
|
|
30
|
+
*/
|
|
31
|
+
private extractOsLookupEnv;
|
|
32
|
+
/**
|
|
33
|
+
* Extract viper patterns
|
|
34
|
+
*/
|
|
35
|
+
private extractViperPatterns;
|
|
36
|
+
/**
|
|
37
|
+
* Extract envconfig patterns
|
|
38
|
+
*/
|
|
39
|
+
private extractEnvconfigPatterns;
|
|
40
|
+
/**
|
|
41
|
+
* Detect if a default value is provided
|
|
42
|
+
*/
|
|
43
|
+
private detectDefault;
|
|
44
|
+
/**
|
|
45
|
+
* Get context around a match
|
|
46
|
+
*/
|
|
47
|
+
private getContext;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a Go environment extractor
|
|
51
|
+
*/
|
|
52
|
+
export declare function createGoEnvExtractor(): GoEnvExtractor;
|
|
53
|
+
//# sourceMappingURL=go-env-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-env-extractor.d.ts","sourceRoot":"","sources":["../../../src/environment/extractors/go-env-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAQ;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAW;IAExC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAuB9D;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwG5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoDhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|