@ariacode/cli 0.1.0 → 0.2.1
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/README.md +175 -4
- package/dist/actions/db-ask.d.ts +12 -0
- package/dist/actions/db-ask.js +130 -0
- package/dist/actions/db-ask.js.map +1 -0
- package/dist/actions/db-explain.d.ts +12 -0
- package/dist/actions/db-explain.js +123 -0
- package/dist/actions/db-explain.js.map +1 -0
- package/dist/actions/db-migrate.d.ts +13 -0
- package/dist/actions/db-migrate.js +124 -0
- package/dist/actions/db-migrate.js.map +1 -0
- package/dist/actions/db-schema.d.ts +11 -0
- package/dist/actions/db-schema.js +38 -0
- package/dist/actions/db-schema.js.map +1 -0
- package/dist/actions/upgrade-deps.d.ts +14 -0
- package/dist/actions/upgrade-deps.js +227 -0
- package/dist/actions/upgrade-deps.js.map +1 -0
- package/dist/actions/upgrade-prisma.d.ts +12 -0
- package/dist/actions/upgrade-prisma.js +177 -0
- package/dist/actions/upgrade-prisma.js.map +1 -0
- package/dist/actions.js +48 -13
- package/dist/actions.js.map +1 -1
- package/dist/agent.js +28 -9
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +82 -0
- package/dist/cli.js.map +1 -1
- package/dist/db/client-usage.d.ts +19 -0
- package/dist/db/client-usage.js +107 -0
- package/dist/db/client-usage.js.map +1 -0
- package/dist/db/migrate.d.ts +26 -0
- package/dist/db/migrate.js +59 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +106 -0
- package/dist/db/schema.js +275 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/summary.d.ts +12 -0
- package/dist/db/summary.js +133 -0
- package/dist/db/summary.js.map +1 -0
- package/dist/fs-helpers.d.ts +19 -0
- package/dist/fs-helpers.js +92 -0
- package/dist/fs-helpers.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.js +86 -0
- package/dist/parser.js.map +1 -1
- package/dist/prompt-loader.d.ts +9 -0
- package/dist/prompt-loader.js +26 -0
- package/dist/prompt-loader.js.map +1 -0
- package/dist/prompts/db_ask.md +39 -0
- package/dist/prompts/db_explain.md +43 -0
- package/dist/prompts/db_migrate.md +48 -0
- package/dist/prompts/upgrade_deps.md +23 -0
- package/dist/prompts/upgrade_prisma.md +28 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.js +6 -35
- package/dist/provider.js.map +1 -1
- package/dist/storage.d.ts +11 -0
- package/dist/storage.js +36 -4
- package/dist/storage.js.map +1 -1
- package/dist/tools.d.ts +26 -0
- package/dist/tools.js +256 -8
- package/dist/tools.js.map +1 -1
- package/dist/upgrade/changelog.d.ts +21 -0
- package/dist/upgrade/changelog.js +62 -0
- package/dist/upgrade/changelog.js.map +1 -0
- package/dist/upgrade/classifier.d.ts +25 -0
- package/dist/upgrade/classifier.js +78 -0
- package/dist/upgrade/classifier.js.map +1 -0
- package/dist/upgrade/outdated.d.ts +17 -0
- package/dist/upgrade/outdated.js +138 -0
- package/dist/upgrade/outdated.js.map +1 -0
- package/dist/upgrade/prisma-upgrade.d.ts +20 -0
- package/dist/upgrade/prisma-upgrade.js +63 -0
- package/dist/upgrade/prisma-upgrade.js.map +1 -0
- package/package.json +7 -4
- package/dist/prompts/prompts/ask.md +0 -20
- package/dist/prompts/prompts/explore.md +0 -38
- package/dist/prompts/prompts/patch.md +0 -27
- package/dist/prompts/prompts/plan.md +0 -41
- package/dist/prompts/prompts/review.md +0 -33
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-usage.js","sourceRoot":"","sources":["../../src/db/client-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema change proposal helpers for aria db migrate.
|
|
3
|
+
* Validates proposed schema content and generates diffs.
|
|
4
|
+
* Never executes prisma migrate commands.
|
|
5
|
+
*/
|
|
6
|
+
import type { MutationSummary } from '../context.js';
|
|
7
|
+
export interface SchemaChangeProposal {
|
|
8
|
+
diffId: string;
|
|
9
|
+
diff: string;
|
|
10
|
+
summary: MutationSummary;
|
|
11
|
+
schemaPath: string;
|
|
12
|
+
newContent: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate that content is parseable as a Prisma schema.
|
|
16
|
+
* Returns null on success, error message on failure.
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateSchemaContent(content: string): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Build a SchemaChangeProposal from old and new schema content.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildSchemaChangeProposal(schemaPath: string, oldContent: string, newContent: string): SchemaChangeProposal;
|
|
23
|
+
/**
|
|
24
|
+
* Return the manual migration commands the user should run after schema update.
|
|
25
|
+
*/
|
|
26
|
+
export declare function manualMigrationInstructions(packageManager?: string): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema change proposal helpers for aria db migrate.
|
|
3
|
+
* Validates proposed schema content and generates diffs.
|
|
4
|
+
* Never executes prisma migrate commands.
|
|
5
|
+
*/
|
|
6
|
+
import { createPatch } from 'diff';
|
|
7
|
+
import { parsePrismaSchemaContent } from './schema.js';
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
9
|
+
/**
|
|
10
|
+
* Validate that content is parseable as a Prisma schema.
|
|
11
|
+
* Returns null on success, error message on failure.
|
|
12
|
+
*/
|
|
13
|
+
export function validateSchemaContent(content) {
|
|
14
|
+
try {
|
|
15
|
+
parsePrismaSchemaContent(content);
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return err instanceof Error ? err.message : String(err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build a SchemaChangeProposal from old and new schema content.
|
|
24
|
+
*/
|
|
25
|
+
export function buildSchemaChangeProposal(schemaPath, oldContent, newContent) {
|
|
26
|
+
const diff = createPatch(schemaPath, oldContent, newContent, 'current', 'proposed');
|
|
27
|
+
const diffId = randomUUID();
|
|
28
|
+
const summary = {
|
|
29
|
+
action: 'db_migrate_schema',
|
|
30
|
+
affectedFiles: [schemaPath],
|
|
31
|
+
commandsToRun: [],
|
|
32
|
+
migrations: [],
|
|
33
|
+
riskLevel: 'high',
|
|
34
|
+
reversible: true,
|
|
35
|
+
rollbackHints: [`git checkout -- ${schemaPath}`],
|
|
36
|
+
diffId,
|
|
37
|
+
};
|
|
38
|
+
return { diffId, diff, summary, schemaPath, newContent };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Return the manual migration commands the user should run after schema update.
|
|
42
|
+
*/
|
|
43
|
+
export function manualMigrationInstructions(packageManager = 'npx') {
|
|
44
|
+
const pm = packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npx';
|
|
45
|
+
return [
|
|
46
|
+
'',
|
|
47
|
+
'To apply this migration, run:',
|
|
48
|
+
'',
|
|
49
|
+
' Development:',
|
|
50
|
+
` ${pm} prisma migrate dev --name <migration_name>`,
|
|
51
|
+
'',
|
|
52
|
+
' Production:',
|
|
53
|
+
` ${pm} prisma migrate deploy`,
|
|
54
|
+
'',
|
|
55
|
+
'Aria does not run migrations automatically.',
|
|
56
|
+
'Review the generated SQL before applying to production.',
|
|
57
|
+
].join('\n');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUzC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC;QACH,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,UAAkB,EAClB,UAAkB;IAElB,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAoB;QAC/B,MAAM,EAAE,mBAAmB;QAC3B,aAAa,EAAE,CAAC,UAAU,CAAC;QAC3B,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,CAAC,mBAAmB,UAAU,EAAE,CAAC;QAChD,MAAM;KACP,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,iBAAyB,KAAK;IACxE,MAAM,EAAE,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3F,OAAO;QACL,EAAE;QACF,+BAA+B;QAC/B,EAAE;QACF,gBAAgB;QAChB,OAAO,EAAE,6CAA6C;QACtD,EAAE;QACF,eAAe;QACf,OAAO,EAAE,wBAAwB;QACjC,EAAE;QACF,6CAA6C;QAC7C,yDAAyD;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma schema parser — wraps @mrleebo/prisma-ast to provide a clean typed interface.
|
|
3
|
+
* Schema-aware only: no database connections, no DATABASE_URL parsing.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export declare const PrismaFieldSchema: z.ZodObject<{
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
type: z.ZodString;
|
|
9
|
+
isList: z.ZodBoolean;
|
|
10
|
+
isOptional: z.ZodBoolean;
|
|
11
|
+
isId: z.ZodBoolean;
|
|
12
|
+
isUnique: z.ZodBoolean;
|
|
13
|
+
isRelation: z.ZodBoolean;
|
|
14
|
+
relationName: z.ZodNullable<z.ZodString>;
|
|
15
|
+
relationFields: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
16
|
+
relationReferences: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
17
|
+
defaultValue: z.ZodNullable<z.ZodString>;
|
|
18
|
+
attributes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export declare const PrismaModelSchema: z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
fields: z.ZodArray<z.ZodObject<{
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
type: z.ZodString;
|
|
25
|
+
isList: z.ZodBoolean;
|
|
26
|
+
isOptional: z.ZodBoolean;
|
|
27
|
+
isId: z.ZodBoolean;
|
|
28
|
+
isUnique: z.ZodBoolean;
|
|
29
|
+
isRelation: z.ZodBoolean;
|
|
30
|
+
relationName: z.ZodNullable<z.ZodString>;
|
|
31
|
+
relationFields: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
32
|
+
relationReferences: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
33
|
+
defaultValue: z.ZodNullable<z.ZodString>;
|
|
34
|
+
attributes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
indexes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
37
|
+
fields: z.ZodArray<z.ZodString>;
|
|
38
|
+
type: z.ZodEnum<{
|
|
39
|
+
index: "index";
|
|
40
|
+
unique: "unique";
|
|
41
|
+
fulltext: "fulltext";
|
|
42
|
+
}>;
|
|
43
|
+
name: z.ZodNullable<z.ZodString>;
|
|
44
|
+
}, z.core.$strip>>>;
|
|
45
|
+
documentation: z.ZodNullable<z.ZodString>;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
export declare const PrismaEnumSchema: z.ZodObject<{
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
values: z.ZodArray<z.ZodString>;
|
|
50
|
+
documentation: z.ZodNullable<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
export declare const PrismaSchemaInfoSchema: z.ZodObject<{
|
|
53
|
+
path: z.ZodString;
|
|
54
|
+
datasourceProvider: z.ZodNullable<z.ZodString>;
|
|
55
|
+
models: z.ZodArray<z.ZodObject<{
|
|
56
|
+
name: z.ZodString;
|
|
57
|
+
fields: z.ZodArray<z.ZodObject<{
|
|
58
|
+
name: z.ZodString;
|
|
59
|
+
type: z.ZodString;
|
|
60
|
+
isList: z.ZodBoolean;
|
|
61
|
+
isOptional: z.ZodBoolean;
|
|
62
|
+
isId: z.ZodBoolean;
|
|
63
|
+
isUnique: z.ZodBoolean;
|
|
64
|
+
isRelation: z.ZodBoolean;
|
|
65
|
+
relationName: z.ZodNullable<z.ZodString>;
|
|
66
|
+
relationFields: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
67
|
+
relationReferences: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
68
|
+
defaultValue: z.ZodNullable<z.ZodString>;
|
|
69
|
+
attributes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
70
|
+
}, z.core.$strip>>;
|
|
71
|
+
indexes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
72
|
+
fields: z.ZodArray<z.ZodString>;
|
|
73
|
+
type: z.ZodEnum<{
|
|
74
|
+
index: "index";
|
|
75
|
+
unique: "unique";
|
|
76
|
+
fulltext: "fulltext";
|
|
77
|
+
}>;
|
|
78
|
+
name: z.ZodNullable<z.ZodString>;
|
|
79
|
+
}, z.core.$strip>>>;
|
|
80
|
+
documentation: z.ZodNullable<z.ZodString>;
|
|
81
|
+
}, z.core.$strip>>;
|
|
82
|
+
enums: z.ZodArray<z.ZodObject<{
|
|
83
|
+
name: z.ZodString;
|
|
84
|
+
values: z.ZodArray<z.ZodString>;
|
|
85
|
+
documentation: z.ZodNullable<z.ZodString>;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
generators: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
88
|
+
name: z.ZodString;
|
|
89
|
+
provider: z.ZodString;
|
|
90
|
+
}, z.core.$strip>>>;
|
|
91
|
+
}, z.core.$strip>;
|
|
92
|
+
export type PrismaField = z.infer<typeof PrismaFieldSchema>;
|
|
93
|
+
export type PrismaModel = z.infer<typeof PrismaModelSchema>;
|
|
94
|
+
export type PrismaEnum = z.infer<typeof PrismaEnumSchema>;
|
|
95
|
+
export type PrismaSchemaInfo = z.infer<typeof PrismaSchemaInfoSchema>;
|
|
96
|
+
export declare function findSchemaPath(projectRoot: string): string | null;
|
|
97
|
+
/**
|
|
98
|
+
* Parse schema.prisma file into structured format.
|
|
99
|
+
* Returns null if no schema found.
|
|
100
|
+
* Throws on parse errors so callers can distinguish "no schema" from "bad schema".
|
|
101
|
+
*/
|
|
102
|
+
export declare function parsePrismaSchema(projectRoot: string): PrismaSchemaInfo | null;
|
|
103
|
+
/**
|
|
104
|
+
* Parse schema.prisma from raw content string (for testing / propose_schema_change).
|
|
105
|
+
*/
|
|
106
|
+
export declare function parsePrismaSchemaContent(content: string): PrismaSchemaInfo;
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma schema parser — wraps @mrleebo/prisma-ast to provide a clean typed interface.
|
|
3
|
+
* Schema-aware only: no database connections, no DATABASE_URL parsing.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { getSchema } from '@mrleebo/prisma-ast';
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Zod schemas & types
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export const PrismaFieldSchema = z.object({
|
|
13
|
+
name: z.string(),
|
|
14
|
+
type: z.string(),
|
|
15
|
+
isList: z.boolean(),
|
|
16
|
+
isOptional: z.boolean(),
|
|
17
|
+
isId: z.boolean(),
|
|
18
|
+
isUnique: z.boolean(),
|
|
19
|
+
isRelation: z.boolean(),
|
|
20
|
+
relationName: z.string().nullable(),
|
|
21
|
+
relationFields: z.array(z.string()).default([]),
|
|
22
|
+
relationReferences: z.array(z.string()).default([]),
|
|
23
|
+
defaultValue: z.string().nullable(),
|
|
24
|
+
attributes: z.array(z.string()).default([]),
|
|
25
|
+
});
|
|
26
|
+
export const PrismaModelSchema = z.object({
|
|
27
|
+
name: z.string(),
|
|
28
|
+
fields: z.array(PrismaFieldSchema),
|
|
29
|
+
indexes: z
|
|
30
|
+
.array(z.object({
|
|
31
|
+
fields: z.array(z.string()),
|
|
32
|
+
type: z.enum(['index', 'unique', 'fulltext']),
|
|
33
|
+
name: z.string().nullable(),
|
|
34
|
+
}))
|
|
35
|
+
.default([]),
|
|
36
|
+
documentation: z.string().nullable(),
|
|
37
|
+
});
|
|
38
|
+
export const PrismaEnumSchema = z.object({
|
|
39
|
+
name: z.string(),
|
|
40
|
+
values: z.array(z.string()),
|
|
41
|
+
documentation: z.string().nullable(),
|
|
42
|
+
});
|
|
43
|
+
export const PrismaSchemaInfoSchema = z.object({
|
|
44
|
+
path: z.string(),
|
|
45
|
+
datasourceProvider: z.string().nullable(),
|
|
46
|
+
models: z.array(PrismaModelSchema),
|
|
47
|
+
enums: z.array(PrismaEnumSchema),
|
|
48
|
+
generators: z
|
|
49
|
+
.array(z.object({
|
|
50
|
+
name: z.string(),
|
|
51
|
+
provider: z.string(),
|
|
52
|
+
}))
|
|
53
|
+
.default([]),
|
|
54
|
+
});
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Schema path resolution
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
export function findSchemaPath(projectRoot) {
|
|
59
|
+
const resolvedRoot = path.resolve(projectRoot);
|
|
60
|
+
const candidates = [
|
|
61
|
+
path.join(resolvedRoot, 'prisma', 'schema.prisma'),
|
|
62
|
+
path.join(resolvedRoot, 'schema.prisma'),
|
|
63
|
+
];
|
|
64
|
+
// Verify candidates are within project root (defense in depth)
|
|
65
|
+
return candidates.find((p) => p.startsWith(resolvedRoot) && fs.existsSync(p)) ?? null;
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// AST extraction helpers
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
function extractDatasourceProvider(ast) {
|
|
71
|
+
const ds = ast.list.find((n) => n.type === 'datasource');
|
|
72
|
+
if (!ds)
|
|
73
|
+
return null;
|
|
74
|
+
const providerAssignment = ds.assignments?.find((a) => a.key === 'provider');
|
|
75
|
+
if (!providerAssignment)
|
|
76
|
+
return null;
|
|
77
|
+
const raw = providerAssignment.value;
|
|
78
|
+
if (typeof raw === 'string')
|
|
79
|
+
return raw.replace(/^"|"$/g, '');
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
function extractGenerators(ast) {
|
|
83
|
+
return ast.list
|
|
84
|
+
.filter((n) => n.type === 'generator')
|
|
85
|
+
.map((gen) => {
|
|
86
|
+
const providerAssignment = gen.assignments?.find((a) => a.key === 'provider');
|
|
87
|
+
const raw = providerAssignment?.value ?? '';
|
|
88
|
+
const provider = typeof raw === 'string' ? raw.replace(/^"|"$/g, '') : String(raw);
|
|
89
|
+
return { name: gen.name, provider };
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function extractDefaultValue(attr) {
|
|
93
|
+
if (!attr?.args?.length)
|
|
94
|
+
return null;
|
|
95
|
+
const arg = attr.args[0];
|
|
96
|
+
const val = arg?.value;
|
|
97
|
+
if (!val)
|
|
98
|
+
return null;
|
|
99
|
+
if (typeof val === 'string')
|
|
100
|
+
return val.replace(/^"|"$/g, '');
|
|
101
|
+
if (val.type === 'function') {
|
|
102
|
+
const params = val.params?.map((p) => (typeof p === 'string' ? p.replace(/^"|"$/g, '') : String(p))).join(', ') ?? '';
|
|
103
|
+
return params ? `${val.name}(${params})` : `${val.name}()`;
|
|
104
|
+
}
|
|
105
|
+
return String(val);
|
|
106
|
+
}
|
|
107
|
+
function extractRelationArgs(attr) {
|
|
108
|
+
const result = { fields: [], references: [], name: null };
|
|
109
|
+
if (!attr?.args)
|
|
110
|
+
return result;
|
|
111
|
+
for (const arg of attr.args) {
|
|
112
|
+
const kv = arg?.value;
|
|
113
|
+
if (!kv)
|
|
114
|
+
continue;
|
|
115
|
+
if (kv.type === 'keyValue') {
|
|
116
|
+
if (kv.key === 'fields' && kv.value?.type === 'array') {
|
|
117
|
+
result.fields = (kv.value.args ?? []).map((a) => typeof a === 'string' ? a : String(a));
|
|
118
|
+
}
|
|
119
|
+
else if (kv.key === 'references' && kv.value?.type === 'array') {
|
|
120
|
+
result.references = (kv.value.args ?? []).map((a) => typeof a === 'string' ? a : String(a));
|
|
121
|
+
}
|
|
122
|
+
else if (kv.key === 'name') {
|
|
123
|
+
result.name = typeof kv.value === 'string' ? kv.value.replace(/^"|"$/g, '') : null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (typeof kv === 'string') {
|
|
127
|
+
// positional name argument
|
|
128
|
+
result.name = kv.replace(/^"|"$/g, '');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
function extractField(prop, modelNames) {
|
|
134
|
+
const attrs = [];
|
|
135
|
+
let isId = false;
|
|
136
|
+
let isUnique = false;
|
|
137
|
+
let isRelation = false;
|
|
138
|
+
let relationName = null;
|
|
139
|
+
let relationFields = [];
|
|
140
|
+
let relationReferences = [];
|
|
141
|
+
let defaultValue = null;
|
|
142
|
+
for (const attr of prop.attributes ?? []) {
|
|
143
|
+
if (attr.type !== 'attribute')
|
|
144
|
+
continue;
|
|
145
|
+
const name = attr.name;
|
|
146
|
+
attrs.push(name);
|
|
147
|
+
if (name === 'id')
|
|
148
|
+
isId = true;
|
|
149
|
+
if (name === 'unique')
|
|
150
|
+
isUnique = true;
|
|
151
|
+
if (name === 'default')
|
|
152
|
+
defaultValue = extractDefaultValue(attr);
|
|
153
|
+
if (name === 'relation') {
|
|
154
|
+
const rel = extractRelationArgs(attr);
|
|
155
|
+
relationName = rel.name;
|
|
156
|
+
relationFields = rel.fields;
|
|
157
|
+
relationReferences = rel.references;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// A field is a relation if its type is a known model name
|
|
161
|
+
const fieldType = typeof prop.fieldType === 'string' ? prop.fieldType : String(prop.fieldType ?? '');
|
|
162
|
+
if (modelNames.has(fieldType)) {
|
|
163
|
+
isRelation = true;
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
name: prop.name,
|
|
167
|
+
type: fieldType,
|
|
168
|
+
isList: Boolean(prop.array),
|
|
169
|
+
isOptional: Boolean(prop.optional),
|
|
170
|
+
isId,
|
|
171
|
+
isUnique,
|
|
172
|
+
isRelation,
|
|
173
|
+
relationName,
|
|
174
|
+
relationFields,
|
|
175
|
+
relationReferences,
|
|
176
|
+
defaultValue,
|
|
177
|
+
attributes: attrs,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function extractIndexes(properties) {
|
|
181
|
+
const indexes = [];
|
|
182
|
+
for (const prop of properties) {
|
|
183
|
+
if (prop.type !== 'attribute' || prop.kind !== 'object')
|
|
184
|
+
continue;
|
|
185
|
+
const name = prop.name;
|
|
186
|
+
if (name !== 'index' && name !== 'unique' && name !== 'fulltext')
|
|
187
|
+
continue;
|
|
188
|
+
let fields = [];
|
|
189
|
+
let indexName = null;
|
|
190
|
+
for (const arg of prop.args ?? []) {
|
|
191
|
+
const val = arg?.value;
|
|
192
|
+
if (!val)
|
|
193
|
+
continue;
|
|
194
|
+
if (val.type === 'array') {
|
|
195
|
+
fields = (val.args ?? []).map((a) => typeof a === 'string' ? a : String(a));
|
|
196
|
+
}
|
|
197
|
+
else if (val.type === 'keyValue') {
|
|
198
|
+
if (val.key === 'fields' && val.value?.type === 'array') {
|
|
199
|
+
fields = (val.value.args ?? []).map((a) => typeof a === 'string' ? a : String(a));
|
|
200
|
+
}
|
|
201
|
+
else if (val.key === 'name') {
|
|
202
|
+
indexName = typeof val.value === 'string' ? val.value.replace(/^"|"$/g, '') : null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
indexes.push({ fields, type: name, name: indexName });
|
|
207
|
+
}
|
|
208
|
+
return indexes;
|
|
209
|
+
}
|
|
210
|
+
function extractModels(ast) {
|
|
211
|
+
const modelNodes = ast.list.filter((n) => n.type === 'model');
|
|
212
|
+
const modelNames = new Set(modelNodes.map((m) => m.name));
|
|
213
|
+
return modelNodes.map((model) => {
|
|
214
|
+
const properties = model.properties ?? [];
|
|
215
|
+
const fields = properties
|
|
216
|
+
.filter((p) => p.type === 'field')
|
|
217
|
+
.map((p) => extractField(p, modelNames));
|
|
218
|
+
const indexes = extractIndexes(properties);
|
|
219
|
+
// Extract documentation (/// comments stored as comment nodes before the model)
|
|
220
|
+
const docNode = properties.find((p) => p.type === 'comment' && p.text?.startsWith('///'));
|
|
221
|
+
const documentation = docNode ? docNode.text.replace(/^\/\/\/\s?/, '').trim() : null;
|
|
222
|
+
return { name: model.name, fields, indexes, documentation };
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
function extractEnums(ast) {
|
|
226
|
+
return ast.list
|
|
227
|
+
.filter((n) => n.type === 'enum')
|
|
228
|
+
.map((enumNode) => {
|
|
229
|
+
const values = (enumNode.enumerators ?? [])
|
|
230
|
+
.filter((e) => e.type === 'enumerator')
|
|
231
|
+
.map((e) => e.name);
|
|
232
|
+
return { name: enumNode.name, values, documentation: null };
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// Public API
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
/**
|
|
239
|
+
* Parse schema.prisma file into structured format.
|
|
240
|
+
* Returns null if no schema found.
|
|
241
|
+
* Throws on parse errors so callers can distinguish "no schema" from "bad schema".
|
|
242
|
+
*/
|
|
243
|
+
export function parsePrismaSchema(projectRoot) {
|
|
244
|
+
const schemaPath = findSchemaPath(projectRoot);
|
|
245
|
+
if (!schemaPath)
|
|
246
|
+
return null;
|
|
247
|
+
const content = fs.readFileSync(schemaPath, 'utf-8');
|
|
248
|
+
try {
|
|
249
|
+
const ast = getSchema(content);
|
|
250
|
+
return {
|
|
251
|
+
path: path.relative(projectRoot, schemaPath),
|
|
252
|
+
datasourceProvider: extractDatasourceProvider(ast),
|
|
253
|
+
models: extractModels(ast),
|
|
254
|
+
enums: extractEnums(ast),
|
|
255
|
+
generators: extractGenerators(ast),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
throw new Error(`Failed to parse ${path.relative(projectRoot, schemaPath)}: ${err instanceof Error ? err.message : String(err)}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Parse schema.prisma from raw content string (for testing / propose_schema_change).
|
|
264
|
+
*/
|
|
265
|
+
export function parsePrismaSchemaContent(content) {
|
|
266
|
+
const ast = getSchema(content);
|
|
267
|
+
return {
|
|
268
|
+
path: 'schema.prisma',
|
|
269
|
+
datasourceProvider: extractDatasourceProvider(ast),
|
|
270
|
+
models: extractModels(ast),
|
|
271
|
+
enums: extractEnums(ast),
|
|
272
|
+
generators: extractGenerators(ast),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable terminal rendering of a parsed Prisma schema.
|
|
3
|
+
*/
|
|
4
|
+
import type { PrismaSchemaInfo, PrismaModel } from './schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Render a full schema summary to a string for terminal output.
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderSchemaSummary(info: PrismaSchemaInfo, colorEnabled?: boolean): string;
|
|
9
|
+
/**
|
|
10
|
+
* Render a single model summary (for --model filter).
|
|
11
|
+
*/
|
|
12
|
+
export declare function renderModelSummary(model: PrismaModel, colorEnabled?: boolean): string;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable terminal rendering of a parsed Prisma schema.
|
|
3
|
+
*/
|
|
4
|
+
import pc from 'picocolors';
|
|
5
|
+
import Table from 'cli-table3';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Field rendering helpers
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
function fieldTypeLabel(field) {
|
|
10
|
+
const base = field.type;
|
|
11
|
+
const suffix = field.isList ? '[]' : field.isOptional ? '?' : '';
|
|
12
|
+
return base + suffix;
|
|
13
|
+
}
|
|
14
|
+
function fieldModifiers(field) {
|
|
15
|
+
const mods = [];
|
|
16
|
+
if (field.isId)
|
|
17
|
+
mods.push('@id');
|
|
18
|
+
if (field.isUnique)
|
|
19
|
+
mods.push('@unique');
|
|
20
|
+
if (field.defaultValue !== null)
|
|
21
|
+
mods.push(`@default(${field.defaultValue})`);
|
|
22
|
+
if (field.isRelation)
|
|
23
|
+
mods.push('relation');
|
|
24
|
+
return mods.join(' ');
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Model rendering
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
function renderModel(model, colorEnabled) {
|
|
30
|
+
const lines = [];
|
|
31
|
+
const name = colorEnabled ? pc.bold(pc.cyan(model.name)) : model.name;
|
|
32
|
+
lines.push(` ${name}`);
|
|
33
|
+
if (model.documentation) {
|
|
34
|
+
lines.push(` ${colorEnabled ? pc.dim(model.documentation) : model.documentation}`);
|
|
35
|
+
}
|
|
36
|
+
// Fields table
|
|
37
|
+
const table = new Table({
|
|
38
|
+
head: ['Field', 'Type', 'Modifiers'].map((h) => (colorEnabled ? pc.bold(h) : h)),
|
|
39
|
+
style: { head: [], border: [] },
|
|
40
|
+
chars: {
|
|
41
|
+
top: '─',
|
|
42
|
+
'top-mid': '┬',
|
|
43
|
+
'top-left': '┌',
|
|
44
|
+
'top-right': '┐',
|
|
45
|
+
bottom: '─',
|
|
46
|
+
'bottom-mid': '┴',
|
|
47
|
+
'bottom-left': '└',
|
|
48
|
+
'bottom-right': '┘',
|
|
49
|
+
left: '│',
|
|
50
|
+
'left-mid': '├',
|
|
51
|
+
mid: '─',
|
|
52
|
+
'mid-mid': '┼',
|
|
53
|
+
right: '│',
|
|
54
|
+
'right-mid': '┤',
|
|
55
|
+
middle: '│',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
for (const field of model.fields) {
|
|
59
|
+
const typeStr = fieldTypeLabel(field);
|
|
60
|
+
const mods = fieldModifiers(field);
|
|
61
|
+
table.push([
|
|
62
|
+
colorEnabled && field.isId ? pc.yellow(field.name) : field.name,
|
|
63
|
+
colorEnabled && field.isRelation ? pc.magenta(typeStr) : typeStr,
|
|
64
|
+
colorEnabled ? pc.dim(mods) : mods,
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
// Indent table lines
|
|
68
|
+
const tableStr = table.toString();
|
|
69
|
+
for (const line of tableStr.split('\n')) {
|
|
70
|
+
lines.push(' ' + line);
|
|
71
|
+
}
|
|
72
|
+
// Indexes
|
|
73
|
+
if (model.indexes.length > 0) {
|
|
74
|
+
const indexStr = model.indexes
|
|
75
|
+
.map((idx) => {
|
|
76
|
+
const label = idx.type === 'unique' ? '@@unique' : idx.type === 'fulltext' ? '@@fulltext' : '@@index';
|
|
77
|
+
return `${label}([${idx.fields.join(', ')}])${idx.name ? ` "${idx.name}"` : ''}`;
|
|
78
|
+
})
|
|
79
|
+
.join(', ');
|
|
80
|
+
const prefix = colorEnabled ? pc.dim('Indexes:') : 'Indexes:';
|
|
81
|
+
lines.push(` ${prefix} ${indexStr}`);
|
|
82
|
+
}
|
|
83
|
+
return lines.join('\n');
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Public API
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
/**
|
|
89
|
+
* Render a full schema summary to a string for terminal output.
|
|
90
|
+
*/
|
|
91
|
+
export function renderSchemaSummary(info, colorEnabled = true) {
|
|
92
|
+
const lines = [];
|
|
93
|
+
const header = colorEnabled
|
|
94
|
+
? pc.bold(`Prisma Schema: ${info.path}`)
|
|
95
|
+
: `Prisma Schema: ${info.path}`;
|
|
96
|
+
lines.push(header);
|
|
97
|
+
if (info.datasourceProvider) {
|
|
98
|
+
const providerLine = colorEnabled
|
|
99
|
+
? pc.dim(`Provider: ${info.datasourceProvider}`)
|
|
100
|
+
: `Provider: ${info.datasourceProvider}`;
|
|
101
|
+
lines.push(providerLine);
|
|
102
|
+
}
|
|
103
|
+
lines.push('');
|
|
104
|
+
// Models
|
|
105
|
+
const modelsHeader = colorEnabled
|
|
106
|
+
? pc.bold(`Models (${info.models.length})`)
|
|
107
|
+
: `Models (${info.models.length})`;
|
|
108
|
+
lines.push(modelsHeader);
|
|
109
|
+
for (const model of info.models) {
|
|
110
|
+
lines.push('');
|
|
111
|
+
lines.push(renderModel(model, colorEnabled));
|
|
112
|
+
}
|
|
113
|
+
// Enums
|
|
114
|
+
if (info.enums.length > 0) {
|
|
115
|
+
lines.push('');
|
|
116
|
+
const enumsHeader = colorEnabled
|
|
117
|
+
? pc.bold(`Enums (${info.enums.length})`)
|
|
118
|
+
: `Enums (${info.enums.length})`;
|
|
119
|
+
lines.push(enumsHeader);
|
|
120
|
+
for (const enumDef of info.enums) {
|
|
121
|
+
const enumName = colorEnabled ? pc.cyan(enumDef.name) : enumDef.name;
|
|
122
|
+
lines.push(` ${enumName}: ${enumDef.values.join(', ')}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return lines.join('\n');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Render a single model summary (for --model filter).
|
|
129
|
+
*/
|
|
130
|
+
export function renderModelSummary(model, colorEnabled = true) {
|
|
131
|
+
return renderModel(model, colorEnabled);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/db/summary.ts"],"names":[],"mappings":"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"}
|