vibe-guard 1.1.2 → 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.
Files changed (80) hide show
  1. package/CHANGELOG.md +24 -2
  2. package/README.md +186 -110
  3. package/dist/bin/vibe-guard.js +60 -12
  4. package/dist/bin/vibe-guard.js.map +1 -1
  5. package/dist/config.d.ts +29 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +213 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +9 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +49 -15
  12. package/dist/index.js.map +1 -1
  13. package/dist/reporter.d.ts +7 -0
  14. package/dist/reporter.d.ts.map +1 -1
  15. package/dist/reporter.js +361 -5
  16. package/dist/reporter.js.map +1 -1
  17. package/dist/rules/ai-agent-access-control.d.ts +11 -0
  18. package/dist/rules/ai-agent-access-control.d.ts.map +1 -0
  19. package/dist/rules/ai-agent-access-control.js +65 -0
  20. package/dist/rules/ai-agent-access-control.js.map +1 -0
  21. package/dist/rules/ai-data-leakage-prevention.d.ts +11 -0
  22. package/dist/rules/ai-data-leakage-prevention.d.ts.map +1 -0
  23. package/dist/rules/ai-data-leakage-prevention.js +68 -0
  24. package/dist/rules/ai-data-leakage-prevention.js.map +1 -0
  25. package/dist/rules/ai-generated-code-validation.d.ts +17 -0
  26. package/dist/rules/ai-generated-code-validation.d.ts.map +1 -0
  27. package/dist/rules/ai-generated-code-validation.js +225 -0
  28. package/dist/rules/ai-generated-code-validation.js.map +1 -0
  29. package/dist/rules/broken-access-control.d.ts.map +1 -1
  30. package/dist/rules/broken-access-control.js +1 -10
  31. package/dist/rules/broken-access-control.js.map +1 -1
  32. package/dist/rules/csrf-protection.d.ts +0 -1
  33. package/dist/rules/csrf-protection.d.ts.map +1 -1
  34. package/dist/rules/csrf-protection.js +2 -22
  35. package/dist/rules/csrf-protection.js.map +1 -1
  36. package/dist/rules/exposed-secrets.d.ts.map +1 -1
  37. package/dist/rules/exposed-secrets.js +14 -36
  38. package/dist/rules/exposed-secrets.js.map +1 -1
  39. package/dist/rules/hardcoded-sensitive-data.d.ts.map +1 -1
  40. package/dist/rules/hardcoded-sensitive-data.js +0 -1
  41. package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
  42. package/dist/rules/insecure-configuration.d.ts +5 -5
  43. package/dist/rules/insecure-configuration.d.ts.map +1 -1
  44. package/dist/rules/insecure-configuration.js +71 -87
  45. package/dist/rules/insecure-configuration.js.map +1 -1
  46. package/dist/rules/insecure-dependencies.d.ts.map +1 -1
  47. package/dist/rules/insecure-dependencies.js +29 -48
  48. package/dist/rules/insecure-dependencies.js.map +1 -1
  49. package/dist/rules/insecure-logging.d.ts.map +1 -1
  50. package/dist/rules/insecure-logging.js +0 -1
  51. package/dist/rules/insecure-logging.js.map +1 -1
  52. package/dist/rules/insecure-random-generation.d.ts.map +1 -1
  53. package/dist/rules/insecure-random-generation.js +0 -4
  54. package/dist/rules/insecure-random-generation.js.map +1 -1
  55. package/dist/rules/mcp-server-security.d.ts +11 -0
  56. package/dist/rules/mcp-server-security.d.ts.map +1 -0
  57. package/dist/rules/mcp-server-security.js +96 -0
  58. package/dist/rules/mcp-server-security.js.map +1 -0
  59. package/dist/rules/prompt-injection-detection.d.ts +11 -0
  60. package/dist/rules/prompt-injection-detection.d.ts.map +1 -0
  61. package/dist/rules/prompt-injection-detection.js +69 -0
  62. package/dist/rules/prompt-injection-detection.js.map +1 -0
  63. package/dist/rules/sql-injection.d.ts.map +1 -1
  64. package/dist/rules/sql-injection.js +13 -53
  65. package/dist/rules/sql-injection.js.map +1 -1
  66. package/dist/rules/unvalidated-input.d.ts.map +1 -1
  67. package/dist/rules/unvalidated-input.js +0 -1
  68. package/dist/rules/unvalidated-input.js.map +1 -1
  69. package/dist/rules/xss-detection.d.ts.map +1 -1
  70. package/dist/rules/xss-detection.js +17 -75
  71. package/dist/rules/xss-detection.js.map +1 -1
  72. package/dist/scanner.d.ts.map +1 -1
  73. package/dist/scanner.js +1 -13
  74. package/dist/scanner.js.map +1 -1
  75. package/dist/types/index.d.ts +11 -5
  76. package/dist/types/index.d.ts.map +1 -1
  77. package/dist/types/index.js.map +1 -1
  78. package/dist/types/version.d.ts +1 -1
  79. package/dist/types/version.js +1 -1
  80. package/package.json +17 -12
package/dist/config.js ADDED
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConfigLoader = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class ConfigLoader {
40
+ /**
41
+ * Load configuration from the nearest vibe-guard.json file
42
+ */
43
+ static loadConfig(projectPath) {
44
+ const configPath = this.findConfigFile(projectPath);
45
+ if (!configPath) {
46
+ return {};
47
+ }
48
+ try {
49
+ const configContent = fs.readFileSync(configPath, 'utf-8');
50
+ const config = JSON.parse(configContent);
51
+ // Validate and normalize config
52
+ return this.validateConfig(config);
53
+ }
54
+ catch (error) {
55
+ console.warn(`Warning: Could not load config from ${configPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
56
+ return {};
57
+ }
58
+ }
59
+ /**
60
+ * Find the nearest configuration file in the project hierarchy
61
+ */
62
+ static findConfigFile(projectPath) {
63
+ let currentPath = path.resolve(projectPath);
64
+ while (currentPath !== path.dirname(currentPath)) {
65
+ for (const configFile of this.CONFIG_FILES) {
66
+ const configPath = path.join(currentPath, configFile);
67
+ if (fs.existsSync(configPath)) {
68
+ return configPath;
69
+ }
70
+ }
71
+ currentPath = path.dirname(currentPath);
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Validate and normalize configuration
77
+ */
78
+ static validateConfig(config) {
79
+ const validated = {};
80
+ // Validate output format
81
+ if (config.outputFormat && ['table', 'json', 'sarif', 'html'].includes(config.outputFormat)) {
82
+ validated.outputFormat = config.outputFormat;
83
+ }
84
+ // Validate severity
85
+ if (config.severity && ['critical', 'high', 'medium', 'low'].includes(config.severity)) {
86
+ validated.severity = config.severity;
87
+ }
88
+ // Validate arrays
89
+ if (Array.isArray(config.exclude)) {
90
+ validated.exclude = config.exclude.filter((item) => typeof item === 'string');
91
+ }
92
+ if (Array.isArray(config.include)) {
93
+ validated.include = config.include.filter((item) => typeof item === 'string');
94
+ }
95
+ // Validate strings
96
+ if (typeof config.outputFile === 'string') {
97
+ validated.outputFile = config.outputFile;
98
+ }
99
+ if (typeof config.maxFileSize === 'string') {
100
+ validated.maxFileSize = config.maxFileSize;
101
+ }
102
+ // Validate booleans
103
+ if (typeof config.verbose === 'boolean') {
104
+ validated.verbose = config.verbose;
105
+ }
106
+ if (typeof config.parallel === 'boolean') {
107
+ validated.parallel = config.parallel;
108
+ }
109
+ // Validate numbers
110
+ if (typeof config.maxWorkers === 'number' && config.maxWorkers > 0) {
111
+ validated.maxWorkers = config.maxWorkers;
112
+ }
113
+ // Validate rules configuration
114
+ if (config.rules && typeof config.rules === 'object') {
115
+ validated.rules = {};
116
+ for (const [ruleName, ruleConfig] of Object.entries(config.rules)) {
117
+ if (typeof ruleConfig === 'object' && ruleConfig !== null) {
118
+ const rule = ruleConfig;
119
+ validated.rules[ruleName] = {
120
+ enabled: typeof rule.enabled === 'boolean' ? rule.enabled : true,
121
+ severity: ['critical', 'high', 'medium', 'low'].includes(rule.severity) ? rule.severity : undefined,
122
+ patterns: Array.isArray(rule.patterns) ? rule.patterns.filter((p) => typeof p === 'string') : undefined,
123
+ excludePatterns: Array.isArray(rule.excludePatterns) ? rule.excludePatterns.filter((p) => typeof p === 'string') : undefined
124
+ };
125
+ }
126
+ }
127
+ }
128
+ return validated;
129
+ }
130
+ /**
131
+ * Merge configuration with CLI options (CLI takes precedence)
132
+ */
133
+ static mergeConfig(config, cliOptions) {
134
+ return {
135
+ target: cliOptions.target || '.',
136
+ format: cliOptions.format ?? config.outputFormat ?? 'table',
137
+ verbose: cliOptions.verbose ?? config.verbose ?? false,
138
+ exclude: cliOptions.exclude || config.exclude || [],
139
+ include: cliOptions.include || config.include || []
140
+ };
141
+ }
142
+ /**
143
+ * Create a default configuration file
144
+ */
145
+ static createDefaultConfig() {
146
+ return {
147
+ exclude: [
148
+ 'node_modules/**',
149
+ 'dist/**',
150
+ 'build/**',
151
+ '.git/**',
152
+ 'coverage/**',
153
+ '**/*.min.js',
154
+ '**/*.bundle.js'
155
+ ],
156
+ outputFormat: 'table',
157
+ verbose: false,
158
+ severity: 'low',
159
+ maxFileSize: '5MB',
160
+ parallel: false,
161
+ maxWorkers: 4
162
+ };
163
+ }
164
+ /**
165
+ * Generate a sample configuration file content
166
+ */
167
+ static generateSampleConfig() {
168
+ const sampleConfig = {
169
+ exclude: [
170
+ 'node_modules/**',
171
+ 'dist/**',
172
+ 'build/**',
173
+ '.git/**',
174
+ 'coverage/**',
175
+ '**/*.min.js',
176
+ '**/*.bundle.js'
177
+ ],
178
+ include: [
179
+ 'src/**/*.{js,ts,jsx,tsx}',
180
+ 'lib/**/*.{js,ts}'
181
+ ],
182
+ outputFormat: 'table',
183
+ outputFile: 'security-report.json',
184
+ verbose: false,
185
+ severity: 'low',
186
+ maxFileSize: '5MB',
187
+ parallel: false,
188
+ maxWorkers: 4,
189
+ rules: {
190
+ 'sql-injection': {
191
+ enabled: true,
192
+ severity: 'critical'
193
+ },
194
+ 'xss-detection': {
195
+ enabled: true,
196
+ severity: 'high'
197
+ },
198
+ 'exposed-secrets': {
199
+ enabled: true,
200
+ severity: 'critical'
201
+ }
202
+ }
203
+ };
204
+ return JSON.stringify(sampleConfig, null, 2);
205
+ }
206
+ }
207
+ exports.ConfigLoader = ConfigLoader;
208
+ ConfigLoader.CONFIG_FILES = [
209
+ 'vibe-guard.json',
210
+ '.vibe-guard.json',
211
+ 'vibe-guard.config.json'
212
+ ];
213
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,11 +5,19 @@ export declare class VibeGuard {
5
5
  private rules;
6
6
  constructor();
7
7
  scan(options: ScanOptions): Promise<ScanResult>;
8
- formatResults(result: ScanResult, format?: 'table' | 'json'): string;
8
+ formatResults(result: ScanResult, format?: 'table' | 'json' | 'sarif' | 'html'): string;
9
9
  scanAndFormat(options: ScanOptions): Promise<string>;
10
10
  getRules(): BaseRule[];
11
11
  getRuleByName(name: string): BaseRule | undefined;
12
12
  getVersion(): string;
13
+ /**
14
+ * Generate a sample configuration file
15
+ */
16
+ generateConfig(): string;
17
+ /**
18
+ * Create a default configuration file in the current directory
19
+ */
20
+ createConfigFile(): void;
13
21
  }
14
22
  export * from './types';
15
23
  export * from './rules';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA6BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAgB,GAAG,MAAM;IAUvE,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,QAAQ,IAAI,QAAQ,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,UAAU,IAAI,MAAM;CAGrB;AAGD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAwB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAa;;IA6BpB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA+CrD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAgB,GAAG,MAAM;IAc1F,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,QAAQ,IAAI,QAAQ,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAWzB;AAED,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAe,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -41,6 +41,7 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const scanner_1 = require("./scanner");
43
43
  const reporter_1 = require("./reporter");
44
+ const config_1 = require("./config");
44
45
  const exposed_secrets_1 = require("./rules/exposed-secrets");
45
46
  const missing_authentication_1 = require("./rules/missing-authentication");
46
47
  const open_cors_1 = require("./rules/open-cors");
@@ -90,28 +91,40 @@ class VibeGuard {
90
91
  this.reporter = new reporter_1.Reporter();
91
92
  }
92
93
  async scan(options) {
93
- const targetPath = path.resolve(options.target);
94
- console.log('DEBUG: VibeGuard.scan called with target:', targetPath);
95
- console.log('DEBUG: Number of rules:', this.rules.length);
96
- // Verify target exists
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
+ }
97
103
  if (!fs.existsSync(targetPath)) {
98
104
  throw new Error(`Target path does not exist: ${targetPath}`);
99
105
  }
100
106
  const stats = fs.statSync(targetPath);
101
- console.log('DEBUG: Target is file:', stats.isFile());
102
- console.log('DEBUG: Target is directory:', stats.isDirectory());
107
+ if (mergedOptions.verbose) {
108
+ console.log('Target type:', stats.isFile() ? 'file' : 'directory');
109
+ }
103
110
  if (stats.isFile()) {
104
- console.log('DEBUG: Calling scanner.scanFile...');
111
+ if (mergedOptions.verbose) {
112
+ console.log('Scanning single file...');
113
+ }
105
114
  const result = await this.scanner.scanFile(targetPath, this.rules);
106
- console.log('DEBUG: scanFile result:', {
107
- filesScanned: result.filesScanned,
108
- issuesFound: result.issuesFound,
109
- summary: result.summary
110
- });
115
+ if (mergedOptions.verbose) {
116
+ console.log('Scan completed:', {
117
+ filesScanned: result.filesScanned,
118
+ issuesFound: result.issuesFound,
119
+ summary: result.summary
120
+ });
121
+ }
111
122
  return result;
112
123
  }
113
124
  else if (stats.isDirectory()) {
114
- console.log('DEBUG: Calling scanner.scanDirectory...');
125
+ if (mergedOptions.verbose) {
126
+ console.log('Scanning directory...');
127
+ }
115
128
  return await this.scanner.scanDirectory(targetPath, this.rules);
116
129
  }
117
130
  else {
@@ -122,6 +135,10 @@ class VibeGuard {
122
135
  switch (format) {
123
136
  case 'json':
124
137
  return this.reporter.formatJson(result);
138
+ case 'sarif':
139
+ return this.reporter.formatSarif(result);
140
+ case 'html':
141
+ return this.reporter.formatHtml(result);
125
142
  case 'table':
126
143
  default:
127
144
  return this.reporter.formatTable(result);
@@ -140,15 +157,32 @@ class VibeGuard {
140
157
  getVersion() {
141
158
  return version_1.VERSION;
142
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
+ }
143
179
  }
144
180
  exports.VibeGuard = VibeGuard;
145
- // Export everything for external use
146
181
  __exportStar(require("./types"), exports);
147
182
  __exportStar(require("./rules"), exports);
148
183
  var scanner_2 = require("./scanner");
149
184
  Object.defineProperty(exports, "FileScanner", { enumerable: true, get: function () { return scanner_2.FileScanner; } });
150
185
  var reporter_2 = require("./reporter");
151
186
  Object.defineProperty(exports, "Reporter", { enumerable: true, get: function () { return reporter_2.Reporter; } });
152
- // Default export
153
187
  exports.default = VibeGuard;
154
188
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,13 @@ import { SecurityIssue, ScanResult } from './types';
2
2
  export declare class Reporter {
3
3
  formatTable(result: ScanResult): string;
4
4
  formatJson(result: ScanResult): string;
5
+ formatSarif(result: ScanResult): string;
6
+ formatHtml(result: ScanResult): string;
7
+ private generateSarifRules;
8
+ private generateSarifResults;
9
+ private mapSeverityToSarifLevel;
10
+ private formatHtmlIssue;
11
+ private escapeHtml;
5
12
  private formatSuccess;
6
13
  private formatHeader;
7
14
  private formatSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEnE,qBAAa,QAAQ;IACnB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8BvC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IA8BxB,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"}