@empline/preflight 1.1.59 → 1.1.61

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 (54) hide show
  1. package/dist/checks/business/auto-approval-system-validation.d.ts +25 -0
  2. package/dist/checks/business/auto-approval-system-validation.d.ts.map +1 -0
  3. package/dist/checks/business/auto-approval-system-validation.js +458 -0
  4. package/dist/checks/business/auto-approval-system-validation.js.map +1 -0
  5. package/dist/checks/business/listing-submission-flow-validation.d.ts +21 -0
  6. package/dist/checks/business/listing-submission-flow-validation.d.ts.map +1 -0
  7. package/dist/checks/business/listing-submission-flow-validation.js +394 -0
  8. package/dist/checks/business/listing-submission-flow-validation.js.map +1 -0
  9. package/dist/checks/business/multi-user-sync-validation.d.ts +21 -0
  10. package/dist/checks/business/multi-user-sync-validation.d.ts.map +1 -0
  11. package/dist/checks/business/multi-user-sync-validation.js +383 -0
  12. package/dist/checks/business/multi-user-sync-validation.js.map +1 -0
  13. package/dist/checks/checkout/checkout-flow-validation.d.ts.map +1 -1
  14. package/dist/checks/checkout/checkout-flow-validation.js +2 -1
  15. package/dist/checks/checkout/checkout-flow-validation.js.map +1 -1
  16. package/dist/checks/code-hygiene/decorative-separators.d.ts.map +1 -1
  17. package/dist/checks/code-hygiene/decorative-separators.js +3 -0
  18. package/dist/checks/code-hygiene/decorative-separators.js.map +1 -1
  19. package/dist/checks/consolidated/ui-spacing-standards.js +59 -0
  20. package/dist/checks/consolidated/ui-spacing-standards.js.map +1 -1
  21. package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts +38 -0
  22. package/dist/checks/data-integrity/catalog-image-protection-validation.d.ts.map +1 -0
  23. package/dist/checks/data-integrity/catalog-image-protection-validation.js +368 -0
  24. package/dist/checks/data-integrity/catalog-image-protection-validation.js.map +1 -0
  25. package/dist/checks/data-integrity/image-url-validation.d.ts +22 -0
  26. package/dist/checks/data-integrity/image-url-validation.d.ts.map +1 -0
  27. package/dist/checks/data-integrity/image-url-validation.js +310 -0
  28. package/dist/checks/data-integrity/image-url-validation.js.map +1 -0
  29. package/dist/checks/database/enum-sync-validation.d.ts.map +1 -1
  30. package/dist/checks/database/enum-sync-validation.js +14 -6
  31. package/dist/checks/database/enum-sync-validation.js.map +1 -1
  32. package/dist/checks/observability/observability-validation.d.ts.map +1 -1
  33. package/dist/checks/observability/observability-validation.js +28 -5
  34. package/dist/checks/observability/observability-validation.js.map +1 -1
  35. package/dist/checks/performance/async-batch-concurrency.d.ts +10 -0
  36. package/dist/checks/performance/async-batch-concurrency.d.ts.map +1 -0
  37. package/dist/checks/performance/async-batch-concurrency.js +352 -0
  38. package/dist/checks/performance/async-batch-concurrency.js.map +1 -0
  39. package/dist/checks/react/clickable-cursor-styling.d.ts +25 -0
  40. package/dist/checks/react/clickable-cursor-styling.d.ts.map +1 -0
  41. package/dist/checks/react/clickable-cursor-styling.js +289 -0
  42. package/dist/checks/react/clickable-cursor-styling.js.map +1 -0
  43. package/dist/checks/react/react-patterns-validation.d.ts.map +1 -1
  44. package/dist/checks/react/react-patterns-validation.js +15 -2
  45. package/dist/checks/react/react-patterns-validation.js.map +1 -1
  46. package/dist/checks/security/deprecated-node-apis-validation.d.ts +31 -0
  47. package/dist/checks/security/deprecated-node-apis-validation.d.ts.map +1 -0
  48. package/dist/checks/security/deprecated-node-apis-validation.js +324 -0
  49. package/dist/checks/security/deprecated-node-apis-validation.js.map +1 -0
  50. package/dist/checks/ui/grid-section-margin.d.ts +32 -0
  51. package/dist/checks/ui/grid-section-margin.d.ts.map +1 -0
  52. package/dist/checks/ui/grid-section-margin.js +302 -0
  53. package/dist/checks/ui/grid-section-margin.js.map +1 -0
  54. package/package.json +1 -1
@@ -0,0 +1,302 @@
1
+ #!/usr/bin/env tsx
2
+ "use strict";
3
+ /**
4
+ * Grid Section Margin Preflight
5
+ *
6
+ * Detects grid containers (stat cards, KPI grids, metric grids) that lack
7
+ * margin-bottom spacing before subsequent content sections.
8
+ *
9
+ * PROBLEM:
10
+ * Dashboard layouts often have stat card grids or KPI grids that butt directly
11
+ * against the next section (like CardSection), causing no visual separation.
12
+ *
13
+ * PATTERNS DETECTED:
14
+ * - Grid containers (grid grid-cols-*) without mb-* before next sibling content
15
+ * - StatCardGrid, metric grids, KPI grids without margin-bottom
16
+ * - Box with grid layout followed by CardSection, Box, or other containers
17
+ *
18
+ * APPROVED PATTERNS:
19
+ * - mb-3, mb-4, mb-6 on the grid container
20
+ * - Parent container with gap-6 or higher (sufficient major section spacing)
21
+ * - Grid is the last child in its container
22
+ *
23
+ * Usage:
24
+ * npx preflight --name "Grid Section Margin"
25
+ */
26
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ var desc = Object.getOwnPropertyDescriptor(m, k);
29
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
30
+ desc = { enumerable: true, get: function() { return m[k]; } };
31
+ }
32
+ Object.defineProperty(o, k2, desc);
33
+ }) : (function(o, m, k, k2) {
34
+ if (k2 === undefined) k2 = k;
35
+ o[k2] = m[k];
36
+ }));
37
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
38
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
39
+ }) : function(o, v) {
40
+ o["default"] = v;
41
+ });
42
+ var __importStar = (this && this.__importStar) || (function () {
43
+ var ownKeys = function(o) {
44
+ ownKeys = Object.getOwnPropertyNames || function (o) {
45
+ var ar = [];
46
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
47
+ return ar;
48
+ };
49
+ return ownKeys(o);
50
+ };
51
+ return function (mod) {
52
+ if (mod && mod.__esModule) return mod;
53
+ var result = {};
54
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
55
+ __setModuleDefault(result, mod);
56
+ return result;
57
+ };
58
+ })();
59
+ Object.defineProperty(exports, "__esModule", { value: true });
60
+ exports.tags = exports.description = exports.blocking = exports.category = exports.name = exports.id = void 0;
61
+ exports.run = run;
62
+ const fs = __importStar(require("fs"));
63
+ const path = __importStar(require("path"));
64
+ const console_chars_1 = require("../../utils/console-chars");
65
+ const file_cache_1 = require("../../shared/file-cache");
66
+ const universal_progress_reporter_1 = require("../system/universal-progress-reporter");
67
+ // Check metadata
68
+ exports.id = "ui/grid-section-margin";
69
+ exports.name = "Grid Section Margin";
70
+ exports.category = "ui";
71
+ exports.blocking = true;
72
+ exports.description = "Detects grid containers (stat cards, KPIs) without margin-bottom before next content";
73
+ exports.tags = ["ui", "spacing", "dashboard", "grid"];
74
+ // Patterns that indicate a major grid container for stats/metrics/KPIs
75
+ // (excludes small inline grids like 2-column detail views)
76
+ const GRID_PATTERNS = [
77
+ /<StatCardGrid/, // Stat card grids are always major sections
78
+ /className="[^"]*grid\s+grid-cols-[34]\s[^"]*"/, // 3-4 column grids (dashboard metrics)
79
+ /className="[^"]*grid-cols-[34]\s[^"]*gap-6/, // Major grids with gap-6
80
+ /className="[^"]*md:grid-cols-[34]/, // Responsive 3-4 column grids
81
+ ];
82
+ // Patterns that indicate the next sibling is a content section
83
+ const NEXT_SECTION_PATTERNS = [
84
+ /<CardSection/,
85
+ /<Box\s+className=/,
86
+ /<Card\s+className=/,
87
+ /<Stack\s+spacing=/,
88
+ /\{\/\*.*\*\/\}/, // JSX comments often precede new sections
89
+ ];
90
+ // Patterns that indicate the grid already has margin-bottom
91
+ const HAS_MARGIN_BOTTOM = [
92
+ /className="[^"]*mb-[3-9]/,
93
+ /className="[^"]*mb-\d{2}/,
94
+ /style=\{[^}]*marginBottom/,
95
+ ];
96
+ // Patterns that indicate sufficient parent spacing
97
+ const PARENT_HAS_SPACING = [
98
+ /className="[^"]*gap-6/,
99
+ /className="[^"]*gap-8/,
100
+ /className="[^"]*space-y-6/,
101
+ /className="[^"]*space-y-8/,
102
+ /spacing=\{6\}/,
103
+ /spacing=\{8\}/,
104
+ ];
105
+ async function run() {
106
+ const reporter = (0, universal_progress_reporter_1.createUniversalProgressReporter)(exports.name);
107
+ const verbose = process.argv.includes("--verbose");
108
+ console.log(`\n${console_chars_1.emoji.search} Grid Section Margin Check\n`);
109
+ console.log("Detects grid containers without margin-bottom before next content section.\n");
110
+ console.log("This prevents stat card grids and KPIs from touching adjacent sections.\n");
111
+ // Focus on dashboard and admin pages where this pattern is common
112
+ const files = await file_cache_1.fileCache.getFiles("{app,components}/**/*.tsx", {
113
+ ignore: [
114
+ "**/node_modules/**",
115
+ "**/.next/**",
116
+ "**/dist/**",
117
+ "**/scripts/**",
118
+ "**/*.test.tsx",
119
+ "**/*.spec.tsx",
120
+ "**/stories/**",
121
+ ],
122
+ });
123
+ const issues = [];
124
+ for (const file of files) {
125
+ const content = fs.readFileSync(file, "utf8");
126
+ const lines = content.split("\n");
127
+ // Quick check: does this file have grid patterns?
128
+ const hasGridPattern = GRID_PATTERNS.some((p) => p.test(content));
129
+ if (!hasGridPattern)
130
+ continue;
131
+ for (let i = 0; i < lines.length; i++) {
132
+ const line = lines[i];
133
+ const lineNum = i + 1;
134
+ // Skip comments and preflight-ignore
135
+ const trimmed = line.trim();
136
+ if (trimmed.startsWith("//") || trimmed.startsWith("/*") || trimmed.startsWith("*"))
137
+ continue;
138
+ if (line.includes("preflight-ignore"))
139
+ continue;
140
+ // Check if this line starts a grid container
141
+ const isGridContainer = GRID_PATTERNS.some((p) => p.test(line));
142
+ if (!isGridContainer)
143
+ continue;
144
+ // For multi-line components, gather all lines until the self-closing tag
145
+ // to check for className with margin-bottom
146
+ // Some components like StatCardGrid with inline stats can span 50+ lines
147
+ let componentLines = line;
148
+ // Only gather more lines if this line doesn't self-close
149
+ if (!line.trim().endsWith("/>") && !line.trim().endsWith(">")) {
150
+ for (let k = i + 1; k < Math.min(i + 80, lines.length); k++) {
151
+ componentLines += "\n" + lines[k];
152
+ // Stop when we find the self-closing tag for this component
153
+ // Must end with /> alone (not part of a child component)
154
+ const trimmedLine = lines[k].trim();
155
+ if (trimmedLine === "/>" || trimmedLine.endsWith('"/>'))
156
+ break;
157
+ }
158
+ }
159
+ // Check if this grid already has margin-bottom (check entire component definition)
160
+ const hasMarginBottom = HAS_MARGIN_BOTTOM.some((p) => p.test(componentLines));
161
+ if (hasMarginBottom)
162
+ continue;
163
+ // Look ahead to find the closing tag and what comes after
164
+ let depth = 0;
165
+ let gridEndLine = -1;
166
+ let gridStartTag = line.match(/<(\w+)/)?.[1] || "Box";
167
+ // Find the end of this grid container
168
+ for (let j = i; j < Math.min(i + 100, lines.length); j++) {
169
+ const checkLine = lines[j];
170
+ // Count opening tags
171
+ const openingTags = (checkLine.match(/<[A-Z][^/>]*/g) || []).length;
172
+ // Count self-closing tags
173
+ const selfClosing = (checkLine.match(/<[A-Z][^>]*\/>/g) || []).length;
174
+ // Count closing tags
175
+ const closingTags = (checkLine.match(/<\/[A-Z][^>]*>/g) || []).length;
176
+ depth += openingTags - selfClosing - closingTags;
177
+ // Check for closing tag of the grid container
178
+ if (j === i && checkLine.includes("/>")) {
179
+ gridEndLine = j;
180
+ break;
181
+ }
182
+ if (depth <= 0 && checkLine.includes(`</${gridStartTag}>`)) {
183
+ gridEndLine = j;
184
+ break;
185
+ }
186
+ if (depth <= 0 && j > i) {
187
+ gridEndLine = j;
188
+ break;
189
+ }
190
+ }
191
+ if (gridEndLine === -1)
192
+ continue;
193
+ // Look at the next non-empty, non-comment line after the grid ends
194
+ let nextContentLine = -1;
195
+ for (let j = gridEndLine + 1; j < Math.min(gridEndLine + 10, lines.length); j++) {
196
+ const nextLine = lines[j].trim();
197
+ if (nextLine === "")
198
+ continue;
199
+ if (nextLine.startsWith("//") || nextLine.startsWith("/*") || nextLine.startsWith("*"))
200
+ continue;
201
+ if (nextLine.startsWith("{/*"))
202
+ continue; // JSX comment
203
+ // Found the next content line
204
+ nextContentLine = j;
205
+ break;
206
+ }
207
+ if (nextContentLine === -1)
208
+ continue;
209
+ const nextLine = lines[nextContentLine];
210
+ // Check if the next line starts a new section
211
+ const isNextSection = NEXT_SECTION_PATTERNS.some((p) => p.test(nextLine));
212
+ if (!isNextSection)
213
+ continue;
214
+ // Check if parent has sufficient gap spacing (look back up to 10 lines)
215
+ let parentHasSufficientSpacing = false;
216
+ for (let j = i - 1; j >= Math.max(0, i - 10); j--) {
217
+ if (PARENT_HAS_SPACING.some((p) => p.test(lines[j]))) {
218
+ parentHasSufficientSpacing = true;
219
+ break;
220
+ }
221
+ }
222
+ if (parentHasSufficientSpacing)
223
+ continue;
224
+ // This is an issue - grid without margin-bottom before next section
225
+ const relPath = path.relative(process.cwd(), file);
226
+ issues.push({
227
+ file: relPath,
228
+ line: lineNum,
229
+ type: "error",
230
+ message: "Grid container lacks margin-bottom before next section",
231
+ context: trimmed.substring(0, 80),
232
+ suggestion: "Add mb-6 to the grid container className for section separation",
233
+ });
234
+ }
235
+ }
236
+ // Report
237
+ console.log((0, console_chars_1.createDivider)(60, "light"));
238
+ reporter.showSummary({
239
+ filesProcessed: files.length,
240
+ issuesFound: issues.length,
241
+ errors: issues.filter((i) => i.type === "error").length,
242
+ warnings: issues.filter((i) => i.type === "warning").length,
243
+ });
244
+ if (issues.length === 0) {
245
+ console.log(`\n${console_chars_1.emoji.success} No grid section margin issues found!\n`);
246
+ return;
247
+ }
248
+ const errors = issues.filter((i) => i.type === "error");
249
+ const warnings = issues.filter((i) => i.type === "warning");
250
+ if (errors.length > 0) {
251
+ console.log(`\n${console_chars_1.emoji.error} ERRORS (${errors.length}):\n`);
252
+ if (verbose) {
253
+ errors.forEach((e) => {
254
+ console.log(` ${e.file}:${e.line}`);
255
+ console.log(` ${e.message}`);
256
+ console.log(` Context: ${e.context}...`);
257
+ if (e.suggestion) {
258
+ console.log(` ${console_chars_1.emoji.hint} ${e.suggestion}`);
259
+ }
260
+ console.log("");
261
+ });
262
+ }
263
+ else {
264
+ // Show first 10 errors
265
+ errors.slice(0, 10).forEach((e) => {
266
+ console.log(` ${e.file}:${e.line} - ${e.message}`);
267
+ if (e.suggestion) {
268
+ console.log(` ${console_chars_1.emoji.hint} ${e.suggestion}`);
269
+ }
270
+ });
271
+ if (errors.length > 10) {
272
+ console.log(` ... and ${errors.length - 10} more errors`);
273
+ }
274
+ }
275
+ }
276
+ if (warnings.length > 0) {
277
+ console.log(`\n${console_chars_1.emoji.warning} WARNINGS (${warnings.length}):\n`);
278
+ warnings.slice(0, 5).forEach((w) => {
279
+ console.log(` ${w.file}:${w.line} - ${w.message}`);
280
+ });
281
+ if (warnings.length > 5) {
282
+ console.log(` ... and ${warnings.length - 5} more warnings`);
283
+ }
284
+ }
285
+ console.log("\n" + (0, console_chars_1.createDivider)(60, "light"));
286
+ console.log(`\n${console_chars_1.emoji.chart} Summary:`);
287
+ console.log(` Errors: ${errors.length}`);
288
+ console.log(` Warnings: ${warnings.length}`);
289
+ if (errors.length > 0) {
290
+ console.log(`\n${console_chars_1.emoji.error} Grid section margin check FAILED\n`);
291
+ console.log(`\n${console_chars_1.emoji.hint} To fix: Add mb-6 to grid containers before CardSection or other content.\n`);
292
+ process.exit(1);
293
+ }
294
+ else {
295
+ console.log(`\n${console_chars_1.emoji.success} Grid section margin check passed (warnings only)\n`);
296
+ }
297
+ }
298
+ // Allow direct execution
299
+ if (require.main === module) {
300
+ run().catch(console.error);
301
+ }
302
+ //# sourceMappingURL=grid-section-margin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-section-margin.js","sourceRoot":"","sources":["../../../src/checks/ui/grid-section-margin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empline/preflight",
3
- "version": "1.1.59",
3
+ "version": "1.1.61",
4
4
  "description": "Distributable preflight validation system with app-specific plugin support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",