@empline/preflight 1.1.14 → 1.1.15

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 (49) hide show
  1. package/dist/checks/auth/session-provider-wrapper.d.ts +47 -0
  2. package/dist/checks/auth/session-provider-wrapper.d.ts.map +1 -0
  3. package/dist/checks/auth/session-provider-wrapper.js +286 -0
  4. package/dist/checks/auth/session-provider-wrapper.js.map +1 -0
  5. package/dist/checks/database/prisma-upsert-safety.d.ts +39 -0
  6. package/dist/checks/database/prisma-upsert-safety.d.ts.map +1 -0
  7. package/dist/checks/database/prisma-upsert-safety.js +220 -0
  8. package/dist/checks/database/prisma-upsert-safety.js.map +1 -0
  9. package/dist/checks/dependencies/dependency-health-monitor.d.ts +49 -0
  10. package/dist/checks/dependencies/dependency-health-monitor.d.ts.map +1 -0
  11. package/dist/checks/dependencies/dependency-health-monitor.js +323 -0
  12. package/dist/checks/dependencies/dependency-health-monitor.js.map +1 -0
  13. package/dist/checks/file-hygiene-validation.d.ts +31 -0
  14. package/dist/checks/file-hygiene-validation.d.ts.map +1 -0
  15. package/dist/checks/file-hygiene-validation.js +934 -0
  16. package/dist/checks/file-hygiene-validation.js.map +1 -0
  17. package/dist/checks/organization/file-cleanup-validation.d.ts +22 -0
  18. package/dist/checks/organization/file-cleanup-validation.d.ts.map +1 -0
  19. package/dist/checks/organization/file-cleanup-validation.js +1121 -0
  20. package/dist/checks/organization/file-cleanup-validation.js.map +1 -0
  21. package/dist/checks/runtime/tailwind-runtime-check.d.ts +36 -0
  22. package/dist/checks/runtime/tailwind-runtime-check.d.ts.map +1 -0
  23. package/dist/checks/runtime/tailwind-runtime-check.js +264 -0
  24. package/dist/checks/runtime/tailwind-runtime-check.js.map +1 -0
  25. package/dist/checks/shipping-integration-validation.d.ts +28 -0
  26. package/dist/checks/shipping-integration-validation.d.ts.map +1 -0
  27. package/dist/checks/shipping-integration-validation.js +409 -0
  28. package/dist/checks/shipping-integration-validation.js.map +1 -0
  29. package/dist/checks/system/layout-constants-sync.d.ts +36 -0
  30. package/dist/checks/system/layout-constants-sync.d.ts.map +1 -0
  31. package/dist/checks/system/layout-constants-sync.js +642 -0
  32. package/dist/checks/system/layout-constants-sync.js.map +1 -0
  33. package/dist/checks/system/preflight-circular-dependency-detector.d.ts +26 -0
  34. package/dist/checks/system/preflight-circular-dependency-detector.d.ts.map +1 -0
  35. package/dist/checks/system/preflight-circular-dependency-detector.js +310 -0
  36. package/dist/checks/system/preflight-circular-dependency-detector.js.map +1 -0
  37. package/dist/checks/system/preflight-execution-benchmarks.d.ts +24 -0
  38. package/dist/checks/system/preflight-execution-benchmarks.d.ts.map +1 -0
  39. package/dist/checks/system/preflight-execution-benchmarks.js +282 -0
  40. package/dist/checks/system/preflight-execution-benchmarks.js.map +1 -0
  41. package/dist/checks/system/preflight-tag-taxonomy-validator.d.ts +27 -0
  42. package/dist/checks/system/preflight-tag-taxonomy-validator.d.ts.map +1 -0
  43. package/dist/checks/system/preflight-tag-taxonomy-validator.js +361 -0
  44. package/dist/checks/system/preflight-tag-taxonomy-validator.js.map +1 -0
  45. package/dist/utils/console-chars.d.ts +16 -0
  46. package/dist/utils/console-chars.d.ts.map +1 -1
  47. package/dist/utils/console-chars.js +10 -0
  48. package/dist/utils/console-chars.js.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,409 @@
1
+ #!/usr/bin/env tsx
2
+ "use strict";
3
+ /**
4
+ * Shipping Integration Validation Preflight
5
+ *
6
+ * Validates that shipping rules configured in the seller dashboard
7
+ * are properly integrated with checkout and cart functionality.
8
+ *
9
+ * BLOCKING: Ensures shipping features work end-to-end
10
+ *
11
+ * Checks:
12
+ * 1. All ShippingRuleType enum values are handled in calculator
13
+ * 2. All shipping rule fields are saved by API
14
+ * 3. All shipping rule fields are used in calculation
15
+ * 4. Checkout component displays all shipping result fields
16
+ * 5. No orphaned shipping features (configured but not used)
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.requires = exports.tags = exports.description = exports.blocking = exports.category = exports.name = exports.id = void 0;
53
+ exports.run = run;
54
+ const fs = __importStar(require("fs"));
55
+ const console_chars_1 = require("../utils/console-chars");
56
+ const universal_progress_reporter_1 = require("./system/universal-progress-reporter");
57
+ // Check metadata
58
+ exports.id = "misc/shipping-integration-validation";
59
+ exports.name = "Shipping Integration Validation";
60
+ exports.category = "misc";
61
+ exports.blocking = true;
62
+ exports.description = "Shipping Integration Validation Preflight";
63
+ exports.tags = ["misc", "validation"];
64
+ exports.requires = ["trading-card-system"];
65
+ const BLOCKING = true;
66
+ // Dynamic import for project-specific constants
67
+ let SHIPPING_RULE_TYPE = {};
68
+ async function loadProjectDependencies() {
69
+ try {
70
+ const shippingPath = "../../../lib/constants/shipping";
71
+ const mod = await Promise.resolve(`${shippingPath}`).then(s => __importStar(require(s)));
72
+ SHIPPING_RULE_TYPE = mod.SHIPPING_RULE_TYPE;
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ // All shipping rule types from centralized constants
80
+ const SHIPPING_RULE_TYPES = Object.values(SHIPPING_RULE_TYPE);
81
+ // All shipping rule fields that should be saved and used
82
+ const SHIPPING_RULE_FIELDS = [
83
+ "baseRate",
84
+ "freeShippingThreshold",
85
+ "carrier",
86
+ "serviceType",
87
+ "maxWeight",
88
+ "handlingFee",
89
+ "insuranceFee",
90
+ "expeditedRate",
91
+ "domesticOnly",
92
+ "internationalRate",
93
+ "restrictedStates",
94
+ "restrictedCountries",
95
+ "processingTime",
96
+ "estimatedDelivery",
97
+ "minimumOrderValue",
98
+ "maximumOrderValue",
99
+ "applicableCategories",
100
+ "excludedCategories",
101
+ "promotionalRate",
102
+ "promotionStartDate",
103
+ "promotionEndDate",
104
+ "promotionDescription",
105
+ "weightRanges",
106
+ "quantityDiscounts",
107
+ "zoneRates",
108
+ ];
109
+ // Fields that should be returned in shipping calculation result
110
+ const RESULT_FIELDS = [
111
+ "shippingCost",
112
+ "shippingRuleName",
113
+ "shippingRuleType",
114
+ "carrier",
115
+ "isFreeShipping",
116
+ "isPickupOnly",
117
+ "estimatedDelivery",
118
+ "handlingFee",
119
+ "insuranceFee",
120
+ "promotionApplied",
121
+ "promotionDescription",
122
+ "error",
123
+ ];
124
+ function checkShippingCalculator() {
125
+ const issues = [];
126
+ const calculatorPath = "lib/shipping-calculator.ts";
127
+ if (!fs.existsSync(calculatorPath)) {
128
+ issues.push({
129
+ file: calculatorPath,
130
+ type: "error",
131
+ message: "Shipping calculator file not found",
132
+ });
133
+ return issues;
134
+ }
135
+ const content = fs.readFileSync(calculatorPath, "utf-8");
136
+ // Check all rule types are handled
137
+ for (const ruleType of SHIPPING_RULE_TYPES) {
138
+ // Look for case statement or condition handling this type
139
+ const patterns = [
140
+ new RegExp(`case\\s+["']${ruleType}["']`, "i"),
141
+ new RegExp(`===\\s*["']${ruleType}["']`, "i"),
142
+ new RegExp(`type\\s*===\\s*["']${ruleType}["']`, "i"),
143
+ ];
144
+ const isHandled = patterns.some((p) => p.test(content));
145
+ if (!isHandled) {
146
+ issues.push({
147
+ file: calculatorPath,
148
+ type: "error",
149
+ message: `Shipping rule type "${ruleType}" is not handled in calculator`,
150
+ suggestion: `Add case "${ruleType}": in calculateByRuleType switch statement`,
151
+ });
152
+ }
153
+ }
154
+ // Check result interface has all fields
155
+ for (const field of RESULT_FIELDS) {
156
+ if (!content.includes(field)) {
157
+ issues.push({
158
+ file: calculatorPath,
159
+ type: "warning",
160
+ message: `Result field "${field}" may not be returned by calculator`,
161
+ suggestion: `Ensure ShippingCalculationResult interface includes ${field}`,
162
+ });
163
+ }
164
+ }
165
+ return issues;
166
+ }
167
+ function checkShippingAPI() {
168
+ const issues = [];
169
+ const apiPath = "app/api/store/shipping-rules/route.ts";
170
+ if (!fs.existsSync(apiPath)) {
171
+ issues.push({
172
+ file: apiPath,
173
+ type: "error",
174
+ message: "Shipping rules API route not found",
175
+ });
176
+ return issues;
177
+ }
178
+ const content = fs.readFileSync(apiPath, "utf-8");
179
+ // Check all fields are in Zod schema
180
+ for (const field of SHIPPING_RULE_FIELDS) {
181
+ if (!content.includes(field)) {
182
+ issues.push({
183
+ file: apiPath,
184
+ type: "warning",
185
+ message: `Field "${field}" may not be validated in API schema`,
186
+ suggestion: `Add ${field} to ShippingRuleSchema`,
187
+ });
188
+ }
189
+ }
190
+ // Check carrier and serviceType are saved
191
+ if (!content.includes("carrier: rule.carrier")) {
192
+ issues.push({
193
+ file: apiPath,
194
+ type: "error",
195
+ message: "Carrier field is not being saved to database",
196
+ suggestion: "Add carrier: rule.carrier to create data object",
197
+ });
198
+ }
199
+ if (!content.includes("serviceType: rule.serviceType")) {
200
+ issues.push({
201
+ file: apiPath,
202
+ type: "error",
203
+ message: "ServiceType field is not being saved to database",
204
+ suggestion: "Add serviceType: rule.serviceType to create data object",
205
+ });
206
+ }
207
+ return issues;
208
+ }
209
+ function checkCheckoutComponent() {
210
+ const issues = [];
211
+ const checkoutPath = "components/checkout/ShippingCalculator.tsx";
212
+ if (!fs.existsSync(checkoutPath)) {
213
+ issues.push({
214
+ file: checkoutPath,
215
+ type: "error",
216
+ message: "ShippingCalculator component not found",
217
+ });
218
+ return issues;
219
+ }
220
+ const content = fs.readFileSync(checkoutPath, "utf-8");
221
+ // Check important result fields are displayed
222
+ const displayFields = [
223
+ "shippingCost",
224
+ "isFreeShipping",
225
+ "isPickupOnly",
226
+ "carrier",
227
+ "estimatedDelivery",
228
+ "promotionApplied",
229
+ "handlingFee",
230
+ "insuranceFee",
231
+ ];
232
+ for (const field of displayFields) {
233
+ if (!content.includes(field)) {
234
+ issues.push({
235
+ file: checkoutPath,
236
+ type: "warning",
237
+ message: `Field "${field}" may not be displayed in checkout`,
238
+ suggestion: `Consider displaying ${field} in shipping breakdown`,
239
+ });
240
+ }
241
+ }
242
+ // Check context is being passed
243
+ if (!content.includes("destinationZip")) {
244
+ issues.push({
245
+ file: checkoutPath,
246
+ type: "error",
247
+ message: "Destination ZIP is not being passed to shipping API",
248
+ suggestion: "Include destinationZip in context object",
249
+ });
250
+ }
251
+ return issues;
252
+ }
253
+ function checkCalculateAPI() {
254
+ const issues = [];
255
+ const apiPath = "app/api/shipping/calculate/route.ts";
256
+ if (!fs.existsSync(apiPath)) {
257
+ issues.push({
258
+ file: apiPath,
259
+ type: "error",
260
+ message: "Shipping calculate API route not found",
261
+ });
262
+ return issues;
263
+ }
264
+ const content = fs.readFileSync(apiPath, "utf-8");
265
+ // Check context is accepted
266
+ if (!content.includes("context")) {
267
+ issues.push({
268
+ file: apiPath,
269
+ type: "error",
270
+ message: "API does not accept shipping context",
271
+ suggestion: "Add context parameter to request schema",
272
+ });
273
+ }
274
+ // Check all result fields are returned in breakdown
275
+ const breakdownFields = [
276
+ "carrier",
277
+ "isPickupOnly",
278
+ "estimatedDelivery",
279
+ "handlingFee",
280
+ "insuranceFee",
281
+ "promotionApplied",
282
+ "promotionDescription",
283
+ ];
284
+ for (const field of breakdownFields) {
285
+ if (!content.includes(field)) {
286
+ issues.push({
287
+ file: apiPath,
288
+ type: "warning",
289
+ message: `Field "${field}" may not be returned in API breakdown`,
290
+ suggestion: `Add ${field}: result.${field} to breakdown mapping`,
291
+ });
292
+ }
293
+ }
294
+ return issues;
295
+ }
296
+ function checkBasicConfigComponent() {
297
+ const issues = [];
298
+ const configPath = "app/store/shipping/components/ShippingRuleBasicConfig.tsx";
299
+ if (!fs.existsSync(configPath)) {
300
+ issues.push({
301
+ file: configPath,
302
+ type: "error",
303
+ message: "ShippingRuleBasicConfig component not found",
304
+ });
305
+ return issues;
306
+ }
307
+ const content = fs.readFileSync(configPath, "utf-8");
308
+ // Check all rule types are selectable
309
+ for (const ruleType of SHIPPING_RULE_TYPES) {
310
+ // Skip USPS_CALCULATED as it's being replaced by CALCULATED + carrier
311
+ if (ruleType === "USPS_CALCULATED")
312
+ continue;
313
+ if (!content.includes(ruleType)) {
314
+ issues.push({
315
+ file: configPath,
316
+ type: "warning",
317
+ message: `Shipping type "${ruleType}" is not selectable in UI`,
318
+ suggestion: `Add ${ruleType} to SHIPPING_TYPES array`,
319
+ });
320
+ }
321
+ }
322
+ // Check carrier selection exists for CALCULATED type
323
+ if (!content.includes("CARRIERS") && !content.includes("carrier")) {
324
+ issues.push({
325
+ file: configPath,
326
+ type: "error",
327
+ message: "Carrier selection not available for CALCULATED type",
328
+ suggestion: "Add carrier dropdown when CALCULATED is selected",
329
+ });
330
+ }
331
+ return issues;
332
+ }
333
+ async function run() {
334
+ const reporter = (0, universal_progress_reporter_1.createUniversalProgressReporter)(exports.name);
335
+ // Load project-specific dependencies
336
+ const loaded = await loadProjectDependencies();
337
+ if (!loaded) {
338
+ console.log(`${console_chars_1.emoji.skip} Skipping: project-specific modules not available`);
339
+ return { passed: true, skipped: true };
340
+ }
341
+ console.log("\n🚚 SHIPPING INTEGRATION VALIDATION");
342
+ console.log((0, console_chars_1.createDivider)(60, "heavy"));
343
+ console.log("Validating shipping rules are properly integrated...\n");
344
+ const allIssues = [];
345
+ // Run all checks
346
+ console.log(`${console_chars_1.emoji.package} Checking shipping calculator...`);
347
+ allIssues.push(...checkShippingCalculator());
348
+ console.log("šŸ“” Checking shipping rules API...");
349
+ allIssues.push(...checkShippingAPI());
350
+ console.log("šŸ›’ Checking checkout component...");
351
+ allIssues.push(...checkCheckoutComponent());
352
+ console.log("šŸ”Œ Checking calculate API...");
353
+ allIssues.push(...checkCalculateAPI());
354
+ console.log(`${console_chars_1.emoji.gear} Checking basic config component...`);
355
+ allIssues.push(...checkBasicConfigComponent());
356
+ // Categorize issues
357
+ const errors = allIssues.filter((i) => i.type === "error");
358
+ const warnings = allIssues.filter((i) => i.type === "warning");
359
+ const infos = allIssues.filter((i) => i.type === "info");
360
+ console.log("\n" + (0, console_chars_1.createDivider)(60, "heavy"));
361
+ if (allIssues.length === 0) {
362
+ console.log(`${console_chars_1.emoji.success} All shipping integration checks passed!\n`);
363
+ process.exit(0);
364
+ }
365
+ // Print errors
366
+ if (errors.length > 0) {
367
+ console.log(`\n${console_chars_1.emoji.error} ERRORS (${errors.length}):\n`);
368
+ for (const issue of errors) {
369
+ console.log(` ${console_chars_1.emoji.folder} ${issue.file}`);
370
+ console.log(` ${issue.message}`);
371
+ if (issue.suggestion) {
372
+ console.log(` ${console_chars_1.emoji.hint} ${issue.suggestion}`);
373
+ }
374
+ console.log("");
375
+ }
376
+ }
377
+ // Print warnings
378
+ if (warnings.length > 0) {
379
+ console.log(`\n${console_chars_1.emoji.warning} WARNINGS (${warnings.length}):\n`);
380
+ for (const issue of warnings) {
381
+ console.log(` ${console_chars_1.emoji.folder} ${issue.file}`);
382
+ console.log(` ${issue.message}`);
383
+ if (issue.suggestion) {
384
+ console.log(` ${console_chars_1.emoji.hint} ${issue.suggestion}`);
385
+ }
386
+ console.log("");
387
+ }
388
+ }
389
+ // Print info
390
+ if (infos.length > 0) {
391
+ console.log(`\n${console_chars_1.emoji.info} INFO (${infos.length}):\n`);
392
+ for (const issue of infos) {
393
+ console.log(` ${console_chars_1.emoji.folder} ${issue.file}: ${issue.message}`);
394
+ }
395
+ }
396
+ console.log((0, console_chars_1.createDivider)(60, "heavy"));
397
+ console.log(`\n${console_chars_1.emoji.chart} Summary: ${errors.length} errors, ${warnings.length} warnings, ${infos.length} info\n`);
398
+ if (BLOCKING && errors.length > 0) {
399
+ console.log(`${console_chars_1.emoji.error} SHIPPING INTEGRATION CHECK FAILED (blocking)\n`);
400
+ process.exit(1);
401
+ }
402
+ console.log(`${console_chars_1.emoji.warning} SHIPPING INTEGRATION CHECK: Passed with warnings\n`);
403
+ process.exit(0);
404
+ }
405
+ // Allow direct execution
406
+ if (require.main === module) {
407
+ run().catch(console.error);
408
+ }
409
+ //# sourceMappingURL=shipping-integration-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipping-integration-validation.js","sourceRoot":"","sources":["../../src/checks/shipping-integration-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Layout Constants Sync Preflight - IRON-CLAD ENFORCEMENT
4
+ *
5
+ * Ensures consistency between:
6
+ * 1. Shared layout constants (single source of truth)
7
+ * 2. Actual layout component implementations
8
+ * 3. Preflights that reference layout components
9
+ * 4. Identifies opportunities for consolidation (shown as warnings)
10
+ *
11
+ * This prevents drift where constants say one thing but implementations do another.
12
+ *
13
+ * Usage:
14
+ * pnpm preflight:layout-constants-sync # All checks including opportunities
15
+ * pnpm preflight:layout-constants-sync --verbose # Show all details
16
+ *
17
+ * Checks performed:
18
+ * 1. Layout components implement expected gap values (BLOCKING)
19
+ * 2. Preflights import from shared constants (not hardcoded)
20
+ * 3. All registered components exist (BLOCKING)
21
+ * 4. Unregistered gap layouts are flagged
22
+ * 5. Hardcoded spacing that could use constants (WARNING)
23
+ * 6. Components that could benefit from shared constants (WARNING)
24
+ */
25
+ export declare const id = "system/layout-constants-sync";
26
+ export declare const name = "Layout Constants Sync";
27
+ export declare const category = "system";
28
+ export declare const blocking = true;
29
+ export declare const description = "Layout Constants Sync Preflight - IRON-CLAD ENFORCEMENT";
30
+ export declare const tags: string[];
31
+ export declare const requires: string[];
32
+ export declare function run(): Promise<{
33
+ passed: boolean;
34
+ skipped: boolean;
35
+ }>;
36
+ //# sourceMappingURL=layout-constants-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-constants-sync.d.ts","sourceRoot":"","sources":["../../../src/checks/system/layout-constants-sync.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,eAAO,MAAM,EAAE,iCAAiC,CAAC;AACjD,eAAO,MAAM,IAAI,0BAA0B,CAAC;AAC5C,eAAO,MAAM,QAAQ,WAAW,CAAC;AACjC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,4DAA4D,CAAC;AACrF,eAAO,MAAM,IAAI,UAAa,CAAC;AAC/B,eAAO,MAAM,QAAQ,UAA0B,CAAC;AAyjBhD,wBAAsB,GAAG;;;GAwHxB"}