@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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +193 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +4 -13
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +473 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/generator/context.d.ts.map +1 -1
- package/dist/generator/context.js +20 -5
- package/dist/generator/context.js.map +1 -1
- package/dist/generator/index.d.ts +1 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +1 -1
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/lists.d.ts.map +1 -1
- package/dist/generator/lists.js +33 -1
- package/dist/generator/lists.js.map +1 -1
- package/dist/generator/prisma-extensions.d.ts +11 -0
- package/dist/generator/prisma-extensions.d.ts.map +1 -0
- package/dist/generator/prisma-extensions.js +134 -0
- package/dist/generator/prisma-extensions.js.map +1 -0
- package/dist/generator/prisma.d.ts.map +1 -1
- package/dist/generator/prisma.js +4 -0
- package/dist/generator/prisma.js.map +1 -1
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/generator/types.js +151 -17
- package/dist/generator/types.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/lib/documentation-provider.d.ts +23 -0
- package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
- package/dist/mcp/lib/documentation-provider.js +471 -0
- package/dist/mcp/lib/documentation-provider.js.map +1 -1
- package/dist/mcp/lib/wizards/migration-wizard.d.ts +80 -0
- package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -0
- package/dist/mcp/lib/wizards/migration-wizard.js +499 -0
- package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -0
- package/dist/mcp/server/index.d.ts.map +1 -1
- package/dist/mcp/server/index.js +103 -0
- package/dist/mcp/server/index.js.map +1 -1
- package/dist/mcp/server/stack-mcp-server.d.ts +85 -0
- package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
- package/dist/mcp/server/stack-mcp-server.js +219 -0
- package/dist/mcp/server/stack-mcp-server.js.map +1 -1
- package/dist/migration/generators/migration-generator.d.ts +60 -0
- package/dist/migration/generators/migration-generator.d.ts.map +1 -0
- package/dist/migration/generators/migration-generator.js +510 -0
- package/dist/migration/generators/migration-generator.js.map +1 -0
- package/dist/migration/introspectors/index.d.ts +12 -0
- package/dist/migration/introspectors/index.d.ts.map +1 -0
- package/dist/migration/introspectors/index.js +10 -0
- package/dist/migration/introspectors/index.js.map +1 -0
- package/dist/migration/introspectors/keystone-introspector.d.ts +59 -0
- package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/keystone-introspector.js +229 -0
- package/dist/migration/introspectors/keystone-introspector.js.map +1 -0
- package/dist/migration/introspectors/nextjs-introspector.d.ts +59 -0
- package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/nextjs-introspector.js +159 -0
- package/dist/migration/introspectors/nextjs-introspector.js.map +1 -0
- package/dist/migration/introspectors/prisma-introspector.d.ts +45 -0
- package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/prisma-introspector.js +190 -0
- package/dist/migration/introspectors/prisma-introspector.js.map +1 -0
- package/dist/migration/types.d.ts +86 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +5 -0
- package/dist/migration/types.js.map +1 -0
- package/package.json +12 -9
- package/src/commands/__snapshots__/generate.test.ts.snap +92 -21
- package/src/commands/generate.ts +8 -19
- package/src/commands/migrate.ts +534 -0
- package/src/generator/__snapshots__/context.test.ts.snap +60 -15
- package/src/generator/__snapshots__/types.test.ts.snap +689 -95
- package/src/generator/context.test.ts +3 -1
- package/src/generator/context.ts +20 -5
- package/src/generator/index.ts +1 -1
- package/src/generator/lists.ts +39 -1
- package/src/generator/prisma-extensions.ts +159 -0
- package/src/generator/prisma.ts +5 -0
- package/src/generator/types.ts +204 -17
- package/src/index.ts +4 -0
- package/src/mcp/lib/documentation-provider.ts +507 -0
- package/src/mcp/lib/wizards/migration-wizard.ts +584 -0
- package/src/mcp/server/index.ts +121 -0
- package/src/mcp/server/stack-mcp-server.ts +243 -0
- package/src/migration/generators/migration-generator.ts +675 -0
- package/src/migration/introspectors/index.ts +12 -0
- package/src/migration/introspectors/keystone-introspector.ts +296 -0
- package/src/migration/introspectors/nextjs-introspector.ts +209 -0
- package/src/migration/introspectors/prisma-introspector.ts +233 -0
- package/src/migration/types.ts +92 -0
- package/tests/introspectors/keystone-introspector.test.ts +255 -0
- package/tests/introspectors/nextjs-introspector.test.ts +302 -0
- package/tests/introspectors/prisma-introspector.test.ts +268 -0
- package/tests/migration-generator.test.ts +592 -0
- package/tests/migration-wizard.test.ts +442 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/generator/type-patcher.d.ts +0 -13
- package/dist/generator/type-patcher.d.ts.map +0 -1
- package/dist/generator/type-patcher.js +0 -68
- package/dist/generator/type-patcher.js.map +0 -1
- package/src/generator/type-patcher.ts +0 -93
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import type { OpenSaasConfig } from '@opensaas/stack-core'
|
|
2
|
-
import * as fs from 'fs'
|
|
3
|
-
import * as path from 'path'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Patches Prisma's generated types based on field-level type patch configurations
|
|
7
|
-
*
|
|
8
|
-
* This reads Prisma's generated index.d.ts and replaces field types according to
|
|
9
|
-
* the `typePatch` configuration on each field. Fields can specify custom result types
|
|
10
|
-
* that will replace the original Prisma types in query results.
|
|
11
|
-
*
|
|
12
|
-
* The patched types are written to `.opensaas/prisma-client.d.ts` so users can
|
|
13
|
-
* import from there to get the transformed types.
|
|
14
|
-
*/
|
|
15
|
-
export function patchPrismaTypes(config: OpenSaasConfig, projectRoot: string): void {
|
|
16
|
-
const opensaasPath = config.opensaasPath || '.opensaas'
|
|
17
|
-
|
|
18
|
-
// Prisma generates to opensaasPath/prisma-client
|
|
19
|
-
const prismaClientDir = path.join(projectRoot, opensaasPath, 'prisma-client')
|
|
20
|
-
const prismaIndexPath = path.join(prismaClientDir, 'index.d.ts')
|
|
21
|
-
|
|
22
|
-
// Check if Prisma types exist
|
|
23
|
-
if (!fs.existsSync(prismaIndexPath)) {
|
|
24
|
-
console.warn(
|
|
25
|
-
'⚠️ Prisma types not found. Run `npx prisma generate` first to generate Prisma Client.',
|
|
26
|
-
)
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Read original Prisma types
|
|
31
|
-
const originalTypes = fs.readFileSync(prismaIndexPath, 'utf-8')
|
|
32
|
-
|
|
33
|
-
// Collect all fields that need type patching
|
|
34
|
-
type FieldPatch = {
|
|
35
|
-
fieldName: string
|
|
36
|
-
resultType: string
|
|
37
|
-
patchScope: 'scalars-only' | 'all'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const fieldPatches: FieldPatch[] = []
|
|
41
|
-
|
|
42
|
-
for (const listConfig of Object.values(config.lists)) {
|
|
43
|
-
for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
|
|
44
|
-
if (fieldConfig.typePatch) {
|
|
45
|
-
fieldPatches.push({
|
|
46
|
-
fieldName,
|
|
47
|
-
resultType: fieldConfig.typePatch.resultType,
|
|
48
|
-
patchScope: fieldConfig.typePatch.patchScope || 'scalars-only',
|
|
49
|
-
})
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (fieldPatches.length === 0) {
|
|
55
|
-
// No fields need patching
|
|
56
|
-
return
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Patch the types
|
|
60
|
-
let patchedTypes = originalTypes
|
|
61
|
-
|
|
62
|
-
// For each field that needs patching, replace its type
|
|
63
|
-
for (const { fieldName, resultType, patchScope } of fieldPatches) {
|
|
64
|
-
if (patchScope === 'scalars-only') {
|
|
65
|
-
// Pattern matches: fieldName: <type> ONLY inside scalars: $Extensions.GetPayloadResult<{...}>
|
|
66
|
-
// This ensures we don't patch Input types (UserCreateInput, etc.)
|
|
67
|
-
// Example match:
|
|
68
|
-
// scalars: $Extensions.GetPayloadResult<{
|
|
69
|
-
// id: string
|
|
70
|
-
// password: string ← Replace this
|
|
71
|
-
// ...
|
|
72
|
-
const pattern = new RegExp(
|
|
73
|
-
`(scalars:\\s*\\$Extensions\\.GetPayloadResult<\\{[^}]*?\\b${fieldName}:\\s*)[^,\\n}]+`,
|
|
74
|
-
'g',
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
patchedTypes = patchedTypes.replace(pattern, `$1${resultType}`)
|
|
78
|
-
} else {
|
|
79
|
-
// patchScope === 'all' - patch everywhere the field appears
|
|
80
|
-
// This is more aggressive and will patch input types too
|
|
81
|
-
const pattern = new RegExp(`(\\b${fieldName}:\\s*)[^,\\n}]+`, 'g')
|
|
82
|
-
patchedTypes = patchedTypes.replace(pattern, `$1${resultType}`)
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Write patched types back to Prisma's index.d.ts
|
|
87
|
-
// This directly modifies the Prisma-generated file with our type patches
|
|
88
|
-
fs.writeFileSync(prismaIndexPath, patchedTypes, 'utf-8')
|
|
89
|
-
|
|
90
|
-
console.log(
|
|
91
|
-
`✅ Patched Prisma types (${fieldPatches.length} field${fieldPatches.length === 1 ? '' : 's'})`,
|
|
92
|
-
)
|
|
93
|
-
}
|