@idealyst/cli 1.2.32 → 1.2.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/constants.js +5 -1
  2. package/dist/constants.js.map +1 -1
  3. package/dist/generators/core/shared.js +382 -3
  4. package/dist/generators/core/shared.js.map +1 -1
  5. package/dist/generators/extensions/graphql.js +112 -26
  6. package/dist/generators/extensions/graphql.js.map +1 -1
  7. package/dist/generators/extensions/prisma.js +105 -16
  8. package/dist/generators/extensions/prisma.js.map +1 -1
  9. package/dist/generators/extensions/trpc.js +137 -41
  10. package/dist/generators/extensions/trpc.js.map +1 -1
  11. package/dist/templates/core/api/src-graphql/builder.ts +25 -0
  12. package/dist/templates/core/api/src-graphql/schema.ts +217 -0
  13. package/dist/templates/core/api/src-trpc/context.ts +15 -0
  14. package/dist/templates/core/api/src-trpc/index.ts +6 -0
  15. package/dist/templates/core/api/src-trpc/lib/database.ts +4 -0
  16. package/dist/templates/core/api/src-trpc/router/index.ts +187 -0
  17. package/dist/templates/core/api/src-trpc/server.ts +63 -0
  18. package/dist/templates/core/api/src-trpc/trpc.ts +20 -0
  19. package/dist/templates/core/database/schema.prisma +22 -0
  20. package/dist/templates/core/shared/src-components/App.tsx +51 -0
  21. package/dist/templates/core/shared/src-graphql/client.ts +70 -0
  22. package/dist/templates/core/shared/{src/navigation → src-navigation}/AppRouter.tsx +34 -0
  23. package/dist/templates/core/shared/src-screens-graphql/GraphQLDemoScreen.tsx +354 -0
  24. package/dist/templates/core/shared/src-screens-trpc/TRPCDemoScreen.tsx +432 -0
  25. package/dist/templates/core/shared/src-trpc/client.ts +44 -0
  26. package/dist/types/constants.d.ts +9 -5
  27. package/package.json +1 -1
  28. package/dist/templates/core/shared/src/components/App.tsx +0 -13
  29. package/dist/templates/core/shared/src/screens/index.ts +0 -4
  30. /package/dist/templates/core/shared/{src/components → src-components}/index.ts +0 -0
  31. /package/dist/templates/core/shared/{src/layouts → src-layouts}/AppLayout.tsx +0 -0
  32. /package/dist/templates/core/shared/{src/navigation → src-navigation}/index.ts +0 -0
  33. /package/dist/templates/core/shared/{src/screens → src-screens}/ExploreScreen.tsx +0 -0
  34. /package/dist/templates/core/shared/{src/screens → src-screens}/HomeScreen.tsx +0 -0
  35. /package/dist/templates/core/shared/{src/screens → src-screens}/ProfileScreen.tsx +0 -0
  36. /package/dist/templates/core/shared/{src/screens → src-screens}/SettingsScreen.tsx +0 -0
package/dist/constants.js CHANGED
@@ -7,7 +7,7 @@ exports.DEPENDENCIES = exports.IGNORE_PATTERNS = exports.TEMPLATE_EXTENSIONS = e
7
7
  // Package version - updated during build
8
8
  exports.VERSION = '0.1.0';
9
9
  // Current Idealyst framework version to use in templates
10
- exports.IDEALYST_VERSION = '1.2.32';
10
+ exports.IDEALYST_VERSION = '1.2.33';
11
11
  // React Native version
12
12
  exports.REACT_NATIVE_VERSION = '0.83.0';
13
13
  // React version
@@ -102,12 +102,16 @@ exports.DEPENDENCIES = {
102
102
  },
103
103
  graphql: {
104
104
  '@apollo/client': '^3.11.0',
105
+ '@tanstack/react-query': '^5.62.0',
105
106
  'graphql': '^16.9.0',
106
107
  },
107
108
  graphqlServer: {
108
109
  '@pothos/core': '^4.3.0',
109
110
  'graphql-yoga': '^5.10.0',
110
111
  },
112
+ graphqlServerPrisma: {
113
+ '@pothos/plugin-prisma': '^4.3.0',
114
+ },
111
115
  prisma: {
112
116
  '@prisma/client': '^5.19.0',
113
117
  },
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -24,9 +24,11 @@ async function generateSharedPackage(projectPath, data) {
24
24
  // Try to use template src/ files first, or generate programmatically
25
25
  const templateSrcPath = (0, copier_1.getTemplatePath)('core', 'shared', 'src');
26
26
  if (await (0, copier_1.templateHasContent)(templateSrcPath)) {
27
- // Copy src/ from templates (showcase-based)
27
+ // Copy base src/ from templates (showcase-based, excludes API-dependent files)
28
28
  await (0, copier_1.copyTemplateDirectory)(templateSrcPath, path_1.default.join(sharedDir, 'src'), data);
29
29
  logger_1.logger.dim('Using showcase-based source files');
30
+ // Copy API-dependent files based on user selection
31
+ await copyApiDependentFiles(sharedDir, data);
30
32
  }
31
33
  else {
32
34
  // Generate src/ programmatically (fallback)
@@ -34,6 +36,383 @@ async function generateSharedPackage(projectPath, data) {
34
36
  }
35
37
  return { success: true };
36
38
  }
39
+ /**
40
+ * Copy API-dependent files (trpc/, graphql/, components/, screens/, navigation/, layouts/) based on user selection
41
+ */
42
+ async function copyApiDependentFiles(sharedDir, data) {
43
+ const srcDir = path_1.default.join(sharedDir, 'src');
44
+ // Copy tRPC client if enabled
45
+ if (data.hasTrpc) {
46
+ const trpcTemplatePath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-trpc');
47
+ if (await (0, copier_1.templateHasContent)(trpcTemplatePath)) {
48
+ await (0, copier_1.copyTemplateDirectory)(trpcTemplatePath, path_1.default.join(srcDir, 'trpc'), data);
49
+ logger_1.logger.dim('Added tRPC client');
50
+ }
51
+ }
52
+ // Copy GraphQL client if enabled
53
+ if (data.hasGraphql) {
54
+ const graphqlTemplatePath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-graphql');
55
+ if (await (0, copier_1.templateHasContent)(graphqlTemplatePath)) {
56
+ await (0, copier_1.copyTemplateDirectory)(graphqlTemplatePath, path_1.default.join(srcDir, 'graphql'), data);
57
+ logger_1.logger.dim('Added GraphQL client');
58
+ }
59
+ }
60
+ // Copy layouts (AppLayout.tsx with tab/stack layouts)
61
+ const layoutsTemplatePath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-layouts');
62
+ if (await (0, copier_1.templateHasContent)(layoutsTemplatePath)) {
63
+ await (0, copier_1.copyTemplateDirectory)(layoutsTemplatePath, path_1.default.join(srcDir, 'layouts'), data);
64
+ }
65
+ // Copy base screens and conditionally add API demo screens
66
+ await copyScreensWithApiDemos(srcDir, data);
67
+ // Generate navigation/AppRouter.tsx based on API selection
68
+ await generateNavigation(srcDir, data);
69
+ // Generate components/App.tsx and components/index.ts based on API selection
70
+ await generateAppComponent(srcDir, data);
71
+ }
72
+ /**
73
+ * Copy screens and conditionally add API demo screens
74
+ */
75
+ async function copyScreensWithApiDemos(srcDir, data) {
76
+ const screensDir = path_1.default.join(srcDir, 'screens');
77
+ await fs_extra_1.default.ensureDir(screensDir);
78
+ // Copy base screens (Home, Explore, Profile, Settings)
79
+ const baseScreensPath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-screens');
80
+ if (await (0, copier_1.templateHasContent)(baseScreensPath)) {
81
+ await (0, copier_1.copyTemplateDirectory)(baseScreensPath, screensDir, data);
82
+ }
83
+ // Copy tRPC demo screen if enabled
84
+ if (data.hasTrpc) {
85
+ const trpcScreenPath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-screens-trpc');
86
+ if (await (0, copier_1.templateHasContent)(trpcScreenPath)) {
87
+ await (0, copier_1.copyTemplateDirectory)(trpcScreenPath, screensDir, data);
88
+ // Modify HAS_DATABASE constant based on Prisma availability
89
+ const trpcDemoPath = path_1.default.join(screensDir, 'TRPCDemoScreen.tsx');
90
+ if (await fs_extra_1.default.pathExists(trpcDemoPath)) {
91
+ let content = await fs_extra_1.default.readFile(trpcDemoPath, 'utf8');
92
+ if (!data.hasPrisma) {
93
+ // Replace HAS_DATABASE = true with HAS_DATABASE = false
94
+ content = content.replace(/const HAS_DATABASE = true;/, 'const HAS_DATABASE = false;');
95
+ await fs_extra_1.default.writeFile(trpcDemoPath, content);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ // Copy GraphQL demo screen ONLY if both GraphQL AND Prisma are enabled
101
+ // (GraphQL demo requires database for meaningful operations)
102
+ if (data.hasGraphql && data.hasPrisma) {
103
+ const graphqlScreenPath = (0, copier_1.getTemplatePath)('core', 'shared', 'src-screens-graphql');
104
+ if (await (0, copier_1.templateHasContent)(graphqlScreenPath)) {
105
+ await (0, copier_1.copyTemplateDirectory)(graphqlScreenPath, screensDir, data);
106
+ }
107
+ }
108
+ // Generate screens/index.ts based on what's enabled
109
+ await generateScreensIndex(screensDir, data);
110
+ }
111
+ /**
112
+ * Generate screens/index.ts based on API selection
113
+ */
114
+ async function generateScreensIndex(screensDir, data) {
115
+ const exports = [
116
+ `export { HomeScreen } from './HomeScreen';`,
117
+ `export { ExploreScreen } from './ExploreScreen';`,
118
+ `export { ProfileScreen } from './ProfileScreen';`,
119
+ `export { SettingsScreen } from './SettingsScreen';`,
120
+ ];
121
+ if (data.hasTrpc) {
122
+ exports.push(`export { TRPCDemoScreen } from './TRPCDemoScreen';`);
123
+ }
124
+ // GraphQL demo only available when both GraphQL AND Prisma are enabled
125
+ if (data.hasGraphql && data.hasPrisma) {
126
+ exports.push(`export { GraphQLDemoScreen } from './GraphQLDemoScreen';`);
127
+ }
128
+ await fs_extra_1.default.writeFile(path_1.default.join(screensDir, 'index.ts'), exports.join('\n') + '\n');
129
+ }
130
+ /**
131
+ * Generate navigation/AppRouter.tsx based on API selection
132
+ */
133
+ async function generateNavigation(srcDir, data) {
134
+ const navigationDir = path_1.default.join(srcDir, 'navigation');
135
+ await fs_extra_1.default.ensureDir(navigationDir);
136
+ // Generate AppRouter.tsx
137
+ const routerContent = createAppRouter(data);
138
+ await fs_extra_1.default.writeFile(path_1.default.join(navigationDir, 'AppRouter.tsx'), routerContent);
139
+ // Generate navigation/index.ts
140
+ await fs_extra_1.default.writeFile(path_1.default.join(navigationDir, 'index.ts'), `export { AppRouter } from './AppRouter';\n`);
141
+ }
142
+ /**
143
+ * Create AppRouter based on API selection
144
+ */
145
+ function createAppRouter(data) {
146
+ const hasTrpc = data.hasTrpc;
147
+ const hasGraphql = data.hasGraphql;
148
+ // Build screen imports
149
+ const screenImports = [
150
+ `import { HomeScreen } from '../screens/HomeScreen';`,
151
+ `import { ExploreScreen } from '../screens/ExploreScreen';`,
152
+ `import { ProfileScreen } from '../screens/ProfileScreen';`,
153
+ `import { SettingsScreen } from '../screens/SettingsScreen';`,
154
+ ];
155
+ if (hasTrpc) {
156
+ screenImports.push(`import { TRPCDemoScreen } from '../screens/TRPCDemoScreen';`);
157
+ }
158
+ // GraphQL demo only available when both GraphQL AND Prisma are enabled
159
+ const hasGraphqlDemo = hasGraphql && data.hasPrisma;
160
+ if (hasGraphqlDemo) {
161
+ screenImports.push(`import { GraphQLDemoScreen } from '../screens/GraphQLDemoScreen';`);
162
+ }
163
+ // Build tab routes
164
+ const tabRoutes = [
165
+ ` {
166
+ path: '',
167
+ type: 'screen',
168
+ component: HomeScreen,
169
+ options: {
170
+ title: 'Home',
171
+ tabBarLabel: 'Home',
172
+ tabBarIcon: ({ focused, color, size }) => (
173
+ <Icon
174
+ name={focused ? 'home' : 'home-outline'}
175
+ color={color}
176
+ size={size}
177
+ />
178
+ ),
179
+ } as TabBarScreenOptions,
180
+ }`,
181
+ ` {
182
+ path: 'explore',
183
+ type: 'screen',
184
+ component: ExploreScreen,
185
+ options: {
186
+ title: 'Explore',
187
+ tabBarLabel: 'Explore',
188
+ tabBarIcon: ({ focused, color, size }) => (
189
+ <Icon
190
+ name={focused ? 'compass' : 'compass-outline'}
191
+ color={color}
192
+ size={size}
193
+ />
194
+ ),
195
+ } as TabBarScreenOptions,
196
+ }`,
197
+ ` {
198
+ path: 'profile',
199
+ type: 'screen',
200
+ component: ProfileScreen,
201
+ options: {
202
+ title: 'Profile',
203
+ tabBarLabel: 'Profile',
204
+ tabBarIcon: ({ focused, color, size }) => (
205
+ <Icon
206
+ name={focused ? 'account' : 'account-outline'}
207
+ color={color}
208
+ size={size}
209
+ />
210
+ ),
211
+ } as TabBarScreenOptions,
212
+ }`,
213
+ ];
214
+ if (hasTrpc) {
215
+ tabRoutes.push(` {
216
+ path: 'trpc',
217
+ type: 'screen',
218
+ component: TRPCDemoScreen,
219
+ options: {
220
+ title: 'tRPC',
221
+ tabBarLabel: 'tRPC',
222
+ tabBarIcon: ({ focused, color, size }) => (
223
+ <Icon
224
+ name="api"
225
+ color={color}
226
+ size={size}
227
+ />
228
+ ),
229
+ } as TabBarScreenOptions,
230
+ }`);
231
+ }
232
+ if (hasGraphqlDemo) {
233
+ tabRoutes.push(` {
234
+ path: 'graphql',
235
+ type: 'screen',
236
+ component: GraphQLDemoScreen,
237
+ options: {
238
+ title: 'GraphQL',
239
+ tabBarLabel: 'GraphQL',
240
+ tabBarIcon: ({ focused, color, size }) => (
241
+ <Icon
242
+ name="graphql"
243
+ color={color}
244
+ size={size}
245
+ />
246
+ ),
247
+ } as TabBarScreenOptions,
248
+ }`);
249
+ }
250
+ return `import React from 'react';
251
+ import { Icon } from '@idealyst/components';
252
+ import type { NavigatorParam, TabBarScreenOptions } from '@idealyst/navigation';
253
+
254
+ // Screens
255
+ ${screenImports.join('\n')}
256
+
257
+ // Custom Layouts
258
+ import { AppTabLayout, AppStackLayout } from '../layouts/AppLayout';
259
+
260
+ /**
261
+ * Tab Navigator - Contains main tabs
262
+ */
263
+ const MainTabNavigator: NavigatorParam = {
264
+ path: '',
265
+ type: 'navigator',
266
+ layout: 'tab',
267
+ layoutComponent: AppTabLayout,
268
+ routes: [
269
+ ${tabRoutes.join(',\n')},
270
+ ],
271
+ };
272
+
273
+ /**
274
+ * Root Stack Navigator - Wraps tabs and adds Settings screen
275
+ */
276
+ export const AppRouter: NavigatorParam = {
277
+ path: '/',
278
+ type: 'navigator',
279
+ layout: 'stack',
280
+ layoutComponent: AppStackLayout,
281
+ routes: [
282
+ MainTabNavigator,
283
+ {
284
+ path: 'settings',
285
+ type: 'screen',
286
+ component: SettingsScreen,
287
+ options: {
288
+ title: 'Settings',
289
+ headerShown: true,
290
+ },
291
+ },
292
+ ],
293
+ };
294
+
295
+ export default AppRouter;
296
+ `;
297
+ }
298
+ /**
299
+ * Generate App.tsx and components/index.ts based on API selection
300
+ */
301
+ async function generateAppComponent(srcDir, data) {
302
+ const componentsDir = path_1.default.join(srcDir, 'components');
303
+ await fs_extra_1.default.ensureDir(componentsDir);
304
+ // Generate App.tsx based on what's enabled
305
+ const appContent = createTemplateAppComponent(data);
306
+ await fs_extra_1.default.writeFile(path_1.default.join(componentsDir, 'App.tsx'), appContent);
307
+ // Generate components/index.ts
308
+ await fs_extra_1.default.writeFile(path_1.default.join(componentsDir, 'index.ts'), `export { App, default } from './App';\n`);
309
+ }
310
+ /**
311
+ * Create App component based on API selection (for showcase templates)
312
+ */
313
+ function createTemplateAppComponent(data) {
314
+ const hasTrpc = data.hasTrpc;
315
+ const hasGraphql = data.hasGraphql;
316
+ const hasApi = data.hasApi;
317
+ // No API - simple app
318
+ if (!hasApi || (!hasTrpc && !hasGraphql)) {
319
+ return `import React from 'react';
320
+ import { NavigatorProvider } from '@idealyst/navigation';
321
+ import { AppRouter } from '../navigation/AppRouter';
322
+
323
+ /**
324
+ * Main App component for ${data.appDisplayName}
325
+ */
326
+ export const App: React.FC = () => {
327
+ return <NavigatorProvider route={AppRouter} />;
328
+ };
329
+
330
+ export default App;
331
+ `;
332
+ }
333
+ // Build imports
334
+ const imports = [
335
+ `import React, { useState } from 'react';`,
336
+ `import { NavigatorProvider } from '@idealyst/navigation';`,
337
+ ];
338
+ if (hasTrpc || hasGraphql) {
339
+ imports.push(`import { QueryClient, QueryClientProvider } from '@tanstack/react-query';`);
340
+ }
341
+ imports.push(`import { AppRouter } from '../navigation/AppRouter';`);
342
+ if (hasTrpc) {
343
+ imports.push(`import { trpc, createTRPCClient } from '../trpc/client';`);
344
+ }
345
+ if (hasGraphql) {
346
+ imports.push(`import { ApolloProvider, createApolloClient } from '../graphql/client';`);
347
+ }
348
+ // Build component body
349
+ const stateSetup = [];
350
+ if (hasTrpc || hasGraphql) {
351
+ stateSetup.push(` // Create React Query client
352
+ const [queryClient] = useState(() => new QueryClient({
353
+ defaultOptions: {
354
+ queries: {
355
+ retry: 1,
356
+ staleTime: 5000,
357
+ },
358
+ },
359
+ }));`);
360
+ }
361
+ if (hasTrpc) {
362
+ stateSetup.push(`
363
+ // Create tRPC client
364
+ const [trpcClient] = useState(() =>
365
+ createTRPCClient({
366
+ apiUrl: \`\${API_URL}/trpc\`,
367
+ })
368
+ );`);
369
+ }
370
+ if (hasGraphql) {
371
+ stateSetup.push(`
372
+ // Create Apollo client
373
+ const [apolloClient] = useState(() =>
374
+ createApolloClient({
375
+ graphqlUrl: \`\${API_URL}/graphql\`,
376
+ })
377
+ );`);
378
+ }
379
+ // Build JSX tree
380
+ let jsx = `<NavigatorProvider route={AppRouter} />`;
381
+ if (hasGraphql) {
382
+ jsx = `<ApolloProvider client={apolloClient}>
383
+ ${jsx}
384
+ </ApolloProvider>`;
385
+ }
386
+ if (hasTrpc || hasGraphql) {
387
+ jsx = `<QueryClientProvider client={queryClient}>
388
+ ${jsx}
389
+ </QueryClientProvider>`;
390
+ }
391
+ if (hasTrpc) {
392
+ jsx = `<trpc.Provider client={trpcClient} queryClient={queryClient}>
393
+ ${jsx}
394
+ </trpc.Provider>`;
395
+ }
396
+ return `${imports.join('\n')}
397
+
398
+ // API configuration
399
+ const API_URL = 'http://localhost:3000';
400
+
401
+ /**
402
+ * Main App component for ${data.appDisplayName}
403
+ * Sets up navigation${hasTrpc ? ' with tRPC' : ''}${hasGraphql ? (hasTrpc ? ' and Apollo' : ' with Apollo') : ''} providers
404
+ */
405
+ export const App: React.FC = () => {
406
+ ${stateSetup.join('\n')}
407
+
408
+ return (
409
+ ${jsx}
410
+ );
411
+ };
412
+
413
+ export default App;
414
+ `;
415
+ }
37
416
  /**
38
417
  * Generate shared package config files (package.json, tsconfig)
39
418
  */
@@ -300,9 +679,9 @@ export default function Home() {
300
679
  `;
301
680
  }
302
681
  /**
303
- * Create AppRouter - shared navigation configuration
682
+ * Create AppRouter - shared navigation configuration (fallback when no templates)
304
683
  */
305
- function createAppRouter(data) {
684
+ function createFallbackAppRouter(data) {
306
685
  return `/**
307
686
  * Application navigation router
308
687
  * Shared between web and mobile platforms
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/generators/core/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/generators/core/shared.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,10 @@ async function addGraphqlToApi(projectPath, data) {
41
41
  await fs_extra_1.default.writeFile(path_1.default.join(graphqlDir, 'resolvers', 'index.ts'), createExampleResolvers(data));
42
42
  // Add dependencies
43
43
  await (0, merger_1.addDependencies)(path_1.default.join(apiDir, 'package.json'), constants_1.DEPENDENCIES.graphqlServer);
44
+ // Add Prisma plugin if Prisma is enabled
45
+ if (data.hasPrisma) {
46
+ await (0, merger_1.addDependencies)(path_1.default.join(apiDir, 'package.json'), constants_1.DEPENDENCIES.graphqlServerPrisma);
47
+ }
44
48
  }
45
49
  /**
46
50
  * Add GraphQL client to web package
@@ -84,32 +88,46 @@ export const schema = builder.toSchema();
84
88
  * Create Pothos schema builder
85
89
  */
86
90
  function createPothosBuilder(data) {
87
- let imports = `import SchemaBuilder from '@pothos/core';`;
88
- let builderConfig = '';
89
91
  if (data.hasPrisma) {
90
- imports += `
92
+ // With Prisma: use @pothos/plugin-prisma for type-safe GraphQL from models
93
+ return `/**
94
+ * Pothos schema builder with Prisma integration
95
+ */
96
+
97
+ import SchemaBuilder from '@pothos/core';
91
98
  import PrismaPlugin from '@pothos/plugin-prisma';
92
- import type PrismaTypes from '@pothos/plugin-prisma/generated';
93
- import { prisma } from '@${data.workspaceScope}/database';`;
94
- builderConfig = `
99
+ import type PrismaTypes from '@${data.workspaceScope}/database/pothos';
100
+ import { prisma, Prisma } from '@${data.workspaceScope}/database';
101
+
102
+ // Export prisma for use in resolvers
103
+ export { prisma };
104
+
105
+ export const builder = new SchemaBuilder<{
106
+ PrismaTypes: PrismaTypes;
107
+ }>({
95
108
  plugins: [PrismaPlugin],
96
109
  prisma: {
97
110
  client: prisma,
98
- },`;
111
+ // Required for the Prisma plugin - provides Prisma's data model metadata
112
+ dmmf: Prisma.dmmf,
113
+ },
114
+ });
115
+
116
+ // Initialize Query and Mutation types
117
+ builder.queryType({});
118
+ builder.mutationType({});
119
+ `;
99
120
  }
121
+ // Without Prisma: simple builder
100
122
  return `/**
101
123
  * Pothos schema builder
102
124
  */
103
125
 
104
- ${imports}
126
+ import SchemaBuilder from '@pothos/core';
105
127
 
106
128
  export const builder = new SchemaBuilder<{
107
- Context: {
108
- ${data.hasPrisma ? ' prisma: typeof prisma;' : ''}
109
- };${data.hasPrisma ? `
110
- PrismaTypes: PrismaTypes;` : ''}
111
- }>({${builderConfig}
112
- });
129
+ Context: {};
130
+ }>({});
113
131
 
114
132
  // Initialize Query and Mutation types
115
133
  builder.queryType({});
@@ -120,11 +138,89 @@ builder.mutationType({});
120
138
  * Create example resolvers
121
139
  */
122
140
  function createExampleResolvers(data) {
141
+ const prismaResolvers = data.hasPrisma ? `
142
+ // Item type - using Prisma plugin for type-safe GraphQL from Prisma models
143
+ builder.prismaObject('Item', {
144
+ fields: (t) => ({
145
+ id: t.exposeID('id'),
146
+ title: t.exposeString('title'),
147
+ description: t.exposeString('description', { nullable: true }),
148
+ completed: t.exposeBoolean('completed'),
149
+ createdAt: t.field({
150
+ type: 'String',
151
+ resolve: (item) => item.createdAt.toISOString(),
152
+ }),
153
+ }),
154
+ });
155
+
156
+ // Items query
157
+ builder.queryField('items', (t) =>
158
+ t.prismaField({
159
+ type: ['Item'],
160
+ resolve: async (query) => {
161
+ return await prisma.item.findMany({
162
+ ...query,
163
+ orderBy: { createdAt: 'desc' },
164
+ });
165
+ },
166
+ })
167
+ );
168
+
169
+ // Create item mutation
170
+ builder.mutationField('createItem', (t) =>
171
+ t.prismaField({
172
+ type: 'Item',
173
+ args: {
174
+ title: t.arg.string({ required: true }),
175
+ description: t.arg.string(),
176
+ },
177
+ resolve: async (query, _, { title, description }) => {
178
+ return await prisma.item.create({
179
+ ...query,
180
+ data: { title, description },
181
+ });
182
+ },
183
+ })
184
+ );
185
+
186
+ // Toggle item mutation
187
+ builder.mutationField('toggleItem', (t) =>
188
+ t.prismaField({
189
+ type: 'Item',
190
+ args: {
191
+ id: t.arg.string({ required: true }),
192
+ },
193
+ resolve: async (query, _, { id }) => {
194
+ const item = await prisma.item.findUnique({ where: { id } });
195
+ if (!item) throw new Error('Item not found');
196
+ return await prisma.item.update({
197
+ ...query,
198
+ where: { id },
199
+ data: { completed: !item.completed },
200
+ });
201
+ },
202
+ })
203
+ );
204
+
205
+ // Delete item mutation
206
+ builder.mutationField('deleteItem', (t) =>
207
+ t.field({
208
+ type: 'Boolean',
209
+ args: {
210
+ id: t.arg.string({ required: true }),
211
+ },
212
+ resolve: async (_, { id }) => {
213
+ await prisma.item.delete({ where: { id } });
214
+ return true;
215
+ },
216
+ })
217
+ );
218
+ ` : '';
123
219
  return `/**
124
220
  * Example GraphQL resolvers
125
221
  */
126
222
 
127
- import { builder } from '../builder';
223
+ import { builder${data.hasPrisma ? ', prisma' : ''} } from '../builder';
128
224
 
129
225
  // Health check query
130
226
  builder.queryField('health', (t) =>
@@ -155,17 +251,7 @@ builder.mutationField('echo', (t) =>
155
251
  resolve: (_, { message }) => message,
156
252
  })
157
253
  );
158
- ${data.hasPrisma ? `
159
- // Example User type (uncomment to use with Prisma)
160
- // builder.prismaObject('User', {
161
- // fields: (t) => ({
162
- // id: t.exposeID('id'),
163
- // email: t.exposeString('email'),
164
- // name: t.exposeString('name', { nullable: true }),
165
- // posts: t.relation('posts'),
166
- // }),
167
- // });
168
- ` : ''}
254
+ ${prismaResolvers}
169
255
  `;
170
256
  }
171
257
  /**