@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.
@@ -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
- // Track many-to-many relationships (for Keystone naming)
217
- const manyToManyRelationships = [];
218
- // Track synthetic relation fields that need to be added to target lists
219
- // Map of listName -> array of synthetic fields
220
- const syntheticFields = new Map();
221
- // First pass: collect all relationship info and identify synthetic fields and many-to-many relationships
222
- const processedManyToMany = new Set(); // Track processed many-to-many to avoid duplicates
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
- if (fieldConfig.type === 'relationship') {
226
- const relField = fieldConfig;
227
- const { list: targetList, field: targetField } = parseRelationshipRef(relField.ref);
228
- // Check if this is a many-to-many relationship (only if it's a many relationship)
229
- const m2mCheck = relField.many
230
- ? isManyToManyRelationship(listName, fieldName, relField, config)
231
- : { isManyToMany: false, targetList: '', targetField: undefined };
232
- if (m2mCheck.isManyToMany) {
233
- // Create a unique key to avoid processing the same relationship twice
234
- const relationshipKey = targetField
235
- ? // Bidirectional: use sorted list names to ensure uniqueness
236
- [listName, fieldName, targetList, targetField].sort().join('.')
237
- : // List-only: just use source side
238
- `${listName}.${fieldName}`;
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
- // If no target field specified, we need to add a synthetic back-reference field
311
- // on the target model. Prisma requires both sides of any relationship to be
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 fields for later processing
342
- const relationshipFields = [];
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
- relationshipFields.push({
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
- for (const { name: fieldName, field: relField } of relationshipFields) {
371
- const { list: targetList, field: targetField } = parseRelationshipRef(relField.ref);
372
- const paddedName = fieldName.padEnd(12);
373
- if (relField.many) {
374
- // Check if this is a many-to-many relationship
375
- const m2mCheck = isManyToManyRelationship(listName, fieldName, relField, config);
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 syntheticFieldsForList = syntheticFields.get(listName);
465
- if (syntheticFieldsForList) {
466
- for (const { fieldName: syntheticFieldName, sourceList, relationName, } of syntheticFieldsForList) {
467
- const paddedName = syntheticFieldName.padEnd(12);
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 { foreignKeyField, indexType } of foreignKeyIndexes) {
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,EAAkC,MAAM,sBAAsB,CAAA;AAi8B1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwF5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
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"}
@@ -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<T>, ${fieldsToOmit.map((n) => `'${n}'`).join(' | ')}> &`);
441
+ lines.push(` Omit<Prisma.${listName}GetPayload<${prismaT}>, ${fieldsToOmit.map((n) => `'${n}'`).join(' | ')}> &`);
439
442
  }
440
443
  else {
441
- lines.push(` Prisma.${listName}GetPayload<T> &`);
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
- lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'");
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)