dotenv-diff 2.3.12 → 2.4.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.
package/CHANGELOG.md CHANGED
@@ -17,6 +17,19 @@ This project follows [Keep a Changelog](https://keepachangelog.com/) and [Semant
17
17
 
18
18
  -
19
19
 
20
+ ## [2.4.0] - 2025-12-26
21
+
22
+ ### Changed
23
+
24
+ - Added spacing before missing example file message in scan usage output.
25
+ - Changed path display for print missing example file message to show only filename instead of full path.
26
+
27
+ ### Fixed
28
+
29
+ - Fixed compare mode value mismatch count not showing in stats output if --check-values flag isn't used.
30
+ - Fixed t3-env integration not working as expected in some edge cases.
31
+ - Fixed nextjs framework validator not working as expected in some edge cases.
32
+
20
33
  ## [2.3.12] - 2025-12-18
21
34
 
22
35
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/commands/compare.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAGjB,MAAM,oBAAoB,CAAC;AA2G5B;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAoK3B"}
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/commands/compare.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAGjB,MAAM,oBAAoB,CAAC;AA2G5B;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAqK3B"}
@@ -132,7 +132,7 @@ export async function compareMany(pairs, opts) {
132
132
  sharedCount,
133
133
  duplicateCount,
134
134
  valueMismatchCount,
135
- }, filtered, opts.json ?? false, opts.showStats ?? true);
135
+ }, filtered, opts.json ?? false, opts.showStats ?? true, opts.checkValues ?? false);
136
136
  }
137
137
  // Check if all is OK
138
138
  const allOk = isAllOk(filtered);
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/commands/compare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/commands/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { EnvUsage } from '../config/types.js';
2
+ import type { Framework } from './frameworkDetector.js';
3
+ /**
4
+ * Detects which environment variables are exposed to the client/browser
5
+ * based on the framework and usage patterns.
6
+ *
7
+ * @param usages - All environment variable usages found in the codebase
8
+ * @param framework - The detected framework (sveltekit, next, or unknown)
9
+ * @returns Set of unique variable names that are client-exposed
10
+ */
11
+ export declare function detectClientExposedVars(usages: readonly EnvUsage[], framework: Framework): Set<string>;
12
+ //# sourceMappingURL=detectClientExposure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectClientExposure.d.ts","sourceRoot":"","sources":["../../../src/core/detectClientExposure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,SAAS,EAAE,SAAS,GACnB,GAAG,CAAC,MAAM,CAAC,CAiEb"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Detects which environment variables are exposed to the client/browser
3
+ * based on the framework and usage patterns.
4
+ *
5
+ * @param usages - All environment variable usages found in the codebase
6
+ * @param framework - The detected framework (sveltekit, next, or unknown)
7
+ * @returns Set of unique variable names that are client-exposed
8
+ */
9
+ export function detectClientExposedVars(usages, framework) {
10
+ const clientExposed = new Set();
11
+ if (framework === 'unknown') {
12
+ return clientExposed;
13
+ }
14
+ for (const u of usages) {
15
+ // Skip node_modules
16
+ if (u.file.includes('node_modules')) {
17
+ continue;
18
+ }
19
+ if (framework === 'sveltekit') {
20
+ // SvelteKit: import.meta.env is always client-exposed
21
+ if (u.pattern === 'import.meta.env') {
22
+ clientExposed.add(u.variable);
23
+ continue;
24
+ }
25
+ // SvelteKit: $env/static/public is client-exposed
26
+ if (u.pattern === 'sveltekit' &&
27
+ u.context.includes('$env/static/public')) {
28
+ clientExposed.add(u.variable);
29
+ continue;
30
+ }
31
+ // SvelteKit: PUBLIC_ prefix in any context is client-exposed
32
+ if (u.variable.startsWith('PUBLIC_')) {
33
+ clientExposed.add(u.variable);
34
+ continue;
35
+ }
36
+ // SvelteKit: Variables used in client-side files (+page.ts, +layout.ts, .svelte)
37
+ const isSvelteClientFile = u.file.endsWith('.svelte') || /\+page\.ts$|\+layout\.ts$/.test(u.file);
38
+ if (isSvelteClientFile && u.pattern !== 'sveltekit') {
39
+ // Only if NOT using $env/static/private
40
+ if (!u.context.includes('$env/static/private')) {
41
+ clientExposed.add(u.variable);
42
+ }
43
+ }
44
+ }
45
+ else if (framework === 'next') {
46
+ // Next.js: NEXT_PUBLIC_ prefix is always client-exposed
47
+ if (u.variable.startsWith('NEXT_PUBLIC_')) {
48
+ clientExposed.add(u.variable);
49
+ continue;
50
+ }
51
+ // Next.js: Variables used in client components
52
+ const isClientComponent = u.context.includes('use client') ||
53
+ u.context.includes('"use client"') ||
54
+ u.context.includes("'use client'");
55
+ if (isClientComponent) {
56
+ clientExposed.add(u.variable);
57
+ }
58
+ }
59
+ }
60
+ return clientExposed;
61
+ }
62
+ //# sourceMappingURL=detectClientExposure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectClientExposure.js","sourceRoot":"","sources":["../../../src/core/detectClientExposure.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA2B,EAC3B,SAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,oBAAoB;QACpB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QAED,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,sDAAsD;YACtD,IAAI,CAAC,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;gBACpC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,kDAAkD;YAClD,IACE,CAAC,CAAC,OAAO,KAAK,WAAW;gBACzB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EACxC,CAAC;gBACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,6DAA6D;YAC7D,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,iFAAiF;YACjF,MAAM,kBAAkB,GACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEzE,IAAI,kBAAkB,IAAI,CAAC,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;gBACpD,wCAAwC;gBACxC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBAC/C,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAChC,wDAAwD;YACxD,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1C,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,+CAA+C;YAC/C,MAAM,iBAAiB,GACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAClC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAErC,IAAI,iBAAiB,EAAE,CAAC;gBACtB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nextJsRules.d.ts","sourceRoot":"","sources":["../../../../src/core/frameworks/nextJsRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,IAAI,CAwDN"}
1
+ {"version":3,"file":"nextJsRules.d.ts","sourceRoot":"","sources":["../../../../src/core/frameworks/nextJsRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,IAAI,CAkFN"}
@@ -4,41 +4,67 @@
4
4
  * @param warnings - The array to push warnings into
5
5
  */
6
6
  export function applyNextJsRules(u, warnings) {
7
- const isServerOnlyFile = u.file.includes('app/api/') ||
8
- u.file.endsWith('.server.ts') ||
9
- u.file.endsWith('.server.js');
10
- if (u.pattern === 'process.env' && u.variable.startsWith('NEXT_PUBLIC_')) {
11
- if (isServerOnlyFile) {
12
- warnings.push({
13
- variable: u.variable,
14
- reason: "NEXT_PUBLIC_ variables are exposed to the browser — don't use them in server-only files",
15
- file: u.file,
16
- line: u.line,
17
- framework: 'next',
18
- });
19
- }
7
+ // Ignore node_modules
8
+ if (u.file.includes('node_modules')) {
9
+ return;
20
10
  }
21
- const looksLikeClientComponent = u.file.includes('/components/') || u.context.includes('use client');
22
- if (u.pattern === 'process.env' &&
23
- !u.variable.startsWith('NEXT_PUBLIC_') &&
24
- looksLikeClientComponent) {
11
+ // Detect client components
12
+ const isClientComponent = u.context.includes('use client') ||
13
+ u.context.includes('"use client"') ||
14
+ u.context.includes("'use client'");
15
+ // Detect server-only files
16
+ const isServerOnlyFile = u.file.includes('/app/api/') ||
17
+ u.file.includes('/pages/api/') ||
18
+ u.file.endsWith('.server.ts') ||
19
+ u.file.endsWith('.server.tsx') ||
20
+ u.file.endsWith('.server.js') ||
21
+ u.file.endsWith('.server.jsx') ||
22
+ u.file.endsWith('middleware.ts') ||
23
+ u.file.endsWith('middleware.js') ||
24
+ u.file.includes('/route.ts') ||
25
+ u.file.includes('/route.js');
26
+ // Server-only files should NOT use NEXT_PUBLIC_ variables
27
+ if (isServerOnlyFile && u.variable.startsWith('NEXT_PUBLIC_')) {
25
28
  warnings.push({
26
29
  variable: u.variable,
27
- reason: 'Client components can only access NEXT_PUBLIC_ environment variables',
30
+ reason: "NEXT_PUBLIC_ variables are exposed to the browser — don't use them in server-only files",
28
31
  file: u.file,
29
32
  line: u.line,
30
33
  framework: 'next',
31
34
  });
32
35
  }
33
- const isClientComponentFile = u.file.endsWith('.tsx') ||
34
- u.file.endsWith('.jsx') ||
35
- u.context.includes('use client');
36
- if (u.pattern === 'process.env' &&
37
- isClientComponentFile &&
36
+ // Client components MUST use NEXT_PUBLIC_ prefix
37
+ if (isClientComponent &&
38
+ u.pattern === 'process.env' &&
38
39
  !u.variable.startsWith('NEXT_PUBLIC_')) {
39
40
  warnings.push({
40
41
  variable: u.variable,
41
- reason: 'process.env inside client components must use NEXT_PUBLIC_ variables',
42
+ reason: 'Client components must use NEXT_PUBLIC_ prefix for environment variables to be accessible in the browser',
43
+ file: u.file,
44
+ line: u.line,
45
+ framework: 'next',
46
+ });
47
+ }
48
+ // Warn about Vite syntax in Next.js
49
+ if (u.pattern === 'import.meta.env') {
50
+ warnings.push({
51
+ variable: u.variable,
52
+ reason: 'Next.js uses process.env, not import.meta.env (Vite syntax)',
53
+ file: u.file,
54
+ line: u.line,
55
+ framework: 'next',
56
+ });
57
+ }
58
+ // Warn if NEXT_PUBLIC_ contains sensitive keywords
59
+ if (u.variable.startsWith('NEXT_PUBLIC_') &&
60
+ (u.variable.includes('SECRET') ||
61
+ u.variable.includes('PRIVATE') ||
62
+ u.variable.includes('KEY') ||
63
+ u.variable.includes('TOKEN') ||
64
+ u.variable.includes('PASSWORD'))) {
65
+ warnings.push({
66
+ variable: u.variable,
67
+ reason: 'NEXT_PUBLIC_ variables are exposed to the browser. Do not use NEXT_PUBLIC_ prefix for sensitive data',
42
68
  file: u.file,
43
69
  line: u.line,
44
70
  framework: 'next',
@@ -1 +1 @@
1
- {"version":3,"file":"nextJsRules.js","sourceRoot":"","sources":["../../../../src/core/frameworks/nextJsRules.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,CAAW,EACX,QAA4B;IAE5B,MAAM,gBAAgB,GACpB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEhC,IAAI,CAAC,CAAC,OAAO,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACzE,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EACJ,yFAAyF;gBAC3F,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,MAAM;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,wBAAwB,GAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtE,IACE,CAAC,CAAC,OAAO,KAAK,aAAa;QAC3B,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;QACtC,wBAAwB,EACxB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EACJ,sEAAsE;YACxE,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,qBAAqB,GACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEnC,IACE,CAAC,CAAC,OAAO,KAAK,aAAa;QAC3B,qBAAqB;QACrB,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EACtC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EACJ,sEAAsE;YACxE,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"nextJsRules.js","sourceRoot":"","sources":["../../../../src/core/frameworks/nextJsRules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"t3EnvRules.d.ts","sourceRoot":"","sources":["../../../../src/core/t3env/t3EnvRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,WAAW,GAClB,IAAI,CA0EN"}
1
+ {"version":3,"file":"t3EnvRules.d.ts","sourceRoot":"","sources":["../../../../src/core/t3env/t3EnvRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,WAAW,GAClB,IAAI,CAsEN"}
@@ -5,60 +5,56 @@
5
5
  * @param schema - The t3-env schema to validate against
6
6
  */
7
7
  export function applyT3EnvRules(u, warnings, schema) {
8
+ // Ignore env definition files
9
+ if (u.file.endsWith('/env.ts') ||
10
+ u.file.endsWith('/env.mjs') ||
11
+ u.file.endsWith('/env.js') ||
12
+ u.file.endsWith('\\env.ts') ||
13
+ u.file.endsWith('\\env.mjs') ||
14
+ u.file.endsWith('\\env.js')) {
15
+ return;
16
+ }
17
+ // Ignore node_modules
18
+ if (u.file.includes('node_modules')) {
19
+ return;
20
+ }
8
21
  const allServerVars = schema.server;
9
22
  const allClientVars = schema.client;
10
- // Check if variable is used in client code but not defined in client schema
11
- const isClientContext = u.file.includes('/components/') ||
12
- u.file.includes('/pages/') ||
13
- u.file.includes('/app/') ||
14
- u.file.includes('client') ||
15
- u.file.includes('browser') ||
23
+ // Client context = explicit "use client" directive or import.meta.env
24
+ const isClientContext = u.context.includes('use client') ||
25
+ u.context.includes('"use client"') ||
26
+ u.context.includes("'use client'") ||
16
27
  u.pattern === 'import.meta.env';
17
- const isServerContext = u.file.includes('/api/') ||
18
- u.file.includes('server') ||
19
- u.file.endsWith('.server.ts') ||
20
- u.file.endsWith('.server.js') ||
21
- u.pattern === 'process.env';
22
- // Variable used in client context but only defined in server schema
23
- if (isClientContext &&
24
- allServerVars.includes(u.variable) &&
25
- !allClientVars.includes(u.variable)) {
28
+ // Discourage NEXT_PUBLIC_ usage in t3-env projects
29
+ if (u.variable.startsWith('NEXT_PUBLIC_')) {
26
30
  warnings.push({
27
31
  variable: u.variable,
28
- reason: `Variable "${u.variable}" is used in client code but only defined in server schema. Add to client schema or move to server-only code.`,
32
+ reason: 'Use t3-env client schema instead of NEXT_PUBLIC_ prefix for type-safe environment variables.',
29
33
  file: u.file,
30
34
  line: u.line,
31
35
  framework: 't3-env',
32
36
  });
37
+ return; // Stop processing after this
33
38
  }
34
- // Variable used in server context but only defined in client schema
35
- if (isServerContext &&
36
- allClientVars.includes(u.variable) &&
37
- !allServerVars.includes(u.variable)) {
39
+ // Client using server-only variable (SECURITY ISSUE!)
40
+ if (isClientContext &&
41
+ allServerVars.includes(u.variable) &&
42
+ !allClientVars.includes(u.variable)) {
38
43
  warnings.push({
39
44
  variable: u.variable,
40
- reason: `Variable "${u.variable}" is used in server code but only defined in client schema. This may expose client variables on the server.`,
45
+ reason: `Variable "${u.variable}" is used in client code but only defined in server schema. This will expose secrets! Add to client schema or move to server-only code.`,
41
46
  file: u.file,
42
47
  line: u.line,
43
48
  framework: 't3-env',
44
49
  });
50
+ return;
45
51
  }
46
52
  // Variable not defined in any schema
47
53
  if (!allServerVars.includes(u.variable) &&
48
54
  !allClientVars.includes(u.variable)) {
49
55
  warnings.push({
50
56
  variable: u.variable,
51
- reason: `Variable "${u.variable}" is not defined in t3-env schema. Add it to either server or client schema.`,
52
- file: u.file,
53
- line: u.line,
54
- framework: 't3-env',
55
- });
56
- }
57
- // Warn about NEXT_PUBLIC_ variables in t3-env projects
58
- if (u.variable.startsWith('NEXT_PUBLIC_')) {
59
- warnings.push({
60
- variable: u.variable,
61
- reason: `Use t3-env client schema instead of NEXT_PUBLIC_ prefix for type-safe environment variables.`,
57
+ reason: `Variable "${u.variable}" is not defined in t3-env schema. Add it to either server or client schema for type safety.`,
62
58
  file: u.file,
63
59
  line: u.line,
64
60
  framework: 't3-env',
@@ -1 +1 @@
1
- {"version":3,"file":"t3EnvRules.js","sourceRoot":"","sources":["../../../../src/core/t3env/t3EnvRules.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,CAAW,EACX,QAAwB,EACxB,MAAmB;IAEnB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAEpC,4EAA4E;IAC5E,MAAM,eAAe,GACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,OAAO,KAAK,iBAAiB,CAAC;IAElC,MAAM,eAAe,GACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC;IAE9B,oEAAoE;IACpE,IACE,eAAe;QACf,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,+GAA+G;YAC9I,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED,oEAAoE;IACpE,IACE,eAAe;QACf,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,6GAA6G;YAC5I,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IACE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,8EAA8E;YAC7G,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,8FAA8F;YACtG,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"t3EnvRules.js","sourceRoot":"","sources":["../../../../src/core/t3env/t3EnvRules.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,CAAW,EACX,QAAwB,EACxB,MAAmB;IAEnB,8BAA8B;IAC9B,IACE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC3B,CAAC;QACD,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAEpC,sEAAsE;IACtE,MAAM,eAAe,GACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAClC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAClC,CAAC,CAAC,OAAO,KAAK,iBAAiB,CAAC;IAElC,mDAAmD;IACnD,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EACJ,8FAA8F;YAChG,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,OAAO,CAAC,6BAA6B;IACvC,CAAC;IAED,sDAAsD;IACtD,IACE,eAAe;QACf,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,yIAAyI;YACxK,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,IACE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,8FAA8F;YAC7H,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,8 +1,3 @@
1
1
  export { parseEnvFile } from './core/parseEnv.js';
2
2
  export { diffEnv } from './core/diffEnv.js';
3
- const apiKey = process.env.API_KEY;
4
- const apiUrl = process.env.API_URL;
5
- const secretKey = process.env.SECRET_KEY;
6
- const secretKey2 = process.env.secret;
7
- const potentialSecret = 'ghp_ABC1234567890abcsdgfdh3t24gb35rvdsdfsdgef';
8
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC;AAE7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAEnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAEtC,MAAM,eAAe,GAAG,+CAA+C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC"}
@@ -14,7 +14,8 @@ interface CompareStats {
14
14
  * @param filtered The filtered keys.
15
15
  * @param json Whether to output in JSON format.
16
16
  * @param showStats Whether to show statistics.
17
+ * @param checkValues Whether value checking is enabled.
17
18
  */
18
- export declare function printStats(envName: string, exampleName: string, s: CompareStats, filtered: Pick<Filtered, 'missing' | 'extra' | 'empty'>, json: boolean, showStats: boolean): void;
19
+ export declare function printStats(envName: string, exampleName: string, s: CompareStats, filtered: Pick<Filtered, 'missing' | 'extra' | 'empty'>, json: boolean, showStats: boolean, checkValues: boolean): void;
19
20
  export {};
20
21
  //# sourceMappingURL=printStats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"printStats.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printStats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE,YAAY,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,EACvD,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,OAAO,GACjB,IAAI,CA0BN"}
1
+ {"version":3,"file":"printStats.d.ts","sourceRoot":"","sources":["../../../../src/ui/compare/printStats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE,YAAY,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,EACvD,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,OAAO,GACnB,IAAI,CA4BN"}
@@ -8,8 +8,9 @@ import {} from '../../config/types.js';
8
8
  * @param filtered The filtered keys.
9
9
  * @param json Whether to output in JSON format.
10
10
  * @param showStats Whether to show statistics.
11
+ * @param checkValues Whether value checking is enabled.
11
12
  */
12
- export function printStats(envName, exampleName, s, filtered, json, showStats) {
13
+ export function printStats(envName, exampleName, s, filtered, json, showStats, checkValues) {
13
14
  if (json || !showStats)
14
15
  return;
15
16
  console.log(chalk.magenta('📊 Compare Statistics:'));
@@ -24,7 +25,9 @@ export function printStats(envName, exampleName, s, filtered, json, showStats) {
24
25
  console.log(chalk.magenta.dim(` Empty values: ${filtered.empty.length}`));
25
26
  }
26
27
  console.log(chalk.magenta.dim(` Duplicate keys: ${s.duplicateCount}`));
27
- console.log(chalk.magenta.dim(` Value mismatches: ${s.valueMismatchCount}`));
28
+ if (checkValues) {
29
+ console.log(chalk.magenta.dim(` Value mismatches: ${s.valueMismatchCount}`));
30
+ }
28
31
  console.log();
29
32
  }
30
33
  //# sourceMappingURL=printStats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"printStats.js","sourceRoot":"","sources":["../../../../src/ui/compare/printStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAiB,MAAM,uBAAuB,CAAC;AAUtD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,WAAmB,EACnB,CAAe,EACf,QAAuD,EACvD,IAAa,EACb,SAAkB;IAElB,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAClE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAC5E,CAAC;IACF,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CACf,oBAAoB,WAAW,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAC7D,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAClE,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"printStats.js","sourceRoot":"","sources":["../../../../src/ui/compare/printStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAiB,MAAM,uBAAuB,CAAC;AAUtD;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,WAAmB,EACnB,CAAe,EACf,QAAuD,EACvD,IAAa,EACb,SAAkB,EAClB,WAAoB;IAEpB,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAClE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAC5E,CAAC;IACF,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CACf,oBAAoB,WAAW,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAC7D,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Prints a list of client-exposed environment variables for Next.js and SvelteKit projects
3
+ * @param exposedVars Set of variable names that are exposed to the client
4
+ * @param framework The detected framework
5
+ * @param json Whether to output in JSON format
6
+ */
7
+ export declare function printExposedVars(exposedVars: Set<string>, framework: string, json: boolean): void;
8
+ //# sourceMappingURL=printExposedVars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printExposedVars.d.ts","sourceRoot":"","sources":["../../../../src/ui/scan/printExposedVars.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,GACZ,IAAI,CA8BN"}
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Prints a list of client-exposed environment variables for Next.js and SvelteKit projects
4
+ * @param exposedVars Set of variable names that are exposed to the client
5
+ * @param framework The detected framework
6
+ * @param json Whether to output in JSON format
7
+ */
8
+ export function printExposedVars(exposedVars, framework, json) {
9
+ if (json || exposedVars.size === 0)
10
+ return;
11
+ console.log();
12
+ console.log(chalk.cyan.bold('🔓 Client-Exposed Variables:'));
13
+ console.log(chalk.cyan.dim(` The following ${exposedVars.size} variable(s) are accessible in the browser:`));
14
+ console.log();
15
+ const sortedVars = Array.from(exposedVars).sort();
16
+ for (const variable of sortedVars) {
17
+ console.log(chalk.cyan(` • ${variable}`));
18
+ }
19
+ console.log();
20
+ console.log(chalk.yellow.dim(` ⚠️ These variables are bundled in client-side code and visible to users.`));
21
+ console.log(chalk.yellow.dim(` ⚠️ Never expose secrets, API keys, or sensitive data!`));
22
+ console.log();
23
+ }
24
+ //# sourceMappingURL=printExposedVars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printExposedVars.js","sourceRoot":"","sources":["../../../../src/ui/scan/printExposedVars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAwB,EACxB,SAAiB,EACjB,IAAa;IAEb,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAE3C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,GAAG,CACZ,oBAAoB,WAAW,CAAC,IAAI,6CAA6C,CAClF,CACF,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,GAAG,CACd,8EAA8E,CAC/E,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,GAAG,CACd,2DAA2D,CAC5D,CACF,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"printMissingExample.d.ts","sourceRoot":"","sources":["../../../../src/ui/scan/printMissingExample.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAiBnE"}
1
+ {"version":3,"file":"printMissingExample.d.ts","sourceRoot":"","sources":["../../../../src/ui/scan/printMissingExample.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAuBnE"}
@@ -1,5 +1,6 @@
1
1
  import chalk from 'chalk';
2
2
  import fs from 'fs';
3
+ import path from 'path';
3
4
  import { resolveFromCwd } from '../../core/helpers/resolveFromCwd.js';
4
5
  /**
5
6
  * Print message if the specified example file is missing.
@@ -12,15 +13,17 @@ export function printMissingExample(opts) {
12
13
  return false;
13
14
  const exampleAbs = resolveFromCwd(opts.cwd, opts.examplePath);
14
15
  const missing = !fs.existsSync(exampleAbs);
15
- if (missing) {
16
- const msgText = `Missing specified example file: ${opts.examplePath}`;
17
- if (opts.isCiMode) {
18
- console.log(chalk.red('❌ ' + msgText));
19
- return true;
20
- }
21
- else if (!opts.json) {
22
- console.log(chalk.yellow('⚠️ ' + msgText));
23
- }
16
+ if (!missing)
17
+ return false;
18
+ const fileName = path.basename(opts.examplePath);
19
+ const msgText = `Missing example file: ${fileName}`;
20
+ console.log();
21
+ if (opts.isCiMode) {
22
+ console.log(chalk.red(`❌ ${msgText}`));
23
+ return true;
24
+ }
25
+ if (!opts.json) {
26
+ console.log(chalk.yellow(`⚠️ ${msgText}`));
24
27
  }
25
28
  return false;
26
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"printMissingExample.js","sourceRoot":"","sources":["../../../../src/ui/scan/printMissingExample.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,mCAAmC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"printMissingExample.js","sourceRoot":"","sources":["../../../../src/ui/scan/printMissingExample.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,yBAAyB,QAAQ,EAAE,CAAC;IAEpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotenv-diff",
3
- "version": "2.3.12",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "description": "Detects environment variable issues, usage, and potential security risks.",
6
6
  "bin": {