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 +10 -8
- package/README.md +90 -6
- package/dist/bin/vibe-guard.js +60 -5
- package/dist/bin/vibe-guard.js.map +1 -1
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +213 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -12
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts +7 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +361 -0
- package/dist/reporter.js.map +1 -1
- package/dist/types/index.d.ts +11 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.js +1 -1
- package/package.json +16 -11
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:
|
|
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
|
|
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
|
-
#
|
|
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
|
-
|
|
|
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
|
package/dist/bin/vibe-guard.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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":"
|
|
1
|
+
{"version":3,"file":"vibe-guard.js","sourceRoot":"","sources":["../../src/bin/vibe-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
101
|
-
|
|
107
|
+
if (mergedOptions.verbose) {
|
|
108
|
+
console.log('Target type:', stats.isFile() ? 'file' : 'directory');
|
|
109
|
+
}
|
|
102
110
|
if (stats.isFile()) {
|
|
103
|
-
|
|
111
|
+
if (mergedOptions.verbose) {
|
|
112
|
+
console.log('Scanning single file...');
|
|
113
|
+
}
|
|
104
114
|
const result = await this.scanner.scanFile(targetPath, this.rules);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAwC;AACxC,yCAAsC;AAEtC,6DAA6D;AAC7D,2EAA2E;AAC3E,iDAAiD;AACjD,+EAA8E;AAC9E,yDAAyD;AACzD,yDAAyD;AACzD,iEAAiE;AACjE,qEAAqE;AACrE,yEAAyE;AACzE,+EAA8E;AAC9E,yDAAyD;AACzD,6DAA6D;AAC7D,+EAA+E;AAC/E,yEAAwE;AACxE,uEAAsE;AACtE,mFAAkF;AAClF,+DAA+D;AAC/D,qFAAoF;AACpF,6EAA4E;AAC5E,2EAA2E;AAC3E,6CAA0C;AAE1C,MAAa,SAAS;IAKpB;QACE,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,oCAAkB,EAAE;YACxB,IAAI,kDAAyB,EAAE;YAC/B,IAAI,wBAAY,EAAE;YAClB,IAAI,qDAA0B,EAAE;YAChC,IAAI,gCAAgB,EAAE;YACtB,IAAI,gCAAgB,EAAE;YACtB,IAAI,wCAAoB,EAAE;YAC1B,IAAI,4CAAsB,EAAE;YAC5B,IAAI,gDAAwB,EAAE;YAC9B,IAAI,qDAA0B,EAAE;YAChC,IAAI,gCAAgB,EAAE;YACtB,IAAI,oCAAkB,EAAE;YACxB,IAAI,sDAA2B,EAAE;YACjC,IAAI,+CAAuB,EAAE;YAC7B,IAAI,6CAAsB,EAAE;YAC5B,IAAI,yDAA4B,EAAE;YAClC,IAAI,sCAAmB,EAAE;YACzB,IAAI,2DAA6B,EAAE;YACnC,IAAI,mDAAyB,EAAE;YAC/B,IAAI,kDAAyB,EAAE;SAChC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAW,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter.d.ts
CHANGED
|
@@ -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;
|
package/dist/reporter.d.ts.map
CHANGED
|
@@ -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, '&')
|
|
395
|
+
.replace(/</g, '<')
|
|
396
|
+
.replace(/>/g, '>')
|
|
397
|
+
.replace(/"/g, '"')
|
|
398
|
+
.replace(/'/g, ''');
|
|
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`);
|
package/dist/reporter.js.map
CHANGED
|
@@ -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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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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
|
|
49
|
-
exclude
|
|
50
|
-
include
|
|
51
|
-
outputFormat
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.1.
|
|
1
|
+
export declare const VERSION = "1.1.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/types/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe-guard",
|
|
3
|
-
"version": "1.1.
|
|
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 --
|
|
23
|
-
"package:linux": "npm run build && pkg dist/bin/vibe-guard.js --
|
|
24
|
-
"package:windows": "npm run build && pkg dist/bin/vibe-guard.js --
|
|
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.
|
|
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.
|
|
93
|
-
"@types/node": "^
|
|
94
|
-
"jest": "^29.
|
|
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.
|
|
100
|
+
"ts-jest": "^29.1.0",
|
|
97
101
|
"ts-node": "^10.9.0",
|
|
98
|
-
"typescript": "^5.
|
|
102
|
+
"typescript": "^5.0.0",
|
|
103
|
+
"vite": "^5.0.0"
|
|
99
104
|
},
|
|
100
105
|
"engines": {
|
|
101
106
|
"node": ">=16.0.0"
|