dotenv-diff 2.2.7 → 2.3.0

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 (186) hide show
  1. package/README.md +28 -0
  2. package/dist/src/cli/program.d.ts.map +1 -1
  3. package/dist/src/cli/program.js +4 -1
  4. package/dist/src/cli/program.js.map +1 -1
  5. package/dist/src/cli/run.d.ts.map +1 -1
  6. package/dist/src/cli/run.js +42 -31
  7. package/dist/src/cli/run.js.map +1 -1
  8. package/dist/src/commands/compare.d.ts +2 -20
  9. package/dist/src/commands/compare.d.ts.map +1 -1
  10. package/dist/src/commands/compare.js +107 -173
  11. package/dist/src/commands/compare.js.map +1 -1
  12. package/dist/src/commands/init.d.ts +3 -15
  13. package/dist/src/commands/init.d.ts.map +1 -1
  14. package/dist/src/commands/init.js +17 -66
  15. package/dist/src/commands/init.js.map +1 -1
  16. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  17. package/dist/src/commands/scanUsage.js +87 -173
  18. package/dist/src/commands/scanUsage.js.map +1 -1
  19. package/dist/src/config/loadConfig.d.ts +9 -1
  20. package/dist/src/config/loadConfig.d.ts.map +1 -1
  21. package/dist/src/config/loadConfig.js +31 -0
  22. package/dist/src/config/loadConfig.js.map +1 -0
  23. package/dist/src/config/options.d.ts.map +1 -1
  24. package/dist/src/config/options.js +46 -32
  25. package/dist/src/config/options.js.map +1 -1
  26. package/dist/src/config/types.d.ts +65 -0
  27. package/dist/src/config/types.d.ts.map +1 -1
  28. package/dist/src/core/determineComparisonFile.d.ts.map +1 -1
  29. package/dist/src/core/determineComparisonFile.js +3 -0
  30. package/dist/src/core/determineComparisonFile.js.map +1 -1
  31. package/dist/src/core/entropy.js +1 -1
  32. package/dist/src/core/entropy.js.map +1 -1
  33. package/dist/src/core/fixEnv.d.ts +24 -15
  34. package/dist/src/core/fixEnv.d.ts.map +1 -1
  35. package/dist/src/core/fixEnv.js +70 -11
  36. package/dist/src/core/fixEnv.js.map +1 -1
  37. package/dist/src/core/helpers/isAllOk.d.ts +8 -0
  38. package/dist/src/core/helpers/isAllOk.d.ts.map +1 -0
  39. package/dist/src/core/helpers/isAllOk.js +15 -0
  40. package/dist/src/core/helpers/isAllOk.js.map +1 -0
  41. package/dist/src/core/helpers/resolveFromCwd.d.ts.map +1 -1
  42. package/dist/src/core/helpers/resolveFromCwd.js.map +1 -1
  43. package/dist/src/core/helpers/updateTotals.d.ts +20 -0
  44. package/dist/src/core/helpers/updateTotals.d.ts.map +1 -0
  45. package/dist/src/core/helpers/updateTotals.js +37 -0
  46. package/dist/src/core/helpers/updateTotals.js.map +1 -0
  47. package/dist/src/core/processComparisonFile.d.ts +36 -0
  48. package/dist/src/core/processComparisonFile.d.ts.map +1 -0
  49. package/dist/src/core/processComparisonFile.js +124 -0
  50. package/dist/src/core/processComparisonFile.js.map +1 -0
  51. package/dist/src/core/secretDetectors.d.ts +10 -1
  52. package/dist/src/core/secretDetectors.d.ts.map +1 -1
  53. package/dist/src/core/secretDetectors.js +35 -4
  54. package/dist/src/core/secretDetectors.js.map +1 -1
  55. package/dist/src/index.js +1 -0
  56. package/dist/src/index.js.map +1 -1
  57. package/dist/src/services/codeBaseScanner.js +1 -1
  58. package/dist/src/services/codeBaseScanner.js.map +1 -1
  59. package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -1
  60. package/dist/src/services/ensureFilesOrPrompt.js +10 -11
  61. package/dist/src/services/ensureFilesOrPrompt.js.map +1 -1
  62. package/dist/src/services/git.d.ts +9 -0
  63. package/dist/src/services/git.d.ts.map +1 -1
  64. package/dist/src/services/git.js +46 -3
  65. package/dist/src/services/git.js.map +1 -1
  66. package/dist/src/services/scanOutputToConsole.d.ts +6 -1
  67. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
  68. package/dist/src/services/scanOutputToConsole.js +67 -140
  69. package/dist/src/services/scanOutputToConsole.js.map +1 -1
  70. package/dist/src/ui/compare/printAutoFix.d.ts +16 -0
  71. package/dist/src/ui/compare/printAutoFix.d.ts.map +1 -0
  72. package/dist/src/ui/compare/printAutoFix.js +34 -0
  73. package/dist/src/ui/compare/printAutoFix.js.map +1 -0
  74. package/dist/src/ui/compare/printAutoFixApplied.d.ts +7 -0
  75. package/dist/src/ui/compare/printAutoFixApplied.d.ts.map +1 -0
  76. package/dist/src/ui/compare/printAutoFixApplied.js +22 -0
  77. package/dist/src/ui/compare/printAutoFixApplied.js.map +1 -0
  78. package/dist/src/ui/compare/printDuplicates.d.ts +17 -0
  79. package/dist/src/ui/compare/printDuplicates.d.ts.map +1 -0
  80. package/dist/src/ui/compare/printDuplicates.js +25 -0
  81. package/dist/src/ui/compare/printDuplicates.js.map +1 -0
  82. package/dist/src/ui/compare/printErrorNotFound.d.ts +9 -0
  83. package/dist/src/ui/compare/printErrorNotFound.d.ts.map +1 -0
  84. package/dist/src/ui/compare/printErrorNotFound.js +18 -0
  85. package/dist/src/ui/compare/printErrorNotFound.js.map +1 -0
  86. package/dist/src/ui/compare/printFixTips.d.ts +11 -0
  87. package/dist/src/ui/compare/printFixTips.d.ts.map +1 -0
  88. package/dist/src/ui/compare/printFixTips.js +46 -0
  89. package/dist/src/ui/compare/printFixTips.js.map +1 -0
  90. package/dist/src/ui/compare/printHeader.d.ts +10 -0
  91. package/dist/src/ui/compare/printHeader.d.ts.map +1 -0
  92. package/dist/src/ui/compare/printHeader.js +20 -0
  93. package/dist/src/ui/compare/printHeader.js.map +1 -0
  94. package/dist/src/ui/compare/printIssues.d.ts +9 -0
  95. package/dist/src/ui/compare/printIssues.d.ts.map +1 -0
  96. package/dist/src/ui/compare/printIssues.js +34 -0
  97. package/dist/src/ui/compare/printIssues.js.map +1 -0
  98. package/dist/src/ui/compare/printPrompt.d.ts +11 -0
  99. package/dist/src/ui/compare/printPrompt.d.ts.map +1 -0
  100. package/dist/src/ui/compare/printPrompt.js +24 -0
  101. package/dist/src/ui/compare/printPrompt.js.map +1 -0
  102. package/dist/src/ui/compare/printStats.d.ts +19 -0
  103. package/dist/src/ui/compare/printStats.d.ts.map +1 -0
  104. package/dist/src/ui/compare/printStats.js +30 -0
  105. package/dist/src/ui/compare/printStats.js.map +1 -0
  106. package/dist/src/ui/compare/printSuccess.d.ts +11 -0
  107. package/dist/src/ui/compare/printSuccess.d.ts.map +1 -0
  108. package/dist/src/ui/compare/printSuccess.js +27 -0
  109. package/dist/src/ui/compare/printSuccess.js.map +1 -0
  110. package/dist/src/ui/scan/printComparisonError.d.ts +11 -0
  111. package/dist/src/ui/scan/printComparisonError.d.ts.map +1 -0
  112. package/dist/src/ui/scan/printComparisonError.js +20 -0
  113. package/dist/src/ui/scan/printComparisonError.js.map +1 -0
  114. package/dist/src/ui/scan/printHeader.d.ts +7 -0
  115. package/dist/src/ui/scan/printHeader.d.ts.map +1 -0
  116. package/dist/src/ui/scan/printHeader.js +16 -0
  117. package/dist/src/ui/scan/printHeader.js.map +1 -0
  118. package/dist/src/ui/scan/printMissing.d.ts +13 -0
  119. package/dist/src/ui/scan/printMissing.d.ts.map +1 -0
  120. package/dist/src/ui/scan/printMissing.js +43 -0
  121. package/dist/src/ui/scan/printMissing.js.map +1 -0
  122. package/dist/src/ui/scan/printMissingExample.d.ts +9 -0
  123. package/dist/src/ui/scan/printMissingExample.d.ts.map +1 -0
  124. package/dist/src/ui/scan/printMissingExample.js +27 -0
  125. package/dist/src/ui/scan/printMissingExample.js.map +1 -0
  126. package/dist/src/ui/scan/printSecrets.d.ts +14 -0
  127. package/dist/src/ui/scan/printSecrets.d.ts.map +1 -0
  128. package/dist/src/ui/scan/printSecrets.js +29 -0
  129. package/dist/src/ui/scan/printSecrets.js.map +1 -0
  130. package/dist/src/ui/scan/printStats.d.ts +13 -0
  131. package/dist/src/ui/scan/printStats.d.ts.map +1 -0
  132. package/dist/src/ui/scan/printStats.js +17 -0
  133. package/dist/src/ui/scan/printStats.js.map +1 -0
  134. package/dist/src/ui/scan/printUniqueVariables.d.ts +7 -0
  135. package/dist/src/ui/scan/printUniqueVariables.d.ts.map +1 -0
  136. package/dist/src/ui/scan/printUniqueVariables.js +14 -0
  137. package/dist/src/ui/scan/printUniqueVariables.js.map +1 -0
  138. package/dist/src/ui/scan/printUnused.d.ts +10 -0
  139. package/dist/src/ui/scan/printUnused.d.ts.map +1 -0
  140. package/dist/src/ui/scan/printUnused.js +22 -0
  141. package/dist/src/ui/scan/printUnused.js.map +1 -0
  142. package/dist/src/ui/scan/printVariables.d.ts +10 -0
  143. package/dist/src/ui/scan/printVariables.d.ts.map +1 -0
  144. package/dist/src/ui/scan/printVariables.js +37 -0
  145. package/dist/src/ui/scan/printVariables.js.map +1 -0
  146. package/dist/src/ui/shared/printAutoFix.d.ts +16 -0
  147. package/dist/src/ui/shared/printAutoFix.d.ts.map +1 -0
  148. package/dist/src/ui/shared/printAutoFix.js +34 -0
  149. package/dist/src/ui/shared/printAutoFix.js.map +1 -0
  150. package/dist/src/ui/shared/printConfigStatus.d.ts +11 -0
  151. package/dist/src/ui/shared/printConfigStatus.d.ts.map +1 -0
  152. package/dist/src/ui/shared/printConfigStatus.js +23 -0
  153. package/dist/src/ui/shared/printConfigStatus.js.map +1 -0
  154. package/dist/src/ui/shared/printDuplicates.d.ts +17 -0
  155. package/dist/src/ui/shared/printDuplicates.d.ts.map +1 -0
  156. package/dist/src/ui/shared/printDuplicates.js +25 -0
  157. package/dist/src/ui/shared/printDuplicates.js.map +1 -0
  158. package/dist/src/ui/shared/printFixTips.d.ts +11 -0
  159. package/dist/src/ui/shared/printFixTips.d.ts.map +1 -0
  160. package/dist/src/ui/shared/printFixTips.js +46 -0
  161. package/dist/src/ui/shared/printFixTips.js.map +1 -0
  162. package/dist/src/ui/shared/printGitignore.d.ts +13 -0
  163. package/dist/src/ui/shared/printGitignore.d.ts.map +1 -0
  164. package/dist/src/ui/shared/printGitignore.js +20 -0
  165. package/dist/src/ui/shared/printGitignore.js.map +1 -0
  166. package/dist/src/ui/shared/printInitStatus.d.ts +9 -0
  167. package/dist/src/ui/shared/printInitStatus.d.ts.map +1 -0
  168. package/dist/src/ui/shared/printInitStatus.js +20 -0
  169. package/dist/src/ui/shared/printInitStatus.js.map +1 -0
  170. package/dist/src/ui/shared/printOptionErrors.d.ts +17 -0
  171. package/dist/src/ui/shared/printOptionErrors.d.ts.map +1 -0
  172. package/dist/src/ui/shared/printOptionErrors.js +27 -0
  173. package/dist/src/ui/shared/printOptionErrors.js.map +1 -0
  174. package/dist/src/ui/shared/printStrictModeError.d.ts +16 -0
  175. package/dist/src/ui/shared/printStrictModeError.d.ts.map +1 -0
  176. package/dist/src/ui/shared/printStrictModeError.js +29 -0
  177. package/dist/src/ui/shared/printStrictModeError.js.map +1 -0
  178. package/dist/src/ui/shared/printSuccess.d.ts +11 -0
  179. package/dist/src/ui/shared/printSuccess.d.ts.map +1 -0
  180. package/dist/src/ui/shared/printSuccess.js +27 -0
  181. package/dist/src/ui/shared/printSuccess.js.map +1 -0
  182. package/dist/src/ui/shared/setupGlobalConfig.d.ts +7 -0
  183. package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -0
  184. package/dist/src/ui/shared/setupGlobalConfig.js +12 -0
  185. package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -0
  186. package/package.json +1 -1
@@ -0,0 +1,36 @@
1
+ import type { ScanUsageOptions, ScanResult } from '../config/types.js';
2
+ export interface ProcessComparisonResult {
3
+ scanResult: ScanResult;
4
+ envVariables: Record<string, string | undefined>;
5
+ comparedAgainst: string;
6
+ duplicatesFound: boolean;
7
+ dupsEnv: Array<{
8
+ key: string;
9
+ count: number;
10
+ }>;
11
+ dupsExample: Array<{
12
+ key: string;
13
+ count: number;
14
+ }>;
15
+ fixApplied: boolean;
16
+ removedDuplicates: string[];
17
+ addedEnv: string[];
18
+ addedExample: string[];
19
+ gitignoreUpdated: boolean;
20
+ error?: {
21
+ message: string;
22
+ shouldExit: boolean;
23
+ };
24
+ }
25
+ /**
26
+ * Process comparison file: parse env, check duplicates, check missing keys, apply fixes
27
+ * @param scanResult - Current scan result
28
+ * @param compareFile - File to compare against
29
+ * @param opts - Scan options
30
+ * @returns Processed comparison result
31
+ */
32
+ export declare function processComparisonFile(scanResult: ScanResult, compareFile: {
33
+ path: string;
34
+ name: string;
35
+ }, opts: ScanUsageOptions): ProcessComparisonResult;
36
+ //# sourceMappingURL=processComparisonFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processComparisonFile.d.ts","sourceRoot":"","sources":["../../../src/core/processComparisonFile.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,WAAW,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3C,IAAI,EAAE,gBAAgB,GACrB,uBAAuB,CAqGzB"}
@@ -0,0 +1,124 @@
1
+ import fs from 'fs';
2
+ import { parseEnvFile } from './parseEnv.js';
3
+ import { filterIgnoredKeys } from './filterIgnoredKeys.js';
4
+ import { compareWithEnvFiles } from './compareScan.js';
5
+ import { findDuplicateKeys } from '../services/duplicates.js';
6
+ import { applyFixes } from './fixEnv.js';
7
+ import { resolveFromCwd } from './helpers/resolveFromCwd.js';
8
+ /**
9
+ * Process comparison file: parse env, check duplicates, check missing keys, apply fixes
10
+ * @param scanResult - Current scan result
11
+ * @param compareFile - File to compare against
12
+ * @param opts - Scan options
13
+ * @returns Processed comparison result
14
+ */
15
+ export function processComparisonFile(scanResult, compareFile, opts) {
16
+ let envVariables = {};
17
+ let comparedAgainst = '';
18
+ let duplicatesFound = false;
19
+ let dupsEnv = [];
20
+ let dupsExample = [];
21
+ let fixApplied = false;
22
+ let removedDuplicates = [];
23
+ let addedEnv = [];
24
+ let addedExample = [];
25
+ let gitignoreUpdated = false;
26
+ try {
27
+ // Parse and filter env file
28
+ const envFull = parseEnvFile(compareFile.path);
29
+ const envKeys = filterIgnoredKeys(Object.keys(envFull), opts.ignore, opts.ignoreRegex);
30
+ envVariables = Object.fromEntries(envKeys.map((k) => [k, envFull[k]]));
31
+ scanResult = compareWithEnvFiles(scanResult, envVariables);
32
+ comparedAgainst = compareFile.name;
33
+ // Find duplicates
34
+ if (!opts.allowDuplicates) {
35
+ const duplicateResults = checkDuplicates(compareFile, opts);
36
+ dupsEnv = duplicateResults.dupsEnv;
37
+ dupsExample = duplicateResults.dupsExample;
38
+ duplicatesFound = dupsEnv.length > 0 || dupsExample.length > 0;
39
+ }
40
+ // Apply fixes (both duplicates + missing keys + gitignore)
41
+ if (opts.fix &&
42
+ (duplicatesFound || scanResult.missing.length > 0 || true)) {
43
+ const { changed, result } = applyFixes({
44
+ envPath: compareFile.path,
45
+ examplePath: opts.examplePath
46
+ ? resolveFromCwd(opts.cwd, opts.examplePath)
47
+ : '',
48
+ missingKeys: scanResult.missing,
49
+ duplicateKeys: dupsEnv.map((d) => d.key),
50
+ ensureGitignore: true,
51
+ });
52
+ if (changed) {
53
+ fixApplied = true;
54
+ removedDuplicates = result.removedDuplicates;
55
+ addedEnv = result.addedEnv;
56
+ addedExample = result.addedExample;
57
+ gitignoreUpdated = result.gitignoreUpdated;
58
+ scanResult.missing = [];
59
+ dupsEnv = [];
60
+ dupsExample = [];
61
+ duplicatesFound = false;
62
+ }
63
+ }
64
+ // Keep duplicates for output if not fixed
65
+ if (duplicatesFound && (!opts.fix || !fixApplied)) {
66
+ if (!scanResult.duplicates)
67
+ scanResult.duplicates = {};
68
+ if (dupsEnv.length > 0)
69
+ scanResult.duplicates.env = dupsEnv;
70
+ if (dupsExample.length > 0)
71
+ scanResult.duplicates.example = dupsExample;
72
+ }
73
+ }
74
+ catch (error) {
75
+ const errorMessage = `Could not read ${compareFile.name}: ${compareFile.path} - ${error}`;
76
+ return {
77
+ scanResult,
78
+ envVariables,
79
+ comparedAgainst,
80
+ duplicatesFound,
81
+ dupsEnv,
82
+ dupsExample,
83
+ fixApplied,
84
+ removedDuplicates,
85
+ addedEnv,
86
+ addedExample,
87
+ gitignoreUpdated,
88
+ error: {
89
+ message: errorMessage,
90
+ shouldExit: opts.isCiMode ?? false,
91
+ },
92
+ };
93
+ }
94
+ return {
95
+ scanResult,
96
+ envVariables,
97
+ comparedAgainst,
98
+ duplicatesFound,
99
+ dupsEnv,
100
+ dupsExample,
101
+ fixApplied,
102
+ removedDuplicates,
103
+ addedEnv,
104
+ addedExample,
105
+ gitignoreUpdated,
106
+ };
107
+ }
108
+ /**
109
+ * Check for duplicate keys in env and example files
110
+ */
111
+ function checkDuplicates(compareFile, opts) {
112
+ const dupsEnv = findDuplicateKeys(compareFile.path).filter(({ key }) => !opts.ignore.includes(key) &&
113
+ !opts.ignoreRegex.some((rx) => rx.test(key)));
114
+ let dupsExample = [];
115
+ if (opts.examplePath) {
116
+ const examplePath = resolveFromCwd(opts.cwd, opts.examplePath);
117
+ if (fs.existsSync(examplePath) && examplePath !== compareFile.path) {
118
+ dupsExample = findDuplicateKeys(examplePath).filter(({ key }) => !opts.ignore.includes(key) &&
119
+ !opts.ignoreRegex.some((rx) => rx.test(key)));
120
+ }
121
+ }
122
+ return { dupsEnv, dupsExample };
123
+ }
124
+ //# sourceMappingURL=processComparisonFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processComparisonFile.js","sourceRoot":"","sources":["../../../src/core/processComparisonFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAkB7D;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAsB,EACtB,WAA2C,EAC3C,IAAsB;IAEtB,IAAI,YAAY,GAAuC,EAAE,CAAC;IAC1D,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,OAAO,GAA0C,EAAE,CAAC;IACxD,IAAI,WAAW,GAA0C,EAAE,CAAC;IAC5D,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,iBAAiB,CAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EACpB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,UAAU,GAAG,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC3D,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC;QAEnC,kBAAkB;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5D,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;YACnC,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;YAC3C,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,CAAC;QAED,2DAA2D;QAC3D,IACE,IAAI,CAAC,GAAG;YACR,CAAC,eAAe,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,EAC1D,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;gBACrC,OAAO,EAAE,WAAW,CAAC,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC3B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;oBAC5C,CAAC,CAAC,EAAE;gBACN,WAAW,EAAE,UAAU,CAAC,OAAO;gBAC/B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,GAAG,IAAI,CAAC;gBAClB,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBAC7C,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC3B,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;gBACnC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBAE3C,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;gBACxB,OAAO,GAAG,EAAE,CAAC;gBACb,WAAW,GAAG,EAAE,CAAC;gBACjB,eAAe,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU;gBAAE,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;YACvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC;YAC5D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,UAAU,CAAC,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,kBAAkB,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC;QAC1F,OAAO;YACL,UAAU;YACV,YAAY;YACZ,eAAe;YACf,eAAe;YACf,OAAO;YACP,WAAW;YACX,UAAU;YACV,iBAAiB;YACjB,QAAQ;YACR,YAAY;YACZ,gBAAgB;YAChB,KAAK,EAAE;gBACL,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;aACnC;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU;QACV,YAAY;QACZ,eAAe;QACf,eAAe;QACf,OAAO;QACP,WAAW;QACX,UAAU;QACV,iBAAiB;QACjB,QAAQ;QACR,YAAY;QACZ,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,WAA2C,EAC3C,IAAsB;IAKtB,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CACxD,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CACV,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/C,CAAC;IAEF,IAAI,WAAW,GAA0C,EAAE,CAAC;IAE5D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YACnE,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,MAAM,CACjD,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CACV,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
@@ -5,11 +5,20 @@ export type SecretFinding = {
5
5
  message: string;
6
6
  snippet: string;
7
7
  };
8
+ /**
9
+ * Checks if a line has an ignore comment
10
+ * fx: // dotenv-diff-ignore or /* dotenv-diff-ignore *\/ or <!-- dotenv-diff-ignore -->
11
+ * @param line - The line to check
12
+ * @returns True if the line should be ignored
13
+ */
14
+ export declare function hasIgnoreComment(line: string): boolean;
8
15
  /**
9
16
  * Detects secrets in the source code of a file.
10
17
  * @param file - The file path to check.
11
18
  * @param source - The source code to scan for secrets.
12
19
  * @returns An array of secret findings.
13
20
  */
14
- export declare function detectSecretsInSource(file: string, source: string): SecretFinding[];
21
+ export declare function detectSecretsInSource(file: string, source: string, opts?: {
22
+ ignoreUrls?: string[];
23
+ }): SecretFinding[];
15
24
  //# sourceMappingURL=secretDetectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secretDetectors.d.ts","sourceRoot":"","sources":["../../../src/core/secretDetectors.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAoHF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,aAAa,EAAE,CAmGjB"}
1
+ {"version":3,"file":"secretDetectors.d.ts","sourceRoot":"","sources":["../../../src/core/secretDetectors.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkCF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUtD;AAwFD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/B,aAAa,EAAE,CAmHjB"}
@@ -27,12 +27,29 @@ const HARMLESS_URLS = [
27
27
  ];
28
28
  /**
29
29
  * Checks if a line has an ignore comment
30
+ * fx: // dotenv-diff-ignore or /* dotenv-diff-ignore *\/ or <!-- dotenv-diff-ignore -->
30
31
  * @param line - The line to check
31
32
  * @returns True if the line should be ignored
32
33
  */
33
- function hasIgnoreComment(line) {
34
- return (/\/\/\s*dotenv-diff-ignore/.test(line) ||
35
- /\/\*\s*dotenv-diff-ignore\s*\*\//.test(line));
34
+ export function hasIgnoreComment(line) {
35
+ const normalized = line.trim();
36
+ // Allow mixed casing, extra spaces, and optional dashes
37
+ return (/\/\/.*dotenv[\s-]*diff[\s-]*ignore/i.test(normalized) ||
38
+ /\/\*.*dotenv[\s-]*diff[\s-]*ignore.*\*\//i.test(normalized) ||
39
+ /<!--.*dotenv[\s-]*diff[\s-]*ignore.*-->/i.test(normalized) ||
40
+ /\bdotenv[\s-]*diff[\s-]*ignore\b/i.test(normalized));
41
+ }
42
+ /**
43
+ * Checks if a URL should be ignored based on ignoreUrls from config.
44
+ * @param url - The URL that might be a potential secret
45
+ * @param ignoreUrls - List of URLs to ignore (from config)
46
+ * @returns true if the URL matches any ignore pattern
47
+ */
48
+ function ignoreUrlsMatch(url, ignoreUrls) {
49
+ if (!ignoreUrls?.length)
50
+ return false;
51
+ // case-insensitive substring match
52
+ return ignoreUrls.some((pattern) => url.toLowerCase().includes(pattern.toLowerCase()));
36
53
  }
37
54
  /**
38
55
  * Checks if a string looks like a harmless literal.
@@ -95,13 +112,25 @@ function isEnvAccessor(line) {
95
112
  * @param source - The source code to scan for secrets.
96
113
  * @returns An array of secret findings.
97
114
  */
98
- export function detectSecretsInSource(file, source) {
115
+ export function detectSecretsInSource(file, source, opts) {
99
116
  const threshold = isProbablyTestPath(file) ? 0.95 : DEFAULT_SECRET_THRESHOLD;
100
117
  const findings = [];
101
118
  const lines = source.split(/\r?\n/);
119
+ let insideIgnoreBlock = false;
102
120
  for (let i = 0; i < lines.length; i++) {
103
121
  const lineNo = i + 1;
104
122
  const line = lines[i] || '';
123
+ if (/<!--\s*dotenv[\s-]*diff[\s-]*ignore[\s-]*start\s*-->/i.test(line)) {
124
+ insideIgnoreBlock = true;
125
+ continue;
126
+ }
127
+ if (/<!--\s*dotenv[\s-]*diff[\s-]*ignore[\s-]*end\s*-->/i.test(line)) {
128
+ insideIgnoreBlock = false;
129
+ continue;
130
+ }
131
+ // Skip if inside ignore block
132
+ if (insideIgnoreBlock)
133
+ continue;
105
134
  // Skip comments
106
135
  if (/^\s*\/\//.test(line))
107
136
  continue;
@@ -114,6 +143,8 @@ export function detectSecretsInSource(file, source) {
114
143
  while ((httpsMatch = HTTPS_PATTERN.exec(line))) {
115
144
  const url = httpsMatch[1] || '';
116
145
  if (url && !looksHarmlessLiteral(url)) {
146
+ if (ignoreUrlsMatch(url, opts?.ignoreUrls))
147
+ continue;
117
148
  const protocol = url.startsWith('https') ? 'HTTPS' : 'HTTP';
118
149
  findings.push({
119
150
  file,
@@ -1 +1 @@
1
- {"version":3,"file":"secretDetectors.js","sourceRoot":"","sources":["../../../src/core/secretDetectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretDetectors.js","sourceRoot":"","sources":["../../../src/core/secretDetectors.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { parseEnvFile } from './core/parseEnv.js';
2
2
  export { diffEnv } from './core/diffEnv.js';
3
+ const url = "https://ingenfejl.com";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC;AAE7D,MAAM,GAAG,GAAG,uBAAuB,CAAC"}
@@ -26,7 +26,7 @@ export async function scanCodebase(opts) {
26
26
  if (opts.secrets) {
27
27
  try {
28
28
  const relativePath = path.relative(opts.cwd, filePath);
29
- const sec = detectSecretsInSource(relativePath, content);
29
+ const sec = detectSecretsInSource(relativePath, content, opts);
30
30
  if (sec.length)
31
31
  allSecrets.push(...sec);
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codeBaseScanner.js","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAiB;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,CAAC,GAAG,wBAAwB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB;KACnE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,GAAG,CAAC,MAAM;wBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;YACvD,SAAS;QACX,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE;YACL,YAAY;YACZ,WAAW,EAAE,cAAc,CAAC,MAAM;YAClC,eAAe,EAAE,eAAe,CAAC,MAAM;SACxC;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"codeBaseScanner.js","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAiB;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,CAAC,GAAG,wBAAwB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB;KACnE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,qBAAqB,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC/D,IAAI,GAAG,CAAC,MAAM;wBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;YACvD,SAAS;QACX,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE;YACL,YAAY;YACZ,WAAW,EAAE,cAAc,CAAC,MAAM;YAClC,eAAe,EAAE,eAAe,CAAC,MAAM;SACxC;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ensureFilesOrPrompt.d.ts","sourceRoot":"","sources":["../../../src/services/ensureFilesOrPrompt.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;;;;GA+FA"}
1
+ {"version":3,"file":"ensureFilesOrPrompt.d.ts","sourceRoot":"","sources":["../../../src/services/ensureFilesOrPrompt.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;;;;GAqFA"}
@@ -1,8 +1,8 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import chalk from 'chalk';
4
3
  import { confirmYesNo } from '../ui/prompts.js';
5
4
  import { warnIfEnvNotIgnored } from './git.js';
5
+ import { printPrompt } from '../ui/compare/printPrompt.js';
6
6
  /**
7
7
  * Ensures that the necessary .env files exist or prompts the user to create them.
8
8
  * This function handles only scenarios where the --compare flag is set
@@ -19,40 +19,39 @@ export async function ensureFilesOrPrompt(args) {
19
19
  if (!envExists && !exampleExists) {
20
20
  const hasAnyEnv = fs.readdirSync(cwd).some((f) => f.startsWith('.env'));
21
21
  if (!hasAnyEnv) {
22
- console.log(chalk.yellow('⚠️ No .env* or .env.example file found. Skipping comparison.'));
22
+ printPrompt.noEnvFound();
23
23
  return { didCreate: false, shouldExit: true, exitCode: 0 };
24
24
  }
25
25
  }
26
26
  // Case 2: missing .env but has .env.example
27
27
  if (!envExists && exampleExists) {
28
28
  if (!alreadyWarnedMissingEnv) {
29
- console.log();
30
- console.log(chalk.yellow(`📄 ${path.basename(envPath)} file not found.`));
29
+ printPrompt.missingEnv(envPath);
31
30
  }
32
- let createEnv = isYesMode
31
+ const createEnv = isYesMode
33
32
  ? true
34
33
  : isCiMode
35
34
  ? false
36
35
  : await confirmYesNo(`❓ Do you want to create a new ${path.basename(envPath)} file from ${path.basename(examplePath)}?`, { isCiMode, isYesMode });
37
36
  if (!createEnv) {
38
- console.log(chalk.gray('🚫 Skipping .env creation.'));
37
+ printPrompt.skipCreation('.env');
39
38
  return { didCreate: false, shouldExit: true, exitCode: 0 };
40
39
  }
41
40
  const exampleContent = fs.readFileSync(examplePath, 'utf-8');
42
41
  fs.writeFileSync(envPath, exampleContent);
43
- console.log(chalk.green(`✅ ${path.basename(envPath)} file created successfully from ${path.basename(examplePath)}.\n`));
42
+ printPrompt.envCreated(envPath, examplePath);
44
43
  warnIfEnvNotIgnored({ envFile: path.basename(envPath) });
45
44
  }
46
45
  // Case 3: has .env but is missing .env.example
47
46
  if (envExists && !exampleExists) {
48
- console.log(chalk.yellow(`📄 ${path.basename(examplePath)} file not found.`));
49
- let createExample = isYesMode
47
+ printPrompt.missingEnv(examplePath);
48
+ const createExample = isYesMode
50
49
  ? true
51
50
  : isCiMode
52
51
  ? false
53
52
  : await confirmYesNo(`❓ Do you want to create a new ${path.basename(examplePath)} file from ${path.basename(envPath)}?`, { isCiMode, isYesMode });
54
53
  if (!createExample) {
55
- console.log(chalk.gray('🚫 Skipping .env.example creation.'));
54
+ printPrompt.skipCreation('.env.example');
56
55
  return { didCreate: false, shouldExit: true, exitCode: 0 };
57
56
  }
58
57
  const envContent = fs
@@ -67,7 +66,7 @@ export async function ensureFilesOrPrompt(args) {
67
66
  })
68
67
  .join('\n');
69
68
  fs.writeFileSync(examplePath, envContent);
70
- console.log(chalk.green(`✅ ${path.basename(examplePath)} file created successfully from ${path.basename(envPath)}.\n`));
69
+ printPrompt.exampleCreated(examplePath, envPath);
71
70
  }
72
71
  return { didCreate: true, shouldExit: false, exitCode: 0 };
73
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ensureFilesOrPrompt.js","sourceRoot":"","sources":["../../../src/services/ensureFilesOrPrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ensureFilesOrPrompt.js","sourceRoot":"","sources":["../../../src/services/ensureFilesOrPrompt.ts"],"names":[],"mappings":"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"}
@@ -25,4 +25,13 @@ export declare function isEnvIgnoredByGit(options?: GitignoreCheckOptions): bool
25
25
  * @returns console.log messages or void
26
26
  */
27
27
  export declare function warnIfEnvNotIgnored(options?: GitignoreCheckOptions): void;
28
+ /**
29
+ * Checks if .env file has gitignore issues.
30
+ * Returns null if no issue, otherwise returns the reason.
31
+ */
32
+ export declare function checkGitignoreStatus(options?: GitignoreCheckOptions): {
33
+ reason: 'no-gitignore' | 'not-ignored';
34
+ } | null;
35
+ /** Find the git repository root starting from startDir (walk up until ".git"). */
36
+ export declare function findGitRoot(startDir: string): string | null;
28
37
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/services/git.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEtD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,qBAA0B,GAClC,OAAO,GAAG,IAAI,CAsBhB;AA0BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI,CA2B7E"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/services/git.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEtD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,qBAA0B,GAClC,OAAO,GAAG,IAAI,CAsBhB;AA0BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI,CA0B7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG;IACzE,MAAM,EAAE,cAAc,GAAG,aAAa,CAAC;CACxC,GAAG,IAAI,CAmBP;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU3D"}
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import chalk from 'chalk';
3
+ import { printGitignoreWarning } from '../ui/shared/printGitignore.js';
4
4
  /** Are we in a git repo? (checks for .git directory in cwd) */
5
5
  export function isGitRepo(cwd = process.cwd()) {
6
6
  return fs.existsSync(path.resolve(cwd, '.git'));
@@ -67,12 +67,55 @@ export function warnIfEnvNotIgnored(options = {}) {
67
67
  return; // Not a git repo → skip
68
68
  const gitignorePath = path.resolve(cwd, '.gitignore');
69
69
  if (!fs.existsSync(gitignorePath)) {
70
- log(chalk.yellow(`⚠️ No .gitignore found – your ${envFile} may be committed.\n Add:\n ${envFile}\n ${envFile}.*\n`));
70
+ printGitignoreWarning({
71
+ envFile,
72
+ reason: 'no-gitignore',
73
+ log,
74
+ });
71
75
  return;
72
76
  }
73
77
  const ignored = isEnvIgnoredByGit({ cwd, envFile });
74
78
  if (ignored === false || ignored === null) {
75
- log(chalk.yellow(`⚠️ ${envFile} is not ignored by Git (.gitignore).\n Consider adding:\n ${envFile}\n ${envFile}.*\n`));
79
+ printGitignoreWarning({
80
+ envFile,
81
+ reason: 'not-ignored',
82
+ log,
83
+ });
76
84
  }
77
85
  }
86
+ /**
87
+ * Checks if .env file has gitignore issues.
88
+ * Returns null if no issue, otherwise returns the reason.
89
+ */
90
+ export function checkGitignoreStatus(options = {}) {
91
+ const { cwd = process.cwd(), envFile = '.env' } = options;
92
+ const envPath = path.resolve(cwd, envFile);
93
+ if (!fs.existsSync(envPath))
94
+ return null;
95
+ if (!isGitRepo(cwd))
96
+ return null;
97
+ const gitignorePath = path.resolve(cwd, '.gitignore');
98
+ if (!fs.existsSync(gitignorePath)) {
99
+ return { reason: 'no-gitignore' };
100
+ }
101
+ const ignored = isEnvIgnoredByGit({ cwd, envFile });
102
+ if (ignored === false || ignored === null) {
103
+ return { reason: 'not-ignored' };
104
+ }
105
+ return null;
106
+ }
107
+ /** Find the git repository root starting from startDir (walk up until ".git"). */
108
+ export function findGitRoot(startDir) {
109
+ let dir = path.resolve(startDir);
110
+ while (true) {
111
+ const gitDir = path.join(dir, '.git');
112
+ if (fs.existsSync(gitDir))
113
+ return dir;
114
+ const parent = path.dirname(dir);
115
+ if (parent === dir)
116
+ break; // reached filesystem root
117
+ dir = parent;
118
+ }
119
+ return null;
120
+ }
78
121
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/services/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAiC,EAAE;IAEnC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1C,iGAAiG;IACjG,IACE,KAAK,CAAC,IAAI,CACR,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAClE,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,8FAA8F;AAC9F,SAAS,oBAAoB,CAAC,OAAO,GAAG,MAAM;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,SAAS;IAC/B,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU;IACnC,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW;IAExC,OAAO,IAAI,GAAG,CAAC;QACb,IAAI;QACJ,IAAI,IAAI,EAAE;QACV,MAAM,IAAI,EAAE;QACZ,IAAI;QACJ,IAAI,IAAI,EAAE;QACV,MAAM,IAAI,EAAE;QACZ,OAAO;QACP,IAAI,OAAO,EAAE;QACb,MAAM,OAAO,EAAE;KAChB,CAAC,CAAC;AACL,CAAC;AAED,yEAAyE;AACzE,SAAS,gBAAgB,CAAC,OAAe,EAAE,OAAe;IACxD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAiC,EAAE;IACrE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAE7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,uCAAuC;IAE5E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,wBAAwB;IAErD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,GAAG,CACD,KAAK,CAAC,MAAM,CACV,kCAAkC,OAAO,mCAAmC,OAAO,QAAQ,OAAO,MAAM,CACzG,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1C,GAAG,CACD,KAAK,CAAC,MAAM,CACV,OAAO,OAAO,iEAAiE,OAAO,QAAQ,OAAO,MAAM,CAC5G,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/services/git.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,12 @@ import type { ScanUsageOptions, ScanResult } from '../config/types.js';
6
6
  * @param comparedAgainst - The file being compared against.
7
7
  * @returns An object indicating whether to exit with an error.
8
8
  */
9
- export declare function outputToConsole(scanResult: ScanResult, opts: ScanUsageOptions, comparedAgainst: string): {
9
+ export declare function outputToConsole(scanResult: ScanResult, opts: ScanUsageOptions, comparedAgainst: string, fixContext?: {
10
+ fixApplied: boolean;
11
+ removedDuplicates: string[];
12
+ addedEnv: string[];
13
+ gitignoreUpdated: boolean;
14
+ }): {
10
15
  exitWithError: boolean;
11
16
  };
12
17
  //# sourceMappingURL=scanOutputToConsole.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanOutputToConsole.d.ts","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAGX,MAAM,oBAAoB,CAAC;AAE5B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,MAAM,GACtB;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CA2P5B"}
1
+ {"version":3,"file":"scanOutputToConsole.d.ts","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAcvE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GACA;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CA+H5B"}