dotenv-diff 2.2.7 → 2.2.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 (154) hide show
  1. package/dist/src/cli/run.d.ts.map +1 -1
  2. package/dist/src/cli/run.js +19 -31
  3. package/dist/src/cli/run.js.map +1 -1
  4. package/dist/src/commands/compare.d.ts +2 -20
  5. package/dist/src/commands/compare.d.ts.map +1 -1
  6. package/dist/src/commands/compare.js +107 -173
  7. package/dist/src/commands/compare.js.map +1 -1
  8. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  9. package/dist/src/commands/scanUsage.js +60 -173
  10. package/dist/src/commands/scanUsage.js.map +1 -1
  11. package/dist/src/config/options.d.ts.map +1 -1
  12. package/dist/src/config/options.js +42 -32
  13. package/dist/src/config/options.js.map +1 -1
  14. package/dist/src/config/types.d.ts +58 -0
  15. package/dist/src/config/types.d.ts.map +1 -1
  16. package/dist/src/core/fixEnv.d.ts +23 -15
  17. package/dist/src/core/fixEnv.d.ts.map +1 -1
  18. package/dist/src/core/fixEnv.js +70 -11
  19. package/dist/src/core/fixEnv.js.map +1 -1
  20. package/dist/src/core/helpers/isAllOk.d.ts +8 -0
  21. package/dist/src/core/helpers/isAllOk.d.ts.map +1 -0
  22. package/dist/src/core/helpers/isAllOk.js +15 -0
  23. package/dist/src/core/helpers/isAllOk.js.map +1 -0
  24. package/dist/src/core/helpers/updateTotals.d.ts +20 -0
  25. package/dist/src/core/helpers/updateTotals.d.ts.map +1 -0
  26. package/dist/src/core/helpers/updateTotals.js +37 -0
  27. package/dist/src/core/helpers/updateTotals.js.map +1 -0
  28. package/dist/src/core/processComparisonFile.d.ts +36 -0
  29. package/dist/src/core/processComparisonFile.d.ts.map +1 -0
  30. package/dist/src/core/processComparisonFile.js +124 -0
  31. package/dist/src/core/processComparisonFile.js.map +1 -0
  32. package/dist/src/core/secretDetectors.d.ts.map +1 -1
  33. package/dist/src/core/secretDetectors.js +1 -0
  34. package/dist/src/core/secretDetectors.js.map +1 -1
  35. package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -1
  36. package/dist/src/services/ensureFilesOrPrompt.js +10 -11
  37. package/dist/src/services/ensureFilesOrPrompt.js.map +1 -1
  38. package/dist/src/services/git.d.ts +9 -0
  39. package/dist/src/services/git.d.ts.map +1 -1
  40. package/dist/src/services/git.js +46 -3
  41. package/dist/src/services/git.js.map +1 -1
  42. package/dist/src/services/scanOutputToConsole.d.ts +6 -1
  43. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
  44. package/dist/src/services/scanOutputToConsole.js +67 -140
  45. package/dist/src/services/scanOutputToConsole.js.map +1 -1
  46. package/dist/src/ui/compare/printAutoFix.d.ts +16 -0
  47. package/dist/src/ui/compare/printAutoFix.d.ts.map +1 -0
  48. package/dist/src/ui/compare/printAutoFix.js +34 -0
  49. package/dist/src/ui/compare/printAutoFix.js.map +1 -0
  50. package/dist/src/ui/compare/printAutoFixApplied.d.ts +7 -0
  51. package/dist/src/ui/compare/printAutoFixApplied.d.ts.map +1 -0
  52. package/dist/src/ui/compare/printAutoFixApplied.js +22 -0
  53. package/dist/src/ui/compare/printAutoFixApplied.js.map +1 -0
  54. package/dist/src/ui/compare/printDuplicates.d.ts +17 -0
  55. package/dist/src/ui/compare/printDuplicates.d.ts.map +1 -0
  56. package/dist/src/ui/compare/printDuplicates.js +25 -0
  57. package/dist/src/ui/compare/printDuplicates.js.map +1 -0
  58. package/dist/src/ui/compare/printErrorNotFound.d.ts +9 -0
  59. package/dist/src/ui/compare/printErrorNotFound.d.ts.map +1 -0
  60. package/dist/src/ui/compare/printErrorNotFound.js +18 -0
  61. package/dist/src/ui/compare/printErrorNotFound.js.map +1 -0
  62. package/dist/src/ui/compare/printFixTips.d.ts +11 -0
  63. package/dist/src/ui/compare/printFixTips.d.ts.map +1 -0
  64. package/dist/src/ui/compare/printFixTips.js +46 -0
  65. package/dist/src/ui/compare/printFixTips.js.map +1 -0
  66. package/dist/src/ui/compare/printHeader.d.ts +10 -0
  67. package/dist/src/ui/compare/printHeader.d.ts.map +1 -0
  68. package/dist/src/ui/compare/printHeader.js +20 -0
  69. package/dist/src/ui/compare/printHeader.js.map +1 -0
  70. package/dist/src/ui/compare/printIssues.d.ts +9 -0
  71. package/dist/src/ui/compare/printIssues.d.ts.map +1 -0
  72. package/dist/src/ui/compare/printIssues.js +34 -0
  73. package/dist/src/ui/compare/printIssues.js.map +1 -0
  74. package/dist/src/ui/compare/printPrompt.d.ts +11 -0
  75. package/dist/src/ui/compare/printPrompt.d.ts.map +1 -0
  76. package/dist/src/ui/compare/printPrompt.js +24 -0
  77. package/dist/src/ui/compare/printPrompt.js.map +1 -0
  78. package/dist/src/ui/compare/printStats.d.ts +19 -0
  79. package/dist/src/ui/compare/printStats.d.ts.map +1 -0
  80. package/dist/src/ui/compare/printStats.js +30 -0
  81. package/dist/src/ui/compare/printStats.js.map +1 -0
  82. package/dist/src/ui/compare/printSuccess.d.ts +11 -0
  83. package/dist/src/ui/compare/printSuccess.d.ts.map +1 -0
  84. package/dist/src/ui/compare/printSuccess.js +27 -0
  85. package/dist/src/ui/compare/printSuccess.js.map +1 -0
  86. package/dist/src/ui/scan/printComparisonError.d.ts +11 -0
  87. package/dist/src/ui/scan/printComparisonError.d.ts.map +1 -0
  88. package/dist/src/ui/scan/printComparisonError.js +20 -0
  89. package/dist/src/ui/scan/printComparisonError.js.map +1 -0
  90. package/dist/src/ui/scan/printHeader.d.ts +7 -0
  91. package/dist/src/ui/scan/printHeader.d.ts.map +1 -0
  92. package/dist/src/ui/scan/printHeader.js +16 -0
  93. package/dist/src/ui/scan/printHeader.js.map +1 -0
  94. package/dist/src/ui/scan/printMissing.d.ts +13 -0
  95. package/dist/src/ui/scan/printMissing.d.ts.map +1 -0
  96. package/dist/src/ui/scan/printMissing.js +43 -0
  97. package/dist/src/ui/scan/printMissing.js.map +1 -0
  98. package/dist/src/ui/scan/printMissingExample.d.ts +9 -0
  99. package/dist/src/ui/scan/printMissingExample.d.ts.map +1 -0
  100. package/dist/src/ui/scan/printMissingExample.js +27 -0
  101. package/dist/src/ui/scan/printMissingExample.js.map +1 -0
  102. package/dist/src/ui/scan/printSecrets.d.ts +14 -0
  103. package/dist/src/ui/scan/printSecrets.d.ts.map +1 -0
  104. package/dist/src/ui/scan/printSecrets.js +29 -0
  105. package/dist/src/ui/scan/printSecrets.js.map +1 -0
  106. package/dist/src/ui/scan/printStats.d.ts +13 -0
  107. package/dist/src/ui/scan/printStats.d.ts.map +1 -0
  108. package/dist/src/ui/scan/printStats.js +17 -0
  109. package/dist/src/ui/scan/printStats.js.map +1 -0
  110. package/dist/src/ui/scan/printUniqueVariables.d.ts +7 -0
  111. package/dist/src/ui/scan/printUniqueVariables.d.ts.map +1 -0
  112. package/dist/src/ui/scan/printUniqueVariables.js +14 -0
  113. package/dist/src/ui/scan/printUniqueVariables.js.map +1 -0
  114. package/dist/src/ui/scan/printUnused.d.ts +10 -0
  115. package/dist/src/ui/scan/printUnused.d.ts.map +1 -0
  116. package/dist/src/ui/scan/printUnused.js +22 -0
  117. package/dist/src/ui/scan/printUnused.js.map +1 -0
  118. package/dist/src/ui/scan/printVariables.d.ts +10 -0
  119. package/dist/src/ui/scan/printVariables.d.ts.map +1 -0
  120. package/dist/src/ui/scan/printVariables.js +37 -0
  121. package/dist/src/ui/scan/printVariables.js.map +1 -0
  122. package/dist/src/ui/shared/printAutoFix.d.ts +16 -0
  123. package/dist/src/ui/shared/printAutoFix.d.ts.map +1 -0
  124. package/dist/src/ui/shared/printAutoFix.js +34 -0
  125. package/dist/src/ui/shared/printAutoFix.js.map +1 -0
  126. package/dist/src/ui/shared/printDuplicates.d.ts +17 -0
  127. package/dist/src/ui/shared/printDuplicates.d.ts.map +1 -0
  128. package/dist/src/ui/shared/printDuplicates.js +25 -0
  129. package/dist/src/ui/shared/printDuplicates.js.map +1 -0
  130. package/dist/src/ui/shared/printFixTips.d.ts +11 -0
  131. package/dist/src/ui/shared/printFixTips.d.ts.map +1 -0
  132. package/dist/src/ui/shared/printFixTips.js +46 -0
  133. package/dist/src/ui/shared/printFixTips.js.map +1 -0
  134. package/dist/src/ui/shared/printGitignore.d.ts +13 -0
  135. package/dist/src/ui/shared/printGitignore.d.ts.map +1 -0
  136. package/dist/src/ui/shared/printGitignore.js +22 -0
  137. package/dist/src/ui/shared/printGitignore.js.map +1 -0
  138. package/dist/src/ui/shared/printOptionErrors.d.ts +17 -0
  139. package/dist/src/ui/shared/printOptionErrors.d.ts.map +1 -0
  140. package/dist/src/ui/shared/printOptionErrors.js +27 -0
  141. package/dist/src/ui/shared/printOptionErrors.js.map +1 -0
  142. package/dist/src/ui/shared/printStrictModeError.d.ts +16 -0
  143. package/dist/src/ui/shared/printStrictModeError.d.ts.map +1 -0
  144. package/dist/src/ui/shared/printStrictModeError.js +29 -0
  145. package/dist/src/ui/shared/printStrictModeError.js.map +1 -0
  146. package/dist/src/ui/shared/printSuccess.d.ts +11 -0
  147. package/dist/src/ui/shared/printSuccess.d.ts.map +1 -0
  148. package/dist/src/ui/shared/printSuccess.js +27 -0
  149. package/dist/src/ui/shared/printSuccess.js.map +1 -0
  150. package/dist/src/ui/shared/setupGlobalConfig.d.ts +7 -0
  151. package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -0
  152. package/dist/src/ui/shared/setupGlobalConfig.js +12 -0
  153. package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -0
  154. package/package.json +1 -1
@@ -1,23 +1,32 @@
1
1
  import fs from 'fs';
2
+ import path from 'path';
3
+ import { isEnvIgnoredByGit, isGitRepo, findGitRoot } from '../services/git.js';
2
4
  /**
3
5
  * Applies fixes to the .env and .env.example files based on the detected issues.
4
- * @param envPath - The path to the .env file.
5
- * @param examplePath - The path to the .env.example file.
6
- * @param missingKeys - The list of missing keys to add.
7
- * @param duplicateKeys - The list of duplicate keys to remove.
8
- * @returns An object indicating whether changes were made and details of the changes.
6
+ *
7
+ * This function will:
8
+ * - Remove duplicate keys from .env (keeping the last occurrence)
9
+ * - Add missing keys to .env with empty values
10
+ * - Add missing keys to .env.example (if not already present)
11
+ * - Ensure .env is ignored in .gitignore (if in a git repo and ensureGitignore is true)
12
+ *
13
+ * @param options - Fix options including file paths and keys to fix
14
+ * @returns An object indicating whether changes were made and details of the changes
9
15
  */
10
- export function applyFixes({ envPath, examplePath, missingKeys, duplicateKeys, }) {
16
+ export function applyFixes(options) {
17
+ const { envPath, examplePath, missingKeys, duplicateKeys, ensureGitignore } = options;
11
18
  const result = {
12
19
  removedDuplicates: [],
13
20
  addedEnv: [],
14
21
  addedExample: [],
22
+ gitignoreUpdated: false,
15
23
  };
16
24
  // --- Remove duplicates ---
17
25
  if (duplicateKeys.length) {
18
26
  const lines = fs.readFileSync(envPath, 'utf-8').split('\n');
19
27
  const seen = new Set();
20
28
  const newLines = [];
29
+ // Process from bottom to top, keeping last occurrence
21
30
  for (let i = lines.length - 1; i >= 0; i--) {
22
31
  const line = lines[i];
23
32
  if (line === undefined)
@@ -27,14 +36,14 @@ export function applyFixes({ envPath, examplePath, missingKeys, duplicateKeys, }
27
36
  const key = match[1] || '';
28
37
  if (duplicateKeys.includes(key)) {
29
38
  if (seen.has(key))
30
- continue; // skip duplicate
39
+ continue; // Skip duplicate
31
40
  seen.add(key);
32
41
  }
33
42
  }
34
43
  newLines.unshift(line);
35
44
  }
36
45
  fs.writeFileSync(envPath, newLines.join('\n'));
37
- result.removedDuplicates = duplicateKeys; // save all dupe keys
46
+ result.removedDuplicates = duplicateKeys;
38
47
  }
39
48
  // --- Add missing keys to .env ---
40
49
  if (missingKeys.length) {
@@ -44,7 +53,7 @@ export function applyFixes({ envPath, examplePath, missingKeys, duplicateKeys, }
44
53
  missingKeys.map((k) => `${k}=`).join('\n') +
45
54
  '\n';
46
55
  fs.writeFileSync(envPath, newContent);
47
- result.addedEnv = missingKeys; // save all missing keys
56
+ result.addedEnv = missingKeys;
48
57
  }
49
58
  // --- Add missing keys to .env.example ---
50
59
  if (examplePath && missingKeys.length) {
@@ -60,12 +69,62 @@ export function applyFixes({ envPath, examplePath, missingKeys, duplicateKeys, }
60
69
  newExampleKeys.join('\n') +
61
70
  '\n';
62
71
  fs.writeFileSync(examplePath, newExContent);
63
- result.addedExample = newExampleKeys; // save all keys actually added
72
+ result.addedExample = newExampleKeys;
64
73
  }
65
74
  }
75
+ // --- Ensure .env is ignored in .gitignore ---
76
+ if (ensureGitignore) {
77
+ result.gitignoreUpdated = updateGitignoreForEnv(envPath);
78
+ }
66
79
  const changed = result.removedDuplicates.length > 0 ||
67
80
  result.addedEnv.length > 0 ||
68
- result.addedExample.length > 0;
81
+ result.addedExample.length > 0 ||
82
+ result.gitignoreUpdated;
69
83
  return { changed, result };
70
84
  }
85
+ /**
86
+ * Ensures .env patterns are present in .gitignore at the git repository root.
87
+ * This is a best-effort operation and will not throw errors.
88
+ *
89
+ * @param envPath - Path to the .env file to check gitignore for
90
+ * @returns true if .gitignore was updated, false otherwise
91
+ */
92
+ function updateGitignoreForEnv(envPath) {
93
+ try {
94
+ const startDir = path.dirname(envPath);
95
+ const gitRoot = findGitRoot(startDir);
96
+ if (!gitRoot || !isGitRepo(gitRoot)) {
97
+ return false;
98
+ }
99
+ const gitignorePath = path.join(gitRoot, '.gitignore');
100
+ const envFileName = path.basename(envPath);
101
+ const ignored = isEnvIgnoredByGit({ cwd: gitRoot, envFile: envFileName });
102
+ // Already properly ignored
103
+ if (ignored === true) {
104
+ return false;
105
+ }
106
+ // Need to add patterns
107
+ const patterns = ['.env', '.env.*'];
108
+ if (fs.existsSync(gitignorePath)) {
109
+ const current = fs.readFileSync(gitignorePath, 'utf8');
110
+ const existingLines = current.split(/\r?\n/).map((l) => l.trim());
111
+ const missingPatterns = patterns.filter((pattern) => !existingLines.includes(pattern));
112
+ if (missingPatterns.length) {
113
+ const toAppend = `${current.endsWith('\n') ? '' : '\n'}${missingPatterns.join('\n')}\n`;
114
+ fs.appendFileSync(gitignorePath, toAppend);
115
+ return true;
116
+ }
117
+ }
118
+ else {
119
+ // Create new .gitignore
120
+ fs.writeFileSync(gitignorePath, patterns.join('\n') + '\n');
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ catch {
126
+ // Non-blocking: ignore errors
127
+ return false;
128
+ }
129
+ }
71
130
  //# sourceMappingURL=fixEnv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixEnv.js","sourceRoot":"","sources":["../../../src/core/fixEnv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixEnv.js","sourceRoot":"","sources":["../../../src/core/fixEnv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Filtered } from '../../config/types.js';
2
+ /**
3
+ * Checks if all filtered comparison results are okay (i.e., no issues found).
4
+ * @param filtered - The filtered comparison results.
5
+ * @returns True if all checks pass, false otherwise.
6
+ */
7
+ export declare function isAllOk(filtered: Filtered): boolean;
8
+ //# sourceMappingURL=isAllOk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isAllOk.d.ts","sourceRoot":"","sources":["../../../../src/core/helpers/isAllOk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAUnD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Checks if all filtered comparison results are okay (i.e., no issues found).
3
+ * @param filtered - The filtered comparison results.
4
+ * @returns True if all checks pass, false otherwise.
5
+ */
6
+ export function isAllOk(filtered) {
7
+ return (filtered.missing.length === 0 &&
8
+ filtered.extra?.length === 0 &&
9
+ filtered.empty?.length === 0 &&
10
+ filtered.duplicatesEnv.length === 0 &&
11
+ filtered.duplicatesEx.length === 0 &&
12
+ filtered.mismatches?.length === 0 &&
13
+ !filtered.gitignoreIssue);
14
+ }
15
+ //# sourceMappingURL=isAllOk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isAllOk.js","sourceRoot":"","sources":["../../../../src/core/helpers/isAllOk.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,QAAkB;IACxC,OAAO,CACL,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC;QAC5B,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QACnC,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC;QACjC,CAAC,QAAQ,CAAC,cAAc,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { CompareJsonEntry } from '../../config/types.js';
2
+ import type { Filtered } from '../../config/types.js';
3
+ export interface Totals {
4
+ missing: number;
5
+ extra: number;
6
+ empty: number;
7
+ mismatch: number;
8
+ duplicate: number;
9
+ gitignore: number;
10
+ }
11
+ /**
12
+ * Update totals and entry fields based on filtered issues.
13
+ * Returns true if any issue requires exitWithError.
14
+ * @param filtered filtered issues
15
+ * @param totals overall totals
16
+ * @param entry current entry to update
17
+ * @returns exitWithError
18
+ */
19
+ export declare function updateTotals(filtered: Filtered, totals: Totals, entry: CompareJsonEntry): boolean;
20
+ //# sourceMappingURL=updateTotals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTotals.d.ts","sourceRoot":"","sources":["../../../../src/core/helpers/updateTotals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAkCT"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Update totals and entry fields based on filtered issues.
3
+ * Returns true if any issue requires exitWithError.
4
+ * @param filtered filtered issues
5
+ * @param totals overall totals
6
+ * @param entry current entry to update
7
+ * @returns exitWithError
8
+ */
9
+ export function updateTotals(filtered, totals, entry) {
10
+ let exitWithError = false;
11
+ if (filtered.missing.length) {
12
+ entry.missing = filtered.missing;
13
+ totals.missing += filtered.missing.length;
14
+ exitWithError = true;
15
+ }
16
+ if (filtered.extra?.length) {
17
+ entry.extra = filtered.extra;
18
+ totals.extra += filtered.extra.length;
19
+ }
20
+ if (filtered.empty?.length) {
21
+ entry.empty = filtered.empty;
22
+ totals.empty += filtered.empty.length;
23
+ }
24
+ if (filtered.mismatches?.length) {
25
+ entry.valueMismatches = filtered.mismatches;
26
+ totals.mismatch += filtered.mismatches.length;
27
+ }
28
+ if (filtered.duplicatesEnv.length || filtered.duplicatesEx.length) {
29
+ totals.duplicate +=
30
+ filtered.duplicatesEnv.length + filtered.duplicatesEx.length;
31
+ }
32
+ if (filtered.gitignoreIssue) {
33
+ totals.gitignore += 1;
34
+ }
35
+ return exitWithError;
36
+ }
37
+ //# sourceMappingURL=updateTotals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTotals.js","sourceRoot":"","sources":["../../../../src/core/helpers/updateTotals.ts"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,MAAc,EACd,KAAuB;IAEvB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC5C,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,CAAC,SAAS;YACd,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;IACjE,CAAC;IAED,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -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":"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"}
@@ -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;AAqHF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,aAAa,EAAE,CAmGjB"}
@@ -27,6 +27,7 @@ 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
30
31
  * @param line - The line to check
31
32
  * @returns True if the line should be ignored
32
33
  */
@@ -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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"}
@@ -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"}