@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,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"}