dotenv-diff 2.8.2 → 2.9.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 (49) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +14 -0
  3. package/dist/src/cli/program.d.ts.map +1 -1
  4. package/dist/src/cli/program.js +2 -1
  5. package/dist/src/cli/program.js.map +1 -1
  6. package/dist/src/cli/run.d.ts.map +1 -1
  7. package/dist/src/cli/run.js +17 -0
  8. package/dist/src/cli/run.js.map +1 -1
  9. package/dist/src/commands/explain.d.ts +17 -0
  10. package/dist/src/commands/explain.d.ts.map +1 -0
  11. package/dist/src/commands/explain.js +72 -0
  12. package/dist/src/commands/explain.js.map +1 -0
  13. package/dist/src/commands/scanUsage.js +1 -40
  14. package/dist/src/commands/scanUsage.js.map +1 -1
  15. package/dist/src/config/loadConfig.d.ts.map +1 -1
  16. package/dist/src/config/loadConfig.js +2 -12
  17. package/dist/src/config/loadConfig.js.map +1 -1
  18. package/dist/src/config/options.d.ts.map +1 -1
  19. package/dist/src/config/options.js +2 -0
  20. package/dist/src/config/options.js.map +1 -1
  21. package/dist/src/config/types.d.ts +2 -0
  22. package/dist/src/config/types.d.ts.map +1 -1
  23. package/dist/src/core/diffEnv.d.ts.map +1 -1
  24. package/dist/src/core/diffEnv.js.map +1 -1
  25. package/dist/src/core/helpers/findConfigFile.d.ts +9 -0
  26. package/dist/src/core/helpers/findConfigFile.d.ts.map +1 -0
  27. package/dist/src/core/helpers/findConfigFile.js +19 -0
  28. package/dist/src/core/helpers/findConfigFile.js.map +1 -0
  29. package/dist/src/core/helpers/skipCommentedUsages.d.ts +14 -0
  30. package/dist/src/core/helpers/skipCommentedUsages.d.ts.map +1 -0
  31. package/dist/src/core/helpers/skipCommentedUsages.js +41 -0
  32. package/dist/src/core/helpers/skipCommentedUsages.js.map +1 -0
  33. package/dist/src/ui/scan/printExplain.d.ts +20 -0
  34. package/dist/src/ui/scan/printExplain.d.ts.map +1 -0
  35. package/dist/src/ui/scan/printExplain.js +144 -0
  36. package/dist/src/ui/scan/printExplain.js.map +1 -0
  37. package/dist/test/unit/cli/run.test.js +33 -0
  38. package/dist/test/unit/cli/run.test.js.map +1 -1
  39. package/dist/test/unit/commands/explain.test.d.ts +2 -0
  40. package/dist/test/unit/commands/explain.test.d.ts.map +1 -0
  41. package/dist/test/unit/commands/explain.test.js +176 -0
  42. package/dist/test/unit/commands/explain.test.js.map +1 -0
  43. package/dist/test/unit/config/options.test.js +8 -1
  44. package/dist/test/unit/config/options.test.js.map +1 -1
  45. package/dist/test/unit/ui/scan/printExplain.test.d.ts +2 -0
  46. package/dist/test/unit/ui/scan/printExplain.test.d.ts.map +1 -0
  47. package/dist/test/unit/ui/scan/printExplain.test.js +200 -0
  48. package/dist/test/unit/ui/scan/printExplain.test.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,200 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { printExplain } from '../../../../src/ui/scan/printExplain.js';
3
+ vi.mock('../../../../src/core/helpers/normalizePath.js', () => ({
4
+ normalizePath: (p) => p,
5
+ }));
6
+ // Keep theme colors transparent so assertions work on raw text
7
+ vi.mock('../../../../src/ui/theme.js', () => ({
8
+ accent: (s) => s,
9
+ dim: (s) => s,
10
+ error: (s) => s,
11
+ header: (s) => s,
12
+ label: (s) => s,
13
+ divider: '---',
14
+ padLabel: (s) => s,
15
+ value: (s) => s,
16
+ warning: (s) => s,
17
+ }));
18
+ function makeUsage(variable, file = 'src/app.ts', context = '') {
19
+ return {
20
+ variable,
21
+ file,
22
+ line: 5,
23
+ column: 10,
24
+ pattern: 'process.env',
25
+ context,
26
+ };
27
+ }
28
+ function baseResult(overrides = {}) {
29
+ return {
30
+ key: 'API_KEY',
31
+ definedIn: [],
32
+ usages: [],
33
+ isDuplicated: false,
34
+ isIgnored: false,
35
+ ...overrides,
36
+ };
37
+ }
38
+ describe('printExplain', () => {
39
+ let _logSpy;
40
+ let allOutput;
41
+ beforeEach(() => {
42
+ allOutput = [];
43
+ _logSpy = vi
44
+ .spyOn(console, 'log')
45
+ .mockImplementation((...args) => {
46
+ allOutput.push(args.map(String).join(' '));
47
+ });
48
+ });
49
+ afterEach(() => {
50
+ vi.restoreAllMocks();
51
+ });
52
+ // ── getSummary branches ──────────────────────────────────────────────────
53
+ it('shows "missing from env files" when definedIn is empty', () => {
54
+ printExplain(baseResult());
55
+ const output = allOutput.join('\n');
56
+ expect(output).toContain('missing from env files');
57
+ });
58
+ it('shows "needs attention" when key is defined but not used', () => {
59
+ printExplain(baseResult({ definedIn: ['.env'] }));
60
+ const output = allOutput.join('\n');
61
+ expect(output).toContain('needs attention');
62
+ });
63
+ it('shows "needs attention" when key is duplicated', () => {
64
+ printExplain(baseResult({
65
+ definedIn: ['.env'],
66
+ usages: [makeUsage('API_KEY')],
67
+ isDuplicated: true,
68
+ }));
69
+ const output = allOutput.join('\n');
70
+ expect(output).toContain('needs attention');
71
+ });
72
+ it('shows "needs attention" when key is ignored', () => {
73
+ printExplain(baseResult({
74
+ definedIn: ['.env'],
75
+ usages: [makeUsage('API_KEY')],
76
+ isIgnored: true,
77
+ }));
78
+ const output = allOutput.join('\n');
79
+ expect(output).toContain('needs attention');
80
+ });
81
+ it('shows "ok" when key is defined, used, not duplicated, not ignored', () => {
82
+ printExplain(baseResult({
83
+ definedIn: ['.env'],
84
+ usages: [makeUsage('API_KEY')],
85
+ }));
86
+ const output = allOutput.join('\n');
87
+ expect(output).toContain('ok');
88
+ expect(output).not.toContain('needs attention');
89
+ expect(output).not.toContain('missing from env files');
90
+ });
91
+ // ── printFileList branches ───────────────────────────────────────────────
92
+ it('prints "(not found in any env file)" when definedIn is empty', () => {
93
+ printExplain(baseResult());
94
+ expect(allOutput.join('\n')).toContain('(not found in any env file)');
95
+ });
96
+ it('prints single file on the label row', () => {
97
+ printExplain(baseResult({ definedIn: ['.env'] }));
98
+ const output = allOutput.join('\n');
99
+ expect(output).toContain('Defined in');
100
+ expect(output).toContain('.env');
101
+ });
102
+ it('prints multiple files with continuation rows', () => {
103
+ printExplain(baseResult({ definedIn: ['.env', '.env.local', '.env.example'] }));
104
+ // The first file is on the label row, the rest are continuation rows;
105
+ // all three paths must appear in the combined output
106
+ const output = allOutput.join('\n');
107
+ expect(output).toContain('.env');
108
+ expect(output).toContain('.env.local');
109
+ expect(output).toContain('.env.example');
110
+ });
111
+ // ── printUsageList branches ──────────────────────────────────────────────
112
+ it('prints "(not found in codebase)" when there are no usages', () => {
113
+ printExplain(baseResult({ definedIn: ['.env'] }));
114
+ expect(allOutput.join('\n')).toContain('(not found in codebase)');
115
+ });
116
+ it('reports "1 location" for a single usage', () => {
117
+ printExplain(baseResult({
118
+ definedIn: ['.env'],
119
+ usages: [makeUsage('API_KEY')],
120
+ }));
121
+ expect(allOutput.join('\n')).toContain('1 location');
122
+ });
123
+ it('reports "2 locations" for multiple usages', () => {
124
+ printExplain(baseResult({
125
+ definedIn: ['.env'],
126
+ usages: [makeUsage('API_KEY'), makeUsage('API_KEY', 'src/b.ts')],
127
+ }));
128
+ expect(allOutput.join('\n')).toContain('2 locations');
129
+ });
130
+ it('prints usage with context when context is non-empty', () => {
131
+ printExplain(baseResult({
132
+ definedIn: ['.env'],
133
+ usages: [makeUsage('API_KEY', 'src/app.ts', 'process.env.API_KEY')],
134
+ }));
135
+ const output = allOutput.join('\n');
136
+ expect(output).toContain('src/app.ts:5');
137
+ expect(output).toContain('process.env.API_KEY');
138
+ expect(output).toContain('[process.env]');
139
+ });
140
+ it('prints usage without context when context is empty', () => {
141
+ printExplain(baseResult({
142
+ definedIn: ['.env'],
143
+ usages: [makeUsage('API_KEY', 'src/other.ts', '')],
144
+ }));
145
+ const output = allOutput.join('\n');
146
+ expect(output).toContain('src/other.ts:5');
147
+ expect(output).toContain('[process.env]');
148
+ });
149
+ // ── printChecks / formatCheck branches ──────────────────────────────────
150
+ it('shows ✓ for all checks when key is fully healthy', () => {
151
+ printExplain(baseResult({
152
+ definedIn: ['.env'],
153
+ usages: [makeUsage('API_KEY')],
154
+ isDuplicated: false,
155
+ isIgnored: false,
156
+ }));
157
+ const checks = allOutput.filter((l) => l.includes('✓') || l.includes('✘'));
158
+ expect(checks.every((l) => l.includes('✓'))).toBe(true);
159
+ });
160
+ it('shows ✘ Defined when key is not defined', () => {
161
+ printExplain(baseResult({ definedIn: [] }));
162
+ const checksOutput = allOutput.join('\n');
163
+ expect(checksOutput).toContain('✘');
164
+ expect(checksOutput).toContain('Defined');
165
+ });
166
+ it('shows ✘ Used when key is not used', () => {
167
+ printExplain(baseResult({ definedIn: ['.env'] }));
168
+ const checksOutput = allOutput.join('\n');
169
+ // "Used" check should fail
170
+ expect(checksOutput).toContain('✘');
171
+ });
172
+ it('shows ✘ Not duplicated when isDuplicated is true', () => {
173
+ printExplain(baseResult({
174
+ definedIn: ['.env'],
175
+ usages: [makeUsage('API_KEY')],
176
+ isDuplicated: true,
177
+ }));
178
+ expect(allOutput.join('\n')).toContain('✘');
179
+ });
180
+ it('shows ⚠ warning when isIgnored is true', () => {
181
+ printExplain(baseResult({
182
+ definedIn: ['.env'],
183
+ usages: [makeUsage('API_KEY')],
184
+ isIgnored: true,
185
+ }));
186
+ expect(allOutput.join('\n')).toContain('⚠ Key is ignored');
187
+ expect(allOutput.join('\n')).not.toContain('Not ignored');
188
+ });
189
+ // ── structural output ────────────────────────────────────────────────────
190
+ it('prints the key name in the header', () => {
191
+ printExplain(baseResult({ key: 'MY_SECRET' }));
192
+ expect(allOutput.join('\n')).toContain('MY_SECRET');
193
+ });
194
+ it('prints divider at start and end', () => {
195
+ printExplain(baseResult());
196
+ const dividerLines = allOutput.filter((l) => l === '---');
197
+ expect(dividerLines.length).toBeGreaterThanOrEqual(2);
198
+ });
199
+ });
200
+ //# sourceMappingURL=printExplain.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printExplain.test.js","sourceRoot":"","sources":["../../../../../test/unit/ui/scan/printExplain.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotenv-diff",
3
- "version": "2.8.2",
3
+ "version": "2.9.0",
4
4
  "type": "module",
5
5
  "description": "Detects environment variable issues, usage, and potential security risks.",
6
6
  "bin": {