dotenv-diff 2.4.6 → 2.4.8

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 (192) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +8 -2
  3. package/dist/src/cli/run.d.ts.map +1 -1
  4. package/dist/src/cli/run.js +7 -8
  5. package/dist/src/cli/run.js.map +1 -1
  6. package/dist/src/commands/compare.d.ts +2 -2
  7. package/dist/src/commands/compare.d.ts.map +1 -1
  8. package/dist/src/commands/compare.js +16 -2
  9. package/dist/src/commands/compare.js.map +1 -1
  10. package/dist/src/commands/ensureFilesOrPrompt.d.ts +22 -0
  11. package/dist/src/commands/ensureFilesOrPrompt.d.ts.map +1 -0
  12. package/dist/src/commands/ensureFilesOrPrompt.js +76 -0
  13. package/dist/src/commands/ensureFilesOrPrompt.js.map +1 -0
  14. package/dist/src/commands/scanUsage.d.ts +3 -5
  15. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  16. package/dist/src/commands/scanUsage.js +7 -7
  17. package/dist/src/commands/scanUsage.js.map +1 -1
  18. package/dist/src/config/constants.d.ts +42 -0
  19. package/dist/src/config/constants.d.ts.map +1 -0
  20. package/dist/src/config/constants.js +54 -0
  21. package/dist/src/config/constants.js.map +1 -0
  22. package/dist/src/config/options.d.ts +1 -1
  23. package/dist/src/config/options.d.ts.map +1 -1
  24. package/dist/src/config/options.js +1 -1
  25. package/dist/src/config/options.js.map +1 -1
  26. package/dist/src/config/types.d.ts +156 -201
  27. package/dist/src/config/types.d.ts.map +1 -1
  28. package/dist/src/config/types.js +3 -11
  29. package/dist/src/config/types.js.map +1 -1
  30. package/dist/src/core/compareScan.d.ts +1 -0
  31. package/dist/src/core/compareScan.d.ts.map +1 -1
  32. package/dist/src/core/compareScan.js +1 -0
  33. package/dist/src/core/compareScan.js.map +1 -1
  34. package/dist/src/core/computeHealthScore.d.ts.map +1 -1
  35. package/dist/src/core/computeHealthScore.js +3 -0
  36. package/dist/src/core/computeHealthScore.js.map +1 -1
  37. package/dist/src/core/detectInconsistentNaming.js +0 -7
  38. package/dist/src/core/detectInconsistentNaming.js.map +1 -1
  39. package/dist/src/core/determineComparisonFile.d.ts +1 -1
  40. package/dist/src/core/determineComparisonFile.d.ts.map +1 -1
  41. package/dist/src/core/determineComparisonFile.js +2 -8
  42. package/dist/src/core/determineComparisonFile.js.map +1 -1
  43. package/dist/src/core/duplicates.d.ts +5 -4
  44. package/dist/src/core/duplicates.d.ts.map +1 -0
  45. package/dist/src/core/duplicates.js +5 -2
  46. package/dist/src/core/duplicates.js.map +1 -0
  47. package/dist/src/core/envDiscovery.d.ts +19 -0
  48. package/dist/src/core/envDiscovery.d.ts.map +1 -0
  49. package/dist/src/core/envDiscovery.js +81 -0
  50. package/dist/src/core/envDiscovery.js.map +1 -0
  51. package/dist/src/core/envPairing.d.ts.map +1 -1
  52. package/dist/src/core/envPairing.js +5 -2
  53. package/dist/src/core/envPairing.js.map +1 -1
  54. package/dist/src/core/exampleSecretDetector.d.ts.map +1 -1
  55. package/dist/src/core/exampleSecretDetector.js +2 -2
  56. package/dist/src/core/exampleSecretDetector.js.map +1 -1
  57. package/dist/src/core/fixEnv.d.ts.map +1 -1
  58. package/dist/src/core/fixEnv.js +2 -1
  59. package/dist/src/core/fixEnv.js.map +1 -1
  60. package/dist/src/core/frameworkDetector.d.ts +2 -2
  61. package/dist/src/core/frameworkDetector.d.ts.map +1 -1
  62. package/dist/src/core/frameworkDetector.js +0 -1
  63. package/dist/src/core/frameworkDetector.js.map +1 -1
  64. package/dist/src/core/frameworkValidator.d.ts +2 -2
  65. package/dist/src/core/frameworkValidator.d.ts.map +1 -1
  66. package/dist/src/core/frameworkValidator.js +0 -1
  67. package/dist/src/core/frameworkValidator.js.map +1 -1
  68. package/dist/src/core/frameworks/frameworkDetector.d.ts +14 -0
  69. package/dist/src/core/frameworks/frameworkDetector.d.ts.map +1 -0
  70. package/dist/src/core/frameworks/frameworkDetector.js +40 -0
  71. package/dist/src/core/frameworks/frameworkDetector.js.map +1 -0
  72. package/dist/src/core/frameworks/frameworkValidator.d.ts +10 -0
  73. package/dist/src/core/frameworks/frameworkValidator.d.ts.map +1 -0
  74. package/dist/src/core/frameworks/frameworkValidator.js +21 -0
  75. package/dist/src/core/frameworks/frameworkValidator.js.map +1 -0
  76. package/dist/src/core/frameworks/nextJsRules.d.ts +2 -2
  77. package/dist/src/core/frameworks/nextJsRules.d.ts.map +1 -1
  78. package/dist/src/core/frameworks/nextJsRules.js +12 -39
  79. package/dist/src/core/frameworks/nextJsRules.js.map +1 -1
  80. package/dist/src/core/frameworks/sveltekitRules.d.ts +2 -2
  81. package/dist/src/core/frameworks/sveltekitRules.d.ts.map +1 -1
  82. package/dist/src/core/frameworks/sveltekitRules.js +57 -45
  83. package/dist/src/core/frameworks/sveltekitRules.js.map +1 -1
  84. package/dist/src/core/helpers/normalizePath.d.ts +6 -0
  85. package/dist/src/core/helpers/normalizePath.d.ts.map +1 -0
  86. package/dist/src/core/helpers/normalizePath.js +8 -0
  87. package/dist/src/core/helpers/normalizePath.js.map +1 -0
  88. package/dist/src/core/helpers/updateTotals.d.ts +1 -2
  89. package/dist/src/core/helpers/updateTotals.d.ts.map +1 -1
  90. package/dist/src/core/helpers/updateTotals.js.map +1 -1
  91. package/dist/src/core/parseEnv.d.ts.map +1 -1
  92. package/dist/src/core/parseEnv.js +19 -1
  93. package/dist/src/core/parseEnv.js.map +1 -1
  94. package/dist/src/core/patterns.d.ts.map +1 -1
  95. package/dist/src/core/patterns.js +24 -1
  96. package/dist/src/core/patterns.js.map +1 -1
  97. package/dist/src/core/processComparisonFile.d.ts +6 -14
  98. package/dist/src/core/processComparisonFile.d.ts.map +1 -1
  99. package/dist/src/core/processComparisonFile.js +1 -1
  100. package/dist/src/core/processComparisonFile.js.map +1 -1
  101. package/dist/src/core/scan/scanJsonOutput.d.ts +85 -0
  102. package/dist/src/core/scan/scanJsonOutput.d.ts.map +1 -0
  103. package/dist/src/core/scan/scanJsonOutput.js +97 -0
  104. package/dist/src/core/scan/scanJsonOutput.js.map +1 -0
  105. package/dist/src/core/scan/secretDetectors.d.ts +28 -0
  106. package/dist/src/core/scan/secretDetectors.d.ts.map +1 -0
  107. package/dist/src/core/scan/secretDetectors.js +272 -0
  108. package/dist/src/core/scan/secretDetectors.js.map +1 -0
  109. package/dist/src/core/scanFile.d.ts.map +1 -1
  110. package/dist/src/core/scanFile.js +11 -1
  111. package/dist/src/core/scanFile.js.map +1 -1
  112. package/dist/src/core/scanJsonOutput.d.ts +78 -2
  113. package/dist/src/core/scanJsonOutput.d.ts.map +1 -1
  114. package/dist/src/core/scanJsonOutput.js +5 -4
  115. package/dist/src/core/scanJsonOutput.js.map +1 -1
  116. package/dist/src/core/security/entropy.d.ts +8 -0
  117. package/dist/src/core/security/entropy.d.ts.map +1 -0
  118. package/dist/src/core/security/entropy.js +23 -0
  119. package/dist/src/core/security/entropy.js.map +1 -0
  120. package/dist/src/core/security/exampleSecretDetector.d.ts +13 -0
  121. package/dist/src/core/security/exampleSecretDetector.d.ts.map +1 -0
  122. package/dist/src/core/security/exampleSecretDetector.js +61 -0
  123. package/dist/src/core/security/exampleSecretDetector.js.map +1 -0
  124. package/dist/src/core/security/secretDetectors.d.ts +28 -0
  125. package/dist/src/core/security/secretDetectors.d.ts.map +1 -0
  126. package/dist/src/core/security/secretDetectors.js +292 -0
  127. package/dist/src/core/security/secretDetectors.js.map +1 -0
  128. package/dist/src/services/codeBaseScanner.d.ts.map +1 -1
  129. package/dist/src/services/codeBaseScanner.js +59 -22
  130. package/dist/src/services/codeBaseScanner.js.map +1 -1
  131. package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -1
  132. package/dist/src/services/ensureFilesOrPrompt.js +5 -2
  133. package/dist/src/services/ensureFilesOrPrompt.js.map +1 -1
  134. package/dist/src/services/envDiscovery.d.ts.map +1 -1
  135. package/dist/src/services/envDiscovery.js +22 -9
  136. package/dist/src/services/envDiscovery.js.map +1 -1
  137. package/dist/src/services/git.d.ts.map +1 -1
  138. package/dist/src/services/git.js +10 -9
  139. package/dist/src/services/git.js.map +1 -1
  140. package/dist/src/services/printScanResult.d.ts +17 -0
  141. package/dist/src/services/printScanResult.d.ts.map +1 -0
  142. package/dist/src/services/printScanResult.js +127 -0
  143. package/dist/src/services/printScanResult.js.map +1 -0
  144. package/dist/src/services/scanCodebase.d.ts +8 -0
  145. package/dist/src/services/scanCodebase.d.ts.map +1 -0
  146. package/dist/src/services/scanCodebase.js +110 -0
  147. package/dist/src/services/scanCodebase.js.map +1 -0
  148. package/dist/src/services/scanOutputToConsole.d.ts +2 -4
  149. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
  150. package/dist/src/services/scanOutputToConsole.js +5 -4
  151. package/dist/src/services/scanOutputToConsole.js.map +1 -1
  152. package/dist/src/ui/compare/printIssues.d.ts +1 -1
  153. package/dist/src/ui/compare/printIssues.d.ts.map +1 -1
  154. package/dist/src/ui/compare/printIssues.js +0 -1
  155. package/dist/src/ui/compare/printIssues.js.map +1 -1
  156. package/dist/src/ui/compare/printStats.d.ts +1 -1
  157. package/dist/src/ui/compare/printStats.d.ts.map +1 -1
  158. package/dist/src/ui/compare/printStats.js +0 -1
  159. package/dist/src/ui/compare/printStats.js.map +1 -1
  160. package/dist/src/ui/scan/printConsolelogWarning.d.ts.map +1 -1
  161. package/dist/src/ui/scan/printConsolelogWarning.js +8 -5
  162. package/dist/src/ui/scan/printConsolelogWarning.js.map +1 -1
  163. package/dist/src/ui/scan/printExampleWarnings.d.ts +1 -1
  164. package/dist/src/ui/scan/printExampleWarnings.d.ts.map +1 -1
  165. package/dist/src/ui/scan/printFrameworkWarnings.d.ts +2 -2
  166. package/dist/src/ui/scan/printFrameworkWarnings.d.ts.map +1 -1
  167. package/dist/src/ui/scan/printFrameworkWarnings.js +4 -3
  168. package/dist/src/ui/scan/printFrameworkWarnings.js.map +1 -1
  169. package/dist/src/ui/scan/printMissing.d.ts.map +1 -1
  170. package/dist/src/ui/scan/printMissing.js +3 -1
  171. package/dist/src/ui/scan/printMissing.js.map +1 -1
  172. package/dist/src/ui/scan/printProgress.d.ts +15 -0
  173. package/dist/src/ui/scan/printProgress.d.ts.map +1 -0
  174. package/dist/src/ui/scan/printProgress.js +35 -0
  175. package/dist/src/ui/scan/printProgress.js.map +1 -0
  176. package/dist/src/ui/scan/printSecrets.d.ts +1 -1
  177. package/dist/src/ui/scan/printSecrets.d.ts.map +1 -1
  178. package/dist/src/ui/scan/printSecrets.js +3 -2
  179. package/dist/src/ui/scan/printSecrets.js.map +1 -1
  180. package/dist/src/ui/shared/printFixTips.d.ts +1 -1
  181. package/dist/src/ui/shared/printFixTips.d.ts.map +1 -1
  182. package/dist/src/ui/shared/printFixTips.js +0 -1
  183. package/dist/src/ui/shared/printFixTips.js.map +1 -1
  184. package/dist/src/ui/shared/printProgress.d.ts +24 -0
  185. package/dist/src/ui/shared/printProgress.d.ts.map +1 -0
  186. package/dist/src/ui/shared/printProgress.js +43 -0
  187. package/dist/src/ui/shared/printProgress.js.map +1 -0
  188. package/dist/src/ui/shared/setupGlobalConfig.d.ts +1 -1
  189. package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -1
  190. package/dist/src/ui/shared/setupGlobalConfig.js +0 -1
  191. package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -1
  192. package/package.json +7 -5
@@ -1,12 +1,18 @@
1
- import { type SecretFinding } from '../core/secretDetectors.js';
2
- import { type ExampleSecretWarning } from '../core/exampleSecretDetector.js';
3
- export type Framework = 'sveltekit' | 'nextjs' | 'unknown';
4
- export interface frameworkWarning {
1
+ import { ALLOWED_CATEGORIES } from './constants.js';
2
+ import { type SecretFinding } from '../core/security/secretDetectors.js';
3
+ import { type ExampleSecretWarning } from '../core/security/exampleSecretDetector.js';
4
+ export type SupportedFramework = 'sveltekit' | 'nextjs';
5
+ export type DetectedFramework = SupportedFramework | 'unknown';
6
+ /**
7
+ * Framework-specific warning about environment variable usage
8
+ * From rules defined for each supported framework (SvelteKit, Next.js)
9
+ */
10
+ export interface FrameworkWarning {
5
11
  variable: string;
6
12
  reason: string;
7
13
  file: string;
8
14
  line: number;
9
- framework: Framework;
15
+ framework: SupportedFramework;
10
16
  }
11
17
  export type Duplicate = {
12
18
  key: string;
@@ -16,43 +22,21 @@ export interface DuplicateResult {
16
22
  dupsEnv: Duplicate[];
17
23
  dupsEx: Duplicate[];
18
24
  }
19
- export declare const ALLOWED_CATEGORIES: readonly ["missing", "extra", "empty", "mismatch", "duplicate", "gitignore"];
20
25
  export type Category = (typeof ALLOWED_CATEGORIES)[number];
21
- /** Type representing the options for the comparison
22
- * These are the options that are processed and validated before being used in the comparison.
23
- */
24
- export type Options = {
25
- checkValues: boolean;
26
- isCiMode: boolean;
27
- isYesMode: boolean;
28
- allowDuplicates: boolean;
29
- fix: boolean;
30
- json: boolean;
31
- envFlag: string | undefined;
32
- exampleFlag: string | undefined;
33
- ignore: string[];
34
- ignoreRegex: RegExp[];
35
- cwd: string;
36
- only?: Category[];
37
- compare: boolean;
38
- scanUsage: boolean;
39
- includeFiles: string[];
40
- excludeFiles: string[];
41
- showUnused: boolean;
42
- showStats: boolean;
43
- files?: string[];
44
- noColor?: boolean;
45
- secrets: boolean;
46
- strict: boolean | undefined;
47
- ignoreUrls?: string[];
48
- uppercaseKeys: boolean;
49
- expireWarnings: boolean;
50
- inconsistentNamingWarnings: boolean;
51
- };
52
- /** Type representing the raw options for the comparison
53
- * These are the options that are directly passed to the comparison function without any processing or validation.
26
+ /**
27
+ * Raw options as received directly from the CLI argument parser.
28
+ *
29
+ * These values are intentionally loose and reflect how flags are actually
30
+ * provided by the user:
31
+ * - Values may be missing
32
+ * - Lists may be strings or string arrays
33
+ * - No defaults are applied
34
+ * - No validation or normalization has happened yet
35
+ *
36
+ * This type should only be used at the CLI boundary and passed into the
37
+ * normalization step that produces {@link Options}.
54
38
  */
55
- export type RawOptions = {
39
+ export interface RawOptions {
56
40
  checkValues?: boolean;
57
41
  ci?: boolean;
58
42
  yes?: boolean;
@@ -79,37 +63,48 @@ export type RawOptions = {
79
63
  uppercaseKeys?: boolean;
80
64
  expireWarnings?: boolean;
81
65
  inconsistentNamingWarnings?: boolean;
82
- };
66
+ }
83
67
  /**
84
- * Type representing a single entry in the comparison results
85
- * This entry contains the environment variable and its example value.
68
+ * Normalized and validated options used internally by the application.
69
+ *
70
+ * These options represent the final, safe configuration that the rest of the
71
+ * codebase can rely on. All values are:
72
+ * - Fully normalized (no string | string[] unions)
73
+ * - Resolved to absolute paths where applicable
74
+ * - Filled with defaults for omitted flags
75
+ * - Validated and ready for use
76
+ *
77
+ * This type should be used everywhere outside of CLI parsing and option
78
+ * normalization logic.
86
79
  */
87
- export type CompareJsonEntry = {
88
- env: string;
89
- example: string;
90
- skipped?: {
91
- reason: string;
92
- };
93
- duplicates?: {
94
- env?: Array<{
95
- key: string;
96
- count: number;
97
- }>;
98
- example?: Array<{
99
- key: string;
100
- count: number;
101
- }>;
102
- };
103
- missing?: string[];
104
- extra?: string[];
105
- empty?: string[];
106
- valueMismatches?: Array<{
107
- key: string;
108
- expected: string;
109
- actual: string;
110
- }>;
111
- ok?: boolean;
112
- };
80
+ export interface Options {
81
+ checkValues: boolean;
82
+ isCiMode: boolean;
83
+ isYesMode: boolean;
84
+ allowDuplicates: boolean;
85
+ fix: boolean;
86
+ json: boolean;
87
+ envFlag: string | undefined;
88
+ exampleFlag: string | undefined;
89
+ ignore: string[];
90
+ ignoreRegex: RegExp[];
91
+ cwd: string;
92
+ only: Category[];
93
+ compare: boolean;
94
+ scanUsage: boolean;
95
+ includeFiles: string[];
96
+ excludeFiles: string[];
97
+ showUnused: boolean;
98
+ showStats: boolean;
99
+ files: string[];
100
+ noColor: boolean;
101
+ secrets: boolean;
102
+ strict: boolean;
103
+ ignoreUrls: string[];
104
+ uppercaseKeys: boolean;
105
+ expireWarnings: boolean;
106
+ inconsistentNamingWarnings: boolean;
107
+ }
113
108
  /**
114
109
  * Represents a single usage of an environment variable in the codebase.
115
110
  */
@@ -118,20 +113,46 @@ export interface EnvUsage {
118
113
  file: string;
119
114
  line: number;
120
115
  column: number;
121
- pattern: 'process.env' | 'import.meta.env' | 'sveltekit' | 'angular' | 'deno' | 'next' | 'nuxt' | 'php';
116
+ pattern: 'process.env' | 'import.meta.env' | 'sveltekit';
117
+ imports?: string[];
122
118
  context: string;
123
119
  isLogged?: boolean;
124
120
  }
121
+ export type VariableUsages = Record<string, EnvUsage[]>;
122
+ /**
123
+ * Options for scanning the codebase
124
+ */
125
125
  export interface ScanOptions {
126
126
  cwd: string;
127
127
  include: string[];
128
128
  exclude: string[];
129
129
  ignore: string[];
130
130
  ignoreRegex: RegExp[];
131
- files?: string[];
132
- secrets?: boolean;
133
- ignoreUrls?: string[];
131
+ files: string[];
132
+ secrets: boolean;
133
+ ignoreUrls: string[];
134
+ json: boolean;
134
135
  }
136
+ /**
137
+ * Extends the basic ScanOptions with additional parameters.
138
+ * All of these options are optional, as they may not be needed for every scan.
139
+ */
140
+ export interface ScanUsageOptions extends ScanOptions {
141
+ envPath?: string | undefined;
142
+ examplePath?: string | undefined;
143
+ fix?: boolean;
144
+ showUnused?: boolean;
145
+ showStats?: boolean;
146
+ isCiMode?: boolean;
147
+ allowDuplicates?: boolean;
148
+ strict?: boolean;
149
+ uppercaseKeys?: boolean;
150
+ expireWarnings?: boolean;
151
+ inconsistentNamingWarnings?: boolean;
152
+ }
153
+ /**
154
+ * Result of scanning the codebase for environment variable usages.
155
+ */
135
156
  export interface ScanResult {
136
157
  used: EnvUsage[];
137
158
  missing: string[];
@@ -145,16 +166,10 @@ export interface ScanResult {
145
166
  };
146
167
  secrets: SecretFinding[];
147
168
  duplicates: {
148
- env?: Array<{
149
- key: string;
150
- count: number;
151
- }>;
152
- example?: Array<{
153
- key: string;
154
- count: number;
155
- }>;
169
+ env?: Duplicate[];
170
+ example?: Duplicate[];
156
171
  };
157
- frameworkWarnings?: frameworkWarning[];
172
+ frameworkWarnings?: FrameworkWarning[];
158
173
  exampleWarnings?: ExampleSecretWarning[];
159
174
  logged: EnvUsage[];
160
175
  uppercaseWarnings?: UppercaseWarning[];
@@ -162,103 +177,33 @@ export interface ScanResult {
162
177
  inconsistentNamingWarnings?: InconsistentNamingWarning[];
163
178
  fileContentMap?: Map<string, string>;
164
179
  }
165
- /** Options for scanning the codebase for environment variable usage. */
166
- export interface ScanUsageOptions extends ScanOptions {
167
- envPath?: string | undefined;
168
- examplePath?: string | undefined;
169
- fix?: boolean;
170
- json: boolean;
171
- showUnused: boolean;
172
- showStats: boolean;
173
- isCiMode?: boolean;
174
- files?: string[];
175
- allowDuplicates?: boolean;
176
- strict?: boolean;
177
- uppercaseKeys?: boolean;
178
- expireWarnings?: boolean;
179
- inconsistentNamingWarnings?: boolean;
180
- }
181
- export interface ScanJsonEntry {
182
- stats?: {
183
- filesScanned: number;
184
- totalUsages: number;
185
- uniqueVariables: number;
186
- warningsCount: number;
187
- duration: number;
180
+ /**
181
+ * Type representing a single entry in the comparison results
182
+ * This entry contains the environment variable and its example value.
183
+ */
184
+ export type CompareJsonEntry = {
185
+ env: string;
186
+ example: string;
187
+ skipped?: {
188
+ reason: string;
188
189
  };
189
- missing?: Array<{
190
- variable: string;
191
- usages: Array<{
192
- file: string;
193
- line: number;
194
- pattern: string;
195
- context: string;
196
- }>;
197
- }>;
198
- unused?: string[];
199
- allUsages?: Array<{
200
- variable: string;
201
- file: string;
202
- line: number;
203
- pattern: string;
204
- context: string;
205
- }>;
206
- comparedAgainst?: string;
207
- totalEnvVariables?: number;
208
- secrets?: Array<{
209
- file: string;
210
- line: number;
211
- message: string;
212
- snippet: string;
213
- }>;
214
190
  duplicates?: {
215
- env?: Array<{
216
- key: string;
217
- count: number;
218
- }>;
219
- example?: Array<{
220
- key: string;
221
- count: number;
222
- }>;
191
+ env?: Duplicate[];
192
+ example?: Duplicate[];
223
193
  };
224
- logged?: Array<{
225
- variable: string;
226
- file: string;
227
- line: number;
228
- context: string;
229
- }>;
230
- expireWarnings?: Array<{
231
- key: string;
232
- date: string;
233
- daysLeft: number;
234
- }>;
235
- uppercaseWarnings?: Array<{
236
- key: string;
237
- suggestion: string;
238
- }>;
239
- inconsistentNamingWarnings?: Array<{
240
- key1: string;
241
- key2: string;
242
- suggestion: string;
243
- }>;
244
- frameworkWarnings?: Array<{
245
- variable: string;
246
- reason: string;
247
- file: string;
248
- line: number;
249
- framework: string;
250
- }>;
251
- exampleWarnings?: Array<{
194
+ missing?: string[];
195
+ extra?: string[];
196
+ empty?: string[];
197
+ valueMismatches?: Array<{
252
198
  key: string;
253
- value: string;
254
- reason: string;
255
- severity: string;
199
+ expected: string;
200
+ actual: string;
256
201
  }>;
257
- healthScore?: number;
258
- }
259
- export interface VariableUsages {
260
- [variable: string]: EnvUsage[];
261
- }
202
+ ok?: boolean;
203
+ };
204
+ /**
205
+ * Options for comparing environment files (--compare flag).
206
+ */
262
207
  export interface ComparisonOptions {
263
208
  checkValues: boolean;
264
209
  cwd: string;
@@ -275,30 +220,24 @@ export interface ComparisonOptions {
275
220
  expireWarnings?: boolean;
276
221
  inconsistentNamingWarnings?: boolean;
277
222
  }
223
+ /**
224
+ * Represents a resolved pair of environment files used for comparison.
225
+ *
226
+ * A FilePair describes one concrete comparison unit consisting of:
227
+ * - an environment file (e.g. `.env`, `.env.production`)
228
+ * - the example file it should be compared against
229
+ */
278
230
  export interface FilePair {
231
+ /** The name of the environment file (e.g. ".env", ".env.production") */
279
232
  envName: string;
233
+ /** Absolute path to the environment file */
280
234
  envPath: string;
235
+ /** Absolute path to the example file this env file is compared against */
281
236
  examplePath: string;
282
237
  }
283
- export interface ComparisonResult {
284
- exitWithError: boolean;
285
- }
286
- export type PairContext = {
287
- envName: string;
288
- envPath: string;
289
- exampleName: string;
290
- examplePath: string;
291
- exists: {
292
- env: boolean;
293
- example: boolean;
294
- };
295
- currentFull?: Record<string, string>;
296
- exampleFull?: Record<string, string>;
297
- currentKeys?: string[];
298
- exampleKeys?: string[];
299
- current?: Record<string, string>;
300
- example?: Record<string, string>;
301
- };
238
+ /**
239
+ * Result of filtering comparison results based on categories
240
+ */
302
241
  export type Filtered = {
303
242
  missing: string[];
304
243
  extra?: string[];
@@ -308,27 +247,43 @@ export type Filtered = {
308
247
  expected: string;
309
248
  actual: string;
310
249
  }>;
311
- duplicatesEnv: Array<{
312
- key: string;
313
- count: number;
314
- }>;
315
- duplicatesEx: Array<{
316
- key: string;
317
- count: number;
318
- }>;
250
+ duplicatesEnv: Duplicate[];
251
+ duplicatesEx: Duplicate[];
319
252
  gitignoreIssue: {
320
253
  reason: 'no-gitignore' | 'not-ignored';
321
254
  } | null;
322
255
  };
256
+ /**
257
+ * Result of the exit code determination after scanning or comparing.
258
+ */
259
+ export interface ExitResult {
260
+ exitWithError: boolean;
261
+ }
262
+ /**
263
+ * Warning about environment variable keys that are not uppercase.
264
+ */
323
265
  export interface UppercaseWarning {
324
266
  key: string;
325
267
  suggestion: string;
326
268
  }
269
+ /**
270
+ * Warning about environment variable keys that have expiration dates.
271
+ * fx:
272
+ *
273
+ * # @expire 2025-12-31
274
+ * API_KEY=
275
+ *
276
+ * This will generate a warning that API_KEY expires on 2025-12-31.
277
+ */
327
278
  export interface ExpireWarning {
328
279
  key: string;
329
280
  date: string;
330
281
  daysLeft: number;
331
282
  }
283
+ /**
284
+ * Warning about inconsistent naming of environment variable keys.
285
+ * fx: If you have both SECRET_KEY and SECRETKEY (inconsistent naming)
286
+ */
332
287
  export interface InconsistentNamingWarning {
333
288
  key1: string;
334
289
  key2: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAG3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;CACtB;AAGD,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAGD,eAAO,MAAM,kBAAkB,8EAOrB,CAAC;AAGX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EACH,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,GAAG,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,0BAA0B,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACzD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,wEAAwE;AACxE,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,0BAA0B,CAAC,EAAE,KAAK,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,cAAc;IAC7B,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,aAAa,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,YAAY,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,EAAE;QAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uBAAuB,EAAE,OAAO,CAAC;CAClC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,4 @@
1
- import {} from '../core/secretDetectors.js';
2
- import {} from '../core/exampleSecretDetector.js';
3
- // Allowed categories for comparison
4
- export const ALLOWED_CATEGORIES = [
5
- 'missing',
6
- 'extra',
7
- 'empty',
8
- 'mismatch',
9
- 'duplicate',
10
- 'gitignore',
11
- ];
1
+ import { ALLOWED_CATEGORIES } from './constants.js';
2
+ import {} from '../core/security/secretDetectors.js';
3
+ import {} from '../core/security/exampleSecretDetector.js';
12
4
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAA6B,MAAM,kCAAkC,CAAC;AAuB7E,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,OAAO;IACP,OAAO;IACP,UAAU;IACV,WAAW;IACX,WAAW;CACH,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAsB,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAA6B,MAAM,2CAA2C,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { ScanResult } from '../config/types.js';
2
2
  /**
3
3
  * Compares the scan result with the environment variables.
4
+ * This function identifies missing and unused environment variables.
4
5
  * @param scanResult - The result of the scan.
5
6
  * @param envVariables - The environment variables to compare against.
6
7
  * @returns The comparison result.
@@ -1 +1 @@
1
- {"version":3,"file":"compareScan.d.ts","sourceRoot":"","sources":["../../../src/core/compareScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC/C,UAAU,CAYZ"}
1
+ {"version":3,"file":"compareScan.d.ts","sourceRoot":"","sources":["../../../src/core/compareScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC/C,UAAU,CAYZ"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Compares the scan result with the environment variables.
3
+ * This function identifies missing and unused environment variables.
3
4
  * @param scanResult - The result of the scan.
4
5
  * @param envVariables - The environment variables to compare against.
5
6
  * @returns The comparison result.
@@ -1 +1 @@
1
- {"version":3,"file":"compareScan.js","sourceRoot":"","sources":["../../../src/core/compareScan.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAsB,EACtB,YAAgD;IAEhD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,GAAG,UAAU;QACb,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"compareScan.js","sourceRoot":"","sources":["../../../src/core/compareScan.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAsB,EACtB,YAAgD;IAEhD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,GAAG,UAAU;QACb,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"computeHealthScore.d.ts","sourceRoot":"","sources":["../../../src/core/computeHealthScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAoC3D"}
1
+ {"version":3,"file":"computeHealthScore.d.ts","sourceRoot":"","sources":["../../../src/core/computeHealthScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAwC3D"}
@@ -26,6 +26,9 @@ export function computeHealthScore(scan) {
26
26
  score -= (scan.expireWarnings?.length ?? 0) * 5;
27
27
  // === 9. Inconsistent naming warnings ===
28
28
  score -= (scan.inconsistentNamingWarnings?.length ?? 0) * 3;
29
+ // === 10. Duplicate definitions ===
30
+ score -= (scan.duplicates?.env?.length ?? 0) * 10;
31
+ score -= (scan.duplicates?.example?.length ?? 0) * 10;
29
32
  // Never go below 0 or above 100
30
33
  return Math.max(0, Math.min(100, score));
31
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"computeHealthScore.js","sourceRoot":"","sources":["../../../src/core/computeHealthScore.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE9E,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;IACjC,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IAElC,qCAAqC;IACrC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnD,6BAA6B;IAC7B,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAEzC,0CAA0C;IAC1C,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAExC,gCAAgC;IAChC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnD,6BAA6B;IAC7B,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAElD,iCAAiC;IACjC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEhD,0CAA0C;IAC1C,KAAK,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5D,gCAAgC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"computeHealthScore.js","sourceRoot":"","sources":["../../../src/core/computeHealthScore.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE9E,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;IACjC,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IAElC,qCAAqC;IACrC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnD,6BAA6B;IAC7B,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAEzC,0CAA0C;IAC1C,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAExC,gCAAgC;IAChC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnD,6BAA6B;IAC7B,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAElD,iCAAiC;IACjC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEhD,0CAA0C;IAC1C,KAAK,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5D,oCAAoC;IACpC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAClD,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAEtD,gCAAgC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -47,13 +47,6 @@ function areInconsistentlyNamed(key1, key2) {
47
47
  if (normalized1 === normalized2 && key1 !== key2) {
48
48
  return true;
49
49
  }
50
- // Check for common patterns like API_KEY vs APIKEY
51
- const withoutUnderscores1 = key1.replace(/_/g, '');
52
- const withoutUnderscores2 = key2.replace(/_/g, '');
53
- if (withoutUnderscores1.toLowerCase() === withoutUnderscores2.toLowerCase() &&
54
- key1 !== key2) {
55
- return true;
56
- }
57
50
  // Check for partial matches that might indicate inconsistency
58
51
  // e.g., DATABASE_URL vs DATABASEURL, JWT_SECRET vs JWTSECRET
59
52
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"detectInconsistentNaming.js","sourceRoot":"","sources":["../../../src/core/detectInconsistentNaming.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAc;IAEd,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAErB,kCAAkC;YAClC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,SAAS;YAE7B,uDAAuD;YACvD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC1C,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE5B,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACvC,mEAAmE;gBACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,MAAM,UAAU,GAAG,sCAAsC,YAAY,GAAG,CAAC;gBAEzE,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,IAAI;oBACJ,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAY;IACxD,2CAA2C;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzD,0DAA0D;IAC1D,IAAI,WAAW,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEnD,IACE,mBAAmB,CAAC,WAAW,EAAE,KAAK,mBAAmB,CAAC,WAAW,EAAE;QACvE,IAAI,KAAK,IAAI,EACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,6DAA6D;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"detectInconsistentNaming.js","sourceRoot":"","sources":["../../../src/core/detectInconsistentNaming.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAc;IAEd,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAErB,kCAAkC;YAClC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,SAAS;YAE7B,uDAAuD;YACvD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC1C,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE5B,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACvC,mEAAmE;gBACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,MAAM,UAAU,GAAG,sCAAsC,YAAY,GAAG,CAAC;gBAEzE,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,IAAI;oBACJ,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAY;IACxD,2CAA2C;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzD,0DAA0D;IAC1D,IAAI,WAAW,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,6DAA6D;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type ScanUsageOptions } from '../config/types.js';
1
+ import type { ScanUsageOptions } from '../config/types.js';
2
2
  type ComparisonFile = {
3
3
  path: string;
4
4
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"determineComparisonFile.d.ts","sourceRoot":"","sources":["../../../src/core/determineComparisonFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AASF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,gBAAgB,GACrB,cAAc,GAAG,SAAS,CA0B5B"}
1
+ {"version":3,"file":"determineComparisonFile.d.ts","sourceRoot":"","sources":["../../../src/core/determineComparisonFile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,gBAAgB,GACrB,cAAc,GAAG,SAAS,CA0B5B"}
@@ -1,13 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import {} from '../config/types.js';
4
3
  import { resolveFromCwd } from './helpers/resolveFromCwd.js';
5
- const DEFAULT_ENV_FILES = [
6
- '.env',
7
- '.env.example',
8
- '.env.local',
9
- '.env.production',
10
- ];
4
+ import { DEFAULT_ENV_CANDIDATES } from '../config/constants.js';
11
5
  /**
12
6
  * Determines which file to use for comparison based on provided options
13
7
  * @param {ScanUsageOptions} opts - Scan configuration options
@@ -28,7 +22,7 @@ export function determineComparisonFile(opts) {
28
22
  }
29
23
  }
30
24
  // Auto-discovery: look for common env files relative to cwd
31
- for (const candidate of DEFAULT_ENV_FILES) {
25
+ for (const candidate of DEFAULT_ENV_CANDIDATES) {
32
26
  const fullPath = path.resolve(opts.cwd, candidate);
33
27
  if (fs.existsSync(fullPath)) {
34
28
  return { path: fullPath, name: candidate };
@@ -1 +1 @@
1
- {"version":3,"file":"determineComparisonFile.js","sourceRoot":"","sources":["../../../src/core/determineComparisonFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAyB,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAO7D,MAAM,iBAAiB,GAAG;IACxB,MAAM;IACN,cAAc;IACd,YAAY;IACZ,iBAAiB;CACT,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAsB;IAEtB,sDAAsD;IAEtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"determineComparisonFile.js","sourceRoot":"","sources":["../../../src/core/determineComparisonFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAOhE;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAsB;IAEtB,sDAAsD;IAEtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,MAAM,SAAS,IAAI,sBAAsB,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}