@vibecheckai/cli 2.5.7 → 2.7.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/LICENSE +1 -1
- package/dist/bundles/vibecheck-core.js +20 -20
- package/dist/commands/secrets-allowlist.js +4 -4
- package/dist/commands/secrets-allowlist.js.map +1 -1
- package/dist/commands/ship-consolidated.js +193 -193
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/init/ci-generator.d.ts +2 -2
- package/dist/init/hooks-installer.d.ts +2 -2
- package/dist/init/index.d.ts +1 -1
- package/dist/init/index.d.ts.map +1 -1
- package/dist/init/index.js +2 -2
- package/dist/init/index.js.map +1 -1
- package/dist/init/templates.d.ts +6 -285
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +2 -3
- package/dist/init/templates.js.map +1 -1
- package/dist/runtime/json-output.d.ts +2 -2
- package/package.json +11 -3
- package/dist/bundles/guardrail-core.js +0 -25799
- package/dist/bundles/guardrail-security.js +0 -208687
- package/dist/bundles/guardrail-ship.js +0 -2318
- package/dist/commands/autopilot-decision.d.ts +0 -24
- package/dist/commands/autopilot-decision.d.ts.map +0 -1
- package/dist/commands/autopilot-decision.js +0 -304
- package/dist/commands/autopilot-decision.js.map +0 -1
- package/dist/commands/autopilot.d.ts +0 -33
- package/dist/commands/autopilot.d.ts.map +0 -1
- package/dist/commands/autopilot.js +0 -1539
- package/dist/commands/autopilot.js.map +0 -1
- package/dist/commands/context.d.ts +0 -8
- package/dist/commands/context.d.ts.map +0 -1
- package/dist/commands/context.js +0 -340
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/debug.d.ts +0 -78
- package/dist/commands/debug.d.ts.map +0 -1
- package/dist/commands/debug.js +0 -381
- package/dist/commands/debug.js.map +0 -1
- package/dist/commands/preview.d.ts +0 -54
- package/dist/commands/preview.d.ts.map +0 -1
- package/dist/commands/preview.js +0 -352
- package/dist/commands/preview.js.map +0 -1
- package/dist/commands/quality/check.d.ts +0 -31
- package/dist/commands/quality/check.d.ts.map +0 -1
- package/dist/commands/quality/check.js +0 -242
- package/dist/commands/quality/check.js.map +0 -1
- package/dist/commands/quality/index.d.ts +0 -8
- package/dist/commands/quality/index.d.ts.map +0 -1
- package/dist/commands/quality/index.js +0 -14
- package/dist/commands/quality/index.js.map +0 -1
- package/dist/commands/quality/setup-quality.d.ts +0 -23
- package/dist/commands/quality/setup-quality.d.ts.map +0 -1
- package/dist/commands/quality/setup-quality.js +0 -452
- package/dist/commands/quality/setup-quality.js.map +0 -1
- package/dist/commands/quality/tidy.d.ts +0 -41
- package/dist/commands/quality/tidy.d.ts.map +0 -1
- package/dist/commands/quality/tidy.js +0 -466
- package/dist/commands/quality/tidy.js.map +0 -1
- package/dist/commands/quality/utils.d.ts +0 -73
- package/dist/commands/quality/utils.d.ts.map +0 -1
- package/dist/commands/quality/utils.js +0 -158
- package/dist/commands/quality/utils.js.map +0 -1
- package/dist/fix/analytics.d.ts +0 -121
- package/dist/fix/analytics.d.ts.map +0 -1
- package/dist/fix/analytics.js +0 -289
- package/dist/fix/analytics.js.map +0 -1
- package/dist/fix/audit.d.ts +0 -61
- package/dist/fix/audit.d.ts.map +0 -1
- package/dist/fix/audit.js +0 -149
- package/dist/fix/audit.js.map +0 -1
- package/dist/fix/config.d.ts +0 -78
- package/dist/fix/config.d.ts.map +0 -1
- package/dist/fix/config.js +0 -200
- package/dist/fix/config.js.map +0 -1
- package/dist/fix/impact.d.ts +0 -74
- package/dist/fix/impact.d.ts.map +0 -1
- package/dist/fix/impact.js +0 -281
- package/dist/fix/impact.js.map +0 -1
- package/dist/fix/learning.d.ts +0 -109
- package/dist/fix/learning.d.ts.map +0 -1
- package/dist/fix/learning.js +0 -296
- package/dist/fix/learning.js.map +0 -1
- package/dist/fix/metrics.d.ts +0 -106
- package/dist/fix/metrics.d.ts.map +0 -1
- package/dist/fix/metrics.js +0 -138
- package/dist/fix/metrics.js.map +0 -1
- package/dist/fix/parallel.d.ts +0 -69
- package/dist/fix/parallel.d.ts.map +0 -1
- package/dist/fix/parallel.js +0 -203
- package/dist/fix/parallel.js.map +0 -1
- package/dist/fix/report.d.ts +0 -40
- package/dist/fix/report.d.ts.map +0 -1
- package/dist/fix/report.js +0 -212
- package/dist/fix/report.js.map +0 -1
- package/dist/fix/strategy.d.ts +0 -53
- package/dist/fix/strategy.d.ts.map +0 -1
- package/dist/fix/strategy.js +0 -143
- package/dist/fix/strategy.js.map +0 -1
- package/dist/fix/templates.d.ts +0 -58
- package/dist/fix/templates.d.ts.map +0 -1
- package/dist/fix/templates.js +0 -259
- package/dist/fix/templates.js.map +0 -1
- package/dist/fix/testing.d.ts +0 -68
- package/dist/fix/testing.d.ts.map +0 -1
- package/dist/fix/testing.js +0 -245
- package/dist/fix/testing.js.map +0 -1
- package/dist/fix/validation.d.ts +0 -71
- package/dist/fix/validation.d.ts.map +0 -1
- package/dist/fix/validation.js +0 -267
- package/dist/fix/validation.js.map +0 -1
- package/dist/fix/visualization.d.ts +0 -73
- package/dist/fix/visualization.d.ts.map +0 -1
- package/dist/fix/visualization.js +0 -243
- package/dist/fix/visualization.js.map +0 -1
- package/dist/runtime/cli-errors.d.ts +0 -38
- package/dist/runtime/cli-errors.d.ts.map +0 -1
- package/dist/runtime/cli-errors.js +0 -354
- package/dist/runtime/cli-errors.js.map +0 -1
- package/dist/runtime/owner-mode.d.ts +0 -48
- package/dist/runtime/owner-mode.d.ts.map +0 -1
- package/dist/runtime/owner-mode.js +0 -284
- package/dist/runtime/owner-mode.js.map +0 -1
- package/dist/scanner/index.d.ts +0 -8
- package/dist/scanner/index.d.ts.map +0 -1
- package/dist/scanner/index.js +0 -15
- package/dist/scanner/index.js.map +0 -1
- package/dist/scanner/placeholder-detector.d.ts +0 -56
- package/dist/scanner/placeholder-detector.d.ts.map +0 -1
- package/dist/scanner/placeholder-detector.js +0 -220
- package/dist/scanner/placeholder-detector.js.map +0 -1
- package/dist/scanner/route-detector.d.ts +0 -100
- package/dist/scanner/route-detector.d.ts.map +0 -1
- package/dist/scanner/route-detector.js +0 -455
- package/dist/scanner/route-detector.js.map +0 -1
- package/dist/scanner/scoring.d.ts +0 -67
- package/dist/scanner/scoring.d.ts.map +0 -1
- package/dist/scanner/scoring.js +0 -284
- package/dist/scanner/scoring.js.map +0 -1
- package/dist/ship-baseline.d.ts +0 -56
- package/dist/ship-baseline.d.ts.map +0 -1
- package/dist/ship-baseline.js +0 -194
- package/dist/ship-baseline.js.map +0 -1
- package/dist/ship-config.d.ts +0 -91
- package/dist/ship-config.d.ts.map +0 -1
- package/dist/ship-config.js +0 -133
- package/dist/ship-config.js.map +0 -1
- package/dist/ship-data-loader.d.ts +0 -70
- package/dist/ship-data-loader.d.ts.map +0 -1
- package/dist/ship-data-loader.js +0 -301
- package/dist/ship-data-loader.js.map +0 -1
- package/dist/utils/ai-helpers.d.ts +0 -72
- package/dist/utils/ai-helpers.d.ts.map +0 -1
- package/dist/utils/ai-helpers.js +0 -339
- package/dist/utils/ai-helpers.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -34
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -160
- package/dist/utils/validation.js.map +0 -1
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Route Detector for Client-Side Routers
|
|
4
|
-
*
|
|
5
|
-
* Detects routes in various routing frameworks:
|
|
6
|
-
* - Next.js/Remix (file-based routing)
|
|
7
|
-
* - React Router (component-based)
|
|
8
|
-
* - Wouter (lightweight router)
|
|
9
|
-
* - Generic route inference mode
|
|
10
|
-
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
-
var ownKeys = function(o) {
|
|
29
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
-
var ar = [];
|
|
31
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
-
return ar;
|
|
33
|
-
};
|
|
34
|
-
return ownKeys(o);
|
|
35
|
-
};
|
|
36
|
-
return function (mod) {
|
|
37
|
-
if (mod && mod.__esModule) return mod;
|
|
38
|
-
var result = {};
|
|
39
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
-
__setModuleDefault(result, mod);
|
|
41
|
-
return result;
|
|
42
|
-
};
|
|
43
|
-
})();
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.RouteDetector = void 0;
|
|
46
|
-
const fs = __importStar(require("fs"));
|
|
47
|
-
const path = __importStar(require("path"));
|
|
48
|
-
class RouteDetector {
|
|
49
|
-
constructor(config) {
|
|
50
|
-
this.config = config;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Detect routes in the project
|
|
54
|
-
*/
|
|
55
|
-
async detectRoutes() {
|
|
56
|
-
// Try framework-specific detection first
|
|
57
|
-
const frameworkResult = await this.detectFrameworkRoutes();
|
|
58
|
-
if (frameworkResult.routes.length > 0) {
|
|
59
|
-
return frameworkResult;
|
|
60
|
-
}
|
|
61
|
-
// Fall back to generic route inference
|
|
62
|
-
const genericResult = await this.detectGenericRoutes();
|
|
63
|
-
if (genericResult.routes.length > 0) {
|
|
64
|
-
return genericResult;
|
|
65
|
-
}
|
|
66
|
-
// If we still have no routes, check for route hints
|
|
67
|
-
if (this.config.routeHints && this.config.routeHints.length > 0) {
|
|
68
|
-
return {
|
|
69
|
-
routes: this.config.routeHints.map((hint) => ({
|
|
70
|
-
path: hint.path,
|
|
71
|
-
file: hint.file,
|
|
72
|
-
source: 'config',
|
|
73
|
-
})),
|
|
74
|
-
framework: this.config.framework || 'unknown',
|
|
75
|
-
confidence: 'medium',
|
|
76
|
-
message: 'Routes detected from configuration hints',
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
// No routes found - provide helpful message
|
|
80
|
-
return {
|
|
81
|
-
routes: [],
|
|
82
|
-
framework: this.config.framework || 'unknown',
|
|
83
|
-
confidence: 'low',
|
|
84
|
-
message: 'Route system not recognized. Enable route hints in .guardrailrc',
|
|
85
|
-
hints: [
|
|
86
|
-
'Add route hints to .guardrailrc configuration file',
|
|
87
|
-
'Example config: { "routes": [{ "path": "/home", "file": "src/pages/home.tsx" }] }',
|
|
88
|
-
'Or use framework-specific route detection for Next.js, Remix, React Router, or Wouter',
|
|
89
|
-
],
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Detect routes based on detected framework
|
|
94
|
-
*/
|
|
95
|
-
async detectFrameworkRoutes() {
|
|
96
|
-
const framework = this.config.framework?.toLowerCase() || '';
|
|
97
|
-
if (framework.includes('next')) {
|
|
98
|
-
return this.detectNextJSRoutes();
|
|
99
|
-
}
|
|
100
|
-
if (framework.includes('remix')) {
|
|
101
|
-
return this.detectRemixRoutes();
|
|
102
|
-
}
|
|
103
|
-
// React Router or Wouter - detect component-based routes
|
|
104
|
-
const componentResult = await this.detectComponentRoutes();
|
|
105
|
-
if (componentResult.routes.length > 0) {
|
|
106
|
-
return componentResult;
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
routes: [],
|
|
110
|
-
framework: framework || 'unknown',
|
|
111
|
-
confidence: 'low',
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Detect Next.js file-based routes
|
|
116
|
-
*/
|
|
117
|
-
async detectNextJSRoutes() {
|
|
118
|
-
const routes = [];
|
|
119
|
-
const pagesDir = path.join(this.config.projectPath, 'pages');
|
|
120
|
-
const appDir = path.join(this.config.projectPath, 'app');
|
|
121
|
-
if (fs.existsSync(pagesDir)) {
|
|
122
|
-
// Next.js pages router
|
|
123
|
-
const pages = await this.findRouteFiles(pagesDir);
|
|
124
|
-
routes.push(...pages);
|
|
125
|
-
}
|
|
126
|
-
else if (fs.existsSync(appDir)) {
|
|
127
|
-
// Next.js app router
|
|
128
|
-
const pages = await this.findRouteFiles(appDir);
|
|
129
|
-
routes.push(...pages);
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
routes,
|
|
133
|
-
framework: 'nextjs',
|
|
134
|
-
confidence: routes.length > 0 ? 'high' : 'low',
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Detect Remix routes
|
|
139
|
-
*/
|
|
140
|
-
async detectRemixRoutes() {
|
|
141
|
-
const routes = [];
|
|
142
|
-
const routesDir = path.join(this.config.projectPath, 'app', 'routes');
|
|
143
|
-
if (fs.existsSync(routesDir)) {
|
|
144
|
-
const files = await this.findRouteFiles(routesDir);
|
|
145
|
-
routes.push(...files);
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
routes,
|
|
149
|
-
framework: 'remix',
|
|
150
|
-
confidence: routes.length > 0 ? 'high' : 'low',
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Detect component-based routes (React Router, Wouter)
|
|
155
|
-
*/
|
|
156
|
-
async detectComponentRoutes() {
|
|
157
|
-
const routes = [];
|
|
158
|
-
const srcFiles = await this.findSourceFiles(this.config.projectPath);
|
|
159
|
-
// Patterns for React Router
|
|
160
|
-
const reactRouterPatterns = [
|
|
161
|
-
/<Route\s+path=["']([^"']+)["']/gi,
|
|
162
|
-
/path:\s*["']([^"']+)["']/gi,
|
|
163
|
-
/route\(["']([^"']+)["']/gi,
|
|
164
|
-
];
|
|
165
|
-
// Patterns for Wouter
|
|
166
|
-
const wouterPatterns = [
|
|
167
|
-
/<Route\s+path=["']([^"']+)["']/gi,
|
|
168
|
-
/route\(["']([^"']+)["']/gi,
|
|
169
|
-
/useRoute\(["']([^"']+)["']/gi,
|
|
170
|
-
];
|
|
171
|
-
for (const file of srcFiles.slice(0, 100)) {
|
|
172
|
-
// Limit for performance
|
|
173
|
-
try {
|
|
174
|
-
const content = await fs.promises.readFile(file, 'utf-8');
|
|
175
|
-
const lines = content.split('\n');
|
|
176
|
-
// Check for React Router patterns
|
|
177
|
-
for (let i = 0; i < lines.length; i++) {
|
|
178
|
-
const line = lines[i];
|
|
179
|
-
for (const pattern of [...reactRouterPatterns, ...wouterPatterns]) {
|
|
180
|
-
let match;
|
|
181
|
-
pattern.lastIndex = 0;
|
|
182
|
-
while ((match = pattern.exec(line)) !== null) {
|
|
183
|
-
const routePath = match[1];
|
|
184
|
-
if (routePath) {
|
|
185
|
-
routes.push({
|
|
186
|
-
path: routePath,
|
|
187
|
-
file: path.relative(this.config.projectPath, file),
|
|
188
|
-
line: i + 1,
|
|
189
|
-
source: 'component',
|
|
190
|
-
dynamic: routePath.includes(':') || routePath.includes('*'),
|
|
191
|
-
params: this.extractRouteParams(routePath),
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
// Check for route arrays/configs
|
|
198
|
-
const routeArrayMatch = content.match(/routes\s*[:=]\s*\[([\s\S]*?)\]/);
|
|
199
|
-
if (routeArrayMatch) {
|
|
200
|
-
const routeConfigs = this.parseRouteArray(routeArrayMatch[1]);
|
|
201
|
-
for (const routeConfig of routeConfigs) {
|
|
202
|
-
routes.push({
|
|
203
|
-
...routeConfig,
|
|
204
|
-
file: path.relative(this.config.projectPath, file),
|
|
205
|
-
source: 'config',
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
catch (e) {
|
|
211
|
-
// Skip unreadable files
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Determine framework based on imports
|
|
215
|
-
const framework = await this.detectRouterFramework();
|
|
216
|
-
return {
|
|
217
|
-
routes: this.deduplicateRoutes(routes),
|
|
218
|
-
framework: framework || 'react-router',
|
|
219
|
-
confidence: routes.length > 0 ? 'medium' : 'low',
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Generic route inference mode
|
|
224
|
-
*/
|
|
225
|
-
async detectGenericRoutes() {
|
|
226
|
-
const routes = [];
|
|
227
|
-
const srcFiles = await this.findSourceFiles(this.config.projectPath);
|
|
228
|
-
// Look for common route patterns
|
|
229
|
-
const routePatterns = [
|
|
230
|
-
/path\s*[:=]\s*["']([^"']+)["']/gi,
|
|
231
|
-
/route\s*[:=]\s*["']([^"']+)["']/gi,
|
|
232
|
-
/["']([\/][^"']+)["']/g, // Path-like strings starting with /
|
|
233
|
-
];
|
|
234
|
-
for (const file of srcFiles.slice(0, 50)) {
|
|
235
|
-
// Limit for performance
|
|
236
|
-
try {
|
|
237
|
-
const content = await fs.promises.readFile(file, 'utf-8');
|
|
238
|
-
const lines = content.split('\n');
|
|
239
|
-
for (let i = 0; i < lines.length; i++) {
|
|
240
|
-
const line = lines[i];
|
|
241
|
-
for (const pattern of routePatterns) {
|
|
242
|
-
let match;
|
|
243
|
-
pattern.lastIndex = 0;
|
|
244
|
-
while ((match = pattern.exec(line)) !== null) {
|
|
245
|
-
const candidate = match[1];
|
|
246
|
-
if (this.looksLikeRoute(candidate)) {
|
|
247
|
-
routes.push({
|
|
248
|
-
path: candidate,
|
|
249
|
-
file: path.relative(this.config.projectPath, file),
|
|
250
|
-
line: i + 1,
|
|
251
|
-
source: 'inferred',
|
|
252
|
-
dynamic: candidate.includes(':'),
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
catch (e) {
|
|
260
|
-
// Skip unreadable files
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
return {
|
|
264
|
-
routes: this.deduplicateRoutes(routes),
|
|
265
|
-
framework: 'generic',
|
|
266
|
-
confidence: 'low',
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Detect router framework from dependencies
|
|
271
|
-
*/
|
|
272
|
-
async detectRouterFramework() {
|
|
273
|
-
const packageJsonPath = path.join(this.config.projectPath, 'package.json');
|
|
274
|
-
if (!fs.existsSync(packageJsonPath))
|
|
275
|
-
return null;
|
|
276
|
-
try {
|
|
277
|
-
const packageJson = JSON.parse(await fs.promises.readFile(packageJsonPath, 'utf-8'));
|
|
278
|
-
const deps = {
|
|
279
|
-
...packageJson.dependencies,
|
|
280
|
-
...packageJson.devDependencies,
|
|
281
|
-
};
|
|
282
|
-
if (deps.wouter)
|
|
283
|
-
return 'wouter';
|
|
284
|
-
if (deps['react-router'] || deps['react-router-dom']) {
|
|
285
|
-
return 'react-router';
|
|
286
|
-
}
|
|
287
|
-
if (deps.next)
|
|
288
|
-
return 'nextjs';
|
|
289
|
-
if (deps.remix)
|
|
290
|
-
return 'remix';
|
|
291
|
-
}
|
|
292
|
-
catch (e) {
|
|
293
|
-
// Ignore
|
|
294
|
-
}
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Check if a string looks like a route path
|
|
299
|
-
*/
|
|
300
|
-
looksLikeRoute(candidate) {
|
|
301
|
-
// Must start with / and be reasonable length
|
|
302
|
-
if (!candidate.startsWith('/') || candidate.length < 2)
|
|
303
|
-
return false;
|
|
304
|
-
// Common non-route patterns to exclude
|
|
305
|
-
const excludePatterns = [
|
|
306
|
-
/^\/node_modules\//,
|
|
307
|
-
/^\/\./,
|
|
308
|
-
/\.(js|ts|tsx|jsx|json|md|css)$/,
|
|
309
|
-
/^\/src\//,
|
|
310
|
-
/^\/public\//,
|
|
311
|
-
];
|
|
312
|
-
return !excludePatterns.some((pattern) => pattern.test(candidate));
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Extract route parameters from path
|
|
316
|
-
*/
|
|
317
|
-
extractRouteParams(routePath) {
|
|
318
|
-
const params = [];
|
|
319
|
-
const paramPattern = /:(\w+)/g;
|
|
320
|
-
let match;
|
|
321
|
-
while ((match = paramPattern.exec(routePath)) !== null) {
|
|
322
|
-
params.push(match[1]);
|
|
323
|
-
}
|
|
324
|
-
return params;
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Parse route array from config
|
|
328
|
-
*/
|
|
329
|
-
parseRouteArray(content) {
|
|
330
|
-
const routes = [];
|
|
331
|
-
// Simple parsing - look for path: "..." patterns
|
|
332
|
-
const pathPattern = /path\s*:\s*["']([^"']+)["']/gi;
|
|
333
|
-
let match;
|
|
334
|
-
while ((match = pathPattern.exec(content)) !== null) {
|
|
335
|
-
routes.push({
|
|
336
|
-
path: match[1],
|
|
337
|
-
source: 'config',
|
|
338
|
-
dynamic: match[1].includes(':'),
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
return routes;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Find route files in directory (for file-based routing)
|
|
345
|
-
*/
|
|
346
|
-
async findRouteFiles(dir) {
|
|
347
|
-
const routes = [];
|
|
348
|
-
const files = await this.getAllFiles(dir);
|
|
349
|
-
for (const file of files) {
|
|
350
|
-
const relativePath = path.relative(dir, file);
|
|
351
|
-
const routePath = this.filePathToRoute(relativePath);
|
|
352
|
-
if (routePath) {
|
|
353
|
-
routes.push({
|
|
354
|
-
path: routePath,
|
|
355
|
-
file: path.relative(this.config.projectPath, file),
|
|
356
|
-
source: 'file_based',
|
|
357
|
-
dynamic: routePath.includes('[') || routePath.includes(':'),
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
return routes;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Convert file path to route path
|
|
365
|
-
*/
|
|
366
|
-
filePathToRoute(filePath) {
|
|
367
|
-
// Remove extension
|
|
368
|
-
let route = filePath.replace(/\.[^/.]+$/, '');
|
|
369
|
-
// Handle index files
|
|
370
|
-
if (route.endsWith('/index')) {
|
|
371
|
-
route = route.slice(0, -6);
|
|
372
|
-
}
|
|
373
|
-
// Handle Next.js dynamic routes [id].tsx -> /:id
|
|
374
|
-
route = route.replace(/\[([^\]]+)\]/g, ':$1');
|
|
375
|
-
// Must start with /
|
|
376
|
-
if (!route.startsWith('/')) {
|
|
377
|
-
route = '/' + route;
|
|
378
|
-
}
|
|
379
|
-
return route || '/';
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Find all source files in project
|
|
383
|
-
*/
|
|
384
|
-
async findSourceFiles(dir) {
|
|
385
|
-
const files = [];
|
|
386
|
-
const extensions = ['.ts', '.tsx', '.js', '.jsx'];
|
|
387
|
-
try {
|
|
388
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
389
|
-
for (const entry of entries) {
|
|
390
|
-
const fullPath = path.join(dir, entry.name);
|
|
391
|
-
// Skip node_modules, .git, etc.
|
|
392
|
-
if (entry.name.startsWith('.') ||
|
|
393
|
-
entry.name === 'node_modules' ||
|
|
394
|
-
entry.name === 'dist' ||
|
|
395
|
-
entry.name === 'build') {
|
|
396
|
-
continue;
|
|
397
|
-
}
|
|
398
|
-
if (entry.isDirectory()) {
|
|
399
|
-
const subFiles = await this.findSourceFiles(fullPath);
|
|
400
|
-
files.push(...subFiles);
|
|
401
|
-
}
|
|
402
|
-
else if (entry.isFile()) {
|
|
403
|
-
const ext = path.extname(entry.name);
|
|
404
|
-
if (extensions.includes(ext)) {
|
|
405
|
-
files.push(fullPath);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
catch (e) {
|
|
411
|
-
// Skip unreadable directories
|
|
412
|
-
}
|
|
413
|
-
return files;
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Get all files recursively
|
|
417
|
-
*/
|
|
418
|
-
async getAllFiles(dir) {
|
|
419
|
-
const files = [];
|
|
420
|
-
try {
|
|
421
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
422
|
-
for (const entry of entries) {
|
|
423
|
-
const fullPath = path.join(dir, entry.name);
|
|
424
|
-
if (entry.isDirectory()) {
|
|
425
|
-
const subFiles = await this.getAllFiles(fullPath);
|
|
426
|
-
files.push(...subFiles);
|
|
427
|
-
}
|
|
428
|
-
else if (entry.isFile()) {
|
|
429
|
-
files.push(fullPath);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
catch (e) {
|
|
434
|
-
// Skip unreadable directories
|
|
435
|
-
}
|
|
436
|
-
return files;
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Deduplicate routes
|
|
440
|
-
*/
|
|
441
|
-
deduplicateRoutes(routes) {
|
|
442
|
-
const seen = new Set();
|
|
443
|
-
const unique = [];
|
|
444
|
-
for (const route of routes) {
|
|
445
|
-
const key = `${route.path}:${route.file || ''}`;
|
|
446
|
-
if (!seen.has(key)) {
|
|
447
|
-
seen.add(key);
|
|
448
|
-
unique.push(route);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
return unique;
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
exports.RouteDetector = RouteDetector;
|
|
455
|
-
//# sourceMappingURL=route-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-detector.js","sourceRoot":"","sources":["../../src/scanner/route-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Improved Scoring System
|
|
3
|
-
*
|
|
4
|
-
* Separates score components for better transparency:
|
|
5
|
-
* - Integrity score (routes, links, 404s)
|
|
6
|
-
* - Production readiness (placeholders, mocks, TODOs)
|
|
7
|
-
* - Security score (secrets, vulnerabilities)
|
|
8
|
-
*
|
|
9
|
-
* Provides weighted final score that's less punitive
|
|
10
|
-
*/
|
|
11
|
-
export interface ScoreComponent {
|
|
12
|
-
name: string;
|
|
13
|
-
score: number;
|
|
14
|
-
maxScore: number;
|
|
15
|
-
weight: number;
|
|
16
|
-
details: {
|
|
17
|
-
label: string;
|
|
18
|
-
value: number;
|
|
19
|
-
impact: number;
|
|
20
|
-
}[];
|
|
21
|
-
}
|
|
22
|
-
export interface ScoringResult {
|
|
23
|
-
integrity: ScoreComponent;
|
|
24
|
-
productionReadiness: ScoreComponent;
|
|
25
|
-
security: ScoreComponent;
|
|
26
|
-
overall: {
|
|
27
|
-
score: number;
|
|
28
|
-
maxScore: number;
|
|
29
|
-
percentage: number;
|
|
30
|
-
grade: string;
|
|
31
|
-
};
|
|
32
|
-
breakdown: {
|
|
33
|
-
category: string;
|
|
34
|
-
score: number;
|
|
35
|
-
weight: number;
|
|
36
|
-
weightedScore: number;
|
|
37
|
-
}[];
|
|
38
|
-
}
|
|
39
|
-
export interface ScoringInputs {
|
|
40
|
-
integrity?: {
|
|
41
|
-
routes?: number;
|
|
42
|
-
deadLinks?: number;
|
|
43
|
-
orphanRoutes?: number;
|
|
44
|
-
runtime404s?: number;
|
|
45
|
-
unresolvedDynamic?: number;
|
|
46
|
-
};
|
|
47
|
-
productionReadiness?: {
|
|
48
|
-
placeholders?: number;
|
|
49
|
-
mocks?: number;
|
|
50
|
-
todos?: number;
|
|
51
|
-
testData?: number;
|
|
52
|
-
};
|
|
53
|
-
security?: {
|
|
54
|
-
secrets?: number;
|
|
55
|
-
vulnerabilities?: number;
|
|
56
|
-
complianceIssues?: number;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Calculate comprehensive score
|
|
61
|
-
*/
|
|
62
|
-
export declare function calculateScore(inputs: ScoringInputs): ScoringResult;
|
|
63
|
-
/**
|
|
64
|
-
* Format score as text
|
|
65
|
-
*/
|
|
66
|
-
export declare function formatScoreAsText(result: ScoringResult): string;
|
|
67
|
-
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/scanner/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,cAAc,CAAC;IAC1B,mBAAmB,EAAE,cAAc,CAAC;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,mBAAmB,CAAC,EAAE;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AA2ND;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CA+CnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA0D/D"}
|