@danielszlaski/envguard 0.1.7 → 0.1.9

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.
@@ -1,6 +1,6 @@
1
1
  # These are supported funding model platforms
2
2
 
3
- github: szlaskidaniel # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
3
+ #github: szlaskidaniel # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4
4
  # patreon: # Replace with a single Patreon username
5
5
  # open_collective: # Replace with a single Open Collective username
6
6
  # ko_fi: # Replace with a single Ko-fi username
package/README.md CHANGED
@@ -1,25 +1,45 @@
1
1
  # EnvGuard CLI
2
- **Static Analysis for Environment Variables**
2
+ [![npm version](https://img.shields.io/npm/v/@danielszlaski/envguard.svg)](https://www.npmjs.com/package/@danielszlaski/envguard)
3
3
 
4
- Keep your environment variables in sync with your codebase.
4
+ ### Static analysis for environment variables you can actually trust
5
5
 
6
+ EnvGuard helps you keep environment variables clean, documented, and consistent across your entire codebase.
7
+ No more guessing, broken deploys, or outdated `.env.example` files.
6
8
 
7
- ## The Problem
8
9
 
9
- - `.env.example` is always out of sync with actual `.env`
10
- - New developers don't know what environment variables they need
11
- - Production secrets accidentally committed
12
- - Dead environment variables cluttering your config
13
10
 
14
- ## The Solution
11
+ ## Why EnvGuard exists
15
12
 
16
- EnvGuard automatically:
17
- - Scans your codebase for `process.env.*` usage
18
- - Compares with your `.env` and `.env.example` files
19
- - **Supports Serverless Framework** - scans `serverless.yml` environment configurations
20
- - Alerts you to missing, unused, or undocumented variables
21
- - Auto-generates `.env.example` with helpful comments
13
+ Environment variables tend to rot over time. Teams move fast, infrastructure evolves, and configuration quietly drifts.
14
+
15
+ Common pain points:
16
+ - `.env.example` does not match real usage anymore
17
+ - New developers waste time figuring out required variables
18
+ - Secrets accidentally leak into repositories
19
+ - Old variables linger forever with no owner
20
+ - CI fails late due to missing configuration
21
+ - Serverless configs and code fall out of sync
22
+
23
+ EnvGuard was built to eliminate this entire class of problems automatically.
24
+
25
+
26
+
27
+ ## What EnvGuard does for you
28
+
29
+ EnvGuard continuously validates how environment variables are **defined**, **used**, and **documented**.
30
+
31
+
32
+ - Scans your codebase for environment variable usage
33
+ - Compares usage with `.env` and `.env.example`
34
+ - Detects missing, unused, and hardcoded variables
35
+ - Understands fallback patterns and adjusts severity intelligently
36
+ - Keeps `.env.example` files accurate and up to date
22
37
  - **Supports multiple `.env` files** in subdirectories (monorepo-friendly!)
38
+ - Integrates cleanly into Git hooks and CI pipelines
39
+
40
+ Result: fewer runtime surprises, faster onboarding, and safer releases.
41
+
42
+
23
43
 
24
44
  ## Installation
25
45
 
@@ -59,7 +79,7 @@ envguard install-hook --type pre-push
59
79
  envguard install-hook --force
60
80
  ```
61
81
 
62
- Once installed, the hook will automatically run `envguard check` before each commit (or push). If issues are found, the commit/push will be blocked until you fix them.
82
+ Once installed, the hook will automatically run `envguard scan --ci` before each commit (or push). If issues are found, the commit/push will be blocked until you fix them.
63
83
 
64
84
  **Bypass the hook** when needed:
65
85
  ```bash
@@ -77,7 +97,7 @@ envguard uninstall-hook --type pre-push
77
97
 
78
98
  **How it works:**
79
99
  - The hook creates a script in `.git/hooks/pre-commit` (or `pre-push`)
80
- - Before each commit/push, it runs `envguard check`
100
+ - Before each commit/push, it runs `envguard scan --ci`
81
101
  - If issues are found, the operation is blocked
82
102
  - Team members need to install the hook individually (it's not tracked in git)
83
103
 
@@ -85,37 +105,39 @@ envguard uninstall-hook --type pre-push
85
105
 
86
106
  ```bash
87
107
  envguard scan
108
+
109
+ # Exclude specific file patterns from scanning
110
+ envguard scan --exclude "tests/**,scripts/**"
111
+
112
+ # Ignore specific variables (merged with config ignoreVars)
113
+ envguard scan --ignore-vars MY_VAR,ANOTHER_VAR
88
114
  ```
89
115
 
90
116
  Example output:
91
117
 
92
118
  ```
93
- Found 1 .env file(s) and 0 serverless.yml file(s)
119
+ Loaded config from ../.envguardrc.json
94
120
 
95
- Checking ./
96
121
 
97
- Found 12 variable(s) used in this scope
98
- Found 10 variable(s) in .env
99
- Found 8 variable(s) in .env.example
122
+ Scanning env sources:
123
+ serverless.yml
100
124
 
101
- Missing from .env:
102
- STRIPE_SECRET_KEY
103
- Used in: src/payment.js, src/checkout.ts
104
- API_KEY
105
- Used in: src/api/client.ts
125
+ Unused variables:
126
+ NODE_ENV
127
+ STAGE
128
+ OKTA_DOMAIN
129
+ OKTA_CLIENT_ID
106
130
 
107
- Unused variables:
108
- OLD_API_URL
109
-
110
- Missing from .env.example:
111
- DATABASE_URL
112
- • JWT_SECRET
131
+ Skipped known runtime/ignored variables (use --strict to show):
132
+ Custom (from config/CLI): LOCALHOST, STAGE
133
+ Serverless Framework: IS_OFFLINE, SLS_OFFLINE
134
+ CI/CD: CI
135
+ AWS Lambda: AWS_REGION
113
136
 
114
137
  ──────────────────────────────────────────────────
138
+ Info: 5
115
139
 
116
- Total: 5 issue(s) across 1 location(s)
117
-
118
- Run `envguard fix` to auto-generate .env.example
140
+ Run `envguard fix` to auto-generate .env.example files
119
141
  ```
120
142
 
121
143
  ### Auto-generate .env.example
@@ -151,13 +173,13 @@ PORT=
151
173
 
152
174
  ### CI/CD Integration
153
175
 
154
- Use the `check` command in your CI pipeline to fail builds if environment variables are out of sync:
176
+ Use the `--ci` flag in your CI pipeline to fail builds if environment variables are out of sync:
155
177
 
156
178
  ```bash
157
- envguard check
179
+ envguard scan --ci
158
180
  ```
159
181
 
160
- This is equivalent to `envguard scan --ci` and will exit with code 1 if issues are found.
182
+ This will exit with code 1 if issues are found.
161
183
 
162
184
  ## GitHub Actions Setup
163
185
 
@@ -195,55 +217,6 @@ jobs:
195
217
 
196
218
  **That's it!** No installation needed - `npx` downloads EnvGuard on demand.
197
219
 
198
- ### Advanced Setup - With PR Comments
199
-
200
- Get automatic comments on pull requests when issues are found:
201
-
202
- ```yaml
203
- name: Environment Variables Check
204
-
205
- on:
206
- pull_request:
207
- branches: [main]
208
-
209
- jobs:
210
- envguard:
211
- runs-on: ubuntu-latest
212
- permissions:
213
- pull-requests: write
214
-
215
- steps:
216
- - name: Checkout code
217
- uses: actions/checkout@v4
218
-
219
- - name: Setup Node.js
220
- uses: actions/setup-node@v4
221
- with:
222
- node-version: '20.x'
223
-
224
- - name: Run EnvGuard scan
225
- id: envguard
226
- continue-on-error: true
227
- run: |
228
- OUTPUT=$(npx @danielszlaski/envguard scan 2>&1)
229
- echo "$OUTPUT"
230
- echo "output<<EOF" >> $GITHUB_OUTPUT
231
- echo "$OUTPUT" >> $GITHUB_OUTPUT
232
- echo "EOF" >> $GITHUB_OUTPUT
233
- npx @danielszlaski/envguard scan --ci
234
-
235
- - name: Comment on PR if failed
236
- if: failure()
237
- uses: actions/github-script@v7
238
- with:
239
- script: |
240
- github.rest.issues.createComment({
241
- issue_number: context.issue.number,
242
- owner: context.repo.owner,
243
- repo: context.repo.repo,
244
- body: '## ⚠️ EnvGuard Check Failed\n\n```\n${{ steps.envguard.outputs.output }}\n```\n\nPlease run `npx @danielszlaski/envguard fix` locally to generate `.env.example` files, then commit the changes.'
245
- })
246
- ```
247
220
 
248
221
  ### Strict Mode in CI
249
222
 
@@ -368,7 +341,7 @@ EnvGuard works out of the box with sensible defaults. It automatically excludes:
368
341
 
369
342
  ### Custom Configuration
370
343
 
371
- Create a `.envguardrc.json` file in your project root to customize behavior:
344
+ Create a configuration file in your project root. The following file names are recognised (in priority order): `.envguardrc.json`, `.envguardrc`, `envguard.config.json`, or a `"envguard"` key in `package.json`.
372
345
 
373
346
  ```json
374
347
  {
@@ -473,6 +446,19 @@ Not all missing environment variables are equal. Variables with defensive fallba
473
446
 
474
447
  Fallback detection uses regex patterns and catches common cases (~80% of real-world usage). Complex patterns like function calls with fallbacks or deeply nested conditionals may not be detected. For strict validation, use `--no-detect-fallbacks` or set `detectFallbacks: false` in your config.
475
448
 
449
+ ### Hardcoded Value Detection
450
+
451
+ EnvGuard detects environment variables that are assigned directly in code instead of being read from the environment. These are reported as warnings because the value exists at runtime, but the pattern itself is a code smell — it bypasses `.env` management entirely.
452
+
453
+ **Detected patterns:**
454
+
455
+ ```javascript
456
+ process.env.MY_VAR = 'some-value'; // WARNING — hardcoded assignment
457
+ process.env['API_KEY'] = 'sk_live_...'; // WARNING — hardcoded assignment
458
+ ```
459
+
460
+ Hardcoded assignments are reported in their own group in the scan output, separate from missing or unused variables.
461
+
476
462
  ### Monorepo Support
477
463
 
478
464
  EnvGuard automatically detects all `.env` files in your project, including subdirectories. When you run `envguard fix`, it creates a `.env.example` file next to each `.env` file it finds.
@@ -539,7 +525,7 @@ Checking src/lambda/serverless.yml
539
525
  - **External references** - Detects SSM parameters, Secrets Manager, CloudFormation outputs
540
526
  - **Function-level variables** - Scans both provider-level and function-specific environment vars
541
527
  - **Smart filtering** - Automatically skips AWS/runtime variables (disable with `--strict`)
542
- - **CI/CD validation** - Use `envguard check` to enforce serverless config completeness
528
+ - **CI/CD validation** - Use `envguard scan --ci` to enforce serverless config completeness
543
529
 
544
530
  ## Commands
545
531
 
@@ -547,10 +533,9 @@ Checking src/lambda/serverless.yml
547
533
  - `envguard scan --ci` - Scan and exit with error code if issues found
548
534
  - `envguard scan --strict` - Report all variables including known runtime variables
549
535
  - `envguard scan --no-detect-fallbacks` - Treat all missing variables as errors (ignore fallback detection)
536
+ - `envguard scan --exclude <patterns>` - Comma-separated glob patterns to exclude (merged with config `exclude`)
537
+ - `envguard scan --ignore-vars <vars>` - Comma-separated variables to ignore (merged with config `ignoreVars`)
550
538
  - `envguard fix` - Auto-generate `.env.example`
551
- - `envguard check` - Alias for `scan --ci`
552
- - `envguard check --strict` - Check with strict mode enabled
553
- - `envguard check --no-detect-fallbacks` - Check without fallback detection
554
539
  - `envguard install-hook` - Install a Git pre-commit hook to run checks automatically
555
540
  - `envguard install-hook --type pre-push` - Install a pre-push hook instead
556
541
  - `envguard install-hook --force` - Overwrite existing hook if present
@@ -596,3 +581,177 @@ npm start scan
596
581
  ## License
597
582
 
598
583
  MIT 2026 Daniel Szlaski
584
+
585
+ # EnvGuard CLI
586
+
587
+
588
+
589
+
590
+
591
+ ---
592
+
593
+ ## Supported platforms and frameworks
594
+
595
+ - Node.js JavaScript and TypeScript
596
+ - Serverless Framework projects
597
+ - Monorepos with nested services
598
+ - CI environments including GitHub Actions, GitLab CI, CircleCI, Travis
599
+
600
+ ---
601
+
602
+ ## Installation
603
+
604
+ ### Global installation
605
+
606
+ ```bash
607
+ npm install -g @danielszlaski/envguard
608
+ ```
609
+
610
+ Then run:
611
+ ```bash
612
+ envguard scan
613
+ ```
614
+
615
+ ### No installation using npx
616
+
617
+ ```bash
618
+ npx @danielszlaski/envguard scan
619
+ ```
620
+
621
+ ---
622
+
623
+ ## Core commands
624
+
625
+ ### Scan for issues
626
+
627
+ ```bash
628
+ envguard scan
629
+ ```
630
+
631
+ Finds:
632
+ - Missing variables
633
+ - Unused variables
634
+ - Hardcoded assignments
635
+ - Drift between code and configuration
636
+
637
+ ### Auto generate `.env.example`
638
+
639
+ ```bash
640
+ envguard fix
641
+ ```
642
+
643
+ Automatically creates or updates `.env.example` files with:
644
+ - All variables actually used
645
+ - Usage locations in code
646
+ - Helpful format hints
647
+ - Zero real secrets
648
+
649
+ Each `.env.example` is generated next to its corresponding `.env`, making it ideal for monorepos.
650
+
651
+ ---
652
+
653
+ ## Smart severity detection
654
+
655
+ EnvGuard understands intent.
656
+
657
+ ```js
658
+ process.env.API_KEY // ERROR
659
+ process.env.PORT || 3000 // WARNING
660
+ process.env.DEBUG && log() // WARNING
661
+ ```
662
+
663
+ - Errors indicate real runtime risk
664
+ - Warnings highlight defensive or optional usage
665
+ - Noise is reduced without hiding problems
666
+
667
+ Fallback detection can be disabled if strict enforcement is required.
668
+
669
+ ---
670
+
671
+ ## Git hook integration
672
+
673
+ Catch configuration issues before they ever reach CI.
674
+
675
+ ```bash
676
+ envguard install-hook
677
+ ```
678
+
679
+ Options:
680
+ - Pre commit or pre push hooks
681
+ - Forced overwrite
682
+ - Easy removal
683
+
684
+ Hooks run `envguard scan --ci` automatically and block commits when issues are found.
685
+
686
+ ---
687
+
688
+ ## CI and automation friendly
689
+
690
+ EnvGuard is designed for automation first.
691
+
692
+ ```bash
693
+ envguard scan --ci
694
+ ```
695
+
696
+ - Exits with non zero code on errors
697
+ - Perfect for CI pipelines
698
+ - No interactive output
699
+ - Fast and deterministic
700
+
701
+ Works out of the box with GitHub Actions, GitLab CI, CircleCI, and more.
702
+
703
+ ---
704
+
705
+ ## Serverless Framework support
706
+
707
+ EnvGuard treats `serverless.yml` as a first class configuration source.
708
+
709
+ It:
710
+ - Extracts provider and function level variables
711
+ - Validates that all variables are actually used
712
+ - Detects missing definitions referenced in code
713
+ - Understands SSM, Secrets Manager, and CloudFormation references
714
+ - Skips AWS runtime variables automatically unless strict mode is enabled
715
+
716
+ This prevents silent misconfiguration in Lambda based systems.
717
+
718
+ ---
719
+
720
+ ## Configuration
721
+
722
+ EnvGuard works without configuration, but can be customized via:
723
+ - `.envguardrc.json`
724
+ - `envguard.config.json`
725
+ - `package.json`
726
+
727
+ Example:
728
+ ```json
729
+ {
730
+ "ignoreVars": ["COMPANY_INTERNAL_VAR"],
731
+ "strict": false,
732
+ "detectFallbacks": true,
733
+ "exclude": ["**/build/**"]
734
+ }
735
+ ```
736
+
737
+ Priority:
738
+ CLI flags → config file → package.json → defaults
739
+
740
+ ---
741
+
742
+ ## Who EnvGuard is for
743
+
744
+ EnvGuard is ideal for:
745
+ - Teams onboarding new developers
746
+ - Projects with growing configuration surface area
747
+ - Serverless and microservice architectures
748
+ - Repositories with strict CI requirements
749
+ - Anyone tired of debugging missing env vars at runtime
750
+
751
+ If environment variables ever broke your deploy, EnvGuard pays for itself immediately.
752
+
753
+ ---
754
+
755
+ ## License
756
+
757
+ MIT © 2026 Daniel Szlaski
@@ -4,6 +4,7 @@ export declare class EnvAnalyzer {
4
4
  analyze(usedVars: Map<string, {
5
5
  locations: string[];
6
6
  hasFallback: boolean;
7
+ isHardcoded?: boolean;
7
8
  }>, definedVars: Map<string, EnvEntry>, exampleVars: Set<string>, detectFallbacks?: boolean): ScanResult;
8
9
  generateExampleContent(usedVars: Map<string, {
9
10
  locations: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"envAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/envAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,qBAAa,WAAW;IACtB,OAAO,CACL,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,EACpE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAClC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,eAAe,GAAE,OAAc,GAC9B,UAAU;IA8Cb,sBAAsB,CACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,EACpE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GACrC,MAAM;IA0CT,OAAO,CAAC,aAAa;CAkCtB"}
1
+ {"version":3,"file":"envAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/envAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,qBAAa,WAAW;IACtB,OAAO,CACL,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,EAC3F,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAClC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,eAAe,GAAE,OAAc,GAC9B,UAAU;IAmDb,sBAAsB,CACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,EACpE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GACrC,MAAM;IA0CT,OAAO,CAAC,aAAa;CAkCtB"}
@@ -7,11 +7,18 @@ class EnvAnalyzer {
7
7
  // Issue 1: Variables used in code but missing from .env
8
8
  for (const [varName, usage] of usedVars.entries()) {
9
9
  if (!definedVars.has(varName)) {
10
- // If detectFallbacks is enabled and variable has a fallback, it's a WARNING, otherwise ERROR
11
- const severity = (detectFallbacks && usage.hasFallback) ? 'warning' : 'error';
12
- const details = (detectFallbacks && usage.hasFallback)
13
- ? `Used in code with fallback/default but not defined in .env`
14
- : `Used in code but not defined in .env`;
10
+ // If detectFallbacks is enabled and variable has a fallback or is hardcoded, it's a WARNING, otherwise ERROR
11
+ const severity = (detectFallbacks && (usage.hasFallback || usage.isHardcoded)) ? 'warning' : 'error';
12
+ let details;
13
+ if (usage.isHardcoded) {
14
+ details = `Hardcoded in code (assigned programmatically)`;
15
+ }
16
+ else if (detectFallbacks && usage.hasFallback) {
17
+ details = `Used in code with fallback/default but not defined in .env`;
18
+ }
19
+ else {
20
+ details = `Used in code but not defined in .env`;
21
+ }
15
22
  issues.push({
16
23
  type: 'missing',
17
24
  severity,
@@ -1 +1 @@
1
- {"version":3,"file":"envAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/envAnalyzer.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IACtB,OAAO,CACL,QAAoE,EACpE,WAAkC,EAClC,WAAwB,EACxB,kBAA2B,IAAI;QAE/B,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,wDAAwD;QACxD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,6FAA6F;gBAC7F,MAAM,QAAQ,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9E,MAAM,OAAO,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC;oBACpD,CAAC,CAAC,4DAA4D;oBAC9D,CAAC,CAAC,sCAAsC,CAAC;gBAE3C,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,SAAS;oBACf,QAAQ;oBACR,OAAO;oBACP,OAAO;oBACP,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO;oBACP,OAAO,EAAE,wCAAwC;iBAClD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wFAAwF;QACxF,+EAA+E;QAC/E,kFAAkF;QAElF,OAAO;YACL,MAAM;YACN,QAAQ;YACR,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACxC,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,sBAAsB,CACpB,QAAoE,EACpE,eAAsC;QAEtC,IAAI,OAAO,GAAG,gCAAgC,CAAC;QAC/C,OAAO,IAAI,iEAAiE,CAAC;QAE7E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEnD,wBAAwB;YACxB,OAAO,IAAI,cAAc,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,MAAM,SAAS,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC;YAChD,CAAC;YACD,OAAO,IAAI,IAAI,CAAC;YAEhB,oCAAoC;YACpC,IAAI,aAAa,EAAE,OAAO,EAAE,CAAC;gBAC3B,OAAO,IAAI,KAAK,aAAa,CAAC,OAAO,IAAI,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,IAAI,GAAG,OAAO,IAAI,aAAa,CAAC,KAAK,IAAI,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,GAAG,OAAO,KAAK,CAAC;YAC7B,CAAC;YAED,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,MAAM,QAAQ,GAA8B;YAC1C,cAAc,EAAE,qCAAqC;YACrD,aAAa,EAAE,kCAAkC;YACjD,WAAW,EAAE,wBAAwB;YACrC,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,6BAA6B;YACzC,SAAS,EAAE,mBAAmB;YAC9B,QAAQ,EAAE,kBAAkB;YAC5B,YAAY,EAAE,iBAAiB;YAC/B,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,iBAAiB;SAC1B,CAAC;QAEF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1F,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAnID,kCAmIC"}
1
+ {"version":3,"file":"envAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/envAnalyzer.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -6,23 +6,28 @@ const scan_1 = require("./commands/scan");
6
6
  const fix_1 = require("./commands/fix");
7
7
  const install_hook_1 = require("./commands/install-hook");
8
8
  const logger_1 = require("./utils/logger");
9
+ const package_json_1 = require("../package.json");
9
10
  const program = new commander_1.Command();
10
11
  program
11
12
  .name('envguard')
12
13
  .description('Keep your environment variables in sync with your codebase')
13
- .version('0.1.0');
14
+ .version(package_json_1.version);
14
15
  program
15
16
  .command('scan')
16
17
  .description('Scan codebase and compare with .env files')
17
18
  .option('--ci', 'Exit with error code if issues found (for CI/CD)')
18
19
  .option('--strict', 'Report all variables including known runtime variables (AWS_REGION, NODE_ENV, etc.)')
19
20
  .option('--no-detect-fallbacks', 'Treat all missing variables as errors, ignoring fallback detection')
21
+ .option('--exclude <patterns>', 'Comma-separated patterns to exclude (merged with config exclude)')
22
+ .option('--ignore-vars <vars>', 'Comma-separated list of variables to ignore (merged with ignoreVars from config)')
20
23
  .action(async (cmd, command) => {
21
24
  try {
22
25
  // Build options object, only including detectFallbacks if the flag was used
23
26
  const options = {
24
27
  ci: cmd.ci,
25
- strict: cmd.strict
28
+ strict: cmd.strict,
29
+ exclude: cmd.exclude,
30
+ ignoreVars: cmd.ignoreVars
26
31
  };
27
32
  // Check if the --no-detect-fallbacks flag was explicitly provided
28
33
  // Commander adds it to the command's options when the flag is used
@@ -49,29 +54,6 @@ program
49
54
  process.exit(1);
50
55
  }
51
56
  });
52
- program
53
- .command('check')
54
- .description('Check for issues (alias for scan --ci)')
55
- .option('--strict', 'Report all variables including known runtime variables (AWS_REGION, NODE_ENV, etc.)')
56
- .option('--no-detect-fallbacks', 'Treat all missing variables as errors, ignoring fallback detection')
57
- .action(async (cmd, command) => {
58
- try {
59
- const options = {
60
- ci: true,
61
- strict: cmd.strict
62
- };
63
- // Check if the --no-detect-fallbacks flag was explicitly provided
64
- const flagProvided = command.parent?.rawArgs.some((arg) => arg.includes('detect-fallback'));
65
- if (flagProvided) {
66
- options.detectFallbacks = cmd.detectFallbacks;
67
- }
68
- await (0, scan_1.scanCommand)(options);
69
- }
70
- catch (error) {
71
- logger_1.Logger.error(`${error}`);
72
- process.exit(1);
73
- }
74
- });
75
57
  program
76
58
  .command('install-hook')
77
59
  .description('Install a Git hook to run envguard automatically')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -72,7 +72,7 @@ async function installHookCommand(options = {}) {
72
72
  fs.writeFileSync(hookPath, hookContent, { mode: 0o755 });
73
73
  logger_1.Logger.success(`Installed ${hookType} hook successfully!`);
74
74
  logger_1.Logger.blank();
75
- logger_1.Logger.info('The hook will run `envguard check` automatically before each ' +
75
+ logger_1.Logger.info('The hook will run `envguard scan --ci` automatically before each ' +
76
76
  (hookType === 'pre-commit' ? 'commit' : 'push'), true);
77
77
  logger_1.Logger.info('To bypass the hook, use: git ' +
78
78
  (hookType === 'pre-commit' ? 'commit' : 'push') + ' --no-verify', true);
@@ -98,7 +98,7 @@ async function uninstallHookCommand(options = {}) {
98
98
  }
99
99
  // Check if it's our hook
100
100
  const hookContent = fs.readFileSync(hookPath, 'utf-8');
101
- if (!hookContent.includes('envguard check')) {
101
+ if (!hookContent.includes('envguard scan --ci') && !hookContent.includes('envguard check')) {
102
102
  logger_1.Logger.warning(`The ${hookType} hook exists but was not created by envguard.`);
103
103
  logger_1.Logger.info('Manual removal required if you want to delete it.', true);
104
104
  logger_1.Logger.blank();
@@ -127,8 +127,8 @@ function generateHookScript(hookType) {
127
127
 
128
128
  echo "Running EnvGuard environment variable check..."
129
129
 
130
- # Run envguard check
131
- npx envguard check
130
+ # Run envguard scan --ci
131
+ npx envguard scan --ci
132
132
 
133
133
  # Capture the exit code
134
134
  EXIT_CODE=$?
@@ -1 +1 @@
1
- {"version":3,"file":"install-hook.js","sourceRoot":"","sources":["../../src/commands/install-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-hook.js","sourceRoot":"","sources":["../../src/commands/install-hook.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export declare function scanCommand(options: {
3
3
  strict?: boolean;
4
4
  detectFallbacks?: boolean;
5
5
  commandName?: string;
6
+ exclude?: string;
7
+ ignoreVars?: string;
6
8
  }): Promise<{
7
9
  success: boolean;
8
10
  issues: import("..").Issue[];
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;;;GA4M7H"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;;;GAyOpK"}