@empline/preflight 1.1.33 → 1.1.35

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 (37) hide show
  1. package/dist/checks/auth/client-only-protected-pages.d.ts +14 -0
  2. package/dist/checks/auth/client-only-protected-pages.d.ts.map +1 -0
  3. package/dist/checks/auth/client-only-protected-pages.js +182 -0
  4. package/dist/checks/auth/client-only-protected-pages.js.map +1 -0
  5. package/dist/checks/auth/empty-data-instead-of-redirect.d.ts +14 -0
  6. package/dist/checks/auth/empty-data-instead-of-redirect.d.ts.map +1 -0
  7. package/dist/checks/auth/empty-data-instead-of-redirect.js +200 -0
  8. package/dist/checks/auth/empty-data-instead-of-redirect.js.map +1 -0
  9. package/dist/checks/auth/store-id-fallback.d.ts +14 -0
  10. package/dist/checks/auth/store-id-fallback.d.ts.map +1 -0
  11. package/dist/checks/auth/store-id-fallback.js +217 -0
  12. package/dist/checks/auth/store-id-fallback.js.map +1 -0
  13. package/dist/checks/auth/store-page-auth-guard.d.ts +14 -0
  14. package/dist/checks/auth/store-page-auth-guard.d.ts.map +1 -0
  15. package/dist/checks/auth/store-page-auth-guard.js +255 -0
  16. package/dist/checks/auth/store-page-auth-guard.js.map +1 -0
  17. package/dist/checks/data-integrity/api-route-reference-validation.d.ts +14 -0
  18. package/dist/checks/data-integrity/api-route-reference-validation.d.ts.map +1 -0
  19. package/dist/checks/data-integrity/api-route-reference-validation.js +219 -0
  20. package/dist/checks/data-integrity/api-route-reference-validation.js.map +1 -0
  21. package/dist/checks/system/active-preflight-migration-tracker.d.ts +13 -0
  22. package/dist/checks/system/active-preflight-migration-tracker.d.ts.map +1 -0
  23. package/dist/checks/system/active-preflight-migration-tracker.js +244 -0
  24. package/dist/checks/system/active-preflight-migration-tracker.js.map +1 -0
  25. package/dist/checks/ui/filter-option-coverage.d.ts +14 -0
  26. package/dist/checks/ui/filter-option-coverage.d.ts.map +1 -0
  27. package/dist/checks/ui/filter-option-coverage.js +286 -0
  28. package/dist/checks/ui/filter-option-coverage.js.map +1 -0
  29. package/dist/checks/ui/query-param-state-sync.d.ts +14 -0
  30. package/dist/checks/ui/query-param-state-sync.d.ts.map +1 -0
  31. package/dist/checks/ui/query-param-state-sync.js +251 -0
  32. package/dist/checks/ui/query-param-state-sync.js.map +1 -0
  33. package/dist/checks/ui/unimplemented-action-handler.d.ts +14 -0
  34. package/dist/checks/ui/unimplemented-action-handler.d.ts.map +1 -0
  35. package/dist/checks/ui/unimplemented-action-handler.js +230 -0
  36. package/dist/checks/ui/unimplemented-action-handler.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.requires = exports.tags = exports.blocking = exports.category = exports.description = exports.name = exports.id = void 0;
8
+ exports.run = run;
9
+ /**
10
+ * API Route Reference Validation Preflight
11
+ *
12
+ * Detects when UI code references API routes that don't exist. This catches
13
+ * broken functionality before it reaches production.
14
+ *
15
+ * Example problems this catches:
16
+ * - Button opens "/api/store/orders/[id]/label" but that route doesn't exist
17
+ * - Link to "/api/export/csv" but the handler was removed
18
+ * - Fetch to "/api/store/settings" but renamed to "/api/store/preferences"
19
+ *
20
+ * How it works:
21
+ * 1. Scans UI files for API route references (fetch, authFetch, href, etc.)
22
+ * 2. Scans app/api/ directory for actual route.ts files
23
+ * 3. Reports references that don't match any existing route
24
+ */
25
+ const fs_1 = __importDefault(require("fs"));
26
+ const path_1 = __importDefault(require("path"));
27
+ const glob_1 = require("glob");
28
+ const console_chars_1 = require("../../utils/console-chars");
29
+ // METADATA
30
+ exports.id = "data-integrity/api-route-reference-validation";
31
+ exports.name = "API Route Reference Validation";
32
+ exports.description = "Detects UI references to API routes that don't exist";
33
+ exports.category = "data-integrity";
34
+ exports.blocking = true;
35
+ exports.tags = ["api", "routes", "integrity", "dead-code", "broken-links"];
36
+ exports.requires = ["trading-card-system"];
37
+ /**
38
+ * Patterns to find API route references in code
39
+ */
40
+ const API_REFERENCE_PATTERNS = [
41
+ // fetch("/api/...")
42
+ /fetch\s*\(\s*["'`]([/]api\/[^"'`\s]+)/g,
43
+ // authFetch("/api/...")
44
+ /authFetch\s*\(\s*["'`]([/]api\/[^"'`\s]+)/g,
45
+ // href="/api/..."
46
+ /href\s*=\s*["'`]([/]api\/[^"'`\s]+)/g,
47
+ // url: "/api/..."
48
+ /url:\s*["'`]([/]api\/[^"'`\s]+)/g,
49
+ // action="/api/..."
50
+ /action\s*=\s*["'`]([/]api\/[^"'`\s]+)/g,
51
+ // window.open("/api/...")
52
+ /window\.open\s*\(\s*["'`]([/]api\/[^"'`\s]+)/g,
53
+ // API_URL = "/api/..."
54
+ /API_URL\s*=\s*["'`]([/]api\/[^"'`\s]+)/g,
55
+ // endpoint: "/api/..."
56
+ /endpoint:\s*["'`]([/]api\/[^"'`\s]+)/g,
57
+ ];
58
+ /**
59
+ * Convert a route pattern to a regex for matching
60
+ * E.g., "/api/store/orders/[id]/label" -> /^\/api\/store\/orders\/[^/]+\/label$/
61
+ */
62
+ function routeToRegex(routePath) {
63
+ // Escape special regex chars except [ and ]
64
+ let pattern = routePath.replace(/[.*+?^${}()|\\]/g, "\\$&");
65
+ // Convert [...slug] to match any path
66
+ pattern = pattern.replace(/\\\[\.\.\.[^\]]+\\\]/g, ".+");
67
+ // Convert [param] to match single segment
68
+ pattern = pattern.replace(/\\\[[^\]]+\\\]/g, "[^/]+");
69
+ return new RegExp(`^${pattern}$`);
70
+ }
71
+ /**
72
+ * Normalize an API path for comparison
73
+ * - Remove query params
74
+ * - Remove trailing slashes
75
+ * - Handle template literals
76
+ */
77
+ function normalizeApiPath(apiPath) {
78
+ // Remove query params and hash
79
+ let normalized = apiPath.split("?")[0].split("#")[0];
80
+ // Remove trailing slash
81
+ normalized = normalized.replace(/\/$/, "");
82
+ // Handle template literal placeholders like ${id}
83
+ normalized = normalized.replace(/\$\{[^}]+\}/g, "[param]");
84
+ return normalized;
85
+ }
86
+ async function run() {
87
+ console.log(`\n${console_chars_1.emoji.search} API ROUTE REFERENCE VALIDATION`);
88
+ console.log((0, console_chars_1.createDivider)(65, "heavy"));
89
+ const issues = [];
90
+ const apiReferences = [];
91
+ // Step 1: Find all actual API routes
92
+ console.log(`\n${console_chars_1.emoji.file} Scanning API routes...`);
93
+ const apiRouteFiles = await (0, glob_1.glob)("app/api/**/route.ts", { cwd: process.cwd() });
94
+ const existingRoutes = [];
95
+ for (const routeFile of apiRouteFiles) {
96
+ // Convert file path to API route
97
+ // app/api/store/orders/[id]/label/route.ts -> /api/store/orders/[id]/label
98
+ let route = "/" + routeFile
99
+ .replace(/^app\//, "")
100
+ .replace(/\/route\.ts$/, "");
101
+ existingRoutes.push(route);
102
+ }
103
+ console.log(` Found ${existingRoutes.length} API routes`);
104
+ // Step 2: Find all API references in UI code
105
+ console.log(`\n${console_chars_1.emoji.search} Scanning UI code for API references...`);
106
+ const uiFiles = await (0, glob_1.glob)([
107
+ "app/**/*.tsx",
108
+ "app/**/*.ts",
109
+ "components/**/*.tsx",
110
+ "components/**/*.ts",
111
+ "lib/**/*.ts",
112
+ "hooks/**/*.ts",
113
+ ], {
114
+ cwd: process.cwd(),
115
+ ignore: ["app/api/**", "**/*.d.ts", "**/node_modules/**"],
116
+ });
117
+ for (const uiFile of uiFiles) {
118
+ const filePath = path_1.default.join(process.cwd(), uiFile);
119
+ if (!fs_1.default.existsSync(filePath))
120
+ continue;
121
+ const content = fs_1.default.readFileSync(filePath, "utf-8");
122
+ const lines = content.split("\n");
123
+ for (const pattern of API_REFERENCE_PATTERNS) {
124
+ // Reset lastIndex for global regex
125
+ pattern.lastIndex = 0;
126
+ let match;
127
+ while ((match = pattern.exec(content)) !== null) {
128
+ const route = match[1];
129
+ const lineNum = content.substring(0, match.index).split("\n").length;
130
+ const lineContent = lines[lineNum - 1]?.trim() || "";
131
+ apiReferences.push({
132
+ file: uiFile,
133
+ line: lineNum,
134
+ route: route,
135
+ context: lineContent.slice(0, 100),
136
+ });
137
+ }
138
+ }
139
+ }
140
+ console.log(` Found ${apiReferences.length} API references`);
141
+ // Step 3: Check each reference against existing routes
142
+ console.log(`\n${console_chars_1.emoji.check} Validating API references...`);
143
+ for (const ref of apiReferences) {
144
+ const normalizedRef = normalizeApiPath(ref.route);
145
+ // Check if any existing route matches this reference
146
+ const hasMatch = existingRoutes.some((existingRoute) => {
147
+ const routeRegex = routeToRegex(existingRoute);
148
+ return routeRegex.test(normalizedRef);
149
+ });
150
+ if (!hasMatch) {
151
+ // Double-check with normalized versions
152
+ const refWithParam = normalizedRef.replace(/\/[a-zA-Z0-9_-]+(?=\/|$)/g, (segment) => {
153
+ // Check if this could be a dynamic segment
154
+ if (/^\/[a-f0-9-]{20,}$/i.test(segment) || /^\/\d+$/.test(segment)) {
155
+ return "/[param]";
156
+ }
157
+ return segment;
158
+ });
159
+ const stillNoMatch = !existingRoutes.some((existingRoute) => {
160
+ const routeRegex = routeToRegex(existingRoute);
161
+ return routeRegex.test(refWithParam);
162
+ });
163
+ if (stillNoMatch) {
164
+ issues.push({
165
+ file: ref.file,
166
+ line: ref.line,
167
+ route: ref.route,
168
+ description: `References API route that doesn't exist`,
169
+ });
170
+ }
171
+ }
172
+ }
173
+ // Summary
174
+ console.log(`\n${console_chars_1.emoji.chart} Summary:`);
175
+ console.log(` API routes found: ${existingRoutes.length}`);
176
+ console.log(` API references found: ${apiReferences.length}`);
177
+ console.log(` Missing routes: ${issues.length}`);
178
+ if (issues.length === 0) {
179
+ console.log(`\n${console_chars_1.emoji.success} API ROUTE REFERENCE VALIDATION PASSED`);
180
+ console.log(`\nAll API route references point to existing routes.`);
181
+ return { success: true, errors: 0, warnings: 0 };
182
+ }
183
+ // Group issues by route for cleaner output
184
+ const issuesByRoute = new Map();
185
+ for (const issue of issues) {
186
+ const existing = issuesByRoute.get(issue.route) || [];
187
+ existing.push(issue);
188
+ issuesByRoute.set(issue.route, existing);
189
+ }
190
+ console.log(`\n${console_chars_1.emoji.error} Missing API routes:`);
191
+ for (const [route, routeIssues] of issuesByRoute) {
192
+ console.log(`\n ${route}`);
193
+ console.log(` Referenced in ${routeIssues.length} place(s):`);
194
+ for (const issue of routeIssues.slice(0, 3)) {
195
+ console.log(` - ${issue.file}:${issue.line}`);
196
+ }
197
+ if (routeIssues.length > 3) {
198
+ console.log(` ... and ${routeIssues.length - 3} more`);
199
+ }
200
+ }
201
+ console.log(`\n${console_chars_1.emoji.info} To fix missing API routes:`);
202
+ console.log(` 1. Create the missing route.ts file at the expected path`);
203
+ console.log(` 2. Or update the UI to use the correct API path`);
204
+ console.log(` 3. Or remove the dead code if the feature was removed`);
205
+ console.log(`\n${console_chars_1.emoji.error} API ROUTE REFERENCE VALIDATION FAILED`);
206
+ return { success: false, errors: issues.length, warnings: 0 };
207
+ }
208
+ // Allow direct execution
209
+ if (require.main === module) {
210
+ run()
211
+ .then((result) => {
212
+ process.exit(result.success ? 0 : 1);
213
+ })
214
+ .catch((err) => {
215
+ console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
216
+ process.exit(1);
217
+ });
218
+ }
219
+ //# sourceMappingURL=api-route-reference-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-route-reference-validation.js","sourceRoot":"","sources":["../../../src/checks/data-integrity/api-route-reference-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ export declare const id = "system/active-preflight-migration-tracker";
3
+ export declare const name = "Active Preflight Migration Tracker";
4
+ export declare const description = "Detects preflights in active/ that need migration to src/checks/";
5
+ export declare const category = "system";
6
+ export declare const blocking = false;
7
+ export declare const tags: string[];
8
+ export declare function run(): Promise<{
9
+ success: boolean;
10
+ errors: number;
11
+ warnings: number;
12
+ }>;
13
+ //# sourceMappingURL=active-preflight-migration-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-preflight-migration-tracker.d.ts","sourceRoot":"","sources":["../../../src/checks/system/active-preflight-migration-tracker.ts"],"names":[],"mappings":";AAwBA,eAAO,MAAM,EAAE,8CAA8C,CAAC;AAC9D,eAAO,MAAM,IAAI,uCAAuC,CAAC;AACzD,eAAO,MAAM,WAAW,qEAAqE,CAAC;AAC9F,eAAO,MAAM,QAAQ,WAAW,CAAC;AACjC,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAC9B,eAAO,MAAM,IAAI,UAAuD,CAAC;AAyGzE,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6I3F"}
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.tags = exports.blocking = exports.category = exports.description = exports.name = exports.id = void 0;
8
+ exports.run = run;
9
+ /**
10
+ * Active Preflight Migration Tracker
11
+ *
12
+ * INTERNAL CHECK - Detects preflights in active/preflights/ that haven't been
13
+ * migrated to src/checks/ yet. This ensures we don't lose track of preflights
14
+ * that were created in the staging area but never formally added to the package.
15
+ *
16
+ * What it checks:
17
+ * 1. Files in active/preflights/ that don't exist in src/checks/
18
+ * 2. Files that exist in both but have different implementations
19
+ * 3. Files using old format (ESM with import.meta.url) vs new format (CommonJS)
20
+ *
21
+ * This is a META preflight - it checks the preflight-manager package itself,
22
+ * not the target application.
23
+ */
24
+ const fs_1 = __importDefault(require("fs"));
25
+ const path_1 = __importDefault(require("path"));
26
+ const crypto_1 = __importDefault(require("crypto"));
27
+ const glob_1 = require("glob");
28
+ const console_chars_1 = require("../../utils/console-chars");
29
+ // METADATA
30
+ exports.id = "system/active-preflight-migration-tracker";
31
+ exports.name = "Active Preflight Migration Tracker";
32
+ exports.description = "Detects preflights in active/ that need migration to src/checks/";
33
+ exports.category = "system";
34
+ exports.blocking = false; // Informational
35
+ exports.tags = ["system", "meta", "migration", "internal", "drift"];
36
+ /**
37
+ * Check if a file uses the old ESM format
38
+ */
39
+ function checkFileFormat(content) {
40
+ const issues = [];
41
+ // Check for old ESM auto-run pattern
42
+ if (/import\.meta\.url/.test(content)) {
43
+ issues.push("Uses import.meta.url (old ESM pattern)");
44
+ }
45
+ // Check for missing metadata exports
46
+ if (!/export\s+const\s+id\s*=/.test(content)) {
47
+ issues.push("Missing 'id' metadata export");
48
+ }
49
+ if (!/export\s+const\s+name\s*=/.test(content)) {
50
+ issues.push("Missing 'name' metadata export");
51
+ }
52
+ if (!/export\s+const\s+category\s*=/.test(content)) {
53
+ issues.push("Missing 'category' metadata export");
54
+ }
55
+ // Check for old return format
56
+ if (/return\s*\{\s*passed:/.test(content) && !/return\s*\{\s*success:/.test(content)) {
57
+ issues.push("Uses old { passed: } format instead of { success: }");
58
+ }
59
+ // Check for relative imports that won't work in src/checks
60
+ if (/from\s+["']\.\.\/utils\/console-chars["']/.test(content)) {
61
+ issues.push("Uses relative import ../utils/console-chars (needs ../../utils/console-chars)");
62
+ }
63
+ return issues;
64
+ }
65
+ /**
66
+ * Compute hash of file content (ignoring whitespace differences)
67
+ */
68
+ function computeContentHash(content) {
69
+ // Normalize: remove comments, extra whitespace for comparison
70
+ const normalized = content
71
+ .replace(/\/\*[\s\S]*?\*\//g, "") // Remove block comments
72
+ .replace(/\/\/.*$/gm, "") // Remove line comments
73
+ .replace(/\s+/g, " ") // Normalize whitespace
74
+ .trim();
75
+ return crypto_1.default.createHash("sha256").update(normalized).digest("hex").slice(0, 16);
76
+ }
77
+ /**
78
+ * Extract the base name for comparison (strips category prefix)
79
+ */
80
+ function getBaseName(filePath) {
81
+ return path_1.default.basename(filePath, path_1.default.extname(filePath));
82
+ }
83
+ /**
84
+ * Map active/preflights/ paths to expected src/checks/ paths
85
+ */
86
+ function mapActiveToSrc(activePath) {
87
+ // active/preflights/business/foo.ts -> src/checks/business/foo.ts
88
+ // But also check other likely locations
89
+ const baseName = getBaseName(activePath);
90
+ const activeCategory = activePath.split("/")[2] || activePath.split("\\")[2] || "";
91
+ const possiblePaths = [
92
+ `src/checks/${activeCategory}/${baseName}.ts`,
93
+ `src/checks/${baseName}.ts`,
94
+ ];
95
+ // Auth preflights might be in auth/ instead of business/
96
+ if (activeCategory === "business") {
97
+ if (baseName.includes("auth") ||
98
+ baseName.includes("guard") ||
99
+ baseName.includes("store-page") ||
100
+ baseName.includes("redirect") ||
101
+ baseName.includes("protected")) {
102
+ possiblePaths.push(`src/checks/auth/${baseName}.ts`);
103
+ }
104
+ if (baseName.includes("cart") || baseName.includes("checkout") || baseName.includes("order")) {
105
+ possiblePaths.push(`src/checks/cart/${baseName}.ts`);
106
+ possiblePaths.push(`src/checks/checkout/${baseName}.ts`);
107
+ possiblePaths.push(`src/checks/order/${baseName}.ts`);
108
+ }
109
+ }
110
+ return possiblePaths;
111
+ }
112
+ async function run() {
113
+ console.log(`\n${console_chars_1.emoji.search} ACTIVE PREFLIGHT MIGRATION TRACKER`);
114
+ console.log((0, console_chars_1.createDivider)(65, "heavy"));
115
+ const issues = [];
116
+ const formatIssues = [];
117
+ // Find the preflight-manager root (where this file lives)
118
+ const preflightManagerRoot = path_1.default.resolve(__dirname, "../../..");
119
+ const activeDir = path_1.default.join(preflightManagerRoot, "active/preflights");
120
+ const srcDir = path_1.default.join(preflightManagerRoot, "src/checks");
121
+ if (!fs_1.default.existsSync(activeDir)) {
122
+ console.log(`\n${console_chars_1.emoji.info} No active/preflights/ directory found - skipping`);
123
+ return { success: true, errors: 0, warnings: 0 };
124
+ }
125
+ // Scan active preflights
126
+ const activeFiles = await (0, glob_1.glob)("**/*.ts", {
127
+ cwd: activeDir,
128
+ ignore: ["**/utils/**", "**/workflows/**", "**/*.d.ts"],
129
+ });
130
+ console.log(`\n${console_chars_1.emoji.file} Found ${activeFiles.length} preflights in active/preflights/`);
131
+ // Scan src/checks
132
+ const srcFiles = await (0, glob_1.glob)("**/*.ts", {
133
+ cwd: srcDir,
134
+ ignore: ["**/*.d.ts"],
135
+ });
136
+ const srcFileSet = new Set(srcFiles.map((f) => getBaseName(f)));
137
+ const srcFileMap = new Map();
138
+ for (const f of srcFiles) {
139
+ srcFileMap.set(getBaseName(f), f);
140
+ }
141
+ console.log(`${console_chars_1.emoji.file} Found ${srcFiles.length} preflights in src/checks/\n`);
142
+ // Check each active preflight
143
+ for (const activeFile of activeFiles) {
144
+ const baseName = getBaseName(activeFile);
145
+ const activeFullPath = path_1.default.join(activeDir, activeFile);
146
+ const activeContent = fs_1.default.readFileSync(activeFullPath, "utf-8");
147
+ // Check format issues
148
+ const fmtIssues = checkFileFormat(activeContent);
149
+ if (fmtIssues.length > 0) {
150
+ formatIssues.push({
151
+ file: `active/preflights/${activeFile}`,
152
+ issues: fmtIssues,
153
+ });
154
+ }
155
+ // Check if migrated to src/checks/
156
+ if (srcFileSet.has(baseName)) {
157
+ // File exists in both - check if implementations differ
158
+ const srcFile = srcFileMap.get(baseName);
159
+ const srcFullPath = path_1.default.join(srcDir, srcFile);
160
+ const srcContent = fs_1.default.readFileSync(srcFullPath, "utf-8");
161
+ const activeHash = computeContentHash(activeContent);
162
+ const srcHash = computeContentHash(srcContent);
163
+ if (activeHash !== srcHash) {
164
+ issues.push({
165
+ file: baseName,
166
+ type: "different-implementation",
167
+ activeFile: `active/preflights/${activeFile}`,
168
+ srcFile: `src/checks/${srcFile}`,
169
+ description: "Implementations differ - may need sync",
170
+ });
171
+ }
172
+ }
173
+ else {
174
+ // File not migrated
175
+ issues.push({
176
+ file: baseName,
177
+ type: "not-migrated",
178
+ activeFile: `active/preflights/${activeFile}`,
179
+ description: "Exists in active/ but not in src/checks/",
180
+ });
181
+ }
182
+ }
183
+ // Summary
184
+ const notMigrated = issues.filter((i) => i.type === "not-migrated");
185
+ const differentImpl = issues.filter((i) => i.type === "different-implementation");
186
+ console.log(`${console_chars_1.emoji.chart} Summary:`);
187
+ console.log(` Not migrated: ${notMigrated.length}`);
188
+ console.log(` Different implementations: ${differentImpl.length}`);
189
+ console.log(` Format issues: ${formatIssues.length}`);
190
+ if (issues.length === 0 && formatIssues.length === 0) {
191
+ console.log(`\n${console_chars_1.emoji.success} ACTIVE PREFLIGHT MIGRATION TRACKER PASSED`);
192
+ console.log(`\nAll active preflights have been migrated to src/checks/`);
193
+ return { success: true, errors: 0, warnings: 0 };
194
+ }
195
+ // Report not migrated
196
+ if (notMigrated.length > 0) {
197
+ console.log(`\n${console_chars_1.emoji.warning} Preflights NOT migrated to src/checks/:`);
198
+ for (const issue of notMigrated) {
199
+ console.log(` ${issue.activeFile}`);
200
+ }
201
+ }
202
+ // Report different implementations
203
+ if (differentImpl.length > 0) {
204
+ console.log(`\n${console_chars_1.emoji.warning} Preflights with DIFFERENT implementations:`);
205
+ for (const issue of differentImpl) {
206
+ console.log(` ${issue.file}:`);
207
+ console.log(` Active: ${issue.activeFile}`);
208
+ console.log(` Src: ${issue.srcFile}`);
209
+ }
210
+ }
211
+ // Report format issues
212
+ if (formatIssues.length > 0) {
213
+ console.log(`\n${console_chars_1.emoji.warning} Files with FORMAT issues (old ESM style):`);
214
+ for (const fmt of formatIssues.slice(0, 10)) {
215
+ console.log(` ${fmt.file}:`);
216
+ for (const issue of fmt.issues) {
217
+ console.log(` - ${issue}`);
218
+ }
219
+ }
220
+ if (formatIssues.length > 10) {
221
+ console.log(` ... and ${formatIssues.length - 10} more`);
222
+ }
223
+ }
224
+ console.log(`\n${console_chars_1.emoji.info} To migrate a preflight:`);
225
+ console.log(` 1. Copy from active/preflights/ to src/checks/<category>/`);
226
+ console.log(` 2. Update imports: "../utils/console-chars" -> "../../utils/console-chars"`);
227
+ console.log(` 3. Add metadata exports: id, name, description, category, blocking, tags`);
228
+ console.log(` 4. Change return format: { passed: } -> { success: }`);
229
+ console.log(` 5. Change auto-run: import.meta.url -> require.main === module`);
230
+ console.log(`\n${console_chars_1.emoji.warning} ACTIVE PREFLIGHT MIGRATION TRACKER COMPLETED`);
231
+ return { success: true, errors: 0, warnings: notMigrated.length + differentImpl.length };
232
+ }
233
+ // Allow direct execution
234
+ if (require.main === module) {
235
+ run()
236
+ .then((result) => {
237
+ process.exit(result.success ? 0 : 1);
238
+ })
239
+ .catch((err) => {
240
+ console.error(`${console_chars_1.emoji.error} Check failed:`, err);
241
+ process.exit(1);
242
+ });
243
+ }
244
+ //# sourceMappingURL=active-preflight-migration-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-preflight-migration-tracker.js","sourceRoot":"","sources":["../../../src/checks/system/active-preflight-migration-tracker.ts"],"names":[],"mappings":";;;;;;;AAsIA,kBA6IC;AAlRD;;;;;;;;;;;;;;GAcG;AACH,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAC5B,+BAA4B;AAE5B,6DAAiE;AAEjE,WAAW;AACE,QAAA,EAAE,GAAG,2CAA2C,CAAC;AACjD,QAAA,IAAI,GAAG,oCAAoC,CAAC;AAC5C,QAAA,WAAW,GAAG,kEAAkE,CAAC;AACjF,QAAA,QAAQ,GAAG,QAAQ,CAAC;AACpB,QAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,gBAAgB;AAClC,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAezE;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,qCAAqC;IACrC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,8BAA8B;IAC9B,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAED,2DAA2D;IAC3D,IAAI,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,8DAA8D;IAC9D,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,wBAAwB;SACzD,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,uBAAuB;SAChD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;SAC5C,IAAI,EAAE,CAAC;IACV,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAAgB;IACnC,OAAO,cAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,kEAAkE;IAClE,wCAAwC;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnF,MAAM,aAAa,GAAG;QACpB,cAAc,cAAc,IAAI,QAAQ,KAAK;QAC7C,cAAc,QAAQ,KAAK;KAC5B,CAAC;IAEF,yDAAyD;IACzD,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,IACE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC/B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7F,aAAa,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;YACrD,aAAa,CAAC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,CAAC,CAAC;YACzD,aAAa,CAAC,IAAI,CAAC,oBAAoB,QAAQ,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,GAAG;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,MAAM,qCAAqC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,IAAA,6BAAa,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,0DAA0D;IAC1D,MAAM,oBAAoB,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAE7D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,IAAI,mDAAmD,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,MAAM,IAAA,WAAI,EAAC,SAAS,EAAE;QACxC,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,CAAC;KACxD,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,IAAI,UAAU,WAAW,CAAC,MAAM,mCAAmC,CAAC,CAAC;IAE5F,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,IAAA,WAAI,EAAC,SAAS,EAAE;QACrC,GAAG,EAAE,MAAM;QACX,MAAM,EAAE,CAAC,WAAW,CAAC;KACtB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,qBAAK,CAAC,IAAI,UAAU,QAAQ,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAElF,8BAA8B;IAC9B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAE/D,sBAAsB;QACtB,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,qBAAqB,UAAU,EAAE;gBACvC,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,wDAAwD;YACxD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAEzD,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAE/C,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,0BAA0B;oBAChC,UAAU,EAAE,qBAAqB,UAAU,EAAE;oBAC7C,OAAO,EAAE,cAAc,OAAO,EAAE;oBAChC,WAAW,EAAE,wCAAwC;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,qBAAqB,UAAU,EAAE;gBAC7C,WAAW,EAAE,0CAA0C;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU;IACV,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC;IAElF,OAAO,CAAC,GAAG,CAAC,GAAG,qBAAK,CAAC,KAAK,WAAW,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iCAAiC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,qBAAqB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,4CAA4C,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,sBAAsB;IACtB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,0CAA0C,CAAC,CAAC;QAC1E,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,6CAA6C,CAAC,CAAC;QAC7E,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,4CAA4C,CAAC,CAAC;QAC5E,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,IAAI,0BAA0B,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAK,CAAC,OAAO,+CAA+C,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;AAC3F,CAAC;AAED,yBAAyB;AACzB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,GAAG,EAAE;SACF,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,qBAAK,CAAC,KAAK,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ export declare const id = "ui/filter-option-coverage";
3
+ export declare const name = "Filter Option Coverage";
4
+ export declare const description = "Detects filter options that don't cover all possible values";
5
+ export declare const category = "ui";
6
+ export declare const blocking = false;
7
+ export declare const tags: string[];
8
+ export declare const requires: string[];
9
+ export declare function run(): Promise<{
10
+ success: boolean;
11
+ errors: number;
12
+ warnings: number;
13
+ }>;
14
+ //# sourceMappingURL=filter-option-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-option-coverage.d.ts","sourceRoot":"","sources":["../../../src/checks/ui/filter-option-coverage.ts"],"names":[],"mappings":";AAyBA,eAAO,MAAM,EAAE,8BAA8B,CAAC;AAC9C,eAAO,MAAM,IAAI,2BAA2B,CAAC;AAC7C,eAAO,MAAM,WAAW,gEAAgE,CAAC;AACzF,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAC9B,eAAO,MAAM,IAAI,UAAsD,CAAC;AACxE,eAAO,MAAM,QAAQ,UAA0B,CAAC;AAgHhD,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAoM3F"}