dotenv-diff 2.6.2 → 2.6.3
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/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/src/commands/prompts/promptEnsureFiles.js +2 -2
- package/dist/src/commands/prompts/promptEnsureFiles.js.map +1 -1
- package/dist/src/core/patterns.d.ts +7 -10
- package/dist/src/core/patterns.d.ts.map +1 -1
- package/dist/src/core/patterns.js +58 -4
- package/dist/src/core/patterns.js.map +1 -1
- package/dist/src/core/scan/scanFile.d.ts.map +1 -1
- package/dist/src/core/scan/scanFile.js +39 -35
- package/dist/src/core/scan/scanFile.js.map +1 -1
- package/dist/src/services/detectEnvExpirations.js +1 -1
- package/dist/src/services/detectEnvExpirations.js.map +1 -1
- package/dist/src/services/envDiscovery.d.ts.map +1 -1
- package/dist/src/services/envDiscovery.js +3 -9
- package/dist/src/services/envDiscovery.js.map +1 -1
- package/dist/src/services/printScanResult.d.ts.map +1 -1
- package/dist/src/services/printScanResult.js +4 -2
- package/dist/src/services/printScanResult.js.map +1 -1
- package/dist/src/ui/scan/printExpireWarnings.d.ts +1 -1
- package/dist/src/ui/scan/printExpireWarnings.d.ts.map +1 -1
- package/dist/src/ui/scan/printExpireWarnings.js +1 -4
- package/dist/src/ui/scan/printExpireWarnings.js.map +1 -1
- package/dist/src/ui/scan/printFrameworkWarnings.js +1 -1
- package/dist/src/ui/scan/printFrameworkWarnings.js.map +1 -1
- package/docs/index.md +46 -2
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott
|
|
11
11
|
|
|
12
|
+
## [2.6.3](https://github.com/Chrilleweb/dotenv-diff/compare/v2.6.2...v2.6.3) (2026-02-26)
|
|
13
|
+
|
|
14
|
+
### 🐛 Bug Fixes
|
|
15
|
+
|
|
16
|
+
* skip path ([#281](https://github.com/Chrilleweb/dotenv-diff/issues/281)) ([eec0d13](https://github.com/Chrilleweb/dotenv-diff/commit/eec0d13dddb581072f05a1168ad52e65f41693bf))
|
|
17
|
+
* variables patterns ([#282](https://github.com/Chrilleweb/dotenv-diff/issues/282)) ([67515a0](https://github.com/Chrilleweb/dotenv-diff/commit/67515a04c46e1f373041cfe434c4eca01eb36c81))
|
|
18
|
+
|
|
12
19
|
## [2.6.2](https://github.com/Chrilleweb/dotenv-diff/compare/v2.6.1...v2.6.2) (2026-02-24)
|
|
13
20
|
|
|
14
21
|
### 🐛 Bug Fixes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# dotenv-diff
|
|
2
2
|
|
|
3
|
-
Scan your
|
|
3
|
+
Scan your codebase to detect every environment variable reference. It helps you catch missing, unused, duplicated, and misused variables early, before they cause runtime errors.
|
|
4
4
|
|
|
5
5
|
First-class support for SvelteKit and Next.js. Also works well in modern JavaScript/TypeScript projects and frameworks like Node.js, Nuxt, and Vue — or any other setup where you want reliable .env file comparison.
|
|
6
6
|
|
|
@@ -38,7 +38,7 @@ export async function promptEnsureFiles(args) {
|
|
|
38
38
|
? false
|
|
39
39
|
: await confirmYesNo(`Do you want to create a ${path.basename(envPath)} file from ${path.basename(examplePath)}?`, { isCiMode, isYesMode });
|
|
40
40
|
if (!createEnv) {
|
|
41
|
-
printPrompt.skipCreation(
|
|
41
|
+
printPrompt.skipCreation(path.basename(envPath));
|
|
42
42
|
return { didCreate: false, shouldExit: true, exitCode: 0 };
|
|
43
43
|
}
|
|
44
44
|
const exampleContent = fs.readFileSync(examplePath, 'utf-8');
|
|
@@ -58,7 +58,7 @@ export async function promptEnsureFiles(args) {
|
|
|
58
58
|
? false
|
|
59
59
|
: await confirmYesNo(`Do you want to create a ${path.basename(examplePath)} file from ${path.basename(envPath)}?`, { isCiMode, isYesMode });
|
|
60
60
|
if (!createExample) {
|
|
61
|
-
printPrompt.skipCreation(
|
|
61
|
+
printPrompt.skipCreation(path.basename(examplePath));
|
|
62
62
|
return { didCreate: false, shouldExit: true, exitCode: 0 };
|
|
63
63
|
}
|
|
64
64
|
const envContent = fs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promptEnsureFiles.js","sourceRoot":"","sources":["../../../../src/commands/prompts/promptEnsureFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AA+B7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAqB;IAErB,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAEjD,sCAAsC;IACtC,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,EAAE;aACjB,WAAW,CAAC,GAAG,CAAC;aAChB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,WAAW,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC7D,CAAC;QACD,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,SAAS;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,YAAY,CAChB,2BAA2B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAC5F,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;QAER,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,WAAW,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"promptEnsureFiles.js","sourceRoot":"","sources":["../../../../src/commands/prompts/promptEnsureFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
+
type Pattern = {
|
|
2
|
+
name: 'process.env' | 'import.meta.env' | 'sveltekit';
|
|
3
|
+
regex: RegExp;
|
|
4
|
+
processor?: (match: RegExpExecArray) => string[];
|
|
5
|
+
};
|
|
1
6
|
/**
|
|
2
7
|
* Framework-specific regex patterns for detecting environment variable usage
|
|
3
8
|
* across different runtimes and frameworks.
|
|
4
9
|
*/
|
|
5
|
-
export declare const ENV_PATTERNS:
|
|
6
|
-
name: "process.env";
|
|
7
|
-
regex: RegExp;
|
|
8
|
-
} | {
|
|
9
|
-
name: "import.meta.env";
|
|
10
|
-
regex: RegExp;
|
|
11
|
-
} | {
|
|
12
|
-
name: "sveltekit";
|
|
13
|
-
regex: RegExp;
|
|
14
|
-
})[];
|
|
10
|
+
export declare const ENV_PATTERNS: Pattern[];
|
|
15
11
|
export declare const DEFAULT_INCLUDE_EXTENSIONS: string[];
|
|
16
12
|
export declare const DEFAULT_EXCLUDE_PATTERNS: string[];
|
|
13
|
+
export {};
|
|
17
14
|
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/core/patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/core/patterns.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,WAAW,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,EAAE,CAAC;CAClD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,EAqGjC,CAAC;AAGF,eAAO,MAAM,0BAA0B,UAStC,CAAC;AAGF,eAAO,MAAM,wBAAwB,UAiBpC,CAAC"}
|
|
@@ -3,15 +3,69 @@
|
|
|
3
3
|
* across different runtimes and frameworks.
|
|
4
4
|
*/
|
|
5
5
|
export const ENV_PATTERNS = [
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Matches process.env.KEY references in source code.
|
|
8
|
+
* Supports both dot notation and bracket notation.
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* process.env.MY_KEY
|
|
12
|
+
* process.env["MY_KEY"]
|
|
13
|
+
* process.env['MY_KEY']
|
|
14
|
+
*/
|
|
7
15
|
{
|
|
8
16
|
name: 'process.env',
|
|
9
|
-
regex: /process\.env\.([A-Z_][A-Z0-9_]*)/g,
|
|
17
|
+
regex: /process\.env\.([A-Z_][A-Z0-9_]*)|process\.env\[['"]([A-Z_][A-Z0-9_]*)['"]]/g,
|
|
18
|
+
processor: (match) => {
|
|
19
|
+
// match[1] covers dot notation: process.env.KEY
|
|
20
|
+
// match[2] covers bracket notation: process.env['KEY']
|
|
21
|
+
const variable = match[1] || match[2];
|
|
22
|
+
return variable ? [variable] : [];
|
|
23
|
+
},
|
|
10
24
|
},
|
|
11
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Matches object destructuring from process.env.
|
|
27
|
+
* Captures the full object pattern between braces for further parsing.
|
|
28
|
+
*
|
|
29
|
+
* Example:
|
|
30
|
+
* const { MY_KEY, OTHER_KEY: alias, THIRD_KEY = "fallback" } = process.env
|
|
31
|
+
*/
|
|
32
|
+
{
|
|
33
|
+
name: 'process.env',
|
|
34
|
+
regex: /\{([^}]*)\}\s*=\s*process\.env\b/g,
|
|
35
|
+
processor: (match) => {
|
|
36
|
+
const content = match[1];
|
|
37
|
+
if (!content)
|
|
38
|
+
return [];
|
|
39
|
+
return content
|
|
40
|
+
.split(',')
|
|
41
|
+
.map((part) => part.trim())
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.map((part) => {
|
|
44
|
+
// Handle aliases: MY_KEY: alias
|
|
45
|
+
// Handle defaults: MY_KEY = "value"
|
|
46
|
+
// We want the left-most identifier
|
|
47
|
+
const [key] = part.split(/[:=]/);
|
|
48
|
+
return key ? key.trim() : '';
|
|
49
|
+
})
|
|
50
|
+
.filter((key) => /^[A-Z_][A-Z0-9_]*$/.test(key));
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* Matches import.meta.env.KEY references in source code.
|
|
55
|
+
* Supports both dot notation and bracket notation.
|
|
56
|
+
*
|
|
57
|
+
* Examples:
|
|
58
|
+
* import.meta.env.MY_KEY
|
|
59
|
+
* import.meta.env["MY_KEY"]
|
|
60
|
+
* import.meta.env['MY_KEY']
|
|
61
|
+
*/
|
|
12
62
|
{
|
|
13
63
|
name: 'import.meta.env',
|
|
14
|
-
regex: /import\.meta\.env\.([A-Z_][A-Z0-9_]*)/g,
|
|
64
|
+
regex: /import\.meta\.env\.([A-Z_][A-Z0-9_]*)|import\.meta\.env\[['"]([A-Z_][A-Z0-9_]*)['"]]/g,
|
|
65
|
+
processor: (match) => {
|
|
66
|
+
const variable = match[1] || match[2];
|
|
67
|
+
return variable ? [variable] : [];
|
|
68
|
+
},
|
|
15
69
|
},
|
|
16
70
|
// SvelteKit static named imports
|
|
17
71
|
// import { SECRET } from '$env/static/private';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/core/patterns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/core/patterns.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAc;IACrC;;;;;;;;OAQG;IACH;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EACH,6EAA6E;QAC/E,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,gDAAgD;YAChD,uDAAuD;YACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC;KACF;IAED;;;;;;OAMG;IACH;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,mCAAmC;QAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YAExB,OAAO,OAAO;iBACX,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,gCAAgC;gBAChC,oCAAoC;gBACpC,mCAAmC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;KACF;IAED;;;;;;;;OAQG;IACH;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EACH,uFAAuF;QACzF,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC;KACF;IAED,iCAAiC;IACjC,gDAAgD;IAChD,mDAAmD;IACnD;QACE,IAAI,EAAE,WAAoB;QAC1B,KAAK,EACH,2FAA2F;KAC9F;IAED,+BAA+B;IAC/B,uEAAuE;IACvE;QACE,IAAI,EAAE,WAAoB;QAC1B,KAAK,EAAE,oCAAoC;KAC5C;IAED,oDAAoD;IACpD,8CAA8C;IAC9C;QACE,IAAI,EAAE,WAAoB;QAC1B,KAAK,EACH,4FAA4F;KAC/F;IAED,8DAA8D;IAC9D,iCAAiC;IACjC;QACE,IAAI,EAAE,WAAoB;QAC1B,KAAK,EACH,6FAA6F;KAChG;CACF,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;CACP,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,cAAc;IACd,YAAY;IACZ,aAAa;IACb,UAAU;IACV,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,WAAW;CACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanFile.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/scanFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKnE;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,GAChB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"scanFile.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/scanFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKnE;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,GAChB,QAAQ,EAAE,CA4EZ"}
|
|
@@ -12,52 +12,56 @@ import { normalizePath } from '../helpers/normalizePath.js';
|
|
|
12
12
|
export function scanFile(filePath, content, opts) {
|
|
13
13
|
const usages = [];
|
|
14
14
|
const lines = content.split('\n');
|
|
15
|
-
// Get relative path from cwd
|
|
15
|
+
// Get relative path from cwd cross-platform compatible
|
|
16
16
|
const relativePath = normalizePath(path.relative(opts.cwd, filePath));
|
|
17
17
|
// Collect all $env imports used in this file
|
|
18
18
|
const envImports = [];
|
|
19
19
|
const importRegex = /import\s+(?:\{[^}]*\}|\w+)\s+from\s+['"](\$env\/(?:static|dynamic)\/(?:private|public))['"]/g;
|
|
20
20
|
let importMatch;
|
|
21
21
|
while ((importMatch = importRegex.exec(content)) !== null) {
|
|
22
|
-
|
|
23
|
-
envImports.push(importMatch[1]);
|
|
24
|
-
}
|
|
22
|
+
envImports.push(importMatch[1]);
|
|
25
23
|
}
|
|
26
24
|
for (const pattern of ENV_PATTERNS) {
|
|
27
25
|
let match;
|
|
28
26
|
const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
|
|
29
27
|
while ((match = regex.exec(content)) !== null) {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
28
|
+
const variables = pattern.processor
|
|
29
|
+
? pattern.processor(match)
|
|
30
|
+
: [match[1]];
|
|
31
|
+
for (const variable of variables) {
|
|
32
|
+
if (!variable)
|
|
33
|
+
continue;
|
|
34
|
+
const matchIndex = match.index;
|
|
35
|
+
// Find line and column
|
|
36
|
+
// Note: For destructured variables, this points to the start of the destructuring block
|
|
37
|
+
// not the specific variable location. Ideally we'd search within the match.
|
|
38
|
+
const beforeMatch = content.substring(0, matchIndex);
|
|
39
|
+
const lineNumber = beforeMatch.split('\n').length;
|
|
40
|
+
const lastNewlineIndex = beforeMatch.lastIndexOf('\n');
|
|
41
|
+
const column = lastNewlineIndex === -1
|
|
42
|
+
? matchIndex + 1
|
|
43
|
+
: matchIndex - lastNewlineIndex;
|
|
44
|
+
// Get the context (the actual line)
|
|
45
|
+
const contextLine = lines[lineNumber - 1];
|
|
46
|
+
// Determine previous line for ignore detection
|
|
47
|
+
const prevLine = lines[lineNumber - 2] ?? '';
|
|
48
|
+
const isIgnored = hasIgnoreComment(contextLine) || hasIgnoreComment(prevLine);
|
|
49
|
+
// If usage is ignored, skip it entirely
|
|
50
|
+
if (isIgnored)
|
|
51
|
+
continue;
|
|
52
|
+
// Check if console.log
|
|
53
|
+
const isLogged = /\bconsole\.(log|error|warn|info|debug)\s*\(/.test(contextLine);
|
|
54
|
+
usages.push({
|
|
55
|
+
variable,
|
|
56
|
+
file: relativePath,
|
|
57
|
+
line: lineNumber,
|
|
58
|
+
column,
|
|
59
|
+
pattern: pattern.name,
|
|
60
|
+
imports: envImports,
|
|
61
|
+
context: contextLine,
|
|
62
|
+
isLogged,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
return usages;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanFile.js","sourceRoot":"","sources":["../../../../src/core/scan/scanFile.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,QAAgB,EAChB,OAAe,EACf,IAAiB;IAEjB,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,uDAAuD;IACvD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtE,6CAA6C;IAC7C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,WAAW,GACf,8FAA8F,CAAC;IAEjG,IAAI,WAAmC,CAAC;IAExC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"scanFile.js","sourceRoot":"","sources":["../../../../src/core/scan/scanFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export function detectEnvExpirations(filePath) {
|
|
|
19
19
|
const line = raw.trim();
|
|
20
20
|
const expireMatch = line.match(reg);
|
|
21
21
|
if (expireMatch) {
|
|
22
|
-
pendingExpire = expireMatch[2]
|
|
22
|
+
pendingExpire = expireMatch[2]; // capture dato
|
|
23
23
|
continue;
|
|
24
24
|
}
|
|
25
25
|
const isEnvKey = /^[A-Za-z0-9_.-]+=/.test(line);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectEnvExpirations.js","sourceRoot":"","sources":["../../../src/services/detectEnvExpirations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,MAAM,GAAG,GAAG,6CAA6C,CAAC;IAE1D,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAExB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,GAAG,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"detectEnvExpirations.js","sourceRoot":"","sources":["../../../src/services/detectEnvExpirations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,MAAM,GAAG,GAAG,6CAA6C,CAAC;IAE1D,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAExB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,eAAe;YAChD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAE3D,QAAQ,CAAC,IAAI,CAAC;oBACZ,GAAG;oBACH,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;gBAEH,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envDiscovery.d.ts","sourceRoot":"","sources":["../../../src/services/envDiscovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD;;GAEG;AACH,UAAU,oBAAoB;IAC5B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,OAAO,EACP,WAAW,GACZ,EAAE,oBAAoB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"envDiscovery.d.ts","sourceRoot":"","sources":["../../../src/services/envDiscovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD;;GAEG;AACH,UAAU,oBAAoB;IAC5B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,OAAO,EACP,WAAW,GACZ,EAAE,oBAAoB,GAAG,SAAS,CA+ElC"}
|
|
@@ -13,11 +13,7 @@ export function discoverEnvFiles({ cwd, envFlag, exampleFlag, }) {
|
|
|
13
13
|
const envFiles = fs
|
|
14
14
|
.readdirSync(cwd)
|
|
15
15
|
.filter((f) => f.startsWith(DEFAULT_ENV_FILE) && !f.startsWith(DEFAULT_EXAMPLE_FILE))
|
|
16
|
-
.sort((a, b) =>
|
|
17
|
-
? -1
|
|
18
|
-
: b === DEFAULT_ENV_FILE
|
|
19
|
-
? 1
|
|
20
|
-
: a.localeCompare(b));
|
|
16
|
+
.sort((a, b) => (b === DEFAULT_ENV_FILE ? 1 : a.localeCompare(b)));
|
|
21
17
|
let primaryEnv = envFiles.includes(DEFAULT_ENV_FILE)
|
|
22
18
|
? DEFAULT_ENV_FILE
|
|
23
19
|
: envFiles[0] || DEFAULT_ENV_FILE;
|
|
@@ -50,9 +46,7 @@ export function discoverEnvFiles({ cwd, envFlag, exampleFlag, }) {
|
|
|
50
46
|
primaryExample = exampleNameFromFlag;
|
|
51
47
|
if (exampleNameFromFlag.startsWith(DEFAULT_EXAMPLE_FILE)) {
|
|
52
48
|
const suffix = exampleNameFromFlag.slice(DEFAULT_EXAMPLE_FILE.length);
|
|
53
|
-
const matchedEnv = suffix
|
|
54
|
-
? `${DEFAULT_ENV_FILE}${suffix}`
|
|
55
|
-
: DEFAULT_ENV_FILE;
|
|
49
|
+
const matchedEnv = `${DEFAULT_ENV_FILE}${suffix}`;
|
|
56
50
|
if (fs.existsSync(path.resolve(cwd, matchedEnv))) {
|
|
57
51
|
primaryEnv = matchedEnv;
|
|
58
52
|
envFiles.length = 0;
|
|
@@ -66,7 +60,7 @@ export function discoverEnvFiles({ cwd, envFlag, exampleFlag, }) {
|
|
|
66
60
|
}
|
|
67
61
|
else {
|
|
68
62
|
// Use the first available env file instead
|
|
69
|
-
primaryEnv = envFiles[0]
|
|
63
|
+
primaryEnv = envFiles[0];
|
|
70
64
|
}
|
|
71
65
|
}
|
|
72
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envDiscovery.js","sourceRoot":"","sources":["../../../src/services/envDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAchF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,GAAG,EACH,OAAO,EACP,WAAW,GACU;IACrB,qEAAqE;IACrE,MAAM,QAAQ,GAAG,EAAE;SAChB,WAAW,CAAC,GAAG,CAAC;SAChB,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CACxE;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"envDiscovery.js","sourceRoot":"","sources":["../../../src/services/envDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printScanResult.d.ts","sourceRoot":"","sources":["../../../src/services/printScanResult.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACX,MAAM,oBAAoB,CAAC;AAqB5B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,UAAU,
|
|
1
|
+
{"version":3,"file":"printScanResult.d.ts","sourceRoot":"","sources":["../../../src/services/printScanResult.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACX,MAAM,oBAAoB,CAAC;AAqB5B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,UAAU,CA0JZ"}
|
|
@@ -66,7 +66,9 @@ export function printScanResult(scanResult, opts, comparedAgainst, fixContext) {
|
|
|
66
66
|
printConsolelogWarning(scanResult.logged);
|
|
67
67
|
}
|
|
68
68
|
// Expiration warnings
|
|
69
|
-
|
|
69
|
+
if (scanResult.expireWarnings) {
|
|
70
|
+
printExpireWarnings(scanResult.expireWarnings);
|
|
71
|
+
}
|
|
70
72
|
// Check for high severity secrets - ALWAYS exit with error
|
|
71
73
|
const hasHighSeveritySecrets = (scanResult.secrets ?? []).some((s) => s.severity === 'high');
|
|
72
74
|
if (hasHighSeveritySecrets) {
|
|
@@ -89,7 +91,7 @@ export function printScanResult(scanResult, opts, comparedAgainst, fixContext) {
|
|
|
89
91
|
cwd: opts.cwd,
|
|
90
92
|
envFile: DEFAULT_ENV_FILE,
|
|
91
93
|
});
|
|
92
|
-
if (gitignoreIssue
|
|
94
|
+
if (gitignoreIssue) {
|
|
93
95
|
printGitignoreWarning({
|
|
94
96
|
envFile: DEFAULT_ENV_FILE,
|
|
95
97
|
reason: gitignoreIssue.reason,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printScanResult.js","sourceRoot":"","sources":["../../../src/services/printScanResult.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"printScanResult.js","sourceRoot":"","sources":["../../../src/services/printScanResult.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ import type { ExpireWarning } from '../../config/types.js';
|
|
|
5
5
|
* @param isJson Whether to output in JSON format
|
|
6
6
|
* @returns void
|
|
7
7
|
*/
|
|
8
|
-
export declare function printExpireWarnings(warnings: ExpireWarning[]
|
|
8
|
+
export declare function printExpireWarnings(warnings: ExpireWarning[]): void;
|
|
9
9
|
//# sourceMappingURL=printExpireWarnings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printExpireWarnings.d.ts","sourceRoot":"","sources":["../../../../src/ui/scan/printExpireWarnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"printExpireWarnings.d.ts","sourceRoot":"","sources":["../../../../src/ui/scan/printExpireWarnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,QA0B5D"}
|
|
@@ -5,10 +5,7 @@ import chalk from 'chalk';
|
|
|
5
5
|
* @param isJson Whether to output in JSON format
|
|
6
6
|
* @returns void
|
|
7
7
|
*/
|
|
8
|
-
export function printExpireWarnings(warnings
|
|
9
|
-
if (isJson) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
8
|
+
export function printExpireWarnings(warnings) {
|
|
12
9
|
if (warnings.length === 0)
|
|
13
10
|
return;
|
|
14
11
|
console.log(chalk.yellow('⚠️ Expiration warnings:'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printExpireWarnings.js","sourceRoot":"","sources":["../../../../src/ui/scan/printExpireWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,
|
|
1
|
+
{"version":3,"file":"printExpireWarnings.js","sourceRoot":"","sources":["../../../../src/ui/scan/printExpireWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC;gBACjB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC;oBACnB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;oBAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC;wBACnB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC;wBAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;4BAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,QAAQ,OAAO,CAAC;4BAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;gCAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,QAAQ,OAAO,CAAC;gCAClD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,OAAO,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -16,7 +16,7 @@ export function printFrameworkWarnings(warnings) {
|
|
|
16
16
|
return;
|
|
17
17
|
// Deduplicate warnings by variable + file + line + reason
|
|
18
18
|
const uniqueWarnings = Array.from(new Map(warnings.map((w) => [`${w.variable}:${w.file}:${w.line}:${w.reason}`, w])).values());
|
|
19
|
-
console.log(chalk.yellow(`⚠️ Framework issues (${FRAMEWORK_LABELS[uniqueWarnings[0]
|
|
19
|
+
console.log(chalk.yellow(`⚠️ Framework issues (${FRAMEWORK_LABELS[uniqueWarnings[0].framework]}):`));
|
|
20
20
|
for (const w of uniqueWarnings) {
|
|
21
21
|
console.log(chalk.yellow(` - ${w.variable} (${w.file}:${w.line}) → ${w.reason}`));
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printFrameworkWarnings.js","sourceRoot":"","sources":["../../../../src/ui/scan/printFrameworkWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;GAEG;AACH,MAAM,gBAAgB,GAAsC;IAC1D,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IACjE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/C,0DAA0D;IAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,IAAI,GAAG,CACL,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAC1E,CAAC,MAAM,EAAE,CACX,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yBAAyB,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"printFrameworkWarnings.js","sourceRoot":"","sources":["../../../../src/ui/scan/printFrameworkWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;GAEG;AACH,MAAM,gBAAgB,GAAsC;IAC1D,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IACjE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/C,0DAA0D;IAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,IAAI,GAAG,CACL,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAC1E,CAAC,MAAM,EAAE,CACX,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yBAAyB,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,IAAI,CAC5E,CACF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
package/docs/index.md
CHANGED
|
@@ -2,7 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Welcome to the official documentation for `dotenv-diff`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`dotenv-diff` scans your codebase for environment variable usage and compares it against your `.env` and/or `.env.example` files.
|
|
6
|
+
|
|
7
|
+
It helps you:
|
|
8
|
+
|
|
9
|
+
- Detect missing environment variables
|
|
10
|
+
- Detect unused variables in your `.env` files
|
|
11
|
+
- Prevent runtime crashes caused by undefined `process.env` usage
|
|
12
|
+
- Enforce consistent environment configuration across teams
|
|
13
|
+
- Apply framework-specific validation rules (SvelteKit, Next.js, etc.)
|
|
14
|
+
|
|
15
|
+
The tool is designed to be fast, CI-friendly, and safe to run in large projects and monorepos.
|
|
6
16
|
|
|
7
17
|
---
|
|
8
18
|
|
|
@@ -17,9 +27,43 @@ npm install dotenv-diff
|
|
|
17
27
|
Run:
|
|
18
28
|
|
|
19
29
|
```bash
|
|
20
|
-
npx dotenv-diff
|
|
30
|
+
npx dotenv-diff
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
The extension recognises the following patterns:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// Node.js – dot and bracket notation
|
|
39
|
+
process.env.MY_KEY
|
|
40
|
+
process.env["MY_KEY"]
|
|
41
|
+
process.env['MY_KEY']
|
|
42
|
+
|
|
43
|
+
// Node.js – destructuring
|
|
44
|
+
const { MY_KEY } = process.env
|
|
45
|
+
const { MY_KEY: alias, OTHER_KEY = "fallback" } = process.env
|
|
46
|
+
|
|
47
|
+
// Vite / import.meta
|
|
48
|
+
import.meta.env.MY_KEY
|
|
49
|
+
import.meta.env["MY_KEY"]
|
|
50
|
+
import.meta.env['MY_KEY']
|
|
51
|
+
|
|
52
|
+
// SvelteKit – dynamic (env object)
|
|
53
|
+
import { env } from '$env/dynamic/private';
|
|
54
|
+
import { env } from '$env/dynamic/public';
|
|
55
|
+
env.MY_KEY
|
|
56
|
+
|
|
57
|
+
// SvelteKit – static (named imports)
|
|
58
|
+
import { MY_KEY } from '$env/static/private';
|
|
59
|
+
import { MY_KEY } from '$env/static/public';
|
|
60
|
+
MY_KEY
|
|
21
61
|
```
|
|
22
62
|
|
|
63
|
+
Only `UPPER_CASE` key names are matched, which is the standard convention for environment variables.
|
|
64
|
+
|
|
65
|
+
Default scanned file types: .ts, .js, jsx, tsx, vue, .mjs, .cjs, .svelte
|
|
66
|
+
|
|
23
67
|
---
|
|
24
68
|
|
|
25
69
|
## Table of Contents
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dotenv-diff",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Detects environment variable issues, usage, and potential security risks.",
|
|
6
6
|
"bin": {
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@release-it/conventional-changelog": "^10.0.5",
|
|
77
77
|
"@types/node": "^25.3.0",
|
|
78
|
+
"@types/prompts": "^2.4.9",
|
|
78
79
|
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
79
80
|
"@typescript-eslint/parser": "^8.56.1",
|
|
80
81
|
"@vitest/coverage-v8": "4.0.18",
|