dotenv-diff 2.2.7 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +28 -0
  2. package/dist/src/cli/program.d.ts.map +1 -1
  3. package/dist/src/cli/program.js +4 -1
  4. package/dist/src/cli/program.js.map +1 -1
  5. package/dist/src/cli/run.d.ts.map +1 -1
  6. package/dist/src/cli/run.js +42 -31
  7. package/dist/src/cli/run.js.map +1 -1
  8. package/dist/src/commands/compare.d.ts +2 -20
  9. package/dist/src/commands/compare.d.ts.map +1 -1
  10. package/dist/src/commands/compare.js +107 -173
  11. package/dist/src/commands/compare.js.map +1 -1
  12. package/dist/src/commands/init.d.ts +3 -15
  13. package/dist/src/commands/init.d.ts.map +1 -1
  14. package/dist/src/commands/init.js +17 -66
  15. package/dist/src/commands/init.js.map +1 -1
  16. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  17. package/dist/src/commands/scanUsage.js +87 -173
  18. package/dist/src/commands/scanUsage.js.map +1 -1
  19. package/dist/src/config/loadConfig.d.ts +9 -1
  20. package/dist/src/config/loadConfig.d.ts.map +1 -1
  21. package/dist/src/config/loadConfig.js +31 -0
  22. package/dist/src/config/loadConfig.js.map +1 -0
  23. package/dist/src/config/options.d.ts.map +1 -1
  24. package/dist/src/config/options.js +46 -32
  25. package/dist/src/config/options.js.map +1 -1
  26. package/dist/src/config/types.d.ts +65 -0
  27. package/dist/src/config/types.d.ts.map +1 -1
  28. package/dist/src/core/determineComparisonFile.d.ts.map +1 -1
  29. package/dist/src/core/determineComparisonFile.js +3 -0
  30. package/dist/src/core/determineComparisonFile.js.map +1 -1
  31. package/dist/src/core/entropy.js +1 -1
  32. package/dist/src/core/entropy.js.map +1 -1
  33. package/dist/src/core/fixEnv.d.ts +24 -15
  34. package/dist/src/core/fixEnv.d.ts.map +1 -1
  35. package/dist/src/core/fixEnv.js +70 -11
  36. package/dist/src/core/fixEnv.js.map +1 -1
  37. package/dist/src/core/helpers/isAllOk.d.ts +8 -0
  38. package/dist/src/core/helpers/isAllOk.d.ts.map +1 -0
  39. package/dist/src/core/helpers/isAllOk.js +15 -0
  40. package/dist/src/core/helpers/isAllOk.js.map +1 -0
  41. package/dist/src/core/helpers/resolveFromCwd.d.ts.map +1 -1
  42. package/dist/src/core/helpers/resolveFromCwd.js.map +1 -1
  43. package/dist/src/core/helpers/updateTotals.d.ts +20 -0
  44. package/dist/src/core/helpers/updateTotals.d.ts.map +1 -0
  45. package/dist/src/core/helpers/updateTotals.js +37 -0
  46. package/dist/src/core/helpers/updateTotals.js.map +1 -0
  47. package/dist/src/core/processComparisonFile.d.ts +36 -0
  48. package/dist/src/core/processComparisonFile.d.ts.map +1 -0
  49. package/dist/src/core/processComparisonFile.js +124 -0
  50. package/dist/src/core/processComparisonFile.js.map +1 -0
  51. package/dist/src/core/secretDetectors.d.ts +10 -1
  52. package/dist/src/core/secretDetectors.d.ts.map +1 -1
  53. package/dist/src/core/secretDetectors.js +35 -4
  54. package/dist/src/core/secretDetectors.js.map +1 -1
  55. package/dist/src/index.js +1 -0
  56. package/dist/src/index.js.map +1 -1
  57. package/dist/src/services/codeBaseScanner.js +1 -1
  58. package/dist/src/services/codeBaseScanner.js.map +1 -1
  59. package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -1
  60. package/dist/src/services/ensureFilesOrPrompt.js +10 -11
  61. package/dist/src/services/ensureFilesOrPrompt.js.map +1 -1
  62. package/dist/src/services/git.d.ts +9 -0
  63. package/dist/src/services/git.d.ts.map +1 -1
  64. package/dist/src/services/git.js +46 -3
  65. package/dist/src/services/git.js.map +1 -1
  66. package/dist/src/services/scanOutputToConsole.d.ts +6 -1
  67. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
  68. package/dist/src/services/scanOutputToConsole.js +67 -140
  69. package/dist/src/services/scanOutputToConsole.js.map +1 -1
  70. package/dist/src/ui/compare/printAutoFix.d.ts +16 -0
  71. package/dist/src/ui/compare/printAutoFix.d.ts.map +1 -0
  72. package/dist/src/ui/compare/printAutoFix.js +34 -0
  73. package/dist/src/ui/compare/printAutoFix.js.map +1 -0
  74. package/dist/src/ui/compare/printAutoFixApplied.d.ts +7 -0
  75. package/dist/src/ui/compare/printAutoFixApplied.d.ts.map +1 -0
  76. package/dist/src/ui/compare/printAutoFixApplied.js +22 -0
  77. package/dist/src/ui/compare/printAutoFixApplied.js.map +1 -0
  78. package/dist/src/ui/compare/printDuplicates.d.ts +17 -0
  79. package/dist/src/ui/compare/printDuplicates.d.ts.map +1 -0
  80. package/dist/src/ui/compare/printDuplicates.js +25 -0
  81. package/dist/src/ui/compare/printDuplicates.js.map +1 -0
  82. package/dist/src/ui/compare/printErrorNotFound.d.ts +9 -0
  83. package/dist/src/ui/compare/printErrorNotFound.d.ts.map +1 -0
  84. package/dist/src/ui/compare/printErrorNotFound.js +18 -0
  85. package/dist/src/ui/compare/printErrorNotFound.js.map +1 -0
  86. package/dist/src/ui/compare/printFixTips.d.ts +11 -0
  87. package/dist/src/ui/compare/printFixTips.d.ts.map +1 -0
  88. package/dist/src/ui/compare/printFixTips.js +46 -0
  89. package/dist/src/ui/compare/printFixTips.js.map +1 -0
  90. package/dist/src/ui/compare/printHeader.d.ts +10 -0
  91. package/dist/src/ui/compare/printHeader.d.ts.map +1 -0
  92. package/dist/src/ui/compare/printHeader.js +20 -0
  93. package/dist/src/ui/compare/printHeader.js.map +1 -0
  94. package/dist/src/ui/compare/printIssues.d.ts +9 -0
  95. package/dist/src/ui/compare/printIssues.d.ts.map +1 -0
  96. package/dist/src/ui/compare/printIssues.js +34 -0
  97. package/dist/src/ui/compare/printIssues.js.map +1 -0
  98. package/dist/src/ui/compare/printPrompt.d.ts +11 -0
  99. package/dist/src/ui/compare/printPrompt.d.ts.map +1 -0
  100. package/dist/src/ui/compare/printPrompt.js +24 -0
  101. package/dist/src/ui/compare/printPrompt.js.map +1 -0
  102. package/dist/src/ui/compare/printStats.d.ts +19 -0
  103. package/dist/src/ui/compare/printStats.d.ts.map +1 -0
  104. package/dist/src/ui/compare/printStats.js +30 -0
  105. package/dist/src/ui/compare/printStats.js.map +1 -0
  106. package/dist/src/ui/compare/printSuccess.d.ts +11 -0
  107. package/dist/src/ui/compare/printSuccess.d.ts.map +1 -0
  108. package/dist/src/ui/compare/printSuccess.js +27 -0
  109. package/dist/src/ui/compare/printSuccess.js.map +1 -0
  110. package/dist/src/ui/scan/printComparisonError.d.ts +11 -0
  111. package/dist/src/ui/scan/printComparisonError.d.ts.map +1 -0
  112. package/dist/src/ui/scan/printComparisonError.js +20 -0
  113. package/dist/src/ui/scan/printComparisonError.js.map +1 -0
  114. package/dist/src/ui/scan/printHeader.d.ts +7 -0
  115. package/dist/src/ui/scan/printHeader.d.ts.map +1 -0
  116. package/dist/src/ui/scan/printHeader.js +16 -0
  117. package/dist/src/ui/scan/printHeader.js.map +1 -0
  118. package/dist/src/ui/scan/printMissing.d.ts +13 -0
  119. package/dist/src/ui/scan/printMissing.d.ts.map +1 -0
  120. package/dist/src/ui/scan/printMissing.js +43 -0
  121. package/dist/src/ui/scan/printMissing.js.map +1 -0
  122. package/dist/src/ui/scan/printMissingExample.d.ts +9 -0
  123. package/dist/src/ui/scan/printMissingExample.d.ts.map +1 -0
  124. package/dist/src/ui/scan/printMissingExample.js +27 -0
  125. package/dist/src/ui/scan/printMissingExample.js.map +1 -0
  126. package/dist/src/ui/scan/printSecrets.d.ts +14 -0
  127. package/dist/src/ui/scan/printSecrets.d.ts.map +1 -0
  128. package/dist/src/ui/scan/printSecrets.js +29 -0
  129. package/dist/src/ui/scan/printSecrets.js.map +1 -0
  130. package/dist/src/ui/scan/printStats.d.ts +13 -0
  131. package/dist/src/ui/scan/printStats.d.ts.map +1 -0
  132. package/dist/src/ui/scan/printStats.js +17 -0
  133. package/dist/src/ui/scan/printStats.js.map +1 -0
  134. package/dist/src/ui/scan/printUniqueVariables.d.ts +7 -0
  135. package/dist/src/ui/scan/printUniqueVariables.d.ts.map +1 -0
  136. package/dist/src/ui/scan/printUniqueVariables.js +14 -0
  137. package/dist/src/ui/scan/printUniqueVariables.js.map +1 -0
  138. package/dist/src/ui/scan/printUnused.d.ts +10 -0
  139. package/dist/src/ui/scan/printUnused.d.ts.map +1 -0
  140. package/dist/src/ui/scan/printUnused.js +22 -0
  141. package/dist/src/ui/scan/printUnused.js.map +1 -0
  142. package/dist/src/ui/scan/printVariables.d.ts +10 -0
  143. package/dist/src/ui/scan/printVariables.d.ts.map +1 -0
  144. package/dist/src/ui/scan/printVariables.js +37 -0
  145. package/dist/src/ui/scan/printVariables.js.map +1 -0
  146. package/dist/src/ui/shared/printAutoFix.d.ts +16 -0
  147. package/dist/src/ui/shared/printAutoFix.d.ts.map +1 -0
  148. package/dist/src/ui/shared/printAutoFix.js +34 -0
  149. package/dist/src/ui/shared/printAutoFix.js.map +1 -0
  150. package/dist/src/ui/shared/printConfigStatus.d.ts +11 -0
  151. package/dist/src/ui/shared/printConfigStatus.d.ts.map +1 -0
  152. package/dist/src/ui/shared/printConfigStatus.js +23 -0
  153. package/dist/src/ui/shared/printConfigStatus.js.map +1 -0
  154. package/dist/src/ui/shared/printDuplicates.d.ts +17 -0
  155. package/dist/src/ui/shared/printDuplicates.d.ts.map +1 -0
  156. package/dist/src/ui/shared/printDuplicates.js +25 -0
  157. package/dist/src/ui/shared/printDuplicates.js.map +1 -0
  158. package/dist/src/ui/shared/printFixTips.d.ts +11 -0
  159. package/dist/src/ui/shared/printFixTips.d.ts.map +1 -0
  160. package/dist/src/ui/shared/printFixTips.js +46 -0
  161. package/dist/src/ui/shared/printFixTips.js.map +1 -0
  162. package/dist/src/ui/shared/printGitignore.d.ts +13 -0
  163. package/dist/src/ui/shared/printGitignore.d.ts.map +1 -0
  164. package/dist/src/ui/shared/printGitignore.js +20 -0
  165. package/dist/src/ui/shared/printGitignore.js.map +1 -0
  166. package/dist/src/ui/shared/printInitStatus.d.ts +9 -0
  167. package/dist/src/ui/shared/printInitStatus.d.ts.map +1 -0
  168. package/dist/src/ui/shared/printInitStatus.js +20 -0
  169. package/dist/src/ui/shared/printInitStatus.js.map +1 -0
  170. package/dist/src/ui/shared/printOptionErrors.d.ts +17 -0
  171. package/dist/src/ui/shared/printOptionErrors.d.ts.map +1 -0
  172. package/dist/src/ui/shared/printOptionErrors.js +27 -0
  173. package/dist/src/ui/shared/printOptionErrors.js.map +1 -0
  174. package/dist/src/ui/shared/printStrictModeError.d.ts +16 -0
  175. package/dist/src/ui/shared/printStrictModeError.d.ts.map +1 -0
  176. package/dist/src/ui/shared/printStrictModeError.js +29 -0
  177. package/dist/src/ui/shared/printStrictModeError.js.map +1 -0
  178. package/dist/src/ui/shared/printSuccess.d.ts +11 -0
  179. package/dist/src/ui/shared/printSuccess.d.ts.map +1 -0
  180. package/dist/src/ui/shared/printSuccess.js +27 -0
  181. package/dist/src/ui/shared/printSuccess.js.map +1 -0
  182. package/dist/src/ui/shared/setupGlobalConfig.d.ts +7 -0
  183. package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -0
  184. package/dist/src/ui/shared/setupGlobalConfig.js +12 -0
  185. package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -0
  186. package/package.json +1 -1
@@ -1,18 +1,6 @@
1
1
  /**
2
- * Ensures that the necessary .env files exist or prompts the user to create them.
3
- * @param args - The arguments for the function.
4
- * @returns An object indicating whether a file was created or if the process should exit.
2
+ * Creates a default dotenv-diff.config.json in the current directory if it doesn't exist.
3
+ * If the file already exists, it notifies the user and does nothing.
5
4
  */
6
- export declare function ensureFilesOrPrompt(args: {
7
- cwd: string;
8
- primaryEnv: string;
9
- primaryExample: string;
10
- alreadyWarnedMissingEnv: boolean;
11
- isYesMode: boolean;
12
- isCiMode: boolean;
13
- }): Promise<{
14
- didCreate: boolean;
15
- shouldExit: boolean;
16
- exitCode: number;
17
- }>;
5
+ export declare function runInit(): Promise<void>;
18
6
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAMA;;;;GAIG;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":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,OAAO,kBAkB5B"}
@@ -1,73 +1,24 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import chalk from 'chalk';
4
- import { confirmYesNo } from '../ui/prompts.js';
5
- import { warnIfEnvNotIgnored } from '../services/git.js';
3
+ import { printInitSuccess, printInitExists } from '../ui/shared/printInitStatus.js';
6
4
  /**
7
- * Ensures that the necessary .env files exist or prompts the user to create them.
8
- * @param args - The arguments for the function.
9
- * @returns An object indicating whether a file was created or if the process should exit.
5
+ * Creates a default dotenv-diff.config.json in the current directory if it doesn't exist.
6
+ * If the file already exists, it notifies the user and does nothing.
10
7
  */
11
- export async function ensureFilesOrPrompt(args) {
12
- const { cwd, primaryEnv, primaryExample, alreadyWarnedMissingEnv, isYesMode, isCiMode, } = args;
13
- const envPath = path.resolve(cwd, primaryEnv);
14
- const examplePath = path.resolve(cwd, primaryExample);
15
- const envExists = fs.existsSync(envPath);
16
- const exampleExists = fs.existsSync(examplePath);
17
- // Case 1: no .env and no .env.example
18
- if (!envExists && !exampleExists) {
19
- const hasAnyEnv = fs.readdirSync(cwd).some((f) => f.startsWith('.env'));
20
- if (!hasAnyEnv) {
21
- console.log(chalk.yellow('⚠️ No .env* or .env.example file found. Skipping comparison.'));
22
- return { didCreate: false, shouldExit: true, exitCode: 0 };
23
- }
8
+ export async function runInit() {
9
+ const cwd = process.cwd();
10
+ const configPath = path.join(cwd, 'dotenv-diff.config.json');
11
+ if (fs.existsSync(configPath)) {
12
+ printInitExists(configPath);
13
+ return;
24
14
  }
25
- // Case 2: missing .env but has .env.example
26
- if (!envExists && exampleExists) {
27
- if (!alreadyWarnedMissingEnv) {
28
- console.log();
29
- console.log(chalk.yellow(`📄 ${path.basename(envPath)} file not found.`));
30
- }
31
- let createEnv = isYesMode
32
- ? true
33
- : isCiMode
34
- ? false
35
- : await confirmYesNo(`❓ Do you want to create a new ${path.basename(envPath)} file from ${path.basename(examplePath)}?`, { isCiMode, isYesMode });
36
- if (!createEnv) {
37
- console.log(chalk.gray('🚫 Skipping .env creation.'));
38
- return { didCreate: false, shouldExit: true, exitCode: 0 };
39
- }
40
- const exampleContent = fs.readFileSync(examplePath, 'utf-8');
41
- fs.writeFileSync(envPath, exampleContent);
42
- console.log(chalk.green(`✅ ${path.basename(envPath)} file created successfully from ${path.basename(examplePath)}.\n`));
43
- warnIfEnvNotIgnored({ envFile: path.basename(envPath) });
44
- }
45
- // Case 3: has .env but is missing .env.example
46
- if (envExists && !exampleExists) {
47
- console.log(chalk.yellow(`📄 ${path.basename(examplePath)} file not found.`));
48
- let createExample = isYesMode
49
- ? true
50
- : isCiMode
51
- ? false
52
- : await confirmYesNo(`❓ Do you want to create a new ${path.basename(examplePath)} file from ${path.basename(envPath)}?`, { isCiMode, isYesMode });
53
- if (!createExample) {
54
- console.log(chalk.gray('🚫 Skipping .env.example creation.'));
55
- return { didCreate: false, shouldExit: true, exitCode: 0 };
56
- }
57
- const envContent = fs
58
- .readFileSync(envPath, 'utf-8')
59
- .split('\n')
60
- .map((line) => {
61
- const trimmed = line.trim();
62
- if (!trimmed || trimmed.startsWith('#'))
63
- return trimmed;
64
- const [key] = trimmed.split('=');
65
- return `${key}=`;
66
- })
67
- .join('\n');
68
- fs.writeFileSync(examplePath, envContent);
69
- console.log(chalk.green(`✅ ${path.basename(examplePath)} file created successfully from ${path.basename(envPath)}.\n`));
70
- }
71
- return { didCreate: true, shouldExit: false, exitCode: 0 };
15
+ const defaultConfig = {
16
+ strict: false,
17
+ example: '.env.example',
18
+ ignore: ['NODE_ENV', 'VITE_MODE'],
19
+ ignoreUrls: ['https://example.com'],
20
+ };
21
+ fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
22
+ printInitSuccess(configPath);
72
23
  }
73
24
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAE7D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,eAAe,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;QACjC,UAAU,EAAE,CAAC,qBAAqB,CAAC;KACpC,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanUsage.d.ts","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAY,MAAM,oBAAoB,CAAC;AAUrE;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CA0QrC"}
1
+ {"version":3,"file":"scanUsage.d.ts","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,oBAAoB,CAAC;AA0E5B;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAmFrC"}
@@ -1,16 +1,64 @@
1
- import chalk from 'chalk';
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { parseEnvFile } from '../core/parseEnv.js';
5
1
  import { scanCodebase } from '../services/codeBaseScanner.js';
6
- import { filterIgnoredKeys } from '../core/filterIgnoredKeys.js';
7
- import { resolveFromCwd } from '../core/helpers/resolveFromCwd.js';
8
2
  import { determineComparisonFile } from '../core/determineComparisonFile.js';
9
3
  import { outputToConsole } from '../services/scanOutputToConsole.js';
10
4
  import { createJsonOutput } from '../core/scanJsonOutput.js';
11
- import { findDuplicateKeys } from '../services/duplicates.js';
12
- import { compareWithEnvFiles } from '../core/compareScan.js';
13
- import { applyFixes } from '../core/fixEnv.js';
5
+ import { printMissingExample } from '../ui/scan/printMissingExample.js';
6
+ import { processComparisonFile } from '../core/processComparisonFile.js';
7
+ import { printComparisonError } from '../ui/scan/printComparisonError.js';
8
+ import { hasIgnoreComment } from '../core/secretDetectors.js';
9
+ /**
10
+ * Filters out commented usages from the list.
11
+ * Skipping comments:
12
+ * // process.env.API_URL
13
+ * # process.env.API_URL
14
+ * /* process.env.API_URL
15
+ * * process.env.API_URL
16
+ * <!-- process.env.API_URL -->
17
+ * @param usages - List of environment variable usages
18
+ * @returns Filtered list of environment variable usages
19
+ */
20
+ function skipCommentedUsages(usages) {
21
+ let insideHtmlComment = false;
22
+ let insideIgnoreBlock = false;
23
+ return usages.filter((u) => {
24
+ if (!u.context)
25
+ return true;
26
+ const line = u.context.trim();
27
+ if (line.includes('<!--'))
28
+ insideHtmlComment = true;
29
+ if (line.includes('-->')) {
30
+ insideHtmlComment = false;
31
+ return false;
32
+ }
33
+ if (/<!--\s*dotenv[\s-]*diff[\s-]*ignore[\s-]*start\s*-->/i.test(line)) {
34
+ insideIgnoreBlock = true;
35
+ return false;
36
+ }
37
+ if (/<!--\s*dotenv[\s-]*diff[\s-]*ignore[\s-]*end\s*-->/i.test(line)) {
38
+ insideIgnoreBlock = false;
39
+ return false;
40
+ }
41
+ if (insideIgnoreBlock)
42
+ return false;
43
+ return (!insideHtmlComment &&
44
+ !/^\s*(\/\/|#|\/\*|\*|<!--|-->)/.test(line) &&
45
+ !hasIgnoreComment(line));
46
+ });
47
+ }
48
+ /**
49
+ * Recalculates statistics for a scan result after filtering usages.
50
+ * @param scanResult The current scan result
51
+ * @returns Updated scanResult with recalculated stats
52
+ */
53
+ function calculateStats(scanResult) {
54
+ const uniqueVariables = new Set(scanResult.used.map((u) => u.variable)).size;
55
+ scanResult.stats = {
56
+ filesScanned: scanResult.stats.filesScanned,
57
+ totalUsages: scanResult.used.length,
58
+ uniqueVariables,
59
+ };
60
+ return scanResult;
61
+ }
14
62
  /**
15
63
  * Scans codebase for environment variable usage and compares with .env file
16
64
  * @param {ScanUsageOptions} opts - Scan configuration options
@@ -24,150 +72,47 @@ import { applyFixes } from '../core/fixEnv.js';
24
72
  * @returns {Promise<{exitWithError: boolean}>} Returns true if missing variables found
25
73
  */
26
74
  export async function scanUsage(opts) {
27
- if (!opts.json) {
28
- console.log();
29
- console.log(chalk.blue('🔍 Scanning codebase for environment variable usage...'));
30
- console.log();
31
- }
32
75
  // Scan the codebase
33
76
  let scanResult = await scanCodebase(opts);
34
- scanResult.used = scanResult.used.filter((u) => u.context && !/^\s*(\/\/|#)/.test(u.context.trim()));
35
- // Recalculate stats after filtering out commented usages
36
- const uniqueVariables = new Set(scanResult.used.map((u) => u.variable)).size;
37
- scanResult.stats = {
38
- filesScanned: scanResult.stats.filesScanned, // Keep original files scanned count
39
- totalUsages: scanResult.used.length,
40
- uniqueVariables: uniqueVariables,
41
- };
42
- // If user explicitly passed --example but the file doesn't exist:
43
- if (opts.examplePath) {
44
- const exampleAbs = resolveFromCwd(opts.cwd, opts.examplePath);
45
- const missing = !fs.existsSync(exampleAbs);
46
- if (missing) {
47
- const msg = `❌ Missing specified example file: ${opts.examplePath}`;
48
- if (opts.isCiMode) {
49
- // IMPORTANT: stdout (console.log), not stderr, to satisfy the test
50
- console.log(chalk.red(msg));
51
- return { exitWithError: true };
52
- }
53
- else if (!opts.json) {
54
- console.log(chalk.yellow(msg.replace('❌', '⚠️')));
55
- }
56
- // Non-CI: continue without comparison
57
- }
77
+ // Filter out commented usages
78
+ scanResult.used = skipCommentedUsages(scanResult.used);
79
+ // Recalculate stats after filtering
80
+ calculateStats(scanResult);
81
+ // If user explicitly passed --example flag, but the file doesn't exist:
82
+ if (printMissingExample(opts)) {
83
+ return { exitWithError: true };
58
84
  }
59
85
  // Determine which file to compare against
60
86
  const compareFile = determineComparisonFile(opts);
61
87
  let envVariables = {};
62
88
  let comparedAgainst = '';
63
89
  let duplicatesFound = false;
64
- let dupsEnv = [];
65
- let dupsExample = [];
66
90
  // Store fix information for consolidated display
67
91
  let fixApplied = false;
68
92
  let fixedKeys = [];
69
93
  let removedDuplicates = [];
94
+ let gitignoreUpdated = false;
95
+ // If comparing against a file, process it
96
+ // fx: if the scan is comparing against .env.example, it will check for missing keys there
70
97
  if (compareFile) {
71
- try {
72
- const envFull = parseEnvFile(compareFile.path);
73
- const envKeys = filterIgnoredKeys(Object.keys(envFull), opts.ignore, opts.ignoreRegex);
74
- envVariables = Object.fromEntries(envKeys.map((k) => [k, envFull[k]]));
75
- scanResult = compareWithEnvFiles(scanResult, envVariables);
76
- comparedAgainst = compareFile.name;
77
- // Check for duplicates in the env file
78
- if (!opts.allowDuplicates) {
79
- dupsEnv = findDuplicateKeys(compareFile.path).filter(({ key }) => !opts.ignore.includes(key) &&
80
- !opts.ignoreRegex.some((rx) => rx.test(key)));
81
- // Also check for duplicates in example file if it exists AND is different from compareFile
82
- if (opts.examplePath) {
83
- const examplePath = resolveFromCwd(opts.cwd, opts.examplePath);
84
- // Only check example file if it exists and is NOT the same as the comparison file
85
- if (fs.existsSync(examplePath) && examplePath !== compareFile.path) {
86
- dupsExample = findDuplicateKeys(examplePath).filter(({ key }) => !opts.ignore.includes(key) &&
87
- !opts.ignoreRegex.some((rx) => rx.test(key)));
88
- }
89
- }
90
- duplicatesFound = dupsEnv.length > 0 || dupsExample.length > 0;
91
- // Apply duplicate fixes if --fix is enabled (but don't show message yet)
92
- if (opts.fix && (dupsEnv.length > 0 || dupsExample.length > 0)) {
93
- const { changed, result } = applyFixes({
94
- envPath: compareFile.path,
95
- examplePath: opts.examplePath
96
- ? resolveFromCwd(opts.cwd, opts.examplePath)
97
- : '',
98
- missingKeys: [],
99
- duplicateKeys: dupsEnv.map((d) => d.key),
100
- });
101
- if (changed) {
102
- fixApplied = true;
103
- removedDuplicates = result.removedDuplicates;
104
- // Clear duplicates after fix
105
- duplicatesFound = false;
106
- dupsEnv = [];
107
- dupsExample = [];
108
- }
109
- }
110
- // Add to scan result for both JSON and console output (only if not fixed)
111
- if ((dupsEnv.length > 0 || dupsExample.length > 0) &&
112
- (!opts.fix || !fixApplied)) {
113
- if (!scanResult.duplicates)
114
- scanResult.duplicates = {};
115
- if (dupsEnv.length > 0)
116
- scanResult.duplicates.env = dupsEnv;
117
- if (dupsExample.length > 0)
118
- scanResult.duplicates.example = dupsExample;
119
- }
120
- }
121
- }
122
- catch (error) {
123
- const errorMessage = `⚠️ Could not read ${compareFile.name}: ${compareFile.path} - ${error}`;
124
- if (opts.isCiMode) {
125
- // In CI mode, exit with error if file doesn't exist
126
- console.log(chalk.red(`❌ ${errorMessage}`));
98
+ const result = processComparisonFile(scanResult, compareFile, opts);
99
+ if (result.error) {
100
+ const { exit } = printComparisonError(result.error.message, result.error.shouldExit, opts.json ?? false);
101
+ if (exit)
127
102
  return { exitWithError: true };
128
- }
129
- if (!opts.json) {
130
- console.log(chalk.yellow(errorMessage));
131
- }
132
103
  }
133
- }
134
- // Apply missing keys fix if --fix is enabled (but don't show message yet)
135
- if (opts.fix && compareFile) {
136
- const missingKeys = scanResult.missing;
137
- if (missingKeys.length > 0) {
138
- const envFilePath = compareFile.path;
139
- const exampleFilePath = opts.examplePath
140
- ? resolveFromCwd(opts.cwd, opts.examplePath)
141
- : null;
142
- // Append missing keys to .env
143
- const content = fs.readFileSync(envFilePath, 'utf-8');
144
- const newContent = content +
145
- (content.endsWith('\n') ? '' : '\n') +
146
- missingKeys.map((k) => `${k}=`).join('\n') +
147
- '\n';
148
- fs.writeFileSync(envFilePath, newContent);
149
- // Append to .env.example if it exists
150
- if (exampleFilePath && fs.existsSync(exampleFilePath)) {
151
- const exContent = fs.readFileSync(exampleFilePath, 'utf-8');
152
- const existingExKeys = new Set(exContent
153
- .split('\n')
154
- .map((l) => l.trim().split('=')[0])
155
- .filter(Boolean));
156
- const newKeys = missingKeys.filter((k) => !existingExKeys.has(k));
157
- if (newKeys.length) {
158
- const newExContent = exContent +
159
- (exContent.endsWith('\n') ? '' : '\n') +
160
- newKeys.join('\n') +
161
- '\n';
162
- fs.writeFileSync(exampleFilePath, newExContent);
163
- }
164
- }
165
- fixApplied = true;
166
- fixedKeys = missingKeys;
167
- scanResult.missing = [];
104
+ else {
105
+ scanResult = result.scanResult;
106
+ envVariables = result.envVariables;
107
+ comparedAgainst = result.comparedAgainst;
108
+ duplicatesFound = result.duplicatesFound;
109
+ fixApplied = result.fixApplied;
110
+ removedDuplicates = result.removedDuplicates;
111
+ fixedKeys = result.addedEnv;
112
+ gitignoreUpdated = result.gitignoreUpdated;
168
113
  }
169
114
  }
170
- // Prepare JSON output
115
+ // JSON output
171
116
  if (opts.json) {
172
117
  const jsonOutput = createJsonOutput(scanResult, opts, comparedAgainst, Object.keys(envVariables).length);
173
118
  console.log(JSON.stringify(jsonOutput, null, 2));
@@ -182,43 +127,12 @@ export async function scanUsage(opts) {
182
127
  };
183
128
  }
184
129
  // Console output
185
- const result = outputToConsole(scanResult, opts, comparedAgainst);
186
- // Show consolidated fix message at the bottom (after all other output)
187
- if (opts.fix && !opts.json) {
188
- if (fixApplied) {
189
- console.log(chalk.green('✅ Auto-fix applied:'));
190
- // Show removed duplicates
191
- if (removedDuplicates.length > 0) {
192
- console.log(chalk.green(` - Removed ${removedDuplicates.length} duplicate keys from ${comparedAgainst}: ${removedDuplicates.join(', ')}`));
193
- }
194
- // Show added missing keys
195
- if (fixedKeys.length > 0) {
196
- console.log(chalk.green(` - Added ${fixedKeys.length} missing keys to ${comparedAgainst}: ${fixedKeys.join(', ')}`));
197
- if (opts.examplePath) {
198
- console.log(chalk.green(` - Synced ${fixedKeys.length} keys to ${path.basename(opts.examplePath)}`));
199
- }
200
- }
201
- console.log();
202
- }
203
- else {
204
- console.log(chalk.green('✅ Auto-fix applied: no changes needed.'));
205
- console.log();
206
- }
207
- }
208
- if (!opts.json && !opts.fix) {
209
- if (scanResult.missing.length > 0 && duplicatesFound) {
210
- console.log(chalk.gray('💡 Tip: Run with `--fix` to add missing keys and remove duplicates'));
211
- console.log();
212
- }
213
- else if (scanResult.missing.length > 0) {
214
- console.log(chalk.gray('💡 Tip: Run with `--fix` to add missing keys'));
215
- console.log();
216
- }
217
- else if (duplicatesFound) {
218
- console.log(chalk.gray('💡 Tip: Run with `--fix` to remove duplicate keys'));
219
- console.log();
220
- }
221
- }
130
+ const result = outputToConsole(scanResult, opts, comparedAgainst, {
131
+ fixApplied,
132
+ removedDuplicates,
133
+ addedEnv: fixedKeys,
134
+ gitignoreUpdated,
135
+ });
222
136
  return { exitWithError: result.exitWithError || duplicatesFound };
223
137
  }
224
138
  //# sourceMappingURL=scanUsage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanUsage.js","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanUsage.js","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,10 @@
1
- export declare function loadConfig(cwd?: string): any;
1
+ import type { RawOptions } from "./types.js";
2
+ /**
3
+ * Loads dotenv-diff.config.json (if present)
4
+ * and merges it with CLI flags.
5
+ * CLI options always take precedence.
6
+ * @param cliOptions - Options provided via CLI
7
+ * @return Merged options
8
+ */
9
+ export declare function loadConfig(cliOptions: Partial<RawOptions>): RawOptions;
2
10
  //# sourceMappingURL=loadConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../../src/config/loadConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,GAAG,CAK3D"}
1
+ {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../../src/config/loadConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAqBtE"}
@@ -0,0 +1,31 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { printConfigLoaded, printConfigLoadError } from "../ui/shared/printConfigStatus.js";
4
+ /**
5
+ * Loads dotenv-diff.config.json (if present)
6
+ * and merges it with CLI flags.
7
+ * CLI options always take precedence.
8
+ * @param cliOptions - Options provided via CLI
9
+ * @return Merged options
10
+ */
11
+ export function loadConfig(cliOptions) {
12
+ const cwd = process.cwd();
13
+ const configPath = path.join(cwd, "dotenv-diff.config.json");
14
+ let fileConfig = {};
15
+ if (fs.existsSync(configPath)) {
16
+ try {
17
+ const raw = fs.readFileSync(configPath, "utf8");
18
+ fileConfig = JSON.parse(raw);
19
+ printConfigLoaded(configPath);
20
+ }
21
+ catch (err) {
22
+ printConfigLoadError(err);
23
+ }
24
+ }
25
+ // Merge: config file first, then CLI options override
26
+ return {
27
+ ...fileConfig,
28
+ ...cliOptions,
29
+ };
30
+ }
31
+ //# sourceMappingURL=loadConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../../src/config/loadConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE5F;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,UAA+B;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAE7D,IAAI,UAAU,GAAwB,EAAE,CAAC;IAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,OAAO;QACL,GAAG,UAAU;QACb,GAAG,UAAU;KACd,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/config/options.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAmCpB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAwEzD"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/config/options.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AA4DpB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAiEzD"}