@opensaas/stack-cli 0.3.0 → 0.4.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.
Files changed (43) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +141 -0
  3. package/dist/commands/generate.d.ts.map +1 -1
  4. package/dist/commands/generate.js +4 -13
  5. package/dist/commands/generate.js.map +1 -1
  6. package/dist/generator/context.d.ts.map +1 -1
  7. package/dist/generator/context.js +20 -5
  8. package/dist/generator/context.js.map +1 -1
  9. package/dist/generator/index.d.ts +1 -1
  10. package/dist/generator/index.d.ts.map +1 -1
  11. package/dist/generator/index.js +1 -1
  12. package/dist/generator/index.js.map +1 -1
  13. package/dist/generator/lists.d.ts.map +1 -1
  14. package/dist/generator/lists.js +33 -1
  15. package/dist/generator/lists.js.map +1 -1
  16. package/dist/generator/prisma-extensions.d.ts +11 -0
  17. package/dist/generator/prisma-extensions.d.ts.map +1 -0
  18. package/dist/generator/prisma-extensions.js +134 -0
  19. package/dist/generator/prisma-extensions.js.map +1 -0
  20. package/dist/generator/prisma.d.ts.map +1 -1
  21. package/dist/generator/prisma.js +4 -0
  22. package/dist/generator/prisma.js.map +1 -1
  23. package/dist/generator/types.d.ts.map +1 -1
  24. package/dist/generator/types.js +151 -17
  25. package/dist/generator/types.js.map +1 -1
  26. package/package.json +9 -9
  27. package/src/commands/__snapshots__/generate.test.ts.snap +92 -21
  28. package/src/commands/generate.ts +8 -19
  29. package/src/generator/__snapshots__/context.test.ts.snap +60 -15
  30. package/src/generator/__snapshots__/types.test.ts.snap +689 -95
  31. package/src/generator/context.test.ts +3 -1
  32. package/src/generator/context.ts +20 -5
  33. package/src/generator/index.ts +1 -1
  34. package/src/generator/lists.ts +39 -1
  35. package/src/generator/prisma-extensions.ts +159 -0
  36. package/src/generator/prisma.ts +5 -0
  37. package/src/generator/types.ts +204 -17
  38. package/tsconfig.tsbuildinfo +1 -1
  39. package/dist/generator/type-patcher.d.ts +0 -13
  40. package/dist/generator/type-patcher.d.ts.map +0 -1
  41. package/dist/generator/type-patcher.js +0 -68
  42. package/dist/generator/type-patcher.js.map +0 -1
  43. package/src/generator/type-patcher.ts +0 -93
@@ -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;AA6R1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA8C5D;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,EAAkC,MAAM,sBAAsB,CAAA;AA4c1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0D5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
@@ -33,22 +33,79 @@ function isFieldOptional(field) {
33
33
  return true;
34
34
  }
35
35
  /**
36
- * Generate TypeScript interface for a model
36
+ * Generate virtual fields type - only contains virtual fields
37
+ * This is intersected with Prisma's GetPayload to add virtual fields to query results
37
38
  */
38
- function generateModelType(listName, fields) {
39
+ function generateVirtualFieldsType(listName, fields) {
39
40
  const lines = [];
40
- lines.push(`export type ${listName} = {`);
41
+ const virtualFields = Object.entries(fields).filter(([_, config]) => config.type === 'virtual');
42
+ lines.push(`/**`);
43
+ lines.push(` * Virtual fields for ${listName} - computed fields not in database`);
44
+ lines.push(` * These are added to query results via resolveOutput hooks`);
45
+ lines.push(` */`);
46
+ lines.push(`export type ${listName}VirtualFields = {`);
47
+ for (const [fieldName, fieldConfig] of virtualFields) {
48
+ const tsType = mapFieldTypeToTypeScript(fieldConfig);
49
+ if (!tsType)
50
+ continue;
51
+ const optional = isFieldOptional(fieldConfig);
52
+ const nullability = optional ? ' | null' : '';
53
+ lines.push(` ${fieldName}: ${tsType}${nullability}`);
54
+ }
55
+ // If no virtual fields, make it an empty object
56
+ if (virtualFields.length === 0) {
57
+ lines.push(' // No virtual fields defined');
58
+ }
59
+ lines.push('}');
60
+ return lines.join('\n');
61
+ }
62
+ /**
63
+ * Generate transformed fields type - fields with resultExtension transformations
64
+ * This replaces Prisma's base types with transformed types (e.g., string -> HashedPassword)
65
+ */
66
+ function generateTransformedFieldsType(listName, fields) {
67
+ const lines = [];
68
+ const transformedFields = Object.entries(fields).filter(([_, config]) => config.resultExtension);
69
+ lines.push(`/**`);
70
+ lines.push(` * Transformed fields for ${listName} - fields with resultExtension transformations`);
71
+ lines.push(` * These override Prisma's base types with transformed types via result extensions`);
72
+ lines.push(` */`);
73
+ lines.push(`export type ${listName}TransformedFields = {`);
74
+ for (const [fieldName, fieldConfig] of transformedFields) {
75
+ if (fieldConfig.resultExtension) {
76
+ const optional = isFieldOptional(fieldConfig);
77
+ const nullability = optional ? ' | undefined' : '';
78
+ lines.push(` ${fieldName}: ${fieldConfig.resultExtension.outputType}${nullability}`);
79
+ }
80
+ }
81
+ // If no transformed fields, make it an empty object
82
+ if (transformedFields.length === 0) {
83
+ lines.push(' // No transformed fields defined');
84
+ }
85
+ lines.push('}');
86
+ return lines.join('\n');
87
+ }
88
+ /**
89
+ * Generate TypeScript Output type for a model (includes virtual fields)
90
+ * This is kept for backwards compatibility but CustomDB uses Prisma's GetPayload + VirtualFields
91
+ */
92
+ function generateModelOutputType(listName, fields) {
93
+ const lines = [];
94
+ lines.push(`export type ${listName}Output = {`);
41
95
  lines.push(' id: string');
42
96
  for (const [fieldName, fieldConfig] of Object.entries(fields)) {
97
+ // Skip virtual fields - they're in VirtualFields type
98
+ if (fieldConfig.type === 'virtual')
99
+ continue;
43
100
  if (fieldConfig.type === 'relationship') {
44
101
  const relField = fieldConfig;
45
102
  const [targetList] = relField.ref.split('.');
46
103
  if (relField.many) {
47
- lines.push(` ${fieldName}: ${targetList}[]`);
104
+ lines.push(` ${fieldName}?: ${targetList}Output[]`); // Optional since only present with include
48
105
  }
49
106
  else {
50
107
  lines.push(` ${fieldName}Id: string | null`);
51
- lines.push(` ${fieldName}: ${targetList} | null`);
108
+ lines.push(` ${fieldName}?: ${targetList}Output | null`); // Optional since only present with include
52
109
  }
53
110
  }
54
111
  else {
@@ -62,9 +119,15 @@ function generateModelType(listName, fields) {
62
119
  }
63
120
  lines.push(' createdAt: Date');
64
121
  lines.push(' updatedAt: Date');
65
- lines.push('}');
122
+ lines.push('} & ' + listName + 'VirtualFields'); // Include virtual fields
66
123
  return lines.join('\n');
67
124
  }
125
+ /**
126
+ * Generate convenience type alias (List = ListOutput)
127
+ */
128
+ function generateModelTypeAlias(listName) {
129
+ return `export type ${listName} = ${listName}Output`;
130
+ }
68
131
  /**
69
132
  * Generate CreateInput type
70
133
  */
@@ -72,6 +135,11 @@ function generateCreateInputType(listName, fields) {
72
135
  const lines = [];
73
136
  lines.push(`export type ${listName}CreateInput = {`);
74
137
  for (const [fieldName, fieldConfig] of Object.entries(fields)) {
138
+ // Skip virtual fields - they don't accept input in create operations
139
+ // Virtual fields with resolveInput hooks handle side effects but don't store data
140
+ if (fieldConfig.virtual) {
141
+ continue;
142
+ }
75
143
  if (fieldConfig.type === 'relationship') {
76
144
  const relField = fieldConfig;
77
145
  if (relField.many) {
@@ -100,6 +168,11 @@ function generateUpdateInputType(listName, fields) {
100
168
  const lines = [];
101
169
  lines.push(`export type ${listName}UpdateInput = {`);
102
170
  for (const [fieldName, fieldConfig] of Object.entries(fields)) {
171
+ // Virtual fields with resolveInput hooks can accept input for side effects
172
+ // but we still skip them in the input type since they don't store data
173
+ if (fieldConfig.virtual) {
174
+ continue;
175
+ }
103
176
  if (fieldConfig.type === 'relationship') {
104
177
  const relField = fieldConfig;
105
178
  if (relField.many) {
@@ -190,19 +263,69 @@ function generateHookTypes(listName) {
190
263
  return lines.join('\n');
191
264
  }
192
265
  /**
193
- * Generate Context type with all operations
266
+ * Generate custom DB interface that uses Prisma's conditional types with virtual and transformed fields
267
+ * This leverages Prisma's GetPayload utility to get correct types based on select/include
194
268
  */
195
- function generateContextType() {
269
+ function generateCustomDBType(config) {
196
270
  const lines = [];
197
- lines.push('export type Context<TSession extends OpensaasSession = OpensaasSession> = {');
198
- lines.push(' db: AccessControlledDB<PrismaClient>');
271
+ // Generate list of db keys to omit from AccessControlledDB
272
+ const dbKeys = Object.keys(config.lists).map((listName) => {
273
+ const dbKey = listName.charAt(0).toLowerCase() + listName.slice(1);
274
+ return `'${dbKey}'`;
275
+ });
276
+ lines.push('/**');
277
+ lines.push(" * Custom DB type that uses Prisma's conditional types with virtual and transformed field support");
278
+ lines.push(' * Types change based on select/include - relationships only present when explicitly included');
279
+ lines.push(' * Virtual fields and transformed fields are added to the base model type');
280
+ lines.push(' */');
281
+ lines.push('export type CustomDB = Omit<AccessControlledDB<PrismaClient>, ');
282
+ lines.push(` ${dbKeys.join(' | ')}`);
283
+ lines.push('> & {');
284
+ // For each list, create strongly-typed methods using Prisma's conditional types
285
+ for (const listName of Object.keys(config.lists)) {
286
+ const dbKey = listName.charAt(0).toLowerCase() + listName.slice(1); // camelCase
287
+ lines.push(` ${dbKey}: {`);
288
+ // findUnique - generic to preserve Prisma's conditional return type
289
+ lines.push(` findUnique: <T extends Prisma.${listName}FindUniqueArgs>(`);
290
+ lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}FindUniqueArgs>`);
291
+ lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
292
+ // findMany - generic to preserve Prisma's conditional return type
293
+ lines.push(` findMany: <T extends Prisma.${listName}FindManyArgs>(`);
294
+ lines.push(` args?: Prisma.SelectSubset<T, Prisma.${listName}FindManyArgs>`);
295
+ lines.push(` ) => Promise<Array<Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields>>`);
296
+ // create - generic to preserve Prisma's conditional return type
297
+ lines.push(` create: <T extends Prisma.${listName}CreateArgs>(`);
298
+ lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}CreateArgs>`);
299
+ lines.push(` ) => Promise<Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields>`);
300
+ // update - generic to preserve Prisma's conditional return type
301
+ lines.push(` update: <T extends Prisma.${listName}UpdateArgs>(`);
302
+ lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}UpdateArgs>`);
303
+ lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
304
+ // delete - generic to preserve Prisma's conditional return type
305
+ lines.push(` delete: <T extends Prisma.${listName}DeleteArgs>(`);
306
+ lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}DeleteArgs>`);
307
+ lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
308
+ // count - no changes to return type
309
+ lines.push(` count: (args?: Prisma.${listName}CountArgs) => Promise<number>`);
310
+ lines.push(` }`);
311
+ }
312
+ lines.push('}');
313
+ return lines.join('\n');
314
+ }
315
+ /**
316
+ * Generate Context type that is compatible with AccessContext
317
+ */
318
+ function generateContextType(_config) {
319
+ const lines = [];
320
+ lines.push('/**');
321
+ lines.push(' * Context type compatible with AccessContext but with CustomDB for virtual field typing');
322
+ lines.push(' * Extends AccessContext and overrides db property to include virtual fields in output types');
323
+ lines.push(' */');
324
+ lines.push("export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {");
325
+ lines.push(' db: CustomDB');
199
326
  lines.push(' session: TSession');
200
- lines.push(' prisma: PrismaClient');
201
- lines.push(' storage: StorageUtils');
202
- lines.push(' plugins: PluginServices');
203
327
  lines.push(' serverAction: (props: ServerActionProps) => Promise<unknown>');
204
328
  lines.push(' sudo: () => Context<TSession>');
205
- lines.push(' _isSudo: boolean');
206
329
  lines.push('}');
207
330
  return lines.join('\n');
208
331
  }
@@ -258,7 +381,7 @@ export function generateTypes(config) {
258
381
  lines.push('');
259
382
  // Add necessary imports
260
383
  // Use alias for Session to avoid conflicts if user has a list named "Session"
261
- lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'");
384
+ lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'");
262
385
  lines.push("import type { PrismaClient, Prisma } from './prisma-client/client'");
263
386
  lines.push("import type { PluginServices } from './plugin-types'");
264
387
  // Add field-specific imports
@@ -271,7 +394,15 @@ export function generateTypes(config) {
271
394
  lines.push('');
272
395
  // Generate types for each list
273
396
  for (const [listName, listConfig] of Object.entries(config.lists)) {
274
- lines.push(generateModelType(listName, listConfig.fields));
397
+ // Generate VirtualFields type first (needed by Output type and CustomDB)
398
+ lines.push(generateVirtualFieldsType(listName, listConfig.fields));
399
+ lines.push('');
400
+ // Generate TransformedFields type (needed by CustomDB)
401
+ lines.push(generateTransformedFieldsType(listName, listConfig.fields));
402
+ lines.push('');
403
+ lines.push(generateModelOutputType(listName, listConfig.fields));
404
+ lines.push('');
405
+ lines.push(generateModelTypeAlias(listName));
275
406
  lines.push('');
276
407
  lines.push(generateCreateInputType(listName, listConfig.fields));
277
408
  lines.push('');
@@ -282,8 +413,11 @@ export function generateTypes(config) {
282
413
  lines.push(generateHookTypes(listName));
283
414
  lines.push('');
284
415
  }
416
+ // Generate CustomDB interface
417
+ lines.push(generateCustomDBType(config));
418
+ lines.push('');
285
419
  // Generate Context type
286
- lines.push(generateContextType());
420
+ lines.push(generateContextType(config));
287
421
  return lines.join('\n');
288
422
  }
289
423
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensaas/stack-cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "CLI tools for OpenSaas Stack",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -36,22 +36,22 @@
36
36
  "url": "https://github.com/OpenSaasAU/stack/issues"
37
37
  },
38
38
  "dependencies": {
39
- "@modelcontextprotocol/sdk": "^1.0.4",
39
+ "@modelcontextprotocol/sdk": "^1.24.3",
40
40
  "chalk": "^5.6.2",
41
- "chokidar": "^4.0.3",
42
- "commander": "^14.0.1",
41
+ "chokidar": "^5.0.0",
42
+ "commander": "^14.0.2",
43
43
  "jiti": "^2.6.1",
44
44
  "ora": "^9.0.0",
45
45
  "prompts": "^2.4.2",
46
- "zod": "^4.1.12",
47
- "@opensaas/stack-core": "0.3.0"
46
+ "zod": "^4.1.13",
47
+ "@opensaas/stack-core": "0.4.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@types/node": "^24.7.2",
50
+ "@types/node": "^24.10.1",
51
51
  "@types/prompts": "^2.4.9",
52
- "@vitest/coverage-v8": "^4.0.4",
52
+ "@vitest/coverage-v8": "^4.0.15",
53
53
  "typescript": "^5.9.3",
54
- "vitest": "^4.0.0"
54
+ "vitest": "^4.0.15"
55
55
  },
56
56
  "scripts": {
57
57
  "build": "tsc",
@@ -14,6 +14,7 @@ import { getContext as getOpensaasContext } from '@opensaas/stack-core'
14
14
  import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
15
15
  import { PrismaClient } from './prisma-client/client'
16
16
  import type { Context } from './types'
17
+ import { prismaExtensions } from './prisma-extensions'
17
18
  import configOrPromise from '../opensaas.config'
18
19
 
19
20
  // Resolve config if it's a Promise (when plugins are present)
@@ -21,15 +22,29 @@ const configPromise = Promise.resolve(configOrPromise)
21
22
  let resolvedConfig: OpenSaasConfig | null = null
22
23
 
23
24
  // Internal Prisma singleton - managed automatically
24
- const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | null }
25
- let prisma: PrismaClient | null = null
25
+ const globalForPrisma = globalThis as unknown as { prisma: ReturnType<typeof createExtendedPrisma> | null }
26
+ let prisma: ReturnType<typeof createExtendedPrisma> | null = null
27
+
28
+ /**
29
+ * Create Prisma client with result extensions
30
+ */
31
+ function createExtendedPrisma(basePrisma: PrismaClient) {
32
+ // Check if there are any extensions to apply
33
+ if (Object.keys(prismaExtensions).length === 0) {
34
+ return basePrisma
35
+ }
36
+ // Apply result extensions
37
+ return basePrisma.$extends(prismaExtensions)
38
+ }
26
39
 
27
40
  async function getPrisma() {
28
41
  if (!prisma) {
29
42
  if (!resolvedConfig) {
30
43
  resolvedConfig = await configPromise
31
44
  }
32
- prisma = globalForPrisma.prisma ?? resolvedConfig.db.prismaClientConstructor!(PrismaClient)
45
+ const basePrisma = resolvedConfig.db.prismaClientConstructor!(PrismaClient)
46
+ const extendedPrisma = createExtendedPrisma(basePrisma)
47
+ prisma = globalForPrisma.prisma ?? extendedPrisma
33
48
  if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
34
49
  }
35
50
  return prisma
@@ -84,7 +99,7 @@ const storage = {
84
99
  export async function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Promise<Context<TSession>> {
85
100
  const config = await getConfig()
86
101
  const prismaClient = await getPrisma()
87
- return getOpensaasContext(config, prismaClient, session ?? null, storage) as Context<TSession>
102
+ return getOpensaasContext(config, prismaClient, session ?? null, storage) as unknown as Context<TSession>
88
103
  }
89
104
 
90
105
  /**
@@ -94,7 +109,7 @@ export async function getContext<TSession extends OpensaasSession = OpensaasSess
94
109
  export const rawOpensaasContext = (async () => {
95
110
  const config = await getConfig()
96
111
  const prismaClient = await getPrisma()
97
- return getOpensaasContext(config, prismaClient, null, storage)
112
+ return getOpensaasContext(config, prismaClient, null, storage) as unknown as Context
98
113
  })()
99
114
 
100
115
  /**
@@ -131,17 +146,35 @@ exports[`Generate Command Integration > Generator Integration > should generate
131
146
  * DO NOT EDIT - This file is automatically generated
132
147
  */
133
148
 
134
- import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'
149
+ import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'
135
150
  import type { PrismaClient, Prisma } from './prisma-client/client'
136
151
  import type { PluginServices } from './plugin-types'
137
152
 
138
- export type User = {
153
+ /**
154
+ * Virtual fields for User - computed fields not in database
155
+ * These are added to query results via resolveOutput hooks
156
+ */
157
+ export type UserVirtualFields = {
158
+ // No virtual fields defined
159
+ }
160
+
161
+ /**
162
+ * Transformed fields for User - fields with resultExtension transformations
163
+ * These override Prisma's base types with transformed types via result extensions
164
+ */
165
+ export type UserTransformedFields = {
166
+ // No transformed fields defined
167
+ }
168
+
169
+ export type UserOutput = {
139
170
  id: string
140
171
  name: string
141
172
  email: string
142
173
  createdAt: Date
143
174
  updatedAt: Date
144
- }
175
+ } & UserVirtualFields
176
+
177
+ export type User = UserOutput
145
178
 
146
179
  export type UserCreateInput = {
147
180
  name: string
@@ -202,15 +235,43 @@ export type UserHooks = {
202
235
  }) => Promise<void>
203
236
  }
204
237
 
205
- export type Context<TSession extends OpensaasSession = OpensaasSession> = {
206
- db: AccessControlledDB<PrismaClient>
238
+ /**
239
+ * Custom DB type that uses Prisma's conditional types with virtual and transformed field support
240
+ * Types change based on select/include - relationships only present when explicitly included
241
+ * Virtual fields and transformed fields are added to the base model type
242
+ */
243
+ export type CustomDB = Omit<AccessControlledDB<PrismaClient>,
244
+ 'user'
245
+ > & {
246
+ user: {
247
+ findUnique: <T extends Prisma.UserFindUniqueArgs>(
248
+ args: Prisma.SelectSubset<T, Prisma.UserFindUniqueArgs>
249
+ ) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
250
+ findMany: <T extends Prisma.UserFindManyArgs>(
251
+ args?: Prisma.SelectSubset<T, Prisma.UserFindManyArgs>
252
+ ) => Promise<Array<Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields>>
253
+ create: <T extends Prisma.UserCreateArgs>(
254
+ args: Prisma.SelectSubset<T, Prisma.UserCreateArgs>
255
+ ) => Promise<Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields>
256
+ update: <T extends Prisma.UserUpdateArgs>(
257
+ args: Prisma.SelectSubset<T, Prisma.UserUpdateArgs>
258
+ ) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
259
+ delete: <T extends Prisma.UserDeleteArgs>(
260
+ args: Prisma.SelectSubset<T, Prisma.UserDeleteArgs>
261
+ ) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
262
+ count: (args?: Prisma.UserCountArgs) => Promise<number>
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Context type compatible with AccessContext but with CustomDB for virtual field typing
268
+ * Extends AccessContext and overrides db property to include virtual fields in output types
269
+ */
270
+ export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {
271
+ db: CustomDB
207
272
  session: TSession
208
- prisma: PrismaClient
209
- storage: StorageUtils
210
- plugins: PluginServices
211
273
  serverAction: (props: ServerActionProps) => Promise<unknown>
212
274
  sudo: () => Context<TSession>
213
- _isSudo: boolean
214
275
  }"
215
276
  `;
216
277
 
@@ -287,19 +348,29 @@ exports[`Generate Command Integration > Generator Integration > should handle em
287
348
  * DO NOT EDIT - This file is automatically generated
288
349
  */
289
350
 
290
- import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'
351
+ import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'
291
352
  import type { PrismaClient, Prisma } from './prisma-client/client'
292
353
  import type { PluginServices } from './plugin-types'
293
354
 
294
- export type Context<TSession extends OpensaasSession = OpensaasSession> = {
295
- db: AccessControlledDB<PrismaClient>
355
+ /**
356
+ * Custom DB type that uses Prisma's conditional types with virtual and transformed field support
357
+ * Types change based on select/include - relationships only present when explicitly included
358
+ * Virtual fields and transformed fields are added to the base model type
359
+ */
360
+ export type CustomDB = Omit<AccessControlledDB<PrismaClient>,
361
+
362
+ > & {
363
+ }
364
+
365
+ /**
366
+ * Context type compatible with AccessContext but with CustomDB for virtual field typing
367
+ * Extends AccessContext and overrides db property to include virtual fields in output types
368
+ */
369
+ export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {
370
+ db: CustomDB
296
371
  session: TSession
297
- prisma: PrismaClient
298
- storage: StorageUtils
299
- plugins: PluginServices
300
372
  serverAction: (props: ServerActionProps) => Promise<unknown>
301
373
  sudo: () => Context<TSession>
302
- _isSudo: boolean
303
374
  }"
304
375
  `;
305
376
 
@@ -11,7 +11,7 @@ import {
11
11
  writeLists,
12
12
  writeContext,
13
13
  writePluginTypes,
14
- patchPrismaTypes,
14
+ writePrismaExtensions,
15
15
  } from '../generator/index.js'
16
16
  import { OpenSaasConfig } from '@opensaas/stack-core'
17
17
 
@@ -58,9 +58,8 @@ export async function generateCommand() {
58
58
 
59
59
  try {
60
60
  // Import plugin engine (avoid circular dependency)
61
- const { executeBeforeGenerateHooks } = await import(
62
- '@opensaas/stack-core/config/plugin-engine'
63
- )
61
+ const { executeBeforeGenerateHooks } =
62
+ await import('@opensaas/stack-core/config/plugin-engine')
64
63
  config = await executeBeforeGenerateHooks(config)
65
64
  pluginSpinner.succeed(chalk.green('Plugin beforeGenerate hooks complete'))
66
65
  } catch (err) {
@@ -78,6 +77,7 @@ export async function generateCommand() {
78
77
  const listsPath = path.join(cwd, '.opensaas', 'lists.ts')
79
78
  const contextPath = path.join(cwd, '.opensaas', 'context.ts')
80
79
  const pluginTypesPath = path.join(cwd, '.opensaas', 'plugin-types.ts')
80
+ const prismaExtensionsPath = path.join(cwd, '.opensaas', 'prisma-extensions.ts')
81
81
 
82
82
  writePrismaSchema(config, prismaSchemaPath)
83
83
  writePrismaConfig(config, prismaConfigPath)
@@ -85,6 +85,7 @@ export async function generateCommand() {
85
85
  writeLists(config, listsPath)
86
86
  writeContext(config, contextPath)
87
87
  writePluginTypes(config, pluginTypesPath)
88
+ writePrismaExtensions(config, prismaExtensionsPath)
88
89
 
89
90
  generatorSpinner.succeed(chalk.green('Schema generation complete'))
90
91
  console.log(chalk.green('✅ Prisma schema generated'))
@@ -93,6 +94,7 @@ export async function generateCommand() {
93
94
  console.log(chalk.green('✅ Lists namespace generated'))
94
95
  console.log(chalk.green('✅ Context factory generated'))
95
96
  console.log(chalk.green('✅ Plugin types generated'))
97
+ console.log(chalk.green('✅ Prisma extensions generated'))
96
98
 
97
99
  // Execute afterGenerate hooks if plugins are present
98
100
  if (config.plugins && config.plugins.length > 0) {
@@ -107,9 +109,8 @@ export async function generateCommand() {
107
109
  }
108
110
 
109
111
  // Execute afterGenerate hooks
110
- const { executeAfterGenerateHooks } = await import(
111
- '@opensaas/stack-core/config/plugin-engine'
112
- )
112
+ const { executeAfterGenerateHooks } =
113
+ await import('@opensaas/stack-core/config/plugin-engine')
113
114
  const modifiedFiles = await executeAfterGenerateHooks(config, generatedFiles)
114
115
 
115
116
  // Write back modified files
@@ -165,18 +166,6 @@ export async function generateCommand() {
165
166
  process.exit(1)
166
167
  }
167
168
 
168
- // Patch Prisma types with field transformations
169
- const patchSpinner = ora('Patching Prisma types...').start()
170
- try {
171
- patchPrismaTypes(config, cwd)
172
- patchSpinner.succeed(chalk.green('Type patching complete'))
173
- } catch (err) {
174
- patchSpinner.fail(chalk.red('Failed to patch types'))
175
- const message = err instanceof Error ? err.message : String(err)
176
- console.error(chalk.red('\n❌ Error:'), message)
177
- process.exit(1)
178
- }
179
-
180
169
  console.log(chalk.bold('\n✨ Generation complete!\n'))
181
170
  console.log(chalk.gray('Next steps:'))
182
171
  console.log(chalk.gray(' 1. Run: npx prisma db push'))