dotenv-diff 2.2.7 → 2.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +19 -31
- 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 +60 -173
- package/dist/src/commands/scanUsage.js.map +1 -1
- 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 +1 -0
- package/dist/src/core/secretDetectors.js.map +1 -1
- package/dist/src/services/ensureFilesOrPrompt.d.ts.map +1 -1
- package/dist/src/services/ensureFilesOrPrompt.js +10 -11
- package/dist/src/services/ensureFilesOrPrompt.js.map +1 -1
- 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 +67 -140
- 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 +1 -1
package/dist/src/services/git.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
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":"
|
|
1
|
+
{"version":3,"file":"scanOutputToConsole.d.ts","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAcvE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GACA;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CA+H5B"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { checkGitignoreStatus } from './git.js';
|
|
3
|
+
import { printGitignoreWarning } from '../ui/shared/printGitignore.js';
|
|
4
|
+
import { printHeader } from '../ui/scan/printHeader.js';
|
|
5
|
+
import { printStats } from '../ui/scan/printStats.js';
|
|
6
|
+
import { printUniqueVariables } from '../ui/scan/printUniqueVariables.js';
|
|
7
|
+
import { printVariables } from '../ui/scan/printVariables.js';
|
|
8
|
+
import { printMissing } from '../ui/scan/printMissing.js';
|
|
9
|
+
import { printUnused } from '../ui/scan/printUnused.js';
|
|
10
|
+
import { printDuplicates } from '../ui/shared/printDuplicates.js';
|
|
11
|
+
import { printSecrets } from '../ui/scan/printSecrets.js';
|
|
12
|
+
import { printSuccess } from '../ui/shared/printSuccess.js';
|
|
13
|
+
import { printStrictModeError } from '../ui/shared/printStrictModeError.js';
|
|
14
|
+
import { printFixTips } from '../ui/shared/printFixTips.js';
|
|
15
|
+
import { printAutoFix } from '../ui/shared/printAutoFix.js';
|
|
3
16
|
/**
|
|
4
17
|
* Outputs the scan results to the console.
|
|
5
18
|
* @param scanResult - The result of the scan.
|
|
@@ -7,160 +20,74 @@ import { warnIfEnvNotIgnored, isEnvIgnoredByGit } from './git.js';
|
|
|
7
20
|
* @param comparedAgainst - The file being compared against.
|
|
8
21
|
* @returns An object indicating whether to exit with an error.
|
|
9
22
|
*/
|
|
10
|
-
export function outputToConsole(scanResult, opts, comparedAgainst) {
|
|
23
|
+
export function outputToConsole(scanResult, opts, comparedAgainst, fixContext) {
|
|
11
24
|
let exitWithError = false;
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log();
|
|
16
|
-
}
|
|
25
|
+
// Determine if output should be in JSON format
|
|
26
|
+
const isJson = opts.json ?? false;
|
|
27
|
+
printHeader(comparedAgainst);
|
|
17
28
|
// Show stats if requested
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
console.log(chalk.magenta.dim(` Files scanned: ${scanResult.stats.filesScanned}`));
|
|
21
|
-
console.log(chalk.magenta.dim(` Total usages found: ${scanResult.stats.totalUsages}`));
|
|
22
|
-
console.log(chalk.magenta.dim(` Unique variables: ${scanResult.stats.uniqueVariables}`));
|
|
23
|
-
console.log();
|
|
24
|
-
}
|
|
25
|
-
// Always show found variables when not comparing or when no missing variables
|
|
29
|
+
printStats(scanResult.stats, isJson, opts.showStats ?? true);
|
|
30
|
+
// Show used variables if any found
|
|
26
31
|
if (scanResult.stats.uniqueVariables > 0) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
// Group by variable to get unique list
|
|
32
|
-
const variableUsages = scanResult.used.reduce((acc, usage) => {
|
|
33
|
-
if (!acc[usage.variable]) {
|
|
34
|
-
acc[usage.variable] = [];
|
|
35
|
-
}
|
|
36
|
-
acc[usage.variable].push(usage);
|
|
37
|
-
return acc;
|
|
38
|
-
}, {});
|
|
39
|
-
// Display each unique variable
|
|
40
|
-
for (const [variable, usages] of Object.entries(variableUsages)) {
|
|
41
|
-
console.log(chalk.blue(` ${variable}`));
|
|
42
|
-
// Show usage details if stats are enabled
|
|
43
|
-
if (opts.showStats) {
|
|
44
|
-
const displayUsages = usages.slice(0, 2);
|
|
45
|
-
displayUsages.forEach((usage) => {
|
|
46
|
-
console.log(chalk.blue.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
|
|
47
|
-
});
|
|
48
|
-
if (usages.length > 2) {
|
|
49
|
-
console.log(chalk.gray(` ... and ${usages.length - 2} more locations`));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
console.log();
|
|
54
|
-
}
|
|
32
|
+
// Show unique variables found
|
|
33
|
+
printUniqueVariables(scanResult.stats.uniqueVariables);
|
|
34
|
+
// Print used variables with locations
|
|
35
|
+
printVariables(scanResult.used, opts.showStats ?? false, isJson);
|
|
55
36
|
}
|
|
56
37
|
// Missing variables (used in code but not in env file)
|
|
57
|
-
if (scanResult.missing.
|
|
38
|
+
if (printMissing(scanResult.missing, scanResult.used, comparedAgainst, opts.isCiMode ?? false, isJson)) {
|
|
58
39
|
exitWithError = true;
|
|
59
|
-
const fileType = comparedAgainst || 'environment file';
|
|
60
|
-
console.log(chalk.red(`❌ Missing in ${fileType}:`));
|
|
61
|
-
const grouped = scanResult.missing.reduce((acc, variable) => {
|
|
62
|
-
const usages = scanResult.used.filter((u) => u.variable === variable);
|
|
63
|
-
acc[variable] = usages;
|
|
64
|
-
return acc;
|
|
65
|
-
}, {});
|
|
66
|
-
for (const [variable, usages] of Object.entries(grouped)) {
|
|
67
|
-
console.log(chalk.red(` - ${variable}`));
|
|
68
|
-
// Show first few usages
|
|
69
|
-
const maxShow = 3;
|
|
70
|
-
usages.slice(0, maxShow).forEach((usage) => {
|
|
71
|
-
console.log(chalk.red.dim(` Used in: ${usage.file}:${usage.line} (${usage.pattern})`));
|
|
72
|
-
});
|
|
73
|
-
if (usages.length > maxShow) {
|
|
74
|
-
console.log(chalk.gray(` ... and ${usages.length - maxShow} more locations`));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
console.log();
|
|
78
|
-
// CI mode specific message
|
|
79
|
-
if (opts.isCiMode) {
|
|
80
|
-
console.log(chalk.red(`💥 Found ${scanResult.missing.length} missing environment variable(s).`));
|
|
81
|
-
console.log(chalk.red(` Add these variables to ${comparedAgainst || 'your environment file'} to fix this error.`));
|
|
82
|
-
console.log();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Unused variables (in env file but not used in code)
|
|
86
|
-
if (opts.showUnused && scanResult.unused.length > 0) {
|
|
87
|
-
const fileType = comparedAgainst || 'environment file';
|
|
88
|
-
console.log(chalk.yellow(`⚠️ Unused in codebase (defined in ${fileType}):`));
|
|
89
|
-
scanResult.unused.forEach((variable) => {
|
|
90
|
-
console.log(chalk.yellow(` - ${variable}`));
|
|
91
|
-
});
|
|
92
|
-
console.log();
|
|
93
|
-
}
|
|
94
|
-
// Show duplicates if found - NOW AFTER UNUSED VARIABLES
|
|
95
|
-
if (scanResult.duplicates?.env && scanResult.duplicates.env.length > 0) {
|
|
96
|
-
console.log(chalk.yellow(`⚠️ Duplicate keys in ${comparedAgainst} (last occurrence wins):`));
|
|
97
|
-
scanResult.duplicates.env.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
|
|
98
|
-
console.log();
|
|
99
|
-
}
|
|
100
|
-
if (scanResult.duplicates?.example &&
|
|
101
|
-
scanResult.duplicates.example.length > 0) {
|
|
102
|
-
console.log(chalk.yellow('⚠️ Duplicate keys in example file (last occurrence wins):'));
|
|
103
|
-
scanResult.duplicates.example.forEach(({ key, count }) => console.log(chalk.yellow(` - ${key} (${count} occurrences)`)));
|
|
104
|
-
console.log();
|
|
105
|
-
}
|
|
106
|
-
if (scanResult.secrets && scanResult.secrets.length > 0) {
|
|
107
|
-
console.log(chalk.yellow('🔒 Potential secrets detected in codebase:'));
|
|
108
|
-
const byFile = new Map();
|
|
109
|
-
for (const f of scanResult.secrets) {
|
|
110
|
-
if (!byFile.has(f.file))
|
|
111
|
-
byFile.set(f.file, []);
|
|
112
|
-
byFile.get(f.file).push(f);
|
|
113
|
-
}
|
|
114
|
-
for (const [file, findings] of byFile) {
|
|
115
|
-
console.log(chalk.bold(` ${file}`));
|
|
116
|
-
for (const f of findings) {
|
|
117
|
-
console.log(chalk.yellow(` - Line ${f.line}: ${f.message}\n ${chalk.dim(f.snippet)}`));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
console.log();
|
|
121
40
|
}
|
|
41
|
+
// Unused
|
|
42
|
+
printUnused(scanResult.unused, comparedAgainst, opts.showUnused ?? false, isJson);
|
|
43
|
+
// Duplicates
|
|
44
|
+
printDuplicates(comparedAgainst || '.env', 'example file', scanResult.duplicates?.env ?? [], scanResult.duplicates?.example ?? [], isJson);
|
|
45
|
+
// Print potential secrets found
|
|
46
|
+
printSecrets(scanResult.secrets ?? [], isJson);
|
|
122
47
|
// Success message for env file comparison
|
|
123
48
|
if (comparedAgainst &&
|
|
124
49
|
scanResult.missing.length === 0 &&
|
|
125
|
-
scanResult.secrets
|
|
50
|
+
(scanResult.secrets?.length ?? 0) === 0 &&
|
|
126
51
|
scanResult.used.length > 0) {
|
|
127
|
-
|
|
128
|
-
if (opts.showUnused && scanResult.unused.length === 0) {
|
|
129
|
-
console.log(chalk.green('✅ No unused environment variables found'));
|
|
130
|
-
}
|
|
131
|
-
console.log();
|
|
52
|
+
printSuccess(isJson, 'scan', comparedAgainst, scanResult.unused, opts.showUnused ?? true);
|
|
132
53
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
54
|
+
// Gitignore check
|
|
55
|
+
const gitignoreIssue = checkGitignoreStatus({
|
|
56
|
+
cwd: opts.cwd,
|
|
57
|
+
envFile: '.env',
|
|
58
|
+
});
|
|
59
|
+
if (gitignoreIssue && !opts.json) {
|
|
60
|
+
printGitignoreWarning({
|
|
61
|
+
envFile: '.env',
|
|
62
|
+
reason: gitignoreIssue.reason,
|
|
63
|
+
});
|
|
140
64
|
}
|
|
65
|
+
const hasGitignoreIssue = gitignoreIssue !== null;
|
|
141
66
|
if (opts.strict) {
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
67
|
+
const exit = printStrictModeError({
|
|
68
|
+
unused: scanResult.unused.length,
|
|
69
|
+
duplicatesEnv: scanResult.duplicates?.env?.length ?? 0,
|
|
70
|
+
duplicatesEx: scanResult.duplicates?.example?.length ?? 0,
|
|
71
|
+
secrets: scanResult.secrets?.length ?? 0,
|
|
72
|
+
hasGitignoreIssue,
|
|
73
|
+
}, isJson);
|
|
74
|
+
if (exit)
|
|
148
75
|
exitWithError = true;
|
|
149
|
-
const warnings = [];
|
|
150
|
-
if (scanResult.unused.length > 0)
|
|
151
|
-
warnings.push('unused variables');
|
|
152
|
-
if ((scanResult.duplicates?.env?.length ?? 0) > 0)
|
|
153
|
-
warnings.push('duplicate keys in env');
|
|
154
|
-
if ((scanResult.duplicates?.example?.length ?? 0) > 0)
|
|
155
|
-
warnings.push('duplicate keys in example');
|
|
156
|
-
if ((scanResult.secrets?.length ?? 0) > 0)
|
|
157
|
-
warnings.push('potential secrets');
|
|
158
|
-
if (envNotIgnored)
|
|
159
|
-
warnings.push('.env not ignored by git');
|
|
160
|
-
console.log(chalk.red(`💥 Strict mode: Error on warnings → ${warnings.join(', ')}`));
|
|
161
|
-
console.log();
|
|
162
|
-
}
|
|
163
76
|
}
|
|
77
|
+
if (opts.fix && fixContext) {
|
|
78
|
+
printAutoFix(fixContext.fixApplied, {
|
|
79
|
+
removedDuplicates: fixContext.removedDuplicates,
|
|
80
|
+
addedEnv: fixContext.addedEnv,
|
|
81
|
+
addedExample: opts.examplePath ? fixContext.addedEnv : [],
|
|
82
|
+
}, comparedAgainst || '.env', opts.examplePath ? path.basename(opts.examplePath) : 'example file', isJson, fixContext.gitignoreUpdated);
|
|
83
|
+
}
|
|
84
|
+
// Filtered results for fix tips
|
|
85
|
+
printFixTips({
|
|
86
|
+
missing: scanResult.missing,
|
|
87
|
+
duplicatesEnv: scanResult.duplicates?.env ?? [],
|
|
88
|
+
duplicatesEx: scanResult.duplicates?.example ?? [],
|
|
89
|
+
gitignoreIssue: hasGitignoreIssue ? { reason: 'not-ignored' } : null,
|
|
90
|
+
}, hasGitignoreIssue, isJson, opts.fix ?? false);
|
|
164
91
|
return { exitWithError };
|
|
165
92
|
}
|
|
166
93
|
//# sourceMappingURL=scanOutputToConsole.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanOutputToConsole.js","sourceRoot":"","sources":["../../../src/services/scanOutputToConsole.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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"}
|