@empline/preflight 1.1.31 → 1.1.33

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 (61) hide show
  1. package/dist/checks/cart/cart-guest-merge.d.ts +14 -0
  2. package/dist/checks/cart/cart-guest-merge.d.ts.map +1 -0
  3. package/dist/checks/cart/cart-guest-merge.js +217 -0
  4. package/dist/checks/cart/cart-guest-merge.js.map +1 -0
  5. package/dist/checks/cart/cart-quantity-validation.d.ts +14 -0
  6. package/dist/checks/cart/cart-quantity-validation.d.ts.map +1 -0
  7. package/dist/checks/cart/cart-quantity-validation.js +211 -0
  8. package/dist/checks/cart/cart-quantity-validation.js.map +1 -0
  9. package/dist/checks/cart/cart-stock-validation.d.ts +14 -0
  10. package/dist/checks/cart/cart-stock-validation.d.ts.map +1 -0
  11. package/dist/checks/cart/cart-stock-validation.js +211 -0
  12. package/dist/checks/cart/cart-stock-validation.js.map +1 -0
  13. package/dist/checks/checkout/checkout-multi-store.d.ts +14 -0
  14. package/dist/checks/checkout/checkout-multi-store.d.ts.map +1 -0
  15. package/dist/checks/checkout/checkout-multi-store.js +209 -0
  16. package/dist/checks/checkout/checkout-multi-store.js.map +1 -0
  17. package/dist/checks/checkout/checkout-tax-consistency.d.ts +14 -0
  18. package/dist/checks/checkout/checkout-tax-consistency.d.ts.map +1 -0
  19. package/dist/checks/checkout/checkout-tax-consistency.js +212 -0
  20. package/dist/checks/checkout/checkout-tax-consistency.js.map +1 -0
  21. package/dist/checks/framework/prisma-version-bugs.d.ts +47 -0
  22. package/dist/checks/framework/prisma-version-bugs.d.ts.map +1 -0
  23. package/dist/checks/framework/prisma-version-bugs.js +232 -0
  24. package/dist/checks/framework/prisma-version-bugs.js.map +1 -0
  25. package/dist/checks/framework/turbopack-prisma-external.d.ts +37 -0
  26. package/dist/checks/framework/turbopack-prisma-external.d.ts.map +1 -0
  27. package/dist/checks/framework/turbopack-prisma-external.js +144 -0
  28. package/dist/checks/framework/turbopack-prisma-external.js.map +1 -0
  29. package/dist/checks/listing-approval/image-processing-validation.d.ts +14 -0
  30. package/dist/checks/listing-approval/image-processing-validation.d.ts.map +1 -0
  31. package/dist/checks/listing-approval/image-processing-validation.js +198 -0
  32. package/dist/checks/listing-approval/image-processing-validation.js.map +1 -0
  33. package/dist/checks/listing-approval/r2-metadata-application.d.ts +14 -0
  34. package/dist/checks/listing-approval/r2-metadata-application.d.ts.map +1 -0
  35. package/dist/checks/listing-approval/r2-metadata-application.js +261 -0
  36. package/dist/checks/listing-approval/r2-metadata-application.js.map +1 -0
  37. package/dist/checks/listing-approval/seo-metadata-consistency.d.ts +14 -0
  38. package/dist/checks/listing-approval/seo-metadata-consistency.d.ts.map +1 -0
  39. package/dist/checks/listing-approval/seo-metadata-consistency.js +408 -0
  40. package/dist/checks/listing-approval/seo-metadata-consistency.js.map +1 -0
  41. package/dist/checks/order/order-inventory-guard.d.ts +14 -0
  42. package/dist/checks/order/order-inventory-guard.d.ts.map +1 -0
  43. package/dist/checks/order/order-inventory-guard.js +212 -0
  44. package/dist/checks/order/order-inventory-guard.js.map +1 -0
  45. package/dist/checks/order/order-status-validation.d.ts +14 -0
  46. package/dist/checks/order/order-status-validation.d.ts.map +1 -0
  47. package/dist/checks/order/order-status-validation.js +218 -0
  48. package/dist/checks/order/order-status-validation.js.map +1 -0
  49. package/dist/checks/order/shipping-address-validation.d.ts +14 -0
  50. package/dist/checks/order/shipping-address-validation.d.ts.map +1 -0
  51. package/dist/checks/order/shipping-address-validation.js +213 -0
  52. package/dist/checks/order/shipping-address-validation.js.map +1 -0
  53. package/dist/checks/ui/batch-progress-consistency.d.ts +13 -0
  54. package/dist/checks/ui/batch-progress-consistency.d.ts.map +1 -0
  55. package/dist/checks/ui/batch-progress-consistency.js +200 -0
  56. package/dist/checks/ui/batch-progress-consistency.js.map +1 -0
  57. package/dist/checks/ui/bulk-action-progress-feedback.d.ts +13 -0
  58. package/dist/checks/ui/bulk-action-progress-feedback.d.ts.map +1 -0
  59. package/dist/checks/ui/bulk-action-progress-feedback.js +273 -0
  60. package/dist/checks/ui/bulk-action-progress-feedback.js.map +1 -0
  61. package/package.json +1 -1
@@ -0,0 +1,211 @@
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
+ * Cart Stock Validation Preflight
11
+ *
12
+ * Validates that cart operations properly check stock availability before
13
+ * allowing items to be added or quantities to be updated.
14
+ *
15
+ * Critical patterns to validate:
16
+ * 1. Cart validate API checks listing.listingStatus === 'ACTIVE'
17
+ * 2. Cart validate API checks listing.quantityAvailable > 0
18
+ * 3. Cart validate API checks requested quantity <= available
19
+ * 4. Cart items cannot reference deleted listings (deletedAt check)
20
+ * 5. Stock validation happens before checkout proceeds
21
+ *
22
+ * Prevents:
23
+ * - Adding out-of-stock items to cart
24
+ * - Purchasing unavailable products
25
+ * - Cart containing inactive/deleted listings
26
+ */
27
+ const fs_1 = __importDefault(require("fs"));
28
+ const path_1 = __importDefault(require("path"));
29
+ const glob_1 = require("glob");
30
+ const console_chars_1 = require("../../utils/console-chars");
31
+ // METADATA - Required for plugin loader discovery
32
+ exports.id = "cart/cart-stock-validation";
33
+ exports.name = "Cart Stock Validation";
34
+ exports.description = "Validates cart operations check stock availability";
35
+ exports.category = "cart";
36
+ exports.blocking = true;
37
+ exports.tags = ["cart", "stock", "inventory", "validation", "ecommerce"];
38
+ exports.requires = ["trading-card-system"];
39
+ /**
40
+ * Files to check for cart validation patterns
41
+ */
42
+ const CART_FILES = [
43
+ "app/api/cart/validate/route.ts",
44
+ "app/api/cart/validate-item/route.ts",
45
+ "app/actions/cart.ts",
46
+ "lib/cart*.ts",
47
+ ];
48
+ /**
49
+ * Required patterns for stock validation
50
+ */
51
+ const REQUIRED_PATTERNS = {
52
+ // Must check listing status is ACTIVE
53
+ activeStatusCheck: {
54
+ pattern: /listingStatus\s*(?:===|!==|==|!=)\s*['"]ACTIVE['"]|status\s*(?:===|!==)\s*['"]ACTIVE['"]/,
55
+ description: "Check that listing status is ACTIVE",
56
+ critical: true,
57
+ },
58
+ // Must check quantity available > 0
59
+ stockAvailabilityCheck: {
60
+ pattern: /quantityAvailable\s*(?:>|>=|<=|<)\s*\d|quantityAvailable\s*(?:===|!==)\s*0/,
61
+ description: "Check that quantityAvailable is sufficient",
62
+ critical: true,
63
+ },
64
+ // Must compare requested vs available quantity
65
+ quantityComparison: {
66
+ pattern: /quantity\s*(?:>|<=)\s*(?:listing\.)?quantityAvailable|quantityAvailable\s*(?:<|>=)\s*quantity/,
67
+ description: "Compare requested quantity against available",
68
+ critical: true,
69
+ },
70
+ // Must check for deleted listings
71
+ deletedCheck: {
72
+ pattern: /deletedAt\s*(?:===|!==|==|!=)\s*null|NOT\s+deletedAt|deletedAt:\s*null/i,
73
+ description: "Check that listing is not deleted",
74
+ critical: true,
75
+ },
76
+ // Must return validation result structure
77
+ validationResult: {
78
+ pattern: /validItems|removedItems|updatedItems|isValid|errors/,
79
+ description: "Return structured validation result",
80
+ critical: false,
81
+ },
82
+ };
83
+ /**
84
+ * Anti-patterns that indicate missing validation
85
+ */
86
+ const ANTI_PATTERNS = {
87
+ // Adding to cart without any validation
88
+ addWithoutValidation: {
89
+ pattern: /addToCart\s*\([^)]*\)\s*\{(?:(?!quantityAvailable|listingStatus|ACTIVE).)*\}/s,
90
+ description: "addToCart function without stock validation",
91
+ },
92
+ // Direct cart item creation without stock check
93
+ directCartCreate: {
94
+ pattern: /create\s*\(\s*\{[^}]*data:\s*\{[^}]*listingId(?:(?!quantityAvailable).)*\}\s*\)/s,
95
+ description: "Direct cart item creation without stock check",
96
+ },
97
+ };
98
+ async function run() {
99
+ console.log(`\n${console_chars_1.emoji.package} CART STOCK VALIDATION CHECK`);
100
+ console.log((0, console_chars_1.createDivider)(65, "heavy"));
101
+ const issues = [];
102
+ const filesChecked = [];
103
+ // Find all cart-related files
104
+ const allFiles = [];
105
+ for (const pattern of CART_FILES) {
106
+ const matches = await (0, glob_1.glob)(pattern, { cwd: process.cwd() });
107
+ allFiles.push(...matches);
108
+ }
109
+ const uniqueFiles = [...new Set(allFiles)];
110
+ console.log(`\n${console_chars_1.emoji.search} Scanning ${uniqueFiles.length} cart files...`);
111
+ if (uniqueFiles.length === 0) {
112
+ console.log(`\n${console_chars_1.emoji.warning} No cart files found - skipping check`);
113
+ return { success: true, errors: 0, warnings: 1 };
114
+ }
115
+ // Combine all file contents for pattern checking
116
+ let combinedContent = "";
117
+ for (const relativePath of uniqueFiles) {
118
+ const filePath = path_1.default.join(process.cwd(), relativePath);
119
+ if (!fs_1.default.existsSync(filePath))
120
+ continue;
121
+ filesChecked.push(relativePath);
122
+ const content = fs_1.default.readFileSync(filePath, "utf-8");
123
+ combinedContent += content + "\n";
124
+ console.log(` ${console_chars_1.emoji.file} ${relativePath}`);
125
+ }
126
+ // Check required patterns across all cart files
127
+ console.log(`\n${console_chars_1.emoji.search} Checking required validation patterns...`);
128
+ for (const [name, check] of Object.entries(REQUIRED_PATTERNS)) {
129
+ const hasPattern = check.pattern.test(combinedContent);
130
+ if (!hasPattern) {
131
+ issues.push({
132
+ file: "cart files",
133
+ type: "missing-pattern",
134
+ pattern: name,
135
+ description: check.description,
136
+ critical: check.critical,
137
+ });
138
+ const icon = check.critical ? console_chars_1.emoji.error : console_chars_1.emoji.warning;
139
+ console.log(` ${icon} Missing: ${check.description}`);
140
+ }
141
+ else {
142
+ console.log(` ${console_chars_1.emoji.success} Found: ${check.description}`);
143
+ }
144
+ }
145
+ // Check for anti-patterns in individual files
146
+ console.log(`\n${console_chars_1.emoji.search} Checking for anti-patterns...`);
147
+ for (const relativePath of filesChecked) {
148
+ const filePath = path_1.default.join(process.cwd(), relativePath);
149
+ const content = fs_1.default.readFileSync(filePath, "utf-8");
150
+ for (const [name, check] of Object.entries(ANTI_PATTERNS)) {
151
+ if (check.pattern.test(content)) {
152
+ issues.push({
153
+ file: relativePath,
154
+ type: "anti-pattern",
155
+ pattern: name,
156
+ description: check.description,
157
+ critical: true,
158
+ });
159
+ console.log(` ${console_chars_1.emoji.error} ${relativePath}: ${check.description}`);
160
+ }
161
+ }
162
+ }
163
+ // Summary
164
+ const criticalIssues = issues.filter((i) => i.critical);
165
+ const warningIssues = issues.filter((i) => !i.critical);
166
+ console.log(`\n${console_chars_1.emoji.chart} Summary:`);
167
+ console.log(` Files checked: ${filesChecked.length}`);
168
+ console.log(` Critical issues: ${criticalIssues.length}`);
169
+ console.log(` Warning issues: ${warningIssues.length}`);
170
+ if (issues.length === 0) {
171
+ console.log(`\n${console_chars_1.emoji.success} CART STOCK VALIDATION CHECK PASSED`);
172
+ console.log(`\nAll cart operations properly validate stock availability.`);
173
+ return { success: true, errors: 0, warnings: 0 };
174
+ }
175
+ if (criticalIssues.length > 0) {
176
+ console.log(`\n${console_chars_1.emoji.error} Critical issues:`);
177
+ for (const issue of criticalIssues) {
178
+ console.log(` ${issue.file}: ${issue.description}`);
179
+ }
180
+ }
181
+ if (warningIssues.length > 0) {
182
+ console.log(`\n${console_chars_1.emoji.warning} Warning issues:`);
183
+ for (const issue of warningIssues) {
184
+ console.log(` ${issue.file}: ${issue.description}`);
185
+ }
186
+ }
187
+ console.log(`\n${console_chars_1.emoji.info} Cart stock validation requirements:`);
188
+ console.log(` 1. Check listing.listingStatus === 'ACTIVE'`);
189
+ console.log(` 2. Check listing.quantityAvailable > 0`);
190
+ console.log(` 3. Check requested quantity <= available`);
191
+ console.log(` 4. Check listing.deletedAt === null`);
192
+ console.log(` 5. Return structured validation result`);
193
+ if (criticalIssues.length > 0) {
194
+ console.log(`\n${console_chars_1.emoji.error} CART STOCK VALIDATION CHECK FAILED`);
195
+ return { success: false, errors: criticalIssues.length, warnings: warningIssues.length };
196
+ }
197
+ console.log(`\n${console_chars_1.emoji.warning} CART STOCK VALIDATION CHECK PASSED WITH WARNINGS`);
198
+ return { success: true, errors: 0, warnings: warningIssues.length };
199
+ }
200
+ // Allow direct execution
201
+ if (require.main === module) {
202
+ run()
203
+ .then((result) => {
204
+ process.exit(result.success ? 0 : 1);
205
+ })
206
+ .catch((err) => {
207
+ console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
208
+ process.exit(1);
209
+ });
210
+ }
211
+ //# sourceMappingURL=cart-stock-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cart-stock-validation.js","sourceRoot":"","sources":["../../../src/checks/cart/cart-stock-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ export declare const id = "checkout/checkout-multi-store";
3
+ export declare const name = "Checkout Multi-Store Handling";
4
+ export declare const description = "Validates multi-seller checkout handling";
5
+ export declare const category = "checkout";
6
+ export declare const blocking = true;
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=checkout-multi-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-multi-store.d.ts","sourceRoot":"","sources":["../../../src/checks/checkout/checkout-multi-store.ts"],"names":[],"mappings":";AAwBA,eAAO,MAAM,EAAE,kCAAkC,CAAC;AAClD,eAAO,MAAM,IAAI,kCAAkC,CAAC;AACpD,eAAO,MAAM,WAAW,6CAA6C,CAAC;AACtE,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,IAAI,UAAoE,CAAC;AACtF,eAAO,MAAM,QAAQ,UAA0B,CAAC;AA+EhD,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiH3F"}
@@ -0,0 +1,209 @@
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
+ * Checkout Multi-Store Preflight
11
+ *
12
+ * Validates that checkout properly handles orders containing items from
13
+ * multiple stores/sellers:
14
+ * 1. Orders track storeId for seller association
15
+ * 2. Order items reference listings with storeId
16
+ * 3. Seller notifications sent for each store's items
17
+ * 4. Items grouped by seller in order processing
18
+ * 5. Seller earnings calculated per store (with platform fee)
19
+ *
20
+ * Prevents:
21
+ * - Orders without store association
22
+ * - Missing seller notifications
23
+ * - Incorrect earnings calculations
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 - Required for plugin loader discovery
30
+ exports.id = "checkout/checkout-multi-store";
31
+ exports.name = "Checkout Multi-Store Handling";
32
+ exports.description = "Validates multi-seller checkout handling";
33
+ exports.category = "checkout";
34
+ exports.blocking = true;
35
+ exports.tags = ["checkout", "multi-store", "seller", "marketplace", "ecommerce"];
36
+ exports.requires = ["trading-card-system"];
37
+ /**
38
+ * Files to check
39
+ */
40
+ const CHECKOUT_FILES = [
41
+ "app/api/orders/create/route.ts",
42
+ "app/api/orders/capture/route.ts",
43
+ "app/api/orders/process/route.ts",
44
+ "lib/order-service.ts",
45
+ "lib/order*.ts",
46
+ ];
47
+ const NOTIFICATION_FILES = [
48
+ "lib/notifications*.ts",
49
+ "lib/email*.ts",
50
+ "app/api/**/notify/route.ts",
51
+ ];
52
+ /**
53
+ * Required patterns for multi-store handling
54
+ */
55
+ const REQUIRED_PATTERNS = {
56
+ // Store ID on orders
57
+ storeIdOnOrder: {
58
+ pattern: /storeId:\s*(?:listing\.storeId|item\.storeId|storeId)|coreOrders.*storeId/,
59
+ description: "Store ID associated with orders",
60
+ critical: true,
61
+ },
62
+ // Listings have store reference
63
+ listingStoreReference: {
64
+ pattern: /listing\.storeId|include:\s*\{[^}]*store|storeId.*listing/,
65
+ description: "Listings reference their store",
66
+ critical: true,
67
+ },
68
+ // Group items by store/seller
69
+ groupByStore: {
70
+ pattern: /groupBy.*store|byStore|storeGroups|itemsByStore|sellerItems|Map.*storeId/i,
71
+ description: "Items grouped by store/seller",
72
+ critical: true,
73
+ },
74
+ // Seller notification
75
+ sellerNotification: {
76
+ pattern: /ORDER_RECEIVED|notifySeller|sendToSeller|seller.*notification|sellerEmail/i,
77
+ description: "Seller notification for orders",
78
+ critical: true,
79
+ },
80
+ // Platform fee calculation
81
+ platformFeeCalculation: {
82
+ pattern: /platformFee|commission|sellerEarnings|earnings.*fee|0\.1|10\s*%/i,
83
+ description: "Platform fee/commission calculation",
84
+ critical: false,
85
+ },
86
+ };
87
+ /**
88
+ * Anti-patterns
89
+ */
90
+ const ANTI_PATTERNS = {
91
+ // Order creation without storeId
92
+ orderWithoutStore: {
93
+ pattern: /create\s*\(\s*\{[^}]*data:\s*\{(?:(?!storeId).)*orderId/s,
94
+ description: "Order created without storeId",
95
+ },
96
+ // Single seller assumption
97
+ singleSellerAssumption: {
98
+ pattern: /\/\/\s*assume.*single.*seller|seller\s*=\s*orders?\[0\]/i,
99
+ description: "Code assumes single seller per order",
100
+ },
101
+ };
102
+ async function run() {
103
+ console.log(`\n${console_chars_1.emoji.globe} CHECKOUT MULTI-STORE HANDLING CHECK`);
104
+ console.log((0, console_chars_1.createDivider)(65, "heavy"));
105
+ const issues = [];
106
+ const filesChecked = [];
107
+ // Find all relevant files
108
+ const allPatterns = [...CHECKOUT_FILES, ...NOTIFICATION_FILES];
109
+ const allFiles = [];
110
+ for (const pattern of allPatterns) {
111
+ const matches = await (0, glob_1.glob)(pattern, { cwd: process.cwd() });
112
+ allFiles.push(...matches);
113
+ }
114
+ const uniqueFiles = [...new Set(allFiles)];
115
+ console.log(`\n${console_chars_1.emoji.search} Scanning ${uniqueFiles.length} checkout/notification files...`);
116
+ if (uniqueFiles.length === 0) {
117
+ console.log(`\n${console_chars_1.emoji.warning} No checkout files found - skipping check`);
118
+ return { success: true, errors: 0, warnings: 1 };
119
+ }
120
+ // Combine content
121
+ let combinedContent = "";
122
+ for (const relativePath of uniqueFiles) {
123
+ const filePath = path_1.default.join(process.cwd(), relativePath);
124
+ if (!fs_1.default.existsSync(filePath))
125
+ continue;
126
+ filesChecked.push(relativePath);
127
+ const content = fs_1.default.readFileSync(filePath, "utf-8");
128
+ combinedContent += content + "\n";
129
+ console.log(` ${console_chars_1.emoji.file} ${relativePath}`);
130
+ }
131
+ // Check required patterns
132
+ console.log(`\n${console_chars_1.emoji.search} Checking multi-store patterns...`);
133
+ for (const [name, check] of Object.entries(REQUIRED_PATTERNS)) {
134
+ const hasPattern = check.pattern.test(combinedContent);
135
+ if (!hasPattern) {
136
+ issues.push({
137
+ file: "checkout files",
138
+ type: "missing-pattern",
139
+ pattern: name,
140
+ description: check.description,
141
+ critical: check.critical,
142
+ });
143
+ const icon = check.critical ? console_chars_1.emoji.error : console_chars_1.emoji.warning;
144
+ console.log(` ${icon} Missing: ${check.description}`);
145
+ }
146
+ else {
147
+ console.log(` ${console_chars_1.emoji.success} Found: ${check.description}`);
148
+ }
149
+ }
150
+ // Check anti-patterns
151
+ console.log(`\n${console_chars_1.emoji.search} Checking for anti-patterns...`);
152
+ for (const relativePath of filesChecked) {
153
+ const filePath = path_1.default.join(process.cwd(), relativePath);
154
+ const content = fs_1.default.readFileSync(filePath, "utf-8");
155
+ for (const [name, check] of Object.entries(ANTI_PATTERNS)) {
156
+ if (check.pattern.test(content)) {
157
+ issues.push({
158
+ file: relativePath,
159
+ type: "anti-pattern",
160
+ pattern: name,
161
+ description: check.description,
162
+ critical: true,
163
+ });
164
+ console.log(` ${console_chars_1.emoji.error} ${relativePath}: ${check.description}`);
165
+ }
166
+ }
167
+ }
168
+ // Summary
169
+ const criticalIssues = issues.filter((i) => i.critical);
170
+ const warningIssues = issues.filter((i) => !i.critical);
171
+ console.log(`\n${console_chars_1.emoji.chart} Summary:`);
172
+ console.log(` Files checked: ${filesChecked.length}`);
173
+ console.log(` Critical issues: ${criticalIssues.length}`);
174
+ console.log(` Warning issues: ${warningIssues.length}`);
175
+ if (issues.length === 0) {
176
+ console.log(`\n${console_chars_1.emoji.success} CHECKOUT MULTI-STORE CHECK PASSED`);
177
+ return { success: true, errors: 0, warnings: 0 };
178
+ }
179
+ if (criticalIssues.length > 0) {
180
+ console.log(`\n${console_chars_1.emoji.error} Critical issues:`);
181
+ for (const issue of criticalIssues) {
182
+ console.log(` ${issue.file}: ${issue.description}`);
183
+ }
184
+ }
185
+ console.log(`\n${console_chars_1.emoji.info} Multi-store checkout requirements:`);
186
+ console.log(` 1. Orders must have storeId for seller association`);
187
+ console.log(` 2. Listings must reference their store`);
188
+ console.log(` 3. Items should be grouped by store/seller`);
189
+ console.log(` 4. Each seller must receive notification`);
190
+ console.log(` 5. Seller earnings calculated with platform fee`);
191
+ if (criticalIssues.length > 0) {
192
+ console.log(`\n${console_chars_1.emoji.error} CHECKOUT MULTI-STORE CHECK FAILED`);
193
+ return { success: false, errors: criticalIssues.length, warnings: warningIssues.length };
194
+ }
195
+ console.log(`\n${console_chars_1.emoji.warning} CHECKOUT MULTI-STORE CHECK PASSED WITH WARNINGS`);
196
+ return { success: true, errors: 0, warnings: warningIssues.length };
197
+ }
198
+ // Allow direct execution
199
+ if (require.main === module) {
200
+ run()
201
+ .then((result) => {
202
+ process.exit(result.success ? 0 : 1);
203
+ })
204
+ .catch((err) => {
205
+ console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
206
+ process.exit(1);
207
+ });
208
+ }
209
+ //# sourceMappingURL=checkout-multi-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-multi-store.js","sourceRoot":"","sources":["../../../src/checks/checkout/checkout-multi-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ export declare const id = "checkout/checkout-tax-consistency";
3
+ export declare const name = "Checkout Tax Consistency";
4
+ export declare const description = "Validates tax calculations are consistent and server-side";
5
+ export declare const category = "checkout";
6
+ export declare const blocking = true;
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=checkout-tax-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-tax-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/checkout/checkout-tax-consistency.ts"],"names":[],"mappings":";AAuBA,eAAO,MAAM,EAAE,sCAAsC,CAAC;AACtD,eAAO,MAAM,IAAI,6BAA6B,CAAC;AAC/C,eAAO,MAAM,WAAW,8DAA8D,CAAC;AACvF,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,IAAI,UAA4D,CAAC;AAC9E,eAAO,MAAM,QAAQ,UAA0B,CAAC;AAmFhD,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiH3F"}