@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.
- package/dist/checks/cart/cart-guest-merge.d.ts +14 -0
- package/dist/checks/cart/cart-guest-merge.d.ts.map +1 -0
- package/dist/checks/cart/cart-guest-merge.js +217 -0
- package/dist/checks/cart/cart-guest-merge.js.map +1 -0
- package/dist/checks/cart/cart-quantity-validation.d.ts +14 -0
- package/dist/checks/cart/cart-quantity-validation.d.ts.map +1 -0
- package/dist/checks/cart/cart-quantity-validation.js +211 -0
- package/dist/checks/cart/cart-quantity-validation.js.map +1 -0
- package/dist/checks/cart/cart-stock-validation.d.ts +14 -0
- package/dist/checks/cart/cart-stock-validation.d.ts.map +1 -0
- package/dist/checks/cart/cart-stock-validation.js +211 -0
- package/dist/checks/cart/cart-stock-validation.js.map +1 -0
- package/dist/checks/checkout/checkout-multi-store.d.ts +14 -0
- package/dist/checks/checkout/checkout-multi-store.d.ts.map +1 -0
- package/dist/checks/checkout/checkout-multi-store.js +209 -0
- package/dist/checks/checkout/checkout-multi-store.js.map +1 -0
- package/dist/checks/checkout/checkout-tax-consistency.d.ts +14 -0
- package/dist/checks/checkout/checkout-tax-consistency.d.ts.map +1 -0
- package/dist/checks/checkout/checkout-tax-consistency.js +212 -0
- package/dist/checks/checkout/checkout-tax-consistency.js.map +1 -0
- package/dist/checks/framework/prisma-version-bugs.d.ts +47 -0
- package/dist/checks/framework/prisma-version-bugs.d.ts.map +1 -0
- package/dist/checks/framework/prisma-version-bugs.js +232 -0
- package/dist/checks/framework/prisma-version-bugs.js.map +1 -0
- package/dist/checks/framework/turbopack-prisma-external.d.ts +37 -0
- package/dist/checks/framework/turbopack-prisma-external.d.ts.map +1 -0
- package/dist/checks/framework/turbopack-prisma-external.js +144 -0
- package/dist/checks/framework/turbopack-prisma-external.js.map +1 -0
- package/dist/checks/listing-approval/image-processing-validation.d.ts +14 -0
- package/dist/checks/listing-approval/image-processing-validation.d.ts.map +1 -0
- package/dist/checks/listing-approval/image-processing-validation.js +198 -0
- package/dist/checks/listing-approval/image-processing-validation.js.map +1 -0
- package/dist/checks/listing-approval/r2-metadata-application.d.ts +14 -0
- package/dist/checks/listing-approval/r2-metadata-application.d.ts.map +1 -0
- package/dist/checks/listing-approval/r2-metadata-application.js +261 -0
- package/dist/checks/listing-approval/r2-metadata-application.js.map +1 -0
- package/dist/checks/listing-approval/seo-metadata-consistency.d.ts +14 -0
- package/dist/checks/listing-approval/seo-metadata-consistency.d.ts.map +1 -0
- package/dist/checks/listing-approval/seo-metadata-consistency.js +408 -0
- package/dist/checks/listing-approval/seo-metadata-consistency.js.map +1 -0
- package/dist/checks/order/order-inventory-guard.d.ts +14 -0
- package/dist/checks/order/order-inventory-guard.d.ts.map +1 -0
- package/dist/checks/order/order-inventory-guard.js +212 -0
- package/dist/checks/order/order-inventory-guard.js.map +1 -0
- package/dist/checks/order/order-status-validation.d.ts +14 -0
- package/dist/checks/order/order-status-validation.d.ts.map +1 -0
- package/dist/checks/order/order-status-validation.js +218 -0
- package/dist/checks/order/order-status-validation.js.map +1 -0
- package/dist/checks/order/shipping-address-validation.d.ts +14 -0
- package/dist/checks/order/shipping-address-validation.d.ts.map +1 -0
- package/dist/checks/order/shipping-address-validation.js +213 -0
- package/dist/checks/order/shipping-address-validation.js.map +1 -0
- package/dist/checks/ui/batch-progress-consistency.d.ts +13 -0
- package/dist/checks/ui/batch-progress-consistency.d.ts.map +1 -0
- package/dist/checks/ui/batch-progress-consistency.js +200 -0
- package/dist/checks/ui/batch-progress-consistency.js.map +1 -0
- package/dist/checks/ui/bulk-action-progress-feedback.d.ts +13 -0
- package/dist/checks/ui/bulk-action-progress-feedback.d.ts.map +1 -0
- package/dist/checks/ui/bulk-action-progress-feedback.js +273 -0
- package/dist/checks/ui/bulk-action-progress-feedback.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,212 @@
|
|
|
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 Tax Consistency Preflight
|
|
11
|
+
*
|
|
12
|
+
* Validates that tax calculations are consistent and correct:
|
|
13
|
+
* 1. Tax calculated server-side (not client-side only)
|
|
14
|
+
* 2. Tax rate applied consistently across checkout flow
|
|
15
|
+
* 3. Tax included in order total calculation
|
|
16
|
+
* 4. Tax amount stored in order record
|
|
17
|
+
* 5. Total = subtotal + shipping + tax
|
|
18
|
+
*
|
|
19
|
+
* Prevents:
|
|
20
|
+
* - Client-side tax manipulation
|
|
21
|
+
* - Inconsistent tax rates
|
|
22
|
+
* - Missing tax in order totals
|
|
23
|
+
*/
|
|
24
|
+
const fs_1 = __importDefault(require("fs"));
|
|
25
|
+
const path_1 = __importDefault(require("path"));
|
|
26
|
+
const glob_1 = require("glob");
|
|
27
|
+
const console_chars_1 = require("../../utils/console-chars");
|
|
28
|
+
// METADATA - Required for plugin loader discovery
|
|
29
|
+
exports.id = "checkout/checkout-tax-consistency";
|
|
30
|
+
exports.name = "Checkout Tax Consistency";
|
|
31
|
+
exports.description = "Validates tax calculations are consistent and server-side";
|
|
32
|
+
exports.category = "checkout";
|
|
33
|
+
exports.blocking = true;
|
|
34
|
+
exports.tags = ["checkout", "tax", "pricing", "validation", "ecommerce"];
|
|
35
|
+
exports.requires = ["trading-card-system"];
|
|
36
|
+
/**
|
|
37
|
+
* Files to check
|
|
38
|
+
*/
|
|
39
|
+
const CHECKOUT_FILES = [
|
|
40
|
+
"app/api/orders/create/route.ts",
|
|
41
|
+
"app/api/orders/capture/route.ts",
|
|
42
|
+
"app/api/orders/process/route.ts",
|
|
43
|
+
"lib/order-service.ts",
|
|
44
|
+
"lib/pricing*.ts",
|
|
45
|
+
"lib/tax*.ts",
|
|
46
|
+
];
|
|
47
|
+
const SCHEMA_FILES = [
|
|
48
|
+
"prisma/schema.prisma",
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Required patterns
|
|
52
|
+
*/
|
|
53
|
+
const REQUIRED_PATTERNS = {
|
|
54
|
+
// Server-side tax calculation
|
|
55
|
+
serverSideTaxCalc: {
|
|
56
|
+
pattern: /tax\s*=.*(?:subtotal|total).*\*|taxRate|calculateTax|getTaxAmount/i,
|
|
57
|
+
description: "Server-side tax calculation",
|
|
58
|
+
critical: true,
|
|
59
|
+
},
|
|
60
|
+
// Tax rate constant or config
|
|
61
|
+
taxRateDefinition: {
|
|
62
|
+
pattern: /TAX_RATE|taxRate\s*[:=]\s*0\.\d+|0\.08|8\s*%|tax.*percent/i,
|
|
63
|
+
description: "Tax rate definition/constant",
|
|
64
|
+
critical: true,
|
|
65
|
+
},
|
|
66
|
+
// Tax in total calculation
|
|
67
|
+
taxInTotalCalc: {
|
|
68
|
+
pattern: /total\s*=.*\+.*tax|subtotal.*shipping.*tax|totalAmount.*tax/i,
|
|
69
|
+
description: "Tax included in total calculation",
|
|
70
|
+
critical: true,
|
|
71
|
+
},
|
|
72
|
+
// Tax field in order schema/creation
|
|
73
|
+
taxInOrderRecord: {
|
|
74
|
+
pattern: /tax:\s*(?:Decimal|Float|Number)|tax\s*Decimal|data:\s*\{[^}]*tax:/i,
|
|
75
|
+
description: "Tax amount stored in order record",
|
|
76
|
+
critical: true,
|
|
77
|
+
},
|
|
78
|
+
// Decimal precision for monetary values
|
|
79
|
+
decimalPrecision: {
|
|
80
|
+
pattern: /Decimal|toFixed\s*\(\s*2\s*\)|\.round\(|monetary|currency/i,
|
|
81
|
+
description: "Decimal precision for monetary calculations",
|
|
82
|
+
critical: false,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Anti-patterns
|
|
87
|
+
*/
|
|
88
|
+
const ANTI_PATTERNS = {
|
|
89
|
+
// Tax from client request
|
|
90
|
+
taxFromClient: {
|
|
91
|
+
pattern: /req\.body\.tax|request\.json\(\).*tax|body\.tax\s*\|\||tax:\s*body\.tax/,
|
|
92
|
+
description: "Tax value accepted from client (should be calculated server-side)",
|
|
93
|
+
},
|
|
94
|
+
// Tax calculation on client only
|
|
95
|
+
clientOnlyTax: {
|
|
96
|
+
pattern: /['"]use client['"]\s*[\s\S]*?taxRate\s*\*\s*subtotal/,
|
|
97
|
+
description: "Tax calculated only on client side",
|
|
98
|
+
},
|
|
99
|
+
// Floating point math for money
|
|
100
|
+
floatMathForMoney: {
|
|
101
|
+
pattern: /(?:price|total|subtotal|tax)\s*\*\s*(?:price|quantity)(?!.*Decimal)/,
|
|
102
|
+
description: "Floating point math for monetary values (use Decimal)",
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
async function run() {
|
|
106
|
+
console.log(`\n${console_chars_1.emoji.chart} CHECKOUT TAX CONSISTENCY CHECK`);
|
|
107
|
+
console.log((0, console_chars_1.createDivider)(65, "heavy"));
|
|
108
|
+
const issues = [];
|
|
109
|
+
const filesChecked = [];
|
|
110
|
+
// Find files
|
|
111
|
+
const allPatterns = [...CHECKOUT_FILES, ...SCHEMA_FILES];
|
|
112
|
+
const allFiles = [];
|
|
113
|
+
for (const pattern of allPatterns) {
|
|
114
|
+
const matches = await (0, glob_1.glob)(pattern, { cwd: process.cwd() });
|
|
115
|
+
allFiles.push(...matches);
|
|
116
|
+
}
|
|
117
|
+
const uniqueFiles = [...new Set(allFiles)];
|
|
118
|
+
console.log(`\n${console_chars_1.emoji.search} Scanning ${uniqueFiles.length} checkout/pricing files...`);
|
|
119
|
+
if (uniqueFiles.length === 0) {
|
|
120
|
+
console.log(`\n${console_chars_1.emoji.warning} No checkout files found - skipping check`);
|
|
121
|
+
return { success: true, errors: 0, warnings: 1 };
|
|
122
|
+
}
|
|
123
|
+
// Combine content
|
|
124
|
+
let combinedContent = "";
|
|
125
|
+
for (const relativePath of uniqueFiles) {
|
|
126
|
+
const filePath = path_1.default.join(process.cwd(), relativePath);
|
|
127
|
+
if (!fs_1.default.existsSync(filePath))
|
|
128
|
+
continue;
|
|
129
|
+
filesChecked.push(relativePath);
|
|
130
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
131
|
+
combinedContent += content + "\n";
|
|
132
|
+
console.log(` ${console_chars_1.emoji.file} ${relativePath}`);
|
|
133
|
+
}
|
|
134
|
+
// Check required patterns
|
|
135
|
+
console.log(`\n${console_chars_1.emoji.search} Checking tax calculation patterns...`);
|
|
136
|
+
for (const [name, check] of Object.entries(REQUIRED_PATTERNS)) {
|
|
137
|
+
const hasPattern = check.pattern.test(combinedContent);
|
|
138
|
+
if (!hasPattern) {
|
|
139
|
+
issues.push({
|
|
140
|
+
file: "checkout files",
|
|
141
|
+
type: "missing-pattern",
|
|
142
|
+
pattern: name,
|
|
143
|
+
description: check.description,
|
|
144
|
+
critical: check.critical,
|
|
145
|
+
});
|
|
146
|
+
const icon = check.critical ? console_chars_1.emoji.error : console_chars_1.emoji.warning;
|
|
147
|
+
console.log(` ${icon} Missing: ${check.description}`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console.log(` ${console_chars_1.emoji.success} Found: ${check.description}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Check anti-patterns
|
|
154
|
+
console.log(`\n${console_chars_1.emoji.search} Checking for anti-patterns...`);
|
|
155
|
+
for (const relativePath of filesChecked) {
|
|
156
|
+
const filePath = path_1.default.join(process.cwd(), relativePath);
|
|
157
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
158
|
+
for (const [name, check] of Object.entries(ANTI_PATTERNS)) {
|
|
159
|
+
if (check.pattern.test(content)) {
|
|
160
|
+
issues.push({
|
|
161
|
+
file: relativePath,
|
|
162
|
+
type: "anti-pattern",
|
|
163
|
+
pattern: name,
|
|
164
|
+
description: check.description,
|
|
165
|
+
critical: true,
|
|
166
|
+
});
|
|
167
|
+
console.log(` ${console_chars_1.emoji.error} ${relativePath}: ${check.description}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Summary
|
|
172
|
+
const criticalIssues = issues.filter((i) => i.critical);
|
|
173
|
+
const warningIssues = issues.filter((i) => !i.critical);
|
|
174
|
+
console.log(`\n${console_chars_1.emoji.chart} Summary:`);
|
|
175
|
+
console.log(` Files checked: ${filesChecked.length}`);
|
|
176
|
+
console.log(` Critical issues: ${criticalIssues.length}`);
|
|
177
|
+
console.log(` Warning issues: ${warningIssues.length}`);
|
|
178
|
+
if (issues.length === 0) {
|
|
179
|
+
console.log(`\n${console_chars_1.emoji.success} CHECKOUT TAX CONSISTENCY CHECK PASSED`);
|
|
180
|
+
return { success: true, errors: 0, warnings: 0 };
|
|
181
|
+
}
|
|
182
|
+
if (criticalIssues.length > 0) {
|
|
183
|
+
console.log(`\n${console_chars_1.emoji.error} Critical issues:`);
|
|
184
|
+
for (const issue of criticalIssues) {
|
|
185
|
+
console.log(` ${issue.file}: ${issue.description}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
console.log(`\n${console_chars_1.emoji.info} Tax consistency requirements:`);
|
|
189
|
+
console.log(` 1. Tax must be calculated server-side`);
|
|
190
|
+
console.log(` 2. Tax rate must be defined as constant/config`);
|
|
191
|
+
console.log(` 3. Total = subtotal + shipping + tax`);
|
|
192
|
+
console.log(` 4. Tax amount stored in order record`);
|
|
193
|
+
console.log(` 5. Use Decimal for monetary precision`);
|
|
194
|
+
if (criticalIssues.length > 0) {
|
|
195
|
+
console.log(`\n${console_chars_1.emoji.error} CHECKOUT TAX CONSISTENCY CHECK FAILED`);
|
|
196
|
+
return { success: false, errors: criticalIssues.length, warnings: warningIssues.length };
|
|
197
|
+
}
|
|
198
|
+
console.log(`\n${console_chars_1.emoji.warning} CHECKOUT TAX CONSISTENCY CHECK PASSED WITH WARNINGS`);
|
|
199
|
+
return { success: true, errors: 0, warnings: warningIssues.length };
|
|
200
|
+
}
|
|
201
|
+
// Allow direct execution
|
|
202
|
+
if (require.main === module) {
|
|
203
|
+
run()
|
|
204
|
+
.then((result) => {
|
|
205
|
+
process.exit(result.success ? 0 : 1);
|
|
206
|
+
})
|
|
207
|
+
.catch((err) => {
|
|
208
|
+
console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=checkout-tax-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-tax-consistency.js","sourceRoot":"","sources":["../../../src/checks/checkout/checkout-tax-consistency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Preflight Check: Prisma Version Known Bugs
|
|
4
|
+
*
|
|
5
|
+
* Category: framework
|
|
6
|
+
* Severity: blocking
|
|
7
|
+
*
|
|
8
|
+
* Checks for known problematic Prisma versions that have critical bugs.
|
|
9
|
+
* This preflight catches version-specific issues that wouldn't be flagged
|
|
10
|
+
* by simple "outdated package" checks.
|
|
11
|
+
*
|
|
12
|
+
* KNOWN ISSUES:
|
|
13
|
+
* - Prisma 7.0.0-7.2.x: @map() decorator bug with driver adapters (GitHub #27357)
|
|
14
|
+
* Causes "The column `(not available)` does not exist" errors at runtime
|
|
15
|
+
* when using @prisma/adapter-pg with models that have @map() annotations.
|
|
16
|
+
* Fixed in 7.3.0+
|
|
17
|
+
*
|
|
18
|
+
* @see https://github.com/prisma/prisma/issues/27357
|
|
19
|
+
*/
|
|
20
|
+
export declare const id = "framework/prisma-version-bugs";
|
|
21
|
+
export declare const name = "Prisma Version Known Bugs";
|
|
22
|
+
export declare const category = "framework";
|
|
23
|
+
export declare const blocking = true;
|
|
24
|
+
export declare const description = "Checks for Prisma versions with known critical bugs";
|
|
25
|
+
export declare const tags: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Dev version overrides - when a dev version is intentionally used to fix a bug,
|
|
28
|
+
* document it here so the package update checker doesn't flag it for downgrade.
|
|
29
|
+
*
|
|
30
|
+
* Format: { package: "prisma", minDevVersion: "7.3.0-dev.7", reason: "GH-27357 fix" }
|
|
31
|
+
*/
|
|
32
|
+
interface DevOverride {
|
|
33
|
+
package: string;
|
|
34
|
+
minDevVersion: string;
|
|
35
|
+
reason: string;
|
|
36
|
+
bugId: string;
|
|
37
|
+
}
|
|
38
|
+
declare const APPROVED_DEV_OVERRIDES: DevOverride[];
|
|
39
|
+
declare function isDevVersion(version: string): boolean;
|
|
40
|
+
declare function getApprovedDevOverride(version: string): DevOverride | null;
|
|
41
|
+
export { APPROVED_DEV_OVERRIDES, getApprovedDevOverride, isDevVersion };
|
|
42
|
+
export declare function run(): Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
errors: number;
|
|
45
|
+
warnings: number;
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=prisma-version-bugs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-version-bugs.d.ts","sourceRoot":"","sources":["../../../src/checks/framework/prisma-version-bugs.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAQH,eAAO,MAAM,EAAE,kCAAkC,CAAC;AAClD,eAAO,MAAM,IAAI,8BAA8B,CAAC;AAChD,eAAO,MAAM,QAAQ,cAAc,CAAC;AACpC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,wDAAwD,CAAC;AACjF,eAAO,MAAM,IAAI,UAAmD,CAAC;AAErE;;;;;GAKG;AACH,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,sBAAsB,EAAE,WAAW,EAOxC,CAAC;AA+GF,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA4BnE;AAGD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,YAAY,EAAE,CAAC;AAqCxE,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA8C3F"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Preflight Check: Prisma Version Known Bugs
|
|
5
|
+
*
|
|
6
|
+
* Category: framework
|
|
7
|
+
* Severity: blocking
|
|
8
|
+
*
|
|
9
|
+
* Checks for known problematic Prisma versions that have critical bugs.
|
|
10
|
+
* This preflight catches version-specific issues that wouldn't be flagged
|
|
11
|
+
* by simple "outdated package" checks.
|
|
12
|
+
*
|
|
13
|
+
* KNOWN ISSUES:
|
|
14
|
+
* - Prisma 7.0.0-7.2.x: @map() decorator bug with driver adapters (GitHub #27357)
|
|
15
|
+
* Causes "The column `(not available)` does not exist" errors at runtime
|
|
16
|
+
* when using @prisma/adapter-pg with models that have @map() annotations.
|
|
17
|
+
* Fixed in 7.3.0+
|
|
18
|
+
*
|
|
19
|
+
* @see https://github.com/prisma/prisma/issues/27357
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.APPROVED_DEV_OVERRIDES = exports.tags = exports.description = exports.blocking = exports.category = exports.name = exports.id = void 0;
|
|
23
|
+
exports.getApprovedDevOverride = getApprovedDevOverride;
|
|
24
|
+
exports.isDevVersion = isDevVersion;
|
|
25
|
+
exports.run = run;
|
|
26
|
+
const fs_1 = require("fs");
|
|
27
|
+
const path_1 = require("path");
|
|
28
|
+
const console_chars_1 = require("../../utils/console-chars");
|
|
29
|
+
// Preflight metadata
|
|
30
|
+
exports.id = "framework/prisma-version-bugs";
|
|
31
|
+
exports.name = "Prisma Version Known Bugs";
|
|
32
|
+
exports.category = "framework";
|
|
33
|
+
exports.blocking = true;
|
|
34
|
+
exports.description = "Checks for Prisma versions with known critical bugs";
|
|
35
|
+
exports.tags = ["prisma", "version", "bugs", "driver-adapters"];
|
|
36
|
+
const APPROVED_DEV_OVERRIDES = [
|
|
37
|
+
{
|
|
38
|
+
package: "prisma",
|
|
39
|
+
minDevVersion: "7.3.0-dev.7",
|
|
40
|
+
reason: "@map() decorator fix with driver adapters",
|
|
41
|
+
bugId: "GH-27357",
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
exports.APPROVED_DEV_OVERRIDES = APPROVED_DEV_OVERRIDES;
|
|
45
|
+
// Known Prisma bugs with version ranges
|
|
46
|
+
const KNOWN_BUGS = [
|
|
47
|
+
{
|
|
48
|
+
id: "GH-27357",
|
|
49
|
+
affectedVersions: (version) => {
|
|
50
|
+
// Affected: 7.0.0 to 7.2.x (stable versions)
|
|
51
|
+
// Fixed in: 7.3.0+ (or 7.3.0-dev.7+)
|
|
52
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-dev\.(\d+))?/);
|
|
53
|
+
if (!match)
|
|
54
|
+
return false;
|
|
55
|
+
const major = parseInt(match[1], 10);
|
|
56
|
+
const minor = parseInt(match[2], 10);
|
|
57
|
+
const devNum = match[4] ? parseInt(match[4], 10) : null;
|
|
58
|
+
// v7.0.0 - v7.2.x are affected
|
|
59
|
+
if (major === 7 && minor >= 0 && minor <= 2) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
// v7.3.0-dev.0 through v7.3.0-dev.6 are still affected
|
|
63
|
+
if (major === 7 && minor === 3 && devNum !== null && devNum < 7) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
},
|
|
68
|
+
condition: () => {
|
|
69
|
+
// Only applies when using driver adapters
|
|
70
|
+
return usesDriverAdapter();
|
|
71
|
+
},
|
|
72
|
+
title: "@map() decorator bug with driver adapters",
|
|
73
|
+
description: 'Causes "The column `(not available)` does not exist" runtime errors ' +
|
|
74
|
+
"when using @prisma/adapter-pg with models that have @map() annotations.",
|
|
75
|
+
fixedIn: "7.3.0 (or 7.3.0-dev.7+)",
|
|
76
|
+
reference: "https://github.com/prisma/prisma/issues/27357",
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
function getPackageJsonPath() {
|
|
80
|
+
return (0, path_1.join)(process.cwd(), "package.json");
|
|
81
|
+
}
|
|
82
|
+
function getPrismaVersion() {
|
|
83
|
+
const pkgPath = getPackageJsonPath();
|
|
84
|
+
if (!(0, fs_1.existsSync)(pkgPath))
|
|
85
|
+
return null;
|
|
86
|
+
try {
|
|
87
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(pkgPath, "utf-8"));
|
|
88
|
+
const version = pkg.dependencies?.prisma ||
|
|
89
|
+
pkg.devDependencies?.prisma ||
|
|
90
|
+
pkg.dependencies?.["@prisma/client"] ||
|
|
91
|
+
pkg.devDependencies?.["@prisma/client"];
|
|
92
|
+
if (!version)
|
|
93
|
+
return null;
|
|
94
|
+
// Remove version prefixes like ^ or ~
|
|
95
|
+
return version.replace(/^[\^~]/, "");
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function usesDriverAdapter() {
|
|
102
|
+
// Check if @prisma/adapter-pg (or other adapters) is in dependencies
|
|
103
|
+
const pkgPath = getPackageJsonPath();
|
|
104
|
+
if (!(0, fs_1.existsSync)(pkgPath))
|
|
105
|
+
return false;
|
|
106
|
+
try {
|
|
107
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(pkgPath, "utf-8"));
|
|
108
|
+
const allDeps = {
|
|
109
|
+
...pkg.dependencies,
|
|
110
|
+
...pkg.devDependencies,
|
|
111
|
+
};
|
|
112
|
+
// Check for known driver adapter packages
|
|
113
|
+
const adapterPackages = [
|
|
114
|
+
"@prisma/adapter-pg",
|
|
115
|
+
"@prisma/adapter-neon",
|
|
116
|
+
"@prisma/adapter-planetscale",
|
|
117
|
+
"@prisma/adapter-libsql",
|
|
118
|
+
"@prisma/adapter-d1",
|
|
119
|
+
];
|
|
120
|
+
return adapterPackages.some((adapter) => adapter in allDeps);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function isDevVersion(version) {
|
|
127
|
+
return version.includes("-dev.") || version.includes("-alpha") || version.includes("-beta");
|
|
128
|
+
}
|
|
129
|
+
function getApprovedDevOverride(version) {
|
|
130
|
+
if (!isDevVersion(version))
|
|
131
|
+
return null;
|
|
132
|
+
// Find matching approved override
|
|
133
|
+
for (const override of APPROVED_DEV_OVERRIDES) {
|
|
134
|
+
if (override.package !== "prisma")
|
|
135
|
+
continue;
|
|
136
|
+
// Parse version to compare
|
|
137
|
+
const minMatch = override.minDevVersion.match(/^(\d+)\.(\d+)\.(\d+)-dev\.(\d+)/);
|
|
138
|
+
const curMatch = version.match(/^(\d+)\.(\d+)\.(\d+)-dev\.(\d+)/);
|
|
139
|
+
if (!minMatch || !curMatch)
|
|
140
|
+
continue;
|
|
141
|
+
const [, minMaj, minMin, minPatch, minDev] = minMatch.map(Number);
|
|
142
|
+
const [, curMaj, curMin, curPatch, curDev] = curMatch.map(Number);
|
|
143
|
+
// Check if current version is >= minimum approved version
|
|
144
|
+
if (curMaj > minMaj ||
|
|
145
|
+
(curMaj === minMaj && curMin > minMin) ||
|
|
146
|
+
(curMaj === minMaj && curMin === minMin && curPatch > minPatch) ||
|
|
147
|
+
(curMaj === minMaj && curMin === minMin && curPatch === minPatch && curDev >= minDev)) {
|
|
148
|
+
return override;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function checkPrismaVersion() {
|
|
154
|
+
const version = getPrismaVersion();
|
|
155
|
+
const usesAdapter = usesDriverAdapter();
|
|
156
|
+
if (!version) {
|
|
157
|
+
return {
|
|
158
|
+
passed: true,
|
|
159
|
+
version: null,
|
|
160
|
+
triggeredBugs: [],
|
|
161
|
+
usesAdapter,
|
|
162
|
+
approvedDevOverride: null,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const triggeredBugs = KNOWN_BUGS.filter((bug) => {
|
|
166
|
+
// Check if version is affected
|
|
167
|
+
if (!bug.affectedVersions(version))
|
|
168
|
+
return false;
|
|
169
|
+
// Check additional conditions if present
|
|
170
|
+
if (bug.condition && !bug.condition())
|
|
171
|
+
return false;
|
|
172
|
+
return true;
|
|
173
|
+
});
|
|
174
|
+
const approvedDevOverride = getApprovedDevOverride(version);
|
|
175
|
+
return {
|
|
176
|
+
passed: triggeredBugs.length === 0,
|
|
177
|
+
version,
|
|
178
|
+
triggeredBugs,
|
|
179
|
+
usesAdapter,
|
|
180
|
+
approvedDevOverride,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async function run() {
|
|
184
|
+
console.log(`\n${console_chars_1.emoji.search} PRISMA VERSION KNOWN BUGS CHECK`);
|
|
185
|
+
console.log((0, console_chars_1.createDivider)(65, "heavy"));
|
|
186
|
+
const result = checkPrismaVersion();
|
|
187
|
+
if (!result.version) {
|
|
188
|
+
console.log(`\n ${console_chars_1.emoji.warning} Prisma not found in package.json`);
|
|
189
|
+
console.log(` Skipping version check.`);
|
|
190
|
+
console.log(`\n${console_chars_1.emoji.success} PRISMA VERSION CHECK PASSED (no Prisma found)`);
|
|
191
|
+
return { success: true, errors: 0, warnings: 0 };
|
|
192
|
+
}
|
|
193
|
+
console.log(`\n Prisma version: ${result.version}`);
|
|
194
|
+
console.log(` Uses driver adapter: ${result.usesAdapter ? "Yes" : "No"}`);
|
|
195
|
+
// Show dev override info if applicable
|
|
196
|
+
if (result.approvedDevOverride) {
|
|
197
|
+
console.log(` Approved dev override: Yes`);
|
|
198
|
+
console.log(` Reason: ${result.approvedDevOverride.reason} (${result.approvedDevOverride.bugId})`);
|
|
199
|
+
console.log(` Note: Do not downgrade to stable until ${result.approvedDevOverride.minDevVersion.split("-")[0]} stable is released`);
|
|
200
|
+
}
|
|
201
|
+
if (result.passed) {
|
|
202
|
+
console.log(`\n${console_chars_1.emoji.success} PRISMA VERSION CHECK PASSED`);
|
|
203
|
+
console.log(`\nNo known critical bugs affect this Prisma version.`);
|
|
204
|
+
return { success: true, errors: 0, warnings: 0 };
|
|
205
|
+
}
|
|
206
|
+
console.log(`\n${console_chars_1.emoji.error} Found ${result.triggeredBugs.length} known bug(s) affecting this version:`);
|
|
207
|
+
for (const bug of result.triggeredBugs) {
|
|
208
|
+
console.log(`\n [${bug.id}] ${bug.title}`);
|
|
209
|
+
console.log(` ${bug.description}`);
|
|
210
|
+
console.log(` Fixed in: ${bug.fixedIn}`);
|
|
211
|
+
console.log(` Reference: ${bug.reference}`);
|
|
212
|
+
}
|
|
213
|
+
console.log(`\n${console_chars_1.emoji.info} FIX:`);
|
|
214
|
+
console.log(` Upgrade Prisma to a version with the fix:`);
|
|
215
|
+
console.log(` pnpm add prisma@latest @prisma/client@latest @prisma/adapter-pg@latest`);
|
|
216
|
+
console.log(`\n Or if the fix is only in dev versions:`);
|
|
217
|
+
console.log(` pnpm add prisma@dev @prisma/client@dev @prisma/adapter-pg@dev`);
|
|
218
|
+
console.log(`\n${console_chars_1.emoji.error} PRISMA VERSION CHECK FAILED`);
|
|
219
|
+
return { success: false, errors: result.triggeredBugs.length, warnings: 0 };
|
|
220
|
+
}
|
|
221
|
+
// Allow direct execution
|
|
222
|
+
if (require.main === module) {
|
|
223
|
+
run()
|
|
224
|
+
.then((result) => {
|
|
225
|
+
process.exit(result.success ? 0 : 1);
|
|
226
|
+
})
|
|
227
|
+
.catch((err) => {
|
|
228
|
+
console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
|
|
229
|
+
process.exit(1);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=prisma-version-bugs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-version-bugs.js","sourceRoot":"","sources":["../../../src/checks/framework/prisma-version-bugs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Preflight Check: Turbopack Prisma External Packages
|
|
4
|
+
*
|
|
5
|
+
* Category: framework
|
|
6
|
+
* Severity: blocking
|
|
7
|
+
*
|
|
8
|
+
* Ensures that Prisma packages are properly excluded from Turbopack bundling
|
|
9
|
+
* in next.config.js via serverExternalPackages.
|
|
10
|
+
*
|
|
11
|
+
* WHY THIS MATTERS:
|
|
12
|
+
* When Turbopack bundles @prisma/client, it can mangle the internal column name
|
|
13
|
+
* resolution, causing runtime errors like:
|
|
14
|
+
* "The column `(not available)` does not exist in the current database"
|
|
15
|
+
*
|
|
16
|
+
* This happens because Prisma's query builder dynamically resolves column names
|
|
17
|
+
* at runtime using the generated client's metadata. Turbopack's bundling breaks
|
|
18
|
+
* this resolution, especially for columns using @map() in the schema.
|
|
19
|
+
*
|
|
20
|
+
* SOLUTION:
|
|
21
|
+
* Add "@prisma/client" and "prisma" to serverExternalPackages in next.config.js
|
|
22
|
+
* to prevent Turbopack from bundling them.
|
|
23
|
+
*
|
|
24
|
+
* @see https://nextjs.org/docs/app/api-reference/next-config-js/serverExternalPackages
|
|
25
|
+
*/
|
|
26
|
+
export declare const id = "framework/turbopack-prisma-external";
|
|
27
|
+
export declare const name = "Turbopack Prisma External Packages";
|
|
28
|
+
export declare const category = "framework";
|
|
29
|
+
export declare const blocking = true;
|
|
30
|
+
export declare const description = "Ensures Prisma packages are excluded from Turbopack bundling";
|
|
31
|
+
export declare const tags: string[];
|
|
32
|
+
export declare function run(): Promise<{
|
|
33
|
+
success: boolean;
|
|
34
|
+
errors: number;
|
|
35
|
+
warnings: number;
|
|
36
|
+
}>;
|
|
37
|
+
//# sourceMappingURL=turbopack-prisma-external.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turbopack-prisma-external.d.ts","sourceRoot":"","sources":["../../../src/checks/framework/turbopack-prisma-external.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,eAAO,MAAM,EAAE,wCAAwC,CAAC;AACxD,eAAO,MAAM,IAAI,uCAAuC,CAAC;AACzD,eAAO,MAAM,QAAQ,cAAc,CAAC;AACpC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,iEAAiE,CAAC;AAC1F,eAAO,MAAM,IAAI,UAA+C,CAAC;AAmFjE,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC3F"}
|