vibe-guard 1.1.3 → 1.1.4

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
@@ -8,22 +8,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  ## [1.1.3] - 2025-01-27
9
9
 
10
10
  ### Added
11
+ - **Complete Documentation Site**: Beautiful, responsive documentation with performance benchmarks
12
+ - **Performance Benchmarking**: Comprehensive speed testing with `npm run benchmark`
13
+ - **Multiple Output Formats**: SARIF and HTML report support
14
+ - **Configuration System**: Full `vibe-guard.json` configuration support
15
+ - **GitHub Pages Deployment**: Automated documentation deployment
16
+ - **Enhanced CLI**: Better error handling and user experience
17
+
18
+ ### Changed
11
19
  - **Performance Optimization**: Streamlined detection patterns across all security rules
12
20
  - **Code Quality Improvements**: Eliminated redundant logic and overlapping patterns
13
21
  - **Enhanced Maintainability**: Consolidated similar patterns for better code organization
14
-
15
- ### Changed
16
- - **CSRF Protection Rule**: Removed redundant GET request filtering, optimized patterns
17
- - **Insecure Logging Rule**: Eliminated overly broad patterns, kept specific sensitive data detection
18
- - **Unvalidated Input Rule**: Consolidated overlapping Express request patterns
19
- - **XSS Detection Rule**: Streamlined DOM manipulation, eval, and event handler patterns
20
- - **Broken Access Control Rule**: Consolidated 10 route patterns into single optimized pattern
21
- - **Overall Performance**: Reduced ~20 redundant patterns, improved scanning speed
22
+ - **Documentation**: Complete rewrite with performance metrics and benchmarks
22
23
 
23
24
  ### Fixed
24
25
  - Eliminated redundant logic that was catching everything then filtering
25
26
  - Removed duplicate pattern matching that slowed down scanning
26
27
  - Improved code maintainability with cleaner rule implementations
28
+ - Fixed Vite build configuration for documentation deployment
27
29
 
28
30
  ## [1.1.2] - 2025-01-27
29
31
 
package/README.md CHANGED
@@ -36,7 +36,18 @@ chmod +x vibe-guard
36
36
  ./vibe-guard scan .
37
37
  ```
38
38
 
39
- ### Option 2: NPM
39
+ ### Option 2: Homebrew
40
+ ```bash
41
+ brew install Devjosef/tap/vibe-guard
42
+ vibe-guard scan .
43
+ ```
44
+
45
+ ### Option 3: One-liner Install
46
+ ```bash
47
+ curl -fsSL https://raw.githubusercontent.com/Devjosef/vibe-guard/main/install.sh | sh
48
+ ```
49
+
50
+ ### Option 4: NPM
40
51
  ```bash
41
52
  # One-time use
42
53
  npx vibe-guard scan .
@@ -46,7 +57,7 @@ npm install -g vibe-guard
46
57
  vibe-guard scan .
47
58
  ```
48
59
 
49
- ### Option 3: Docker
60
+ ### Option 5: Docker
50
61
  ```bash
51
62
  docker run --rm -v $(pwd):/code vibe-guard/vibe-guard:1.1.3 scan /code
52
63
  ```
@@ -99,14 +110,22 @@ vibe-guard scan .
99
110
  # Scan specific file
100
111
  vibe-guard scan app.js
101
112
 
102
- # JSON output for CI/CD
103
- vibe-guard scan . --format json
113
+ # Multiple output formats
114
+ vibe-guard scan . --format json # JSON for CI/CD
115
+ vibe-guard scan . --format sarif # SARIF for GitHub/SonarQube
116
+ vibe-guard scan . --format html # HTML report
117
+
118
+ # Configuration file
119
+ vibe-guard scan . --config vibe-guard.json
104
120
 
105
121
  # Quick syntax (same as scan)
106
122
  vibe-guard .
107
123
 
108
124
  # Show version
109
125
  vibe-guard --version
126
+
127
+ # Run performance benchmarks
128
+ npm run benchmark
110
129
  ```
111
130
 
112
131
  ## CI/CD Integration
@@ -186,6 +205,12 @@ npm run package
186
205
 
187
206
  # Run tests
188
207
  npm test
208
+
209
+ # Build documentation
210
+ npm run docs:build
211
+
212
+ # Start docs dev server
213
+ npm run docs:dev
189
214
  ```
190
215
 
191
216
  ### Project Structure
@@ -196,7 +221,19 @@ src/
196
221
  ├── bin/ # CLI interface
197
222
  ├── scanner.ts # File scanning engine
198
223
  ├── reporter.ts # Output formatting
224
+ ├── config.ts # Configuration loader
199
225
  └── index.ts # Main application
226
+
227
+ documents/ # Documentation website
228
+ ├── index.html # Landing page
229
+ ├── docs.html # Full documentation
230
+ ├── performance.html # Performance benchmarks
231
+ ├── rules.html # Security rules guide
232
+ └── styles.css # Styling
233
+
234
+ scripts/
235
+ ├── benchmark.js # Performance testing
236
+ └── maintenance.js # Project maintenance
200
237
  ```
201
238
 
202
239
  ## Why Choose Vibe-Guard?
@@ -216,14 +253,39 @@ src/
216
253
  - Slow scanning that kills your workflow
217
254
  - Cryptic error messages
218
255
 
256
+ ## Performance Benchmarks
257
+
258
+ Vibe-Guard is engineered for speed. Here's how it performs:
259
+
260
+ ### ⚡ Speed Metrics
261
+ - **Startup Time**: ~41ms (near-instant)
262
+ - **Small Files (1KB)**: ~51ms (ultra-fast)
263
+ - **Medium Files (5KB)**: ~51ms (very fast)
264
+ - **Large Files (50KB)**: ~117ms (efficient)
265
+ - **Memory Usage**: ~56KB (ultra-low footprint)
266
+
267
+ ### 🏃 Real-World Performance
268
+ - **Small Projects (1-10 files)**: Complete in under 200ms
269
+ - **Medium Projects (100-1000 files)**: Complete in 2-5 seconds
270
+ - **Large Projects (1000+ files)**: Complete in 8-20 seconds
271
+ - **Enterprise Codebases**: Handles 10,000+ files efficiently
272
+
273
+ ### 📊 Run Your Own Benchmarks
274
+ ```bash
275
+ npm run benchmark
276
+ ```
277
+
219
278
  ## Comparison
220
279
 
221
280
  | Feature | Vibe-Guard | Other Tools |
222
281
  |---------|------------|-------------|
223
282
  | Setup Time | 0 seconds | Minutes |
224
- | Dependencies | Zero | Many |
283
+ | Startup Time | ~41ms | 2-5 seconds |
284
+ | Small File Scan | ~51ms | 500ms-2s |
285
+ | Large File Scan | ~117ms | 5-15s |
286
+ | Memory Usage | ~56KB | 50-200MB |
287
+ | Dependencies | Zero | 50-200 |
225
288
  | False Positives | Minimal | High |
226
- | Speed | ⚡ Fast | 🐌 Slow |
227
289
  | Languages | All major ones | Limited |
228
290
  | CI/CD Ready | ✅ Yes | ⚠️ Complex |
229
291
  | Actually explains fixes | ✅ Yes | ❌ Cryptic |
@@ -239,6 +301,28 @@ src/
239
301
  - **Code reviews** - Run this before you submit that PR
240
302
  - **Learning security** - Get real-time feedback on what can or is going wrong (and how to fix it)
241
303
 
304
+ ## Documentation & Resources
305
+
306
+ - **📖 [Full Documentation](https://devjosef.github.io/vibe-guard/)** - Complete guides and API reference
307
+ - **⚡ [Performance Benchmarks](https://devjosef.github.io/vibe-guard/performance.html)** - Detailed speed metrics
308
+ - **🛡️ [Security Rules](https://devjosef.github.io/vibe-guard/rules.html)** - All 25 rules explained
309
+ - **🚀 [Getting Started](https://devjosef.github.io/vibe-guard/getting-started.html)** - Quick setup guide
310
+
311
+ ## Roadmap
312
+
313
+ ### ✅ Completed Features
314
+ - **Configuration Files**: Full support for `vibe-guard.json` configuration
315
+ - **Multiple Output Formats**: Table, JSON, SARIF, and HTML reports
316
+ - **Documentation Site**: Beautiful, responsive documentation
317
+ - **Performance Benchmarks**: Comprehensive speed testing
318
+ - **GitHub Pages**: Automated deployment
319
+
320
+ ### 🚧 Planned Features
321
+ - **Custom Rules**: User-defined security rules and patterns
322
+ - **CI/CD Integration**: GitHub Actions and other CI/CD examples
323
+ - **Performance Improvements**: Parallel processing, caching
324
+ - **IDE Integration**: VS Code extension, editor plugins
325
+
242
326
  ## Contributing
243
327
 
244
328
  1. **Add Security Rules**: Extend the rule engine with new patterns
@@ -1,5 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
3
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
38
  };
@@ -13,11 +46,10 @@ program
13
46
  .name('vibe-guard')
14
47
  .description('🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!')
15
48
  .version(version_1.VERSION);
49
+ const fs = __importStar(require("fs"));
16
50
  async function handleScan(target, options) {
17
51
  try {
18
52
  console.log(chalk_1.default.blue.bold('🛡️ Starting Vibe-Guard Security Scan...\n'));
19
- console.log('DEBUG: Format option:', options.format);
20
- console.log('DEBUG: All options:', JSON.stringify(options, null, 2));
21
53
  const scanOptions = {
22
54
  target,
23
55
  format: options.format,
@@ -27,7 +59,13 @@ async function handleScan(target, options) {
27
59
  };
28
60
  const vibeGuard = new index_1.default();
29
61
  const output = await vibeGuard.scanAndFormat(scanOptions);
30
- console.log(output);
62
+ if (options.outputFile) {
63
+ fs.writeFileSync(options.outputFile, output);
64
+ console.log(chalk_1.default.green(`✅ Results written to: ${options.outputFile}`));
65
+ }
66
+ else {
67
+ console.log(output);
68
+ }
31
69
  const result = await vibeGuard.scan(scanOptions);
32
70
  if (result.issuesFound > 0) {
33
71
  process.exit(1);
@@ -42,14 +80,16 @@ program
42
80
  .command('scan')
43
81
  .description('Scan files or directories for security issues')
44
82
  .argument('<target>', 'File or directory to scan')
45
- .option('-f, --format <format>', 'Output format (table, json)', 'table')
83
+ .option('-f, --format <format>', 'Output format (table, json, sarif, html)')
84
+ .option('-o, --output-file <file>', 'Write output to file')
46
85
  .option('-v, --verbose', 'Verbose output', false)
47
86
  .option('--exclude <patterns...>', 'Exclude patterns')
48
87
  .option('--include <patterns...>', 'Include patterns')
49
88
  .action(handleScan);
50
89
  program
51
90
  .argument('[target]', 'File or directory to scan')
52
- .option('-f, --format <format>', 'Output format (table, json)', 'table')
91
+ .option('-f, --format <format>', 'Output format (table, json, sarif, html)')
92
+ .option('-o, --output-file <file>', 'Write output to file')
53
93
  .option('-v, --verbose', 'Verbose output', false)
54
94
  .option('--exclude <patterns...>', 'Exclude patterns')
55
95
  .option('--include <patterns...>', 'Include patterns')
@@ -87,6 +127,21 @@ program
87
127
  console.log('Built for developers who code fast and need security that keeps up! 🚀');
88
128
  console.log(chalk_1.default.gray('TypeScript-powered, zero-dependency security scanning'));
89
129
  });
130
+ program
131
+ .command('init')
132
+ .description('Create a default vibe-guard.json configuration file')
133
+ .action(() => {
134
+ const vibeGuard = new index_1.default();
135
+ vibeGuard.createConfigFile();
136
+ });
137
+ program
138
+ .command('config')
139
+ .description('Show sample configuration')
140
+ .action(() => {
141
+ const vibeGuard = new index_1.default();
142
+ console.log(chalk_1.default.blue.bold('📝 Sample vibe-guard.json Configuration:\n'));
143
+ console.log(vibeGuard.generateConfig());
144
+ });
90
145
  process.on('unhandledRejection', (reason, promise) => {
91
146
  console.error(chalk_1.default.red.bold('❌ Unhandled Rejection at:'), promise, chalk_1.default.red('reason:'), reason);
92
147
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { VibeGuardConfig, ScanOptions } from './types';
2
+ export declare class ConfigLoader {
3
+ private static readonly CONFIG_FILES;
4
+ /**
5
+ * Load configuration from the nearest vibe-guard.json file
6
+ */
7
+ static loadConfig(projectPath: string): VibeGuardConfig;
8
+ /**
9
+ * Find the nearest configuration file in the project hierarchy
10
+ */
11
+ static findConfigFile(projectPath: string): string | null;
12
+ /**
13
+ * Validate and normalize configuration
14
+ */
15
+ private static validateConfig;
16
+ /**
17
+ * Merge configuration with CLI options (CLI takes precedence)
18
+ */
19
+ static mergeConfig(config: VibeGuardConfig, cliOptions: Partial<ScanOptions>): ScanOptions;
20
+ /**
21
+ * Create a default configuration file
22
+ */
23
+ static createDefaultConfig(): VibeGuardConfig;
24
+ /**
25
+ * Generate a sample configuration file content
26
+ */
27
+ static generateSampleConfig(): string;
28
+ }
29
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAiB,MAAM,SAAS,CAAC;AAEtE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAIlC;IAEF;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;IAkBvD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBzD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAgE7B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW;IAU1F;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,eAAe;IAoB7C;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;CAwCtC"}
package/dist/config.js ADDED
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConfigLoader = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class ConfigLoader {
40
+ /**
41
+ * Load configuration from the nearest vibe-guard.json file
42
+ */
43
+ static loadConfig(projectPath) {
44
+ const configPath = this.findConfigFile(projectPath);
45
+ if (!configPath) {
46
+ return {};
47
+ }
48
+ try {
49
+ const configContent = fs.readFileSync(configPath, 'utf-8');
50
+ const config = JSON.parse(configContent);
51
+ // Validate and normalize config
52
+ return this.validateConfig(config);
53
+ }
54
+ catch (error) {
55
+ console.warn(`Warning: Could not load config from ${configPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
56
+ return {};
57
+ }
58
+ }
59
+ /**
60
+ * Find the nearest configuration file in the project hierarchy
61
+ */
62
+ static findConfigFile(projectPath) {
63
+ let currentPath = path.resolve(projectPath);
64
+ while (currentPath !== path.dirname(currentPath)) {
65
+ for (const configFile of this.CONFIG_FILES) {
66
+ const configPath = path.join(currentPath, configFile);
67
+ if (fs.existsSync(configPath)) {
68
+ return configPath;
69
+ }
70
+ }
71
+ currentPath = path.dirname(currentPath);
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Validate and normalize configuration
77
+ */
78
+ static validateConfig(config) {
79
+ const validated = {};
80
+ // Validate output format
81
+ if (config.outputFormat && ['table', 'json', 'sarif', 'html'].includes(config.outputFormat)) {
82
+ validated.outputFormat = config.outputFormat;
83
+ }
84
+ // Validate severity
85
+ if (config.severity && ['critical', 'high', 'medium', 'low'].includes(config.severity)) {
86
+ validated.severity = config.severity;
87
+ }
88
+ // Validate arrays
89
+ if (Array.isArray(config.exclude)) {
90
+ validated.exclude = config.exclude.filter((item) => typeof item === 'string');
91
+ }
92
+ if (Array.isArray(config.include)) {
93
+ validated.include = config.include.filter((item) => typeof item === 'string');
94
+ }
95
+ // Validate strings
96
+ if (typeof config.outputFile === 'string') {
97
+ validated.outputFile = config.outputFile;
98
+ }
99
+ if (typeof config.maxFileSize === 'string') {
100
+ validated.maxFileSize = config.maxFileSize;
101
+ }
102
+ // Validate booleans
103
+ if (typeof config.verbose === 'boolean') {
104
+ validated.verbose = config.verbose;
105
+ }
106
+ if (typeof config.parallel === 'boolean') {
107
+ validated.parallel = config.parallel;
108
+ }
109
+ // Validate numbers
110
+ if (typeof config.maxWorkers === 'number' && config.maxWorkers > 0) {
111
+ validated.maxWorkers = config.maxWorkers;
112
+ }
113
+ // Validate rules configuration
114
+ if (config.rules && typeof config.rules === 'object') {
115
+ validated.rules = {};
116
+ for (const [ruleName, ruleConfig] of Object.entries(config.rules)) {
117
+ if (typeof ruleConfig === 'object' && ruleConfig !== null) {
118
+ const rule = ruleConfig;
119
+ validated.rules[ruleName] = {
120
+ enabled: typeof rule.enabled === 'boolean' ? rule.enabled : true,
121
+ severity: ['critical', 'high', 'medium', 'low'].includes(rule.severity) ? rule.severity : undefined,
122
+ patterns: Array.isArray(rule.patterns) ? rule.patterns.filter((p) => typeof p === 'string') : undefined,
123
+ excludePatterns: Array.isArray(rule.excludePatterns) ? rule.excludePatterns.filter((p) => typeof p === 'string') : undefined
124
+ };
125
+ }
126
+ }
127
+ }
128
+ return validated;
129
+ }
130
+ /**
131
+ * Merge configuration with CLI options (CLI takes precedence)
132
+ */
133
+ static mergeConfig(config, cliOptions) {
134
+ return {
135
+ target: cliOptions.target || '.',
136
+ format: cliOptions.format ?? config.outputFormat ?? 'table',
137
+ verbose: cliOptions.verbose ?? config.verbose ?? false,
138
+ exclude: cliOptions.exclude || config.exclude || [],
139
+ include: cliOptions.include || config.include || []
140
+ };
141
+ }
142
+ /**
143
+ * Create a default configuration file
144
+ */
145
+ static createDefaultConfig() {
146
+ return {
147
+ exclude: [
148
+ 'node_modules/**',
149
+ 'dist/**',
150
+ 'build/**',
151
+ '.git/**',
152
+ 'coverage/**',
153
+ '**/*.min.js',
154
+ '**/*.bundle.js'
155
+ ],
156
+ outputFormat: 'table',
157
+ verbose: false,
158
+ severity: 'low',
159
+ maxFileSize: '5MB',
160
+ parallel: false,
161
+ maxWorkers: 4
162
+ };
163
+ }
164
+ /**
165
+ * Generate a sample configuration file content
166
+ */
167
+ static generateSampleConfig() {
168
+ const sampleConfig = {
169
+ exclude: [
170
+ 'node_modules/**',
171
+ 'dist/**',
172
+ 'build/**',
173
+ '.git/**',
174
+ 'coverage/**',
175
+ '**/*.min.js',
176
+ '**/*.bundle.js'
177
+ ],
178
+ include: [
179
+ 'src/**/*.{js,ts,jsx,tsx}',
180
+ 'lib/**/*.{js,ts}'
181
+ ],
182
+ outputFormat: 'table',
183
+ outputFile: 'security-report.json',
184
+ verbose: false,
185
+ severity: 'low',
186
+ maxFileSize: '5MB',
187
+ parallel: false,
188
+ maxWorkers: 4,
189
+ rules: {
190
+ 'sql-injection': {
191
+ enabled: true,
192
+ severity: 'critical'
193
+ },
194
+ 'xss-detection': {
195
+ enabled: true,
196
+ severity: 'high'
197
+ },
198
+ 'exposed-secrets': {
199
+ enabled: true,
200
+ severity: 'critical'
201
+ }
202
+ }
203
+ };
204
+ return JSON.stringify(sampleConfig, null, 2);
205
+ }
206
+ }
207
+ exports.ConfigLoader = ConfigLoader;
208
+ ConfigLoader.CONFIG_FILES = [
209
+ 'vibe-guard.json',
210
+ '.vibe-guard.json',
211
+ 'vibe-guard.config.json'
212
+ ];
213
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,11 +5,19 @@ export declare class VibeGuard {
5
5
  private rules;
6
6
  constructor();
7
7
  scan(options: ScanOptions): Promise<ScanResult>;
8
- formatResults(result: ScanResult, format?: 'table' | 'json'): string;
8
+ formatResults(result: ScanResult, format?: 'table' | 'json' | 'sarif' | 'html'): string;
9
9
  scanAndFormat(options: ScanOptions): Promise<string>;
10
10
  getRules(): BaseRule[];
11
11
  getRuleByName(name: string): BaseRule | undefined;
12
12
  getVersion(): string;
13
+ /**
14
+ * Generate a sample configuration file
15
+ */
16
+ generateConfig(): string;
17
+ /**
18
+ * Create a default configuration file in the current directory
19
+ */
20
+ createConfigFile(): void;
13
21
  }
14
22
  export * from './types';
15
23
  export * from './rules';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA6BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA+BrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAgB,GAAG,MAAM;IAUvE,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,QAAQ,IAAI,QAAQ,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,UAAU,IAAI,MAAM;CAGrB;AAED,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAwB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA6BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA+CrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAgB,GAAG,MAAM;IAc1F,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,QAAQ,IAAI,QAAQ,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAWzB;AAED,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAe,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -41,6 +41,7 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const scanner_1 = require("./scanner");
43
43
  const reporter_1 = require("./reporter");
44
+ const config_1 = require("./config");
44
45
  const exposed_secrets_1 = require("./rules/exposed-secrets");
45
46
  const missing_authentication_1 = require("./rules/missing-authentication");
46
47
  const open_cors_1 = require("./rules/open-cors");
@@ -90,27 +91,40 @@ class VibeGuard {
90
91
  this.reporter = new reporter_1.Reporter();
91
92
  }
92
93
  async scan(options) {
93
- const targetPath = path.resolve(options.target);
94
- console.log('DEBUG: VibeGuard.scan called with target:', targetPath);
95
- console.log('DEBUG: Number of rules:', this.rules.length);
94
+ // Load configuration from vibe-guard.json
95
+ const config = config_1.ConfigLoader.loadConfig(options.target);
96
+ // Merge config with CLI options (CLI takes precedence)
97
+ const mergedOptions = config_1.ConfigLoader.mergeConfig(config, options);
98
+ const targetPath = path.resolve(mergedOptions.target);
99
+ if (mergedOptions.verbose) {
100
+ console.log('Configuration loaded from:', config_1.ConfigLoader.findConfigFile(options.target) || 'none');
101
+ console.log('Number of rules:', this.rules.length);
102
+ }
96
103
  if (!fs.existsSync(targetPath)) {
97
104
  throw new Error(`Target path does not exist: ${targetPath}`);
98
105
  }
99
106
  const stats = fs.statSync(targetPath);
100
- console.log('DEBUG: Target is file:', stats.isFile());
101
- console.log('DEBUG: Target is directory:', stats.isDirectory());
107
+ if (mergedOptions.verbose) {
108
+ console.log('Target type:', stats.isFile() ? 'file' : 'directory');
109
+ }
102
110
  if (stats.isFile()) {
103
- console.log('DEBUG: Calling scanner.scanFile...');
111
+ if (mergedOptions.verbose) {
112
+ console.log('Scanning single file...');
113
+ }
104
114
  const result = await this.scanner.scanFile(targetPath, this.rules);
105
- console.log('DEBUG: scanFile result:', {
106
- filesScanned: result.filesScanned,
107
- issuesFound: result.issuesFound,
108
- summary: result.summary
109
- });
115
+ if (mergedOptions.verbose) {
116
+ console.log('Scan completed:', {
117
+ filesScanned: result.filesScanned,
118
+ issuesFound: result.issuesFound,
119
+ summary: result.summary
120
+ });
121
+ }
110
122
  return result;
111
123
  }
112
124
  else if (stats.isDirectory()) {
113
- console.log('DEBUG: Calling scanner.scanDirectory...');
125
+ if (mergedOptions.verbose) {
126
+ console.log('Scanning directory...');
127
+ }
114
128
  return await this.scanner.scanDirectory(targetPath, this.rules);
115
129
  }
116
130
  else {
@@ -121,6 +135,10 @@ class VibeGuard {
121
135
  switch (format) {
122
136
  case 'json':
123
137
  return this.reporter.formatJson(result);
138
+ case 'sarif':
139
+ return this.reporter.formatSarif(result);
140
+ case 'html':
141
+ return this.reporter.formatHtml(result);
124
142
  case 'table':
125
143
  default:
126
144
  return this.reporter.formatTable(result);
@@ -139,6 +157,25 @@ class VibeGuard {
139
157
  getVersion() {
140
158
  return version_1.VERSION;
141
159
  }
160
+ /**
161
+ * Generate a sample configuration file
162
+ */
163
+ generateConfig() {
164
+ return config_1.ConfigLoader.generateSampleConfig();
165
+ }
166
+ /**
167
+ * Create a default configuration file in the current directory
168
+ */
169
+ createConfigFile() {
170
+ const configPath = path.join(process.cwd(), 'vibe-guard.json');
171
+ if (fs.existsSync(configPath)) {
172
+ console.log('Configuration file already exists: vibe-guard.json');
173
+ return;
174
+ }
175
+ const configContent = config_1.ConfigLoader.generateSampleConfig();
176
+ fs.writeFileSync(configPath, configContent);
177
+ console.log('Created configuration file: vibe-guard.json');
178
+ }
142
179
  }
143
180
  exports.VibeGuard = VibeGuard;
144
181
  __exportStar(require("./types"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,13 @@ import { SecurityIssue, ScanResult } from './types';
2
2
  export declare class Reporter {
3
3
  formatTable(result: ScanResult): string;
4
4
  formatJson(result: ScanResult): string;
5
+ formatSarif(result: ScanResult): string;
6
+ formatHtml(result: ScanResult): string;
7
+ private generateSarifRules;
8
+ private generateSarifResults;
9
+ private mapSeverityToSarifLevel;
10
+ private formatHtmlIssue;
11
+ private escapeHtml;
5
12
  private formatSuccess;
6
13
  private formatHeader;
7
14
  private formatSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEnE,qBAAa,QAAQ;IACnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IAyBxB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;CASjD"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEnE,qBAAa,QAAQ;IACnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAqCvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8OtC,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IAyBxB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;CASjD"}
package/dist/reporter.js CHANGED
@@ -36,6 +36,367 @@ class Reporter {
36
36
  formatJson(result) {
37
37
  return JSON.stringify(result, null, 2);
38
38
  }
39
+ formatSarif(result) {
40
+ const sarif = {
41
+ $schema: "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json",
42
+ version: "2.1.0",
43
+ runs: [
44
+ {
45
+ tool: {
46
+ driver: {
47
+ name: "Vibe-Guard",
48
+ version: "1.1.3",
49
+ informationUri: "https://github.com/Devjosef/vibe-guard",
50
+ rules: this.generateSarifRules(result)
51
+ }
52
+ },
53
+ results: this.generateSarifResults(result),
54
+ invocations: [
55
+ {
56
+ executionSuccessful: true,
57
+ toolExecutionNotifications: [
58
+ {
59
+ descriptor: {
60
+ id: "vibe-guard-scan"
61
+ },
62
+ message: {
63
+ text: `Scanned ${result.filesScanned} files and found ${result.issuesFound} security issues`
64
+ }
65
+ }
66
+ ]
67
+ }
68
+ ]
69
+ }
70
+ ]
71
+ };
72
+ return JSON.stringify(sarif, null, 2);
73
+ }
74
+ formatHtml(result) {
75
+ const html = `<!DOCTYPE html>
76
+ <html lang="en">
77
+ <head>
78
+ <meta charset="UTF-8">
79
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
80
+ <title>Vibe-Guard Security Report</title>
81
+ <style>
82
+ * {
83
+ margin: 0;
84
+ padding: 0;
85
+ box-sizing: border-box;
86
+ }
87
+
88
+ body {
89
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
90
+ line-height: 1.6;
91
+ color: #333;
92
+ background: #f5f5f5;
93
+ padding: 2rem;
94
+ }
95
+
96
+ .container {
97
+ max-width: 1200px;
98
+ margin: 0 auto;
99
+ background: white;
100
+ border-radius: 8px;
101
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
102
+ overflow: hidden;
103
+ }
104
+
105
+ .header {
106
+ background: linear-gradient(135deg, #ff4757, #ff3838);
107
+ color: white;
108
+ padding: 2rem;
109
+ text-align: center;
110
+ }
111
+
112
+ .header h1 {
113
+ font-size: 2.5rem;
114
+ margin-bottom: 0.5rem;
115
+ }
116
+
117
+ .header p {
118
+ font-size: 1.1rem;
119
+ opacity: 0.9;
120
+ }
121
+
122
+ .summary {
123
+ padding: 2rem;
124
+ background: #f8f9fa;
125
+ border-bottom: 1px solid #e9ecef;
126
+ }
127
+
128
+ .summary-grid {
129
+ display: grid;
130
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
131
+ gap: 1rem;
132
+ margin-top: 1rem;
133
+ }
134
+
135
+ .summary-card {
136
+ background: white;
137
+ padding: 1.5rem;
138
+ border-radius: 8px;
139
+ text-align: center;
140
+ border-left: 4px solid;
141
+ }
142
+
143
+ .summary-card.critical { border-left-color: #dc3545; }
144
+ .summary-card.high { border-left-color: #fd7e14; }
145
+ .summary-card.medium { border-left-color: #ffc107; }
146
+ .summary-card.low { border-left-color: #17a2b8; }
147
+
148
+ .summary-card h3 {
149
+ font-size: 2rem;
150
+ margin-bottom: 0.5rem;
151
+ }
152
+
153
+ .summary-card.critical h3 { color: #dc3545; }
154
+ .summary-card.high h3 { color: #fd7e14; }
155
+ .summary-card.medium h3 { color: #ffc107; }
156
+ .summary-card.low h3 { color: #17a2b8; }
157
+
158
+ .issues {
159
+ padding: 2rem;
160
+ }
161
+
162
+ .issue {
163
+ background: white;
164
+ border: 1px solid #e9ecef;
165
+ border-radius: 8px;
166
+ margin-bottom: 1rem;
167
+ overflow: hidden;
168
+ }
169
+
170
+ .issue-header {
171
+ padding: 1rem;
172
+ border-bottom: 1px solid #e9ecef;
173
+ display: flex;
174
+ justify-content: space-between;
175
+ align-items: center;
176
+ }
177
+
178
+ .issue-title {
179
+ font-weight: 600;
180
+ font-size: 1.1rem;
181
+ }
182
+
183
+ .severity {
184
+ padding: 0.25rem 0.75rem;
185
+ border-radius: 20px;
186
+ font-size: 0.875rem;
187
+ font-weight: 600;
188
+ text-transform: uppercase;
189
+ }
190
+
191
+ .severity.critical { background: #dc3545; color: white; }
192
+ .severity.high { background: #fd7e14; color: white; }
193
+ .severity.medium { background: #ffc107; color: #212529; }
194
+ .severity.low { background: #17a2b8; color: white; }
195
+
196
+ .issue-content {
197
+ padding: 1rem;
198
+ }
199
+
200
+ .issue-meta {
201
+ display: grid;
202
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
203
+ gap: 1rem;
204
+ margin-bottom: 1rem;
205
+ }
206
+
207
+ .meta-item {
208
+ background: #f8f9fa;
209
+ padding: 0.75rem;
210
+ border-radius: 4px;
211
+ }
212
+
213
+ .meta-label {
214
+ font-size: 0.875rem;
215
+ color: #6c757d;
216
+ margin-bottom: 0.25rem;
217
+ }
218
+
219
+ .meta-value {
220
+ font-weight: 600;
221
+ font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
222
+ }
223
+
224
+ .code-snippet {
225
+ background: #f8f9fa;
226
+ border: 1px solid #e9ecef;
227
+ border-radius: 4px;
228
+ padding: 1rem;
229
+ font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
230
+ font-size: 0.875rem;
231
+ overflow-x: auto;
232
+ }
233
+
234
+ .suggestion {
235
+ background: #e7f3ff;
236
+ border: 1px solid #b3d9ff;
237
+ border-radius: 4px;
238
+ padding: 1rem;
239
+ margin-top: 1rem;
240
+ }
241
+
242
+ .suggestion h4 {
243
+ color: #0066cc;
244
+ margin-bottom: 0.5rem;
245
+ }
246
+
247
+ .footer {
248
+ background: #f8f9fa;
249
+ padding: 2rem;
250
+ text-align: center;
251
+ color: #6c757d;
252
+ border-top: 1px solid #e9ecef;
253
+ }
254
+
255
+ @media (max-width: 768px) {
256
+ body { padding: 1rem; }
257
+ .header h1 { font-size: 2rem; }
258
+ .issue-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; }
259
+ }
260
+ </style>
261
+ </head>
262
+ <body>
263
+ <div class="container">
264
+ <div class="header">
265
+ <h1>🛡️ Vibe-Guard Security Report</h1>
266
+ <p>Security scan completed on ${new Date().toLocaleDateString()}</p>
267
+ </div>
268
+
269
+ <div class="summary">
270
+ <h2>Summary</h2>
271
+ <div class="summary-grid">
272
+ <div class="summary-card critical">
273
+ <h3>${result.summary.critical}</h3>
274
+ <p>Critical Issues</p>
275
+ </div>
276
+ <div class="summary-card high">
277
+ <h3>${result.summary.high}</h3>
278
+ <p>High Issues</p>
279
+ </div>
280
+ <div class="summary-card medium">
281
+ <h3>${result.summary.medium}</h3>
282
+ <p>Medium Issues</p>
283
+ </div>
284
+ <div class="summary-card low">
285
+ <h3>${result.summary.low}</h3>
286
+ <p>Low Issues</p>
287
+ </div>
288
+ </div>
289
+ <p style="margin-top: 1rem; color: #6c757d;">
290
+ Scanned ${result.filesScanned} files and found ${result.issuesFound} security issues
291
+ </p>
292
+ </div>
293
+
294
+ <div class="issues">
295
+ <h2>Security Issues</h2>
296
+ ${result.issues.length === 0 ?
297
+ '<div style="text-align: center; padding: 3rem; color: #28a745;"><h3>✅ No security issues found!</h3><p>Your code looks secure.</p></div>' :
298
+ result.issues.map(issue => this.formatHtmlIssue(issue)).join('')}
299
+ </div>
300
+
301
+ <div class="footer">
302
+ <p>Generated by Vibe-Guard v1.1.3 | <a href="https://github.com/Devjosef/vibe-guard">GitHub</a></p>
303
+ </div>
304
+ </div>
305
+ </body>
306
+ </html>`;
307
+ return html;
308
+ }
309
+ generateSarifRules(result) {
310
+ const ruleNames = [...new Set(result.issues.map(issue => issue.rule))];
311
+ return ruleNames.map(ruleName => ({
312
+ id: ruleName,
313
+ name: ruleName,
314
+ shortDescription: {
315
+ text: `Security rule: ${ruleName}`
316
+ }
317
+ }));
318
+ }
319
+ generateSarifResults(result) {
320
+ return result.issues.map(issue => ({
321
+ ruleId: issue.rule,
322
+ level: this.mapSeverityToSarifLevel(issue.severity),
323
+ message: {
324
+ text: issue.message
325
+ },
326
+ locations: [
327
+ {
328
+ physicalLocation: {
329
+ artifactLocation: {
330
+ uri: issue.file
331
+ },
332
+ region: {
333
+ startLine: issue.line,
334
+ startColumn: issue.column
335
+ }
336
+ }
337
+ }
338
+ ],
339
+ properties: {
340
+ suggestion: issue.suggestion
341
+ }
342
+ }));
343
+ }
344
+ mapSeverityToSarifLevel(severity) {
345
+ switch (severity) {
346
+ case 'critical':
347
+ case 'high':
348
+ return 'error';
349
+ case 'medium':
350
+ return 'warning';
351
+ case 'low':
352
+ return 'note';
353
+ default:
354
+ return 'note';
355
+ }
356
+ }
357
+ formatHtmlIssue(issue) {
358
+ return `
359
+ <div class="issue">
360
+ <div class="issue-header">
361
+ <div class="issue-title">${this.escapeHtml(issue.rule)}</div>
362
+ <div class="severity ${issue.severity}">${issue.severity.toUpperCase()}</div>
363
+ </div>
364
+ <div class="issue-content">
365
+ <p><strong>${this.escapeHtml(issue.message)}</strong></p>
366
+
367
+ <div class="issue-meta">
368
+ <div class="meta-item">
369
+ <div class="meta-label">File</div>
370
+ <div class="meta-value">${this.escapeHtml(issue.file)}</div>
371
+ </div>
372
+ <div class="meta-item">
373
+ <div class="meta-label">Line</div>
374
+ <div class="meta-value">${issue.line}:${issue.column}</div>
375
+ </div>
376
+ <div class="meta-item">
377
+ <div class="meta-label">Rule</div>
378
+ <div class="meta-value">${this.escapeHtml(issue.rule)}</div>
379
+ </div>
380
+ </div>
381
+
382
+ <div class="code-snippet">${this.escapeHtml(issue.code)}</div>
383
+
384
+ <div class="suggestion">
385
+ <h4>💡 Suggestion</h4>
386
+ <p>${this.escapeHtml(issue.suggestion)}</p>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ `;
391
+ }
392
+ escapeHtml(text) {
393
+ return text
394
+ .replace(/&/g, '&amp;')
395
+ .replace(/</g, '&lt;')
396
+ .replace(/>/g, '&gt;')
397
+ .replace(/"/g, '&quot;')
398
+ .replace(/'/g, '&#039;');
399
+ }
39
400
  formatSuccess(result) {
40
401
  const header = chalk_1.default.green.bold('🛡️ Vibe-Guard Security Scan Complete');
41
402
  const summary = chalk_1.default.green(`✅ No security issues found in ${result.filesScanned} files`);
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export interface SecurityIssue {
11
11
  }
12
12
  export interface ScanOptions {
13
13
  target: string;
14
- format: 'table' | 'json';
14
+ format: 'table' | 'json' | 'sarif' | 'html';
15
15
  verbose: boolean;
16
16
  exclude?: string[];
17
17
  include?: string[];
@@ -45,10 +45,16 @@ export interface RuleConfig {
45
45
  excludePatterns?: string[];
46
46
  }
47
47
  export interface VibeGuardConfig {
48
- rules: Record<string, RuleConfig>;
49
- exclude: string[];
50
- include: string[];
51
- outputFormat: 'table' | 'json';
48
+ rules?: Record<string, RuleConfig>;
49
+ exclude?: string[];
50
+ include?: string[];
51
+ outputFormat?: 'table' | 'json' | 'sarif' | 'html';
52
+ outputFile?: string;
53
+ verbose?: boolean;
54
+ severity?: SeverityLevel;
55
+ maxFileSize?: string;
56
+ parallel?: boolean;
57
+ maxWorkers?: number;
52
58
  }
53
59
  export declare abstract class BaseRule {
54
60
  abstract readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;CAChC;AAED,8BAAsB,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAE1C,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IAEzD,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,aAAa,GACvB,aAAa;IAahB,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAC7D,KAAK,EAAE,gBAAgB,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CA2BH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AA4DA,MAAsB,QAAQ;IAOlB,WAAW,CACnB,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAAe,EACf,UAAkB,EAClB,QAAwB;QAExB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ;YACnC,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,UAAU;SACX,CAAC;IACJ,CAAC;IAES,WAAW,CAAC,OAAe,EAAE,OAAe;QAMpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAKR,EAAE,CAAC;QAER,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE;YACvC,IAAI,KAA8B,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAEpH,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK;oBACL,IAAI,EAAE,SAAS,GAAG,CAAC;oBACnB,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;oBAC9B,WAAW;iBACZ,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,MAAM;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5DD,4BA4DC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAkEA,MAAsB,QAAQ;IAOlB,WAAW,CACnB,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAAe,EACf,UAAkB,EAClB,QAAwB;QAExB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ;YACnC,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,UAAU;SACX,CAAC;IACJ,CAAC;IAES,WAAW,CAAC,OAAe,EAAE,OAAe;QAMpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAKR,EAAE,CAAC;QAER,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE;YACvC,IAAI,KAA8B,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAEpH,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK;oBACL,IAAI,EAAE,SAAS,GAAG,CAAC;oBACnB,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;oBAC9B,WAAW;iBACZ,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,MAAM;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5DD,4BA4DC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.1.3";
1
+ export declare const VERSION = "1.1.4";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '1.1.3';
4
+ exports.VERSION = '1.1.4';
5
5
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-guard",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "🛡️ Vibe-Guard Security Scanner - 25 essential security rules to catch vulnerabilities before they catch you! Zero dependencies, instant setup, works everywhere, optimized performance. Detects SQL injection, XSS, exposed secrets, CSRF, CORS issues, and more.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,16 +19,20 @@
19
19
  "prepublishOnly": "npm run clean && npm run build",
20
20
  "package": "npm run clean && npm run build && npm run package:all",
21
21
  "package:all": "npm run package:macos && npm run package:linux && npm run package:windows",
22
- "package:macos": "npm run build && pkg dist/bin/vibe-guard.js --targets node18-macos-x64,node18-macos-arm64 --out-path binaries",
23
- "package:linux": "npm run build && pkg dist/bin/vibe-guard.js --targets node18-linux-x64,node18-linux-arm64 --out-path binaries",
24
- "package:windows": "npm run build && pkg dist/bin/vibe-guard.js --targets node18-win-x64 --out-path binaries",
22
+ "package:macos": "npm run build && pkg dist/bin/vibe-guard.js --target node18-macos-x64 --output binaries/vibe-guard-macos-x64 && pkg dist/bin/vibe-guard.js --target node18-macos-arm64 --output binaries/vibe-guard-macos-arm64",
23
+ "package:linux": "npm run build && pkg dist/bin/vibe-guard.js --target node18-linux-x64 --output binaries/vibe-guard-linux-x64 && pkg dist/bin/vibe-guard.js --target node18-linux-arm64 --output binaries/vibe-guard-linux-arm64",
24
+ "package:windows": "npm run build && pkg dist/bin/vibe-guard.js --target node18-win-x64 --output binaries/vibe-guard-windows-x64.exe",
25
25
  "dist": "npm run clean && npm run build && npm run package:all",
26
26
  "maintenance:check": "node scripts/maintenance.js check",
27
27
  "maintenance:update": "node scripts/maintenance.js update",
28
28
  "maintenance:full": "node scripts/maintenance.js full",
29
29
  "preversion": "npm test",
30
30
  "version": "git add -A src",
31
- "postversion": "git push && git push --tags"
31
+ "postversion": "git push && git push --tags",
32
+ "docs:dev": "vite documents --port 3000",
33
+ "docs:build": "vite build",
34
+ "docs:preview": "vite preview --port 3000",
35
+ "benchmark": "node scripts/benchmark.js"
32
36
  },
33
37
  "keywords": [
34
38
  "security",
@@ -73,7 +77,7 @@
73
77
  "bugs": {
74
78
  "url": "https://github.com/Devjosef/vibe-guard/issues"
75
79
  },
76
- "homepage": "https://github.com/Devjosef/vibe-guard#readme",
80
+ "homepage": "https://devjosef.github.io/vibe-guard/",
77
81
  "readme": "README.md",
78
82
  "files": [
79
83
  "dist/**/*",
@@ -89,13 +93,14 @@
89
93
  },
90
94
  "devDependencies": {
91
95
  "@types/glob": "^8.1.0",
92
- "@types/jest": "^29.5.14",
93
- "@types/node": "^22.15.23",
94
- "jest": "^29.7.0",
96
+ "@types/jest": "^29.5.0",
97
+ "@types/node": "^20.0.0",
98
+ "jest": "^29.5.0",
95
99
  "pkg": "^5.8.1",
96
- "ts-jest": "^29.3.4",
100
+ "ts-jest": "^29.1.0",
97
101
  "ts-node": "^10.9.0",
98
- "typescript": "^5.3.0"
102
+ "typescript": "^5.0.0",
103
+ "vite": "^5.0.0"
99
104
  },
100
105
  "engines": {
101
106
  "node": ">=16.0.0"