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,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":"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"}
@@ -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"}