@empline/preflight 1.1.48 → 1.1.49
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/dist/bin/init.d.ts +18 -0
- package/dist/bin/init.d.ts.map +1 -0
- package/dist/bin/init.js +369 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/preflight.js +201 -0
- package/dist/bin/preflight.js.map +1 -1
- package/dist/bin/preinstall.js +7 -0
- package/dist/bin/preinstall.js.map +1 -1
- package/dist/checks/react/vercel-react-best-practices.d.ts +38 -0
- package/dist/checks/react/vercel-react-best-practices.d.ts.map +1 -0
- package/dist/checks/react/vercel-react-best-practices.js +547 -0
- package/dist/checks/react/vercel-react-best-practices.js.map +1 -0
- package/dist/checks/system/preflight-actionable-output.d.ts +18 -0
- package/dist/checks/system/preflight-actionable-output.d.ts.map +1 -0
- package/dist/checks/system/preflight-actionable-output.js +216 -0
- package/dist/checks/system/preflight-actionable-output.js.map +1 -0
- package/dist/checks/ui/web-design-guidelines.d.ts +37 -0
- package/dist/checks/ui/web-design-guidelines.d.ts.map +1 -0
- package/dist/checks/ui/web-design-guidelines.js +545 -0
- package/dist/checks/ui/web-design-guidelines.js.map +1 -0
- package/dist/lib/activation.d.ts +18 -0
- package/dist/lib/activation.d.ts.map +1 -0
- package/dist/lib/activation.js +283 -0
- package/dist/lib/activation.js.map +1 -0
- package/dist/lib/ai-commands.d.ts +72 -0
- package/dist/lib/ai-commands.d.ts.map +1 -0
- package/dist/lib/ai-commands.js +393 -0
- package/dist/lib/ai-commands.js.map +1 -0
- package/dist/runner.d.ts +18 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +66 -8
- package/dist/runner.js.map +1 -1
- package/dist/utils/console-chars.d.ts +6 -6
- package/package.json +2 -1
- package/templates/domain-specific/trading-card-system/missing-page-layout.ts +377 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AI-Friendly Commands for Preflight
|
|
4
|
+
*
|
|
5
|
+
* Provides commands optimized for AI consumption:
|
|
6
|
+
* - --list-categories: List all available categories
|
|
7
|
+
* - --list-checks: List all available checks
|
|
8
|
+
* - --check <name>: Run a single check by name
|
|
9
|
+
* - --explain <name>: Get detailed info about a check
|
|
10
|
+
* - --recheck <name>: Re-run a single check for verification
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.discoverAllChecks = discoverAllChecks;
|
|
47
|
+
exports.groupByCategory = groupByCategory;
|
|
48
|
+
exports.findCheck = findCheck;
|
|
49
|
+
exports.findChecksByCategory = findChecksByCategory;
|
|
50
|
+
exports.formatCheckListHuman = formatCheckListHuman;
|
|
51
|
+
exports.formatCheckListAI = formatCheckListAI;
|
|
52
|
+
exports.formatCategoryListHuman = formatCategoryListHuman;
|
|
53
|
+
exports.formatCategoryListAI = formatCategoryListAI;
|
|
54
|
+
exports.formatExplainHuman = formatExplainHuman;
|
|
55
|
+
exports.formatExplainAI = formatExplainAI;
|
|
56
|
+
const path = __importStar(require("node:path"));
|
|
57
|
+
const fs = __importStar(require("node:fs"));
|
|
58
|
+
const glob_1 = require("glob");
|
|
59
|
+
/**
|
|
60
|
+
* Parse check metadata from a compiled JS file
|
|
61
|
+
*/
|
|
62
|
+
function parseCheckMetadata(filePath) {
|
|
63
|
+
try {
|
|
64
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
65
|
+
const extractExport = (key) => {
|
|
66
|
+
const patterns = [
|
|
67
|
+
new RegExp(`exports\\.${key}\\s*=\\s*["']([^"']+)["']`),
|
|
68
|
+
new RegExp(`module\\.exports\\.${key}\\s*=\\s*["']([^"']+)["']`),
|
|
69
|
+
];
|
|
70
|
+
for (const pattern of patterns) {
|
|
71
|
+
const match = content.match(pattern);
|
|
72
|
+
if (match)
|
|
73
|
+
return match[1];
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
};
|
|
77
|
+
const extractBoolExport = (key) => {
|
|
78
|
+
const patterns = [
|
|
79
|
+
new RegExp(`exports\\.${key}\\s*=\\s*(true|false)`),
|
|
80
|
+
new RegExp(`module\\.exports\\.${key}\\s*=\\s*(true|false)`),
|
|
81
|
+
];
|
|
82
|
+
for (const pattern of patterns) {
|
|
83
|
+
const match = content.match(pattern);
|
|
84
|
+
if (match)
|
|
85
|
+
return match[1] === "true";
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
};
|
|
89
|
+
const extractArrayExport = (key) => {
|
|
90
|
+
const patterns = [
|
|
91
|
+
new RegExp(`exports\\.${key}\\s*=\\s*\\[([^\\]]*?)\\]`),
|
|
92
|
+
new RegExp(`module\\.exports\\.${key}\\s*=\\s*\\[([^\\]]*?)\\]`),
|
|
93
|
+
];
|
|
94
|
+
for (const pattern of patterns) {
|
|
95
|
+
const match = content.match(pattern);
|
|
96
|
+
if (match) {
|
|
97
|
+
const arrayContent = match[1].trim();
|
|
98
|
+
if (!arrayContent)
|
|
99
|
+
return [];
|
|
100
|
+
const strings = arrayContent.match(/["']([^"']+)["']/g);
|
|
101
|
+
if (strings) {
|
|
102
|
+
return strings.map(s => s.replace(/["']/g, ""));
|
|
103
|
+
}
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
};
|
|
109
|
+
const extractNumberExport = (key) => {
|
|
110
|
+
const patterns = [
|
|
111
|
+
new RegExp(`exports\\.${key}\\s*=\\s*(\\d+)`),
|
|
112
|
+
new RegExp(`module\\.exports\\.${key}\\s*=\\s*(\\d+)`),
|
|
113
|
+
];
|
|
114
|
+
for (const pattern of patterns) {
|
|
115
|
+
const match = content.match(pattern);
|
|
116
|
+
if (match)
|
|
117
|
+
return parseInt(match[1], 10);
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
};
|
|
121
|
+
const id = extractExport("id");
|
|
122
|
+
const name = extractExport("name");
|
|
123
|
+
if (!id || !name)
|
|
124
|
+
return null;
|
|
125
|
+
return {
|
|
126
|
+
id,
|
|
127
|
+
name,
|
|
128
|
+
category: extractExport("category") || path.dirname(filePath).split(path.sep).pop() || "general",
|
|
129
|
+
blocking: extractBoolExport("blocking") ?? false,
|
|
130
|
+
description: extractExport("description") || "",
|
|
131
|
+
source: "core",
|
|
132
|
+
filePath,
|
|
133
|
+
requires: extractArrayExport("requires"),
|
|
134
|
+
priority: extractNumberExport("priority"),
|
|
135
|
+
complexity: extractExport("complexity"),
|
|
136
|
+
estimatedFixTime: extractExport("estimatedFixTime"),
|
|
137
|
+
commonFixes: extractArrayExport("commonFixes"),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Discover all available checks
|
|
146
|
+
*/
|
|
147
|
+
async function discoverAllChecks(checksRoot, appRoot) {
|
|
148
|
+
const checks = [];
|
|
149
|
+
// Discover core checks
|
|
150
|
+
const coreChecksDir = path.join(checksRoot, "checks");
|
|
151
|
+
if (fs.existsSync(coreChecksDir)) {
|
|
152
|
+
const coreFiles = await (0, glob_1.glob)("**/*.js", {
|
|
153
|
+
cwd: coreChecksDir,
|
|
154
|
+
ignore: ["**/*.test.js", "**/*.spec.js"],
|
|
155
|
+
nodir: true,
|
|
156
|
+
});
|
|
157
|
+
for (const file of coreFiles) {
|
|
158
|
+
const filePath = path.join(coreChecksDir, file);
|
|
159
|
+
const metadata = parseCheckMetadata(filePath);
|
|
160
|
+
if (metadata) {
|
|
161
|
+
metadata.source = "core";
|
|
162
|
+
checks.push(metadata);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Discover app-specific checks
|
|
167
|
+
if (appRoot) {
|
|
168
|
+
const appChecksDir = path.join(appRoot, "scripts", "active", "preflights");
|
|
169
|
+
if (fs.existsSync(appChecksDir)) {
|
|
170
|
+
const appFiles = await (0, glob_1.glob)("**/*.{ts,js}", {
|
|
171
|
+
cwd: appChecksDir,
|
|
172
|
+
ignore: ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"],
|
|
173
|
+
nodir: true,
|
|
174
|
+
});
|
|
175
|
+
for (const file of appFiles) {
|
|
176
|
+
const filePath = path.join(appChecksDir, file);
|
|
177
|
+
const metadata = parseCheckMetadata(filePath);
|
|
178
|
+
if (metadata) {
|
|
179
|
+
metadata.source = "app";
|
|
180
|
+
checks.push(metadata);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return checks;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Group checks by category
|
|
189
|
+
*/
|
|
190
|
+
function groupByCategory(checks) {
|
|
191
|
+
const categoryMap = new Map();
|
|
192
|
+
for (const check of checks) {
|
|
193
|
+
const cat = check.category || "general";
|
|
194
|
+
if (!categoryMap.has(cat)) {
|
|
195
|
+
categoryMap.set(cat, []);
|
|
196
|
+
}
|
|
197
|
+
categoryMap.get(cat).push(check);
|
|
198
|
+
}
|
|
199
|
+
return Array.from(categoryMap.entries())
|
|
200
|
+
.map(([name, categoryChecks]) => ({
|
|
201
|
+
name,
|
|
202
|
+
checkCount: categoryChecks.length,
|
|
203
|
+
blockingCount: categoryChecks.filter(c => c.blocking).length,
|
|
204
|
+
checks: categoryChecks.map(c => c.name),
|
|
205
|
+
}))
|
|
206
|
+
.sort((a, b) => b.checkCount - a.checkCount);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Find a check by name (fuzzy match)
|
|
210
|
+
*/
|
|
211
|
+
function findCheck(checks, searchName) {
|
|
212
|
+
const searchLower = searchName.toLowerCase().trim();
|
|
213
|
+
// Exact match first
|
|
214
|
+
const exact = checks.find(c => c.name.toLowerCase() === searchLower);
|
|
215
|
+
if (exact)
|
|
216
|
+
return exact;
|
|
217
|
+
// Exact ID match
|
|
218
|
+
const idMatch = checks.find(c => c.id.toLowerCase() === searchLower);
|
|
219
|
+
if (idMatch)
|
|
220
|
+
return idMatch;
|
|
221
|
+
// Partial name match
|
|
222
|
+
const partial = checks.find(c => c.name.toLowerCase().includes(searchLower));
|
|
223
|
+
if (partial)
|
|
224
|
+
return partial;
|
|
225
|
+
// Partial ID match
|
|
226
|
+
const partialId = checks.find(c => c.id.toLowerCase().includes(searchLower));
|
|
227
|
+
if (partialId)
|
|
228
|
+
return partialId;
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Find checks by category
|
|
233
|
+
*/
|
|
234
|
+
function findChecksByCategory(checks, category) {
|
|
235
|
+
const catLower = category.toLowerCase().trim();
|
|
236
|
+
return checks.filter(c => c.category.toLowerCase() === catLower);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Format check list for human output
|
|
240
|
+
*/
|
|
241
|
+
function formatCheckListHuman(checks) {
|
|
242
|
+
const lines = [];
|
|
243
|
+
const categories = groupByCategory(checks);
|
|
244
|
+
for (const cat of categories) {
|
|
245
|
+
lines.push(`\n📁 ${cat.name.toUpperCase()} (${cat.checkCount} checks, ${cat.blockingCount} blocking)`);
|
|
246
|
+
lines.push("─".repeat(60));
|
|
247
|
+
const categoryChecks = checks.filter(c => c.category === cat.name);
|
|
248
|
+
for (const check of categoryChecks) {
|
|
249
|
+
const blocking = check.blocking ? "🔴" : "🟢";
|
|
250
|
+
const source = check.source === "app" ? " [app]" : "";
|
|
251
|
+
lines.push(` ${blocking} ${check.name}${source}`);
|
|
252
|
+
if (check.description) {
|
|
253
|
+
lines.push(` ${check.description}`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return lines.join("\n");
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Format check list for AI/JSON output
|
|
261
|
+
*/
|
|
262
|
+
function formatCheckListAI(checks) {
|
|
263
|
+
const categories = groupByCategory(checks);
|
|
264
|
+
return {
|
|
265
|
+
totalChecks: checks.length,
|
|
266
|
+
totalBlocking: checks.filter(c => c.blocking).length,
|
|
267
|
+
categories: categories.map(cat => ({
|
|
268
|
+
name: cat.name,
|
|
269
|
+
checkCount: cat.checkCount,
|
|
270
|
+
blockingCount: cat.blockingCount,
|
|
271
|
+
})),
|
|
272
|
+
checks: checks.map(c => ({
|
|
273
|
+
id: c.id,
|
|
274
|
+
name: c.name,
|
|
275
|
+
category: c.category,
|
|
276
|
+
blocking: c.blocking,
|
|
277
|
+
source: c.source,
|
|
278
|
+
description: c.description || undefined,
|
|
279
|
+
requires: c.requires?.length ? c.requires : undefined,
|
|
280
|
+
priority: c.priority,
|
|
281
|
+
complexity: c.complexity,
|
|
282
|
+
})),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Format category list for human output
|
|
287
|
+
*/
|
|
288
|
+
function formatCategoryListHuman(categories) {
|
|
289
|
+
const lines = [
|
|
290
|
+
"",
|
|
291
|
+
"📋 AVAILABLE CATEGORIES",
|
|
292
|
+
"═".repeat(60),
|
|
293
|
+
"",
|
|
294
|
+
];
|
|
295
|
+
for (const cat of categories) {
|
|
296
|
+
const blockingPct = cat.checkCount > 0
|
|
297
|
+
? Math.round((cat.blockingCount / cat.checkCount) * 100)
|
|
298
|
+
: 0;
|
|
299
|
+
lines.push(` 📁 ${cat.name.padEnd(25)} ${String(cat.checkCount).padStart(3)} checks (${blockingPct}% blocking)`);
|
|
300
|
+
}
|
|
301
|
+
lines.push("");
|
|
302
|
+
lines.push("Usage: npx preflight --category <name> [--category <name2>]");
|
|
303
|
+
lines.push("");
|
|
304
|
+
return lines.join("\n");
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Format category list for AI/JSON output
|
|
308
|
+
*/
|
|
309
|
+
function formatCategoryListAI(categories) {
|
|
310
|
+
return {
|
|
311
|
+
totalCategories: categories.length,
|
|
312
|
+
categories: categories.map(cat => ({
|
|
313
|
+
name: cat.name,
|
|
314
|
+
checkCount: cat.checkCount,
|
|
315
|
+
blockingCount: cat.blockingCount,
|
|
316
|
+
checks: cat.checks,
|
|
317
|
+
})),
|
|
318
|
+
usage: {
|
|
319
|
+
runSingleCategory: "npx preflight --category <name>",
|
|
320
|
+
runMultipleCategories: "npx preflight --category <name1> --category <name2>",
|
|
321
|
+
runSingleCheck: "npx preflight --check '<check name>'",
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Format check explanation for human output
|
|
327
|
+
*/
|
|
328
|
+
function formatExplainHuman(check) {
|
|
329
|
+
const lines = [
|
|
330
|
+
"",
|
|
331
|
+
`📋 CHECK: ${check.name}`,
|
|
332
|
+
"═".repeat(60),
|
|
333
|
+
"",
|
|
334
|
+
`ID: ${check.id}`,
|
|
335
|
+
`Category: ${check.category}`,
|
|
336
|
+
`Blocking: ${check.blocking ? "Yes (deployment blocked if fails)" : "No (warning only)"}`,
|
|
337
|
+
`Source: ${check.source === "app" ? "App-specific" : "Core"}`,
|
|
338
|
+
`File: ${check.filePath}`,
|
|
339
|
+
];
|
|
340
|
+
if (check.description) {
|
|
341
|
+
lines.push(`Description: ${check.description}`);
|
|
342
|
+
}
|
|
343
|
+
if (check.requires?.length) {
|
|
344
|
+
lines.push(`Requires: ${check.requires.join(", ")}`);
|
|
345
|
+
}
|
|
346
|
+
if (check.priority) {
|
|
347
|
+
lines.push(`Priority: ${check.priority} (lower = fix first)`);
|
|
348
|
+
}
|
|
349
|
+
if (check.complexity) {
|
|
350
|
+
lines.push(`Complexity: ${check.complexity}`);
|
|
351
|
+
}
|
|
352
|
+
if (check.estimatedFixTime) {
|
|
353
|
+
lines.push(`Est. Fix: ${check.estimatedFixTime}`);
|
|
354
|
+
}
|
|
355
|
+
if (check.commonFixes?.length) {
|
|
356
|
+
lines.push("");
|
|
357
|
+
lines.push("Common Fixes:");
|
|
358
|
+
for (const fix of check.commonFixes) {
|
|
359
|
+
lines.push(` • ${fix}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
lines.push("");
|
|
363
|
+
lines.push("To run this check:");
|
|
364
|
+
lines.push(` npx preflight --check "${check.name}"`);
|
|
365
|
+
lines.push("");
|
|
366
|
+
return lines.join("\n");
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Format check explanation for AI/JSON output
|
|
370
|
+
*/
|
|
371
|
+
function formatExplainAI(check) {
|
|
372
|
+
return {
|
|
373
|
+
check: {
|
|
374
|
+
id: check.id,
|
|
375
|
+
name: check.name,
|
|
376
|
+
category: check.category,
|
|
377
|
+
blocking: check.blocking,
|
|
378
|
+
source: check.source,
|
|
379
|
+
filePath: check.filePath,
|
|
380
|
+
description: check.description || null,
|
|
381
|
+
requires: check.requires || [],
|
|
382
|
+
priority: check.priority || null,
|
|
383
|
+
complexity: check.complexity || null,
|
|
384
|
+
estimatedFixTime: check.estimatedFixTime || null,
|
|
385
|
+
commonFixes: check.commonFixes || [],
|
|
386
|
+
},
|
|
387
|
+
commands: {
|
|
388
|
+
run: `npx preflight --check "${check.name}"`,
|
|
389
|
+
runCategory: `npx preflight --category ${check.category}`,
|
|
390
|
+
},
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=ai-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-commands.js","sourceRoot":"","sources":["../../src/lib/ai-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -34,6 +34,24 @@ export declare function runPreflights(options?: {
|
|
|
34
34
|
segmented?: boolean;
|
|
35
35
|
segmentSize?: number;
|
|
36
36
|
}): Promise<PreflightReport>;
|
|
37
|
+
/**
|
|
38
|
+
* Run a single check by file path (for --check and --recheck commands)
|
|
39
|
+
* Returns a result object with pass/fail status and findings
|
|
40
|
+
*/
|
|
41
|
+
export declare function runSingleCheck(filePath: string, checkName: string, blocking: boolean, timeout?: number): Promise<{
|
|
42
|
+
name: string;
|
|
43
|
+
passed: boolean;
|
|
44
|
+
duration: number;
|
|
45
|
+
blocking: boolean;
|
|
46
|
+
findings?: Array<{
|
|
47
|
+
severity: "error" | "warning" | "info";
|
|
48
|
+
message: string;
|
|
49
|
+
file?: string;
|
|
50
|
+
line?: number;
|
|
51
|
+
suggestion?: string;
|
|
52
|
+
}>;
|
|
53
|
+
error?: string;
|
|
54
|
+
}>;
|
|
37
55
|
/**
|
|
38
56
|
* CLI entry point
|
|
39
57
|
*/
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAEL,eAAe,EAGhB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAIL,UAAU,EACX,MAAM,6BAA6B,CAAC;AA0XrC;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmUhC;AAwJD;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAEL,eAAe,EAGhB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAIL,UAAU,EACX,MAAM,6BAA6B,CAAC;AA0XrC;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmUhC;AAwJD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;QACvC,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgDD;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2F1C"}
|
package/dist/runner.js
CHANGED
|
@@ -51,6 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.runPreflights = runPreflights;
|
|
54
|
+
exports.runSingleCheck = runSingleCheck;
|
|
54
55
|
exports.main = main;
|
|
55
56
|
const path = __importStar(require("node:path"));
|
|
56
57
|
const fs = __importStar(require("node:fs"));
|
|
@@ -768,6 +769,56 @@ function printAiOutput(report, failedBlocking) {
|
|
|
768
769
|
process.exitCode = 1;
|
|
769
770
|
}
|
|
770
771
|
}
|
|
772
|
+
/**
|
|
773
|
+
* Run a single check by file path (for --check and --recheck commands)
|
|
774
|
+
* Returns a result object with pass/fail status and findings
|
|
775
|
+
*/
|
|
776
|
+
async function runSingleCheck(filePath, checkName, blocking, timeout = 30000) {
|
|
777
|
+
const startTime = Date.now();
|
|
778
|
+
try {
|
|
779
|
+
// Try in-process execution first
|
|
780
|
+
if ((0, in_process_runner_1.canRunInProcess)(filePath)) {
|
|
781
|
+
const result = await (0, in_process_runner_1.runCheckInProcess)(filePath, timeout);
|
|
782
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
783
|
+
return {
|
|
784
|
+
name: checkName,
|
|
785
|
+
passed: result.passed,
|
|
786
|
+
duration,
|
|
787
|
+
blocking,
|
|
788
|
+
findings: result.findings?.map(f => ({
|
|
789
|
+
severity: f.level || "error",
|
|
790
|
+
message: f.message,
|
|
791
|
+
file: f.file,
|
|
792
|
+
line: f.startLine,
|
|
793
|
+
suggestion: f.suggestion,
|
|
794
|
+
})),
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
// Fallback to subprocess
|
|
798
|
+
const { exitCode, output } = await runCheckAsSubprocess(filePath, timeout);
|
|
799
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
800
|
+
return {
|
|
801
|
+
name: checkName,
|
|
802
|
+
passed: exitCode === 0,
|
|
803
|
+
duration,
|
|
804
|
+
blocking,
|
|
805
|
+
findings: exitCode !== 0 ? [{
|
|
806
|
+
severity: "error",
|
|
807
|
+
message: output.trim().slice(0, 500) || "Check failed",
|
|
808
|
+
}] : undefined,
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
catch (error) {
|
|
812
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
813
|
+
return {
|
|
814
|
+
name: checkName,
|
|
815
|
+
passed: false,
|
|
816
|
+
duration,
|
|
817
|
+
blocking,
|
|
818
|
+
error: error instanceof Error ? error.message : String(error),
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
}
|
|
771
822
|
/**
|
|
772
823
|
* CLI entry point
|
|
773
824
|
*/
|
|
@@ -804,10 +855,21 @@ Environment Variables:
|
|
|
804
855
|
PREFLIGHT_MAX_CONCURRENCY=N Set maximum concurrency cap
|
|
805
856
|
PREFLIGHT_SEQUENTIAL=1 Force sequential execution
|
|
806
857
|
|
|
807
|
-
AI Assistant
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
858
|
+
AI Assistant Commands:
|
|
859
|
+
npx preflight list-categories List all available categories
|
|
860
|
+
npx preflight list-checks List all available checks
|
|
861
|
+
npx preflight list-checks --category=cart List checks in a category
|
|
862
|
+
npx preflight --check "Check Name" Run a single check by name
|
|
863
|
+
npx preflight --recheck "Check Name" Re-verify a single check after fix
|
|
864
|
+
npx preflight explain "Check Name" Get detailed info about a check
|
|
865
|
+
|
|
866
|
+
Add --ai to any command for JSON output (e.g., list-categories --ai)
|
|
867
|
+
|
|
868
|
+
AI Debugging Workflow:
|
|
869
|
+
1. npx preflight --category cart --ai # Run specific category, get JSON
|
|
870
|
+
2. Fix the issues shown
|
|
871
|
+
3. npx preflight --recheck "Check" # Verify single check passes
|
|
872
|
+
4. npx preflight --category cart # Confirm all fixed
|
|
811
873
|
|
|
812
874
|
The --ai flag provides:
|
|
813
875
|
- Compact JSON with only failures (minimal tokens)
|
|
@@ -815,12 +877,8 @@ AI Assistant Usage:
|
|
|
815
877
|
- Suggested fixes when available
|
|
816
878
|
- No per-check progress output (cleaner)
|
|
817
879
|
|
|
818
|
-
For human-readable but concise output, use --errors-only:
|
|
819
|
-
npx preflight --errors-only
|
|
820
|
-
|
|
821
880
|
For segmented output (easier for AI to process in chunks):
|
|
822
881
|
npx preflight --segmented # Groups by category
|
|
823
|
-
npx preflight --segment-size=10 # 10 checks per segment
|
|
824
882
|
npx preflight --segmented --errors-only # Only show failures, grouped
|
|
825
883
|
|
|
826
884
|
Performance & Debugging:
|