dotenv-diff 2.2.6 → 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 (158) hide show
  1. package/README.md +11 -0
  2. package/dist/src/cli/run.d.ts.map +1 -1
  3. package/dist/src/cli/run.js +133 -102
  4. package/dist/src/cli/run.js.map +1 -1
  5. package/dist/src/commands/compare.d.ts +2 -20
  6. package/dist/src/commands/compare.d.ts.map +1 -1
  7. package/dist/src/commands/compare.js +107 -173
  8. package/dist/src/commands/compare.js.map +1 -1
  9. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  10. package/dist/src/commands/scanUsage.js +61 -182
  11. package/dist/src/commands/scanUsage.js.map +1 -1
  12. package/dist/src/config/loadConfig.d.ts +2 -0
  13. package/dist/src/config/loadConfig.d.ts.map +1 -0
  14. package/dist/src/config/options.d.ts.map +1 -1
  15. package/dist/src/config/options.js +42 -32
  16. package/dist/src/config/options.js.map +1 -1
  17. package/dist/src/config/types.d.ts +58 -0
  18. package/dist/src/config/types.d.ts.map +1 -1
  19. package/dist/src/core/fixEnv.d.ts +23 -15
  20. package/dist/src/core/fixEnv.d.ts.map +1 -1
  21. package/dist/src/core/fixEnv.js +70 -11
  22. package/dist/src/core/fixEnv.js.map +1 -1
  23. package/dist/src/core/helpers/isAllOk.d.ts +8 -0
  24. package/dist/src/core/helpers/isAllOk.d.ts.map +1 -0
  25. package/dist/src/core/helpers/isAllOk.js +15 -0
  26. package/dist/src/core/helpers/isAllOk.js.map +1 -0
  27. package/dist/src/core/helpers/updateTotals.d.ts +20 -0
  28. package/dist/src/core/helpers/updateTotals.d.ts.map +1 -0
  29. package/dist/src/core/helpers/updateTotals.js +37 -0
  30. package/dist/src/core/helpers/updateTotals.js.map +1 -0
  31. package/dist/src/core/processComparisonFile.d.ts +36 -0
  32. package/dist/src/core/processComparisonFile.d.ts.map +1 -0
  33. package/dist/src/core/processComparisonFile.js +124 -0
  34. package/dist/src/core/processComparisonFile.js.map +1 -0
  35. package/dist/src/core/secretDetectors.d.ts.map +1 -1
  36. package/dist/src/core/secretDetectors.js +13 -0
  37. package/dist/src/core/secretDetectors.js.map +1 -1
  38. package/dist/src/services/ensureFilesOrPrompt.d.ts +19 -0
  39. package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -0
  40. package/dist/src/services/ensureFilesOrPrompt.js +73 -0
  41. package/dist/src/services/ensureFilesOrPrompt.js.map +1 -0
  42. package/dist/src/services/git.d.ts +9 -0
  43. package/dist/src/services/git.d.ts.map +1 -1
  44. package/dist/src/services/git.js +46 -3
  45. package/dist/src/services/git.js.map +1 -1
  46. package/dist/src/services/scanOutputToConsole.d.ts +6 -1
  47. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
  48. package/dist/src/services/scanOutputToConsole.js +71 -112
  49. package/dist/src/services/scanOutputToConsole.js.map +1 -1
  50. package/dist/src/ui/compare/printAutoFix.d.ts +16 -0
  51. package/dist/src/ui/compare/printAutoFix.d.ts.map +1 -0
  52. package/dist/src/ui/compare/printAutoFix.js +34 -0
  53. package/dist/src/ui/compare/printAutoFix.js.map +1 -0
  54. package/dist/src/ui/compare/printAutoFixApplied.d.ts +7 -0
  55. package/dist/src/ui/compare/printAutoFixApplied.d.ts.map +1 -0
  56. package/dist/src/ui/compare/printAutoFixApplied.js +22 -0
  57. package/dist/src/ui/compare/printAutoFixApplied.js.map +1 -0
  58. package/dist/src/ui/compare/printDuplicates.d.ts +17 -0
  59. package/dist/src/ui/compare/printDuplicates.d.ts.map +1 -0
  60. package/dist/src/ui/compare/printDuplicates.js +25 -0
  61. package/dist/src/ui/compare/printDuplicates.js.map +1 -0
  62. package/dist/src/ui/compare/printErrorNotFound.d.ts +9 -0
  63. package/dist/src/ui/compare/printErrorNotFound.d.ts.map +1 -0
  64. package/dist/src/ui/compare/printErrorNotFound.js +18 -0
  65. package/dist/src/ui/compare/printErrorNotFound.js.map +1 -0
  66. package/dist/src/ui/compare/printFixTips.d.ts +11 -0
  67. package/dist/src/ui/compare/printFixTips.d.ts.map +1 -0
  68. package/dist/src/ui/compare/printFixTips.js +46 -0
  69. package/dist/src/ui/compare/printFixTips.js.map +1 -0
  70. package/dist/src/ui/compare/printHeader.d.ts +10 -0
  71. package/dist/src/ui/compare/printHeader.d.ts.map +1 -0
  72. package/dist/src/ui/compare/printHeader.js +20 -0
  73. package/dist/src/ui/compare/printHeader.js.map +1 -0
  74. package/dist/src/ui/compare/printIssues.d.ts +9 -0
  75. package/dist/src/ui/compare/printIssues.d.ts.map +1 -0
  76. package/dist/src/ui/compare/printIssues.js +34 -0
  77. package/dist/src/ui/compare/printIssues.js.map +1 -0
  78. package/dist/src/ui/compare/printPrompt.d.ts +11 -0
  79. package/dist/src/ui/compare/printPrompt.d.ts.map +1 -0
  80. package/dist/src/ui/compare/printPrompt.js +24 -0
  81. package/dist/src/ui/compare/printPrompt.js.map +1 -0
  82. package/dist/src/ui/compare/printStats.d.ts +19 -0
  83. package/dist/src/ui/compare/printStats.d.ts.map +1 -0
  84. package/dist/src/ui/compare/printStats.js +30 -0
  85. package/dist/src/ui/compare/printStats.js.map +1 -0
  86. package/dist/src/ui/compare/printSuccess.d.ts +11 -0
  87. package/dist/src/ui/compare/printSuccess.d.ts.map +1 -0
  88. package/dist/src/ui/compare/printSuccess.js +27 -0
  89. package/dist/src/ui/compare/printSuccess.js.map +1 -0
  90. package/dist/src/ui/scan/printComparisonError.d.ts +11 -0
  91. package/dist/src/ui/scan/printComparisonError.d.ts.map +1 -0
  92. package/dist/src/ui/scan/printComparisonError.js +20 -0
  93. package/dist/src/ui/scan/printComparisonError.js.map +1 -0
  94. package/dist/src/ui/scan/printHeader.d.ts +7 -0
  95. package/dist/src/ui/scan/printHeader.d.ts.map +1 -0
  96. package/dist/src/ui/scan/printHeader.js +16 -0
  97. package/dist/src/ui/scan/printHeader.js.map +1 -0
  98. package/dist/src/ui/scan/printMissing.d.ts +13 -0
  99. package/dist/src/ui/scan/printMissing.d.ts.map +1 -0
  100. package/dist/src/ui/scan/printMissing.js +43 -0
  101. package/dist/src/ui/scan/printMissing.js.map +1 -0
  102. package/dist/src/ui/scan/printMissingExample.d.ts +9 -0
  103. package/dist/src/ui/scan/printMissingExample.d.ts.map +1 -0
  104. package/dist/src/ui/scan/printMissingExample.js +27 -0
  105. package/dist/src/ui/scan/printMissingExample.js.map +1 -0
  106. package/dist/src/ui/scan/printSecrets.d.ts +14 -0
  107. package/dist/src/ui/scan/printSecrets.d.ts.map +1 -0
  108. package/dist/src/ui/scan/printSecrets.js +29 -0
  109. package/dist/src/ui/scan/printSecrets.js.map +1 -0
  110. package/dist/src/ui/scan/printStats.d.ts +13 -0
  111. package/dist/src/ui/scan/printStats.d.ts.map +1 -0
  112. package/dist/src/ui/scan/printStats.js +17 -0
  113. package/dist/src/ui/scan/printStats.js.map +1 -0
  114. package/dist/src/ui/scan/printUniqueVariables.d.ts +7 -0
  115. package/dist/src/ui/scan/printUniqueVariables.d.ts.map +1 -0
  116. package/dist/src/ui/scan/printUniqueVariables.js +14 -0
  117. package/dist/src/ui/scan/printUniqueVariables.js.map +1 -0
  118. package/dist/src/ui/scan/printUnused.d.ts +10 -0
  119. package/dist/src/ui/scan/printUnused.d.ts.map +1 -0
  120. package/dist/src/ui/scan/printUnused.js +22 -0
  121. package/dist/src/ui/scan/printUnused.js.map +1 -0
  122. package/dist/src/ui/scan/printVariables.d.ts +10 -0
  123. package/dist/src/ui/scan/printVariables.d.ts.map +1 -0
  124. package/dist/src/ui/scan/printVariables.js +37 -0
  125. package/dist/src/ui/scan/printVariables.js.map +1 -0
  126. package/dist/src/ui/shared/printAutoFix.d.ts +16 -0
  127. package/dist/src/ui/shared/printAutoFix.d.ts.map +1 -0
  128. package/dist/src/ui/shared/printAutoFix.js +34 -0
  129. package/dist/src/ui/shared/printAutoFix.js.map +1 -0
  130. package/dist/src/ui/shared/printDuplicates.d.ts +17 -0
  131. package/dist/src/ui/shared/printDuplicates.d.ts.map +1 -0
  132. package/dist/src/ui/shared/printDuplicates.js +25 -0
  133. package/dist/src/ui/shared/printDuplicates.js.map +1 -0
  134. package/dist/src/ui/shared/printFixTips.d.ts +11 -0
  135. package/dist/src/ui/shared/printFixTips.d.ts.map +1 -0
  136. package/dist/src/ui/shared/printFixTips.js +46 -0
  137. package/dist/src/ui/shared/printFixTips.js.map +1 -0
  138. package/dist/src/ui/shared/printGitignore.d.ts +13 -0
  139. package/dist/src/ui/shared/printGitignore.d.ts.map +1 -0
  140. package/dist/src/ui/shared/printGitignore.js +22 -0
  141. package/dist/src/ui/shared/printGitignore.js.map +1 -0
  142. package/dist/src/ui/shared/printOptionErrors.d.ts +17 -0
  143. package/dist/src/ui/shared/printOptionErrors.d.ts.map +1 -0
  144. package/dist/src/ui/shared/printOptionErrors.js +27 -0
  145. package/dist/src/ui/shared/printOptionErrors.js.map +1 -0
  146. package/dist/src/ui/shared/printStrictModeError.d.ts +16 -0
  147. package/dist/src/ui/shared/printStrictModeError.d.ts.map +1 -0
  148. package/dist/src/ui/shared/printStrictModeError.js +29 -0
  149. package/dist/src/ui/shared/printStrictModeError.js.map +1 -0
  150. package/dist/src/ui/shared/printSuccess.d.ts +11 -0
  151. package/dist/src/ui/shared/printSuccess.d.ts.map +1 -0
  152. package/dist/src/ui/shared/printSuccess.js +27 -0
  153. package/dist/src/ui/shared/printSuccess.js.map +1 -0
  154. package/dist/src/ui/shared/setupGlobalConfig.d.ts +7 -0
  155. package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -0
  156. package/dist/src/ui/shared/setupGlobalConfig.js +12 -0
  157. package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -0
  158. package/package.json +3 -3
@@ -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":"AACA,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,CAqN5B"}
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,4 +1,18 @@
1
- import chalk from 'chalk';
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';
2
16
  /**
3
17
  * Outputs the scan results to the console.
4
18
  * @param scanResult - The result of the scan.
@@ -6,129 +20,74 @@ import chalk from 'chalk';
6
20
  * @param comparedAgainst - The file being compared against.
7
21
  * @returns An object indicating whether to exit with an error.
8
22
  */
9
- export function outputToConsole(scanResult, opts, comparedAgainst) {
23
+ export function outputToConsole(scanResult, opts, comparedAgainst, fixContext) {
10
24
  let exitWithError = false;
11
- // Show what we're comparing against
12
- if (comparedAgainst) {
13
- console.log(chalk.magenta(`📋 Comparing codebase usage against: ${comparedAgainst}`));
14
- console.log();
15
- }
25
+ // Determine if output should be in JSON format
26
+ const isJson = opts.json ?? false;
27
+ printHeader(comparedAgainst);
16
28
  // Show stats if requested
17
- if (opts.showStats) {
18
- console.log(chalk.magenta('📊 Scan Statistics:'));
19
- console.log(chalk.magenta.dim(` Files scanned: ${scanResult.stats.filesScanned}`));
20
- console.log(chalk.magenta.dim(` Total usages found: ${scanResult.stats.totalUsages}`));
21
- console.log(chalk.magenta.dim(` Unique variables: ${scanResult.stats.uniqueVariables}`));
22
- console.log();
23
- }
24
- // 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
25
31
  if (scanResult.stats.uniqueVariables > 0) {
26
- console.log(chalk.blue(`🌐 Found ${scanResult.stats.uniqueVariables} unique environment variables in use`));
27
- console.log();
28
- // List all variables found (if any)
29
- if (scanResult.stats.uniqueVariables > 0) {
30
- // Group by variable to get unique list
31
- const variableUsages = scanResult.used.reduce((acc, usage) => {
32
- if (!acc[usage.variable]) {
33
- acc[usage.variable] = [];
34
- }
35
- acc[usage.variable].push(usage);
36
- return acc;
37
- }, {});
38
- // Display each unique variable
39
- for (const [variable, usages] of Object.entries(variableUsages)) {
40
- console.log(chalk.blue(` ${variable}`));
41
- // Show usage details if stats are enabled
42
- if (opts.showStats) {
43
- const displayUsages = usages.slice(0, 2);
44
- displayUsages.forEach((usage) => {
45
- console.log(chalk.blue.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
46
- });
47
- if (usages.length > 2) {
48
- console.log(chalk.gray(` ... and ${usages.length - 2} more locations`));
49
- }
50
- }
51
- }
52
- console.log();
53
- }
32
+ // Show unique variables found
33
+ printUniqueVariables(scanResult.stats.uniqueVariables);
34
+ // Print used variables with locations
35
+ printVariables(scanResult.used, opts.showStats ?? false, isJson);
54
36
  }
55
37
  // Missing variables (used in code but not in env file)
56
- if (scanResult.missing.length > 0) {
38
+ if (printMissing(scanResult.missing, scanResult.used, comparedAgainst, opts.isCiMode ?? false, isJson)) {
57
39
  exitWithError = true;
58
- const fileType = comparedAgainst || 'environment file';
59
- console.log(chalk.red(`❌ Missing in ${fileType}:`));
60
- const grouped = scanResult.missing.reduce((acc, variable) => {
61
- const usages = scanResult.used.filter((u) => u.variable === variable);
62
- acc[variable] = usages;
63
- return acc;
64
- }, {});
65
- for (const [variable, usages] of Object.entries(grouped)) {
66
- console.log(chalk.red(` - ${variable}`));
67
- // Show first few usages
68
- const maxShow = 3;
69
- usages.slice(0, maxShow).forEach((usage) => {
70
- console.log(chalk.red.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
71
- });
72
- if (usages.length > maxShow) {
73
- console.log(chalk.gray(` ... and ${usages.length - maxShow} more locations`));
74
- }
75
- }
76
- console.log();
77
- // CI mode specific message
78
- if (opts.isCiMode) {
79
- console.log(chalk.red(`💥 Found ${scanResult.missing.length} missing environment variable(s).`));
80
- console.log(chalk.red(` Add these variables to ${comparedAgainst || 'your environment file'} to fix this error.`));
81
- console.log();
82
- }
83
- }
84
- // Unused variables (in env file but not used in code)
85
- if (opts.showUnused && scanResult.unused.length > 0) {
86
- const fileType = comparedAgainst || 'environment file';
87
- console.log(chalk.yellow(`⚠️ Unused in codebase (defined in ${fileType}):`));
88
- scanResult.unused.forEach((variable) => {
89
- console.log(chalk.yellow(` - ${variable}`));
90
- });
91
- console.log();
92
- }
93
- // Show duplicates if found - NOW AFTER UNUSED VARIABLES
94
- if (scanResult.duplicates?.env && scanResult.duplicates.env.length > 0) {
95
- console.log(chalk.yellow(`⚠️ Duplicate keys in ${comparedAgainst} (last occurrence wins):`));
96
- scanResult.duplicates.env.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
97
- console.log();
98
- }
99
- if (scanResult.duplicates?.example &&
100
- scanResult.duplicates.example.length > 0) {
101
- console.log(chalk.yellow('⚠️ Duplicate keys in example file (last occurrence wins):'));
102
- scanResult.duplicates.example.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
103
- console.log();
104
- }
105
- if (scanResult.secrets && scanResult.secrets.length > 0) {
106
- console.log(chalk.yellow('🔒 Potential secrets detected in codebase:'));
107
- const byFile = new Map();
108
- for (const f of scanResult.secrets) {
109
- if (!byFile.has(f.file))
110
- byFile.set(f.file, []);
111
- byFile.get(f.file).push(f);
112
- }
113
- for (const [file, findings] of byFile) {
114
- console.log(chalk.bold(` ${file}`));
115
- for (const f of findings) {
116
- console.log(chalk.yellow(` - Line ${f.line}: ${f.message}\n ${chalk.dim(f.snippet)}`));
117
- }
118
- }
119
- console.log();
120
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);
121
47
  // Success message for env file comparison
122
48
  if (comparedAgainst &&
123
49
  scanResult.missing.length === 0 &&
124
- scanResult.secrets.length > 0 &&
50
+ (scanResult.secrets?.length ?? 0) === 0 &&
125
51
  scanResult.used.length > 0) {
126
- console.log(chalk.green(`✅ All used environment variables are defined in ${comparedAgainst}`));
127
- if (opts.showUnused && scanResult.unused.length === 0) {
128
- console.log(chalk.green('✅ No unused environment variables found'));
129
- }
130
- console.log();
52
+ printSuccess(isJson, 'scan', comparedAgainst, scanResult.unused, opts.showUnused ?? true);
53
+ }
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
+ });
64
+ }
65
+ const hasGitignoreIssue = gitignoreIssue !== null;
66
+ if (opts.strict) {
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)
75
+ exitWithError = true;
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);
131
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);
132
91
  return { exitWithError };
133
92
  }
134
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"}
@@ -0,0 +1,46 @@
1
+ import chalk from 'chalk';
2
+ import {} from '../../config/types.js';
3
+ /**
4
+ * Prints tips for fixing issues found during the comparison.
5
+ * @param filtered The filtered comparison results.
6
+ * @param envNotIgnored Whether the .env file is not ignored by git.
7
+ * @param json Whether to output in JSON format.
8
+ * @param fix Whether to apply fixes.
9
+ * @returns void
10
+ */
11
+ export function printFixTips(filtered, envNotIgnored, json, fix) {
12
+ if (json || fix)
13
+ return;
14
+ const hasMissing = filtered.missing.length > 0;
15
+ const hasDupEnv = filtered.duplicatesEnv.length > 0;
16
+ let tip = null;
17
+ if (hasMissing && hasDupEnv && envNotIgnored) {
18
+ tip =
19
+ '💡 Tip: Run with `--fix` to add missing keys, remove duplicates and add .env to .gitignore';
20
+ }
21
+ else if (hasMissing && hasDupEnv) {
22
+ tip = '💡 Tip: Run with `--fix` to add missing keys and remove duplicates';
23
+ }
24
+ else if (hasDupEnv && envNotIgnored) {
25
+ tip =
26
+ '💡 Tip: Run with `--fix` to remove duplicate keys and add .env to .gitignore';
27
+ }
28
+ else if (hasMissing && envNotIgnored) {
29
+ tip =
30
+ '💡 Tip: Run with `--fix` to add missing keys and add .env to .gitignore';
31
+ }
32
+ else if (hasMissing) {
33
+ tip = '💡 Tip: Run with `--fix` to add missing keys';
34
+ }
35
+ else if (hasDupEnv) {
36
+ tip = '💡 Tip: Run with `--fix` to remove duplicate keys';
37
+ }
38
+ else if (envNotIgnored) {
39
+ tip = '💡 Tip: Run with `--fix` to ensure .env is added to .gitignore';
40
+ }
41
+ if (tip) {
42
+ console.log(chalk.gray(tip));
43
+ console.log();
44
+ }
45
+ }
46
+ //# sourceMappingURL=printFixTips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printFixTips.js","sourceRoot":"","sources":["../../../../src/ui/compare/printFixTips.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAiB,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,aAAsB,EACtB,IAAa,EACb,GAAY;IAEZ,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO;IAExB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpD,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,UAAU,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC7C,GAAG;YACD,4FAA4F,CAAC;IACjG,CAAC;SAAM,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;QACnC,GAAG,GAAG,oEAAoE,CAAC;IAC7E,CAAC;SAAM,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,GAAG;YACD,8EAA8E,CAAC;IACnF,CAAC;SAAM,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;QACvC,GAAG;YACD,yEAAyE,CAAC;IAC9E,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,GAAG,GAAG,8CAA8C,CAAC;IACvD,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,GAAG,GAAG,mDAAmD,CAAC;IAC5D,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,GAAG,GAAG,gEAAgE,CAAC;IACzE,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Prints the header for the comparison output.
3
+ * @param envName The name of the environment file.
4
+ * @param exampleName The name of the example file.
5
+ * @param json Whether to output in JSON format.
6
+ * @param skipping Whether the comparison is being skipped.
7
+ * @returns void
8
+ */
9
+ export declare function printHeader(envName: string, exampleName: string, json: boolean, skipping: boolean): void;
10
+ //# sourceMappingURL=printHeader.d.ts.map