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.
- package/README.md +11 -0
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +133 -102
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/commands/compare.d.ts +2 -20
- package/dist/src/commands/compare.d.ts.map +1 -1
- package/dist/src/commands/compare.js +107 -173
- package/dist/src/commands/compare.js.map +1 -1
- package/dist/src/commands/scanUsage.d.ts.map +1 -1
- package/dist/src/commands/scanUsage.js +61 -182
- package/dist/src/commands/scanUsage.js.map +1 -1
- package/dist/src/config/loadConfig.d.ts +2 -0
- package/dist/src/config/loadConfig.d.ts.map +1 -0
- package/dist/src/config/options.d.ts.map +1 -1
- package/dist/src/config/options.js +42 -32
- package/dist/src/config/options.js.map +1 -1
- package/dist/src/config/types.d.ts +58 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/fixEnv.d.ts +23 -15
- package/dist/src/core/fixEnv.d.ts.map +1 -1
- package/dist/src/core/fixEnv.js +70 -11
- package/dist/src/core/fixEnv.js.map +1 -1
- package/dist/src/core/helpers/isAllOk.d.ts +8 -0
- package/dist/src/core/helpers/isAllOk.d.ts.map +1 -0
- package/dist/src/core/helpers/isAllOk.js +15 -0
- package/dist/src/core/helpers/isAllOk.js.map +1 -0
- package/dist/src/core/helpers/updateTotals.d.ts +20 -0
- package/dist/src/core/helpers/updateTotals.d.ts.map +1 -0
- package/dist/src/core/helpers/updateTotals.js +37 -0
- package/dist/src/core/helpers/updateTotals.js.map +1 -0
- package/dist/src/core/processComparisonFile.d.ts +36 -0
- package/dist/src/core/processComparisonFile.d.ts.map +1 -0
- package/dist/src/core/processComparisonFile.js +124 -0
- package/dist/src/core/processComparisonFile.js.map +1 -0
- package/dist/src/core/secretDetectors.d.ts.map +1 -1
- package/dist/src/core/secretDetectors.js +13 -0
- package/dist/src/core/secretDetectors.js.map +1 -1
- package/dist/src/services/ensureFilesOrPrompt.d.ts +19 -0
- package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -0
- package/dist/src/services/ensureFilesOrPrompt.js +73 -0
- package/dist/src/services/ensureFilesOrPrompt.js.map +1 -0
- package/dist/src/services/git.d.ts +9 -0
- package/dist/src/services/git.d.ts.map +1 -1
- package/dist/src/services/git.js +46 -3
- package/dist/src/services/git.js.map +1 -1
- package/dist/src/services/scanOutputToConsole.d.ts +6 -1
- package/dist/src/services/scanOutputToConsole.d.ts.map +1 -1
- package/dist/src/services/scanOutputToConsole.js +71 -112
- package/dist/src/services/scanOutputToConsole.js.map +1 -1
- package/dist/src/ui/compare/printAutoFix.d.ts +16 -0
- package/dist/src/ui/compare/printAutoFix.d.ts.map +1 -0
- package/dist/src/ui/compare/printAutoFix.js +34 -0
- package/dist/src/ui/compare/printAutoFix.js.map +1 -0
- package/dist/src/ui/compare/printAutoFixApplied.d.ts +7 -0
- package/dist/src/ui/compare/printAutoFixApplied.d.ts.map +1 -0
- package/dist/src/ui/compare/printAutoFixApplied.js +22 -0
- package/dist/src/ui/compare/printAutoFixApplied.js.map +1 -0
- package/dist/src/ui/compare/printDuplicates.d.ts +17 -0
- package/dist/src/ui/compare/printDuplicates.d.ts.map +1 -0
- package/dist/src/ui/compare/printDuplicates.js +25 -0
- package/dist/src/ui/compare/printDuplicates.js.map +1 -0
- package/dist/src/ui/compare/printErrorNotFound.d.ts +9 -0
- package/dist/src/ui/compare/printErrorNotFound.d.ts.map +1 -0
- package/dist/src/ui/compare/printErrorNotFound.js +18 -0
- package/dist/src/ui/compare/printErrorNotFound.js.map +1 -0
- package/dist/src/ui/compare/printFixTips.d.ts +11 -0
- package/dist/src/ui/compare/printFixTips.d.ts.map +1 -0
- package/dist/src/ui/compare/printFixTips.js +46 -0
- package/dist/src/ui/compare/printFixTips.js.map +1 -0
- package/dist/src/ui/compare/printHeader.d.ts +10 -0
- package/dist/src/ui/compare/printHeader.d.ts.map +1 -0
- package/dist/src/ui/compare/printHeader.js +20 -0
- package/dist/src/ui/compare/printHeader.js.map +1 -0
- package/dist/src/ui/compare/printIssues.d.ts +9 -0
- package/dist/src/ui/compare/printIssues.d.ts.map +1 -0
- package/dist/src/ui/compare/printIssues.js +34 -0
- package/dist/src/ui/compare/printIssues.js.map +1 -0
- package/dist/src/ui/compare/printPrompt.d.ts +11 -0
- package/dist/src/ui/compare/printPrompt.d.ts.map +1 -0
- package/dist/src/ui/compare/printPrompt.js +24 -0
- package/dist/src/ui/compare/printPrompt.js.map +1 -0
- package/dist/src/ui/compare/printStats.d.ts +19 -0
- package/dist/src/ui/compare/printStats.d.ts.map +1 -0
- package/dist/src/ui/compare/printStats.js +30 -0
- package/dist/src/ui/compare/printStats.js.map +1 -0
- package/dist/src/ui/compare/printSuccess.d.ts +11 -0
- package/dist/src/ui/compare/printSuccess.d.ts.map +1 -0
- package/dist/src/ui/compare/printSuccess.js +27 -0
- package/dist/src/ui/compare/printSuccess.js.map +1 -0
- package/dist/src/ui/scan/printComparisonError.d.ts +11 -0
- package/dist/src/ui/scan/printComparisonError.d.ts.map +1 -0
- package/dist/src/ui/scan/printComparisonError.js +20 -0
- package/dist/src/ui/scan/printComparisonError.js.map +1 -0
- package/dist/src/ui/scan/printHeader.d.ts +7 -0
- package/dist/src/ui/scan/printHeader.d.ts.map +1 -0
- package/dist/src/ui/scan/printHeader.js +16 -0
- package/dist/src/ui/scan/printHeader.js.map +1 -0
- package/dist/src/ui/scan/printMissing.d.ts +13 -0
- package/dist/src/ui/scan/printMissing.d.ts.map +1 -0
- package/dist/src/ui/scan/printMissing.js +43 -0
- package/dist/src/ui/scan/printMissing.js.map +1 -0
- package/dist/src/ui/scan/printMissingExample.d.ts +9 -0
- package/dist/src/ui/scan/printMissingExample.d.ts.map +1 -0
- package/dist/src/ui/scan/printMissingExample.js +27 -0
- package/dist/src/ui/scan/printMissingExample.js.map +1 -0
- package/dist/src/ui/scan/printSecrets.d.ts +14 -0
- package/dist/src/ui/scan/printSecrets.d.ts.map +1 -0
- package/dist/src/ui/scan/printSecrets.js +29 -0
- package/dist/src/ui/scan/printSecrets.js.map +1 -0
- package/dist/src/ui/scan/printStats.d.ts +13 -0
- package/dist/src/ui/scan/printStats.d.ts.map +1 -0
- package/dist/src/ui/scan/printStats.js +17 -0
- package/dist/src/ui/scan/printStats.js.map +1 -0
- package/dist/src/ui/scan/printUniqueVariables.d.ts +7 -0
- package/dist/src/ui/scan/printUniqueVariables.d.ts.map +1 -0
- package/dist/src/ui/scan/printUniqueVariables.js +14 -0
- package/dist/src/ui/scan/printUniqueVariables.js.map +1 -0
- package/dist/src/ui/scan/printUnused.d.ts +10 -0
- package/dist/src/ui/scan/printUnused.d.ts.map +1 -0
- package/dist/src/ui/scan/printUnused.js +22 -0
- package/dist/src/ui/scan/printUnused.js.map +1 -0
- package/dist/src/ui/scan/printVariables.d.ts +10 -0
- package/dist/src/ui/scan/printVariables.d.ts.map +1 -0
- package/dist/src/ui/scan/printVariables.js +37 -0
- package/dist/src/ui/scan/printVariables.js.map +1 -0
- package/dist/src/ui/shared/printAutoFix.d.ts +16 -0
- package/dist/src/ui/shared/printAutoFix.d.ts.map +1 -0
- package/dist/src/ui/shared/printAutoFix.js +34 -0
- package/dist/src/ui/shared/printAutoFix.js.map +1 -0
- package/dist/src/ui/shared/printDuplicates.d.ts +17 -0
- package/dist/src/ui/shared/printDuplicates.d.ts.map +1 -0
- package/dist/src/ui/shared/printDuplicates.js +25 -0
- package/dist/src/ui/shared/printDuplicates.js.map +1 -0
- package/dist/src/ui/shared/printFixTips.d.ts +11 -0
- package/dist/src/ui/shared/printFixTips.d.ts.map +1 -0
- package/dist/src/ui/shared/printFixTips.js +46 -0
- package/dist/src/ui/shared/printFixTips.js.map +1 -0
- package/dist/src/ui/shared/printGitignore.d.ts +13 -0
- package/dist/src/ui/shared/printGitignore.d.ts.map +1 -0
- package/dist/src/ui/shared/printGitignore.js +22 -0
- package/dist/src/ui/shared/printGitignore.js.map +1 -0
- package/dist/src/ui/shared/printOptionErrors.d.ts +17 -0
- package/dist/src/ui/shared/printOptionErrors.d.ts.map +1 -0
- package/dist/src/ui/shared/printOptionErrors.js +27 -0
- package/dist/src/ui/shared/printOptionErrors.js.map +1 -0
- package/dist/src/ui/shared/printStrictModeError.d.ts +16 -0
- package/dist/src/ui/shared/printStrictModeError.d.ts.map +1 -0
- package/dist/src/ui/shared/printStrictModeError.js +29 -0
- package/dist/src/ui/shared/printStrictModeError.js.map +1 -0
- package/dist/src/ui/shared/printSuccess.d.ts +11 -0
- package/dist/src/ui/shared/printSuccess.d.ts.map +1 -0
- package/dist/src/ui/shared/printSuccess.js +27 -0
- package/dist/src/ui/shared/printSuccess.js.map +1 -0
- package/dist/src/ui/shared/setupGlobalConfig.d.ts +7 -0
- package/dist/src/ui/shared/setupGlobalConfig.d.ts.map +1 -0
- package/dist/src/ui/shared/setupGlobalConfig.js +12 -0
- package/dist/src/ui/shared/setupGlobalConfig.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,16 +1,37 @@
|
|
|
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 {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
5
|
+
import { printMissingExample } from '../ui/scan/printMissingExample.js';
|
|
6
|
+
import { processComparisonFile } from '../core/processComparisonFile.js';
|
|
7
|
+
import { printComparisonError } from '../ui/scan/printComparisonError.js';
|
|
8
|
+
/**
|
|
9
|
+
* Filters out commented usages from the list.
|
|
10
|
+
* Skipping comments:
|
|
11
|
+
* // process.env.API_URL
|
|
12
|
+
* # process.env.API_URL
|
|
13
|
+
* /* process.env.API_URL
|
|
14
|
+
* * process.env.API_URL
|
|
15
|
+
* @param usages - List of environment variable usages
|
|
16
|
+
* @returns Filtered list of environment variable usages
|
|
17
|
+
*/
|
|
18
|
+
function skipCommentedUsages(usages) {
|
|
19
|
+
return usages.filter((u) => u.context && !/^\s*(\/\/|#|\/\*|\*)/.test(u.context.trim()));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Recalculates statistics for a scan result after filtering usages.
|
|
23
|
+
* @param scanResult The current scan result
|
|
24
|
+
* @returns Updated scanResult with recalculated stats
|
|
25
|
+
*/
|
|
26
|
+
function calculateStats(scanResult) {
|
|
27
|
+
const uniqueVariables = new Set(scanResult.used.map((u) => u.variable)).size;
|
|
28
|
+
scanResult.stats = {
|
|
29
|
+
filesScanned: scanResult.stats.filesScanned,
|
|
30
|
+
totalUsages: scanResult.used.length,
|
|
31
|
+
uniqueVariables,
|
|
32
|
+
};
|
|
33
|
+
return scanResult;
|
|
34
|
+
}
|
|
14
35
|
/**
|
|
15
36
|
* Scans codebase for environment variable usage and compares with .env file
|
|
16
37
|
* @param {ScanUsageOptions} opts - Scan configuration options
|
|
@@ -24,150 +45,47 @@ import { applyFixes } from '../core/fixEnv.js';
|
|
|
24
45
|
* @returns {Promise<{exitWithError: boolean}>} Returns true if missing variables found
|
|
25
46
|
*/
|
|
26
47
|
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
48
|
// Scan the codebase
|
|
33
49
|
let scanResult = await scanCodebase(opts);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
scanResult
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
}
|
|
50
|
+
// Filter out commented usages
|
|
51
|
+
scanResult.used = skipCommentedUsages(scanResult.used);
|
|
52
|
+
// Recalculate stats after filtering
|
|
53
|
+
calculateStats(scanResult);
|
|
54
|
+
// If user explicitly passed --example flag, but the file doesn't exist:
|
|
55
|
+
if (printMissingExample(opts)) {
|
|
56
|
+
return { exitWithError: true };
|
|
58
57
|
}
|
|
59
58
|
// Determine which file to compare against
|
|
60
59
|
const compareFile = determineComparisonFile(opts);
|
|
61
60
|
let envVariables = {};
|
|
62
61
|
let comparedAgainst = '';
|
|
63
62
|
let duplicatesFound = false;
|
|
64
|
-
let dupsEnv = [];
|
|
65
|
-
let dupsExample = [];
|
|
66
63
|
// Store fix information for consolidated display
|
|
67
64
|
let fixApplied = false;
|
|
68
65
|
let fixedKeys = [];
|
|
69
66
|
let removedDuplicates = [];
|
|
67
|
+
let gitignoreUpdated = false;
|
|
68
|
+
// If comparing against a file, process it
|
|
69
|
+
// fx: if the scan is comparing against .env.example, it will check for missing keys there
|
|
70
70
|
if (compareFile) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
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}`));
|
|
71
|
+
const result = processComparisonFile(scanResult, compareFile, opts);
|
|
72
|
+
if (result.error) {
|
|
73
|
+
const { exit } = printComparisonError(result.error.message, result.error.shouldExit, opts.json ?? false);
|
|
74
|
+
if (exit)
|
|
127
75
|
return { exitWithError: true };
|
|
128
|
-
}
|
|
129
|
-
if (!opts.json) {
|
|
130
|
-
console.log(chalk.yellow(errorMessage));
|
|
131
|
-
}
|
|
132
76
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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 = [];
|
|
77
|
+
else {
|
|
78
|
+
scanResult = result.scanResult;
|
|
79
|
+
envVariables = result.envVariables;
|
|
80
|
+
comparedAgainst = result.comparedAgainst;
|
|
81
|
+
duplicatesFound = result.duplicatesFound;
|
|
82
|
+
fixApplied = result.fixApplied;
|
|
83
|
+
removedDuplicates = result.removedDuplicates;
|
|
84
|
+
fixedKeys = result.addedEnv;
|
|
85
|
+
gitignoreUpdated = result.gitignoreUpdated;
|
|
168
86
|
}
|
|
169
87
|
}
|
|
170
|
-
//
|
|
88
|
+
// JSON output
|
|
171
89
|
if (opts.json) {
|
|
172
90
|
const jsonOutput = createJsonOutput(scanResult, opts, comparedAgainst, Object.keys(envVariables).length);
|
|
173
91
|
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
@@ -182,51 +100,12 @@ export async function scanUsage(opts) {
|
|
|
182
100
|
};
|
|
183
101
|
}
|
|
184
102
|
// Console output
|
|
185
|
-
const result = outputToConsole(scanResult, opts, comparedAgainst
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
}
|
|
222
|
-
return {
|
|
223
|
-
exitWithError: result.exitWithError ||
|
|
224
|
-
duplicatesFound ||
|
|
225
|
-
!!(opts.strict &&
|
|
226
|
-
(scanResult.unused.length > 0 ||
|
|
227
|
-
(scanResult.duplicates?.env?.length ?? 0) > 0 ||
|
|
228
|
-
(scanResult.duplicates?.example?.length ?? 0) > 0 ||
|
|
229
|
-
(scanResult.secrets?.length ?? 0) > 0)),
|
|
230
|
-
};
|
|
103
|
+
const result = outputToConsole(scanResult, opts, comparedAgainst, {
|
|
104
|
+
fixApplied,
|
|
105
|
+
removedDuplicates,
|
|
106
|
+
addedEnv: fixedKeys,
|
|
107
|
+
gitignoreUpdated,
|
|
108
|
+
});
|
|
109
|
+
return { exitWithError: result.exitWithError || duplicatesFound };
|
|
231
110
|
}
|
|
232
111
|
//# sourceMappingURL=scanUsage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanUsage.js","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"scanUsage.js","sourceRoot":"","sources":["../../../src/commands/scanUsage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/config/options.ts"],"names":[],"mappings":"
|
|
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,CA2DzD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
1
|
import path from 'path';
|
|
3
2
|
import { ALLOWED_CATEGORIES, } from './types.js';
|
|
3
|
+
import { printInvalidCategory, printInvalidRegex, printCiYesWarning, } from '../ui/shared/printOptionErrors.js';
|
|
4
4
|
/**
|
|
5
5
|
* Parses a comma-separated list of strings into an array of strings.
|
|
6
6
|
* @param val - The input value, which can be a string, an array of strings, or undefined.
|
|
@@ -19,58 +19,68 @@ function parseList(val) {
|
|
|
19
19
|
* @param flagName - The name of the flag being parsed (for error messages).
|
|
20
20
|
* @returns An array of categories.
|
|
21
21
|
*/
|
|
22
|
-
function parseCategories(val, flagName = '') {
|
|
22
|
+
function parseCategories(val, flagName = '--only') {
|
|
23
23
|
const raw = parseList(val);
|
|
24
24
|
const bad = raw.filter((c) => !ALLOWED_CATEGORIES.includes(c));
|
|
25
25
|
if (bad.length) {
|
|
26
|
-
|
|
27
|
-
process.exit(1);
|
|
26
|
+
printInvalidCategory(flagName, bad, ALLOWED_CATEGORIES);
|
|
28
27
|
}
|
|
29
28
|
return raw;
|
|
30
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Parses regex patterns safely, exiting on invalid syntax.
|
|
32
|
+
*/
|
|
33
|
+
function parseRegexList(val) {
|
|
34
|
+
const regexList = [];
|
|
35
|
+
for (const pattern of parseList(val)) {
|
|
36
|
+
try {
|
|
37
|
+
regexList.push(new RegExp(pattern));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
printInvalidRegex(pattern);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return regexList;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Converts flag value to boolean.
|
|
47
|
+
*/
|
|
48
|
+
function toBool(value) {
|
|
49
|
+
return value === true || value === 'true';
|
|
50
|
+
}
|
|
31
51
|
/**
|
|
32
52
|
* Normalizes the raw options by providing default values and parsing specific fields.
|
|
33
53
|
* @param raw - The raw options to normalize.
|
|
34
54
|
* @returns The normalized options.
|
|
35
55
|
*/
|
|
36
56
|
export function normalizeOptions(raw) {
|
|
37
|
-
const checkValues = raw.checkValues
|
|
38
|
-
const isCiMode =
|
|
39
|
-
const isYesMode =
|
|
40
|
-
const allowDuplicates =
|
|
41
|
-
const fix =
|
|
42
|
-
const json =
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const compare = Boolean(raw.compare);
|
|
57
|
+
const checkValues = toBool(raw.checkValues);
|
|
58
|
+
const isCiMode = toBool(raw.ci);
|
|
59
|
+
const isYesMode = toBool(raw.yes);
|
|
60
|
+
const allowDuplicates = toBool(raw.allowDuplicates);
|
|
61
|
+
const fix = toBool(raw.fix);
|
|
62
|
+
const json = toBool(raw.json);
|
|
63
|
+
const noColor = toBool(raw.noColor);
|
|
64
|
+
const compare = toBool(raw.compare);
|
|
65
|
+
const strict = toBool(raw.strict);
|
|
47
66
|
const scanUsage = raw.scanUsage ?? !compare;
|
|
67
|
+
const showUnused = raw.showUnused !== false;
|
|
68
|
+
const showStats = raw.showStats !== false;
|
|
69
|
+
const secrets = raw.secrets !== false;
|
|
70
|
+
const only = parseCategories(raw.only);
|
|
71
|
+
const ignore = parseList(raw.ignore);
|
|
72
|
+
const ignoreRegex = parseRegexList(raw.ignoreRegex);
|
|
48
73
|
const includeFiles = parseList(raw.includeFiles);
|
|
49
74
|
const excludeFiles = parseList(raw.excludeFiles);
|
|
50
|
-
const showUnused = raw.showUnused === false ? false : true;
|
|
51
|
-
const showStats = raw.showStats === false ? false : true;
|
|
52
75
|
const files = parseList(raw.files);
|
|
53
|
-
const secrets = raw.secrets === false ? false : true;
|
|
54
|
-
const strict = Boolean(raw.strict);
|
|
55
|
-
const ignore = parseList(raw.ignore);
|
|
56
|
-
const ignoreRegex = [];
|
|
57
|
-
for (const pattern of parseList(raw.ignoreRegex)) {
|
|
58
|
-
try {
|
|
59
|
-
ignoreRegex.push(new RegExp(pattern));
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
console.error(chalk.red(`❌ Error: invalid --ignore-regex pattern: ${pattern}`));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (isCiMode && isYesMode) {
|
|
67
|
-
console.log(chalk.yellow('⚠️ Both --ci and --yes provided; proceeding with --yes.'));
|
|
68
|
-
}
|
|
69
76
|
const cwd = process.cwd();
|
|
70
77
|
const envFlag = typeof raw.env === 'string' ? path.resolve(cwd, raw.env) : undefined;
|
|
71
78
|
const exampleFlag = typeof raw.example === 'string'
|
|
72
79
|
? path.resolve(cwd, raw.example)
|
|
73
80
|
: undefined;
|
|
81
|
+
if (isCiMode && isYesMode) {
|
|
82
|
+
printCiYesWarning();
|
|
83
|
+
}
|
|
74
84
|
return {
|
|
75
85
|
checkValues,
|
|
76
86
|
isCiMode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/config/options.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/config/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -183,4 +183,62 @@ export interface ScanJsonEntry {
|
|
|
183
183
|
export interface VariableUsages {
|
|
184
184
|
[variable: string]: EnvUsage[];
|
|
185
185
|
}
|
|
186
|
+
export interface ComparisonOptions {
|
|
187
|
+
checkValues: boolean;
|
|
188
|
+
cwd: string;
|
|
189
|
+
allowDuplicates?: boolean;
|
|
190
|
+
fix?: boolean;
|
|
191
|
+
json?: boolean;
|
|
192
|
+
ignore: string[];
|
|
193
|
+
ignoreRegex: RegExp[];
|
|
194
|
+
collect?: (entry: CompareJsonEntry) => void;
|
|
195
|
+
only?: Category[];
|
|
196
|
+
showStats?: boolean;
|
|
197
|
+
strict?: boolean;
|
|
198
|
+
}
|
|
199
|
+
export interface FilePair {
|
|
200
|
+
envName: string;
|
|
201
|
+
envPath: string;
|
|
202
|
+
examplePath: string;
|
|
203
|
+
}
|
|
204
|
+
export interface ComparisonResult {
|
|
205
|
+
exitWithError: boolean;
|
|
206
|
+
}
|
|
207
|
+
export type PairContext = {
|
|
208
|
+
envName: string;
|
|
209
|
+
envPath: string;
|
|
210
|
+
exampleName: string;
|
|
211
|
+
examplePath: string;
|
|
212
|
+
exists: {
|
|
213
|
+
env: boolean;
|
|
214
|
+
example: boolean;
|
|
215
|
+
};
|
|
216
|
+
currentFull?: Record<string, string>;
|
|
217
|
+
exampleFull?: Record<string, string>;
|
|
218
|
+
currentKeys?: string[];
|
|
219
|
+
exampleKeys?: string[];
|
|
220
|
+
current?: Record<string, string>;
|
|
221
|
+
example?: Record<string, string>;
|
|
222
|
+
};
|
|
223
|
+
export type Filtered = {
|
|
224
|
+
missing: string[];
|
|
225
|
+
extra?: string[];
|
|
226
|
+
empty?: string[];
|
|
227
|
+
mismatches?: Array<{
|
|
228
|
+
key: string;
|
|
229
|
+
expected: string;
|
|
230
|
+
actual: string;
|
|
231
|
+
}>;
|
|
232
|
+
duplicatesEnv: Array<{
|
|
233
|
+
key: string;
|
|
234
|
+
count: number;
|
|
235
|
+
}>;
|
|
236
|
+
duplicatesEx: Array<{
|
|
237
|
+
key: string;
|
|
238
|
+
count: number;
|
|
239
|
+
}>;
|
|
240
|
+
gitignoreIssue: {
|
|
241
|
+
reason: 'no-gitignore' | 'not-ignored';
|
|
242
|
+
} | null;
|
|
243
|
+
};
|
|
186
244
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
* Applies fixes to the .env and .env.example files based on the detected issues.
|
|
3
|
-
* @param envPath - The path to the .env file.
|
|
4
|
-
* @param examplePath - The path to the .env.example file.
|
|
5
|
-
* @param missingKeys - The list of missing keys to add.
|
|
6
|
-
* @param duplicateKeys - The list of duplicate keys to remove.
|
|
7
|
-
* @returns An object indicating whether changes were made and details of the changes.
|
|
8
|
-
*/
|
|
9
|
-
export declare function applyFixes({ envPath, examplePath, missingKeys, duplicateKeys, }: {
|
|
1
|
+
export type ApplyFixesOptions = {
|
|
10
2
|
envPath: string;
|
|
11
3
|
examplePath: string;
|
|
12
4
|
missingKeys: string[];
|
|
13
5
|
duplicateKeys: string[];
|
|
14
|
-
|
|
6
|
+
ensureGitignore?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type FixResult = {
|
|
9
|
+
removedDuplicates: string[];
|
|
10
|
+
addedEnv: string[];
|
|
11
|
+
addedExample: string[];
|
|
12
|
+
gitignoreUpdated: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Applies fixes to the .env and .env.example files based on the detected issues.
|
|
16
|
+
*
|
|
17
|
+
* This function will:
|
|
18
|
+
* - Remove duplicate keys from .env (keeping the last occurrence)
|
|
19
|
+
* - Add missing keys to .env with empty values
|
|
20
|
+
* - Add missing keys to .env.example (if not already present)
|
|
21
|
+
* - Ensure .env is ignored in .gitignore (if in a git repo and ensureGitignore is true)
|
|
22
|
+
*
|
|
23
|
+
* @param options - Fix options including file paths and keys to fix
|
|
24
|
+
* @returns An object indicating whether changes were made and details of the changes
|
|
25
|
+
*/
|
|
26
|
+
export declare function applyFixes(options: ApplyFixesOptions): {
|
|
15
27
|
changed: boolean;
|
|
16
|
-
result:
|
|
17
|
-
removedDuplicates: string[];
|
|
18
|
-
addedEnv: string[];
|
|
19
|
-
addedExample: string[];
|
|
20
|
-
};
|
|
28
|
+
result: FixResult;
|
|
21
29
|
};
|
|
22
30
|
//# sourceMappingURL=fixEnv.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixEnv.d.ts","sourceRoot":"","sources":["../../../src/core/fixEnv.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixEnv.d.ts","sourceRoot":"","sources":["../../../src/core/fixEnv.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;CACnB,CAmFA"}
|