@opensaas/stack-cli 0.20.0 → 0.21.0
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/commands/generate.d.ts +8 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +32 -0
- package/dist/commands/generate.js.map +1 -1
- package/dist/generator/context.d.ts.map +1 -1
- package/dist/generator/context.js +2 -4
- package/dist/generator/context.js.map +1 -1
- package/dist/generator/lists.d.ts.map +1 -1
- package/dist/generator/lists.js +16 -5
- package/dist/generator/lists.js.map +1 -1
- package/dist/generator/prisma-config.d.ts +15 -2
- package/dist/generator/prisma-config.d.ts.map +1 -1
- package/dist/generator/prisma-config.js +23 -4
- package/dist/generator/prisma-config.js.map +1 -1
- package/dist/generator/prisma.d.ts.map +1 -1
- package/dist/generator/prisma.js +42 -368
- package/dist/generator/prisma.js.map +1 -1
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/generator/types.js +24 -4
- package/dist/generator/types.js.map +1 -1
- package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
- package/dist/mcp/lib/documentation-provider.js +36 -39
- package/dist/mcp/lib/documentation-provider.js.map +1 -1
- package/dist/migration/generators/migration-generator.d.ts.map +1 -1
- package/dist/migration/generators/migration-generator.js +2 -4
- package/dist/migration/generators/migration-generator.js.map +1 -1
- package/package.json +4 -4
package/dist/generator/prisma.js
CHANGED
|
@@ -4,10 +4,6 @@ import * as path from 'path';
|
|
|
4
4
|
* Map OpenSaas field types to Prisma field types
|
|
5
5
|
*/
|
|
6
6
|
function mapFieldTypeToPrisma(fieldName, field, provider, listName) {
|
|
7
|
-
// Relationships are handled separately
|
|
8
|
-
if (field.type === 'relationship') {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
7
|
// Use field's own Prisma type generator if available
|
|
12
8
|
if (field.getPrismaType) {
|
|
13
9
|
const result = field.getPrismaType(fieldName, provider, listName);
|
|
@@ -20,16 +16,6 @@ function mapFieldTypeToPrisma(fieldName, field, provider, listName) {
|
|
|
20
16
|
* Get field modifiers (?, @default, @unique, etc.)
|
|
21
17
|
*/
|
|
22
18
|
function getFieldModifiers(fieldName, field, provider, listName) {
|
|
23
|
-
// Handle relationships separately
|
|
24
|
-
if (field.type === 'relationship') {
|
|
25
|
-
const relField = field;
|
|
26
|
-
if (relField.many) {
|
|
27
|
-
return '[]';
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
return '?';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
19
|
// Use field's own Prisma type generator if available
|
|
34
20
|
if (field.getPrismaType) {
|
|
35
21
|
const result = field.getPrismaType(fieldName, provider, listName);
|
|
@@ -38,148 +24,12 @@ function getFieldModifiers(fieldName, field, provider, listName) {
|
|
|
38
24
|
// Fallback for fields without generator methods
|
|
39
25
|
return '';
|
|
40
26
|
}
|
|
41
|
-
/**
|
|
42
|
-
* Parse relationship ref to get target list and optional field
|
|
43
|
-
* Supports both 'ListName.fieldName' and 'ListName' formats
|
|
44
|
-
*/
|
|
45
|
-
function parseRelationshipRef(ref) {
|
|
46
|
-
const parts = ref.split('.');
|
|
47
|
-
if (parts.length === 1) {
|
|
48
|
-
// List-only ref (e.g., 'Term')
|
|
49
|
-
const list = parts[0];
|
|
50
|
-
if (!list) {
|
|
51
|
-
throw new Error(`Invalid relationship ref: ${ref}`);
|
|
52
|
-
}
|
|
53
|
-
return { list };
|
|
54
|
-
}
|
|
55
|
-
else if (parts.length === 2) {
|
|
56
|
-
// List and field ref (e.g., 'User.posts')
|
|
57
|
-
const [list, field] = parts;
|
|
58
|
-
if (!list || !field) {
|
|
59
|
-
throw new Error(`Invalid relationship ref: ${ref}`);
|
|
60
|
-
}
|
|
61
|
-
return { list, field };
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
throw new Error(`Invalid relationship ref: ${ref}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Check if a relationship is one-to-one (bidirectional with both sides having many: false)
|
|
69
|
-
*/
|
|
70
|
-
function isOneToOneRelationship(listName, fieldName, field, config) {
|
|
71
|
-
// Must be bidirectional (has target field)
|
|
72
|
-
const { list: targetList, field: targetField } = parseRelationshipRef(field.ref);
|
|
73
|
-
if (!targetField) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
// This side must be single (many: false or undefined)
|
|
77
|
-
if (field.many) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
// Check if target list exists
|
|
81
|
-
const targetListConfig = config.lists[targetList];
|
|
82
|
-
if (!targetListConfig) {
|
|
83
|
-
throw new Error(`Referenced list "${targetList}" not found in config`);
|
|
84
|
-
}
|
|
85
|
-
// Check if target field exists and is a relationship
|
|
86
|
-
const targetFieldConfig = targetListConfig.fields[targetField];
|
|
87
|
-
if (!targetFieldConfig) {
|
|
88
|
-
throw new Error(`Referenced field "${targetList}.${targetField}" not found. If you want a one-sided relationship, use ref: "${targetList}" instead of ref: "${targetList}.${targetField}"`);
|
|
89
|
-
}
|
|
90
|
-
if (targetFieldConfig.type !== 'relationship') {
|
|
91
|
-
throw new Error(`Referenced field "${targetList}.${targetField}" is not a relationship field`);
|
|
92
|
-
}
|
|
93
|
-
const targetRelField = targetFieldConfig;
|
|
94
|
-
return !targetRelField.many;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Determine if this side of a relationship should have the foreign key
|
|
98
|
-
* For one-to-one relationships, only one side should have the foreign key
|
|
99
|
-
*/
|
|
100
|
-
function shouldHaveForeignKey(listName, fieldName, field, config) {
|
|
101
|
-
// List-only refs always create foreign keys
|
|
102
|
-
const { list: targetList, field: targetField } = parseRelationshipRef(field.ref);
|
|
103
|
-
if (!targetField) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
// Many-side never has foreign key (it's on the one-side)
|
|
107
|
-
if (field.many) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
// Check if this is a one-to-one relationship
|
|
111
|
-
const isOneToOne = isOneToOneRelationship(listName, fieldName, field, config);
|
|
112
|
-
if (!isOneToOne) {
|
|
113
|
-
// One-to-many or many-to-one: the single side has the foreign key
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
// One-to-one relationship: check db.foreignKey configuration
|
|
117
|
-
const targetListConfig = config.lists[targetList];
|
|
118
|
-
const targetFieldConfig = targetListConfig.fields[targetField];
|
|
119
|
-
const thisSideExplicit = field.db?.foreignKey;
|
|
120
|
-
const otherSideExplicit = targetFieldConfig.db?.foreignKey;
|
|
121
|
-
// Validate: both sides cannot be true
|
|
122
|
-
if (thisSideExplicit === true && otherSideExplicit === true) {
|
|
123
|
-
throw new Error(`Invalid one-to-one relationship: both "${listName}.${fieldName}" and "${targetList}.${targetField}" have db.foreignKey set to true. Only one side can store the foreign key.`);
|
|
124
|
-
}
|
|
125
|
-
// If this side explicitly wants the foreign key, use it
|
|
126
|
-
if (thisSideExplicit === true) {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
// If other side explicitly wants it, don't use it on this side
|
|
130
|
-
if (otherSideExplicit === true) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
// Default: use alphabetical ordering to ensure consistency
|
|
134
|
-
// The "smaller" list name (alphabetically) gets the foreign key
|
|
135
|
-
const comparison = listName.localeCompare(targetList);
|
|
136
|
-
if (comparison !== 0) {
|
|
137
|
-
return comparison < 0;
|
|
138
|
-
}
|
|
139
|
-
// Same list (self-referential): use field name ordering
|
|
140
|
-
return fieldName.localeCompare(targetField) < 0;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Check if a relationship field is many-to-many
|
|
144
|
-
*/
|
|
145
|
-
function isManyToManyRelationship(listName, fieldName, field, config) {
|
|
146
|
-
// Must be a many relationship
|
|
147
|
-
if (!field.many) {
|
|
148
|
-
return { isManyToMany: false, targetList: '', targetField: undefined };
|
|
149
|
-
}
|
|
150
|
-
const { list: targetList, field: targetField } = parseRelationshipRef(field.ref);
|
|
151
|
-
// List-only refs with many: true are many-to-many (implicit single on other side)
|
|
152
|
-
if (!targetField) {
|
|
153
|
-
return { isManyToMany: true, targetList, targetField: undefined };
|
|
154
|
-
}
|
|
155
|
-
// Check if target field exists and is also many
|
|
156
|
-
const targetListConfig = config.lists[targetList];
|
|
157
|
-
if (!targetListConfig) {
|
|
158
|
-
// Target list doesn't exist - not a valid many-to-many
|
|
159
|
-
// (error will be thrown by existing validation code)
|
|
160
|
-
return { isManyToMany: false, targetList, targetField };
|
|
161
|
-
}
|
|
162
|
-
const targetFieldConfig = targetListConfig.fields[targetField];
|
|
163
|
-
if (!targetFieldConfig) {
|
|
164
|
-
// Target field doesn't exist - not a valid many-to-many
|
|
165
|
-
// (error will be thrown by existing validation code if needed)
|
|
166
|
-
return { isManyToMany: false, targetList, targetField };
|
|
167
|
-
}
|
|
168
|
-
if (targetFieldConfig.type !== 'relationship') {
|
|
169
|
-
// Target field is not a relationship - not a valid many-to-many
|
|
170
|
-
return { isManyToMany: false, targetList, targetField };
|
|
171
|
-
}
|
|
172
|
-
const targetRelField = targetFieldConfig;
|
|
173
|
-
// Both sides must have many: true for many-to-many
|
|
174
|
-
return { isManyToMany: !!targetRelField.many, targetList, targetField };
|
|
175
|
-
}
|
|
176
27
|
/**
|
|
177
28
|
* Generate Prisma schema from OpenSaas config
|
|
178
29
|
*/
|
|
179
30
|
export function generatePrismaSchema(config) {
|
|
180
31
|
const lines = [];
|
|
181
32
|
const opensaasPath = config.opensaasPath || '.opensaas';
|
|
182
|
-
const joinTableNaming = config.db.joinTableNaming || 'prisma';
|
|
183
33
|
// Generator and datasource
|
|
184
34
|
lines.push('generator client {');
|
|
185
35
|
lines.push(' provider = "prisma-client"');
|
|
@@ -213,117 +63,32 @@ export function generatePrismaSchema(config) {
|
|
|
213
63
|
lines.push('}');
|
|
214
64
|
lines.push('');
|
|
215
65
|
}
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
const
|
|
221
|
-
//
|
|
222
|
-
const
|
|
66
|
+
// Compute every relationship field's Prisma contribution by delegating to the
|
|
67
|
+
// relationship field builder. The generator stays a neutral coordinator: it
|
|
68
|
+
// never inspects relationship topology itself, it only places the lines the
|
|
69
|
+
// field returns into the right model.
|
|
70
|
+
const relationResults = new Map();
|
|
71
|
+
// Synthetic back-relation lines keyed by the target model they belong to.
|
|
72
|
+
const backRelationsByTarget = new Map();
|
|
223
73
|
for (const [listName, listConfig] of Object.entries(config.lists)) {
|
|
224
74
|
for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
if (!processedManyToMany.has(relationshipKey)) {
|
|
240
|
-
processedManyToMany.add(relationshipKey);
|
|
241
|
-
// Check for per-field relationName (takes precedence)
|
|
242
|
-
const sourceRelationName = relField.db?.relationName;
|
|
243
|
-
let targetRelationName;
|
|
244
|
-
if (targetField) {
|
|
245
|
-
const targetListConfig = config.lists[targetList];
|
|
246
|
-
const targetFieldConfig = targetListConfig?.fields[targetField];
|
|
247
|
-
if (targetFieldConfig?.type === 'relationship') {
|
|
248
|
-
targetRelationName = targetFieldConfig.db?.relationName;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
// Validate both sides match if both specify relationName
|
|
252
|
-
if (sourceRelationName &&
|
|
253
|
-
targetRelationName &&
|
|
254
|
-
sourceRelationName !== targetRelationName) {
|
|
255
|
-
throw new Error(`Relation name mismatch: ${listName}.${fieldName} has relationName "${sourceRelationName}" but ${targetList}.${targetField} has "${targetRelationName}". Both sides must use the same relationName.`);
|
|
256
|
-
}
|
|
257
|
-
// Use per-field relationName if set (either side), otherwise fall back to global naming
|
|
258
|
-
const explicitRelationName = sourceRelationName || targetRelationName;
|
|
259
|
-
let relationName;
|
|
260
|
-
let joinTableName;
|
|
261
|
-
let ownerSide = 'source';
|
|
262
|
-
if (explicitRelationName) {
|
|
263
|
-
// Per-field relationName takes precedence
|
|
264
|
-
relationName = explicitRelationName;
|
|
265
|
-
joinTableName = `_${explicitRelationName}`;
|
|
266
|
-
}
|
|
267
|
-
else if (joinTableNaming === 'keystone') {
|
|
268
|
-
// For Keystone naming, we need to determine which side owns the join table name
|
|
269
|
-
// Keystone uses the side where the relationship is defined
|
|
270
|
-
// For bidirectional many-to-many, we need to pick one side deterministically
|
|
271
|
-
joinTableName = `_${listName}_${fieldName}`;
|
|
272
|
-
relationName = `${listName}_${fieldName}`;
|
|
273
|
-
if (targetField) {
|
|
274
|
-
// Bidirectional many-to-many
|
|
275
|
-
// Use alphabetical ordering to determine owner (ensures both sides agree)
|
|
276
|
-
const sourceKey = `${listName}.${fieldName}`;
|
|
277
|
-
const targetKey = `${targetList}.${targetField}`;
|
|
278
|
-
if (sourceKey.localeCompare(targetKey) < 0) {
|
|
279
|
-
ownerSide = 'source';
|
|
280
|
-
joinTableName = `_${listName}_${fieldName}`;
|
|
281
|
-
relationName = `${listName}_${fieldName}`;
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
ownerSide = 'target';
|
|
285
|
-
joinTableName = `_${targetList}_${targetField}`;
|
|
286
|
-
relationName = `${targetList}_${targetField}`;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
// Default Prisma naming - no explicit relation name needed
|
|
292
|
-
// Prisma will auto-generate join table name
|
|
293
|
-
relationName = '';
|
|
294
|
-
joinTableName = '';
|
|
295
|
-
}
|
|
296
|
-
// Only track M2M relationships that need explicit relation names
|
|
297
|
-
if (relationName) {
|
|
298
|
-
manyToManyRelationships.push({
|
|
299
|
-
sourceList: listName,
|
|
300
|
-
sourceField: fieldName,
|
|
301
|
-
targetList,
|
|
302
|
-
targetField,
|
|
303
|
-
ownerSide,
|
|
304
|
-
joinTableName,
|
|
305
|
-
relationName,
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
75
|
+
// Skip non-relationship fields and virtual relationships (which contribute
|
|
76
|
+
// no database columns and therefore no Prisma schema lines).
|
|
77
|
+
if (fieldConfig.type !== 'relationship' || fieldConfig.virtual)
|
|
78
|
+
continue;
|
|
79
|
+
const relField = fieldConfig;
|
|
80
|
+
if (!relField.getPrismaRelation) {
|
|
81
|
+
throw new Error(`Relationship field "${listName}.${fieldName}" does not implement getPrismaRelation method`);
|
|
82
|
+
}
|
|
83
|
+
const result = relField.getPrismaRelation(fieldName, listConfig.fields, listName, config);
|
|
84
|
+
relationResults.set(`${listName}.${fieldName}`, result);
|
|
85
|
+
if (result.backRelation) {
|
|
86
|
+
const existing = backRelationsByTarget.get(result.backRelation.targetList);
|
|
87
|
+
if (existing) {
|
|
88
|
+
existing.push(result.backRelation.line);
|
|
309
89
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
// defined, including implicit many-to-many relationships.
|
|
313
|
-
// This applies to all list-only refs (both many-to-many and many-to-one).
|
|
314
|
-
if (!targetField) {
|
|
315
|
-
const syntheticFieldName = `from_${listName}_${fieldName}`;
|
|
316
|
-
// Use explicit relation name if set, otherwise auto-generate
|
|
317
|
-
const relationName = relField.db?.relationName ?? `${listName}_${fieldName}`;
|
|
318
|
-
if (!syntheticFields.has(targetList)) {
|
|
319
|
-
syntheticFields.set(targetList, []);
|
|
320
|
-
}
|
|
321
|
-
syntheticFields.get(targetList).push({
|
|
322
|
-
fieldName: syntheticFieldName,
|
|
323
|
-
sourceList: listName,
|
|
324
|
-
sourceField: fieldName,
|
|
325
|
-
relationName,
|
|
326
|
-
});
|
|
90
|
+
else {
|
|
91
|
+
backRelationsByTarget.set(result.backRelation.targetList, [result.backRelation.line]);
|
|
327
92
|
}
|
|
328
93
|
}
|
|
329
94
|
}
|
|
@@ -338,10 +103,8 @@ export function generatePrismaSchema(config) {
|
|
|
338
103
|
else {
|
|
339
104
|
lines.push(' id String @id @default(cuid())');
|
|
340
105
|
}
|
|
341
|
-
// Track relationship
|
|
342
|
-
const
|
|
343
|
-
// Track foreign key fields that need indexes
|
|
344
|
-
const foreignKeyIndexes = [];
|
|
106
|
+
// Track relationship field names (in declaration order) for later processing
|
|
107
|
+
const relationshipFieldNames = [];
|
|
345
108
|
// Add regular fields
|
|
346
109
|
for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
|
|
347
110
|
// Skip virtual fields - they don't create database columns
|
|
@@ -349,10 +112,7 @@ export function generatePrismaSchema(config) {
|
|
|
349
112
|
continue;
|
|
350
113
|
}
|
|
351
114
|
if (fieldConfig.type === 'relationship') {
|
|
352
|
-
|
|
353
|
-
name: fieldName,
|
|
354
|
-
field: fieldConfig,
|
|
355
|
-
});
|
|
115
|
+
relationshipFieldNames.push(fieldName);
|
|
356
116
|
continue;
|
|
357
117
|
}
|
|
358
118
|
const prismaType = mapFieldTypeToPrisma(fieldName, fieldConfig, config.db.provider, listName);
|
|
@@ -366,118 +126,32 @@ export function generatePrismaSchema(config) {
|
|
|
366
126
|
const attrPart = modStr.startsWith('?') ? modStr.slice(1).trimStart() : modStr;
|
|
367
127
|
lines.push(` ${paddedName} ${prismaType}${nullPart}${attrPart ? ' ' + attrPart : ''}`);
|
|
368
128
|
}
|
|
369
|
-
// Add relationship fields
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
const
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
let relationLine;
|
|
377
|
-
// Check if this M2M relationship has an explicit relation name (per-field or global Keystone naming)
|
|
378
|
-
const m2mRel = manyToManyRelationships.find((rel) => (rel.sourceList === listName && rel.sourceField === fieldName) ||
|
|
379
|
-
(rel.targetList === listName && rel.targetField === fieldName));
|
|
380
|
-
if (m2mCheck.isManyToMany && m2mRel) {
|
|
381
|
-
// Many-to-many with explicit relation name (per-field or Keystone naming)
|
|
382
|
-
relationLine = ` ${paddedName} ${targetList}[] @relation("${m2mRel.relationName}")`;
|
|
383
|
-
}
|
|
384
|
-
else if (targetField) {
|
|
385
|
-
// Standard bidirectional one-to-many or many-to-many with Prisma naming
|
|
386
|
-
relationLine = ` ${paddedName} ${targetList}[]`;
|
|
387
|
-
}
|
|
388
|
-
else {
|
|
389
|
-
// List-only ref: use named relation
|
|
390
|
-
const relationName = `${listName}_${fieldName}`;
|
|
391
|
-
relationLine = ` ${paddedName} ${targetList}[] @relation("${relationName}")`;
|
|
392
|
-
}
|
|
393
|
-
// Apply extendPrismaSchema if defined (many side has no FK line)
|
|
394
|
-
if (relField.db?.extendPrismaSchema) {
|
|
395
|
-
const extended = relField.db.extendPrismaSchema({ relationLine });
|
|
396
|
-
relationLine = extended.relationLine;
|
|
397
|
-
}
|
|
398
|
-
lines.push(relationLine);
|
|
399
|
-
}
|
|
400
|
-
else {
|
|
401
|
-
// Single relationship - check if this side should have the foreign key
|
|
402
|
-
const hasForeignKey = shouldHaveForeignKey(listName, fieldName, relField, config);
|
|
403
|
-
if (hasForeignKey) {
|
|
404
|
-
// This side has the foreign key
|
|
405
|
-
const foreignKeyField = `${fieldName}Id`;
|
|
406
|
-
const fkPaddedName = foreignKeyField.padEnd(12);
|
|
407
|
-
// Check if this is a one-to-one relationship
|
|
408
|
-
const isOneToOne = isOneToOneRelationship(listName, fieldName, relField, config);
|
|
409
|
-
const uniqueModifier = isOneToOne ? ' @unique' : '';
|
|
410
|
-
// Get the map attribute
|
|
411
|
-
// If foreignKey is an object with map property, use it
|
|
412
|
-
// Otherwise, default to fieldName (not fieldNameId)
|
|
413
|
-
let mapModifier = '';
|
|
414
|
-
if (typeof relField.db?.foreignKey === 'object' && relField.db.foreignKey.map) {
|
|
415
|
-
mapModifier = ` @map("${relField.db.foreignKey.map}")`;
|
|
416
|
-
}
|
|
417
|
-
else {
|
|
418
|
-
// Default to field name (not fieldNameId)
|
|
419
|
-
mapModifier = ` @map("${fieldName}")`;
|
|
420
|
-
}
|
|
421
|
-
let fkLine = ` ${fkPaddedName} String?${uniqueModifier}${mapModifier}`;
|
|
422
|
-
let relationLine;
|
|
423
|
-
if (targetField) {
|
|
424
|
-
// Standard bidirectional relationship
|
|
425
|
-
relationLine = ` ${paddedName} ${targetList}? @relation(fields: [${foreignKeyField}], references: [id])`;
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
// List-only ref: use named relation
|
|
429
|
-
const relationName = `${listName}_${fieldName}`;
|
|
430
|
-
relationLine = ` ${paddedName} ${targetList}? @relation("${relationName}", fields: [${foreignKeyField}], references: [id])`;
|
|
431
|
-
}
|
|
432
|
-
// Apply extendPrismaSchema if defined
|
|
433
|
-
if (relField.db?.extendPrismaSchema) {
|
|
434
|
-
const extended = relField.db.extendPrismaSchema({ fkLine, relationLine });
|
|
435
|
-
fkLine = extended.fkLine ?? fkLine;
|
|
436
|
-
relationLine = extended.relationLine;
|
|
437
|
-
}
|
|
438
|
-
lines.push(fkLine);
|
|
439
|
-
lines.push(relationLine);
|
|
440
|
-
// Track foreign key for index generation
|
|
441
|
-
// Default to true (matching Keystone behavior) unless explicitly set to false
|
|
442
|
-
const indexType = relField.isIndexed ?? true;
|
|
443
|
-
if (indexType !== false) {
|
|
444
|
-
foreignKeyIndexes.push({
|
|
445
|
-
foreignKeyField,
|
|
446
|
-
indexType,
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
else {
|
|
451
|
-
// This side does NOT have the foreign key (other side of one-to-one)
|
|
452
|
-
// Just add the relation field without foreign key
|
|
453
|
-
let relationLine = ` ${paddedName} ${targetList}?`;
|
|
454
|
-
// Apply extendPrismaSchema if defined (no FK line on this side)
|
|
455
|
-
if (relField.db?.extendPrismaSchema) {
|
|
456
|
-
const extended = relField.db.extendPrismaSchema({ relationLine });
|
|
457
|
-
relationLine = extended.relationLine;
|
|
458
|
-
}
|
|
459
|
-
lines.push(relationLine);
|
|
460
|
-
}
|
|
129
|
+
// Add relationship fields (lines + foreign key indexes) from the precomputed results
|
|
130
|
+
const foreignKeyIndexes = [];
|
|
131
|
+
for (const fieldName of relationshipFieldNames) {
|
|
132
|
+
const result = relationResults.get(`${listName}.${fieldName}`);
|
|
133
|
+
lines.push(...result.modelLines);
|
|
134
|
+
if (result.foreignKeyIndex) {
|
|
135
|
+
foreignKeyIndexes.push(result.foreignKeyIndex);
|
|
461
136
|
}
|
|
462
137
|
}
|
|
463
138
|
// Add synthetic relation fields for list-only refs pointing to this list
|
|
464
|
-
const
|
|
465
|
-
if (
|
|
466
|
-
for (const
|
|
467
|
-
|
|
468
|
-
lines.push(` ${paddedName} ${sourceList}[] @relation("${relationName}")`);
|
|
139
|
+
const backRelations = backRelationsByTarget.get(listName);
|
|
140
|
+
if (backRelations) {
|
|
141
|
+
for (const line of backRelations) {
|
|
142
|
+
lines.push(line);
|
|
469
143
|
}
|
|
470
144
|
}
|
|
471
145
|
// Always add timestamps
|
|
472
146
|
lines.push(' createdAt DateTime @default(now())');
|
|
473
147
|
lines.push(' updatedAt DateTime @default(now()) @updatedAt');
|
|
474
148
|
// Add indexes for foreign key fields
|
|
475
|
-
for (const
|
|
476
|
-
if (indexType === 'unique') {
|
|
477
|
-
lines.push(` @@unique([${foreignKeyField}])`);
|
|
149
|
+
for (const index of foreignKeyIndexes) {
|
|
150
|
+
if (index.indexType === 'unique') {
|
|
151
|
+
lines.push(` @@unique([${index.foreignKeyField}])`);
|
|
478
152
|
}
|
|
479
|
-
else if (indexType === true) {
|
|
480
|
-
lines.push(` @@index([${foreignKeyField}])`);
|
|
153
|
+
else if (index.indexType === true) {
|
|
154
|
+
lines.push(` @@index([${index.foreignKeyField}])`);
|
|
481
155
|
}
|
|
482
156
|
}
|
|
483
157
|
lines.push('}');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/generator/prisma.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/generator/prisma.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAA;AA08BvE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0G5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
|
package/dist/generator/types.js
CHANGED
|
@@ -433,12 +433,15 @@ function generateGetPayloadType(listName, fields) {
|
|
|
433
433
|
lines.push(` */`);
|
|
434
434
|
lines.push(`export type ${listName}GetPayload<T extends { select?: any; include?: any } = {}> =`);
|
|
435
435
|
// Build the base type (Prisma's GetPayload minus relationship and transformed fields)
|
|
436
|
+
// When virtual fields exist, strip them from T before passing to Prisma so Prisma never
|
|
437
|
+
// tries to resolve a virtual field name (which would produce `never` in its payload type).
|
|
436
438
|
const fieldsToOmit = [...transformedFieldNames, ...relationshipFields.map((r) => r.name)];
|
|
439
|
+
const prismaT = virtualFields.length > 0 ? `StripVirtualFromArgs<T, keyof ${listName}VirtualFields>` : 'T';
|
|
437
440
|
if (fieldsToOmit.length > 0) {
|
|
438
|
-
lines.push(` Omit<Prisma.${listName}GetPayload
|
|
441
|
+
lines.push(` Omit<Prisma.${listName}GetPayload<${prismaT}>, ${fieldsToOmit.map((n) => `'${n}'`).join(' | ')}> &`);
|
|
439
442
|
}
|
|
440
443
|
else {
|
|
441
|
-
lines.push(` Prisma.${listName}GetPayload
|
|
444
|
+
lines.push(` Prisma.${listName}GetPayload<${prismaT}> &`);
|
|
442
445
|
}
|
|
443
446
|
// Add transformed fields back
|
|
444
447
|
if (transformedFieldNames.length > 0) {
|
|
@@ -545,6 +548,7 @@ function generateFindUniqueArgsType(listName, fields) {
|
|
|
545
548
|
export type ${listName}FindUniqueArgs = Omit<Prisma.${listName}FindUniqueArgs, 'select' | 'include'> & {
|
|
546
549
|
select?: ${listName}Select | null
|
|
547
550
|
include?: ${listName}Include | null
|
|
551
|
+
query?: Fragment<${listName}Output, FieldSelection<${listName}Output>>
|
|
548
552
|
}`;
|
|
549
553
|
}
|
|
550
554
|
else {
|
|
@@ -553,6 +557,7 @@ export type ${listName}FindUniqueArgs = Omit<Prisma.${listName}FindUniqueArgs, '
|
|
|
553
557
|
*/
|
|
554
558
|
export type ${listName}FindUniqueArgs = Omit<Prisma.${listName}FindUniqueArgs, 'select'> & {
|
|
555
559
|
select?: ${listName}Select | null
|
|
560
|
+
query?: Fragment<${listName}Output, FieldSelection<${listName}Output>>
|
|
556
561
|
}`;
|
|
557
562
|
}
|
|
558
563
|
}
|
|
@@ -568,6 +573,7 @@ function generateFindManyArgsType(listName, fields) {
|
|
|
568
573
|
export type ${listName}FindManyArgs = Omit<Prisma.${listName}FindManyArgs, 'select' | 'include'> & {
|
|
569
574
|
select?: ${listName}Select | null
|
|
570
575
|
include?: ${listName}Include | null
|
|
576
|
+
query?: Fragment<${listName}Output, FieldSelection<${listName}Output>>
|
|
571
577
|
}`;
|
|
572
578
|
}
|
|
573
579
|
else {
|
|
@@ -576,6 +582,7 @@ export type ${listName}FindManyArgs = Omit<Prisma.${listName}FindManyArgs, 'sele
|
|
|
576
582
|
*/
|
|
577
583
|
export type ${listName}FindManyArgs = Omit<Prisma.${listName}FindManyArgs, 'select'> & {
|
|
578
584
|
select?: ${listName}Select | null
|
|
585
|
+
query?: Fragment<${listName}Output, FieldSelection<${listName}Output>>
|
|
579
586
|
}`;
|
|
580
587
|
}
|
|
581
588
|
}
|
|
@@ -843,8 +850,11 @@ export function generateTypes(config) {
|
|
|
843
850
|
lines.push(' */');
|
|
844
851
|
lines.push('');
|
|
845
852
|
// Add necessary imports
|
|
846
|
-
// Use alias for Session to avoid conflicts if user has a list named "Session"
|
|
847
|
-
|
|
853
|
+
// Use alias for Session to avoid conflicts if user has a list named "Session".
|
|
854
|
+
// Session and AccessContext stay on the public root entry point (Session is the
|
|
855
|
+
// module-augmentation target); the rest are unstable runtime plumbing on /internal.
|
|
856
|
+
lines.push("import type { Session as OpensaasSession, AccessContext } from '@opensaas/stack-core'");
|
|
857
|
+
lines.push("import type { StorageUtils, ServerActionProps, AccessControlledDB, Fragment, FieldSelection } from '@opensaas/stack-core/internal'");
|
|
848
858
|
lines.push("import type { PrismaClient, Prisma } from './prisma-client/client'");
|
|
849
859
|
lines.push("import type { PluginServices } from './plugin-types'");
|
|
850
860
|
// Add field-specific imports
|
|
@@ -855,6 +865,16 @@ export function generateTypes(config) {
|
|
|
855
865
|
lines.push(`import ${typePrefix}{ ${names} } from '${imp.from}'`);
|
|
856
866
|
}
|
|
857
867
|
lines.push('');
|
|
868
|
+
// Emit shared utility type used by GetPayload types to strip virtual field keys
|
|
869
|
+
// from select/include before passing to Prisma's GetPayload (prevents `never` intersection)
|
|
870
|
+
lines.push('// Utility: strips virtual field keys from select/include so Prisma GetPayload never sees them');
|
|
871
|
+
lines.push('type StripVirtualFromArgs<T, VirtualKeys extends string> =');
|
|
872
|
+
lines.push(' T extends { select: infer S extends object }');
|
|
873
|
+
lines.push(" ? Omit<T, 'select'> & { select: Omit<S, VirtualKeys> }");
|
|
874
|
+
lines.push(' : T extends { include: infer I extends object }');
|
|
875
|
+
lines.push(" ? Omit<T, 'include'> & { include: Omit<I, VirtualKeys> }");
|
|
876
|
+
lines.push(' : T');
|
|
877
|
+
lines.push('');
|
|
858
878
|
// Generate types for each list
|
|
859
879
|
for (const [listName, listConfig] of Object.entries(config.lists)) {
|
|
860
880
|
// Generate VirtualFields type first (needed by Output type and CustomDB)
|