@opensaas/stack-cli 0.3.0 → 0.5.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 (105) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +193 -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/commands/migrate.d.ts +9 -0
  7. package/dist/commands/migrate.d.ts.map +1 -0
  8. package/dist/commands/migrate.js +473 -0
  9. package/dist/commands/migrate.js.map +1 -0
  10. package/dist/generator/context.d.ts.map +1 -1
  11. package/dist/generator/context.js +20 -5
  12. package/dist/generator/context.js.map +1 -1
  13. package/dist/generator/index.d.ts +1 -1
  14. package/dist/generator/index.d.ts.map +1 -1
  15. package/dist/generator/index.js +1 -1
  16. package/dist/generator/index.js.map +1 -1
  17. package/dist/generator/lists.d.ts.map +1 -1
  18. package/dist/generator/lists.js +33 -1
  19. package/dist/generator/lists.js.map +1 -1
  20. package/dist/generator/prisma-extensions.d.ts +11 -0
  21. package/dist/generator/prisma-extensions.d.ts.map +1 -0
  22. package/dist/generator/prisma-extensions.js +134 -0
  23. package/dist/generator/prisma-extensions.js.map +1 -0
  24. package/dist/generator/prisma.d.ts.map +1 -1
  25. package/dist/generator/prisma.js +4 -0
  26. package/dist/generator/prisma.js.map +1 -1
  27. package/dist/generator/types.d.ts.map +1 -1
  28. package/dist/generator/types.js +151 -17
  29. package/dist/generator/types.js.map +1 -1
  30. package/dist/index.js +3 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/mcp/lib/documentation-provider.d.ts +23 -0
  33. package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
  34. package/dist/mcp/lib/documentation-provider.js +471 -0
  35. package/dist/mcp/lib/documentation-provider.js.map +1 -1
  36. package/dist/mcp/lib/wizards/migration-wizard.d.ts +80 -0
  37. package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -0
  38. package/dist/mcp/lib/wizards/migration-wizard.js +499 -0
  39. package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -0
  40. package/dist/mcp/server/index.d.ts.map +1 -1
  41. package/dist/mcp/server/index.js +103 -0
  42. package/dist/mcp/server/index.js.map +1 -1
  43. package/dist/mcp/server/stack-mcp-server.d.ts +85 -0
  44. package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
  45. package/dist/mcp/server/stack-mcp-server.js +219 -0
  46. package/dist/mcp/server/stack-mcp-server.js.map +1 -1
  47. package/dist/migration/generators/migration-generator.d.ts +60 -0
  48. package/dist/migration/generators/migration-generator.d.ts.map +1 -0
  49. package/dist/migration/generators/migration-generator.js +510 -0
  50. package/dist/migration/generators/migration-generator.js.map +1 -0
  51. package/dist/migration/introspectors/index.d.ts +12 -0
  52. package/dist/migration/introspectors/index.d.ts.map +1 -0
  53. package/dist/migration/introspectors/index.js +10 -0
  54. package/dist/migration/introspectors/index.js.map +1 -0
  55. package/dist/migration/introspectors/keystone-introspector.d.ts +59 -0
  56. package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -0
  57. package/dist/migration/introspectors/keystone-introspector.js +229 -0
  58. package/dist/migration/introspectors/keystone-introspector.js.map +1 -0
  59. package/dist/migration/introspectors/nextjs-introspector.d.ts +59 -0
  60. package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -0
  61. package/dist/migration/introspectors/nextjs-introspector.js +159 -0
  62. package/dist/migration/introspectors/nextjs-introspector.js.map +1 -0
  63. package/dist/migration/introspectors/prisma-introspector.d.ts +45 -0
  64. package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -0
  65. package/dist/migration/introspectors/prisma-introspector.js +190 -0
  66. package/dist/migration/introspectors/prisma-introspector.js.map +1 -0
  67. package/dist/migration/types.d.ts +86 -0
  68. package/dist/migration/types.d.ts.map +1 -0
  69. package/dist/migration/types.js +5 -0
  70. package/dist/migration/types.js.map +1 -0
  71. package/package.json +12 -9
  72. package/src/commands/__snapshots__/generate.test.ts.snap +92 -21
  73. package/src/commands/generate.ts +8 -19
  74. package/src/commands/migrate.ts +534 -0
  75. package/src/generator/__snapshots__/context.test.ts.snap +60 -15
  76. package/src/generator/__snapshots__/types.test.ts.snap +689 -95
  77. package/src/generator/context.test.ts +3 -1
  78. package/src/generator/context.ts +20 -5
  79. package/src/generator/index.ts +1 -1
  80. package/src/generator/lists.ts +39 -1
  81. package/src/generator/prisma-extensions.ts +159 -0
  82. package/src/generator/prisma.ts +5 -0
  83. package/src/generator/types.ts +204 -17
  84. package/src/index.ts +4 -0
  85. package/src/mcp/lib/documentation-provider.ts +507 -0
  86. package/src/mcp/lib/wizards/migration-wizard.ts +584 -0
  87. package/src/mcp/server/index.ts +121 -0
  88. package/src/mcp/server/stack-mcp-server.ts +243 -0
  89. package/src/migration/generators/migration-generator.ts +675 -0
  90. package/src/migration/introspectors/index.ts +12 -0
  91. package/src/migration/introspectors/keystone-introspector.ts +296 -0
  92. package/src/migration/introspectors/nextjs-introspector.ts +209 -0
  93. package/src/migration/introspectors/prisma-introspector.ts +233 -0
  94. package/src/migration/types.ts +92 -0
  95. package/tests/introspectors/keystone-introspector.test.ts +255 -0
  96. package/tests/introspectors/nextjs-introspector.test.ts +302 -0
  97. package/tests/introspectors/prisma-introspector.test.ts +268 -0
  98. package/tests/migration-generator.test.ts +592 -0
  99. package/tests/migration-wizard.test.ts +442 -0
  100. package/tsconfig.tsbuildinfo +1 -1
  101. package/dist/generator/type-patcher.d.ts +0 -13
  102. package/dist/generator/type-patcher.d.ts.map +0 -1
  103. package/dist/generator/type-patcher.js +0 -68
  104. package/dist/generator/type-patcher.js.map +0 -1
  105. package/src/generator/type-patcher.ts +0 -93
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Migration command - Helps migrate existing projects to OpenSaaS Stack
3
+ */
4
+ import { Command } from 'commander';
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ /**
10
+ * Detect what type of project this is
11
+ */
12
+ async function detectProjectType(cwd) {
13
+ const types = [];
14
+ // Check for Prisma
15
+ const prismaSchemaPath = path.join(cwd, 'prisma', 'schema.prisma');
16
+ if (fs.existsSync(prismaSchemaPath)) {
17
+ types.push('prisma');
18
+ }
19
+ // Check for KeystoneJS
20
+ const keystoneConfigPath = path.join(cwd, 'keystone.config.ts');
21
+ const keystoneAltPath = path.join(cwd, 'keystone.ts');
22
+ if (fs.existsSync(keystoneConfigPath) || fs.existsSync(keystoneAltPath)) {
23
+ types.push('keystone');
24
+ }
25
+ // Check for Next.js
26
+ const packageJsonPath = path.join(cwd, 'package.json');
27
+ if (fs.existsSync(packageJsonPath)) {
28
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
29
+ if (pkg.dependencies?.next || pkg.devDependencies?.next) {
30
+ types.push('nextjs');
31
+ }
32
+ }
33
+ return types;
34
+ }
35
+ /**
36
+ * Analyze a Prisma schema
37
+ */
38
+ async function analyzePrismaSchema(cwd) {
39
+ const schemaPath = path.join(cwd, 'prisma', 'schema.prisma');
40
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
41
+ // Extract models
42
+ const modelRegex = /model\s+(\w+)\s*\{([^}]+)\}/g;
43
+ const models = [];
44
+ let match;
45
+ while ((match = modelRegex.exec(schema)) !== null) {
46
+ const name = match[1];
47
+ const body = match[2];
48
+ const fieldCount = body
49
+ .split('\n')
50
+ .filter((line) => line.trim() && !line.trim().startsWith('@@') && !line.trim().startsWith('//')).length;
51
+ models.push({ name, fieldCount });
52
+ }
53
+ // Extract provider
54
+ const providerMatch = schema.match(/provider\s*=\s*"(\w+)"/);
55
+ const provider = providerMatch ? providerMatch[1] : 'unknown';
56
+ return { models, provider };
57
+ }
58
+ /**
59
+ * Ensure directory exists
60
+ */
61
+ function ensureDir(dirPath) {
62
+ if (!fs.existsSync(dirPath)) {
63
+ fs.mkdirSync(dirPath, { recursive: true });
64
+ }
65
+ }
66
+ /**
67
+ * Generate template content with placeholders replaced
68
+ */
69
+ function generateTemplateContent(template, data) {
70
+ const projectType = data.projectTypes[0] || 'unknown';
71
+ const projectTypeLower = projectType.toLowerCase();
72
+ const modelCount = data.models?.length || 0;
73
+ const modelList = data.models?.map((m) => `- ${m.name} (${m.fieldCount} fields)`).join('\n') || '';
74
+ const modelDetails = data.models?.map((m) => `- **${m.name}**: ${m.fieldCount} fields`).join('\n') || '';
75
+ return template
76
+ .replace(/\{\{PROJECT_TYPES\}\}/g, data.projectTypes.join(', '))
77
+ .replace(/\{\{PROJECT_TYPE\}\}/g, projectType)
78
+ .replace(/\{\{PROJECT_TYPE_LOWER\}\}/g, projectTypeLower)
79
+ .replace(/\{\{PROVIDER\}\}/g, data.provider || 'sqlite')
80
+ .replace(/\{\{MODEL_COUNT\}\}/g, String(modelCount))
81
+ .replace(/\{\{HAS_AUTH\}\}/g, String(data.hasAuth || false))
82
+ .replace(/\{\{MODEL_LIST\}\}/g, modelList)
83
+ .replace(/\{\{MODEL_DETAILS\}\}/g, modelDetails);
84
+ }
85
+ /**
86
+ * Setup Claude Code integration
87
+ */
88
+ async function setupClaudeCode(cwd, analysis) {
89
+ const claudeDir = path.join(cwd, '.claude');
90
+ const agentsDir = path.join(claudeDir, 'agents');
91
+ const commandsDir = path.join(claudeDir, 'commands');
92
+ // Create directories
93
+ ensureDir(agentsDir);
94
+ ensureDir(commandsDir);
95
+ // Create settings.json
96
+ const settings = {
97
+ mcpServers: {
98
+ 'opensaas-migration': {
99
+ command: 'npx',
100
+ args: ['@opensaas/stack-cli', 'mcp', 'start'],
101
+ disabled: false,
102
+ },
103
+ },
104
+ };
105
+ fs.writeFileSync(path.join(claudeDir, 'settings.json'), JSON.stringify(settings, null, 2));
106
+ // Create README template
107
+ const readmeTemplate = `# OpenSaaS Stack Migration
108
+
109
+ This project is being migrated to OpenSaaS Stack.
110
+
111
+ ## Project Summary
112
+
113
+ - **Project Type:** {{PROJECT_TYPES}}
114
+ - **Database Provider:** {{PROVIDER}}
115
+ - **Models Detected:** {{MODEL_COUNT}}
116
+
117
+ ### Models
118
+
119
+ {{MODEL_LIST}}
120
+
121
+ ## Quick Start
122
+
123
+ Ask Claude: **"Help me migrate to OpenSaaS Stack"**
124
+
125
+ Claude will guide you through:
126
+ 1. Reviewing your current schema
127
+ 2. Configuring access control
128
+ 3. Setting up authentication (optional)
129
+ 4. Generating \`opensaas.config.ts\`
130
+
131
+ ## Available Commands
132
+
133
+ | Command | Description |
134
+ |---------|-------------|
135
+ | \`/analyze-schema\` | View detailed schema analysis |
136
+ | \`/generate-config\` | Generate the config file |
137
+ | \`/validate-migration\` | Validate generated config |
138
+
139
+ ## Resources
140
+
141
+ - [OpenSaaS Stack Documentation](https://stack.opensaas.au/)
142
+ - [Migration Guide](https://stack.opensaas.au/guides/migration)
143
+ - [GitHub Repository](https://github.com/OpenSaasAU/stack)
144
+
145
+ ## Generated By
146
+
147
+ This migration was set up using:
148
+ \`\`\`bash
149
+ npx @opensaas/stack-cli migrate --with-ai
150
+ \`\`\`
151
+ `;
152
+ fs.writeFileSync(path.join(claudeDir, 'README.md'), generateTemplateContent(readmeTemplate, analysis));
153
+ // Create migration assistant agent template
154
+ const agentTemplate = `You are the OpenSaaS Stack Migration Assistant, helping users migrate their existing projects to OpenSaaS Stack.
155
+
156
+ ## Project Context
157
+
158
+ **Project Type:** {{PROJECT_TYPES}}
159
+ **Database Provider:** {{PROVIDER}}
160
+ **Total Models:** {{MODEL_COUNT}}
161
+
162
+ ### Detected Models
163
+
164
+ {{MODEL_DETAILS}}
165
+
166
+ ## Your Role
167
+
168
+ Guide the user through a complete migration to OpenSaaS Stack:
169
+
170
+ 1. **Analyze** their current project structure
171
+ 2. **Explain** what OpenSaaS Stack offers (access control, admin UI, type safety)
172
+ 3. **Guide** them through the migration wizard
173
+ 4. **Generate** a working \`opensaas.config.ts\`
174
+ 5. **Validate** the generated configuration
175
+ 6. **Provide** clear next steps
176
+
177
+ ## Available MCP Tools
178
+
179
+ ### Schema Analysis
180
+ - \`opensaas_introspect_prisma\` - Analyze Prisma schema in detail
181
+ - \`opensaas_introspect_keystone\` - Analyze KeystoneJS config
182
+
183
+ ### Migration Wizard
184
+ - \`opensaas_start_migration\` - Start the interactive wizard
185
+ - \`opensaas_answer_migration\` - Answer wizard questions
186
+
187
+ ### Documentation
188
+ - \`opensaas_search_migration_docs\` - Search migration documentation
189
+ - \`opensaas_get_example\` - Get example code patterns
190
+
191
+ ### Validation
192
+ - \`opensaas_validate_feature\` - Validate implementation
193
+
194
+ ## Conversation Guidelines
195
+
196
+ ### When the user says "help me migrate" or similar:
197
+
198
+ 1. **Acknowledge** their project:
199
+ > "I can see you have a {{PROJECT_TYPE}} project with {{MODEL_COUNT}} models. Let me help you migrate to OpenSaaS Stack!"
200
+
201
+ 2. **Start the wizard** by calling:
202
+ \`\`\`
203
+ opensaas_start_migration({ projectType: "{{PROJECT_TYPE_LOWER}}" })
204
+ \`\`\`
205
+
206
+ 3. **Present questions naturally** - don't mention session IDs or technical details to the user
207
+
208
+ 4. **Explain choices** - help them understand what each option means:
209
+ - Access control patterns
210
+ - Authentication options
211
+ - Database configuration
212
+
213
+ 5. **Show progress** - let them know how far along they are
214
+
215
+ 6. **Generate the config** when complete and explain what was created
216
+
217
+ ### When explaining OpenSaaS Stack:
218
+
219
+ Highlight these benefits:
220
+ - **Built-in access control** - Secure by default
221
+ - **Admin UI** - Auto-generated from your schema
222
+ - **Type safety** - Full TypeScript support
223
+ - **Prisma integration** - Uses familiar ORM
224
+ - **Plugin system** - Easy to extend
225
+
226
+ ### When answering questions:
227
+
228
+ - Use \`opensaas_search_migration_docs\` to find accurate information
229
+ - Use \`opensaas_get_example\` to show code patterns
230
+ - Be honest if something isn't supported
231
+
232
+ ### Tone
233
+
234
+ - Be encouraging and helpful
235
+ - Explain technical concepts simply
236
+ - Celebrate progress ("Great choice!", "Almost there!")
237
+ - Don't overwhelm with information
238
+
239
+ ## Example Conversation
240
+
241
+ **User:** Help me migrate to OpenSaaS Stack
242
+
243
+ **You:** I can see you have a {{PROJECT_TYPE}} project with {{MODEL_COUNT}} models. OpenSaaS Stack will give you:
244
+
245
+ - Automatic admin UI for managing your data
246
+ - Built-in access control to secure your API
247
+ - Type-safe database operations
248
+
249
+ Let me start the migration wizard to configure your project...
250
+
251
+ [Call opensaas_start_migration]
252
+
253
+ **User:** [answers questions]
254
+
255
+ **You:** [Continue through wizard, explain each choice, generate final config]
256
+
257
+ ## Error Handling
258
+
259
+ If something goes wrong:
260
+ 1. Explain what happened in simple terms
261
+ 2. Suggest alternatives or manual steps
262
+ 3. Link to documentation for more help
263
+
264
+ ## After Migration
265
+
266
+ Once the config is generated, guide them through:
267
+ 1. Installing dependencies
268
+ 2. Running \`opensaas generate\`
269
+ 3. Running \`prisma db push\`
270
+ 4. Starting their dev server
271
+ 5. Visiting the admin UI
272
+ `;
273
+ fs.writeFileSync(path.join(agentsDir, 'migration-assistant.md'), generateTemplateContent(agentTemplate, analysis));
274
+ // Create analyze-schema command
275
+ const analyzeSchemaTemplate = `Analyze the current project schema and provide a detailed breakdown.
276
+
277
+ ## Instructions
278
+
279
+ 1. Use \`opensaas_introspect_prisma\` or \`opensaas_introspect_keystone\` based on project type
280
+ 2. Present the results in a clear, organized format
281
+ 3. Highlight:
282
+ - All models and their fields
283
+ - Relationships between models
284
+ - Potential access control patterns
285
+ - Any issues or warnings
286
+
287
+ ## Output Format
288
+
289
+ Present like this:
290
+
291
+ ### Models Summary
292
+
293
+ | Model | Fields | Has Relations | Suggested Access |
294
+ |-------|--------|---------------|------------------|
295
+ | ... | ... | ... | ... |
296
+
297
+ ### Detailed Analysis
298
+
299
+ [For each model, show fields and relationships]
300
+
301
+ ### Recommendations
302
+
303
+ [Based on the schema, suggest access control patterns]
304
+ `;
305
+ fs.writeFileSync(path.join(commandsDir, 'analyze-schema.md'), analyzeSchemaTemplate);
306
+ // Create generate-config command
307
+ const generateConfigTemplate = `Generate the opensaas.config.ts file for this project.
308
+
309
+ ## Instructions
310
+
311
+ 1. If migration wizard hasn't been started, start it:
312
+ \`\`\`
313
+ opensaas_start_migration({ projectType: "{{PROJECT_TYPE_LOWER}}" })
314
+ \`\`\`
315
+
316
+ 2. Guide the user through any remaining questions
317
+
318
+ 3. When complete, display:
319
+ - The generated config file
320
+ - Dependencies to install
321
+ - Next steps to run
322
+
323
+ 4. Offer to explain any part of the generated config
324
+
325
+ ## Quick Mode
326
+
327
+ If the user wants defaults, use these answers:
328
+ - preserve_database: true
329
+ - db_provider: {{PROVIDER}}
330
+ - enable_auth: {{HAS_AUTH}}
331
+ - default_access: "public-read-auth-write"
332
+ - admin_base_path: "/admin"
333
+ `;
334
+ fs.writeFileSync(path.join(commandsDir, 'generate-config.md'), generateTemplateContent(generateConfigTemplate, analysis));
335
+ // Create validate-migration command
336
+ const validateMigrationTemplate = `Validate the generated opensaas.config.ts file.
337
+
338
+ ## Instructions
339
+
340
+ 1. Check if opensaas.config.ts exists in the project root
341
+
342
+ 2. If it exists, verify:
343
+ - Syntax is valid TypeScript
344
+ - All imports are correct
345
+ - Database config is complete
346
+ - Lists match original schema
347
+
348
+ 3. Try running:
349
+ \`\`\`bash
350
+ npx @opensaas/stack-cli generate
351
+ \`\`\`
352
+
353
+ 4. Report any errors and suggest fixes
354
+
355
+ 5. If validation passes, confirm next steps:
356
+ - \`npx prisma generate\`
357
+ - \`npx prisma db push\`
358
+ - \`pnpm dev\`
359
+
360
+ ## Common Issues
361
+
362
+ - Missing dependencies → suggest \`pnpm add ...\`
363
+ - Database URL not set → remind about .env file
364
+ - Type errors → suggest specific fixes
365
+ `;
366
+ fs.writeFileSync(path.join(commandsDir, 'validate-migration.md'), validateMigrationTemplate);
367
+ }
368
+ /**
369
+ * Main migrate command
370
+ */
371
+ async function migrateCommand(options) {
372
+ const cwd = process.cwd();
373
+ console.log(chalk.bold.cyan('\n🚀 OpenSaaS Stack Migration\n'));
374
+ // Step 1: Detect project type
375
+ const spinner = ora('Detecting project type...').start();
376
+ let projectTypes;
377
+ if (options.type) {
378
+ projectTypes = [options.type];
379
+ }
380
+ else {
381
+ projectTypes = await detectProjectType(cwd);
382
+ }
383
+ if (projectTypes.length === 0) {
384
+ spinner.fail(chalk.red('No recognizable project found'));
385
+ console.log(chalk.dim('\nThis command works with:'));
386
+ console.log(chalk.dim(' - Prisma projects (prisma/schema.prisma)'));
387
+ console.log(chalk.dim(' - KeystoneJS projects (keystone.config.ts)'));
388
+ console.log(chalk.dim(' - Next.js projects (package.json with next)'));
389
+ console.log(chalk.dim('\nUse --type to force a project type.'));
390
+ process.exit(1);
391
+ }
392
+ spinner.succeed(chalk.green(`Detected: ${projectTypes.join(', ')}`));
393
+ // Step 2: Analyze schema
394
+ const analysisSpinner = ora('Analyzing schema...').start();
395
+ const analysis = {
396
+ projectTypes,
397
+ cwd,
398
+ };
399
+ if (projectTypes.includes('prisma')) {
400
+ try {
401
+ const prismaAnalysis = await analyzePrismaSchema(cwd);
402
+ analysis.models = prismaAnalysis.models;
403
+ analysis.provider = prismaAnalysis.provider;
404
+ }
405
+ catch (_error) {
406
+ // Prisma analysis failed, continue without it
407
+ }
408
+ }
409
+ if (analysis.models && analysis.models.length > 0) {
410
+ analysisSpinner.succeed(chalk.green(`Found ${analysis.models.length} models`));
411
+ // Display model tree
412
+ const lastIndex = analysis.models.length - 1;
413
+ analysis.models.forEach((model, index) => {
414
+ const prefix = index === lastIndex ? '└─' : '├─';
415
+ console.log(chalk.dim(` ${prefix} ${model.name} (${model.fieldCount} fields)`));
416
+ });
417
+ }
418
+ else {
419
+ analysisSpinner.succeed(chalk.yellow('No models found (will create from scratch)'));
420
+ }
421
+ // Step 3: Setup Claude Code (if --with-ai)
422
+ if (options.withAi) {
423
+ const claudeSpinner = ora('Setting up Claude Code...').start();
424
+ try {
425
+ await setupClaudeCode(cwd, analysis);
426
+ claudeSpinner.succeed(chalk.green('Claude Code ready'));
427
+ console.log(chalk.dim(' ├─ Created .claude directory'));
428
+ console.log(chalk.dim(' ├─ Generated migration assistant'));
429
+ console.log(chalk.dim(' └─ Registered MCP server'));
430
+ }
431
+ catch (error) {
432
+ claudeSpinner.fail(chalk.red('Failed to setup Claude Code'));
433
+ console.error(error);
434
+ }
435
+ }
436
+ // Step 4: Display next steps
437
+ console.log(chalk.green('\n✅ Analysis complete!\n'));
438
+ if (options.withAi) {
439
+ console.log(chalk.bold('🤖 Next Steps:\n'));
440
+ console.log(chalk.cyan(' 1. Open this project in Claude Code'));
441
+ console.log(chalk.cyan(' 2. Ask: "Help me migrate to OpenSaaS Stack"'));
442
+ console.log(chalk.cyan(' 3. Follow the interactive wizard'));
443
+ }
444
+ else {
445
+ console.log(chalk.bold('📝 Next Steps:\n'));
446
+ console.log(chalk.cyan(' 1. Run with --with-ai for AI-guided migration'));
447
+ console.log(chalk.cyan(' 2. Or manually create opensaas.config.ts'));
448
+ console.log(chalk.dim('\n See: https://stack.opensaas.au/guides/migration'));
449
+ }
450
+ console.log(chalk.dim(`\n📚 Documentation: https://stack.opensaas.au/guides/migration\n`));
451
+ }
452
+ /**
453
+ * Create the migrate command for Commander
454
+ */
455
+ export function createMigrateCommand() {
456
+ const migrate = new Command('migrate');
457
+ migrate.description('Migrate an existing project to OpenSaaS Stack');
458
+ migrate
459
+ .option('--with-ai', 'Enable AI-guided migration with Claude Code')
460
+ .option('--type <type>', 'Force project type (prisma, nextjs, keystone)')
461
+ .action(async (options) => {
462
+ try {
463
+ await migrateCommand(options);
464
+ process.exit(0);
465
+ }
466
+ catch (error) {
467
+ console.error(chalk.red('\n❌ Migration failed:'), error);
468
+ process.exit(1);
469
+ }
470
+ });
471
+ return migrate;
472
+ }
473
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0L9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU7E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAyM9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU7E"}
@@ -117,6 +117,7 @@ import { getContext as getOpensaasContext } from '@opensaas/stack-core'
117
117
  import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
118
118
  import { PrismaClient } from './prisma-client/client'
119
119
  import type { Context } from './types'
120
+ import { prismaExtensions } from './prisma-extensions'
120
121
  import configOrPromise from '../opensaas.config'
121
122
 
122
123
  // Resolve config if it's a Promise (when plugins are present)
@@ -124,15 +125,29 @@ const configPromise = Promise.resolve(configOrPromise)
124
125
  let resolvedConfig: OpenSaasConfig | null = null
125
126
 
126
127
  // Internal Prisma singleton - managed automatically
127
- const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | null }
128
- let prisma: PrismaClient | null = null
128
+ const globalForPrisma = globalThis as unknown as { prisma: ReturnType<typeof createExtendedPrisma> | null }
129
+ let prisma: ReturnType<typeof createExtendedPrisma> | null = null
130
+
131
+ /**
132
+ * Create Prisma client with result extensions
133
+ */
134
+ function createExtendedPrisma(basePrisma: PrismaClient) {
135
+ // Check if there are any extensions to apply
136
+ if (Object.keys(prismaExtensions).length === 0) {
137
+ return basePrisma
138
+ }
139
+ // Apply result extensions
140
+ return basePrisma.$extends(prismaExtensions)
141
+ }
129
142
 
130
143
  async function getPrisma() {
131
144
  if (!prisma) {
132
145
  if (!resolvedConfig) {
133
146
  resolvedConfig = await configPromise
134
147
  }
135
- prisma = globalForPrisma.prisma ?? ${prismaInstantiation}
148
+ const basePrisma = ${prismaInstantiation}
149
+ const extendedPrisma = createExtendedPrisma(basePrisma)
150
+ prisma = globalForPrisma.prisma ?? extendedPrisma
136
151
  if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
137
152
  }
138
153
  return prisma
@@ -169,7 +184,7 @@ ${storageUtilities}
169
184
  export async function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Promise<Context<TSession>> {
170
185
  const config = await getConfig()
171
186
  const prismaClient = await getPrisma()
172
- return getOpensaasContext(config, prismaClient, session ?? null, storage) as Context<TSession>
187
+ return getOpensaasContext(config, prismaClient, session ?? null, storage) as unknown as Context<TSession>
173
188
  }
174
189
 
175
190
  /**
@@ -179,7 +194,7 @@ export async function getContext<TSession extends OpensaasSession = OpensaasSess
179
194
  export const rawOpensaasContext = (async () => {
180
195
  const config = await getConfig()
181
196
  const prismaClient = await getPrisma()
182
- return getOpensaasContext(config, prismaClient, null, storage)
197
+ return getOpensaasContext(config, prismaClient, null, storage) as unknown as Context
183
198
  })()
184
199
 
185
200
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,0DAA0D;QAC5D,CAAC,CAAC;;;;;;;;;;;;;;;;;SAiBG,CAAA;IAEP,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,UAAU;QACjC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDL;QACG,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBL,CAAA;IAEC,2CAA2C;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCA4BgC,mBAAmB;;;;;;;;;;;;EAY1D,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjB,CAAA;AACD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,UAAkB;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEvC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,0DAA0D;QAC5D,CAAC,CAAC;;;;;;;;;;;;;;;;;SAiBG,CAAA;IAEP,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,UAAU;QACjC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDL;QACG,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBL,CAAA;IAEC,2CAA2C;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAyCgB,mBAAmB;;;;;;;;;;;;;;EAc1C,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjB,CAAA;AACD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,UAAkB;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEvC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC"}
@@ -2,7 +2,7 @@ export { generatePrismaSchema, writePrismaSchema } from './prisma.js';
2
2
  export { generatePrismaConfig, writePrismaConfig } from './prisma-config.js';
3
3
  export { generateTypes, writeTypes } from './types.js';
4
4
  export { generateListsNamespace, writeLists } from './lists.js';
5
- export { patchPrismaTypes } from './type-patcher.js';
6
5
  export { generateContext, writeContext } from './context.js';
7
6
  export { generatePluginTypes, writePluginTypes } from './plugin-types.js';
7
+ export { generatePrismaExtensions, writePrismaExtensions } from './prisma-extensions.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -2,7 +2,7 @@ export { generatePrismaSchema, writePrismaSchema } from './prisma.js';
2
2
  export { generatePrismaConfig, writePrismaConfig } from './prisma-config.js';
3
3
  export { generateTypes, writeTypes } from './types.js';
4
4
  export { generateListsNamespace, writeLists } from './lists.js';
5
- export { patchPrismaTypes } from './type-patcher.js';
6
5
  export { generateContext, writeContext } from './context.js';
7
6
  export { generatePluginTypes, writePluginTypes } from './plugin-types.js';
7
+ export { generatePrismaExtensions, writePrismaExtensions } from './prisma-extensions.js';
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/generator/lists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0DrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/generator/lists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAuB1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6ErE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
@@ -1,5 +1,22 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ /**
4
+ * Map field type string to TypeScript field type name
5
+ */
6
+ function getFieldTypeName(fieldType) {
7
+ const typeMap = {
8
+ text: 'TextField',
9
+ integer: 'IntegerField',
10
+ checkbox: 'CheckboxField',
11
+ timestamp: 'TimestampField',
12
+ password: 'PasswordField',
13
+ select: 'SelectField',
14
+ relationship: 'RelationshipField',
15
+ json: 'JsonField',
16
+ virtual: 'VirtualField',
17
+ };
18
+ return typeMap[fieldType] || 'BaseFieldConfig';
19
+ }
3
20
  /**
4
21
  * Generate Lists namespace with TypeInfo for each list
5
22
  * This provides strongly-typed hooks with Prisma input types
@@ -56,13 +73,28 @@ export function generateListsNamespace(config) {
56
73
  // Start Lists namespace
57
74
  lines.push('export declare namespace Lists {');
58
75
  // Generate type for each list
59
- for (const listName of Object.keys(config.lists)) {
76
+ for (const [listName, listConfig] of Object.entries(config.lists)) {
60
77
  lines.push(` export type ${listName} = import('@opensaas/stack-core').ListConfig<Lists.${listName}.TypeInfo>`);
61
78
  lines.push('');
62
79
  lines.push(` namespace ${listName} {`);
63
80
  lines.push(` export type Item = import('./types').${listName}`);
81
+ lines.push('');
82
+ // Generate Fields type
83
+ lines.push(` /**`);
84
+ lines.push(` * Field configurations for ${listName}`);
85
+ lines.push(` * Maps field names to their field config types`);
86
+ lines.push(` */`);
87
+ lines.push(` export type Fields = {`);
88
+ for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
89
+ const fieldTypeName = getFieldTypeName(fieldConfig.type);
90
+ lines.push(` ${fieldName}: import('@opensaas/stack-core').${fieldTypeName}<Lists.${listName}.TypeInfo>`);
91
+ }
92
+ lines.push(` }`);
93
+ lines.push('');
94
+ // Generate TypeInfo with fields property
64
95
  lines.push(` export type TypeInfo = {`);
65
96
  lines.push(` key: '${listName}'`);
97
+ lines.push(` fields: Fields`);
66
98
  lines.push(` item: Item`);
67
99
  lines.push(` inputs: {`);
68
100
  lines.push(` create: import('./prisma-client/client').Prisma.${listName}CreateInput`);
@@ -1 +1 @@
1
- {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/generator/lists.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/generator/lists.ts"],"names":[],"mappings":"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"}