vibe-guard 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -283
- package/dist/bin/vibe-guard.js +240 -22
- package/dist/bin/vibe-guard.js.map +1 -1
- package/dist/config.d.ts +0 -18
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -26
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +41 -19
- package/dist/reporter.js.map +1 -1
- package/dist/rules/ai-agent-access-control.d.ts +27 -2
- package/dist/rules/ai-agent-access-control.d.ts.map +1 -1
- package/dist/rules/ai-agent-access-control.js +393 -19
- package/dist/rules/ai-agent-access-control.js.map +1 -1
- package/dist/rules/ai-data-leakage-prevention.d.ts +25 -2
- package/dist/rules/ai-data-leakage-prevention.d.ts.map +1 -1
- package/dist/rules/ai-data-leakage-prevention.js +409 -21
- package/dist/rules/ai-data-leakage-prevention.js.map +1 -1
- package/dist/rules/ai-generated-code-validation.d.ts +28 -7
- package/dist/rules/ai-generated-code-validation.d.ts.map +1 -1
- package/dist/rules/ai-generated-code-validation.js +367 -96
- package/dist/rules/ai-generated-code-validation.js.map +1 -1
- package/dist/rules/broken-access-control.d.ts +40 -5
- package/dist/rules/broken-access-control.d.ts.map +1 -1
- package/dist/rules/broken-access-control.js +595 -144
- package/dist/rules/broken-access-control.js.map +1 -1
- package/dist/rules/container-registry-security.d.ts +21 -0
- package/dist/rules/container-registry-security.d.ts.map +1 -0
- package/dist/rules/container-registry-security.js +271 -0
- package/dist/rules/container-registry-security.js.map +1 -0
- package/dist/rules/csrf-protection.d.ts +25 -4
- package/dist/rules/csrf-protection.d.ts.map +1 -1
- package/dist/rules/csrf-protection.js +328 -81
- package/dist/rules/csrf-protection.js.map +1 -1
- package/dist/rules/directory-traversal.d.ts +33 -5
- package/dist/rules/directory-traversal.d.ts.map +1 -1
- package/dist/rules/directory-traversal.js +470 -171
- package/dist/rules/directory-traversal.js.map +1 -1
- package/dist/rules/dockerfile-security.d.ts +20 -0
- package/dist/rules/dockerfile-security.d.ts.map +1 -0
- package/dist/rules/dockerfile-security.js +280 -0
- package/dist/rules/dockerfile-security.js.map +1 -0
- package/dist/rules/exposed-secrets.d.ts +25 -4
- package/dist/rules/exposed-secrets.d.ts.map +1 -1
- package/dist/rules/exposed-secrets.js +355 -95
- package/dist/rules/exposed-secrets.js.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.d.ts +32 -2
- package/dist/rules/hardcoded-sensitive-data.d.ts.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.js +426 -29
- package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
- package/dist/rules/index.d.ts +9 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +25 -1
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/insecure-configuration.d.ts +16 -5
- package/dist/rules/insecure-configuration.d.ts.map +1 -1
- package/dist/rules/insecure-configuration.js +457 -64
- package/dist/rules/insecure-configuration.js.map +1 -1
- package/dist/rules/insecure-dependencies.d.ts +46 -1
- package/dist/rules/insecure-dependencies.d.ts.map +1 -1
- package/dist/rules/insecure-dependencies.js +678 -51
- package/dist/rules/insecure-dependencies.js.map +1 -1
- package/dist/rules/insecure-deserialization.d.ts +29 -4
- package/dist/rules/insecure-deserialization.d.ts.map +1 -1
- package/dist/rules/insecure-deserialization.js +531 -101
- package/dist/rules/insecure-deserialization.js.map +1 -1
- package/dist/rules/insecure-error-handling.d.ts +35 -4
- package/dist/rules/insecure-error-handling.d.ts.map +1 -1
- package/dist/rules/insecure-error-handling.js +590 -87
- package/dist/rules/insecure-error-handling.js.map +1 -1
- package/dist/rules/insecure-file-upload.d.ts +37 -5
- package/dist/rules/insecure-file-upload.d.ts.map +1 -1
- package/dist/rules/insecure-file-upload.js +690 -138
- package/dist/rules/insecure-file-upload.js.map +1 -1
- package/dist/rules/insecure-http.d.ts +31 -2
- package/dist/rules/insecure-http.d.ts.map +1 -1
- package/dist/rules/insecure-http.js +547 -61
- package/dist/rules/insecure-http.js.map +1 -1
- package/dist/rules/insecure-logging.d.ts +6 -1
- package/dist/rules/insecure-logging.d.ts.map +1 -1
- package/dist/rules/insecure-logging.js +430 -109
- package/dist/rules/insecure-logging.js.map +1 -1
- package/dist/rules/insecure-random-generation.d.ts +4 -1
- package/dist/rules/insecure-random-generation.d.ts.map +1 -1
- package/dist/rules/insecure-random-generation.js +239 -99
- package/dist/rules/insecure-random-generation.js.map +1 -1
- package/dist/rules/insecure-session-management.d.ts +4 -0
- package/dist/rules/insecure-session-management.d.ts.map +1 -1
- package/dist/rules/insecure-session-management.js +359 -54
- package/dist/rules/insecure-session-management.js.map +1 -1
- package/dist/rules/kubernetes-security.d.ts +17 -0
- package/dist/rules/kubernetes-security.d.ts.map +1 -0
- package/dist/rules/kubernetes-security.js +314 -0
- package/dist/rules/kubernetes-security.js.map +1 -0
- package/dist/rules/mcp-server-security.d.ts +32 -3
- package/dist/rules/mcp-server-security.d.ts.map +1 -1
- package/dist/rules/mcp-server-security.js +511 -39
- package/dist/rules/mcp-server-security.js.map +1 -1
- package/dist/rules/missing-authentication.d.ts +4 -0
- package/dist/rules/missing-authentication.d.ts.map +1 -1
- package/dist/rules/missing-authentication.js +263 -62
- package/dist/rules/missing-authentication.js.map +1 -1
- package/dist/rules/missing-security-headers.d.ts +32 -3
- package/dist/rules/missing-security-headers.d.ts.map +1 -1
- package/dist/rules/missing-security-headers.js +548 -95
- package/dist/rules/missing-security-headers.js.map +1 -1
- package/dist/rules/open-cors.d.ts +3 -0
- package/dist/rules/open-cors.d.ts.map +1 -1
- package/dist/rules/open-cors.js +202 -57
- package/dist/rules/open-cors.js.map +1 -1
- package/dist/rules/prompt-injection-detection.d.ts +33 -3
- package/dist/rules/prompt-injection-detection.d.ts.map +1 -1
- package/dist/rules/prompt-injection-detection.js +571 -43
- package/dist/rules/prompt-injection-detection.js.map +1 -1
- package/dist/rules/sql-injection.d.ts +27 -3
- package/dist/rules/sql-injection.d.ts.map +1 -1
- package/dist/rules/sql-injection.js +471 -61
- package/dist/rules/sql-injection.js.map +1 -1
- package/dist/rules/unvalidated-input.d.ts +20 -4
- package/dist/rules/unvalidated-input.d.ts.map +1 -1
- package/dist/rules/unvalidated-input.js +557 -128
- package/dist/rules/unvalidated-input.js.map +1 -1
- package/dist/rules/xss-detection.d.ts +25 -4
- package/dist/rules/xss-detection.d.ts.map +1 -1
- package/dist/rules/xss-detection.js +702 -135
- package/dist/rules/xss-detection.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +11 -6
- package/dist/scanner.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- 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 +8 -3
- package/CHANGELOG.md +0 -102
package/dist/bin/vibe-guard.js
CHANGED
|
@@ -42,14 +42,65 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
42
42
|
const index_1 = __importDefault(require("../index"));
|
|
43
43
|
const version_1 = require("../types/version");
|
|
44
44
|
const program = new commander_1.Command();
|
|
45
|
+
// ASCII Art Logo
|
|
46
|
+
function displayLogo() {
|
|
47
|
+
// Professional blue gradient effect
|
|
48
|
+
const logo = [
|
|
49
|
+
'██╗ ██╗██╗██████╗ ███████╗ ██████╗ ██╗ ██╗ █████╗ ██████╗ ██████╗ ',
|
|
50
|
+
'╚██╗ ██╔╝██║██╔══██╗██╔════╝ ██╔════╝ ██║ ██║██╔══██╗██╔══██╗██╔══██╗',
|
|
51
|
+
' ╚████╔╝ ██║██████╔╝█████╗ ██║ ███╗██║ ██║███████║██████╔╝██║ ██║',
|
|
52
|
+
' ╚██╔╝ ██║██╔══██╗██╔══╝ ██║ ██║██║ ██║██╔══██║██╔══██╗██║ ██║',
|
|
53
|
+
' ██║ ██║██████╔╝███████╗ ╚██████╔╝╚██████╔╝██║ ██║██║ ██║██████╔╝',
|
|
54
|
+
' ╚═╝ ╚═╝╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ '
|
|
55
|
+
];
|
|
56
|
+
// Subtle gradient from dark blue to lighter blue
|
|
57
|
+
logo.forEach((line, index) => {
|
|
58
|
+
let color;
|
|
59
|
+
switch (index) {
|
|
60
|
+
case 0:
|
|
61
|
+
color = chalk_1.default.blue;
|
|
62
|
+
break;
|
|
63
|
+
case 1:
|
|
64
|
+
color = chalk_1.default.blueBright;
|
|
65
|
+
break;
|
|
66
|
+
case 2:
|
|
67
|
+
color = chalk_1.default.cyan;
|
|
68
|
+
break;
|
|
69
|
+
case 3:
|
|
70
|
+
color = chalk_1.default.cyanBright;
|
|
71
|
+
break;
|
|
72
|
+
case 4:
|
|
73
|
+
color = chalk_1.default.blueBright;
|
|
74
|
+
break;
|
|
75
|
+
case 5:
|
|
76
|
+
color = chalk_1.default.blue;
|
|
77
|
+
break;
|
|
78
|
+
default: color = chalk_1.default.blue;
|
|
79
|
+
}
|
|
80
|
+
console.log(color.bold(line));
|
|
81
|
+
});
|
|
82
|
+
// Clean subtitle with subtle accent
|
|
83
|
+
console.log(chalk_1.default.blue.bold(' ██ SECURITY SCANNER ██\n'));
|
|
84
|
+
}
|
|
45
85
|
program
|
|
46
86
|
.name('vibe-guard')
|
|
47
|
-
.description('
|
|
48
|
-
.version(version_1.VERSION)
|
|
87
|
+
.description('██ Vibe-Guard Security Scanner - Catch security issues before they catch you!')
|
|
88
|
+
.version(version_1.VERSION)
|
|
89
|
+
.hook('preAction', () => {
|
|
90
|
+
displayLogo();
|
|
91
|
+
});
|
|
49
92
|
const fs = __importStar(require("fs"));
|
|
50
93
|
async function handleScan(target, options) {
|
|
51
94
|
try {
|
|
52
|
-
console.log(chalk_1.default.blue.bold('
|
|
95
|
+
console.log(chalk_1.default.blue.bold('╔══════════════════════════════════════════════════════════════════════════════╗'));
|
|
96
|
+
console.log(chalk_1.default.blue.bold('║ STARTING VIBE-GUARD SECURITY SCAN ║'));
|
|
97
|
+
console.log(chalk_1.default.blue.bold('║ THREAT DETECTION ACTIVE ║'));
|
|
98
|
+
console.log(chalk_1.default.blue.bold('╚══════════════════════════════════════════════════════════════════════════════╝\n'));
|
|
99
|
+
// Validate severity level if provided
|
|
100
|
+
if (options.severity && !['critical', 'high', 'medium', 'low'].includes(options.severity)) {
|
|
101
|
+
console.error(chalk_1.default.red.bold('❌ Error: Invalid severity level. Must be one of: critical, high, medium, low'));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
53
104
|
const scanOptions = {
|
|
54
105
|
target,
|
|
55
106
|
format: options.format,
|
|
@@ -57,6 +108,15 @@ async function handleScan(target, options) {
|
|
|
57
108
|
exclude: options.exclude,
|
|
58
109
|
include: options.include
|
|
59
110
|
};
|
|
111
|
+
// Add optional properties only when they have values
|
|
112
|
+
if (options.severity)
|
|
113
|
+
scanOptions.severity = options.severity;
|
|
114
|
+
if (options.config)
|
|
115
|
+
scanOptions.config = options.config;
|
|
116
|
+
if (options.parallel)
|
|
117
|
+
scanOptions.parallel = options.parallel;
|
|
118
|
+
if (options.maxFiles)
|
|
119
|
+
scanOptions.maxFiles = parseInt(options.maxFiles);
|
|
60
120
|
const vibeGuard = new index_1.default();
|
|
61
121
|
const output = await vibeGuard.scanAndFormat(scanOptions);
|
|
62
122
|
if (options.outputFile) {
|
|
@@ -83,31 +143,23 @@ program
|
|
|
83
143
|
.option('-f, --format <format>', 'Output format (table, json, sarif, html)')
|
|
84
144
|
.option('-o, --output-file <file>', 'Write output to file')
|
|
85
145
|
.option('-v, --verbose', 'Verbose output', false)
|
|
146
|
+
.option('-s, --severity <level>', 'Minimum severity level (critical, high, medium, low)')
|
|
147
|
+
.option('-c, --config <file>', 'Path to configuration file')
|
|
148
|
+
.option('--parallel', 'Enable parallel processing for better performance')
|
|
149
|
+
.option('--max-files <number>', 'Maximum files to process concurrently')
|
|
86
150
|
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
87
151
|
.option('--include <patterns...>', 'Include patterns')
|
|
88
152
|
.action(handleScan);
|
|
89
|
-
program
|
|
90
|
-
.argument('[target]', 'File or directory to scan')
|
|
91
|
-
.option('-f, --format <format>', 'Output format (table, json, sarif, html)')
|
|
92
|
-
.option('-o, --output-file <file>', 'Write output to file')
|
|
93
|
-
.option('-v, --verbose', 'Verbose output', false)
|
|
94
|
-
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
95
|
-
.option('--include <patterns...>', 'Include patterns')
|
|
96
|
-
.action((target, options) => {
|
|
97
|
-
if (target) {
|
|
98
|
-
handleScan(target, options);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
program.help();
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
153
|
program
|
|
105
154
|
.command('rules')
|
|
106
155
|
.description('List all available security rules')
|
|
107
156
|
.action(() => {
|
|
108
157
|
const vibeGuard = new index_1.default();
|
|
109
158
|
const rules = vibeGuard.getRules();
|
|
110
|
-
console.log(chalk_1.default.blue.bold('
|
|
159
|
+
console.log(chalk_1.default.blue.bold('╔══════════════════════════════════════════════════════════════════════════════╗'));
|
|
160
|
+
console.log(chalk_1.default.blue.bold('║ AVAILABLE SECURITY RULES ║'));
|
|
161
|
+
console.log(chalk_1.default.blue.bold('║ THREAT DETECTION MATRIX ║'));
|
|
162
|
+
console.log(chalk_1.default.blue.bold('╚══════════════════════════════════════════════════════════════════════════════╝\n'));
|
|
111
163
|
rules.forEach(rule => {
|
|
112
164
|
const severityColor = rule.severity === 'critical' ? chalk_1.default.red.bold :
|
|
113
165
|
rule.severity === 'high' ? chalk_1.default.red :
|
|
@@ -121,10 +173,13 @@ program
|
|
|
121
173
|
.command('version')
|
|
122
174
|
.description('Show version information')
|
|
123
175
|
.action(() => {
|
|
124
|
-
console.log(chalk_1.default.blue.bold('
|
|
176
|
+
console.log(chalk_1.default.blue.bold('╔══════════════════════════════════════════════════════════════════════════════╗'));
|
|
177
|
+
console.log(chalk_1.default.blue.bold('║ VIBE-GUARD SECURITY SCANNER ║'));
|
|
178
|
+
console.log(chalk_1.default.blue.bold('║ THREAT DETECTION ENGINE ║'));
|
|
179
|
+
console.log(chalk_1.default.blue.bold('╚══════════════════════════════════════════════════════════════════════════════╝'));
|
|
125
180
|
const vibeGuard = new index_1.default();
|
|
126
|
-
console.log(
|
|
127
|
-
console.log('Built for developers who code fast and need security that keeps up! 🚀');
|
|
181
|
+
console.log(chalk_1.default.blue.bold(`\nVERSION: ${vibeGuard.getVersion()}`));
|
|
182
|
+
console.log(chalk_1.default.gray('Built for developers who code fast and need security that keeps up! 🚀'));
|
|
128
183
|
console.log(chalk_1.default.gray('TypeScript-powered, zero-dependency security scanning'));
|
|
129
184
|
});
|
|
130
185
|
program
|
|
@@ -134,6 +189,34 @@ program
|
|
|
134
189
|
const vibeGuard = new index_1.default();
|
|
135
190
|
vibeGuard.createConfigFile();
|
|
136
191
|
});
|
|
192
|
+
program
|
|
193
|
+
.command('start')
|
|
194
|
+
.description('Start interactive Vibe-Guard session')
|
|
195
|
+
.action(async () => {
|
|
196
|
+
console.log(chalk_1.default.blue.bold('╔══════════════════════════════════════════════════════════════════════════════╗'));
|
|
197
|
+
console.log(chalk_1.default.blue.bold('║ WELCOME TO VIBE-GUARD INTERACTIVE ║'));
|
|
198
|
+
console.log(chalk_1.default.blue.bold('║ INTERACTIVE SECURITY SCANNING ║'));
|
|
199
|
+
console.log(chalk_1.default.blue.bold('╚══════════════════════════════════════════════════════════════════════════════╝\n'));
|
|
200
|
+
console.log(chalk_1.default.cyan.bold('Choose an option:\n'));
|
|
201
|
+
console.log(chalk_1.default.white('1. 🔍 Scan a file or directory'));
|
|
202
|
+
console.log(chalk_1.default.white('2. 📋 View all security rules'));
|
|
203
|
+
console.log(chalk_1.default.white('3. ⚙️ Create configuration file'));
|
|
204
|
+
console.log(chalk_1.default.white('4. 📊 Show sample configuration'));
|
|
205
|
+
console.log(chalk_1.default.white('5. ℹ️ About Vibe-Guard'));
|
|
206
|
+
console.log(chalk_1.default.white('6. 🚪 Exit\n'));
|
|
207
|
+
// For now, just show the menu and exit
|
|
208
|
+
// In a full implementation, you'd use a library like 'inquirer' for interactive prompts
|
|
209
|
+
console.log(chalk_1.default.yellow('💡 Tip: Use specific commands for direct access:'));
|
|
210
|
+
console.log(chalk_1.default.gray(' vibe-guard scan <target> - Scan files/directories'));
|
|
211
|
+
console.log(chalk_1.default.gray(' vibe-guard rules - View security rules'));
|
|
212
|
+
console.log(chalk_1.default.gray(' vibe-guard init - Create config file'));
|
|
213
|
+
console.log(chalk_1.default.gray(' vibe-guard config - Show sample config'));
|
|
214
|
+
console.log(chalk_1.default.gray(' vibe-guard version - Show version info\n'));
|
|
215
|
+
console.log(chalk_1.default.blue.bold('╔══════════════════════════════════════════════════════════════════════════════╗'));
|
|
216
|
+
console.log(chalk_1.default.blue.bold('║ THANK YOU FOR USING VIBE-GUARD ║'));
|
|
217
|
+
console.log(chalk_1.default.blue.bold('║ STAY SECURE! 🚀 ║'));
|
|
218
|
+
console.log(chalk_1.default.blue.bold('╚══════════════════════════════════════════════════════════════════════════════╝'));
|
|
219
|
+
});
|
|
137
220
|
program
|
|
138
221
|
.command('config')
|
|
139
222
|
.description('Show sample configuration')
|
|
@@ -142,6 +225,126 @@ program
|
|
|
142
225
|
console.log(chalk_1.default.blue.bold('📝 Sample vibe-guard.json Configuration:\n'));
|
|
143
226
|
console.log(vibeGuard.generateConfig());
|
|
144
227
|
});
|
|
228
|
+
program
|
|
229
|
+
.command('learn')
|
|
230
|
+
.description('Learn about security concepts and vulnerabilities')
|
|
231
|
+
.argument('[topic]', 'Security topic to learn about (xss, sql-injection, csrf, etc.)')
|
|
232
|
+
.action((topic) => {
|
|
233
|
+
const vibeGuard = new index_1.default();
|
|
234
|
+
if (topic) {
|
|
235
|
+
const rule = vibeGuard.getRuleByName(topic);
|
|
236
|
+
if (rule) {
|
|
237
|
+
console.log(chalk_1.default.blue.bold(`📚 Learning about: ${rule.name}\n`));
|
|
238
|
+
console.log(chalk_1.default.white(rule.description));
|
|
239
|
+
console.log(chalk_1.default.yellow(`\nSeverity: ${rule.severity.toUpperCase()}`));
|
|
240
|
+
console.log(chalk_1.default.gray(`\nThis rule helps detect ${rule.name.toLowerCase()} vulnerabilities.`));
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.log(chalk_1.default.red(`❌ Unknown topic: ${topic}`));
|
|
244
|
+
console.log(chalk_1.default.gray('Use "vibe-guard rules" to see available topics.'));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.log(chalk_1.default.blue.bold('📚 Vibe-Guard Security Learning Center\n'));
|
|
249
|
+
console.log(chalk_1.default.white('Learn about security vulnerabilities and how to prevent them.\n'));
|
|
250
|
+
console.log(chalk_1.default.yellow('Available topics:'));
|
|
251
|
+
const rules = vibeGuard.getRules();
|
|
252
|
+
rules.forEach(rule => {
|
|
253
|
+
console.log(` • ${rule.name.toLowerCase().replace(/-/g, ' ')}`);
|
|
254
|
+
});
|
|
255
|
+
console.log(chalk_1.default.gray('\nExample: vibe-guard learn xss-detection'));
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
program
|
|
259
|
+
.command('demo')
|
|
260
|
+
.description('Run security scan on demo files to see how it works')
|
|
261
|
+
.action(async () => {
|
|
262
|
+
console.log(chalk_1.default.blue.bold('🎯 Vibe-Guard Security Demo\n'));
|
|
263
|
+
console.log(chalk_1.default.white('Creating demo files with security vulnerabilities...\n'));
|
|
264
|
+
const demoDir = './vibe-guard-demo';
|
|
265
|
+
if (!fs.existsSync(demoDir)) {
|
|
266
|
+
fs.mkdirSync(demoDir);
|
|
267
|
+
}
|
|
268
|
+
const xssDemo = `${demoDir}/vulnerable-app.js`;
|
|
269
|
+
fs.writeFileSync(xssDemo, `
|
|
270
|
+
// Demo file with XSS vulnerability
|
|
271
|
+
app.get('/user', (req, res) => {
|
|
272
|
+
const userInput = req.query.name;
|
|
273
|
+
res.send('<h1>Hello ' + userInput + '</h1>'); // XSS vulnerability
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// SQL Injection demo
|
|
277
|
+
app.get('/users', (req, res) => {
|
|
278
|
+
const id = req.query.id;
|
|
279
|
+
const query = 'SELECT * FROM users WHERE id = ' + id; // SQL injection
|
|
280
|
+
db.query(query);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
// Hardcoded secrets
|
|
284
|
+
const API_KEY = 'sk-1234567890abcdef'; // Exposed secret
|
|
285
|
+
const PASSWORD = 'admin123'; // Hardcoded password
|
|
286
|
+
`);
|
|
287
|
+
console.log(chalk_1.default.green('✅ Created demo files with security vulnerabilities'));
|
|
288
|
+
console.log(chalk_1.default.gray(`Location: ${demoDir}`));
|
|
289
|
+
console.log(chalk_1.default.white('\nRunning security scan...\n'));
|
|
290
|
+
try {
|
|
291
|
+
const vibeGuard = new index_1.default();
|
|
292
|
+
const output = await vibeGuard.scanAndFormat({
|
|
293
|
+
target: demoDir,
|
|
294
|
+
format: 'table',
|
|
295
|
+
verbose: true
|
|
296
|
+
});
|
|
297
|
+
console.log(output);
|
|
298
|
+
console.log(chalk_1.default.blue('\n🎓 What you learned:'));
|
|
299
|
+
console.log(chalk_1.default.white('• XSS vulnerabilities in user input'));
|
|
300
|
+
console.log(chalk_1.default.white('• SQL injection in database queries'));
|
|
301
|
+
console.log(chalk_1.default.white('• Exposed secrets and hardcoded credentials'));
|
|
302
|
+
console.log(chalk_1.default.gray('\nClean up: rm -rf vibe-guard-demo'));
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
console.error(chalk_1.default.red('Error running demo:', error));
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
program
|
|
309
|
+
.command('community')
|
|
310
|
+
.description('Join the Vibe-Guard community and contribute')
|
|
311
|
+
.action(() => {
|
|
312
|
+
console.log(chalk_1.default.blue.bold('🤝 Vibe-Guard Community\n'));
|
|
313
|
+
console.log(chalk_1.default.white('Join us in making the web more secure!\n'));
|
|
314
|
+
console.log(chalk_1.default.yellow('📚 Learn:'));
|
|
315
|
+
console.log(chalk_1.default.white(' • vibe-guard learn [topic] - Learn about security concepts'));
|
|
316
|
+
console.log(chalk_1.default.white(' • vibe-guard demo - Try the tool with demo files\n'));
|
|
317
|
+
console.log(chalk_1.default.yellow('🔧 Contribute:'));
|
|
318
|
+
console.log(chalk_1.default.white(' • GitHub: https://github.com/Devjosef/vibe-guard'));
|
|
319
|
+
console.log(chalk_1.default.white(' • Issues: https://github.com/Devjosef/vibe-guard/issues'));
|
|
320
|
+
console.log(chalk_1.default.white(' • Discussions: https://github.com/Devjosef/vibe-guard/discussions\n'));
|
|
321
|
+
console.log(chalk_1.default.yellow('📖 Resources:'));
|
|
322
|
+
console.log(chalk_1.default.white(' • Documentation: https://devjosef.github.io/vibe-guard/'));
|
|
323
|
+
console.log(chalk_1.default.white(' • Security Rules: vibe-guard rules'));
|
|
324
|
+
console.log(chalk_1.default.white(' • Examples: vibe-guard demo\n'));
|
|
325
|
+
console.log(chalk_1.default.gray('Built for developers who code fast and need security that keeps up!'));
|
|
326
|
+
});
|
|
327
|
+
program
|
|
328
|
+
.command('stats')
|
|
329
|
+
.description('Show Vibe-Guard usage statistics and impact')
|
|
330
|
+
.action(() => {
|
|
331
|
+
console.log(chalk_1.default.blue.bold('📊 Vibe-Guard Impact Statistics\n'));
|
|
332
|
+
console.log(chalk_1.default.white('Your security scanning impact:\n'));
|
|
333
|
+
console.log(chalk_1.default.yellow('██ Security Rules: 25'));
|
|
334
|
+
console.log(chalk_1.default.white(' • Covers OWASP Top 10'));
|
|
335
|
+
console.log(chalk_1.default.white(' • Modern web vulnerabilities'));
|
|
336
|
+
console.log(chalk_1.default.white(' • AI/ML security concerns\n'));
|
|
337
|
+
console.log(chalk_1.default.yellow('🌍 Global Reach:'));
|
|
338
|
+
console.log(chalk_1.default.white(' • Cross-platform (Linux, macOS, Windows)'));
|
|
339
|
+
console.log(chalk_1.default.white(' • Multiple package managers'));
|
|
340
|
+
console.log(chalk_1.default.white(' • Zero dependencies\n'));
|
|
341
|
+
console.log(chalk_1.default.yellow('🎯 Use Cases:'));
|
|
342
|
+
console.log(chalk_1.default.white(' • CI/CD security scanning'));
|
|
343
|
+
console.log(chalk_1.default.white(' • Pre-commit hooks'));
|
|
344
|
+
console.log(chalk_1.default.white(' • Security audits'));
|
|
345
|
+
console.log(chalk_1.default.white(' • Educational tool\n'));
|
|
346
|
+
console.log(chalk_1.default.gray('Every scan makes the web a little more secure! 🚀'));
|
|
347
|
+
});
|
|
145
348
|
process.on('unhandledRejection', (reason, promise) => {
|
|
146
349
|
console.error(chalk_1.default.red.bold('❌ Unhandled Rejection at:'), promise, chalk_1.default.red('reason:'), reason);
|
|
147
350
|
process.exit(1);
|
|
@@ -150,5 +353,20 @@ process.on('uncaughtException', (error) => {
|
|
|
150
353
|
console.error(chalk_1.default.red.bold('❌ Uncaught Exception:'), error);
|
|
151
354
|
process.exit(1);
|
|
152
355
|
});
|
|
356
|
+
program
|
|
357
|
+
.argument('[target]', 'File or directory to scan')
|
|
358
|
+
.option('-f, --format <format>', 'Output format (table, json, sarif, html)')
|
|
359
|
+
.option('-o, --output-file <file>', 'Write output to file')
|
|
360
|
+
.option('-v, --verbose', 'Verbose output', false)
|
|
361
|
+
.option('--exclude <patterns...>', 'Exclude patterns')
|
|
362
|
+
.option('--include <patterns...>', 'Include patterns')
|
|
363
|
+
.action((target, options) => {
|
|
364
|
+
if (target) {
|
|
365
|
+
handleScan(target, options);
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
program.help();
|
|
369
|
+
}
|
|
370
|
+
});
|
|
153
371
|
program.parse();
|
|
154
372
|
//# sourceMappingURL=vibe-guard.js.map
|
|
@@ -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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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
import { VibeGuardConfig, ScanOptions } from './types';
|
|
2
2
|
export declare class ConfigLoader {
|
|
3
3
|
private static readonly CONFIG_FILES;
|
|
4
|
-
/**
|
|
5
|
-
* Load configuration from the nearest vibe-guard.json file
|
|
6
|
-
*/
|
|
7
4
|
static loadConfig(projectPath: string): VibeGuardConfig;
|
|
8
|
-
/**
|
|
9
|
-
* Find the nearest configuration file in the project hierarchy
|
|
10
|
-
*/
|
|
11
5
|
static findConfigFile(projectPath: string): string | null;
|
|
12
|
-
/**
|
|
13
|
-
* Validate and normalize configuration
|
|
14
|
-
*/
|
|
15
6
|
private static validateConfig;
|
|
16
|
-
/**
|
|
17
|
-
* Merge configuration with CLI options (CLI takes precedence)
|
|
18
|
-
*/
|
|
19
7
|
static mergeConfig(config: VibeGuardConfig, cliOptions: Partial<ScanOptions>): ScanOptions;
|
|
20
|
-
/**
|
|
21
|
-
* Create a default configuration file
|
|
22
|
-
*/
|
|
23
8
|
static createDefaultConfig(): VibeGuardConfig;
|
|
24
|
-
/**
|
|
25
|
-
* Generate a sample configuration file content
|
|
26
|
-
*/
|
|
27
9
|
static generateSampleConfig(): string;
|
|
28
10
|
}
|
|
29
11
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;IAGF,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;IAkBvD,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBzD,OAAO,CAAC,MAAM,CAAC,cAAc;IA0D7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW;IAU1F,MAAM,CAAC,mBAAmB,IAAI,eAAe;IAqB7C,MAAM,CAAC,oBAAoB,IAAI,MAAM;CAwCtC"}
|
package/dist/config.js
CHANGED
|
@@ -37,9 +37,7 @@ exports.ConfigLoader = void 0;
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
class ConfigLoader {
|
|
40
|
-
|
|
41
|
-
* Load configuration from the nearest vibe-guard.json file
|
|
42
|
-
*/
|
|
40
|
+
// Loads the config file from the project path
|
|
43
41
|
static loadConfig(projectPath) {
|
|
44
42
|
const configPath = this.findConfigFile(projectPath);
|
|
45
43
|
if (!configPath) {
|
|
@@ -48,7 +46,6 @@ class ConfigLoader {
|
|
|
48
46
|
try {
|
|
49
47
|
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
50
48
|
const config = JSON.parse(configContent);
|
|
51
|
-
// Validate and normalize config
|
|
52
49
|
return this.validateConfig(config);
|
|
53
50
|
}
|
|
54
51
|
catch (error) {
|
|
@@ -56,9 +53,7 @@ class ConfigLoader {
|
|
|
56
53
|
return {};
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
|
-
|
|
60
|
-
* Find the nearest configuration file in the project hierarchy
|
|
61
|
-
*/
|
|
56
|
+
// Finds the config file from the project path
|
|
62
57
|
static findConfigFile(projectPath) {
|
|
63
58
|
let currentPath = path.resolve(projectPath);
|
|
64
59
|
while (currentPath !== path.dirname(currentPath)) {
|
|
@@ -72,45 +67,36 @@ class ConfigLoader {
|
|
|
72
67
|
}
|
|
73
68
|
return null;
|
|
74
69
|
}
|
|
75
|
-
|
|
76
|
-
* Validate and normalize configuration
|
|
77
|
-
*/
|
|
70
|
+
// Validates the config file
|
|
78
71
|
static validateConfig(config) {
|
|
79
72
|
const validated = {};
|
|
80
|
-
// Validate output format
|
|
81
73
|
if (config.outputFormat && ['table', 'json', 'sarif', 'html'].includes(config.outputFormat)) {
|
|
82
74
|
validated.outputFormat = config.outputFormat;
|
|
83
75
|
}
|
|
84
|
-
// Validate severity
|
|
85
76
|
if (config.severity && ['critical', 'high', 'medium', 'low'].includes(config.severity)) {
|
|
86
77
|
validated.severity = config.severity;
|
|
87
78
|
}
|
|
88
|
-
// Validate arrays
|
|
89
79
|
if (Array.isArray(config.exclude)) {
|
|
90
80
|
validated.exclude = config.exclude.filter((item) => typeof item === 'string');
|
|
91
81
|
}
|
|
92
82
|
if (Array.isArray(config.include)) {
|
|
93
83
|
validated.include = config.include.filter((item) => typeof item === 'string');
|
|
94
84
|
}
|
|
95
|
-
// Validate strings
|
|
96
85
|
if (typeof config.outputFile === 'string') {
|
|
97
86
|
validated.outputFile = config.outputFile;
|
|
98
87
|
}
|
|
99
88
|
if (typeof config.maxFileSize === 'string') {
|
|
100
89
|
validated.maxFileSize = config.maxFileSize;
|
|
101
90
|
}
|
|
102
|
-
// Validate booleans
|
|
103
91
|
if (typeof config.verbose === 'boolean') {
|
|
104
92
|
validated.verbose = config.verbose;
|
|
105
93
|
}
|
|
106
94
|
if (typeof config.parallel === 'boolean') {
|
|
107
95
|
validated.parallel = config.parallel;
|
|
108
96
|
}
|
|
109
|
-
// Validate numbers
|
|
110
97
|
if (typeof config.maxWorkers === 'number' && config.maxWorkers > 0) {
|
|
111
98
|
validated.maxWorkers = config.maxWorkers;
|
|
112
99
|
}
|
|
113
|
-
// Validate rules configuration
|
|
114
100
|
if (config.rules && typeof config.rules === 'object') {
|
|
115
101
|
validated.rules = {};
|
|
116
102
|
for (const [ruleName, ruleConfig] of Object.entries(config.rules)) {
|
|
@@ -127,9 +113,7 @@ class ConfigLoader {
|
|
|
127
113
|
}
|
|
128
114
|
return validated;
|
|
129
115
|
}
|
|
130
|
-
|
|
131
|
-
* Merge configuration with CLI options (CLI takes precedence)
|
|
132
|
-
*/
|
|
116
|
+
// Merges the config file with the CLI options
|
|
133
117
|
static mergeConfig(config, cliOptions) {
|
|
134
118
|
return {
|
|
135
119
|
target: cliOptions.target || '.',
|
|
@@ -139,9 +123,6 @@ class ConfigLoader {
|
|
|
139
123
|
include: cliOptions.include || config.include || []
|
|
140
124
|
};
|
|
141
125
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Create a default configuration file
|
|
144
|
-
*/
|
|
145
126
|
static createDefaultConfig() {
|
|
146
127
|
return {
|
|
147
128
|
exclude: [
|
|
@@ -161,9 +142,7 @@ class ConfigLoader {
|
|
|
161
142
|
maxWorkers: 4
|
|
162
143
|
};
|
|
163
144
|
}
|
|
164
|
-
|
|
165
|
-
* Generate a sample configuration file content
|
|
166
|
-
*/
|
|
145
|
+
// Generates a sample config file
|
|
167
146
|
static generateSampleConfig() {
|
|
168
147
|
const sampleConfig = {
|
|
169
148
|
exclude: [
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B,MAAa,YAAY;IAOvB
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,13 +10,7 @@ export declare class VibeGuard {
|
|
|
10
10
|
getRules(): BaseRule[];
|
|
11
11
|
getRuleByName(name: string): BaseRule | undefined;
|
|
12
12
|
getVersion(): string;
|
|
13
|
-
/**
|
|
14
|
-
* Generate a sample configuration file
|
|
15
|
-
*/
|
|
16
13
|
generateConfig(): string;
|
|
17
|
-
/**
|
|
18
|
-
* Create a default configuration file in the current directory
|
|
19
|
-
*/
|
|
20
14
|
createConfigFile(): void;
|
|
21
15
|
}
|
|
22
16
|
export * from './types';
|
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;AAyB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA+BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA4CrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAgB,GAAG,MAAM;IAe1F,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,cAAc,IAAI,MAAM;IAIxB,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
|
@@ -63,7 +63,9 @@ const insecure_session_management_1 = require("./rules/insecure-session-manageme
|
|
|
63
63
|
const insecure_error_handling_1 = require("./rules/insecure-error-handling");
|
|
64
64
|
const insecure_configuration_1 = require("./rules/insecure-configuration");
|
|
65
65
|
const version_1 = require("./types/version");
|
|
66
|
+
// Main class for the VibeGuard application
|
|
66
67
|
class VibeGuard {
|
|
68
|
+
// Constructor for the VibeGuard class
|
|
67
69
|
constructor() {
|
|
68
70
|
this.rules = [
|
|
69
71
|
new exposed_secrets_1.ExposedSecretsRule(),
|
|
@@ -90,10 +92,9 @@ class VibeGuard {
|
|
|
90
92
|
this.scanner = new scanner_1.FileScanner();
|
|
91
93
|
this.reporter = new reporter_1.Reporter();
|
|
92
94
|
}
|
|
95
|
+
// Scans the target path for security issues
|
|
93
96
|
async scan(options) {
|
|
94
|
-
// Load configuration from vibe-guard.json
|
|
95
97
|
const config = config_1.ConfigLoader.loadConfig(options.target);
|
|
96
|
-
// Merge config with CLI options (CLI takes precedence)
|
|
97
98
|
const mergedOptions = config_1.ConfigLoader.mergeConfig(config, options);
|
|
98
99
|
const targetPath = path.resolve(mergedOptions.target);
|
|
99
100
|
if (mergedOptions.verbose) {
|
|
@@ -131,6 +132,7 @@ class VibeGuard {
|
|
|
131
132
|
throw new Error(`Target path is neither a file nor a directory: ${targetPath}`);
|
|
132
133
|
}
|
|
133
134
|
}
|
|
135
|
+
// Formats the scan results
|
|
134
136
|
formatResults(result, format = 'table') {
|
|
135
137
|
switch (format) {
|
|
136
138
|
case 'json':
|
|
@@ -144,6 +146,7 @@ class VibeGuard {
|
|
|
144
146
|
return this.reporter.formatTable(result);
|
|
145
147
|
}
|
|
146
148
|
}
|
|
149
|
+
// Scans and formats the results
|
|
147
150
|
async scanAndFormat(options) {
|
|
148
151
|
const result = await this.scan(options);
|
|
149
152
|
return this.formatResults(result, options.format);
|
|
@@ -157,15 +160,9 @@ class VibeGuard {
|
|
|
157
160
|
getVersion() {
|
|
158
161
|
return version_1.VERSION;
|
|
159
162
|
}
|
|
160
|
-
/**
|
|
161
|
-
* Generate a sample configuration file
|
|
162
|
-
*/
|
|
163
163
|
generateConfig() {
|
|
164
164
|
return config_1.ConfigLoader.generateSampleConfig();
|
|
165
165
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Create a default configuration file in the current directory
|
|
168
|
-
*/
|
|
169
166
|
createConfigFile() {
|
|
170
167
|
const configPath = path.join(process.cwd(), 'vibe-guard.json');
|
|
171
168
|
if (fs.existsSync(configPath)) {
|
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,qCAAwC;AACxC,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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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;
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAGnE,qBAAa,QAAQ;IAEnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA+BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAKtC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAsCvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA+OtC,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAyBxB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;CASjD"}
|