@empline/preflight 1.1.30 → 1.1.32
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/api/integration-schema-consistency.d.ts.map +1 -1
- package/dist/checks/api/integration-schema-consistency.js +79 -4
- package/dist/checks/api/integration-schema-consistency.js.map +1 -1
- 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/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/dist/checks/ui/consistent-section-spacing.d.ts +13 -0
- package/dist/checks/ui/consistent-section-spacing.d.ts.map +1 -0
- package/dist/checks/ui/consistent-section-spacing.js +246 -0
- package/dist/checks/ui/consistent-section-spacing.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-schema-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/api/integration-schema-consistency.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"integration-schema-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/api/integration-schema-consistency.ts"],"names":[],"mappings":";AAoBA,eAAO,MAAM,EAAE,uCAAuC,CAAC;AACvD,eAAO,MAAM,IAAI,mCAAmC,CAAC;AACrD,eAAO,MAAM,WAAW,wDAAwD,CAAC;AACjF,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAC9B,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,IAAI,UAA4C,CAAC;AAC9D,eAAO,MAAM,QAAQ,UAA0B,CAAC;AA6FhD,wBAAsB,GAAG,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA4I3F"}
|
|
@@ -14,6 +14,8 @@ exports.run = run;
|
|
|
14
14
|
* - Field name mismatches (e.g., UI uses `wooField` but API expects `sourceField`)
|
|
15
15
|
* - Feature flag mismatches (e.g., UI uses `linkProducts` but API expects `exportListings`)
|
|
16
16
|
* - Missing fields in API schemas that UI depends on
|
|
17
|
+
* - Zod transform() calls that drop fields needed by import APIs or UI
|
|
18
|
+
* - Inconsistency between save endpoint schema and import endpoint schema
|
|
17
19
|
*
|
|
18
20
|
* This helps prevent silent data loss where UI sends fields that get stripped by validation.
|
|
19
21
|
*/
|
|
@@ -36,15 +38,19 @@ const INTEGRATION_CHECKS = [
|
|
|
36
38
|
name: "WooCommerce",
|
|
37
39
|
uiTypePath: "components/woocommerce/types.ts",
|
|
38
40
|
apiRoutePath: "app/api/store/integrations/woocommerce/route.ts",
|
|
41
|
+
importRoutePath: "app/api/store/integrations/woocommerce/import/route.ts",
|
|
39
42
|
fieldMappings: [
|
|
40
|
-
{ uiField: "wooField", apiField: "
|
|
41
|
-
{ uiField: "supercatchField", apiField: "
|
|
43
|
+
{ uiField: "wooField", apiField: "wooField" },
|
|
44
|
+
{ uiField: "supercatchField", apiField: "supercatchField" },
|
|
45
|
+
{ uiField: "required", apiField: "required" },
|
|
42
46
|
{ uiField: "linkProducts", apiField: "linkProducts" },
|
|
43
47
|
{ uiField: "importProducts", apiField: "importProducts" },
|
|
44
48
|
{ uiField: "syncInventory", apiField: "syncInventory" },
|
|
45
49
|
{ uiField: "syncPrices", apiField: "syncPrices" },
|
|
46
50
|
{ uiField: "syncOrders", apiField: "syncOrders" },
|
|
47
51
|
],
|
|
52
|
+
// These fields must be preserved in any Zod transform, not dropped
|
|
53
|
+
requiredPreservedFields: ["wooField", "supercatchField", "required", "id", "transform"],
|
|
48
54
|
},
|
|
49
55
|
{
|
|
50
56
|
name: "Shopify",
|
|
@@ -57,6 +63,39 @@ const INTEGRATION_CHECKS = [
|
|
|
57
63
|
],
|
|
58
64
|
},
|
|
59
65
|
];
|
|
66
|
+
/**
|
|
67
|
+
* Check if a Zod schema transform preserves a field
|
|
68
|
+
* Looks for patterns like `.transform((data) => ({ fieldName: ... }))`
|
|
69
|
+
*/
|
|
70
|
+
function checkTransformPreservesField(content, fieldName) {
|
|
71
|
+
// Look for transform output that includes the field
|
|
72
|
+
// Pattern: transform((data) => ({ ... fieldName: ... }))
|
|
73
|
+
const transformPattern = /\.transform\s*\(\s*\([^)]*\)\s*=>\s*\(\{([\s\S]*?)\}\)\s*\)/g;
|
|
74
|
+
let match;
|
|
75
|
+
while ((match = transformPattern.exec(content)) !== null) {
|
|
76
|
+
const transformBody = match[1];
|
|
77
|
+
// Check if field is in the transform output
|
|
78
|
+
const fieldPattern = new RegExp(`\\b${fieldName}\\s*:`);
|
|
79
|
+
if (fieldPattern.test(transformBody || "")) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// If no transform found, assume field is preserved (passthrough)
|
|
84
|
+
if (!content.includes(".transform(")) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
// Check if the field is at least accepted in the schema input
|
|
88
|
+
const acceptsField = new RegExp(`\\b${fieldName}\\s*:`).test(content);
|
|
89
|
+
return acceptsField;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if import route expects a field
|
|
93
|
+
*/
|
|
94
|
+
function importRouteExpectsField(importContent, fieldName) {
|
|
95
|
+
// Look for fieldName in Zod schema definitions
|
|
96
|
+
const schemaPattern = new RegExp(`\\b${fieldName}\\s*:\\s*z\\.`);
|
|
97
|
+
return schemaPattern.test(importContent);
|
|
98
|
+
}
|
|
60
99
|
async function run() {
|
|
61
100
|
console.log(`\n${console_chars_1.emoji.check} INTEGRATION SCHEMA CONSISTENCY`);
|
|
62
101
|
console.log((0, console_chars_1.createDivider)(65, "heavy"));
|
|
@@ -64,6 +103,7 @@ async function run() {
|
|
|
64
103
|
for (const check of INTEGRATION_CHECKS) {
|
|
65
104
|
const uiPath = path_1.default.join(process.cwd(), check.uiTypePath);
|
|
66
105
|
const apiPath = path_1.default.join(process.cwd(), check.apiRoutePath);
|
|
106
|
+
const importPath = check.importRoutePath ? path_1.default.join(process.cwd(), check.importRoutePath) : null;
|
|
67
107
|
// Check if files exist
|
|
68
108
|
if (!fs_1.default.existsSync(uiPath)) {
|
|
69
109
|
console.log(` Skipping ${check.name}: UI types file not found`);
|
|
@@ -75,6 +115,9 @@ async function run() {
|
|
|
75
115
|
}
|
|
76
116
|
const uiContent = fs_1.default.readFileSync(uiPath, "utf-8");
|
|
77
117
|
const apiContent = fs_1.default.readFileSync(apiPath, "utf-8");
|
|
118
|
+
const importContent = importPath && fs_1.default.existsSync(importPath)
|
|
119
|
+
? fs_1.default.readFileSync(importPath, "utf-8")
|
|
120
|
+
: null;
|
|
78
121
|
console.log(`\n Checking ${check.name}...`);
|
|
79
122
|
// Check field mappings
|
|
80
123
|
for (const mapping of check.fieldMappings) {
|
|
@@ -117,6 +160,37 @@ async function run() {
|
|
|
117
160
|
description: `UI uses 'linkProducts' but API schema uses 'exportListings' - data will be silently dropped`,
|
|
118
161
|
});
|
|
119
162
|
}
|
|
163
|
+
// Check if required fields are preserved in Zod transforms
|
|
164
|
+
if (check.requiredPreservedFields) {
|
|
165
|
+
for (const field of check.requiredPreservedFields) {
|
|
166
|
+
const uiDefinesField = new RegExp(`\\b${field}\\s*[:\\?]`).test(uiContent);
|
|
167
|
+
if (uiDefinesField && !checkTransformPreservesField(apiContent, field)) {
|
|
168
|
+
issues.push({
|
|
169
|
+
integration: check.name,
|
|
170
|
+
type: "field_dropped_by_transform",
|
|
171
|
+
uiField: field,
|
|
172
|
+
apiField: field,
|
|
173
|
+
description: `Field '${field}' is defined in UI types but may be dropped by Zod transform() in API schema`,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Check consistency between save endpoint and import endpoint
|
|
179
|
+
if (importContent && check.requiredPreservedFields) {
|
|
180
|
+
for (const field of check.requiredPreservedFields) {
|
|
181
|
+
const importExpects = importRouteExpectsField(importContent, field);
|
|
182
|
+
const apiPreserves = checkTransformPreservesField(apiContent, field);
|
|
183
|
+
if (importExpects && !apiPreserves) {
|
|
184
|
+
issues.push({
|
|
185
|
+
integration: check.name,
|
|
186
|
+
type: "import_api_mismatch",
|
|
187
|
+
uiField: field,
|
|
188
|
+
apiField: field,
|
|
189
|
+
description: `Import API expects '${field}' but save endpoint may drop it - data saved won't work when imported`,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
120
194
|
}
|
|
121
195
|
// Summary
|
|
122
196
|
console.log(`\n${console_chars_1.emoji.chart} Summary:`);
|
|
@@ -136,8 +210,9 @@ async function run() {
|
|
|
136
210
|
}
|
|
137
211
|
console.log(`\n${console_chars_1.emoji.info} To fix schema mismatches:`);
|
|
138
212
|
console.log(` 1. Ensure API schema accepts the field names UI sends`);
|
|
139
|
-
console.log(` 2.
|
|
140
|
-
console.log(` 3.
|
|
213
|
+
console.log(` 2. When using Zod transform(), preserve ALL fields needed by UI and import APIs`);
|
|
214
|
+
console.log(` 3. Check that save endpoint schema output matches import endpoint schema input`);
|
|
215
|
+
console.log(` 4. Update UI types to match API expectations`);
|
|
141
216
|
console.log(`\n${console_chars_1.emoji.error} INTEGRATION SCHEMA CONSISTENCY FAILED`);
|
|
142
217
|
return { success: false, errors: issues.length, warnings: 0 };
|
|
143
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-schema-consistency.js","sourceRoot":"","sources":["../../../src/checks/api/integration-schema-consistency.ts"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"integration-schema-consistency.js","sourceRoot":"","sources":["../../../src/checks/api/integration-schema-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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Preflight Check: Turbopack Prisma External Packages
|
|
5
|
+
*
|
|
6
|
+
* Category: framework
|
|
7
|
+
* Severity: blocking
|
|
8
|
+
*
|
|
9
|
+
* Ensures that Prisma packages are properly excluded from Turbopack bundling
|
|
10
|
+
* in next.config.js via serverExternalPackages.
|
|
11
|
+
*
|
|
12
|
+
* WHY THIS MATTERS:
|
|
13
|
+
* When Turbopack bundles @prisma/client, it can mangle the internal column name
|
|
14
|
+
* resolution, causing runtime errors like:
|
|
15
|
+
* "The column `(not available)` does not exist in the current database"
|
|
16
|
+
*
|
|
17
|
+
* This happens because Prisma's query builder dynamically resolves column names
|
|
18
|
+
* at runtime using the generated client's metadata. Turbopack's bundling breaks
|
|
19
|
+
* this resolution, especially for columns using @map() in the schema.
|
|
20
|
+
*
|
|
21
|
+
* SOLUTION:
|
|
22
|
+
* Add "@prisma/client" and "prisma" to serverExternalPackages in next.config.js
|
|
23
|
+
* to prevent Turbopack from bundling them.
|
|
24
|
+
*
|
|
25
|
+
* @see https://nextjs.org/docs/app/api-reference/next-config-js/serverExternalPackages
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.tags = exports.description = exports.blocking = exports.category = exports.name = exports.id = void 0;
|
|
29
|
+
exports.run = run;
|
|
30
|
+
const fs_1 = require("fs");
|
|
31
|
+
const path_1 = require("path");
|
|
32
|
+
const console_chars_1 = require("../../utils/console-chars");
|
|
33
|
+
// Preflight metadata
|
|
34
|
+
exports.id = "framework/turbopack-prisma-external";
|
|
35
|
+
exports.name = "Turbopack Prisma External Packages";
|
|
36
|
+
exports.category = "framework";
|
|
37
|
+
exports.blocking = true;
|
|
38
|
+
exports.description = "Ensures Prisma packages are excluded from Turbopack bundling";
|
|
39
|
+
exports.tags = ["turbopack", "prisma", "next.js", "config"];
|
|
40
|
+
const NEXT_CONFIG_PATH = (0, path_1.join)(process.cwd(), "next.config.js");
|
|
41
|
+
const NEXT_CONFIG_TS_PATH = (0, path_1.join)(process.cwd(), "next.config.ts");
|
|
42
|
+
const NEXT_CONFIG_MJS_PATH = (0, path_1.join)(process.cwd(), "next.config.mjs");
|
|
43
|
+
const REQUIRED_EXTERNAL_PACKAGES = ["@prisma/client", "prisma"];
|
|
44
|
+
function findNextConfig() {
|
|
45
|
+
if ((0, fs_1.existsSync)(NEXT_CONFIG_PATH))
|
|
46
|
+
return NEXT_CONFIG_PATH;
|
|
47
|
+
if ((0, fs_1.existsSync)(NEXT_CONFIG_TS_PATH))
|
|
48
|
+
return NEXT_CONFIG_TS_PATH;
|
|
49
|
+
if ((0, fs_1.existsSync)(NEXT_CONFIG_MJS_PATH))
|
|
50
|
+
return NEXT_CONFIG_MJS_PATH;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
function extractServerExternalPackages(content) {
|
|
54
|
+
// Match serverExternalPackages array in various formats:
|
|
55
|
+
// serverExternalPackages: ["sharp", "@prisma/client"]
|
|
56
|
+
// serverExternalPackages: ['sharp', '@prisma/client']
|
|
57
|
+
const patterns = [
|
|
58
|
+
/serverExternalPackages\s*:\s*\[([\s\S]*?)\]/,
|
|
59
|
+
/serverExternalPackages\s*=\s*\[([\s\S]*?)\]/,
|
|
60
|
+
];
|
|
61
|
+
for (const pattern of patterns) {
|
|
62
|
+
const match = content.match(pattern);
|
|
63
|
+
if (match && match[1]) {
|
|
64
|
+
// Extract quoted strings from the array content
|
|
65
|
+
const arrayContent = match[1];
|
|
66
|
+
const packages = [];
|
|
67
|
+
// Match both single and double quoted strings
|
|
68
|
+
const stringPattern = /["']([^"']+)["']/g;
|
|
69
|
+
let stringMatch;
|
|
70
|
+
while ((stringMatch = stringPattern.exec(arrayContent)) !== null) {
|
|
71
|
+
packages.push(stringMatch[1]);
|
|
72
|
+
}
|
|
73
|
+
return packages;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
function checkConfig() {
|
|
79
|
+
const configPath = findNextConfig();
|
|
80
|
+
if (!configPath) {
|
|
81
|
+
return {
|
|
82
|
+
passed: false,
|
|
83
|
+
configPath: null,
|
|
84
|
+
missingPackages: [...REQUIRED_EXTERNAL_PACKAGES],
|
|
85
|
+
foundPackages: [],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const content = (0, fs_1.readFileSync)(configPath, "utf-8");
|
|
89
|
+
const externalPackages = extractServerExternalPackages(content);
|
|
90
|
+
const missingPackages = REQUIRED_EXTERNAL_PACKAGES.filter((pkg) => !externalPackages.includes(pkg));
|
|
91
|
+
const foundPackages = REQUIRED_EXTERNAL_PACKAGES.filter((pkg) => externalPackages.includes(pkg));
|
|
92
|
+
return {
|
|
93
|
+
passed: missingPackages.length === 0,
|
|
94
|
+
configPath,
|
|
95
|
+
missingPackages,
|
|
96
|
+
foundPackages,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function run() {
|
|
100
|
+
console.log(`\n${console_chars_1.emoji.search} TURBOPACK PRISMA EXTERNAL PACKAGES CHECK`);
|
|
101
|
+
console.log((0, console_chars_1.createDivider)(65, "heavy"));
|
|
102
|
+
const result = checkConfig();
|
|
103
|
+
if (!result.configPath) {
|
|
104
|
+
console.log(`\n${console_chars_1.emoji.error} No next.config.js/ts/mjs found in project root.`);
|
|
105
|
+
console.log(` This check requires a Next.js configuration file.`);
|
|
106
|
+
console.log(`\n${console_chars_1.emoji.error} TURBOPACK PRISMA CHECK FAILED`);
|
|
107
|
+
return { success: false, errors: 1, warnings: 0 };
|
|
108
|
+
}
|
|
109
|
+
console.log(`\n Config file: ${result.configPath}`);
|
|
110
|
+
if (result.foundPackages.length > 0) {
|
|
111
|
+
console.log(` ${console_chars_1.emoji.success} Found in serverExternalPackages: ${result.foundPackages.join(", ")}`);
|
|
112
|
+
}
|
|
113
|
+
if (result.passed) {
|
|
114
|
+
console.log(`\n${console_chars_1.emoji.success} TURBOPACK PRISMA CHECK PASSED`);
|
|
115
|
+
console.log(`\nPrisma packages are correctly excluded from Turbopack bundling.`);
|
|
116
|
+
return { success: true, errors: 0, warnings: 0 };
|
|
117
|
+
}
|
|
118
|
+
console.log(`\n${console_chars_1.emoji.error} Missing from serverExternalPackages: ${result.missingPackages.join(", ")}`);
|
|
119
|
+
console.log(`\n${console_chars_1.emoji.info} WHY THIS MATTERS:`);
|
|
120
|
+
console.log(` When Turbopack bundles @prisma/client, it mangles internal column`);
|
|
121
|
+
console.log(` name resolution, causing runtime errors like:`);
|
|
122
|
+
console.log(` "The column \`(not available)\` does not exist in the current database"`);
|
|
123
|
+
console.log(`\n${console_chars_1.emoji.info} FIX:`);
|
|
124
|
+
console.log(` Add the following to serverExternalPackages in next.config.js:`);
|
|
125
|
+
console.log(`\n serverExternalPackages: [`);
|
|
126
|
+
console.log(` "sharp",`);
|
|
127
|
+
console.log(` "@prisma/client",`);
|
|
128
|
+
console.log(` "prisma",`);
|
|
129
|
+
console.log(` ],`);
|
|
130
|
+
console.log(`\n${console_chars_1.emoji.error} TURBOPACK PRISMA CHECK FAILED`);
|
|
131
|
+
return { success: false, errors: result.missingPackages.length, warnings: 0 };
|
|
132
|
+
}
|
|
133
|
+
// Allow direct execution
|
|
134
|
+
if (require.main === module) {
|
|
135
|
+
run()
|
|
136
|
+
.then((result) => {
|
|
137
|
+
process.exit(result.success ? 0 : 1);
|
|
138
|
+
})
|
|
139
|
+
.catch((err) => {
|
|
140
|
+
console.error(`${console_chars_1.emoji.error} Preflight failed:`, err);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=turbopack-prisma-external.js.map
|