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,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":"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"}
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"}
@@ -1,5 +1,18 @@
1
- import chalk from 'chalk';
2
- import { warnIfEnvNotIgnored, isEnvIgnoredByGit } from './git.js';
1
+ import path from 'path';
2
+ import { checkGitignoreStatus } from './git.js';
3
+ import { printGitignoreWarning } from '../ui/shared/printGitignore.js';
4
+ import { printHeader } from '../ui/scan/printHeader.js';
5
+ import { printStats } from '../ui/scan/printStats.js';
6
+ import { printUniqueVariables } from '../ui/scan/printUniqueVariables.js';
7
+ import { printVariables } from '../ui/scan/printVariables.js';
8
+ import { printMissing } from '../ui/scan/printMissing.js';
9
+ import { printUnused } from '../ui/scan/printUnused.js';
10
+ import { printDuplicates } from '../ui/shared/printDuplicates.js';
11
+ import { printSecrets } from '../ui/scan/printSecrets.js';
12
+ import { printSuccess } from '../ui/shared/printSuccess.js';
13
+ import { printStrictModeError } from '../ui/shared/printStrictModeError.js';
14
+ import { printFixTips } from '../ui/shared/printFixTips.js';
15
+ import { printAutoFix } from '../ui/shared/printAutoFix.js';
3
16
  /**
4
17
  * Outputs the scan results to the console.
5
18
  * @param scanResult - The result of the scan.
@@ -7,160 +20,74 @@ import { warnIfEnvNotIgnored, isEnvIgnoredByGit } from './git.js';
7
20
  * @param comparedAgainst - The file being compared against.
8
21
  * @returns An object indicating whether to exit with an error.
9
22
  */
10
- export function outputToConsole(scanResult, opts, comparedAgainst) {
23
+ export function outputToConsole(scanResult, opts, comparedAgainst, fixContext) {
11
24
  let exitWithError = false;
12
- // Show what we're comparing against
13
- if (comparedAgainst) {
14
- console.log(chalk.magenta(`📋 Comparing codebase usage against: ${comparedAgainst}`));
15
- console.log();
16
- }
25
+ // Determine if output should be in JSON format
26
+ const isJson = opts.json ?? false;
27
+ printHeader(comparedAgainst);
17
28
  // Show stats if requested
18
- if (opts.showStats) {
19
- console.log(chalk.magenta('📊 Scan Statistics:'));
20
- console.log(chalk.magenta.dim(` Files scanned: ${scanResult.stats.filesScanned}`));
21
- console.log(chalk.magenta.dim(` Total usages found: ${scanResult.stats.totalUsages}`));
22
- console.log(chalk.magenta.dim(` Unique variables: ${scanResult.stats.uniqueVariables}`));
23
- console.log();
24
- }
25
- // Always show found variables when not comparing or when no missing variables
29
+ printStats(scanResult.stats, isJson, opts.showStats ?? true);
30
+ // Show used variables if any found
26
31
  if (scanResult.stats.uniqueVariables > 0) {
27
- console.log(chalk.blue(`🌐 Found ${scanResult.stats.uniqueVariables} unique environment variables in use`));
28
- console.log();
29
- // List all variables found (if any)
30
- if (scanResult.stats.uniqueVariables > 0) {
31
- // Group by variable to get unique list
32
- const variableUsages = scanResult.used.reduce((acc, usage) => {
33
- if (!acc[usage.variable]) {
34
- acc[usage.variable] = [];
35
- }
36
- acc[usage.variable].push(usage);
37
- return acc;
38
- }, {});
39
- // Display each unique variable
40
- for (const [variable, usages] of Object.entries(variableUsages)) {
41
- console.log(chalk.blue(` ${variable}`));
42
- // Show usage details if stats are enabled
43
- if (opts.showStats) {
44
- const displayUsages = usages.slice(0, 2);
45
- displayUsages.forEach((usage) => {
46
- console.log(chalk.blue.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
47
- });
48
- if (usages.length > 2) {
49
- console.log(chalk.gray(` ... and ${usages.length - 2} more locations`));
50
- }
51
- }
52
- }
53
- console.log();
54
- }
32
+ // Show unique variables found
33
+ printUniqueVariables(scanResult.stats.uniqueVariables);
34
+ // Print used variables with locations
35
+ printVariables(scanResult.used, opts.showStats ?? false, isJson);
55
36
  }
56
37
  // Missing variables (used in code but not in env file)
57
- if (scanResult.missing.length > 0) {
38
+ if (printMissing(scanResult.missing, scanResult.used, comparedAgainst, opts.isCiMode ?? false, isJson)) {
58
39
  exitWithError = true;
59
- const fileType = comparedAgainst || 'environment file';
60
- console.log(chalk.red(`❌ Missing in ${fileType}:`));
61
- const grouped = scanResult.missing.reduce((acc, variable) => {
62
- const usages = scanResult.used.filter((u) => u.variable === variable);
63
- acc[variable] = usages;
64
- return acc;
65
- }, {});
66
- for (const [variable, usages] of Object.entries(grouped)) {
67
- console.log(chalk.red(` - ${variable}`));
68
- // Show first few usages
69
- const maxShow = 3;
70
- usages.slice(0, maxShow).forEach((usage) => {
71
- console.log(chalk.red.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
72
- });
73
- if (usages.length > maxShow) {
74
- console.log(chalk.gray(` ... and ${usages.length - maxShow} more locations`));
75
- }
76
- }
77
- console.log();
78
- // CI mode specific message
79
- if (opts.isCiMode) {
80
- console.log(chalk.red(`💥 Found ${scanResult.missing.length} missing environment variable(s).`));
81
- console.log(chalk.red(` Add these variables to ${comparedAgainst || 'your environment file'} to fix this error.`));
82
- console.log();
83
- }
84
- }
85
- // Unused variables (in env file but not used in code)
86
- if (opts.showUnused && scanResult.unused.length > 0) {
87
- const fileType = comparedAgainst || 'environment file';
88
- console.log(chalk.yellow(`⚠️ Unused in codebase (defined in ${fileType}):`));
89
- scanResult.unused.forEach((variable) => {
90
- console.log(chalk.yellow(` - ${variable}`));
91
- });
92
- console.log();
93
- }
94
- // Show duplicates if found - NOW AFTER UNUSED VARIABLES
95
- if (scanResult.duplicates?.env && scanResult.duplicates.env.length > 0) {
96
- console.log(chalk.yellow(`⚠️ Duplicate keys in ${comparedAgainst} (last occurrence wins):`));
97
- scanResult.duplicates.env.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
98
- console.log();
99
- }
100
- if (scanResult.duplicates?.example &&
101
- scanResult.duplicates.example.length > 0) {
102
- console.log(chalk.yellow('⚠️ Duplicate keys in example file (last occurrence wins):'));
103
- scanResult.duplicates.example.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
104
- console.log();
105
- }
106
- if (scanResult.secrets && scanResult.secrets.length > 0) {
107
- console.log(chalk.yellow('🔒 Potential secrets detected in codebase:'));
108
- const byFile = new Map();
109
- for (const f of scanResult.secrets) {
110
- if (!byFile.has(f.file))
111
- byFile.set(f.file, []);
112
- byFile.get(f.file).push(f);
113
- }
114
- for (const [file, findings] of byFile) {
115
- console.log(chalk.bold(` ${file}`));
116
- for (const f of findings) {
117
- console.log(chalk.yellow(` - Line ${f.line}: ${f.message}\n ${chalk.dim(f.snippet)}`));
118
- }
119
- }
120
- console.log();
121
40
  }
41
+ // Unused
42
+ printUnused(scanResult.unused, comparedAgainst, opts.showUnused ?? false, isJson);
43
+ // Duplicates
44
+ printDuplicates(comparedAgainst || '.env', 'example file', scanResult.duplicates?.env ?? [], scanResult.duplicates?.example ?? [], isJson);
45
+ // Print potential secrets found
46
+ printSecrets(scanResult.secrets ?? [], isJson);
122
47
  // Success message for env file comparison
123
48
  if (comparedAgainst &&
124
49
  scanResult.missing.length === 0 &&
125
- scanResult.secrets.length > 0 &&
50
+ (scanResult.secrets?.length ?? 0) === 0 &&
126
51
  scanResult.used.length > 0) {
127
- console.log(chalk.green(`✅ All used environment variables are defined in ${comparedAgainst}`));
128
- if (opts.showUnused && scanResult.unused.length === 0) {
129
- console.log(chalk.green('✅ No unused environment variables found'));
130
- }
131
- console.log();
52
+ printSuccess(isJson, 'scan', comparedAgainst, scanResult.unused, opts.showUnused ?? true);
132
53
  }
133
- let envNotIgnored = false;
134
- if (!opts.json) {
135
- warnIfEnvNotIgnored({ cwd: opts.cwd, envFile: '.env' });
136
- const ignored = isEnvIgnoredByGit({ cwd: opts.cwd, envFile: '.env' });
137
- if (ignored === false || ignored === null) {
138
- envNotIgnored = true;
139
- }
54
+ // Gitignore check
55
+ const gitignoreIssue = checkGitignoreStatus({
56
+ cwd: opts.cwd,
57
+ envFile: '.env',
58
+ });
59
+ if (gitignoreIssue && !opts.json) {
60
+ printGitignoreWarning({
61
+ envFile: '.env',
62
+ reason: gitignoreIssue.reason,
63
+ });
140
64
  }
65
+ const hasGitignoreIssue = gitignoreIssue !== null;
141
66
  if (opts.strict) {
142
- const hasWarnings = scanResult.unused.length > 0 ||
143
- (scanResult.duplicates?.env?.length ?? 0) > 0 ||
144
- (scanResult.duplicates?.example?.length ?? 0) > 0 ||
145
- (scanResult.secrets?.length ?? 0) > 0 ||
146
- envNotIgnored;
147
- if (hasWarnings) {
67
+ const exit = printStrictModeError({
68
+ unused: scanResult.unused.length,
69
+ duplicatesEnv: scanResult.duplicates?.env?.length ?? 0,
70
+ duplicatesEx: scanResult.duplicates?.example?.length ?? 0,
71
+ secrets: scanResult.secrets?.length ?? 0,
72
+ hasGitignoreIssue,
73
+ }, isJson);
74
+ if (exit)
148
75
  exitWithError = true;
149
- const warnings = [];
150
- if (scanResult.unused.length > 0)
151
- warnings.push('unused variables');
152
- if ((scanResult.duplicates?.env?.length ?? 0) > 0)
153
- warnings.push('duplicate keys in env');
154
- if ((scanResult.duplicates?.example?.length ?? 0) > 0)
155
- warnings.push('duplicate keys in example');
156
- if ((scanResult.secrets?.length ?? 0) > 0)
157
- warnings.push('potential secrets');
158
- if (envNotIgnored)
159
- warnings.push('.env not ignored by git');
160
- console.log(chalk.red(`💥 Strict mode: Error on warnings → ${warnings.join(', ')}`));
161
- console.log();
162
- }
163
76
  }
77
+ if (opts.fix && fixContext) {
78
+ printAutoFix(fixContext.fixApplied, {
79
+ removedDuplicates: fixContext.removedDuplicates,
80
+ addedEnv: fixContext.addedEnv,
81
+ addedExample: opts.examplePath ? fixContext.addedEnv : [],
82
+ }, comparedAgainst || '.env', opts.examplePath ? path.basename(opts.examplePath) : 'example file', isJson, fixContext.gitignoreUpdated);
83
+ }
84
+ // Filtered results for fix tips
85
+ printFixTips({
86
+ missing: scanResult.missing,
87
+ duplicatesEnv: scanResult.duplicates?.env ?? [],
88
+ duplicatesEx: scanResult.duplicates?.example ?? [],
89
+ gitignoreIssue: hasGitignoreIssue ? { reason: 'not-ignored' } : null,
90
+ }, hasGitignoreIssue, isJson, opts.fix ?? false);
164
91
  return { exitWithError };
165
92
  }
166
93
  //# sourceMappingURL=scanOutputToConsole.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanOutputToConsole.js","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanOutputToConsole.js","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface AutoFixResult {
2
+ removedDuplicates: string[];
3
+ addedEnv: string[];
4
+ addedExample: string[];
5
+ }
6
+ /**
7
+ * Prints the result of the auto-fix operation.
8
+ * @param changed - Whether any changes were made.
9
+ * @param result - The result of the auto-fix operation.
10
+ * @param envName - The name of the environment file.
11
+ * @param exampleName - The name of the example file.
12
+ * @param json - Whether to output in JSON format.
13
+ * @returns void
14
+ */
15
+ export declare function printAutoFix(changed: boolean, result: AutoFixResult, envName: string, exampleName: string, json: boolean, gitignoreUpdated: boolean): void;
16
+ //# sourceMappingURL=printAutoFix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printAutoFix.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printAutoFix.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,OAAO,GACxB,IAAI,CAiCN"}
@@ -0,0 +1,34 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Prints the result of the auto-fix operation.
4
+ * @param changed - Whether any changes were made.
5
+ * @param result - The result of the auto-fix operation.
6
+ * @param envName - The name of the environment file.
7
+ * @param exampleName - The name of the example file.
8
+ * @param json - Whether to output in JSON format.
9
+ * @returns void
10
+ */
11
+ export function printAutoFix(changed, result, envName, exampleName, json, gitignoreUpdated) {
12
+ if (json)
13
+ return;
14
+ if (changed) {
15
+ console.log(chalk.green('✅ Auto-fix applied:'));
16
+ if (result.removedDuplicates.length) {
17
+ console.log(chalk.green(` - Removed ${result.removedDuplicates.length} duplicate keys from ${envName}: ${result.removedDuplicates.join(', ')}`));
18
+ }
19
+ if (result.addedEnv.length) {
20
+ console.log(chalk.green(` - Added ${result.addedEnv.length} missing keys to ${envName}: ${result.addedEnv.join(', ')}`));
21
+ }
22
+ if (result.addedExample.length) {
23
+ console.log(chalk.green(` - Synced ${result.addedExample.length} keys to ${exampleName}: ${result.addedExample.join(', ')}`));
24
+ }
25
+ if (gitignoreUpdated) {
26
+ console.log(chalk.green(` - Added ${envName} to .gitignore`));
27
+ }
28
+ }
29
+ else {
30
+ console.log(chalk.green('✅ Auto-fix applied: no changes needed.'));
31
+ }
32
+ console.log();
33
+ }
34
+ //# sourceMappingURL=printAutoFix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printAutoFix.js","sourceRoot":"","sources":["../../../../src/ui/compare/printAutoFix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,MAAqB,EACrB,OAAe,EACf,WAAmB,EACnB,IAAa,EACb,gBAAyB;IAEzB,IAAI,IAAI;QAAE,OAAO;IAEjB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,eAAe,MAAM,CAAC,iBAAiB,CAAC,MAAM,wBAAwB,OAAO,KAAK,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxH,CACF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,oBAAoB,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CACF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,cAAc,MAAM,CAAC,YAAY,CAAC,MAAM,YAAY,WAAW,KAAK,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrG,CACF,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,OAAO,gBAAgB,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface AutoFixResult {
2
+ removedDuplicates: string[];
3
+ addedEnv: string[];
4
+ addedExample: string[];
5
+ }
6
+ export declare function printAutoFixApplied(changed: boolean, result: AutoFixResult, envName: string, exampleName: string, json: boolean): void;
7
+ //# sourceMappingURL=printAutoFixApplied.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printAutoFixApplied.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printAutoFixApplied.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,GACZ,IAAI,CA8BN"}
@@ -0,0 +1,22 @@
1
+ import chalk from 'chalk';
2
+ export function printAutoFixApplied(changed, result, envName, exampleName, json) {
3
+ if (json)
4
+ return;
5
+ if (changed) {
6
+ console.log(chalk.green('✅ Auto-fix applied:'));
7
+ if (result.removedDuplicates.length) {
8
+ console.log(chalk.green(` - Removed ${result.removedDuplicates.length} duplicate keys from ${envName}: ${result.removedDuplicates.join(', ')}`));
9
+ }
10
+ if (result.addedEnv.length) {
11
+ console.log(chalk.green(` - Added ${result.addedEnv.length} missing keys to ${envName}: ${result.addedEnv.join(', ')}`));
12
+ }
13
+ if (result.addedExample.length) {
14
+ console.log(chalk.green(` - Synced ${result.addedExample.length} keys to ${exampleName}: ${result.addedExample.join(', ')}`));
15
+ }
16
+ }
17
+ else {
18
+ console.log(chalk.green('✅ Auto-fix applied: no changes needed.'));
19
+ }
20
+ console.log();
21
+ }
22
+ //# sourceMappingURL=printAutoFixApplied.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printAutoFixApplied.js","sourceRoot":"","sources":["../../../../src/ui/compare/printAutoFixApplied.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,MAAqB,EACrB,OAAe,EACf,WAAmB,EACnB,IAAa;IAEb,IAAI,IAAI;QAAE,OAAO;IAEjB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,eAAe,MAAM,CAAC,iBAAiB,CAAC,MAAM,wBAAwB,OAAO,KAAK,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxH,CACF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,oBAAoB,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CACF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,cAAc,MAAM,CAAC,YAAY,CAAC,MAAM,YAAY,WAAW,KAAK,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrG,CACF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Prints duplicate keys found in the environment and example files.
3
+ * @param envName The name of the environment file.
4
+ * @param exampleName The name of the example file.
5
+ * @param dEnv Array of duplicate keys in the environment file with their counts.
6
+ * @param dEx Array of duplicate keys in the example file with their counts.
7
+ * @param json Whether to output in JSON format.
8
+ * @returns void
9
+ */
10
+ export declare function printDuplicates(envName: string, exampleName: string, dEnv: Array<{
11
+ key: string;
12
+ count: number;
13
+ }>, dEx: Array<{
14
+ key: string;
15
+ count: number;
16
+ }>, json: boolean): void;
17
+ //# sourceMappingURL=printDuplicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printDuplicates.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printDuplicates.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3C,GAAG,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1C,IAAI,EAAE,OAAO,QAuBd"}
@@ -0,0 +1,25 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Prints duplicate keys found in the environment and example files.
4
+ * @param envName The name of the environment file.
5
+ * @param exampleName The name of the example file.
6
+ * @param dEnv Array of duplicate keys in the environment file with their counts.
7
+ * @param dEx Array of duplicate keys in the example file with their counts.
8
+ * @param json Whether to output in JSON format.
9
+ * @returns void
10
+ */
11
+ export function printDuplicates(envName, exampleName, dEnv, dEx, json) {
12
+ if (json)
13
+ return;
14
+ if (dEnv.length) {
15
+ console.log(chalk.yellow(`⚠️ Duplicate keys in ${envName} (last occurrence wins):`));
16
+ dEnv.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
17
+ console.log();
18
+ }
19
+ if (dEx.length) {
20
+ console.log(chalk.yellow(`⚠️ Duplicate keys in ${exampleName} (last occurrence wins):`));
21
+ dEx.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
22
+ console.log();
23
+ }
24
+ }
25
+ //# sourceMappingURL=printDuplicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printDuplicates.js","sourceRoot":"","sources":["../../../../src/ui/compare/printDuplicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,WAAmB,EACnB,IAA2C,EAC3C,GAA0C,EAC1C,IAAa;IAEb,IAAI,IAAI;QAAE,OAAO;IACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,yBAAyB,OAAO,0BAA0B,CAAC,CACzE,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,KAAK,eAAe,CAAC,CAAC,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yBAAyB,WAAW,0BAA0B,CAC/D,CACF,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,KAAK,eAAe,CAAC,CAAC,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Prints error messages if env/example files are missing.
3
+ * @param envExists Whether the env file exists
4
+ * @param exExists Whether the example file exists
5
+ * @param envFlag The path to the env file
6
+ * @param exampleFlag The path to the example file
7
+ */
8
+ export declare function printErrorNotFound(envExists: boolean, exExists: boolean, envFlag: string, exampleFlag: string): void;
9
+ //# sourceMappingURL=printErrorNotFound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printErrorNotFound.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printErrorNotFound.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,IAAI,CAaN"}
@@ -0,0 +1,18 @@
1
+ import chalk from 'chalk';
2
+ import path from 'path';
3
+ /**
4
+ * Prints error messages if env/example files are missing.
5
+ * @param envExists Whether the env file exists
6
+ * @param exExists Whether the example file exists
7
+ * @param envFlag The path to the env file
8
+ * @param exampleFlag The path to the example file
9
+ */
10
+ export function printErrorNotFound(envExists, exExists, envFlag, exampleFlag) {
11
+ if (!envExists) {
12
+ console.error(chalk.red(`❌ Error: --env file not found: ${path.basename(envFlag)}`));
13
+ }
14
+ if (!exExists) {
15
+ console.error(chalk.red(`❌ Error: --example file not found: ${path.basename(exampleFlag)}`));
16
+ }
17
+ }
18
+ //# sourceMappingURL=printErrorNotFound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printErrorNotFound.js","sourceRoot":"","sources":["../../../../src/ui/compare/printErrorNotFound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAkB,EAClB,QAAiB,EACjB,OAAe,EACf,WAAmB;IAEnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,sCAAsC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CACnE,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type Filtered } from '../../config/types.js';
2
+ /**
3
+ * Prints tips for fixing issues found during the comparison.
4
+ * @param filtered The filtered comparison results.
5
+ * @param envNotIgnored Whether the .env file is not ignored by git.
6
+ * @param json Whether to output in JSON format.
7
+ * @param fix Whether to apply fixes.
8
+ * @returns void
9
+ */
10
+ export declare function printFixTips(filtered: Filtered, envNotIgnored: boolean, json: boolean, fix: boolean): void;
11
+ //# sourceMappingURL=printFixTips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printFixTips.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printFixTips.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,QA+Bb"}